Name: series-workflowsx85t Phase: Succeeded StartedAt: 2026-09-12 09:06:07 +0000 UTC FinishedAt: 2026-09-12 09:59:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsx85t[0] Phase: Succeeded StartedAt: 2026-09-12 09:06:07 +0000 UTC FinishedAt: 2026-09-12 09:10:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsx85t[0].run-triage Phase: Succeeded StartedAt: 2026-09-12 09:06:07 +0000 UTC FinishedAt: 2026-09-12 09:10:22 +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": "50d05c7c76c96b90462f24debacca971d2e86713", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VIRTIO_BLK", "VIRTIO_PCI", "PM_SLEEP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "50d05c7c76c96b90462f24debacca971d2e86713", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VIRTIO_BLK", "VIRTIO_PCI", "PM_SLEEP" ], "series_id": "06d09dac-14d4-4fc8-8dd0-ee292b9f35c9" }, "track": "KASAN", "fuzz": { "focus": [ "fs", "kvm" ], "focus_symbols": [ "virtblk_freeze_priv", "virtblk_reset_prepare", "virtblk_freeze" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "", "base_commit": "50d05c7c76c96b90462f24debacca971d2e86713", "base_tree": "axboe" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA5OjA4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZJUlRJT19CTEsmIzM0OywKICAgICYjMzQ7VklSVElPX1BDSSYjMzQ7LAogICAgJiMzNDtQTV9TTEVFUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3ZpcnRibGtfZnJlZXplX3ByaXYmIzM0OywKICAgICYjMzQ7dmlydGJsa19yZXNldF9wcmVwYXJlJiMzNDssCiAgICAmIzM0O3ZpcnRibGtfZnJlZXplJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVwbGFjZXMgYmxrX21xX3F1aWVzY2VfcXVldWVfbm93YWl0KHEpIHdpdGggYmxrX21xX3F1aWVzY2VfcXVldWUocSkgaW4gdmlydGJsa19mcmVlemVfcHJpdigpIHRvIGVuc3VyZSB0aGF0IGluLWZsaWdodCByZXF1ZXN0cyBhbmQgaGFuZGxlcnMgZmluaXNoIGJlZm9yZSB0aGUgdmlydHF1ZXVlcyBhcmUgZGVsZXRlZCBhbmQgZnJlZWQuXG5cbktNU0FOIHZzIEtBU0FOIEFwcGxpY2FiaWxpdHk6XG4tIEtNU0FOIGRldGVjdHMgcmVhZHMgYW5kIGluZm9ybWF0aW9uIGxlYWtzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGlzIHBhdGNoIGRvZXMgbm90IGFsbG9jYXRlIG5ldyBtZW1vcnksIGluaXRpYWxpemUgb3IgcmVhZCB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMsIGNvcHkgZGF0YSB0byB1c2VyIHNwYWNlLCBvciBhbHRlciBkYXRhIGxlbmd0aC9ib3VuZHMgY2FsY3VsYXRpb25zLiBUaGVyZSBpcyB6ZXJvIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UuXG4tIFRoZSBjaGFuZ2UgYWRkcmVzc2VzIHJlcXVlc3QtcXVldWUgc3luY2hyb25pemF0aW9uIGFuZCBjb25jdXJyZW5jeSBkdXJpbmcgdmlydGlvLWJsayBkZXZpY2UgZnJlZXppbmcuIEFueSBidWdzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHBhdGggKHN1Y2ggYXMgcmFjZSBjb25kaXRpb25zLCBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGFjY2Vzc2VzIGR1cmluZyBxdWV1ZSB0ZWFyZG93bikgYXJlIHRyYWNrZWQgYW5kIGNhdWdodCBieSBLQVNBTiBhbmQgTE9DS0RFUC5cblxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdmlydGJsa19mcmVlemVfcHJpdigpIGluIHRoZSB2aXJ0aW8gYmxvY2sgZHJpdmVyIChkcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYykgdG8gdXNlIGJsa19tcV9xdWllc2NlX3F1ZXVlKCkgaW5zdGVhZCBvZiBibGtfbXFfcXVpZXNjZV9xdWV1ZV9ub3dhaXQoKSwgZW5zdXJpbmcgdGhhdCBhbGwgcGVuZGluZyByZXF1ZXN0IGRpc3BhdGNoZXMgY29tcGxldGUgYmVmb3JlIGRlbGV0aW5nIHZpcnRxdWV1ZXMuIFZpcnRpbyBibG9jayBkZXZpY2VzIGFyZSBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIHZpcnR1YWxpemVkIHRlc3QgZW52aXJvbm1lbnRzIGFuZCB0aGlzIHBhdGggaXMgcmVhY2hhYmxlIHZpYSBQQ0kgcmVzZXQgKHZpcnRibGtfcmVzZXRfcHJlcGFyZSkgb3IgcG93ZXIgbWFuYWdlbWVudCBzdXNwZW5kICh2aXJ0YmxrX2ZyZWV6ZSkuIFNpbmNlIHRoZSBwYXRjaCBtb2RpZmllcyByZWFjaGFibGUgZHJpdmVyIGxvZ2ljIG9uIGEgdmlydHVhbCBidXMsIGl0IGlzIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDk6MDg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBlYTYxYzU3N2UxMzcxYTA2ZGMzOTBhM2NhNmIzMjFmMDVhNjc0MjM0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBTZXAgMTIgMDk6MDg6MDUgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmMgYi9kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuY1xuaW5kZXggMzJiZjNiYTA3YTlkYy4uN2E1NzA1OTFlMDQwYSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuY1xuQEAgLTE1OTUsNyAmIzQzOzE1OTUsNyBAQCBzdGF0aWMgaW50IHZpcnRibGtfZnJlZXplX3ByaXYoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpXG4gXG4gXHQvKiBFbnN1cmUgbm8gcmVxdWVzdHMgaW4gdmlydHF1ZXVlcyBiZWZvcmUgZGVsZXRpbmcgdnFzLiAqL1xuIFx0bWVtZmxhZ3MgPSBibGtfbXFfZnJlZXplX3F1ZXVlKHEpO1xuLVx0YmxrX21xX3F1aWVzY2VfcXVldWVfbm93YWl0KHEpO1xuJiM0MztcdGJsa19tcV9xdWllc2NlX3F1ZXVlKHEpO1xuIFx0YmxrX21xX3VuZnJlZXplX3F1ZXVlKHEsIG1lbWZsYWdzKTtcbiBcbiBcdC8qIEVuc3VyZSB3ZSBkb24mIzM5O3QgcmVjZWl2ZSBhbnkgbW9yZSBpbnRlcnJ1cHRzICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDk6MDg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VklSVElPX0JMSyYjMzQ7LAogICAgJiMzNDtWSVJUSU9fUENJJiMzNDssCiAgICAmIzM0O1BNX1NMRUVQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dmlydGJsa19mcmVlemVfcHJpdiYjMzQ7LAogICAgJiMzNDt2aXJ0YmxrX3Jlc2V0X3ByZXBhcmUmIzM0OywKICAgICYjMzQ7dmlydGJsa19mcmVlemUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdmlydGJsa19mcmVlemVfcHJpdigpIGluIHRoZSB2aXJ0aW8gYmxvY2sgZHJpdmVyIChkcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYykgdG8gdXNlIGJsa19tcV9xdWllc2NlX3F1ZXVlKCkgaW5zdGVhZCBvZiBibGtfbXFfcXVpZXNjZV9xdWV1ZV9ub3dhaXQoKSwgZW5zdXJpbmcgdGhhdCBhbGwgcGVuZGluZyByZXF1ZXN0IGRpc3BhdGNoZXMgY29tcGxldGUgYmVmb3JlIGRlbGV0aW5nIHZpcnRxdWV1ZXMuIFZpcnRpbyBibG9jayBkZXZpY2VzIGFyZSBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIHZpcnR1YWxpemVkIHRlc3QgZW52aXJvbm1lbnRzIGFuZCB0aGlzIHBhdGggaXMgcmVhY2hhYmxlIHZpYSBQQ0kgcmVzZXQgKHZpcnRibGtfcmVzZXRfcHJlcGFyZSkgb3IgcG93ZXIgbWFuYWdlbWVudCBzdXNwZW5kICh2aXJ0YmxrX2ZyZWV6ZSkuIFNpbmNlIHRoZSBwYXRjaCBtb2RpZmllcyByZWFjaGFibGUgZHJpdmVyIGxvZ2ljIG9uIGEgdmlydHVhbCBidXMsIGl0IGlzIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBlYTYxYzU3N2UxMzcxYTA2ZGMzOTBhM2NhNmIzMjFmMDVhNjc0MjM0CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBTZXAgMTIgMDk6MDg6MDUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYyBiL2RyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jCmluZGV4IDMyYmYzYmEwN2E5ZGMuLjdhNTcwNTkxZTA0MGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jCkBAIC0xNTk1LDcgJiM0MzsxNTk1LDcgQEAgc3RhdGljIGludCB2aXJ0YmxrX2ZyZWV6ZV9wcml2KHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KQogCiAJLyogRW5zdXJlIG5vIHJlcXVlc3RzIGluIHZpcnRxdWV1ZXMgYmVmb3JlIGRlbGV0aW5nIHZxcy4gKi8KIAltZW1mbGFncyA9IGJsa19tcV9mcmVlemVfcXVldWUocSk7Ci0JYmxrX21xX3F1aWVzY2VfcXVldWVfbm93YWl0KHEpOwomIzQzOwlibGtfbXFfcXVpZXNjZV9xdWV1ZShxKTsKIAlibGtfbXFfdW5mcmVlemVfcXVldWUocSwgbWVtZmxhZ3MpOwogCiAJLyogRW5zdXJlIHdlIGRvbiYjMzk7dCByZWNlaXZlIGFueSBtb3JlIGludGVycnVwdHMgKi8KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDk6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg4OQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI5MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBWaXJ0aW8gQmxvY2sgRGV2aWNlIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlLCBwYXJ0aWN1bGFybHkgd2l0aGluIHRoZSBgdmlydGlvX2Jsay5jYCBkcml2ZXIuICBUaGUgY29udGV4dCB0ZWxscyBtZSB0aGlzIGlzIHJlbGF0ZWQgdG8gZnJlZXppbmcgYW5kIHVuZnJlZXppbmcgdGhlIGJsb2NrIHF1ZXVlLCBsaWtlbHkgZm9yIHN1c3BlbmQvcmVzdW1lIG9yIGhvdHBsdWcgb3BlcmF0aW9ucy4gIFNwZWNpZmljYWxseSwgaXQgc2VlbXMgdG8gbW9kaWZ5IHRoZSBiZWhhdmlvciBhcm91bmQgcXVpZXNjaW5nIHRoZSBxdWV1ZSBkdXJpbmcgdGhlIGB2aXJ0YmxrX2ZyZWV6ZV9wcml2YCBmdW5jdGlvbi4gIFRoZSBkaWZmIHNob3dzIGEgY2hhbmdlIGZyb20gYGJsa19tcV9xdWllc2NlX3F1ZXVlX25vd2FpdGAgdG8gYGJsa19tcV9xdWllc2NlX3F1ZXVlYC4gSW50ZXJlc3RpbmcuIEkga25vdyBib3RoIG9mIHRob3NlIGZ1bmN0aW9ucywgc28gSSBhbHJlYWR5IGhhdmUgc29tZSBpZGVhcyBvbiB0aGUgaW1wYWN0LiBUaGUgYG5vd2FpdGAgdmVyc2lvbiBpcyBhc3luY2hyb25vdXM7IHRoaXMgbWlnaHQgYmUgYSBzdWJ0bGUgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uIGJlaW5nIHRyYWRlZCBmb3IgZ3VhcmFudGVlZCBjb21wbGV0aW9uIGJlZm9yZSBjb250aW51aW5nLiBMZXQgbWUgaW5zcGVjdCB0aGUgYXJlYSBhcm91bmQgbGluZSAxNTk1IGluIHRoZSBzb3VyY2UgY29kZSB1c2luZyBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgdG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB0aGlzIGNoYW5nZSB3YXMgbWFkZSBhbmQgdGhlIHBvdGVudGlhbCBpbXBhY3Qgb24gcmVxdWVzdCBjb21wbGV0aW9uIHRpbWluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAwOTowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTU4NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNTg1Olx0XHRtdXRleF91bmxvY2soXHUwMDI2dmJsay1cdTAwM2V2ZGV2X211dGV4KTtcbjE1ODY6XHRcbjE1ODc6XHRcdHB1dF9kaXNrKHZibGstXHUwMDNlZGlzayk7XG4xNTg4Olx0fVxuMTU4OTpcdFxuMTU5MDpcdHN0YXRpYyBpbnQgdmlydGJsa19mcmVlemVfcHJpdihzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldilcbjE1OTE6XHR7XG4xNTkyOlx0XHRzdHJ1Y3QgdmlydGlvX2JsayAqdmJsayA9IHZkZXYtXHUwMDNlcHJpdjtcbjE1OTM6XHRcdHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxID0gdmJsay1cdTAwM2VkaXNrLVx1MDAzZXF1ZXVlO1xuMTU5NDpcdFx0dW5zaWduZWQgaW50IG1lbWZsYWdzO1xuMTU5NTpcdFxuMTU5NjpcdFx0LyogRW5zdXJlIG5vIHJlcXVlc3RzIGluIHZpcnRxdWV1ZXMgYmVmb3JlIGRlbGV0aW5nIHZxcy4gKi9cbjE1OTc6XHRcdG1lbWZsYWdzID0gYmxrX21xX2ZyZWV6ZV9xdWV1ZShxKTtcbjE1OTg6XHRcdGJsa19tcV9xdWllc2NlX3F1ZXVlKHEpO1xuMTU5OTpcdFx0YmxrX21xX3VuZnJlZXplX3F1ZXVlKHEsIG1lbWZsYWdzKTtcbjE2MDA6XHRcbjE2MDE6XHRcdC8qIEVuc3VyZSB3ZSBkb24mIzM5O3QgcmVjZWl2ZSBhbnkgbW9yZSBpbnRlcnJ1cHRzICovXG4xNjAyOlx0XHR2aXJ0aW9fcmVzZXRfZGV2aWNlKHZkZXYpO1xuMTYwMzpcdFxuMTYwNDpcdFx0LyogTWFrZSBzdXJlIG5vIHdvcmsgaGFuZGxlciBpcyBhY2Nlc3NpbmcgdGhlIGRldmljZS4gKi9cbjE2MDU6XHRcdGZsdXNoX3dvcmsoXHUwMDI2dmJsay1cdTAwM2Vjb25maWdfd29yayk7XG4xNjA2Olx0XG4xNjA3Olx0XHR2ZGV2LVx1MDAzZWNvbmZpZy1cdTAwM2VkZWxfdnFzKHZkZXYpO1xuMTYwODpcdFx0a2ZyZWUodmJsay1cdTAwM2V2cXMpO1xuMTYwOTpcdFx0LypcbjE2MTA6XHRcdCAqIFNldCB0byBOVUxMIHRvIHByZXZlbnQgZnJlZWluZyB2cXMgYWdhaW4gYWZ0ZXIgYSBmYWlsZWQgdnFzXG4xNjExOlx0XHQgKiBhbGxvY2F0aW9uIGR1cmluZyByZXN1bWUuIE5vdGUgdGhhdCBrZnJlZSgpIGFscmVhZHkgaGFuZGxlcyBOVUxMXG4xNjEyOlx0XHQgKiBwb2ludGVycyBzYWZlbHkuXG4xNjEzOlx0XHQgKi9cbjE2MTQ6XHRcdHZibGstXHUwMDNldnFzID0gTlVMTDtcbjE2MTU6XHRcbjE2MTY6XHRcdHJldHVybiAwO1xuMTYxNzpcdH1cbjE2MTg6XHRcbjE2MTk6XHRzdGF0aWMgaW50IHZpcnRibGtfcmVzdG9yZV9wcml2KHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KVxuMTYyMDpcdHtcbjE2MjE6XHRcdHN0cnVjdCB2aXJ0aW9fYmxrICp2YmxrID0gdmRldi1cdTAwM2Vwcml2O1xuMTYyMjpcdFx0aW50IHJldDtcbjE2MjM6XHRcbjE2MjQ6XHRcdHJldCA9IGluaXRfdnEodmRldi1cdTAwM2Vwcml2KTtcbjE2MjU6XHRcdGlmIChyZXQpXG4xNjI2Olx0XHRcdHJldHVybiByZXQ7XG4xNjI3Olx0XG4xNjI4Olx0XHR2aXJ0aW9fZGV2aWNlX3JlYWR5KHZkZXYpO1xuMTYyOTpcdFx0YmxrX21xX3VucXVpZXNjZV9xdWV1ZSh2YmxrLVx1MDAzZWRpc2stXHUwMDNlcXVldWUpO1xuMTYzMDpcdFxuMTYzMTpcdFx0cmV0dXJuIDA7XG4xNjMyOlx0fVxuMTYzMzpcdFxuMTYzNDpcdCNpZmRlZiBDT05GSUdfUE1fU0xFRVBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAwOTowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTQ2CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBgdmlydGJsa19mcmVlemVfcHJpdmAgaW4gYHZpcnRpb19ibGsuY2AqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHVzYWdlIG9mIGB2aXJ0YmxrX2ZyZWV6ZV9wcml2YC4gTGV0JiMzOTtzIGdldCByaWdodCB0byBpdC4gSSYjMzk7bSBnb2luZyB0byBqdW1wIGludG8gYHZpcnRpb19ibGsuY2AgYW5kIHRha2UgYSBsb29rIGF0IHdoZXJlIHRoYXQgZnVuY3Rpb24gaXMgYWN0dWFsbHkgYmVpbmcgKnVzZWQqLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZ29pbmcgdG8gZm9jdXMgb24gbGluZXMgMTYzMCB0aHJvdWdoIDE3MDAuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGNvbnRleHQgd2luZG93IHRvIHNlZSBob3cgaXQmIzM5O3MgYmVpbmcgY2FsbGVkIGFuZCB3aGF0IHN1cnJvdW5kaW5nIGxvZ2ljIGlzIGluIHBsYXkuIEhvcGVmdWxseSwgdGhhdCBnaXZlcyBtZSBhIGNsZWFyIHBpY3R1cmUgb2YgaXRzIHJvbGUgd2l0aGluIHRoZSBibG9jayBkZXZpY2UgZHJpdmVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA5OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNjM0LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE2MzQ6XHQjaWZkZWYgQ09ORklHX1BNX1NMRUVQXG4xNjM1Olx0c3RhdGljIGludCB2aXJ0YmxrX2ZyZWV6ZShzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldilcbjE2MzY6XHR7XG4xNjM3Olx0XHRyZXR1cm4gdmlydGJsa19mcmVlemVfcHJpdih2ZGV2KTtcbjE2Mzg6XHR9XG4xNjM5Olx0XG4xNjQwOlx0c3RhdGljIGludCB2aXJ0YmxrX3Jlc3RvcmUoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpXG4xNjQxOlx0e1xuMTY0MjpcdFx0cmV0dXJuIHZpcnRibGtfcmVzdG9yZV9wcml2KHZkZXYpO1xuMTY0MzpcdH1cbjE2NDQ6XHQjZW5kaWZcbjE2NDU6XHRcbjE2NDY6XHRzdGF0aWMgaW50IHZpcnRibGtfcmVzZXRfcHJlcGFyZShzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldilcbjE2NDc6XHR7XG4xNjQ4Olx0XHRyZXR1cm4gdmlydGJsa19mcmVlemVfcHJpdih2ZGV2KTtcbjE2NDk6XHR9XG4xNjUwOlx0XG4xNjUxOlx0c3RhdGljIGludCB2aXJ0YmxrX3Jlc2V0X2RvbmUoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpXG4xNjUyOlx0e1xuMTY1MzpcdFx0cmV0dXJuIHZpcnRibGtfcmVzdG9yZV9wcml2KHZkZXYpO1xuMTY1NDpcdH1cbjE2NTU6XHRcbjE2NTY6XHRzdGF0aWMgY29uc3Qgc3RydWN0IHZpcnRpb19kZXZpY2VfaWQgaWRfdGFibGVbXSA9IHtcbjE2NTc6XHRcdHsgVklSVElPX0lEX0JMT0NLLCBWSVJUSU9fREVWX0FOWV9JRCB9LFxuMTY1ODpcdFx0eyAwIH0sXG4xNjU5Olx0fTtcbjE2NjA6XHRcbjE2NjE6XHRzdGF0aWMgdW5zaWduZWQgaW50IGZlYXR1cmVzX2xlZ2FjeVtdID0ge1xuMTY2MjpcdFx0VklSVElPX0JMS19GX1NFR19NQVgsIFZJUlRJT19CTEtfRl9TSVpFX01BWCwgVklSVElPX0JMS19GX0dFT01FVFJZLFxuMTY2MzpcdFx0VklSVElPX0JMS19GX1JPLCBWSVJUSU9fQkxLX0ZfQkxLX1NJWkUsXG4xNjY0Olx0XHRWSVJUSU9fQkxLX0ZfRkxVU0gsIFZJUlRJT19CTEtfRl9UT1BPTE9HWSwgVklSVElPX0JMS19GX0NPTkZJR19XQ0UsXG4xNjY1Olx0XHRWSVJUSU9fQkxLX0ZfTVEsIFZJUlRJT19CTEtfRl9ESVNDQVJELCBWSVJUSU9fQkxLX0ZfV1JJVEVfWkVST0VTLFxuMTY2NjpcdFx0VklSVElPX0JMS19GX1NFQ1VSRV9FUkFTRSxcbjE2Njc6XHR9XG4xNjY4Olx0O1xuMTY2OTpcdHN0YXRpYyB1bnNpZ25lZCBpbnQgZmVhdHVyZXNbXSA9IHtcbjE2NzA6XHRcdFZJUlRJT19CTEtfRl9TRUdfTUFYLCBWSVJUSU9fQkxLX0ZfU0laRV9NQVgsIFZJUlRJT19CTEtfRl9HRU9NRVRSWSxcbjE2NzE6XHRcdFZJUlRJT19CTEtfRl9STywgVklSVElPX0JMS19GX0JMS19TSVpFLFxuMTY3MjpcdFx0VklSVElPX0JMS19GX0ZMVVNILCBWSVJUSU9fQkxLX0ZfVE9QT0xPR1ksIFZJUlRJT19CTEtfRl9DT05GSUdfV0NFLFxuMTY3MzpcdFx0VklSVElPX0JMS19GX01RLCBWSVJUSU9fQkxLX0ZfRElTQ0FSRCwgVklSVElPX0JMS19GX1dSSVRFX1pFUk9FUyxcbjE2NzQ6XHRcdFZJUlRJT19CTEtfRl9TRUNVUkVfRVJBU0UsIFZJUlRJT19CTEtfRl9aT05FRCxcbjE2NzU6XHR9O1xuMTY3NjpcdFxuMTY3NzpcdHN0YXRpYyBzdHJ1Y3QgdmlydGlvX2RyaXZlciB2aXJ0aW9fYmxrID0ge1xuMTY3ODpcdFx0LmZlYXR1cmVfdGFibGVcdFx0XHQ9IGZlYXR1cmVzLFxuMTY3OTpcdFx0LmZlYXR1cmVfdGFibGVfc2l6ZVx0XHQ9IEFSUkFZX1NJWkUoZmVhdHVyZXMpLFxuMTY4MDpcdFx0LmZlYXR1cmVfdGFibGVfbGVnYWN5XHRcdD0gZmVhdHVyZXNfbGVnYWN5LFxuMTY4MTpcdFx0LmZlYXR1cmVfdGFibGVfc2l6ZV9sZWdhY3lcdD0gQVJSQVlfU0laRShmZWF0dXJlc19sZWdhY3kpLFxuMTY4MjpcdFx0LmRyaXZlci5uYW1lXHRcdFx0PSBLQlVJTERfTU9ETkFNRSxcbjE2ODM6XHRcdC5pZF90YWJsZVx0XHRcdD0gaWRfdGFibGUsXG4xNjg0Olx0XHQucHJvYmVcdFx0XHRcdD0gdmlydGJsa19wcm9iZSxcbjE2ODU6XHRcdC5yZW1vdmVcdFx0XHRcdD0gdmlydGJsa19yZW1vdmUsXG4xNjg2Olx0XHQuY29uZmlnX2NoYW5nZWRcdFx0XHQ9IHZpcnRibGtfY29uZmlnX2NoYW5nZWQsXG4xNjg3Olx0I2lmZGVmIENPTkZJR19QTV9TTEVFUFxuMTY4ODpcdFx0LmZyZWV6ZVx0XHRcdFx0PSB2aXJ0YmxrX2ZyZWV6ZSxcbjE2ODk6XHRcdC5yZXN0b3JlXHRcdFx0PSB2aXJ0YmxrX3Jlc3RvcmUsXG4xNjkwOlx0I2VuZGlmXG4xNjkxOlx0XHQucmVzZXRfcHJlcGFyZVx0XHRcdD0gdmlydGJsa19yZXNldF9wcmVwYXJlLFxuMTY5MjpcdFx0LnJlc2V0X2RvbmVcdFx0XHQ9IHZpcnRibGtfcmVzZXRfZG9uZSxcbjE2OTM6XHR9O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA5OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0NjMKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHVuZGVyc3RhbmRpbmcgYHZpcnRibGtfZnJlZXplX3ByaXZgIGFuZCBpdHMgaW50ZXJhY3Rpb25zIHdpdGhpbiB0aGUgdmlydGlvIHN1YnN5c3RlbToKCioqRGVjb25zdHJ1Y3RpbmcgdmlydGJsa19mcmVlemVfcHJpdiBhbmQgSXRzIFJvbGUqKgoKQWxyaWdodCwgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB3aGF0IHRoaXMgYHZpcnRibGtfZnJlZXplX3ByaXZgIGZ1bmN0aW9uIGFjdHVhbGx5ICpkb2VzKi4gTXkgZmlyc3QgbW92ZSBpcyB0byB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlIGFuZCBiZWhhdmlvci4gVGhlbiwgSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIGl0JiMzOTtzIGJlaW5nIGNhbGxlZC4gSSYjMzk7bGwgbmVlZCB0byB0cmFjZSBpdHMgY29ubmVjdGlvbnMgd2l0aGluIHRoZSB2aXJ0aW8gc3Vic3lzdGVtLiBJ4oCZbGwgc3RhcnQgYnkgaW52ZXN0aWdhdGluZyB0aGUgY2FsbHNpdGVzIG9mIGAuZnJlZXplYCwgYC5yZXNldF9wcmVwYXJlYCwgYW5kIHNpbWlsYXIgcmVsYXRlZCBmdW5jdGlvbnMuIEZvciB0aGF0LCBJJiMzOTttIGRlZmluaXRlbHkgcmVhY2hpbmcgZm9yIGBncmVwcGVyYCDigJMgdGhhdCYjMzk7cyB0aGUgZmFzdGVzdCB3YXkgdG8gZ2V0IGEgc29saWQgbGlzdCBvZiBwb3RlbnRpYWwgY2FsbCBwYXRocy4gSSYjMzk7bGwgbmVlZCB0byBnZXQgYSBoaWdoLWxldmVsIHZpZXcgb2YgaG93IHRoaXMgZnJlZXplL3Jlc2V0IGZ1bmN0aW9uYWxpdHkgZml0cyBpbnRvIHRoZSBiaWdnZXIgcGljdHVyZSBvZiBibG9jayBkZXZpY2Ugb3BlcmF0aW9uIHdpdGhpbiB2aXJ0aW8uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDk6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XFxicmVzZXRfcHJlcGFyZVxcYiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvY29tbW9uL2hhYmFuYWxhYnNfZHJ2LmM9NzE0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2Vycm9yX2hhbmRsZXJzIGhsX3BjaV9lcnJfaGFuZGxlciA9IHtcbi0tXG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvY29tbW9uL2hhYmFuYWxhYnNfZHJ2LmMtNzE3LVx0LnJlc3VtZSA9IGhsX3BjaV9lcnJfcmVzdW1lLFxuZHJpdmVycy9hY2NlbC9oYWJhbmFsYWJzL2NvbW1vbi9oYWJhbmFsYWJzX2Rydi5jOjcxODpcdC5yZXNldF9wcmVwYXJlID0gaGxfcGNpX3Jlc2V0X3ByZXBhcmUsXG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvY29tbW9uL2hhYmFuYWxhYnNfZHJ2LmMtNzE5LVx0LnJlc2V0X2RvbmUgPSBobF9wY2lfcmVzZXRfZG9uZSxcbi0tXG5kcml2ZXJzL2FjY2VsL2l2cHUvaXZwdV9kcnYuYz04OTI9c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZXJyb3JfaGFuZGxlcnMgaXZwdV9kcnZfcGNpX2VyciA9IHtcbmRyaXZlcnMvYWNjZWwvaXZwdS9pdnB1X2Rydi5jOjg5MzpcdC5yZXNldF9wcmVwYXJlID0gaXZwdV9wbV9yZXNldF9wcmVwYXJlX2NiLFxuZHJpdmVycy9hY2NlbC9pdnB1L2l2cHVfZHJ2LmMtODk0LVx0LnJlc2V0X2RvbmUgPSBpdnB1X3BtX3Jlc2V0X2RvbmVfY2IsXG4tLVxuZHJpdmVycy9hY2NlbC9xYWljL3FhaWNfZHJ2LmM9NjcyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2Vycm9yX2hhbmRsZXJzIHFhaWNfcGNpX2Vycl9oYW5kbGVyID0ge1xuZHJpdmVycy9hY2NlbC9xYWljL3FhaWNfZHJ2LmMtNjczLVx0LmVycm9yX2RldGVjdGVkID0gcWFpY19wY2lfZXJyb3JfZGV0ZWN0ZWQsXG5kcml2ZXJzL2FjY2VsL3FhaWMvcWFpY19kcnYuYzo2NzQ6XHQucmVzZXRfcHJlcGFyZSA9IHFhaWNfcGNpX3Jlc2V0X3ByZXBhcmUsXG5kcml2ZXJzL2FjY2VsL3FhaWMvcWFpY19kcnYuYy02NzUtXHQucmVzZXRfZG9uZSA9IHFhaWNfcGNpX3Jlc2V0X2RvbmUsXG4tLVxuZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmM9MTY3Nz1zdGF0aWMgc3RydWN0IHZpcnRpb19kcml2ZXIgdmlydGlvX2JsayA9IHtcbi0tXG5kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYy0xNjkwLSNlbmRpZlxuZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmM6MTY5MTpcdC5yZXNldF9wcmVwYXJlXHRcdFx0PSB2aXJ0YmxrX3Jlc2V0X3ByZXBhcmUsXG5kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYy0xNjkyLVx0LnJlc2V0X2RvbmVcdFx0XHQ9IHZpcnRibGtfcmVzZXRfZG9uZSxcbi0tXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wY2lfZ2VuZXJpYy5jPTE2MTY9c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZXJyb3JfaGFuZGxlcnMgbWhpX3BjaV9lcnJfaGFuZGxlciA9IHtcbi0tXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wY2lfZ2VuZXJpYy5jLTE2MTktXHQucmVzdW1lID0gbWhpX3BjaV9pb19yZXN1bWUsXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wY2lfZ2VuZXJpYy5jOjE2MjA6XHQucmVzZXRfcHJlcGFyZSA9IG1oaV9wY2lfcmVzZXRfcHJlcGFyZSxcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BjaV9nZW5lcmljLmMtMTYyMS1cdC5yZXNldF9kb25lID0gbWhpX3BjaV9yZXNldF9kb25lLFxuLS1cbmRyaXZlcnMvY2R4L2NkeC5jPTk1PWludCBjZHhfZGV2X3Jlc2V0KHN0cnVjdCBkZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL2NkeC9jZHguYy0xMDQtXHQvKiBOb3RpZnkgZHJpdmVyIHRoYXQgZGV2aWNlIGlzIGJlaW5nIHJlc2V0ICovXG5kcml2ZXJzL2NkeC9jZHguYzoxMDU6XHRpZiAoY2R4X2RydiBcdTAwMjZcdTAwMjYgY2R4X2Rydi1cdTAwM2VyZXNldF9wcmVwYXJlKVxuZHJpdmVycy9jZHgvY2R4LmM6MTA2Olx0XHRjZHhfZHJ2LVx1MDAzZXJlc2V0X3ByZXBhcmUoY2R4X2Rldik7XG5kcml2ZXJzL2NkeC9jZHguYy0xMDctXG4tLVxuZHJpdmVycy9jcnlwdG8vaGlzaWxpY29uL2hwcmUvaHByZV9tYWluLmM9MTY4OD1zdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9lcnJvcl9oYW5kbGVycyBocHJlX2Vycl9oYW5kbGVyID0ge1xuLS1cbmRyaXZlcnMvY3J5cHRvL2hpc2lsaWNvbi9ocHJlL2hwcmVfbWFpbi5jLTE2OTAtXHQuc2xvdF9yZXNldFx0XHQ9IGhpc2lfcW1fZGV2X3Nsb3RfcmVzZXQsXG5kcml2ZXJzL2NyeXB0by9oaXNpbGljb24vaHByZS9ocHJlX21haW4uYzoxNjkxOlx0LnJlc2V0X3ByZXBhcmVcdFx0PSBoaXNpX3FtX3Jlc2V0X3ByZXBhcmUsXG5kcml2ZXJzL2NyeXB0by9oaXNpbGljb24vaHByZS9ocHJlX21haW4uYy0xNjkyLVx0LnJlc2V0X2RvbmVcdFx0PSBoaXNpX3FtX3Jlc2V0X2RvbmUsXG4tLVxuZHJpdmVycy9jcnlwdG8vaGlzaWxpY29uL3NlYzIvc2VjX21haW4uYz0xNTA2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2Vycm9yX2hhbmRsZXJzIHNlY19lcnJfaGFuZGxlciA9IHtcbi0tXG5kcml2ZXJzL2NyeXB0by9oaXNpbGljb24vc2VjMi9zZWNfbWFpbi5jLTE1MDgtXHQuc2xvdF9yZXNldFx0PSBoaXNpX3FtX2Rldl9zbG90X3Jlc2V0LFxuZHJpdmVycy9jcnlwdG8vaGlzaWxpY29uL3NlYzIvc2VjX21haW4uYzoxNTA5Olx0LnJlc2V0X3ByZXBhcmVcdD0gaGlzaV9xbV9yZXNldF9wcmVwYXJlLFxuZHJpdmVycy9jcnlwdG8vaGlzaWxpY29uL3NlYzIvc2VjX21haW4uYy0xNTEwLVx0LnJlc2V0X2RvbmVcdD0gaGlzaV9xbV9yZXNldF9kb25lLFxuLS1cbmRyaXZlcnMvY3J5cHRvL2hpc2lsaWNvbi96aXAvemlwX21haW4uYz0xNjE1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2Vycm9yX2hhbmRsZXJzIGhpc2lfemlwX2Vycl9oYW5kbGVyID0ge1xuLS1cbmRyaXZlcnMvY3J5cHRvL2hpc2lsaWNvbi96aXAvemlwX21haW4uYy0xNjE3LVx0LnNsb3RfcmVzZXRcdD0gaGlzaV9xbV9kZXZfc2xvdF9yZXNldCxcbmRyaXZlcnMvY3J5cHRvL2hpc2lsaWNvbi96aXAvemlwX21haW4uYzoxNjE4Olx0LnJlc2V0X3ByZXBhcmVcdD0gaGlzaV9xbV9yZXNldF9wcmVwYXJlLFxuZHJpdmVycy9jcnlwdG8vaGlzaWxpY29uL3ppcC96aXBfbWFpbi5jLTE2MTktXHQucmVzZXRfZG9uZVx0PSBoaXNpX3FtX3Jlc2V0X2RvbmUsXG4tLVxuZHJpdmVycy9jcnlwdG8vaW50ZWwvcWF0L3FhdF9jb21tb24vYWRmX2Flci5jPTE4PXN0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqZGV2aWNlX3NyaW92X3dxO1xuZHJpdmVycy9jcnlwdG8vaW50ZWwvcWF0L3FhdF9jb21tb24vYWRmX2Flci5jLTE5LVxuZHJpdmVycy9jcnlwdG8vaW50ZWwvcWF0L3FhdF9jb21tb24vYWRmX2Flci5jOjIwOnN0YXRpYyBwY2lfZXJzX3Jlc3VsdF90IHJlc2V0X3ByZXBhcmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG5kcml2ZXJzL2NyeXB0by9pbnRlbC9xYXQvcWF0X2NvbW1vbi9hZGZfYWVyLmMtMjEte1xuLS1cbmRyaXZlcnMvY3J5cHRvL2ludGVsL3FhdC9xYXRfY29tbW9uL2FkZl9hZXIuYz03Mj1zdGF0aWMgcGNpX2Vyc19yZXN1bHRfdCBhZGZfZXJyb3JfZGV0ZWN0ZWQoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4tLVxuZHJpdmVycy9jcnlwdG8vaW50ZWwvcWF0L3FhdF9jb21tb24vYWRmX2Flci5jLTkwLVxuZHJpdmVycy9jcnlwdG8vaW50ZWwvcWF0L3FhdF9jb21tb24vYWRmX2Flci5jOjkxOlx0cmV0dXJuIHJlc2V0X3ByZXBhcmUocGRldik7XG5kcml2ZXJzL2NyeXB0by9pbnRlbC9xYXQvcWF0X2NvbW1vbi9hZGZfYWVyLmMtOTItfVxuLS1cbmRyaXZlcnMvY3J5cHRvL2ludGVsL3FhdC9xYXRfY29tbW9uL2FkZl9hZXIuYz0yNTU9c3RhdGljIHZvaWQgYWRmX3Jlc2V0X3ByZXBhcmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG5kcml2ZXJzL2NyeXB0by9pbnRlbC9xYXQvcWF0X2NvbW1vbi9hZGZfYWVyLmMtMjU2LXtcbmRyaXZlcnMvY3J5cHRvL2ludGVsL3FhdC9xYXRfY29tbW9uL2FkZl9hZXIuYzoyNTc6XHRyZXNldF9wcmVwYXJlKHBkZXYpO1xuZHJpdmVycy9jcnlwdG8vaW50ZWwvcWF0L3FhdF9jb21tb24vYWRmX2Flci5jLTI1OC19XG4tLVxuZHJpdmVycy9jcnlwdG8vaW50ZWwvcWF0L3FhdF9jb21tb24vYWRmX2Flci5jPTI2NT1jb25zdCBzdHJ1Y3QgcGNpX2Vycm9yX2hhbmRsZXJzIGFkZl9lcnJfaGFuZGxlciA9IHtcbi0tXG5kcml2ZXJzL2NyeXB0by9pbnRlbC9xYXQvcWF0X2NvbW1vbi9hZGZfYWVyLmMtMjY4LVx0LnJlc3VtZSA9IGFkZl9yZXN1bWUsXG5kcml2ZXJzL2NyeXB0by9pbnRlbC9xYXQvcWF0X2NvbW1vbi9hZGZfYWVyLmM6MjY5Olx0LnJlc2V0X3ByZXBhcmUgPSBhZGZfcmVzZXRfcHJlcGFyZSxcbmRyaXZlcnMvY3J5cHRvL2ludGVsL3FhdC9xYXRfY29tbW9uL2FkZl9hZXIuYy0yNzAtXHQucmVzZXRfZG9uZSA9IGFkZl9yZXNldF9kb25lLFxuLS1cbmRyaXZlcnMvZG1hL2lkeGQvaW5pdC5jPTExMjY9c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZXJyb3JfaGFuZGxlcnMgaWR4ZF9lcnJvcl9oYW5kbGVyID0ge1xuZHJpdmVycy9kbWEvaWR4ZC9pbml0LmM6MTEyNzpcdC5yZXNldF9wcmVwYXJlXHQ9IGlkeGRfcmVzZXRfcHJlcGFyZSxcbmRyaXZlcnMvZG1hL2lkeGQvaW5pdC5jLTExMjgtXHQucmVzZXRfZG9uZVx0PSBpZHhkX3Jlc2V0X2RvbmUsXG4tLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfcmVzZXQuYz04NDQ9c3RhdGljIHZvaWQgcmV2b2tlX21tYXBzKHN0cnVjdCBpbnRlbF9ndCAqZ3QpXG4tLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfcmVzZXQuYy04NzQtXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9yZXNldC5jOjg3NTpzdGF0aWMgaW50ZWxfZW5naW5lX21hc2tfdCByZXNldF9wcmVwYXJlKHN0cnVjdCBpbnRlbF9ndCAqZ3QpXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9yZXNldC5jLTg3Ni17XG4tLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfcmVzZXQuYy04ODUtXHQgKiBGb3IgR3VDIG1vZGUgd2l0aCBzdWJtaXNzaW9uIGRpc2FibGVkLCBlbnN1cmUgdGhhdCBHdUMgaXMgbm90XG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9yZXNldC5jOjg4NjpcdCAqIHNhbml0aXplZCwgZG8gdGhhdCBhZnRlciBlbmdpbmUgcmVzZXQuIHJlc2V0X3ByZXBhcmUoKVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfcmVzZXQuYy04ODctXHQgKiBpcyBmb2xsb3dlZCBieSBlbmdpbmUgcmVzZXQgd2hpY2ggaW4gdGhpcyBtb2RlIHJlcXVpcmVzIEd1QyB0b1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX3Jlc2V0LmM9OTY5PXN0YXRpYyB2b2lkIF9faW50ZWxfZ3Rfc2V0X3dlZGdlZChzdHJ1Y3QgaW50ZWxfZ3QgKmd0KVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX3Jlc2V0LmMtOTg1LVx0ICovXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9yZXNldC5jOjk4NjpcdGF3YWtlID0gcmVzZXRfcHJlcGFyZShndCk7XG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9yZXNldC5jLTk4Ny1cbi0tXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9yZXNldC5jPTEyMDU9dm9pZCBpbnRlbF9ndF9yZXNldChzdHJ1Y3QgaW50ZWxfZ3QgKmd0LFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX3Jlc2V0LmMtMTIzMy1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX3Jlc2V0LmM6MTIzNDpcdGF3YWtlID0gcmVzZXRfcHJlcGFyZShndCk7XG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9yZXNldC5jLTEyMzUtXG4tLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfcmluZ19zdWJtaXNzaW9uLmM9MzE0PXN0YXRpYyB2b2lkIHhjc19zYW5pdGl6ZShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpXG4tLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfcmluZ19zdWJtaXNzaW9uLmMtMzQwLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfcmluZ19zdWJtaXNzaW9uLmM6MzQxOnN0YXRpYyB2b2lkIHJlc2V0X3ByZXBhcmUoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfcmluZ19zdWJtaXNzaW9uLmMtMzQyLXtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9yaW5nX3N1Ym1pc3Npb24uYz0xMTU0PXN0YXRpYyB2b2lkIHNldHVwX2NvbW1vbihzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpXG4tLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfcmluZ19zdWJtaXNzaW9uLmMtMTE2NS1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX3Jpbmdfc3VibWlzc2lvbi5jOjExNjY6XHRlbmdpbmUtXHUwMDNlcmVzZXQucHJlcGFyZSA9IHJlc2V0X3ByZXBhcmU7XG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9yaW5nX3N1Ym1pc3Npb24uYy0xMTY3LVx0ZW5naW5lLVx1MDAzZXJlc2V0LnJld2luZCA9IHJlc2V0X3Jld2luZDtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9zZWxmdGVzdF9yZXNldC5jPTI2MD1zdGF0aWMgaW50IGlndF9hdG9taWNfcmVzZXQodm9pZCAqYXJnKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X3Jlc2V0LmMtMjgwLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qvc2VsZnRlc3RfcmVzZXQuYzoyODE6XHRcdGF3YWtlID0gcmVzZXRfcHJlcGFyZShndCk7XG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9zZWxmdGVzdF9yZXNldC5jLTI4Mi1cdFx0cC1cdTAwM2Vjcml0aWNhbF9zZWN0aW9uX2JlZ2luKCk7XG4tLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjX3N1Ym1pc3Npb24uYz0xMDc3PXN0YXRpYyB2b2lkIHNjcnViX2d1Y19kZXNjX2Zvcl9vdXRzdGFuZGluZ19nMmgoc3RydWN0IGludGVsX2d1YyAqZ3VjKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Y19zdWJtaXNzaW9uLmMtMTEwNC1cdFx0ICogdG8gYmUgdmlzaWJsZSB0byBhbGwgY2FsbGVycyB3aG8gc2V0IHRoZSBiZWxvdyBmbGFncyAoc2VlIGFib3ZlXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfc3VibWlzc2lvbi5jOjExMDU6XHRcdCAqIGZsdXNoIGFuZCBmbHVzaGVzIGluIHJlc2V0X3ByZXBhcmUpLiBJZiBzdWJtaXNzaW9uX2Rpc2FibGVkKClcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Y19zdWJtaXNzaW9uLmMtMTEwNi1cdFx0ICogaXMgc2V0LCB0aGUgY2FsbGVyIHNob3VsZG4mIzM5O3Qgc2V0IHRoZXNlIGZsYWdzLlxuLS1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Y19zdWJtaXNzaW9uLmM9MTM5MT1zdGF0aWMgdm9pZCBndWNfY2FuY2VsX2J1c3luZXNzX3dvcmtlcihzdHJ1Y3QgaW50ZWxfZ3VjICpndWMpXG4tLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjX3N1Ym1pc3Npb24uYy0xNDI1LVx0ICogQW5kIG5vdGUgdGhhdCBpbiB0aGUgY2FzZSBvZiBhIHJlc2V0IG9jY3VycmluZyBkdXJpbmcgZHJpdmVyIHVubG9hZFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjX3N1Ym1pc3Npb24uYzoxNDI2Olx0ICogKHdlZGdlZF9vbl9maW5pKSwgc2tpcHBpbmcgdGhlIGNhbmNlbCBpbiByZXNldF9wcmVwYXJlL3Jlc2V0X2ZpbmkgKHdoZW4gdGhlXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfc3VibWlzc2lvbi5jLTE0MjctXHQgKiByZXNldCBmbGFnL211dGV4IGFyZSBzZXQpIGlzIGZpbmUgYmVjYXVzZSB0aGVyZSBpcyBhbm90aGVyIGV4cGxpY2l0IGNhbmNlbCBpblxuLS1cbmRyaXZlcnMvbWVkaWEvcGNpL2ludGVsL2lwdTYvaXB1Ni5jPTgxNj1zdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9lcnJvcl9oYW5kbGVycyBwY2lfZXJyX2hhbmRsZXJzID0ge1xuZHJpdmVycy9tZWRpYS9wY2kvaW50ZWwvaXB1Ni9pcHU2LmM6ODE3Olx0LnJlc2V0X3ByZXBhcmUgPSBpcHU2X3BjaV9yZXNldF9wcmVwYXJlLFxuZHJpdmVycy9tZWRpYS9wY2kvaW50ZWwvaXB1Ni9pcHU2LmMtODE4LVx0LnJlc2V0X2RvbmUgPSBpcHU2X3BjaV9yZXNldF9kb25lLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9tYWluLmM9NTkwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2Vycm9yX2hhbmRsZXJzIHBkc2NfZXJyX2hhbmRsZXIgPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvbWFpbi5jLTU5MS1cdC8qIEZMUiBoYW5kbGluZyAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL21haW4uYzo1OTI6XHQucmVzZXRfcHJlcGFyZSAgICAgID0gcGRzY19yZXNldF9wcmVwYXJlLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL21haW4uYy01OTMtXHQucmVzZXRfZG9uZSAgICAgICAgID0gcGRzY19yZXNldF9kb25lLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjQvY3hnYjRfbWFpbi5jPTU2MTY9c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZXJyb3JfaGFuZGxlcnMgY3hnYjRfZWVoID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjQvY3hnYjRfbWFpbi5jLTU2MTktXHQucmVzdW1lICAgICAgICAgPSBlZWhfcmVzdW1lLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiNC9jeGdiNF9tYWluLmM6NTYyMDpcdC5yZXNldF9wcmVwYXJlICA9IGVlaF9yZXNldF9wcmVwYXJlLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiNC9jeGdiNF9tYWluLmMtNTYyMS1cdC5yZXNldF9kb25lICAgICA9IGVlaF9yZXNldF9kb25lLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaWJtY2dlL2hiZ19lcnIuYz0xODQ9c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZXJyb3JfaGFuZGxlcnMgaGJnX3BjaV9lcnJfaGFuZGxlciA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlibWNnZS9oYmdfZXJyLmMtMTg2LVx0LnNsb3RfcmVzZXQgPSBoYmdfcGNpX2Vycl9zbG90X3Jlc2V0LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpYm1jZ2UvaGJnX2Vyci5jOjE4NzpcdC5yZXNldF9wcmVwYXJlID0gaGJnX3BjaV9lcnJfcmVzZXRfcHJlcGFyZSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaWJtY2dlL2hiZ19lcnIuYy0xODgtXHQucmVzZXRfZG9uZSA9IGhiZ19wY2lfZXJyX3Jlc2V0X2RvbmUsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5hZTMuaD02MTA9c3RydWN0IGhuYWUzX2FlX29wcyB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5hZTMuaC02MTItXHR2b2lkICgqdW5pbml0X2FlX2Rldikoc3RydWN0IGhuYWUzX2FlX2RldiAqYWVfZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huYWUzLmg6NjEzOlx0dm9pZCAoKnJlc2V0X3ByZXBhcmUpKHN0cnVjdCBobmFlM19hZV9kZXYgKmFlX2RldixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huYWUzLmgtNjE0LVx0XHRcdCAgICAgIGVudW0gaG5hZTNfcmVzZXRfdHlwZSByc3RfdHlwZSk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmM9MzI0Nz1zdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkIGhuczNfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmMtMzI1Mi1cdFx0ZGV2X2luZm8oZGV2LCBcJiMzNDtCZWdpbiB0byBzdXNwZW5kLlxcblwmIzM0Oyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2VuZXQuYzozMjUzOlx0XHRpZiAoYWVfZGV2LVx1MDAzZW9wcyBcdTAwMjZcdTAwMjYgYWVfZGV2LVx1MDAzZW9wcy1cdTAwM2VyZXNldF9wcmVwYXJlKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmM6MzI1NDpcdFx0XHRhZV9kZXYtXHUwMDNlb3BzLVx1MDAzZXJlc2V0X3ByZXBhcmUoYWVfZGV2LCBITkFFM19GVU5DX1JFU0VUKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5jLTMyNTUtXHR9XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmM9MzMyNj1zdGF0aWMgdm9pZCBobnMzX3Jlc2V0X3ByZXBhcmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmMtMzMzMC1cdGRldl9pbmZvKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBcJiMzNDtGTFIgcHJlcGFyZVxcblwmIzM0Oyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2VuZXQuYzozMzMxOlx0aWYgKGFlX2RldiBcdTAwMjZcdTAwMjYgYWVfZGV2LVx1MDAzZW9wcyBcdTAwMjZcdTAwMjYgYWVfZGV2LVx1MDAzZW9wcy1cdTAwM2VyZXNldF9wcmVwYXJlKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmM6MzMzMjpcdFx0YWVfZGV2LVx1MDAzZW9wcy1cdTAwM2VyZXNldF9wcmVwYXJlKGFlX2RldiwgSE5BRTNfRkxSX1JFU0VUKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5jLTMzMzMtfVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5jPTMzNDQ9c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZXJyb3JfaGFuZGxlcnMgaG5zM19lcnJfaGFuZGxlciA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2VuZXQuYy0zMzQ2LVx0LnNsb3RfcmVzZXQgICAgID0gaG5zM19zbG90X3Jlc2V0LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmM6MzM0NzpcdC5yZXNldF9wcmVwYXJlXHQ9IGhuczNfcmVzZXRfcHJlcGFyZSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5jLTMzNDgtXHQucmVzZXRfZG9uZVx0PSBobnMzX3Jlc2V0X2RvbmUsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21haW4uYz0xMDYwMD1zdGF0aWMgY29uc3Qgc3RydWN0IGhuYWUzX2FlX29wcyBoY2xnZV9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21haW4uYy0xMDYwMi1cdC51bmluaXRfYWVfZGV2ID0gaGNsZ2VfdW5pbml0X2FlX2RldixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmM6MTA2MDM6XHQucmVzZXRfcHJlcGFyZSA9IGhjbGdlX3Jlc2V0X3ByZXBhcmVfZ2VuZXJhbCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmMtMTA2MDQtXHQucmVzZXRfZG9uZSA9IGhjbGdlX3Jlc2V0X2RvbmUsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3ZmL2hjbGdldmZfbWFpbi5jPTMzNDU9c3RhdGljIGNvbnN0IHN0cnVjdCBobmFlM19hZV9vcHMgaGNsZ2V2Zl9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3ZmL2hjbGdldmZfbWFpbi5jLTMzNDctXHQudW5pbml0X2FlX2RldiA9IGhjbGdldmZfdW5pbml0X2FlX2RldixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczN2Zi9oY2xnZXZmX21haW4uYzozMzQ4Olx0LnJlc2V0X3ByZXBhcmUgPSBoY2xnZXZmX3Jlc2V0X3ByZXBhcmVfZ2VuZXJhbCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczN2Zi9oY2xnZXZmX21haW4uYy0zMzQ5LVx0LnJlc2V0X2RvbmUgPSBoY2xnZXZmX3Jlc2V0X2RvbmUsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZm0xMGsvZm0xMGtfcGNpLmM9MjQ5MT1zdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9lcnJvcl9oYW5kbGVycyBmbTEwa19lcnJfaGFuZGxlciA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9mbTEway9mbTEwa19wY2kuYy0yNDk0LVx0LnJlc3VtZSA9IGZtMTBrX2lvX3Jlc3VtZSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ZtMTBrL2ZtMTBrX3BjaS5jOjI0OTU6XHQucmVzZXRfcHJlcGFyZSA9IGZtMTBrX2lvX3Jlc2V0X3ByZXBhcmUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9mbTEway9mbTEwa19wY2kuYy0yNDk2LVx0LnJlc2V0X2RvbmUgPSBmbTEwa19pb19yZXNldF9kb25lLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9tYWluLmM9MTY2MDQ9c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZXJyb3JfaGFuZGxlcnMgaTQwZV9lcnJfaGFuZGxlciA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfbWFpbi5jLTE2NjA2LVx0LnNsb3RfcmVzZXQgPSBpNDBlX3BjaV9lcnJvcl9zbG90X3Jlc2V0LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX21haW4uYzoxNjYwNzpcdC5yZXNldF9wcmVwYXJlID0gaTQwZV9wY2lfZXJyb3JfcmVzZXRfcHJlcGFyZSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9tYWluLmMtMTY2MDgtXHQucmVzZXRfZG9uZSA9IGk0MGVfcGNpX2Vycm9yX3Jlc2V0X2RvbmUsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM9NTg0MT1zdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9lcnJvcl9oYW5kbGVycyBpY2VfcGNpX2Vycl9oYW5kbGVyID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTU4NDMtXHQuc2xvdF9yZXNldCA9IGljZV9wY2lfZXJyX3Nsb3RfcmVzZXQsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYzo1ODQ0Olx0LnJlc2V0X3ByZXBhcmUgPSBpY2VfcGNpX2Vycl9yZXNldF9wcmVwYXJlLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNTg0NS1cdC5yZXNldF9kb25lID0gaWNlX3BjaV9lcnJfcmVzZXRfZG9uZSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2J2Zi9uZXRkZXYuYz0yOTI5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2Vycm9yX2hhbmRsZXJzIGlnYnZmX2Vycl9oYW5kbGVyID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYnZmL25ldGRldi5jLTI5MzItXHQucmVzdW1lID0gaWdidmZfaW9fcmVzdW1lLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdidmYvbmV0ZGV2LmM6MjkzMzpcdC5yZXNldF9wcmVwYXJlID0gaWdidmZfaW9fcHJlcGFyZSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYnZmL25ldGRldi5jLTI5MzQtXHQucmVzZXRfZG9uZSA9IGlnYnZmX2lvX3Jlc2V0X2RvbmUsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvcGNpLmM9MjUyMD1zdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9lcnJvcl9oYW5kbGVycyBtbHhzd19wY2lfZXJyX2hhbmRsZXIgPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9wY2kuYzoyNTIxOlx0LnJlc2V0X3ByZXBhcmUgPSBtbHhzd19wY2lfcmVzZXRfcHJlcGFyZSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3BjaS5jLTI1MjItXHQucmVzZXRfZG9uZSA9IG1seHN3X3BjaV9yZXNldF9kb25lLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3BlbnNhbmRvL2lvbmljL2lvbmljX2J1c19wY2kuYz01MTI9c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZXJyb3JfaGFuZGxlcnMgaW9uaWNfZXJyX2hhbmRsZXIgPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9wZW5zYW5kby9pb25pYy9pb25pY19idXNfcGNpLmMtNTEzLVx0LyogRkxSIGhhbmRsaW5nICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9wZW5zYW5kby9pb25pYy9pb25pY19idXNfcGNpLmM6NTE0Olx0LnJlc2V0X3ByZXBhcmUgICAgICA9IGlvbmljX3Jlc2V0X3ByZXBhcmUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9wZW5zYW5kby9pb25pYy9pb25pY19idXNfcGNpLmMtNTE1LVx0LnJlc2V0X2RvbmUgICAgICAgICA9IGlvbmljX3Jlc2V0X2RvbmUsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3BjaWUuYz01NzE9c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZXJyb3JfaGFuZGxlcnMgbXdpZmlleF9wY2llX2Vycl9oYW5kbGVyID0ge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3BjaWUuYzo1NzI6XHQucmVzZXRfcHJlcGFyZVx0XHQ9IG13aWZpZXhfcGNpZV9yZXNldF9wcmVwYXJlLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3BjaWUuYy01NzMtXHQucmVzZXRfZG9uZVx0XHQ9IG13aWZpZXhfcGNpZV9yZXNldF9kb25lLFxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L3BjaS5jPTQxMDY9c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZXJyb3JfaGFuZGxlcnMgbnZtZV9lcnJfaGFuZGxlciA9IHtcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9wY2kuYy00MTA5LVx0LnJlc3VtZVx0XHQ9IG52bWVfZXJyb3JfcmVzdW1lLFxuZHJpdmVycy9udm1lL2hvc3QvcGNpLmM6NDExMDpcdC5yZXNldF9wcmVwYXJlXHQ9IG52bWVfcmVzZXRfcHJlcGFyZSxcbmRyaXZlcnMvbnZtZS9ob3N0L3BjaS5jLTQxMTEtXHQucmVzZXRfZG9uZVx0PSBudm1lX3Jlc2V0X2RvbmUsXG4tLVxuZHJpdmVycy9wY2kvcGNpLmM9NTA4OD1zdGF0aWMgdm9pZCBwY2lfZGV2X3NhdmVfYW5kX2Rpc2FibGUoc3RydWN0IHBjaV9kZXYgKmRldilcbi0tXG5kcml2ZXJzL3BjaS9wY2kuYy01MDkzLVx0LypcbmRyaXZlcnMvcGNpL3BjaS5jOjUwOTQ6XHQgKiBkZXYtXHUwMDNlZHJpdmVyLVx1MDAzZWVycl9oYW5kbGVyLVx1MDAzZXJlc2V0X3ByZXBhcmUoKSBpcyBwcm90ZWN0ZWQgYWdhaW5zdFxuZHJpdmVycy9wY2kvcGNpLmMtNTA5NS1cdCAqIHJhY2VzIHdpdGggLVx1MDAzZXJlbW92ZSgpIGJ5IHRoZSBkZXZpY2UgbG9jaywgd2hpY2ggbXVzdCBiZSBoZWxkIGJ5XG4tLVxuZHJpdmVycy9wY2kvcGNpLmMtNTA5OC1cdGRldmljZV9sb2NrX2Fzc2VydChcdTAwMjZkZXYtXHUwMDNlZGV2KTtcbmRyaXZlcnMvcGNpL3BjaS5jOjUwOTk6XHRpZiAoZXJyX2hhbmRsZXIgXHUwMDI2XHUwMDI2IGVycl9oYW5kbGVyLVx1MDAzZXJlc2V0X3ByZXBhcmUpXG5kcml2ZXJzL3BjaS9wY2kuYzo1MTAwOlx0XHRlcnJfaGFuZGxlci1cdTAwM2VyZXNldF9wcmVwYXJlKGRldik7XG5kcml2ZXJzL3BjaS9wY2kuYy01MTAxLVx0ZWxzZSBpZiAoZGV2LVx1MDAzZWRyaXZlcilcbi0tXG5kcml2ZXJzL3Njc2kvaGlzaV9zYXMvaGlzaV9zYXNfdjNfaHcuYz01MzA2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2Vycm9yX2hhbmRsZXJzIGhpc2lfc2FzX2Vycl9oYW5kbGVyID0ge1xuZHJpdmVycy9zY3NpL2hpc2lfc2FzL2hpc2lfc2FzX3YzX2h3LmM6NTMwNzpcdC5yZXNldF9wcmVwYXJlXHQ9IGhpc2lfc2FzX3Jlc2V0X3ByZXBhcmVfdjNfaHcsXG5kcml2ZXJzL3Njc2kvaGlzaV9zYXMvaGlzaV9zYXNfdjNfaHcuYy01MzA4LVx0LnJlc2V0X2RvbmVcdD0gaGlzaV9zYXNfcmVzZXRfZG9uZV92M19odyxcbi0tXG5kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfb3MuYz04MzEyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2Vycm9yX2hhbmRsZXJzIHFsYTJ4eHhfZXJyX2hhbmRsZXIgPSB7XG4tLVxuZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX29zLmMtODMxNi1cdC5yZXN1bWUgPSBxbGEyeHh4X3BjaV9yZXN1bWUsXG5kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfb3MuYzo4MzE3Olx0LnJlc2V0X3ByZXBhcmUgPSBxbGFfcGNpX3Jlc2V0X3ByZXBhcmUsXG5kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfb3MuYy04MzE4LVx0LnJlc2V0X2RvbmUgPSBxbGFfcGNpX3Jlc2V0X2RvbmUsXG4tLVxuZHJpdmVycy9zdGFnaW5nL21lZGlhL2lwdTcvaXB1Ny5jPTI3NTI9c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZXJyb3JfaGFuZGxlcnMgcGNpX2Vycl9oYW5kbGVycyA9IHtcbmRyaXZlcnMvc3RhZ2luZy9tZWRpYS9pcHU3L2lwdTcuYzoyNzUzOlx0LnJlc2V0X3ByZXBhcmUgPSBpcHU3X3BjaV9yZXNldF9wcmVwYXJlLFxuZHJpdmVycy9zdGFnaW5nL21lZGlhL2lwdTcvaXB1Ny5jLTI3NTQtXHQucmVzZXRfZG9uZSA9IGlwdTdfcGNpX3Jlc2V0X2RvbmUsXG4tLVxuZHJpdmVycy92ZmlvL3BjaS9oaXNpbGljb24vaGlzaV9hY2NfdmZpb19wY2kuYz0xNzIxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2Vycm9yX2hhbmRsZXJzIGhpc2lfYWNjX3ZmX2Vycl9oYW5kbGVycyA9IHtcbmRyaXZlcnMvdmZpby9wY2kvaGlzaWxpY29uL2hpc2lfYWNjX3ZmaW9fcGNpLmM6MTcyMjpcdC5yZXNldF9wcmVwYXJlID0gaGlzaV9hY2NfdmZfcGNpX3Jlc2V0X3ByZXBhcmUsXG5kcml2ZXJzL3ZmaW8vcGNpL2hpc2lsaWNvbi9oaXNpX2FjY192ZmlvX3BjaS5jLTE3MjMtXHQucmVzZXRfZG9uZSA9IGhpc2lfYWNjX3ZmX3BjaV9hZXJfcmVzZXRfZG9uZSxcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3hlL21haW4uYz0xNDA9c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZXJyb3JfaGFuZGxlcnMgeGVfdmZpb19wY2lfZXJyX2hhbmRsZXJzID0ge1xuZHJpdmVycy92ZmlvL3BjaS94ZS9tYWluLmM6MTQxOlx0LnJlc2V0X3ByZXBhcmUgPSB4ZV92ZmlvX3BjaV9yZXNldF9wcmVwYXJlLFxuZHJpdmVycy92ZmlvL3BjaS94ZS9tYWluLmMtMTQyLVx0LnJlc2V0X2RvbmUgPSB4ZV92ZmlvX3BjaV9yZXNldF9kb25lLFxuLS1cbmRyaXZlcnMvdmlydGlvL3ZpcnRpby5jPTY5OD1pbnQgdmlydGlvX2RldmljZV9yZXNldF9wcmVwYXJlKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy92aXJ0aW8vdmlydGlvLmMtNzAyLVxuZHJpdmVycy92aXJ0aW8vdmlydGlvLmM6NzAzOlx0aWYgKCFkcnYgfHwgIWRydi1cdTAwM2VyZXNldF9wcmVwYXJlKVxuZHJpdmVycy92aXJ0aW8vdmlydGlvLmMtNzA0LVx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4tLVxuZHJpdmVycy92aXJ0aW8vdmlydGlvLmMtNzA5LVxuZHJpdmVycy92aXJ0aW8vdmlydGlvLmM6NzEwOlx0cmV0ID0gZHJ2LVx1MDAzZXJlc2V0X3ByZXBhcmUoZGV2KTtcbmRyaXZlcnMvdmlydGlvL3ZpcnRpby5jLTcxMS1cdGlmIChyZXQpIHtcbi0tXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcGNpX2NvbW1vbi5jPTgzMz1zdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9lcnJvcl9oYW5kbGVycyB2aXJ0aW9fcGNpX2Vycl9oYW5kbGVyID0ge1xuZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaV9jb21tb24uYzo4MzQ6XHQucmVzZXRfcHJlcGFyZSAgPSB2aXJ0aW9fcGNpX3Jlc2V0X3ByZXBhcmUsXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcGNpX2NvbW1vbi5jLTgzNS1cdC5yZXNldF9kb25lICAgICA9IHZpcnRpb19wY2lfcmVzZXRfZG9uZSxcbi0tXG5pbmNsdWRlL2xpbnV4L2NkeC9jZHhfYnVzLmg9MTQzPXN0cnVjdCBjZHhfZGV2aWNlIHtcbi0tXG5pbmNsdWRlL2xpbnV4L2NkeC9jZHhfYnVzLmgtMTg3LSAqIEBzaHV0ZG93bjogRnVuY3Rpb24gY2FsbGVkIGF0IHNodXRkb3duIHRpbWUgdG8gcXVpZXNjZSB0aGUgZGV2aWNlXG5pbmNsdWRlL2xpbnV4L2NkeC9jZHhfYnVzLmg6MTg4OiAqIEByZXNldF9wcmVwYXJlOiBGdW5jdGlvbiBjYWxsZWQgYmVmb3JlIGlzIHJlc2V0IHRvIG5vdGlmeSBkcml2ZXJcbmluY2x1ZGUvbGludXgvY2R4L2NkeF9idXMuaC0xODktICogQHJlc2V0X2RvbmU6IEZ1bmN0aW9uIGNhbGxlZCBhZnRlciByZXNldCBpcyBjb21wbGV0ZSB0byBub3RpZnkgZHJpdmVyXG4tLVxuaW5jbHVkZS9saW51eC9jZHgvY2R4X2J1cy5oPTE5OD1zdHJ1Y3QgY2R4X2RyaXZlciB7XG4tLVxuaW5jbHVkZS9saW51eC9jZHgvY2R4X2J1cy5oLTIwMy1cdHZvaWQgKCpzaHV0ZG93bikoc3RydWN0IGNkeF9kZXZpY2UgKmRldik7XG5pbmNsdWRlL2xpbnV4L2NkeC9jZHhfYnVzLmg6MjA0Olx0dm9pZCAoKnJlc2V0X3ByZXBhcmUpKHN0cnVjdCBjZHhfZGV2aWNlICpkZXYpO1xuaW5jbHVkZS9saW51eC9jZHgvY2R4X2J1cy5oLTIwNS1cdHZvaWQgKCpyZXNldF9kb25lKShzdHJ1Y3QgY2R4X2RldmljZSAqZGV2KTtcbi0tXG5pbmNsdWRlL2xpbnV4L3BjaS5oPTk0OD1zdHJ1Y3QgcGNpX2Vycm9yX2hhbmRsZXJzIHtcbi0tXG5pbmNsdWRlL2xpbnV4L3BjaS5oLTk1OS1cdC8qIFBDSSBmdW5jdGlvbiByZXNldCBwcmVwYXJlIG9yIGNvbXBsZXRlZCAqL1xuaW5jbHVkZS9saW51eC9wY2kuaDo5NjA6XHR2b2lkICgqcmVzZXRfcHJlcGFyZSkoc3RydWN0IHBjaV9kZXYgKmRldik7XG5pbmNsdWRlL2xpbnV4L3BjaS5oLTk2MS1cdHZvaWQgKCpyZXNldF9kb25lKShzdHJ1Y3QgcGNpX2RldiAqZGV2KTtcbi0tXG5pbmNsdWRlL2xpbnV4L3ZpcnRpby5oPTIyMD1zaXplX3QgdmlydGlvX21heF9kbWFfc2l6ZShjb25zdCBzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldik7XG4tLVxuaW5jbHVkZS9saW51eC92aXJ0aW8uaC0yNDItICogQHJlc3RvcmU6IG9wdGlvbmFsIGZ1bmN0aW9uIHRvIGNhbGwgb24gcmVzdW1lLlxuaW5jbHVkZS9saW51eC92aXJ0aW8uaDoyNDM6ICogQHJlc2V0X3ByZXBhcmU6IG9wdGlvbmFsIGZ1bmN0aW9uIHRvIGNhbGwgd2hlbiBhIHRyYW5zcG9ydCBzcGVjaWZpYyByZXNldFxuaW5jbHVkZS9saW51eC92aXJ0aW8uaC0yNDQtICogICAgb2NjdXJzLlxuLS1cbmluY2x1ZGUvbGludXgvdmlydGlvLmg9MjUwPXN0cnVjdCB2aXJ0aW9fZHJpdmVyIHtcbi0tXG5pbmNsdWRlL2xpbnV4L3ZpcnRpby5oLTI2My1cdGludCAoKnJlc3RvcmUpKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICpkZXYpO1xuaW5jbHVkZS9saW51eC92aXJ0aW8uaDoyNjQ6XHRpbnQgKCpyZXNldF9wcmVwYXJlKShzdHJ1Y3QgdmlydGlvX2RldmljZSAqZGV2KTtcbmluY2x1ZGUvbGludXgvdmlydGlvLmgtMjY1LVx0aW50ICgqcmVzZXRfZG9uZSkoc3RydWN0IHZpcnRpb19kZXZpY2UgKmRldik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDk6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM5NTYKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiA1NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHJlbGF0ZXMgdG8gdGhhdCBjb2RlOgoKKipBbmFseXppbmcgdGhlIFZpcnRJTyBEZXZpY2UgUmVzZXQgUHJlcGFyYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJJiMzOTttIGxvb2tpbmcgYXQgYGRyaXZlcnMvdmlydGlvL3ZpcnRpby5jYCwgc3BlY2lmaWNhbGx5IHRoZSBmdW5jdGlvbiBgdmlydGlvX2RldmljZV9yZXNldF9wcmVwYXJlKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICpkZXYpYC4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzOiAqd2hlcmUqIGlzIHRoaXMgZnVuY3Rpb24gYWN0dWFsbHkgaW52b2tlZCB3aXRoaW4gdGhlIGJyb2FkZXIgc3lzdGVtPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29udGV4dC4gS25vd2luZyB3aGVyZSBpdCYjMzk7cyBjYWxsZWQgd2lsbCBnaXZlIG1lIGluc2lnaHRzIGludG8gKndoeSogaXQmIzM5O3MgYmVpbmcgY2FsbGVkIGFuZCB0aGUgc2NlbmFyaW9zIGl0JiMzOTtzIGludGVuZGVkIHRvIGhhbmRsZS4gU28sIEkgbmVlZCB0byBkbyBhIHF1aWNrIGNvZGUgc2VhcmNoLiBJJiMzOTtsbCB1c2UgYGdyZXBgIChvciB3aGF0ZXZlciBzZWFyY2ggdG9vbCBpcyBhdCBoYW5kKSB0byBmaW5kIGFsbCB0aGUgaW5zdGFuY2VzIHdoZXJlIGB2aXJ0aW9fZGV2aWNlX3Jlc2V0X3ByZXBhcmVgIGlzIGV4cGxpY2l0bHkgY2FsbGVkIHdpdGhpbiB0aGUgY29kZWJhc2UuIFRoYXQmIzM5O3MgdGhlIGJlc3Qgd2F5IHRvIHVuZGVyc3RhbmQgaXRzIHB1cnBvc2Ugd2l0aGluIHRoZSBkZXZpY2UgcmVzZXQgZmxvdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDk6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmlydGlvX2RldmljZV9yZXNldF9wcmVwYXJlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmlydGlvL3ZpcnRpby5jPTY5NT1FWFBPUlRfU1lNQk9MX0dQTCh2aXJ0aW9fZGV2aWNlX3Jlc3RvcmUpO1xuLS1cbmRyaXZlcnMvdmlydGlvL3ZpcnRpby5jLTY5Ny1cbmRyaXZlcnMvdmlydGlvL3ZpcnRpby5jOjY5ODppbnQgdmlydGlvX2RldmljZV9yZXNldF9wcmVwYXJlKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICpkZXYpXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW8uYy02OTkte1xuLS1cbmRyaXZlcnMvdmlydGlvL3ZpcnRpby5jLTcxNy19XG5kcml2ZXJzL3ZpcnRpby92aXJ0aW8uYzo3MTg6RVhQT1JUX1NZTUJPTF9HUEwodmlydGlvX2RldmljZV9yZXNldF9wcmVwYXJlKTtcbmRyaXZlcnMvdmlydGlvL3ZpcnRpby5jLTcxOS1cbi0tXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcGNpX2NvbW1vbi5jPTc5OD1zdGF0aWMgdm9pZCB2aXJ0aW9fcGNpX3Jlc2V0X3ByZXBhcmUoc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYpXG4tLVxuZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaV9jb21tb24uYy04MDItXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcGNpX2NvbW1vbi5jOjgwMzpcdHJldCA9IHZpcnRpb19kZXZpY2VfcmVzZXRfcHJlcGFyZShcdTAwMjZ2cF9kZXYtXHUwMDNldmRldik7XG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcGNpX2NvbW1vbi5jLTgwNC1cdGlmIChyZXQpIHtcbi0tXG5pbmNsdWRlL2xpbnV4L3ZpcnRpby5oPTIxNj12b2lkIHZpcnRpb19kZXZpY2Vfc2h1dGRvd24oc3RydWN0IHZpcnRpb19kZXZpY2UgKmRldik7XG5pbmNsdWRlL2xpbnV4L3ZpcnRpby5oOjIxNzppbnQgdmlydGlvX2RldmljZV9yZXNldF9wcmVwYXJlKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICpkZXYpO1xuaW5jbHVkZS9saW51eC92aXJ0aW8uaC0yMTgtaW50IHZpcnRpb19kZXZpY2VfcmVzZXRfZG9uZShzdHJ1Y3QgdmlydGlvX2RldmljZSAqZGV2KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDk6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ2MjMKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqVHJhY2luZyBgdmlydGlvX2RldmljZV9mcmVlemVgKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjYWxsIGdyYXBoIGZvciBgdmlydGlvX2RldmljZV9mcmVlemVgLiBUaGF0JiMzOTtzIHRoZSBrZXkgcXVlc3Rpb24sIHJpZ2h0PyBXaGVyZSBpcyB0aGF0IGZ1bmN0aW9uICphY3R1YWxseSogYmVpbmcgaW52b2tlZCB3aXRoaW4gdGhlIHN5c3RlbT8gSSBuZWVkIHRvIHRyYWNrIGRvd24gYWxsIHRoZSBjYWxsIHNpdGVzIHRvIGdldCBhIGNvbXBsZXRlIHBpY3R1cmUuIExldCYjMzk7cyBzdGFydCBieSBsb29raW5nIGZvciBkaXJlY3QgY2FsbHMgdG8gYHZpcnRpb19kZXZpY2VfZnJlZXplYC4gSSYjMzk7bGwgbmVlZCB0byB1c2UgbXkgcHJlZmVycmVkIGRlYnVnZ2luZyB0b29scyBhbmQgY29kZSBzZWFyY2hpbmcgdGVjaG5pcXVlcyB0byBpZGVudGlmeSB0aGVtLiBJIHNob3VsZCBhbHNvIGNoZWNrIHRoZSByZWxldmFudCBkb2N1bWVudGF0aW9uIG9yIHNvdXJjZSBjb2RlIGNvbW1lbnRzIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBnaXZlIG1lIG1vcmUgcG9pbnRlcnMsIHRvIG1ha2Ugc3VyZSBJIGFtIG5vdCBtaXNzaW5nIGFueSBpbmRpcmVjdCBjYWxscy4gVGhpcyB3aWxsIHJlcXVpcmUgY2FyZWZ1bCBhbmFseXNpcywgYnV0IHdpdGggbXkgZXhwZXJ0aXNlLCBJJiMzOTttIGNvbmZpZGVudCBJIGNhbiBtYXAgdGhpcyBvdXQgZWZmZWN0aXZlbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA5OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZpcnRpb19kZXZpY2VfZnJlZXplJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmlydGlvL3ZpcnRpby5jPTYxMz1zdGF0aWMgaW50IHZpcnRpb19kZXZpY2VfcmVzdG9yZV9wcml2KHN0cnVjdCB2aXJ0aW9fZGV2aWNlICpkZXYsIGJvb2wgcmVzdG9yZSlcbi0tXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW8uYy02NjktI2lmZGVmIENPTkZJR19QTV9TTEVFUFxuZHJpdmVycy92aXJ0aW8vdmlydGlvLmM6NjcwOmludCB2aXJ0aW9fZGV2aWNlX2ZyZWV6ZShzdHJ1Y3QgdmlydGlvX2RldmljZSAqZGV2KVxuZHJpdmVycy92aXJ0aW8vdmlydGlvLmMtNjcxLXtcbi0tXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW8uYy02ODgtfVxuZHJpdmVycy92aXJ0aW8vdmlydGlvLmM6Njg5OkVYUE9SVF9TWU1CT0xfR1BMKHZpcnRpb19kZXZpY2VfZnJlZXplKTtcbmRyaXZlcnMvdmlydGlvL3ZpcnRpby5jLTY5MC1cbi0tXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbW1pby5jPTU1Nj1zdGF0aWMgaW50IHZpcnRpb19tbWlvX2ZyZWV6ZShzdHJ1Y3QgZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy92aXJ0aW8vdmlydGlvX21taW8uYy01NTktXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbW1pby5jOjU2MDpcdHJldHVybiB2aXJ0aW9fZGV2aWNlX2ZyZWV6ZShcdTAwMjZ2bV9kZXYtXHUwMDNldmRldik7XG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbW1pby5jLTU2MS19XG4tLVxuZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaV9jb21tb24uYz01OTk9c3RhdGljIGludCB2aXJ0aW9fcGNpX2ZyZWV6ZShzdHJ1Y3QgZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaV9jb21tb24uYy02MDQtXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcGNpX2NvbW1vbi5jOjYwNTpcdHJldCA9IHZpcnRpb19kZXZpY2VfZnJlZXplKFx1MDAyNnZwX2Rldi1cdTAwM2V2ZGV2KTtcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19wY2lfY29tbW9uLmMtNjA2LVxuLS1cbmluY2x1ZGUvbGludXgvdmlydGlvLmg9MjA5PXZvaWQgdmlydGlvX2NvbmZpZ19kcml2ZXJfZW5hYmxlKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICpkZXYpO1xuLS1cbmluY2x1ZGUvbGludXgvdmlydGlvLmgtMjExLSNpZmRlZiBDT05GSUdfUE1fU0xFRVBcbmluY2x1ZGUvbGludXgvdmlydGlvLmg6MjEyOmludCB2aXJ0aW9fZGV2aWNlX2ZyZWV6ZShzdHJ1Y3QgdmlydGlvX2RldmljZSAqZGV2KTtcbmluY2x1ZGUvbGludXgvdmlydGlvLmgtMjEzLWludCB2aXJ0aW9fZGV2aWNlX3Jlc3RvcmUoc3RydWN0IHZpcnRpb19kZXZpY2UgKmRldik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA5OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MzU5CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFJlY2VudCBDaGFuZ2UgaW4gdGhlIGB2aXJ0aW9fYmxrYCBEcml2ZXIqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZSBgdmlydGlvX2Jsa2AgZHJpdmVyLCBzcGVjaWZpY2FsbHkgdGhlIGB2aXJ0YmxrX2ZyZWV6ZV9wcml2YCBmdW5jdGlvbiB3aXRoaW4gYHZpcnRpb19ibGsuY2AuIEkmIzM5O20gZmFtaWxpYXIgd2l0aCB0aGlzIGNvZGU7IGl0JiMzOTtzIHJlc3BvbnNpYmxlIGZvciBoYW5kbGluZyBkZXZpY2UgZnJlZXppbmcsIGEgY3J1Y2lhbCBwYXJ0IG9mIG1hbmFnaW5nIHRoZSBibG9jayBkZXZpY2UmIzM5O3Mgc3RhdGUgZHVyaW5nIG9wZXJhdGlvbnMgbGlrZSBzdXNwZW5kIG9yIGhvdHBsdWcuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHRoaXMgZnVuY3Rpb24uCgpSaWdodCwgYFZJUlRJT19CTEtgIGlzIGEgdmlydGlvIGJsb2NrIGRldmljZSBkcml2ZXIuIE5vdywgSSBzZWUgdGhlIGNvZGUgc25pcHBldCB3aGVyZSBpdCB1c2VzIGBibGtfbXFfZnJlZXplX3F1ZXVlYCwgYGJsa19tcV9xdWllc2NlX3F1ZXVlYCwgYW5kIGBibGtfbXFfdW5mcmVlemVfcXVldWVgLiBNeSBhdHRlbnRpb24gaXMgaW1tZWRpYXRlbHkgZHJhd24gdG8gdGhlIHN1YnRsZSBjaGFuZ2UgZnJvbSBgYmxrX21xX3F1aWVzY2VfcXVldWVfbm93YWl0KHEpYCB0byBqdXN0IGBibGtfbXFfcXVpZXNjZV9xdWV1ZShxKWAuIFRoYXQgZGlmZmVyZW5jZSBzdWdnZXN0cyBhIHNpZ25pZmljYW50IGNoYW5nZSBpbiBiZWhhdmlvci4gV2h5IHRoZSBtb2RpZmljYXRpb24/CgpUaGUgb3JpZ2luYWwgY29kZSB1c2VkIGBub3dhaXRgLCB3aGljaCBpbXBsaWVzIGFuIGFzeW5jaHJvbm91cyBxdWllc2NlIG9wZXJhdGlvbi4gVGhlIGN1cnJlbnQgdmVyc2lvbiBub3cgdXNlcyB0aGUgYmxvY2tpbmcgdmVyc2lvbi4gU28sIHdoYXQgd2FzIHRoZSByYXRpb25hbGUgZm9yIHRoaXMgY2hhbmdlPyBJIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBjb21taXQgaGlzdG9yeS4gVGhlIHN0YW5kYXJkIGFwcHJvYWNoIGlzIHRvIHVzZSBgZ2l0IGxvZ2AgdG9vbHMuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgd2l0aCBgZ2l0IGxvZyAtcCAtMWAgdG8gZXhhbWluZSB0aGUgbGFzdCBjb21taXQgdG91Y2hpbmcgdGhpcyBmdW5jdGlvbi4gSWYgdGhhdCBkb2VzbiYjMzk7dCBwcm92aWRlIGVub3VnaCBjb250ZXh0LCBJJiMzOTtsbCBicm9hZGVuIHRoZSBzZWFyY2ggd2l0aCBgZ2l0IGxvZyAtUyB2aXJ0YmxrX2ZyZWV6ZV9wcml2YCBvciBldmVuIGBnaXQgbG9nIC1wIC0yIGRyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jYCB0byBzZWUgbW9yZSBjaGFuZ2VzLiBFc3NlbnRpYWxseSwgSSYjMzk7bSB0cnlpbmcgdG8gZGV0ZXJtaW5lIHRoZSAqd2h5KiBiZWhpbmQgdGhpcyBhbHRlcmF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHN3aXRjaGluZyBmcm9tIGEgbm9uLWJsb2NraW5nIHRvIGEgYmxvY2tpbmcgcXVpZXNjZSBvcGVyYXRpb24gd2l0aGluIHRoaXMgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDk6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YmxrX21xX3F1aWVzY2VfcXVldWUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYz0xNTkwPXN0YXRpYyBpbnQgdmlydGJsa19mcmVlemVfcHJpdihzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldilcbi0tXG5kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYy0xNTk3LVx0bWVtZmxhZ3MgPSBibGtfbXFfZnJlZXplX3F1ZXVlKHEpO1xuZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmM6MTU5ODpcdGJsa19tcV9xdWllc2NlX3F1ZXVlKHEpO1xuZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmMtMTU5OS1cdGJsa19tcV91bmZyZWV6ZV9xdWV1ZShxLCBtZW1mbGFncyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA5OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MzcyCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogNzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3Mgd2hhdCYjMzk7cyBnb2luZyB0aHJvdWdoIG15IGhlYWQgYXMgSSBhcHByb2FjaCB0aGlzIGlzc3VlLgoKKipBbmFseXppbmcgQmxvY2sgTGF5ZXIgUXVpZXNjaW5nIEJlaGF2aW9yKioKCkFscmlnaHQsIHRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gZG8gaXMgZ2V0IHNvbWUgY29udGV4dCBvbiB0aGlzLiBNeSBpbnN0aW5jdCBpcyB0byBleGFtaW5lIHRoZSBHaXQgaGlzdG9yeSBmb3IgdGhpcyBjb2RlLCBpZiBwb3NzaWJsZS4gVGhhdCB3b3VsZCBiZSBpZGVhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgZXZvbHV0aW9uIG9mIHRoaXMgZnVuY3Rpb25hbGl0eS4gSG93ZXZlciwgSSBrbm93IEkgY2FuJiMzOTt0IGp1c3QgcnVuIGBnaXQgbG9nYCBkaXJlY3RseSB3aXRoIG15IGN1cnJlbnQgdG9vbHMuIFNvLCBJIG5lZWQgYSB3b3JrYXJvdW5kLiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgYSB3YXkgdG8gZ2V0IHRoZSBjb250ZXh0IEkgbmVlZC4KCkluc3RlYWQgb2YgZGlyZWN0bHkgbG9va2luZyBmb3IgdGhlIGdpdCBsb2csIGxldCYjMzk7cyBjb21wYXJlIHRob3NlIHR3byBmdW5jdGlvbnM6IGBibGtfbXFfcXVpZXNjZV9xdWV1ZWAgYW5kIGBibGtfbXFfcXVpZXNjZV9xdWV1ZV9ub3dhaXRgLiBUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZW0gc2hvdWxkIG9mZmVyIGEgY2x1ZSBvZiB0aGUgY3VycmVudCBpc3N1ZS4KCk5vdywgbXkgbmV4dCBzdGVwIGlzIGNsZWFyLiBMZXQmIzM5O3MgZGl2ZSByaWdodCBpbnRvIHRoZSBgYmxvY2svYmxrLW1xLmNgIGZpbGUgYW5kIHBpbnBvaW50IHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgYmxrX21xX3F1aWVzY2VfcXVldWVgLiBUaGF0IHNob3VsZCBpbGx1bWluYXRlIGV4YWN0bHkgd2hhdCYjMzk7cyBoYXBwZW5pbmcgdW5kZXIgdGhlIGhvb2QuIEhvcGVmdWxseSwgdGhhdCB3aWxsIGdpdmUgbWUgdGhlIGluZm9ybWF0aW9uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdW5jdGlvbiBhbmQgcmVzb2x2ZSB0aGUgcHJvYmxlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDk6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dm9pZCBibGtfbXFfcXVpZXNjZV9xdWV1ZVxcKCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9ibGstbXEuYz0yODg9RVhQT1JUX1NZTUJPTF9HUEwoYmxrX21xX3dhaXRfcXVpZXNjZV9kb25lKTtcbi0tXG5ibG9jay9ibGstbXEuYy0yOTgtICovXG5ibG9jay9ibGstbXEuYzoyOTk6dm9pZCBibGtfbXFfcXVpZXNjZV9xdWV1ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSlcbmJsb2NrL2Jsay1tcS5jLTMwMC17XG4tLVxuaW5jbHVkZS9saW51eC9ibGstbXEuaD05MzY9dm9pZCBibGtfbXFfc3RhcnRfc3RvcHBlZF9od19xdWV1ZXMoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIGJvb2wgYXN5bmMpO1xuaW5jbHVkZS9saW51eC9ibGstbXEuaDo5Mzc6dm9pZCBibGtfbXFfcXVpZXNjZV9xdWV1ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSk7XG5pbmNsdWRlL2xpbnV4L2Jsay1tcS5oLTkzOC12b2lkIGJsa19tcV93YWl0X3F1aWVzY2VfZG9uZShzdHJ1Y3QgYmxrX21xX3RhZ19zZXQgKnNldCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA5OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2OTQyCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IG1lbnRhbCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBibG9jay9ibGstbXEuYyoqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHNvbWUgYXNwZWN0IG9mIHRoZSBibG9jayBsYXllciwgYW5kIEkmIzM5O20gdGhpbmtpbmcgdGhlIHJlbGV2YW50IHNlY3Rpb24gaXMgYXJvdW5kIGxpbmUgMjkwIGluIGBibG9jay9ibGstbXEuY2AuIEkmIzM5O20gZm9jdXNpbmcgaW4gb24gdGhhdCBmaWxlIGFuZCBzcGVjaWZpYyBsaW5lIHJhbmdlIGJlY2F1c2UgbXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGF0JiMzOTtzIHdoZXJlIEkmIzM5O20gbGlrZWx5IHRvIGZpbmQgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgcmVsYXRlZCB0byB3aGF0ZXZlciBJJiMzOTttIHRyb3VibGVzaG9vdGluZyBvciBpbnZlc3RpZ2F0aW5nIHJpZ2h0IG5vdy4gSSBrbm93IHRoZSBnZW5lcmFsIGFyY2hpdGVjdHVyZSwgYnV0IEkgbmVlZCB0byBnZXQgaW50byB0aGUgZGV0YWlscyB0byBmdWxseSB1bmRlcnN0YW5kIGl0LiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaW4gdGhhdCBzZWN0aW9uLiBUaW1lIHRvIHN0YXJ0IHJlYWRpbmchCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA5OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YmxvY2svYmxrLW1xLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI3MDpcdEVYUE9SVF9TWU1CT0xfR1BMKGJsa19tcV9xdWllc2NlX3F1ZXVlX25vd2FpdCk7XG4gMjcxOlx0XG4gMjcyOlx0LyoqXG4gMjczOlx0ICogYmxrX21xX3dhaXRfcXVpZXNjZV9kb25lKCkgLSB3YWl0IHVudGlsIGluLXByb2dyZXNzIHF1aWVzY2UgaXMgZG9uZVxuIDI3NDpcdCAqIEBzZXQ6IHRhZ19zZXQgdG8gd2FpdCBvblxuIDI3NTpcdCAqXG4gMjc2Olx0ICogTm90ZTogaXQgaXMgZHJpdmVyJiMzOTtzIHJlc3BvbnNpYmlsaXR5IGZvciBtYWtpbmcgc3VyZSB0aGF0IHF1aWVzY2UgaGFzXG4gMjc3Olx0ICogYmVlbiBzdGFydGVkIG9uIG9yIG1vcmUgb2YgdGhlIHJlcXVlc3RfcXVldWVzIG9mIHRoZSB0YWdfc2V0LiAgVGhpc1xuIDI3ODpcdCAqIGZ1bmN0aW9uIG9ubHkgd2FpdHMgZm9yIHRoZSBxdWllc2NlIG9uIHRob3NlIHJlcXVlc3RfcXVldWVzIHRoYXQgaGFkXG4gMjc5Olx0ICogdGhlIHF1aWVzY2UgZmxhZyBzZXQgdXNpbmcgYmxrX21xX3F1aWVzY2VfcXVldWVfbm93YWl0LlxuIDI4MDpcdCAqL1xuIDI4MTpcdHZvaWQgYmxrX21xX3dhaXRfcXVpZXNjZV9kb25lKHN0cnVjdCBibGtfbXFfdGFnX3NldCAqc2V0KVxuIDI4MjpcdHtcbiAyODM6XHRcdGlmIChzZXQtXHUwMDNlZmxhZ3MgXHUwMDI2IEJMS19NUV9GX0JMT0NLSU5HKVxuIDI4NDpcdFx0XHRzeW5jaHJvbml6ZV9zcmN1KHNldC1cdTAwM2VzcmN1KTtcbiAyODU6XHRcdGVsc2VcbiAyODY6XHRcdFx0c3luY2hyb25pemVfcmN1KCk7XG4gMjg3Olx0fVxuIDI4ODpcdEVYUE9SVF9TWU1CT0xfR1BMKGJsa19tcV93YWl0X3F1aWVzY2VfZG9uZSk7XG4gMjg5Olx0XG4gMjkwOlx0LyoqXG4gMjkxOlx0ICogYmxrX21xX3F1aWVzY2VfcXVldWUoKSAtIHdhaXQgdW50aWwgYWxsIG9uZ29pbmcgZGlzcGF0Y2hlcyBoYXZlIGZpbmlzaGVkXG4gMjkyOlx0ICogQHE6IHJlcXVlc3QgcXVldWUuXG4gMjkzOlx0ICpcbiAyOTQ6XHQgKiBOb3RlOiB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90IHByZXZlbnQgdGhhdCB0aGUgc3RydWN0IHJlcXVlc3QgZW5kX2lvKClcbiAyOTU6XHQgKiBjYWxsYmFjayBmdW5jdGlvbiBpcyBpbnZva2VkLiBPbmNlIHRoaXMgZnVuY3Rpb24gaXMgcmV0dXJuZWQsIHdlIG1ha2VcbiAyOTY6XHQgKiBzdXJlIG5vIGRpc3BhdGNoIGNhbiBoYXBwZW4gdW50aWwgdGhlIHF1ZXVlIGlzIHVucXVpZXNjZWQgdmlhXG4gMjk3Olx0ICogYmxrX21xX3VucXVpZXNjZV9xdWV1ZSgpLlxuIDI5ODpcdCAqL1xuIDI5OTpcdHZvaWQgYmxrX21xX3F1aWVzY2VfcXVldWUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpXG4gMzAwOlx0e1xuIDMwMTpcdFx0YmxrX21xX3F1aWVzY2VfcXVldWVfbm93YWl0KHEpO1xuIDMwMjpcdFx0Lyogbm90aGluZyB0byB3YWl0IGZvciBub24tbXEgcXVldWVzICovXG4gMzAzOlx0XHRpZiAocXVldWVfaXNfbXEocSkpXG4gMzA0Olx0XHRcdGJsa19tcV93YWl0X3F1aWVzY2VfZG9uZShxLVx1MDAzZXRhZ19zZXQpO1xuIDMwNTpcdH1cbiAzMDY6XHRFWFBPUlRfU1lNQk9MX0dQTChibGtfbXFfcXVpZXNjZV9xdWV1ZSk7XG4gMzA3Olx0XG4gMzA4Olx0LypcbiAzMDk6XHQgKiBibGtfbXFfdW5xdWllc2NlX3F1ZXVlKCkgLSBjb3VudGVycGFydCBvZiBibGtfbXFfcXVpZXNjZV9xdWV1ZSgpXG4gMzEwOlx0ICogQHE6IHJlcXVlc3QgcXVldWUuXG4gMzExOlx0ICpcbiAzMTI6XHQgKiBUaGlzIGZ1bmN0aW9uIHJlY292ZXJzIHF1ZXVlIGludG8gdGhlIHN0YXRlIGJlZm9yZSBxdWllc2NpbmdcbiAzMTM6XHQgKiB3aGljaCBpcyBkb25lIGJ5IGJsa19tcV9xdWllc2NlX3F1ZXVlLlxuIDMxNDpcdCAqL1xuIDMxNTpcdHZvaWQgYmxrX21xX3VucXVpZXNjZV9xdWV1ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSlcbiAzMTY6XHR7XG4gMzE3Olx0XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIDMxODpcdFx0Ym9vbCBydW5fcXVldWUgPSBmYWxzZTtcbiAzMTk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDk6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc5OTUKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA2MDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgYSBQb3RlbnRpYWwgRGF0YSBDb3JydXB0aW9uIFZ1bG5lcmFiaWxpdHkgaW4gdGhlIEJsb2NrIExheWVyKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gZGlnZ2luZyBpbnRvIHRoaXMgYmxvY2sgbGF5ZXIgY29kZSwgYW5kIEkgdGhpbmsgSSYjMzk7dmUgc3BvdHRlZCBhIHNpZ25pZmljYW50IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbiB0aGF0IGNvdWxkIGxlYWQgdG8gZGF0YSBjb3JydXB0aW9uLiBUaGUgY29yZSBvZiB0aGUgcHJvYmxlbSBzZWVtcyB0byBzdGVtIGZyb20gaG93IHRoZSBgdmlydGJsa2AgZHJpdmVyIGhhbmRsZXMgZGV2aWNlIHF1aWVzY2VuY2UgaW4gcmVsYXRpb24gdG8gZGV2aWNlIHJlc2V0IGFuZCBQTS9zdXNwZW5kIGV2ZW50cy4KCkhlcmUmIzM5O3MgdGhlIGJyZWFrZG93biBhcyBJIHNlZSBpdDogVGhlIGBibGtfbXFfcXVpZXNjZV9xdWV1ZWAgZnVuY3Rpb24gcmVsaWVzIG9uIGBibGtfbXFfd2FpdF9xdWllc2NlX2RvbmVgIHdoaWNoLCBjcml0aWNhbGx5LCB1c2VzIGBzeW5jaHJvbml6ZV9zcmN1YCBvciBgc3luY2hyb25pemVfcmN1KClgLiBUaGlzIGlzIGltcG9ydGFudCBiZWNhdXNlIGl0IGVuc3VyZXMgdGhhdCBhbGwgcHJpb3IgZGlzcGF0Y2hlcyBhcmUgKmNvbXBsZXRlbHkqIGZpbmlzaGVkIGJlZm9yZSBwcm9jZWVkaW5nLiBUaGUgcHJvYmxlbSBpcyB0aGF0IGEgcHJldmlvdXMgZnVuY3Rpb24sIGBibGtfbXFfcXVpZXNjZV9xdWV1ZV9ub3dhaXRgLCBhcHBlYXJzIHRvIHNldCB0aGUgcXVpZXNjZSBiaXQgKndpdGhvdXQqIHdhaXRpbmcgZm9yIHRoZXNlIGRpc3BhdGNoZXMgdG8gY29tcGxldGUuIFRoZSBjb21tZW50cyBpbiBgdmlydGJsa19mcmVlemVfcHJpdmAgYXJlIHJhaXNpbmcgYWxhcm0gYmVsbHM6CgpgYGBjCgkvKiBFbnN1cmUgbm8gcmVxdWVzdHMgaW4gdmlydHF1ZXVlcyBiZWZvcmUgZGVsZXRpbmcgdnFzLiAqLwoJbWVtZmxhZ3MgPSBibGtfbXFfZnJlZXplX3F1ZXVlKHEpOwoJYmxrX21xX3F1aWVzY2VfcXVldWUocSk7CglibGtfbXFfdW5mcmVlemVfcXVldWUocSwgbWVtZmxhZ3MpOwpgYGAKClRoZSB3b3JyeSBpcyB0aGlzOiBpZiBgYmxrX21xX3F1aWVzY2VfcXVldWVgIGRvZXNuJiMzOTt0ICphY3R1YWxseSogd2FpdCwgb25nb2luZyBkaXNwYXRjaGVzIGNvdWxkIHN0aWxsIGJlIGFjY2Vzc2luZyB0aGUgcXVldWVzIHdoZW4gdGhlIGRldmljZSBpcyBiZWluZyByZXNldCwgb3Igd2hlbiB2aXJ0cXVldWVzIGFyZSBkZWxldGVkIGJ5IGB2ZGV2LSZndDtjb25maWctJmd0O2RlbF92cXModmRldilgLiBCb29tISBEYXRhIGNvcnJ1cHRpb24uCgpOb3csIGxldCYjMzk7cyBsb29rIGF0IHRoZSBjb25kaXRpb25zIHRoYXQgY2FuIHRyaWdnZXIgYHZpcnRibGtfZnJlZXplX3ByaXZgLiAgSSBjYW4gc2VlIHR3byBtYWpvciBjYWxsIHBhdGhzOgoKMS4gICoqUE0vU3VzcGVuZC9IaWJlcm5hdGlvbjoqKiBgdmlydGJsa19mcmVlemVgIGNhbGxzIHRoaXMgZnVuY3Rpb24uIGB2aXJ0YmxrX2ZyZWV6ZWAgaXMgY2FsbGVkIHdoZW4gYHZkZXZgIGlzIGZyb3plbiBmb3IgUE0gb3Igc3VzcGVuZC9oaWJlcm5hdGUuIFRoZSBiaWcgcXVlc3Rpb24gaXMsIGNhbiBzeXprYWxsZXIgYmUgdXNlZCB0byB0cmlnZ2VyIHRoZXNlIHN0YXRlcz8gV2l0aCBwc2V1ZG8tc3lzY2FsbHMgb3IgZGlyZWN0IHdyaXRlcyB0byBgL3N5cy9wb3dlci9zdGF0ZWAgKGxpa2UgYG1lbWAsIGBmcmVlemVgLCBvciBgZGlza2ApLCB0aGUgYW5zd2VyIGlzIGFsbW9zdCBjZXJ0YWlubHkgeWVzLCBpdCBjYW4uIFRoaXMgbWVhbnMgd2UgaGF2ZSBhIHBvdGVudGlhbCB0cmlnZ2VyLgoKMi4gICoqUENJIFJlc2V0OioqICBUaGUgb3RoZXIgaW50ZXJlc3RpbmcgcGF0aCBpcyB0aHJvdWdoIGB2aXJ0YmxrX3Jlc2V0X3ByZXBhcmVgLiBNeSBjb2RlIGluc3BlY3Rpb24gcmV2ZWFscyB0aGF0ICBgdmlydGlvX3BjaV9yZXNldF9wcmVwYXJlYCBpcyBjYWxsZWQgaW4gYHZpcnRpb19wY2lfZXJyX2hhbmRsZXJgIHdoZXJlIGAucmVzZXRfcHJlcGFyZSA9IHZpcnRpb19wY2lfcmVzZXRfcHJlcGFyZWAuCiAgICBUaGUgY3J1Y2lhbCBsaW5rIGhlcmUgaXMgdGhlIGAvc3lzL2J1cy9wY2kvZGV2aWNlcy8uLi4vcmVzZXRgIGZpbGUuIElmIGEgdXNlciBjYW4gd3JpdGUgJiMzOTsxJiMzOTsgdG8gaXQsIHdlIGdldCBhIGNhbGwgY2hhaW46IGBwY2lfcmVzZXRfZnVuY3Rpb25gIC0mZ3Q7IGBwY2lfZGV2X3NhdmVfYW5kX2Rpc2FibGVgIC0mZ3Q7IGBlcnJfaGFuZGxlci0mZ3Q7cmVzZXRfcHJlcGFyZShwY2lfZGV2KWAgLSZndDsgYHZpcnRpb19wY2lfcmVzZXRfcHJlcGFyZWAgLSZndDsgYHZpcnRpb19kZXZpY2VfcmVzZXRfcHJlcGFyZSgmYW1wO3ZwX2Rldi0mZ3Q7dmRldilgIC0mZ3Q7IGBkcnYtJmd0O3Jlc2V0X3ByZXBhcmUoZGV2KWAgLSZndDsgYHZpcnRibGtfcmVzZXRfcHJlcGFyZWAgLSZndDsgYHZpcnRibGtfZnJlZXplX3ByaXZgISAgQW5kIEkga25vdywgZnJvbSBleHBlcmllbmNlLCB0aGF0IHVzZXIgc3BhY2UgY2FuIHdyaXRlIHRvIHRoaXMgZmlsZSwgdGhpcyBjYWxscyBgcGNpX3Jlc2V0X2Z1bmN0aW9uYC4KClRoZXJlZm9yZSwgdGhlIHJlc2V0IHBhdGggb2ZmZXJzIGFub3RoZXIsIHBlcmhhcHMgZXZlbiBtb3JlIGVhc2lseSB0cmlnZ2VyZWQsIHJvdXRlIHRvIGhpdCB0aGUgcHJvYmxlbWF0aWMgc2VxdWVuY2UuIEkmIzM5O20gZ29pbmcgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IGBwY2lfcmVzZXRfZnVuY3Rpb25gIGl0c2VsZiBpbiBgZHJpdmVycy9wY2kvcGNpLmNgIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIHBvdGVudGlhbCBtaXRpZ2F0aW9ucyBvciBjb21wbGV4aXRpZXMgaW4gdGhhdCBjYWxsIGNoYWluIHRoYXQgSSBuZWVkIHRvIGNvbnNpZGVyLiBNeSBndXQgZmVlbGluZyBpcyB0aGF0IHRoaXMgaXMgYSByYWNlIHRoYXQgbmVlZHMgdXJnZW50IGF0dGVudGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDk6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGNpX3Jlc2V0X2Z1bmN0aW9uJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9wY2kvcGNpLmM9NzYxPUVYUE9SVF9TWU1CT0xfR1BMKHpwY2lfZGlzYWJsZV9kZXZpY2UpO1xuLS1cbmFyY2gvczM5MC9wY2kvcGNpLmMtNzgwLSAqIEluIG1vc3QgY2FzZXMgdGhpcyBmdW5jdGlvbiBzaG91bGQgbm90IGJlIGNhbGxlZCBkaXJlY3RseSBidXQgdGhyb3VnaFxuYXJjaC9zMzkwL3BjaS9wY2kuYzo3ODE6ICogcGNpX3Jlc2V0X2Z1bmN0aW9uKCkgb3IgcGNpX3Jlc2V0X2J1cygpIHdoaWNoIGhhbmRsZSB0aGUgc2F2ZS9yZXN0b3JlIGFuZFxuYXJjaC9zMzkwL3BjaS9wY2kuYy03ODItICogbG9ja2luZyAtIGFzc2VydGVkIGJ5IGxvY2tkZXAuXG4tLVxuZHJpdmVycy9ibHVldG9vdGgvYnRpbnRlbF9wY2llLmM9MjY3MD1zdGF0aWMgaW50IGJ0aW50ZWxfcGNpZV9wZXJmb3JtX2ZscihzdHJ1Y3QgYnRpbnRlbF9wY2llX2RhdGEgKmRhdGEpXG4tLVxuZHJpdmVycy9ibHVldG9vdGgvYnRpbnRlbF9wY2llLmMtMjY3Ny1cdCAqIHRoZW4gd2FpdHMgZm9yIHRoaXMgd29yayB2aWEgZGlzYWJsZV93b3JrX3N5bmMoKTsgdGhlIGJsb2NraW5nXG5kcml2ZXJzL2JsdWV0b290aC9idGludGVsX3BjaWUuYzoyNjc4Olx0ICogcGNpX3Jlc2V0X2Z1bmN0aW9uKCkgd291bGQgZGVhZGxvY2sgYnkgdHJ5aW5nIHRvIHJlLWFjcXVpcmVcbmRyaXZlcnMvYmx1ZXRvb3RoL2J0aW50ZWxfcGNpZS5jLTI2NzktXHQgKiBkZXZpY2VfbG9jayBoZXJlLlxuLS1cbmRyaXZlcnMvYmx1ZXRvb3RoL2hjaV9iY200Mzc3LmM9MjI3Nj1zdGF0aWMgaW50IGJjbTQzNzdfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcbi0tXG5kcml2ZXJzL2JsdWV0b290aC9oY2lfYmNtNDM3Ny5jLTIzMTUtXG5kcml2ZXJzL2JsdWV0b290aC9oY2lfYmNtNDM3Ny5jOjIzMTY6XHRyZXQgPSBwY2lfcmVzZXRfZnVuY3Rpb25fbG9ja2VkKHBkZXYpO1xuZHJpdmVycy9ibHVldG9vdGgvaGNpX2JjbTQzNzcuYy0yMzE3LVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL2RtYS9pZHhkL2lycS5jPTM4Nj1zdGF0aWMgdm9pZCBpZHhkX2RldmljZV9mbHIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbmRyaXZlcnMvZG1hL2lkeGQvaXJxLmMtMzkyLVx0ICogSURYRCBkZXZpY2UgcmVxdWlyZXMgYSBGdW5jdGlvbiBMZXZlbCBSZXNldCAoRkxSKS5cbmRyaXZlcnMvZG1hL2lkeGQvaXJxLmM6MzkzOlx0ICogcGNpX3Jlc2V0X2Z1bmN0aW9uKCkgd2lsbCByZXNldCB0aGUgZGV2aWNlIHdpdGggRkxSLlxuZHJpdmVycy9kbWEvaWR4ZC9pcnEuYy0zOTQtXHQgKi9cbmRyaXZlcnMvZG1hL2lkeGQvaXJxLmM6Mzk1Olx0cmMgPSBwY2lfcmVzZXRfZnVuY3Rpb24oaWR4ZC1cdTAwM2VwZGV2KTtcbmRyaXZlcnMvZG1hL2lkeGQvaXJxLmMtMzk2LVx0aWYgKHJjKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9kZXZpY2UuYz0xMDc3PWludCBhbWRncHVfZGV2aWNlX3BjaV9yZXNldChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldilcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9kZXZpY2UuYy0xMDc4LXtcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9kZXZpY2UuYzoxMDc5Olx0cmV0dXJuIHBjaV9yZXNldF9mdW5jdGlvbihhZGV2LVx1MDAzZXBkZXYpO1xuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2RldmljZS5jLTEwODAtfVxuLS1cbmRyaXZlcnMvaGlkL2ludGVsLWlzaC1oaWQvaXBjL2lwYy5jPTc2Mz1zdGF0aWMgaW50IF9pc2hfaHdfcmVzZXQoc3RydWN0IGlzaHRwX2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvaGlkL2ludGVsLWlzaC1oaWQvaXBjL2lwYy5jLTc3MS1cbmRyaXZlcnMvaGlkL2ludGVsLWlzaC1oaWQvaXBjL2lwYy5jOjc3MjpcdHJ2ID0gcGNpX3Jlc2V0X2Z1bmN0aW9uKHBkZXYpO1xuZHJpdmVycy9oaWQvaW50ZWwtaXNoLWhpZC9pcGMvaXBjLmMtNzczLVx0aWYgKCFydilcbi0tXG5kcml2ZXJzL21pc2MvZ2Vud3FlL2NhcmRfYmFzZS5jPTE1OD1zdGF0aWMgdm9pZCBnZW53cWVfZGV2X2ZyZWUoc3RydWN0IGdlbndxZV9kZXYgKmNkKVxuLS1cbmRyaXZlcnMvbWlzYy9nZW53cWUvY2FyZF9iYXNlLmMtMTcwLSAqXG5kcml2ZXJzL21pc2MvZ2Vud3FlL2NhcmRfYmFzZS5jOjE3MTogKiBwY2lfcmVzZXRfZnVuY3Rpb24oKSB3aWxsIHJlY292ZXIgdGhlIGRldmljZSBhbmQgZW5zdXJlIHRoYXQgdGhlXG5kcml2ZXJzL21pc2MvZ2Vud3FlL2NhcmRfYmFzZS5jLTE3Mi0gKiByZWdpc3RlcnMgYXJlIGFjY2Vzc2libGUgYWdhaW4gd2hlbiBpdCBjb21wbGV0ZXMgd2l0aCBzdWNjZXNzLiBJZlxuLS1cbmRyaXZlcnMvbWlzYy9nZW53cWUvY2FyZF9iYXNlLmM9MTc2PXN0YXRpYyBpbnQgZ2Vud3FlX2J1c19yZXNldChzdHJ1Y3QgZ2Vud3FlX2RldiAqY2QpXG4tLVxuZHJpdmVycy9taXNjL2dlbndxZS9jYXJkX2Jhc2UuYy0xOTMtXHQgKiBTZXR0aW5ncyBsaWtlIGVuYWJsZSBidXMtbWFzdGVyaW5nLCAuLi4gYXJlIGJhY2t1cGVkIGFuZFxuZHJpdmVycy9taXNjL2dlbndxZS9jYXJkX2Jhc2UuYzoxOTQ6XHQgKiByZXN0b3JlZCBieSB0aGUgcGNpX3Jlc2V0X2Z1bmN0aW9uKCkuXG5kcml2ZXJzL21pc2MvZ2Vud3FlL2NhcmRfYmFzZS5jLTE5NS1cdCAqL1xuZHJpdmVycy9taXNjL2dlbndxZS9jYXJkX2Jhc2UuYy0xOTYtXHRkZXZfZGJnKFx1MDAyNnBjaV9kZXYtXHUwMDNlZGV2LCBcJiMzNDtbJXNdIHBjaV9yZXNldCBmdW5jdGlvbiAuLi5cXG5cJiMzNDssIF9fZnVuY19fKTtcbmRyaXZlcnMvbWlzYy9nZW53cWUvY2FyZF9iYXNlLmM6MTk3Olx0cmMgPSBwY2lfcmVzZXRfZnVuY3Rpb24ocGNpX2Rldik7XG5kcml2ZXJzL21pc2MvZ2Vud3FlL2NhcmRfYmFzZS5jLTE5OC1cdGlmIChyYykge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9tYWluLmM9NTgyPXN0YXRpYyB2b2lkIHBkc2NfcGNpX2Vycm9yX3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvbWFpbi5jLTU4Ni1cdGlmICh0ZXN0X2JpdChQRFNDX1NfRldfREVBRCwgXHUwMDI2cGRzYy1cdTAwM2VzdGF0ZSkpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvbWFpbi5jOjU4NzpcdFx0cGNpX3Jlc2V0X2Z1bmN0aW9uX2xvY2tlZChwZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9tYWluLmMtNTg4LX1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vbGlvX21haW4uYz05MTU9c3RhdGljIHZvaWQgb2N0ZW9uX3BjaV9mbHIoc3RydWN0IG9jdGVvbl9kZXZpY2UgKm9jdClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vbGlvX21haW4uYy05MjYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vbGlvX21haW4uYzo5Mjc6XHRyYyA9IF9fcGNpX3Jlc2V0X2Z1bmN0aW9uX2xvY2tlZChvY3QtXHUwMDNlcGNpX2Rldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vbGlvX21haW4uYy05MjgtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiNHZmL2N4Z2I0dmZfbWFpbi5jPTI1MTU9c3RhdGljIGludCBhZGFwX2luaXQwKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjR2Zi9jeGdiNHZmX21haW4uYy0yNTIzLVx0ICogU29tZSBlbnZpcm9ubWVudHMgZG8gbm90IHByb3Blcmx5IGhhbmRsZSBQQ0lFIEZMUnMgLS0gZS5nLiBpbiBMaW51eFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiNHZmL2N4Z2I0dmZfbWFpbi5jOjI1MjQ6XHQgKiAyLjYuMzEgYW5kIGxhdGVyIHdlIGNhbiYjMzk7dCBjYWxsIHBjaV9yZXNldF9mdW5jdGlvbigpIGluIG9yZGVyIHRvXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaGVsc2lvL2N4Z2I0dmYvY3hnYjR2Zl9tYWluLmMtMjUyNS1cdCAqIGlzc3VlIGFuIEZMUiBiZWNhdXNlIG9mIGEgc2VsZi0gZGVhZGxvY2sgb24gdGhlIGRldmljZSBzZW1hcGhvcmUuXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvcGNpLmM9MTc5MT1zdGF0aWMgaW50IG1seHN3X3BjaV9yZXNldF9hdF9wY2lfZGlzYWJsZShzdHJ1Y3QgbWx4c3dfcGNpICptbHhzd19wY2ksXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvcGNpLmMtMTgxOC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3BjaS5jOjE4MTk6XHRlcnIgPSBfX3BjaV9yZXNldF9mdW5jdGlvbl9sb2NrZWQocGRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9wY2kuYy0xODIwLVx0aWYgKGVycilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9wZW5zYW5kby9pb25pYy9pb25pY19idXNfcGNpLmM9NTAzPXN0YXRpYyB2b2lkIGlvbmljX3BjaV9lcnJvcl9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcGVuc2FuZG8vaW9uaWMvaW9uaWNfYnVzX3BjaS5jLTUwOC1cdGlmIChsaWYgXHUwMDI2XHUwMDI2IHRlc3RfYml0KElPTklDX0xJRl9GX0ZXX1JFU0VULCBsaWYtXHUwMDNlc3RhdGUpKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcGVuc2FuZG8vaW9uaWMvaW9uaWNfYnVzX3BjaS5jOjUwOTpcdFx0cGNpX3Jlc2V0X2Z1bmN0aW9uX2xvY2tlZChwZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3BlbnNhbmRvL2lvbmljL2lvbmljX2J1c19wY2kuYy01MTAtfVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xbGNuaWMvcWxjbmljX2N0eC5jPTYyNj1pbnQgcWxjbmljX2Z3X2NyZWF0ZV9jdHgoc3RydWN0IHFsY25pY19hZGFwdGVyICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FsY25pYy9xbGNuaWNfY3R4LmMtNjMwLVx0aWYgKGRldi1cdTAwM2VmbGFncyBcdTAwMjYgUUxDTklDX05FRURfRkxSKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWxjbmljL3FsY25pY19jdHguYzo2MzE6XHRcdGVyciA9IHBjaV9yZXNldF9mdW5jdGlvbihkZXYtXHUwMDNlcGRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWxjbmljL3FsY25pY19jdHguYy02MzItXHRcdGlmIChlcnIpIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvbWNkaS5jPTE5MDY9aW50IGVmeF9tY2RpX3Jlc2V0KHN0cnVjdCBlZnhfbmljICplZngsIGVudW0gcmVzZXRfdHlwZSBtZXRob2QpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL21jZGkuYy0xOTExLVx0aWYgKG1ldGhvZCA9PSBSRVNFVF9UWVBFX01DRElfVElNRU9VVCkge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL21jZGkuYzoxOTEyOlx0XHRyYyA9IHBjaV9yZXNldF9mdW5jdGlvbihlZngtXHUwMDNlcGNpX2Rldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvbWNkaS5jLTE5MTMtXHRcdGlmIChyYylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvc2llbmEvbWNkaS5jPTE4NjY9aW50IGVmeF9zaWVuYV9tY2RpX3Jlc2V0KHN0cnVjdCBlZnhfbmljICplZngsIGVudW0gcmVzZXRfdHlwZSBtZXRob2QpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL3NpZW5hL21jZGkuYy0xODcxLVx0aWYgKG1ldGhvZCA9PSBSRVNFVF9UWVBFX01DRElfVElNRU9VVCkge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL3NpZW5hL21jZGkuYzoxODcyOlx0XHRyYyA9IHBjaV9yZXNldF9mdW5jdGlvbihlZngtXHUwMDNlcGNpX2Rldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvc2llbmEvbWNkaS5jLTE4NzMtXHRcdGlmIChyYylcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL3BjaWUvZ2VuMV8yL3RyYW5zLmM9MjEyNj1zdGF0aWMgdm9pZCBpd2xfdHJhbnNfcGNpZV9jYWxsX3Jlc2V0KHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvcGNpZS9nZW4xXzIvdHJhbnMuYy0yMTY4LVx0SVdMX0RFQlVHX0RFVl9QT1dFUihcdTAwMjZwZGV2LVx1MDAzZWRldixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvcGNpZS9nZW4xXzIvdHJhbnMuYzoyMTY5Olx0XHRcdCAgICBcJiMzNDtObyBCSU9TIHN1cHBvcnQsIHVzaW5nIHBjaV9yZXNldF9mdW5jdGlvbigpXFxuXCYjMzQ7KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvcGNpZS9nZW4xXzIvdHJhbnMuYy0yMTcwLSNlbmRpZlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9wY2llL2dlbjFfMi90cmFucy5jOjIxNzE6XHRwY2lfcmVzZXRfZnVuY3Rpb24ocGRldik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL3BjaWUvZ2VuMV8yL3RyYW5zLmMtMjE3Mi19XG4tLVxuZHJpdmVycy9uZXQvd3dhbi90N3h4L3Q3eHhfbW9kZW1fb3BzLmM9MTQ1PXN0YXRpYyBpbnQgdDd4eF9hY3BpX3Jlc2V0KHN0cnVjdCB0N3h4X3BjaV9kZXYgKnQ3eHhfZGV2LCBjaGFyICpmbl9uYW1lKVxuLS1cbmRyaXZlcnMvbmV0L3d3YW4vdDd4eC90N3h4X21vZGVtX29wcy5jLTE3NC1cbmRyaXZlcnMvbmV0L3d3YW4vdDd4eC90N3h4X21vZGVtX29wcy5jOjE3NTpcdHJldCA9IHBjaV9yZXNldF9mdW5jdGlvbih0N3h4X2Rldi1cdTAwM2VwZGV2KTtcbmRyaXZlcnMvbmV0L3d3YW4vdDd4eC90N3h4X21vZGVtX29wcy5jLTE3Ni1cdGlmIChyZXQpIHtcbi0tXG5kcml2ZXJzL3BjaS9wY2ktc3lzZnMuYz0xNTU2PXN0YXRpYyBzc2l6ZV90IHJlc2V0X3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG4tLVxuZHJpdmVycy9wY2kvcGNpLXN5c2ZzLmMtMTU2OS1cdHBtX3J1bnRpbWVfZ2V0X3N5bmMoZGV2KTtcbmRyaXZlcnMvcGNpL3BjaS1zeXNmcy5jOjE1NzA6XHRyZXN1bHQgPSBwY2lfcmVzZXRfZnVuY3Rpb24ocGRldik7XG5kcml2ZXJzL3BjaS9wY2ktc3lzZnMuYy0xNTcxLVx0cG1fcnVudGltZV9wdXQoZGV2KTtcbi0tXG5kcml2ZXJzL3BjaS9wY2kuYz01MTQ0PWNvbnN0IHN0cnVjdCBwY2lfcmVzZXRfZm5fbWV0aG9kIHBjaV9yZXNldF9mbl9tZXRob2RzW10gPSB7XG4tLVxuZHJpdmVycy9wY2kvcGNpLmMtNTE1NS0vKipcbmRyaXZlcnMvcGNpL3BjaS5jOjUxNTY6ICogX19wY2lfcmVzZXRfZnVuY3Rpb25fbG9ja2VkIC0gcmVzZXQgYSBQQ0kgZGV2aWNlIGZ1bmN0aW9uIHdoaWxlIGhvbGRpbmdcbmRyaXZlcnMvcGNpL3BjaS5jLTUxNTctICogdGhlIEBkZXYgbXV0ZXggbG9jay5cbi0tXG5kcml2ZXJzL3BjaS9wY2kuYy01MTc2LSAqL1xuZHJpdmVycy9wY2kvcGNpLmM6NTE3NzppbnQgX19wY2lfcmVzZXRfZnVuY3Rpb25fbG9ja2VkKHN0cnVjdCBwY2lfZGV2ICpkZXYpXG5kcml2ZXJzL3BjaS9wY2kuYy01MTc4LXtcbi0tXG5kcml2ZXJzL3BjaS9wY2kuYy01MjEwLX1cbmRyaXZlcnMvcGNpL3BjaS5jOjUyMTE6RVhQT1JUX1NZTUJPTF9HUEwoX19wY2lfcmVzZXRfZnVuY3Rpb25fbG9ja2VkKTtcbmRyaXZlcnMvcGNpL3BjaS5jLTUyMTItXG4tLVxuZHJpdmVycy9wY2kvcGNpLmM9NTIyNT12b2lkIHBjaV9pbml0X3Jlc2V0X21ldGhvZHMoc3RydWN0IHBjaV9kZXYgKmRldilcbi0tXG5kcml2ZXJzL3BjaS9wY2kuYy01MjQ1LS8qKlxuZHJpdmVycy9wY2kvcGNpLmM6NTI0NjogKiBwY2lfcmVzZXRfZnVuY3Rpb24gLSBxdWllc2NlIGFuZCByZXNldCBhIFBDSSBkZXZpY2UgZnVuY3Rpb25cbmRyaXZlcnMvcGNpL3BjaS5jLTUyNDctICogQGRldjogUENJIGRldmljZSB0byByZXNldFxuLS1cbmRyaXZlcnMvcGNpL3BjaS5jLTUyNTQtICogY2xlYXJzIGFsbCB0aGUgc3RhdGUgYXNzb2NpYXRlZCB3aXRoIHRoZSBkZXZpY2UuICBUaGlzIGZ1bmN0aW9uIGRpZmZlcnNcbmRyaXZlcnMvcGNpL3BjaS5jOjUyNTU6ICogZnJvbSBfX3BjaV9yZXNldF9mdW5jdGlvbl9sb2NrZWQoKSBpbiB0aGF0IGl0IHNhdmVzIGFuZCByZXN0b3JlcyBkZXZpY2Ugc3RhdGVcbmRyaXZlcnMvcGNpL3BjaS5jLTUyNTYtICogb3ZlciB0aGUgcmVzZXQgYW5kIHRha2VzIHRoZSBQQ0kgZGV2aWNlIGxvY2suXG4tLVxuZHJpdmVycy9wY2kvcGNpLmMtNTI2MC0gKi9cbmRyaXZlcnMvcGNpL3BjaS5jOjUyNjE6aW50IHBjaV9yZXNldF9mdW5jdGlvbihzdHJ1Y3QgcGNpX2RldiAqZGV2KVxuZHJpdmVycy9wY2kvcGNpLmMtNTI2Mi17XG4tLVxuZHJpdmVycy9wY2kvcGNpLmMtNTI3OS1cbmRyaXZlcnMvcGNpL3BjaS5jOjUyODA6XHRyYyA9IF9fcGNpX3Jlc2V0X2Z1bmN0aW9uX2xvY2tlZChkZXYpO1xuZHJpdmVycy9wY2kvcGNpLmMtNTI4MS1cbi0tXG5kcml2ZXJzL3BjaS9wY2kuYy01Mjg5LX1cbmRyaXZlcnMvcGNpL3BjaS5jOjUyOTA6RVhQT1JUX1NZTUJPTF9HUEwocGNpX3Jlc2V0X2Z1bmN0aW9uKTtcbmRyaXZlcnMvcGNpL3BjaS5jLTUyOTEtXG5kcml2ZXJzL3BjaS9wY2kuYy01MjkyLS8qKlxuZHJpdmVycy9wY2kvcGNpLmM6NTI5MzogKiBwY2lfcmVzZXRfZnVuY3Rpb25fbG9ja2VkIC0gcXVpZXNjZSBhbmQgcmVzZXQgYSBQQ0kgZGV2aWNlIGZ1bmN0aW9uXG5kcml2ZXJzL3BjaS9wY2kuYy01Mjk0LSAqIEBkZXY6IFBDSSBkZXZpY2UgdG8gcmVzZXRcbi0tXG5kcml2ZXJzL3BjaS9wY2kuYy01MzAxLSAqIGNsZWFycyBhbGwgdGhlIHN0YXRlIGFzc29jaWF0ZWQgd2l0aCB0aGUgZGV2aWNlLiAgVGhpcyBmdW5jdGlvbiBkaWZmZXJzXG5kcml2ZXJzL3BjaS9wY2kuYzo1MzAyOiAqIGZyb20gX19wY2lfcmVzZXRfZnVuY3Rpb25fbG9ja2VkKCkgaW4gdGhhdCBpdCBzYXZlcyBhbmQgcmVzdG9yZXMgZGV2aWNlIHN0YXRlXG5kcml2ZXJzL3BjaS9wY2kuYzo1MzAzOiAqIG92ZXIgdGhlIHJlc2V0LiAgSXQgYWxzbyBkaWZmZXJzIGZyb20gcGNpX3Jlc2V0X2Z1bmN0aW9uKCkgaW4gdGhhdCBpdFxuZHJpdmVycy9wY2kvcGNpLmMtNTMwNC0gKiByZXF1aXJlcyB0aGUgUENJIGRldmljZSBsb2NrIHRvIGJlIGhlbGQuXG4tLVxuZHJpdmVycy9wY2kvcGNpLmMtNTMxMC0gKi9cbmRyaXZlcnMvcGNpL3BjaS5jOjUzMTE6aW50IHBjaV9yZXNldF9mdW5jdGlvbl9sb2NrZWQoc3RydWN0IHBjaV9kZXYgKmRldilcbmRyaXZlcnMvcGNpL3BjaS5jLTUzMTIte1xuLS1cbmRyaXZlcnMvcGNpL3BjaS5jLTUzMjEtXG5kcml2ZXJzL3BjaS9wY2kuYzo1MzIyOlx0cmMgPSBfX3BjaV9yZXNldF9mdW5jdGlvbl9sb2NrZWQoZGV2KTtcbmRyaXZlcnMvcGNpL3BjaS5jLTUzMjMtXG4tLVxuZHJpdmVycy9wY2kvcGNpLmMtNTMyNy19XG5kcml2ZXJzL3BjaS9wY2kuYzo1MzI4OkVYUE9SVF9TWU1CT0xfR1BMKHBjaV9yZXNldF9mdW5jdGlvbl9sb2NrZWQpO1xuZHJpdmVycy9wY2kvcGNpLmMtNTMyOS1cbi0tXG5kcml2ZXJzL3BjaS9wY2kuYz01MzM2PWludCBwY2lfdHJ5X3Jlc2V0X2Z1bmN0aW9uKHN0cnVjdCBwY2lfZGV2ICpkZXYpXG4tLVxuZHJpdmVycy9wY2kvcGNpLmMtNTM0Ni1cdHBjaV9kZXZfc2F2ZV9hbmRfZGlzYWJsZShkZXYpO1xuZHJpdmVycy9wY2kvcGNpLmM6NTM0NzpcdHJjID0gX19wY2lfcmVzZXRfZnVuY3Rpb25fbG9ja2VkKGRldik7XG5kcml2ZXJzL3BjaS9wY2kuYy01MzQ4LVx0cGNpX2Rldl9yZXN0b3JlKGRldik7XG4tLVxuZHJpdmVycy9wY2kvcXVpcmtzLmM9MzgxND1zdGF0aWMgdm9pZCBxdWlya19ub19wbV9yZXNldChzdHJ1Y3QgcGNpX2RldiAqZGV2KVxuLS1cbmRyaXZlcnMvcGNpL3F1aXJrcy5jLTM4MjgtICogbW9uaXRvciBzeW5jLiAgQWR2ZXJ0aXNpbmcgdGhpcyBzdXBwb3J0IG1ha2VzIG90aGVyIGxheWVycywgbGlrZSBWRklPLFxuZHJpdmVycy9wY2kvcXVpcmtzLmM6MzgyOTogKiBhc3N1bWUgcGNpX3Jlc2V0X2Z1bmN0aW9uKCkgaXMgdmlhYmxlIGZvciB0aGlzIGRldmljZS4gIE1hcmsgaXQgYXNcbmRyaXZlcnMvcGNpL3F1aXJrcy5jLTM4MzAtICogdW5hdmFpbGFibGUgdG8gc2tpcCBpdCB3aGVuIHRlc3RpbmcgcmVzZXQgbWV0aG9kcy5cbi0tXG5kcml2ZXJzL3BjaS9xdWlya3MuYz00MDA1PXN0YXRpYyBpbnQgcmVzZXRfY2hlbHNpb19nZW5lcmljX2RldihzdHJ1Y3QgcGNpX2RldiAqZGV2LCBib29sIHByb2JlKVxuLS1cbmRyaXZlcnMvcGNpL3F1aXJrcy5jLTQwMjctXHQgKiBMZXZlbCBSZXNldCBjb21wbGV0ZXMuICAoQlVTX01BU1RFUiBpcyBkaXNhYmxlZCBpblxuZHJpdmVycy9wY2kvcXVpcmtzLmM6NDAyODpcdCAqIHBjaV9yZXNldF9mdW5jdGlvbigpKS5cbmRyaXZlcnMvcGNpL3F1aXJrcy5jLTQwMjktXHQgKi9cbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYz02ODM9dm9pZCB2ZmlvX3BjaV9jb3JlX2Rpc2FibGUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KVxuLS1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTcwNy1cdC8qXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYzo3MDg6XHQgKiBUaGlzIGZ1bmN0aW9uIGNhbGxzIF9fcGNpX3Jlc2V0X2Z1bmN0aW9uX2xvY2tlZCgpIHdoaWNoIGludGVybmFsbHlcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTcwOS1cdCAqIGNhbiB1c2UgcGNpX3BtX3Jlc2V0KCkgZm9yIHRoZSBmdW5jdGlvbiByZXNldC4gcGNpX3BtX3Jlc2V0KCkgd2lsbFxuLS1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTc4MC1cdCAqIERpc2FibGUgSU5UeCBhbmQgTVNJLCBwcmVzdW1hYmx5IHRvIGF2b2lkIHNwdXJpb3VzIGludGVycnVwdHNcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jOjc4MTpcdCAqIGR1cmluZyByZXNldC4gIFN0b2xlbiBmcm9tIHBjaV9yZXNldF9mdW5jdGlvbigpXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy03ODItXHQgKi9cbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy03OTYtXHRcdGlmIChwY2lfZGV2X3RyeWxvY2socGRldikpIHtcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jOjc5NzpcdFx0XHRpZiAoIV9fcGNpX3Jlc2V0X2Z1bmN0aW9uX2xvY2tlZChwZGV2KSlcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTc5OC1cdFx0XHRcdHZkZXYtXHUwMDNlbmVlZHNfcmVzZXQgPSBmYWxzZTtcbi0tXG5kcml2ZXJzL3hlbi94ZW4tcGNpYmFjay9wY2lfc3R1Yi5jPTEwMT1zdGF0aWMgaW50IHBjaXN0dWJfcmVzZXRfZGV2aWNlX3N0YXRlKHN0cnVjdCBwY2lfZGV2ICpkZXYpXG5kcml2ZXJzL3hlbi94ZW4tcGNpYmFjay9wY2lfc3R1Yi5jLTEwMi17XG5kcml2ZXJzL3hlbi94ZW4tcGNpYmFjay9wY2lfc3R1Yi5jOjEwMzpcdF9fcGNpX3Jlc2V0X2Z1bmN0aW9uX2xvY2tlZChkZXYpO1xuZHJpdmVycy94ZW4veGVuLXBjaWJhY2svcGNpX3N0dWIuYy0xMDQtXG4tLVxuZHJpdmVycy94ZW4veGVuLXBjaWJhY2svcGNpX3N0dWIuYz02MDE9c3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHhlbl9wY2lia19wY2lfZHJpdmVyO1xuZHJpdmVycy94ZW4veGVuLXBjaWJhY2svcGNpX3N0dWIuYy02MDItXG5kcml2ZXJzL3hlbi94ZW4tcGNpYmFjay9wY2lfc3R1Yi5jOjYwMzovKiBDYWxsZWQgd2hlbiAmIzM5O2JpbmQmIzM5Oy4gVGhpcyBtZWFucyB3ZSBtdXN0IF9OT1RfIGNhbGwgcGNpX3Jlc2V0X2Z1bmN0aW9uIG9yXG5kcml2ZXJzL3hlbi94ZW4tcGNpYmFjay9wY2lfc3R1Yi5jLTYwNC0gKiBvdGhlciBmdW5jdGlvbnMgdGhhdCB0YWtlIHRoZSBzeXNmcyBsb2NrLiAqL1xuZHJpdmVycy94ZW4veGVuLXBjaWJhY2svcGNpX3N0dWIuYz02MDU9c3RhdGljIGludCBwY2lzdHViX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcbi0tXG5kcml2ZXJzL3hlbi94ZW4tcGNpYmFjay9wY2lfc3R1Yi5jLTY0NC1cbmRyaXZlcnMveGVuL3hlbi1wY2liYWNrL3BjaV9zdHViLmM6NjQ1Oi8qIENhbGxlZCB3aGVuICYjMzk7dW5iaW5kJiMzOTsuIFRoaXMgbWVhbnMgd2UgbXVzdCBfTk9UXyBjYWxsIHBjaV9yZXNldF9mdW5jdGlvbiBvclxuZHJpdmVycy94ZW4veGVuLXBjaWJhY2svcGNpX3N0dWIuYy02NDYtICogb3RoZXIgZnVuY3Rpb25zIHRoYXQgdGFrZSB0aGUgc3lzZnMgbG9jay4gKi9cbi0tXG5pbmNsdWRlL2xpbnV4L3BjaS5oPTE0ODM9aW50IHBjaWVfZmxyKHN0cnVjdCBwY2lfZGV2ICpkZXYpO1xuaW5jbHVkZS9saW51eC9wY2kuaDoxNDg0OmludCBfX3BjaV9yZXNldF9mdW5jdGlvbl9sb2NrZWQoc3RydWN0IHBjaV9kZXYgKmRldik7XG5pbmNsdWRlL2xpbnV4L3BjaS5oOjE0ODU6aW50IHBjaV9yZXNldF9mdW5jdGlvbihzdHJ1Y3QgcGNpX2RldiAqZGV2KTtcbmluY2x1ZGUvbGludXgvcGNpLmg6MTQ4NjppbnQgcGNpX3Jlc2V0X2Z1bmN0aW9uX2xvY2tlZChzdHJ1Y3QgcGNpX2RldiAqZGV2KTtcbmluY2x1ZGUvbGludXgvcGNpLmgtMTQ4Ny1pbnQgcGNpX3RyeV9yZXNldF9mdW5jdGlvbihzdHJ1Y3QgcGNpX2RldiAqZGV2KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDk6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ5MjUKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIHRoZSBQQ0kgUmVzZXQgRnVuY3Rpb25hbGl0eSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBob3cgUENJIGRldmljZSByZXNldHMgYXJlIGhhbmRsZWQsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGtlcm5lbC4gSSYjMzk7dmUgYmVlbiBkaXJlY3RlZCB0byBgZHJpdmVycy9wY2kvcGNpLXN5c2ZzLmNgIGFuZCBmb3VuZCB0aGlzIHNuaXBwZXQ6CgpgYGBjCnN0YXRpYyBzc2l6ZV90IHJlc2V0X3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi4uLgoJcG1fcnVudGltZV9nZXRfc3luYyhkZXYpOwoJcmVzdWx0ID0gcGNpX3Jlc2V0X2Z1bmN0aW9uKHBkZXYpOwoJcG1fcnVudGltZV9wdXQoZGV2KTsKYGBgCgpNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtSaWdodCwgYHBtX3J1bnRpbWVfZ2V0X3N5bmNgIGFuZCBgcG1fcnVudGltZV9wdXRgIGFyZSBjbGVhcmx5IG1hbmFnaW5nIHBvd2VyIHN0YXRlcywgbWFraW5nIHN1cmUgdGhlIGRldmljZSBpcyBhY3RpdmUgZm9yIHRoZSByZXNldCBvcGVyYXRpb24uJiMzNDsgQnV0IHRoZSBjb3JlIG9mIHRoZSBtYXR0ZXIgaXMgYHBjaV9yZXNldF9mdW5jdGlvbihwZGV2KWAuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlICphY3R1YWwqIHJlc2V0IGxvZ2ljIGxpZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhhdCBmdW5jdGlvbiBpcyBkb2luZy4KClRoZXJlZm9yZSwgSSYjMzk7bGwgbm93IGhhdmUgdG8gY3Jvc3MtcmVmZXJlbmNlIGBkcml2ZXJzL3BjaS9wY2kuY2AgYW5kIGp1bXAgdG8gdGhlIHZpY2luaXR5IG9mIGxpbmVzIDUyNjEgYW5kIDUwOTQgdG8gc2VlIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIGZvciBgcGNpX3Jlc2V0X2Z1bmN0aW9uYC4gSSBjYW4gaW1hZ2luZSB0aGVyZSBhcmUgZGV2aWNlLXNwZWNpZmljIGNoZWNrcyBmb3IgcmVzZXQgY2FwYWJpbGl0aWVzLCBoYW5kbGluZyBvZiBkaWZmZXJlbnQgcmVzZXQgbWV0aG9kcywgcGVyaGFwcyBzb21lIGNvbmZpZ3VyYXRpb24gb2YgdGhlIFBDSSBjb25maWd1cmF0aW9uIHNwYWNlLCBhbmQgZXJyb3IgY2hlY2tpbmcuIFVuZGVyc3RhbmRpbmcgdGhlIGZsb3cgdGhlcmUgaXMgY3J1Y2lhbCB0byBwcm9wZXJseSBhc3Nlc3MgdGhlIG92ZXJhbGwgcmVzZXQgcHJvY2VkdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAwOTowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvcGNpL3BjaS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTA4OCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs1MDg4Olx0c3RhdGljIHZvaWQgcGNpX2Rldl9zYXZlX2FuZF9kaXNhYmxlKHN0cnVjdCBwY2lfZGV2ICpkZXYpXG41MDg5Olx0e1xuNTA5MDpcdFx0Y29uc3Qgc3RydWN0IHBjaV9lcnJvcl9oYW5kbGVycyAqZXJyX2hhbmRsZXIgPVxuNTA5MTpcdFx0XHRcdGRldi1cdTAwM2Vkcml2ZXIgPyBkZXYtXHUwMDNlZHJpdmVyLVx1MDAzZWVycl9oYW5kbGVyIDogTlVMTDtcbjUwOTI6XHRcbjUwOTM6XHRcdC8qXG41MDk0Olx0XHQgKiBkZXYtXHUwMDNlZHJpdmVyLVx1MDAzZWVycl9oYW5kbGVyLVx1MDAzZXJlc2V0X3ByZXBhcmUoKSBpcyBwcm90ZWN0ZWQgYWdhaW5zdFxuNTA5NTpcdFx0ICogcmFjZXMgd2l0aCAtXHUwMDNlcmVtb3ZlKCkgYnkgdGhlIGRldmljZSBsb2NrLCB3aGljaCBtdXN0IGJlIGhlbGQgYnlcbjUwOTY6XHRcdCAqIHRoZSBjYWxsZXIuXG41MDk3Olx0XHQgKi9cbjUwOTg6XHRcdGRldmljZV9sb2NrX2Fzc2VydChcdTAwMjZkZXYtXHUwMDNlZGV2KTtcbjUwOTk6XHRcdGlmIChlcnJfaGFuZGxlciBcdTAwMjZcdTAwMjYgZXJyX2hhbmRsZXItXHUwMDNlcmVzZXRfcHJlcGFyZSlcbjUxMDA6XHRcdFx0ZXJyX2hhbmRsZXItXHUwMDNlcmVzZXRfcHJlcGFyZShkZXYpO1xuNTEwMTpcdFx0ZWxzZSBpZiAoZGV2LVx1MDAzZWRyaXZlcilcbjUxMDI6XHRcdFx0cGNpX3dhcm4oZGV2LCBcJiMzNDtyZXNldHRpbmdcJiMzNDspO1xuNTEwMzpcdFxuNTEwNDpcdFx0LypcbjUxMDU6XHRcdCAqIFdha2UtdXAgZGV2aWNlIHByaW9yIHRvIHNhdmUuICBQTSByZWdpc3RlcnMgZGVmYXVsdCB0byBEMCBhZnRlclxuNTEwNjpcdFx0ICogcmVzZXQgYW5kIGEgc2ltcGxlIHJlZ2lzdGVyIHJlc3RvcmUgZG9lc24mIzM5O3QgcmVsaWFibHkgcmV0dXJuXG41MTA3Olx0XHQgKiB0byBhIG5vbi1EMCBzdGF0ZSBhbnl3YXkuXG41MTA4Olx0XHQgKi9cbjUxMDk6XHRcdHBjaV9zZXRfcG93ZXJfc3RhdGUoZGV2LCBQQ0lfRDApO1xuNTExMDpcdFxuNTExMTpcdFx0aWYgKCFwY2lfZGV2X2NvbmZpZ19hY2Nlc3NpYmxlKGRldiwgXCYjMzQ7c2F2ZSBzdGF0ZVwmIzM0OykpXG41MTEyOlx0XHRcdHJldHVybjtcbjUxMTM6XHRcbjUxMTQ6XHRcdHBjaV9zYXZlX3N0YXRlKGRldik7XG41MTE1Olx0XHQvKlxuNTExNjpcdFx0ICogRGlzYWJsZSB0aGUgZGV2aWNlIGJ5IGNsZWFyaW5nIHRoZSBDb21tYW5kIHJlZ2lzdGVyLCBleGNlcHQgZm9yXG41MTE3Olx0XHQgKiBJTlR4LWRpc2FibGUgd2hpY2ggaXMgc2V0LiAgVGhpcyBub3Qgb25seSBkaXNhYmxlcyBNTUlPIGFuZCBJL08gcG9ydFxuNTExODpcdFx0ICogQkFScywgYnV0IGFsc28gcHJldmVudHMgdGhlIGRldmljZSBmcm9tIGJlaW5nIEJ1cyBNYXN0ZXIsIHByZXZlbnRpbmdcbjUxMTk6XHRcdCAqIERNQSBmcm9tIHRoZSBkZXZpY2UgaW5jbHVkaW5nIE1TSS9NU0ktWCBpbnRlcnJ1cHRzLiAgRm9yIFBDSSAyLjNcbjUxMjA6XHRcdCAqIGNvbXBsaWFudCBkZXZpY2VzLCBJTlR4LWRpc2FibGUgcHJldmVudHMgbGVnYWN5IGludGVycnVwdHMuXG41MTIxOlx0XHQgKi9cbjUxMjI6XHRcdHBjaV93cml0ZV9jb25maWdfd29yZChkZXYsIFBDSV9DT01NQU5ELCBQQ0lfQ09NTUFORF9JTlRYX0RJU0FCTEUpO1xuNTEyMzpcdH1cbjUxMjQ6XHRcbjUxMjU6XHRzdGF0aWMgdm9pZCBwY2lfZGV2X3Jlc3RvcmUoc3RydWN0IHBjaV9kZXYgKmRldilcbjUxMjY6XHR7XG41MTI3Olx0XHRjb25zdCBzdHJ1Y3QgcGNpX2Vycm9yX2hhbmRsZXJzICplcnJfaGFuZGxlciA9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA5OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2MDQ3CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNTY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIGEgUG90ZW50aWFsIFZ1bG5lcmFiaWxpdHkgaW4gVmlydGlvIEJsb2NrIERldmljZSBSZXNldCoqCgpPa2F5LCBzbyBoZXJlJiMzOTtzIHdoYXQgSSYjMzk7bSB0aGlua2luZzogYHBjaV9kZXZfc2F2ZV9hbmRfZGlzYWJsZWAgdHJpZ2dlcnMgYGVycl9oYW5kbGVyLSZndDtyZXNldF9wcmVwYXJlKGRldilgLiBMb29raW5nIGF0IHRoZSBWaXJ0aW8gUENJIGRyaXZlciAoYGRyaXZlcnMvdmlydGlvL3ZpcnRpb19wY2lfY29tbW9uLmNgKSwgdGhhdCB0cmFuc2xhdGVzIHRvIGB2aXJ0aW9fcGNpX3Jlc2V0X3ByZXBhcmVgLCB3aGljaCBpbiB0dXJuIGNhbGxzIGB2aXJ0aW9fZGV2aWNlX3Jlc2V0X3ByZXBhcmVgLiBUaGlzIGV2ZW50dWFsbHkgbGVhZHMgdG8gYSBkcml2ZXItc3BlY2lmaWMgYHJlc2V0X3ByZXBhcmVgIGZ1bmN0aW9uLCB3aGljaCwgZm9yIGB2aXJ0aW9fYmxrYCwgaXMgYHZpcnRibGtfcmVzZXRfcHJlcGFyZWAsIGFuZCB0aGF0IGNhbGxzIGB2aXJ0YmxrX2ZyZWV6ZV9wcml2YC4KCk5vdywgaGVyZSYjMzk7cyB0aGUga2lja2VyOiBgdmlydGlvX2Jsa2AgaXMgYSBzdGFuZGFyZCB2aXJ0aW8gZGV2aWNlLCBhbmQgYWxtb3N0IGV2ZXJ5IFFFTVUgVk0gcnVubmluZyBzeXprYWxsZXIgdXNlcyBpdCBmb3IgaXRzIHJvb3Qgb3IgYWRkaXRpb25hbCBkaXNrcy4gVGhpcyBtZWFucyBgL3N5cy9idXMvcGNpL2RldmljZXMvLi4uL3Jlc2V0YCBpcyBsaWtlbHkgYWNjZXNzaWJsZSB0byByb290IChhbmQgdGh1cywgc3l6a2FsbGVyKSBpbiB0aGUgVk0gaWYgdmlydGlvLXBjaSBpcyBpbiB1c2UuIEFsdGVybmF0aXZlbHksIHBvd2VyIG1hbmFnZW1lbnQgc3VzcGVuZC9yZXN1bWUgKGAvc3lzL3Bvd2VyL3N0YXRlYCkgY2FuIGFsc28gdHJpZ2dlciB0aGUgc2FtZSBjb2RlIHBhdGgsIGB2aXJ0YmxrX2ZyZWV6ZV9wcml2YC4KClRoZSBtaWxsaW9uLWRvbGxhciBxdWVzdGlvbjogaXMgdGhpcyBjb2RlIHJlYWNoYWJsZT8gWWVzISBWaXJ0aW8gYmxvY2sgZGV2aWNlcyBhcmUgZW11bGF0ZWQgYnkgUUVNVSwgbWFraW5nIGl0IGEgdmlhYmxlIHRhcmdldC4gR2l2ZW4gdGhhdCB0aGUgY3JpdGVyaWEgSSB3YXMgcmV2aWV3aW5nIGluY2x1ZGUgZHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzLCB0aGlzIHNlZW1zIHRvIGZpdCBwZXJmZWN0bHkuIFNlY3Rpb24gMyBleHBsaWNpdGx5IGhpZ2hsaWdodHMgdGhpcyBhcyBhbiBhcmVhIG9mIGNvbmNlcm4uCgpOb3cgSSBuZWVkIHRvIGNsYXJpZnk6IGlzIGB2aXJ0YmxrX2ZyZWV6ZV9wcml2YCBhIHRlYXJkb3duIGNhbGxiYWNrPyBObywgaXQmIzM5O3MgY2FsbGVkIGR1cmluZyBgcmVzZXRfcHJlcGFyZWAgKGEgUENJIGRldmljZSByZXNldCkgYW5kIGR1cmluZyBQTSBmcmVlemUgKHBvd2VyIG1hbmFnZW1lbnQgc3VzcGVuZCksIG5vdCBkdXJpbmcgYHJlbW92ZWAsIG9yIGhvdC11bnBsdWcuIEl04oCZcyBpbXBvcnRhbnQgdG8gY2xhcmlmeSB0aGF0IHRoaXMgaXNu4oCZdCBhIGhvdHBsdWcgb3IgbWFudWFsIHVuYmluZGluZy4gSXQmIzM5O3MgYWN0dWFsbHkgYSByZXNldC4gSSBzaG91bGQgcHJvYmFibHkgYWxzbyBjaGVjayBgdmlydGJsa19yZW1vdmVgIGp1c3QgdG8gYmUgY29tcGxldGVseSBzdXJlIHRoZXJlIGlzbiYjMzk7dCBzb21lIGNyb3Nzb3ZlciBvciBhY2NpZGVudGFsIHNoYXJpbmcgb2YgY29kZS4gQnV0LCBiYXNlZCBvbiB0aGUgY3VycmVudCBjb250ZXh0LCB0aGlzIGxvb2tzIGxpa2UgYSB2YWxpZCBhdHRhY2sgdmVjdG9yIHdvcnRoIGV4cGxvcmluZyBmdXJ0aGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAwOTowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2aXJ0YmxrX3JlbW92ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jPTU1PXN0cnVjdCB2aXJ0aW9fYmxrIHtcbi0tXG5kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYy01Ny1cdCAqIFRoaXMgbXV0ZXggbXVzdCBiZSBoZWxkIGJ5IGFueXRoaW5nIHRoYXQgbWF5IHJ1biBhZnRlclxuZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmM6NTg6XHQgKiB2aXJ0YmxrX3JlbW92ZSgpIHNldHMgdmJsay1cdTAwM2V2ZGV2IHRvIE5VTEwuXG5kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYy01OS1cdCAqXG4tLVxuZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmM9MTQzOD1zdGF0aWMgaW50IHZpcnRibGtfcHJvYmUoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpXG4tLVxuZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmMtMTU2My1cbmRyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jOjE1NjQ6c3RhdGljIHZvaWQgdmlydGJsa19yZW1vdmUoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpXG5kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYy0xNTY1LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYz0xNjc3PXN0YXRpYyBzdHJ1Y3QgdmlydGlvX2RyaXZlciB2aXJ0aW9fYmxrID0ge1xuLS1cbmRyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jLTE2ODQtXHQucHJvYmVcdFx0XHRcdD0gdmlydGJsa19wcm9iZSxcbmRyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jOjE2ODU6XHQucmVtb3ZlXHRcdFx0XHQ9IHZpcnRibGtfcmVtb3ZlLFxuZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmMtMTY4Ni1cdC5jb25maWdfY2hhbmdlZFx0XHRcdD0gdmlydGJsa19jb25maWdfY2hhbmdlZCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDk6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc0NDIKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHZpcnRibGtfcmVtb3ZlKioKCkFscmlnaHQsIGxldCYjMzk7cyBwdWxsIHVwIGBkcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuY2AgYW5kIHplcm8gaW4gb24gdGhlIGB2aXJ0YmxrX3JlbW92ZWAgZnVuY3Rpb24sIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAxNTY0LiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGRldmljZSByZW1vdmFsIHBhdGguIFRoaXMgaXMgbGlrZWx5IHRoZSBjcnVjaWFsIHBvaW50IHdoZXJlIHRoZSB2aXJ0aW8tYmxrIGRldmljZSBpcyBncmFjZWZ1bGx5IGRldGFjaGVkIGZyb20gdGhlIHN5c3RlbS4gSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIHJlc291cmNlIGNsZWFudXA6IGZyZWVpbmcgYWxsb2NhdGVkIG1lbW9yeSAobGlrZSB0aGUgcmVxdWVzdCBxdWV1ZXMpLCBkZS1yZWdpc3RlcmluZyB0aGUgYmxvY2sgZGV2aWNlLCBwb3RlbnRpYWxseSBoYW5kbGluZyBwZW5kaW5nIEkvTywgYW5kIG1heWJlIGV2ZW4gZGlzYWJsaW5nIGludGVycnVwdHMgYXNzb2NpYXRlZCB3aXRoIHRoZSBkZXZpY2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGZ1bmN0aW9uIGNvb3JkaW5hdGVzIHdpdGggdGhlIG90aGVyIHBhcnRzIG9mIHRoZSB2aXJ0aW8tYmxrIGRyaXZlciBkdXJpbmcgc2h1dGRvd24sIGFuZCBob3cgaXQgYXZvaWRzIHJhY2UgY29uZGl0aW9ucyB3aXRoIG9uZ29pbmcgSS9PIG9wZXJhdGlvbnMuIExldCYjMzk7cyBzZWUgaG93IHRoZSBkcml2ZXIgaGFuZGxlcyBwb3RlbnRpYWxseSBjb25jdXJyZW50IHJlcXVlc3RzIGFzIGl0IHVubG9hZHMuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBsb29raW5nIGZvciB0aGUgdXNlIG9mIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzIHRvIHByb3RlY3Qgc2hhcmVkIGRhdGEgc3RydWN0dXJlcyBhbmQgZW5zdXJlIGEgY2xlYW4gdGVhcmRvd24uIEkgYW50aWNpcGF0ZSB0aGlzIGZ1bmN0aW9uIHdpbGwgZG8gaXRzIGR1ZSBkaWxpZ2VuY2UgdG8gcHJldmVudCBkYXRhIGNvcnJ1cHRpb24uIEkmIzM5O20gY3VyaW91cyBhYm91dCB0aGUgc3BlY2lmaWMgb3JkZXIgb2Ygb3BlcmF0aW9ucyDigJMgaXQmIzM5O3MgY3J1Y2lhbCBmb3IgdGhlIGNvcnJlY3Qgc2h1dGRvd24gb2YgdGhlIHN1YnN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDk6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE1NjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTU2MDpcdG91dDpcbjE1NjE6XHRcdHJldHVybiBlcnI7XG4xNTYyOlx0fVxuMTU2MzpcdFxuMTU2NDpcdHN0YXRpYyB2b2lkIHZpcnRibGtfcmVtb3ZlKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KVxuMTU2NTpcdHtcbjE1NjY6XHRcdHN0cnVjdCB2aXJ0aW9fYmxrICp2YmxrID0gdmRldi1cdTAwM2Vwcml2O1xuMTU2NzpcdFxuMTU2ODpcdFx0LyogTWFrZSBzdXJlIG5vIHdvcmsgaGFuZGxlciBpcyBhY2Nlc3NpbmcgdGhlIGRldmljZS4gKi9cbjE1Njk6XHRcdGZsdXNoX3dvcmsoXHUwMDI2dmJsay1cdTAwM2Vjb25maWdfd29yayk7XG4xNTcwOlx0XG4xNTcxOlx0XHRkZWxfZ2VuZGlzayh2YmxrLVx1MDAzZWRpc2spO1xuMTU3MjpcdFx0YmxrX21xX2ZyZWVfdGFnX3NldChcdTAwMjZ2YmxrLVx1MDAzZXRhZ19zZXQpO1xuMTU3MzpcdFxuMTU3NDpcdFx0bXV0ZXhfbG9jayhcdTAwMjZ2YmxrLVx1MDAzZXZkZXZfbXV0ZXgpO1xuMTU3NTpcdFxuMTU3NjpcdFx0LyogU3RvcCBhbGwgdGhlIHZpcnRxdWV1ZXMuICovXG4xNTc3Olx0XHR2aXJ0aW9fcmVzZXRfZGV2aWNlKHZkZXYpO1xuMTU3ODpcdFxuMTU3OTpcdFx0LyogVmlydHF1ZXVlcyBhcmUgc3RvcHBlZCwgbm90aGluZyBjYW4gdXNlIHZibGstXHUwMDNldmRldiBhbnltb3JlLiAqL1xuMTU4MDpcdFx0dmJsay1cdTAwM2V2ZGV2ID0gTlVMTDtcbjE1ODE6XHRcbjE1ODI6XHRcdHZkZXYtXHUwMDNlY29uZmlnLVx1MDAzZWRlbF92cXModmRldik7XG4xNTgzOlx0XHRrZnJlZSh2YmxrLVx1MDAzZXZxcyk7XG4xNTg0Olx0XG4xNTg1Olx0XHRtdXRleF91bmxvY2soXHUwMDI2dmJsay1cdTAwM2V2ZGV2X211dGV4KTtcbjE1ODY6XHRcbjE1ODc6XHRcdHB1dF9kaXNrKHZibGstXHUwMDNlZGlzayk7XG4xNTg4Olx0fVxuMTU4OTpcdFxuMTU5MDpcdHN0YXRpYyBpbnQgdmlydGJsa19mcmVlemVfcHJpdihzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldilcbjE1OTE6XHR7XG4xNTkyOlx0XHRzdHJ1Y3QgdmlydGlvX2JsayAqdmJsayA9IHZkZXYtXHUwMDNlcHJpdjtcbjE1OTM6XHRcdHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxID0gdmJsay1cdTAwM2VkaXNrLVx1MDAzZXF1ZXVlO1xuMTU5NDpcdFx0dW5zaWduZWQgaW50IG1lbWZsYWdzO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAwOTowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODI2NwoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDI5OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIGB2aXJ0YmxrX2ZyZWV6ZV9wcml2YCBhbmQgUG90ZW50aWFsIFF1aWVzY2UgSXNzdWVzKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgYHZpcnRibGtfZnJlZXplX3ByaXZgIGZ1bmN0aW9uLCBhbmQgaXQgc2VlbXMgbGlrZSBJIGhhdmUgc29tZSBpbmNvcnJlY3QgYXNzdW1wdGlvbnMuIFRoZSBkb2N1bWVudGF0aW9uIHN0YXRlcyB0aGF0IGl0JiMzOTtzICpub3QqIGNhbGxlZCBieSBgdmlydGJsa19yZW1vdmVgLCB3aGljaCBpcyBnb29kIHRvIGNsYXJpZnksIGJ1dCBpdCAqaXMqIGNhbGxlZCBieSBgdmlydGJsa19mcmVlemVgIGFuZCBgdmlydGJsa19yZXNldF9wcmVwYXJlYC4gVGhhdCYjMzk7cyBpbXBvcnRhbnQgdG8ga2VlcCBpbiBtaW5kLgoKTm93LCBteSByZWFsIGNvbmNlcm4gaXMgdGhpcyBhcHBhcmVudCBjaGFuZ2UgZnJvbSB1c2luZyBgYmxrX21xX3F1aWVzY2VfcXVldWVfbm93YWl0YCB0byBgYmxrX21xX3F1aWVzY2VfcXVldWVgIHdpdGhpbiB0aGF0IGZ1bmN0aW9uLiBJIGltbWVkaWF0ZWx5IHNlZSB0aGUgcG90ZW50aWFsIGZvciBwcm9ibGVtcyBoZXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGlzIHNoaWZ0IGluIHF1aWVzY2UgbWV0aG9kcyBjb3VsZCBpbnRyb2R1Y2UgZGVhZGxvY2tzIG9yIG90aGVyIGlzc3VlcyBpbiB0aGUgYmxvY2sgSS9PIGxheWVyLCB3aGljaCBpcyBteSBtYWluIGFyZWEgb2YgZm9jdXMuCgpMZXQgbWUgdGFrZSBhIGNsb3NlciBsb29rIGF0IGB2aXJ0YmxrX2ZyZWV6ZV9wcml2YCYjMzk7cyBpbXBsZW1lbnRhdGlvbjogdGhlIGNvZGUgc25pcHBldCBjb25maXJtcyBteSBpbnRlcmVzdCBpbiB0aGlzIGFyZWE6CgpgYGBjCgkvKiBFbnN1cmUgbm8gcmVxdWVzdHMgaW4gdmlydHF1ZXVlcyBiZWZvcmUgZGVsZXRpbmcgdnFzLiAqLwoJbWVtZmxhZ3MgPSBibGtfbXFfZnJlZXplX3F1ZXVlKHEpOwoJYmxrX21xX3F1aWVzY2VfcXVldWUocSk7CglibGtfbXFfdW5mcmVlemVfcXVldWUocSwgbWVtZmxhZ3MpOwpgYGAKCkhlcmUgaXQmIzM5O3MgY2xlYXI6IHdlIGZyZWV6ZSwgcXVpZXNjZSwgdGhlbiB1bmZyZWV6ZSB0aGUgcXVldWUuIEJ1dCAqd2h5KiB3YXMgYGJsa19tcV9xdWllc2NlX3F1ZXVlX25vd2FpdGAgY2hhbmdlZCB0byBgYmxrX21xX3F1aWVzY2VfcXVldWVgPyBUaGF0JiMzOTtzIHRoZSBrZXkgcXVlc3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWFzb25pbmcgYmVoaW5kIHRoaXMgZGVjaXNpb24uIEl0IGNvdWxkIGhhdmUgYmVlbiBpbnRlbnRpb25hbCwgcGVyaGFwcyBmb3IgcGVyZm9ybWFuY2Ugb3Igc3luY2hyb25pemF0aW9uIHJlYXNvbnMsIGJ1dCBpdCBjb3VsZCBhbHNvIGhhdmUgYmVlbiBhbiBvdmVyc2lnaHQgdGhhdCBjb3VsZCBoYXZlIHNlcmlvdXMgY29uc2VxdWVuY2VzLgoKSSBuZWVkIHRvIHRyYWNlIHRoZSBjaGFuZ2UuIEkgaGF2ZSB0byBmaW5kIHRoZSBjb21taXQgdGhhdCBpbnRyb2R1Y2VkIHRoaXMgbW9kaWZpY2F0aW9uLiBJJiMzOTtsbCBzdGFydCB3aXRoIHRoZSBjb21taXQgbWVzc2FnZSwgdGhlIHVzdWFsIHBsYWNlIHRvIGZpbmQgcmVhc29uaW5nLiBJJiMzOTtsbCBzZWFyY2ggdGhlIGdpdCBsb2cgZm9yIG9jY3VycmVuY2VzIG9mICYjMzQ7dmlydGJsa19mcmVlemVfcHJpdiYjMzQ7IG9yICYjMzQ7YmxrX21xX3F1aWVzY2VfcXVldWVfbm93YWl0JiMzNDsuIEFsdGVybmF0aXZlbHksIGlmIHRoZSBjb21taXQgbWVzc2FnZSBpcyB1bmhlbHBmdWwsIEkmIzM5O2xsIHNlYXJjaCB0aGUgbG9nIGZvciAqYW55KiBjb21taXRzIG1lbnRpb25pbmcgYGJsa19tcV9xdWllc2NlX3F1ZXVlX25vd2FpdGAuIElmIHRoYXQgc2VhcmNoIHlpZWxkcyBub3RoaW5nLCBJIG1heSBleHBhbmQgdG8gdXNlIGdyZXBwZXIgdG8gcGVyZm9ybSBhIGNvZGViYXNlLXdpZGUgc2VhcmNoIGZvciB0aGF0IGZ1bmN0aW9uIG5hbWUgdG8gZ2l2ZSBtZSBzb21lIGNvbnRleHQgb24gaG93IHRoZSBmdW5jdGlvbiBuYW1lIGlzIHVzZWQgYWNyb3NzIHRoZSBjb2RlYmFzZS4gSSBoYXZlIHRvIGZpbmQgdGhlIGhpc3RvcnkgYW5kIHVuZGVyc3RhbmQgdGhlIHJhdGlvbmFsZS4gVGhpcyBpcyBjcnVjaWFsIGZvciBldmFsdWF0aW5nIHRoZSBwb3RlbnRpYWwgaW1wYWN0IG9mIHRoaXMgbW9kaWZpY2F0aW9uIG9uIHRoZSBvdmVyYWxsIHN5c3RlbSYjMzk7cyBzdGFiaWxpdHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA5OjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Jsa19tcV9xdWllc2NlX3F1ZXVlX25vd2FpdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9ibGstbXEuYz0yNTU9RVhQT1JUX1NZTUJPTF9HUEwoYmxrX21xX3VuZnJlZXplX3F1ZXVlX25vbl9vd25lcik7XG4tLVxuYmxvY2svYmxrLW1xLmMtMjYwLSAqL1xuYmxvY2svYmxrLW1xLmM6MjYxOnZvaWQgYmxrX21xX3F1aWVzY2VfcXVldWVfbm93YWl0KHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKVxuYmxvY2svYmxrLW1xLmMtMjYyLXtcbi0tXG5ibG9jay9ibGstbXEuYy0yNjktfVxuYmxvY2svYmxrLW1xLmM6MjcwOkVYUE9SVF9TWU1CT0xfR1BMKGJsa19tcV9xdWllc2NlX3F1ZXVlX25vd2FpdCk7XG5ibG9jay9ibGstbXEuYy0yNzEtXG4tLVxuYmxvY2svYmxrLW1xLmMtMjc4LSAqIGZ1bmN0aW9uIG9ubHkgd2FpdHMgZm9yIHRoZSBxdWllc2NlIG9uIHRob3NlIHJlcXVlc3RfcXVldWVzIHRoYXQgaGFkXG5ibG9jay9ibGstbXEuYzoyNzk6ICogdGhlIHF1aWVzY2UgZmxhZyBzZXQgdXNpbmcgYmxrX21xX3F1aWVzY2VfcXVldWVfbm93YWl0LlxuYmxvY2svYmxrLW1xLmMtMjgwLSAqL1xuLS1cbmJsb2NrL2Jsay1tcS5jPTI5OT12b2lkIGJsa19tcV9xdWllc2NlX3F1ZXVlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKVxuYmxvY2svYmxrLW1xLmMtMzAwLXtcbmJsb2NrL2Jsay1tcS5jOjMwMTpcdGJsa19tcV9xdWllc2NlX3F1ZXVlX25vd2FpdChxKTtcbmJsb2NrL2Jsay1tcS5jLTMwMi1cdC8qIG5vdGhpbmcgdG8gd2FpdCBmb3Igbm9uLW1xIHF1ZXVlcyAqL1xuLS1cbmJsb2NrL2Jsay1tcS5jPTMzNT12b2lkIGJsa19tcV9xdWllc2NlX3RhZ3NldChzdHJ1Y3QgYmxrX21xX3RhZ19zZXQgKnNldClcbi0tXG5ibG9jay9ibGstbXEuYy0zNDEtXHRcdGlmICghYmxrX3F1ZXVlX3NraXBfdGFnc2V0X3F1aWVzY2UocSkpXG5ibG9jay9ibGstbXEuYzozNDI6XHRcdFx0YmxrX21xX3F1aWVzY2VfcXVldWVfbm93YWl0KHEpO1xuYmxvY2svYmxrLW1xLmMtMzQzLVx0fVxuLS1cbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jPTI5Mzk9c3RhdGljIHZvaWQgc2NzaV9zdG9wX3F1ZXVlKHN0cnVjdCBzY3NpX2RldmljZSAqc2Rldilcbi0tXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYy0yOTQ3LVx0aWYgKCFjbXB4Y2hnKFx1MDAyNnNkZXYtXHUwMDNlcXVldWVfc3RvcHBlZCwgMCwgMSkpXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYzoyOTQ4Olx0XHRibGtfbXFfcXVpZXNjZV9xdWV1ZV9ub3dhaXQoc2Rldi1cdTAwM2VyZXF1ZXN0X3F1ZXVlKTtcbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jLTI5NDktfVxuLS1cbmluY2x1ZGUvbGludXgvYmxrLW1xLmg9OTc3PXZvaWQgYmxrX21xX3VwZGF0ZV9ucl9od19xdWV1ZXMoc3RydWN0IGJsa19tcV90YWdfc2V0ICpzZXQsIGludCBucl9od19xdWV1ZXMpO1xuaW5jbHVkZS9saW51eC9ibGstbXEuaC05NzgtXG5pbmNsdWRlL2xpbnV4L2Jsay1tcS5oOjk3OTp2b2lkIGJsa19tcV9xdWllc2NlX3F1ZXVlX25vd2FpdChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSk7XG5pbmNsdWRlL2xpbnV4L2Jsay1tcS5oLTk4MC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDk6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk4NjgKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA2NzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBWaXJ0aW8gQmxvY2sgRHJpdmVyJiMzOTtzIFF1aWVzY2luZyBMb2dpYyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIFZpcnRpbyBibG9jayBkcml2ZXIgY29kZSwgYW5kIEkgc2VlIGEga2V5IGNoYW5nZTogdGhleSYjMzk7dmUgc3dhcHBlZCBvdXQgYGJsa19tcV9xdWllc2NlX3F1ZXVlX25vd2FpdGAgd2l0aCBgYmxrX21xX3F1aWVzY2VfcXVldWUocSlgLiBJbnRlcmVzdGluZy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCB3aHkgdGhlIGNoYW5nZT8gSXQmIzM5O3MgaW1tZWRpYXRlbHkgY2xlYXIgdGhhdCBgdmlydGJsa19mcmVlemVfcHJpdmAgaXMgZG9pbmcgc29tZSBxdWV1ZSBtYW5pcHVsYXRpb24uIExvb2tpbmcgYXQgbGluZXMgMTU5Ni0xNjAwLCBpdCYjMzk7cyBjbGVhcjogVGhleSYjMzk7cmUgZnJlZXppbmcsIHF1aWVzY2luZywgYW5kIHRoZW4gdW5mcmVlemluZyB0aGUgcXVldWUuIFRoaXMgc2V0cyBvZmYgc29tZSBhbGFybXMsIG5hdHVyYWxseS4KClRoZSBpbXBvcnRhbnQgcGFydCBpcyB0aGF0IGBibGtfbXFfcXVpZXNjZV9xdWV1ZShxKWAgKndhaXRzKiBmb3IgYWxsIGFjdGl2ZSBkaXNwYXRjaGVzIHRvIGZpbmlzaCB2aWEgYGJsa19tcV93YWl0X3F1aWVzY2VfZG9uZWAgd2hpY2gsIG5vdGFibHksIGNhbGxzIGBzeW5jaHJvbml6ZV9yY3UoKWAuIFNvLCBpdCYjMzk7cyBhIHN5bmNocm9ub3VzIG9wZXJhdGlvbi4gSSB3YXMgY29uY2VybmVkIGFib3V0IHRoZSB1bmZyZWV6aW5nIGFmdGVyd2FyZC4gVGhlIGltcGxpY2F0aW9uIGlzIHRoYXQgdGhleSYjMzk7cmUgZW5zdXJpbmcgYWxsIG9uZ29pbmcgcmVxdWVzdHMgYXJlIGNvbXBsZXRlIGJlZm9yZSBzb21ldGhpbmcgaGFwcGVucywgSSBhbSBhc3N1bWluZyB0aGlzIGlzIHJlbGF0ZWQgdG8gdGhlIHJlc2V0IG9yIGRlbGV0aW9uIG9mIHZpcnRxdWV1ZXMuCgpOb3csIHRoaXMgcmVhbGx5IG1ha2VzIHNlbnNlLiBgYmxrX21xX3F1aWVzY2VfcXVldWVgIGJsb2NrcyBuZXcgZGlzcGF0Y2hlcyB1bnRpbCBpdCYjMzk7cyB1bnF1aWVzY2VkLiBUaGVuLCBgdmlydGJsa19yZXN0b3JlX3ByaXZgIGNhbGxzIGBibGtfbXFfdW5xdWllc2NlX3F1ZXVlKHZibGstJmd0O2Rpc2stJmd0O3F1ZXVlKWAuIFNvLCB0aGUgcXVldWUgaXMgZXNzZW50aWFsbHkgbG9ja2VkIGRvd24gYmV0d2VlbiBgdmlydGJsa19mcmVlemVfcHJpdmAgYW5kIGB2aXJ0YmxrX3Jlc3RvcmVfcHJpdmAuIFRoaXMgaXMgdG8gbWFrZSBzdXJlIHRoYXQgd2hlbiBgdmlydGJsa19mcmVlemVfcHJpdmAgcHJvY2VlZHMgdG8gYHZpcnRpb19yZXNldF9kZXZpY2UodmRldilgIGFuZCBgdmRldi0mZ3Q7Y29uZmlnLSZndDtkZWxfdnFzKHZkZXYpYCwgYWxsIGRpc3BhdGNoZXMgaGF2ZSBnZW51aW5lbHkgZmluaXNoZWQhCgpUaGUgcHJvYmxlbSB3aXRoIHRoZSBvbGQgY29kZSAoYGJsa19tcV9xdWllc2NlX3F1ZXVlX25vd2FpdChxKWApIGlzIG9idmlvdXMgbm93LiBEaXNwYXRjaGVzIGNvdWxkIGhhdmUgY29udGludWVkIHRvIHJ1biwgcG90ZW50aWFsbHkgYWNjZXNzaW5nIGZyZWVkIHZpcnRxdWV1ZXMgKmFmdGVyKiBgdmlydGlvX3Jlc2V0X2RldmljZWAgb3IgYGRlbF92cXModmRldilgISBXaXRoIGBibGtfbXFfcXVpZXNjZV9xdWV1ZShxKWAsIHdlIGdldCB0aGUgbmVjZXNzYXJ5IHdhaXQgZm9yIGNvbXBsZXRpb24uIEJ1dCB3YWl0IC0gdGhpcyBgYmxrX21xX3F1aWVzY2VfcXVldWVgIGNhbiBzbGVlcCAoaXQgY2FsbHMgYHN5bmNocm9uaXplX3JjdWAgb3IgYHN5bmNocm9uaXplX3NyY3VgKS4KClNvLCB0aGUgcXVlc3Rpb24gaXMsIGlzIGl0IGFsbG93ZWQgdG8gc2xlZXAgaW4gYHZpcnRibGtfZnJlZXplX3ByaXZgPyBMZXQmIzM5O3MgY2hlY2suIFllcywgaXQgZG9lcyBgYmxrX21xX2ZyZWV6ZV9xdWV1ZShxKWAgYW5kIGBmbHVzaF93b3JrYCB3aGljaCBjYW4gc2xlZXAuCgpBIG1vcmUgaW1wb3J0YW50IHF1ZXN0aW9uIGFyaXNlcy4gQ2FuIHRoaXMgbmV3IGNvZGUgaGFuZyBvciBkZWFkbG9jayBpZiBhIGRpc3BhdGNoIGlzIGJsb2NrZWQgd2FpdGluZyBmb3Igc29tZXRoaW5nPyBUaGlzIGlzIHdoZXJlIHRoZSByZWFsIHZ1bG5lcmFiaWxpdHkgbGllcy4gVGhlIGltcGxpY2F0aW9ucyBhcmUgY2xlYXIuIElmIGEgZGlzcGF0Y2ggaXMgd2FpdGluZyBvbiwgc2F5LCBhIGxvY2sgaGVsZCBkdXJpbmcgdGhpcyBxdWllc2NlIHNlcXVlbmNlLCB3ZSYjMzk7ZCBoYXZlIGEgZGVhZGxvY2suIEkgd29uZGVyIGhvdyB0aGlzIGludGVyYWN0cyB3aXRoIGFueSBvdGhlciBibG9ja2luZyBjYWxscyB3aXRoaW4gdGhlIEkvTyBwYXRoLgoKTm93LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IGZ1enppbmcgdGhpcy4gQ2FuIHN5emthbGxlciB0cmlnZ2VyIHRoaXMgc2NlbmFyaW8/CgpJJiMzOTt2ZSBnb3QgdG8gY29uc2lkZXIgaG93IHN5emthbGxlciBoYW5kbGVzIHRoaW5ncy4gSG93IGRvZXMgc3l6a2FsbGVyIGZ1enogUE0sIFBDSSByZXNldHMsIG9yIGJsb2NrIGRldmljZXM/IEkgbmVlZCB0byBjaGVjayBpZiBzeXprYWxsZXIgaGFzIHRoZSBwcmltaXRpdmVzIHRvIHRlc3QgUE0gZnJlZXplL3N1c3BlbmQvcmVzdG9yZS4gTGV0JiMzOTtzIHNlZSBpZiBzeXprYWxsZXIgaGFzIHN5c2NhbGwgZGVmaW5pdGlvbnMgb3IsIHNwZWNpZmljYWxseSwgdGVzdHMgUE0gc2xlZXAuCgpBbHJpZ2h0LCBzeXprYWxsZXIgYXBwZWFycyB0byBoYXZlIHNvbWUgdG9vbHM6IGBzeXpfbW91bnRfaW1hZ2VgLCBzeXNmcyB3cml0ZXMgKGxpa2UgYC9zeXMvcG93ZXIvc3RhdGVgKSwgYW5kIGV2ZW4gdGhpbmdzIGxpa2UgYC9zeXMvYnVzL3BjaS9kZXZpY2VzLyovcmVzZXRgLiBTbywgaXQgc2VlbXMgbGlrZSB0aGVyZSBtaWdodCBiZSBhIHBhdGguCgpOb3csIGEga2V5IHF1ZXN0aW9uOiBpcyB2aXJ0aW9fYmxrIGVuYWJsZWQgaW4gYSBzdGFuZGFyZCBzeXprYWxsZXIga2VybmVsIGNvbmZpZz8gSSBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIGZvciBgdmlydGlvX2Jsa2AuIElmIHNvLCB0aGlzIGlzIGEgcHJpbWUgY2FuZGlkYXRlIGZvciBhIHN5emthbGxlciB0ZXN0LCBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gcHJvYmUgZm9yIHRoZXNlIHF1aWVzY2UtcmVsYXRlZCBkZWFkbG9ja3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA5OjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBWSVJUSU9fQkxLJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svS2NvbmZpZz0yODY9Y29uZmlnIFhFTl9CTEtERVZfQkFDS0VORFxuLS1cbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0zMDYtXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc6MzA3OmNvbmZpZyBWSVJUSU9fQkxLXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMzA4LVx0dHJpc3RhdGUgXCYjMzQ7VmlydGlvIGJsb2NrIGRyaXZlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAwOTowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTUwOAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gQmxvY2sgRGV2aWNlIENvbmZpZ3VyYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIHplcm8gaW4gb24gdGhlIGJsb2NrIGRldmljZSBjb25maWd1cmF0aW9uLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gY2hlY2sgYGRyaXZlcnMvYmxvY2svS2NvbmZpZ2AuIEkmIzM5O20gc3BlY2lmaWNhbGx5IGludGVyZXN0ZWQgaW4gd2hhdCYjMzk7cyBoYXBwZW5pbmcgYXJvdW5kIGxpbmUgMzA3LiBUaGF0IGFyZWEgdXN1YWxseSBob2xkcyBjcnVjaWFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyB0aGUgaW5jbHVzaW9uIGFuZCBjb25maWd1cmF0aW9uIG9mIHZhcmlvdXMgYmxvY2sgZGV2aWNlIGRyaXZlcnMsIHRoZWlyIGRlcGVuZGVuY2llcywgYW5kIGFueSByZWxldmFudCBvcHRpb25zLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIGRldGFpbHMgb24gaG93IHNwZWNpZmljIGZlYXR1cmVzIG9yIGRyaXZlcnMgYXJlIGVuYWJsZWQgb3IgZGlzYWJsZWQgdmlhIGtlcm5lbCBjb25maWd1cmF0aW9uLiBJJiMzOTttIGhvcGluZyBpdCBhbHNvIHByb3ZpZGVzIGhpbnRzIG9uIGhvdyB0byBkaWFnbm9zZSBhbnkgcG90ZW50aWFsIGNvbmZsaWN0cyBvciBkZXBlbmRlbmNpZXMuIEZyb20gYSBzeXN0ZW1zIGFyY2hpdGVjdHVyZSBwZXJzcGVjdGl2ZSwgdGhpcyBpcyB3aGVyZSBhIGxvdCBvZiB0aGUgbG93LWxldmVsIGludGVyYWN0aW9ucyBhcmUgZGVjaWRlZCwgc28gaXQgbWFrZXMgc2Vuc2UgdG8gc3RhcnQgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDk6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDMwNTpcdFxuIDMwNjpcdFxuIDMwNzpcdGNvbmZpZyBWSVJUSU9fQkxLXG4gMzA4Olx0XHR0cmlzdGF0ZSBcJiMzNDtWaXJ0aW8gYmxvY2sgZHJpdmVyXCYjMzQ7XG4gMzA5Olx0XHRkZXBlbmRzIG9uIFZJUlRJT1xuIDMxMDpcdFx0c2VsZWN0IFNHX1BPT0xcbiAzMTE6XHRcdGhlbHBcbiAzMTI6XHRcdCAgVGhpcyBpcyB0aGUgdmlydHVhbCBibG9jayBkcml2ZXIgZm9yIHZpcnRpby4gIEl0IGNhbiBiZSB1c2VkIHdpdGhcbiAzMTM6XHQgICAgICAgICAgUUVNVSBiYXNlZCBWTU1zIChsaWtlIEtWTSBvciBYZW4pLiAgU2F5IFkgb3IgTS5cbiAzMTQ6XHRcbiAzMTU6XHRjb25maWcgQkxLX0RFVl9SQkRcbiAzMTY6XHRcdHRyaXN0YXRlIFwmIzM0O1JhZG9zIGJsb2NrIGRldmljZSAoUkJEKVwmIzM0O1xuIDMxNzpcdFx0ZGVwZW5kcyBvbiBJTkVUIFx1MDAyNlx1MDAyNiBCTE9DS1xuIDMxODpcdFx0c2VsZWN0IENFUEhfTElCXG4gMzE5Olx0XHRoZWxwXG4gMzIwOlx0XHQgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgaW5jbHVkZSB0aGUgUmFkb3MgYmxvY2sgZGV2aWNlLCB3aGljaCBzdHJpcGVzXG4gMzIxOlx0XHQgIGEgYmxvY2sgZGV2aWNlIG92ZXIgb2JqZWN0cyBzdG9yZWQgaW4gdGhlIENlcGggZGlzdHJpYnV0ZWQgb2JqZWN0XG4gMzIyOlx0XHQgIHN0b3JlLlxuIDMyMzpcdFxuIDMyNDpcdFx0ICBNb3JlIGluZm9ybWF0aW9uIGF0IGh0dHA6Ly9jZXBoLm5ld2RyZWFtLm5ldC8uXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA5OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyMDE4CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMjQ5MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIERlY2lzaW9uIGZvciB2aXJ0aW9fYmxrLmMgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gRmlyc3QsIEkgbmVlZCB0byByaWdvcm91c2x5IGFwcGx5IHRoZSBwYXRjaCBmdXp6aW5nIGNyaXRlcmlhLiBUaGUgZ29hbCBpcyB0byBpZGVudGlmeSBwb3RlbnRpYWwgY3Jhc2hlcyBvciByZWdyZXNzaW9ucy4gVGhlIGNvcmUgcHJpbmNpcGxlIGlzIHRoYXQgZnV6emluZyBpcyBvbmx5IHZhbHVhYmxlIGZvciBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5ICpleGVjdXRlKiBpbiBhIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBUaGlzIHBhdGNoIGludm9sdmVzIGNoYW5nZXMgdG8gYHZpcnRpb19ibGsuY2AsIGFuZCB0aGF0JiMzOTtzIGEgZHJpdmVyIGZvciBhIHZpcnRpbyBibG9jayBkZXZpY2UuICBWaXJ0aW8gaXMgKmRlZmluaXRlbHkqIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCBRRU1VLiAgU28gZmFyLCBzbyBnb29kLgoKTm93LCBsZXQmIzM5O3MgZ28gdGhyb3VnaCB0aGUgbmVnYXRpdmUgY3JpdGVyaWEsIHRoZSAmIzM0O3doZW4gdG8gcmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSYjMzQ7IGNoZWNrbGlzdDoKCjEuICAqKk5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6KiogIFRoaXMgaXNuJiMzOTt0IGRvY3VtZW50YXRpb24sIHNjcmlwdHMsIG9yIGJ1aWxkIHN5c3RlbSBjaGFuZ2VzLiBOby4KMi4gICoqU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOioqICBUaGlzIGlzbiYjMzk7dCB2ZW5kb3Itc3BlY2lmaWMgUENJZSBoYXJkd2FyZSByZXF1aXJpbmcgYSByZWFsIEFTSUMuIFZpcnRpbyBibG9jayBpcyBmdW5kYW1lbnRhbCB0byBRRU1VLiBUaGlzIGlzIE5PVCB1bnJlYWNoYWJsZS4KMy4gICoqVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOioqIE9rYXksIHRoaXMgaXMgdGhlIG9uZSB0byBzY3J1dGluaXplIGNhcmVmdWxseS4gVGhlIHBhdGNoIG1vZGlmaWVzIGB2aXJ0YmxrX2ZyZWV6ZV9wcml2YC4gIElzIHRoaXMgYSB0ZWFyZG93biBjYWxsYmFjayBsaWtlIGAucmVtb3ZlYCwgYC5zaHV0ZG93bmAsIG9yIGBwY2lfdW5yZWdpc3Rlcl9kcml2ZXJgIHRoYXQgb25seSBoYXBwZW5zIGR1cmluZyBob3QtdW5wbHVnIG9yIG1hbnVhbCB1bmJpbmRpbmc/IE5vISBJdCYjMzk7cyB1c2VkIGluIGAuZnJlZXplYCAoUE0gc3VzcGVuZC9zbGVlcCkgYW5kIGAucmVzZXRfcHJlcGFyZWAgKHZpcnRpbyByZXNldCBvciBQQ0kgZXJyb3IgaGFuZGxlciByZXNldCkuICBCdXQgY2FuIHRoZXNlIGFjdGlvbnMgaGFwcGVuICpkdXJpbmcgcnVudGltZSo/ICBBYnNvbHV0ZWx5ISBRRU1VIGNhbiBkbyB2aXJ0aW8gYmxvY2sgcmVzZXRzIGFuZCBQTSBzdXNwZW5kLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlLCBzbyB0aGlzIGlzIE5PVCBhIG5lZ2F0aXZlIGNvbmRpdGlvbi4KClNvLCBub25lIG9mIHRoZSBuZWdhdGl2ZSBjcml0ZXJpYSBhcHBseS4gIFRoaXMgcGF0Y2ggKnRvdWNoZXMgZXhlY3V0YWJsZSBjb2RlKi4gQW5kIFNlY3Rpb24gMyBzcGVjaWZpY2FsbHkgbWVudGlvbnMgJiMzNDtSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzJiMzNDsgaW5jbHVkaW5nIGRyaXZlcnMgdXNpbmcgdmlydGlvLiBUaGVyZWZvcmUsIEkgTVVTVCBzZXQgYFdvcnRoRnV6emluZyA9IHRydWVgLgoKTm93LCBsZXQmIzM5O3MgZGV0ZXJtaW5lIHRoZSBgRm9jdXNTeW1ib2xzYC4gIFdoYXQgc3BlY2lmaWMgc3ltYm9scyBzaG91bGQgdGhlIGZ1enplciB0YXJnZXQ/IFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgYXJvdW5kIGB2aXJ0YmxrX2ZyZWV6ZV9wcml2YC4gU2luY2UgdGhpcyBpcyBhIHN0YXRpYyBmdW5jdGlvbiB3aXRoaW4gYSAuYyBmaWxlLCBpdCAqd2lsbCogaGF2ZSBhIHN5bWJvbC4gSSAqZG9uJiMzOTt0KiBuZWVkIHRvIHdvcnJ5IGFib3V0IHN0YXRpYyBpbmxpbmVzIGluIGhlYWRlcnMuIExldCYjMzk7cyB0cmFjZSBpdCBkb3duOiBgdmlydGJsa19mcmVlemVfcHJpdmAgaXMgY2FsbGVkIGJ5IGB2aXJ0YmxrX2ZyZWV6ZWAgYW5kIGB2aXJ0YmxrX3Jlc2V0X3ByZXBhcmVgLCBib3RoIG9mIHdoaWNoIGFyZSBhbHNvIHdpdGhpbiBgZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmNgLiBBbGwgdGhlIGZ1bmN0aW9ucyB0b3VjaGVkIGFyZSBmZWF0dXJlLXNwZWNpZmljIGFuZCBhcmUgKm5vdCogYSB1YmlxdWl0b3VzIGhvdC1wYXRoIGZ1bmN0aW9uLiAgSSBjYW4gaW5jbHVkZSB0aG9zZSBmdW5jdGlvbnMgdG8gc3BlY2lmaWNhbGx5IHRhcmdldCB0aGUgbG9naWMuIFRoYXQmIzM5O3MgY2xlYW4gYW5kIHRhcmdldGVkLiBJdCYjMzk7cyB0aGUgY2xlYW5lc3Qgd2F5IHRvIGZvY3VzIGZ1enppbmcgb24gdGhlIGNoYW5nZXMgdGhlbXNlbHZlcy4KClRoZXJlZm9yZSwgdGhlIGFwcHJvcHJpYXRlIGBGb2N1c1N5bWJvbHNgIGFyZToKKiAgIGB2aXJ0YmxrX2ZyZWV6ZV9wcml2YAoqICAgYHZpcnRibGtfZnJlZXplYAoqICAgYHZpcnRibGtfcmVzZXRfcHJlcGFyZWAKCk5leHQsIHRoZSBgRW5hYmxlQ29uZmlnc2AgYXJlIHRob3NlIG5lZWRlZCB0byBjb21waWxlIGFuZCBydW4gdmlydGlvLWJsay4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgcmVsZXZhbnQgYE1ha2VmaWxlYCBmb3IgdGhlIG5lY2Vzc2FyeSBLY29uZmlnIG9wdGlvbnMgdG8gZW5hYmxlIGB2aXJ0aW9fYmxrLmNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAwOTowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2aXJ0aW9fYmxrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL01ha2VmaWxlPTI1PW9iai0kKENPTkZJR19CTEtfREVWX05CRClcdCYjNDM7PSBuYmQub1xuZHJpdmVycy9ibG9jay9NYWtlZmlsZToyNjpvYmotJChDT05GSUdfVklSVElPX0JMSylcdCYjNDM7PSB2aXJ0aW9fYmxrLm9cbmRyaXZlcnMvYmxvY2svTWFrZWZpbGUtMjctXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA5OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1Mjk2CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTA2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktlcm5lbCBDb25maWd1cmF0aW9uIElucXVpcnkqKgoKT2theSwgc28gSSBuZWVkIHRvIG1ha2Ugc3VyZSBgdmlydGlvX2Jsay5vYCBpcyBnb2luZyB0byBidWlsZC4gVGhhdCBtZWFucyBJIG5lZWQgYENPTkZJR19WSVJUSU9fQkxLYCBlbmFibGVkLiBMZXQmIzM5O3Mgc3RhcnQgYnkgbG9va2luZyBhdCBgZHJpdmVycy9ibG9jay9LY29uZmlnYCB0byBzZWUgaWYgaXQmIzM5O3MgZGVmaW5lZCBhbmQgaG93IGl0JiMzOTtzIGNvbmZpZ3VyZWQuIEFoLCB0aGVyZSBpdCBpcyEgYENPTkZJR19WSVJUSU9fQkxLYCBpcyBhIHRyaXN0YXRlIG9wdGlvbiBhbmQgZGVwZW5kcyBvbiBgVklSVElPYCwgYW5kIGFsc28gc2VsZWN0cyBgU0dfUE9PTGAuIEludGVyZXN0aW5nLiBOb3csIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIHRoYXQgdGhlIGRlcGVuZGVuY3kgb24gYFZJUlRJT2AgaXMgYWxzbyBtZXQuIEkgc2hvdWxkIHByb2JhYmx5IG5vdyBnbyBjaGVjayBgZHJpdmVycy92aXJ0aW8vS2NvbmZpZ2AgdG8gY29uZmlybSB0aGF0IGBDT05GSUdfVklSVElPYCBpcyBkZWZpbmVkIGFuZCBlbmFibGVkIGFzIG5lZWRlZC4gVGltZSB0byBkZWx2ZSBpbnRvIHRoZSB2aXJ0aW8gY29uZmlndXJhdGlvbiBhbmQgbWFrZSBzdXJlIGV2ZXJ5dGhpbmcgaXMgaW4gcGxhY2UgZm9yIGEgc3VjY2Vzc2Z1bCBidWlsZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDk6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFZJUlRJT1xcYiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmlydGlvLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3ZpcnRpby9LY29uZmlnPTI9Y29uZmlnIFZJUlRJT19BTkNIT1Jcbi0tXG5kcml2ZXJzL3ZpcnRpby9LY29uZmlnLTQtXG5kcml2ZXJzL3ZpcnRpby9LY29uZmlnOjU6Y29uZmlnIFZJUlRJT1xuZHJpdmVycy92aXJ0aW8vS2NvbmZpZy02LVx0dHJpc3RhdGVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDk6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzU2ODcKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhhdCBLY29uZmlnIGZpbGU6CgoqKkludmVzdGlnYXRpbmcgVmlydGlvIERyaXZlciBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBgZHJpdmVycy92aXJ0aW8vS2NvbmZpZ2AgZmlsZS4gSSYjMzk7bSBnb2luZyB0byBqdW1wIHJpZ2h0IHRvIGFyb3VuZCBsaW5lIDUgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBiaWdnZXIgcGljdHVyZS4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgY29yZSBkZXBlbmRlbmNpZXMgYW5kIHRoZSB2YXJpb3VzIHRyYW5zcG9ydCBvcHRpb25zLCBlc3BlY2lhbGx5IHRoaW5ncyBsaWtlIGBWSVJUSU9fUENJYCwgc2luY2UgdGhhdCYjMzk7cyBhIGNvbW1vbiBvbmUuIEdldHRpbmcgYSBxdWljayBvdmVydmlldyBvZiB0aGUgY29uZGl0aW9uYWwgbG9naWMgYXQgdGhlIHRvcCBvZiB0aGUgZmlsZSB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIHRoZSBkaWZmZXJlbnQgVmlydGlvIGZlYXR1cmVzIGFuZCB0aGVpciB1bmRlcmx5aW5nIGhhcmR3YXJlIG9yIHN5c3RlbSBjb25maWd1cmF0aW9ucy4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIHVuZGVyc3RhbmRpbmcgdGhlIHJlc3Qgb2YgdGhlIGZpbGUgYW5kIGhvdyB0aGUgZHJpdmVyIGlzIHN0cnVjdHVyZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA5OjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy92aXJ0aW8vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdGNvbmZpZyBWSVJUSU9fQU5DSE9SXG4gICAzOlx0XHRib29sXG4gICA0Olx0XG4gICA1Olx0Y29uZmlnIFZJUlRJT1xuICAgNjpcdFx0dHJpc3RhdGVcbiAgIDc6XHRcdHNlbGVjdCBWSVJUSU9fQU5DSE9SXG4gICA4Olx0XHRoZWxwXG4gICA5Olx0XHQgIFRoaXMgb3B0aW9uIGlzIHNlbGVjdGVkIGJ5IGFueSBkcml2ZXIgd2hpY2ggaW1wbGVtZW50cyB0aGUgdmlydGlvXG4gIDEwOlx0XHQgIGJ1cywgc3VjaCBhcyBDT05GSUdfVklSVElPX1BDSSwgQ09ORklHX1ZJUlRJT19NTUlPLCBDT05GSUdfUlBNU0dcbiAgMTE6XHRcdCAgb3IgQ09ORklHX1MzOTBfR1VFU1QuXG4gIDEyOlx0XG4gIDEzOlx0Y29uZmlnIFZJUlRJT19QQ0lfTElCXG4gIDE0Olx0XHR0cmlzdGF0ZVxuICAxNTpcdFx0aGVscFxuICAxNjpcdFx0ICBNb2Rlcm4gUENJIGRldmljZSBpbXBsZW1lbnRhdGlvbi4gVGhpcyBtb2R1bGUgaW1wbGVtZW50cyB0aGVcbiAgMTc6XHRcdCAgYmFzaWMgcHJvYmUgYW5kIGNvbnRyb2wgZm9yIGRldmljZXMgd2hpY2ggYXJlIGJhc2VkIG9uIG1vZGVyblxuICAxODpcdFx0ICBQQ0kgZGV2aWNlIHdpdGggcG9zc2libGUgdmVuZG9yIHNwZWNpZmljIGV4dGVuc2lvbnMuIEFueVxuICAxOTpcdFx0ICBtb2R1bGUgdGhhdCBzZWxlY3RzIHRoaXMgbW9kdWxlIG11c3QgZGVwZW5kIG9uIFBDSS5cbiAgMjA6XHRcbiAgMjE6XHRjb25maWcgVklSVElPX1BDSV9MSUJfTEVHQUNZXG4gIDIyOlx0XHR0cmlzdGF0ZVxuICAyMzpcdFx0aGVscFxuICAyNDpcdFx0ICBMZWdhY3kgUENJIGRldmljZSAoVmlydGlvIFBDSSBDYXJkIDAuOS54IERyYWZ0IGFuZCBvbGRlciBkZXZpY2UpXG4gIDI1Olx0XHQgIGltcGxlbWVudGF0aW9uLlxuICAyNjpcdFx0ICBUaGlzIG1vZHVsZSBpbXBsZW1lbnRzIHRoZSBiYXNpYyBwcm9iZSBhbmQgY29udHJvbCBmb3IgZGV2aWNlc1xuICAyNzpcdFx0ICB3aGljaCBhcmUgYmFzZWQgb24gbGVnYWN5IFBDSSBkZXZpY2UuIEFueSBtb2R1bGUgdGhhdCBzZWxlY3RzIHRoaXNcbiAgMjg6XHRcdCAgbW9kdWxlIG11c3QgZGVwZW5kIG9uIFBDSS5cbiAgMjk6XHRcbiAgMzA6XHRtZW51Y29uZmlnIFZJUlRJT19NRU5VXG4gIDMxOlx0XHRib29sIFwmIzM0O1ZpcnRpbyBkcml2ZXJzXCYjMzQ7XG4gIDMyOlx0XHRkZWZhdWx0IHlcbiAgMzM6XHRcbiAgMzQ6XHRpZiBWSVJUSU9fTUVOVVxuICAzNTpcdFxuICAzNjpcdGNvbmZpZyBWSVJUSU9fSEFSREVOX05PVElGSUNBVElPTlxuICAzNzpcdCAgICAgICAgYm9vbCBcJiMzNDtIYXJkZW4gdmlydGlvIG5vdGlmaWNhdGlvblwmIzM0O1xuICAzODpcdCAgICAgICAgZGVwZW5kcyBvbiBCUk9LRU5cbiAgMzk6XHQgICAgICAgIGhlbHBcbiAgNDA6XHQgICAgICAgICAgRW5hYmxlIHRoaXMgdG8gaGFyZGVuIHRoZSBkZXZpY2Ugbm90aWZpY2F0aW9ucyBhbmQgc3VwcHJlc3NcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDk6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzY0MjAKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIFZJUlRJTyBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIGBWSVJUSU9gIGlzIGdldHRpbmcgY2hvc2VuLCBhbmQgdGhhdCYjMzk7cyBoYXBwZW5pbmcgc3BlY2lmaWNhbGx5IHRocm91Z2ggYFZJUlRJT19QQ0lgLiBBbHJpZ2h0LCB0aGF0IG1ha2VzIHNlbnNlLiBUaW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSBhbmQgZGl2ZSByaWdodCBpbnRvIHRoZSBgS2NvbmZpZ2AgZmlsZXMuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGNoZWNrIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIGBDT05GSUdfVklSVElPX1BDSWAuIEkmIzM5O2xsIGhlYWQgb3ZlciB0byBgZHJpdmVycy92aXJ0aW8vS2NvbmZpZ2AgdG8gc2VlIHdoYXQmIzM5O3MgZHJpdmluZyAqdGhpcyogZGVjaXNpb24uIEdvdHRhIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBhbmQgdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3ZlIGdvdCBpbiB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDk6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFZJUlRJT19QQ0lcXGImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3ZpcnRpby8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy92aXJ0aW8vS2NvbmZpZz0zNj1jb25maWcgVklSVElPX0hBUkRFTl9OT1RJRklDQVRJT05cbi0tXG5kcml2ZXJzL3ZpcnRpby9LY29uZmlnLTQ5LVxuZHJpdmVycy92aXJ0aW8vS2NvbmZpZzo1MDpjb25maWcgVklSVElPX1BDSVxuZHJpdmVycy92aXJ0aW8vS2NvbmZpZy01MS1cdHRyaXN0YXRlIFwmIzM0O1BDSSBkcml2ZXIgZm9yIHZpcnRpbyBkZXZpY2VzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA5OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2NzI1CgkJCQkJCQlvdXRwdXQ6IDIwOAoJCQkJCQkJdGhvdWdodHM6IDQwMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBWaXJ0aW8tYmxrIFBvd2VyIE1hbmFnZW1lbnQgYW5kIFJlc2V0IExvZ2ljKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGltbWVkaWF0ZWx5IHNlZSB0aGF0IGBDT05GSUdfUE1fU0xFRVBgIGlzIHRoZSBrZXkgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZSBjb250cm9sbGluZyB0aGUgaW5jbHVzaW9uIG9mIHRoZSBgdmlydGJsa19mcmVlemVgIGZ1bmN0aW9uIHdpdGhpbiBgdmlydGlvX2Jsay5jYC4gVGhpcyBpcyBpbXBvcnRhbnQsIGFzIGB2aXJ0YmxrX2ZyZWV6ZWAgaXMgbGlua2VkIHRvIHBvd2VyIG1hbmFnZW1lbnQgZnVuY3Rpb25hbGl0eSwgYW5kIGxpa2VseSBoYW5kbGVzIHRoZSBzdXNwZW5kIHByb2Nlc3MuIFNpbmNlIGBWSVJUSU9fQkxLYCBjb21waWxlcyBgdmlydGlvX2Jsay5jYCwgYW5kIGBWSVJUSU9fUENJYCBwcm92aWRlcyB0aGUgUENJIHRyYW5zcG9ydCBmb3IgdmlydGlvIGRldmljZXMgKGFuZCBpbmNsdWRlcyB0aGUgY3J1Y2lhbCBgdmlydGlvX3BjaV9yZXNldF9wcmVwYXJlYCByZXNldCBoYW5kbGVyKSwgaXQmIzM5O3Mgc2FmZSB0byBhc3N1bWUgYFBDSWAgaXMgZm91bmRhdGlvbmFsIGZvciBgVklSVElPX1BDSWAgdG8gb3BlcmF0ZS4KClRvIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZywgbGV0JiMzOTtzIGp1c3QgbWFrZSBhIHF1aWNrIG1lbnRhbCBsaXN0IG9mIHRoZSBjb25maWcgb3B0aW9ucyBhdCBwbGF5IGhlcmU6IGBWSVJUSU9fQkxLYCwgYFZJUlRJT19QQ0lgLCBgUE1fU0xFRVBgLCBhbmQgYFBDSWAuIEdvdCBpdC4KCk5vdywgbGV0JiMzOTtzIHF1aWNrbHkgcmV2aWV3IHRoZSBjb3JlIHN5bWJvbHMgaW52b2x2ZWQ6IGB2aXJ0YmxrX2ZyZWV6ZV9wcml2YCwgYHZpcnRibGtfcmVzZXRfcHJlcGFyZWAsIGFuZCBgdmlydGJsa19mcmVlemVgLiBJJiMzOTttIGFscmVhZHkgYXdhcmUgb2YgdGhlaXIgZnVuY3Rpb24uCgpGaW5hbGx5LCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gc29saWQgb24gdGhlIHJlYXNvbmluZyBmb3IgdGhpcyBwYXRjaC4gSSB1bmRlcnN0YW5kIGl0IHJlcGxhY2VzIHRoZSBub24tYmxvY2tpbmcgYGJsa19tcV9xdWllc2NlX3F1ZXVlX25vd2FpdChxKWAgd2l0aCB0aGUgYmxvY2tpbmcgYGJsa19tcV9xdWllc2NlX3F1ZXVlKHEpYCB3aXRoaW4gYHZpcnRibGtfZnJlZXplX3ByaXYoKWAuIFRoaXMgZW5zdXJlcyBhbGwgaW4tZmxpZ2h0IHJlcXVlc3RzIGFyZSBjb21wbGV0ZWQgYmVmb3JlIHRoZSB2aXJ0cXVldWVzIGFyZSB0b3JuIGRvd24uIFRoaXMgZnVuY3Rpb24gaXMgcmVhY2hhYmxlIGluIHR3byB3YXlzOiB0aHJvdWdoIHRoZSBQQ0kgcmVzZXQgb3IgdGhyb3VnaCB0aGUgcG93ZXIgbWFuYWdlbWVudCBmcmVlemUvc3VzcGVuZCBwcm9jZXNzLiBJdCBsb29rcyBsaWtlIHRoZSBQQ0kgcmVzZXQgaXMgdHJpZ2dlcmVkIHZpYSBzeXNmcywgb3IgdGhlIGB2aXJ0YmxrX3Jlc2V0X3ByZXBhcmVgLiBCZWNhdXNlIHRoaXMgaXMgYSB0b3VjaCB0byBsaXZlIGRyaXZlciBjb2RlIGluIGEgdmlydGlvIGVudmlyb25tZW50LCBmdXp6aW5nIGlzIGFic29sdXRlbHkgd2FycmFudGVkIHRvIGVuc3VyZSB0aGlzIGNoYW5nZSBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IHJlZ3Jlc3Npb25zIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IuIEFsbCBzZWVtcyBnb29kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAwOTowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VklSVElPX0JMSyYjMzQ7LAogICAgJiMzNDtWSVJUSU9fUENJJiMzNDssCiAgICAmIzM0O1BNX1NMRUVQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dmlydGJsa19mcmVlemVfcHJpdiYjMzQ7LAogICAgJiMzNDt2aXJ0YmxrX3Jlc2V0X3ByZXBhcmUmIzM0OywKICAgICYjMzQ7dmlydGJsa19mcmVlemUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdmlydGJsa19mcmVlemVfcHJpdigpIGluIHRoZSB2aXJ0aW8gYmxvY2sgZHJpdmVyIChkcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYykgdG8gdXNlIGJsa19tcV9xdWllc2NlX3F1ZXVlKCkgaW5zdGVhZCBvZiBibGtfbXFfcXVpZXNjZV9xdWV1ZV9ub3dhaXQoKSwgZW5zdXJpbmcgdGhhdCBhbGwgcGVuZGluZyByZXF1ZXN0IGRpc3BhdGNoZXMgY29tcGxldGUgYmVmb3JlIGRlbGV0aW5nIHZpcnRxdWV1ZXMuIFZpcnRpbyBibG9jayBkZXZpY2VzIGFyZSBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIHZpcnR1YWxpemVkIHRlc3QgZW52aXJvbm1lbnRzIGFuZCB0aGlzIHBhdGggaXMgcmVhY2hhYmxlIHZpYSBQQ0kgcmVzZXQgKHZpcnRibGtfcmVzZXRfcHJlcGFyZSkgb3IgcG93ZXIgbWFuYWdlbWVudCBzdXNwZW5kICh2aXJ0YmxrX2ZyZWV6ZSkuIFNpbmNlIHRoZSBwYXRjaCBtb2RpZmllcyByZWFjaGFibGUgZHJpdmVyIGxvZ2ljIG9uIGEgdmlydHVhbCBidXMsIGl0IGlzIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZJUlRJT19CTEsmIzM0OywKICAgICYjMzQ7VklSVElPX1BDSSYjMzQ7LAogICAgJiMzNDtQTV9TTEVFUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3ZpcnRibGtfZnJlZXplX3ByaXYmIzM0OywKICAgICYjMzQ7dmlydGJsa19yZXNldF9wcmVwYXJlJiMzNDssCiAgICAmIzM0O3ZpcnRibGtfZnJlZXplJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHZpcnRibGtfZnJlZXplX3ByaXYoKSBpbiB0aGUgdmlydGlvIGJsb2NrIGRyaXZlciAoZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmMpIHRvIHVzZSBibGtfbXFfcXVpZXNjZV9xdWV1ZSgpIGluc3RlYWQgb2YgYmxrX21xX3F1aWVzY2VfcXVldWVfbm93YWl0KCksIGVuc3VyaW5nIHRoYXQgYWxsIHBlbmRpbmcgcmVxdWVzdCBkaXNwYXRjaGVzIGNvbXBsZXRlIGJlZm9yZSBkZWxldGluZyB2aXJ0cXVldWVzLiBWaXJ0aW8gYmxvY2sgZGV2aWNlcyBhcmUgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSB2aXJ0dWFsaXplZCB0ZXN0IGVudmlyb25tZW50cyBhbmQgdGhpcyBwYXRoIGlzIHJlYWNoYWJsZSB2aWEgUENJIHJlc2V0ICh2aXJ0YmxrX3Jlc2V0X3ByZXBhcmUpIG9yIHBvd2VyIG1hbmFnZW1lbnQgc3VzcGVuZCAodmlydGJsa19mcmVlemUpLiBTaW5jZSB0aGUgcGF0Y2ggbW9kaWZpZXMgcmVhY2hhYmxlIGRyaXZlciBsb2dpYyBvbiBhIHZpcnR1YWwgYnVzLCBpdCBpcyB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAwOTowOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA5OjA5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVwbGFjZXMgYmxrX21xX3F1aWVzY2VfcXVldWVfbm93YWl0KHEpIHdpdGggYmxrX21xX3F1aWVzY2VfcXVldWUocSkgaW4gdmlydGJsa19mcmVlemVfcHJpdigpIHRvIGVuc3VyZSB0aGF0IGluLWZsaWdodCByZXF1ZXN0cyBhbmQgaGFuZGxlcnMgZmluaXNoIGJlZm9yZSB0aGUgdmlydHF1ZXVlcyBhcmUgZGVsZXRlZCBhbmQgZnJlZWQuXG5cbktNU0FOIHZzIEtBU0FOIEFwcGxpY2FiaWxpdHk6XG4tIEtNU0FOIGRldGVjdHMgcmVhZHMgYW5kIGluZm9ybWF0aW9uIGxlYWtzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGlzIHBhdGNoIGRvZXMgbm90IGFsbG9jYXRlIG5ldyBtZW1vcnksIGluaXRpYWxpemUgb3IgcmVhZCB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMsIGNvcHkgZGF0YSB0byB1c2VyIHNwYWNlLCBvciBhbHRlciBkYXRhIGxlbmd0aC9ib3VuZHMgY2FsY3VsYXRpb25zLiBUaGVyZSBpcyB6ZXJvIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UuXG4tIFRoZSBjaGFuZ2UgYWRkcmVzc2VzIHJlcXVlc3QtcXVldWUgc3luY2hyb25pemF0aW9uIGFuZCBjb25jdXJyZW5jeSBkdXJpbmcgdmlydGlvLWJsayBkZXZpY2UgZnJlZXppbmcuIEFueSBidWdzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHBhdGggKHN1Y2ggYXMgcmFjZSBjb25kaXRpb25zLCBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGFjY2Vzc2VzIGR1cmluZyBxdWV1ZSB0ZWFyZG93bikgYXJlIHRyYWNrZWQgYW5kIGNhdWdodCBieSBLQVNBTiBhbmQgTE9DS0RFUC5cblxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGVhNjFjNTc3ZTEzNzFhMDZkYzM5MGEzY2E2YjMyMWYwNWE2NzQyMzQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IFNlcCAxMiAwOTowODowNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jIGIvZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmMKaW5kZXggMzJiZjNiYTA3YTlkYy4uN2E1NzA1OTFlMDQwYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmMKQEAgLTE1OTUsNyAmIzQzOzE1OTUsNyBAQCBzdGF0aWMgaW50IHZpcnRibGtfZnJlZXplX3ByaXYoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpCiAKIAkvKiBFbnN1cmUgbm8gcmVxdWVzdHMgaW4gdmlydHF1ZXVlcyBiZWZvcmUgZGVsZXRpbmcgdnFzLiAqLwogCW1lbWZsYWdzID0gYmxrX21xX2ZyZWV6ZV9xdWV1ZShxKTsKLQlibGtfbXFfcXVpZXNjZV9xdWV1ZV9ub3dhaXQocSk7CiYjNDM7CWJsa19tcV9xdWllc2NlX3F1ZXVlKHEpOwogCWJsa19tcV91bmZyZWV6ZV9xdWV1ZShxLCBtZW1mbGFncyk7CiAKIAkvKiBFbnN1cmUgd2UgZG9uJiMzOTt0IHJlY2VpdmUgYW55IG1vcmUgaW50ZXJydXB0cyAqLwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDk6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEwMQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI5MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBKdXN0aWZpY2F0aW9uIGZvciBWaXJ0aW8tYmxrLmMgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBhc2tlZCB0byBhc3Nlc3Mgd2hldGhlciB0aGlzIHBhdGNoIHRvIGBkcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuY2Agd2FycmFudHMgYSBkZWRpY2F0ZWQgS2VybmVsIE1lbW9yeSBTYW5pdGl6ZXIgKEtNU0FOKSBzZXNzaW9uLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgbGV0JiMzOTtzIGRpdmUgaW4gYW5kIHNlZSB3aGF0JiMzOTtzIGNoYW5nZWQuIEkgd2FudCBhIHByb3BlciBhbmFseXNpcywgbm90IGp1c3QgYSBndXQgZmVlbGluZy4KCkkmIzM5O20gbG9va2luZyBhdCB0aGUgZGlmZjogYGJsa19tcV9xdWllc2NlX3F1ZXVlX25vd2FpdChxKWAgaGFzIGJlZW4gY2hhbmdlZCB0byBgYmxrX21xX3F1aWVzY2VfcXVldWUocSlgLiBUaGF0JiMzOTtzIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgaGVyZS4gUXVpZXNjaW5nIGEgcXVldWUuLi4gdGhhdCYjMzk7cyB1c3VhbGx5IGFib3V0IGVuc3VyaW5nIHRoYXQgbm8gZnVydGhlciBvcGVyYXRpb25zIGFyZSBzdWJtaXR0ZWQgdG8gaXQuIFRoaXMgc3VnZ2VzdHMgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24gb3IgbWVtb3J5IHNhZmV0eSBjb25jZXJuIGR1cmluZyBmcmVlemUvdGhhdyBvcGVyYXRpb25zLCB3aGljaCBpcyBhbHdheXMgd29ydGggYSBjbG9zZXIgbG9vay4KCkxldCBtZSByZWFkIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGB2aXJ0aW9fYmxrLmNgIGFyb3VuZCBsaW5lIDE1OTUgdXNpbmcgdGhlIGByZWFkLWZpbGVgIGNvbW1hbmQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSAqY29udGV4dCogb2YgdGhpcyBxdWllc2NlIG9wZXJhdGlvbi4gV2hhdCYjMzk7cyBgdmlydGJsa19mcmVlemVfcHJpdmAgdHJ5aW5nIHRvIGFjaGlldmU/IElzIGl0IGNyaXRpY2FsIGZvciBkYXRhIGludGVncml0eT8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBpZiBhIHJhY2UgY29uZGl0aW9uIHdlcmUgdG8gb2NjdXIgaGVyZT8gSSBuZWVkIHRvIGFuYWx5emUgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZ3Jhc3AgdGhlIGludGVudCBvZiB0aGVzZSBsaW5lcy4KCk15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoaXMgY2hhbmdlICptaWdodCogYmUgc2lnbmlmaWNhbnQgZnJvbSBhIG1lbW9yeSBzYWZldHkgcGVyc3BlY3RpdmUuIEEgc3luY2hyb25vdXMgcXVpZXNjZSBpbnN0ZWFkIG9mIGFuIGFzeW5jaHJvbm91cyBvbmUgY291bGQgYWx0ZXIgdGltaW5nIGFuZCB0aGUgcG90ZW50aWFsIGZvciBjb25jdXJyZW50IGFjY2Vzcy4gSSB3YW50IHRvIHNlZSBob3cgdGhpcyBpbXBhY3RzIHRoZSBvdmVyYWxsIGZsb3cgb2YgZGF0YSBhbmQgY29tbWFuZHMsIGVzcGVjaWFsbHkgcmVnYXJkaW5nIHRob3NlIG1lbW9yeSBmbGFncy4gVGhpcyBjZXJ0YWlubHkgbWVyaXRzIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbiB1bmRlciBLTVNBTi4gSSB0aGluayBpdCB3b3VsZCBiZSBhIGdvb2QgaWRlYSB0byBwZXJmb3JtIGEgZGVlcGVyIGFuYWx5c2lzIHdpdGggS01TQU4gdG8gZW5zdXJlIHRoZXJlIGFyZSBubyB1bmludGVuZGVkIGNvbnNlcXVlbmNlcy4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgZmlndXJlIG91dCBpZiBLTVNBTiBpcyByZWFsbHkgbmVlZGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAwOToxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTU4NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNTg1Olx0XHRtdXRleF91bmxvY2soXHUwMDI2dmJsay1cdTAwM2V2ZGV2X211dGV4KTtcbjE1ODY6XHRcbjE1ODc6XHRcdHB1dF9kaXNrKHZibGstXHUwMDNlZGlzayk7XG4xNTg4Olx0fVxuMTU4OTpcdFxuMTU5MDpcdHN0YXRpYyBpbnQgdmlydGJsa19mcmVlemVfcHJpdihzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldilcbjE1OTE6XHR7XG4xNTkyOlx0XHRzdHJ1Y3QgdmlydGlvX2JsayAqdmJsayA9IHZkZXYtXHUwMDNlcHJpdjtcbjE1OTM6XHRcdHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxID0gdmJsay1cdTAwM2VkaXNrLVx1MDAzZXF1ZXVlO1xuMTU5NDpcdFx0dW5zaWduZWQgaW50IG1lbWZsYWdzO1xuMTU5NTpcdFxuMTU5NjpcdFx0LyogRW5zdXJlIG5vIHJlcXVlc3RzIGluIHZpcnRxdWV1ZXMgYmVmb3JlIGRlbGV0aW5nIHZxcy4gKi9cbjE1OTc6XHRcdG1lbWZsYWdzID0gYmxrX21xX2ZyZWV6ZV9xdWV1ZShxKTtcbjE1OTg6XHRcdGJsa19tcV9xdWllc2NlX3F1ZXVlKHEpO1xuMTU5OTpcdFx0YmxrX21xX3VuZnJlZXplX3F1ZXVlKHEsIG1lbWZsYWdzKTtcbjE2MDA6XHRcbjE2MDE6XHRcdC8qIEVuc3VyZSB3ZSBkb24mIzM5O3QgcmVjZWl2ZSBhbnkgbW9yZSBpbnRlcnJ1cHRzICovXG4xNjAyOlx0XHR2aXJ0aW9fcmVzZXRfZGV2aWNlKHZkZXYpO1xuMTYwMzpcdFxuMTYwNDpcdFx0LyogTWFrZSBzdXJlIG5vIHdvcmsgaGFuZGxlciBpcyBhY2Nlc3NpbmcgdGhlIGRldmljZS4gKi9cbjE2MDU6XHRcdGZsdXNoX3dvcmsoXHUwMDI2dmJsay1cdTAwM2Vjb25maWdfd29yayk7XG4xNjA2Olx0XG4xNjA3Olx0XHR2ZGV2LVx1MDAzZWNvbmZpZy1cdTAwM2VkZWxfdnFzKHZkZXYpO1xuMTYwODpcdFx0a2ZyZWUodmJsay1cdTAwM2V2cXMpO1xuMTYwOTpcdFx0LypcbjE2MTA6XHRcdCAqIFNldCB0byBOVUxMIHRvIHByZXZlbnQgZnJlZWluZyB2cXMgYWdhaW4gYWZ0ZXIgYSBmYWlsZWQgdnFzXG4xNjExOlx0XHQgKiBhbGxvY2F0aW9uIGR1cmluZyByZXN1bWUuIE5vdGUgdGhhdCBrZnJlZSgpIGFscmVhZHkgaGFuZGxlcyBOVUxMXG4xNjEyOlx0XHQgKiBwb2ludGVycyBzYWZlbHkuXG4xNjEzOlx0XHQgKi9cbjE2MTQ6XHRcdHZibGstXHUwMDNldnFzID0gTlVMTDtcbjE2MTU6XHRcbjE2MTY6XHRcdHJldHVybiAwO1xuMTYxNzpcdH1cbjE2MTg6XHRcbjE2MTk6XHRzdGF0aWMgaW50IHZpcnRibGtfcmVzdG9yZV9wcml2KHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KVxuMTYyMDpcdHtcbjE2MjE6XHRcdHN0cnVjdCB2aXJ0aW9fYmxrICp2YmxrID0gdmRldi1cdTAwM2Vwcml2O1xuMTYyMjpcdFx0aW50IHJldDtcbjE2MjM6XHRcbjE2MjQ6XHRcdHJldCA9IGluaXRfdnEodmRldi1cdTAwM2Vwcml2KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDk6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQwMAoJCQkJCQkJb3V0cHV0OiAyMjQKCQkJCQkJCXRob3VnaHRzOiA5MzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQXNzZXNzbWVudDogdmlydGlvLWJsayBRdWV1ZSBRdWllc2NpbmcgU3luY2hyb25pemF0aW9uIEZpeCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgY29yZSBvZiB0aGlzIGNoYW5nZSBpbnZvbHZlcyBzd2FwcGluZyBvdXQgYGJsa19tcV9xdWllc2NlX3F1ZXVlX25vd2FpdChxKWAgZm9yIGBibGtfbXFfcXVpZXNjZV9xdWV1ZShxKWAuIFRoZSBjcml0aWNhbCBkaWZmZXJlbmNlIGlzIHRoZSB3YWl0aW5nIGJlaGF2aW9yOiB0aGUgYG5vd2FpdGAgdmVyc2lvbiBkb2VzbiYjMzk7dCBlbnN1cmUgdGhlIGNvbXBsZXRpb24gb2YgaW4tZmxpZ2h0IHJlcXVlc3RzIGJlZm9yZSBwcm9jZWVkaW5nLCB3aGlsZSB0aGUgc3RhbmRhcmQgdmVyc2lvbiAqZG9lcyouIFRoZSBjb21tZW50IGNsZWFybHkgcG9pbnRzIG91dCB0aGUgbW90aXZhdGlvbjogdG8gcHJldmVudCBhIHJhY2Ugd2hlcmUgcmVxdWVzdHMgbWlnaHQgc3RpbGwgYmUgb3BlcmF0aW5nIG9uIHZpcnRxdWV1ZXMgd2hpbGUgd2UmIzM5O3JlIHRyeWluZyB0byBkZWxldGUgdGhlbSwgbGVhZGluZyB0byBhIG5hc3R5IHVzZS1hZnRlci1mcmVlIG9yIG1lbW9yeSBjb3JydXB0aW9uIHdoZW4gYGRlbF92cXMoKWAgaXMgY2FsbGVkLCBmb2xsb3dlZCBieSBga2ZyZWUodmJsay0mZ3Q7dnFzKWAuCgpUaGUgY3J1Y2lhbCBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoaXMgY2hhbmdlIGludHJvZHVjZXMgb3IgZXhwb3NlcyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIEkmIzM5O3ZlIGdvdCB0byBjYXJlZnVsbHkgY29uc2lkZXIgdGhpcywgZ2l2ZW4gS01TQU4mIzM5O3MgcHVycG9zZS4gUmV2aWV3aW5nIHRoZSBjb2RlLCBJIHNlZSBubyBpbmRpY2F0aW9uIG9mIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlcyBiZWluZyBzZW50IHRvIHVzZXJzcGFjZSwgbm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgYmVpbmcgcmVhZCwgbm8gbmV3IGFsbG9jYXRpb25zIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHMsIGFuZCBubyBjaGFuZ2VzIHRvIGJvdW5kcyBjaGVja3Mgb3IgbG9naWMgdGhhdCBjb3VsZCBsZWFkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzcy4gV2UgYXJlIGZpeGluZyBhIGNvbmN1cnJlbmN5L3N5bmNocm9uaXphdGlvbiBpc3N1ZSBoZXJlIChzcGVjaWZpY2FsbHksIHBvdGVudGlhbGx5IHByZXZlbnRpbmcgYSB1c2UtYWZ0ZXItZnJlZSBvciByYWNlIGNvbmRpdGlvbiB3aGVuIGRlbGV0aW5nIHZpcnRxdWV1ZXMgd2hpbGUgcmVxdWVzdHMgYXJlIGluLWZsaWdodCkuIEFueSBzdWNoIGlzc3VlcyB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gb3IgTE9DS0RFUC4KClJlbWVtYmVyIHRoZSBjcml0aWNhbCBkaXN0aW5jdGlvbjogS0FTQU4gY292ZXJzIG91dC1vZi1ib3VuZHMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZXMsIGFuZCBpbnZhbGlkIGZyZWVzLCBhbmQgTE9DS0RFUCBjYXRjaGVzIGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzLiBLTVNBTiBmb2N1c2VzIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIChzdGFjaywgaGVhcCwgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKVGhlIHJ1bGUgb2YgdGh1bWIgaXM6IGlmIHRoZSBidWcgaXMgc29tZXRoaW5nIHRoYXQgS0FTQU4sIExPQ0tERVAsIG9yIG90aGVyIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgd291bGQgY2F0Y2gsIHRoZXJlJiMzOTtzIG5vIG5lZWQgdG8gcnVuIEtNU0FOLiBUaGlzIHBhdGNoIGZvY3VzZXMgb24gc3luY2hyb25pemF0aW9uIGFuZCBjb25jdXJyZW5jeSwgbm90IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBNb3Jlb3ZlciwgYWxsIHN0YWNrIGFuZCBoZWFwIHN0cnVjdHVyZXMgdG91Y2hlZC9pbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgKHplcm9lZC9tZW1zZXQva3phbGxvYyYjMzk7ZCkgYmVmb3JlIGJlaW5nIHJlYWQuIFRoaXMgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpUaGUgcGF0Y2gmIzM5O3MgcHVycG9zZSBpcyBhIHN5bmNocm9uaXphdGlvbiBmaXg6IGVuc3VyaW5nIHRoZSBxdWV1ZSBpcyBmdWxseSBxdWllc2NlZCBiZWZvcmUgZGVsZXRpbmcgdmlydHF1ZXVlcy4gRmFpbHVyZXMgaGVyZSB3b3VsZCBiZSByZWxhdGVkIHRvIGNvbmN1cnJlbmN5LCBzeW5jaHJvbml6YXRpb24sIG9yIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBkdXJpbmcgZnJlZXplL3Bvd2VyIG1hbmFnZW1lbnQgb2YgdmlydGlvLWJsay4KClRoZXJlZm9yZSwgKk5lZWRzS01TQU4gPSBmYWxzZSouCgpUbyBqdXN0aWZ5IHRoaXMgY29uY2x1c2lvbiwgSSYjMzk7bGwgY29uY2lzZWx5IGV4cGxhaW46CgoqICAgVGhlIHBhdGNoJiMzOTtzIGZ1bmN0aW9uYWxpdHk6IFJlcGxhY2luZyB0aGUgbm9uLXdhaXRpbmcgdmVyc2lvbiB3aXRoIHRoZSB3YWl0aW5nIHZlcnNpb24gaW4gYHZpcnRibGtfZnJlZXplX3ByaXYoKWAgZW5zdXJlcyBjb21wbGV0aW9uIG9mIGluLWZsaWdodCByZXF1ZXN0cyBiZWZvcmUgZnJlZWluZyB2aXJ0aW8gcXVldWVzLgoqICAgS01TQU4mIzM5O3MgcmVsZXZhbmNlOiBLTVNBTiBkZXRlY3RzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZSBvciBsZWFrcy4gVGhpcyBwYXRjaCBoYXMgbm8gc3VjaCByaXNrLgoqICAgS0FTQU4vTE9DS0RFUCYjMzk7cyByZWxldmFuY2U6IFRoZSBmaXhlZCBidWcgaXMgYWJvdXQgY29uY3VycmVuY3kvc3luY2hyb25pemF0aW9uLCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGFuZCB1c2UtYWZ0ZXItZnJlZXMsIHdoaWNoIEtBU0FOL0xPQ0tERVAgd291bGQgZGV0ZWN0LgoqICAgVGhlIG92ZXJhbGwgY29uY2x1c2lvbiBpcyB0aGF0IGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCBuZWNlc3NhcnkgaGVyZS4gSSBjYW4gZXhlY3V0ZSBgc2V0LXJlc3VsdHNgIG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDk6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVwbGFjZXMgYmxrX21xX3F1aWVzY2VfcXVldWVfbm93YWl0KHEpIHdpdGggYmxrX21xX3F1aWVzY2VfcXVldWUocSkgaW4gdmlydGJsa19mcmVlemVfcHJpdigpIHRvIGVuc3VyZSB0aGF0IGluLWZsaWdodCByZXF1ZXN0cyBhbmQgaGFuZGxlcnMgZmluaXNoIGJlZm9yZSB0aGUgdmlydHF1ZXVlcyBhcmUgZGVsZXRlZCBhbmQgZnJlZWQuXG5cbktNU0FOIHZzIEtBU0FOIEFwcGxpY2FiaWxpdHk6XG4tIEtNU0FOIGRldGVjdHMgcmVhZHMgYW5kIGluZm9ybWF0aW9uIGxlYWtzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGlzIHBhdGNoIGRvZXMgbm90IGFsbG9jYXRlIG5ldyBtZW1vcnksIGluaXRpYWxpemUgb3IgcmVhZCB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMsIGNvcHkgZGF0YSB0byB1c2VyIHNwYWNlLCBvciBhbHRlciBkYXRhIGxlbmd0aC9ib3VuZHMgY2FsY3VsYXRpb25zLiBUaGVyZSBpcyB6ZXJvIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UuXG4tIFRoZSBjaGFuZ2UgYWRkcmVzc2VzIHJlcXVlc3QtcXVldWUgc3luY2hyb25pemF0aW9uIGFuZCBjb25jdXJyZW5jeSBkdXJpbmcgdmlydGlvLWJsayBkZXZpY2UgZnJlZXppbmcuIEFueSBidWdzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHBhdGggKHN1Y2ggYXMgcmFjZSBjb25kaXRpb25zLCBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGFjY2Vzc2VzIGR1cmluZyBxdWV1ZSB0ZWFyZG93bikgYXJlIHRyYWNrZWQgYW5kIGNhdWdodCBieSBLQVNBTiBhbmQgTE9DS0RFUC5cblxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlcGxhY2VzIGJsa19tcV9xdWllc2NlX3F1ZXVlX25vd2FpdChxKSB3aXRoIGJsa19tcV9xdWllc2NlX3F1ZXVlKHEpIGluIHZpcnRibGtfZnJlZXplX3ByaXYoKSB0byBlbnN1cmUgdGhhdCBpbi1mbGlnaHQgcmVxdWVzdHMgYW5kIGhhbmRsZXJzIGZpbmlzaCBiZWZvcmUgdGhlIHZpcnRxdWV1ZXMgYXJlIGRlbGV0ZWQgYW5kIGZyZWVkLlxuXG5LTVNBTiB2cyBLQVNBTiBBcHBsaWNhYmlsaXR5OlxuLSBLTVNBTiBkZXRlY3RzIHJlYWRzIGFuZCBpbmZvcm1hdGlvbiBsZWFrcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhpcyBwYXRjaCBkb2VzIG5vdCBhbGxvY2F0ZSBuZXcgbWVtb3J5LCBpbml0aWFsaXplIG9yIHJlYWQgdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzLCBjb3B5IGRhdGEgdG8gdXNlciBzcGFjZSwgb3IgYWx0ZXIgZGF0YSBsZW5ndGgvYm91bmRzIGNhbGN1bGF0aW9ucy4gVGhlcmUgaXMgemVybyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLlxuLSBUaGUgY2hhbmdlIGFkZHJlc3NlcyByZXF1ZXN0LXF1ZXVlIHN5bmNocm9uaXphdGlvbiBhbmQgY29uY3VycmVuY3kgZHVyaW5nIHZpcnRpby1ibGsgZGV2aWNlIGZyZWV6aW5nLiBBbnkgYnVncyBhc3NvY2lhdGVkIHdpdGggdGhpcyBwYXRoIChzdWNoIGFzIHJhY2UgY29uZGl0aW9ucywgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBhY2Nlc3NlcyBkdXJpbmcgcXVldWUgdGVhcmRvd24pIGFyZSB0cmFja2VkIGFuZCBjYXVnaHQgYnkgS0FTQU4gYW5kIExPQ0tERVAuXG5cblRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDA5OjA4OjA1Ljk5MjkwMzk3OFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNTUxOTQwMTY0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJWSVJUSU9fQkxLXCIsXG4gICAgXCJWSVJUSU9fUENJXCIsXG4gICAgXCJQTV9TTEVFUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZpcnRibGtfZnJlZXplX3ByaXZcIixcbiAgICBcInZpcnRibGtfcmVzZXRfcHJlcGFyZVwiLFxuICAgIFwidmlydGJsa19mcmVlemVcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlcGxhY2VzIGJsa19tcV9xdWllc2NlX3F1ZXVlX25vd2FpdChxKSB3aXRoIGJsa19tcV9xdWllc2NlX3F1ZXVlKHEpIGluIHZpcnRibGtfZnJlZXplX3ByaXYoKSB0byBlbnN1cmUgdGhhdCBpbi1mbGlnaHQgcmVxdWVzdHMgYW5kIGhhbmRsZXJzIGZpbmlzaCBiZWZvcmUgdGhlIHZpcnRxdWV1ZXMgYXJlIGRlbGV0ZWQgYW5kIGZyZWVkLlxcblxcbktNU0FOIHZzIEtBU0FOIEFwcGxpY2FiaWxpdHk6XFxuLSBLTVNBTiBkZXRlY3RzIHJlYWRzIGFuZCBpbmZvcm1hdGlvbiBsZWFrcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhpcyBwYXRjaCBkb2VzIG5vdCBhbGxvY2F0ZSBuZXcgbWVtb3J5LCBpbml0aWFsaXplIG9yIHJlYWQgdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzLCBjb3B5IGRhdGEgdG8gdXNlciBzcGFjZSwgb3IgYWx0ZXIgZGF0YSBsZW5ndGgvYm91bmRzIGNhbGN1bGF0aW9ucy4gVGhlcmUgaXMgemVybyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLlxcbi0gVGhlIGNoYW5nZSBhZGRyZXNzZXMgcmVxdWVzdC1xdWV1ZSBzeW5jaHJvbml6YXRpb24gYW5kIGNvbmN1cnJlbmN5IGR1cmluZyB2aXJ0aW8tYmxrIGRldmljZSBmcmVlemluZy4gQW55IGJ1Z3MgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcGF0aCAoc3VjaCBhcyByYWNlIGNvbmRpdGlvbnMsIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYWNjZXNzZXMgZHVyaW5nIHF1ZXVlIHRlYXJkb3duKSBhcmUgdHJhY2tlZCBhbmQgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBMT0NLREVQLlxcblxcblRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdmlydGJsa19mcmVlemVfcHJpdigpIGluIHRoZSB2aXJ0aW8gYmxvY2sgZHJpdmVyIChkcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYykgdG8gdXNlIGJsa19tcV9xdWllc2NlX3F1ZXVlKCkgaW5zdGVhZCBvZiBibGtfbXFfcXVpZXNjZV9xdWV1ZV9ub3dhaXQoKSwgZW5zdXJpbmcgdGhhdCBhbGwgcGVuZGluZyByZXF1ZXN0IGRpc3BhdGNoZXMgY29tcGxldGUgYmVmb3JlIGRlbGV0aW5nIHZpcnRxdWV1ZXMuIFZpcnRpbyBibG9jayBkZXZpY2VzIGFyZSBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIHZpcnR1YWxpemVkIHRlc3QgZW52aXJvbm1lbnRzIGFuZCB0aGlzIHBhdGggaXMgcmVhY2hhYmxlIHZpYSBQQ0kgcmVzZXQgKHZpcnRibGtfcmVzZXRfcHJlcGFyZSkgb3IgcG93ZXIgbWFuYWdlbWVudCBzdXNwZW5kICh2aXJ0YmxrX2ZyZWV6ZSkuIFNpbmNlIHRoZSBwYXRjaCBtb2RpZmllcyByZWFjaGFibGUgZHJpdmVyIGxvZ2ljIG9uIGEgdmlydHVhbCBidXMsIGl0IGlzIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDA5OjA4OjA1Ljk5MjkwODAyOVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYzNTY3MjEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZWE2MWM1NzdlMTM3MWEwNmRjMzkwYTNjYTZiMzIxZjA1YTY3NDIzNFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IFNlcCAxMiAwOTowODowNSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYyBiL2RyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jXFxuaW5kZXggMzJiZjNiYTA3YTlkYy4uN2E1NzA1OTFlMDQwYSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuY1xcbisrKyBiL2RyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jXFxuQEAgLTE1OTUsNyArMTU5NSw3IEBAIHN0YXRpYyBpbnQgdmlydGJsa19mcmVlemVfcHJpdihzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldilcXG4gXFxuIFxcdC8qIEVuc3VyZSBubyByZXF1ZXN0cyBpbiB2aXJ0cXVldWVzIGJlZm9yZSBkZWxldGluZyB2cXMuICovXFxuIFxcdG1lbWZsYWdzID0gYmxrX21xX2ZyZWV6ZV9xdWV1ZShxKTtcXG4tXFx0YmxrX21xX3F1aWVzY2VfcXVldWVfbm93YWl0KHEpO1xcbitcXHRibGtfbXFfcXVpZXNjZV9xdWV1ZShxKTtcXG4gXFx0YmxrX21xX3VuZnJlZXplX3F1ZXVlKHEsIG1lbWZsYWdzKTtcXG4gXFxuIFxcdC8qIEVuc3VyZSB3ZSBkb24ndCByZWNlaXZlIGFueSBtb3JlIGludGVycnVwdHMgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDk6MDg6MDYuNDU3MjAyOTczWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxMTIyMjgzNjczNjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVklSVElPX0JMS1wiLFxuICAgIFwiVklSVElPX1BDSVwiLFxuICAgIFwiUE1fU0xFRVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2aXJ0YmxrX2ZyZWV6ZV9wcml2XCIsXG4gICAgXCJ2aXJ0YmxrX3Jlc2V0X3ByZXBhcmVcIixcbiAgICBcInZpcnRibGtfZnJlZXplXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdmlydGJsa19mcmVlemVfcHJpdigpIGluIHRoZSB2aXJ0aW8gYmxvY2sgZHJpdmVyIChkcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYykgdG8gdXNlIGJsa19tcV9xdWllc2NlX3F1ZXVlKCkgaW5zdGVhZCBvZiBibGtfbXFfcXVpZXNjZV9xdWV1ZV9ub3dhaXQoKSwgZW5zdXJpbmcgdGhhdCBhbGwgcGVuZGluZyByZXF1ZXN0IGRpc3BhdGNoZXMgY29tcGxldGUgYmVmb3JlIGRlbGV0aW5nIHZpcnRxdWV1ZXMuIFZpcnRpbyBibG9jayBkZXZpY2VzIGFyZSBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIHZpcnR1YWxpemVkIHRlc3QgZW52aXJvbm1lbnRzIGFuZCB0aGlzIHBhdGggaXMgcmVhY2hhYmxlIHZpYSBQQ0kgcmVzZXQgKHZpcnRibGtfcmVzZXRfcHJlcGFyZSkgb3IgcG93ZXIgbWFuYWdlbWVudCBzdXNwZW5kICh2aXJ0YmxrX2ZyZWV6ZSkuIFNpbmNlIHRoZSBwYXRjaCBtb2RpZmllcyByZWFjaGFibGUgZHJpdmVyIGxvZ2ljIG9uIGEgdmlydHVhbCBidXMsIGl0IGlzIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZWE2MWM1NzdlMTM3MWEwNmRjMzkwYTNjYTZiMzIxZjA1YTY3NDIzNFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgU2VwIDEyIDA5OjA4OjA1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmMgYi9kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuY1xuaW5kZXggMzJiZjNiYTA3YTlkYy4uN2E1NzA1OTFlMDQwYSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jXG4rKysgYi9kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuY1xuQEAgLTE1OTUsNyArMTU5NSw3IEBAIHN0YXRpYyBpbnQgdmlydGJsa19mcmVlemVfcHJpdihzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldilcbiBcbiBcdC8qIEVuc3VyZSBubyByZXF1ZXN0cyBpbiB2aXJ0cXVldWVzIGJlZm9yZSBkZWxldGluZyB2cXMuICovXG4gXHRtZW1mbGFncyA9IGJsa19tcV9mcmVlemVfcXVldWUocSk7XG4tXHRibGtfbXFfcXVpZXNjZV9xdWV1ZV9ub3dhaXQocSk7XG4rXHRibGtfbXFfcXVpZXNjZV9xdWV1ZShxKTtcbiBcdGJsa19tcV91bmZyZWV6ZV9xdWV1ZShxLCBtZW1mbGFncyk7XG4gXG4gXHQvKiBFbnN1cmUgd2UgZG9uJ3QgcmVjZWl2ZSBhbnkgbW9yZSBpbnRlcnJ1cHRzICovXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwOTowODowNi40NTcyMDQ2NzNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo3ODI5MDg5MDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFZpcnRpbyBCbG9jayBEZXZpY2UgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlLCBwYXJ0aWN1bGFybHkgd2l0aGluIHRoZSBgdmlydGlvX2Jsay5jYCBkcml2ZXIuICBUaGUgY29udGV4dCB0ZWxscyBtZSB0aGlzIGlzIHJlbGF0ZWQgdG8gZnJlZXppbmcgYW5kIHVuZnJlZXppbmcgdGhlIGJsb2NrIHF1ZXVlLCBsaWtlbHkgZm9yIHN1c3BlbmQvcmVzdW1lIG9yIGhvdHBsdWcgb3BlcmF0aW9ucy4gIFNwZWNpZmljYWxseSwgaXQgc2VlbXMgdG8gbW9kaWZ5IHRoZSBiZWhhdmlvciBhcm91bmQgcXVpZXNjaW5nIHRoZSBxdWV1ZSBkdXJpbmcgdGhlIGB2aXJ0YmxrX2ZyZWV6ZV9wcml2YCBmdW5jdGlvbi4gIFRoZSBkaWZmIHNob3dzIGEgY2hhbmdlIGZyb20gYGJsa19tcV9xdWllc2NlX3F1ZXVlX25vd2FpdGAgdG8gYGJsa19tcV9xdWllc2NlX3F1ZXVlYC4gSW50ZXJlc3RpbmcuIEkga25vdyBib3RoIG9mIHRob3NlIGZ1bmN0aW9ucywgc28gSSBhbHJlYWR5IGhhdmUgc29tZSBpZGVhcyBvbiB0aGUgaW1wYWN0LiBUaGUgYG5vd2FpdGAgdmVyc2lvbiBpcyBhc3luY2hyb25vdXM7IHRoaXMgbWlnaHQgYmUgYSBzdWJ0bGUgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uIGJlaW5nIHRyYWRlZCBmb3IgZ3VhcmFudGVlZCBjb21wbGV0aW9uIGJlZm9yZSBjb250aW51aW5nLiBMZXQgbWUgaW5zcGVjdCB0aGUgYXJlYSBhcm91bmQgbGluZSAxNTk1IGluIHRoZSBzb3VyY2UgY29kZSB1c2luZyBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgdG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB0aGlzIGNoYW5nZSB3YXMgbWFkZSBhbmQgdGhlIHBvdGVudGlhbCBpbXBhY3Qgb24gcmVxdWVzdCBjb21wbGV0aW9uIHRpbWluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg4OSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5MiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDA5OjA4OjE0LjI4NjI5NTg3M1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNDk0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNTg1LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNTg1OlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2dmJsay1cXHUwMDNldmRldl9tdXRleCk7XFxuMTU4NjpcXHRcXG4xNTg3OlxcdFxcdHB1dF9kaXNrKHZibGstXFx1MDAzZWRpc2spO1xcbjE1ODg6XFx0fVxcbjE1ODk6XFx0XFxuMTU5MDpcXHRzdGF0aWMgaW50IHZpcnRibGtfZnJlZXplX3ByaXYoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpXFxuMTU5MTpcXHR7XFxuMTU5MjpcXHRcXHRzdHJ1Y3QgdmlydGlvX2JsayAqdmJsayA9IHZkZXYtXFx1MDAzZXByaXY7XFxuMTU5MzpcXHRcXHRzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSA9IHZibGstXFx1MDAzZWRpc2stXFx1MDAzZXF1ZXVlO1xcbjE1OTQ6XFx0XFx0dW5zaWduZWQgaW50IG1lbWZsYWdzO1xcbjE1OTU6XFx0XFxuMTU5NjpcXHRcXHQvKiBFbnN1cmUgbm8gcmVxdWVzdHMgaW4gdmlydHF1ZXVlcyBiZWZvcmUgZGVsZXRpbmcgdnFzLiAqL1xcbjE1OTc6XFx0XFx0bWVtZmxhZ3MgPSBibGtfbXFfZnJlZXplX3F1ZXVlKHEpO1xcbjE1OTg6XFx0XFx0YmxrX21xX3F1aWVzY2VfcXVldWUocSk7XFxuMTU5OTpcXHRcXHRibGtfbXFfdW5mcmVlemVfcXVldWUocSwgbWVtZmxhZ3MpO1xcbjE2MDA6XFx0XFxuMTYwMTpcXHRcXHQvKiBFbnN1cmUgd2UgZG9uJ3QgcmVjZWl2ZSBhbnkgbW9yZSBpbnRlcnJ1cHRzICovXFxuMTYwMjpcXHRcXHR2aXJ0aW9fcmVzZXRfZGV2aWNlKHZkZXYpO1xcbjE2MDM6XFx0XFxuMTYwNDpcXHRcXHQvKiBNYWtlIHN1cmUgbm8gd29yayBoYW5kbGVyIGlzIGFjY2Vzc2luZyB0aGUgZGV2aWNlLiAqL1xcbjE2MDU6XFx0XFx0Zmx1c2hfd29yayhcXHUwMDI2dmJsay1cXHUwMDNlY29uZmlnX3dvcmspO1xcbjE2MDY6XFx0XFxuMTYwNzpcXHRcXHR2ZGV2LVxcdTAwM2Vjb25maWctXFx1MDAzZWRlbF92cXModmRldik7XFxuMTYwODpcXHRcXHRrZnJlZSh2YmxrLVxcdTAwM2V2cXMpO1xcbjE2MDk6XFx0XFx0LypcXG4xNjEwOlxcdFxcdCAqIFNldCB0byBOVUxMIHRvIHByZXZlbnQgZnJlZWluZyB2cXMgYWdhaW4gYWZ0ZXIgYSBmYWlsZWQgdnFzXFxuMTYxMTpcXHRcXHQgKiBhbGxvY2F0aW9uIGR1cmluZyByZXN1bWUuIE5vdGUgdGhhdCBrZnJlZSgpIGFscmVhZHkgaGFuZGxlcyBOVUxMXFxuMTYxMjpcXHRcXHQgKiBwb2ludGVycyBzYWZlbHkuXFxuMTYxMzpcXHRcXHQgKi9cXG4xNjE0OlxcdFxcdHZibGstXFx1MDAzZXZxcyA9IE5VTEw7XFxuMTYxNTpcXHRcXG4xNjE2OlxcdFxcdHJldHVybiAwO1xcbjE2MTc6XFx0fVxcbjE2MTg6XFx0XFxuMTYxOTpcXHRzdGF0aWMgaW50IHZpcnRibGtfcmVzdG9yZV9wcml2KHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KVxcbjE2MjA6XFx0e1xcbjE2MjE6XFx0XFx0c3RydWN0IHZpcnRpb19ibGsgKnZibGsgPSB2ZGV2LVxcdTAwM2Vwcml2O1xcbjE2MjI6XFx0XFx0aW50IHJldDtcXG4xNjIzOlxcdFxcbjE2MjQ6XFx0XFx0cmV0ID0gaW5pdF92cSh2ZGV2LVxcdTAwM2Vwcml2KTtcXG4xNjI1OlxcdFxcdGlmIChyZXQpXFxuMTYyNjpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjE2Mjc6XFx0XFxuMTYyODpcXHRcXHR2aXJ0aW9fZGV2aWNlX3JlYWR5KHZkZXYpO1xcbjE2Mjk6XFx0XFx0YmxrX21xX3VucXVpZXNjZV9xdWV1ZSh2YmxrLVxcdTAwM2VkaXNrLVxcdTAwM2VxdWV1ZSk7XFxuMTYzMDpcXHRcXG4xNjMxOlxcdFxcdHJldHVybiAwO1xcbjE2MzI6XFx0fVxcbjE2MzM6XFx0XFxuMTYzNDpcXHQjaWZkZWYgQ09ORklHX1BNX1NMRUVQXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDA5OjA4OjE0LjI4NjQwMzU2M1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjMwMDYwMjA0MTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBgdmlydGJsa19mcmVlemVfcHJpdmAgaW4gYHZpcnRpb19ibGsuY2AqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgdXNhZ2Ugb2YgYHZpcnRibGtfZnJlZXplX3ByaXZgLiBMZXQncyBnZXQgcmlnaHQgdG8gaXQuIEknbSBnb2luZyB0byBqdW1wIGludG8gYHZpcnRpb19ibGsuY2AgYW5kIHRha2UgYSBsb29rIGF0IHdoZXJlIHRoYXQgZnVuY3Rpb24gaXMgYWN0dWFsbHkgYmVpbmcgKnVzZWQqLiBTcGVjaWZpY2FsbHksIEknbSBnb2luZyB0byBmb2N1cyBvbiBsaW5lcyAxNjMwIHRocm91Z2ggMTcwMC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgY29udGV4dCB3aW5kb3cgdG8gc2VlIGhvdyBpdCdzIGJlaW5nIGNhbGxlZCBhbmQgd2hhdCBzdXJyb3VuZGluZyBsb2dpYyBpcyBpbiBwbGF5LiBIb3BlZnVsbHksIHRoYXQgZ2l2ZXMgbWUgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyByb2xlIHdpdGhpbiB0aGUgYmxvY2sgZGV2aWNlIGRyaXZlci5cblxuXG4iLCJJbnB1dFRva2VucyI6NDE0NiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDk6MDg6MTcuMjkyNDI2MTk1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUyMjAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE2MzQsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE2MzQ6XFx0I2lmZGVmIENPTkZJR19QTV9TTEVFUFxcbjE2MzU6XFx0c3RhdGljIGludCB2aXJ0YmxrX2ZyZWV6ZShzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldilcXG4xNjM2OlxcdHtcXG4xNjM3OlxcdFxcdHJldHVybiB2aXJ0YmxrX2ZyZWV6ZV9wcml2KHZkZXYpO1xcbjE2Mzg6XFx0fVxcbjE2Mzk6XFx0XFxuMTY0MDpcXHRzdGF0aWMgaW50IHZpcnRibGtfcmVzdG9yZShzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldilcXG4xNjQxOlxcdHtcXG4xNjQyOlxcdFxcdHJldHVybiB2aXJ0YmxrX3Jlc3RvcmVfcHJpdih2ZGV2KTtcXG4xNjQzOlxcdH1cXG4xNjQ0OlxcdCNlbmRpZlxcbjE2NDU6XFx0XFxuMTY0NjpcXHRzdGF0aWMgaW50IHZpcnRibGtfcmVzZXRfcHJlcGFyZShzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldilcXG4xNjQ3OlxcdHtcXG4xNjQ4OlxcdFxcdHJldHVybiB2aXJ0YmxrX2ZyZWV6ZV9wcml2KHZkZXYpO1xcbjE2NDk6XFx0fVxcbjE2NTA6XFx0XFxuMTY1MTpcXHRzdGF0aWMgaW50IHZpcnRibGtfcmVzZXRfZG9uZShzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldilcXG4xNjUyOlxcdHtcXG4xNjUzOlxcdFxcdHJldHVybiB2aXJ0YmxrX3Jlc3RvcmVfcHJpdih2ZGV2KTtcXG4xNjU0OlxcdH1cXG4xNjU1OlxcdFxcbjE2NTY6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCB2aXJ0aW9fZGV2aWNlX2lkIGlkX3RhYmxlW10gPSB7XFxuMTY1NzpcXHRcXHR7IFZJUlRJT19JRF9CTE9DSywgVklSVElPX0RFVl9BTllfSUQgfSxcXG4xNjU4OlxcdFxcdHsgMCB9LFxcbjE2NTk6XFx0fTtcXG4xNjYwOlxcdFxcbjE2NjE6XFx0c3RhdGljIHVuc2lnbmVkIGludCBmZWF0dXJlc19sZWdhY3lbXSA9IHtcXG4xNjYyOlxcdFxcdFZJUlRJT19CTEtfRl9TRUdfTUFYLCBWSVJUSU9fQkxLX0ZfU0laRV9NQVgsIFZJUlRJT19CTEtfRl9HRU9NRVRSWSxcXG4xNjYzOlxcdFxcdFZJUlRJT19CTEtfRl9STywgVklSVElPX0JMS19GX0JMS19TSVpFLFxcbjE2NjQ6XFx0XFx0VklSVElPX0JMS19GX0ZMVVNILCBWSVJUSU9fQkxLX0ZfVE9QT0xPR1ksIFZJUlRJT19CTEtfRl9DT05GSUdfV0NFLFxcbjE2NjU6XFx0XFx0VklSVElPX0JMS19GX01RLCBWSVJUSU9fQkxLX0ZfRElTQ0FSRCwgVklSVElPX0JMS19GX1dSSVRFX1pFUk9FUyxcXG4xNjY2OlxcdFxcdFZJUlRJT19CTEtfRl9TRUNVUkVfRVJBU0UsXFxuMTY2NzpcXHR9XFxuMTY2ODpcXHQ7XFxuMTY2OTpcXHRzdGF0aWMgdW5zaWduZWQgaW50IGZlYXR1cmVzW10gPSB7XFxuMTY3MDpcXHRcXHRWSVJUSU9fQkxLX0ZfU0VHX01BWCwgVklSVElPX0JMS19GX1NJWkVfTUFYLCBWSVJUSU9fQkxLX0ZfR0VPTUVUUlksXFxuMTY3MTpcXHRcXHRWSVJUSU9fQkxLX0ZfUk8sIFZJUlRJT19CTEtfRl9CTEtfU0laRSxcXG4xNjcyOlxcdFxcdFZJUlRJT19CTEtfRl9GTFVTSCwgVklSVElPX0JMS19GX1RPUE9MT0dZLCBWSVJUSU9fQkxLX0ZfQ09ORklHX1dDRSxcXG4xNjczOlxcdFxcdFZJUlRJT19CTEtfRl9NUSwgVklSVElPX0JMS19GX0RJU0NBUkQsIFZJUlRJT19CTEtfRl9XUklURV9aRVJPRVMsXFxuMTY3NDpcXHRcXHRWSVJUSU9fQkxLX0ZfU0VDVVJFX0VSQVNFLCBWSVJUSU9fQkxLX0ZfWk9ORUQsXFxuMTY3NTpcXHR9O1xcbjE2NzY6XFx0XFxuMTY3NzpcXHRzdGF0aWMgc3RydWN0IHZpcnRpb19kcml2ZXIgdmlydGlvX2JsayA9IHtcXG4xNjc4OlxcdFxcdC5mZWF0dXJlX3RhYmxlXFx0XFx0XFx0PSBmZWF0dXJlcyxcXG4xNjc5OlxcdFxcdC5mZWF0dXJlX3RhYmxlX3NpemVcXHRcXHQ9IEFSUkFZX1NJWkUoZmVhdHVyZXMpLFxcbjE2ODA6XFx0XFx0LmZlYXR1cmVfdGFibGVfbGVnYWN5XFx0XFx0PSBmZWF0dXJlc19sZWdhY3ksXFxuMTY4MTpcXHRcXHQuZmVhdHVyZV90YWJsZV9zaXplX2xlZ2FjeVxcdD0gQVJSQVlfU0laRShmZWF0dXJlc19sZWdhY3kpLFxcbjE2ODI6XFx0XFx0LmRyaXZlci5uYW1lXFx0XFx0XFx0PSBLQlVJTERfTU9ETkFNRSxcXG4xNjgzOlxcdFxcdC5pZF90YWJsZVxcdFxcdFxcdD0gaWRfdGFibGUsXFxuMTY4NDpcXHRcXHQucHJvYmVcXHRcXHRcXHRcXHQ9IHZpcnRibGtfcHJvYmUsXFxuMTY4NTpcXHRcXHQucmVtb3ZlXFx0XFx0XFx0XFx0PSB2aXJ0YmxrX3JlbW92ZSxcXG4xNjg2OlxcdFxcdC5jb25maWdfY2hhbmdlZFxcdFxcdFxcdD0gdmlydGJsa19jb25maWdfY2hhbmdlZCxcXG4xNjg3OlxcdCNpZmRlZiBDT05GSUdfUE1fU0xFRVBcXG4xNjg4OlxcdFxcdC5mcmVlemVcXHRcXHRcXHRcXHQ9IHZpcnRibGtfZnJlZXplLFxcbjE2ODk6XFx0XFx0LnJlc3RvcmVcXHRcXHRcXHQ9IHZpcnRibGtfcmVzdG9yZSxcXG4xNjkwOlxcdCNlbmRpZlxcbjE2OTE6XFx0XFx0LnJlc2V0X3ByZXBhcmVcXHRcXHRcXHQ9IHZpcnRibGtfcmVzZXRfcHJlcGFyZSxcXG4xNjkyOlxcdFxcdC5yZXNldF9kb25lXFx0XFx0XFx0PSB2aXJ0YmxrX3Jlc2V0X2RvbmUsXFxuMTY5MzpcXHR9O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwOTowODoxNy4yOTI1ODE0NTVaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMTA3NDE5NzAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdW5kZXJzdGFuZGluZyBgdmlydGJsa19mcmVlemVfcHJpdmAgYW5kIGl0cyBpbnRlcmFjdGlvbnMgd2l0aGluIHRoZSB2aXJ0aW8gc3Vic3lzdGVtOlxuXG4qKkRlY29uc3RydWN0aW5nIHZpcnRibGtfZnJlZXplX3ByaXYgYW5kIEl0cyBSb2xlKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB3aGF0IHRoaXMgYHZpcnRibGtfZnJlZXplX3ByaXZgIGZ1bmN0aW9uIGFjdHVhbGx5ICpkb2VzKi4gTXkgZmlyc3QgbW92ZSBpcyB0byB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlIGFuZCBiZWhhdmlvci4gVGhlbiwgSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgaXQncyBiZWluZyBjYWxsZWQuIEknbGwgbmVlZCB0byB0cmFjZSBpdHMgY29ubmVjdGlvbnMgd2l0aGluIHRoZSB2aXJ0aW8gc3Vic3lzdGVtLiBJ4oCZbGwgc3RhcnQgYnkgaW52ZXN0aWdhdGluZyB0aGUgY2FsbHNpdGVzIG9mIGAuZnJlZXplYCwgYC5yZXNldF9wcmVwYXJlYCwgYW5kIHNpbWlsYXIgcmVsYXRlZCBmdW5jdGlvbnMuIEZvciB0aGF0LCBJJ20gZGVmaW5pdGVseSByZWFjaGluZyBmb3IgYGdyZXBwZXJgIOKAkyB0aGF0J3MgdGhlIGZhc3Rlc3Qgd2F5IHRvIGdldCBhIHNvbGlkIGxpc3Qgb2YgcG90ZW50aWFsIGNhbGwgcGF0aHMuIEknbGwgbmVlZCB0byBnZXQgYSBoaWdoLWxldmVsIHZpZXcgb2YgaG93IHRoaXMgZnJlZXplL3Jlc2V0IGZ1bmN0aW9uYWxpdHkgZml0cyBpbnRvIHRoZSBiaWdnZXIgcGljdHVyZSBvZiBibG9jayBkZXZpY2Ugb3BlcmF0aW9uIHdpdGhpbiB2aXJ0aW8uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0NjMsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDA5OjA4OjE5LjQwMDAwNDEwN1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTgwNTkyOTc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlxcXFxicmVzZXRfcHJlcGFyZVxcXFxiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYWNjZWwvaGFiYW5hbGFicy9jb21tb24vaGFiYW5hbGFic19kcnYuYz03MTQ9c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZXJyb3JfaGFuZGxlcnMgaGxfcGNpX2Vycl9oYW5kbGVyID0ge1xcbi0tXFxuZHJpdmVycy9hY2NlbC9oYWJhbmFsYWJzL2NvbW1vbi9oYWJhbmFsYWJzX2Rydi5jLTcxNy1cXHQucmVzdW1lID0gaGxfcGNpX2Vycl9yZXN1bWUsXFxuZHJpdmVycy9hY2NlbC9oYWJhbmFsYWJzL2NvbW1vbi9oYWJhbmFsYWJzX2Rydi5jOjcxODpcXHQucmVzZXRfcHJlcGFyZSA9IGhsX3BjaV9yZXNldF9wcmVwYXJlLFxcbmRyaXZlcnMvYWNjZWwvaGFiYW5hbGFicy9jb21tb24vaGFiYW5hbGFic19kcnYuYy03MTktXFx0LnJlc2V0X2RvbmUgPSBobF9wY2lfcmVzZXRfZG9uZSxcXG4tLVxcbmRyaXZlcnMvYWNjZWwvaXZwdS9pdnB1X2Rydi5jPTg5Mj1zdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9lcnJvcl9oYW5kbGVycyBpdnB1X2Rydl9wY2lfZXJyID0ge1xcbmRyaXZlcnMvYWNjZWwvaXZwdS9pdnB1X2Rydi5jOjg5MzpcXHQucmVzZXRfcHJlcGFyZSA9IGl2cHVfcG1fcmVzZXRfcHJlcGFyZV9jYixcXG5kcml2ZXJzL2FjY2VsL2l2cHUvaXZwdV9kcnYuYy04OTQtXFx0LnJlc2V0X2RvbmUgPSBpdnB1X3BtX3Jlc2V0X2RvbmVfY2IsXFxuLS1cXG5kcml2ZXJzL2FjY2VsL3FhaWMvcWFpY19kcnYuYz02NzI9c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZXJyb3JfaGFuZGxlcnMgcWFpY19wY2lfZXJyX2hhbmRsZXIgPSB7XFxuZHJpdmVycy9hY2NlbC9xYWljL3FhaWNfZHJ2LmMtNjczLVxcdC5lcnJvcl9kZXRlY3RlZCA9IHFhaWNfcGNpX2Vycm9yX2RldGVjdGVkLFxcbmRyaXZlcnMvYWNjZWwvcWFpYy9xYWljX2Rydi5jOjY3NDpcXHQucmVzZXRfcHJlcGFyZSA9IHFhaWNfcGNpX3Jlc2V0X3ByZXBhcmUsXFxuZHJpdmVycy9hY2NlbC9xYWljL3FhaWNfZHJ2LmMtNjc1LVxcdC5yZXNldF9kb25lID0gcWFpY19wY2lfcmVzZXRfZG9uZSxcXG4tLVxcbmRyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jPTE2Nzc9c3RhdGljIHN0cnVjdCB2aXJ0aW9fZHJpdmVyIHZpcnRpb19ibGsgPSB7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYy0xNjkwLSNlbmRpZlxcbmRyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jOjE2OTE6XFx0LnJlc2V0X3ByZXBhcmVcXHRcXHRcXHQ9IHZpcnRibGtfcmVzZXRfcHJlcGFyZSxcXG5kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYy0xNjkyLVxcdC5yZXNldF9kb25lXFx0XFx0XFx0PSB2aXJ0YmxrX3Jlc2V0X2RvbmUsXFxuLS1cXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wY2lfZ2VuZXJpYy5jPTE2MTY9c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZXJyb3JfaGFuZGxlcnMgbWhpX3BjaV9lcnJfaGFuZGxlciA9IHtcXG4tLVxcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BjaV9nZW5lcmljLmMtMTYxOS1cXHQucmVzdW1lID0gbWhpX3BjaV9pb19yZXN1bWUsXFxuZHJpdmVycy9idXMvbWhpL2hvc3QvcGNpX2dlbmVyaWMuYzoxNjIwOlxcdC5yZXNldF9wcmVwYXJlID0gbWhpX3BjaV9yZXNldF9wcmVwYXJlLFxcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BjaV9nZW5lcmljLmMtMTYyMS1cXHQucmVzZXRfZG9uZSA9IG1oaV9wY2lfcmVzZXRfZG9uZSxcXG4tLVxcbmRyaXZlcnMvY2R4L2NkeC5jPTk1PWludCBjZHhfZGV2X3Jlc2V0KHN0cnVjdCBkZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvY2R4L2NkeC5jLTEwNC1cXHQvKiBOb3RpZnkgZHJpdmVyIHRoYXQgZGV2aWNlIGlzIGJlaW5nIHJlc2V0ICovXFxuZHJpdmVycy9jZHgvY2R4LmM6MTA1OlxcdGlmIChjZHhfZHJ2IFxcdTAwMjZcXHUwMDI2IGNkeF9kcnYtXFx1MDAzZXJlc2V0X3ByZXBhcmUpXFxuZHJpdmVycy9jZHgvY2R4LmM6MTA2OlxcdFxcdGNkeF9kcnYtXFx1MDAzZXJlc2V0X3ByZXBhcmUoY2R4X2Rldik7XFxuZHJpdmVycy9jZHgvY2R4LmMtMTA3LVxcbi0tXFxuZHJpdmVycy9jcnlwdG8vaGlzaWxpY29uL2hwcmUvaHByZV9tYWluLmM9MTY4OD1zdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9lcnJvcl9oYW5kbGVycyBocHJlX2Vycl9oYW5kbGVyID0ge1xcbi0tXFxuZHJpdmVycy9jcnlwdG8vaGlzaWxpY29uL2hwcmUvaHByZV9tYWluLmMtMTY5MC1cXHQuc2xvdF9yZXNldFxcdFxcdD0gaGlzaV9xbV9kZXZfc2xvdF9yZXNldCxcXG5kcml2ZXJzL2NyeXB0by9oaXNpbGljb24vaHByZS9ocHJlX21haW4uYzoxNjkxOlxcdC5yZXNldF9wcmVwYXJlXFx0XFx0PSBoaXNpX3FtX3Jlc2V0X3ByZXBhcmUsXFxuZHJpdmVycy9jcnlwdG8vaGlzaWxpY29uL2hwcmUvaHByZV9tYWluLmMtMTY5Mi1cXHQucmVzZXRfZG9uZVxcdFxcdD0gaGlzaV9xbV9yZXNldF9kb25lLFxcbi0tXFxuZHJpdmVycy9jcnlwdG8vaGlzaWxpY29uL3NlYzIvc2VjX21haW4uYz0xNTA2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2Vycm9yX2hhbmRsZXJzIHNlY19lcnJfaGFuZGxlciA9IHtcXG4tLVxcbmRyaXZlcnMvY3J5cHRvL2hpc2lsaWNvbi9zZWMyL3NlY19tYWluLmMtMTUwOC1cXHQuc2xvdF9yZXNldFxcdD0gaGlzaV9xbV9kZXZfc2xvdF9yZXNldCxcXG5kcml2ZXJzL2NyeXB0by9oaXNpbGljb24vc2VjMi9zZWNfbWFpbi5jOjE1MDk6XFx0LnJlc2V0X3ByZXBhcmVcXHQ9IGhpc2lfcW1fcmVzZXRfcHJlcGFyZSxcXG5kcml2ZXJzL2NyeXB0by9oaXNpbGljb24vc2VjMi9zZWNfbWFpbi5jLTE1MTAtXFx0LnJlc2V0X2RvbmVcXHQ9IGhpc2lfcW1fcmVzZXRfZG9uZSxcXG4tLVxcbmRyaXZlcnMvY3J5cHRvL2hpc2lsaWNvbi96aXAvemlwX21haW4uYz0xNjE1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2Vycm9yX2hhbmRsZXJzIGhpc2lfemlwX2Vycl9oYW5kbGVyID0ge1xcbi0tXFxuZHJpdmVycy9jcnlwdG8vaGlzaWxpY29uL3ppcC96aXBfbWFpbi5jLTE2MTctXFx0LnNsb3RfcmVzZXRcXHQ9IGhpc2lfcW1fZGV2X3Nsb3RfcmVzZXQsXFxuZHJpdmVycy9jcnlwdG8vaGlzaWxpY29uL3ppcC96aXBfbWFpbi5jOjE2MTg6XFx0LnJlc2V0X3ByZXBhcmVcXHQ9IGhpc2lfcW1fcmVzZXRfcHJlcGFyZSxcXG5kcml2ZXJzL2NyeXB0by9oaXNpbGljb24vemlwL3ppcF9tYWluLmMtMTYxOS1cXHQucmVzZXRfZG9uZVxcdD0gaGlzaV9xbV9yZXNldF9kb25lLFxcbi0tXFxuZHJpdmVycy9jcnlwdG8vaW50ZWwvcWF0L3FhdF9jb21tb24vYWRmX2Flci5jPTE4PXN0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqZGV2aWNlX3NyaW92X3dxO1xcbmRyaXZlcnMvY3J5cHRvL2ludGVsL3FhdC9xYXRfY29tbW9uL2FkZl9hZXIuYy0xOS1cXG5kcml2ZXJzL2NyeXB0by9pbnRlbC9xYXQvcWF0X2NvbW1vbi9hZGZfYWVyLmM6MjA6c3RhdGljIHBjaV9lcnNfcmVzdWx0X3QgcmVzZXRfcHJlcGFyZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG5kcml2ZXJzL2NyeXB0by9pbnRlbC9xYXQvcWF0X2NvbW1vbi9hZGZfYWVyLmMtMjEte1xcbi0tXFxuZHJpdmVycy9jcnlwdG8vaW50ZWwvcWF0L3FhdF9jb21tb24vYWRmX2Flci5jPTcyPXN0YXRpYyBwY2lfZXJzX3Jlc3VsdF90IGFkZl9lcnJvcl9kZXRlY3RlZChzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG4tLVxcbmRyaXZlcnMvY3J5cHRvL2ludGVsL3FhdC9xYXRfY29tbW9uL2FkZl9hZXIuYy05MC1cXG5kcml2ZXJzL2NyeXB0by9pbnRlbC9xYXQvcWF0X2NvbW1vbi9hZGZfYWVyLmM6OTE6XFx0cmV0dXJuIHJlc2V0X3ByZXBhcmUocGRldik7XFxuZHJpdmVycy9jcnlwdG8vaW50ZWwvcWF0L3FhdF9jb21tb24vYWRmX2Flci5jLTkyLX1cXG4tLVxcbmRyaXZlcnMvY3J5cHRvL2ludGVsL3FhdC9xYXRfY29tbW9uL2FkZl9hZXIuYz0yNTU9c3RhdGljIHZvaWQgYWRmX3Jlc2V0X3ByZXBhcmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuZHJpdmVycy9jcnlwdG8vaW50ZWwvcWF0L3FhdF9jb21tb24vYWRmX2Flci5jLTI1Ni17XFxuZHJpdmVycy9jcnlwdG8vaW50ZWwvcWF0L3FhdF9jb21tb24vYWRmX2Flci5jOjI1NzpcXHRyZXNldF9wcmVwYXJlKHBkZXYpO1xcbmRyaXZlcnMvY3J5cHRvL2ludGVsL3FhdC9xYXRfY29tbW9uL2FkZl9hZXIuYy0yNTgtfVxcbi0tXFxuZHJpdmVycy9jcnlwdG8vaW50ZWwvcWF0L3FhdF9jb21tb24vYWRmX2Flci5jPTI2NT1jb25zdCBzdHJ1Y3QgcGNpX2Vycm9yX2hhbmRsZXJzIGFkZl9lcnJfaGFuZGxlciA9IHtcXG4tLVxcbmRyaXZlcnMvY3J5cHRvL2ludGVsL3FhdC9xYXRfY29tbW9uL2FkZl9hZXIuYy0yNjgtXFx0LnJlc3VtZSA9IGFkZl9yZXN1bWUsXFxuZHJpdmVycy9jcnlwdG8vaW50ZWwvcWF0L3FhdF9jb21tb24vYWRmX2Flci5jOjI2OTpcXHQucmVzZXRfcHJlcGFyZSA9IGFkZl9yZXNldF9wcmVwYXJlLFxcbmRyaXZlcnMvY3J5cHRvL2ludGVsL3FhdC9xYXRfY29tbW9uL2FkZl9hZXIuYy0yNzAtXFx0LnJlc2V0X2RvbmUgPSBhZGZfcmVzZXRfZG9uZSxcXG4tLVxcbmRyaXZlcnMvZG1hL2lkeGQvaW5pdC5jPTExMjY9c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZXJyb3JfaGFuZGxlcnMgaWR4ZF9lcnJvcl9oYW5kbGVyID0ge1xcbmRyaXZlcnMvZG1hL2lkeGQvaW5pdC5jOjExMjc6XFx0LnJlc2V0X3ByZXBhcmVcXHQ9IGlkeGRfcmVzZXRfcHJlcGFyZSxcXG5kcml2ZXJzL2RtYS9pZHhkL2luaXQuYy0xMTI4LVxcdC5yZXNldF9kb25lXFx0PSBpZHhkX3Jlc2V0X2RvbmUsXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9yZXNldC5jPTg0ND1zdGF0aWMgdm9pZCByZXZva2VfbW1hcHMoc3RydWN0IGludGVsX2d0ICpndClcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX3Jlc2V0LmMtODc0LVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX3Jlc2V0LmM6ODc1OnN0YXRpYyBpbnRlbF9lbmdpbmVfbWFza190IHJlc2V0X3ByZXBhcmUoc3RydWN0IGludGVsX2d0ICpndClcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9yZXNldC5jLTg3Ni17XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9yZXNldC5jLTg4NS1cXHQgKiBGb3IgR3VDIG1vZGUgd2l0aCBzdWJtaXNzaW9uIGRpc2FibGVkLCBlbnN1cmUgdGhhdCBHdUMgaXMgbm90XFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfcmVzZXQuYzo4ODY6XFx0ICogc2FuaXRpemVkLCBkbyB0aGF0IGFmdGVyIGVuZ2luZSByZXNldC4gcmVzZXRfcHJlcGFyZSgpXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfcmVzZXQuYy04ODctXFx0ICogaXMgZm9sbG93ZWQgYnkgZW5naW5lIHJlc2V0IHdoaWNoIGluIHRoaXMgbW9kZSByZXF1aXJlcyBHdUMgdG9cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX3Jlc2V0LmM9OTY5PXN0YXRpYyB2b2lkIF9faW50ZWxfZ3Rfc2V0X3dlZGdlZChzdHJ1Y3QgaW50ZWxfZ3QgKmd0KVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfcmVzZXQuYy05ODUtXFx0ICovXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfcmVzZXQuYzo5ODY6XFx0YXdha2UgPSByZXNldF9wcmVwYXJlKGd0KTtcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9yZXNldC5jLTk4Ny1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX3Jlc2V0LmM9MTIwNT12b2lkIGludGVsX2d0X3Jlc2V0KHN0cnVjdCBpbnRlbF9ndCAqZ3QsXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9yZXNldC5jLTEyMzMtXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfcmVzZXQuYzoxMjM0OlxcdGF3YWtlID0gcmVzZXRfcHJlcGFyZShndCk7XFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfcmVzZXQuYy0xMjM1LVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfcmluZ19zdWJtaXNzaW9uLmM9MzE0PXN0YXRpYyB2b2lkIHhjc19zYW5pdGl6ZShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9yaW5nX3N1Ym1pc3Npb24uYy0zNDAtXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfcmluZ19zdWJtaXNzaW9uLmM6MzQxOnN0YXRpYyB2b2lkIHJlc2V0X3ByZXBhcmUoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX3Jpbmdfc3VibWlzc2lvbi5jLTM0Mi17XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9yaW5nX3N1Ym1pc3Npb24uYz0xMTU0PXN0YXRpYyB2b2lkIHNldHVwX2NvbW1vbihzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9yaW5nX3N1Ym1pc3Npb24uYy0xMTY1LVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX3Jpbmdfc3VibWlzc2lvbi5jOjExNjY6XFx0ZW5naW5lLVxcdTAwM2VyZXNldC5wcmVwYXJlID0gcmVzZXRfcHJlcGFyZTtcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9yaW5nX3N1Ym1pc3Npb24uYy0xMTY3LVxcdGVuZ2luZS1cXHUwMDNlcmVzZXQucmV3aW5kID0gcmVzZXRfcmV3aW5kO1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qvc2VsZnRlc3RfcmVzZXQuYz0yNjA9c3RhdGljIGludCBpZ3RfYXRvbWljX3Jlc2V0KHZvaWQgKmFyZylcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X3Jlc2V0LmMtMjgwLVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X3Jlc2V0LmM6MjgxOlxcdFxcdGF3YWtlID0gcmVzZXRfcHJlcGFyZShndCk7XFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qvc2VsZnRlc3RfcmVzZXQuYy0yODItXFx0XFx0cC1cXHUwMDNlY3JpdGljYWxfc2VjdGlvbl9iZWdpbigpO1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjX3N1Ym1pc3Npb24uYz0xMDc3PXN0YXRpYyB2b2lkIHNjcnViX2d1Y19kZXNjX2Zvcl9vdXRzdGFuZGluZ19nMmgoc3RydWN0IGludGVsX2d1YyAqZ3VjKVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjX3N1Ym1pc3Npb24uYy0xMTA0LVxcdFxcdCAqIHRvIGJlIHZpc2libGUgdG8gYWxsIGNhbGxlcnMgd2hvIHNldCB0aGUgYmVsb3cgZmxhZ3MgKHNlZSBhYm92ZVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Y19zdWJtaXNzaW9uLmM6MTEwNTpcXHRcXHQgKiBmbHVzaCBhbmQgZmx1c2hlcyBpbiByZXNldF9wcmVwYXJlKS4gSWYgc3VibWlzc2lvbl9kaXNhYmxlZCgpXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjX3N1Ym1pc3Npb24uYy0xMTA2LVxcdFxcdCAqIGlzIHNldCwgdGhlIGNhbGxlciBzaG91bGRuJ3Qgc2V0IHRoZXNlIGZsYWdzLlxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjX3N1Ym1pc3Npb24uYz0xMzkxPXN0YXRpYyB2b2lkIGd1Y19jYW5jZWxfYnVzeW5lc3Nfd29ya2VyKHN0cnVjdCBpbnRlbF9ndWMgKmd1YylcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Y19zdWJtaXNzaW9uLmMtMTQyNS1cXHQgKiBBbmQgbm90ZSB0aGF0IGluIHRoZSBjYXNlIG9mIGEgcmVzZXQgb2NjdXJyaW5nIGR1cmluZyBkcml2ZXIgdW5sb2FkXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjX3N1Ym1pc3Npb24uYzoxNDI2OlxcdCAqICh3ZWRnZWRfb25fZmluaSksIHNraXBwaW5nIHRoZSBjYW5jZWwgaW4gcmVzZXRfcHJlcGFyZS9yZXNldF9maW5pICh3aGVuIHRoZVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Y19zdWJtaXNzaW9uLmMtMTQyNy1cXHQgKiByZXNldCBmbGFnL211dGV4IGFyZSBzZXQpIGlzIGZpbmUgYmVjYXVzZSB0aGVyZSBpcyBhbm90aGVyIGV4cGxpY2l0IGNhbmNlbCBpblxcbi0tXFxuZHJpdmVycy9tZWRpYS9wY2kvaW50ZWwvaXB1Ni9pcHU2LmM9ODE2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2Vycm9yX2hhbmRsZXJzIHBjaV9lcnJfaGFuZGxlcnMgPSB7XFxuZHJpdmVycy9tZWRpYS9wY2kvaW50ZWwvaXB1Ni9pcHU2LmM6ODE3OlxcdC5yZXNldF9wcmVwYXJlID0gaXB1Nl9wY2lfcmVzZXRfcHJlcGFyZSxcXG5kcml2ZXJzL21lZGlhL3BjaS9pbnRlbC9pcHU2L2lwdTYuYy04MTgtXFx0LnJlc2V0X2RvbmUgPSBpcHU2X3BjaV9yZXNldF9kb25lLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL21haW4uYz01OTA9c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZXJyb3JfaGFuZGxlcnMgcGRzY19lcnJfaGFuZGxlciA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvbWFpbi5jLTU5MS1cXHQvKiBGTFIgaGFuZGxpbmcgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvbWFpbi5jOjU5MjpcXHQucmVzZXRfcHJlcGFyZSAgICAgID0gcGRzY19yZXNldF9wcmVwYXJlLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9tYWluLmMtNTkzLVxcdC5yZXNldF9kb25lICAgICAgICAgPSBwZHNjX3Jlc2V0X2RvbmUsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaGVsc2lvL2N4Z2I0L2N4Z2I0X21haW4uYz01NjE2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2Vycm9yX2hhbmRsZXJzIGN4Z2I0X2VlaCA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjQvY3hnYjRfbWFpbi5jLTU2MTktXFx0LnJlc3VtZSAgICAgICAgID0gZWVoX3Jlc3VtZSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaGVsc2lvL2N4Z2I0L2N4Z2I0X21haW4uYzo1NjIwOlxcdC5yZXNldF9wcmVwYXJlICA9IGVlaF9yZXNldF9wcmVwYXJlLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjQvY3hnYjRfbWFpbi5jLTU2MjEtXFx0LnJlc2V0X2RvbmUgICAgID0gZWVoX3Jlc2V0X2RvbmUsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlibWNnZS9oYmdfZXJyLmM9MTg0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2Vycm9yX2hhbmRsZXJzIGhiZ19wY2lfZXJyX2hhbmRsZXIgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlibWNnZS9oYmdfZXJyLmMtMTg2LVxcdC5zbG90X3Jlc2V0ID0gaGJnX3BjaV9lcnJfc2xvdF9yZXNldCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlibWNnZS9oYmdfZXJyLmM6MTg3OlxcdC5yZXNldF9wcmVwYXJlID0gaGJnX3BjaV9lcnJfcmVzZXRfcHJlcGFyZSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlibWNnZS9oYmdfZXJyLmMtMTg4LVxcdC5yZXNldF9kb25lID0gaGJnX3BjaV9lcnJfcmVzZXRfZG9uZSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huYWUzLmg9NjEwPXN0cnVjdCBobmFlM19hZV9vcHMge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5hZTMuaC02MTItXFx0dm9pZCAoKnVuaW5pdF9hZV9kZXYpKHN0cnVjdCBobmFlM19hZV9kZXYgKmFlX2Rldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5hZTMuaDo2MTM6XFx0dm9pZCAoKnJlc2V0X3ByZXBhcmUpKHN0cnVjdCBobmFlM19hZV9kZXYgKmFlX2RldixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obmFlMy5oLTYxNC1cXHRcXHRcXHQgICAgICBlbnVtIGhuYWUzX3Jlc2V0X3R5cGUgcnN0X3R5cGUpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmM9MzI0Nz1zdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkIGhuczNfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2VuZXQuYy0zMjUyLVxcdFxcdGRldl9pbmZvKGRldiwgXFxcIkJlZ2luIHRvIHN1c3BlbmQuXFxcXG5cXFwiKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2VuZXQuYzozMjUzOlxcdFxcdGlmIChhZV9kZXYtXFx1MDAzZW9wcyBcXHUwMDI2XFx1MDAyNiBhZV9kZXYtXFx1MDAzZW9wcy1cXHUwMDNlcmVzZXRfcHJlcGFyZSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2VuZXQuYzozMjU0OlxcdFxcdFxcdGFlX2Rldi1cXHUwMDNlb3BzLVxcdTAwM2VyZXNldF9wcmVwYXJlKGFlX2RldiwgSE5BRTNfRlVOQ19SRVNFVCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmMtMzI1NS1cXHR9XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2VuZXQuYz0zMzI2PXN0YXRpYyB2b2lkIGhuczNfcmVzZXRfcHJlcGFyZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5jLTMzMzAtXFx0ZGV2X2luZm8oXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgXFxcIkZMUiBwcmVwYXJlXFxcXG5cXFwiKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2VuZXQuYzozMzMxOlxcdGlmIChhZV9kZXYgXFx1MDAyNlxcdTAwMjYgYWVfZGV2LVxcdTAwM2VvcHMgXFx1MDAyNlxcdTAwMjYgYWVfZGV2LVxcdTAwM2VvcHMtXFx1MDAzZXJlc2V0X3ByZXBhcmUpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmM6MzMzMjpcXHRcXHRhZV9kZXYtXFx1MDAzZW9wcy1cXHUwMDNlcmVzZXRfcHJlcGFyZShhZV9kZXYsIEhOQUUzX0ZMUl9SRVNFVCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmMtMzMzMy19XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2VuZXQuYz0zMzQ0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2Vycm9yX2hhbmRsZXJzIGhuczNfZXJyX2hhbmRsZXIgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2VuZXQuYy0zMzQ2LVxcdC5zbG90X3Jlc2V0ICAgICA9IGhuczNfc2xvdF9yZXNldCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2VuZXQuYzozMzQ3OlxcdC5yZXNldF9wcmVwYXJlXFx0PSBobnMzX3Jlc2V0X3ByZXBhcmUsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmMtMzM0OC1cXHQucmVzZXRfZG9uZVxcdD0gaG5zM19yZXNldF9kb25lLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21haW4uYz0xMDYwMD1zdGF0aWMgY29uc3Qgc3RydWN0IGhuYWUzX2FlX29wcyBoY2xnZV9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5jLTEwNjAyLVxcdC51bmluaXRfYWVfZGV2ID0gaGNsZ2VfdW5pbml0X2FlX2RldixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5jOjEwNjAzOlxcdC5yZXNldF9wcmVwYXJlID0gaGNsZ2VfcmVzZXRfcHJlcGFyZV9nZW5lcmFsLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmMtMTA2MDQtXFx0LnJlc2V0X2RvbmUgPSBoY2xnZV9yZXNldF9kb25lLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3ZmL2hjbGdldmZfbWFpbi5jPTMzNDU9c3RhdGljIGNvbnN0IHN0cnVjdCBobmFlM19hZV9vcHMgaGNsZ2V2Zl9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzdmYvaGNsZ2V2Zl9tYWluLmMtMzM0Ny1cXHQudW5pbml0X2FlX2RldiA9IGhjbGdldmZfdW5pbml0X2FlX2RldixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzdmYvaGNsZ2V2Zl9tYWluLmM6MzM0ODpcXHQucmVzZXRfcHJlcGFyZSA9IGhjbGdldmZfcmVzZXRfcHJlcGFyZV9nZW5lcmFsLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczN2Zi9oY2xnZXZmX21haW4uYy0zMzQ5LVxcdC5yZXNldF9kb25lID0gaGNsZ2V2Zl9yZXNldF9kb25lLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZm0xMGsvZm0xMGtfcGNpLmM9MjQ5MT1zdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9lcnJvcl9oYW5kbGVycyBmbTEwa19lcnJfaGFuZGxlciA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ZtMTBrL2ZtMTBrX3BjaS5jLTI0OTQtXFx0LnJlc3VtZSA9IGZtMTBrX2lvX3Jlc3VtZSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9mbTEway9mbTEwa19wY2kuYzoyNDk1OlxcdC5yZXNldF9wcmVwYXJlID0gZm0xMGtfaW9fcmVzZXRfcHJlcGFyZSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9mbTEway9mbTEwa19wY2kuYy0yNDk2LVxcdC5yZXNldF9kb25lID0gZm0xMGtfaW9fcmVzZXRfZG9uZSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9tYWluLmM9MTY2MDQ9c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZXJyb3JfaGFuZGxlcnMgaTQwZV9lcnJfaGFuZGxlciA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9tYWluLmMtMTY2MDYtXFx0LnNsb3RfcmVzZXQgPSBpNDBlX3BjaV9lcnJvcl9zbG90X3Jlc2V0LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9tYWluLmM6MTY2MDc6XFx0LnJlc2V0X3ByZXBhcmUgPSBpNDBlX3BjaV9lcnJvcl9yZXNldF9wcmVwYXJlLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9tYWluLmMtMTY2MDgtXFx0LnJlc2V0X2RvbmUgPSBpNDBlX3BjaV9lcnJvcl9yZXNldF9kb25lLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM9NTg0MT1zdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9lcnJvcl9oYW5kbGVycyBpY2VfcGNpX2Vycl9oYW5kbGVyID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNTg0My1cXHQuc2xvdF9yZXNldCA9IGljZV9wY2lfZXJyX3Nsb3RfcmVzZXQsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM6NTg0NDpcXHQucmVzZXRfcHJlcGFyZSA9IGljZV9wY2lfZXJyX3Jlc2V0X3ByZXBhcmUsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNTg0NS1cXHQucmVzZXRfZG9uZSA9IGljZV9wY2lfZXJyX3Jlc2V0X2RvbmUsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2J2Zi9uZXRkZXYuYz0yOTI5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2Vycm9yX2hhbmRsZXJzIGlnYnZmX2Vycl9oYW5kbGVyID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdidmYvbmV0ZGV2LmMtMjkzMi1cXHQucmVzdW1lID0gaWdidmZfaW9fcmVzdW1lLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYnZmL25ldGRldi5jOjI5MzM6XFx0LnJlc2V0X3ByZXBhcmUgPSBpZ2J2Zl9pb19wcmVwYXJlLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYnZmL25ldGRldi5jLTI5MzQtXFx0LnJlc2V0X2RvbmUgPSBpZ2J2Zl9pb19yZXNldF9kb25lLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvcGNpLmM9MjUyMD1zdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9lcnJvcl9oYW5kbGVycyBtbHhzd19wY2lfZXJyX2hhbmRsZXIgPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvcGNpLmM6MjUyMTpcXHQucmVzZXRfcHJlcGFyZSA9IG1seHN3X3BjaV9yZXNldF9wcmVwYXJlLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3BjaS5jLTI1MjItXFx0LnJlc2V0X2RvbmUgPSBtbHhzd19wY2lfcmVzZXRfZG9uZSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3BlbnNhbmRvL2lvbmljL2lvbmljX2J1c19wY2kuYz01MTI9c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZXJyb3JfaGFuZGxlcnMgaW9uaWNfZXJyX2hhbmRsZXIgPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcGVuc2FuZG8vaW9uaWMvaW9uaWNfYnVzX3BjaS5jLTUxMy1cXHQvKiBGTFIgaGFuZGxpbmcgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9wZW5zYW5kby9pb25pYy9pb25pY19idXNfcGNpLmM6NTE0OlxcdC5yZXNldF9wcmVwYXJlICAgICAgPSBpb25pY19yZXNldF9wcmVwYXJlLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3BlbnNhbmRvL2lvbmljL2lvbmljX2J1c19wY2kuYy01MTUtXFx0LnJlc2V0X2RvbmUgICAgICAgICA9IGlvbmljX3Jlc2V0X2RvbmUsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvcGNpZS5jPTU3MT1zdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9lcnJvcl9oYW5kbGVycyBtd2lmaWV4X3BjaWVfZXJyX2hhbmRsZXIgPSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3BjaWUuYzo1NzI6XFx0LnJlc2V0X3ByZXBhcmVcXHRcXHQ9IG13aWZpZXhfcGNpZV9yZXNldF9wcmVwYXJlLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9wY2llLmMtNTczLVxcdC5yZXNldF9kb25lXFx0XFx0PSBtd2lmaWV4X3BjaWVfcmVzZXRfZG9uZSxcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3BjaS5jPTQxMDY9c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZXJyb3JfaGFuZGxlcnMgbnZtZV9lcnJfaGFuZGxlciA9IHtcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3BjaS5jLTQxMDktXFx0LnJlc3VtZVxcdFxcdD0gbnZtZV9lcnJvcl9yZXN1bWUsXFxuZHJpdmVycy9udm1lL2hvc3QvcGNpLmM6NDExMDpcXHQucmVzZXRfcHJlcGFyZVxcdD0gbnZtZV9yZXNldF9wcmVwYXJlLFxcbmRyaXZlcnMvbnZtZS9ob3N0L3BjaS5jLTQxMTEtXFx0LnJlc2V0X2RvbmVcXHQ9IG52bWVfcmVzZXRfZG9uZSxcXG4tLVxcbmRyaXZlcnMvcGNpL3BjaS5jPTUwODg9c3RhdGljIHZvaWQgcGNpX2Rldl9zYXZlX2FuZF9kaXNhYmxlKHN0cnVjdCBwY2lfZGV2ICpkZXYpXFxuLS1cXG5kcml2ZXJzL3BjaS9wY2kuYy01MDkzLVxcdC8qXFxuZHJpdmVycy9wY2kvcGNpLmM6NTA5NDpcXHQgKiBkZXYtXFx1MDAzZWRyaXZlci1cXHUwMDNlZXJyX2hhbmRsZXItXFx1MDAzZXJlc2V0X3ByZXBhcmUoKSBpcyBwcm90ZWN0ZWQgYWdhaW5zdFxcbmRyaXZlcnMvcGNpL3BjaS5jLTUwOTUtXFx0ICogcmFjZXMgd2l0aCAtXFx1MDAzZXJlbW92ZSgpIGJ5IHRoZSBkZXZpY2UgbG9jaywgd2hpY2ggbXVzdCBiZSBoZWxkIGJ5XFxuLS1cXG5kcml2ZXJzL3BjaS9wY2kuYy01MDk4LVxcdGRldmljZV9sb2NrX2Fzc2VydChcXHUwMDI2ZGV2LVxcdTAwM2VkZXYpO1xcbmRyaXZlcnMvcGNpL3BjaS5jOjUwOTk6XFx0aWYgKGVycl9oYW5kbGVyIFxcdTAwMjZcXHUwMDI2IGVycl9oYW5kbGVyLVxcdTAwM2VyZXNldF9wcmVwYXJlKVxcbmRyaXZlcnMvcGNpL3BjaS5jOjUxMDA6XFx0XFx0ZXJyX2hhbmRsZXItXFx1MDAzZXJlc2V0X3ByZXBhcmUoZGV2KTtcXG5kcml2ZXJzL3BjaS9wY2kuYy01MTAxLVxcdGVsc2UgaWYgKGRldi1cXHUwMDNlZHJpdmVyKVxcbi0tXFxuZHJpdmVycy9zY3NpL2hpc2lfc2FzL2hpc2lfc2FzX3YzX2h3LmM9NTMwNj1zdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9lcnJvcl9oYW5kbGVycyBoaXNpX3Nhc19lcnJfaGFuZGxlciA9IHtcXG5kcml2ZXJzL3Njc2kvaGlzaV9zYXMvaGlzaV9zYXNfdjNfaHcuYzo1MzA3OlxcdC5yZXNldF9wcmVwYXJlXFx0PSBoaXNpX3Nhc19yZXNldF9wcmVwYXJlX3YzX2h3LFxcbmRyaXZlcnMvc2NzaS9oaXNpX3Nhcy9oaXNpX3Nhc192M19ody5jLTUzMDgtXFx0LnJlc2V0X2RvbmVcXHQ9IGhpc2lfc2FzX3Jlc2V0X2RvbmVfdjNfaHcsXFxuLS1cXG5kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfb3MuYz04MzEyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2Vycm9yX2hhbmRsZXJzIHFsYTJ4eHhfZXJyX2hhbmRsZXIgPSB7XFxuLS1cXG5kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfb3MuYy04MzE2LVxcdC5yZXN1bWUgPSBxbGEyeHh4X3BjaV9yZXN1bWUsXFxuZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX29zLmM6ODMxNzpcXHQucmVzZXRfcHJlcGFyZSA9IHFsYV9wY2lfcmVzZXRfcHJlcGFyZSxcXG5kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfb3MuYy04MzE4LVxcdC5yZXNldF9kb25lID0gcWxhX3BjaV9yZXNldF9kb25lLFxcbi0tXFxuZHJpdmVycy9zdGFnaW5nL21lZGlhL2lwdTcvaXB1Ny5jPTI3NTI9c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZXJyb3JfaGFuZGxlcnMgcGNpX2Vycl9oYW5kbGVycyA9IHtcXG5kcml2ZXJzL3N0YWdpbmcvbWVkaWEvaXB1Ny9pcHU3LmM6Mjc1MzpcXHQucmVzZXRfcHJlcGFyZSA9IGlwdTdfcGNpX3Jlc2V0X3ByZXBhcmUsXFxuZHJpdmVycy9zdGFnaW5nL21lZGlhL2lwdTcvaXB1Ny5jLTI3NTQtXFx0LnJlc2V0X2RvbmUgPSBpcHU3X3BjaV9yZXNldF9kb25lLFxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS9oaXNpbGljb24vaGlzaV9hY2NfdmZpb19wY2kuYz0xNzIxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2Vycm9yX2hhbmRsZXJzIGhpc2lfYWNjX3ZmX2Vycl9oYW5kbGVycyA9IHtcXG5kcml2ZXJzL3ZmaW8vcGNpL2hpc2lsaWNvbi9oaXNpX2FjY192ZmlvX3BjaS5jOjE3MjI6XFx0LnJlc2V0X3ByZXBhcmUgPSBoaXNpX2FjY192Zl9wY2lfcmVzZXRfcHJlcGFyZSxcXG5kcml2ZXJzL3ZmaW8vcGNpL2hpc2lsaWNvbi9oaXNpX2FjY192ZmlvX3BjaS5jLTE3MjMtXFx0LnJlc2V0X2RvbmUgPSBoaXNpX2FjY192Zl9wY2lfYWVyX3Jlc2V0X2RvbmUsXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3hlL21haW4uYz0xNDA9c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZXJyb3JfaGFuZGxlcnMgeGVfdmZpb19wY2lfZXJyX2hhbmRsZXJzID0ge1xcbmRyaXZlcnMvdmZpby9wY2kveGUvbWFpbi5jOjE0MTpcXHQucmVzZXRfcHJlcGFyZSA9IHhlX3ZmaW9fcGNpX3Jlc2V0X3ByZXBhcmUsXFxuZHJpdmVycy92ZmlvL3BjaS94ZS9tYWluLmMtMTQyLVxcdC5yZXNldF9kb25lID0geGVfdmZpb19wY2lfcmVzZXRfZG9uZSxcXG4tLVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpby5jPTY5OD1pbnQgdmlydGlvX2RldmljZV9yZXNldF9wcmVwYXJlKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW8uYy03MDItXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvLmM6NzAzOlxcdGlmICghZHJ2IHx8ICFkcnYtXFx1MDAzZXJlc2V0X3ByZXBhcmUpXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvLmMtNzA0LVxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4tLVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpby5jLTcwOS1cXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW8uYzo3MTA6XFx0cmV0ID0gZHJ2LVxcdTAwM2VyZXNldF9wcmVwYXJlKGRldik7XFxuZHJpdmVycy92aXJ0aW8vdmlydGlvLmMtNzExLVxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19wY2lfY29tbW9uLmM9ODMzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2Vycm9yX2hhbmRsZXJzIHZpcnRpb19wY2lfZXJyX2hhbmRsZXIgPSB7XFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaV9jb21tb24uYzo4MzQ6XFx0LnJlc2V0X3ByZXBhcmUgID0gdmlydGlvX3BjaV9yZXNldF9wcmVwYXJlLFxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19wY2lfY29tbW9uLmMtODM1LVxcdC5yZXNldF9kb25lICAgICA9IHZpcnRpb19wY2lfcmVzZXRfZG9uZSxcXG4tLVxcbmluY2x1ZGUvbGludXgvY2R4L2NkeF9idXMuaD0xNDM9c3RydWN0IGNkeF9kZXZpY2Uge1xcbi0tXFxuaW5jbHVkZS9saW51eC9jZHgvY2R4X2J1cy5oLTE4Ny0gKiBAc2h1dGRvd246IEZ1bmN0aW9uIGNhbGxlZCBhdCBzaHV0ZG93biB0aW1lIHRvIHF1aWVzY2UgdGhlIGRldmljZVxcbmluY2x1ZGUvbGludXgvY2R4L2NkeF9idXMuaDoxODg6ICogQHJlc2V0X3ByZXBhcmU6IEZ1bmN0aW9uIGNhbGxlZCBiZWZvcmUgaXMgcmVzZXQgdG8gbm90aWZ5IGRyaXZlclxcbmluY2x1ZGUvbGludXgvY2R4L2NkeF9idXMuaC0xODktICogQHJlc2V0X2RvbmU6IEZ1bmN0aW9uIGNhbGxlZCBhZnRlciByZXNldCBpcyBjb21wbGV0ZSB0byBub3RpZnkgZHJpdmVyXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2NkeC9jZHhfYnVzLmg9MTk4PXN0cnVjdCBjZHhfZHJpdmVyIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvY2R4L2NkeF9idXMuaC0yMDMtXFx0dm9pZCAoKnNodXRkb3duKShzdHJ1Y3QgY2R4X2RldmljZSAqZGV2KTtcXG5pbmNsdWRlL2xpbnV4L2NkeC9jZHhfYnVzLmg6MjA0OlxcdHZvaWQgKCpyZXNldF9wcmVwYXJlKShzdHJ1Y3QgY2R4X2RldmljZSAqZGV2KTtcXG5pbmNsdWRlL2xpbnV4L2NkeC9jZHhfYnVzLmgtMjA1LVxcdHZvaWQgKCpyZXNldF9kb25lKShzdHJ1Y3QgY2R4X2RldmljZSAqZGV2KTtcXG4tLVxcbmluY2x1ZGUvbGludXgvcGNpLmg9OTQ4PXN0cnVjdCBwY2lfZXJyb3JfaGFuZGxlcnMge1xcbi0tXFxuaW5jbHVkZS9saW51eC9wY2kuaC05NTktXFx0LyogUENJIGZ1bmN0aW9uIHJlc2V0IHByZXBhcmUgb3IgY29tcGxldGVkICovXFxuaW5jbHVkZS9saW51eC9wY2kuaDo5NjA6XFx0dm9pZCAoKnJlc2V0X3ByZXBhcmUpKHN0cnVjdCBwY2lfZGV2ICpkZXYpO1xcbmluY2x1ZGUvbGludXgvcGNpLmgtOTYxLVxcdHZvaWQgKCpyZXNldF9kb25lKShzdHJ1Y3QgcGNpX2RldiAqZGV2KTtcXG4tLVxcbmluY2x1ZGUvbGludXgvdmlydGlvLmg9MjIwPXNpemVfdCB2aXJ0aW9fbWF4X2RtYV9zaXplKGNvbnN0IHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KTtcXG4tLVxcbmluY2x1ZGUvbGludXgvdmlydGlvLmgtMjQyLSAqIEByZXN0b3JlOiBvcHRpb25hbCBmdW5jdGlvbiB0byBjYWxsIG9uIHJlc3VtZS5cXG5pbmNsdWRlL2xpbnV4L3ZpcnRpby5oOjI0MzogKiBAcmVzZXRfcHJlcGFyZTogb3B0aW9uYWwgZnVuY3Rpb24gdG8gY2FsbCB3aGVuIGEgdHJhbnNwb3J0IHNwZWNpZmljIHJlc2V0XFxuaW5jbHVkZS9saW51eC92aXJ0aW8uaC0yNDQtICogICAgb2NjdXJzLlxcbi0tXFxuaW5jbHVkZS9saW51eC92aXJ0aW8uaD0yNTA9c3RydWN0IHZpcnRpb19kcml2ZXIge1xcbi0tXFxuaW5jbHVkZS9saW51eC92aXJ0aW8uaC0yNjMtXFx0aW50ICgqcmVzdG9yZSkoc3RydWN0IHZpcnRpb19kZXZpY2UgKmRldik7XFxuaW5jbHVkZS9saW51eC92aXJ0aW8uaDoyNjQ6XFx0aW50ICgqcmVzZXRfcHJlcGFyZSkoc3RydWN0IHZpcnRpb19kZXZpY2UgKmRldik7XFxuaW5jbHVkZS9saW51eC92aXJ0aW8uaC0yNjUtXFx0aW50ICgqcmVzZXRfZG9uZSkoc3RydWN0IHZpcnRpb19kZXZpY2UgKmRldik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDA5OjA4OjIxLjk4MDYwNzIzMloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIyODU4OTQxMTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHJlbGF0ZXMgdG8gdGhhdCBjb2RlOlxuXG4qKkFuYWx5emluZyB0aGUgVmlydElPIERldmljZSBSZXNldCBQcmVwYXJhdGlvbioqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJJ20gbG9va2luZyBhdCBgZHJpdmVycy92aXJ0aW8vdmlydGlvLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGZ1bmN0aW9uIGB2aXJ0aW9fZGV2aWNlX3Jlc2V0X3ByZXBhcmUoc3RydWN0IHZpcnRpb19kZXZpY2UgKmRldilgLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXM6ICp3aGVyZSogaXMgdGhpcyBmdW5jdGlvbiBhY3R1YWxseSBpbnZva2VkIHdpdGhpbiB0aGUgYnJvYWRlciBzeXN0ZW0/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjb250ZXh0LiBLbm93aW5nIHdoZXJlIGl0J3MgY2FsbGVkIHdpbGwgZ2l2ZSBtZSBpbnNpZ2h0cyBpbnRvICp3aHkqIGl0J3MgYmVpbmcgY2FsbGVkIGFuZCB0aGUgc2NlbmFyaW9zIGl0J3MgaW50ZW5kZWQgdG8gaGFuZGxlLiBTbywgSSBuZWVkIHRvIGRvIGEgcXVpY2sgY29kZSBzZWFyY2guIEknbGwgdXNlIGBncmVwYCAob3Igd2hhdGV2ZXIgc2VhcmNoIHRvb2wgaXMgYXQgaGFuZCkgdG8gZmluZCBhbGwgdGhlIGluc3RhbmNlcyB3aGVyZSBgdmlydGlvX2RldmljZV9yZXNldF9wcmVwYXJlYCBpcyBleHBsaWNpdGx5IGNhbGxlZCB3aXRoaW4gdGhlIGNvZGViYXNlLiBUaGF0J3MgdGhlIGJlc3Qgd2F5IHRvIHVuZGVyc3RhbmQgaXRzIHB1cnBvc2Ugd2l0aGluIHRoZSBkZXZpY2UgcmVzZXQgZmxvdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM5NTYsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwOTowODoyNC4yNjY1MDQwNThaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NjM5NjE0NTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmlydGlvX2RldmljZV9yZXNldF9wcmVwYXJlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmlydGlvL3ZpcnRpby5jPTY5NT1FWFBPUlRfU1lNQk9MX0dQTCh2aXJ0aW9fZGV2aWNlX3Jlc3RvcmUpO1xcbi0tXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvLmMtNjk3LVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpby5jOjY5ODppbnQgdmlydGlvX2RldmljZV9yZXNldF9wcmVwYXJlKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICpkZXYpXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvLmMtNjk5LXtcXG4tLVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpby5jLTcxNy19XFxuZHJpdmVycy92aXJ0aW8vdmlydGlvLmM6NzE4OkVYUE9SVF9TWU1CT0xfR1BMKHZpcnRpb19kZXZpY2VfcmVzZXRfcHJlcGFyZSk7XFxuZHJpdmVycy92aXJ0aW8vdmlydGlvLmMtNzE5LVxcbi0tXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaV9jb21tb24uYz03OTg9c3RhdGljIHZvaWQgdmlydGlvX3BjaV9yZXNldF9wcmVwYXJlKHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2KVxcbi0tXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaV9jb21tb24uYy04MDItXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaV9jb21tb24uYzo4MDM6XFx0cmV0ID0gdmlydGlvX2RldmljZV9yZXNldF9wcmVwYXJlKFxcdTAwMjZ2cF9kZXYtXFx1MDAzZXZkZXYpO1xcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19wY2lfY29tbW9uLmMtODA0LVxcdGlmIChyZXQpIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvdmlydGlvLmg9MjE2PXZvaWQgdmlydGlvX2RldmljZV9zaHV0ZG93bihzdHJ1Y3QgdmlydGlvX2RldmljZSAqZGV2KTtcXG5pbmNsdWRlL2xpbnV4L3ZpcnRpby5oOjIxNzppbnQgdmlydGlvX2RldmljZV9yZXNldF9wcmVwYXJlKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICpkZXYpO1xcbmluY2x1ZGUvbGludXgvdmlydGlvLmgtMjE4LWludCB2aXJ0aW9fZGV2aWNlX3Jlc2V0X2RvbmUoc3RydWN0IHZpcnRpb19kZXZpY2UgKmRldik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDA5OjA4OjI2LjAzMDQ3OTAwNVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMTQxNTYzMjM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqVHJhY2luZyBgdmlydGlvX2RldmljZV9mcmVlemVgKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNhbGwgZ3JhcGggZm9yIGB2aXJ0aW9fZGV2aWNlX2ZyZWV6ZWAuIFRoYXQncyB0aGUga2V5IHF1ZXN0aW9uLCByaWdodD8gV2hlcmUgaXMgdGhhdCBmdW5jdGlvbiAqYWN0dWFsbHkqIGJlaW5nIGludm9rZWQgd2l0aGluIHRoZSBzeXN0ZW0/IEkgbmVlZCB0byB0cmFjayBkb3duIGFsbCB0aGUgY2FsbCBzaXRlcyB0byBnZXQgYSBjb21wbGV0ZSBwaWN0dXJlLiBMZXQncyBzdGFydCBieSBsb29raW5nIGZvciBkaXJlY3QgY2FsbHMgdG8gYHZpcnRpb19kZXZpY2VfZnJlZXplYC4gSSdsbCBuZWVkIHRvIHVzZSBteSBwcmVmZXJyZWQgZGVidWdnaW5nIHRvb2xzIGFuZCBjb2RlIHNlYXJjaGluZyB0ZWNobmlxdWVzIHRvIGlkZW50aWZ5IHRoZW0uIEkgc2hvdWxkIGFsc28gY2hlY2sgdGhlIHJlbGV2YW50IGRvY3VtZW50YXRpb24gb3Igc291cmNlIGNvZGUgY29tbWVudHMgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGdpdmUgbWUgbW9yZSBwb2ludGVycywgdG8gbWFrZSBzdXJlIEkgYW0gbm90IG1pc3NpbmcgYW55IGluZGlyZWN0IGNhbGxzLiBUaGlzIHdpbGwgcmVxdWlyZSBjYXJlZnVsIGFuYWx5c2lzLCBidXQgd2l0aCBteSBleHBlcnRpc2UsIEknbSBjb25maWRlbnQgSSBjYW4gbWFwIHRoaXMgb3V0IGVmZmVjdGl2ZWx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDYyMywiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDA5OjA4OjI4LjE3MjA0NDc2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODc3MjczNzY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZpcnRpb19kZXZpY2VfZnJlZXplXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmlydGlvL3ZpcnRpby5jPTYxMz1zdGF0aWMgaW50IHZpcnRpb19kZXZpY2VfcmVzdG9yZV9wcml2KHN0cnVjdCB2aXJ0aW9fZGV2aWNlICpkZXYsIGJvb2wgcmVzdG9yZSlcXG4tLVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpby5jLTY2OS0jaWZkZWYgQ09ORklHX1BNX1NMRUVQXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvLmM6NjcwOmludCB2aXJ0aW9fZGV2aWNlX2ZyZWV6ZShzdHJ1Y3QgdmlydGlvX2RldmljZSAqZGV2KVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpby5jLTY3MS17XFxuLS1cXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW8uYy02ODgtfVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpby5jOjY4OTpFWFBPUlRfU1lNQk9MX0dQTCh2aXJ0aW9fZGV2aWNlX2ZyZWV6ZSk7XFxuZHJpdmVycy92aXJ0aW8vdmlydGlvLmMtNjkwLVxcbi0tXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX21taW8uYz01NTY9c3RhdGljIGludCB2aXJ0aW9fbW1pb19mcmVlemUoc3RydWN0IGRldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX21taW8uYy01NTktXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX21taW8uYzo1NjA6XFx0cmV0dXJuIHZpcnRpb19kZXZpY2VfZnJlZXplKFxcdTAwMjZ2bV9kZXYtXFx1MDAzZXZkZXYpO1xcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19tbWlvLmMtNTYxLX1cXG4tLVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19wY2lfY29tbW9uLmM9NTk5PXN0YXRpYyBpbnQgdmlydGlvX3BjaV9mcmVlemUoc3RydWN0IGRldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaV9jb21tb24uYy02MDQtXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaV9jb21tb24uYzo2MDU6XFx0cmV0ID0gdmlydGlvX2RldmljZV9mcmVlemUoXFx1MDAyNnZwX2Rldi1cXHUwMDNldmRldik7XFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaV9jb21tb24uYy02MDYtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3ZpcnRpby5oPTIwOT12b2lkIHZpcnRpb19jb25maWdfZHJpdmVyX2VuYWJsZShzdHJ1Y3QgdmlydGlvX2RldmljZSAqZGV2KTtcXG4tLVxcbmluY2x1ZGUvbGludXgvdmlydGlvLmgtMjExLSNpZmRlZiBDT05GSUdfUE1fU0xFRVBcXG5pbmNsdWRlL2xpbnV4L3ZpcnRpby5oOjIxMjppbnQgdmlydGlvX2RldmljZV9mcmVlemUoc3RydWN0IHZpcnRpb19kZXZpY2UgKmRldik7XFxuaW5jbHVkZS9saW51eC92aXJ0aW8uaC0yMTMtaW50IHZpcnRpb19kZXZpY2VfcmVzdG9yZShzdHJ1Y3QgdmlydGlvX2RldmljZSAqZGV2KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDk6MDg6MzAuMDQ5MzI2ODk3WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjM5MjUyMzA0MzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUmVjZW50IENoYW5nZSBpbiB0aGUgYHZpcnRpb19ibGtgIERyaXZlcioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZSBgdmlydGlvX2Jsa2AgZHJpdmVyLCBzcGVjaWZpY2FsbHkgdGhlIGB2aXJ0YmxrX2ZyZWV6ZV9wcml2YCBmdW5jdGlvbiB3aXRoaW4gYHZpcnRpb19ibGsuY2AuIEknbSBmYW1pbGlhciB3aXRoIHRoaXMgY29kZTsgaXQncyByZXNwb25zaWJsZSBmb3IgaGFuZGxpbmcgZGV2aWNlIGZyZWV6aW5nLCBhIGNydWNpYWwgcGFydCBvZiBtYW5hZ2luZyB0aGUgYmxvY2sgZGV2aWNlJ3Mgc3RhdGUgZHVyaW5nIG9wZXJhdGlvbnMgbGlrZSBzdXNwZW5kIG9yIGhvdHBsdWcuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHRoaXMgZnVuY3Rpb24uXG5cblJpZ2h0LCBgVklSVElPX0JMS2AgaXMgYSB2aXJ0aW8gYmxvY2sgZGV2aWNlIGRyaXZlci4gTm93LCBJIHNlZSB0aGUgY29kZSBzbmlwcGV0IHdoZXJlIGl0IHVzZXMgYGJsa19tcV9mcmVlemVfcXVldWVgLCBgYmxrX21xX3F1aWVzY2VfcXVldWVgLCBhbmQgYGJsa19tcV91bmZyZWV6ZV9xdWV1ZWAuIE15IGF0dGVudGlvbiBpcyBpbW1lZGlhdGVseSBkcmF3biB0byB0aGUgc3VidGxlIGNoYW5nZSBmcm9tIGBibGtfbXFfcXVpZXNjZV9xdWV1ZV9ub3dhaXQocSlgIHRvIGp1c3QgYGJsa19tcV9xdWllc2NlX3F1ZXVlKHEpYC4gVGhhdCBkaWZmZXJlbmNlIHN1Z2dlc3RzIGEgc2lnbmlmaWNhbnQgY2hhbmdlIGluIGJlaGF2aW9yLiBXaHkgdGhlIG1vZGlmaWNhdGlvbj9cblxuVGhlIG9yaWdpbmFsIGNvZGUgdXNlZCBgbm93YWl0YCwgd2hpY2ggaW1wbGllcyBhbiBhc3luY2hyb25vdXMgcXVpZXNjZSBvcGVyYXRpb24uIFRoZSBjdXJyZW50IHZlcnNpb24gbm93IHVzZXMgdGhlIGJsb2NraW5nIHZlcnNpb24uIFNvLCB3aGF0IHdhcyB0aGUgcmF0aW9uYWxlIGZvciB0aGlzIGNoYW5nZT8gSSBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgY29tbWl0IGhpc3RvcnkuIFRoZSBzdGFuZGFyZCBhcHByb2FjaCBpcyB0byB1c2UgYGdpdCBsb2dgIHRvb2xzLiBJJ20gZ29pbmcgdG8gc3RhcnQgd2l0aCBgZ2l0IGxvZyAtcCAtMWAgdG8gZXhhbWluZSB0aGUgbGFzdCBjb21taXQgdG91Y2hpbmcgdGhpcyBmdW5jdGlvbi4gSWYgdGhhdCBkb2Vzbid0IHByb3ZpZGUgZW5vdWdoIGNvbnRleHQsIEknbGwgYnJvYWRlbiB0aGUgc2VhcmNoIHdpdGggYGdpdCBsb2cgLVMgdmlydGJsa19mcmVlemVfcHJpdmAgb3IgZXZlbiBgZ2l0IGxvZyAtcCAtMiBkcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuY2AgdG8gc2VlIG1vcmUgY2hhbmdlcy4gRXNzZW50aWFsbHksIEknbSB0cnlpbmcgdG8gZGV0ZXJtaW5lIHRoZSAqd2h5KiBiZWhpbmQgdGhpcyBhbHRlcmF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHN3aXRjaGluZyBmcm9tIGEgbm9uLWJsb2NraW5nIHRvIGEgYmxvY2tpbmcgcXVpZXNjZSBvcGVyYXRpb24gd2l0aGluIHRoaXMgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUzNTksIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDk6MDg6MzMuOTc0NTU5NjE4WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTI4NDE3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJibGtfbXFfcXVpZXNjZV9xdWV1ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYz0xNTkwPXN0YXRpYyBpbnQgdmlydGJsa19mcmVlemVfcHJpdihzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldilcXG4tLVxcbmRyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jLTE1OTctXFx0bWVtZmxhZ3MgPSBibGtfbXFfZnJlZXplX3F1ZXVlKHEpO1xcbmRyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jOjE1OTg6XFx0YmxrX21xX3F1aWVzY2VfcXVldWUocSk7XFxuZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmMtMTU5OS1cXHRibGtfbXFfdW5mcmVlemVfcXVldWUocSwgbWVtZmxhZ3MpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwOTowODozNC4wMjM4NDk1MzZaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDc1ODM1NTAyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIHdoYXQncyBnb2luZyB0aHJvdWdoIG15IGhlYWQgYXMgSSBhcHByb2FjaCB0aGlzIGlzc3VlLlxuXG4qKkFuYWx5emluZyBCbG9jayBMYXllciBRdWllc2NpbmcgQmVoYXZpb3IqKlxuXG5BbHJpZ2h0LCB0aGUgZmlyc3QgdGhpbmcgSSBuZWVkIHRvIGRvIGlzIGdldCBzb21lIGNvbnRleHQgb24gdGhpcy4gTXkgaW5zdGluY3QgaXMgdG8gZXhhbWluZSB0aGUgR2l0IGhpc3RvcnkgZm9yIHRoaXMgY29kZSwgaWYgcG9zc2libGUuIFRoYXQgd291bGQgYmUgaWRlYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGV2b2x1dGlvbiBvZiB0aGlzIGZ1bmN0aW9uYWxpdHkuIEhvd2V2ZXIsIEkga25vdyBJIGNhbid0IGp1c3QgcnVuIGBnaXQgbG9nYCBkaXJlY3RseSB3aXRoIG15IGN1cnJlbnQgdG9vbHMuIFNvLCBJIG5lZWQgYSB3b3JrYXJvdW5kLiBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCBhIHdheSB0byBnZXQgdGhlIGNvbnRleHQgSSBuZWVkLlxuXG5JbnN0ZWFkIG9mIGRpcmVjdGx5IGxvb2tpbmcgZm9yIHRoZSBnaXQgbG9nLCBsZXQncyBjb21wYXJlIHRob3NlIHR3byBmdW5jdGlvbnM6IGBibGtfbXFfcXVpZXNjZV9xdWV1ZWAgYW5kIGBibGtfbXFfcXVpZXNjZV9xdWV1ZV9ub3dhaXRgLiBUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZW0gc2hvdWxkIG9mZmVyIGEgY2x1ZSBvZiB0aGUgY3VycmVudCBpc3N1ZS5cblxuTm93LCBteSBuZXh0IHN0ZXAgaXMgY2xlYXIuIExldCdzIGRpdmUgcmlnaHQgaW50byB0aGUgYGJsb2NrL2Jsay1tcS5jYCBmaWxlIGFuZCBwaW5wb2ludCB0aGUgaW1wbGVtZW50YXRpb24gb2YgYGJsa19tcV9xdWllc2NlX3F1ZXVlYC4gVGhhdCBzaG91bGQgaWxsdW1pbmF0ZSBleGFjdGx5IHdoYXQncyBoYXBwZW5pbmcgdW5kZXIgdGhlIGhvb2QuIEhvcGVmdWxseSwgdGhhdCB3aWxsIGdpdmUgbWUgdGhlIGluZm9ybWF0aW9uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdW5jdGlvbiBhbmQgcmVzb2x2ZSB0aGUgcHJvYmxlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYzNzIsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwOTowODozOC43ODIyMDcyMDFaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NzE0MDEzNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm9pZCBibGtfbXFfcXVpZXNjZV9xdWV1ZVxcXFwoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL2Jsay1tcS5jPTI4OD1FWFBPUlRfU1lNQk9MX0dQTChibGtfbXFfd2FpdF9xdWllc2NlX2RvbmUpO1xcbi0tXFxuYmxvY2svYmxrLW1xLmMtMjk4LSAqL1xcbmJsb2NrL2Jsay1tcS5jOjI5OTp2b2lkIGJsa19tcV9xdWllc2NlX3F1ZXVlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKVxcbmJsb2NrL2Jsay1tcS5jLTMwMC17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2Jsay1tcS5oPTkzNj12b2lkIGJsa19tcV9zdGFydF9zdG9wcGVkX2h3X3F1ZXVlcyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgYm9vbCBhc3luYyk7XFxuaW5jbHVkZS9saW51eC9ibGstbXEuaDo5Mzc6dm9pZCBibGtfbXFfcXVpZXNjZV9xdWV1ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSk7XFxuaW5jbHVkZS9saW51eC9ibGstbXEuaC05Mzgtdm9pZCBibGtfbXFfd2FpdF9xdWllc2NlX2RvbmUoc3RydWN0IGJsa19tcV90YWdfc2V0ICpzZXQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwOTowODo0MC43NTM2MTUzNVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0MDAwNTg3MDkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IG1lbnRhbCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIGJsb2NrL2Jsay1tcS5jKipcblxuT2theSwgdGltZSB0byBkaWcgaW4uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBzb21lIGFzcGVjdCBvZiB0aGUgYmxvY2sgbGF5ZXIsIGFuZCBJJ20gdGhpbmtpbmcgdGhlIHJlbGV2YW50IHNlY3Rpb24gaXMgYXJvdW5kIGxpbmUgMjkwIGluIGBibG9jay9ibGstbXEuY2AuIEknbSBmb2N1c2luZyBpbiBvbiB0aGF0IGZpbGUgYW5kIHNwZWNpZmljIGxpbmUgcmFuZ2UgYmVjYXVzZSBteSBleHBlcmllbmNlIHRlbGxzIG1lIHRoYXQncyB3aGVyZSBJJ20gbGlrZWx5IHRvIGZpbmQgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgcmVsYXRlZCB0byB3aGF0ZXZlciBJJ20gdHJvdWJsZXNob290aW5nIG9yIGludmVzdGlnYXRpbmcgcmlnaHQgbm93LiBJIGtub3cgdGhlIGdlbmVyYWwgYXJjaGl0ZWN0dXJlLCBidXQgSSBuZWVkIHRvIGdldCBpbnRvIHRoZSBkZXRhaWxzIHRvIGZ1bGx5IHVuZGVyc3RhbmQgaXQuIExldCdzIHNlZSB3aGF0J3MgaW4gdGhhdCBzZWN0aW9uLiBUaW1lIHRvIHN0YXJ0IHJlYWRpbmchXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2OTQyLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDk6MDg6NDQuNzU0MjA0NjE0WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3Njk2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJibG9jay9ibGstbXEuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNzAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyNzA6XFx0RVhQT1JUX1NZTUJPTF9HUEwoYmxrX21xX3F1aWVzY2VfcXVldWVfbm93YWl0KTtcXG4gMjcxOlxcdFxcbiAyNzI6XFx0LyoqXFxuIDI3MzpcXHQgKiBibGtfbXFfd2FpdF9xdWllc2NlX2RvbmUoKSAtIHdhaXQgdW50aWwgaW4tcHJvZ3Jlc3MgcXVpZXNjZSBpcyBkb25lXFxuIDI3NDpcXHQgKiBAc2V0OiB0YWdfc2V0IHRvIHdhaXQgb25cXG4gMjc1OlxcdCAqXFxuIDI3NjpcXHQgKiBOb3RlOiBpdCBpcyBkcml2ZXIncyByZXNwb25zaWJpbGl0eSBmb3IgbWFraW5nIHN1cmUgdGhhdCBxdWllc2NlIGhhc1xcbiAyNzc6XFx0ICogYmVlbiBzdGFydGVkIG9uIG9yIG1vcmUgb2YgdGhlIHJlcXVlc3RfcXVldWVzIG9mIHRoZSB0YWdfc2V0LiAgVGhpc1xcbiAyNzg6XFx0ICogZnVuY3Rpb24gb25seSB3YWl0cyBmb3IgdGhlIHF1aWVzY2Ugb24gdGhvc2UgcmVxdWVzdF9xdWV1ZXMgdGhhdCBoYWRcXG4gMjc5OlxcdCAqIHRoZSBxdWllc2NlIGZsYWcgc2V0IHVzaW5nIGJsa19tcV9xdWllc2NlX3F1ZXVlX25vd2FpdC5cXG4gMjgwOlxcdCAqL1xcbiAyODE6XFx0dm9pZCBibGtfbXFfd2FpdF9xdWllc2NlX2RvbmUoc3RydWN0IGJsa19tcV90YWdfc2V0ICpzZXQpXFxuIDI4MjpcXHR7XFxuIDI4MzpcXHRcXHRpZiAoc2V0LVxcdTAwM2VmbGFncyBcXHUwMDI2IEJMS19NUV9GX0JMT0NLSU5HKVxcbiAyODQ6XFx0XFx0XFx0c3luY2hyb25pemVfc3JjdShzZXQtXFx1MDAzZXNyY3UpO1xcbiAyODU6XFx0XFx0ZWxzZVxcbiAyODY6XFx0XFx0XFx0c3luY2hyb25pemVfcmN1KCk7XFxuIDI4NzpcXHR9XFxuIDI4ODpcXHRFWFBPUlRfU1lNQk9MX0dQTChibGtfbXFfd2FpdF9xdWllc2NlX2RvbmUpO1xcbiAyODk6XFx0XFxuIDI5MDpcXHQvKipcXG4gMjkxOlxcdCAqIGJsa19tcV9xdWllc2NlX3F1ZXVlKCkgLSB3YWl0IHVudGlsIGFsbCBvbmdvaW5nIGRpc3BhdGNoZXMgaGF2ZSBmaW5pc2hlZFxcbiAyOTI6XFx0ICogQHE6IHJlcXVlc3QgcXVldWUuXFxuIDI5MzpcXHQgKlxcbiAyOTQ6XFx0ICogTm90ZTogdGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBwcmV2ZW50IHRoYXQgdGhlIHN0cnVjdCByZXF1ZXN0IGVuZF9pbygpXFxuIDI5NTpcXHQgKiBjYWxsYmFjayBmdW5jdGlvbiBpcyBpbnZva2VkLiBPbmNlIHRoaXMgZnVuY3Rpb24gaXMgcmV0dXJuZWQsIHdlIG1ha2VcXG4gMjk2OlxcdCAqIHN1cmUgbm8gZGlzcGF0Y2ggY2FuIGhhcHBlbiB1bnRpbCB0aGUgcXVldWUgaXMgdW5xdWllc2NlZCB2aWFcXG4gMjk3OlxcdCAqIGJsa19tcV91bnF1aWVzY2VfcXVldWUoKS5cXG4gMjk4OlxcdCAqL1xcbiAyOTk6XFx0dm9pZCBibGtfbXFfcXVpZXNjZV9xdWV1ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSlcXG4gMzAwOlxcdHtcXG4gMzAxOlxcdFxcdGJsa19tcV9xdWllc2NlX3F1ZXVlX25vd2FpdChxKTtcXG4gMzAyOlxcdFxcdC8qIG5vdGhpbmcgdG8gd2FpdCBmb3Igbm9uLW1xIHF1ZXVlcyAqL1xcbiAzMDM6XFx0XFx0aWYgKHF1ZXVlX2lzX21xKHEpKVxcbiAzMDQ6XFx0XFx0XFx0YmxrX21xX3dhaXRfcXVpZXNjZV9kb25lKHEtXFx1MDAzZXRhZ19zZXQpO1xcbiAzMDU6XFx0fVxcbiAzMDY6XFx0RVhQT1JUX1NZTUJPTF9HUEwoYmxrX21xX3F1aWVzY2VfcXVldWUpO1xcbiAzMDc6XFx0XFxuIDMwODpcXHQvKlxcbiAzMDk6XFx0ICogYmxrX21xX3VucXVpZXNjZV9xdWV1ZSgpIC0gY291bnRlcnBhcnQgb2YgYmxrX21xX3F1aWVzY2VfcXVldWUoKVxcbiAzMTA6XFx0ICogQHE6IHJlcXVlc3QgcXVldWUuXFxuIDMxMTpcXHQgKlxcbiAzMTI6XFx0ICogVGhpcyBmdW5jdGlvbiByZWNvdmVycyBxdWV1ZSBpbnRvIHRoZSBzdGF0ZSBiZWZvcmUgcXVpZXNjaW5nXFxuIDMxMzpcXHQgKiB3aGljaCBpcyBkb25lIGJ5IGJsa19tcV9xdWllc2NlX3F1ZXVlLlxcbiAzMTQ6XFx0ICovXFxuIDMxNTpcXHR2b2lkIGJsa19tcV91bnF1aWVzY2VfcXVldWUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpXFxuIDMxNjpcXHR7XFxuIDMxNzpcXHRcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbiAzMTg6XFx0XFx0Ym9vbCBydW5fcXVldWUgPSBmYWxzZTtcXG4gMzE5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwOTowODo0NC43NTQ0ODQxODRaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NjU5MDkwMTE3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBhIFBvdGVudGlhbCBEYXRhIENvcnJ1cHRpb24gVnVsbmVyYWJpbGl0eSBpbiB0aGUgQmxvY2sgTGF5ZXIqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gZGlnZ2luZyBpbnRvIHRoaXMgYmxvY2sgbGF5ZXIgY29kZSwgYW5kIEkgdGhpbmsgSSd2ZSBzcG90dGVkIGEgc2lnbmlmaWNhbnQgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uIHRoYXQgY291bGQgbGVhZCB0byBkYXRhIGNvcnJ1cHRpb24uIFRoZSBjb3JlIG9mIHRoZSBwcm9ibGVtIHNlZW1zIHRvIHN0ZW0gZnJvbSBob3cgdGhlIGB2aXJ0YmxrYCBkcml2ZXIgaGFuZGxlcyBkZXZpY2UgcXVpZXNjZW5jZSBpbiByZWxhdGlvbiB0byBkZXZpY2UgcmVzZXQgYW5kIFBNL3N1c3BlbmQgZXZlbnRzLlxuXG5IZXJlJ3MgdGhlIGJyZWFrZG93biBhcyBJIHNlZSBpdDogVGhlIGBibGtfbXFfcXVpZXNjZV9xdWV1ZWAgZnVuY3Rpb24gcmVsaWVzIG9uIGBibGtfbXFfd2FpdF9xdWllc2NlX2RvbmVgIHdoaWNoLCBjcml0aWNhbGx5LCB1c2VzIGBzeW5jaHJvbml6ZV9zcmN1YCBvciBgc3luY2hyb25pemVfcmN1KClgLiBUaGlzIGlzIGltcG9ydGFudCBiZWNhdXNlIGl0IGVuc3VyZXMgdGhhdCBhbGwgcHJpb3IgZGlzcGF0Y2hlcyBhcmUgKmNvbXBsZXRlbHkqIGZpbmlzaGVkIGJlZm9yZSBwcm9jZWVkaW5nLiBUaGUgcHJvYmxlbSBpcyB0aGF0IGEgcHJldmlvdXMgZnVuY3Rpb24sIGBibGtfbXFfcXVpZXNjZV9xdWV1ZV9ub3dhaXRgLCBhcHBlYXJzIHRvIHNldCB0aGUgcXVpZXNjZSBiaXQgKndpdGhvdXQqIHdhaXRpbmcgZm9yIHRoZXNlIGRpc3BhdGNoZXMgdG8gY29tcGxldGUuIFRoZSBjb21tZW50cyBpbiBgdmlydGJsa19mcmVlemVfcHJpdmAgYXJlIHJhaXNpbmcgYWxhcm0gYmVsbHM6XG5cbmBgYGNcblx0LyogRW5zdXJlIG5vIHJlcXVlc3RzIGluIHZpcnRxdWV1ZXMgYmVmb3JlIGRlbGV0aW5nIHZxcy4gKi9cblx0bWVtZmxhZ3MgPSBibGtfbXFfZnJlZXplX3F1ZXVlKHEpO1xuXHRibGtfbXFfcXVpZXNjZV9xdWV1ZShxKTtcblx0YmxrX21xX3VuZnJlZXplX3F1ZXVlKHEsIG1lbWZsYWdzKTtcbmBgYFxuXG5UaGUgd29ycnkgaXMgdGhpczogaWYgYGJsa19tcV9xdWllc2NlX3F1ZXVlYCBkb2Vzbid0ICphY3R1YWxseSogd2FpdCwgb25nb2luZyBkaXNwYXRjaGVzIGNvdWxkIHN0aWxsIGJlIGFjY2Vzc2luZyB0aGUgcXVldWVzIHdoZW4gdGhlIGRldmljZSBpcyBiZWluZyByZXNldCwgb3Igd2hlbiB2aXJ0cXVldWVzIGFyZSBkZWxldGVkIGJ5IGB2ZGV2LVx1MDAzZWNvbmZpZy1cdTAwM2VkZWxfdnFzKHZkZXYpYC4gQm9vbSEgRGF0YSBjb3JydXB0aW9uLlxuXG5Ob3csIGxldCdzIGxvb2sgYXQgdGhlIGNvbmRpdGlvbnMgdGhhdCBjYW4gdHJpZ2dlciBgdmlydGJsa19mcmVlemVfcHJpdmAuICBJIGNhbiBzZWUgdHdvIG1ham9yIGNhbGwgcGF0aHM6XG5cbjEuICAqKlBNL1N1c3BlbmQvSGliZXJuYXRpb246KiogYHZpcnRibGtfZnJlZXplYCBjYWxscyB0aGlzIGZ1bmN0aW9uLiBgdmlydGJsa19mcmVlemVgIGlzIGNhbGxlZCB3aGVuIGB2ZGV2YCBpcyBmcm96ZW4gZm9yIFBNIG9yIHN1c3BlbmQvaGliZXJuYXRlLiBUaGUgYmlnIHF1ZXN0aW9uIGlzLCBjYW4gc3l6a2FsbGVyIGJlIHVzZWQgdG8gdHJpZ2dlciB0aGVzZSBzdGF0ZXM/IFdpdGggcHNldWRvLXN5c2NhbGxzIG9yIGRpcmVjdCB3cml0ZXMgdG8gYC9zeXMvcG93ZXIvc3RhdGVgIChsaWtlIGBtZW1gLCBgZnJlZXplYCwgb3IgYGRpc2tgKSwgdGhlIGFuc3dlciBpcyBhbG1vc3QgY2VydGFpbmx5IHllcywgaXQgY2FuLiBUaGlzIG1lYW5zIHdlIGhhdmUgYSBwb3RlbnRpYWwgdHJpZ2dlci5cblxuMi4gICoqUENJIFJlc2V0OioqICBUaGUgb3RoZXIgaW50ZXJlc3RpbmcgcGF0aCBpcyB0aHJvdWdoIGB2aXJ0YmxrX3Jlc2V0X3ByZXBhcmVgLiBNeSBjb2RlIGluc3BlY3Rpb24gcmV2ZWFscyB0aGF0ICBgdmlydGlvX3BjaV9yZXNldF9wcmVwYXJlYCBpcyBjYWxsZWQgaW4gYHZpcnRpb19wY2lfZXJyX2hhbmRsZXJgIHdoZXJlIGAucmVzZXRfcHJlcGFyZSA9IHZpcnRpb19wY2lfcmVzZXRfcHJlcGFyZWAuXG4gICAgVGhlIGNydWNpYWwgbGluayBoZXJlIGlzIHRoZSBgL3N5cy9idXMvcGNpL2RldmljZXMvLi4uL3Jlc2V0YCBmaWxlLiBJZiBhIHVzZXIgY2FuIHdyaXRlICcxJyB0byBpdCwgd2UgZ2V0IGEgY2FsbCBjaGFpbjogYHBjaV9yZXNldF9mdW5jdGlvbmAgLVx1MDAzZSBgcGNpX2Rldl9zYXZlX2FuZF9kaXNhYmxlYCAtXHUwMDNlIGBlcnJfaGFuZGxlci1cdTAwM2VyZXNldF9wcmVwYXJlKHBjaV9kZXYpYCAtXHUwMDNlIGB2aXJ0aW9fcGNpX3Jlc2V0X3ByZXBhcmVgIC1cdTAwM2UgYHZpcnRpb19kZXZpY2VfcmVzZXRfcHJlcGFyZShcdTAwMjZ2cF9kZXYtXHUwMDNldmRldilgIC1cdTAwM2UgYGRydi1cdTAwM2VyZXNldF9wcmVwYXJlKGRldilgIC1cdTAwM2UgYHZpcnRibGtfcmVzZXRfcHJlcGFyZWAgLVx1MDAzZSBgdmlydGJsa19mcmVlemVfcHJpdmAhICBBbmQgSSBrbm93LCBmcm9tIGV4cGVyaWVuY2UsIHRoYXQgdXNlciBzcGFjZSBjYW4gd3JpdGUgdG8gdGhpcyBmaWxlLCB0aGlzIGNhbGxzIGBwY2lfcmVzZXRfZnVuY3Rpb25gLlxuXG5UaGVyZWZvcmUsIHRoZSByZXNldCBwYXRoIG9mZmVycyBhbm90aGVyLCBwZXJoYXBzIGV2ZW4gbW9yZSBlYXNpbHkgdHJpZ2dlcmVkLCByb3V0ZSB0byBoaXQgdGhlIHByb2JsZW1hdGljIHNlcXVlbmNlLiBJJ20gZ29pbmcgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IGBwY2lfcmVzZXRfZnVuY3Rpb25gIGl0c2VsZiBpbiBgZHJpdmVycy9wY2kvcGNpLmNgIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIHBvdGVudGlhbCBtaXRpZ2F0aW9ucyBvciBjb21wbGV4aXRpZXMgaW4gdGhhdCBjYWxsIGNoYWluIHRoYXQgSSBuZWVkIHRvIGNvbnNpZGVyLiBNeSBndXQgZmVlbGluZyBpcyB0aGF0IHRoaXMgaXMgYSByYWNlIHRoYXQgbmVlZHMgdXJnZW50IGF0dGVudGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc5OTUsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MDcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwOTowODo1MS4zNDUzODg5NjNaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NTk3MDEzOTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGNpX3Jlc2V0X2Z1bmN0aW9uXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9wY2kvcGNpLmM9NzYxPUVYUE9SVF9TWU1CT0xfR1BMKHpwY2lfZGlzYWJsZV9kZXZpY2UpO1xcbi0tXFxuYXJjaC9zMzkwL3BjaS9wY2kuYy03ODAtICogSW4gbW9zdCBjYXNlcyB0aGlzIGZ1bmN0aW9uIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5IGJ1dCB0aHJvdWdoXFxuYXJjaC9zMzkwL3BjaS9wY2kuYzo3ODE6ICogcGNpX3Jlc2V0X2Z1bmN0aW9uKCkgb3IgcGNpX3Jlc2V0X2J1cygpIHdoaWNoIGhhbmRsZSB0aGUgc2F2ZS9yZXN0b3JlIGFuZFxcbmFyY2gvczM5MC9wY2kvcGNpLmMtNzgyLSAqIGxvY2tpbmcgLSBhc3NlcnRlZCBieSBsb2NrZGVwLlxcbi0tXFxuZHJpdmVycy9ibHVldG9vdGgvYnRpbnRlbF9wY2llLmM9MjY3MD1zdGF0aWMgaW50IGJ0aW50ZWxfcGNpZV9wZXJmb3JtX2ZscihzdHJ1Y3QgYnRpbnRlbF9wY2llX2RhdGEgKmRhdGEpXFxuLS1cXG5kcml2ZXJzL2JsdWV0b290aC9idGludGVsX3BjaWUuYy0yNjc3LVxcdCAqIHRoZW4gd2FpdHMgZm9yIHRoaXMgd29yayB2aWEgZGlzYWJsZV93b3JrX3N5bmMoKTsgdGhlIGJsb2NraW5nXFxuZHJpdmVycy9ibHVldG9vdGgvYnRpbnRlbF9wY2llLmM6MjY3ODpcXHQgKiBwY2lfcmVzZXRfZnVuY3Rpb24oKSB3b3VsZCBkZWFkbG9jayBieSB0cnlpbmcgdG8gcmUtYWNxdWlyZVxcbmRyaXZlcnMvYmx1ZXRvb3RoL2J0aW50ZWxfcGNpZS5jLTI2NzktXFx0ICogZGV2aWNlX2xvY2sgaGVyZS5cXG4tLVxcbmRyaXZlcnMvYmx1ZXRvb3RoL2hjaV9iY200Mzc3LmM9MjI3Nj1zdGF0aWMgaW50IGJjbTQzNzdfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcXG4tLVxcbmRyaXZlcnMvYmx1ZXRvb3RoL2hjaV9iY200Mzc3LmMtMjMxNS1cXG5kcml2ZXJzL2JsdWV0b290aC9oY2lfYmNtNDM3Ny5jOjIzMTY6XFx0cmV0ID0gcGNpX3Jlc2V0X2Z1bmN0aW9uX2xvY2tlZChwZGV2KTtcXG5kcml2ZXJzL2JsdWV0b290aC9oY2lfYmNtNDM3Ny5jLTIzMTctXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvZG1hL2lkeGQvaXJxLmM9Mzg2PXN0YXRpYyB2b2lkIGlkeGRfZGV2aWNlX2ZscihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5kcml2ZXJzL2RtYS9pZHhkL2lycS5jLTM5Mi1cXHQgKiBJRFhEIGRldmljZSByZXF1aXJlcyBhIEZ1bmN0aW9uIExldmVsIFJlc2V0IChGTFIpLlxcbmRyaXZlcnMvZG1hL2lkeGQvaXJxLmM6MzkzOlxcdCAqIHBjaV9yZXNldF9mdW5jdGlvbigpIHdpbGwgcmVzZXQgdGhlIGRldmljZSB3aXRoIEZMUi5cXG5kcml2ZXJzL2RtYS9pZHhkL2lycS5jLTM5NC1cXHQgKi9cXG5kcml2ZXJzL2RtYS9pZHhkL2lycS5jOjM5NTpcXHRyYyA9IHBjaV9yZXNldF9mdW5jdGlvbihpZHhkLVxcdTAwM2VwZGV2KTtcXG5kcml2ZXJzL2RtYS9pZHhkL2lycS5jLTM5Ni1cXHRpZiAocmMpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfZGV2aWNlLmM9MTA3Nz1pbnQgYW1kZ3B1X2RldmljZV9wY2lfcmVzZXQoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpXFxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2RldmljZS5jLTEwNzgte1xcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9kZXZpY2UuYzoxMDc5OlxcdHJldHVybiBwY2lfcmVzZXRfZnVuY3Rpb24oYWRldi1cXHUwMDNlcGRldik7XFxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2RldmljZS5jLTEwODAtfVxcbi0tXFxuZHJpdmVycy9oaWQvaW50ZWwtaXNoLWhpZC9pcGMvaXBjLmM9NzYzPXN0YXRpYyBpbnQgX2lzaF9od19yZXNldChzdHJ1Y3QgaXNodHBfZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL2hpZC9pbnRlbC1pc2gtaGlkL2lwYy9pcGMuYy03NzEtXFxuZHJpdmVycy9oaWQvaW50ZWwtaXNoLWhpZC9pcGMvaXBjLmM6NzcyOlxcdHJ2ID0gcGNpX3Jlc2V0X2Z1bmN0aW9uKHBkZXYpO1xcbmRyaXZlcnMvaGlkL2ludGVsLWlzaC1oaWQvaXBjL2lwYy5jLTc3My1cXHRpZiAoIXJ2KVxcbi0tXFxuZHJpdmVycy9taXNjL2dlbndxZS9jYXJkX2Jhc2UuYz0xNTg9c3RhdGljIHZvaWQgZ2Vud3FlX2Rldl9mcmVlKHN0cnVjdCBnZW53cWVfZGV2ICpjZClcXG4tLVxcbmRyaXZlcnMvbWlzYy9nZW53cWUvY2FyZF9iYXNlLmMtMTcwLSAqXFxuZHJpdmVycy9taXNjL2dlbndxZS9jYXJkX2Jhc2UuYzoxNzE6ICogcGNpX3Jlc2V0X2Z1bmN0aW9uKCkgd2lsbCByZWNvdmVyIHRoZSBkZXZpY2UgYW5kIGVuc3VyZSB0aGF0IHRoZVxcbmRyaXZlcnMvbWlzYy9nZW53cWUvY2FyZF9iYXNlLmMtMTcyLSAqIHJlZ2lzdGVycyBhcmUgYWNjZXNzaWJsZSBhZ2FpbiB3aGVuIGl0IGNvbXBsZXRlcyB3aXRoIHN1Y2Nlc3MuIElmXFxuLS1cXG5kcml2ZXJzL21pc2MvZ2Vud3FlL2NhcmRfYmFzZS5jPTE3Nj1zdGF0aWMgaW50IGdlbndxZV9idXNfcmVzZXQoc3RydWN0IGdlbndxZV9kZXYgKmNkKVxcbi0tXFxuZHJpdmVycy9taXNjL2dlbndxZS9jYXJkX2Jhc2UuYy0xOTMtXFx0ICogU2V0dGluZ3MgbGlrZSBlbmFibGUgYnVzLW1hc3RlcmluZywgLi4uIGFyZSBiYWNrdXBlZCBhbmRcXG5kcml2ZXJzL21pc2MvZ2Vud3FlL2NhcmRfYmFzZS5jOjE5NDpcXHQgKiByZXN0b3JlZCBieSB0aGUgcGNpX3Jlc2V0X2Z1bmN0aW9uKCkuXFxuZHJpdmVycy9taXNjL2dlbndxZS9jYXJkX2Jhc2UuYy0xOTUtXFx0ICovXFxuZHJpdmVycy9taXNjL2dlbndxZS9jYXJkX2Jhc2UuYy0xOTYtXFx0ZGV2X2RiZyhcXHUwMDI2cGNpX2Rldi1cXHUwMDNlZGV2LCBcXFwiWyVzXSBwY2lfcmVzZXQgZnVuY3Rpb24gLi4uXFxcXG5cXFwiLCBfX2Z1bmNfXyk7XFxuZHJpdmVycy9taXNjL2dlbndxZS9jYXJkX2Jhc2UuYzoxOTc6XFx0cmMgPSBwY2lfcmVzZXRfZnVuY3Rpb24ocGNpX2Rldik7XFxuZHJpdmVycy9taXNjL2dlbndxZS9jYXJkX2Jhc2UuYy0xOTgtXFx0aWYgKHJjKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvbWFpbi5jPTU4Mj1zdGF0aWMgdm9pZCBwZHNjX3BjaV9lcnJvcl9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvbWFpbi5jLTU4Ni1cXHRpZiAodGVzdF9iaXQoUERTQ19TX0ZXX0RFQUQsIFxcdTAwMjZwZHNjLVxcdTAwM2VzdGF0ZSkpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL21haW4uYzo1ODc6XFx0XFx0cGNpX3Jlc2V0X2Z1bmN0aW9uX2xvY2tlZChwZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvbWFpbi5jLTU4OC19XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vbGlvX21haW4uYz05MTU9c3RhdGljIHZvaWQgb2N0ZW9uX3BjaV9mbHIoc3RydWN0IG9jdGVvbl9kZXZpY2UgKm9jdClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9saW9fbWFpbi5jLTkyNi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vbGlvX21haW4uYzo5Mjc6XFx0cmMgPSBfX3BjaV9yZXNldF9mdW5jdGlvbl9sb2NrZWQob2N0LVxcdTAwM2VwY2lfZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vbGlvX21haW4uYy05MjgtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaGVsc2lvL2N4Z2I0dmYvY3hnYjR2Zl9tYWluLmM9MjUxNT1zdGF0aWMgaW50IGFkYXBfaW5pdDAoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaGVsc2lvL2N4Z2I0dmYvY3hnYjR2Zl9tYWluLmMtMjUyMy1cXHQgKiBTb21lIGVudmlyb25tZW50cyBkbyBub3QgcHJvcGVybHkgaGFuZGxlIFBDSUUgRkxScyAtLSBlLmcuIGluIExpbnV4XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiNHZmL2N4Z2I0dmZfbWFpbi5jOjI1MjQ6XFx0ICogMi42LjMxIGFuZCBsYXRlciB3ZSBjYW4ndCBjYWxsIHBjaV9yZXNldF9mdW5jdGlvbigpIGluIG9yZGVyIHRvXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiNHZmL2N4Z2I0dmZfbWFpbi5jLTI1MjUtXFx0ICogaXNzdWUgYW4gRkxSIGJlY2F1c2Ugb2YgYSBzZWxmLSBkZWFkbG9jayBvbiB0aGUgZGV2aWNlIHNlbWFwaG9yZS5cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3BjaS5jPTE3OTE9c3RhdGljIGludCBtbHhzd19wY2lfcmVzZXRfYXRfcGNpX2Rpc2FibGUoc3RydWN0IG1seHN3X3BjaSAqbWx4c3dfcGNpLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvcGNpLmMtMTgxOC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9wY2kuYzoxODE5OlxcdGVyciA9IF9fcGNpX3Jlc2V0X2Z1bmN0aW9uX2xvY2tlZChwZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9wY2kuYy0xODIwLVxcdGlmIChlcnIpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9wZW5zYW5kby9pb25pYy9pb25pY19idXNfcGNpLmM9NTAzPXN0YXRpYyB2b2lkIGlvbmljX3BjaV9lcnJvcl9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9wZW5zYW5kby9pb25pYy9pb25pY19idXNfcGNpLmMtNTA4LVxcdGlmIChsaWYgXFx1MDAyNlxcdTAwMjYgdGVzdF9iaXQoSU9OSUNfTElGX0ZfRldfUkVTRVQsIGxpZi1cXHUwMDNlc3RhdGUpKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3BlbnNhbmRvL2lvbmljL2lvbmljX2J1c19wY2kuYzo1MDk6XFx0XFx0cGNpX3Jlc2V0X2Z1bmN0aW9uX2xvY2tlZChwZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9wZW5zYW5kby9pb25pYy9pb25pY19idXNfcGNpLmMtNTEwLX1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xbGNuaWMvcWxjbmljX2N0eC5jPTYyNj1pbnQgcWxjbmljX2Z3X2NyZWF0ZV9jdHgoc3RydWN0IHFsY25pY19hZGFwdGVyICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWxjbmljL3FsY25pY19jdHguYy02MzAtXFx0aWYgKGRldi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBRTENOSUNfTkVFRF9GTFIpIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWxjbmljL3FsY25pY19jdHguYzo2MzE6XFx0XFx0ZXJyID0gcGNpX3Jlc2V0X2Z1bmN0aW9uKGRldi1cXHUwMDNlcGRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FsY25pYy9xbGNuaWNfY3R4LmMtNjMyLVxcdFxcdGlmIChlcnIpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9tY2RpLmM9MTkwNj1pbnQgZWZ4X21jZGlfcmVzZXQoc3RydWN0IGVmeF9uaWMgKmVmeCwgZW51bSByZXNldF90eXBlIG1ldGhvZClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9tY2RpLmMtMTkxMS1cXHRpZiAobWV0aG9kID09IFJFU0VUX1RZUEVfTUNESV9USU1FT1VUKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL21jZGkuYzoxOTEyOlxcdFxcdHJjID0gcGNpX3Jlc2V0X2Z1bmN0aW9uKGVmeC1cXHUwMDNlcGNpX2Rldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL21jZGkuYy0xOTEzLVxcdFxcdGlmIChyYylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9zaWVuYS9tY2RpLmM9MTg2Nj1pbnQgZWZ4X3NpZW5hX21jZGlfcmVzZXQoc3RydWN0IGVmeF9uaWMgKmVmeCwgZW51bSByZXNldF90eXBlIG1ldGhvZClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9zaWVuYS9tY2RpLmMtMTg3MS1cXHRpZiAobWV0aG9kID09IFJFU0VUX1RZUEVfTUNESV9USU1FT1VUKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL3NpZW5hL21jZGkuYzoxODcyOlxcdFxcdHJjID0gcGNpX3Jlc2V0X2Z1bmN0aW9uKGVmeC1cXHUwMDNlcGNpX2Rldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL3NpZW5hL21jZGkuYy0xODczLVxcdFxcdGlmIChyYylcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvcGNpZS9nZW4xXzIvdHJhbnMuYz0yMTI2PXN0YXRpYyB2b2lkIGl3bF90cmFuc19wY2llX2NhbGxfcmVzZXQoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL3BjaWUvZ2VuMV8yL3RyYW5zLmMtMjE2OC1cXHRJV0xfREVCVUdfREVWX1BPV0VSKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9wY2llL2dlbjFfMi90cmFucy5jOjIxNjk6XFx0XFx0XFx0ICAgIFxcXCJObyBCSU9TIHN1cHBvcnQsIHVzaW5nIHBjaV9yZXNldF9mdW5jdGlvbigpXFxcXG5cXFwiKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL3BjaWUvZ2VuMV8yL3RyYW5zLmMtMjE3MC0jZW5kaWZcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL3BjaWUvZ2VuMV8yL3RyYW5zLmM6MjE3MTpcXHRwY2lfcmVzZXRfZnVuY3Rpb24ocGRldik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9wY2llL2dlbjFfMi90cmFucy5jLTIxNzItfVxcbi0tXFxuZHJpdmVycy9uZXQvd3dhbi90N3h4L3Q3eHhfbW9kZW1fb3BzLmM9MTQ1PXN0YXRpYyBpbnQgdDd4eF9hY3BpX3Jlc2V0KHN0cnVjdCB0N3h4X3BjaV9kZXYgKnQ3eHhfZGV2LCBjaGFyICpmbl9uYW1lKVxcbi0tXFxuZHJpdmVycy9uZXQvd3dhbi90N3h4L3Q3eHhfbW9kZW1fb3BzLmMtMTc0LVxcbmRyaXZlcnMvbmV0L3d3YW4vdDd4eC90N3h4X21vZGVtX29wcy5jOjE3NTpcXHRyZXQgPSBwY2lfcmVzZXRfZnVuY3Rpb24odDd4eF9kZXYtXFx1MDAzZXBkZXYpO1xcbmRyaXZlcnMvbmV0L3d3YW4vdDd4eC90N3h4X21vZGVtX29wcy5jLTE3Ni1cXHRpZiAocmV0KSB7XFxuLS1cXG5kcml2ZXJzL3BjaS9wY2ktc3lzZnMuYz0xNTU2PXN0YXRpYyBzc2l6ZV90IHJlc2V0X3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXFxuLS1cXG5kcml2ZXJzL3BjaS9wY2ktc3lzZnMuYy0xNTY5LVxcdHBtX3J1bnRpbWVfZ2V0X3N5bmMoZGV2KTtcXG5kcml2ZXJzL3BjaS9wY2ktc3lzZnMuYzoxNTcwOlxcdHJlc3VsdCA9IHBjaV9yZXNldF9mdW5jdGlvbihwZGV2KTtcXG5kcml2ZXJzL3BjaS9wY2ktc3lzZnMuYy0xNTcxLVxcdHBtX3J1bnRpbWVfcHV0KGRldik7XFxuLS1cXG5kcml2ZXJzL3BjaS9wY2kuYz01MTQ0PWNvbnN0IHN0cnVjdCBwY2lfcmVzZXRfZm5fbWV0aG9kIHBjaV9yZXNldF9mbl9tZXRob2RzW10gPSB7XFxuLS1cXG5kcml2ZXJzL3BjaS9wY2kuYy01MTU1LS8qKlxcbmRyaXZlcnMvcGNpL3BjaS5jOjUxNTY6ICogX19wY2lfcmVzZXRfZnVuY3Rpb25fbG9ja2VkIC0gcmVzZXQgYSBQQ0kgZGV2aWNlIGZ1bmN0aW9uIHdoaWxlIGhvbGRpbmdcXG5kcml2ZXJzL3BjaS9wY2kuYy01MTU3LSAqIHRoZSBAZGV2IG11dGV4IGxvY2suXFxuLS1cXG5kcml2ZXJzL3BjaS9wY2kuYy01MTc2LSAqL1xcbmRyaXZlcnMvcGNpL3BjaS5jOjUxNzc6aW50IF9fcGNpX3Jlc2V0X2Z1bmN0aW9uX2xvY2tlZChzdHJ1Y3QgcGNpX2RldiAqZGV2KVxcbmRyaXZlcnMvcGNpL3BjaS5jLTUxNzgte1xcbi0tXFxuZHJpdmVycy9wY2kvcGNpLmMtNTIxMC19XFxuZHJpdmVycy9wY2kvcGNpLmM6NTIxMTpFWFBPUlRfU1lNQk9MX0dQTChfX3BjaV9yZXNldF9mdW5jdGlvbl9sb2NrZWQpO1xcbmRyaXZlcnMvcGNpL3BjaS5jLTUyMTItXFxuLS1cXG5kcml2ZXJzL3BjaS9wY2kuYz01MjI1PXZvaWQgcGNpX2luaXRfcmVzZXRfbWV0aG9kcyhzdHJ1Y3QgcGNpX2RldiAqZGV2KVxcbi0tXFxuZHJpdmVycy9wY2kvcGNpLmMtNTI0NS0vKipcXG5kcml2ZXJzL3BjaS9wY2kuYzo1MjQ2OiAqIHBjaV9yZXNldF9mdW5jdGlvbiAtIHF1aWVzY2UgYW5kIHJlc2V0IGEgUENJIGRldmljZSBmdW5jdGlvblxcbmRyaXZlcnMvcGNpL3BjaS5jLTUyNDctICogQGRldjogUENJIGRldmljZSB0byByZXNldFxcbi0tXFxuZHJpdmVycy9wY2kvcGNpLmMtNTI1NC0gKiBjbGVhcnMgYWxsIHRoZSBzdGF0ZSBhc3NvY2lhdGVkIHdpdGggdGhlIGRldmljZS4gIFRoaXMgZnVuY3Rpb24gZGlmZmVyc1xcbmRyaXZlcnMvcGNpL3BjaS5jOjUyNTU6ICogZnJvbSBfX3BjaV9yZXNldF9mdW5jdGlvbl9sb2NrZWQoKSBpbiB0aGF0IGl0IHNhdmVzIGFuZCByZXN0b3JlcyBkZXZpY2Ugc3RhdGVcXG5kcml2ZXJzL3BjaS9wY2kuYy01MjU2LSAqIG92ZXIgdGhlIHJlc2V0IGFuZCB0YWtlcyB0aGUgUENJIGRldmljZSBsb2NrLlxcbi0tXFxuZHJpdmVycy9wY2kvcGNpLmMtNTI2MC0gKi9cXG5kcml2ZXJzL3BjaS9wY2kuYzo1MjYxOmludCBwY2lfcmVzZXRfZnVuY3Rpb24oc3RydWN0IHBjaV9kZXYgKmRldilcXG5kcml2ZXJzL3BjaS9wY2kuYy01MjYyLXtcXG4tLVxcbmRyaXZlcnMvcGNpL3BjaS5jLTUyNzktXFxuZHJpdmVycy9wY2kvcGNpLmM6NTI4MDpcXHRyYyA9IF9fcGNpX3Jlc2V0X2Z1bmN0aW9uX2xvY2tlZChkZXYpO1xcbmRyaXZlcnMvcGNpL3BjaS5jLTUyODEtXFxuLS1cXG5kcml2ZXJzL3BjaS9wY2kuYy01Mjg5LX1cXG5kcml2ZXJzL3BjaS9wY2kuYzo1MjkwOkVYUE9SVF9TWU1CT0xfR1BMKHBjaV9yZXNldF9mdW5jdGlvbik7XFxuZHJpdmVycy9wY2kvcGNpLmMtNTI5MS1cXG5kcml2ZXJzL3BjaS9wY2kuYy01MjkyLS8qKlxcbmRyaXZlcnMvcGNpL3BjaS5jOjUyOTM6ICogcGNpX3Jlc2V0X2Z1bmN0aW9uX2xvY2tlZCAtIHF1aWVzY2UgYW5kIHJlc2V0IGEgUENJIGRldmljZSBmdW5jdGlvblxcbmRyaXZlcnMvcGNpL3BjaS5jLTUyOTQtICogQGRldjogUENJIGRldmljZSB0byByZXNldFxcbi0tXFxuZHJpdmVycy9wY2kvcGNpLmMtNTMwMS0gKiBjbGVhcnMgYWxsIHRoZSBzdGF0ZSBhc3NvY2lhdGVkIHdpdGggdGhlIGRldmljZS4gIFRoaXMgZnVuY3Rpb24gZGlmZmVyc1xcbmRyaXZlcnMvcGNpL3BjaS5jOjUzMDI6ICogZnJvbSBfX3BjaV9yZXNldF9mdW5jdGlvbl9sb2NrZWQoKSBpbiB0aGF0IGl0IHNhdmVzIGFuZCByZXN0b3JlcyBkZXZpY2Ugc3RhdGVcXG5kcml2ZXJzL3BjaS9wY2kuYzo1MzAzOiAqIG92ZXIgdGhlIHJlc2V0LiAgSXQgYWxzbyBkaWZmZXJzIGZyb20gcGNpX3Jlc2V0X2Z1bmN0aW9uKCkgaW4gdGhhdCBpdFxcbmRyaXZlcnMvcGNpL3BjaS5jLTUzMDQtICogcmVxdWlyZXMgdGhlIFBDSSBkZXZpY2UgbG9jayB0byBiZSBoZWxkLlxcbi0tXFxuZHJpdmVycy9wY2kvcGNpLmMtNTMxMC0gKi9cXG5kcml2ZXJzL3BjaS9wY2kuYzo1MzExOmludCBwY2lfcmVzZXRfZnVuY3Rpb25fbG9ja2VkKHN0cnVjdCBwY2lfZGV2ICpkZXYpXFxuZHJpdmVycy9wY2kvcGNpLmMtNTMxMi17XFxuLS1cXG5kcml2ZXJzL3BjaS9wY2kuYy01MzIxLVxcbmRyaXZlcnMvcGNpL3BjaS5jOjUzMjI6XFx0cmMgPSBfX3BjaV9yZXNldF9mdW5jdGlvbl9sb2NrZWQoZGV2KTtcXG5kcml2ZXJzL3BjaS9wY2kuYy01MzIzLVxcbi0tXFxuZHJpdmVycy9wY2kvcGNpLmMtNTMyNy19XFxuZHJpdmVycy9wY2kvcGNpLmM6NTMyODpFWFBPUlRfU1lNQk9MX0dQTChwY2lfcmVzZXRfZnVuY3Rpb25fbG9ja2VkKTtcXG5kcml2ZXJzL3BjaS9wY2kuYy01MzI5LVxcbi0tXFxuZHJpdmVycy9wY2kvcGNpLmM9NTMzNj1pbnQgcGNpX3RyeV9yZXNldF9mdW5jdGlvbihzdHJ1Y3QgcGNpX2RldiAqZGV2KVxcbi0tXFxuZHJpdmVycy9wY2kvcGNpLmMtNTM0Ni1cXHRwY2lfZGV2X3NhdmVfYW5kX2Rpc2FibGUoZGV2KTtcXG5kcml2ZXJzL3BjaS9wY2kuYzo1MzQ3OlxcdHJjID0gX19wY2lfcmVzZXRfZnVuY3Rpb25fbG9ja2VkKGRldik7XFxuZHJpdmVycy9wY2kvcGNpLmMtNTM0OC1cXHRwY2lfZGV2X3Jlc3RvcmUoZGV2KTtcXG4tLVxcbmRyaXZlcnMvcGNpL3F1aXJrcy5jPTM4MTQ9c3RhdGljIHZvaWQgcXVpcmtfbm9fcG1fcmVzZXQoc3RydWN0IHBjaV9kZXYgKmRldilcXG4tLVxcbmRyaXZlcnMvcGNpL3F1aXJrcy5jLTM4MjgtICogbW9uaXRvciBzeW5jLiAgQWR2ZXJ0aXNpbmcgdGhpcyBzdXBwb3J0IG1ha2VzIG90aGVyIGxheWVycywgbGlrZSBWRklPLFxcbmRyaXZlcnMvcGNpL3F1aXJrcy5jOjM4Mjk6ICogYXNzdW1lIHBjaV9yZXNldF9mdW5jdGlvbigpIGlzIHZpYWJsZSBmb3IgdGhpcyBkZXZpY2UuICBNYXJrIGl0IGFzXFxuZHJpdmVycy9wY2kvcXVpcmtzLmMtMzgzMC0gKiB1bmF2YWlsYWJsZSB0byBza2lwIGl0IHdoZW4gdGVzdGluZyByZXNldCBtZXRob2RzLlxcbi0tXFxuZHJpdmVycy9wY2kvcXVpcmtzLmM9NDAwNT1zdGF0aWMgaW50IHJlc2V0X2NoZWxzaW9fZ2VuZXJpY19kZXYoc3RydWN0IHBjaV9kZXYgKmRldiwgYm9vbCBwcm9iZSlcXG4tLVxcbmRyaXZlcnMvcGNpL3F1aXJrcy5jLTQwMjctXFx0ICogTGV2ZWwgUmVzZXQgY29tcGxldGVzLiAgKEJVU19NQVNURVIgaXMgZGlzYWJsZWQgaW5cXG5kcml2ZXJzL3BjaS9xdWlya3MuYzo0MDI4OlxcdCAqIHBjaV9yZXNldF9mdW5jdGlvbigpKS5cXG5kcml2ZXJzL3BjaS9xdWlya3MuYy00MDI5LVxcdCAqL1xcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmM9NjgzPXZvaWQgdmZpb19wY2lfY29yZV9kaXNhYmxlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldilcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTcwNy1cXHQvKlxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jOjcwODpcXHQgKiBUaGlzIGZ1bmN0aW9uIGNhbGxzIF9fcGNpX3Jlc2V0X2Z1bmN0aW9uX2xvY2tlZCgpIHdoaWNoIGludGVybmFsbHlcXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy03MDktXFx0ICogY2FuIHVzZSBwY2lfcG1fcmVzZXQoKSBmb3IgdGhlIGZ1bmN0aW9uIHJlc2V0LiBwY2lfcG1fcmVzZXQoKSB3aWxsXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy03ODAtXFx0ICogRGlzYWJsZSBJTlR4IGFuZCBNU0ksIHByZXN1bWFibHkgdG8gYXZvaWQgc3B1cmlvdXMgaW50ZXJydXB0c1xcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jOjc4MTpcXHQgKiBkdXJpbmcgcmVzZXQuICBTdG9sZW4gZnJvbSBwY2lfcmVzZXRfZnVuY3Rpb24oKVxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTc4Mi1cXHQgKi9cXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTc5Ni1cXHRcXHRpZiAocGNpX2Rldl90cnlsb2NrKHBkZXYpKSB7XFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmM6Nzk3OlxcdFxcdFxcdGlmICghX19wY2lfcmVzZXRfZnVuY3Rpb25fbG9ja2VkKHBkZXYpKVxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTc5OC1cXHRcXHRcXHRcXHR2ZGV2LVxcdTAwM2VuZWVkc19yZXNldCA9IGZhbHNlO1xcbi0tXFxuZHJpdmVycy94ZW4veGVuLXBjaWJhY2svcGNpX3N0dWIuYz0xMDE9c3RhdGljIGludCBwY2lzdHViX3Jlc2V0X2RldmljZV9zdGF0ZShzdHJ1Y3QgcGNpX2RldiAqZGV2KVxcbmRyaXZlcnMveGVuL3hlbi1wY2liYWNrL3BjaV9zdHViLmMtMTAyLXtcXG5kcml2ZXJzL3hlbi94ZW4tcGNpYmFjay9wY2lfc3R1Yi5jOjEwMzpcXHRfX3BjaV9yZXNldF9mdW5jdGlvbl9sb2NrZWQoZGV2KTtcXG5kcml2ZXJzL3hlbi94ZW4tcGNpYmFjay9wY2lfc3R1Yi5jLTEwNC1cXG4tLVxcbmRyaXZlcnMveGVuL3hlbi1wY2liYWNrL3BjaV9zdHViLmM9NjAxPXN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciB4ZW5fcGNpYmtfcGNpX2RyaXZlcjtcXG5kcml2ZXJzL3hlbi94ZW4tcGNpYmFjay9wY2lfc3R1Yi5jLTYwMi1cXG5kcml2ZXJzL3hlbi94ZW4tcGNpYmFjay9wY2lfc3R1Yi5jOjYwMzovKiBDYWxsZWQgd2hlbiAnYmluZCcuIFRoaXMgbWVhbnMgd2UgbXVzdCBfTk9UXyBjYWxsIHBjaV9yZXNldF9mdW5jdGlvbiBvclxcbmRyaXZlcnMveGVuL3hlbi1wY2liYWNrL3BjaV9zdHViLmMtNjA0LSAqIG90aGVyIGZ1bmN0aW9ucyB0aGF0IHRha2UgdGhlIHN5c2ZzIGxvY2suICovXFxuZHJpdmVycy94ZW4veGVuLXBjaWJhY2svcGNpX3N0dWIuYz02MDU9c3RhdGljIGludCBwY2lzdHViX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcXG4tLVxcbmRyaXZlcnMveGVuL3hlbi1wY2liYWNrL3BjaV9zdHViLmMtNjQ0LVxcbmRyaXZlcnMveGVuL3hlbi1wY2liYWNrL3BjaV9zdHViLmM6NjQ1Oi8qIENhbGxlZCB3aGVuICd1bmJpbmQnLiBUaGlzIG1lYW5zIHdlIG11c3QgX05PVF8gY2FsbCBwY2lfcmVzZXRfZnVuY3Rpb24gb3JcXG5kcml2ZXJzL3hlbi94ZW4tcGNpYmFjay9wY2lfc3R1Yi5jLTY0Ni0gKiBvdGhlciBmdW5jdGlvbnMgdGhhdCB0YWtlIHRoZSBzeXNmcyBsb2NrLiAqL1xcbi0tXFxuaW5jbHVkZS9saW51eC9wY2kuaD0xNDgzPWludCBwY2llX2ZscihzdHJ1Y3QgcGNpX2RldiAqZGV2KTtcXG5pbmNsdWRlL2xpbnV4L3BjaS5oOjE0ODQ6aW50IF9fcGNpX3Jlc2V0X2Z1bmN0aW9uX2xvY2tlZChzdHJ1Y3QgcGNpX2RldiAqZGV2KTtcXG5pbmNsdWRlL2xpbnV4L3BjaS5oOjE0ODU6aW50IHBjaV9yZXNldF9mdW5jdGlvbihzdHJ1Y3QgcGNpX2RldiAqZGV2KTtcXG5pbmNsdWRlL2xpbnV4L3BjaS5oOjE0ODY6aW50IHBjaV9yZXNldF9mdW5jdGlvbl9sb2NrZWQoc3RydWN0IHBjaV9kZXYgKmRldik7XFxuaW5jbHVkZS9saW51eC9wY2kuaC0xNDg3LWludCBwY2lfdHJ5X3Jlc2V0X2Z1bmN0aW9uKHN0cnVjdCBwY2lfZGV2ICpkZXYpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwOTowODo1Mi45MDUwOTU3MDlaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NTIzMzAxNjIzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgdGhlIFBDSSBSZXNldCBGdW5jdGlvbmFsaXR5KipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byBob3cgUENJIGRldmljZSByZXNldHMgYXJlIGhhbmRsZWQsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGtlcm5lbC4gSSd2ZSBiZWVuIGRpcmVjdGVkIHRvIGBkcml2ZXJzL3BjaS9wY2ktc3lzZnMuY2AgYW5kIGZvdW5kIHRoaXMgc25pcHBldDpcblxuYGBgY1xuc3RhdGljIHNzaXplX3QgcmVzZXRfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbi4uLlxuXHRwbV9ydW50aW1lX2dldF9zeW5jKGRldik7XG5cdHJlc3VsdCA9IHBjaV9yZXNldF9mdW5jdGlvbihwZGV2KTtcblx0cG1fcnVudGltZV9wdXQoZGV2KTtcbmBgYFxuXG5NeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJSaWdodCwgYHBtX3J1bnRpbWVfZ2V0X3N5bmNgIGFuZCBgcG1fcnVudGltZV9wdXRgIGFyZSBjbGVhcmx5IG1hbmFnaW5nIHBvd2VyIHN0YXRlcywgbWFraW5nIHN1cmUgdGhlIGRldmljZSBpcyBhY3RpdmUgZm9yIHRoZSByZXNldCBvcGVyYXRpb24uXCIgQnV0IHRoZSBjb3JlIG9mIHRoZSBtYXR0ZXIgaXMgYHBjaV9yZXNldF9mdW5jdGlvbihwZGV2KWAuIFRoYXQncyB3aGVyZSB0aGUgKmFjdHVhbCogcmVzZXQgbG9naWMgbGllcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGF0IGZ1bmN0aW9uIGlzIGRvaW5nLlxuXG5UaGVyZWZvcmUsIEknbGwgbm93IGhhdmUgdG8gY3Jvc3MtcmVmZXJlbmNlIGBkcml2ZXJzL3BjaS9wY2kuY2AgYW5kIGp1bXAgdG8gdGhlIHZpY2luaXR5IG9mIGxpbmVzIDUyNjEgYW5kIDUwOTQgdG8gc2VlIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIGZvciBgcGNpX3Jlc2V0X2Z1bmN0aW9uYC4gSSBjYW4gaW1hZ2luZSB0aGVyZSBhcmUgZGV2aWNlLXNwZWNpZmljIGNoZWNrcyBmb3IgcmVzZXQgY2FwYWJpbGl0aWVzLCBoYW5kbGluZyBvZiBkaWZmZXJlbnQgcmVzZXQgbWV0aG9kcywgcGVyaGFwcyBzb21lIGNvbmZpZ3VyYXRpb24gb2YgdGhlIFBDSSBjb25maWd1cmF0aW9uIHNwYWNlLCBhbmQgZXJyb3IgY2hlY2tpbmcuIFVuZGVyc3RhbmRpbmcgdGhlIGZsb3cgdGhlcmUgaXMgY3J1Y2lhbCB0byBwcm9wZXJseSBhc3Nlc3MgdGhlIG92ZXJhbGwgcmVzZXQgcHJvY2VkdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDkyNSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwOTowODo1OC4xMzgxMTU2OVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjczMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9wY2kvcGNpLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTA4OCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNTA4ODpcXHRzdGF0aWMgdm9pZCBwY2lfZGV2X3NhdmVfYW5kX2Rpc2FibGUoc3RydWN0IHBjaV9kZXYgKmRldilcXG41MDg5OlxcdHtcXG41MDkwOlxcdFxcdGNvbnN0IHN0cnVjdCBwY2lfZXJyb3JfaGFuZGxlcnMgKmVycl9oYW5kbGVyID1cXG41MDkxOlxcdFxcdFxcdFxcdGRldi1cXHUwMDNlZHJpdmVyID8gZGV2LVxcdTAwM2Vkcml2ZXItXFx1MDAzZWVycl9oYW5kbGVyIDogTlVMTDtcXG41MDkyOlxcdFxcbjUwOTM6XFx0XFx0LypcXG41MDk0OlxcdFxcdCAqIGRldi1cXHUwMDNlZHJpdmVyLVxcdTAwM2VlcnJfaGFuZGxlci1cXHUwMDNlcmVzZXRfcHJlcGFyZSgpIGlzIHByb3RlY3RlZCBhZ2FpbnN0XFxuNTA5NTpcXHRcXHQgKiByYWNlcyB3aXRoIC1cXHUwMDNlcmVtb3ZlKCkgYnkgdGhlIGRldmljZSBsb2NrLCB3aGljaCBtdXN0IGJlIGhlbGQgYnlcXG41MDk2OlxcdFxcdCAqIHRoZSBjYWxsZXIuXFxuNTA5NzpcXHRcXHQgKi9cXG41MDk4OlxcdFxcdGRldmljZV9sb2NrX2Fzc2VydChcXHUwMDI2ZGV2LVxcdTAwM2VkZXYpO1xcbjUwOTk6XFx0XFx0aWYgKGVycl9oYW5kbGVyIFxcdTAwMjZcXHUwMDI2IGVycl9oYW5kbGVyLVxcdTAwM2VyZXNldF9wcmVwYXJlKVxcbjUxMDA6XFx0XFx0XFx0ZXJyX2hhbmRsZXItXFx1MDAzZXJlc2V0X3ByZXBhcmUoZGV2KTtcXG41MTAxOlxcdFxcdGVsc2UgaWYgKGRldi1cXHUwMDNlZHJpdmVyKVxcbjUxMDI6XFx0XFx0XFx0cGNpX3dhcm4oZGV2LCBcXFwicmVzZXR0aW5nXFxcIik7XFxuNTEwMzpcXHRcXG41MTA0OlxcdFxcdC8qXFxuNTEwNTpcXHRcXHQgKiBXYWtlLXVwIGRldmljZSBwcmlvciB0byBzYXZlLiAgUE0gcmVnaXN0ZXJzIGRlZmF1bHQgdG8gRDAgYWZ0ZXJcXG41MTA2OlxcdFxcdCAqIHJlc2V0IGFuZCBhIHNpbXBsZSByZWdpc3RlciByZXN0b3JlIGRvZXNuJ3QgcmVsaWFibHkgcmV0dXJuXFxuNTEwNzpcXHRcXHQgKiB0byBhIG5vbi1EMCBzdGF0ZSBhbnl3YXkuXFxuNTEwODpcXHRcXHQgKi9cXG41MTA5OlxcdFxcdHBjaV9zZXRfcG93ZXJfc3RhdGUoZGV2LCBQQ0lfRDApO1xcbjUxMTA6XFx0XFxuNTExMTpcXHRcXHRpZiAoIXBjaV9kZXZfY29uZmlnX2FjY2Vzc2libGUoZGV2LCBcXFwic2F2ZSBzdGF0ZVxcXCIpKVxcbjUxMTI6XFx0XFx0XFx0cmV0dXJuO1xcbjUxMTM6XFx0XFxuNTExNDpcXHRcXHRwY2lfc2F2ZV9zdGF0ZShkZXYpO1xcbjUxMTU6XFx0XFx0LypcXG41MTE2OlxcdFxcdCAqIERpc2FibGUgdGhlIGRldmljZSBieSBjbGVhcmluZyB0aGUgQ29tbWFuZCByZWdpc3RlciwgZXhjZXB0IGZvclxcbjUxMTc6XFx0XFx0ICogSU5UeC1kaXNhYmxlIHdoaWNoIGlzIHNldC4gIFRoaXMgbm90IG9ubHkgZGlzYWJsZXMgTU1JTyBhbmQgSS9PIHBvcnRcXG41MTE4OlxcdFxcdCAqIEJBUnMsIGJ1dCBhbHNvIHByZXZlbnRzIHRoZSBkZXZpY2UgZnJvbSBiZWluZyBCdXMgTWFzdGVyLCBwcmV2ZW50aW5nXFxuNTExOTpcXHRcXHQgKiBETUEgZnJvbSB0aGUgZGV2aWNlIGluY2x1ZGluZyBNU0kvTVNJLVggaW50ZXJydXB0cy4gIEZvciBQQ0kgMi4zXFxuNTEyMDpcXHRcXHQgKiBjb21wbGlhbnQgZGV2aWNlcywgSU5UeC1kaXNhYmxlIHByZXZlbnRzIGxlZ2FjeSBpbnRlcnJ1cHRzLlxcbjUxMjE6XFx0XFx0ICovXFxuNTEyMjpcXHRcXHRwY2lfd3JpdGVfY29uZmlnX3dvcmQoZGV2LCBQQ0lfQ09NTUFORCwgUENJX0NPTU1BTkRfSU5UWF9ESVNBQkxFKTtcXG41MTIzOlxcdH1cXG41MTI0OlxcdFxcbjUxMjU6XFx0c3RhdGljIHZvaWQgcGNpX2Rldl9yZXN0b3JlKHN0cnVjdCBwY2lfZGV2ICpkZXYpXFxuNTEyNjpcXHR7XFxuNTEyNzpcXHRcXHRjb25zdCBzdHJ1Y3QgcGNpX2Vycm9yX2hhbmRsZXJzICplcnJfaGFuZGxlciA9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDA5OjA4OjU4LjEzODM4NTI4WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjU5NTA3NjAwNTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgYSBQb3RlbnRpYWwgVnVsbmVyYWJpbGl0eSBpbiBWaXJ0aW8gQmxvY2sgRGV2aWNlIFJlc2V0KipcblxuT2theSwgc28gaGVyZSdzIHdoYXQgSSdtIHRoaW5raW5nOiBgcGNpX2Rldl9zYXZlX2FuZF9kaXNhYmxlYCB0cmlnZ2VycyBgZXJyX2hhbmRsZXItXHUwMDNlcmVzZXRfcHJlcGFyZShkZXYpYC4gTG9va2luZyBhdCB0aGUgVmlydGlvIFBDSSBkcml2ZXIgKGBkcml2ZXJzL3ZpcnRpby92aXJ0aW9fcGNpX2NvbW1vbi5jYCksIHRoYXQgdHJhbnNsYXRlcyB0byBgdmlydGlvX3BjaV9yZXNldF9wcmVwYXJlYCwgd2hpY2ggaW4gdHVybiBjYWxscyBgdmlydGlvX2RldmljZV9yZXNldF9wcmVwYXJlYC4gVGhpcyBldmVudHVhbGx5IGxlYWRzIHRvIGEgZHJpdmVyLXNwZWNpZmljIGByZXNldF9wcmVwYXJlYCBmdW5jdGlvbiwgd2hpY2gsIGZvciBgdmlydGlvX2Jsa2AsIGlzIGB2aXJ0YmxrX3Jlc2V0X3ByZXBhcmVgLCBhbmQgdGhhdCBjYWxscyBgdmlydGJsa19mcmVlemVfcHJpdmAuXG5cbk5vdywgaGVyZSdzIHRoZSBraWNrZXI6IGB2aXJ0aW9fYmxrYCBpcyBhIHN0YW5kYXJkIHZpcnRpbyBkZXZpY2UsIGFuZCBhbG1vc3QgZXZlcnkgUUVNVSBWTSBydW5uaW5nIHN5emthbGxlciB1c2VzIGl0IGZvciBpdHMgcm9vdCBvciBhZGRpdGlvbmFsIGRpc2tzLiBUaGlzIG1lYW5zIGAvc3lzL2J1cy9wY2kvZGV2aWNlcy8uLi4vcmVzZXRgIGlzIGxpa2VseSBhY2Nlc3NpYmxlIHRvIHJvb3QgKGFuZCB0aHVzLCBzeXprYWxsZXIpIGluIHRoZSBWTSBpZiB2aXJ0aW8tcGNpIGlzIGluIHVzZS4gQWx0ZXJuYXRpdmVseSwgcG93ZXIgbWFuYWdlbWVudCBzdXNwZW5kL3Jlc3VtZSAoYC9zeXMvcG93ZXIvc3RhdGVgKSBjYW4gYWxzbyB0cmlnZ2VyIHRoZSBzYW1lIGNvZGUgcGF0aCwgYHZpcnRibGtfZnJlZXplX3ByaXZgLlxuXG5UaGUgbWlsbGlvbi1kb2xsYXIgcXVlc3Rpb246IGlzIHRoaXMgY29kZSByZWFjaGFibGU/IFllcyEgVmlydGlvIGJsb2NrIGRldmljZXMgYXJlIGVtdWxhdGVkIGJ5IFFFTVUsIG1ha2luZyBpdCBhIHZpYWJsZSB0YXJnZXQuIEdpdmVuIHRoYXQgdGhlIGNyaXRlcmlhIEkgd2FzIHJldmlld2luZyBpbmNsdWRlIGRyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcywgdGhpcyBzZWVtcyB0byBmaXQgcGVyZmVjdGx5LiBTZWN0aW9uIDMgZXhwbGljaXRseSBoaWdobGlnaHRzIHRoaXMgYXMgYW4gYXJlYSBvZiBjb25jZXJuLlxuXG5Ob3cgSSBuZWVkIHRvIGNsYXJpZnk6IGlzIGB2aXJ0YmxrX2ZyZWV6ZV9wcml2YCBhIHRlYXJkb3duIGNhbGxiYWNrPyBObywgaXQncyBjYWxsZWQgZHVyaW5nIGByZXNldF9wcmVwYXJlYCAoYSBQQ0kgZGV2aWNlIHJlc2V0KSBhbmQgZHVyaW5nIFBNIGZyZWV6ZSAocG93ZXIgbWFuYWdlbWVudCBzdXNwZW5kKSwgbm90IGR1cmluZyBgcmVtb3ZlYCwgb3IgaG90LXVucGx1Zy4gSXTigJlzIGltcG9ydGFudCB0byBjbGFyaWZ5IHRoYXQgdGhpcyBpc27igJl0IGEgaG90cGx1ZyBvciBtYW51YWwgdW5iaW5kaW5nLiBJdCdzIGFjdHVhbGx5IGEgcmVzZXQuIEkgc2hvdWxkIHByb2JhYmx5IGFsc28gY2hlY2sgYHZpcnRibGtfcmVtb3ZlYCBqdXN0IHRvIGJlIGNvbXBsZXRlbHkgc3VyZSB0aGVyZSBpc24ndCBzb21lIGNyb3Nzb3ZlciBvciBhY2NpZGVudGFsIHNoYXJpbmcgb2YgY29kZS4gQnV0LCBiYXNlZCBvbiB0aGUgY3VycmVudCBjb250ZXh0LCB0aGlzIGxvb2tzIGxpa2UgYSB2YWxpZCBhdHRhY2sgdmVjdG9yIHdvcnRoIGV4cGxvcmluZyBmdXJ0aGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjA0NywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU2OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDA5OjA5OjA0LjA4OTE0NzU5M1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc3NDYzNDQzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZpcnRibGtfcmVtb3ZlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jPTU1PXN0cnVjdCB2aXJ0aW9fYmxrIHtcXG4tLVxcbmRyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jLTU3LVxcdCAqIFRoaXMgbXV0ZXggbXVzdCBiZSBoZWxkIGJ5IGFueXRoaW5nIHRoYXQgbWF5IHJ1biBhZnRlclxcbmRyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jOjU4OlxcdCAqIHZpcnRibGtfcmVtb3ZlKCkgc2V0cyB2YmxrLVxcdTAwM2V2ZGV2IHRvIE5VTEwuXFxuZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmMtNTktXFx0ICpcXG4tLVxcbmRyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jPTE0Mzg9c3RhdGljIGludCB2aXJ0YmxrX3Byb2JlKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KVxcbi0tXFxuZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmMtMTU2My1cXG5kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYzoxNTY0OnN0YXRpYyB2b2lkIHZpcnRibGtfcmVtb3ZlKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KVxcbmRyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jLTE1NjUte1xcbi0tXFxuZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmM9MTY3Nz1zdGF0aWMgc3RydWN0IHZpcnRpb19kcml2ZXIgdmlydGlvX2JsayA9IHtcXG4tLVxcbmRyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jLTE2ODQtXFx0LnByb2JlXFx0XFx0XFx0XFx0PSB2aXJ0YmxrX3Byb2JlLFxcbmRyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jOjE2ODU6XFx0LnJlbW92ZVxcdFxcdFxcdFxcdD0gdmlydGJsa19yZW1vdmUsXFxuZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmMtMTY4Ni1cXHQuY29uZmlnX2NoYW5nZWRcXHRcXHRcXHQ9IHZpcnRibGtfY29uZmlnX2NoYW5nZWQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDA5OjA5OjA0LjI2NjYxODI3NloiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMzE2OTEyODQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHZpcnRibGtfcmVtb3ZlKipcblxuQWxyaWdodCwgbGV0J3MgcHVsbCB1cCBgZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmNgIGFuZCB6ZXJvIGluIG9uIHRoZSBgdmlydGJsa19yZW1vdmVgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMTU2NC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBkZXZpY2UgcmVtb3ZhbCBwYXRoLiBUaGlzIGlzIGxpa2VseSB0aGUgY3J1Y2lhbCBwb2ludCB3aGVyZSB0aGUgdmlydGlvLWJsayBkZXZpY2UgaXMgZ3JhY2VmdWxseSBkZXRhY2hlZCBmcm9tIHRoZSBzeXN0ZW0uIEknbSBleHBlY3RpbmcgdG8gc2VlIHJlc291cmNlIGNsZWFudXA6IGZyZWVpbmcgYWxsb2NhdGVkIG1lbW9yeSAobGlrZSB0aGUgcmVxdWVzdCBxdWV1ZXMpLCBkZS1yZWdpc3RlcmluZyB0aGUgYmxvY2sgZGV2aWNlLCBwb3RlbnRpYWxseSBoYW5kbGluZyBwZW5kaW5nIEkvTywgYW5kIG1heWJlIGV2ZW4gZGlzYWJsaW5nIGludGVycnVwdHMgYXNzb2NpYXRlZCB3aXRoIHRoZSBkZXZpY2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGZ1bmN0aW9uIGNvb3JkaW5hdGVzIHdpdGggdGhlIG90aGVyIHBhcnRzIG9mIHRoZSB2aXJ0aW8tYmxrIGRyaXZlciBkdXJpbmcgc2h1dGRvd24sIGFuZCBob3cgaXQgYXZvaWRzIHJhY2UgY29uZGl0aW9ucyB3aXRoIG9uZ29pbmcgSS9PIG9wZXJhdGlvbnMuIExldCdzIHNlZSBob3cgdGhlIGRyaXZlciBoYW5kbGVzIHBvdGVudGlhbGx5IGNvbmN1cnJlbnQgcmVxdWVzdHMgYXMgaXQgdW5sb2Fkcy4gU3BlY2lmaWNhbGx5LCBJJ20gbG9va2luZyBmb3IgdGhlIHVzZSBvZiBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcyB0byBwcm90ZWN0IHNoYXJlZCBkYXRhIHN0cnVjdHVyZXMgYW5kIGVuc3VyZSBhIGNsZWFuIHRlYXJkb3duLiBJIGFudGljaXBhdGUgdGhpcyBmdW5jdGlvbiB3aWxsIGRvIGl0cyBkdWUgZGlsaWdlbmNlIHRvIHByZXZlbnQgZGF0YSBjb3JydXB0aW9uLiBJJ20gY3VyaW91cyBhYm91dCB0aGUgc3BlY2lmaWMgb3JkZXIgb2Ygb3BlcmF0aW9ucyDigJMgaXQncyBjcnVjaWFsIGZvciB0aGUgY29ycmVjdCBzaHV0ZG93biBvZiB0aGUgc3Vic3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzQ0MiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDA5OjA5OjA2LjU4MzUzMzcyM1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDI0NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTU2MCxcbiAgXCJMaW5lQ291bnRcIjogMzVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTU2MDpcXHRvdXQ6XFxuMTU2MTpcXHRcXHRyZXR1cm4gZXJyO1xcbjE1NjI6XFx0fVxcbjE1NjM6XFx0XFxuMTU2NDpcXHRzdGF0aWMgdm9pZCB2aXJ0YmxrX3JlbW92ZShzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldilcXG4xNTY1OlxcdHtcXG4xNTY2OlxcdFxcdHN0cnVjdCB2aXJ0aW9fYmxrICp2YmxrID0gdmRldi1cXHUwMDNlcHJpdjtcXG4xNTY3OlxcdFxcbjE1Njg6XFx0XFx0LyogTWFrZSBzdXJlIG5vIHdvcmsgaGFuZGxlciBpcyBhY2Nlc3NpbmcgdGhlIGRldmljZS4gKi9cXG4xNTY5OlxcdFxcdGZsdXNoX3dvcmsoXFx1MDAyNnZibGstXFx1MDAzZWNvbmZpZ193b3JrKTtcXG4xNTcwOlxcdFxcbjE1NzE6XFx0XFx0ZGVsX2dlbmRpc2sodmJsay1cXHUwMDNlZGlzayk7XFxuMTU3MjpcXHRcXHRibGtfbXFfZnJlZV90YWdfc2V0KFxcdTAwMjZ2YmxrLVxcdTAwM2V0YWdfc2V0KTtcXG4xNTczOlxcdFxcbjE1NzQ6XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2dmJsay1cXHUwMDNldmRldl9tdXRleCk7XFxuMTU3NTpcXHRcXG4xNTc2OlxcdFxcdC8qIFN0b3AgYWxsIHRoZSB2aXJ0cXVldWVzLiAqL1xcbjE1Nzc6XFx0XFx0dmlydGlvX3Jlc2V0X2RldmljZSh2ZGV2KTtcXG4xNTc4OlxcdFxcbjE1Nzk6XFx0XFx0LyogVmlydHF1ZXVlcyBhcmUgc3RvcHBlZCwgbm90aGluZyBjYW4gdXNlIHZibGstXFx1MDAzZXZkZXYgYW55bW9yZS4gKi9cXG4xNTgwOlxcdFxcdHZibGstXFx1MDAzZXZkZXYgPSBOVUxMO1xcbjE1ODE6XFx0XFxuMTU4MjpcXHRcXHR2ZGV2LVxcdTAwM2Vjb25maWctXFx1MDAzZWRlbF92cXModmRldik7XFxuMTU4MzpcXHRcXHRrZnJlZSh2YmxrLVxcdTAwM2V2cXMpO1xcbjE1ODQ6XFx0XFxuMTU4NTpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNnZibGstXFx1MDAzZXZkZXZfbXV0ZXgpO1xcbjE1ODY6XFx0XFxuMTU4NzpcXHRcXHRwdXRfZGlzayh2YmxrLVxcdTAwM2VkaXNrKTtcXG4xNTg4OlxcdH1cXG4xNTg5OlxcdFxcbjE1OTA6XFx0c3RhdGljIGludCB2aXJ0YmxrX2ZyZWV6ZV9wcml2KHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KVxcbjE1OTE6XFx0e1xcbjE1OTI6XFx0XFx0c3RydWN0IHZpcnRpb19ibGsgKnZibGsgPSB2ZGV2LVxcdTAwM2Vwcml2O1xcbjE1OTM6XFx0XFx0c3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSB2YmxrLVxcdTAwM2VkaXNrLVxcdTAwM2VxdWV1ZTtcXG4xNTk0OlxcdFxcdHVuc2lnbmVkIGludCBtZW1mbGFncztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDk6MDk6MDYuNTgzNjM4MTIzWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQxMTY4ODA5NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBgdmlydGJsa19mcmVlemVfcHJpdmAgYW5kIFBvdGVudGlhbCBRdWllc2NlIElzc3VlcyoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBgdmlydGJsa19mcmVlemVfcHJpdmAgZnVuY3Rpb24sIGFuZCBpdCBzZWVtcyBsaWtlIEkgaGF2ZSBzb21lIGluY29ycmVjdCBhc3N1bXB0aW9ucy4gVGhlIGRvY3VtZW50YXRpb24gc3RhdGVzIHRoYXQgaXQncyAqbm90KiBjYWxsZWQgYnkgYHZpcnRibGtfcmVtb3ZlYCwgd2hpY2ggaXMgZ29vZCB0byBjbGFyaWZ5LCBidXQgaXQgKmlzKiBjYWxsZWQgYnkgYHZpcnRibGtfZnJlZXplYCBhbmQgYHZpcnRibGtfcmVzZXRfcHJlcGFyZWAuIFRoYXQncyBpbXBvcnRhbnQgdG8ga2VlcCBpbiBtaW5kLlxuXG5Ob3csIG15IHJlYWwgY29uY2VybiBpcyB0aGlzIGFwcGFyZW50IGNoYW5nZSBmcm9tIHVzaW5nIGBibGtfbXFfcXVpZXNjZV9xdWV1ZV9ub3dhaXRgIHRvIGBibGtfbXFfcXVpZXNjZV9xdWV1ZWAgd2l0aGluIHRoYXQgZnVuY3Rpb24uIEkgaW1tZWRpYXRlbHkgc2VlIHRoZSBwb3RlbnRpYWwgZm9yIHByb2JsZW1zIGhlcmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoaXMgc2hpZnQgaW4gcXVpZXNjZSBtZXRob2RzIGNvdWxkIGludHJvZHVjZSBkZWFkbG9ja3Mgb3Igb3RoZXIgaXNzdWVzIGluIHRoZSBibG9jayBJL08gbGF5ZXIsIHdoaWNoIGlzIG15IG1haW4gYXJlYSBvZiBmb2N1cy5cblxuTGV0IG1lIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgdmlydGJsa19mcmVlemVfcHJpdmAncyBpbXBsZW1lbnRhdGlvbjogdGhlIGNvZGUgc25pcHBldCBjb25maXJtcyBteSBpbnRlcmVzdCBpbiB0aGlzIGFyZWE6XG5cbmBgYGNcblx0LyogRW5zdXJlIG5vIHJlcXVlc3RzIGluIHZpcnRxdWV1ZXMgYmVmb3JlIGRlbGV0aW5nIHZxcy4gKi9cblx0bWVtZmxhZ3MgPSBibGtfbXFfZnJlZXplX3F1ZXVlKHEpO1xuXHRibGtfbXFfcXVpZXNjZV9xdWV1ZShxKTtcblx0YmxrX21xX3VuZnJlZXplX3F1ZXVlKHEsIG1lbWZsYWdzKTtcbmBgYFxuXG5IZXJlIGl0J3MgY2xlYXI6IHdlIGZyZWV6ZSwgcXVpZXNjZSwgdGhlbiB1bmZyZWV6ZSB0aGUgcXVldWUuIEJ1dCAqd2h5KiB3YXMgYGJsa19tcV9xdWllc2NlX3F1ZXVlX25vd2FpdGAgY2hhbmdlZCB0byBgYmxrX21xX3F1aWVzY2VfcXVldWVgPyBUaGF0J3MgdGhlIGtleSBxdWVzdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlYXNvbmluZyBiZWhpbmQgdGhpcyBkZWNpc2lvbi4gSXQgY291bGQgaGF2ZSBiZWVuIGludGVudGlvbmFsLCBwZXJoYXBzIGZvciBwZXJmb3JtYW5jZSBvciBzeW5jaHJvbml6YXRpb24gcmVhc29ucywgYnV0IGl0IGNvdWxkIGFsc28gaGF2ZSBiZWVuIGFuIG92ZXJzaWdodCB0aGF0IGNvdWxkIGhhdmUgc2VyaW91cyBjb25zZXF1ZW5jZXMuXG5cbkkgbmVlZCB0byB0cmFjZSB0aGUgY2hhbmdlLiBJIGhhdmUgdG8gZmluZCB0aGUgY29tbWl0IHRoYXQgaW50cm9kdWNlZCB0aGlzIG1vZGlmaWNhdGlvbi4gSSdsbCBzdGFydCB3aXRoIHRoZSBjb21taXQgbWVzc2FnZSwgdGhlIHVzdWFsIHBsYWNlIHRvIGZpbmQgcmVhc29uaW5nLiBJJ2xsIHNlYXJjaCB0aGUgZ2l0IGxvZyBmb3Igb2NjdXJyZW5jZXMgb2YgXCJ2aXJ0YmxrX2ZyZWV6ZV9wcml2XCIgb3IgXCJibGtfbXFfcXVpZXNjZV9xdWV1ZV9ub3dhaXRcIi4gQWx0ZXJuYXRpdmVseSwgaWYgdGhlIGNvbW1pdCBtZXNzYWdlIGlzIHVuaGVscGZ1bCwgSSdsbCBzZWFyY2ggdGhlIGxvZyBmb3IgKmFueSogY29tbWl0cyBtZW50aW9uaW5nIGBibGtfbXFfcXVpZXNjZV9xdWV1ZV9ub3dhaXRgLiBJZiB0aGF0IHNlYXJjaCB5aWVsZHMgbm90aGluZywgSSBtYXkgZXhwYW5kIHRvIHVzZSBncmVwcGVyIHRvIHBlcmZvcm0gYSBjb2RlYmFzZS13aWRlIHNlYXJjaCBmb3IgdGhhdCBmdW5jdGlvbiBuYW1lIHRvIGdpdmUgbWUgc29tZSBjb250ZXh0IG9uIGhvdyB0aGUgZnVuY3Rpb24gbmFtZSBpcyB1c2VkIGFjcm9zcyB0aGUgY29kZWJhc2UuIEkgaGF2ZSB0byBmaW5kIHRoZSBoaXN0b3J5IGFuZCB1bmRlcnN0YW5kIHRoZSByYXRpb25hbGUuIFRoaXMgaXMgY3J1Y2lhbCBmb3IgZXZhbHVhdGluZyB0aGUgcG90ZW50aWFsIGltcGFjdCBvZiB0aGlzIG1vZGlmaWNhdGlvbiBvbiB0aGUgb3ZlcmFsbCBzeXN0ZW0ncyBzdGFiaWxpdHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4MjY3LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjk4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDk6MDk6MTAuNzAwNTIxNjJaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NDY3MzkzMDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYmxrX21xX3F1aWVzY2VfcXVldWVfbm93YWl0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL2Jsay1tcS5jPTI1NT1FWFBPUlRfU1lNQk9MX0dQTChibGtfbXFfdW5mcmVlemVfcXVldWVfbm9uX293bmVyKTtcXG4tLVxcbmJsb2NrL2Jsay1tcS5jLTI2MC0gKi9cXG5ibG9jay9ibGstbXEuYzoyNjE6dm9pZCBibGtfbXFfcXVpZXNjZV9xdWV1ZV9ub3dhaXQoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpXFxuYmxvY2svYmxrLW1xLmMtMjYyLXtcXG4tLVxcbmJsb2NrL2Jsay1tcS5jLTI2OS19XFxuYmxvY2svYmxrLW1xLmM6MjcwOkVYUE9SVF9TWU1CT0xfR1BMKGJsa19tcV9xdWllc2NlX3F1ZXVlX25vd2FpdCk7XFxuYmxvY2svYmxrLW1xLmMtMjcxLVxcbi0tXFxuYmxvY2svYmxrLW1xLmMtMjc4LSAqIGZ1bmN0aW9uIG9ubHkgd2FpdHMgZm9yIHRoZSBxdWllc2NlIG9uIHRob3NlIHJlcXVlc3RfcXVldWVzIHRoYXQgaGFkXFxuYmxvY2svYmxrLW1xLmM6Mjc5OiAqIHRoZSBxdWllc2NlIGZsYWcgc2V0IHVzaW5nIGJsa19tcV9xdWllc2NlX3F1ZXVlX25vd2FpdC5cXG5ibG9jay9ibGstbXEuYy0yODAtICovXFxuLS1cXG5ibG9jay9ibGstbXEuYz0yOTk9dm9pZCBibGtfbXFfcXVpZXNjZV9xdWV1ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSlcXG5ibG9jay9ibGstbXEuYy0zMDAte1xcbmJsb2NrL2Jsay1tcS5jOjMwMTpcXHRibGtfbXFfcXVpZXNjZV9xdWV1ZV9ub3dhaXQocSk7XFxuYmxvY2svYmxrLW1xLmMtMzAyLVxcdC8qIG5vdGhpbmcgdG8gd2FpdCBmb3Igbm9uLW1xIHF1ZXVlcyAqL1xcbi0tXFxuYmxvY2svYmxrLW1xLmM9MzM1PXZvaWQgYmxrX21xX3F1aWVzY2VfdGFnc2V0KHN0cnVjdCBibGtfbXFfdGFnX3NldCAqc2V0KVxcbi0tXFxuYmxvY2svYmxrLW1xLmMtMzQxLVxcdFxcdGlmICghYmxrX3F1ZXVlX3NraXBfdGFnc2V0X3F1aWVzY2UocSkpXFxuYmxvY2svYmxrLW1xLmM6MzQyOlxcdFxcdFxcdGJsa19tcV9xdWllc2NlX3F1ZXVlX25vd2FpdChxKTtcXG5ibG9jay9ibGstbXEuYy0zNDMtXFx0fVxcbi0tXFxuZHJpdmVycy9zY3NpL3Njc2lfbGliLmM9MjkzOT1zdGF0aWMgdm9pZCBzY3NpX3N0b3BfcXVldWUoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KVxcbi0tXFxuZHJpdmVycy9zY3NpL3Njc2lfbGliLmMtMjk0Ny1cXHRpZiAoIWNtcHhjaGcoXFx1MDAyNnNkZXYtXFx1MDAzZXF1ZXVlX3N0b3BwZWQsIDAsIDEpKVxcbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jOjI5NDg6XFx0XFx0YmxrX21xX3F1aWVzY2VfcXVldWVfbm93YWl0KHNkZXYtXFx1MDAzZXJlcXVlc3RfcXVldWUpO1xcbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jLTI5NDktfVxcbi0tXFxuaW5jbHVkZS9saW51eC9ibGstbXEuaD05Nzc9dm9pZCBibGtfbXFfdXBkYXRlX25yX2h3X3F1ZXVlcyhzdHJ1Y3QgYmxrX21xX3RhZ19zZXQgKnNldCwgaW50IG5yX2h3X3F1ZXVlcyk7XFxuaW5jbHVkZS9saW51eC9ibGstbXEuaC05NzgtXFxuaW5jbHVkZS9saW51eC9ibGstbXEuaDo5Nzk6dm9pZCBibGtfbXFfcXVpZXNjZV9xdWV1ZV9ub3dhaXQoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpO1xcbmluY2x1ZGUvbGludXgvYmxrLW1xLmgtOTgwLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwOTowOToxMi4zNDcyNjcyMzFaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NzA5MjkxMzI5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFZpcnRpbyBCbG9jayBEcml2ZXIncyBRdWllc2NpbmcgTG9naWMqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgVmlydGlvIGJsb2NrIGRyaXZlciBjb2RlLCBhbmQgSSBzZWUgYSBrZXkgY2hhbmdlOiB0aGV5J3ZlIHN3YXBwZWQgb3V0IGBibGtfbXFfcXVpZXNjZV9xdWV1ZV9ub3dhaXRgIHdpdGggYGJsa19tcV9xdWllc2NlX3F1ZXVlKHEpYC4gSW50ZXJlc3RpbmcuIE15IGluaXRpYWwgdGhvdWdodCBpcywgd2h5IHRoZSBjaGFuZ2U/IEl0J3MgaW1tZWRpYXRlbHkgY2xlYXIgdGhhdCBgdmlydGJsa19mcmVlemVfcHJpdmAgaXMgZG9pbmcgc29tZSBxdWV1ZSBtYW5pcHVsYXRpb24uIExvb2tpbmcgYXQgbGluZXMgMTU5Ni0xNjAwLCBpdCdzIGNsZWFyOiBUaGV5J3JlIGZyZWV6aW5nLCBxdWllc2NpbmcsIGFuZCB0aGVuIHVuZnJlZXppbmcgdGhlIHF1ZXVlLiBUaGlzIHNldHMgb2ZmIHNvbWUgYWxhcm1zLCBuYXR1cmFsbHkuXG5cblRoZSBpbXBvcnRhbnQgcGFydCBpcyB0aGF0IGBibGtfbXFfcXVpZXNjZV9xdWV1ZShxKWAgKndhaXRzKiBmb3IgYWxsIGFjdGl2ZSBkaXNwYXRjaGVzIHRvIGZpbmlzaCB2aWEgYGJsa19tcV93YWl0X3F1aWVzY2VfZG9uZWAgd2hpY2gsIG5vdGFibHksIGNhbGxzIGBzeW5jaHJvbml6ZV9yY3UoKWAuIFNvLCBpdCdzIGEgc3luY2hyb25vdXMgb3BlcmF0aW9uLiBJIHdhcyBjb25jZXJuZWQgYWJvdXQgdGhlIHVuZnJlZXppbmcgYWZ0ZXJ3YXJkLiBUaGUgaW1wbGljYXRpb24gaXMgdGhhdCB0aGV5J3JlIGVuc3VyaW5nIGFsbCBvbmdvaW5nIHJlcXVlc3RzIGFyZSBjb21wbGV0ZSBiZWZvcmUgc29tZXRoaW5nIGhhcHBlbnMsIEkgYW0gYXNzdW1pbmcgdGhpcyBpcyByZWxhdGVkIHRvIHRoZSByZXNldCBvciBkZWxldGlvbiBvZiB2aXJ0cXVldWVzLlxuXG5Ob3csIHRoaXMgcmVhbGx5IG1ha2VzIHNlbnNlLiBgYmxrX21xX3F1aWVzY2VfcXVldWVgIGJsb2NrcyBuZXcgZGlzcGF0Y2hlcyB1bnRpbCBpdCdzIHVucXVpZXNjZWQuIFRoZW4sIGB2aXJ0YmxrX3Jlc3RvcmVfcHJpdmAgY2FsbHMgYGJsa19tcV91bnF1aWVzY2VfcXVldWUodmJsay1cdTAwM2VkaXNrLVx1MDAzZXF1ZXVlKWAuIFNvLCB0aGUgcXVldWUgaXMgZXNzZW50aWFsbHkgbG9ja2VkIGRvd24gYmV0d2VlbiBgdmlydGJsa19mcmVlemVfcHJpdmAgYW5kIGB2aXJ0YmxrX3Jlc3RvcmVfcHJpdmAuIFRoaXMgaXMgdG8gbWFrZSBzdXJlIHRoYXQgd2hlbiBgdmlydGJsa19mcmVlemVfcHJpdmAgcHJvY2VlZHMgdG8gYHZpcnRpb19yZXNldF9kZXZpY2UodmRldilgIGFuZCBgdmRldi1cdTAwM2Vjb25maWctXHUwMDNlZGVsX3Zxcyh2ZGV2KWAsIGFsbCBkaXNwYXRjaGVzIGhhdmUgZ2VudWluZWx5IGZpbmlzaGVkIVxuXG5UaGUgcHJvYmxlbSB3aXRoIHRoZSBvbGQgY29kZSAoYGJsa19tcV9xdWllc2NlX3F1ZXVlX25vd2FpdChxKWApIGlzIG9idmlvdXMgbm93LiBEaXNwYXRjaGVzIGNvdWxkIGhhdmUgY29udGludWVkIHRvIHJ1biwgcG90ZW50aWFsbHkgYWNjZXNzaW5nIGZyZWVkIHZpcnRxdWV1ZXMgKmFmdGVyKiBgdmlydGlvX3Jlc2V0X2RldmljZWAgb3IgYGRlbF92cXModmRldilgISBXaXRoIGBibGtfbXFfcXVpZXNjZV9xdWV1ZShxKWAsIHdlIGdldCB0aGUgbmVjZXNzYXJ5IHdhaXQgZm9yIGNvbXBsZXRpb24uIEJ1dCB3YWl0IC0gdGhpcyBgYmxrX21xX3F1aWVzY2VfcXVldWVgIGNhbiBzbGVlcCAoaXQgY2FsbHMgYHN5bmNocm9uaXplX3JjdWAgb3IgYHN5bmNocm9uaXplX3NyY3VgKS5cblxuU28sIHRoZSBxdWVzdGlvbiBpcywgaXMgaXQgYWxsb3dlZCB0byBzbGVlcCBpbiBgdmlydGJsa19mcmVlemVfcHJpdmA/IExldCdzIGNoZWNrLiBZZXMsIGl0IGRvZXMgYGJsa19tcV9mcmVlemVfcXVldWUocSlgIGFuZCBgZmx1c2hfd29ya2Agd2hpY2ggY2FuIHNsZWVwLlxuXG5BIG1vcmUgaW1wb3J0YW50IHF1ZXN0aW9uIGFyaXNlcy4gQ2FuIHRoaXMgbmV3IGNvZGUgaGFuZyBvciBkZWFkbG9jayBpZiBhIGRpc3BhdGNoIGlzIGJsb2NrZWQgd2FpdGluZyBmb3Igc29tZXRoaW5nPyBUaGlzIGlzIHdoZXJlIHRoZSByZWFsIHZ1bG5lcmFiaWxpdHkgbGllcy4gVGhlIGltcGxpY2F0aW9ucyBhcmUgY2xlYXIuIElmIGEgZGlzcGF0Y2ggaXMgd2FpdGluZyBvbiwgc2F5LCBhIGxvY2sgaGVsZCBkdXJpbmcgdGhpcyBxdWllc2NlIHNlcXVlbmNlLCB3ZSdkIGhhdmUgYSBkZWFkbG9jay4gSSB3b25kZXIgaG93IHRoaXMgaW50ZXJhY3RzIHdpdGggYW55IG90aGVyIGJsb2NraW5nIGNhbGxzIHdpdGhpbiB0aGUgSS9PIHBhdGguXG5cbk5vdywgSSdtIHRoaW5raW5nIGFib3V0IGZ1enppbmcgdGhpcy4gQ2FuIHN5emthbGxlciB0cmlnZ2VyIHRoaXMgc2NlbmFyaW8/XG5cbkkndmUgZ290IHRvIGNvbnNpZGVyIGhvdyBzeXprYWxsZXIgaGFuZGxlcyB0aGluZ3MuIEhvdyBkb2VzIHN5emthbGxlciBmdXp6IFBNLCBQQ0kgcmVzZXRzLCBvciBibG9jayBkZXZpY2VzPyBJIG5lZWQgdG8gY2hlY2sgaWYgc3l6a2FsbGVyIGhhcyB0aGUgcHJpbWl0aXZlcyB0byB0ZXN0IFBNIGZyZWV6ZS9zdXNwZW5kL3Jlc3RvcmUuIExldCdzIHNlZSBpZiBzeXprYWxsZXIgaGFzIHN5c2NhbGwgZGVmaW5pdGlvbnMgb3IsIHNwZWNpZmljYWxseSwgdGVzdHMgUE0gc2xlZXAuXG5cbkFscmlnaHQsIHN5emthbGxlciBhcHBlYXJzIHRvIGhhdmUgc29tZSB0b29sczogYHN5el9tb3VudF9pbWFnZWAsIHN5c2ZzIHdyaXRlcyAobGlrZSBgL3N5cy9wb3dlci9zdGF0ZWApLCBhbmQgZXZlbiB0aGluZ3MgbGlrZSBgL3N5cy9idXMvcGNpL2RldmljZXMvKi9yZXNldGAuIFNvLCBpdCBzZWVtcyBsaWtlIHRoZXJlIG1pZ2h0IGJlIGEgcGF0aC5cblxuTm93LCBhIGtleSBxdWVzdGlvbjogaXMgdmlydGlvX2JsayBlbmFibGVkIGluIGEgc3RhbmRhcmQgc3l6a2FsbGVyIGtlcm5lbCBjb25maWc/IEkgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyBmb3IgYHZpcnRpb19ibGtgLiBJZiBzbywgdGhpcyBpcyBhIHByaW1lIGNhbmRpZGF0ZSBmb3IgYSBzeXprYWxsZXIgdGVzdCwgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIHByb2JlIGZvciB0aGVzZSBxdWllc2NlLXJlbGF0ZWQgZGVhZGxvY2tzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTg2OCwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY3NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwOTowOToxOS40NDAxODM3WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTA3NjIwOTg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBWSVJUSU9fQkxLXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svS2NvbmZpZz0yODY9Y29uZmlnIFhFTl9CTEtERVZfQkFDS0VORFxcbi0tXFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTMwNi1cXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc6MzA3OmNvbmZpZyBWSVJUSU9fQkxLXFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTMwOC1cXHR0cmlzdGF0ZSBcXFwiVmlydGlvIGJsb2NrIGRyaXZlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDk6MDk6MjEuMzQ3ODIzNTE3WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI4MDczNjM1MDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gQmxvY2sgRGV2aWNlIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBsZXQncyB6ZXJvIGluIG9uIHRoZSBibG9jayBkZXZpY2UgY29uZmlndXJhdGlvbi4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGNoZWNrIGBkcml2ZXJzL2Jsb2NrL0tjb25maWdgLiBJJ20gc3BlY2lmaWNhbGx5IGludGVyZXN0ZWQgaW4gd2hhdCdzIGhhcHBlbmluZyBhcm91bmQgbGluZSAzMDcuIFRoYXQgYXJlYSB1c3VhbGx5IGhvbGRzIGNydWNpYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIHRoZSBpbmNsdXNpb24gYW5kIGNvbmZpZ3VyYXRpb24gb2YgdmFyaW91cyBibG9jayBkZXZpY2UgZHJpdmVycywgdGhlaXIgZGVwZW5kZW5jaWVzLCBhbmQgYW55IHJlbGV2YW50IG9wdGlvbnMuIEknbSBleHBlY3RpbmcgdG8gZmluZCBkZXRhaWxzIG9uIGhvdyBzcGVjaWZpYyBmZWF0dXJlcyBvciBkcml2ZXJzIGFyZSBlbmFibGVkIG9yIGRpc2FibGVkIHZpYSBrZXJuZWwgY29uZmlndXJhdGlvbi4gSSdtIGhvcGluZyBpdCBhbHNvIHByb3ZpZGVzIGhpbnRzIG9uIGhvdyB0byBkaWFnbm9zZSBhbnkgcG90ZW50aWFsIGNvbmZsaWN0cyBvciBkZXBlbmRlbmNpZXMuIEZyb20gYSBzeXN0ZW1zIGFyY2hpdGVjdHVyZSBwZXJzcGVjdGl2ZSwgdGhpcyBpcyB3aGVyZSBhIGxvdCBvZiB0aGUgbG93LWxldmVsIGludGVyYWN0aW9ucyBhcmUgZGVjaWRlZCwgc28gaXQgbWFrZXMgc2Vuc2UgdG8gc3RhcnQgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzE1MDgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwOTowOToyNC4xNTUxODk4OTNaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzMxODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9ibG9jay9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMwNSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDMwNTpcXHRcXG4gMzA2OlxcdFxcbiAzMDc6XFx0Y29uZmlnIFZJUlRJT19CTEtcXG4gMzA4OlxcdFxcdHRyaXN0YXRlIFxcXCJWaXJ0aW8gYmxvY2sgZHJpdmVyXFxcIlxcbiAzMDk6XFx0XFx0ZGVwZW5kcyBvbiBWSVJUSU9cXG4gMzEwOlxcdFxcdHNlbGVjdCBTR19QT09MXFxuIDMxMTpcXHRcXHRoZWxwXFxuIDMxMjpcXHRcXHQgIFRoaXMgaXMgdGhlIHZpcnR1YWwgYmxvY2sgZHJpdmVyIGZvciB2aXJ0aW8uICBJdCBjYW4gYmUgdXNlZCB3aXRoXFxuIDMxMzpcXHQgICAgICAgICAgUUVNVSBiYXNlZCBWTU1zIChsaWtlIEtWTSBvciBYZW4pLiAgU2F5IFkgb3IgTS5cXG4gMzE0OlxcdFxcbiAzMTU6XFx0Y29uZmlnIEJMS19ERVZfUkJEXFxuIDMxNjpcXHRcXHR0cmlzdGF0ZSBcXFwiUmFkb3MgYmxvY2sgZGV2aWNlIChSQkQpXFxcIlxcbiAzMTc6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUIFxcdTAwMjZcXHUwMDI2IEJMT0NLXFxuIDMxODpcXHRcXHRzZWxlY3QgQ0VQSF9MSUJcXG4gMzE5OlxcdFxcdGhlbHBcXG4gMzIwOlxcdFxcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCBpbmNsdWRlIHRoZSBSYWRvcyBibG9jayBkZXZpY2UsIHdoaWNoIHN0cmlwZXNcXG4gMzIxOlxcdFxcdCAgYSBibG9jayBkZXZpY2Ugb3ZlciBvYmplY3RzIHN0b3JlZCBpbiB0aGUgQ2VwaCBkaXN0cmlidXRlZCBvYmplY3RcXG4gMzIyOlxcdFxcdCAgc3RvcmUuXFxuIDMyMzpcXHRcXG4gMzI0OlxcdFxcdCAgTW9yZSBpbmZvcm1hdGlvbiBhdCBodHRwOi8vY2VwaC5uZXdkcmVhbS5uZXQvLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwOTowOToyNC4xNTUyNjU0ODRaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjE4ODM4MjE1NDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBEZWNpc2lvbiBmb3IgdmlydGlvX2Jsay5jIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBGaXJzdCwgSSBuZWVkIHRvIHJpZ29yb3VzbHkgYXBwbHkgdGhlIHBhdGNoIGZ1enppbmcgY3JpdGVyaWEuIFRoZSBnb2FsIGlzIHRvIGlkZW50aWZ5IHBvdGVudGlhbCBjcmFzaGVzIG9yIHJlZ3Jlc3Npb25zLiBUaGUgY29yZSBwcmluY2lwbGUgaXMgdGhhdCBmdXp6aW5nIGlzIG9ubHkgdmFsdWFibGUgZm9yIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgKmV4ZWN1dGUqIGluIGEgc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIFRoaXMgcGF0Y2ggaW52b2x2ZXMgY2hhbmdlcyB0byBgdmlydGlvX2Jsay5jYCwgYW5kIHRoYXQncyBhIGRyaXZlciBmb3IgYSB2aXJ0aW8gYmxvY2sgZGV2aWNlLiAgVmlydGlvIGlzICpkZWZpbml0ZWx5KiByZWFjaGFibGUgaW4gc3RhbmRhcmQgUUVNVS4gIFNvIGZhciwgc28gZ29vZC5cblxuTm93LCBsZXQncyBnbyB0aHJvdWdoIHRoZSBuZWdhdGl2ZSBjcml0ZXJpYSwgdGhlIFwid2hlbiB0byByZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlXCIgY2hlY2tsaXN0OlxuXG4xLiAgKipOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOioqICBUaGlzIGlzbid0IGRvY3VtZW50YXRpb24sIHNjcmlwdHMsIG9yIGJ1aWxkIHN5c3RlbSBjaGFuZ2VzLiBOby5cbjIuICAqKlN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToqKiAgVGhpcyBpc24ndCB2ZW5kb3Itc3BlY2lmaWMgUENJZSBoYXJkd2FyZSByZXF1aXJpbmcgYSByZWFsIEFTSUMuIFZpcnRpbyBibG9jayBpcyBmdW5kYW1lbnRhbCB0byBRRU1VLiBUaGlzIGlzIE5PVCB1bnJlYWNoYWJsZS5cbjMuICAqKlVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoqKiBPa2F5LCB0aGlzIGlzIHRoZSBvbmUgdG8gc2NydXRpbml6ZSBjYXJlZnVsbHkuIFRoZSBwYXRjaCBtb2RpZmllcyBgdmlydGJsa19mcmVlemVfcHJpdmAuICBJcyB0aGlzIGEgdGVhcmRvd24gY2FsbGJhY2sgbGlrZSBgLnJlbW92ZWAsIGAuc2h1dGRvd25gLCBvciBgcGNpX3VucmVnaXN0ZXJfZHJpdmVyYCB0aGF0IG9ubHkgaGFwcGVucyBkdXJpbmcgaG90LXVucGx1ZyBvciBtYW51YWwgdW5iaW5kaW5nPyBObyEgSXQncyB1c2VkIGluIGAuZnJlZXplYCAoUE0gc3VzcGVuZC9zbGVlcCkgYW5kIGAucmVzZXRfcHJlcGFyZWAgKHZpcnRpbyByZXNldCBvciBQQ0kgZXJyb3IgaGFuZGxlciByZXNldCkuICBCdXQgY2FuIHRoZXNlIGFjdGlvbnMgaGFwcGVuICpkdXJpbmcgcnVudGltZSo/ICBBYnNvbHV0ZWx5ISBRRU1VIGNhbiBkbyB2aXJ0aW8gYmxvY2sgcmVzZXRzIGFuZCBQTSBzdXNwZW5kLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlLCBzbyB0aGlzIGlzIE5PVCBhIG5lZ2F0aXZlIGNvbmRpdGlvbi5cblxuU28sIG5vbmUgb2YgdGhlIG5lZ2F0aXZlIGNyaXRlcmlhIGFwcGx5LiAgVGhpcyBwYXRjaCAqdG91Y2hlcyBleGVjdXRhYmxlIGNvZGUqLiBBbmQgU2VjdGlvbiAzIHNwZWNpZmljYWxseSBtZW50aW9ucyBcIlJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHNcIiBpbmNsdWRpbmcgZHJpdmVycyB1c2luZyB2aXJ0aW8uIFRoZXJlZm9yZSwgSSBNVVNUIHNldCBgV29ydGhGdXp6aW5nID0gdHJ1ZWAuXG5cbk5vdywgbGV0J3MgZGV0ZXJtaW5lIHRoZSBgRm9jdXNTeW1ib2xzYC4gIFdoYXQgc3BlY2lmaWMgc3ltYm9scyBzaG91bGQgdGhlIGZ1enplciB0YXJnZXQ/IFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgYXJvdW5kIGB2aXJ0YmxrX2ZyZWV6ZV9wcml2YC4gU2luY2UgdGhpcyBpcyBhIHN0YXRpYyBmdW5jdGlvbiB3aXRoaW4gYSAuYyBmaWxlLCBpdCAqd2lsbCogaGF2ZSBhIHN5bWJvbC4gSSAqZG9uJ3QqIG5lZWQgdG8gd29ycnkgYWJvdXQgc3RhdGljIGlubGluZXMgaW4gaGVhZGVycy4gTGV0J3MgdHJhY2UgaXQgZG93bjogYHZpcnRibGtfZnJlZXplX3ByaXZgIGlzIGNhbGxlZCBieSBgdmlydGJsa19mcmVlemVgIGFuZCBgdmlydGJsa19yZXNldF9wcmVwYXJlYCwgYm90aCBvZiB3aGljaCBhcmUgYWxzbyB3aXRoaW4gYGRyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jYC4gQWxsIHRoZSBmdW5jdGlvbnMgdG91Y2hlZCBhcmUgZmVhdHVyZS1zcGVjaWZpYyBhbmQgYXJlICpub3QqIGEgdWJpcXVpdG91cyBob3QtcGF0aCBmdW5jdGlvbi4gIEkgY2FuIGluY2x1ZGUgdGhvc2UgZnVuY3Rpb25zIHRvIHNwZWNpZmljYWxseSB0YXJnZXQgdGhlIGxvZ2ljLiBUaGF0J3MgY2xlYW4gYW5kIHRhcmdldGVkLiBJdCdzIHRoZSBjbGVhbmVzdCB3YXkgdG8gZm9jdXMgZnV6emluZyBvbiB0aGUgY2hhbmdlcyB0aGVtc2VsdmVzLlxuXG5UaGVyZWZvcmUsIHRoZSBhcHByb3ByaWF0ZSBgRm9jdXNTeW1ib2xzYCBhcmU6XG4qICAgYHZpcnRibGtfZnJlZXplX3ByaXZgXG4qICAgYHZpcnRibGtfZnJlZXplYFxuKiAgIGB2aXJ0YmxrX3Jlc2V0X3ByZXBhcmVgXG5cbk5leHQsIHRoZSBgRW5hYmxlQ29uZmlnc2AgYXJlIHRob3NlIG5lZWRlZCB0byBjb21waWxlIGFuZCBydW4gdmlydGlvLWJsay4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSByZWxldmFudCBgTWFrZWZpbGVgIGZvciB0aGUgbmVjZXNzYXJ5IEtjb25maWcgb3B0aW9ucyB0byBlbmFibGUgYHZpcnRpb19ibGsuY2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyMDE4LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQ5MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDA5OjA5OjQ2LjAzOTA4OTE3NFoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTAwMTU1NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmlydGlvX2Jsa1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svTWFrZWZpbGU9MjU9b2JqLSQoQ09ORklHX0JMS19ERVZfTkJEKVxcdCs9IG5iZC5vXFxuZHJpdmVycy9ibG9jay9NYWtlZmlsZToyNjpvYmotJChDT05GSUdfVklSVElPX0JMSylcXHQrPSB2aXJ0aW9fYmxrLm9cXG5kcml2ZXJzL2Jsb2NrL01ha2VmaWxlLTI3LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwOTowOTo0Ni4wODkxMTE4NTNaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjE2OTY0NDkxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLZXJuZWwgQ29uZmlndXJhdGlvbiBJbnF1aXJ5KipcblxuT2theSwgc28gSSBuZWVkIHRvIG1ha2Ugc3VyZSBgdmlydGlvX2Jsay5vYCBpcyBnb2luZyB0byBidWlsZC4gVGhhdCBtZWFucyBJIG5lZWQgYENPTkZJR19WSVJUSU9fQkxLYCBlbmFibGVkLiBMZXQncyBzdGFydCBieSBsb29raW5nIGF0IGBkcml2ZXJzL2Jsb2NrL0tjb25maWdgIHRvIHNlZSBpZiBpdCdzIGRlZmluZWQgYW5kIGhvdyBpdCdzIGNvbmZpZ3VyZWQuIEFoLCB0aGVyZSBpdCBpcyEgYENPTkZJR19WSVJUSU9fQkxLYCBpcyBhIHRyaXN0YXRlIG9wdGlvbiBhbmQgZGVwZW5kcyBvbiBgVklSVElPYCwgYW5kIGFsc28gc2VsZWN0cyBgU0dfUE9PTGAuIEludGVyZXN0aW5nLiBOb3csIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIHRoYXQgdGhlIGRlcGVuZGVuY3kgb24gYFZJUlRJT2AgaXMgYWxzbyBtZXQuIEkgc2hvdWxkIHByb2JhYmx5IG5vdyBnbyBjaGVjayBgZHJpdmVycy92aXJ0aW8vS2NvbmZpZ2AgdG8gY29uZmlybSB0aGF0IGBDT05GSUdfVklSVElPYCBpcyBkZWZpbmVkIGFuZCBlbmFibGVkIGFzIG5lZWRlZC4gVGltZSB0byBkZWx2ZSBpbnRvIHRoZSB2aXJ0aW8gY29uZmlndXJhdGlvbiBhbmQgbWFrZSBzdXJlIGV2ZXJ5dGhpbmcgaXMgaW4gcGxhY2UgZm9yIGEgc3VjY2Vzc2Z1bCBidWlsZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzUyOTYsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDk6MDk6NDguMjU4NzU5NjE2WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjI1NDI2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVklSVElPXFxcXGJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy92aXJ0aW8vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmlydGlvL0tjb25maWc9Mj1jb25maWcgVklSVElPX0FOQ0hPUlxcbi0tXFxuZHJpdmVycy92aXJ0aW8vS2NvbmZpZy00LVxcbmRyaXZlcnMvdmlydGlvL0tjb25maWc6NTpjb25maWcgVklSVElPXFxuZHJpdmVycy92aXJ0aW8vS2NvbmZpZy02LVxcdHRyaXN0YXRlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDA5OjA5OjQ4LjMwNTAyMjQ3MVoiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyOTk1MDg1MDYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoYXQgS2NvbmZpZyBmaWxlOlxuXG4qKkludmVzdGlnYXRpbmcgVmlydGlvIERyaXZlciBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGBkcml2ZXJzL3ZpcnRpby9LY29uZmlnYCBmaWxlLiBJJ20gZ29pbmcgdG8ganVtcCByaWdodCB0byBhcm91bmQgbGluZSA1IHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgYmlnZ2VyIHBpY3R1cmUuIEknbSBsb29raW5nIGZvciB0aGUgY29yZSBkZXBlbmRlbmNpZXMgYW5kIHRoZSB2YXJpb3VzIHRyYW5zcG9ydCBvcHRpb25zLCBlc3BlY2lhbGx5IHRoaW5ncyBsaWtlIGBWSVJUSU9fUENJYCwgc2luY2UgdGhhdCdzIGEgY29tbW9uIG9uZS4gR2V0dGluZyBhIHF1aWNrIG92ZXJ2aWV3IG9mIHRoZSBjb25kaXRpb25hbCBsb2dpYyBhdCB0aGUgdG9wIG9mIHRoZSBmaWxlIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXBzIGJldHdlZW4gdGhlIGRpZmZlcmVudCBWaXJ0aW8gZmVhdHVyZXMgYW5kIHRoZWlyIHVuZGVybHlpbmcgaGFyZHdhcmUgb3Igc3lzdGVtIGNvbmZpZ3VyYXRpb25zLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgc29saWQgZm91bmRhdGlvbiBmb3IgdW5kZXJzdGFuZGluZyB0aGUgcmVzdCBvZiB0aGUgZmlsZSBhbmQgaG93IHRoZSBkcml2ZXIgaXMgc3RydWN0dXJlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzU2ODcsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwOTowOTo1MS4zMDAxMTAxNzFaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODI1NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy92aXJ0aW8vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0Y29uZmlnIFZJUlRJT19BTkNIT1JcXG4gICAzOlxcdFxcdGJvb2xcXG4gICA0OlxcdFxcbiAgIDU6XFx0Y29uZmlnIFZJUlRJT1xcbiAgIDY6XFx0XFx0dHJpc3RhdGVcXG4gICA3OlxcdFxcdHNlbGVjdCBWSVJUSU9fQU5DSE9SXFxuICAgODpcXHRcXHRoZWxwXFxuICAgOTpcXHRcXHQgIFRoaXMgb3B0aW9uIGlzIHNlbGVjdGVkIGJ5IGFueSBkcml2ZXIgd2hpY2ggaW1wbGVtZW50cyB0aGUgdmlydGlvXFxuICAxMDpcXHRcXHQgIGJ1cywgc3VjaCBhcyBDT05GSUdfVklSVElPX1BDSSwgQ09ORklHX1ZJUlRJT19NTUlPLCBDT05GSUdfUlBNU0dcXG4gIDExOlxcdFxcdCAgb3IgQ09ORklHX1MzOTBfR1VFU1QuXFxuICAxMjpcXHRcXG4gIDEzOlxcdGNvbmZpZyBWSVJUSU9fUENJX0xJQlxcbiAgMTQ6XFx0XFx0dHJpc3RhdGVcXG4gIDE1OlxcdFxcdGhlbHBcXG4gIDE2OlxcdFxcdCAgTW9kZXJuIFBDSSBkZXZpY2UgaW1wbGVtZW50YXRpb24uIFRoaXMgbW9kdWxlIGltcGxlbWVudHMgdGhlXFxuICAxNzpcXHRcXHQgIGJhc2ljIHByb2JlIGFuZCBjb250cm9sIGZvciBkZXZpY2VzIHdoaWNoIGFyZSBiYXNlZCBvbiBtb2Rlcm5cXG4gIDE4OlxcdFxcdCAgUENJIGRldmljZSB3aXRoIHBvc3NpYmxlIHZlbmRvciBzcGVjaWZpYyBleHRlbnNpb25zLiBBbnlcXG4gIDE5OlxcdFxcdCAgbW9kdWxlIHRoYXQgc2VsZWN0cyB0aGlzIG1vZHVsZSBtdXN0IGRlcGVuZCBvbiBQQ0kuXFxuICAyMDpcXHRcXG4gIDIxOlxcdGNvbmZpZyBWSVJUSU9fUENJX0xJQl9MRUdBQ1lcXG4gIDIyOlxcdFxcdHRyaXN0YXRlXFxuICAyMzpcXHRcXHRoZWxwXFxuICAyNDpcXHRcXHQgIExlZ2FjeSBQQ0kgZGV2aWNlIChWaXJ0aW8gUENJIENhcmQgMC45LnggRHJhZnQgYW5kIG9sZGVyIGRldmljZSlcXG4gIDI1OlxcdFxcdCAgaW1wbGVtZW50YXRpb24uXFxuICAyNjpcXHRcXHQgIFRoaXMgbW9kdWxlIGltcGxlbWVudHMgdGhlIGJhc2ljIHByb2JlIGFuZCBjb250cm9sIGZvciBkZXZpY2VzXFxuICAyNzpcXHRcXHQgIHdoaWNoIGFyZSBiYXNlZCBvbiBsZWdhY3kgUENJIGRldmljZS4gQW55IG1vZHVsZSB0aGF0IHNlbGVjdHMgdGhpc1xcbiAgMjg6XFx0XFx0ICBtb2R1bGUgbXVzdCBkZXBlbmQgb24gUENJLlxcbiAgMjk6XFx0XFxuICAzMDpcXHRtZW51Y29uZmlnIFZJUlRJT19NRU5VXFxuICAzMTpcXHRcXHRib29sIFxcXCJWaXJ0aW8gZHJpdmVyc1xcXCJcXG4gIDMyOlxcdFxcdGRlZmF1bHQgeVxcbiAgMzM6XFx0XFxuICAzNDpcXHRpZiBWSVJUSU9fTUVOVVxcbiAgMzU6XFx0XFxuICAzNjpcXHRjb25maWcgVklSVElPX0hBUkRFTl9OT1RJRklDQVRJT05cXG4gIDM3OlxcdCAgICAgICAgYm9vbCBcXFwiSGFyZGVuIHZpcnRpbyBub3RpZmljYXRpb25cXFwiXFxuICAzODpcXHQgICAgICAgIGRlcGVuZHMgb24gQlJPS0VOXFxuICAzOTpcXHQgICAgICAgIGhlbHBcXG4gIDQwOlxcdCAgICAgICAgICBFbmFibGUgdGhpcyB0byBoYXJkZW4gdGhlIGRldmljZSBub3RpZmljYXRpb25zIGFuZCBzdXBwcmVzc1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwOTowOTo1MS4zMDAxOTUxMzFaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTk3NjA2MzQ4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIFZJUlRJTyBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gYFZJUlRJT2AgaXMgZ2V0dGluZyBjaG9zZW4sIGFuZCB0aGF0J3MgaGFwcGVuaW5nIHNwZWNpZmljYWxseSB0aHJvdWdoIGBWSVJUSU9fUENJYC4gQWxyaWdodCwgdGhhdCBtYWtlcyBzZW5zZS4gVGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgYW5kIGRpdmUgcmlnaHQgaW50byB0aGUgYEtjb25maWdgIGZpbGVzLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBjaGVjayB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBgQ09ORklHX1ZJUlRJT19QQ0lgLiBJJ2xsIGhlYWQgb3ZlciB0byBgZHJpdmVycy92aXJ0aW8vS2NvbmZpZ2AgdG8gc2VlIHdoYXQncyBkcml2aW5nICp0aGlzKiBkZWNpc2lvbi4gR290dGEgdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIGFuZCB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUuIExldCdzIHNlZSB3aGF0IHdlJ3ZlIGdvdCBpbiB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzY0MjAsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDA5OjA5OjUzLjI3NjI2MTk1NVoiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkxOTkxOTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFZJUlRJT19QQ0lcXFxcYlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3ZpcnRpby9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy92aXJ0aW8vS2NvbmZpZz0zNj1jb25maWcgVklSVElPX0hBUkRFTl9OT1RJRklDQVRJT05cXG4tLVxcbmRyaXZlcnMvdmlydGlvL0tjb25maWctNDktXFxuZHJpdmVycy92aXJ0aW8vS2NvbmZpZzo1MDpjb25maWcgVklSVElPX1BDSVxcbmRyaXZlcnMvdmlydGlvL0tjb25maWctNTEtXFx0dHJpc3RhdGUgXFxcIlBDSSBkcml2ZXIgZm9yIHZpcnRpbyBkZXZpY2VzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwOTowOTo1My4zMjU0NjU2MTNaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NTI4NjY3NTg2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBWaXJ0aW8tYmxrIFBvd2VyIE1hbmFnZW1lbnQgYW5kIFJlc2V0IExvZ2ljKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpbW1lZGlhdGVseSBzZWUgdGhhdCBgQ09ORklHX1BNX1NMRUVQYCBpcyB0aGUga2V5IHByZXByb2Nlc3NvciBkaXJlY3RpdmUgY29udHJvbGxpbmcgdGhlIGluY2x1c2lvbiBvZiB0aGUgYHZpcnRibGtfZnJlZXplYCBmdW5jdGlvbiB3aXRoaW4gYHZpcnRpb19ibGsuY2AuIFRoaXMgaXMgaW1wb3J0YW50LCBhcyBgdmlydGJsa19mcmVlemVgIGlzIGxpbmtlZCB0byBwb3dlciBtYW5hZ2VtZW50IGZ1bmN0aW9uYWxpdHksIGFuZCBsaWtlbHkgaGFuZGxlcyB0aGUgc3VzcGVuZCBwcm9jZXNzLiBTaW5jZSBgVklSVElPX0JMS2AgY29tcGlsZXMgYHZpcnRpb19ibGsuY2AsIGFuZCBgVklSVElPX1BDSWAgcHJvdmlkZXMgdGhlIFBDSSB0cmFuc3BvcnQgZm9yIHZpcnRpbyBkZXZpY2VzIChhbmQgaW5jbHVkZXMgdGhlIGNydWNpYWwgYHZpcnRpb19wY2lfcmVzZXRfcHJlcGFyZWAgcmVzZXQgaGFuZGxlciksIGl0J3Mgc2FmZSB0byBhc3N1bWUgYFBDSWAgaXMgZm91bmRhdGlvbmFsIGZvciBgVklSVElPX1BDSWAgdG8gb3BlcmF0ZS5cblxuVG8gY29uZmlybSBteSB1bmRlcnN0YW5kaW5nLCBsZXQncyBqdXN0IG1ha2UgYSBxdWljayBtZW50YWwgbGlzdCBvZiB0aGUgY29uZmlnIG9wdGlvbnMgYXQgcGxheSBoZXJlOiBgVklSVElPX0JMS2AsIGBWSVJUSU9fUENJYCwgYFBNX1NMRUVQYCwgYW5kIGBQQ0lgLiBHb3QgaXQuXG5cbk5vdywgbGV0J3MgcXVpY2tseSByZXZpZXcgdGhlIGNvcmUgc3ltYm9scyBpbnZvbHZlZDogYHZpcnRibGtfZnJlZXplX3ByaXZgLCBgdmlydGJsa19yZXNldF9wcmVwYXJlYCwgYW5kIGB2aXJ0YmxrX2ZyZWV6ZWAuIEknbSBhbHJlYWR5IGF3YXJlIG9mIHRoZWlyIGZ1bmN0aW9uLlxuXG5GaW5hbGx5LCBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBzb2xpZCBvbiB0aGUgcmVhc29uaW5nIGZvciB0aGlzIHBhdGNoLiBJIHVuZGVyc3RhbmQgaXQgcmVwbGFjZXMgdGhlIG5vbi1ibG9ja2luZyBgYmxrX21xX3F1aWVzY2VfcXVldWVfbm93YWl0KHEpYCB3aXRoIHRoZSBibG9ja2luZyBgYmxrX21xX3F1aWVzY2VfcXVldWUocSlgIHdpdGhpbiBgdmlydGJsa19mcmVlemVfcHJpdigpYC4gVGhpcyBlbnN1cmVzIGFsbCBpbi1mbGlnaHQgcmVxdWVzdHMgYXJlIGNvbXBsZXRlZCBiZWZvcmUgdGhlIHZpcnRxdWV1ZXMgYXJlIHRvcm4gZG93bi4gVGhpcyBmdW5jdGlvbiBpcyByZWFjaGFibGUgaW4gdHdvIHdheXM6IHRocm91Z2ggdGhlIFBDSSByZXNldCBvciB0aHJvdWdoIHRoZSBwb3dlciBtYW5hZ2VtZW50IGZyZWV6ZS9zdXNwZW5kIHByb2Nlc3MuIEl0IGxvb2tzIGxpa2UgdGhlIFBDSSByZXNldCBpcyB0cmlnZ2VyZWQgdmlhIHN5c2ZzLCBvciB0aGUgYHZpcnRibGtfcmVzZXRfcHJlcGFyZWAuIEJlY2F1c2UgdGhpcyBpcyBhIHRvdWNoIHRvIGxpdmUgZHJpdmVyIGNvZGUgaW4gYSB2aXJ0aW8gZW52aXJvbm1lbnQsIGZ1enppbmcgaXMgYWJzb2x1dGVseSB3YXJyYW50ZWQgdG8gZW5zdXJlIHRoaXMgY2hhbmdlIGRvZXNuJ3QgaW50cm9kdWNlIGFueSByZWdyZXNzaW9ucyBvciB1bmV4cGVjdGVkIGJlaGF2aW9yLiBBbGwgc2VlbXMgZ29vZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzY3MjUsIk91dHB1dFRva2VucyI6MjA4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDA5OjA5OjU4LjYxMjE0ODI5NVoiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczNDE4MTEyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJWSVJUSU9fQkxLXCIsXG4gICAgXCJWSVJUSU9fUENJXCIsXG4gICAgXCJQTV9TTEVFUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZpcnRibGtfZnJlZXplX3ByaXZcIixcbiAgICBcInZpcnRibGtfcmVzZXRfcHJlcGFyZVwiLFxuICAgIFwidmlydGJsa19mcmVlemVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB2aXJ0YmxrX2ZyZWV6ZV9wcml2KCkgaW4gdGhlIHZpcnRpbyBibG9jayBkcml2ZXIgKGRyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jKSB0byB1c2UgYmxrX21xX3F1aWVzY2VfcXVldWUoKSBpbnN0ZWFkIG9mIGJsa19tcV9xdWllc2NlX3F1ZXVlX25vd2FpdCgpLCBlbnN1cmluZyB0aGF0IGFsbCBwZW5kaW5nIHJlcXVlc3QgZGlzcGF0Y2hlcyBjb21wbGV0ZSBiZWZvcmUgZGVsZXRpbmcgdmlydHF1ZXVlcy4gVmlydGlvIGJsb2NrIGRldmljZXMgYXJlIGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgdmlydHVhbGl6ZWQgdGVzdCBlbnZpcm9ubWVudHMgYW5kIHRoaXMgcGF0aCBpcyByZWFjaGFibGUgdmlhIFBDSSByZXNldCAodmlydGJsa19yZXNldF9wcmVwYXJlKSBvciBwb3dlciBtYW5hZ2VtZW50IHN1c3BlbmQgKHZpcnRibGtfZnJlZXplKS4gU2luY2UgdGhlIHBhdGNoIG1vZGlmaWVzIHJlYWNoYWJsZSBkcml2ZXIgbG9naWMgb24gYSB2aXJ0dWFsIGJ1cywgaXQgaXMgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJWSVJUSU9fQkxLXCIsXG4gICAgXCJWSVJUSU9fUENJXCIsXG4gICAgXCJQTV9TTEVFUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZpcnRibGtfZnJlZXplX3ByaXZcIixcbiAgICBcInZpcnRibGtfcmVzZXRfcHJlcGFyZVwiLFxuICAgIFwidmlydGJsa19mcmVlemVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB2aXJ0YmxrX2ZyZWV6ZV9wcml2KCkgaW4gdGhlIHZpcnRpbyBibG9jayBkcml2ZXIgKGRyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jKSB0byB1c2UgYmxrX21xX3F1aWVzY2VfcXVldWUoKSBpbnN0ZWFkIG9mIGJsa19tcV9xdWllc2NlX3F1ZXVlX25vd2FpdCgpLCBlbnN1cmluZyB0aGF0IGFsbCBwZW5kaW5nIHJlcXVlc3QgZGlzcGF0Y2hlcyBjb21wbGV0ZSBiZWZvcmUgZGVsZXRpbmcgdmlydHF1ZXVlcy4gVmlydGlvIGJsb2NrIGRldmljZXMgYXJlIGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgdmlydHVhbGl6ZWQgdGVzdCBlbnZpcm9ubWVudHMgYW5kIHRoaXMgcGF0aCBpcyByZWFjaGFibGUgdmlhIFBDSSByZXNldCAodmlydGJsa19yZXNldF9wcmVwYXJlKSBvciBwb3dlciBtYW5hZ2VtZW50IHN1c3BlbmQgKHZpcnRibGtfZnJlZXplKS4gU2luY2UgdGhlIHBhdGNoIG1vZGlmaWVzIHJlYWNoYWJsZSBkcml2ZXIgbG9naWMgb24gYSB2aXJ0dWFsIGJ1cywgaXQgaXMgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDk6MDk6NTguNjg1NTc0NDM3WiIsIlNlcSI6NDMsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjgyNjcyMDQzMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDA5OjA5OjU4LjY4Njg3OTY4OVoiLCJTZXEiOjQ0LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjEyODI1NDEwMzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZXBsYWNlcyBibGtfbXFfcXVpZXNjZV9xdWV1ZV9ub3dhaXQocSkgd2l0aCBibGtfbXFfcXVpZXNjZV9xdWV1ZShxKSBpbiB2aXJ0YmxrX2ZyZWV6ZV9wcml2KCkgdG8gZW5zdXJlIHRoYXQgaW4tZmxpZ2h0IHJlcXVlc3RzIGFuZCBoYW5kbGVycyBmaW5pc2ggYmVmb3JlIHRoZSB2aXJ0cXVldWVzIGFyZSBkZWxldGVkIGFuZCBmcmVlZC5cXG5cXG5LTVNBTiB2cyBLQVNBTiBBcHBsaWNhYmlsaXR5Olxcbi0gS01TQU4gZGV0ZWN0cyByZWFkcyBhbmQgaW5mb3JtYXRpb24gbGVha3Mgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoaXMgcGF0Y2ggZG9lcyBub3QgYWxsb2NhdGUgbmV3IG1lbW9yeSwgaW5pdGlhbGl6ZSBvciByZWFkIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcywgY29weSBkYXRhIHRvIHVzZXIgc3BhY2UsIG9yIGFsdGVyIGRhdGEgbGVuZ3RoL2JvdW5kcyBjYWxjdWxhdGlvbnMuIFRoZXJlIGlzIHplcm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZS5cXG4tIFRoZSBjaGFuZ2UgYWRkcmVzc2VzIHJlcXVlc3QtcXVldWUgc3luY2hyb25pemF0aW9uIGFuZCBjb25jdXJyZW5jeSBkdXJpbmcgdmlydGlvLWJsayBkZXZpY2UgZnJlZXppbmcuIEFueSBidWdzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHBhdGggKHN1Y2ggYXMgcmFjZSBjb25kaXRpb25zLCBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGFjY2Vzc2VzIGR1cmluZyBxdWV1ZSB0ZWFyZG93bikgYXJlIHRyYWNrZWQgYW5kIGNhdWdodCBieSBLQVNBTiBhbmQgTE9DS0RFUC5cXG5cXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGVhNjFjNTc3ZTEzNzFhMDZkYzM5MGEzY2E2YjMyMWYwNWE2NzQyMzRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IFNlcCAxMiAwOTowODowNSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jIGIvZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmNcbmluZGV4IDMyYmYzYmEwN2E5ZGMuLjdhNTcwNTkxZTA0MGEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuY1xuKysrIGIvZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmNcbkBAIC0xNTk1LDcgKzE1OTUsNyBAQCBzdGF0aWMgaW50IHZpcnRibGtfZnJlZXplX3ByaXYoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpXG4gXG4gXHQvKiBFbnN1cmUgbm8gcmVxdWVzdHMgaW4gdmlydHF1ZXVlcyBiZWZvcmUgZGVsZXRpbmcgdnFzLiAqL1xuIFx0bWVtZmxhZ3MgPSBibGtfbXFfZnJlZXplX3F1ZXVlKHEpO1xuLVx0YmxrX21xX3F1aWVzY2VfcXVldWVfbm93YWl0KHEpO1xuK1x0YmxrX21xX3F1aWVzY2VfcXVldWUocSk7XG4gXHRibGtfbXFfdW5mcmVlemVfcXVldWUocSwgbWVtZmxhZ3MpO1xuIFxuIFx0LyogRW5zdXJlIHdlIGRvbid0IHJlY2VpdmUgYW55IG1vcmUgaW50ZXJydXB0cyAqL1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDk6MDk6NTguNjg2ODgyMDM5WiIsIlNlcSI6NDUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjUzOTY1Mjc2MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gSnVzdGlmaWNhdGlvbiBmb3IgVmlydGlvLWJsay5jIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGFza2VkIHRvIGFzc2VzcyB3aGV0aGVyIHRoaXMgcGF0Y2ggdG8gYGRyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jYCB3YXJyYW50cyBhIGRlZGljYXRlZCBLZXJuZWwgTWVtb3J5IFNhbml0aXplciAoS01TQU4pIHNlc3Npb24uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBsZXQncyBkaXZlIGluIGFuZCBzZWUgd2hhdCdzIGNoYW5nZWQuIEkgd2FudCBhIHByb3BlciBhbmFseXNpcywgbm90IGp1c3QgYSBndXQgZmVlbGluZy5cblxuSSdtIGxvb2tpbmcgYXQgdGhlIGRpZmY6IGBibGtfbXFfcXVpZXNjZV9xdWV1ZV9ub3dhaXQocSlgIGhhcyBiZWVuIGNoYW5nZWQgdG8gYGJsa19tcV9xdWllc2NlX3F1ZXVlKHEpYC4gVGhhdCdzIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgaGVyZS4gUXVpZXNjaW5nIGEgcXVldWUuLi4gdGhhdCdzIHVzdWFsbHkgYWJvdXQgZW5zdXJpbmcgdGhhdCBubyBmdXJ0aGVyIG9wZXJhdGlvbnMgYXJlIHN1Ym1pdHRlZCB0byBpdC4gVGhpcyBzdWdnZXN0cyBhIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbiBvciBtZW1vcnkgc2FmZXR5IGNvbmNlcm4gZHVyaW5nIGZyZWV6ZS90aGF3IG9wZXJhdGlvbnMsIHdoaWNoIGlzIGFsd2F5cyB3b3J0aCBhIGNsb3NlciBsb29rLlxuXG5MZXQgbWUgcmVhZCB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiBgdmlydGlvX2Jsay5jYCBhcm91bmQgbGluZSAxNTk1IHVzaW5nIHRoZSBgcmVhZC1maWxlYCBjb21tYW5kLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgKmNvbnRleHQqIG9mIHRoaXMgcXVpZXNjZSBvcGVyYXRpb24uIFdoYXQncyBgdmlydGJsa19mcmVlemVfcHJpdmAgdHJ5aW5nIHRvIGFjaGlldmU/IElzIGl0IGNyaXRpY2FsIGZvciBkYXRhIGludGVncml0eT8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBpZiBhIHJhY2UgY29uZGl0aW9uIHdlcmUgdG8gb2NjdXIgaGVyZT8gSSBuZWVkIHRvIGFuYWx5emUgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZ3Jhc3AgdGhlIGludGVudCBvZiB0aGVzZSBsaW5lcy5cblxuTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgdGhpcyBjaGFuZ2UgKm1pZ2h0KiBiZSBzaWduaWZpY2FudCBmcm9tIGEgbWVtb3J5IHNhZmV0eSBwZXJzcGVjdGl2ZS4gQSBzeW5jaHJvbm91cyBxdWllc2NlIGluc3RlYWQgb2YgYW4gYXN5bmNocm9ub3VzIG9uZSBjb3VsZCBhbHRlciB0aW1pbmcgYW5kIHRoZSBwb3RlbnRpYWwgZm9yIGNvbmN1cnJlbnQgYWNjZXNzLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGlzIGltcGFjdHMgdGhlIG92ZXJhbGwgZmxvdyBvZiBkYXRhIGFuZCBjb21tYW5kcywgZXNwZWNpYWxseSByZWdhcmRpbmcgdGhvc2UgbWVtb3J5IGZsYWdzLiBUaGlzIGNlcnRhaW5seSBtZXJpdHMgZnVydGhlciBpbnZlc3RpZ2F0aW9uIHVuZGVyIEtNU0FOLiBJIHRoaW5rIGl0IHdvdWxkIGJlIGEgZ29vZCBpZGVhIHRvIHBlcmZvcm0gYSBkZWVwZXIgYW5hbHlzaXMgd2l0aCBLTVNBTiB0byBlbnN1cmUgdGhlcmUgYXJlIG5vIHVuaW50ZW5kZWQgY29uc2VxdWVuY2VzLiBMZXQncyBkaWcgaW4gYW5kIGZpZ3VyZSBvdXQgaWYgS01TQU4gaXMgcmVhbGx5IG5lZWRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjEwMSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5MSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDA5OjEwOjA0LjA4MzQxMjk5OVoiLCJTZXEiOjQ2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDAxODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTU4NSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTU4NTpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNnZibGstXFx1MDAzZXZkZXZfbXV0ZXgpO1xcbjE1ODY6XFx0XFxuMTU4NzpcXHRcXHRwdXRfZGlzayh2YmxrLVxcdTAwM2VkaXNrKTtcXG4xNTg4OlxcdH1cXG4xNTg5OlxcdFxcbjE1OTA6XFx0c3RhdGljIGludCB2aXJ0YmxrX2ZyZWV6ZV9wcml2KHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KVxcbjE1OTE6XFx0e1xcbjE1OTI6XFx0XFx0c3RydWN0IHZpcnRpb19ibGsgKnZibGsgPSB2ZGV2LVxcdTAwM2Vwcml2O1xcbjE1OTM6XFx0XFx0c3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSB2YmxrLVxcdTAwM2VkaXNrLVxcdTAwM2VxdWV1ZTtcXG4xNTk0OlxcdFxcdHVuc2lnbmVkIGludCBtZW1mbGFncztcXG4xNTk1OlxcdFxcbjE1OTY6XFx0XFx0LyogRW5zdXJlIG5vIHJlcXVlc3RzIGluIHZpcnRxdWV1ZXMgYmVmb3JlIGRlbGV0aW5nIHZxcy4gKi9cXG4xNTk3OlxcdFxcdG1lbWZsYWdzID0gYmxrX21xX2ZyZWV6ZV9xdWV1ZShxKTtcXG4xNTk4OlxcdFxcdGJsa19tcV9xdWllc2NlX3F1ZXVlKHEpO1xcbjE1OTk6XFx0XFx0YmxrX21xX3VuZnJlZXplX3F1ZXVlKHEsIG1lbWZsYWdzKTtcXG4xNjAwOlxcdFxcbjE2MDE6XFx0XFx0LyogRW5zdXJlIHdlIGRvbid0IHJlY2VpdmUgYW55IG1vcmUgaW50ZXJydXB0cyAqL1xcbjE2MDI6XFx0XFx0dmlydGlvX3Jlc2V0X2RldmljZSh2ZGV2KTtcXG4xNjAzOlxcdFxcbjE2MDQ6XFx0XFx0LyogTWFrZSBzdXJlIG5vIHdvcmsgaGFuZGxlciBpcyBhY2Nlc3NpbmcgdGhlIGRldmljZS4gKi9cXG4xNjA1OlxcdFxcdGZsdXNoX3dvcmsoXFx1MDAyNnZibGstXFx1MDAzZWNvbmZpZ193b3JrKTtcXG4xNjA2OlxcdFxcbjE2MDc6XFx0XFx0dmRldi1cXHUwMDNlY29uZmlnLVxcdTAwM2VkZWxfdnFzKHZkZXYpO1xcbjE2MDg6XFx0XFx0a2ZyZWUodmJsay1cXHUwMDNldnFzKTtcXG4xNjA5OlxcdFxcdC8qXFxuMTYxMDpcXHRcXHQgKiBTZXQgdG8gTlVMTCB0byBwcmV2ZW50IGZyZWVpbmcgdnFzIGFnYWluIGFmdGVyIGEgZmFpbGVkIHZxc1xcbjE2MTE6XFx0XFx0ICogYWxsb2NhdGlvbiBkdXJpbmcgcmVzdW1lLiBOb3RlIHRoYXQga2ZyZWUoKSBhbHJlYWR5IGhhbmRsZXMgTlVMTFxcbjE2MTI6XFx0XFx0ICogcG9pbnRlcnMgc2FmZWx5LlxcbjE2MTM6XFx0XFx0ICovXFxuMTYxNDpcXHRcXHR2YmxrLVxcdTAwM2V2cXMgPSBOVUxMO1xcbjE2MTU6XFx0XFxuMTYxNjpcXHRcXHRyZXR1cm4gMDtcXG4xNjE3OlxcdH1cXG4xNjE4OlxcdFxcbjE2MTk6XFx0c3RhdGljIGludCB2aXJ0YmxrX3Jlc3RvcmVfcHJpdihzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldilcXG4xNjIwOlxcdHtcXG4xNjIxOlxcdFxcdHN0cnVjdCB2aXJ0aW9fYmxrICp2YmxrID0gdmRldi1cXHUwMDNlcHJpdjtcXG4xNjIyOlxcdFxcdGludCByZXQ7XFxuMTYyMzpcXHRcXG4xNjI0OlxcdFxcdHJldCA9IGluaXRfdnEodmRldi1cXHUwMDNlcHJpdik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDA5OjEwOjA0LjA4MzU1NjY3WiIsIlNlcSI6NDcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjc0Mjg3MTEzMjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQXNzZXNzbWVudDogdmlydGlvLWJsayBRdWV1ZSBRdWllc2NpbmcgU3luY2hyb25pemF0aW9uIEZpeCoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGNvcmUgb2YgdGhpcyBjaGFuZ2UgaW52b2x2ZXMgc3dhcHBpbmcgb3V0IGBibGtfbXFfcXVpZXNjZV9xdWV1ZV9ub3dhaXQocSlgIGZvciBgYmxrX21xX3F1aWVzY2VfcXVldWUocSlgLiBUaGUgY3JpdGljYWwgZGlmZmVyZW5jZSBpcyB0aGUgd2FpdGluZyBiZWhhdmlvcjogdGhlIGBub3dhaXRgIHZlcnNpb24gZG9lc24ndCBlbnN1cmUgdGhlIGNvbXBsZXRpb24gb2YgaW4tZmxpZ2h0IHJlcXVlc3RzIGJlZm9yZSBwcm9jZWVkaW5nLCB3aGlsZSB0aGUgc3RhbmRhcmQgdmVyc2lvbiAqZG9lcyouIFRoZSBjb21tZW50IGNsZWFybHkgcG9pbnRzIG91dCB0aGUgbW90aXZhdGlvbjogdG8gcHJldmVudCBhIHJhY2Ugd2hlcmUgcmVxdWVzdHMgbWlnaHQgc3RpbGwgYmUgb3BlcmF0aW5nIG9uIHZpcnRxdWV1ZXMgd2hpbGUgd2UncmUgdHJ5aW5nIHRvIGRlbGV0ZSB0aGVtLCBsZWFkaW5nIHRvIGEgbmFzdHkgdXNlLWFmdGVyLWZyZWUgb3IgbWVtb3J5IGNvcnJ1cHRpb24gd2hlbiBgZGVsX3ZxcygpYCBpcyBjYWxsZWQsIGZvbGxvd2VkIGJ5IGBrZnJlZSh2YmxrLVx1MDAzZXZxcylgLlxuXG5UaGUgY3J1Y2lhbCBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoaXMgY2hhbmdlIGludHJvZHVjZXMgb3IgZXhwb3NlcyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIEkndmUgZ290IHRvIGNhcmVmdWxseSBjb25zaWRlciB0aGlzLCBnaXZlbiBLTVNBTidzIHB1cnBvc2UuIFJldmlld2luZyB0aGUgY29kZSwgSSBzZWUgbm8gaW5kaWNhdGlvbiBvZiB1bmluaXRpYWxpemVkIHN0cnVjdHVyZXMgYmVpbmcgc2VudCB0byB1c2Vyc3BhY2UsIG5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGJlaW5nIHJlYWQsIG5vIG5ldyBhbGxvY2F0aW9ucyBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzLCBhbmQgbm8gY2hhbmdlcyB0byBib3VuZHMgY2hlY2tzIG9yIGxvZ2ljIHRoYXQgY291bGQgbGVhZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3MuIFdlIGFyZSBmaXhpbmcgYSBjb25jdXJyZW5jeS9zeW5jaHJvbml6YXRpb24gaXNzdWUgaGVyZSAoc3BlY2lmaWNhbGx5LCBwb3RlbnRpYWxseSBwcmV2ZW50aW5nIGEgdXNlLWFmdGVyLWZyZWUgb3IgcmFjZSBjb25kaXRpb24gd2hlbiBkZWxldGluZyB2aXJ0cXVldWVzIHdoaWxlIHJlcXVlc3RzIGFyZSBpbi1mbGlnaHQpLiBBbnkgc3VjaCBpc3N1ZXMgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIG9yIExPQ0tERVAuXG5cblJlbWVtYmVyIHRoZSBjcml0aWNhbCBkaXN0aW5jdGlvbjogS0FTQU4gY292ZXJzIG91dC1vZi1ib3VuZHMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZXMsIGFuZCBpbnZhbGlkIGZyZWVzLCBhbmQgTE9DS0RFUCBjYXRjaGVzIGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzLiBLTVNBTiBmb2N1c2VzIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIChzdGFjaywgaGVhcCwgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5UaGUgcnVsZSBvZiB0aHVtYiBpczogaWYgdGhlIGJ1ZyBpcyBzb21ldGhpbmcgdGhhdCBLQVNBTiwgTE9DS0RFUCwgb3Igb3RoZXIgc3RhbmRhcmQgYnVnIGRldGVjdG9ycyB3b3VsZCBjYXRjaCwgdGhlcmUncyBubyBuZWVkIHRvIHJ1biBLTVNBTi4gVGhpcyBwYXRjaCBmb2N1c2VzIG9uIHN5bmNocm9uaXphdGlvbiBhbmQgY29uY3VycmVuY3ksIG5vdCB1bmluaXRpYWxpemVkIG1lbW9yeS4gTW9yZW92ZXIsIGFsbCBzdGFjayBhbmQgaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQvaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IGluaXRpYWxpemVkICh6ZXJvZWQvbWVtc2V0L2t6YWxsb2MnZCkgYmVmb3JlIGJlaW5nIHJlYWQuIFRoaXMgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblRoZSBwYXRjaCdzIHB1cnBvc2UgaXMgYSBzeW5jaHJvbml6YXRpb24gZml4OiBlbnN1cmluZyB0aGUgcXVldWUgaXMgZnVsbHkgcXVpZXNjZWQgYmVmb3JlIGRlbGV0aW5nIHZpcnRxdWV1ZXMuIEZhaWx1cmVzIGhlcmUgd291bGQgYmUgcmVsYXRlZCB0byBjb25jdXJyZW5jeSwgc3luY2hyb25pemF0aW9uLCBvciBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgZHVyaW5nIGZyZWV6ZS9wb3dlciBtYW5hZ2VtZW50IG9mIHZpcnRpby1ibGsuXG5cblRoZXJlZm9yZSwgKk5lZWRzS01TQU4gPSBmYWxzZSouXG5cblRvIGp1c3RpZnkgdGhpcyBjb25jbHVzaW9uLCBJJ2xsIGNvbmNpc2VseSBleHBsYWluOlxuXG4qICAgVGhlIHBhdGNoJ3MgZnVuY3Rpb25hbGl0eTogUmVwbGFjaW5nIHRoZSBub24td2FpdGluZyB2ZXJzaW9uIHdpdGggdGhlIHdhaXRpbmcgdmVyc2lvbiBpbiBgdmlydGJsa19mcmVlemVfcHJpdigpYCBlbnN1cmVzIGNvbXBsZXRpb24gb2YgaW4tZmxpZ2h0IHJlcXVlc3RzIGJlZm9yZSBmcmVlaW5nIHZpcnRpbyBxdWV1ZXMuXG4qICAgS01TQU4ncyByZWxldmFuY2U6IEtNU0FOIGRldGVjdHMgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlIG9yIGxlYWtzLiBUaGlzIHBhdGNoIGhhcyBubyBzdWNoIHJpc2suXG4qICAgS0FTQU4vTE9DS0RFUCdzIHJlbGV2YW5jZTogVGhlIGZpeGVkIGJ1ZyBpcyBhYm91dCBjb25jdXJyZW5jeS9zeW5jaHJvbml6YXRpb24sIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgYW5kIHVzZS1hZnRlci1mcmVlcywgd2hpY2ggS0FTQU4vTE9DS0RFUCB3b3VsZCBkZXRlY3QuXG4qICAgVGhlIG92ZXJhbGwgY29uY2x1c2lvbiBpcyB0aGF0IGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCBuZWNlc3NhcnkgaGVyZS4gSSBjYW4gZXhlY3V0ZSBgc2V0LXJlc3VsdHNgIG5vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQwMCwiT3V0cHV0VG9rZW5zIjoyMjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MzcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwOToxMDoxMS41MTIyNzEwNTlaIiwiU2VxIjo0OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjY4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlcGxhY2VzIGJsa19tcV9xdWllc2NlX3F1ZXVlX25vd2FpdChxKSB3aXRoIGJsa19tcV9xdWllc2NlX3F1ZXVlKHEpIGluIHZpcnRibGtfZnJlZXplX3ByaXYoKSB0byBlbnN1cmUgdGhhdCBpbi1mbGlnaHQgcmVxdWVzdHMgYW5kIGhhbmRsZXJzIGZpbmlzaCBiZWZvcmUgdGhlIHZpcnRxdWV1ZXMgYXJlIGRlbGV0ZWQgYW5kIGZyZWVkLlxcblxcbktNU0FOIHZzIEtBU0FOIEFwcGxpY2FiaWxpdHk6XFxuLSBLTVNBTiBkZXRlY3RzIHJlYWRzIGFuZCBpbmZvcm1hdGlvbiBsZWFrcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhpcyBwYXRjaCBkb2VzIG5vdCBhbGxvY2F0ZSBuZXcgbWVtb3J5LCBpbml0aWFsaXplIG9yIHJlYWQgdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzLCBjb3B5IGRhdGEgdG8gdXNlciBzcGFjZSwgb3IgYWx0ZXIgZGF0YSBsZW5ndGgvYm91bmRzIGNhbGN1bGF0aW9ucy4gVGhlcmUgaXMgemVybyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLlxcbi0gVGhlIGNoYW5nZSBhZGRyZXNzZXMgcmVxdWVzdC1xdWV1ZSBzeW5jaHJvbml6YXRpb24gYW5kIGNvbmN1cnJlbmN5IGR1cmluZyB2aXJ0aW8tYmxrIGRldmljZSBmcmVlemluZy4gQW55IGJ1Z3MgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcGF0aCAoc3VjaCBhcyByYWNlIGNvbmRpdGlvbnMsIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYWNjZXNzZXMgZHVyaW5nIHF1ZXVlIHRlYXJkb3duKSBhcmUgdHJhY2tlZCBhbmQgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBMT0NLREVQLlxcblxcblRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVwbGFjZXMgYmxrX21xX3F1aWVzY2VfcXVldWVfbm93YWl0KHEpIHdpdGggYmxrX21xX3F1aWVzY2VfcXVldWUocSkgaW4gdmlydGJsa19mcmVlemVfcHJpdigpIHRvIGVuc3VyZSB0aGF0IGluLWZsaWdodCByZXF1ZXN0cyBhbmQgaGFuZGxlcnMgZmluaXNoIGJlZm9yZSB0aGUgdmlydHF1ZXVlcyBhcmUgZGVsZXRlZCBhbmQgZnJlZWQuXFxuXFxuS01TQU4gdnMgS0FTQU4gQXBwbGljYWJpbGl0eTpcXG4tIEtNU0FOIGRldGVjdHMgcmVhZHMgYW5kIGluZm9ybWF0aW9uIGxlYWtzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGlzIHBhdGNoIGRvZXMgbm90IGFsbG9jYXRlIG5ldyBtZW1vcnksIGluaXRpYWxpemUgb3IgcmVhZCB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMsIGNvcHkgZGF0YSB0byB1c2VyIHNwYWNlLCBvciBhbHRlciBkYXRhIGxlbmd0aC9ib3VuZHMgY2FsY3VsYXRpb25zLiBUaGVyZSBpcyB6ZXJvIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UuXFxuLSBUaGUgY2hhbmdlIGFkZHJlc3NlcyByZXF1ZXN0LXF1ZXVlIHN5bmNocm9uaXphdGlvbiBhbmQgY29uY3VycmVuY3kgZHVyaW5nIHZpcnRpby1ibGsgZGV2aWNlIGZyZWV6aW5nLiBBbnkgYnVncyBhc3NvY2lhdGVkIHdpdGggdGhpcyBwYXRoIChzdWNoIGFzIHJhY2UgY29uZGl0aW9ucywgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBhY2Nlc3NlcyBkdXJpbmcgcXVldWUgdGVhcmRvd24pIGFyZSB0cmFja2VkIGFuZCBjYXVnaHQgYnkgS0FTQU4gYW5kIExPQ0tERVAuXFxuXFxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowsx85t[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-12 09:06:07 +0000 UTC FinishedAt: 2026-09-12 09:10:12 +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": "50d05c7c76c96b90462f24debacca971d2e86713", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VIRTIO_BLK", "VIRTIO_PCI", "PM_SLEEP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "50d05c7c76c96b90462f24debacca971d2e86713", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VIRTIO_BLK", "VIRTIO_PCI", "PM_SLEEP" ], "series_id": "06d09dac-14d4-4fc8-8dd0-ee292b9f35c9" }, "track": "KASAN", "fuzz": { "focus": [ "fs", "kvm" ], "focus_symbols": [ "virtblk_freeze_priv", "virtblk_reset_prepare", "virtblk_freeze" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "", "base_commit": "50d05c7c76c96b90462f24debacca971d2e86713", "base_tree": "axboe" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA5OjA4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZJUlRJT19CTEsmIzM0OywKICAgICYjMzQ7VklSVElPX1BDSSYjMzQ7LAogICAgJiMzNDtQTV9TTEVFUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3ZpcnRibGtfZnJlZXplX3ByaXYmIzM0OywKICAgICYjMzQ7dmlydGJsa19yZXNldF9wcmVwYXJlJiMzNDssCiAgICAmIzM0O3ZpcnRibGtfZnJlZXplJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVwbGFjZXMgYmxrX21xX3F1aWVzY2VfcXVldWVfbm93YWl0KHEpIHdpdGggYmxrX21xX3F1aWVzY2VfcXVldWUocSkgaW4gdmlydGJsa19mcmVlemVfcHJpdigpIHRvIGVuc3VyZSB0aGF0IGluLWZsaWdodCByZXF1ZXN0cyBhbmQgaGFuZGxlcnMgZmluaXNoIGJlZm9yZSB0aGUgdmlydHF1ZXVlcyBhcmUgZGVsZXRlZCBhbmQgZnJlZWQuXG5cbktNU0FOIHZzIEtBU0FOIEFwcGxpY2FiaWxpdHk6XG4tIEtNU0FOIGRldGVjdHMgcmVhZHMgYW5kIGluZm9ybWF0aW9uIGxlYWtzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGlzIHBhdGNoIGRvZXMgbm90IGFsbG9jYXRlIG5ldyBtZW1vcnksIGluaXRpYWxpemUgb3IgcmVhZCB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMsIGNvcHkgZGF0YSB0byB1c2VyIHNwYWNlLCBvciBhbHRlciBkYXRhIGxlbmd0aC9ib3VuZHMgY2FsY3VsYXRpb25zLiBUaGVyZSBpcyB6ZXJvIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UuXG4tIFRoZSBjaGFuZ2UgYWRkcmVzc2VzIHJlcXVlc3QtcXVldWUgc3luY2hyb25pemF0aW9uIGFuZCBjb25jdXJyZW5jeSBkdXJpbmcgdmlydGlvLWJsayBkZXZpY2UgZnJlZXppbmcuIEFueSBidWdzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHBhdGggKHN1Y2ggYXMgcmFjZSBjb25kaXRpb25zLCBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGFjY2Vzc2VzIGR1cmluZyBxdWV1ZSB0ZWFyZG93bikgYXJlIHRyYWNrZWQgYW5kIGNhdWdodCBieSBLQVNBTiBhbmQgTE9DS0RFUC5cblxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdmlydGJsa19mcmVlemVfcHJpdigpIGluIHRoZSB2aXJ0aW8gYmxvY2sgZHJpdmVyIChkcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYykgdG8gdXNlIGJsa19tcV9xdWllc2NlX3F1ZXVlKCkgaW5zdGVhZCBvZiBibGtfbXFfcXVpZXNjZV9xdWV1ZV9ub3dhaXQoKSwgZW5zdXJpbmcgdGhhdCBhbGwgcGVuZGluZyByZXF1ZXN0IGRpc3BhdGNoZXMgY29tcGxldGUgYmVmb3JlIGRlbGV0aW5nIHZpcnRxdWV1ZXMuIFZpcnRpbyBibG9jayBkZXZpY2VzIGFyZSBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIHZpcnR1YWxpemVkIHRlc3QgZW52aXJvbm1lbnRzIGFuZCB0aGlzIHBhdGggaXMgcmVhY2hhYmxlIHZpYSBQQ0kgcmVzZXQgKHZpcnRibGtfcmVzZXRfcHJlcGFyZSkgb3IgcG93ZXIgbWFuYWdlbWVudCBzdXNwZW5kICh2aXJ0YmxrX2ZyZWV6ZSkuIFNpbmNlIHRoZSBwYXRjaCBtb2RpZmllcyByZWFjaGFibGUgZHJpdmVyIGxvZ2ljIG9uIGEgdmlydHVhbCBidXMsIGl0IGlzIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDk6MDg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBlYTYxYzU3N2UxMzcxYTA2ZGMzOTBhM2NhNmIzMjFmMDVhNjc0MjM0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBTZXAgMTIgMDk6MDg6MDUgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmMgYi9kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuY1xuaW5kZXggMzJiZjNiYTA3YTlkYy4uN2E1NzA1OTFlMDQwYSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuY1xuQEAgLTE1OTUsNyAmIzQzOzE1OTUsNyBAQCBzdGF0aWMgaW50IHZpcnRibGtfZnJlZXplX3ByaXYoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpXG4gXG4gXHQvKiBFbnN1cmUgbm8gcmVxdWVzdHMgaW4gdmlydHF1ZXVlcyBiZWZvcmUgZGVsZXRpbmcgdnFzLiAqL1xuIFx0bWVtZmxhZ3MgPSBibGtfbXFfZnJlZXplX3F1ZXVlKHEpO1xuLVx0YmxrX21xX3F1aWVzY2VfcXVldWVfbm93YWl0KHEpO1xuJiM0MztcdGJsa19tcV9xdWllc2NlX3F1ZXVlKHEpO1xuIFx0YmxrX21xX3VuZnJlZXplX3F1ZXVlKHEsIG1lbWZsYWdzKTtcbiBcbiBcdC8qIEVuc3VyZSB3ZSBkb24mIzM5O3QgcmVjZWl2ZSBhbnkgbW9yZSBpbnRlcnJ1cHRzICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDk6MDg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VklSVElPX0JMSyYjMzQ7LAogICAgJiMzNDtWSVJUSU9fUENJJiMzNDssCiAgICAmIzM0O1BNX1NMRUVQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dmlydGJsa19mcmVlemVfcHJpdiYjMzQ7LAogICAgJiMzNDt2aXJ0YmxrX3Jlc2V0X3ByZXBhcmUmIzM0OywKICAgICYjMzQ7dmlydGJsa19mcmVlemUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdmlydGJsa19mcmVlemVfcHJpdigpIGluIHRoZSB2aXJ0aW8gYmxvY2sgZHJpdmVyIChkcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYykgdG8gdXNlIGJsa19tcV9xdWllc2NlX3F1ZXVlKCkgaW5zdGVhZCBvZiBibGtfbXFfcXVpZXNjZV9xdWV1ZV9ub3dhaXQoKSwgZW5zdXJpbmcgdGhhdCBhbGwgcGVuZGluZyByZXF1ZXN0IGRpc3BhdGNoZXMgY29tcGxldGUgYmVmb3JlIGRlbGV0aW5nIHZpcnRxdWV1ZXMuIFZpcnRpbyBibG9jayBkZXZpY2VzIGFyZSBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIHZpcnR1YWxpemVkIHRlc3QgZW52aXJvbm1lbnRzIGFuZCB0aGlzIHBhdGggaXMgcmVhY2hhYmxlIHZpYSBQQ0kgcmVzZXQgKHZpcnRibGtfcmVzZXRfcHJlcGFyZSkgb3IgcG93ZXIgbWFuYWdlbWVudCBzdXNwZW5kICh2aXJ0YmxrX2ZyZWV6ZSkuIFNpbmNlIHRoZSBwYXRjaCBtb2RpZmllcyByZWFjaGFibGUgZHJpdmVyIGxvZ2ljIG9uIGEgdmlydHVhbCBidXMsIGl0IGlzIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBlYTYxYzU3N2UxMzcxYTA2ZGMzOTBhM2NhNmIzMjFmMDVhNjc0MjM0CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBTZXAgMTIgMDk6MDg6MDUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYyBiL2RyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jCmluZGV4IDMyYmYzYmEwN2E5ZGMuLjdhNTcwNTkxZTA0MGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jCkBAIC0xNTk1LDcgJiM0MzsxNTk1LDcgQEAgc3RhdGljIGludCB2aXJ0YmxrX2ZyZWV6ZV9wcml2KHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KQogCiAJLyogRW5zdXJlIG5vIHJlcXVlc3RzIGluIHZpcnRxdWV1ZXMgYmVmb3JlIGRlbGV0aW5nIHZxcy4gKi8KIAltZW1mbGFncyA9IGJsa19tcV9mcmVlemVfcXVldWUocSk7Ci0JYmxrX21xX3F1aWVzY2VfcXVldWVfbm93YWl0KHEpOwomIzQzOwlibGtfbXFfcXVpZXNjZV9xdWV1ZShxKTsKIAlibGtfbXFfdW5mcmVlemVfcXVldWUocSwgbWVtZmxhZ3MpOwogCiAJLyogRW5zdXJlIHdlIGRvbiYjMzk7dCByZWNlaXZlIGFueSBtb3JlIGludGVycnVwdHMgKi8KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDk6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg4OQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI5MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBWaXJ0aW8gQmxvY2sgRGV2aWNlIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlLCBwYXJ0aWN1bGFybHkgd2l0aGluIHRoZSBgdmlydGlvX2Jsay5jYCBkcml2ZXIuICBUaGUgY29udGV4dCB0ZWxscyBtZSB0aGlzIGlzIHJlbGF0ZWQgdG8gZnJlZXppbmcgYW5kIHVuZnJlZXppbmcgdGhlIGJsb2NrIHF1ZXVlLCBsaWtlbHkgZm9yIHN1c3BlbmQvcmVzdW1lIG9yIGhvdHBsdWcgb3BlcmF0aW9ucy4gIFNwZWNpZmljYWxseSwgaXQgc2VlbXMgdG8gbW9kaWZ5IHRoZSBiZWhhdmlvciBhcm91bmQgcXVpZXNjaW5nIHRoZSBxdWV1ZSBkdXJpbmcgdGhlIGB2aXJ0YmxrX2ZyZWV6ZV9wcml2YCBmdW5jdGlvbi4gIFRoZSBkaWZmIHNob3dzIGEgY2hhbmdlIGZyb20gYGJsa19tcV9xdWllc2NlX3F1ZXVlX25vd2FpdGAgdG8gYGJsa19tcV9xdWllc2NlX3F1ZXVlYC4gSW50ZXJlc3RpbmcuIEkga25vdyBib3RoIG9mIHRob3NlIGZ1bmN0aW9ucywgc28gSSBhbHJlYWR5IGhhdmUgc29tZSBpZGVhcyBvbiB0aGUgaW1wYWN0LiBUaGUgYG5vd2FpdGAgdmVyc2lvbiBpcyBhc3luY2hyb25vdXM7IHRoaXMgbWlnaHQgYmUgYSBzdWJ0bGUgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uIGJlaW5nIHRyYWRlZCBmb3IgZ3VhcmFudGVlZCBjb21wbGV0aW9uIGJlZm9yZSBjb250aW51aW5nLiBMZXQgbWUgaW5zcGVjdCB0aGUgYXJlYSBhcm91bmQgbGluZSAxNTk1IGluIHRoZSBzb3VyY2UgY29kZSB1c2luZyBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgdG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB0aGlzIGNoYW5nZSB3YXMgbWFkZSBhbmQgdGhlIHBvdGVudGlhbCBpbXBhY3Qgb24gcmVxdWVzdCBjb21wbGV0aW9uIHRpbWluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAwOTowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTU4NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNTg1Olx0XHRtdXRleF91bmxvY2soXHUwMDI2dmJsay1cdTAwM2V2ZGV2X211dGV4KTtcbjE1ODY6XHRcbjE1ODc6XHRcdHB1dF9kaXNrKHZibGstXHUwMDNlZGlzayk7XG4xNTg4Olx0fVxuMTU4OTpcdFxuMTU5MDpcdHN0YXRpYyBpbnQgdmlydGJsa19mcmVlemVfcHJpdihzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldilcbjE1OTE6XHR7XG4xNTkyOlx0XHRzdHJ1Y3QgdmlydGlvX2JsayAqdmJsayA9IHZkZXYtXHUwMDNlcHJpdjtcbjE1OTM6XHRcdHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxID0gdmJsay1cdTAwM2VkaXNrLVx1MDAzZXF1ZXVlO1xuMTU5NDpcdFx0dW5zaWduZWQgaW50IG1lbWZsYWdzO1xuMTU5NTpcdFxuMTU5NjpcdFx0LyogRW5zdXJlIG5vIHJlcXVlc3RzIGluIHZpcnRxdWV1ZXMgYmVmb3JlIGRlbGV0aW5nIHZxcy4gKi9cbjE1OTc6XHRcdG1lbWZsYWdzID0gYmxrX21xX2ZyZWV6ZV9xdWV1ZShxKTtcbjE1OTg6XHRcdGJsa19tcV9xdWllc2NlX3F1ZXVlKHEpO1xuMTU5OTpcdFx0YmxrX21xX3VuZnJlZXplX3F1ZXVlKHEsIG1lbWZsYWdzKTtcbjE2MDA6XHRcbjE2MDE6XHRcdC8qIEVuc3VyZSB3ZSBkb24mIzM5O3QgcmVjZWl2ZSBhbnkgbW9yZSBpbnRlcnJ1cHRzICovXG4xNjAyOlx0XHR2aXJ0aW9fcmVzZXRfZGV2aWNlKHZkZXYpO1xuMTYwMzpcdFxuMTYwNDpcdFx0LyogTWFrZSBzdXJlIG5vIHdvcmsgaGFuZGxlciBpcyBhY2Nlc3NpbmcgdGhlIGRldmljZS4gKi9cbjE2MDU6XHRcdGZsdXNoX3dvcmsoXHUwMDI2dmJsay1cdTAwM2Vjb25maWdfd29yayk7XG4xNjA2Olx0XG4xNjA3Olx0XHR2ZGV2LVx1MDAzZWNvbmZpZy1cdTAwM2VkZWxfdnFzKHZkZXYpO1xuMTYwODpcdFx0a2ZyZWUodmJsay1cdTAwM2V2cXMpO1xuMTYwOTpcdFx0LypcbjE2MTA6XHRcdCAqIFNldCB0byBOVUxMIHRvIHByZXZlbnQgZnJlZWluZyB2cXMgYWdhaW4gYWZ0ZXIgYSBmYWlsZWQgdnFzXG4xNjExOlx0XHQgKiBhbGxvY2F0aW9uIGR1cmluZyByZXN1bWUuIE5vdGUgdGhhdCBrZnJlZSgpIGFscmVhZHkgaGFuZGxlcyBOVUxMXG4xNjEyOlx0XHQgKiBwb2ludGVycyBzYWZlbHkuXG4xNjEzOlx0XHQgKi9cbjE2MTQ6XHRcdHZibGstXHUwMDNldnFzID0gTlVMTDtcbjE2MTU6XHRcbjE2MTY6XHRcdHJldHVybiAwO1xuMTYxNzpcdH1cbjE2MTg6XHRcbjE2MTk6XHRzdGF0aWMgaW50IHZpcnRibGtfcmVzdG9yZV9wcml2KHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KVxuMTYyMDpcdHtcbjE2MjE6XHRcdHN0cnVjdCB2aXJ0aW9fYmxrICp2YmxrID0gdmRldi1cdTAwM2Vwcml2O1xuMTYyMjpcdFx0aW50IHJldDtcbjE2MjM6XHRcbjE2MjQ6XHRcdHJldCA9IGluaXRfdnEodmRldi1cdTAwM2Vwcml2KTtcbjE2MjU6XHRcdGlmIChyZXQpXG4xNjI2Olx0XHRcdHJldHVybiByZXQ7XG4xNjI3Olx0XG4xNjI4Olx0XHR2aXJ0aW9fZGV2aWNlX3JlYWR5KHZkZXYpO1xuMTYyOTpcdFx0YmxrX21xX3VucXVpZXNjZV9xdWV1ZSh2YmxrLVx1MDAzZWRpc2stXHUwMDNlcXVldWUpO1xuMTYzMDpcdFxuMTYzMTpcdFx0cmV0dXJuIDA7XG4xNjMyOlx0fVxuMTYzMzpcdFxuMTYzNDpcdCNpZmRlZiBDT05GSUdfUE1fU0xFRVBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAwOTowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTQ2CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBgdmlydGJsa19mcmVlemVfcHJpdmAgaW4gYHZpcnRpb19ibGsuY2AqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHVzYWdlIG9mIGB2aXJ0YmxrX2ZyZWV6ZV9wcml2YC4gTGV0JiMzOTtzIGdldCByaWdodCB0byBpdC4gSSYjMzk7bSBnb2luZyB0byBqdW1wIGludG8gYHZpcnRpb19ibGsuY2AgYW5kIHRha2UgYSBsb29rIGF0IHdoZXJlIHRoYXQgZnVuY3Rpb24gaXMgYWN0dWFsbHkgYmVpbmcgKnVzZWQqLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZ29pbmcgdG8gZm9jdXMgb24gbGluZXMgMTYzMCB0aHJvdWdoIDE3MDAuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGNvbnRleHQgd2luZG93IHRvIHNlZSBob3cgaXQmIzM5O3MgYmVpbmcgY2FsbGVkIGFuZCB3aGF0IHN1cnJvdW5kaW5nIGxvZ2ljIGlzIGluIHBsYXkuIEhvcGVmdWxseSwgdGhhdCBnaXZlcyBtZSBhIGNsZWFyIHBpY3R1cmUgb2YgaXRzIHJvbGUgd2l0aGluIHRoZSBibG9jayBkZXZpY2UgZHJpdmVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA5OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNjM0LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE2MzQ6XHQjaWZkZWYgQ09ORklHX1BNX1NMRUVQXG4xNjM1Olx0c3RhdGljIGludCB2aXJ0YmxrX2ZyZWV6ZShzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldilcbjE2MzY6XHR7XG4xNjM3Olx0XHRyZXR1cm4gdmlydGJsa19mcmVlemVfcHJpdih2ZGV2KTtcbjE2Mzg6XHR9XG4xNjM5Olx0XG4xNjQwOlx0c3RhdGljIGludCB2aXJ0YmxrX3Jlc3RvcmUoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpXG4xNjQxOlx0e1xuMTY0MjpcdFx0cmV0dXJuIHZpcnRibGtfcmVzdG9yZV9wcml2KHZkZXYpO1xuMTY0MzpcdH1cbjE2NDQ6XHQjZW5kaWZcbjE2NDU6XHRcbjE2NDY6XHRzdGF0aWMgaW50IHZpcnRibGtfcmVzZXRfcHJlcGFyZShzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldilcbjE2NDc6XHR7XG4xNjQ4Olx0XHRyZXR1cm4gdmlydGJsa19mcmVlemVfcHJpdih2ZGV2KTtcbjE2NDk6XHR9XG4xNjUwOlx0XG4xNjUxOlx0c3RhdGljIGludCB2aXJ0YmxrX3Jlc2V0X2RvbmUoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpXG4xNjUyOlx0e1xuMTY1MzpcdFx0cmV0dXJuIHZpcnRibGtfcmVzdG9yZV9wcml2KHZkZXYpO1xuMTY1NDpcdH1cbjE2NTU6XHRcbjE2NTY6XHRzdGF0aWMgY29uc3Qgc3RydWN0IHZpcnRpb19kZXZpY2VfaWQgaWRfdGFibGVbXSA9IHtcbjE2NTc6XHRcdHsgVklSVElPX0lEX0JMT0NLLCBWSVJUSU9fREVWX0FOWV9JRCB9LFxuMTY1ODpcdFx0eyAwIH0sXG4xNjU5Olx0fTtcbjE2NjA6XHRcbjE2NjE6XHRzdGF0aWMgdW5zaWduZWQgaW50IGZlYXR1cmVzX2xlZ2FjeVtdID0ge1xuMTY2MjpcdFx0VklSVElPX0JMS19GX1NFR19NQVgsIFZJUlRJT19CTEtfRl9TSVpFX01BWCwgVklSVElPX0JMS19GX0dFT01FVFJZLFxuMTY2MzpcdFx0VklSVElPX0JMS19GX1JPLCBWSVJUSU9fQkxLX0ZfQkxLX1NJWkUsXG4xNjY0Olx0XHRWSVJUSU9fQkxLX0ZfRkxVU0gsIFZJUlRJT19CTEtfRl9UT1BPTE9HWSwgVklSVElPX0JMS19GX0NPTkZJR19XQ0UsXG4xNjY1Olx0XHRWSVJUSU9fQkxLX0ZfTVEsIFZJUlRJT19CTEtfRl9ESVNDQVJELCBWSVJUSU9fQkxLX0ZfV1JJVEVfWkVST0VTLFxuMTY2NjpcdFx0VklSVElPX0JMS19GX1NFQ1VSRV9FUkFTRSxcbjE2Njc6XHR9XG4xNjY4Olx0O1xuMTY2OTpcdHN0YXRpYyB1bnNpZ25lZCBpbnQgZmVhdHVyZXNbXSA9IHtcbjE2NzA6XHRcdFZJUlRJT19CTEtfRl9TRUdfTUFYLCBWSVJUSU9fQkxLX0ZfU0laRV9NQVgsIFZJUlRJT19CTEtfRl9HRU9NRVRSWSxcbjE2NzE6XHRcdFZJUlRJT19CTEtfRl9STywgVklSVElPX0JMS19GX0JMS19TSVpFLFxuMTY3MjpcdFx0VklSVElPX0JMS19GX0ZMVVNILCBWSVJUSU9fQkxLX0ZfVE9QT0xPR1ksIFZJUlRJT19CTEtfRl9DT05GSUdfV0NFLFxuMTY3MzpcdFx0VklSVElPX0JMS19GX01RLCBWSVJUSU9fQkxLX0ZfRElTQ0FSRCwgVklSVElPX0JMS19GX1dSSVRFX1pFUk9FUyxcbjE2NzQ6XHRcdFZJUlRJT19CTEtfRl9TRUNVUkVfRVJBU0UsIFZJUlRJT19CTEtfRl9aT05FRCxcbjE2NzU6XHR9O1xuMTY3NjpcdFxuMTY3NzpcdHN0YXRpYyBzdHJ1Y3QgdmlydGlvX2RyaXZlciB2aXJ0aW9fYmxrID0ge1xuMTY3ODpcdFx0LmZlYXR1cmVfdGFibGVcdFx0XHQ9IGZlYXR1cmVzLFxuMTY3OTpcdFx0LmZlYXR1cmVfdGFibGVfc2l6ZVx0XHQ9IEFSUkFZX1NJWkUoZmVhdHVyZXMpLFxuMTY4MDpcdFx0LmZlYXR1cmVfdGFibGVfbGVnYWN5XHRcdD0gZmVhdHVyZXNfbGVnYWN5LFxuMTY4MTpcdFx0LmZlYXR1cmVfdGFibGVfc2l6ZV9sZWdhY3lcdD0gQVJSQVlfU0laRShmZWF0dXJlc19sZWdhY3kpLFxuMTY4MjpcdFx0LmRyaXZlci5uYW1lXHRcdFx0PSBLQlVJTERfTU9ETkFNRSxcbjE2ODM6XHRcdC5pZF90YWJsZVx0XHRcdD0gaWRfdGFibGUsXG4xNjg0Olx0XHQucHJvYmVcdFx0XHRcdD0gdmlydGJsa19wcm9iZSxcbjE2ODU6XHRcdC5yZW1vdmVcdFx0XHRcdD0gdmlydGJsa19yZW1vdmUsXG4xNjg2Olx0XHQuY29uZmlnX2NoYW5nZWRcdFx0XHQ9IHZpcnRibGtfY29uZmlnX2NoYW5nZWQsXG4xNjg3Olx0I2lmZGVmIENPTkZJR19QTV9TTEVFUFxuMTY4ODpcdFx0LmZyZWV6ZVx0XHRcdFx0PSB2aXJ0YmxrX2ZyZWV6ZSxcbjE2ODk6XHRcdC5yZXN0b3JlXHRcdFx0PSB2aXJ0YmxrX3Jlc3RvcmUsXG4xNjkwOlx0I2VuZGlmXG4xNjkxOlx0XHQucmVzZXRfcHJlcGFyZVx0XHRcdD0gdmlydGJsa19yZXNldF9wcmVwYXJlLFxuMTY5MjpcdFx0LnJlc2V0X2RvbmVcdFx0XHQ9IHZpcnRibGtfcmVzZXRfZG9uZSxcbjE2OTM6XHR9O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA5OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0NjMKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHVuZGVyc3RhbmRpbmcgYHZpcnRibGtfZnJlZXplX3ByaXZgIGFuZCBpdHMgaW50ZXJhY3Rpb25zIHdpdGhpbiB0aGUgdmlydGlvIHN1YnN5c3RlbToKCioqRGVjb25zdHJ1Y3RpbmcgdmlydGJsa19mcmVlemVfcHJpdiBhbmQgSXRzIFJvbGUqKgoKQWxyaWdodCwgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB3aGF0IHRoaXMgYHZpcnRibGtfZnJlZXplX3ByaXZgIGZ1bmN0aW9uIGFjdHVhbGx5ICpkb2VzKi4gTXkgZmlyc3QgbW92ZSBpcyB0byB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlIGFuZCBiZWhhdmlvci4gVGhlbiwgSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIGl0JiMzOTtzIGJlaW5nIGNhbGxlZC4gSSYjMzk7bGwgbmVlZCB0byB0cmFjZSBpdHMgY29ubmVjdGlvbnMgd2l0aGluIHRoZSB2aXJ0aW8gc3Vic3lzdGVtLiBJ4oCZbGwgc3RhcnQgYnkgaW52ZXN0aWdhdGluZyB0aGUgY2FsbHNpdGVzIG9mIGAuZnJlZXplYCwgYC5yZXNldF9wcmVwYXJlYCwgYW5kIHNpbWlsYXIgcmVsYXRlZCBmdW5jdGlvbnMuIEZvciB0aGF0LCBJJiMzOTttIGRlZmluaXRlbHkgcmVhY2hpbmcgZm9yIGBncmVwcGVyYCDigJMgdGhhdCYjMzk7cyB0aGUgZmFzdGVzdCB3YXkgdG8gZ2V0IGEgc29saWQgbGlzdCBvZiBwb3RlbnRpYWwgY2FsbCBwYXRocy4gSSYjMzk7bGwgbmVlZCB0byBnZXQgYSBoaWdoLWxldmVsIHZpZXcgb2YgaG93IHRoaXMgZnJlZXplL3Jlc2V0IGZ1bmN0aW9uYWxpdHkgZml0cyBpbnRvIHRoZSBiaWdnZXIgcGljdHVyZSBvZiBibG9jayBkZXZpY2Ugb3BlcmF0aW9uIHdpdGhpbiB2aXJ0aW8uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDk6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XFxicmVzZXRfcHJlcGFyZVxcYiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvY29tbW9uL2hhYmFuYWxhYnNfZHJ2LmM9NzE0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2Vycm9yX2hhbmRsZXJzIGhsX3BjaV9lcnJfaGFuZGxlciA9IHtcbi0tXG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvY29tbW9uL2hhYmFuYWxhYnNfZHJ2LmMtNzE3LVx0LnJlc3VtZSA9IGhsX3BjaV9lcnJfcmVzdW1lLFxuZHJpdmVycy9hY2NlbC9oYWJhbmFsYWJzL2NvbW1vbi9oYWJhbmFsYWJzX2Rydi5jOjcxODpcdC5yZXNldF9wcmVwYXJlID0gaGxfcGNpX3Jlc2V0X3ByZXBhcmUsXG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvY29tbW9uL2hhYmFuYWxhYnNfZHJ2LmMtNzE5LVx0LnJlc2V0X2RvbmUgPSBobF9wY2lfcmVzZXRfZG9uZSxcbi0tXG5kcml2ZXJzL2FjY2VsL2l2cHUvaXZwdV9kcnYuYz04OTI9c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZXJyb3JfaGFuZGxlcnMgaXZwdV9kcnZfcGNpX2VyciA9IHtcbmRyaXZlcnMvYWNjZWwvaXZwdS9pdnB1X2Rydi5jOjg5MzpcdC5yZXNldF9wcmVwYXJlID0gaXZwdV9wbV9yZXNldF9wcmVwYXJlX2NiLFxuZHJpdmVycy9hY2NlbC9pdnB1L2l2cHVfZHJ2LmMtODk0LVx0LnJlc2V0X2RvbmUgPSBpdnB1X3BtX3Jlc2V0X2RvbmVfY2IsXG4tLVxuZHJpdmVycy9hY2NlbC9xYWljL3FhaWNfZHJ2LmM9NjcyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2Vycm9yX2hhbmRsZXJzIHFhaWNfcGNpX2Vycl9oYW5kbGVyID0ge1xuZHJpdmVycy9hY2NlbC9xYWljL3FhaWNfZHJ2LmMtNjczLVx0LmVycm9yX2RldGVjdGVkID0gcWFpY19wY2lfZXJyb3JfZGV0ZWN0ZWQsXG5kcml2ZXJzL2FjY2VsL3FhaWMvcWFpY19kcnYuYzo2NzQ6XHQucmVzZXRfcHJlcGFyZSA9IHFhaWNfcGNpX3Jlc2V0X3ByZXBhcmUsXG5kcml2ZXJzL2FjY2VsL3FhaWMvcWFpY19kcnYuYy02NzUtXHQucmVzZXRfZG9uZSA9IHFhaWNfcGNpX3Jlc2V0X2RvbmUsXG4tLVxuZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmM9MTY3Nz1zdGF0aWMgc3RydWN0IHZpcnRpb19kcml2ZXIgdmlydGlvX2JsayA9IHtcbi0tXG5kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYy0xNjkwLSNlbmRpZlxuZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmM6MTY5MTpcdC5yZXNldF9wcmVwYXJlXHRcdFx0PSB2aXJ0YmxrX3Jlc2V0X3ByZXBhcmUsXG5kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYy0xNjkyLVx0LnJlc2V0X2RvbmVcdFx0XHQ9IHZpcnRibGtfcmVzZXRfZG9uZSxcbi0tXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wY2lfZ2VuZXJpYy5jPTE2MTY9c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZXJyb3JfaGFuZGxlcnMgbWhpX3BjaV9lcnJfaGFuZGxlciA9IHtcbi0tXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wY2lfZ2VuZXJpYy5jLTE2MTktXHQucmVzdW1lID0gbWhpX3BjaV9pb19yZXN1bWUsXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wY2lfZ2VuZXJpYy5jOjE2MjA6XHQucmVzZXRfcHJlcGFyZSA9IG1oaV9wY2lfcmVzZXRfcHJlcGFyZSxcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BjaV9nZW5lcmljLmMtMTYyMS1cdC5yZXNldF9kb25lID0gbWhpX3BjaV9yZXNldF9kb25lLFxuLS1cbmRyaXZlcnMvY2R4L2NkeC5jPTk1PWludCBjZHhfZGV2X3Jlc2V0KHN0cnVjdCBkZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL2NkeC9jZHguYy0xMDQtXHQvKiBOb3RpZnkgZHJpdmVyIHRoYXQgZGV2aWNlIGlzIGJlaW5nIHJlc2V0ICovXG5kcml2ZXJzL2NkeC9jZHguYzoxMDU6XHRpZiAoY2R4X2RydiBcdTAwMjZcdTAwMjYgY2R4X2Rydi1cdTAwM2VyZXNldF9wcmVwYXJlKVxuZHJpdmVycy9jZHgvY2R4LmM6MTA2Olx0XHRjZHhfZHJ2LVx1MDAzZXJlc2V0X3ByZXBhcmUoY2R4X2Rldik7XG5kcml2ZXJzL2NkeC9jZHguYy0xMDctXG4tLVxuZHJpdmVycy9jcnlwdG8vaGlzaWxpY29uL2hwcmUvaHByZV9tYWluLmM9MTY4OD1zdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9lcnJvcl9oYW5kbGVycyBocHJlX2Vycl9oYW5kbGVyID0ge1xuLS1cbmRyaXZlcnMvY3J5cHRvL2hpc2lsaWNvbi9ocHJlL2hwcmVfbWFpbi5jLTE2OTAtXHQuc2xvdF9yZXNldFx0XHQ9IGhpc2lfcW1fZGV2X3Nsb3RfcmVzZXQsXG5kcml2ZXJzL2NyeXB0by9oaXNpbGljb24vaHByZS9ocHJlX21haW4uYzoxNjkxOlx0LnJlc2V0X3ByZXBhcmVcdFx0PSBoaXNpX3FtX3Jlc2V0X3ByZXBhcmUsXG5kcml2ZXJzL2NyeXB0by9oaXNpbGljb24vaHByZS9ocHJlX21haW4uYy0xNjkyLVx0LnJlc2V0X2RvbmVcdFx0PSBoaXNpX3FtX3Jlc2V0X2RvbmUsXG4tLVxuZHJpdmVycy9jcnlwdG8vaGlzaWxpY29uL3NlYzIvc2VjX21haW4uYz0xNTA2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2Vycm9yX2hhbmRsZXJzIHNlY19lcnJfaGFuZGxlciA9IHtcbi0tXG5kcml2ZXJzL2NyeXB0by9oaXNpbGljb24vc2VjMi9zZWNfbWFpbi5jLTE1MDgtXHQuc2xvdF9yZXNldFx0PSBoaXNpX3FtX2Rldl9zbG90X3Jlc2V0LFxuZHJpdmVycy9jcnlwdG8vaGlzaWxpY29uL3NlYzIvc2VjX21haW4uYzoxNTA5Olx0LnJlc2V0X3ByZXBhcmVcdD0gaGlzaV9xbV9yZXNldF9wcmVwYXJlLFxuZHJpdmVycy9jcnlwdG8vaGlzaWxpY29uL3NlYzIvc2VjX21haW4uYy0xNTEwLVx0LnJlc2V0X2RvbmVcdD0gaGlzaV9xbV9yZXNldF9kb25lLFxuLS1cbmRyaXZlcnMvY3J5cHRvL2hpc2lsaWNvbi96aXAvemlwX21haW4uYz0xNjE1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2Vycm9yX2hhbmRsZXJzIGhpc2lfemlwX2Vycl9oYW5kbGVyID0ge1xuLS1cbmRyaXZlcnMvY3J5cHRvL2hpc2lsaWNvbi96aXAvemlwX21haW4uYy0xNjE3LVx0LnNsb3RfcmVzZXRcdD0gaGlzaV9xbV9kZXZfc2xvdF9yZXNldCxcbmRyaXZlcnMvY3J5cHRvL2hpc2lsaWNvbi96aXAvemlwX21haW4uYzoxNjE4Olx0LnJlc2V0X3ByZXBhcmVcdD0gaGlzaV9xbV9yZXNldF9wcmVwYXJlLFxuZHJpdmVycy9jcnlwdG8vaGlzaWxpY29uL3ppcC96aXBfbWFpbi5jLTE2MTktXHQucmVzZXRfZG9uZVx0PSBoaXNpX3FtX3Jlc2V0X2RvbmUsXG4tLVxuZHJpdmVycy9jcnlwdG8vaW50ZWwvcWF0L3FhdF9jb21tb24vYWRmX2Flci5jPTE4PXN0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqZGV2aWNlX3NyaW92X3dxO1xuZHJpdmVycy9jcnlwdG8vaW50ZWwvcWF0L3FhdF9jb21tb24vYWRmX2Flci5jLTE5LVxuZHJpdmVycy9jcnlwdG8vaW50ZWwvcWF0L3FhdF9jb21tb24vYWRmX2Flci5jOjIwOnN0YXRpYyBwY2lfZXJzX3Jlc3VsdF90IHJlc2V0X3ByZXBhcmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG5kcml2ZXJzL2NyeXB0by9pbnRlbC9xYXQvcWF0X2NvbW1vbi9hZGZfYWVyLmMtMjEte1xuLS1cbmRyaXZlcnMvY3J5cHRvL2ludGVsL3FhdC9xYXRfY29tbW9uL2FkZl9hZXIuYz03Mj1zdGF0aWMgcGNpX2Vyc19yZXN1bHRfdCBhZGZfZXJyb3JfZGV0ZWN0ZWQoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4tLVxuZHJpdmVycy9jcnlwdG8vaW50ZWwvcWF0L3FhdF9jb21tb24vYWRmX2Flci5jLTkwLVxuZHJpdmVycy9jcnlwdG8vaW50ZWwvcWF0L3FhdF9jb21tb24vYWRmX2Flci5jOjkxOlx0cmV0dXJuIHJlc2V0X3ByZXBhcmUocGRldik7XG5kcml2ZXJzL2NyeXB0by9pbnRlbC9xYXQvcWF0X2NvbW1vbi9hZGZfYWVyLmMtOTItfVxuLS1cbmRyaXZlcnMvY3J5cHRvL2ludGVsL3FhdC9xYXRfY29tbW9uL2FkZl9hZXIuYz0yNTU9c3RhdGljIHZvaWQgYWRmX3Jlc2V0X3ByZXBhcmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG5kcml2ZXJzL2NyeXB0by9pbnRlbC9xYXQvcWF0X2NvbW1vbi9hZGZfYWVyLmMtMjU2LXtcbmRyaXZlcnMvY3J5cHRvL2ludGVsL3FhdC9xYXRfY29tbW9uL2FkZl9hZXIuYzoyNTc6XHRyZXNldF9wcmVwYXJlKHBkZXYpO1xuZHJpdmVycy9jcnlwdG8vaW50ZWwvcWF0L3FhdF9jb21tb24vYWRmX2Flci5jLTI1OC19XG4tLVxuZHJpdmVycy9jcnlwdG8vaW50ZWwvcWF0L3FhdF9jb21tb24vYWRmX2Flci5jPTI2NT1jb25zdCBzdHJ1Y3QgcGNpX2Vycm9yX2hhbmRsZXJzIGFkZl9lcnJfaGFuZGxlciA9IHtcbi0tXG5kcml2ZXJzL2NyeXB0by9pbnRlbC9xYXQvcWF0X2NvbW1vbi9hZGZfYWVyLmMtMjY4LVx0LnJlc3VtZSA9IGFkZl9yZXN1bWUsXG5kcml2ZXJzL2NyeXB0by9pbnRlbC9xYXQvcWF0X2NvbW1vbi9hZGZfYWVyLmM6MjY5Olx0LnJlc2V0X3ByZXBhcmUgPSBhZGZfcmVzZXRfcHJlcGFyZSxcbmRyaXZlcnMvY3J5cHRvL2ludGVsL3FhdC9xYXRfY29tbW9uL2FkZl9hZXIuYy0yNzAtXHQucmVzZXRfZG9uZSA9IGFkZl9yZXNldF9kb25lLFxuLS1cbmRyaXZlcnMvZG1hL2lkeGQvaW5pdC5jPTExMjY9c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZXJyb3JfaGFuZGxlcnMgaWR4ZF9lcnJvcl9oYW5kbGVyID0ge1xuZHJpdmVycy9kbWEvaWR4ZC9pbml0LmM6MTEyNzpcdC5yZXNldF9wcmVwYXJlXHQ9IGlkeGRfcmVzZXRfcHJlcGFyZSxcbmRyaXZlcnMvZG1hL2lkeGQvaW5pdC5jLTExMjgtXHQucmVzZXRfZG9uZVx0PSBpZHhkX3Jlc2V0X2RvbmUsXG4tLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfcmVzZXQuYz04NDQ9c3RhdGljIHZvaWQgcmV2b2tlX21tYXBzKHN0cnVjdCBpbnRlbF9ndCAqZ3QpXG4tLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfcmVzZXQuYy04NzQtXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9yZXNldC5jOjg3NTpzdGF0aWMgaW50ZWxfZW5naW5lX21hc2tfdCByZXNldF9wcmVwYXJlKHN0cnVjdCBpbnRlbF9ndCAqZ3QpXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9yZXNldC5jLTg3Ni17XG4tLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfcmVzZXQuYy04ODUtXHQgKiBGb3IgR3VDIG1vZGUgd2l0aCBzdWJtaXNzaW9uIGRpc2FibGVkLCBlbnN1cmUgdGhhdCBHdUMgaXMgbm90XG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9yZXNldC5jOjg4NjpcdCAqIHNhbml0aXplZCwgZG8gdGhhdCBhZnRlciBlbmdpbmUgcmVzZXQuIHJlc2V0X3ByZXBhcmUoKVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfcmVzZXQuYy04ODctXHQgKiBpcyBmb2xsb3dlZCBieSBlbmdpbmUgcmVzZXQgd2hpY2ggaW4gdGhpcyBtb2RlIHJlcXVpcmVzIEd1QyB0b1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX3Jlc2V0LmM9OTY5PXN0YXRpYyB2b2lkIF9faW50ZWxfZ3Rfc2V0X3dlZGdlZChzdHJ1Y3QgaW50ZWxfZ3QgKmd0KVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX3Jlc2V0LmMtOTg1LVx0ICovXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9yZXNldC5jOjk4NjpcdGF3YWtlID0gcmVzZXRfcHJlcGFyZShndCk7XG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9yZXNldC5jLTk4Ny1cbi0tXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9yZXNldC5jPTEyMDU9dm9pZCBpbnRlbF9ndF9yZXNldChzdHJ1Y3QgaW50ZWxfZ3QgKmd0LFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX3Jlc2V0LmMtMTIzMy1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX3Jlc2V0LmM6MTIzNDpcdGF3YWtlID0gcmVzZXRfcHJlcGFyZShndCk7XG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9yZXNldC5jLTEyMzUtXG4tLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfcmluZ19zdWJtaXNzaW9uLmM9MzE0PXN0YXRpYyB2b2lkIHhjc19zYW5pdGl6ZShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpXG4tLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfcmluZ19zdWJtaXNzaW9uLmMtMzQwLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfcmluZ19zdWJtaXNzaW9uLmM6MzQxOnN0YXRpYyB2b2lkIHJlc2V0X3ByZXBhcmUoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfcmluZ19zdWJtaXNzaW9uLmMtMzQyLXtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9yaW5nX3N1Ym1pc3Npb24uYz0xMTU0PXN0YXRpYyB2b2lkIHNldHVwX2NvbW1vbihzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpXG4tLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfcmluZ19zdWJtaXNzaW9uLmMtMTE2NS1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX3Jpbmdfc3VibWlzc2lvbi5jOjExNjY6XHRlbmdpbmUtXHUwMDNlcmVzZXQucHJlcGFyZSA9IHJlc2V0X3ByZXBhcmU7XG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9yaW5nX3N1Ym1pc3Npb24uYy0xMTY3LVx0ZW5naW5lLVx1MDAzZXJlc2V0LnJld2luZCA9IHJlc2V0X3Jld2luZDtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9zZWxmdGVzdF9yZXNldC5jPTI2MD1zdGF0aWMgaW50IGlndF9hdG9taWNfcmVzZXQodm9pZCAqYXJnKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X3Jlc2V0LmMtMjgwLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qvc2VsZnRlc3RfcmVzZXQuYzoyODE6XHRcdGF3YWtlID0gcmVzZXRfcHJlcGFyZShndCk7XG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9zZWxmdGVzdF9yZXNldC5jLTI4Mi1cdFx0cC1cdTAwM2Vjcml0aWNhbF9zZWN0aW9uX2JlZ2luKCk7XG4tLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjX3N1Ym1pc3Npb24uYz0xMDc3PXN0YXRpYyB2b2lkIHNjcnViX2d1Y19kZXNjX2Zvcl9vdXRzdGFuZGluZ19nMmgoc3RydWN0IGludGVsX2d1YyAqZ3VjKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Y19zdWJtaXNzaW9uLmMtMTEwNC1cdFx0ICogdG8gYmUgdmlzaWJsZSB0byBhbGwgY2FsbGVycyB3aG8gc2V0IHRoZSBiZWxvdyBmbGFncyAoc2VlIGFib3ZlXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfc3VibWlzc2lvbi5jOjExMDU6XHRcdCAqIGZsdXNoIGFuZCBmbHVzaGVzIGluIHJlc2V0X3ByZXBhcmUpLiBJZiBzdWJtaXNzaW9uX2Rpc2FibGVkKClcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Y19zdWJtaXNzaW9uLmMtMTEwNi1cdFx0ICogaXMgc2V0LCB0aGUgY2FsbGVyIHNob3VsZG4mIzM5O3Qgc2V0IHRoZXNlIGZsYWdzLlxuLS1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Y19zdWJtaXNzaW9uLmM9MTM5MT1zdGF0aWMgdm9pZCBndWNfY2FuY2VsX2J1c3luZXNzX3dvcmtlcihzdHJ1Y3QgaW50ZWxfZ3VjICpndWMpXG4tLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjX3N1Ym1pc3Npb24uYy0xNDI1LVx0ICogQW5kIG5vdGUgdGhhdCBpbiB0aGUgY2FzZSBvZiBhIHJlc2V0IG9jY3VycmluZyBkdXJpbmcgZHJpdmVyIHVubG9hZFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjX3N1Ym1pc3Npb24uYzoxNDI2Olx0ICogKHdlZGdlZF9vbl9maW5pKSwgc2tpcHBpbmcgdGhlIGNhbmNlbCBpbiByZXNldF9wcmVwYXJlL3Jlc2V0X2ZpbmkgKHdoZW4gdGhlXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfc3VibWlzc2lvbi5jLTE0MjctXHQgKiByZXNldCBmbGFnL211dGV4IGFyZSBzZXQpIGlzIGZpbmUgYmVjYXVzZSB0aGVyZSBpcyBhbm90aGVyIGV4cGxpY2l0IGNhbmNlbCBpblxuLS1cbmRyaXZlcnMvbWVkaWEvcGNpL2ludGVsL2lwdTYvaXB1Ni5jPTgxNj1zdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9lcnJvcl9oYW5kbGVycyBwY2lfZXJyX2hhbmRsZXJzID0ge1xuZHJpdmVycy9tZWRpYS9wY2kvaW50ZWwvaXB1Ni9pcHU2LmM6ODE3Olx0LnJlc2V0X3ByZXBhcmUgPSBpcHU2X3BjaV9yZXNldF9wcmVwYXJlLFxuZHJpdmVycy9tZWRpYS9wY2kvaW50ZWwvaXB1Ni9pcHU2LmMtODE4LVx0LnJlc2V0X2RvbmUgPSBpcHU2X3BjaV9yZXNldF9kb25lLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9tYWluLmM9NTkwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2Vycm9yX2hhbmRsZXJzIHBkc2NfZXJyX2hhbmRsZXIgPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvbWFpbi5jLTU5MS1cdC8qIEZMUiBoYW5kbGluZyAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL21haW4uYzo1OTI6XHQucmVzZXRfcHJlcGFyZSAgICAgID0gcGRzY19yZXNldF9wcmVwYXJlLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL21haW4uYy01OTMtXHQucmVzZXRfZG9uZSAgICAgICAgID0gcGRzY19yZXNldF9kb25lLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjQvY3hnYjRfbWFpbi5jPTU2MTY9c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZXJyb3JfaGFuZGxlcnMgY3hnYjRfZWVoID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjQvY3hnYjRfbWFpbi5jLTU2MTktXHQucmVzdW1lICAgICAgICAgPSBlZWhfcmVzdW1lLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiNC9jeGdiNF9tYWluLmM6NTYyMDpcdC5yZXNldF9wcmVwYXJlICA9IGVlaF9yZXNldF9wcmVwYXJlLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiNC9jeGdiNF9tYWluLmMtNTYyMS1cdC5yZXNldF9kb25lICAgICA9IGVlaF9yZXNldF9kb25lLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaWJtY2dlL2hiZ19lcnIuYz0xODQ9c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZXJyb3JfaGFuZGxlcnMgaGJnX3BjaV9lcnJfaGFuZGxlciA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlibWNnZS9oYmdfZXJyLmMtMTg2LVx0LnNsb3RfcmVzZXQgPSBoYmdfcGNpX2Vycl9zbG90X3Jlc2V0LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpYm1jZ2UvaGJnX2Vyci5jOjE4NzpcdC5yZXNldF9wcmVwYXJlID0gaGJnX3BjaV9lcnJfcmVzZXRfcHJlcGFyZSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaWJtY2dlL2hiZ19lcnIuYy0xODgtXHQucmVzZXRfZG9uZSA9IGhiZ19wY2lfZXJyX3Jlc2V0X2RvbmUsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5hZTMuaD02MTA9c3RydWN0IGhuYWUzX2FlX29wcyB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5hZTMuaC02MTItXHR2b2lkICgqdW5pbml0X2FlX2Rldikoc3RydWN0IGhuYWUzX2FlX2RldiAqYWVfZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huYWUzLmg6NjEzOlx0dm9pZCAoKnJlc2V0X3ByZXBhcmUpKHN0cnVjdCBobmFlM19hZV9kZXYgKmFlX2RldixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huYWUzLmgtNjE0LVx0XHRcdCAgICAgIGVudW0gaG5hZTNfcmVzZXRfdHlwZSByc3RfdHlwZSk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmM9MzI0Nz1zdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkIGhuczNfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmMtMzI1Mi1cdFx0ZGV2X2luZm8oZGV2LCBcJiMzNDtCZWdpbiB0byBzdXNwZW5kLlxcblwmIzM0Oyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2VuZXQuYzozMjUzOlx0XHRpZiAoYWVfZGV2LVx1MDAzZW9wcyBcdTAwMjZcdTAwMjYgYWVfZGV2LVx1MDAzZW9wcy1cdTAwM2VyZXNldF9wcmVwYXJlKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmM6MzI1NDpcdFx0XHRhZV9kZXYtXHUwMDNlb3BzLVx1MDAzZXJlc2V0X3ByZXBhcmUoYWVfZGV2LCBITkFFM19GVU5DX1JFU0VUKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5jLTMyNTUtXHR9XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmM9MzMyNj1zdGF0aWMgdm9pZCBobnMzX3Jlc2V0X3ByZXBhcmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmMtMzMzMC1cdGRldl9pbmZvKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBcJiMzNDtGTFIgcHJlcGFyZVxcblwmIzM0Oyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2VuZXQuYzozMzMxOlx0aWYgKGFlX2RldiBcdTAwMjZcdTAwMjYgYWVfZGV2LVx1MDAzZW9wcyBcdTAwMjZcdTAwMjYgYWVfZGV2LVx1MDAzZW9wcy1cdTAwM2VyZXNldF9wcmVwYXJlKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmM6MzMzMjpcdFx0YWVfZGV2LVx1MDAzZW9wcy1cdTAwM2VyZXNldF9wcmVwYXJlKGFlX2RldiwgSE5BRTNfRkxSX1JFU0VUKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5jLTMzMzMtfVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5jPTMzNDQ9c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZXJyb3JfaGFuZGxlcnMgaG5zM19lcnJfaGFuZGxlciA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2VuZXQuYy0zMzQ2LVx0LnNsb3RfcmVzZXQgICAgID0gaG5zM19zbG90X3Jlc2V0LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmM6MzM0NzpcdC5yZXNldF9wcmVwYXJlXHQ9IGhuczNfcmVzZXRfcHJlcGFyZSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5jLTMzNDgtXHQucmVzZXRfZG9uZVx0PSBobnMzX3Jlc2V0X2RvbmUsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21haW4uYz0xMDYwMD1zdGF0aWMgY29uc3Qgc3RydWN0IGhuYWUzX2FlX29wcyBoY2xnZV9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21haW4uYy0xMDYwMi1cdC51bmluaXRfYWVfZGV2ID0gaGNsZ2VfdW5pbml0X2FlX2RldixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmM6MTA2MDM6XHQucmVzZXRfcHJlcGFyZSA9IGhjbGdlX3Jlc2V0X3ByZXBhcmVfZ2VuZXJhbCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmMtMTA2MDQtXHQucmVzZXRfZG9uZSA9IGhjbGdlX3Jlc2V0X2RvbmUsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3ZmL2hjbGdldmZfbWFpbi5jPTMzNDU9c3RhdGljIGNvbnN0IHN0cnVjdCBobmFlM19hZV9vcHMgaGNsZ2V2Zl9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3ZmL2hjbGdldmZfbWFpbi5jLTMzNDctXHQudW5pbml0X2FlX2RldiA9IGhjbGdldmZfdW5pbml0X2FlX2RldixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczN2Zi9oY2xnZXZmX21haW4uYzozMzQ4Olx0LnJlc2V0X3ByZXBhcmUgPSBoY2xnZXZmX3Jlc2V0X3ByZXBhcmVfZ2VuZXJhbCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczN2Zi9oY2xnZXZmX21haW4uYy0zMzQ5LVx0LnJlc2V0X2RvbmUgPSBoY2xnZXZmX3Jlc2V0X2RvbmUsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZm0xMGsvZm0xMGtfcGNpLmM9MjQ5MT1zdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9lcnJvcl9oYW5kbGVycyBmbTEwa19lcnJfaGFuZGxlciA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9mbTEway9mbTEwa19wY2kuYy0yNDk0LVx0LnJlc3VtZSA9IGZtMTBrX2lvX3Jlc3VtZSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ZtMTBrL2ZtMTBrX3BjaS5jOjI0OTU6XHQucmVzZXRfcHJlcGFyZSA9IGZtMTBrX2lvX3Jlc2V0X3ByZXBhcmUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9mbTEway9mbTEwa19wY2kuYy0yNDk2LVx0LnJlc2V0X2RvbmUgPSBmbTEwa19pb19yZXNldF9kb25lLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9tYWluLmM9MTY2MDQ9c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZXJyb3JfaGFuZGxlcnMgaTQwZV9lcnJfaGFuZGxlciA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfbWFpbi5jLTE2NjA2LVx0LnNsb3RfcmVzZXQgPSBpNDBlX3BjaV9lcnJvcl9zbG90X3Jlc2V0LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX21haW4uYzoxNjYwNzpcdC5yZXNldF9wcmVwYXJlID0gaTQwZV9wY2lfZXJyb3JfcmVzZXRfcHJlcGFyZSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9tYWluLmMtMTY2MDgtXHQucmVzZXRfZG9uZSA9IGk0MGVfcGNpX2Vycm9yX3Jlc2V0X2RvbmUsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM9NTg0MT1zdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9lcnJvcl9oYW5kbGVycyBpY2VfcGNpX2Vycl9oYW5kbGVyID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTU4NDMtXHQuc2xvdF9yZXNldCA9IGljZV9wY2lfZXJyX3Nsb3RfcmVzZXQsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYzo1ODQ0Olx0LnJlc2V0X3ByZXBhcmUgPSBpY2VfcGNpX2Vycl9yZXNldF9wcmVwYXJlLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNTg0NS1cdC5yZXNldF9kb25lID0gaWNlX3BjaV9lcnJfcmVzZXRfZG9uZSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2J2Zi9uZXRkZXYuYz0yOTI5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2Vycm9yX2hhbmRsZXJzIGlnYnZmX2Vycl9oYW5kbGVyID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYnZmL25ldGRldi5jLTI5MzItXHQucmVzdW1lID0gaWdidmZfaW9fcmVzdW1lLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdidmYvbmV0ZGV2LmM6MjkzMzpcdC5yZXNldF9wcmVwYXJlID0gaWdidmZfaW9fcHJlcGFyZSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYnZmL25ldGRldi5jLTI5MzQtXHQucmVzZXRfZG9uZSA9IGlnYnZmX2lvX3Jlc2V0X2RvbmUsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvcGNpLmM9MjUyMD1zdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9lcnJvcl9oYW5kbGVycyBtbHhzd19wY2lfZXJyX2hhbmRsZXIgPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9wY2kuYzoyNTIxOlx0LnJlc2V0X3ByZXBhcmUgPSBtbHhzd19wY2lfcmVzZXRfcHJlcGFyZSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3BjaS5jLTI1MjItXHQucmVzZXRfZG9uZSA9IG1seHN3X3BjaV9yZXNldF9kb25lLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3BlbnNhbmRvL2lvbmljL2lvbmljX2J1c19wY2kuYz01MTI9c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZXJyb3JfaGFuZGxlcnMgaW9uaWNfZXJyX2hhbmRsZXIgPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9wZW5zYW5kby9pb25pYy9pb25pY19idXNfcGNpLmMtNTEzLVx0LyogRkxSIGhhbmRsaW5nICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9wZW5zYW5kby9pb25pYy9pb25pY19idXNfcGNpLmM6NTE0Olx0LnJlc2V0X3ByZXBhcmUgICAgICA9IGlvbmljX3Jlc2V0X3ByZXBhcmUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9wZW5zYW5kby9pb25pYy9pb25pY19idXNfcGNpLmMtNTE1LVx0LnJlc2V0X2RvbmUgICAgICAgICA9IGlvbmljX3Jlc2V0X2RvbmUsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3BjaWUuYz01NzE9c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZXJyb3JfaGFuZGxlcnMgbXdpZmlleF9wY2llX2Vycl9oYW5kbGVyID0ge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3BjaWUuYzo1NzI6XHQucmVzZXRfcHJlcGFyZVx0XHQ9IG13aWZpZXhfcGNpZV9yZXNldF9wcmVwYXJlLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3BjaWUuYy01NzMtXHQucmVzZXRfZG9uZVx0XHQ9IG13aWZpZXhfcGNpZV9yZXNldF9kb25lLFxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L3BjaS5jPTQxMDY9c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZXJyb3JfaGFuZGxlcnMgbnZtZV9lcnJfaGFuZGxlciA9IHtcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9wY2kuYy00MTA5LVx0LnJlc3VtZVx0XHQ9IG52bWVfZXJyb3JfcmVzdW1lLFxuZHJpdmVycy9udm1lL2hvc3QvcGNpLmM6NDExMDpcdC5yZXNldF9wcmVwYXJlXHQ9IG52bWVfcmVzZXRfcHJlcGFyZSxcbmRyaXZlcnMvbnZtZS9ob3N0L3BjaS5jLTQxMTEtXHQucmVzZXRfZG9uZVx0PSBudm1lX3Jlc2V0X2RvbmUsXG4tLVxuZHJpdmVycy9wY2kvcGNpLmM9NTA4OD1zdGF0aWMgdm9pZCBwY2lfZGV2X3NhdmVfYW5kX2Rpc2FibGUoc3RydWN0IHBjaV9kZXYgKmRldilcbi0tXG5kcml2ZXJzL3BjaS9wY2kuYy01MDkzLVx0LypcbmRyaXZlcnMvcGNpL3BjaS5jOjUwOTQ6XHQgKiBkZXYtXHUwMDNlZHJpdmVyLVx1MDAzZWVycl9oYW5kbGVyLVx1MDAzZXJlc2V0X3ByZXBhcmUoKSBpcyBwcm90ZWN0ZWQgYWdhaW5zdFxuZHJpdmVycy9wY2kvcGNpLmMtNTA5NS1cdCAqIHJhY2VzIHdpdGggLVx1MDAzZXJlbW92ZSgpIGJ5IHRoZSBkZXZpY2UgbG9jaywgd2hpY2ggbXVzdCBiZSBoZWxkIGJ5XG4tLVxuZHJpdmVycy9wY2kvcGNpLmMtNTA5OC1cdGRldmljZV9sb2NrX2Fzc2VydChcdTAwMjZkZXYtXHUwMDNlZGV2KTtcbmRyaXZlcnMvcGNpL3BjaS5jOjUwOTk6XHRpZiAoZXJyX2hhbmRsZXIgXHUwMDI2XHUwMDI2IGVycl9oYW5kbGVyLVx1MDAzZXJlc2V0X3ByZXBhcmUpXG5kcml2ZXJzL3BjaS9wY2kuYzo1MTAwOlx0XHRlcnJfaGFuZGxlci1cdTAwM2VyZXNldF9wcmVwYXJlKGRldik7XG5kcml2ZXJzL3BjaS9wY2kuYy01MTAxLVx0ZWxzZSBpZiAoZGV2LVx1MDAzZWRyaXZlcilcbi0tXG5kcml2ZXJzL3Njc2kvaGlzaV9zYXMvaGlzaV9zYXNfdjNfaHcuYz01MzA2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2Vycm9yX2hhbmRsZXJzIGhpc2lfc2FzX2Vycl9oYW5kbGVyID0ge1xuZHJpdmVycy9zY3NpL2hpc2lfc2FzL2hpc2lfc2FzX3YzX2h3LmM6NTMwNzpcdC5yZXNldF9wcmVwYXJlXHQ9IGhpc2lfc2FzX3Jlc2V0X3ByZXBhcmVfdjNfaHcsXG5kcml2ZXJzL3Njc2kvaGlzaV9zYXMvaGlzaV9zYXNfdjNfaHcuYy01MzA4LVx0LnJlc2V0X2RvbmVcdD0gaGlzaV9zYXNfcmVzZXRfZG9uZV92M19odyxcbi0tXG5kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfb3MuYz04MzEyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2Vycm9yX2hhbmRsZXJzIHFsYTJ4eHhfZXJyX2hhbmRsZXIgPSB7XG4tLVxuZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX29zLmMtODMxNi1cdC5yZXN1bWUgPSBxbGEyeHh4X3BjaV9yZXN1bWUsXG5kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfb3MuYzo4MzE3Olx0LnJlc2V0X3ByZXBhcmUgPSBxbGFfcGNpX3Jlc2V0X3ByZXBhcmUsXG5kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfb3MuYy04MzE4LVx0LnJlc2V0X2RvbmUgPSBxbGFfcGNpX3Jlc2V0X2RvbmUsXG4tLVxuZHJpdmVycy9zdGFnaW5nL21lZGlhL2lwdTcvaXB1Ny5jPTI3NTI9c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZXJyb3JfaGFuZGxlcnMgcGNpX2Vycl9oYW5kbGVycyA9IHtcbmRyaXZlcnMvc3RhZ2luZy9tZWRpYS9pcHU3L2lwdTcuYzoyNzUzOlx0LnJlc2V0X3ByZXBhcmUgPSBpcHU3X3BjaV9yZXNldF9wcmVwYXJlLFxuZHJpdmVycy9zdGFnaW5nL21lZGlhL2lwdTcvaXB1Ny5jLTI3NTQtXHQucmVzZXRfZG9uZSA9IGlwdTdfcGNpX3Jlc2V0X2RvbmUsXG4tLVxuZHJpdmVycy92ZmlvL3BjaS9oaXNpbGljb24vaGlzaV9hY2NfdmZpb19wY2kuYz0xNzIxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2Vycm9yX2hhbmRsZXJzIGhpc2lfYWNjX3ZmX2Vycl9oYW5kbGVycyA9IHtcbmRyaXZlcnMvdmZpby9wY2kvaGlzaWxpY29uL2hpc2lfYWNjX3ZmaW9fcGNpLmM6MTcyMjpcdC5yZXNldF9wcmVwYXJlID0gaGlzaV9hY2NfdmZfcGNpX3Jlc2V0X3ByZXBhcmUsXG5kcml2ZXJzL3ZmaW8vcGNpL2hpc2lsaWNvbi9oaXNpX2FjY192ZmlvX3BjaS5jLTE3MjMtXHQucmVzZXRfZG9uZSA9IGhpc2lfYWNjX3ZmX3BjaV9hZXJfcmVzZXRfZG9uZSxcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3hlL21haW4uYz0xNDA9c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZXJyb3JfaGFuZGxlcnMgeGVfdmZpb19wY2lfZXJyX2hhbmRsZXJzID0ge1xuZHJpdmVycy92ZmlvL3BjaS94ZS9tYWluLmM6MTQxOlx0LnJlc2V0X3ByZXBhcmUgPSB4ZV92ZmlvX3BjaV9yZXNldF9wcmVwYXJlLFxuZHJpdmVycy92ZmlvL3BjaS94ZS9tYWluLmMtMTQyLVx0LnJlc2V0X2RvbmUgPSB4ZV92ZmlvX3BjaV9yZXNldF9kb25lLFxuLS1cbmRyaXZlcnMvdmlydGlvL3ZpcnRpby5jPTY5OD1pbnQgdmlydGlvX2RldmljZV9yZXNldF9wcmVwYXJlKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy92aXJ0aW8vdmlydGlvLmMtNzAyLVxuZHJpdmVycy92aXJ0aW8vdmlydGlvLmM6NzAzOlx0aWYgKCFkcnYgfHwgIWRydi1cdTAwM2VyZXNldF9wcmVwYXJlKVxuZHJpdmVycy92aXJ0aW8vdmlydGlvLmMtNzA0LVx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4tLVxuZHJpdmVycy92aXJ0aW8vdmlydGlvLmMtNzA5LVxuZHJpdmVycy92aXJ0aW8vdmlydGlvLmM6NzEwOlx0cmV0ID0gZHJ2LVx1MDAzZXJlc2V0X3ByZXBhcmUoZGV2KTtcbmRyaXZlcnMvdmlydGlvL3ZpcnRpby5jLTcxMS1cdGlmIChyZXQpIHtcbi0tXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcGNpX2NvbW1vbi5jPTgzMz1zdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9lcnJvcl9oYW5kbGVycyB2aXJ0aW9fcGNpX2Vycl9oYW5kbGVyID0ge1xuZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaV9jb21tb24uYzo4MzQ6XHQucmVzZXRfcHJlcGFyZSAgPSB2aXJ0aW9fcGNpX3Jlc2V0X3ByZXBhcmUsXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcGNpX2NvbW1vbi5jLTgzNS1cdC5yZXNldF9kb25lICAgICA9IHZpcnRpb19wY2lfcmVzZXRfZG9uZSxcbi0tXG5pbmNsdWRlL2xpbnV4L2NkeC9jZHhfYnVzLmg9MTQzPXN0cnVjdCBjZHhfZGV2aWNlIHtcbi0tXG5pbmNsdWRlL2xpbnV4L2NkeC9jZHhfYnVzLmgtMTg3LSAqIEBzaHV0ZG93bjogRnVuY3Rpb24gY2FsbGVkIGF0IHNodXRkb3duIHRpbWUgdG8gcXVpZXNjZSB0aGUgZGV2aWNlXG5pbmNsdWRlL2xpbnV4L2NkeC9jZHhfYnVzLmg6MTg4OiAqIEByZXNldF9wcmVwYXJlOiBGdW5jdGlvbiBjYWxsZWQgYmVmb3JlIGlzIHJlc2V0IHRvIG5vdGlmeSBkcml2ZXJcbmluY2x1ZGUvbGludXgvY2R4L2NkeF9idXMuaC0xODktICogQHJlc2V0X2RvbmU6IEZ1bmN0aW9uIGNhbGxlZCBhZnRlciByZXNldCBpcyBjb21wbGV0ZSB0byBub3RpZnkgZHJpdmVyXG4tLVxuaW5jbHVkZS9saW51eC9jZHgvY2R4X2J1cy5oPTE5OD1zdHJ1Y3QgY2R4X2RyaXZlciB7XG4tLVxuaW5jbHVkZS9saW51eC9jZHgvY2R4X2J1cy5oLTIwMy1cdHZvaWQgKCpzaHV0ZG93bikoc3RydWN0IGNkeF9kZXZpY2UgKmRldik7XG5pbmNsdWRlL2xpbnV4L2NkeC9jZHhfYnVzLmg6MjA0Olx0dm9pZCAoKnJlc2V0X3ByZXBhcmUpKHN0cnVjdCBjZHhfZGV2aWNlICpkZXYpO1xuaW5jbHVkZS9saW51eC9jZHgvY2R4X2J1cy5oLTIwNS1cdHZvaWQgKCpyZXNldF9kb25lKShzdHJ1Y3QgY2R4X2RldmljZSAqZGV2KTtcbi0tXG5pbmNsdWRlL2xpbnV4L3BjaS5oPTk0OD1zdHJ1Y3QgcGNpX2Vycm9yX2hhbmRsZXJzIHtcbi0tXG5pbmNsdWRlL2xpbnV4L3BjaS5oLTk1OS1cdC8qIFBDSSBmdW5jdGlvbiByZXNldCBwcmVwYXJlIG9yIGNvbXBsZXRlZCAqL1xuaW5jbHVkZS9saW51eC9wY2kuaDo5NjA6XHR2b2lkICgqcmVzZXRfcHJlcGFyZSkoc3RydWN0IHBjaV9kZXYgKmRldik7XG5pbmNsdWRlL2xpbnV4L3BjaS5oLTk2MS1cdHZvaWQgKCpyZXNldF9kb25lKShzdHJ1Y3QgcGNpX2RldiAqZGV2KTtcbi0tXG5pbmNsdWRlL2xpbnV4L3ZpcnRpby5oPTIyMD1zaXplX3QgdmlydGlvX21heF9kbWFfc2l6ZShjb25zdCBzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldik7XG4tLVxuaW5jbHVkZS9saW51eC92aXJ0aW8uaC0yNDItICogQHJlc3RvcmU6IG9wdGlvbmFsIGZ1bmN0aW9uIHRvIGNhbGwgb24gcmVzdW1lLlxuaW5jbHVkZS9saW51eC92aXJ0aW8uaDoyNDM6ICogQHJlc2V0X3ByZXBhcmU6IG9wdGlvbmFsIGZ1bmN0aW9uIHRvIGNhbGwgd2hlbiBhIHRyYW5zcG9ydCBzcGVjaWZpYyByZXNldFxuaW5jbHVkZS9saW51eC92aXJ0aW8uaC0yNDQtICogICAgb2NjdXJzLlxuLS1cbmluY2x1ZGUvbGludXgvdmlydGlvLmg9MjUwPXN0cnVjdCB2aXJ0aW9fZHJpdmVyIHtcbi0tXG5pbmNsdWRlL2xpbnV4L3ZpcnRpby5oLTI2My1cdGludCAoKnJlc3RvcmUpKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICpkZXYpO1xuaW5jbHVkZS9saW51eC92aXJ0aW8uaDoyNjQ6XHRpbnQgKCpyZXNldF9wcmVwYXJlKShzdHJ1Y3QgdmlydGlvX2RldmljZSAqZGV2KTtcbmluY2x1ZGUvbGludXgvdmlydGlvLmgtMjY1LVx0aW50ICgqcmVzZXRfZG9uZSkoc3RydWN0IHZpcnRpb19kZXZpY2UgKmRldik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDk6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM5NTYKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiA1NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHJlbGF0ZXMgdG8gdGhhdCBjb2RlOgoKKipBbmFseXppbmcgdGhlIFZpcnRJTyBEZXZpY2UgUmVzZXQgUHJlcGFyYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJJiMzOTttIGxvb2tpbmcgYXQgYGRyaXZlcnMvdmlydGlvL3ZpcnRpby5jYCwgc3BlY2lmaWNhbGx5IHRoZSBmdW5jdGlvbiBgdmlydGlvX2RldmljZV9yZXNldF9wcmVwYXJlKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICpkZXYpYC4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzOiAqd2hlcmUqIGlzIHRoaXMgZnVuY3Rpb24gYWN0dWFsbHkgaW52b2tlZCB3aXRoaW4gdGhlIGJyb2FkZXIgc3lzdGVtPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29udGV4dC4gS25vd2luZyB3aGVyZSBpdCYjMzk7cyBjYWxsZWQgd2lsbCBnaXZlIG1lIGluc2lnaHRzIGludG8gKndoeSogaXQmIzM5O3MgYmVpbmcgY2FsbGVkIGFuZCB0aGUgc2NlbmFyaW9zIGl0JiMzOTtzIGludGVuZGVkIHRvIGhhbmRsZS4gU28sIEkgbmVlZCB0byBkbyBhIHF1aWNrIGNvZGUgc2VhcmNoLiBJJiMzOTtsbCB1c2UgYGdyZXBgIChvciB3aGF0ZXZlciBzZWFyY2ggdG9vbCBpcyBhdCBoYW5kKSB0byBmaW5kIGFsbCB0aGUgaW5zdGFuY2VzIHdoZXJlIGB2aXJ0aW9fZGV2aWNlX3Jlc2V0X3ByZXBhcmVgIGlzIGV4cGxpY2l0bHkgY2FsbGVkIHdpdGhpbiB0aGUgY29kZWJhc2UuIFRoYXQmIzM5O3MgdGhlIGJlc3Qgd2F5IHRvIHVuZGVyc3RhbmQgaXRzIHB1cnBvc2Ugd2l0aGluIHRoZSBkZXZpY2UgcmVzZXQgZmxvdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDk6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmlydGlvX2RldmljZV9yZXNldF9wcmVwYXJlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmlydGlvL3ZpcnRpby5jPTY5NT1FWFBPUlRfU1lNQk9MX0dQTCh2aXJ0aW9fZGV2aWNlX3Jlc3RvcmUpO1xuLS1cbmRyaXZlcnMvdmlydGlvL3ZpcnRpby5jLTY5Ny1cbmRyaXZlcnMvdmlydGlvL3ZpcnRpby5jOjY5ODppbnQgdmlydGlvX2RldmljZV9yZXNldF9wcmVwYXJlKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICpkZXYpXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW8uYy02OTkte1xuLS1cbmRyaXZlcnMvdmlydGlvL3ZpcnRpby5jLTcxNy19XG5kcml2ZXJzL3ZpcnRpby92aXJ0aW8uYzo3MTg6RVhQT1JUX1NZTUJPTF9HUEwodmlydGlvX2RldmljZV9yZXNldF9wcmVwYXJlKTtcbmRyaXZlcnMvdmlydGlvL3ZpcnRpby5jLTcxOS1cbi0tXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcGNpX2NvbW1vbi5jPTc5OD1zdGF0aWMgdm9pZCB2aXJ0aW9fcGNpX3Jlc2V0X3ByZXBhcmUoc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYpXG4tLVxuZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaV9jb21tb24uYy04MDItXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcGNpX2NvbW1vbi5jOjgwMzpcdHJldCA9IHZpcnRpb19kZXZpY2VfcmVzZXRfcHJlcGFyZShcdTAwMjZ2cF9kZXYtXHUwMDNldmRldik7XG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcGNpX2NvbW1vbi5jLTgwNC1cdGlmIChyZXQpIHtcbi0tXG5pbmNsdWRlL2xpbnV4L3ZpcnRpby5oPTIxNj12b2lkIHZpcnRpb19kZXZpY2Vfc2h1dGRvd24oc3RydWN0IHZpcnRpb19kZXZpY2UgKmRldik7XG5pbmNsdWRlL2xpbnV4L3ZpcnRpby5oOjIxNzppbnQgdmlydGlvX2RldmljZV9yZXNldF9wcmVwYXJlKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICpkZXYpO1xuaW5jbHVkZS9saW51eC92aXJ0aW8uaC0yMTgtaW50IHZpcnRpb19kZXZpY2VfcmVzZXRfZG9uZShzdHJ1Y3QgdmlydGlvX2RldmljZSAqZGV2KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDk6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ2MjMKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqVHJhY2luZyBgdmlydGlvX2RldmljZV9mcmVlemVgKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjYWxsIGdyYXBoIGZvciBgdmlydGlvX2RldmljZV9mcmVlemVgLiBUaGF0JiMzOTtzIHRoZSBrZXkgcXVlc3Rpb24sIHJpZ2h0PyBXaGVyZSBpcyB0aGF0IGZ1bmN0aW9uICphY3R1YWxseSogYmVpbmcgaW52b2tlZCB3aXRoaW4gdGhlIHN5c3RlbT8gSSBuZWVkIHRvIHRyYWNrIGRvd24gYWxsIHRoZSBjYWxsIHNpdGVzIHRvIGdldCBhIGNvbXBsZXRlIHBpY3R1cmUuIExldCYjMzk7cyBzdGFydCBieSBsb29raW5nIGZvciBkaXJlY3QgY2FsbHMgdG8gYHZpcnRpb19kZXZpY2VfZnJlZXplYC4gSSYjMzk7bGwgbmVlZCB0byB1c2UgbXkgcHJlZmVycmVkIGRlYnVnZ2luZyB0b29scyBhbmQgY29kZSBzZWFyY2hpbmcgdGVjaG5pcXVlcyB0byBpZGVudGlmeSB0aGVtLiBJIHNob3VsZCBhbHNvIGNoZWNrIHRoZSByZWxldmFudCBkb2N1bWVudGF0aW9uIG9yIHNvdXJjZSBjb2RlIGNvbW1lbnRzIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBnaXZlIG1lIG1vcmUgcG9pbnRlcnMsIHRvIG1ha2Ugc3VyZSBJIGFtIG5vdCBtaXNzaW5nIGFueSBpbmRpcmVjdCBjYWxscy4gVGhpcyB3aWxsIHJlcXVpcmUgY2FyZWZ1bCBhbmFseXNpcywgYnV0IHdpdGggbXkgZXhwZXJ0aXNlLCBJJiMzOTttIGNvbmZpZGVudCBJIGNhbiBtYXAgdGhpcyBvdXQgZWZmZWN0aXZlbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA5OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZpcnRpb19kZXZpY2VfZnJlZXplJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmlydGlvL3ZpcnRpby5jPTYxMz1zdGF0aWMgaW50IHZpcnRpb19kZXZpY2VfcmVzdG9yZV9wcml2KHN0cnVjdCB2aXJ0aW9fZGV2aWNlICpkZXYsIGJvb2wgcmVzdG9yZSlcbi0tXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW8uYy02NjktI2lmZGVmIENPTkZJR19QTV9TTEVFUFxuZHJpdmVycy92aXJ0aW8vdmlydGlvLmM6NjcwOmludCB2aXJ0aW9fZGV2aWNlX2ZyZWV6ZShzdHJ1Y3QgdmlydGlvX2RldmljZSAqZGV2KVxuZHJpdmVycy92aXJ0aW8vdmlydGlvLmMtNjcxLXtcbi0tXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW8uYy02ODgtfVxuZHJpdmVycy92aXJ0aW8vdmlydGlvLmM6Njg5OkVYUE9SVF9TWU1CT0xfR1BMKHZpcnRpb19kZXZpY2VfZnJlZXplKTtcbmRyaXZlcnMvdmlydGlvL3ZpcnRpby5jLTY5MC1cbi0tXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbW1pby5jPTU1Nj1zdGF0aWMgaW50IHZpcnRpb19tbWlvX2ZyZWV6ZShzdHJ1Y3QgZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy92aXJ0aW8vdmlydGlvX21taW8uYy01NTktXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbW1pby5jOjU2MDpcdHJldHVybiB2aXJ0aW9fZGV2aWNlX2ZyZWV6ZShcdTAwMjZ2bV9kZXYtXHUwMDNldmRldik7XG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbW1pby5jLTU2MS19XG4tLVxuZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaV9jb21tb24uYz01OTk9c3RhdGljIGludCB2aXJ0aW9fcGNpX2ZyZWV6ZShzdHJ1Y3QgZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaV9jb21tb24uYy02MDQtXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcGNpX2NvbW1vbi5jOjYwNTpcdHJldCA9IHZpcnRpb19kZXZpY2VfZnJlZXplKFx1MDAyNnZwX2Rldi1cdTAwM2V2ZGV2KTtcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19wY2lfY29tbW9uLmMtNjA2LVxuLS1cbmluY2x1ZGUvbGludXgvdmlydGlvLmg9MjA5PXZvaWQgdmlydGlvX2NvbmZpZ19kcml2ZXJfZW5hYmxlKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICpkZXYpO1xuLS1cbmluY2x1ZGUvbGludXgvdmlydGlvLmgtMjExLSNpZmRlZiBDT05GSUdfUE1fU0xFRVBcbmluY2x1ZGUvbGludXgvdmlydGlvLmg6MjEyOmludCB2aXJ0aW9fZGV2aWNlX2ZyZWV6ZShzdHJ1Y3QgdmlydGlvX2RldmljZSAqZGV2KTtcbmluY2x1ZGUvbGludXgvdmlydGlvLmgtMjEzLWludCB2aXJ0aW9fZGV2aWNlX3Jlc3RvcmUoc3RydWN0IHZpcnRpb19kZXZpY2UgKmRldik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA5OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MzU5CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFJlY2VudCBDaGFuZ2UgaW4gdGhlIGB2aXJ0aW9fYmxrYCBEcml2ZXIqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZSBgdmlydGlvX2Jsa2AgZHJpdmVyLCBzcGVjaWZpY2FsbHkgdGhlIGB2aXJ0YmxrX2ZyZWV6ZV9wcml2YCBmdW5jdGlvbiB3aXRoaW4gYHZpcnRpb19ibGsuY2AuIEkmIzM5O20gZmFtaWxpYXIgd2l0aCB0aGlzIGNvZGU7IGl0JiMzOTtzIHJlc3BvbnNpYmxlIGZvciBoYW5kbGluZyBkZXZpY2UgZnJlZXppbmcsIGEgY3J1Y2lhbCBwYXJ0IG9mIG1hbmFnaW5nIHRoZSBibG9jayBkZXZpY2UmIzM5O3Mgc3RhdGUgZHVyaW5nIG9wZXJhdGlvbnMgbGlrZSBzdXNwZW5kIG9yIGhvdHBsdWcuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHRoaXMgZnVuY3Rpb24uCgpSaWdodCwgYFZJUlRJT19CTEtgIGlzIGEgdmlydGlvIGJsb2NrIGRldmljZSBkcml2ZXIuIE5vdywgSSBzZWUgdGhlIGNvZGUgc25pcHBldCB3aGVyZSBpdCB1c2VzIGBibGtfbXFfZnJlZXplX3F1ZXVlYCwgYGJsa19tcV9xdWllc2NlX3F1ZXVlYCwgYW5kIGBibGtfbXFfdW5mcmVlemVfcXVldWVgLiBNeSBhdHRlbnRpb24gaXMgaW1tZWRpYXRlbHkgZHJhd24gdG8gdGhlIHN1YnRsZSBjaGFuZ2UgZnJvbSBgYmxrX21xX3F1aWVzY2VfcXVldWVfbm93YWl0KHEpYCB0byBqdXN0IGBibGtfbXFfcXVpZXNjZV9xdWV1ZShxKWAuIFRoYXQgZGlmZmVyZW5jZSBzdWdnZXN0cyBhIHNpZ25pZmljYW50IGNoYW5nZSBpbiBiZWhhdmlvci4gV2h5IHRoZSBtb2RpZmljYXRpb24/CgpUaGUgb3JpZ2luYWwgY29kZSB1c2VkIGBub3dhaXRgLCB3aGljaCBpbXBsaWVzIGFuIGFzeW5jaHJvbm91cyBxdWllc2NlIG9wZXJhdGlvbi4gVGhlIGN1cnJlbnQgdmVyc2lvbiBub3cgdXNlcyB0aGUgYmxvY2tpbmcgdmVyc2lvbi4gU28sIHdoYXQgd2FzIHRoZSByYXRpb25hbGUgZm9yIHRoaXMgY2hhbmdlPyBJIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBjb21taXQgaGlzdG9yeS4gVGhlIHN0YW5kYXJkIGFwcHJvYWNoIGlzIHRvIHVzZSBgZ2l0IGxvZ2AgdG9vbHMuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgd2l0aCBgZ2l0IGxvZyAtcCAtMWAgdG8gZXhhbWluZSB0aGUgbGFzdCBjb21taXQgdG91Y2hpbmcgdGhpcyBmdW5jdGlvbi4gSWYgdGhhdCBkb2VzbiYjMzk7dCBwcm92aWRlIGVub3VnaCBjb250ZXh0LCBJJiMzOTtsbCBicm9hZGVuIHRoZSBzZWFyY2ggd2l0aCBgZ2l0IGxvZyAtUyB2aXJ0YmxrX2ZyZWV6ZV9wcml2YCBvciBldmVuIGBnaXQgbG9nIC1wIC0yIGRyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jYCB0byBzZWUgbW9yZSBjaGFuZ2VzLiBFc3NlbnRpYWxseSwgSSYjMzk7bSB0cnlpbmcgdG8gZGV0ZXJtaW5lIHRoZSAqd2h5KiBiZWhpbmQgdGhpcyBhbHRlcmF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHN3aXRjaGluZyBmcm9tIGEgbm9uLWJsb2NraW5nIHRvIGEgYmxvY2tpbmcgcXVpZXNjZSBvcGVyYXRpb24gd2l0aGluIHRoaXMgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDk6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YmxrX21xX3F1aWVzY2VfcXVldWUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYz0xNTkwPXN0YXRpYyBpbnQgdmlydGJsa19mcmVlemVfcHJpdihzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldilcbi0tXG5kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYy0xNTk3LVx0bWVtZmxhZ3MgPSBibGtfbXFfZnJlZXplX3F1ZXVlKHEpO1xuZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmM6MTU5ODpcdGJsa19tcV9xdWllc2NlX3F1ZXVlKHEpO1xuZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmMtMTU5OS1cdGJsa19tcV91bmZyZWV6ZV9xdWV1ZShxLCBtZW1mbGFncyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA5OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MzcyCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogNzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3Mgd2hhdCYjMzk7cyBnb2luZyB0aHJvdWdoIG15IGhlYWQgYXMgSSBhcHByb2FjaCB0aGlzIGlzc3VlLgoKKipBbmFseXppbmcgQmxvY2sgTGF5ZXIgUXVpZXNjaW5nIEJlaGF2aW9yKioKCkFscmlnaHQsIHRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gZG8gaXMgZ2V0IHNvbWUgY29udGV4dCBvbiB0aGlzLiBNeSBpbnN0aW5jdCBpcyB0byBleGFtaW5lIHRoZSBHaXQgaGlzdG9yeSBmb3IgdGhpcyBjb2RlLCBpZiBwb3NzaWJsZS4gVGhhdCB3b3VsZCBiZSBpZGVhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgZXZvbHV0aW9uIG9mIHRoaXMgZnVuY3Rpb25hbGl0eS4gSG93ZXZlciwgSSBrbm93IEkgY2FuJiMzOTt0IGp1c3QgcnVuIGBnaXQgbG9nYCBkaXJlY3RseSB3aXRoIG15IGN1cnJlbnQgdG9vbHMuIFNvLCBJIG5lZWQgYSB3b3JrYXJvdW5kLiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgYSB3YXkgdG8gZ2V0IHRoZSBjb250ZXh0IEkgbmVlZC4KCkluc3RlYWQgb2YgZGlyZWN0bHkgbG9va2luZyBmb3IgdGhlIGdpdCBsb2csIGxldCYjMzk7cyBjb21wYXJlIHRob3NlIHR3byBmdW5jdGlvbnM6IGBibGtfbXFfcXVpZXNjZV9xdWV1ZWAgYW5kIGBibGtfbXFfcXVpZXNjZV9xdWV1ZV9ub3dhaXRgLiBUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZW0gc2hvdWxkIG9mZmVyIGEgY2x1ZSBvZiB0aGUgY3VycmVudCBpc3N1ZS4KCk5vdywgbXkgbmV4dCBzdGVwIGlzIGNsZWFyLiBMZXQmIzM5O3MgZGl2ZSByaWdodCBpbnRvIHRoZSBgYmxvY2svYmxrLW1xLmNgIGZpbGUgYW5kIHBpbnBvaW50IHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgYmxrX21xX3F1aWVzY2VfcXVldWVgLiBUaGF0IHNob3VsZCBpbGx1bWluYXRlIGV4YWN0bHkgd2hhdCYjMzk7cyBoYXBwZW5pbmcgdW5kZXIgdGhlIGhvb2QuIEhvcGVmdWxseSwgdGhhdCB3aWxsIGdpdmUgbWUgdGhlIGluZm9ybWF0aW9uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdW5jdGlvbiBhbmQgcmVzb2x2ZSB0aGUgcHJvYmxlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDk6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dm9pZCBibGtfbXFfcXVpZXNjZV9xdWV1ZVxcKCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9ibGstbXEuYz0yODg9RVhQT1JUX1NZTUJPTF9HUEwoYmxrX21xX3dhaXRfcXVpZXNjZV9kb25lKTtcbi0tXG5ibG9jay9ibGstbXEuYy0yOTgtICovXG5ibG9jay9ibGstbXEuYzoyOTk6dm9pZCBibGtfbXFfcXVpZXNjZV9xdWV1ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSlcbmJsb2NrL2Jsay1tcS5jLTMwMC17XG4tLVxuaW5jbHVkZS9saW51eC9ibGstbXEuaD05MzY9dm9pZCBibGtfbXFfc3RhcnRfc3RvcHBlZF9od19xdWV1ZXMoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIGJvb2wgYXN5bmMpO1xuaW5jbHVkZS9saW51eC9ibGstbXEuaDo5Mzc6dm9pZCBibGtfbXFfcXVpZXNjZV9xdWV1ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSk7XG5pbmNsdWRlL2xpbnV4L2Jsay1tcS5oLTkzOC12b2lkIGJsa19tcV93YWl0X3F1aWVzY2VfZG9uZShzdHJ1Y3QgYmxrX21xX3RhZ19zZXQgKnNldCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA5OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2OTQyCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IG1lbnRhbCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBibG9jay9ibGstbXEuYyoqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHNvbWUgYXNwZWN0IG9mIHRoZSBibG9jayBsYXllciwgYW5kIEkmIzM5O20gdGhpbmtpbmcgdGhlIHJlbGV2YW50IHNlY3Rpb24gaXMgYXJvdW5kIGxpbmUgMjkwIGluIGBibG9jay9ibGstbXEuY2AuIEkmIzM5O20gZm9jdXNpbmcgaW4gb24gdGhhdCBmaWxlIGFuZCBzcGVjaWZpYyBsaW5lIHJhbmdlIGJlY2F1c2UgbXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGF0JiMzOTtzIHdoZXJlIEkmIzM5O20gbGlrZWx5IHRvIGZpbmQgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgcmVsYXRlZCB0byB3aGF0ZXZlciBJJiMzOTttIHRyb3VibGVzaG9vdGluZyBvciBpbnZlc3RpZ2F0aW5nIHJpZ2h0IG5vdy4gSSBrbm93IHRoZSBnZW5lcmFsIGFyY2hpdGVjdHVyZSwgYnV0IEkgbmVlZCB0byBnZXQgaW50byB0aGUgZGV0YWlscyB0byBmdWxseSB1bmRlcnN0YW5kIGl0LiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaW4gdGhhdCBzZWN0aW9uLiBUaW1lIHRvIHN0YXJ0IHJlYWRpbmchCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA5OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YmxvY2svYmxrLW1xLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI3MDpcdEVYUE9SVF9TWU1CT0xfR1BMKGJsa19tcV9xdWllc2NlX3F1ZXVlX25vd2FpdCk7XG4gMjcxOlx0XG4gMjcyOlx0LyoqXG4gMjczOlx0ICogYmxrX21xX3dhaXRfcXVpZXNjZV9kb25lKCkgLSB3YWl0IHVudGlsIGluLXByb2dyZXNzIHF1aWVzY2UgaXMgZG9uZVxuIDI3NDpcdCAqIEBzZXQ6IHRhZ19zZXQgdG8gd2FpdCBvblxuIDI3NTpcdCAqXG4gMjc2Olx0ICogTm90ZTogaXQgaXMgZHJpdmVyJiMzOTtzIHJlc3BvbnNpYmlsaXR5IGZvciBtYWtpbmcgc3VyZSB0aGF0IHF1aWVzY2UgaGFzXG4gMjc3Olx0ICogYmVlbiBzdGFydGVkIG9uIG9yIG1vcmUgb2YgdGhlIHJlcXVlc3RfcXVldWVzIG9mIHRoZSB0YWdfc2V0LiAgVGhpc1xuIDI3ODpcdCAqIGZ1bmN0aW9uIG9ubHkgd2FpdHMgZm9yIHRoZSBxdWllc2NlIG9uIHRob3NlIHJlcXVlc3RfcXVldWVzIHRoYXQgaGFkXG4gMjc5Olx0ICogdGhlIHF1aWVzY2UgZmxhZyBzZXQgdXNpbmcgYmxrX21xX3F1aWVzY2VfcXVldWVfbm93YWl0LlxuIDI4MDpcdCAqL1xuIDI4MTpcdHZvaWQgYmxrX21xX3dhaXRfcXVpZXNjZV9kb25lKHN0cnVjdCBibGtfbXFfdGFnX3NldCAqc2V0KVxuIDI4MjpcdHtcbiAyODM6XHRcdGlmIChzZXQtXHUwMDNlZmxhZ3MgXHUwMDI2IEJMS19NUV9GX0JMT0NLSU5HKVxuIDI4NDpcdFx0XHRzeW5jaHJvbml6ZV9zcmN1KHNldC1cdTAwM2VzcmN1KTtcbiAyODU6XHRcdGVsc2VcbiAyODY6XHRcdFx0c3luY2hyb25pemVfcmN1KCk7XG4gMjg3Olx0fVxuIDI4ODpcdEVYUE9SVF9TWU1CT0xfR1BMKGJsa19tcV93YWl0X3F1aWVzY2VfZG9uZSk7XG4gMjg5Olx0XG4gMjkwOlx0LyoqXG4gMjkxOlx0ICogYmxrX21xX3F1aWVzY2VfcXVldWUoKSAtIHdhaXQgdW50aWwgYWxsIG9uZ29pbmcgZGlzcGF0Y2hlcyBoYXZlIGZpbmlzaGVkXG4gMjkyOlx0ICogQHE6IHJlcXVlc3QgcXVldWUuXG4gMjkzOlx0ICpcbiAyOTQ6XHQgKiBOb3RlOiB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90IHByZXZlbnQgdGhhdCB0aGUgc3RydWN0IHJlcXVlc3QgZW5kX2lvKClcbiAyOTU6XHQgKiBjYWxsYmFjayBmdW5jdGlvbiBpcyBpbnZva2VkLiBPbmNlIHRoaXMgZnVuY3Rpb24gaXMgcmV0dXJuZWQsIHdlIG1ha2VcbiAyOTY6XHQgKiBzdXJlIG5vIGRpc3BhdGNoIGNhbiBoYXBwZW4gdW50aWwgdGhlIHF1ZXVlIGlzIHVucXVpZXNjZWQgdmlhXG4gMjk3Olx0ICogYmxrX21xX3VucXVpZXNjZV9xdWV1ZSgpLlxuIDI5ODpcdCAqL1xuIDI5OTpcdHZvaWQgYmxrX21xX3F1aWVzY2VfcXVldWUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpXG4gMzAwOlx0e1xuIDMwMTpcdFx0YmxrX21xX3F1aWVzY2VfcXVldWVfbm93YWl0KHEpO1xuIDMwMjpcdFx0Lyogbm90aGluZyB0byB3YWl0IGZvciBub24tbXEgcXVldWVzICovXG4gMzAzOlx0XHRpZiAocXVldWVfaXNfbXEocSkpXG4gMzA0Olx0XHRcdGJsa19tcV93YWl0X3F1aWVzY2VfZG9uZShxLVx1MDAzZXRhZ19zZXQpO1xuIDMwNTpcdH1cbiAzMDY6XHRFWFBPUlRfU1lNQk9MX0dQTChibGtfbXFfcXVpZXNjZV9xdWV1ZSk7XG4gMzA3Olx0XG4gMzA4Olx0LypcbiAzMDk6XHQgKiBibGtfbXFfdW5xdWllc2NlX3F1ZXVlKCkgLSBjb3VudGVycGFydCBvZiBibGtfbXFfcXVpZXNjZV9xdWV1ZSgpXG4gMzEwOlx0ICogQHE6IHJlcXVlc3QgcXVldWUuXG4gMzExOlx0ICpcbiAzMTI6XHQgKiBUaGlzIGZ1bmN0aW9uIHJlY292ZXJzIHF1ZXVlIGludG8gdGhlIHN0YXRlIGJlZm9yZSBxdWllc2NpbmdcbiAzMTM6XHQgKiB3aGljaCBpcyBkb25lIGJ5IGJsa19tcV9xdWllc2NlX3F1ZXVlLlxuIDMxNDpcdCAqL1xuIDMxNTpcdHZvaWQgYmxrX21xX3VucXVpZXNjZV9xdWV1ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSlcbiAzMTY6XHR7XG4gMzE3Olx0XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIDMxODpcdFx0Ym9vbCBydW5fcXVldWUgPSBmYWxzZTtcbiAzMTk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDk6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc5OTUKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA2MDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgYSBQb3RlbnRpYWwgRGF0YSBDb3JydXB0aW9uIFZ1bG5lcmFiaWxpdHkgaW4gdGhlIEJsb2NrIExheWVyKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gZGlnZ2luZyBpbnRvIHRoaXMgYmxvY2sgbGF5ZXIgY29kZSwgYW5kIEkgdGhpbmsgSSYjMzk7dmUgc3BvdHRlZCBhIHNpZ25pZmljYW50IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbiB0aGF0IGNvdWxkIGxlYWQgdG8gZGF0YSBjb3JydXB0aW9uLiBUaGUgY29yZSBvZiB0aGUgcHJvYmxlbSBzZWVtcyB0byBzdGVtIGZyb20gaG93IHRoZSBgdmlydGJsa2AgZHJpdmVyIGhhbmRsZXMgZGV2aWNlIHF1aWVzY2VuY2UgaW4gcmVsYXRpb24gdG8gZGV2aWNlIHJlc2V0IGFuZCBQTS9zdXNwZW5kIGV2ZW50cy4KCkhlcmUmIzM5O3MgdGhlIGJyZWFrZG93biBhcyBJIHNlZSBpdDogVGhlIGBibGtfbXFfcXVpZXNjZV9xdWV1ZWAgZnVuY3Rpb24gcmVsaWVzIG9uIGBibGtfbXFfd2FpdF9xdWllc2NlX2RvbmVgIHdoaWNoLCBjcml0aWNhbGx5LCB1c2VzIGBzeW5jaHJvbml6ZV9zcmN1YCBvciBgc3luY2hyb25pemVfcmN1KClgLiBUaGlzIGlzIGltcG9ydGFudCBiZWNhdXNlIGl0IGVuc3VyZXMgdGhhdCBhbGwgcHJpb3IgZGlzcGF0Y2hlcyBhcmUgKmNvbXBsZXRlbHkqIGZpbmlzaGVkIGJlZm9yZSBwcm9jZWVkaW5nLiBUaGUgcHJvYmxlbSBpcyB0aGF0IGEgcHJldmlvdXMgZnVuY3Rpb24sIGBibGtfbXFfcXVpZXNjZV9xdWV1ZV9ub3dhaXRgLCBhcHBlYXJzIHRvIHNldCB0aGUgcXVpZXNjZSBiaXQgKndpdGhvdXQqIHdhaXRpbmcgZm9yIHRoZXNlIGRpc3BhdGNoZXMgdG8gY29tcGxldGUuIFRoZSBjb21tZW50cyBpbiBgdmlydGJsa19mcmVlemVfcHJpdmAgYXJlIHJhaXNpbmcgYWxhcm0gYmVsbHM6CgpgYGBjCgkvKiBFbnN1cmUgbm8gcmVxdWVzdHMgaW4gdmlydHF1ZXVlcyBiZWZvcmUgZGVsZXRpbmcgdnFzLiAqLwoJbWVtZmxhZ3MgPSBibGtfbXFfZnJlZXplX3F1ZXVlKHEpOwoJYmxrX21xX3F1aWVzY2VfcXVldWUocSk7CglibGtfbXFfdW5mcmVlemVfcXVldWUocSwgbWVtZmxhZ3MpOwpgYGAKClRoZSB3b3JyeSBpcyB0aGlzOiBpZiBgYmxrX21xX3F1aWVzY2VfcXVldWVgIGRvZXNuJiMzOTt0ICphY3R1YWxseSogd2FpdCwgb25nb2luZyBkaXNwYXRjaGVzIGNvdWxkIHN0aWxsIGJlIGFjY2Vzc2luZyB0aGUgcXVldWVzIHdoZW4gdGhlIGRldmljZSBpcyBiZWluZyByZXNldCwgb3Igd2hlbiB2aXJ0cXVldWVzIGFyZSBkZWxldGVkIGJ5IGB2ZGV2LSZndDtjb25maWctJmd0O2RlbF92cXModmRldilgLiBCb29tISBEYXRhIGNvcnJ1cHRpb24uCgpOb3csIGxldCYjMzk7cyBsb29rIGF0IHRoZSBjb25kaXRpb25zIHRoYXQgY2FuIHRyaWdnZXIgYHZpcnRibGtfZnJlZXplX3ByaXZgLiAgSSBjYW4gc2VlIHR3byBtYWpvciBjYWxsIHBhdGhzOgoKMS4gICoqUE0vU3VzcGVuZC9IaWJlcm5hdGlvbjoqKiBgdmlydGJsa19mcmVlemVgIGNhbGxzIHRoaXMgZnVuY3Rpb24uIGB2aXJ0YmxrX2ZyZWV6ZWAgaXMgY2FsbGVkIHdoZW4gYHZkZXZgIGlzIGZyb3plbiBmb3IgUE0gb3Igc3VzcGVuZC9oaWJlcm5hdGUuIFRoZSBiaWcgcXVlc3Rpb24gaXMsIGNhbiBzeXprYWxsZXIgYmUgdXNlZCB0byB0cmlnZ2VyIHRoZXNlIHN0YXRlcz8gV2l0aCBwc2V1ZG8tc3lzY2FsbHMgb3IgZGlyZWN0IHdyaXRlcyB0byBgL3N5cy9wb3dlci9zdGF0ZWAgKGxpa2UgYG1lbWAsIGBmcmVlemVgLCBvciBgZGlza2ApLCB0aGUgYW5zd2VyIGlzIGFsbW9zdCBjZXJ0YWlubHkgeWVzLCBpdCBjYW4uIFRoaXMgbWVhbnMgd2UgaGF2ZSBhIHBvdGVudGlhbCB0cmlnZ2VyLgoKMi4gICoqUENJIFJlc2V0OioqICBUaGUgb3RoZXIgaW50ZXJlc3RpbmcgcGF0aCBpcyB0aHJvdWdoIGB2aXJ0YmxrX3Jlc2V0X3ByZXBhcmVgLiBNeSBjb2RlIGluc3BlY3Rpb24gcmV2ZWFscyB0aGF0ICBgdmlydGlvX3BjaV9yZXNldF9wcmVwYXJlYCBpcyBjYWxsZWQgaW4gYHZpcnRpb19wY2lfZXJyX2hhbmRsZXJgIHdoZXJlIGAucmVzZXRfcHJlcGFyZSA9IHZpcnRpb19wY2lfcmVzZXRfcHJlcGFyZWAuCiAgICBUaGUgY3J1Y2lhbCBsaW5rIGhlcmUgaXMgdGhlIGAvc3lzL2J1cy9wY2kvZGV2aWNlcy8uLi4vcmVzZXRgIGZpbGUuIElmIGEgdXNlciBjYW4gd3JpdGUgJiMzOTsxJiMzOTsgdG8gaXQsIHdlIGdldCBhIGNhbGwgY2hhaW46IGBwY2lfcmVzZXRfZnVuY3Rpb25gIC0mZ3Q7IGBwY2lfZGV2X3NhdmVfYW5kX2Rpc2FibGVgIC0mZ3Q7IGBlcnJfaGFuZGxlci0mZ3Q7cmVzZXRfcHJlcGFyZShwY2lfZGV2KWAgLSZndDsgYHZpcnRpb19wY2lfcmVzZXRfcHJlcGFyZWAgLSZndDsgYHZpcnRpb19kZXZpY2VfcmVzZXRfcHJlcGFyZSgmYW1wO3ZwX2Rldi0mZ3Q7dmRldilgIC0mZ3Q7IGBkcnYtJmd0O3Jlc2V0X3ByZXBhcmUoZGV2KWAgLSZndDsgYHZpcnRibGtfcmVzZXRfcHJlcGFyZWAgLSZndDsgYHZpcnRibGtfZnJlZXplX3ByaXZgISAgQW5kIEkga25vdywgZnJvbSBleHBlcmllbmNlLCB0aGF0IHVzZXIgc3BhY2UgY2FuIHdyaXRlIHRvIHRoaXMgZmlsZSwgdGhpcyBjYWxscyBgcGNpX3Jlc2V0X2Z1bmN0aW9uYC4KClRoZXJlZm9yZSwgdGhlIHJlc2V0IHBhdGggb2ZmZXJzIGFub3RoZXIsIHBlcmhhcHMgZXZlbiBtb3JlIGVhc2lseSB0cmlnZ2VyZWQsIHJvdXRlIHRvIGhpdCB0aGUgcHJvYmxlbWF0aWMgc2VxdWVuY2UuIEkmIzM5O20gZ29pbmcgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IGBwY2lfcmVzZXRfZnVuY3Rpb25gIGl0c2VsZiBpbiBgZHJpdmVycy9wY2kvcGNpLmNgIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIHBvdGVudGlhbCBtaXRpZ2F0aW9ucyBvciBjb21wbGV4aXRpZXMgaW4gdGhhdCBjYWxsIGNoYWluIHRoYXQgSSBuZWVkIHRvIGNvbnNpZGVyLiBNeSBndXQgZmVlbGluZyBpcyB0aGF0IHRoaXMgaXMgYSByYWNlIHRoYXQgbmVlZHMgdXJnZW50IGF0dGVudGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDk6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGNpX3Jlc2V0X2Z1bmN0aW9uJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9wY2kvcGNpLmM9NzYxPUVYUE9SVF9TWU1CT0xfR1BMKHpwY2lfZGlzYWJsZV9kZXZpY2UpO1xuLS1cbmFyY2gvczM5MC9wY2kvcGNpLmMtNzgwLSAqIEluIG1vc3QgY2FzZXMgdGhpcyBmdW5jdGlvbiBzaG91bGQgbm90IGJlIGNhbGxlZCBkaXJlY3RseSBidXQgdGhyb3VnaFxuYXJjaC9zMzkwL3BjaS9wY2kuYzo3ODE6ICogcGNpX3Jlc2V0X2Z1bmN0aW9uKCkgb3IgcGNpX3Jlc2V0X2J1cygpIHdoaWNoIGhhbmRsZSB0aGUgc2F2ZS9yZXN0b3JlIGFuZFxuYXJjaC9zMzkwL3BjaS9wY2kuYy03ODItICogbG9ja2luZyAtIGFzc2VydGVkIGJ5IGxvY2tkZXAuXG4tLVxuZHJpdmVycy9ibHVldG9vdGgvYnRpbnRlbF9wY2llLmM9MjY3MD1zdGF0aWMgaW50IGJ0aW50ZWxfcGNpZV9wZXJmb3JtX2ZscihzdHJ1Y3QgYnRpbnRlbF9wY2llX2RhdGEgKmRhdGEpXG4tLVxuZHJpdmVycy9ibHVldG9vdGgvYnRpbnRlbF9wY2llLmMtMjY3Ny1cdCAqIHRoZW4gd2FpdHMgZm9yIHRoaXMgd29yayB2aWEgZGlzYWJsZV93b3JrX3N5bmMoKTsgdGhlIGJsb2NraW5nXG5kcml2ZXJzL2JsdWV0b290aC9idGludGVsX3BjaWUuYzoyNjc4Olx0ICogcGNpX3Jlc2V0X2Z1bmN0aW9uKCkgd291bGQgZGVhZGxvY2sgYnkgdHJ5aW5nIHRvIHJlLWFjcXVpcmVcbmRyaXZlcnMvYmx1ZXRvb3RoL2J0aW50ZWxfcGNpZS5jLTI2NzktXHQgKiBkZXZpY2VfbG9jayBoZXJlLlxuLS1cbmRyaXZlcnMvYmx1ZXRvb3RoL2hjaV9iY200Mzc3LmM9MjI3Nj1zdGF0aWMgaW50IGJjbTQzNzdfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcbi0tXG5kcml2ZXJzL2JsdWV0b290aC9oY2lfYmNtNDM3Ny5jLTIzMTUtXG5kcml2ZXJzL2JsdWV0b290aC9oY2lfYmNtNDM3Ny5jOjIzMTY6XHRyZXQgPSBwY2lfcmVzZXRfZnVuY3Rpb25fbG9ja2VkKHBkZXYpO1xuZHJpdmVycy9ibHVldG9vdGgvaGNpX2JjbTQzNzcuYy0yMzE3LVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL2RtYS9pZHhkL2lycS5jPTM4Nj1zdGF0aWMgdm9pZCBpZHhkX2RldmljZV9mbHIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbmRyaXZlcnMvZG1hL2lkeGQvaXJxLmMtMzkyLVx0ICogSURYRCBkZXZpY2UgcmVxdWlyZXMgYSBGdW5jdGlvbiBMZXZlbCBSZXNldCAoRkxSKS5cbmRyaXZlcnMvZG1hL2lkeGQvaXJxLmM6MzkzOlx0ICogcGNpX3Jlc2V0X2Z1bmN0aW9uKCkgd2lsbCByZXNldCB0aGUgZGV2aWNlIHdpdGggRkxSLlxuZHJpdmVycy9kbWEvaWR4ZC9pcnEuYy0zOTQtXHQgKi9cbmRyaXZlcnMvZG1hL2lkeGQvaXJxLmM6Mzk1Olx0cmMgPSBwY2lfcmVzZXRfZnVuY3Rpb24oaWR4ZC1cdTAwM2VwZGV2KTtcbmRyaXZlcnMvZG1hL2lkeGQvaXJxLmMtMzk2LVx0aWYgKHJjKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9kZXZpY2UuYz0xMDc3PWludCBhbWRncHVfZGV2aWNlX3BjaV9yZXNldChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldilcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9kZXZpY2UuYy0xMDc4LXtcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9kZXZpY2UuYzoxMDc5Olx0cmV0dXJuIHBjaV9yZXNldF9mdW5jdGlvbihhZGV2LVx1MDAzZXBkZXYpO1xuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2RldmljZS5jLTEwODAtfVxuLS1cbmRyaXZlcnMvaGlkL2ludGVsLWlzaC1oaWQvaXBjL2lwYy5jPTc2Mz1zdGF0aWMgaW50IF9pc2hfaHdfcmVzZXQoc3RydWN0IGlzaHRwX2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvaGlkL2ludGVsLWlzaC1oaWQvaXBjL2lwYy5jLTc3MS1cbmRyaXZlcnMvaGlkL2ludGVsLWlzaC1oaWQvaXBjL2lwYy5jOjc3MjpcdHJ2ID0gcGNpX3Jlc2V0X2Z1bmN0aW9uKHBkZXYpO1xuZHJpdmVycy9oaWQvaW50ZWwtaXNoLWhpZC9pcGMvaXBjLmMtNzczLVx0aWYgKCFydilcbi0tXG5kcml2ZXJzL21pc2MvZ2Vud3FlL2NhcmRfYmFzZS5jPTE1OD1zdGF0aWMgdm9pZCBnZW53cWVfZGV2X2ZyZWUoc3RydWN0IGdlbndxZV9kZXYgKmNkKVxuLS1cbmRyaXZlcnMvbWlzYy9nZW53cWUvY2FyZF9iYXNlLmMtMTcwLSAqXG5kcml2ZXJzL21pc2MvZ2Vud3FlL2NhcmRfYmFzZS5jOjE3MTogKiBwY2lfcmVzZXRfZnVuY3Rpb24oKSB3aWxsIHJlY292ZXIgdGhlIGRldmljZSBhbmQgZW5zdXJlIHRoYXQgdGhlXG5kcml2ZXJzL21pc2MvZ2Vud3FlL2NhcmRfYmFzZS5jLTE3Mi0gKiByZWdpc3RlcnMgYXJlIGFjY2Vzc2libGUgYWdhaW4gd2hlbiBpdCBjb21wbGV0ZXMgd2l0aCBzdWNjZXNzLiBJZlxuLS1cbmRyaXZlcnMvbWlzYy9nZW53cWUvY2FyZF9iYXNlLmM9MTc2PXN0YXRpYyBpbnQgZ2Vud3FlX2J1c19yZXNldChzdHJ1Y3QgZ2Vud3FlX2RldiAqY2QpXG4tLVxuZHJpdmVycy9taXNjL2dlbndxZS9jYXJkX2Jhc2UuYy0xOTMtXHQgKiBTZXR0aW5ncyBsaWtlIGVuYWJsZSBidXMtbWFzdGVyaW5nLCAuLi4gYXJlIGJhY2t1cGVkIGFuZFxuZHJpdmVycy9taXNjL2dlbndxZS9jYXJkX2Jhc2UuYzoxOTQ6XHQgKiByZXN0b3JlZCBieSB0aGUgcGNpX3Jlc2V0X2Z1bmN0aW9uKCkuXG5kcml2ZXJzL21pc2MvZ2Vud3FlL2NhcmRfYmFzZS5jLTE5NS1cdCAqL1xuZHJpdmVycy9taXNjL2dlbndxZS9jYXJkX2Jhc2UuYy0xOTYtXHRkZXZfZGJnKFx1MDAyNnBjaV9kZXYtXHUwMDNlZGV2LCBcJiMzNDtbJXNdIHBjaV9yZXNldCBmdW5jdGlvbiAuLi5cXG5cJiMzNDssIF9fZnVuY19fKTtcbmRyaXZlcnMvbWlzYy9nZW53cWUvY2FyZF9iYXNlLmM6MTk3Olx0cmMgPSBwY2lfcmVzZXRfZnVuY3Rpb24ocGNpX2Rldik7XG5kcml2ZXJzL21pc2MvZ2Vud3FlL2NhcmRfYmFzZS5jLTE5OC1cdGlmIChyYykge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9tYWluLmM9NTgyPXN0YXRpYyB2b2lkIHBkc2NfcGNpX2Vycm9yX3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvbWFpbi5jLTU4Ni1cdGlmICh0ZXN0X2JpdChQRFNDX1NfRldfREVBRCwgXHUwMDI2cGRzYy1cdTAwM2VzdGF0ZSkpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvbWFpbi5jOjU4NzpcdFx0cGNpX3Jlc2V0X2Z1bmN0aW9uX2xvY2tlZChwZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9tYWluLmMtNTg4LX1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vbGlvX21haW4uYz05MTU9c3RhdGljIHZvaWQgb2N0ZW9uX3BjaV9mbHIoc3RydWN0IG9jdGVvbl9kZXZpY2UgKm9jdClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vbGlvX21haW4uYy05MjYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vbGlvX21haW4uYzo5Mjc6XHRyYyA9IF9fcGNpX3Jlc2V0X2Z1bmN0aW9uX2xvY2tlZChvY3QtXHUwMDNlcGNpX2Rldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vbGlvX21haW4uYy05MjgtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiNHZmL2N4Z2I0dmZfbWFpbi5jPTI1MTU9c3RhdGljIGludCBhZGFwX2luaXQwKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjR2Zi9jeGdiNHZmX21haW4uYy0yNTIzLVx0ICogU29tZSBlbnZpcm9ubWVudHMgZG8gbm90IHByb3Blcmx5IGhhbmRsZSBQQ0lFIEZMUnMgLS0gZS5nLiBpbiBMaW51eFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiNHZmL2N4Z2I0dmZfbWFpbi5jOjI1MjQ6XHQgKiAyLjYuMzEgYW5kIGxhdGVyIHdlIGNhbiYjMzk7dCBjYWxsIHBjaV9yZXNldF9mdW5jdGlvbigpIGluIG9yZGVyIHRvXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaGVsc2lvL2N4Z2I0dmYvY3hnYjR2Zl9tYWluLmMtMjUyNS1cdCAqIGlzc3VlIGFuIEZMUiBiZWNhdXNlIG9mIGEgc2VsZi0gZGVhZGxvY2sgb24gdGhlIGRldmljZSBzZW1hcGhvcmUuXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvcGNpLmM9MTc5MT1zdGF0aWMgaW50IG1seHN3X3BjaV9yZXNldF9hdF9wY2lfZGlzYWJsZShzdHJ1Y3QgbWx4c3dfcGNpICptbHhzd19wY2ksXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvcGNpLmMtMTgxOC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3BjaS5jOjE4MTk6XHRlcnIgPSBfX3BjaV9yZXNldF9mdW5jdGlvbl9sb2NrZWQocGRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9wY2kuYy0xODIwLVx0aWYgKGVycilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9wZW5zYW5kby9pb25pYy9pb25pY19idXNfcGNpLmM9NTAzPXN0YXRpYyB2b2lkIGlvbmljX3BjaV9lcnJvcl9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcGVuc2FuZG8vaW9uaWMvaW9uaWNfYnVzX3BjaS5jLTUwOC1cdGlmIChsaWYgXHUwMDI2XHUwMDI2IHRlc3RfYml0KElPTklDX0xJRl9GX0ZXX1JFU0VULCBsaWYtXHUwMDNlc3RhdGUpKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcGVuc2FuZG8vaW9uaWMvaW9uaWNfYnVzX3BjaS5jOjUwOTpcdFx0cGNpX3Jlc2V0X2Z1bmN0aW9uX2xvY2tlZChwZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3BlbnNhbmRvL2lvbmljL2lvbmljX2J1c19wY2kuYy01MTAtfVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xbGNuaWMvcWxjbmljX2N0eC5jPTYyNj1pbnQgcWxjbmljX2Z3X2NyZWF0ZV9jdHgoc3RydWN0IHFsY25pY19hZGFwdGVyICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FsY25pYy9xbGNuaWNfY3R4LmMtNjMwLVx0aWYgKGRldi1cdTAwM2VmbGFncyBcdTAwMjYgUUxDTklDX05FRURfRkxSKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWxjbmljL3FsY25pY19jdHguYzo2MzE6XHRcdGVyciA9IHBjaV9yZXNldF9mdW5jdGlvbihkZXYtXHUwMDNlcGRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWxjbmljL3FsY25pY19jdHguYy02MzItXHRcdGlmIChlcnIpIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvbWNkaS5jPTE5MDY9aW50IGVmeF9tY2RpX3Jlc2V0KHN0cnVjdCBlZnhfbmljICplZngsIGVudW0gcmVzZXRfdHlwZSBtZXRob2QpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL21jZGkuYy0xOTExLVx0aWYgKG1ldGhvZCA9PSBSRVNFVF9UWVBFX01DRElfVElNRU9VVCkge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL21jZGkuYzoxOTEyOlx0XHRyYyA9IHBjaV9yZXNldF9mdW5jdGlvbihlZngtXHUwMDNlcGNpX2Rldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvbWNkaS5jLTE5MTMtXHRcdGlmIChyYylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvc2llbmEvbWNkaS5jPTE4NjY9aW50IGVmeF9zaWVuYV9tY2RpX3Jlc2V0KHN0cnVjdCBlZnhfbmljICplZngsIGVudW0gcmVzZXRfdHlwZSBtZXRob2QpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL3NpZW5hL21jZGkuYy0xODcxLVx0aWYgKG1ldGhvZCA9PSBSRVNFVF9UWVBFX01DRElfVElNRU9VVCkge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL3NpZW5hL21jZGkuYzoxODcyOlx0XHRyYyA9IHBjaV9yZXNldF9mdW5jdGlvbihlZngtXHUwMDNlcGNpX2Rldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvc2llbmEvbWNkaS5jLTE4NzMtXHRcdGlmIChyYylcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL3BjaWUvZ2VuMV8yL3RyYW5zLmM9MjEyNj1zdGF0aWMgdm9pZCBpd2xfdHJhbnNfcGNpZV9jYWxsX3Jlc2V0KHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvcGNpZS9nZW4xXzIvdHJhbnMuYy0yMTY4LVx0SVdMX0RFQlVHX0RFVl9QT1dFUihcdTAwMjZwZGV2LVx1MDAzZWRldixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvcGNpZS9nZW4xXzIvdHJhbnMuYzoyMTY5Olx0XHRcdCAgICBcJiMzNDtObyBCSU9TIHN1cHBvcnQsIHVzaW5nIHBjaV9yZXNldF9mdW5jdGlvbigpXFxuXCYjMzQ7KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvcGNpZS9nZW4xXzIvdHJhbnMuYy0yMTcwLSNlbmRpZlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9wY2llL2dlbjFfMi90cmFucy5jOjIxNzE6XHRwY2lfcmVzZXRfZnVuY3Rpb24ocGRldik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL3BjaWUvZ2VuMV8yL3RyYW5zLmMtMjE3Mi19XG4tLVxuZHJpdmVycy9uZXQvd3dhbi90N3h4L3Q3eHhfbW9kZW1fb3BzLmM9MTQ1PXN0YXRpYyBpbnQgdDd4eF9hY3BpX3Jlc2V0KHN0cnVjdCB0N3h4X3BjaV9kZXYgKnQ3eHhfZGV2LCBjaGFyICpmbl9uYW1lKVxuLS1cbmRyaXZlcnMvbmV0L3d3YW4vdDd4eC90N3h4X21vZGVtX29wcy5jLTE3NC1cbmRyaXZlcnMvbmV0L3d3YW4vdDd4eC90N3h4X21vZGVtX29wcy5jOjE3NTpcdHJldCA9IHBjaV9yZXNldF9mdW5jdGlvbih0N3h4X2Rldi1cdTAwM2VwZGV2KTtcbmRyaXZlcnMvbmV0L3d3YW4vdDd4eC90N3h4X21vZGVtX29wcy5jLTE3Ni1cdGlmIChyZXQpIHtcbi0tXG5kcml2ZXJzL3BjaS9wY2ktc3lzZnMuYz0xNTU2PXN0YXRpYyBzc2l6ZV90IHJlc2V0X3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG4tLVxuZHJpdmVycy9wY2kvcGNpLXN5c2ZzLmMtMTU2OS1cdHBtX3J1bnRpbWVfZ2V0X3N5bmMoZGV2KTtcbmRyaXZlcnMvcGNpL3BjaS1zeXNmcy5jOjE1NzA6XHRyZXN1bHQgPSBwY2lfcmVzZXRfZnVuY3Rpb24ocGRldik7XG5kcml2ZXJzL3BjaS9wY2ktc3lzZnMuYy0xNTcxLVx0cG1fcnVudGltZV9wdXQoZGV2KTtcbi0tXG5kcml2ZXJzL3BjaS9wY2kuYz01MTQ0PWNvbnN0IHN0cnVjdCBwY2lfcmVzZXRfZm5fbWV0aG9kIHBjaV9yZXNldF9mbl9tZXRob2RzW10gPSB7XG4tLVxuZHJpdmVycy9wY2kvcGNpLmMtNTE1NS0vKipcbmRyaXZlcnMvcGNpL3BjaS5jOjUxNTY6ICogX19wY2lfcmVzZXRfZnVuY3Rpb25fbG9ja2VkIC0gcmVzZXQgYSBQQ0kgZGV2aWNlIGZ1bmN0aW9uIHdoaWxlIGhvbGRpbmdcbmRyaXZlcnMvcGNpL3BjaS5jLTUxNTctICogdGhlIEBkZXYgbXV0ZXggbG9jay5cbi0tXG5kcml2ZXJzL3BjaS9wY2kuYy01MTc2LSAqL1xuZHJpdmVycy9wY2kvcGNpLmM6NTE3NzppbnQgX19wY2lfcmVzZXRfZnVuY3Rpb25fbG9ja2VkKHN0cnVjdCBwY2lfZGV2ICpkZXYpXG5kcml2ZXJzL3BjaS9wY2kuYy01MTc4LXtcbi0tXG5kcml2ZXJzL3BjaS9wY2kuYy01MjEwLX1cbmRyaXZlcnMvcGNpL3BjaS5jOjUyMTE6RVhQT1JUX1NZTUJPTF9HUEwoX19wY2lfcmVzZXRfZnVuY3Rpb25fbG9ja2VkKTtcbmRyaXZlcnMvcGNpL3BjaS5jLTUyMTItXG4tLVxuZHJpdmVycy9wY2kvcGNpLmM9NTIyNT12b2lkIHBjaV9pbml0X3Jlc2V0X21ldGhvZHMoc3RydWN0IHBjaV9kZXYgKmRldilcbi0tXG5kcml2ZXJzL3BjaS9wY2kuYy01MjQ1LS8qKlxuZHJpdmVycy9wY2kvcGNpLmM6NTI0NjogKiBwY2lfcmVzZXRfZnVuY3Rpb24gLSBxdWllc2NlIGFuZCByZXNldCBhIFBDSSBkZXZpY2UgZnVuY3Rpb25cbmRyaXZlcnMvcGNpL3BjaS5jLTUyNDctICogQGRldjogUENJIGRldmljZSB0byByZXNldFxuLS1cbmRyaXZlcnMvcGNpL3BjaS5jLTUyNTQtICogY2xlYXJzIGFsbCB0aGUgc3RhdGUgYXNzb2NpYXRlZCB3aXRoIHRoZSBkZXZpY2UuICBUaGlzIGZ1bmN0aW9uIGRpZmZlcnNcbmRyaXZlcnMvcGNpL3BjaS5jOjUyNTU6ICogZnJvbSBfX3BjaV9yZXNldF9mdW5jdGlvbl9sb2NrZWQoKSBpbiB0aGF0IGl0IHNhdmVzIGFuZCByZXN0b3JlcyBkZXZpY2Ugc3RhdGVcbmRyaXZlcnMvcGNpL3BjaS5jLTUyNTYtICogb3ZlciB0aGUgcmVzZXQgYW5kIHRha2VzIHRoZSBQQ0kgZGV2aWNlIGxvY2suXG4tLVxuZHJpdmVycy9wY2kvcGNpLmMtNTI2MC0gKi9cbmRyaXZlcnMvcGNpL3BjaS5jOjUyNjE6aW50IHBjaV9yZXNldF9mdW5jdGlvbihzdHJ1Y3QgcGNpX2RldiAqZGV2KVxuZHJpdmVycy9wY2kvcGNpLmMtNTI2Mi17XG4tLVxuZHJpdmVycy9wY2kvcGNpLmMtNTI3OS1cbmRyaXZlcnMvcGNpL3BjaS5jOjUyODA6XHRyYyA9IF9fcGNpX3Jlc2V0X2Z1bmN0aW9uX2xvY2tlZChkZXYpO1xuZHJpdmVycy9wY2kvcGNpLmMtNTI4MS1cbi0tXG5kcml2ZXJzL3BjaS9wY2kuYy01Mjg5LX1cbmRyaXZlcnMvcGNpL3BjaS5jOjUyOTA6RVhQT1JUX1NZTUJPTF9HUEwocGNpX3Jlc2V0X2Z1bmN0aW9uKTtcbmRyaXZlcnMvcGNpL3BjaS5jLTUyOTEtXG5kcml2ZXJzL3BjaS9wY2kuYy01MjkyLS8qKlxuZHJpdmVycy9wY2kvcGNpLmM6NTI5MzogKiBwY2lfcmVzZXRfZnVuY3Rpb25fbG9ja2VkIC0gcXVpZXNjZSBhbmQgcmVzZXQgYSBQQ0kgZGV2aWNlIGZ1bmN0aW9uXG5kcml2ZXJzL3BjaS9wY2kuYy01Mjk0LSAqIEBkZXY6IFBDSSBkZXZpY2UgdG8gcmVzZXRcbi0tXG5kcml2ZXJzL3BjaS9wY2kuYy01MzAxLSAqIGNsZWFycyBhbGwgdGhlIHN0YXRlIGFzc29jaWF0ZWQgd2l0aCB0aGUgZGV2aWNlLiAgVGhpcyBmdW5jdGlvbiBkaWZmZXJzXG5kcml2ZXJzL3BjaS9wY2kuYzo1MzAyOiAqIGZyb20gX19wY2lfcmVzZXRfZnVuY3Rpb25fbG9ja2VkKCkgaW4gdGhhdCBpdCBzYXZlcyBhbmQgcmVzdG9yZXMgZGV2aWNlIHN0YXRlXG5kcml2ZXJzL3BjaS9wY2kuYzo1MzAzOiAqIG92ZXIgdGhlIHJlc2V0LiAgSXQgYWxzbyBkaWZmZXJzIGZyb20gcGNpX3Jlc2V0X2Z1bmN0aW9uKCkgaW4gdGhhdCBpdFxuZHJpdmVycy9wY2kvcGNpLmMtNTMwNC0gKiByZXF1aXJlcyB0aGUgUENJIGRldmljZSBsb2NrIHRvIGJlIGhlbGQuXG4tLVxuZHJpdmVycy9wY2kvcGNpLmMtNTMxMC0gKi9cbmRyaXZlcnMvcGNpL3BjaS5jOjUzMTE6aW50IHBjaV9yZXNldF9mdW5jdGlvbl9sb2NrZWQoc3RydWN0IHBjaV9kZXYgKmRldilcbmRyaXZlcnMvcGNpL3BjaS5jLTUzMTIte1xuLS1cbmRyaXZlcnMvcGNpL3BjaS5jLTUzMjEtXG5kcml2ZXJzL3BjaS9wY2kuYzo1MzIyOlx0cmMgPSBfX3BjaV9yZXNldF9mdW5jdGlvbl9sb2NrZWQoZGV2KTtcbmRyaXZlcnMvcGNpL3BjaS5jLTUzMjMtXG4tLVxuZHJpdmVycy9wY2kvcGNpLmMtNTMyNy19XG5kcml2ZXJzL3BjaS9wY2kuYzo1MzI4OkVYUE9SVF9TWU1CT0xfR1BMKHBjaV9yZXNldF9mdW5jdGlvbl9sb2NrZWQpO1xuZHJpdmVycy9wY2kvcGNpLmMtNTMyOS1cbi0tXG5kcml2ZXJzL3BjaS9wY2kuYz01MzM2PWludCBwY2lfdHJ5X3Jlc2V0X2Z1bmN0aW9uKHN0cnVjdCBwY2lfZGV2ICpkZXYpXG4tLVxuZHJpdmVycy9wY2kvcGNpLmMtNTM0Ni1cdHBjaV9kZXZfc2F2ZV9hbmRfZGlzYWJsZShkZXYpO1xuZHJpdmVycy9wY2kvcGNpLmM6NTM0NzpcdHJjID0gX19wY2lfcmVzZXRfZnVuY3Rpb25fbG9ja2VkKGRldik7XG5kcml2ZXJzL3BjaS9wY2kuYy01MzQ4LVx0cGNpX2Rldl9yZXN0b3JlKGRldik7XG4tLVxuZHJpdmVycy9wY2kvcXVpcmtzLmM9MzgxND1zdGF0aWMgdm9pZCBxdWlya19ub19wbV9yZXNldChzdHJ1Y3QgcGNpX2RldiAqZGV2KVxuLS1cbmRyaXZlcnMvcGNpL3F1aXJrcy5jLTM4MjgtICogbW9uaXRvciBzeW5jLiAgQWR2ZXJ0aXNpbmcgdGhpcyBzdXBwb3J0IG1ha2VzIG90aGVyIGxheWVycywgbGlrZSBWRklPLFxuZHJpdmVycy9wY2kvcXVpcmtzLmM6MzgyOTogKiBhc3N1bWUgcGNpX3Jlc2V0X2Z1bmN0aW9uKCkgaXMgdmlhYmxlIGZvciB0aGlzIGRldmljZS4gIE1hcmsgaXQgYXNcbmRyaXZlcnMvcGNpL3F1aXJrcy5jLTM4MzAtICogdW5hdmFpbGFibGUgdG8gc2tpcCBpdCB3aGVuIHRlc3RpbmcgcmVzZXQgbWV0aG9kcy5cbi0tXG5kcml2ZXJzL3BjaS9xdWlya3MuYz00MDA1PXN0YXRpYyBpbnQgcmVzZXRfY2hlbHNpb19nZW5lcmljX2RldihzdHJ1Y3QgcGNpX2RldiAqZGV2LCBib29sIHByb2JlKVxuLS1cbmRyaXZlcnMvcGNpL3F1aXJrcy5jLTQwMjctXHQgKiBMZXZlbCBSZXNldCBjb21wbGV0ZXMuICAoQlVTX01BU1RFUiBpcyBkaXNhYmxlZCBpblxuZHJpdmVycy9wY2kvcXVpcmtzLmM6NDAyODpcdCAqIHBjaV9yZXNldF9mdW5jdGlvbigpKS5cbmRyaXZlcnMvcGNpL3F1aXJrcy5jLTQwMjktXHQgKi9cbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYz02ODM9dm9pZCB2ZmlvX3BjaV9jb3JlX2Rpc2FibGUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KVxuLS1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTcwNy1cdC8qXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYzo3MDg6XHQgKiBUaGlzIGZ1bmN0aW9uIGNhbGxzIF9fcGNpX3Jlc2V0X2Z1bmN0aW9uX2xvY2tlZCgpIHdoaWNoIGludGVybmFsbHlcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTcwOS1cdCAqIGNhbiB1c2UgcGNpX3BtX3Jlc2V0KCkgZm9yIHRoZSBmdW5jdGlvbiByZXNldC4gcGNpX3BtX3Jlc2V0KCkgd2lsbFxuLS1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTc4MC1cdCAqIERpc2FibGUgSU5UeCBhbmQgTVNJLCBwcmVzdW1hYmx5IHRvIGF2b2lkIHNwdXJpb3VzIGludGVycnVwdHNcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jOjc4MTpcdCAqIGR1cmluZyByZXNldC4gIFN0b2xlbiBmcm9tIHBjaV9yZXNldF9mdW5jdGlvbigpXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy03ODItXHQgKi9cbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy03OTYtXHRcdGlmIChwY2lfZGV2X3RyeWxvY2socGRldikpIHtcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jOjc5NzpcdFx0XHRpZiAoIV9fcGNpX3Jlc2V0X2Z1bmN0aW9uX2xvY2tlZChwZGV2KSlcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTc5OC1cdFx0XHRcdHZkZXYtXHUwMDNlbmVlZHNfcmVzZXQgPSBmYWxzZTtcbi0tXG5kcml2ZXJzL3hlbi94ZW4tcGNpYmFjay9wY2lfc3R1Yi5jPTEwMT1zdGF0aWMgaW50IHBjaXN0dWJfcmVzZXRfZGV2aWNlX3N0YXRlKHN0cnVjdCBwY2lfZGV2ICpkZXYpXG5kcml2ZXJzL3hlbi94ZW4tcGNpYmFjay9wY2lfc3R1Yi5jLTEwMi17XG5kcml2ZXJzL3hlbi94ZW4tcGNpYmFjay9wY2lfc3R1Yi5jOjEwMzpcdF9fcGNpX3Jlc2V0X2Z1bmN0aW9uX2xvY2tlZChkZXYpO1xuZHJpdmVycy94ZW4veGVuLXBjaWJhY2svcGNpX3N0dWIuYy0xMDQtXG4tLVxuZHJpdmVycy94ZW4veGVuLXBjaWJhY2svcGNpX3N0dWIuYz02MDE9c3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHhlbl9wY2lia19wY2lfZHJpdmVyO1xuZHJpdmVycy94ZW4veGVuLXBjaWJhY2svcGNpX3N0dWIuYy02MDItXG5kcml2ZXJzL3hlbi94ZW4tcGNpYmFjay9wY2lfc3R1Yi5jOjYwMzovKiBDYWxsZWQgd2hlbiAmIzM5O2JpbmQmIzM5Oy4gVGhpcyBtZWFucyB3ZSBtdXN0IF9OT1RfIGNhbGwgcGNpX3Jlc2V0X2Z1bmN0aW9uIG9yXG5kcml2ZXJzL3hlbi94ZW4tcGNpYmFjay9wY2lfc3R1Yi5jLTYwNC0gKiBvdGhlciBmdW5jdGlvbnMgdGhhdCB0YWtlIHRoZSBzeXNmcyBsb2NrLiAqL1xuZHJpdmVycy94ZW4veGVuLXBjaWJhY2svcGNpX3N0dWIuYz02MDU9c3RhdGljIGludCBwY2lzdHViX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcbi0tXG5kcml2ZXJzL3hlbi94ZW4tcGNpYmFjay9wY2lfc3R1Yi5jLTY0NC1cbmRyaXZlcnMveGVuL3hlbi1wY2liYWNrL3BjaV9zdHViLmM6NjQ1Oi8qIENhbGxlZCB3aGVuICYjMzk7dW5iaW5kJiMzOTsuIFRoaXMgbWVhbnMgd2UgbXVzdCBfTk9UXyBjYWxsIHBjaV9yZXNldF9mdW5jdGlvbiBvclxuZHJpdmVycy94ZW4veGVuLXBjaWJhY2svcGNpX3N0dWIuYy02NDYtICogb3RoZXIgZnVuY3Rpb25zIHRoYXQgdGFrZSB0aGUgc3lzZnMgbG9jay4gKi9cbi0tXG5pbmNsdWRlL2xpbnV4L3BjaS5oPTE0ODM9aW50IHBjaWVfZmxyKHN0cnVjdCBwY2lfZGV2ICpkZXYpO1xuaW5jbHVkZS9saW51eC9wY2kuaDoxNDg0OmludCBfX3BjaV9yZXNldF9mdW5jdGlvbl9sb2NrZWQoc3RydWN0IHBjaV9kZXYgKmRldik7XG5pbmNsdWRlL2xpbnV4L3BjaS5oOjE0ODU6aW50IHBjaV9yZXNldF9mdW5jdGlvbihzdHJ1Y3QgcGNpX2RldiAqZGV2KTtcbmluY2x1ZGUvbGludXgvcGNpLmg6MTQ4NjppbnQgcGNpX3Jlc2V0X2Z1bmN0aW9uX2xvY2tlZChzdHJ1Y3QgcGNpX2RldiAqZGV2KTtcbmluY2x1ZGUvbGludXgvcGNpLmgtMTQ4Ny1pbnQgcGNpX3RyeV9yZXNldF9mdW5jdGlvbihzdHJ1Y3QgcGNpX2RldiAqZGV2KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDk6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ5MjUKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIHRoZSBQQ0kgUmVzZXQgRnVuY3Rpb25hbGl0eSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBob3cgUENJIGRldmljZSByZXNldHMgYXJlIGhhbmRsZWQsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGtlcm5lbC4gSSYjMzk7dmUgYmVlbiBkaXJlY3RlZCB0byBgZHJpdmVycy9wY2kvcGNpLXN5c2ZzLmNgIGFuZCBmb3VuZCB0aGlzIHNuaXBwZXQ6CgpgYGBjCnN0YXRpYyBzc2l6ZV90IHJlc2V0X3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi4uLgoJcG1fcnVudGltZV9nZXRfc3luYyhkZXYpOwoJcmVzdWx0ID0gcGNpX3Jlc2V0X2Z1bmN0aW9uKHBkZXYpOwoJcG1fcnVudGltZV9wdXQoZGV2KTsKYGBgCgpNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtSaWdodCwgYHBtX3J1bnRpbWVfZ2V0X3N5bmNgIGFuZCBgcG1fcnVudGltZV9wdXRgIGFyZSBjbGVhcmx5IG1hbmFnaW5nIHBvd2VyIHN0YXRlcywgbWFraW5nIHN1cmUgdGhlIGRldmljZSBpcyBhY3RpdmUgZm9yIHRoZSByZXNldCBvcGVyYXRpb24uJiMzNDsgQnV0IHRoZSBjb3JlIG9mIHRoZSBtYXR0ZXIgaXMgYHBjaV9yZXNldF9mdW5jdGlvbihwZGV2KWAuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlICphY3R1YWwqIHJlc2V0IGxvZ2ljIGxpZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhhdCBmdW5jdGlvbiBpcyBkb2luZy4KClRoZXJlZm9yZSwgSSYjMzk7bGwgbm93IGhhdmUgdG8gY3Jvc3MtcmVmZXJlbmNlIGBkcml2ZXJzL3BjaS9wY2kuY2AgYW5kIGp1bXAgdG8gdGhlIHZpY2luaXR5IG9mIGxpbmVzIDUyNjEgYW5kIDUwOTQgdG8gc2VlIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIGZvciBgcGNpX3Jlc2V0X2Z1bmN0aW9uYC4gSSBjYW4gaW1hZ2luZSB0aGVyZSBhcmUgZGV2aWNlLXNwZWNpZmljIGNoZWNrcyBmb3IgcmVzZXQgY2FwYWJpbGl0aWVzLCBoYW5kbGluZyBvZiBkaWZmZXJlbnQgcmVzZXQgbWV0aG9kcywgcGVyaGFwcyBzb21lIGNvbmZpZ3VyYXRpb24gb2YgdGhlIFBDSSBjb25maWd1cmF0aW9uIHNwYWNlLCBhbmQgZXJyb3IgY2hlY2tpbmcuIFVuZGVyc3RhbmRpbmcgdGhlIGZsb3cgdGhlcmUgaXMgY3J1Y2lhbCB0byBwcm9wZXJseSBhc3Nlc3MgdGhlIG92ZXJhbGwgcmVzZXQgcHJvY2VkdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAwOTowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvcGNpL3BjaS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTA4OCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs1MDg4Olx0c3RhdGljIHZvaWQgcGNpX2Rldl9zYXZlX2FuZF9kaXNhYmxlKHN0cnVjdCBwY2lfZGV2ICpkZXYpXG41MDg5Olx0e1xuNTA5MDpcdFx0Y29uc3Qgc3RydWN0IHBjaV9lcnJvcl9oYW5kbGVycyAqZXJyX2hhbmRsZXIgPVxuNTA5MTpcdFx0XHRcdGRldi1cdTAwM2Vkcml2ZXIgPyBkZXYtXHUwMDNlZHJpdmVyLVx1MDAzZWVycl9oYW5kbGVyIDogTlVMTDtcbjUwOTI6XHRcbjUwOTM6XHRcdC8qXG41MDk0Olx0XHQgKiBkZXYtXHUwMDNlZHJpdmVyLVx1MDAzZWVycl9oYW5kbGVyLVx1MDAzZXJlc2V0X3ByZXBhcmUoKSBpcyBwcm90ZWN0ZWQgYWdhaW5zdFxuNTA5NTpcdFx0ICogcmFjZXMgd2l0aCAtXHUwMDNlcmVtb3ZlKCkgYnkgdGhlIGRldmljZSBsb2NrLCB3aGljaCBtdXN0IGJlIGhlbGQgYnlcbjUwOTY6XHRcdCAqIHRoZSBjYWxsZXIuXG41MDk3Olx0XHQgKi9cbjUwOTg6XHRcdGRldmljZV9sb2NrX2Fzc2VydChcdTAwMjZkZXYtXHUwMDNlZGV2KTtcbjUwOTk6XHRcdGlmIChlcnJfaGFuZGxlciBcdTAwMjZcdTAwMjYgZXJyX2hhbmRsZXItXHUwMDNlcmVzZXRfcHJlcGFyZSlcbjUxMDA6XHRcdFx0ZXJyX2hhbmRsZXItXHUwMDNlcmVzZXRfcHJlcGFyZShkZXYpO1xuNTEwMTpcdFx0ZWxzZSBpZiAoZGV2LVx1MDAzZWRyaXZlcilcbjUxMDI6XHRcdFx0cGNpX3dhcm4oZGV2LCBcJiMzNDtyZXNldHRpbmdcJiMzNDspO1xuNTEwMzpcdFxuNTEwNDpcdFx0LypcbjUxMDU6XHRcdCAqIFdha2UtdXAgZGV2aWNlIHByaW9yIHRvIHNhdmUuICBQTSByZWdpc3RlcnMgZGVmYXVsdCB0byBEMCBhZnRlclxuNTEwNjpcdFx0ICogcmVzZXQgYW5kIGEgc2ltcGxlIHJlZ2lzdGVyIHJlc3RvcmUgZG9lc24mIzM5O3QgcmVsaWFibHkgcmV0dXJuXG41MTA3Olx0XHQgKiB0byBhIG5vbi1EMCBzdGF0ZSBhbnl3YXkuXG41MTA4Olx0XHQgKi9cbjUxMDk6XHRcdHBjaV9zZXRfcG93ZXJfc3RhdGUoZGV2LCBQQ0lfRDApO1xuNTExMDpcdFxuNTExMTpcdFx0aWYgKCFwY2lfZGV2X2NvbmZpZ19hY2Nlc3NpYmxlKGRldiwgXCYjMzQ7c2F2ZSBzdGF0ZVwmIzM0OykpXG41MTEyOlx0XHRcdHJldHVybjtcbjUxMTM6XHRcbjUxMTQ6XHRcdHBjaV9zYXZlX3N0YXRlKGRldik7XG41MTE1Olx0XHQvKlxuNTExNjpcdFx0ICogRGlzYWJsZSB0aGUgZGV2aWNlIGJ5IGNsZWFyaW5nIHRoZSBDb21tYW5kIHJlZ2lzdGVyLCBleGNlcHQgZm9yXG41MTE3Olx0XHQgKiBJTlR4LWRpc2FibGUgd2hpY2ggaXMgc2V0LiAgVGhpcyBub3Qgb25seSBkaXNhYmxlcyBNTUlPIGFuZCBJL08gcG9ydFxuNTExODpcdFx0ICogQkFScywgYnV0IGFsc28gcHJldmVudHMgdGhlIGRldmljZSBmcm9tIGJlaW5nIEJ1cyBNYXN0ZXIsIHByZXZlbnRpbmdcbjUxMTk6XHRcdCAqIERNQSBmcm9tIHRoZSBkZXZpY2UgaW5jbHVkaW5nIE1TSS9NU0ktWCBpbnRlcnJ1cHRzLiAgRm9yIFBDSSAyLjNcbjUxMjA6XHRcdCAqIGNvbXBsaWFudCBkZXZpY2VzLCBJTlR4LWRpc2FibGUgcHJldmVudHMgbGVnYWN5IGludGVycnVwdHMuXG41MTIxOlx0XHQgKi9cbjUxMjI6XHRcdHBjaV93cml0ZV9jb25maWdfd29yZChkZXYsIFBDSV9DT01NQU5ELCBQQ0lfQ09NTUFORF9JTlRYX0RJU0FCTEUpO1xuNTEyMzpcdH1cbjUxMjQ6XHRcbjUxMjU6XHRzdGF0aWMgdm9pZCBwY2lfZGV2X3Jlc3RvcmUoc3RydWN0IHBjaV9kZXYgKmRldilcbjUxMjY6XHR7XG41MTI3Olx0XHRjb25zdCBzdHJ1Y3QgcGNpX2Vycm9yX2hhbmRsZXJzICplcnJfaGFuZGxlciA9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA5OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2MDQ3CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNTY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIGEgUG90ZW50aWFsIFZ1bG5lcmFiaWxpdHkgaW4gVmlydGlvIEJsb2NrIERldmljZSBSZXNldCoqCgpPa2F5LCBzbyBoZXJlJiMzOTtzIHdoYXQgSSYjMzk7bSB0aGlua2luZzogYHBjaV9kZXZfc2F2ZV9hbmRfZGlzYWJsZWAgdHJpZ2dlcnMgYGVycl9oYW5kbGVyLSZndDtyZXNldF9wcmVwYXJlKGRldilgLiBMb29raW5nIGF0IHRoZSBWaXJ0aW8gUENJIGRyaXZlciAoYGRyaXZlcnMvdmlydGlvL3ZpcnRpb19wY2lfY29tbW9uLmNgKSwgdGhhdCB0cmFuc2xhdGVzIHRvIGB2aXJ0aW9fcGNpX3Jlc2V0X3ByZXBhcmVgLCB3aGljaCBpbiB0dXJuIGNhbGxzIGB2aXJ0aW9fZGV2aWNlX3Jlc2V0X3ByZXBhcmVgLiBUaGlzIGV2ZW50dWFsbHkgbGVhZHMgdG8gYSBkcml2ZXItc3BlY2lmaWMgYHJlc2V0X3ByZXBhcmVgIGZ1bmN0aW9uLCB3aGljaCwgZm9yIGB2aXJ0aW9fYmxrYCwgaXMgYHZpcnRibGtfcmVzZXRfcHJlcGFyZWAsIGFuZCB0aGF0IGNhbGxzIGB2aXJ0YmxrX2ZyZWV6ZV9wcml2YC4KCk5vdywgaGVyZSYjMzk7cyB0aGUga2lja2VyOiBgdmlydGlvX2Jsa2AgaXMgYSBzdGFuZGFyZCB2aXJ0aW8gZGV2aWNlLCBhbmQgYWxtb3N0IGV2ZXJ5IFFFTVUgVk0gcnVubmluZyBzeXprYWxsZXIgdXNlcyBpdCBmb3IgaXRzIHJvb3Qgb3IgYWRkaXRpb25hbCBkaXNrcy4gVGhpcyBtZWFucyBgL3N5cy9idXMvcGNpL2RldmljZXMvLi4uL3Jlc2V0YCBpcyBsaWtlbHkgYWNjZXNzaWJsZSB0byByb290IChhbmQgdGh1cywgc3l6a2FsbGVyKSBpbiB0aGUgVk0gaWYgdmlydGlvLXBjaSBpcyBpbiB1c2UuIEFsdGVybmF0aXZlbHksIHBvd2VyIG1hbmFnZW1lbnQgc3VzcGVuZC9yZXN1bWUgKGAvc3lzL3Bvd2VyL3N0YXRlYCkgY2FuIGFsc28gdHJpZ2dlciB0aGUgc2FtZSBjb2RlIHBhdGgsIGB2aXJ0YmxrX2ZyZWV6ZV9wcml2YC4KClRoZSBtaWxsaW9uLWRvbGxhciBxdWVzdGlvbjogaXMgdGhpcyBjb2RlIHJlYWNoYWJsZT8gWWVzISBWaXJ0aW8gYmxvY2sgZGV2aWNlcyBhcmUgZW11bGF0ZWQgYnkgUUVNVSwgbWFraW5nIGl0IGEgdmlhYmxlIHRhcmdldC4gR2l2ZW4gdGhhdCB0aGUgY3JpdGVyaWEgSSB3YXMgcmV2aWV3aW5nIGluY2x1ZGUgZHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzLCB0aGlzIHNlZW1zIHRvIGZpdCBwZXJmZWN0bHkuIFNlY3Rpb24gMyBleHBsaWNpdGx5IGhpZ2hsaWdodHMgdGhpcyBhcyBhbiBhcmVhIG9mIGNvbmNlcm4uCgpOb3cgSSBuZWVkIHRvIGNsYXJpZnk6IGlzIGB2aXJ0YmxrX2ZyZWV6ZV9wcml2YCBhIHRlYXJkb3duIGNhbGxiYWNrPyBObywgaXQmIzM5O3MgY2FsbGVkIGR1cmluZyBgcmVzZXRfcHJlcGFyZWAgKGEgUENJIGRldmljZSByZXNldCkgYW5kIGR1cmluZyBQTSBmcmVlemUgKHBvd2VyIG1hbmFnZW1lbnQgc3VzcGVuZCksIG5vdCBkdXJpbmcgYHJlbW92ZWAsIG9yIGhvdC11bnBsdWcuIEl04oCZcyBpbXBvcnRhbnQgdG8gY2xhcmlmeSB0aGF0IHRoaXMgaXNu4oCZdCBhIGhvdHBsdWcgb3IgbWFudWFsIHVuYmluZGluZy4gSXQmIzM5O3MgYWN0dWFsbHkgYSByZXNldC4gSSBzaG91bGQgcHJvYmFibHkgYWxzbyBjaGVjayBgdmlydGJsa19yZW1vdmVgIGp1c3QgdG8gYmUgY29tcGxldGVseSBzdXJlIHRoZXJlIGlzbiYjMzk7dCBzb21lIGNyb3Nzb3ZlciBvciBhY2NpZGVudGFsIHNoYXJpbmcgb2YgY29kZS4gQnV0LCBiYXNlZCBvbiB0aGUgY3VycmVudCBjb250ZXh0LCB0aGlzIGxvb2tzIGxpa2UgYSB2YWxpZCBhdHRhY2sgdmVjdG9yIHdvcnRoIGV4cGxvcmluZyBmdXJ0aGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAwOTowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2aXJ0YmxrX3JlbW92ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jPTU1PXN0cnVjdCB2aXJ0aW9fYmxrIHtcbi0tXG5kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYy01Ny1cdCAqIFRoaXMgbXV0ZXggbXVzdCBiZSBoZWxkIGJ5IGFueXRoaW5nIHRoYXQgbWF5IHJ1biBhZnRlclxuZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmM6NTg6XHQgKiB2aXJ0YmxrX3JlbW92ZSgpIHNldHMgdmJsay1cdTAwM2V2ZGV2IHRvIE5VTEwuXG5kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYy01OS1cdCAqXG4tLVxuZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmM9MTQzOD1zdGF0aWMgaW50IHZpcnRibGtfcHJvYmUoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpXG4tLVxuZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmMtMTU2My1cbmRyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jOjE1NjQ6c3RhdGljIHZvaWQgdmlydGJsa19yZW1vdmUoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpXG5kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYy0xNTY1LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYz0xNjc3PXN0YXRpYyBzdHJ1Y3QgdmlydGlvX2RyaXZlciB2aXJ0aW9fYmxrID0ge1xuLS1cbmRyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jLTE2ODQtXHQucHJvYmVcdFx0XHRcdD0gdmlydGJsa19wcm9iZSxcbmRyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jOjE2ODU6XHQucmVtb3ZlXHRcdFx0XHQ9IHZpcnRibGtfcmVtb3ZlLFxuZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmMtMTY4Ni1cdC5jb25maWdfY2hhbmdlZFx0XHRcdD0gdmlydGJsa19jb25maWdfY2hhbmdlZCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDk6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc0NDIKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHZpcnRibGtfcmVtb3ZlKioKCkFscmlnaHQsIGxldCYjMzk7cyBwdWxsIHVwIGBkcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuY2AgYW5kIHplcm8gaW4gb24gdGhlIGB2aXJ0YmxrX3JlbW92ZWAgZnVuY3Rpb24sIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAxNTY0LiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGRldmljZSByZW1vdmFsIHBhdGguIFRoaXMgaXMgbGlrZWx5IHRoZSBjcnVjaWFsIHBvaW50IHdoZXJlIHRoZSB2aXJ0aW8tYmxrIGRldmljZSBpcyBncmFjZWZ1bGx5IGRldGFjaGVkIGZyb20gdGhlIHN5c3RlbS4gSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIHJlc291cmNlIGNsZWFudXA6IGZyZWVpbmcgYWxsb2NhdGVkIG1lbW9yeSAobGlrZSB0aGUgcmVxdWVzdCBxdWV1ZXMpLCBkZS1yZWdpc3RlcmluZyB0aGUgYmxvY2sgZGV2aWNlLCBwb3RlbnRpYWxseSBoYW5kbGluZyBwZW5kaW5nIEkvTywgYW5kIG1heWJlIGV2ZW4gZGlzYWJsaW5nIGludGVycnVwdHMgYXNzb2NpYXRlZCB3aXRoIHRoZSBkZXZpY2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGZ1bmN0aW9uIGNvb3JkaW5hdGVzIHdpdGggdGhlIG90aGVyIHBhcnRzIG9mIHRoZSB2aXJ0aW8tYmxrIGRyaXZlciBkdXJpbmcgc2h1dGRvd24sIGFuZCBob3cgaXQgYXZvaWRzIHJhY2UgY29uZGl0aW9ucyB3aXRoIG9uZ29pbmcgSS9PIG9wZXJhdGlvbnMuIExldCYjMzk7cyBzZWUgaG93IHRoZSBkcml2ZXIgaGFuZGxlcyBwb3RlbnRpYWxseSBjb25jdXJyZW50IHJlcXVlc3RzIGFzIGl0IHVubG9hZHMuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBsb29raW5nIGZvciB0aGUgdXNlIG9mIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzIHRvIHByb3RlY3Qgc2hhcmVkIGRhdGEgc3RydWN0dXJlcyBhbmQgZW5zdXJlIGEgY2xlYW4gdGVhcmRvd24uIEkgYW50aWNpcGF0ZSB0aGlzIGZ1bmN0aW9uIHdpbGwgZG8gaXRzIGR1ZSBkaWxpZ2VuY2UgdG8gcHJldmVudCBkYXRhIGNvcnJ1cHRpb24uIEkmIzM5O20gY3VyaW91cyBhYm91dCB0aGUgc3BlY2lmaWMgb3JkZXIgb2Ygb3BlcmF0aW9ucyDigJMgaXQmIzM5O3MgY3J1Y2lhbCBmb3IgdGhlIGNvcnJlY3Qgc2h1dGRvd24gb2YgdGhlIHN1YnN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDk6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE1NjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTU2MDpcdG91dDpcbjE1NjE6XHRcdHJldHVybiBlcnI7XG4xNTYyOlx0fVxuMTU2MzpcdFxuMTU2NDpcdHN0YXRpYyB2b2lkIHZpcnRibGtfcmVtb3ZlKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KVxuMTU2NTpcdHtcbjE1NjY6XHRcdHN0cnVjdCB2aXJ0aW9fYmxrICp2YmxrID0gdmRldi1cdTAwM2Vwcml2O1xuMTU2NzpcdFxuMTU2ODpcdFx0LyogTWFrZSBzdXJlIG5vIHdvcmsgaGFuZGxlciBpcyBhY2Nlc3NpbmcgdGhlIGRldmljZS4gKi9cbjE1Njk6XHRcdGZsdXNoX3dvcmsoXHUwMDI2dmJsay1cdTAwM2Vjb25maWdfd29yayk7XG4xNTcwOlx0XG4xNTcxOlx0XHRkZWxfZ2VuZGlzayh2YmxrLVx1MDAzZWRpc2spO1xuMTU3MjpcdFx0YmxrX21xX2ZyZWVfdGFnX3NldChcdTAwMjZ2YmxrLVx1MDAzZXRhZ19zZXQpO1xuMTU3MzpcdFxuMTU3NDpcdFx0bXV0ZXhfbG9jayhcdTAwMjZ2YmxrLVx1MDAzZXZkZXZfbXV0ZXgpO1xuMTU3NTpcdFxuMTU3NjpcdFx0LyogU3RvcCBhbGwgdGhlIHZpcnRxdWV1ZXMuICovXG4xNTc3Olx0XHR2aXJ0aW9fcmVzZXRfZGV2aWNlKHZkZXYpO1xuMTU3ODpcdFxuMTU3OTpcdFx0LyogVmlydHF1ZXVlcyBhcmUgc3RvcHBlZCwgbm90aGluZyBjYW4gdXNlIHZibGstXHUwMDNldmRldiBhbnltb3JlLiAqL1xuMTU4MDpcdFx0dmJsay1cdTAwM2V2ZGV2ID0gTlVMTDtcbjE1ODE6XHRcbjE1ODI6XHRcdHZkZXYtXHUwMDNlY29uZmlnLVx1MDAzZWRlbF92cXModmRldik7XG4xNTgzOlx0XHRrZnJlZSh2YmxrLVx1MDAzZXZxcyk7XG4xNTg0Olx0XG4xNTg1Olx0XHRtdXRleF91bmxvY2soXHUwMDI2dmJsay1cdTAwM2V2ZGV2X211dGV4KTtcbjE1ODY6XHRcbjE1ODc6XHRcdHB1dF9kaXNrKHZibGstXHUwMDNlZGlzayk7XG4xNTg4Olx0fVxuMTU4OTpcdFxuMTU5MDpcdHN0YXRpYyBpbnQgdmlydGJsa19mcmVlemVfcHJpdihzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldilcbjE1OTE6XHR7XG4xNTkyOlx0XHRzdHJ1Y3QgdmlydGlvX2JsayAqdmJsayA9IHZkZXYtXHUwMDNlcHJpdjtcbjE1OTM6XHRcdHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxID0gdmJsay1cdTAwM2VkaXNrLVx1MDAzZXF1ZXVlO1xuMTU5NDpcdFx0dW5zaWduZWQgaW50IG1lbWZsYWdzO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAwOTowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODI2NwoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDI5OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIGB2aXJ0YmxrX2ZyZWV6ZV9wcml2YCBhbmQgUG90ZW50aWFsIFF1aWVzY2UgSXNzdWVzKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgYHZpcnRibGtfZnJlZXplX3ByaXZgIGZ1bmN0aW9uLCBhbmQgaXQgc2VlbXMgbGlrZSBJIGhhdmUgc29tZSBpbmNvcnJlY3QgYXNzdW1wdGlvbnMuIFRoZSBkb2N1bWVudGF0aW9uIHN0YXRlcyB0aGF0IGl0JiMzOTtzICpub3QqIGNhbGxlZCBieSBgdmlydGJsa19yZW1vdmVgLCB3aGljaCBpcyBnb29kIHRvIGNsYXJpZnksIGJ1dCBpdCAqaXMqIGNhbGxlZCBieSBgdmlydGJsa19mcmVlemVgIGFuZCBgdmlydGJsa19yZXNldF9wcmVwYXJlYC4gVGhhdCYjMzk7cyBpbXBvcnRhbnQgdG8ga2VlcCBpbiBtaW5kLgoKTm93LCBteSByZWFsIGNvbmNlcm4gaXMgdGhpcyBhcHBhcmVudCBjaGFuZ2UgZnJvbSB1c2luZyBgYmxrX21xX3F1aWVzY2VfcXVldWVfbm93YWl0YCB0byBgYmxrX21xX3F1aWVzY2VfcXVldWVgIHdpdGhpbiB0aGF0IGZ1bmN0aW9uLiBJIGltbWVkaWF0ZWx5IHNlZSB0aGUgcG90ZW50aWFsIGZvciBwcm9ibGVtcyBoZXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGlzIHNoaWZ0IGluIHF1aWVzY2UgbWV0aG9kcyBjb3VsZCBpbnRyb2R1Y2UgZGVhZGxvY2tzIG9yIG90aGVyIGlzc3VlcyBpbiB0aGUgYmxvY2sgSS9PIGxheWVyLCB3aGljaCBpcyBteSBtYWluIGFyZWEgb2YgZm9jdXMuCgpMZXQgbWUgdGFrZSBhIGNsb3NlciBsb29rIGF0IGB2aXJ0YmxrX2ZyZWV6ZV9wcml2YCYjMzk7cyBpbXBsZW1lbnRhdGlvbjogdGhlIGNvZGUgc25pcHBldCBjb25maXJtcyBteSBpbnRlcmVzdCBpbiB0aGlzIGFyZWE6CgpgYGBjCgkvKiBFbnN1cmUgbm8gcmVxdWVzdHMgaW4gdmlydHF1ZXVlcyBiZWZvcmUgZGVsZXRpbmcgdnFzLiAqLwoJbWVtZmxhZ3MgPSBibGtfbXFfZnJlZXplX3F1ZXVlKHEpOwoJYmxrX21xX3F1aWVzY2VfcXVldWUocSk7CglibGtfbXFfdW5mcmVlemVfcXVldWUocSwgbWVtZmxhZ3MpOwpgYGAKCkhlcmUgaXQmIzM5O3MgY2xlYXI6IHdlIGZyZWV6ZSwgcXVpZXNjZSwgdGhlbiB1bmZyZWV6ZSB0aGUgcXVldWUuIEJ1dCAqd2h5KiB3YXMgYGJsa19tcV9xdWllc2NlX3F1ZXVlX25vd2FpdGAgY2hhbmdlZCB0byBgYmxrX21xX3F1aWVzY2VfcXVldWVgPyBUaGF0JiMzOTtzIHRoZSBrZXkgcXVlc3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWFzb25pbmcgYmVoaW5kIHRoaXMgZGVjaXNpb24uIEl0IGNvdWxkIGhhdmUgYmVlbiBpbnRlbnRpb25hbCwgcGVyaGFwcyBmb3IgcGVyZm9ybWFuY2Ugb3Igc3luY2hyb25pemF0aW9uIHJlYXNvbnMsIGJ1dCBpdCBjb3VsZCBhbHNvIGhhdmUgYmVlbiBhbiBvdmVyc2lnaHQgdGhhdCBjb3VsZCBoYXZlIHNlcmlvdXMgY29uc2VxdWVuY2VzLgoKSSBuZWVkIHRvIHRyYWNlIHRoZSBjaGFuZ2UuIEkgaGF2ZSB0byBmaW5kIHRoZSBjb21taXQgdGhhdCBpbnRyb2R1Y2VkIHRoaXMgbW9kaWZpY2F0aW9uLiBJJiMzOTtsbCBzdGFydCB3aXRoIHRoZSBjb21taXQgbWVzc2FnZSwgdGhlIHVzdWFsIHBsYWNlIHRvIGZpbmQgcmVhc29uaW5nLiBJJiMzOTtsbCBzZWFyY2ggdGhlIGdpdCBsb2cgZm9yIG9jY3VycmVuY2VzIG9mICYjMzQ7dmlydGJsa19mcmVlemVfcHJpdiYjMzQ7IG9yICYjMzQ7YmxrX21xX3F1aWVzY2VfcXVldWVfbm93YWl0JiMzNDsuIEFsdGVybmF0aXZlbHksIGlmIHRoZSBjb21taXQgbWVzc2FnZSBpcyB1bmhlbHBmdWwsIEkmIzM5O2xsIHNlYXJjaCB0aGUgbG9nIGZvciAqYW55KiBjb21taXRzIG1lbnRpb25pbmcgYGJsa19tcV9xdWllc2NlX3F1ZXVlX25vd2FpdGAuIElmIHRoYXQgc2VhcmNoIHlpZWxkcyBub3RoaW5nLCBJIG1heSBleHBhbmQgdG8gdXNlIGdyZXBwZXIgdG8gcGVyZm9ybSBhIGNvZGViYXNlLXdpZGUgc2VhcmNoIGZvciB0aGF0IGZ1bmN0aW9uIG5hbWUgdG8gZ2l2ZSBtZSBzb21lIGNvbnRleHQgb24gaG93IHRoZSBmdW5jdGlvbiBuYW1lIGlzIHVzZWQgYWNyb3NzIHRoZSBjb2RlYmFzZS4gSSBoYXZlIHRvIGZpbmQgdGhlIGhpc3RvcnkgYW5kIHVuZGVyc3RhbmQgdGhlIHJhdGlvbmFsZS4gVGhpcyBpcyBjcnVjaWFsIGZvciBldmFsdWF0aW5nIHRoZSBwb3RlbnRpYWwgaW1wYWN0IG9mIHRoaXMgbW9kaWZpY2F0aW9uIG9uIHRoZSBvdmVyYWxsIHN5c3RlbSYjMzk7cyBzdGFiaWxpdHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA5OjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Jsa19tcV9xdWllc2NlX3F1ZXVlX25vd2FpdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9ibGstbXEuYz0yNTU9RVhQT1JUX1NZTUJPTF9HUEwoYmxrX21xX3VuZnJlZXplX3F1ZXVlX25vbl9vd25lcik7XG4tLVxuYmxvY2svYmxrLW1xLmMtMjYwLSAqL1xuYmxvY2svYmxrLW1xLmM6MjYxOnZvaWQgYmxrX21xX3F1aWVzY2VfcXVldWVfbm93YWl0KHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKVxuYmxvY2svYmxrLW1xLmMtMjYyLXtcbi0tXG5ibG9jay9ibGstbXEuYy0yNjktfVxuYmxvY2svYmxrLW1xLmM6MjcwOkVYUE9SVF9TWU1CT0xfR1BMKGJsa19tcV9xdWllc2NlX3F1ZXVlX25vd2FpdCk7XG5ibG9jay9ibGstbXEuYy0yNzEtXG4tLVxuYmxvY2svYmxrLW1xLmMtMjc4LSAqIGZ1bmN0aW9uIG9ubHkgd2FpdHMgZm9yIHRoZSBxdWllc2NlIG9uIHRob3NlIHJlcXVlc3RfcXVldWVzIHRoYXQgaGFkXG5ibG9jay9ibGstbXEuYzoyNzk6ICogdGhlIHF1aWVzY2UgZmxhZyBzZXQgdXNpbmcgYmxrX21xX3F1aWVzY2VfcXVldWVfbm93YWl0LlxuYmxvY2svYmxrLW1xLmMtMjgwLSAqL1xuLS1cbmJsb2NrL2Jsay1tcS5jPTI5OT12b2lkIGJsa19tcV9xdWllc2NlX3F1ZXVlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKVxuYmxvY2svYmxrLW1xLmMtMzAwLXtcbmJsb2NrL2Jsay1tcS5jOjMwMTpcdGJsa19tcV9xdWllc2NlX3F1ZXVlX25vd2FpdChxKTtcbmJsb2NrL2Jsay1tcS5jLTMwMi1cdC8qIG5vdGhpbmcgdG8gd2FpdCBmb3Igbm9uLW1xIHF1ZXVlcyAqL1xuLS1cbmJsb2NrL2Jsay1tcS5jPTMzNT12b2lkIGJsa19tcV9xdWllc2NlX3RhZ3NldChzdHJ1Y3QgYmxrX21xX3RhZ19zZXQgKnNldClcbi0tXG5ibG9jay9ibGstbXEuYy0zNDEtXHRcdGlmICghYmxrX3F1ZXVlX3NraXBfdGFnc2V0X3F1aWVzY2UocSkpXG5ibG9jay9ibGstbXEuYzozNDI6XHRcdFx0YmxrX21xX3F1aWVzY2VfcXVldWVfbm93YWl0KHEpO1xuYmxvY2svYmxrLW1xLmMtMzQzLVx0fVxuLS1cbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jPTI5Mzk9c3RhdGljIHZvaWQgc2NzaV9zdG9wX3F1ZXVlKHN0cnVjdCBzY3NpX2RldmljZSAqc2Rldilcbi0tXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYy0yOTQ3LVx0aWYgKCFjbXB4Y2hnKFx1MDAyNnNkZXYtXHUwMDNlcXVldWVfc3RvcHBlZCwgMCwgMSkpXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYzoyOTQ4Olx0XHRibGtfbXFfcXVpZXNjZV9xdWV1ZV9ub3dhaXQoc2Rldi1cdTAwM2VyZXF1ZXN0X3F1ZXVlKTtcbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jLTI5NDktfVxuLS1cbmluY2x1ZGUvbGludXgvYmxrLW1xLmg9OTc3PXZvaWQgYmxrX21xX3VwZGF0ZV9ucl9od19xdWV1ZXMoc3RydWN0IGJsa19tcV90YWdfc2V0ICpzZXQsIGludCBucl9od19xdWV1ZXMpO1xuaW5jbHVkZS9saW51eC9ibGstbXEuaC05NzgtXG5pbmNsdWRlL2xpbnV4L2Jsay1tcS5oOjk3OTp2b2lkIGJsa19tcV9xdWllc2NlX3F1ZXVlX25vd2FpdChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSk7XG5pbmNsdWRlL2xpbnV4L2Jsay1tcS5oLTk4MC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDk6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk4NjgKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA2NzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBWaXJ0aW8gQmxvY2sgRHJpdmVyJiMzOTtzIFF1aWVzY2luZyBMb2dpYyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIFZpcnRpbyBibG9jayBkcml2ZXIgY29kZSwgYW5kIEkgc2VlIGEga2V5IGNoYW5nZTogdGhleSYjMzk7dmUgc3dhcHBlZCBvdXQgYGJsa19tcV9xdWllc2NlX3F1ZXVlX25vd2FpdGAgd2l0aCBgYmxrX21xX3F1aWVzY2VfcXVldWUocSlgLiBJbnRlcmVzdGluZy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCB3aHkgdGhlIGNoYW5nZT8gSXQmIzM5O3MgaW1tZWRpYXRlbHkgY2xlYXIgdGhhdCBgdmlydGJsa19mcmVlemVfcHJpdmAgaXMgZG9pbmcgc29tZSBxdWV1ZSBtYW5pcHVsYXRpb24uIExvb2tpbmcgYXQgbGluZXMgMTU5Ni0xNjAwLCBpdCYjMzk7cyBjbGVhcjogVGhleSYjMzk7cmUgZnJlZXppbmcsIHF1aWVzY2luZywgYW5kIHRoZW4gdW5mcmVlemluZyB0aGUgcXVldWUuIFRoaXMgc2V0cyBvZmYgc29tZSBhbGFybXMsIG5hdHVyYWxseS4KClRoZSBpbXBvcnRhbnQgcGFydCBpcyB0aGF0IGBibGtfbXFfcXVpZXNjZV9xdWV1ZShxKWAgKndhaXRzKiBmb3IgYWxsIGFjdGl2ZSBkaXNwYXRjaGVzIHRvIGZpbmlzaCB2aWEgYGJsa19tcV93YWl0X3F1aWVzY2VfZG9uZWAgd2hpY2gsIG5vdGFibHksIGNhbGxzIGBzeW5jaHJvbml6ZV9yY3UoKWAuIFNvLCBpdCYjMzk7cyBhIHN5bmNocm9ub3VzIG9wZXJhdGlvbi4gSSB3YXMgY29uY2VybmVkIGFib3V0IHRoZSB1bmZyZWV6aW5nIGFmdGVyd2FyZC4gVGhlIGltcGxpY2F0aW9uIGlzIHRoYXQgdGhleSYjMzk7cmUgZW5zdXJpbmcgYWxsIG9uZ29pbmcgcmVxdWVzdHMgYXJlIGNvbXBsZXRlIGJlZm9yZSBzb21ldGhpbmcgaGFwcGVucywgSSBhbSBhc3N1bWluZyB0aGlzIGlzIHJlbGF0ZWQgdG8gdGhlIHJlc2V0IG9yIGRlbGV0aW9uIG9mIHZpcnRxdWV1ZXMuCgpOb3csIHRoaXMgcmVhbGx5IG1ha2VzIHNlbnNlLiBgYmxrX21xX3F1aWVzY2VfcXVldWVgIGJsb2NrcyBuZXcgZGlzcGF0Y2hlcyB1bnRpbCBpdCYjMzk7cyB1bnF1aWVzY2VkLiBUaGVuLCBgdmlydGJsa19yZXN0b3JlX3ByaXZgIGNhbGxzIGBibGtfbXFfdW5xdWllc2NlX3F1ZXVlKHZibGstJmd0O2Rpc2stJmd0O3F1ZXVlKWAuIFNvLCB0aGUgcXVldWUgaXMgZXNzZW50aWFsbHkgbG9ja2VkIGRvd24gYmV0d2VlbiBgdmlydGJsa19mcmVlemVfcHJpdmAgYW5kIGB2aXJ0YmxrX3Jlc3RvcmVfcHJpdmAuIFRoaXMgaXMgdG8gbWFrZSBzdXJlIHRoYXQgd2hlbiBgdmlydGJsa19mcmVlemVfcHJpdmAgcHJvY2VlZHMgdG8gYHZpcnRpb19yZXNldF9kZXZpY2UodmRldilgIGFuZCBgdmRldi0mZ3Q7Y29uZmlnLSZndDtkZWxfdnFzKHZkZXYpYCwgYWxsIGRpc3BhdGNoZXMgaGF2ZSBnZW51aW5lbHkgZmluaXNoZWQhCgpUaGUgcHJvYmxlbSB3aXRoIHRoZSBvbGQgY29kZSAoYGJsa19tcV9xdWllc2NlX3F1ZXVlX25vd2FpdChxKWApIGlzIG9idmlvdXMgbm93LiBEaXNwYXRjaGVzIGNvdWxkIGhhdmUgY29udGludWVkIHRvIHJ1biwgcG90ZW50aWFsbHkgYWNjZXNzaW5nIGZyZWVkIHZpcnRxdWV1ZXMgKmFmdGVyKiBgdmlydGlvX3Jlc2V0X2RldmljZWAgb3IgYGRlbF92cXModmRldilgISBXaXRoIGBibGtfbXFfcXVpZXNjZV9xdWV1ZShxKWAsIHdlIGdldCB0aGUgbmVjZXNzYXJ5IHdhaXQgZm9yIGNvbXBsZXRpb24uIEJ1dCB3YWl0IC0gdGhpcyBgYmxrX21xX3F1aWVzY2VfcXVldWVgIGNhbiBzbGVlcCAoaXQgY2FsbHMgYHN5bmNocm9uaXplX3JjdWAgb3IgYHN5bmNocm9uaXplX3NyY3VgKS4KClNvLCB0aGUgcXVlc3Rpb24gaXMsIGlzIGl0IGFsbG93ZWQgdG8gc2xlZXAgaW4gYHZpcnRibGtfZnJlZXplX3ByaXZgPyBMZXQmIzM5O3MgY2hlY2suIFllcywgaXQgZG9lcyBgYmxrX21xX2ZyZWV6ZV9xdWV1ZShxKWAgYW5kIGBmbHVzaF93b3JrYCB3aGljaCBjYW4gc2xlZXAuCgpBIG1vcmUgaW1wb3J0YW50IHF1ZXN0aW9uIGFyaXNlcy4gQ2FuIHRoaXMgbmV3IGNvZGUgaGFuZyBvciBkZWFkbG9jayBpZiBhIGRpc3BhdGNoIGlzIGJsb2NrZWQgd2FpdGluZyBmb3Igc29tZXRoaW5nPyBUaGlzIGlzIHdoZXJlIHRoZSByZWFsIHZ1bG5lcmFiaWxpdHkgbGllcy4gVGhlIGltcGxpY2F0aW9ucyBhcmUgY2xlYXIuIElmIGEgZGlzcGF0Y2ggaXMgd2FpdGluZyBvbiwgc2F5LCBhIGxvY2sgaGVsZCBkdXJpbmcgdGhpcyBxdWllc2NlIHNlcXVlbmNlLCB3ZSYjMzk7ZCBoYXZlIGEgZGVhZGxvY2suIEkgd29uZGVyIGhvdyB0aGlzIGludGVyYWN0cyB3aXRoIGFueSBvdGhlciBibG9ja2luZyBjYWxscyB3aXRoaW4gdGhlIEkvTyBwYXRoLgoKTm93LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IGZ1enppbmcgdGhpcy4gQ2FuIHN5emthbGxlciB0cmlnZ2VyIHRoaXMgc2NlbmFyaW8/CgpJJiMzOTt2ZSBnb3QgdG8gY29uc2lkZXIgaG93IHN5emthbGxlciBoYW5kbGVzIHRoaW5ncy4gSG93IGRvZXMgc3l6a2FsbGVyIGZ1enogUE0sIFBDSSByZXNldHMsIG9yIGJsb2NrIGRldmljZXM/IEkgbmVlZCB0byBjaGVjayBpZiBzeXprYWxsZXIgaGFzIHRoZSBwcmltaXRpdmVzIHRvIHRlc3QgUE0gZnJlZXplL3N1c3BlbmQvcmVzdG9yZS4gTGV0JiMzOTtzIHNlZSBpZiBzeXprYWxsZXIgaGFzIHN5c2NhbGwgZGVmaW5pdGlvbnMgb3IsIHNwZWNpZmljYWxseSwgdGVzdHMgUE0gc2xlZXAuCgpBbHJpZ2h0LCBzeXprYWxsZXIgYXBwZWFycyB0byBoYXZlIHNvbWUgdG9vbHM6IGBzeXpfbW91bnRfaW1hZ2VgLCBzeXNmcyB3cml0ZXMgKGxpa2UgYC9zeXMvcG93ZXIvc3RhdGVgKSwgYW5kIGV2ZW4gdGhpbmdzIGxpa2UgYC9zeXMvYnVzL3BjaS9kZXZpY2VzLyovcmVzZXRgLiBTbywgaXQgc2VlbXMgbGlrZSB0aGVyZSBtaWdodCBiZSBhIHBhdGguCgpOb3csIGEga2V5IHF1ZXN0aW9uOiBpcyB2aXJ0aW9fYmxrIGVuYWJsZWQgaW4gYSBzdGFuZGFyZCBzeXprYWxsZXIga2VybmVsIGNvbmZpZz8gSSBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIGZvciBgdmlydGlvX2Jsa2AuIElmIHNvLCB0aGlzIGlzIGEgcHJpbWUgY2FuZGlkYXRlIGZvciBhIHN5emthbGxlciB0ZXN0LCBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gcHJvYmUgZm9yIHRoZXNlIHF1aWVzY2UtcmVsYXRlZCBkZWFkbG9ja3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA5OjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBWSVJUSU9fQkxLJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svS2NvbmZpZz0yODY9Y29uZmlnIFhFTl9CTEtERVZfQkFDS0VORFxuLS1cbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0zMDYtXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc6MzA3OmNvbmZpZyBWSVJUSU9fQkxLXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMzA4LVx0dHJpc3RhdGUgXCYjMzQ7VmlydGlvIGJsb2NrIGRyaXZlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAwOTowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTUwOAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gQmxvY2sgRGV2aWNlIENvbmZpZ3VyYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIHplcm8gaW4gb24gdGhlIGJsb2NrIGRldmljZSBjb25maWd1cmF0aW9uLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gY2hlY2sgYGRyaXZlcnMvYmxvY2svS2NvbmZpZ2AuIEkmIzM5O20gc3BlY2lmaWNhbGx5IGludGVyZXN0ZWQgaW4gd2hhdCYjMzk7cyBoYXBwZW5pbmcgYXJvdW5kIGxpbmUgMzA3LiBUaGF0IGFyZWEgdXN1YWxseSBob2xkcyBjcnVjaWFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyB0aGUgaW5jbHVzaW9uIGFuZCBjb25maWd1cmF0aW9uIG9mIHZhcmlvdXMgYmxvY2sgZGV2aWNlIGRyaXZlcnMsIHRoZWlyIGRlcGVuZGVuY2llcywgYW5kIGFueSByZWxldmFudCBvcHRpb25zLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIGRldGFpbHMgb24gaG93IHNwZWNpZmljIGZlYXR1cmVzIG9yIGRyaXZlcnMgYXJlIGVuYWJsZWQgb3IgZGlzYWJsZWQgdmlhIGtlcm5lbCBjb25maWd1cmF0aW9uLiBJJiMzOTttIGhvcGluZyBpdCBhbHNvIHByb3ZpZGVzIGhpbnRzIG9uIGhvdyB0byBkaWFnbm9zZSBhbnkgcG90ZW50aWFsIGNvbmZsaWN0cyBvciBkZXBlbmRlbmNpZXMuIEZyb20gYSBzeXN0ZW1zIGFyY2hpdGVjdHVyZSBwZXJzcGVjdGl2ZSwgdGhpcyBpcyB3aGVyZSBhIGxvdCBvZiB0aGUgbG93LWxldmVsIGludGVyYWN0aW9ucyBhcmUgZGVjaWRlZCwgc28gaXQgbWFrZXMgc2Vuc2UgdG8gc3RhcnQgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDk6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDMwNTpcdFxuIDMwNjpcdFxuIDMwNzpcdGNvbmZpZyBWSVJUSU9fQkxLXG4gMzA4Olx0XHR0cmlzdGF0ZSBcJiMzNDtWaXJ0aW8gYmxvY2sgZHJpdmVyXCYjMzQ7XG4gMzA5Olx0XHRkZXBlbmRzIG9uIFZJUlRJT1xuIDMxMDpcdFx0c2VsZWN0IFNHX1BPT0xcbiAzMTE6XHRcdGhlbHBcbiAzMTI6XHRcdCAgVGhpcyBpcyB0aGUgdmlydHVhbCBibG9jayBkcml2ZXIgZm9yIHZpcnRpby4gIEl0IGNhbiBiZSB1c2VkIHdpdGhcbiAzMTM6XHQgICAgICAgICAgUUVNVSBiYXNlZCBWTU1zIChsaWtlIEtWTSBvciBYZW4pLiAgU2F5IFkgb3IgTS5cbiAzMTQ6XHRcbiAzMTU6XHRjb25maWcgQkxLX0RFVl9SQkRcbiAzMTY6XHRcdHRyaXN0YXRlIFwmIzM0O1JhZG9zIGJsb2NrIGRldmljZSAoUkJEKVwmIzM0O1xuIDMxNzpcdFx0ZGVwZW5kcyBvbiBJTkVUIFx1MDAyNlx1MDAyNiBCTE9DS1xuIDMxODpcdFx0c2VsZWN0IENFUEhfTElCXG4gMzE5Olx0XHRoZWxwXG4gMzIwOlx0XHQgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgaW5jbHVkZSB0aGUgUmFkb3MgYmxvY2sgZGV2aWNlLCB3aGljaCBzdHJpcGVzXG4gMzIxOlx0XHQgIGEgYmxvY2sgZGV2aWNlIG92ZXIgb2JqZWN0cyBzdG9yZWQgaW4gdGhlIENlcGggZGlzdHJpYnV0ZWQgb2JqZWN0XG4gMzIyOlx0XHQgIHN0b3JlLlxuIDMyMzpcdFxuIDMyNDpcdFx0ICBNb3JlIGluZm9ybWF0aW9uIGF0IGh0dHA6Ly9jZXBoLm5ld2RyZWFtLm5ldC8uXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA5OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyMDE4CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMjQ5MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIERlY2lzaW9uIGZvciB2aXJ0aW9fYmxrLmMgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gRmlyc3QsIEkgbmVlZCB0byByaWdvcm91c2x5IGFwcGx5IHRoZSBwYXRjaCBmdXp6aW5nIGNyaXRlcmlhLiBUaGUgZ29hbCBpcyB0byBpZGVudGlmeSBwb3RlbnRpYWwgY3Jhc2hlcyBvciByZWdyZXNzaW9ucy4gVGhlIGNvcmUgcHJpbmNpcGxlIGlzIHRoYXQgZnV6emluZyBpcyBvbmx5IHZhbHVhYmxlIGZvciBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5ICpleGVjdXRlKiBpbiBhIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBUaGlzIHBhdGNoIGludm9sdmVzIGNoYW5nZXMgdG8gYHZpcnRpb19ibGsuY2AsIGFuZCB0aGF0JiMzOTtzIGEgZHJpdmVyIGZvciBhIHZpcnRpbyBibG9jayBkZXZpY2UuICBWaXJ0aW8gaXMgKmRlZmluaXRlbHkqIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCBRRU1VLiAgU28gZmFyLCBzbyBnb29kLgoKTm93LCBsZXQmIzM5O3MgZ28gdGhyb3VnaCB0aGUgbmVnYXRpdmUgY3JpdGVyaWEsIHRoZSAmIzM0O3doZW4gdG8gcmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSYjMzQ7IGNoZWNrbGlzdDoKCjEuICAqKk5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6KiogIFRoaXMgaXNuJiMzOTt0IGRvY3VtZW50YXRpb24sIHNjcmlwdHMsIG9yIGJ1aWxkIHN5c3RlbSBjaGFuZ2VzLiBOby4KMi4gICoqU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOioqICBUaGlzIGlzbiYjMzk7dCB2ZW5kb3Itc3BlY2lmaWMgUENJZSBoYXJkd2FyZSByZXF1aXJpbmcgYSByZWFsIEFTSUMuIFZpcnRpbyBibG9jayBpcyBmdW5kYW1lbnRhbCB0byBRRU1VLiBUaGlzIGlzIE5PVCB1bnJlYWNoYWJsZS4KMy4gICoqVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOioqIE9rYXksIHRoaXMgaXMgdGhlIG9uZSB0byBzY3J1dGluaXplIGNhcmVmdWxseS4gVGhlIHBhdGNoIG1vZGlmaWVzIGB2aXJ0YmxrX2ZyZWV6ZV9wcml2YC4gIElzIHRoaXMgYSB0ZWFyZG93biBjYWxsYmFjayBsaWtlIGAucmVtb3ZlYCwgYC5zaHV0ZG93bmAsIG9yIGBwY2lfdW5yZWdpc3Rlcl9kcml2ZXJgIHRoYXQgb25seSBoYXBwZW5zIGR1cmluZyBob3QtdW5wbHVnIG9yIG1hbnVhbCB1bmJpbmRpbmc/IE5vISBJdCYjMzk7cyB1c2VkIGluIGAuZnJlZXplYCAoUE0gc3VzcGVuZC9zbGVlcCkgYW5kIGAucmVzZXRfcHJlcGFyZWAgKHZpcnRpbyByZXNldCBvciBQQ0kgZXJyb3IgaGFuZGxlciByZXNldCkuICBCdXQgY2FuIHRoZXNlIGFjdGlvbnMgaGFwcGVuICpkdXJpbmcgcnVudGltZSo/ICBBYnNvbHV0ZWx5ISBRRU1VIGNhbiBkbyB2aXJ0aW8gYmxvY2sgcmVzZXRzIGFuZCBQTSBzdXNwZW5kLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlLCBzbyB0aGlzIGlzIE5PVCBhIG5lZ2F0aXZlIGNvbmRpdGlvbi4KClNvLCBub25lIG9mIHRoZSBuZWdhdGl2ZSBjcml0ZXJpYSBhcHBseS4gIFRoaXMgcGF0Y2ggKnRvdWNoZXMgZXhlY3V0YWJsZSBjb2RlKi4gQW5kIFNlY3Rpb24gMyBzcGVjaWZpY2FsbHkgbWVudGlvbnMgJiMzNDtSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzJiMzNDsgaW5jbHVkaW5nIGRyaXZlcnMgdXNpbmcgdmlydGlvLiBUaGVyZWZvcmUsIEkgTVVTVCBzZXQgYFdvcnRoRnV6emluZyA9IHRydWVgLgoKTm93LCBsZXQmIzM5O3MgZGV0ZXJtaW5lIHRoZSBgRm9jdXNTeW1ib2xzYC4gIFdoYXQgc3BlY2lmaWMgc3ltYm9scyBzaG91bGQgdGhlIGZ1enplciB0YXJnZXQ/IFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgYXJvdW5kIGB2aXJ0YmxrX2ZyZWV6ZV9wcml2YC4gU2luY2UgdGhpcyBpcyBhIHN0YXRpYyBmdW5jdGlvbiB3aXRoaW4gYSAuYyBmaWxlLCBpdCAqd2lsbCogaGF2ZSBhIHN5bWJvbC4gSSAqZG9uJiMzOTt0KiBuZWVkIHRvIHdvcnJ5IGFib3V0IHN0YXRpYyBpbmxpbmVzIGluIGhlYWRlcnMuIExldCYjMzk7cyB0cmFjZSBpdCBkb3duOiBgdmlydGJsa19mcmVlemVfcHJpdmAgaXMgY2FsbGVkIGJ5IGB2aXJ0YmxrX2ZyZWV6ZWAgYW5kIGB2aXJ0YmxrX3Jlc2V0X3ByZXBhcmVgLCBib3RoIG9mIHdoaWNoIGFyZSBhbHNvIHdpdGhpbiBgZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmNgLiBBbGwgdGhlIGZ1bmN0aW9ucyB0b3VjaGVkIGFyZSBmZWF0dXJlLXNwZWNpZmljIGFuZCBhcmUgKm5vdCogYSB1YmlxdWl0b3VzIGhvdC1wYXRoIGZ1bmN0aW9uLiAgSSBjYW4gaW5jbHVkZSB0aG9zZSBmdW5jdGlvbnMgdG8gc3BlY2lmaWNhbGx5IHRhcmdldCB0aGUgbG9naWMuIFRoYXQmIzM5O3MgY2xlYW4gYW5kIHRhcmdldGVkLiBJdCYjMzk7cyB0aGUgY2xlYW5lc3Qgd2F5IHRvIGZvY3VzIGZ1enppbmcgb24gdGhlIGNoYW5nZXMgdGhlbXNlbHZlcy4KClRoZXJlZm9yZSwgdGhlIGFwcHJvcHJpYXRlIGBGb2N1c1N5bWJvbHNgIGFyZToKKiAgIGB2aXJ0YmxrX2ZyZWV6ZV9wcml2YAoqICAgYHZpcnRibGtfZnJlZXplYAoqICAgYHZpcnRibGtfcmVzZXRfcHJlcGFyZWAKCk5leHQsIHRoZSBgRW5hYmxlQ29uZmlnc2AgYXJlIHRob3NlIG5lZWRlZCB0byBjb21waWxlIGFuZCBydW4gdmlydGlvLWJsay4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgcmVsZXZhbnQgYE1ha2VmaWxlYCBmb3IgdGhlIG5lY2Vzc2FyeSBLY29uZmlnIG9wdGlvbnMgdG8gZW5hYmxlIGB2aXJ0aW9fYmxrLmNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAwOTowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2aXJ0aW9fYmxrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL01ha2VmaWxlPTI1PW9iai0kKENPTkZJR19CTEtfREVWX05CRClcdCYjNDM7PSBuYmQub1xuZHJpdmVycy9ibG9jay9NYWtlZmlsZToyNjpvYmotJChDT05GSUdfVklSVElPX0JMSylcdCYjNDM7PSB2aXJ0aW9fYmxrLm9cbmRyaXZlcnMvYmxvY2svTWFrZWZpbGUtMjctXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA5OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1Mjk2CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTA2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktlcm5lbCBDb25maWd1cmF0aW9uIElucXVpcnkqKgoKT2theSwgc28gSSBuZWVkIHRvIG1ha2Ugc3VyZSBgdmlydGlvX2Jsay5vYCBpcyBnb2luZyB0byBidWlsZC4gVGhhdCBtZWFucyBJIG5lZWQgYENPTkZJR19WSVJUSU9fQkxLYCBlbmFibGVkLiBMZXQmIzM5O3Mgc3RhcnQgYnkgbG9va2luZyBhdCBgZHJpdmVycy9ibG9jay9LY29uZmlnYCB0byBzZWUgaWYgaXQmIzM5O3MgZGVmaW5lZCBhbmQgaG93IGl0JiMzOTtzIGNvbmZpZ3VyZWQuIEFoLCB0aGVyZSBpdCBpcyEgYENPTkZJR19WSVJUSU9fQkxLYCBpcyBhIHRyaXN0YXRlIG9wdGlvbiBhbmQgZGVwZW5kcyBvbiBgVklSVElPYCwgYW5kIGFsc28gc2VsZWN0cyBgU0dfUE9PTGAuIEludGVyZXN0aW5nLiBOb3csIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIHRoYXQgdGhlIGRlcGVuZGVuY3kgb24gYFZJUlRJT2AgaXMgYWxzbyBtZXQuIEkgc2hvdWxkIHByb2JhYmx5IG5vdyBnbyBjaGVjayBgZHJpdmVycy92aXJ0aW8vS2NvbmZpZ2AgdG8gY29uZmlybSB0aGF0IGBDT05GSUdfVklSVElPYCBpcyBkZWZpbmVkIGFuZCBlbmFibGVkIGFzIG5lZWRlZC4gVGltZSB0byBkZWx2ZSBpbnRvIHRoZSB2aXJ0aW8gY29uZmlndXJhdGlvbiBhbmQgbWFrZSBzdXJlIGV2ZXJ5dGhpbmcgaXMgaW4gcGxhY2UgZm9yIGEgc3VjY2Vzc2Z1bCBidWlsZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDk6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFZJUlRJT1xcYiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmlydGlvLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3ZpcnRpby9LY29uZmlnPTI9Y29uZmlnIFZJUlRJT19BTkNIT1Jcbi0tXG5kcml2ZXJzL3ZpcnRpby9LY29uZmlnLTQtXG5kcml2ZXJzL3ZpcnRpby9LY29uZmlnOjU6Y29uZmlnIFZJUlRJT1xuZHJpdmVycy92aXJ0aW8vS2NvbmZpZy02LVx0dHJpc3RhdGVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDk6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzU2ODcKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhhdCBLY29uZmlnIGZpbGU6CgoqKkludmVzdGlnYXRpbmcgVmlydGlvIERyaXZlciBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBgZHJpdmVycy92aXJ0aW8vS2NvbmZpZ2AgZmlsZS4gSSYjMzk7bSBnb2luZyB0byBqdW1wIHJpZ2h0IHRvIGFyb3VuZCBsaW5lIDUgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBiaWdnZXIgcGljdHVyZS4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgY29yZSBkZXBlbmRlbmNpZXMgYW5kIHRoZSB2YXJpb3VzIHRyYW5zcG9ydCBvcHRpb25zLCBlc3BlY2lhbGx5IHRoaW5ncyBsaWtlIGBWSVJUSU9fUENJYCwgc2luY2UgdGhhdCYjMzk7cyBhIGNvbW1vbiBvbmUuIEdldHRpbmcgYSBxdWljayBvdmVydmlldyBvZiB0aGUgY29uZGl0aW9uYWwgbG9naWMgYXQgdGhlIHRvcCBvZiB0aGUgZmlsZSB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIHRoZSBkaWZmZXJlbnQgVmlydGlvIGZlYXR1cmVzIGFuZCB0aGVpciB1bmRlcmx5aW5nIGhhcmR3YXJlIG9yIHN5c3RlbSBjb25maWd1cmF0aW9ucy4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIHVuZGVyc3RhbmRpbmcgdGhlIHJlc3Qgb2YgdGhlIGZpbGUgYW5kIGhvdyB0aGUgZHJpdmVyIGlzIHN0cnVjdHVyZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA5OjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy92aXJ0aW8vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdGNvbmZpZyBWSVJUSU9fQU5DSE9SXG4gICAzOlx0XHRib29sXG4gICA0Olx0XG4gICA1Olx0Y29uZmlnIFZJUlRJT1xuICAgNjpcdFx0dHJpc3RhdGVcbiAgIDc6XHRcdHNlbGVjdCBWSVJUSU9fQU5DSE9SXG4gICA4Olx0XHRoZWxwXG4gICA5Olx0XHQgIFRoaXMgb3B0aW9uIGlzIHNlbGVjdGVkIGJ5IGFueSBkcml2ZXIgd2hpY2ggaW1wbGVtZW50cyB0aGUgdmlydGlvXG4gIDEwOlx0XHQgIGJ1cywgc3VjaCBhcyBDT05GSUdfVklSVElPX1BDSSwgQ09ORklHX1ZJUlRJT19NTUlPLCBDT05GSUdfUlBNU0dcbiAgMTE6XHRcdCAgb3IgQ09ORklHX1MzOTBfR1VFU1QuXG4gIDEyOlx0XG4gIDEzOlx0Y29uZmlnIFZJUlRJT19QQ0lfTElCXG4gIDE0Olx0XHR0cmlzdGF0ZVxuICAxNTpcdFx0aGVscFxuICAxNjpcdFx0ICBNb2Rlcm4gUENJIGRldmljZSBpbXBsZW1lbnRhdGlvbi4gVGhpcyBtb2R1bGUgaW1wbGVtZW50cyB0aGVcbiAgMTc6XHRcdCAgYmFzaWMgcHJvYmUgYW5kIGNvbnRyb2wgZm9yIGRldmljZXMgd2hpY2ggYXJlIGJhc2VkIG9uIG1vZGVyblxuICAxODpcdFx0ICBQQ0kgZGV2aWNlIHdpdGggcG9zc2libGUgdmVuZG9yIHNwZWNpZmljIGV4dGVuc2lvbnMuIEFueVxuICAxOTpcdFx0ICBtb2R1bGUgdGhhdCBzZWxlY3RzIHRoaXMgbW9kdWxlIG11c3QgZGVwZW5kIG9uIFBDSS5cbiAgMjA6XHRcbiAgMjE6XHRjb25maWcgVklSVElPX1BDSV9MSUJfTEVHQUNZXG4gIDIyOlx0XHR0cmlzdGF0ZVxuICAyMzpcdFx0aGVscFxuICAyNDpcdFx0ICBMZWdhY3kgUENJIGRldmljZSAoVmlydGlvIFBDSSBDYXJkIDAuOS54IERyYWZ0IGFuZCBvbGRlciBkZXZpY2UpXG4gIDI1Olx0XHQgIGltcGxlbWVudGF0aW9uLlxuICAyNjpcdFx0ICBUaGlzIG1vZHVsZSBpbXBsZW1lbnRzIHRoZSBiYXNpYyBwcm9iZSBhbmQgY29udHJvbCBmb3IgZGV2aWNlc1xuICAyNzpcdFx0ICB3aGljaCBhcmUgYmFzZWQgb24gbGVnYWN5IFBDSSBkZXZpY2UuIEFueSBtb2R1bGUgdGhhdCBzZWxlY3RzIHRoaXNcbiAgMjg6XHRcdCAgbW9kdWxlIG11c3QgZGVwZW5kIG9uIFBDSS5cbiAgMjk6XHRcbiAgMzA6XHRtZW51Y29uZmlnIFZJUlRJT19NRU5VXG4gIDMxOlx0XHRib29sIFwmIzM0O1ZpcnRpbyBkcml2ZXJzXCYjMzQ7XG4gIDMyOlx0XHRkZWZhdWx0IHlcbiAgMzM6XHRcbiAgMzQ6XHRpZiBWSVJUSU9fTUVOVVxuICAzNTpcdFxuICAzNjpcdGNvbmZpZyBWSVJUSU9fSEFSREVOX05PVElGSUNBVElPTlxuICAzNzpcdCAgICAgICAgYm9vbCBcJiMzNDtIYXJkZW4gdmlydGlvIG5vdGlmaWNhdGlvblwmIzM0O1xuICAzODpcdCAgICAgICAgZGVwZW5kcyBvbiBCUk9LRU5cbiAgMzk6XHQgICAgICAgIGhlbHBcbiAgNDA6XHQgICAgICAgICAgRW5hYmxlIHRoaXMgdG8gaGFyZGVuIHRoZSBkZXZpY2Ugbm90aWZpY2F0aW9ucyBhbmQgc3VwcHJlc3NcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDk6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzY0MjAKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIFZJUlRJTyBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIGBWSVJUSU9gIGlzIGdldHRpbmcgY2hvc2VuLCBhbmQgdGhhdCYjMzk7cyBoYXBwZW5pbmcgc3BlY2lmaWNhbGx5IHRocm91Z2ggYFZJUlRJT19QQ0lgLiBBbHJpZ2h0LCB0aGF0IG1ha2VzIHNlbnNlLiBUaW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSBhbmQgZGl2ZSByaWdodCBpbnRvIHRoZSBgS2NvbmZpZ2AgZmlsZXMuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGNoZWNrIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIGBDT05GSUdfVklSVElPX1BDSWAuIEkmIzM5O2xsIGhlYWQgb3ZlciB0byBgZHJpdmVycy92aXJ0aW8vS2NvbmZpZ2AgdG8gc2VlIHdoYXQmIzM5O3MgZHJpdmluZyAqdGhpcyogZGVjaXNpb24uIEdvdHRhIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBhbmQgdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3ZlIGdvdCBpbiB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDk6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFZJUlRJT19QQ0lcXGImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3ZpcnRpby8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy92aXJ0aW8vS2NvbmZpZz0zNj1jb25maWcgVklSVElPX0hBUkRFTl9OT1RJRklDQVRJT05cbi0tXG5kcml2ZXJzL3ZpcnRpby9LY29uZmlnLTQ5LVxuZHJpdmVycy92aXJ0aW8vS2NvbmZpZzo1MDpjb25maWcgVklSVElPX1BDSVxuZHJpdmVycy92aXJ0aW8vS2NvbmZpZy01MS1cdHRyaXN0YXRlIFwmIzM0O1BDSSBkcml2ZXIgZm9yIHZpcnRpbyBkZXZpY2VzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA5OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2NzI1CgkJCQkJCQlvdXRwdXQ6IDIwOAoJCQkJCQkJdGhvdWdodHM6IDQwMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBWaXJ0aW8tYmxrIFBvd2VyIE1hbmFnZW1lbnQgYW5kIFJlc2V0IExvZ2ljKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGltbWVkaWF0ZWx5IHNlZSB0aGF0IGBDT05GSUdfUE1fU0xFRVBgIGlzIHRoZSBrZXkgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZSBjb250cm9sbGluZyB0aGUgaW5jbHVzaW9uIG9mIHRoZSBgdmlydGJsa19mcmVlemVgIGZ1bmN0aW9uIHdpdGhpbiBgdmlydGlvX2Jsay5jYC4gVGhpcyBpcyBpbXBvcnRhbnQsIGFzIGB2aXJ0YmxrX2ZyZWV6ZWAgaXMgbGlua2VkIHRvIHBvd2VyIG1hbmFnZW1lbnQgZnVuY3Rpb25hbGl0eSwgYW5kIGxpa2VseSBoYW5kbGVzIHRoZSBzdXNwZW5kIHByb2Nlc3MuIFNpbmNlIGBWSVJUSU9fQkxLYCBjb21waWxlcyBgdmlydGlvX2Jsay5jYCwgYW5kIGBWSVJUSU9fUENJYCBwcm92aWRlcyB0aGUgUENJIHRyYW5zcG9ydCBmb3IgdmlydGlvIGRldmljZXMgKGFuZCBpbmNsdWRlcyB0aGUgY3J1Y2lhbCBgdmlydGlvX3BjaV9yZXNldF9wcmVwYXJlYCByZXNldCBoYW5kbGVyKSwgaXQmIzM5O3Mgc2FmZSB0byBhc3N1bWUgYFBDSWAgaXMgZm91bmRhdGlvbmFsIGZvciBgVklSVElPX1BDSWAgdG8gb3BlcmF0ZS4KClRvIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZywgbGV0JiMzOTtzIGp1c3QgbWFrZSBhIHF1aWNrIG1lbnRhbCBsaXN0IG9mIHRoZSBjb25maWcgb3B0aW9ucyBhdCBwbGF5IGhlcmU6IGBWSVJUSU9fQkxLYCwgYFZJUlRJT19QQ0lgLCBgUE1fU0xFRVBgLCBhbmQgYFBDSWAuIEdvdCBpdC4KCk5vdywgbGV0JiMzOTtzIHF1aWNrbHkgcmV2aWV3IHRoZSBjb3JlIHN5bWJvbHMgaW52b2x2ZWQ6IGB2aXJ0YmxrX2ZyZWV6ZV9wcml2YCwgYHZpcnRibGtfcmVzZXRfcHJlcGFyZWAsIGFuZCBgdmlydGJsa19mcmVlemVgLiBJJiMzOTttIGFscmVhZHkgYXdhcmUgb2YgdGhlaXIgZnVuY3Rpb24uCgpGaW5hbGx5LCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gc29saWQgb24gdGhlIHJlYXNvbmluZyBmb3IgdGhpcyBwYXRjaC4gSSB1bmRlcnN0YW5kIGl0IHJlcGxhY2VzIHRoZSBub24tYmxvY2tpbmcgYGJsa19tcV9xdWllc2NlX3F1ZXVlX25vd2FpdChxKWAgd2l0aCB0aGUgYmxvY2tpbmcgYGJsa19tcV9xdWllc2NlX3F1ZXVlKHEpYCB3aXRoaW4gYHZpcnRibGtfZnJlZXplX3ByaXYoKWAuIFRoaXMgZW5zdXJlcyBhbGwgaW4tZmxpZ2h0IHJlcXVlc3RzIGFyZSBjb21wbGV0ZWQgYmVmb3JlIHRoZSB2aXJ0cXVldWVzIGFyZSB0b3JuIGRvd24uIFRoaXMgZnVuY3Rpb24gaXMgcmVhY2hhYmxlIGluIHR3byB3YXlzOiB0aHJvdWdoIHRoZSBQQ0kgcmVzZXQgb3IgdGhyb3VnaCB0aGUgcG93ZXIgbWFuYWdlbWVudCBmcmVlemUvc3VzcGVuZCBwcm9jZXNzLiBJdCBsb29rcyBsaWtlIHRoZSBQQ0kgcmVzZXQgaXMgdHJpZ2dlcmVkIHZpYSBzeXNmcywgb3IgdGhlIGB2aXJ0YmxrX3Jlc2V0X3ByZXBhcmVgLiBCZWNhdXNlIHRoaXMgaXMgYSB0b3VjaCB0byBsaXZlIGRyaXZlciBjb2RlIGluIGEgdmlydGlvIGVudmlyb25tZW50LCBmdXp6aW5nIGlzIGFic29sdXRlbHkgd2FycmFudGVkIHRvIGVuc3VyZSB0aGlzIGNoYW5nZSBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IHJlZ3Jlc3Npb25zIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IuIEFsbCBzZWVtcyBnb29kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAwOTowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VklSVElPX0JMSyYjMzQ7LAogICAgJiMzNDtWSVJUSU9fUENJJiMzNDssCiAgICAmIzM0O1BNX1NMRUVQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dmlydGJsa19mcmVlemVfcHJpdiYjMzQ7LAogICAgJiMzNDt2aXJ0YmxrX3Jlc2V0X3ByZXBhcmUmIzM0OywKICAgICYjMzQ7dmlydGJsa19mcmVlemUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdmlydGJsa19mcmVlemVfcHJpdigpIGluIHRoZSB2aXJ0aW8gYmxvY2sgZHJpdmVyIChkcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYykgdG8gdXNlIGJsa19tcV9xdWllc2NlX3F1ZXVlKCkgaW5zdGVhZCBvZiBibGtfbXFfcXVpZXNjZV9xdWV1ZV9ub3dhaXQoKSwgZW5zdXJpbmcgdGhhdCBhbGwgcGVuZGluZyByZXF1ZXN0IGRpc3BhdGNoZXMgY29tcGxldGUgYmVmb3JlIGRlbGV0aW5nIHZpcnRxdWV1ZXMuIFZpcnRpbyBibG9jayBkZXZpY2VzIGFyZSBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIHZpcnR1YWxpemVkIHRlc3QgZW52aXJvbm1lbnRzIGFuZCB0aGlzIHBhdGggaXMgcmVhY2hhYmxlIHZpYSBQQ0kgcmVzZXQgKHZpcnRibGtfcmVzZXRfcHJlcGFyZSkgb3IgcG93ZXIgbWFuYWdlbWVudCBzdXNwZW5kICh2aXJ0YmxrX2ZyZWV6ZSkuIFNpbmNlIHRoZSBwYXRjaCBtb2RpZmllcyByZWFjaGFibGUgZHJpdmVyIGxvZ2ljIG9uIGEgdmlydHVhbCBidXMsIGl0IGlzIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZJUlRJT19CTEsmIzM0OywKICAgICYjMzQ7VklSVElPX1BDSSYjMzQ7LAogICAgJiMzNDtQTV9TTEVFUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3ZpcnRibGtfZnJlZXplX3ByaXYmIzM0OywKICAgICYjMzQ7dmlydGJsa19yZXNldF9wcmVwYXJlJiMzNDssCiAgICAmIzM0O3ZpcnRibGtfZnJlZXplJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHZpcnRibGtfZnJlZXplX3ByaXYoKSBpbiB0aGUgdmlydGlvIGJsb2NrIGRyaXZlciAoZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmMpIHRvIHVzZSBibGtfbXFfcXVpZXNjZV9xdWV1ZSgpIGluc3RlYWQgb2YgYmxrX21xX3F1aWVzY2VfcXVldWVfbm93YWl0KCksIGVuc3VyaW5nIHRoYXQgYWxsIHBlbmRpbmcgcmVxdWVzdCBkaXNwYXRjaGVzIGNvbXBsZXRlIGJlZm9yZSBkZWxldGluZyB2aXJ0cXVldWVzLiBWaXJ0aW8gYmxvY2sgZGV2aWNlcyBhcmUgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSB2aXJ0dWFsaXplZCB0ZXN0IGVudmlyb25tZW50cyBhbmQgdGhpcyBwYXRoIGlzIHJlYWNoYWJsZSB2aWEgUENJIHJlc2V0ICh2aXJ0YmxrX3Jlc2V0X3ByZXBhcmUpIG9yIHBvd2VyIG1hbmFnZW1lbnQgc3VzcGVuZCAodmlydGJsa19mcmVlemUpLiBTaW5jZSB0aGUgcGF0Y2ggbW9kaWZpZXMgcmVhY2hhYmxlIGRyaXZlciBsb2dpYyBvbiBhIHZpcnR1YWwgYnVzLCBpdCBpcyB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAwOTowOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA5OjA5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVwbGFjZXMgYmxrX21xX3F1aWVzY2VfcXVldWVfbm93YWl0KHEpIHdpdGggYmxrX21xX3F1aWVzY2VfcXVldWUocSkgaW4gdmlydGJsa19mcmVlemVfcHJpdigpIHRvIGVuc3VyZSB0aGF0IGluLWZsaWdodCByZXF1ZXN0cyBhbmQgaGFuZGxlcnMgZmluaXNoIGJlZm9yZSB0aGUgdmlydHF1ZXVlcyBhcmUgZGVsZXRlZCBhbmQgZnJlZWQuXG5cbktNU0FOIHZzIEtBU0FOIEFwcGxpY2FiaWxpdHk6XG4tIEtNU0FOIGRldGVjdHMgcmVhZHMgYW5kIGluZm9ybWF0aW9uIGxlYWtzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGlzIHBhdGNoIGRvZXMgbm90IGFsbG9jYXRlIG5ldyBtZW1vcnksIGluaXRpYWxpemUgb3IgcmVhZCB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMsIGNvcHkgZGF0YSB0byB1c2VyIHNwYWNlLCBvciBhbHRlciBkYXRhIGxlbmd0aC9ib3VuZHMgY2FsY3VsYXRpb25zLiBUaGVyZSBpcyB6ZXJvIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UuXG4tIFRoZSBjaGFuZ2UgYWRkcmVzc2VzIHJlcXVlc3QtcXVldWUgc3luY2hyb25pemF0aW9uIGFuZCBjb25jdXJyZW5jeSBkdXJpbmcgdmlydGlvLWJsayBkZXZpY2UgZnJlZXppbmcuIEFueSBidWdzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHBhdGggKHN1Y2ggYXMgcmFjZSBjb25kaXRpb25zLCBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGFjY2Vzc2VzIGR1cmluZyBxdWV1ZSB0ZWFyZG93bikgYXJlIHRyYWNrZWQgYW5kIGNhdWdodCBieSBLQVNBTiBhbmQgTE9DS0RFUC5cblxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGVhNjFjNTc3ZTEzNzFhMDZkYzM5MGEzY2E2YjMyMWYwNWE2NzQyMzQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IFNlcCAxMiAwOTowODowNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jIGIvZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmMKaW5kZXggMzJiZjNiYTA3YTlkYy4uN2E1NzA1OTFlMDQwYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmMKQEAgLTE1OTUsNyAmIzQzOzE1OTUsNyBAQCBzdGF0aWMgaW50IHZpcnRibGtfZnJlZXplX3ByaXYoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpCiAKIAkvKiBFbnN1cmUgbm8gcmVxdWVzdHMgaW4gdmlydHF1ZXVlcyBiZWZvcmUgZGVsZXRpbmcgdnFzLiAqLwogCW1lbWZsYWdzID0gYmxrX21xX2ZyZWV6ZV9xdWV1ZShxKTsKLQlibGtfbXFfcXVpZXNjZV9xdWV1ZV9ub3dhaXQocSk7CiYjNDM7CWJsa19tcV9xdWllc2NlX3F1ZXVlKHEpOwogCWJsa19tcV91bmZyZWV6ZV9xdWV1ZShxLCBtZW1mbGFncyk7CiAKIAkvKiBFbnN1cmUgd2UgZG9uJiMzOTt0IHJlY2VpdmUgYW55IG1vcmUgaW50ZXJydXB0cyAqLwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDk6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEwMQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI5MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBKdXN0aWZpY2F0aW9uIGZvciBWaXJ0aW8tYmxrLmMgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBhc2tlZCB0byBhc3Nlc3Mgd2hldGhlciB0aGlzIHBhdGNoIHRvIGBkcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuY2Agd2FycmFudHMgYSBkZWRpY2F0ZWQgS2VybmVsIE1lbW9yeSBTYW5pdGl6ZXIgKEtNU0FOKSBzZXNzaW9uLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgbGV0JiMzOTtzIGRpdmUgaW4gYW5kIHNlZSB3aGF0JiMzOTtzIGNoYW5nZWQuIEkgd2FudCBhIHByb3BlciBhbmFseXNpcywgbm90IGp1c3QgYSBndXQgZmVlbGluZy4KCkkmIzM5O20gbG9va2luZyBhdCB0aGUgZGlmZjogYGJsa19tcV9xdWllc2NlX3F1ZXVlX25vd2FpdChxKWAgaGFzIGJlZW4gY2hhbmdlZCB0byBgYmxrX21xX3F1aWVzY2VfcXVldWUocSlgLiBUaGF0JiMzOTtzIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgaGVyZS4gUXVpZXNjaW5nIGEgcXVldWUuLi4gdGhhdCYjMzk7cyB1c3VhbGx5IGFib3V0IGVuc3VyaW5nIHRoYXQgbm8gZnVydGhlciBvcGVyYXRpb25zIGFyZSBzdWJtaXR0ZWQgdG8gaXQuIFRoaXMgc3VnZ2VzdHMgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24gb3IgbWVtb3J5IHNhZmV0eSBjb25jZXJuIGR1cmluZyBmcmVlemUvdGhhdyBvcGVyYXRpb25zLCB3aGljaCBpcyBhbHdheXMgd29ydGggYSBjbG9zZXIgbG9vay4KCkxldCBtZSByZWFkIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGB2aXJ0aW9fYmxrLmNgIGFyb3VuZCBsaW5lIDE1OTUgdXNpbmcgdGhlIGByZWFkLWZpbGVgIGNvbW1hbmQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSAqY29udGV4dCogb2YgdGhpcyBxdWllc2NlIG9wZXJhdGlvbi4gV2hhdCYjMzk7cyBgdmlydGJsa19mcmVlemVfcHJpdmAgdHJ5aW5nIHRvIGFjaGlldmU/IElzIGl0IGNyaXRpY2FsIGZvciBkYXRhIGludGVncml0eT8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBpZiBhIHJhY2UgY29uZGl0aW9uIHdlcmUgdG8gb2NjdXIgaGVyZT8gSSBuZWVkIHRvIGFuYWx5emUgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZ3Jhc3AgdGhlIGludGVudCBvZiB0aGVzZSBsaW5lcy4KCk15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoaXMgY2hhbmdlICptaWdodCogYmUgc2lnbmlmaWNhbnQgZnJvbSBhIG1lbW9yeSBzYWZldHkgcGVyc3BlY3RpdmUuIEEgc3luY2hyb25vdXMgcXVpZXNjZSBpbnN0ZWFkIG9mIGFuIGFzeW5jaHJvbm91cyBvbmUgY291bGQgYWx0ZXIgdGltaW5nIGFuZCB0aGUgcG90ZW50aWFsIGZvciBjb25jdXJyZW50IGFjY2Vzcy4gSSB3YW50IHRvIHNlZSBob3cgdGhpcyBpbXBhY3RzIHRoZSBvdmVyYWxsIGZsb3cgb2YgZGF0YSBhbmQgY29tbWFuZHMsIGVzcGVjaWFsbHkgcmVnYXJkaW5nIHRob3NlIG1lbW9yeSBmbGFncy4gVGhpcyBjZXJ0YWlubHkgbWVyaXRzIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbiB1bmRlciBLTVNBTi4gSSB0aGluayBpdCB3b3VsZCBiZSBhIGdvb2QgaWRlYSB0byBwZXJmb3JtIGEgZGVlcGVyIGFuYWx5c2lzIHdpdGggS01TQU4gdG8gZW5zdXJlIHRoZXJlIGFyZSBubyB1bmludGVuZGVkIGNvbnNlcXVlbmNlcy4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgZmlndXJlIG91dCBpZiBLTVNBTiBpcyByZWFsbHkgbmVlZGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAwOToxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTU4NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNTg1Olx0XHRtdXRleF91bmxvY2soXHUwMDI2dmJsay1cdTAwM2V2ZGV2X211dGV4KTtcbjE1ODY6XHRcbjE1ODc6XHRcdHB1dF9kaXNrKHZibGstXHUwMDNlZGlzayk7XG4xNTg4Olx0fVxuMTU4OTpcdFxuMTU5MDpcdHN0YXRpYyBpbnQgdmlydGJsa19mcmVlemVfcHJpdihzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldilcbjE1OTE6XHR7XG4xNTkyOlx0XHRzdHJ1Y3QgdmlydGlvX2JsayAqdmJsayA9IHZkZXYtXHUwMDNlcHJpdjtcbjE1OTM6XHRcdHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxID0gdmJsay1cdTAwM2VkaXNrLVx1MDAzZXF1ZXVlO1xuMTU5NDpcdFx0dW5zaWduZWQgaW50IG1lbWZsYWdzO1xuMTU5NTpcdFxuMTU5NjpcdFx0LyogRW5zdXJlIG5vIHJlcXVlc3RzIGluIHZpcnRxdWV1ZXMgYmVmb3JlIGRlbGV0aW5nIHZxcy4gKi9cbjE1OTc6XHRcdG1lbWZsYWdzID0gYmxrX21xX2ZyZWV6ZV9xdWV1ZShxKTtcbjE1OTg6XHRcdGJsa19tcV9xdWllc2NlX3F1ZXVlKHEpO1xuMTU5OTpcdFx0YmxrX21xX3VuZnJlZXplX3F1ZXVlKHEsIG1lbWZsYWdzKTtcbjE2MDA6XHRcbjE2MDE6XHRcdC8qIEVuc3VyZSB3ZSBkb24mIzM5O3QgcmVjZWl2ZSBhbnkgbW9yZSBpbnRlcnJ1cHRzICovXG4xNjAyOlx0XHR2aXJ0aW9fcmVzZXRfZGV2aWNlKHZkZXYpO1xuMTYwMzpcdFxuMTYwNDpcdFx0LyogTWFrZSBzdXJlIG5vIHdvcmsgaGFuZGxlciBpcyBhY2Nlc3NpbmcgdGhlIGRldmljZS4gKi9cbjE2MDU6XHRcdGZsdXNoX3dvcmsoXHUwMDI2dmJsay1cdTAwM2Vjb25maWdfd29yayk7XG4xNjA2Olx0XG4xNjA3Olx0XHR2ZGV2LVx1MDAzZWNvbmZpZy1cdTAwM2VkZWxfdnFzKHZkZXYpO1xuMTYwODpcdFx0a2ZyZWUodmJsay1cdTAwM2V2cXMpO1xuMTYwOTpcdFx0LypcbjE2MTA6XHRcdCAqIFNldCB0byBOVUxMIHRvIHByZXZlbnQgZnJlZWluZyB2cXMgYWdhaW4gYWZ0ZXIgYSBmYWlsZWQgdnFzXG4xNjExOlx0XHQgKiBhbGxvY2F0aW9uIGR1cmluZyByZXN1bWUuIE5vdGUgdGhhdCBrZnJlZSgpIGFscmVhZHkgaGFuZGxlcyBOVUxMXG4xNjEyOlx0XHQgKiBwb2ludGVycyBzYWZlbHkuXG4xNjEzOlx0XHQgKi9cbjE2MTQ6XHRcdHZibGstXHUwMDNldnFzID0gTlVMTDtcbjE2MTU6XHRcbjE2MTY6XHRcdHJldHVybiAwO1xuMTYxNzpcdH1cbjE2MTg6XHRcbjE2MTk6XHRzdGF0aWMgaW50IHZpcnRibGtfcmVzdG9yZV9wcml2KHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KVxuMTYyMDpcdHtcbjE2MjE6XHRcdHN0cnVjdCB2aXJ0aW9fYmxrICp2YmxrID0gdmRldi1cdTAwM2Vwcml2O1xuMTYyMjpcdFx0aW50IHJldDtcbjE2MjM6XHRcbjE2MjQ6XHRcdHJldCA9IGluaXRfdnEodmRldi1cdTAwM2Vwcml2KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDk6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQwMAoJCQkJCQkJb3V0cHV0OiAyMjQKCQkJCQkJCXRob3VnaHRzOiA5MzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQXNzZXNzbWVudDogdmlydGlvLWJsayBRdWV1ZSBRdWllc2NpbmcgU3luY2hyb25pemF0aW9uIEZpeCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgY29yZSBvZiB0aGlzIGNoYW5nZSBpbnZvbHZlcyBzd2FwcGluZyBvdXQgYGJsa19tcV9xdWllc2NlX3F1ZXVlX25vd2FpdChxKWAgZm9yIGBibGtfbXFfcXVpZXNjZV9xdWV1ZShxKWAuIFRoZSBjcml0aWNhbCBkaWZmZXJlbmNlIGlzIHRoZSB3YWl0aW5nIGJlaGF2aW9yOiB0aGUgYG5vd2FpdGAgdmVyc2lvbiBkb2VzbiYjMzk7dCBlbnN1cmUgdGhlIGNvbXBsZXRpb24gb2YgaW4tZmxpZ2h0IHJlcXVlc3RzIGJlZm9yZSBwcm9jZWVkaW5nLCB3aGlsZSB0aGUgc3RhbmRhcmQgdmVyc2lvbiAqZG9lcyouIFRoZSBjb21tZW50IGNsZWFybHkgcG9pbnRzIG91dCB0aGUgbW90aXZhdGlvbjogdG8gcHJldmVudCBhIHJhY2Ugd2hlcmUgcmVxdWVzdHMgbWlnaHQgc3RpbGwgYmUgb3BlcmF0aW5nIG9uIHZpcnRxdWV1ZXMgd2hpbGUgd2UmIzM5O3JlIHRyeWluZyB0byBkZWxldGUgdGhlbSwgbGVhZGluZyB0byBhIG5hc3R5IHVzZS1hZnRlci1mcmVlIG9yIG1lbW9yeSBjb3JydXB0aW9uIHdoZW4gYGRlbF92cXMoKWAgaXMgY2FsbGVkLCBmb2xsb3dlZCBieSBga2ZyZWUodmJsay0mZ3Q7dnFzKWAuCgpUaGUgY3J1Y2lhbCBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoaXMgY2hhbmdlIGludHJvZHVjZXMgb3IgZXhwb3NlcyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIEkmIzM5O3ZlIGdvdCB0byBjYXJlZnVsbHkgY29uc2lkZXIgdGhpcywgZ2l2ZW4gS01TQU4mIzM5O3MgcHVycG9zZS4gUmV2aWV3aW5nIHRoZSBjb2RlLCBJIHNlZSBubyBpbmRpY2F0aW9uIG9mIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlcyBiZWluZyBzZW50IHRvIHVzZXJzcGFjZSwgbm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgYmVpbmcgcmVhZCwgbm8gbmV3IGFsbG9jYXRpb25zIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHMsIGFuZCBubyBjaGFuZ2VzIHRvIGJvdW5kcyBjaGVja3Mgb3IgbG9naWMgdGhhdCBjb3VsZCBsZWFkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzcy4gV2UgYXJlIGZpeGluZyBhIGNvbmN1cnJlbmN5L3N5bmNocm9uaXphdGlvbiBpc3N1ZSBoZXJlIChzcGVjaWZpY2FsbHksIHBvdGVudGlhbGx5IHByZXZlbnRpbmcgYSB1c2UtYWZ0ZXItZnJlZSBvciByYWNlIGNvbmRpdGlvbiB3aGVuIGRlbGV0aW5nIHZpcnRxdWV1ZXMgd2hpbGUgcmVxdWVzdHMgYXJlIGluLWZsaWdodCkuIEFueSBzdWNoIGlzc3VlcyB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gb3IgTE9DS0RFUC4KClJlbWVtYmVyIHRoZSBjcml0aWNhbCBkaXN0aW5jdGlvbjogS0FTQU4gY292ZXJzIG91dC1vZi1ib3VuZHMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZXMsIGFuZCBpbnZhbGlkIGZyZWVzLCBhbmQgTE9DS0RFUCBjYXRjaGVzIGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzLiBLTVNBTiBmb2N1c2VzIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIChzdGFjaywgaGVhcCwgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKVGhlIHJ1bGUgb2YgdGh1bWIgaXM6IGlmIHRoZSBidWcgaXMgc29tZXRoaW5nIHRoYXQgS0FTQU4sIExPQ0tERVAsIG9yIG90aGVyIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgd291bGQgY2F0Y2gsIHRoZXJlJiMzOTtzIG5vIG5lZWQgdG8gcnVuIEtNU0FOLiBUaGlzIHBhdGNoIGZvY3VzZXMgb24gc3luY2hyb25pemF0aW9uIGFuZCBjb25jdXJyZW5jeSwgbm90IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBNb3Jlb3ZlciwgYWxsIHN0YWNrIGFuZCBoZWFwIHN0cnVjdHVyZXMgdG91Y2hlZC9pbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgKHplcm9lZC9tZW1zZXQva3phbGxvYyYjMzk7ZCkgYmVmb3JlIGJlaW5nIHJlYWQuIFRoaXMgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpUaGUgcGF0Y2gmIzM5O3MgcHVycG9zZSBpcyBhIHN5bmNocm9uaXphdGlvbiBmaXg6IGVuc3VyaW5nIHRoZSBxdWV1ZSBpcyBmdWxseSBxdWllc2NlZCBiZWZvcmUgZGVsZXRpbmcgdmlydHF1ZXVlcy4gRmFpbHVyZXMgaGVyZSB3b3VsZCBiZSByZWxhdGVkIHRvIGNvbmN1cnJlbmN5LCBzeW5jaHJvbml6YXRpb24sIG9yIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBkdXJpbmcgZnJlZXplL3Bvd2VyIG1hbmFnZW1lbnQgb2YgdmlydGlvLWJsay4KClRoZXJlZm9yZSwgKk5lZWRzS01TQU4gPSBmYWxzZSouCgpUbyBqdXN0aWZ5IHRoaXMgY29uY2x1c2lvbiwgSSYjMzk7bGwgY29uY2lzZWx5IGV4cGxhaW46CgoqICAgVGhlIHBhdGNoJiMzOTtzIGZ1bmN0aW9uYWxpdHk6IFJlcGxhY2luZyB0aGUgbm9uLXdhaXRpbmcgdmVyc2lvbiB3aXRoIHRoZSB3YWl0aW5nIHZlcnNpb24gaW4gYHZpcnRibGtfZnJlZXplX3ByaXYoKWAgZW5zdXJlcyBjb21wbGV0aW9uIG9mIGluLWZsaWdodCByZXF1ZXN0cyBiZWZvcmUgZnJlZWluZyB2aXJ0aW8gcXVldWVzLgoqICAgS01TQU4mIzM5O3MgcmVsZXZhbmNlOiBLTVNBTiBkZXRlY3RzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZSBvciBsZWFrcy4gVGhpcyBwYXRjaCBoYXMgbm8gc3VjaCByaXNrLgoqICAgS0FTQU4vTE9DS0RFUCYjMzk7cyByZWxldmFuY2U6IFRoZSBmaXhlZCBidWcgaXMgYWJvdXQgY29uY3VycmVuY3kvc3luY2hyb25pemF0aW9uLCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGFuZCB1c2UtYWZ0ZXItZnJlZXMsIHdoaWNoIEtBU0FOL0xPQ0tERVAgd291bGQgZGV0ZWN0LgoqICAgVGhlIG92ZXJhbGwgY29uY2x1c2lvbiBpcyB0aGF0IGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCBuZWNlc3NhcnkgaGVyZS4gSSBjYW4gZXhlY3V0ZSBgc2V0LXJlc3VsdHNgIG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDk6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVwbGFjZXMgYmxrX21xX3F1aWVzY2VfcXVldWVfbm93YWl0KHEpIHdpdGggYmxrX21xX3F1aWVzY2VfcXVldWUocSkgaW4gdmlydGJsa19mcmVlemVfcHJpdigpIHRvIGVuc3VyZSB0aGF0IGluLWZsaWdodCByZXF1ZXN0cyBhbmQgaGFuZGxlcnMgZmluaXNoIGJlZm9yZSB0aGUgdmlydHF1ZXVlcyBhcmUgZGVsZXRlZCBhbmQgZnJlZWQuXG5cbktNU0FOIHZzIEtBU0FOIEFwcGxpY2FiaWxpdHk6XG4tIEtNU0FOIGRldGVjdHMgcmVhZHMgYW5kIGluZm9ybWF0aW9uIGxlYWtzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGlzIHBhdGNoIGRvZXMgbm90IGFsbG9jYXRlIG5ldyBtZW1vcnksIGluaXRpYWxpemUgb3IgcmVhZCB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMsIGNvcHkgZGF0YSB0byB1c2VyIHNwYWNlLCBvciBhbHRlciBkYXRhIGxlbmd0aC9ib3VuZHMgY2FsY3VsYXRpb25zLiBUaGVyZSBpcyB6ZXJvIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UuXG4tIFRoZSBjaGFuZ2UgYWRkcmVzc2VzIHJlcXVlc3QtcXVldWUgc3luY2hyb25pemF0aW9uIGFuZCBjb25jdXJyZW5jeSBkdXJpbmcgdmlydGlvLWJsayBkZXZpY2UgZnJlZXppbmcuIEFueSBidWdzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHBhdGggKHN1Y2ggYXMgcmFjZSBjb25kaXRpb25zLCBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGFjY2Vzc2VzIGR1cmluZyBxdWV1ZSB0ZWFyZG93bikgYXJlIHRyYWNrZWQgYW5kIGNhdWdodCBieSBLQVNBTiBhbmQgTE9DS0RFUC5cblxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlcGxhY2VzIGJsa19tcV9xdWllc2NlX3F1ZXVlX25vd2FpdChxKSB3aXRoIGJsa19tcV9xdWllc2NlX3F1ZXVlKHEpIGluIHZpcnRibGtfZnJlZXplX3ByaXYoKSB0byBlbnN1cmUgdGhhdCBpbi1mbGlnaHQgcmVxdWVzdHMgYW5kIGhhbmRsZXJzIGZpbmlzaCBiZWZvcmUgdGhlIHZpcnRxdWV1ZXMgYXJlIGRlbGV0ZWQgYW5kIGZyZWVkLlxuXG5LTVNBTiB2cyBLQVNBTiBBcHBsaWNhYmlsaXR5OlxuLSBLTVNBTiBkZXRlY3RzIHJlYWRzIGFuZCBpbmZvcm1hdGlvbiBsZWFrcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhpcyBwYXRjaCBkb2VzIG5vdCBhbGxvY2F0ZSBuZXcgbWVtb3J5LCBpbml0aWFsaXplIG9yIHJlYWQgdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzLCBjb3B5IGRhdGEgdG8gdXNlciBzcGFjZSwgb3IgYWx0ZXIgZGF0YSBsZW5ndGgvYm91bmRzIGNhbGN1bGF0aW9ucy4gVGhlcmUgaXMgemVybyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLlxuLSBUaGUgY2hhbmdlIGFkZHJlc3NlcyByZXF1ZXN0LXF1ZXVlIHN5bmNocm9uaXphdGlvbiBhbmQgY29uY3VycmVuY3kgZHVyaW5nIHZpcnRpby1ibGsgZGV2aWNlIGZyZWV6aW5nLiBBbnkgYnVncyBhc3NvY2lhdGVkIHdpdGggdGhpcyBwYXRoIChzdWNoIGFzIHJhY2UgY29uZGl0aW9ucywgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBhY2Nlc3NlcyBkdXJpbmcgcXVldWUgdGVhcmRvd24pIGFyZSB0cmFja2VkIGFuZCBjYXVnaHQgYnkgS0FTQU4gYW5kIExPQ0tERVAuXG5cblRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDA5OjA4OjA1Ljk5MjkwMzk3OFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNTUxOTQwMTY0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJWSVJUSU9fQkxLXCIsXG4gICAgXCJWSVJUSU9fUENJXCIsXG4gICAgXCJQTV9TTEVFUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZpcnRibGtfZnJlZXplX3ByaXZcIixcbiAgICBcInZpcnRibGtfcmVzZXRfcHJlcGFyZVwiLFxuICAgIFwidmlydGJsa19mcmVlemVcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlcGxhY2VzIGJsa19tcV9xdWllc2NlX3F1ZXVlX25vd2FpdChxKSB3aXRoIGJsa19tcV9xdWllc2NlX3F1ZXVlKHEpIGluIHZpcnRibGtfZnJlZXplX3ByaXYoKSB0byBlbnN1cmUgdGhhdCBpbi1mbGlnaHQgcmVxdWVzdHMgYW5kIGhhbmRsZXJzIGZpbmlzaCBiZWZvcmUgdGhlIHZpcnRxdWV1ZXMgYXJlIGRlbGV0ZWQgYW5kIGZyZWVkLlxcblxcbktNU0FOIHZzIEtBU0FOIEFwcGxpY2FiaWxpdHk6XFxuLSBLTVNBTiBkZXRlY3RzIHJlYWRzIGFuZCBpbmZvcm1hdGlvbiBsZWFrcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhpcyBwYXRjaCBkb2VzIG5vdCBhbGxvY2F0ZSBuZXcgbWVtb3J5LCBpbml0aWFsaXplIG9yIHJlYWQgdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzLCBjb3B5IGRhdGEgdG8gdXNlciBzcGFjZSwgb3IgYWx0ZXIgZGF0YSBsZW5ndGgvYm91bmRzIGNhbGN1bGF0aW9ucy4gVGhlcmUgaXMgemVybyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLlxcbi0gVGhlIGNoYW5nZSBhZGRyZXNzZXMgcmVxdWVzdC1xdWV1ZSBzeW5jaHJvbml6YXRpb24gYW5kIGNvbmN1cnJlbmN5IGR1cmluZyB2aXJ0aW8tYmxrIGRldmljZSBmcmVlemluZy4gQW55IGJ1Z3MgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcGF0aCAoc3VjaCBhcyByYWNlIGNvbmRpdGlvbnMsIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYWNjZXNzZXMgZHVyaW5nIHF1ZXVlIHRlYXJkb3duKSBhcmUgdHJhY2tlZCBhbmQgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBMT0NLREVQLlxcblxcblRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdmlydGJsa19mcmVlemVfcHJpdigpIGluIHRoZSB2aXJ0aW8gYmxvY2sgZHJpdmVyIChkcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYykgdG8gdXNlIGJsa19tcV9xdWllc2NlX3F1ZXVlKCkgaW5zdGVhZCBvZiBibGtfbXFfcXVpZXNjZV9xdWV1ZV9ub3dhaXQoKSwgZW5zdXJpbmcgdGhhdCBhbGwgcGVuZGluZyByZXF1ZXN0IGRpc3BhdGNoZXMgY29tcGxldGUgYmVmb3JlIGRlbGV0aW5nIHZpcnRxdWV1ZXMuIFZpcnRpbyBibG9jayBkZXZpY2VzIGFyZSBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIHZpcnR1YWxpemVkIHRlc3QgZW52aXJvbm1lbnRzIGFuZCB0aGlzIHBhdGggaXMgcmVhY2hhYmxlIHZpYSBQQ0kgcmVzZXQgKHZpcnRibGtfcmVzZXRfcHJlcGFyZSkgb3IgcG93ZXIgbWFuYWdlbWVudCBzdXNwZW5kICh2aXJ0YmxrX2ZyZWV6ZSkuIFNpbmNlIHRoZSBwYXRjaCBtb2RpZmllcyByZWFjaGFibGUgZHJpdmVyIGxvZ2ljIG9uIGEgdmlydHVhbCBidXMsIGl0IGlzIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDA5OjA4OjA1Ljk5MjkwODAyOVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYzNTY3MjEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZWE2MWM1NzdlMTM3MWEwNmRjMzkwYTNjYTZiMzIxZjA1YTY3NDIzNFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IFNlcCAxMiAwOTowODowNSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYyBiL2RyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jXFxuaW5kZXggMzJiZjNiYTA3YTlkYy4uN2E1NzA1OTFlMDQwYSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuY1xcbisrKyBiL2RyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jXFxuQEAgLTE1OTUsNyArMTU5NSw3IEBAIHN0YXRpYyBpbnQgdmlydGJsa19mcmVlemVfcHJpdihzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldilcXG4gXFxuIFxcdC8qIEVuc3VyZSBubyByZXF1ZXN0cyBpbiB2aXJ0cXVldWVzIGJlZm9yZSBkZWxldGluZyB2cXMuICovXFxuIFxcdG1lbWZsYWdzID0gYmxrX21xX2ZyZWV6ZV9xdWV1ZShxKTtcXG4tXFx0YmxrX21xX3F1aWVzY2VfcXVldWVfbm93YWl0KHEpO1xcbitcXHRibGtfbXFfcXVpZXNjZV9xdWV1ZShxKTtcXG4gXFx0YmxrX21xX3VuZnJlZXplX3F1ZXVlKHEsIG1lbWZsYWdzKTtcXG4gXFxuIFxcdC8qIEVuc3VyZSB3ZSBkb24ndCByZWNlaXZlIGFueSBtb3JlIGludGVycnVwdHMgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDk6MDg6MDYuNDU3MjAyOTczWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxMTIyMjgzNjczNjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVklSVElPX0JMS1wiLFxuICAgIFwiVklSVElPX1BDSVwiLFxuICAgIFwiUE1fU0xFRVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2aXJ0YmxrX2ZyZWV6ZV9wcml2XCIsXG4gICAgXCJ2aXJ0YmxrX3Jlc2V0X3ByZXBhcmVcIixcbiAgICBcInZpcnRibGtfZnJlZXplXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdmlydGJsa19mcmVlemVfcHJpdigpIGluIHRoZSB2aXJ0aW8gYmxvY2sgZHJpdmVyIChkcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYykgdG8gdXNlIGJsa19tcV9xdWllc2NlX3F1ZXVlKCkgaW5zdGVhZCBvZiBibGtfbXFfcXVpZXNjZV9xdWV1ZV9ub3dhaXQoKSwgZW5zdXJpbmcgdGhhdCBhbGwgcGVuZGluZyByZXF1ZXN0IGRpc3BhdGNoZXMgY29tcGxldGUgYmVmb3JlIGRlbGV0aW5nIHZpcnRxdWV1ZXMuIFZpcnRpbyBibG9jayBkZXZpY2VzIGFyZSBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIHZpcnR1YWxpemVkIHRlc3QgZW52aXJvbm1lbnRzIGFuZCB0aGlzIHBhdGggaXMgcmVhY2hhYmxlIHZpYSBQQ0kgcmVzZXQgKHZpcnRibGtfcmVzZXRfcHJlcGFyZSkgb3IgcG93ZXIgbWFuYWdlbWVudCBzdXNwZW5kICh2aXJ0YmxrX2ZyZWV6ZSkuIFNpbmNlIHRoZSBwYXRjaCBtb2RpZmllcyByZWFjaGFibGUgZHJpdmVyIGxvZ2ljIG9uIGEgdmlydHVhbCBidXMsIGl0IGlzIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZWE2MWM1NzdlMTM3MWEwNmRjMzkwYTNjYTZiMzIxZjA1YTY3NDIzNFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgU2VwIDEyIDA5OjA4OjA1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmMgYi9kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuY1xuaW5kZXggMzJiZjNiYTA3YTlkYy4uN2E1NzA1OTFlMDQwYSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jXG4rKysgYi9kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuY1xuQEAgLTE1OTUsNyArMTU5NSw3IEBAIHN0YXRpYyBpbnQgdmlydGJsa19mcmVlemVfcHJpdihzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldilcbiBcbiBcdC8qIEVuc3VyZSBubyByZXF1ZXN0cyBpbiB2aXJ0cXVldWVzIGJlZm9yZSBkZWxldGluZyB2cXMuICovXG4gXHRtZW1mbGFncyA9IGJsa19tcV9mcmVlemVfcXVldWUocSk7XG4tXHRibGtfbXFfcXVpZXNjZV9xdWV1ZV9ub3dhaXQocSk7XG4rXHRibGtfbXFfcXVpZXNjZV9xdWV1ZShxKTtcbiBcdGJsa19tcV91bmZyZWV6ZV9xdWV1ZShxLCBtZW1mbGFncyk7XG4gXG4gXHQvKiBFbnN1cmUgd2UgZG9uJ3QgcmVjZWl2ZSBhbnkgbW9yZSBpbnRlcnJ1cHRzICovXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwOTowODowNi40NTcyMDQ2NzNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo3ODI5MDg5MDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFZpcnRpbyBCbG9jayBEZXZpY2UgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlLCBwYXJ0aWN1bGFybHkgd2l0aGluIHRoZSBgdmlydGlvX2Jsay5jYCBkcml2ZXIuICBUaGUgY29udGV4dCB0ZWxscyBtZSB0aGlzIGlzIHJlbGF0ZWQgdG8gZnJlZXppbmcgYW5kIHVuZnJlZXppbmcgdGhlIGJsb2NrIHF1ZXVlLCBsaWtlbHkgZm9yIHN1c3BlbmQvcmVzdW1lIG9yIGhvdHBsdWcgb3BlcmF0aW9ucy4gIFNwZWNpZmljYWxseSwgaXQgc2VlbXMgdG8gbW9kaWZ5IHRoZSBiZWhhdmlvciBhcm91bmQgcXVpZXNjaW5nIHRoZSBxdWV1ZSBkdXJpbmcgdGhlIGB2aXJ0YmxrX2ZyZWV6ZV9wcml2YCBmdW5jdGlvbi4gIFRoZSBkaWZmIHNob3dzIGEgY2hhbmdlIGZyb20gYGJsa19tcV9xdWllc2NlX3F1ZXVlX25vd2FpdGAgdG8gYGJsa19tcV9xdWllc2NlX3F1ZXVlYC4gSW50ZXJlc3RpbmcuIEkga25vdyBib3RoIG9mIHRob3NlIGZ1bmN0aW9ucywgc28gSSBhbHJlYWR5IGhhdmUgc29tZSBpZGVhcyBvbiB0aGUgaW1wYWN0LiBUaGUgYG5vd2FpdGAgdmVyc2lvbiBpcyBhc3luY2hyb25vdXM7IHRoaXMgbWlnaHQgYmUgYSBzdWJ0bGUgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uIGJlaW5nIHRyYWRlZCBmb3IgZ3VhcmFudGVlZCBjb21wbGV0aW9uIGJlZm9yZSBjb250aW51aW5nLiBMZXQgbWUgaW5zcGVjdCB0aGUgYXJlYSBhcm91bmQgbGluZSAxNTk1IGluIHRoZSBzb3VyY2UgY29kZSB1c2luZyBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgdG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB0aGlzIGNoYW5nZSB3YXMgbWFkZSBhbmQgdGhlIHBvdGVudGlhbCBpbXBhY3Qgb24gcmVxdWVzdCBjb21wbGV0aW9uIHRpbWluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg4OSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5MiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDA5OjA4OjE0LjI4NjI5NTg3M1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNDk0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNTg1LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNTg1OlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2dmJsay1cXHUwMDNldmRldl9tdXRleCk7XFxuMTU4NjpcXHRcXG4xNTg3OlxcdFxcdHB1dF9kaXNrKHZibGstXFx1MDAzZWRpc2spO1xcbjE1ODg6XFx0fVxcbjE1ODk6XFx0XFxuMTU5MDpcXHRzdGF0aWMgaW50IHZpcnRibGtfZnJlZXplX3ByaXYoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpXFxuMTU5MTpcXHR7XFxuMTU5MjpcXHRcXHRzdHJ1Y3QgdmlydGlvX2JsayAqdmJsayA9IHZkZXYtXFx1MDAzZXByaXY7XFxuMTU5MzpcXHRcXHRzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSA9IHZibGstXFx1MDAzZWRpc2stXFx1MDAzZXF1ZXVlO1xcbjE1OTQ6XFx0XFx0dW5zaWduZWQgaW50IG1lbWZsYWdzO1xcbjE1OTU6XFx0XFxuMTU5NjpcXHRcXHQvKiBFbnN1cmUgbm8gcmVxdWVzdHMgaW4gdmlydHF1ZXVlcyBiZWZvcmUgZGVsZXRpbmcgdnFzLiAqL1xcbjE1OTc6XFx0XFx0bWVtZmxhZ3MgPSBibGtfbXFfZnJlZXplX3F1ZXVlKHEpO1xcbjE1OTg6XFx0XFx0YmxrX21xX3F1aWVzY2VfcXVldWUocSk7XFxuMTU5OTpcXHRcXHRibGtfbXFfdW5mcmVlemVfcXVldWUocSwgbWVtZmxhZ3MpO1xcbjE2MDA6XFx0XFxuMTYwMTpcXHRcXHQvKiBFbnN1cmUgd2UgZG9uJ3QgcmVjZWl2ZSBhbnkgbW9yZSBpbnRlcnJ1cHRzICovXFxuMTYwMjpcXHRcXHR2aXJ0aW9fcmVzZXRfZGV2aWNlKHZkZXYpO1xcbjE2MDM6XFx0XFxuMTYwNDpcXHRcXHQvKiBNYWtlIHN1cmUgbm8gd29yayBoYW5kbGVyIGlzIGFjY2Vzc2luZyB0aGUgZGV2aWNlLiAqL1xcbjE2MDU6XFx0XFx0Zmx1c2hfd29yayhcXHUwMDI2dmJsay1cXHUwMDNlY29uZmlnX3dvcmspO1xcbjE2MDY6XFx0XFxuMTYwNzpcXHRcXHR2ZGV2LVxcdTAwM2Vjb25maWctXFx1MDAzZWRlbF92cXModmRldik7XFxuMTYwODpcXHRcXHRrZnJlZSh2YmxrLVxcdTAwM2V2cXMpO1xcbjE2MDk6XFx0XFx0LypcXG4xNjEwOlxcdFxcdCAqIFNldCB0byBOVUxMIHRvIHByZXZlbnQgZnJlZWluZyB2cXMgYWdhaW4gYWZ0ZXIgYSBmYWlsZWQgdnFzXFxuMTYxMTpcXHRcXHQgKiBhbGxvY2F0aW9uIGR1cmluZyByZXN1bWUuIE5vdGUgdGhhdCBrZnJlZSgpIGFscmVhZHkgaGFuZGxlcyBOVUxMXFxuMTYxMjpcXHRcXHQgKiBwb2ludGVycyBzYWZlbHkuXFxuMTYxMzpcXHRcXHQgKi9cXG4xNjE0OlxcdFxcdHZibGstXFx1MDAzZXZxcyA9IE5VTEw7XFxuMTYxNTpcXHRcXG4xNjE2OlxcdFxcdHJldHVybiAwO1xcbjE2MTc6XFx0fVxcbjE2MTg6XFx0XFxuMTYxOTpcXHRzdGF0aWMgaW50IHZpcnRibGtfcmVzdG9yZV9wcml2KHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KVxcbjE2MjA6XFx0e1xcbjE2MjE6XFx0XFx0c3RydWN0IHZpcnRpb19ibGsgKnZibGsgPSB2ZGV2LVxcdTAwM2Vwcml2O1xcbjE2MjI6XFx0XFx0aW50IHJldDtcXG4xNjIzOlxcdFxcbjE2MjQ6XFx0XFx0cmV0ID0gaW5pdF92cSh2ZGV2LVxcdTAwM2Vwcml2KTtcXG4xNjI1OlxcdFxcdGlmIChyZXQpXFxuMTYyNjpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjE2Mjc6XFx0XFxuMTYyODpcXHRcXHR2aXJ0aW9fZGV2aWNlX3JlYWR5KHZkZXYpO1xcbjE2Mjk6XFx0XFx0YmxrX21xX3VucXVpZXNjZV9xdWV1ZSh2YmxrLVxcdTAwM2VkaXNrLVxcdTAwM2VxdWV1ZSk7XFxuMTYzMDpcXHRcXG4xNjMxOlxcdFxcdHJldHVybiAwO1xcbjE2MzI6XFx0fVxcbjE2MzM6XFx0XFxuMTYzNDpcXHQjaWZkZWYgQ09ORklHX1BNX1NMRUVQXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDA5OjA4OjE0LjI4NjQwMzU2M1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjMwMDYwMjA0MTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBgdmlydGJsa19mcmVlemVfcHJpdmAgaW4gYHZpcnRpb19ibGsuY2AqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgdXNhZ2Ugb2YgYHZpcnRibGtfZnJlZXplX3ByaXZgLiBMZXQncyBnZXQgcmlnaHQgdG8gaXQuIEknbSBnb2luZyB0byBqdW1wIGludG8gYHZpcnRpb19ibGsuY2AgYW5kIHRha2UgYSBsb29rIGF0IHdoZXJlIHRoYXQgZnVuY3Rpb24gaXMgYWN0dWFsbHkgYmVpbmcgKnVzZWQqLiBTcGVjaWZpY2FsbHksIEknbSBnb2luZyB0byBmb2N1cyBvbiBsaW5lcyAxNjMwIHRocm91Z2ggMTcwMC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgY29udGV4dCB3aW5kb3cgdG8gc2VlIGhvdyBpdCdzIGJlaW5nIGNhbGxlZCBhbmQgd2hhdCBzdXJyb3VuZGluZyBsb2dpYyBpcyBpbiBwbGF5LiBIb3BlZnVsbHksIHRoYXQgZ2l2ZXMgbWUgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyByb2xlIHdpdGhpbiB0aGUgYmxvY2sgZGV2aWNlIGRyaXZlci5cblxuXG4iLCJJbnB1dFRva2VucyI6NDE0NiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDk6MDg6MTcuMjkyNDI2MTk1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUyMjAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE2MzQsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE2MzQ6XFx0I2lmZGVmIENPTkZJR19QTV9TTEVFUFxcbjE2MzU6XFx0c3RhdGljIGludCB2aXJ0YmxrX2ZyZWV6ZShzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldilcXG4xNjM2OlxcdHtcXG4xNjM3OlxcdFxcdHJldHVybiB2aXJ0YmxrX2ZyZWV6ZV9wcml2KHZkZXYpO1xcbjE2Mzg6XFx0fVxcbjE2Mzk6XFx0XFxuMTY0MDpcXHRzdGF0aWMgaW50IHZpcnRibGtfcmVzdG9yZShzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldilcXG4xNjQxOlxcdHtcXG4xNjQyOlxcdFxcdHJldHVybiB2aXJ0YmxrX3Jlc3RvcmVfcHJpdih2ZGV2KTtcXG4xNjQzOlxcdH1cXG4xNjQ0OlxcdCNlbmRpZlxcbjE2NDU6XFx0XFxuMTY0NjpcXHRzdGF0aWMgaW50IHZpcnRibGtfcmVzZXRfcHJlcGFyZShzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldilcXG4xNjQ3OlxcdHtcXG4xNjQ4OlxcdFxcdHJldHVybiB2aXJ0YmxrX2ZyZWV6ZV9wcml2KHZkZXYpO1xcbjE2NDk6XFx0fVxcbjE2NTA6XFx0XFxuMTY1MTpcXHRzdGF0aWMgaW50IHZpcnRibGtfcmVzZXRfZG9uZShzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldilcXG4xNjUyOlxcdHtcXG4xNjUzOlxcdFxcdHJldHVybiB2aXJ0YmxrX3Jlc3RvcmVfcHJpdih2ZGV2KTtcXG4xNjU0OlxcdH1cXG4xNjU1OlxcdFxcbjE2NTY6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCB2aXJ0aW9fZGV2aWNlX2lkIGlkX3RhYmxlW10gPSB7XFxuMTY1NzpcXHRcXHR7IFZJUlRJT19JRF9CTE9DSywgVklSVElPX0RFVl9BTllfSUQgfSxcXG4xNjU4OlxcdFxcdHsgMCB9LFxcbjE2NTk6XFx0fTtcXG4xNjYwOlxcdFxcbjE2NjE6XFx0c3RhdGljIHVuc2lnbmVkIGludCBmZWF0dXJlc19sZWdhY3lbXSA9IHtcXG4xNjYyOlxcdFxcdFZJUlRJT19CTEtfRl9TRUdfTUFYLCBWSVJUSU9fQkxLX0ZfU0laRV9NQVgsIFZJUlRJT19CTEtfRl9HRU9NRVRSWSxcXG4xNjYzOlxcdFxcdFZJUlRJT19CTEtfRl9STywgVklSVElPX0JMS19GX0JMS19TSVpFLFxcbjE2NjQ6XFx0XFx0VklSVElPX0JMS19GX0ZMVVNILCBWSVJUSU9fQkxLX0ZfVE9QT0xPR1ksIFZJUlRJT19CTEtfRl9DT05GSUdfV0NFLFxcbjE2NjU6XFx0XFx0VklSVElPX0JMS19GX01RLCBWSVJUSU9fQkxLX0ZfRElTQ0FSRCwgVklSVElPX0JMS19GX1dSSVRFX1pFUk9FUyxcXG4xNjY2OlxcdFxcdFZJUlRJT19CTEtfRl9TRUNVUkVfRVJBU0UsXFxuMTY2NzpcXHR9XFxuMTY2ODpcXHQ7XFxuMTY2OTpcXHRzdGF0aWMgdW5zaWduZWQgaW50IGZlYXR1cmVzW10gPSB7XFxuMTY3MDpcXHRcXHRWSVJUSU9fQkxLX0ZfU0VHX01BWCwgVklSVElPX0JMS19GX1NJWkVfTUFYLCBWSVJUSU9fQkxLX0ZfR0VPTUVUUlksXFxuMTY3MTpcXHRcXHRWSVJUSU9fQkxLX0ZfUk8sIFZJUlRJT19CTEtfRl9CTEtfU0laRSxcXG4xNjcyOlxcdFxcdFZJUlRJT19CTEtfRl9GTFVTSCwgVklSVElPX0JMS19GX1RPUE9MT0dZLCBWSVJUSU9fQkxLX0ZfQ09ORklHX1dDRSxcXG4xNjczOlxcdFxcdFZJUlRJT19CTEtfRl9NUSwgVklSVElPX0JMS19GX0RJU0NBUkQsIFZJUlRJT19CTEtfRl9XUklURV9aRVJPRVMsXFxuMTY3NDpcXHRcXHRWSVJUSU9fQkxLX0ZfU0VDVVJFX0VSQVNFLCBWSVJUSU9fQkxLX0ZfWk9ORUQsXFxuMTY3NTpcXHR9O1xcbjE2NzY6XFx0XFxuMTY3NzpcXHRzdGF0aWMgc3RydWN0IHZpcnRpb19kcml2ZXIgdmlydGlvX2JsayA9IHtcXG4xNjc4OlxcdFxcdC5mZWF0dXJlX3RhYmxlXFx0XFx0XFx0PSBmZWF0dXJlcyxcXG4xNjc5OlxcdFxcdC5mZWF0dXJlX3RhYmxlX3NpemVcXHRcXHQ9IEFSUkFZX1NJWkUoZmVhdHVyZXMpLFxcbjE2ODA6XFx0XFx0LmZlYXR1cmVfdGFibGVfbGVnYWN5XFx0XFx0PSBmZWF0dXJlc19sZWdhY3ksXFxuMTY4MTpcXHRcXHQuZmVhdHVyZV90YWJsZV9zaXplX2xlZ2FjeVxcdD0gQVJSQVlfU0laRShmZWF0dXJlc19sZWdhY3kpLFxcbjE2ODI6XFx0XFx0LmRyaXZlci5uYW1lXFx0XFx0XFx0PSBLQlVJTERfTU9ETkFNRSxcXG4xNjgzOlxcdFxcdC5pZF90YWJsZVxcdFxcdFxcdD0gaWRfdGFibGUsXFxuMTY4NDpcXHRcXHQucHJvYmVcXHRcXHRcXHRcXHQ9IHZpcnRibGtfcHJvYmUsXFxuMTY4NTpcXHRcXHQucmVtb3ZlXFx0XFx0XFx0XFx0PSB2aXJ0YmxrX3JlbW92ZSxcXG4xNjg2OlxcdFxcdC5jb25maWdfY2hhbmdlZFxcdFxcdFxcdD0gdmlydGJsa19jb25maWdfY2hhbmdlZCxcXG4xNjg3OlxcdCNpZmRlZiBDT05GSUdfUE1fU0xFRVBcXG4xNjg4OlxcdFxcdC5mcmVlemVcXHRcXHRcXHRcXHQ9IHZpcnRibGtfZnJlZXplLFxcbjE2ODk6XFx0XFx0LnJlc3RvcmVcXHRcXHRcXHQ9IHZpcnRibGtfcmVzdG9yZSxcXG4xNjkwOlxcdCNlbmRpZlxcbjE2OTE6XFx0XFx0LnJlc2V0X3ByZXBhcmVcXHRcXHRcXHQ9IHZpcnRibGtfcmVzZXRfcHJlcGFyZSxcXG4xNjkyOlxcdFxcdC5yZXNldF9kb25lXFx0XFx0XFx0PSB2aXJ0YmxrX3Jlc2V0X2RvbmUsXFxuMTY5MzpcXHR9O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwOTowODoxNy4yOTI1ODE0NTVaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMTA3NDE5NzAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdW5kZXJzdGFuZGluZyBgdmlydGJsa19mcmVlemVfcHJpdmAgYW5kIGl0cyBpbnRlcmFjdGlvbnMgd2l0aGluIHRoZSB2aXJ0aW8gc3Vic3lzdGVtOlxuXG4qKkRlY29uc3RydWN0aW5nIHZpcnRibGtfZnJlZXplX3ByaXYgYW5kIEl0cyBSb2xlKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB3aGF0IHRoaXMgYHZpcnRibGtfZnJlZXplX3ByaXZgIGZ1bmN0aW9uIGFjdHVhbGx5ICpkb2VzKi4gTXkgZmlyc3QgbW92ZSBpcyB0byB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlIGFuZCBiZWhhdmlvci4gVGhlbiwgSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgaXQncyBiZWluZyBjYWxsZWQuIEknbGwgbmVlZCB0byB0cmFjZSBpdHMgY29ubmVjdGlvbnMgd2l0aGluIHRoZSB2aXJ0aW8gc3Vic3lzdGVtLiBJ4oCZbGwgc3RhcnQgYnkgaW52ZXN0aWdhdGluZyB0aGUgY2FsbHNpdGVzIG9mIGAuZnJlZXplYCwgYC5yZXNldF9wcmVwYXJlYCwgYW5kIHNpbWlsYXIgcmVsYXRlZCBmdW5jdGlvbnMuIEZvciB0aGF0LCBJJ20gZGVmaW5pdGVseSByZWFjaGluZyBmb3IgYGdyZXBwZXJgIOKAkyB0aGF0J3MgdGhlIGZhc3Rlc3Qgd2F5IHRvIGdldCBhIHNvbGlkIGxpc3Qgb2YgcG90ZW50aWFsIGNhbGwgcGF0aHMuIEknbGwgbmVlZCB0byBnZXQgYSBoaWdoLWxldmVsIHZpZXcgb2YgaG93IHRoaXMgZnJlZXplL3Jlc2V0IGZ1bmN0aW9uYWxpdHkgZml0cyBpbnRvIHRoZSBiaWdnZXIgcGljdHVyZSBvZiBibG9jayBkZXZpY2Ugb3BlcmF0aW9uIHdpdGhpbiB2aXJ0aW8uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0NjMsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDA5OjA4OjE5LjQwMDAwNDEwN1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTgwNTkyOTc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlxcXFxicmVzZXRfcHJlcGFyZVxcXFxiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYWNjZWwvaGFiYW5hbGFicy9jb21tb24vaGFiYW5hbGFic19kcnYuYz03MTQ9c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZXJyb3JfaGFuZGxlcnMgaGxfcGNpX2Vycl9oYW5kbGVyID0ge1xcbi0tXFxuZHJpdmVycy9hY2NlbC9oYWJhbmFsYWJzL2NvbW1vbi9oYWJhbmFsYWJzX2Rydi5jLTcxNy1cXHQucmVzdW1lID0gaGxfcGNpX2Vycl9yZXN1bWUsXFxuZHJpdmVycy9hY2NlbC9oYWJhbmFsYWJzL2NvbW1vbi9oYWJhbmFsYWJzX2Rydi5jOjcxODpcXHQucmVzZXRfcHJlcGFyZSA9IGhsX3BjaV9yZXNldF9wcmVwYXJlLFxcbmRyaXZlcnMvYWNjZWwvaGFiYW5hbGFicy9jb21tb24vaGFiYW5hbGFic19kcnYuYy03MTktXFx0LnJlc2V0X2RvbmUgPSBobF9wY2lfcmVzZXRfZG9uZSxcXG4tLVxcbmRyaXZlcnMvYWNjZWwvaXZwdS9pdnB1X2Rydi5jPTg5Mj1zdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9lcnJvcl9oYW5kbGVycyBpdnB1X2Rydl9wY2lfZXJyID0ge1xcbmRyaXZlcnMvYWNjZWwvaXZwdS9pdnB1X2Rydi5jOjg5MzpcXHQucmVzZXRfcHJlcGFyZSA9IGl2cHVfcG1fcmVzZXRfcHJlcGFyZV9jYixcXG5kcml2ZXJzL2FjY2VsL2l2cHUvaXZwdV9kcnYuYy04OTQtXFx0LnJlc2V0X2RvbmUgPSBpdnB1X3BtX3Jlc2V0X2RvbmVfY2IsXFxuLS1cXG5kcml2ZXJzL2FjY2VsL3FhaWMvcWFpY19kcnYuYz02NzI9c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZXJyb3JfaGFuZGxlcnMgcWFpY19wY2lfZXJyX2hhbmRsZXIgPSB7XFxuZHJpdmVycy9hY2NlbC9xYWljL3FhaWNfZHJ2LmMtNjczLVxcdC5lcnJvcl9kZXRlY3RlZCA9IHFhaWNfcGNpX2Vycm9yX2RldGVjdGVkLFxcbmRyaXZlcnMvYWNjZWwvcWFpYy9xYWljX2Rydi5jOjY3NDpcXHQucmVzZXRfcHJlcGFyZSA9IHFhaWNfcGNpX3Jlc2V0X3ByZXBhcmUsXFxuZHJpdmVycy9hY2NlbC9xYWljL3FhaWNfZHJ2LmMtNjc1LVxcdC5yZXNldF9kb25lID0gcWFpY19wY2lfcmVzZXRfZG9uZSxcXG4tLVxcbmRyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jPTE2Nzc9c3RhdGljIHN0cnVjdCB2aXJ0aW9fZHJpdmVyIHZpcnRpb19ibGsgPSB7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYy0xNjkwLSNlbmRpZlxcbmRyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jOjE2OTE6XFx0LnJlc2V0X3ByZXBhcmVcXHRcXHRcXHQ9IHZpcnRibGtfcmVzZXRfcHJlcGFyZSxcXG5kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYy0xNjkyLVxcdC5yZXNldF9kb25lXFx0XFx0XFx0PSB2aXJ0YmxrX3Jlc2V0X2RvbmUsXFxuLS1cXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wY2lfZ2VuZXJpYy5jPTE2MTY9c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZXJyb3JfaGFuZGxlcnMgbWhpX3BjaV9lcnJfaGFuZGxlciA9IHtcXG4tLVxcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BjaV9nZW5lcmljLmMtMTYxOS1cXHQucmVzdW1lID0gbWhpX3BjaV9pb19yZXN1bWUsXFxuZHJpdmVycy9idXMvbWhpL2hvc3QvcGNpX2dlbmVyaWMuYzoxNjIwOlxcdC5yZXNldF9wcmVwYXJlID0gbWhpX3BjaV9yZXNldF9wcmVwYXJlLFxcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BjaV9nZW5lcmljLmMtMTYyMS1cXHQucmVzZXRfZG9uZSA9IG1oaV9wY2lfcmVzZXRfZG9uZSxcXG4tLVxcbmRyaXZlcnMvY2R4L2NkeC5jPTk1PWludCBjZHhfZGV2X3Jlc2V0KHN0cnVjdCBkZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvY2R4L2NkeC5jLTEwNC1cXHQvKiBOb3RpZnkgZHJpdmVyIHRoYXQgZGV2aWNlIGlzIGJlaW5nIHJlc2V0ICovXFxuZHJpdmVycy9jZHgvY2R4LmM6MTA1OlxcdGlmIChjZHhfZHJ2IFxcdTAwMjZcXHUwMDI2IGNkeF9kcnYtXFx1MDAzZXJlc2V0X3ByZXBhcmUpXFxuZHJpdmVycy9jZHgvY2R4LmM6MTA2OlxcdFxcdGNkeF9kcnYtXFx1MDAzZXJlc2V0X3ByZXBhcmUoY2R4X2Rldik7XFxuZHJpdmVycy9jZHgvY2R4LmMtMTA3LVxcbi0tXFxuZHJpdmVycy9jcnlwdG8vaGlzaWxpY29uL2hwcmUvaHByZV9tYWluLmM9MTY4OD1zdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9lcnJvcl9oYW5kbGVycyBocHJlX2Vycl9oYW5kbGVyID0ge1xcbi0tXFxuZHJpdmVycy9jcnlwdG8vaGlzaWxpY29uL2hwcmUvaHByZV9tYWluLmMtMTY5MC1cXHQuc2xvdF9yZXNldFxcdFxcdD0gaGlzaV9xbV9kZXZfc2xvdF9yZXNldCxcXG5kcml2ZXJzL2NyeXB0by9oaXNpbGljb24vaHByZS9ocHJlX21haW4uYzoxNjkxOlxcdC5yZXNldF9wcmVwYXJlXFx0XFx0PSBoaXNpX3FtX3Jlc2V0X3ByZXBhcmUsXFxuZHJpdmVycy9jcnlwdG8vaGlzaWxpY29uL2hwcmUvaHByZV9tYWluLmMtMTY5Mi1cXHQucmVzZXRfZG9uZVxcdFxcdD0gaGlzaV9xbV9yZXNldF9kb25lLFxcbi0tXFxuZHJpdmVycy9jcnlwdG8vaGlzaWxpY29uL3NlYzIvc2VjX21haW4uYz0xNTA2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2Vycm9yX2hhbmRsZXJzIHNlY19lcnJfaGFuZGxlciA9IHtcXG4tLVxcbmRyaXZlcnMvY3J5cHRvL2hpc2lsaWNvbi9zZWMyL3NlY19tYWluLmMtMTUwOC1cXHQuc2xvdF9yZXNldFxcdD0gaGlzaV9xbV9kZXZfc2xvdF9yZXNldCxcXG5kcml2ZXJzL2NyeXB0by9oaXNpbGljb24vc2VjMi9zZWNfbWFpbi5jOjE1MDk6XFx0LnJlc2V0X3ByZXBhcmVcXHQ9IGhpc2lfcW1fcmVzZXRfcHJlcGFyZSxcXG5kcml2ZXJzL2NyeXB0by9oaXNpbGljb24vc2VjMi9zZWNfbWFpbi5jLTE1MTAtXFx0LnJlc2V0X2RvbmVcXHQ9IGhpc2lfcW1fcmVzZXRfZG9uZSxcXG4tLVxcbmRyaXZlcnMvY3J5cHRvL2hpc2lsaWNvbi96aXAvemlwX21haW4uYz0xNjE1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2Vycm9yX2hhbmRsZXJzIGhpc2lfemlwX2Vycl9oYW5kbGVyID0ge1xcbi0tXFxuZHJpdmVycy9jcnlwdG8vaGlzaWxpY29uL3ppcC96aXBfbWFpbi5jLTE2MTctXFx0LnNsb3RfcmVzZXRcXHQ9IGhpc2lfcW1fZGV2X3Nsb3RfcmVzZXQsXFxuZHJpdmVycy9jcnlwdG8vaGlzaWxpY29uL3ppcC96aXBfbWFpbi5jOjE2MTg6XFx0LnJlc2V0X3ByZXBhcmVcXHQ9IGhpc2lfcW1fcmVzZXRfcHJlcGFyZSxcXG5kcml2ZXJzL2NyeXB0by9oaXNpbGljb24vemlwL3ppcF9tYWluLmMtMTYxOS1cXHQucmVzZXRfZG9uZVxcdD0gaGlzaV9xbV9yZXNldF9kb25lLFxcbi0tXFxuZHJpdmVycy9jcnlwdG8vaW50ZWwvcWF0L3FhdF9jb21tb24vYWRmX2Flci5jPTE4PXN0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqZGV2aWNlX3NyaW92X3dxO1xcbmRyaXZlcnMvY3J5cHRvL2ludGVsL3FhdC9xYXRfY29tbW9uL2FkZl9hZXIuYy0xOS1cXG5kcml2ZXJzL2NyeXB0by9pbnRlbC9xYXQvcWF0X2NvbW1vbi9hZGZfYWVyLmM6MjA6c3RhdGljIHBjaV9lcnNfcmVzdWx0X3QgcmVzZXRfcHJlcGFyZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG5kcml2ZXJzL2NyeXB0by9pbnRlbC9xYXQvcWF0X2NvbW1vbi9hZGZfYWVyLmMtMjEte1xcbi0tXFxuZHJpdmVycy9jcnlwdG8vaW50ZWwvcWF0L3FhdF9jb21tb24vYWRmX2Flci5jPTcyPXN0YXRpYyBwY2lfZXJzX3Jlc3VsdF90IGFkZl9lcnJvcl9kZXRlY3RlZChzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG4tLVxcbmRyaXZlcnMvY3J5cHRvL2ludGVsL3FhdC9xYXRfY29tbW9uL2FkZl9hZXIuYy05MC1cXG5kcml2ZXJzL2NyeXB0by9pbnRlbC9xYXQvcWF0X2NvbW1vbi9hZGZfYWVyLmM6OTE6XFx0cmV0dXJuIHJlc2V0X3ByZXBhcmUocGRldik7XFxuZHJpdmVycy9jcnlwdG8vaW50ZWwvcWF0L3FhdF9jb21tb24vYWRmX2Flci5jLTkyLX1cXG4tLVxcbmRyaXZlcnMvY3J5cHRvL2ludGVsL3FhdC9xYXRfY29tbW9uL2FkZl9hZXIuYz0yNTU9c3RhdGljIHZvaWQgYWRmX3Jlc2V0X3ByZXBhcmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuZHJpdmVycy9jcnlwdG8vaW50ZWwvcWF0L3FhdF9jb21tb24vYWRmX2Flci5jLTI1Ni17XFxuZHJpdmVycy9jcnlwdG8vaW50ZWwvcWF0L3FhdF9jb21tb24vYWRmX2Flci5jOjI1NzpcXHRyZXNldF9wcmVwYXJlKHBkZXYpO1xcbmRyaXZlcnMvY3J5cHRvL2ludGVsL3FhdC9xYXRfY29tbW9uL2FkZl9hZXIuYy0yNTgtfVxcbi0tXFxuZHJpdmVycy9jcnlwdG8vaW50ZWwvcWF0L3FhdF9jb21tb24vYWRmX2Flci5jPTI2NT1jb25zdCBzdHJ1Y3QgcGNpX2Vycm9yX2hhbmRsZXJzIGFkZl9lcnJfaGFuZGxlciA9IHtcXG4tLVxcbmRyaXZlcnMvY3J5cHRvL2ludGVsL3FhdC9xYXRfY29tbW9uL2FkZl9hZXIuYy0yNjgtXFx0LnJlc3VtZSA9IGFkZl9yZXN1bWUsXFxuZHJpdmVycy9jcnlwdG8vaW50ZWwvcWF0L3FhdF9jb21tb24vYWRmX2Flci5jOjI2OTpcXHQucmVzZXRfcHJlcGFyZSA9IGFkZl9yZXNldF9wcmVwYXJlLFxcbmRyaXZlcnMvY3J5cHRvL2ludGVsL3FhdC9xYXRfY29tbW9uL2FkZl9hZXIuYy0yNzAtXFx0LnJlc2V0X2RvbmUgPSBhZGZfcmVzZXRfZG9uZSxcXG4tLVxcbmRyaXZlcnMvZG1hL2lkeGQvaW5pdC5jPTExMjY9c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZXJyb3JfaGFuZGxlcnMgaWR4ZF9lcnJvcl9oYW5kbGVyID0ge1xcbmRyaXZlcnMvZG1hL2lkeGQvaW5pdC5jOjExMjc6XFx0LnJlc2V0X3ByZXBhcmVcXHQ9IGlkeGRfcmVzZXRfcHJlcGFyZSxcXG5kcml2ZXJzL2RtYS9pZHhkL2luaXQuYy0xMTI4LVxcdC5yZXNldF9kb25lXFx0PSBpZHhkX3Jlc2V0X2RvbmUsXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9yZXNldC5jPTg0ND1zdGF0aWMgdm9pZCByZXZva2VfbW1hcHMoc3RydWN0IGludGVsX2d0ICpndClcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX3Jlc2V0LmMtODc0LVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX3Jlc2V0LmM6ODc1OnN0YXRpYyBpbnRlbF9lbmdpbmVfbWFza190IHJlc2V0X3ByZXBhcmUoc3RydWN0IGludGVsX2d0ICpndClcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9yZXNldC5jLTg3Ni17XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9yZXNldC5jLTg4NS1cXHQgKiBGb3IgR3VDIG1vZGUgd2l0aCBzdWJtaXNzaW9uIGRpc2FibGVkLCBlbnN1cmUgdGhhdCBHdUMgaXMgbm90XFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfcmVzZXQuYzo4ODY6XFx0ICogc2FuaXRpemVkLCBkbyB0aGF0IGFmdGVyIGVuZ2luZSByZXNldC4gcmVzZXRfcHJlcGFyZSgpXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfcmVzZXQuYy04ODctXFx0ICogaXMgZm9sbG93ZWQgYnkgZW5naW5lIHJlc2V0IHdoaWNoIGluIHRoaXMgbW9kZSByZXF1aXJlcyBHdUMgdG9cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX3Jlc2V0LmM9OTY5PXN0YXRpYyB2b2lkIF9faW50ZWxfZ3Rfc2V0X3dlZGdlZChzdHJ1Y3QgaW50ZWxfZ3QgKmd0KVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfcmVzZXQuYy05ODUtXFx0ICovXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfcmVzZXQuYzo5ODY6XFx0YXdha2UgPSByZXNldF9wcmVwYXJlKGd0KTtcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9yZXNldC5jLTk4Ny1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX3Jlc2V0LmM9MTIwNT12b2lkIGludGVsX2d0X3Jlc2V0KHN0cnVjdCBpbnRlbF9ndCAqZ3QsXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9yZXNldC5jLTEyMzMtXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfcmVzZXQuYzoxMjM0OlxcdGF3YWtlID0gcmVzZXRfcHJlcGFyZShndCk7XFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfcmVzZXQuYy0xMjM1LVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfcmluZ19zdWJtaXNzaW9uLmM9MzE0PXN0YXRpYyB2b2lkIHhjc19zYW5pdGl6ZShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9yaW5nX3N1Ym1pc3Npb24uYy0zNDAtXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfcmluZ19zdWJtaXNzaW9uLmM6MzQxOnN0YXRpYyB2b2lkIHJlc2V0X3ByZXBhcmUoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX3Jpbmdfc3VibWlzc2lvbi5jLTM0Mi17XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9yaW5nX3N1Ym1pc3Npb24uYz0xMTU0PXN0YXRpYyB2b2lkIHNldHVwX2NvbW1vbihzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9yaW5nX3N1Ym1pc3Npb24uYy0xMTY1LVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX3Jpbmdfc3VibWlzc2lvbi5jOjExNjY6XFx0ZW5naW5lLVxcdTAwM2VyZXNldC5wcmVwYXJlID0gcmVzZXRfcHJlcGFyZTtcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9yaW5nX3N1Ym1pc3Npb24uYy0xMTY3LVxcdGVuZ2luZS1cXHUwMDNlcmVzZXQucmV3aW5kID0gcmVzZXRfcmV3aW5kO1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qvc2VsZnRlc3RfcmVzZXQuYz0yNjA9c3RhdGljIGludCBpZ3RfYXRvbWljX3Jlc2V0KHZvaWQgKmFyZylcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X3Jlc2V0LmMtMjgwLVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X3Jlc2V0LmM6MjgxOlxcdFxcdGF3YWtlID0gcmVzZXRfcHJlcGFyZShndCk7XFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qvc2VsZnRlc3RfcmVzZXQuYy0yODItXFx0XFx0cC1cXHUwMDNlY3JpdGljYWxfc2VjdGlvbl9iZWdpbigpO1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjX3N1Ym1pc3Npb24uYz0xMDc3PXN0YXRpYyB2b2lkIHNjcnViX2d1Y19kZXNjX2Zvcl9vdXRzdGFuZGluZ19nMmgoc3RydWN0IGludGVsX2d1YyAqZ3VjKVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjX3N1Ym1pc3Npb24uYy0xMTA0LVxcdFxcdCAqIHRvIGJlIHZpc2libGUgdG8gYWxsIGNhbGxlcnMgd2hvIHNldCB0aGUgYmVsb3cgZmxhZ3MgKHNlZSBhYm92ZVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Y19zdWJtaXNzaW9uLmM6MTEwNTpcXHRcXHQgKiBmbHVzaCBhbmQgZmx1c2hlcyBpbiByZXNldF9wcmVwYXJlKS4gSWYgc3VibWlzc2lvbl9kaXNhYmxlZCgpXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjX3N1Ym1pc3Npb24uYy0xMTA2LVxcdFxcdCAqIGlzIHNldCwgdGhlIGNhbGxlciBzaG91bGRuJ3Qgc2V0IHRoZXNlIGZsYWdzLlxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjX3N1Ym1pc3Npb24uYz0xMzkxPXN0YXRpYyB2b2lkIGd1Y19jYW5jZWxfYnVzeW5lc3Nfd29ya2VyKHN0cnVjdCBpbnRlbF9ndWMgKmd1YylcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Y19zdWJtaXNzaW9uLmMtMTQyNS1cXHQgKiBBbmQgbm90ZSB0aGF0IGluIHRoZSBjYXNlIG9mIGEgcmVzZXQgb2NjdXJyaW5nIGR1cmluZyBkcml2ZXIgdW5sb2FkXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjX3N1Ym1pc3Npb24uYzoxNDI2OlxcdCAqICh3ZWRnZWRfb25fZmluaSksIHNraXBwaW5nIHRoZSBjYW5jZWwgaW4gcmVzZXRfcHJlcGFyZS9yZXNldF9maW5pICh3aGVuIHRoZVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Y19zdWJtaXNzaW9uLmMtMTQyNy1cXHQgKiByZXNldCBmbGFnL211dGV4IGFyZSBzZXQpIGlzIGZpbmUgYmVjYXVzZSB0aGVyZSBpcyBhbm90aGVyIGV4cGxpY2l0IGNhbmNlbCBpblxcbi0tXFxuZHJpdmVycy9tZWRpYS9wY2kvaW50ZWwvaXB1Ni9pcHU2LmM9ODE2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2Vycm9yX2hhbmRsZXJzIHBjaV9lcnJfaGFuZGxlcnMgPSB7XFxuZHJpdmVycy9tZWRpYS9wY2kvaW50ZWwvaXB1Ni9pcHU2LmM6ODE3OlxcdC5yZXNldF9wcmVwYXJlID0gaXB1Nl9wY2lfcmVzZXRfcHJlcGFyZSxcXG5kcml2ZXJzL21lZGlhL3BjaS9pbnRlbC9pcHU2L2lwdTYuYy04MTgtXFx0LnJlc2V0X2RvbmUgPSBpcHU2X3BjaV9yZXNldF9kb25lLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL21haW4uYz01OTA9c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZXJyb3JfaGFuZGxlcnMgcGRzY19lcnJfaGFuZGxlciA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvbWFpbi5jLTU5MS1cXHQvKiBGTFIgaGFuZGxpbmcgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvbWFpbi5jOjU5MjpcXHQucmVzZXRfcHJlcGFyZSAgICAgID0gcGRzY19yZXNldF9wcmVwYXJlLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9tYWluLmMtNTkzLVxcdC5yZXNldF9kb25lICAgICAgICAgPSBwZHNjX3Jlc2V0X2RvbmUsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaGVsc2lvL2N4Z2I0L2N4Z2I0X21haW4uYz01NjE2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2Vycm9yX2hhbmRsZXJzIGN4Z2I0X2VlaCA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjQvY3hnYjRfbWFpbi5jLTU2MTktXFx0LnJlc3VtZSAgICAgICAgID0gZWVoX3Jlc3VtZSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaGVsc2lvL2N4Z2I0L2N4Z2I0X21haW4uYzo1NjIwOlxcdC5yZXNldF9wcmVwYXJlICA9IGVlaF9yZXNldF9wcmVwYXJlLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjQvY3hnYjRfbWFpbi5jLTU2MjEtXFx0LnJlc2V0X2RvbmUgICAgID0gZWVoX3Jlc2V0X2RvbmUsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlibWNnZS9oYmdfZXJyLmM9MTg0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2Vycm9yX2hhbmRsZXJzIGhiZ19wY2lfZXJyX2hhbmRsZXIgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlibWNnZS9oYmdfZXJyLmMtMTg2LVxcdC5zbG90X3Jlc2V0ID0gaGJnX3BjaV9lcnJfc2xvdF9yZXNldCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlibWNnZS9oYmdfZXJyLmM6MTg3OlxcdC5yZXNldF9wcmVwYXJlID0gaGJnX3BjaV9lcnJfcmVzZXRfcHJlcGFyZSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlibWNnZS9oYmdfZXJyLmMtMTg4LVxcdC5yZXNldF9kb25lID0gaGJnX3BjaV9lcnJfcmVzZXRfZG9uZSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huYWUzLmg9NjEwPXN0cnVjdCBobmFlM19hZV9vcHMge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5hZTMuaC02MTItXFx0dm9pZCAoKnVuaW5pdF9hZV9kZXYpKHN0cnVjdCBobmFlM19hZV9kZXYgKmFlX2Rldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5hZTMuaDo2MTM6XFx0dm9pZCAoKnJlc2V0X3ByZXBhcmUpKHN0cnVjdCBobmFlM19hZV9kZXYgKmFlX2RldixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obmFlMy5oLTYxNC1cXHRcXHRcXHQgICAgICBlbnVtIGhuYWUzX3Jlc2V0X3R5cGUgcnN0X3R5cGUpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmM9MzI0Nz1zdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkIGhuczNfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2VuZXQuYy0zMjUyLVxcdFxcdGRldl9pbmZvKGRldiwgXFxcIkJlZ2luIHRvIHN1c3BlbmQuXFxcXG5cXFwiKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2VuZXQuYzozMjUzOlxcdFxcdGlmIChhZV9kZXYtXFx1MDAzZW9wcyBcXHUwMDI2XFx1MDAyNiBhZV9kZXYtXFx1MDAzZW9wcy1cXHUwMDNlcmVzZXRfcHJlcGFyZSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2VuZXQuYzozMjU0OlxcdFxcdFxcdGFlX2Rldi1cXHUwMDNlb3BzLVxcdTAwM2VyZXNldF9wcmVwYXJlKGFlX2RldiwgSE5BRTNfRlVOQ19SRVNFVCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmMtMzI1NS1cXHR9XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2VuZXQuYz0zMzI2PXN0YXRpYyB2b2lkIGhuczNfcmVzZXRfcHJlcGFyZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5jLTMzMzAtXFx0ZGV2X2luZm8oXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgXFxcIkZMUiBwcmVwYXJlXFxcXG5cXFwiKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2VuZXQuYzozMzMxOlxcdGlmIChhZV9kZXYgXFx1MDAyNlxcdTAwMjYgYWVfZGV2LVxcdTAwM2VvcHMgXFx1MDAyNlxcdTAwMjYgYWVfZGV2LVxcdTAwM2VvcHMtXFx1MDAzZXJlc2V0X3ByZXBhcmUpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmM6MzMzMjpcXHRcXHRhZV9kZXYtXFx1MDAzZW9wcy1cXHUwMDNlcmVzZXRfcHJlcGFyZShhZV9kZXYsIEhOQUUzX0ZMUl9SRVNFVCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmMtMzMzMy19XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2VuZXQuYz0zMzQ0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2Vycm9yX2hhbmRsZXJzIGhuczNfZXJyX2hhbmRsZXIgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2VuZXQuYy0zMzQ2LVxcdC5zbG90X3Jlc2V0ICAgICA9IGhuczNfc2xvdF9yZXNldCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2VuZXQuYzozMzQ3OlxcdC5yZXNldF9wcmVwYXJlXFx0PSBobnMzX3Jlc2V0X3ByZXBhcmUsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmMtMzM0OC1cXHQucmVzZXRfZG9uZVxcdD0gaG5zM19yZXNldF9kb25lLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21haW4uYz0xMDYwMD1zdGF0aWMgY29uc3Qgc3RydWN0IGhuYWUzX2FlX29wcyBoY2xnZV9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5jLTEwNjAyLVxcdC51bmluaXRfYWVfZGV2ID0gaGNsZ2VfdW5pbml0X2FlX2RldixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5jOjEwNjAzOlxcdC5yZXNldF9wcmVwYXJlID0gaGNsZ2VfcmVzZXRfcHJlcGFyZV9nZW5lcmFsLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmMtMTA2MDQtXFx0LnJlc2V0X2RvbmUgPSBoY2xnZV9yZXNldF9kb25lLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3ZmL2hjbGdldmZfbWFpbi5jPTMzNDU9c3RhdGljIGNvbnN0IHN0cnVjdCBobmFlM19hZV9vcHMgaGNsZ2V2Zl9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzdmYvaGNsZ2V2Zl9tYWluLmMtMzM0Ny1cXHQudW5pbml0X2FlX2RldiA9IGhjbGdldmZfdW5pbml0X2FlX2RldixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzdmYvaGNsZ2V2Zl9tYWluLmM6MzM0ODpcXHQucmVzZXRfcHJlcGFyZSA9IGhjbGdldmZfcmVzZXRfcHJlcGFyZV9nZW5lcmFsLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczN2Zi9oY2xnZXZmX21haW4uYy0zMzQ5LVxcdC5yZXNldF9kb25lID0gaGNsZ2V2Zl9yZXNldF9kb25lLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZm0xMGsvZm0xMGtfcGNpLmM9MjQ5MT1zdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9lcnJvcl9oYW5kbGVycyBmbTEwa19lcnJfaGFuZGxlciA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ZtMTBrL2ZtMTBrX3BjaS5jLTI0OTQtXFx0LnJlc3VtZSA9IGZtMTBrX2lvX3Jlc3VtZSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9mbTEway9mbTEwa19wY2kuYzoyNDk1OlxcdC5yZXNldF9wcmVwYXJlID0gZm0xMGtfaW9fcmVzZXRfcHJlcGFyZSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9mbTEway9mbTEwa19wY2kuYy0yNDk2LVxcdC5yZXNldF9kb25lID0gZm0xMGtfaW9fcmVzZXRfZG9uZSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9tYWluLmM9MTY2MDQ9c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZXJyb3JfaGFuZGxlcnMgaTQwZV9lcnJfaGFuZGxlciA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9tYWluLmMtMTY2MDYtXFx0LnNsb3RfcmVzZXQgPSBpNDBlX3BjaV9lcnJvcl9zbG90X3Jlc2V0LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9tYWluLmM6MTY2MDc6XFx0LnJlc2V0X3ByZXBhcmUgPSBpNDBlX3BjaV9lcnJvcl9yZXNldF9wcmVwYXJlLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9tYWluLmMtMTY2MDgtXFx0LnJlc2V0X2RvbmUgPSBpNDBlX3BjaV9lcnJvcl9yZXNldF9kb25lLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM9NTg0MT1zdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9lcnJvcl9oYW5kbGVycyBpY2VfcGNpX2Vycl9oYW5kbGVyID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNTg0My1cXHQuc2xvdF9yZXNldCA9IGljZV9wY2lfZXJyX3Nsb3RfcmVzZXQsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM6NTg0NDpcXHQucmVzZXRfcHJlcGFyZSA9IGljZV9wY2lfZXJyX3Jlc2V0X3ByZXBhcmUsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNTg0NS1cXHQucmVzZXRfZG9uZSA9IGljZV9wY2lfZXJyX3Jlc2V0X2RvbmUsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2J2Zi9uZXRkZXYuYz0yOTI5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2Vycm9yX2hhbmRsZXJzIGlnYnZmX2Vycl9oYW5kbGVyID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdidmYvbmV0ZGV2LmMtMjkzMi1cXHQucmVzdW1lID0gaWdidmZfaW9fcmVzdW1lLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYnZmL25ldGRldi5jOjI5MzM6XFx0LnJlc2V0X3ByZXBhcmUgPSBpZ2J2Zl9pb19wcmVwYXJlLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYnZmL25ldGRldi5jLTI5MzQtXFx0LnJlc2V0X2RvbmUgPSBpZ2J2Zl9pb19yZXNldF9kb25lLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvcGNpLmM9MjUyMD1zdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9lcnJvcl9oYW5kbGVycyBtbHhzd19wY2lfZXJyX2hhbmRsZXIgPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvcGNpLmM6MjUyMTpcXHQucmVzZXRfcHJlcGFyZSA9IG1seHN3X3BjaV9yZXNldF9wcmVwYXJlLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3BjaS5jLTI1MjItXFx0LnJlc2V0X2RvbmUgPSBtbHhzd19wY2lfcmVzZXRfZG9uZSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3BlbnNhbmRvL2lvbmljL2lvbmljX2J1c19wY2kuYz01MTI9c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZXJyb3JfaGFuZGxlcnMgaW9uaWNfZXJyX2hhbmRsZXIgPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcGVuc2FuZG8vaW9uaWMvaW9uaWNfYnVzX3BjaS5jLTUxMy1cXHQvKiBGTFIgaGFuZGxpbmcgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9wZW5zYW5kby9pb25pYy9pb25pY19idXNfcGNpLmM6NTE0OlxcdC5yZXNldF9wcmVwYXJlICAgICAgPSBpb25pY19yZXNldF9wcmVwYXJlLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3BlbnNhbmRvL2lvbmljL2lvbmljX2J1c19wY2kuYy01MTUtXFx0LnJlc2V0X2RvbmUgICAgICAgICA9IGlvbmljX3Jlc2V0X2RvbmUsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvcGNpZS5jPTU3MT1zdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9lcnJvcl9oYW5kbGVycyBtd2lmaWV4X3BjaWVfZXJyX2hhbmRsZXIgPSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3BjaWUuYzo1NzI6XFx0LnJlc2V0X3ByZXBhcmVcXHRcXHQ9IG13aWZpZXhfcGNpZV9yZXNldF9wcmVwYXJlLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9wY2llLmMtNTczLVxcdC5yZXNldF9kb25lXFx0XFx0PSBtd2lmaWV4X3BjaWVfcmVzZXRfZG9uZSxcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3BjaS5jPTQxMDY9c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZXJyb3JfaGFuZGxlcnMgbnZtZV9lcnJfaGFuZGxlciA9IHtcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3BjaS5jLTQxMDktXFx0LnJlc3VtZVxcdFxcdD0gbnZtZV9lcnJvcl9yZXN1bWUsXFxuZHJpdmVycy9udm1lL2hvc3QvcGNpLmM6NDExMDpcXHQucmVzZXRfcHJlcGFyZVxcdD0gbnZtZV9yZXNldF9wcmVwYXJlLFxcbmRyaXZlcnMvbnZtZS9ob3N0L3BjaS5jLTQxMTEtXFx0LnJlc2V0X2RvbmVcXHQ9IG52bWVfcmVzZXRfZG9uZSxcXG4tLVxcbmRyaXZlcnMvcGNpL3BjaS5jPTUwODg9c3RhdGljIHZvaWQgcGNpX2Rldl9zYXZlX2FuZF9kaXNhYmxlKHN0cnVjdCBwY2lfZGV2ICpkZXYpXFxuLS1cXG5kcml2ZXJzL3BjaS9wY2kuYy01MDkzLVxcdC8qXFxuZHJpdmVycy9wY2kvcGNpLmM6NTA5NDpcXHQgKiBkZXYtXFx1MDAzZWRyaXZlci1cXHUwMDNlZXJyX2hhbmRsZXItXFx1MDAzZXJlc2V0X3ByZXBhcmUoKSBpcyBwcm90ZWN0ZWQgYWdhaW5zdFxcbmRyaXZlcnMvcGNpL3BjaS5jLTUwOTUtXFx0ICogcmFjZXMgd2l0aCAtXFx1MDAzZXJlbW92ZSgpIGJ5IHRoZSBkZXZpY2UgbG9jaywgd2hpY2ggbXVzdCBiZSBoZWxkIGJ5XFxuLS1cXG5kcml2ZXJzL3BjaS9wY2kuYy01MDk4LVxcdGRldmljZV9sb2NrX2Fzc2VydChcXHUwMDI2ZGV2LVxcdTAwM2VkZXYpO1xcbmRyaXZlcnMvcGNpL3BjaS5jOjUwOTk6XFx0aWYgKGVycl9oYW5kbGVyIFxcdTAwMjZcXHUwMDI2IGVycl9oYW5kbGVyLVxcdTAwM2VyZXNldF9wcmVwYXJlKVxcbmRyaXZlcnMvcGNpL3BjaS5jOjUxMDA6XFx0XFx0ZXJyX2hhbmRsZXItXFx1MDAzZXJlc2V0X3ByZXBhcmUoZGV2KTtcXG5kcml2ZXJzL3BjaS9wY2kuYy01MTAxLVxcdGVsc2UgaWYgKGRldi1cXHUwMDNlZHJpdmVyKVxcbi0tXFxuZHJpdmVycy9zY3NpL2hpc2lfc2FzL2hpc2lfc2FzX3YzX2h3LmM9NTMwNj1zdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9lcnJvcl9oYW5kbGVycyBoaXNpX3Nhc19lcnJfaGFuZGxlciA9IHtcXG5kcml2ZXJzL3Njc2kvaGlzaV9zYXMvaGlzaV9zYXNfdjNfaHcuYzo1MzA3OlxcdC5yZXNldF9wcmVwYXJlXFx0PSBoaXNpX3Nhc19yZXNldF9wcmVwYXJlX3YzX2h3LFxcbmRyaXZlcnMvc2NzaS9oaXNpX3Nhcy9oaXNpX3Nhc192M19ody5jLTUzMDgtXFx0LnJlc2V0X2RvbmVcXHQ9IGhpc2lfc2FzX3Jlc2V0X2RvbmVfdjNfaHcsXFxuLS1cXG5kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfb3MuYz04MzEyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2Vycm9yX2hhbmRsZXJzIHFsYTJ4eHhfZXJyX2hhbmRsZXIgPSB7XFxuLS1cXG5kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfb3MuYy04MzE2LVxcdC5yZXN1bWUgPSBxbGEyeHh4X3BjaV9yZXN1bWUsXFxuZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX29zLmM6ODMxNzpcXHQucmVzZXRfcHJlcGFyZSA9IHFsYV9wY2lfcmVzZXRfcHJlcGFyZSxcXG5kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfb3MuYy04MzE4LVxcdC5yZXNldF9kb25lID0gcWxhX3BjaV9yZXNldF9kb25lLFxcbi0tXFxuZHJpdmVycy9zdGFnaW5nL21lZGlhL2lwdTcvaXB1Ny5jPTI3NTI9c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZXJyb3JfaGFuZGxlcnMgcGNpX2Vycl9oYW5kbGVycyA9IHtcXG5kcml2ZXJzL3N0YWdpbmcvbWVkaWEvaXB1Ny9pcHU3LmM6Mjc1MzpcXHQucmVzZXRfcHJlcGFyZSA9IGlwdTdfcGNpX3Jlc2V0X3ByZXBhcmUsXFxuZHJpdmVycy9zdGFnaW5nL21lZGlhL2lwdTcvaXB1Ny5jLTI3NTQtXFx0LnJlc2V0X2RvbmUgPSBpcHU3X3BjaV9yZXNldF9kb25lLFxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS9oaXNpbGljb24vaGlzaV9hY2NfdmZpb19wY2kuYz0xNzIxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2Vycm9yX2hhbmRsZXJzIGhpc2lfYWNjX3ZmX2Vycl9oYW5kbGVycyA9IHtcXG5kcml2ZXJzL3ZmaW8vcGNpL2hpc2lsaWNvbi9oaXNpX2FjY192ZmlvX3BjaS5jOjE3MjI6XFx0LnJlc2V0X3ByZXBhcmUgPSBoaXNpX2FjY192Zl9wY2lfcmVzZXRfcHJlcGFyZSxcXG5kcml2ZXJzL3ZmaW8vcGNpL2hpc2lsaWNvbi9oaXNpX2FjY192ZmlvX3BjaS5jLTE3MjMtXFx0LnJlc2V0X2RvbmUgPSBoaXNpX2FjY192Zl9wY2lfYWVyX3Jlc2V0X2RvbmUsXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3hlL21haW4uYz0xNDA9c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZXJyb3JfaGFuZGxlcnMgeGVfdmZpb19wY2lfZXJyX2hhbmRsZXJzID0ge1xcbmRyaXZlcnMvdmZpby9wY2kveGUvbWFpbi5jOjE0MTpcXHQucmVzZXRfcHJlcGFyZSA9IHhlX3ZmaW9fcGNpX3Jlc2V0X3ByZXBhcmUsXFxuZHJpdmVycy92ZmlvL3BjaS94ZS9tYWluLmMtMTQyLVxcdC5yZXNldF9kb25lID0geGVfdmZpb19wY2lfcmVzZXRfZG9uZSxcXG4tLVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpby5jPTY5OD1pbnQgdmlydGlvX2RldmljZV9yZXNldF9wcmVwYXJlKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW8uYy03MDItXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvLmM6NzAzOlxcdGlmICghZHJ2IHx8ICFkcnYtXFx1MDAzZXJlc2V0X3ByZXBhcmUpXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvLmMtNzA0LVxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4tLVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpby5jLTcwOS1cXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW8uYzo3MTA6XFx0cmV0ID0gZHJ2LVxcdTAwM2VyZXNldF9wcmVwYXJlKGRldik7XFxuZHJpdmVycy92aXJ0aW8vdmlydGlvLmMtNzExLVxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19wY2lfY29tbW9uLmM9ODMzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2Vycm9yX2hhbmRsZXJzIHZpcnRpb19wY2lfZXJyX2hhbmRsZXIgPSB7XFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaV9jb21tb24uYzo4MzQ6XFx0LnJlc2V0X3ByZXBhcmUgID0gdmlydGlvX3BjaV9yZXNldF9wcmVwYXJlLFxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19wY2lfY29tbW9uLmMtODM1LVxcdC5yZXNldF9kb25lICAgICA9IHZpcnRpb19wY2lfcmVzZXRfZG9uZSxcXG4tLVxcbmluY2x1ZGUvbGludXgvY2R4L2NkeF9idXMuaD0xNDM9c3RydWN0IGNkeF9kZXZpY2Uge1xcbi0tXFxuaW5jbHVkZS9saW51eC9jZHgvY2R4X2J1cy5oLTE4Ny0gKiBAc2h1dGRvd246IEZ1bmN0aW9uIGNhbGxlZCBhdCBzaHV0ZG93biB0aW1lIHRvIHF1aWVzY2UgdGhlIGRldmljZVxcbmluY2x1ZGUvbGludXgvY2R4L2NkeF9idXMuaDoxODg6ICogQHJlc2V0X3ByZXBhcmU6IEZ1bmN0aW9uIGNhbGxlZCBiZWZvcmUgaXMgcmVzZXQgdG8gbm90aWZ5IGRyaXZlclxcbmluY2x1ZGUvbGludXgvY2R4L2NkeF9idXMuaC0xODktICogQHJlc2V0X2RvbmU6IEZ1bmN0aW9uIGNhbGxlZCBhZnRlciByZXNldCBpcyBjb21wbGV0ZSB0byBub3RpZnkgZHJpdmVyXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2NkeC9jZHhfYnVzLmg9MTk4PXN0cnVjdCBjZHhfZHJpdmVyIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvY2R4L2NkeF9idXMuaC0yMDMtXFx0dm9pZCAoKnNodXRkb3duKShzdHJ1Y3QgY2R4X2RldmljZSAqZGV2KTtcXG5pbmNsdWRlL2xpbnV4L2NkeC9jZHhfYnVzLmg6MjA0OlxcdHZvaWQgKCpyZXNldF9wcmVwYXJlKShzdHJ1Y3QgY2R4X2RldmljZSAqZGV2KTtcXG5pbmNsdWRlL2xpbnV4L2NkeC9jZHhfYnVzLmgtMjA1LVxcdHZvaWQgKCpyZXNldF9kb25lKShzdHJ1Y3QgY2R4X2RldmljZSAqZGV2KTtcXG4tLVxcbmluY2x1ZGUvbGludXgvcGNpLmg9OTQ4PXN0cnVjdCBwY2lfZXJyb3JfaGFuZGxlcnMge1xcbi0tXFxuaW5jbHVkZS9saW51eC9wY2kuaC05NTktXFx0LyogUENJIGZ1bmN0aW9uIHJlc2V0IHByZXBhcmUgb3IgY29tcGxldGVkICovXFxuaW5jbHVkZS9saW51eC9wY2kuaDo5NjA6XFx0dm9pZCAoKnJlc2V0X3ByZXBhcmUpKHN0cnVjdCBwY2lfZGV2ICpkZXYpO1xcbmluY2x1ZGUvbGludXgvcGNpLmgtOTYxLVxcdHZvaWQgKCpyZXNldF9kb25lKShzdHJ1Y3QgcGNpX2RldiAqZGV2KTtcXG4tLVxcbmluY2x1ZGUvbGludXgvdmlydGlvLmg9MjIwPXNpemVfdCB2aXJ0aW9fbWF4X2RtYV9zaXplKGNvbnN0IHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KTtcXG4tLVxcbmluY2x1ZGUvbGludXgvdmlydGlvLmgtMjQyLSAqIEByZXN0b3JlOiBvcHRpb25hbCBmdW5jdGlvbiB0byBjYWxsIG9uIHJlc3VtZS5cXG5pbmNsdWRlL2xpbnV4L3ZpcnRpby5oOjI0MzogKiBAcmVzZXRfcHJlcGFyZTogb3B0aW9uYWwgZnVuY3Rpb24gdG8gY2FsbCB3aGVuIGEgdHJhbnNwb3J0IHNwZWNpZmljIHJlc2V0XFxuaW5jbHVkZS9saW51eC92aXJ0aW8uaC0yNDQtICogICAgb2NjdXJzLlxcbi0tXFxuaW5jbHVkZS9saW51eC92aXJ0aW8uaD0yNTA9c3RydWN0IHZpcnRpb19kcml2ZXIge1xcbi0tXFxuaW5jbHVkZS9saW51eC92aXJ0aW8uaC0yNjMtXFx0aW50ICgqcmVzdG9yZSkoc3RydWN0IHZpcnRpb19kZXZpY2UgKmRldik7XFxuaW5jbHVkZS9saW51eC92aXJ0aW8uaDoyNjQ6XFx0aW50ICgqcmVzZXRfcHJlcGFyZSkoc3RydWN0IHZpcnRpb19kZXZpY2UgKmRldik7XFxuaW5jbHVkZS9saW51eC92aXJ0aW8uaC0yNjUtXFx0aW50ICgqcmVzZXRfZG9uZSkoc3RydWN0IHZpcnRpb19kZXZpY2UgKmRldik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDA5OjA4OjIxLjk4MDYwNzIzMloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIyODU4OTQxMTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHJlbGF0ZXMgdG8gdGhhdCBjb2RlOlxuXG4qKkFuYWx5emluZyB0aGUgVmlydElPIERldmljZSBSZXNldCBQcmVwYXJhdGlvbioqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJJ20gbG9va2luZyBhdCBgZHJpdmVycy92aXJ0aW8vdmlydGlvLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGZ1bmN0aW9uIGB2aXJ0aW9fZGV2aWNlX3Jlc2V0X3ByZXBhcmUoc3RydWN0IHZpcnRpb19kZXZpY2UgKmRldilgLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXM6ICp3aGVyZSogaXMgdGhpcyBmdW5jdGlvbiBhY3R1YWxseSBpbnZva2VkIHdpdGhpbiB0aGUgYnJvYWRlciBzeXN0ZW0/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjb250ZXh0LiBLbm93aW5nIHdoZXJlIGl0J3MgY2FsbGVkIHdpbGwgZ2l2ZSBtZSBpbnNpZ2h0cyBpbnRvICp3aHkqIGl0J3MgYmVpbmcgY2FsbGVkIGFuZCB0aGUgc2NlbmFyaW9zIGl0J3MgaW50ZW5kZWQgdG8gaGFuZGxlLiBTbywgSSBuZWVkIHRvIGRvIGEgcXVpY2sgY29kZSBzZWFyY2guIEknbGwgdXNlIGBncmVwYCAob3Igd2hhdGV2ZXIgc2VhcmNoIHRvb2wgaXMgYXQgaGFuZCkgdG8gZmluZCBhbGwgdGhlIGluc3RhbmNlcyB3aGVyZSBgdmlydGlvX2RldmljZV9yZXNldF9wcmVwYXJlYCBpcyBleHBsaWNpdGx5IGNhbGxlZCB3aXRoaW4gdGhlIGNvZGViYXNlLiBUaGF0J3MgdGhlIGJlc3Qgd2F5IHRvIHVuZGVyc3RhbmQgaXRzIHB1cnBvc2Ugd2l0aGluIHRoZSBkZXZpY2UgcmVzZXQgZmxvdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM5NTYsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwOTowODoyNC4yNjY1MDQwNThaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NjM5NjE0NTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmlydGlvX2RldmljZV9yZXNldF9wcmVwYXJlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmlydGlvL3ZpcnRpby5jPTY5NT1FWFBPUlRfU1lNQk9MX0dQTCh2aXJ0aW9fZGV2aWNlX3Jlc3RvcmUpO1xcbi0tXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvLmMtNjk3LVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpby5jOjY5ODppbnQgdmlydGlvX2RldmljZV9yZXNldF9wcmVwYXJlKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICpkZXYpXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvLmMtNjk5LXtcXG4tLVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpby5jLTcxNy19XFxuZHJpdmVycy92aXJ0aW8vdmlydGlvLmM6NzE4OkVYUE9SVF9TWU1CT0xfR1BMKHZpcnRpb19kZXZpY2VfcmVzZXRfcHJlcGFyZSk7XFxuZHJpdmVycy92aXJ0aW8vdmlydGlvLmMtNzE5LVxcbi0tXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaV9jb21tb24uYz03OTg9c3RhdGljIHZvaWQgdmlydGlvX3BjaV9yZXNldF9wcmVwYXJlKHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2KVxcbi0tXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaV9jb21tb24uYy04MDItXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaV9jb21tb24uYzo4MDM6XFx0cmV0ID0gdmlydGlvX2RldmljZV9yZXNldF9wcmVwYXJlKFxcdTAwMjZ2cF9kZXYtXFx1MDAzZXZkZXYpO1xcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19wY2lfY29tbW9uLmMtODA0LVxcdGlmIChyZXQpIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvdmlydGlvLmg9MjE2PXZvaWQgdmlydGlvX2RldmljZV9zaHV0ZG93bihzdHJ1Y3QgdmlydGlvX2RldmljZSAqZGV2KTtcXG5pbmNsdWRlL2xpbnV4L3ZpcnRpby5oOjIxNzppbnQgdmlydGlvX2RldmljZV9yZXNldF9wcmVwYXJlKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICpkZXYpO1xcbmluY2x1ZGUvbGludXgvdmlydGlvLmgtMjE4LWludCB2aXJ0aW9fZGV2aWNlX3Jlc2V0X2RvbmUoc3RydWN0IHZpcnRpb19kZXZpY2UgKmRldik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDA5OjA4OjI2LjAzMDQ3OTAwNVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMTQxNTYzMjM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqVHJhY2luZyBgdmlydGlvX2RldmljZV9mcmVlemVgKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNhbGwgZ3JhcGggZm9yIGB2aXJ0aW9fZGV2aWNlX2ZyZWV6ZWAuIFRoYXQncyB0aGUga2V5IHF1ZXN0aW9uLCByaWdodD8gV2hlcmUgaXMgdGhhdCBmdW5jdGlvbiAqYWN0dWFsbHkqIGJlaW5nIGludm9rZWQgd2l0aGluIHRoZSBzeXN0ZW0/IEkgbmVlZCB0byB0cmFjayBkb3duIGFsbCB0aGUgY2FsbCBzaXRlcyB0byBnZXQgYSBjb21wbGV0ZSBwaWN0dXJlLiBMZXQncyBzdGFydCBieSBsb29raW5nIGZvciBkaXJlY3QgY2FsbHMgdG8gYHZpcnRpb19kZXZpY2VfZnJlZXplYC4gSSdsbCBuZWVkIHRvIHVzZSBteSBwcmVmZXJyZWQgZGVidWdnaW5nIHRvb2xzIGFuZCBjb2RlIHNlYXJjaGluZyB0ZWNobmlxdWVzIHRvIGlkZW50aWZ5IHRoZW0uIEkgc2hvdWxkIGFsc28gY2hlY2sgdGhlIHJlbGV2YW50IGRvY3VtZW50YXRpb24gb3Igc291cmNlIGNvZGUgY29tbWVudHMgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGdpdmUgbWUgbW9yZSBwb2ludGVycywgdG8gbWFrZSBzdXJlIEkgYW0gbm90IG1pc3NpbmcgYW55IGluZGlyZWN0IGNhbGxzLiBUaGlzIHdpbGwgcmVxdWlyZSBjYXJlZnVsIGFuYWx5c2lzLCBidXQgd2l0aCBteSBleHBlcnRpc2UsIEknbSBjb25maWRlbnQgSSBjYW4gbWFwIHRoaXMgb3V0IGVmZmVjdGl2ZWx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDYyMywiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDA5OjA4OjI4LjE3MjA0NDc2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODc3MjczNzY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZpcnRpb19kZXZpY2VfZnJlZXplXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmlydGlvL3ZpcnRpby5jPTYxMz1zdGF0aWMgaW50IHZpcnRpb19kZXZpY2VfcmVzdG9yZV9wcml2KHN0cnVjdCB2aXJ0aW9fZGV2aWNlICpkZXYsIGJvb2wgcmVzdG9yZSlcXG4tLVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpby5jLTY2OS0jaWZkZWYgQ09ORklHX1BNX1NMRUVQXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvLmM6NjcwOmludCB2aXJ0aW9fZGV2aWNlX2ZyZWV6ZShzdHJ1Y3QgdmlydGlvX2RldmljZSAqZGV2KVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpby5jLTY3MS17XFxuLS1cXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW8uYy02ODgtfVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpby5jOjY4OTpFWFBPUlRfU1lNQk9MX0dQTCh2aXJ0aW9fZGV2aWNlX2ZyZWV6ZSk7XFxuZHJpdmVycy92aXJ0aW8vdmlydGlvLmMtNjkwLVxcbi0tXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX21taW8uYz01NTY9c3RhdGljIGludCB2aXJ0aW9fbW1pb19mcmVlemUoc3RydWN0IGRldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX21taW8uYy01NTktXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX21taW8uYzo1NjA6XFx0cmV0dXJuIHZpcnRpb19kZXZpY2VfZnJlZXplKFxcdTAwMjZ2bV9kZXYtXFx1MDAzZXZkZXYpO1xcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19tbWlvLmMtNTYxLX1cXG4tLVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19wY2lfY29tbW9uLmM9NTk5PXN0YXRpYyBpbnQgdmlydGlvX3BjaV9mcmVlemUoc3RydWN0IGRldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaV9jb21tb24uYy02MDQtXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaV9jb21tb24uYzo2MDU6XFx0cmV0ID0gdmlydGlvX2RldmljZV9mcmVlemUoXFx1MDAyNnZwX2Rldi1cXHUwMDNldmRldik7XFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaV9jb21tb24uYy02MDYtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3ZpcnRpby5oPTIwOT12b2lkIHZpcnRpb19jb25maWdfZHJpdmVyX2VuYWJsZShzdHJ1Y3QgdmlydGlvX2RldmljZSAqZGV2KTtcXG4tLVxcbmluY2x1ZGUvbGludXgvdmlydGlvLmgtMjExLSNpZmRlZiBDT05GSUdfUE1fU0xFRVBcXG5pbmNsdWRlL2xpbnV4L3ZpcnRpby5oOjIxMjppbnQgdmlydGlvX2RldmljZV9mcmVlemUoc3RydWN0IHZpcnRpb19kZXZpY2UgKmRldik7XFxuaW5jbHVkZS9saW51eC92aXJ0aW8uaC0yMTMtaW50IHZpcnRpb19kZXZpY2VfcmVzdG9yZShzdHJ1Y3QgdmlydGlvX2RldmljZSAqZGV2KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDk6MDg6MzAuMDQ5MzI2ODk3WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjM5MjUyMzA0MzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUmVjZW50IENoYW5nZSBpbiB0aGUgYHZpcnRpb19ibGtgIERyaXZlcioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZSBgdmlydGlvX2Jsa2AgZHJpdmVyLCBzcGVjaWZpY2FsbHkgdGhlIGB2aXJ0YmxrX2ZyZWV6ZV9wcml2YCBmdW5jdGlvbiB3aXRoaW4gYHZpcnRpb19ibGsuY2AuIEknbSBmYW1pbGlhciB3aXRoIHRoaXMgY29kZTsgaXQncyByZXNwb25zaWJsZSBmb3IgaGFuZGxpbmcgZGV2aWNlIGZyZWV6aW5nLCBhIGNydWNpYWwgcGFydCBvZiBtYW5hZ2luZyB0aGUgYmxvY2sgZGV2aWNlJ3Mgc3RhdGUgZHVyaW5nIG9wZXJhdGlvbnMgbGlrZSBzdXNwZW5kIG9yIGhvdHBsdWcuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHRoaXMgZnVuY3Rpb24uXG5cblJpZ2h0LCBgVklSVElPX0JMS2AgaXMgYSB2aXJ0aW8gYmxvY2sgZGV2aWNlIGRyaXZlci4gTm93LCBJIHNlZSB0aGUgY29kZSBzbmlwcGV0IHdoZXJlIGl0IHVzZXMgYGJsa19tcV9mcmVlemVfcXVldWVgLCBgYmxrX21xX3F1aWVzY2VfcXVldWVgLCBhbmQgYGJsa19tcV91bmZyZWV6ZV9xdWV1ZWAuIE15IGF0dGVudGlvbiBpcyBpbW1lZGlhdGVseSBkcmF3biB0byB0aGUgc3VidGxlIGNoYW5nZSBmcm9tIGBibGtfbXFfcXVpZXNjZV9xdWV1ZV9ub3dhaXQocSlgIHRvIGp1c3QgYGJsa19tcV9xdWllc2NlX3F1ZXVlKHEpYC4gVGhhdCBkaWZmZXJlbmNlIHN1Z2dlc3RzIGEgc2lnbmlmaWNhbnQgY2hhbmdlIGluIGJlaGF2aW9yLiBXaHkgdGhlIG1vZGlmaWNhdGlvbj9cblxuVGhlIG9yaWdpbmFsIGNvZGUgdXNlZCBgbm93YWl0YCwgd2hpY2ggaW1wbGllcyBhbiBhc3luY2hyb25vdXMgcXVpZXNjZSBvcGVyYXRpb24uIFRoZSBjdXJyZW50IHZlcnNpb24gbm93IHVzZXMgdGhlIGJsb2NraW5nIHZlcnNpb24uIFNvLCB3aGF0IHdhcyB0aGUgcmF0aW9uYWxlIGZvciB0aGlzIGNoYW5nZT8gSSBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgY29tbWl0IGhpc3RvcnkuIFRoZSBzdGFuZGFyZCBhcHByb2FjaCBpcyB0byB1c2UgYGdpdCBsb2dgIHRvb2xzLiBJJ20gZ29pbmcgdG8gc3RhcnQgd2l0aCBgZ2l0IGxvZyAtcCAtMWAgdG8gZXhhbWluZSB0aGUgbGFzdCBjb21taXQgdG91Y2hpbmcgdGhpcyBmdW5jdGlvbi4gSWYgdGhhdCBkb2Vzbid0IHByb3ZpZGUgZW5vdWdoIGNvbnRleHQsIEknbGwgYnJvYWRlbiB0aGUgc2VhcmNoIHdpdGggYGdpdCBsb2cgLVMgdmlydGJsa19mcmVlemVfcHJpdmAgb3IgZXZlbiBgZ2l0IGxvZyAtcCAtMiBkcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuY2AgdG8gc2VlIG1vcmUgY2hhbmdlcy4gRXNzZW50aWFsbHksIEknbSB0cnlpbmcgdG8gZGV0ZXJtaW5lIHRoZSAqd2h5KiBiZWhpbmQgdGhpcyBhbHRlcmF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHN3aXRjaGluZyBmcm9tIGEgbm9uLWJsb2NraW5nIHRvIGEgYmxvY2tpbmcgcXVpZXNjZSBvcGVyYXRpb24gd2l0aGluIHRoaXMgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUzNTksIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDk6MDg6MzMuOTc0NTU5NjE4WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTI4NDE3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJibGtfbXFfcXVpZXNjZV9xdWV1ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYz0xNTkwPXN0YXRpYyBpbnQgdmlydGJsa19mcmVlemVfcHJpdihzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldilcXG4tLVxcbmRyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jLTE1OTctXFx0bWVtZmxhZ3MgPSBibGtfbXFfZnJlZXplX3F1ZXVlKHEpO1xcbmRyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jOjE1OTg6XFx0YmxrX21xX3F1aWVzY2VfcXVldWUocSk7XFxuZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmMtMTU5OS1cXHRibGtfbXFfdW5mcmVlemVfcXVldWUocSwgbWVtZmxhZ3MpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwOTowODozNC4wMjM4NDk1MzZaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDc1ODM1NTAyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIHdoYXQncyBnb2luZyB0aHJvdWdoIG15IGhlYWQgYXMgSSBhcHByb2FjaCB0aGlzIGlzc3VlLlxuXG4qKkFuYWx5emluZyBCbG9jayBMYXllciBRdWllc2NpbmcgQmVoYXZpb3IqKlxuXG5BbHJpZ2h0LCB0aGUgZmlyc3QgdGhpbmcgSSBuZWVkIHRvIGRvIGlzIGdldCBzb21lIGNvbnRleHQgb24gdGhpcy4gTXkgaW5zdGluY3QgaXMgdG8gZXhhbWluZSB0aGUgR2l0IGhpc3RvcnkgZm9yIHRoaXMgY29kZSwgaWYgcG9zc2libGUuIFRoYXQgd291bGQgYmUgaWRlYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGV2b2x1dGlvbiBvZiB0aGlzIGZ1bmN0aW9uYWxpdHkuIEhvd2V2ZXIsIEkga25vdyBJIGNhbid0IGp1c3QgcnVuIGBnaXQgbG9nYCBkaXJlY3RseSB3aXRoIG15IGN1cnJlbnQgdG9vbHMuIFNvLCBJIG5lZWQgYSB3b3JrYXJvdW5kLiBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCBhIHdheSB0byBnZXQgdGhlIGNvbnRleHQgSSBuZWVkLlxuXG5JbnN0ZWFkIG9mIGRpcmVjdGx5IGxvb2tpbmcgZm9yIHRoZSBnaXQgbG9nLCBsZXQncyBjb21wYXJlIHRob3NlIHR3byBmdW5jdGlvbnM6IGBibGtfbXFfcXVpZXNjZV9xdWV1ZWAgYW5kIGBibGtfbXFfcXVpZXNjZV9xdWV1ZV9ub3dhaXRgLiBUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZW0gc2hvdWxkIG9mZmVyIGEgY2x1ZSBvZiB0aGUgY3VycmVudCBpc3N1ZS5cblxuTm93LCBteSBuZXh0IHN0ZXAgaXMgY2xlYXIuIExldCdzIGRpdmUgcmlnaHQgaW50byB0aGUgYGJsb2NrL2Jsay1tcS5jYCBmaWxlIGFuZCBwaW5wb2ludCB0aGUgaW1wbGVtZW50YXRpb24gb2YgYGJsa19tcV9xdWllc2NlX3F1ZXVlYC4gVGhhdCBzaG91bGQgaWxsdW1pbmF0ZSBleGFjdGx5IHdoYXQncyBoYXBwZW5pbmcgdW5kZXIgdGhlIGhvb2QuIEhvcGVmdWxseSwgdGhhdCB3aWxsIGdpdmUgbWUgdGhlIGluZm9ybWF0aW9uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdW5jdGlvbiBhbmQgcmVzb2x2ZSB0aGUgcHJvYmxlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYzNzIsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwOTowODozOC43ODIyMDcyMDFaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NzE0MDEzNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm9pZCBibGtfbXFfcXVpZXNjZV9xdWV1ZVxcXFwoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL2Jsay1tcS5jPTI4OD1FWFBPUlRfU1lNQk9MX0dQTChibGtfbXFfd2FpdF9xdWllc2NlX2RvbmUpO1xcbi0tXFxuYmxvY2svYmxrLW1xLmMtMjk4LSAqL1xcbmJsb2NrL2Jsay1tcS5jOjI5OTp2b2lkIGJsa19tcV9xdWllc2NlX3F1ZXVlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKVxcbmJsb2NrL2Jsay1tcS5jLTMwMC17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2Jsay1tcS5oPTkzNj12b2lkIGJsa19tcV9zdGFydF9zdG9wcGVkX2h3X3F1ZXVlcyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgYm9vbCBhc3luYyk7XFxuaW5jbHVkZS9saW51eC9ibGstbXEuaDo5Mzc6dm9pZCBibGtfbXFfcXVpZXNjZV9xdWV1ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSk7XFxuaW5jbHVkZS9saW51eC9ibGstbXEuaC05Mzgtdm9pZCBibGtfbXFfd2FpdF9xdWllc2NlX2RvbmUoc3RydWN0IGJsa19tcV90YWdfc2V0ICpzZXQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwOTowODo0MC43NTM2MTUzNVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0MDAwNTg3MDkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IG1lbnRhbCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIGJsb2NrL2Jsay1tcS5jKipcblxuT2theSwgdGltZSB0byBkaWcgaW4uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBzb21lIGFzcGVjdCBvZiB0aGUgYmxvY2sgbGF5ZXIsIGFuZCBJJ20gdGhpbmtpbmcgdGhlIHJlbGV2YW50IHNlY3Rpb24gaXMgYXJvdW5kIGxpbmUgMjkwIGluIGBibG9jay9ibGstbXEuY2AuIEknbSBmb2N1c2luZyBpbiBvbiB0aGF0IGZpbGUgYW5kIHNwZWNpZmljIGxpbmUgcmFuZ2UgYmVjYXVzZSBteSBleHBlcmllbmNlIHRlbGxzIG1lIHRoYXQncyB3aGVyZSBJJ20gbGlrZWx5IHRvIGZpbmQgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgcmVsYXRlZCB0byB3aGF0ZXZlciBJJ20gdHJvdWJsZXNob290aW5nIG9yIGludmVzdGlnYXRpbmcgcmlnaHQgbm93LiBJIGtub3cgdGhlIGdlbmVyYWwgYXJjaGl0ZWN0dXJlLCBidXQgSSBuZWVkIHRvIGdldCBpbnRvIHRoZSBkZXRhaWxzIHRvIGZ1bGx5IHVuZGVyc3RhbmQgaXQuIExldCdzIHNlZSB3aGF0J3MgaW4gdGhhdCBzZWN0aW9uLiBUaW1lIHRvIHN0YXJ0IHJlYWRpbmchXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2OTQyLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDk6MDg6NDQuNzU0MjA0NjE0WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3Njk2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJibG9jay9ibGstbXEuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNzAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyNzA6XFx0RVhQT1JUX1NZTUJPTF9HUEwoYmxrX21xX3F1aWVzY2VfcXVldWVfbm93YWl0KTtcXG4gMjcxOlxcdFxcbiAyNzI6XFx0LyoqXFxuIDI3MzpcXHQgKiBibGtfbXFfd2FpdF9xdWllc2NlX2RvbmUoKSAtIHdhaXQgdW50aWwgaW4tcHJvZ3Jlc3MgcXVpZXNjZSBpcyBkb25lXFxuIDI3NDpcXHQgKiBAc2V0OiB0YWdfc2V0IHRvIHdhaXQgb25cXG4gMjc1OlxcdCAqXFxuIDI3NjpcXHQgKiBOb3RlOiBpdCBpcyBkcml2ZXIncyByZXNwb25zaWJpbGl0eSBmb3IgbWFraW5nIHN1cmUgdGhhdCBxdWllc2NlIGhhc1xcbiAyNzc6XFx0ICogYmVlbiBzdGFydGVkIG9uIG9yIG1vcmUgb2YgdGhlIHJlcXVlc3RfcXVldWVzIG9mIHRoZSB0YWdfc2V0LiAgVGhpc1xcbiAyNzg6XFx0ICogZnVuY3Rpb24gb25seSB3YWl0cyBmb3IgdGhlIHF1aWVzY2Ugb24gdGhvc2UgcmVxdWVzdF9xdWV1ZXMgdGhhdCBoYWRcXG4gMjc5OlxcdCAqIHRoZSBxdWllc2NlIGZsYWcgc2V0IHVzaW5nIGJsa19tcV9xdWllc2NlX3F1ZXVlX25vd2FpdC5cXG4gMjgwOlxcdCAqL1xcbiAyODE6XFx0dm9pZCBibGtfbXFfd2FpdF9xdWllc2NlX2RvbmUoc3RydWN0IGJsa19tcV90YWdfc2V0ICpzZXQpXFxuIDI4MjpcXHR7XFxuIDI4MzpcXHRcXHRpZiAoc2V0LVxcdTAwM2VmbGFncyBcXHUwMDI2IEJMS19NUV9GX0JMT0NLSU5HKVxcbiAyODQ6XFx0XFx0XFx0c3luY2hyb25pemVfc3JjdShzZXQtXFx1MDAzZXNyY3UpO1xcbiAyODU6XFx0XFx0ZWxzZVxcbiAyODY6XFx0XFx0XFx0c3luY2hyb25pemVfcmN1KCk7XFxuIDI4NzpcXHR9XFxuIDI4ODpcXHRFWFBPUlRfU1lNQk9MX0dQTChibGtfbXFfd2FpdF9xdWllc2NlX2RvbmUpO1xcbiAyODk6XFx0XFxuIDI5MDpcXHQvKipcXG4gMjkxOlxcdCAqIGJsa19tcV9xdWllc2NlX3F1ZXVlKCkgLSB3YWl0IHVudGlsIGFsbCBvbmdvaW5nIGRpc3BhdGNoZXMgaGF2ZSBmaW5pc2hlZFxcbiAyOTI6XFx0ICogQHE6IHJlcXVlc3QgcXVldWUuXFxuIDI5MzpcXHQgKlxcbiAyOTQ6XFx0ICogTm90ZTogdGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBwcmV2ZW50IHRoYXQgdGhlIHN0cnVjdCByZXF1ZXN0IGVuZF9pbygpXFxuIDI5NTpcXHQgKiBjYWxsYmFjayBmdW5jdGlvbiBpcyBpbnZva2VkLiBPbmNlIHRoaXMgZnVuY3Rpb24gaXMgcmV0dXJuZWQsIHdlIG1ha2VcXG4gMjk2OlxcdCAqIHN1cmUgbm8gZGlzcGF0Y2ggY2FuIGhhcHBlbiB1bnRpbCB0aGUgcXVldWUgaXMgdW5xdWllc2NlZCB2aWFcXG4gMjk3OlxcdCAqIGJsa19tcV91bnF1aWVzY2VfcXVldWUoKS5cXG4gMjk4OlxcdCAqL1xcbiAyOTk6XFx0dm9pZCBibGtfbXFfcXVpZXNjZV9xdWV1ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSlcXG4gMzAwOlxcdHtcXG4gMzAxOlxcdFxcdGJsa19tcV9xdWllc2NlX3F1ZXVlX25vd2FpdChxKTtcXG4gMzAyOlxcdFxcdC8qIG5vdGhpbmcgdG8gd2FpdCBmb3Igbm9uLW1xIHF1ZXVlcyAqL1xcbiAzMDM6XFx0XFx0aWYgKHF1ZXVlX2lzX21xKHEpKVxcbiAzMDQ6XFx0XFx0XFx0YmxrX21xX3dhaXRfcXVpZXNjZV9kb25lKHEtXFx1MDAzZXRhZ19zZXQpO1xcbiAzMDU6XFx0fVxcbiAzMDY6XFx0RVhQT1JUX1NZTUJPTF9HUEwoYmxrX21xX3F1aWVzY2VfcXVldWUpO1xcbiAzMDc6XFx0XFxuIDMwODpcXHQvKlxcbiAzMDk6XFx0ICogYmxrX21xX3VucXVpZXNjZV9xdWV1ZSgpIC0gY291bnRlcnBhcnQgb2YgYmxrX21xX3F1aWVzY2VfcXVldWUoKVxcbiAzMTA6XFx0ICogQHE6IHJlcXVlc3QgcXVldWUuXFxuIDMxMTpcXHQgKlxcbiAzMTI6XFx0ICogVGhpcyBmdW5jdGlvbiByZWNvdmVycyBxdWV1ZSBpbnRvIHRoZSBzdGF0ZSBiZWZvcmUgcXVpZXNjaW5nXFxuIDMxMzpcXHQgKiB3aGljaCBpcyBkb25lIGJ5IGJsa19tcV9xdWllc2NlX3F1ZXVlLlxcbiAzMTQ6XFx0ICovXFxuIDMxNTpcXHR2b2lkIGJsa19tcV91bnF1aWVzY2VfcXVldWUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpXFxuIDMxNjpcXHR7XFxuIDMxNzpcXHRcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbiAzMTg6XFx0XFx0Ym9vbCBydW5fcXVldWUgPSBmYWxzZTtcXG4gMzE5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwOTowODo0NC43NTQ0ODQxODRaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NjU5MDkwMTE3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBhIFBvdGVudGlhbCBEYXRhIENvcnJ1cHRpb24gVnVsbmVyYWJpbGl0eSBpbiB0aGUgQmxvY2sgTGF5ZXIqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gZGlnZ2luZyBpbnRvIHRoaXMgYmxvY2sgbGF5ZXIgY29kZSwgYW5kIEkgdGhpbmsgSSd2ZSBzcG90dGVkIGEgc2lnbmlmaWNhbnQgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uIHRoYXQgY291bGQgbGVhZCB0byBkYXRhIGNvcnJ1cHRpb24uIFRoZSBjb3JlIG9mIHRoZSBwcm9ibGVtIHNlZW1zIHRvIHN0ZW0gZnJvbSBob3cgdGhlIGB2aXJ0YmxrYCBkcml2ZXIgaGFuZGxlcyBkZXZpY2UgcXVpZXNjZW5jZSBpbiByZWxhdGlvbiB0byBkZXZpY2UgcmVzZXQgYW5kIFBNL3N1c3BlbmQgZXZlbnRzLlxuXG5IZXJlJ3MgdGhlIGJyZWFrZG93biBhcyBJIHNlZSBpdDogVGhlIGBibGtfbXFfcXVpZXNjZV9xdWV1ZWAgZnVuY3Rpb24gcmVsaWVzIG9uIGBibGtfbXFfd2FpdF9xdWllc2NlX2RvbmVgIHdoaWNoLCBjcml0aWNhbGx5LCB1c2VzIGBzeW5jaHJvbml6ZV9zcmN1YCBvciBgc3luY2hyb25pemVfcmN1KClgLiBUaGlzIGlzIGltcG9ydGFudCBiZWNhdXNlIGl0IGVuc3VyZXMgdGhhdCBhbGwgcHJpb3IgZGlzcGF0Y2hlcyBhcmUgKmNvbXBsZXRlbHkqIGZpbmlzaGVkIGJlZm9yZSBwcm9jZWVkaW5nLiBUaGUgcHJvYmxlbSBpcyB0aGF0IGEgcHJldmlvdXMgZnVuY3Rpb24sIGBibGtfbXFfcXVpZXNjZV9xdWV1ZV9ub3dhaXRgLCBhcHBlYXJzIHRvIHNldCB0aGUgcXVpZXNjZSBiaXQgKndpdGhvdXQqIHdhaXRpbmcgZm9yIHRoZXNlIGRpc3BhdGNoZXMgdG8gY29tcGxldGUuIFRoZSBjb21tZW50cyBpbiBgdmlydGJsa19mcmVlemVfcHJpdmAgYXJlIHJhaXNpbmcgYWxhcm0gYmVsbHM6XG5cbmBgYGNcblx0LyogRW5zdXJlIG5vIHJlcXVlc3RzIGluIHZpcnRxdWV1ZXMgYmVmb3JlIGRlbGV0aW5nIHZxcy4gKi9cblx0bWVtZmxhZ3MgPSBibGtfbXFfZnJlZXplX3F1ZXVlKHEpO1xuXHRibGtfbXFfcXVpZXNjZV9xdWV1ZShxKTtcblx0YmxrX21xX3VuZnJlZXplX3F1ZXVlKHEsIG1lbWZsYWdzKTtcbmBgYFxuXG5UaGUgd29ycnkgaXMgdGhpczogaWYgYGJsa19tcV9xdWllc2NlX3F1ZXVlYCBkb2Vzbid0ICphY3R1YWxseSogd2FpdCwgb25nb2luZyBkaXNwYXRjaGVzIGNvdWxkIHN0aWxsIGJlIGFjY2Vzc2luZyB0aGUgcXVldWVzIHdoZW4gdGhlIGRldmljZSBpcyBiZWluZyByZXNldCwgb3Igd2hlbiB2aXJ0cXVldWVzIGFyZSBkZWxldGVkIGJ5IGB2ZGV2LVx1MDAzZWNvbmZpZy1cdTAwM2VkZWxfdnFzKHZkZXYpYC4gQm9vbSEgRGF0YSBjb3JydXB0aW9uLlxuXG5Ob3csIGxldCdzIGxvb2sgYXQgdGhlIGNvbmRpdGlvbnMgdGhhdCBjYW4gdHJpZ2dlciBgdmlydGJsa19mcmVlemVfcHJpdmAuICBJIGNhbiBzZWUgdHdvIG1ham9yIGNhbGwgcGF0aHM6XG5cbjEuICAqKlBNL1N1c3BlbmQvSGliZXJuYXRpb246KiogYHZpcnRibGtfZnJlZXplYCBjYWxscyB0aGlzIGZ1bmN0aW9uLiBgdmlydGJsa19mcmVlemVgIGlzIGNhbGxlZCB3aGVuIGB2ZGV2YCBpcyBmcm96ZW4gZm9yIFBNIG9yIHN1c3BlbmQvaGliZXJuYXRlLiBUaGUgYmlnIHF1ZXN0aW9uIGlzLCBjYW4gc3l6a2FsbGVyIGJlIHVzZWQgdG8gdHJpZ2dlciB0aGVzZSBzdGF0ZXM/IFdpdGggcHNldWRvLXN5c2NhbGxzIG9yIGRpcmVjdCB3cml0ZXMgdG8gYC9zeXMvcG93ZXIvc3RhdGVgIChsaWtlIGBtZW1gLCBgZnJlZXplYCwgb3IgYGRpc2tgKSwgdGhlIGFuc3dlciBpcyBhbG1vc3QgY2VydGFpbmx5IHllcywgaXQgY2FuLiBUaGlzIG1lYW5zIHdlIGhhdmUgYSBwb3RlbnRpYWwgdHJpZ2dlci5cblxuMi4gICoqUENJIFJlc2V0OioqICBUaGUgb3RoZXIgaW50ZXJlc3RpbmcgcGF0aCBpcyB0aHJvdWdoIGB2aXJ0YmxrX3Jlc2V0X3ByZXBhcmVgLiBNeSBjb2RlIGluc3BlY3Rpb24gcmV2ZWFscyB0aGF0ICBgdmlydGlvX3BjaV9yZXNldF9wcmVwYXJlYCBpcyBjYWxsZWQgaW4gYHZpcnRpb19wY2lfZXJyX2hhbmRsZXJgIHdoZXJlIGAucmVzZXRfcHJlcGFyZSA9IHZpcnRpb19wY2lfcmVzZXRfcHJlcGFyZWAuXG4gICAgVGhlIGNydWNpYWwgbGluayBoZXJlIGlzIHRoZSBgL3N5cy9idXMvcGNpL2RldmljZXMvLi4uL3Jlc2V0YCBmaWxlLiBJZiBhIHVzZXIgY2FuIHdyaXRlICcxJyB0byBpdCwgd2UgZ2V0IGEgY2FsbCBjaGFpbjogYHBjaV9yZXNldF9mdW5jdGlvbmAgLVx1MDAzZSBgcGNpX2Rldl9zYXZlX2FuZF9kaXNhYmxlYCAtXHUwMDNlIGBlcnJfaGFuZGxlci1cdTAwM2VyZXNldF9wcmVwYXJlKHBjaV9kZXYpYCAtXHUwMDNlIGB2aXJ0aW9fcGNpX3Jlc2V0X3ByZXBhcmVgIC1cdTAwM2UgYHZpcnRpb19kZXZpY2VfcmVzZXRfcHJlcGFyZShcdTAwMjZ2cF9kZXYtXHUwMDNldmRldilgIC1cdTAwM2UgYGRydi1cdTAwM2VyZXNldF9wcmVwYXJlKGRldilgIC1cdTAwM2UgYHZpcnRibGtfcmVzZXRfcHJlcGFyZWAgLVx1MDAzZSBgdmlydGJsa19mcmVlemVfcHJpdmAhICBBbmQgSSBrbm93LCBmcm9tIGV4cGVyaWVuY2UsIHRoYXQgdXNlciBzcGFjZSBjYW4gd3JpdGUgdG8gdGhpcyBmaWxlLCB0aGlzIGNhbGxzIGBwY2lfcmVzZXRfZnVuY3Rpb25gLlxuXG5UaGVyZWZvcmUsIHRoZSByZXNldCBwYXRoIG9mZmVycyBhbm90aGVyLCBwZXJoYXBzIGV2ZW4gbW9yZSBlYXNpbHkgdHJpZ2dlcmVkLCByb3V0ZSB0byBoaXQgdGhlIHByb2JsZW1hdGljIHNlcXVlbmNlLiBJJ20gZ29pbmcgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IGBwY2lfcmVzZXRfZnVuY3Rpb25gIGl0c2VsZiBpbiBgZHJpdmVycy9wY2kvcGNpLmNgIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIHBvdGVudGlhbCBtaXRpZ2F0aW9ucyBvciBjb21wbGV4aXRpZXMgaW4gdGhhdCBjYWxsIGNoYWluIHRoYXQgSSBuZWVkIHRvIGNvbnNpZGVyLiBNeSBndXQgZmVlbGluZyBpcyB0aGF0IHRoaXMgaXMgYSByYWNlIHRoYXQgbmVlZHMgdXJnZW50IGF0dGVudGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc5OTUsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MDcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwOTowODo1MS4zNDUzODg5NjNaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NTk3MDEzOTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGNpX3Jlc2V0X2Z1bmN0aW9uXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9wY2kvcGNpLmM9NzYxPUVYUE9SVF9TWU1CT0xfR1BMKHpwY2lfZGlzYWJsZV9kZXZpY2UpO1xcbi0tXFxuYXJjaC9zMzkwL3BjaS9wY2kuYy03ODAtICogSW4gbW9zdCBjYXNlcyB0aGlzIGZ1bmN0aW9uIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5IGJ1dCB0aHJvdWdoXFxuYXJjaC9zMzkwL3BjaS9wY2kuYzo3ODE6ICogcGNpX3Jlc2V0X2Z1bmN0aW9uKCkgb3IgcGNpX3Jlc2V0X2J1cygpIHdoaWNoIGhhbmRsZSB0aGUgc2F2ZS9yZXN0b3JlIGFuZFxcbmFyY2gvczM5MC9wY2kvcGNpLmMtNzgyLSAqIGxvY2tpbmcgLSBhc3NlcnRlZCBieSBsb2NrZGVwLlxcbi0tXFxuZHJpdmVycy9ibHVldG9vdGgvYnRpbnRlbF9wY2llLmM9MjY3MD1zdGF0aWMgaW50IGJ0aW50ZWxfcGNpZV9wZXJmb3JtX2ZscihzdHJ1Y3QgYnRpbnRlbF9wY2llX2RhdGEgKmRhdGEpXFxuLS1cXG5kcml2ZXJzL2JsdWV0b290aC9idGludGVsX3BjaWUuYy0yNjc3LVxcdCAqIHRoZW4gd2FpdHMgZm9yIHRoaXMgd29yayB2aWEgZGlzYWJsZV93b3JrX3N5bmMoKTsgdGhlIGJsb2NraW5nXFxuZHJpdmVycy9ibHVldG9vdGgvYnRpbnRlbF9wY2llLmM6MjY3ODpcXHQgKiBwY2lfcmVzZXRfZnVuY3Rpb24oKSB3b3VsZCBkZWFkbG9jayBieSB0cnlpbmcgdG8gcmUtYWNxdWlyZVxcbmRyaXZlcnMvYmx1ZXRvb3RoL2J0aW50ZWxfcGNpZS5jLTI2NzktXFx0ICogZGV2aWNlX2xvY2sgaGVyZS5cXG4tLVxcbmRyaXZlcnMvYmx1ZXRvb3RoL2hjaV9iY200Mzc3LmM9MjI3Nj1zdGF0aWMgaW50IGJjbTQzNzdfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcXG4tLVxcbmRyaXZlcnMvYmx1ZXRvb3RoL2hjaV9iY200Mzc3LmMtMjMxNS1cXG5kcml2ZXJzL2JsdWV0b290aC9oY2lfYmNtNDM3Ny5jOjIzMTY6XFx0cmV0ID0gcGNpX3Jlc2V0X2Z1bmN0aW9uX2xvY2tlZChwZGV2KTtcXG5kcml2ZXJzL2JsdWV0b290aC9oY2lfYmNtNDM3Ny5jLTIzMTctXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvZG1hL2lkeGQvaXJxLmM9Mzg2PXN0YXRpYyB2b2lkIGlkeGRfZGV2aWNlX2ZscihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5kcml2ZXJzL2RtYS9pZHhkL2lycS5jLTM5Mi1cXHQgKiBJRFhEIGRldmljZSByZXF1aXJlcyBhIEZ1bmN0aW9uIExldmVsIFJlc2V0IChGTFIpLlxcbmRyaXZlcnMvZG1hL2lkeGQvaXJxLmM6MzkzOlxcdCAqIHBjaV9yZXNldF9mdW5jdGlvbigpIHdpbGwgcmVzZXQgdGhlIGRldmljZSB3aXRoIEZMUi5cXG5kcml2ZXJzL2RtYS9pZHhkL2lycS5jLTM5NC1cXHQgKi9cXG5kcml2ZXJzL2RtYS9pZHhkL2lycS5jOjM5NTpcXHRyYyA9IHBjaV9yZXNldF9mdW5jdGlvbihpZHhkLVxcdTAwM2VwZGV2KTtcXG5kcml2ZXJzL2RtYS9pZHhkL2lycS5jLTM5Ni1cXHRpZiAocmMpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfZGV2aWNlLmM9MTA3Nz1pbnQgYW1kZ3B1X2RldmljZV9wY2lfcmVzZXQoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpXFxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2RldmljZS5jLTEwNzgte1xcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9kZXZpY2UuYzoxMDc5OlxcdHJldHVybiBwY2lfcmVzZXRfZnVuY3Rpb24oYWRldi1cXHUwMDNlcGRldik7XFxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2RldmljZS5jLTEwODAtfVxcbi0tXFxuZHJpdmVycy9oaWQvaW50ZWwtaXNoLWhpZC9pcGMvaXBjLmM9NzYzPXN0YXRpYyBpbnQgX2lzaF9od19yZXNldChzdHJ1Y3QgaXNodHBfZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL2hpZC9pbnRlbC1pc2gtaGlkL2lwYy9pcGMuYy03NzEtXFxuZHJpdmVycy9oaWQvaW50ZWwtaXNoLWhpZC9pcGMvaXBjLmM6NzcyOlxcdHJ2ID0gcGNpX3Jlc2V0X2Z1bmN0aW9uKHBkZXYpO1xcbmRyaXZlcnMvaGlkL2ludGVsLWlzaC1oaWQvaXBjL2lwYy5jLTc3My1cXHRpZiAoIXJ2KVxcbi0tXFxuZHJpdmVycy9taXNjL2dlbndxZS9jYXJkX2Jhc2UuYz0xNTg9c3RhdGljIHZvaWQgZ2Vud3FlX2Rldl9mcmVlKHN0cnVjdCBnZW53cWVfZGV2ICpjZClcXG4tLVxcbmRyaXZlcnMvbWlzYy9nZW53cWUvY2FyZF9iYXNlLmMtMTcwLSAqXFxuZHJpdmVycy9taXNjL2dlbndxZS9jYXJkX2Jhc2UuYzoxNzE6ICogcGNpX3Jlc2V0X2Z1bmN0aW9uKCkgd2lsbCByZWNvdmVyIHRoZSBkZXZpY2UgYW5kIGVuc3VyZSB0aGF0IHRoZVxcbmRyaXZlcnMvbWlzYy9nZW53cWUvY2FyZF9iYXNlLmMtMTcyLSAqIHJlZ2lzdGVycyBhcmUgYWNjZXNzaWJsZSBhZ2FpbiB3aGVuIGl0IGNvbXBsZXRlcyB3aXRoIHN1Y2Nlc3MuIElmXFxuLS1cXG5kcml2ZXJzL21pc2MvZ2Vud3FlL2NhcmRfYmFzZS5jPTE3Nj1zdGF0aWMgaW50IGdlbndxZV9idXNfcmVzZXQoc3RydWN0IGdlbndxZV9kZXYgKmNkKVxcbi0tXFxuZHJpdmVycy9taXNjL2dlbndxZS9jYXJkX2Jhc2UuYy0xOTMtXFx0ICogU2V0dGluZ3MgbGlrZSBlbmFibGUgYnVzLW1hc3RlcmluZywgLi4uIGFyZSBiYWNrdXBlZCBhbmRcXG5kcml2ZXJzL21pc2MvZ2Vud3FlL2NhcmRfYmFzZS5jOjE5NDpcXHQgKiByZXN0b3JlZCBieSB0aGUgcGNpX3Jlc2V0X2Z1bmN0aW9uKCkuXFxuZHJpdmVycy9taXNjL2dlbndxZS9jYXJkX2Jhc2UuYy0xOTUtXFx0ICovXFxuZHJpdmVycy9taXNjL2dlbndxZS9jYXJkX2Jhc2UuYy0xOTYtXFx0ZGV2X2RiZyhcXHUwMDI2cGNpX2Rldi1cXHUwMDNlZGV2LCBcXFwiWyVzXSBwY2lfcmVzZXQgZnVuY3Rpb24gLi4uXFxcXG5cXFwiLCBfX2Z1bmNfXyk7XFxuZHJpdmVycy9taXNjL2dlbndxZS9jYXJkX2Jhc2UuYzoxOTc6XFx0cmMgPSBwY2lfcmVzZXRfZnVuY3Rpb24ocGNpX2Rldik7XFxuZHJpdmVycy9taXNjL2dlbndxZS9jYXJkX2Jhc2UuYy0xOTgtXFx0aWYgKHJjKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvbWFpbi5jPTU4Mj1zdGF0aWMgdm9pZCBwZHNjX3BjaV9lcnJvcl9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvbWFpbi5jLTU4Ni1cXHRpZiAodGVzdF9iaXQoUERTQ19TX0ZXX0RFQUQsIFxcdTAwMjZwZHNjLVxcdTAwM2VzdGF0ZSkpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL21haW4uYzo1ODc6XFx0XFx0cGNpX3Jlc2V0X2Z1bmN0aW9uX2xvY2tlZChwZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvbWFpbi5jLTU4OC19XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vbGlvX21haW4uYz05MTU9c3RhdGljIHZvaWQgb2N0ZW9uX3BjaV9mbHIoc3RydWN0IG9jdGVvbl9kZXZpY2UgKm9jdClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9saW9fbWFpbi5jLTkyNi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vbGlvX21haW4uYzo5Mjc6XFx0cmMgPSBfX3BjaV9yZXNldF9mdW5jdGlvbl9sb2NrZWQob2N0LVxcdTAwM2VwY2lfZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vbGlvX21haW4uYy05MjgtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaGVsc2lvL2N4Z2I0dmYvY3hnYjR2Zl9tYWluLmM9MjUxNT1zdGF0aWMgaW50IGFkYXBfaW5pdDAoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaGVsc2lvL2N4Z2I0dmYvY3hnYjR2Zl9tYWluLmMtMjUyMy1cXHQgKiBTb21lIGVudmlyb25tZW50cyBkbyBub3QgcHJvcGVybHkgaGFuZGxlIFBDSUUgRkxScyAtLSBlLmcuIGluIExpbnV4XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiNHZmL2N4Z2I0dmZfbWFpbi5jOjI1MjQ6XFx0ICogMi42LjMxIGFuZCBsYXRlciB3ZSBjYW4ndCBjYWxsIHBjaV9yZXNldF9mdW5jdGlvbigpIGluIG9yZGVyIHRvXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiNHZmL2N4Z2I0dmZfbWFpbi5jLTI1MjUtXFx0ICogaXNzdWUgYW4gRkxSIGJlY2F1c2Ugb2YgYSBzZWxmLSBkZWFkbG9jayBvbiB0aGUgZGV2aWNlIHNlbWFwaG9yZS5cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3BjaS5jPTE3OTE9c3RhdGljIGludCBtbHhzd19wY2lfcmVzZXRfYXRfcGNpX2Rpc2FibGUoc3RydWN0IG1seHN3X3BjaSAqbWx4c3dfcGNpLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvcGNpLmMtMTgxOC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9wY2kuYzoxODE5OlxcdGVyciA9IF9fcGNpX3Jlc2V0X2Z1bmN0aW9uX2xvY2tlZChwZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9wY2kuYy0xODIwLVxcdGlmIChlcnIpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9wZW5zYW5kby9pb25pYy9pb25pY19idXNfcGNpLmM9NTAzPXN0YXRpYyB2b2lkIGlvbmljX3BjaV9lcnJvcl9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9wZW5zYW5kby9pb25pYy9pb25pY19idXNfcGNpLmMtNTA4LVxcdGlmIChsaWYgXFx1MDAyNlxcdTAwMjYgdGVzdF9iaXQoSU9OSUNfTElGX0ZfRldfUkVTRVQsIGxpZi1cXHUwMDNlc3RhdGUpKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3BlbnNhbmRvL2lvbmljL2lvbmljX2J1c19wY2kuYzo1MDk6XFx0XFx0cGNpX3Jlc2V0X2Z1bmN0aW9uX2xvY2tlZChwZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9wZW5zYW5kby9pb25pYy9pb25pY19idXNfcGNpLmMtNTEwLX1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xbGNuaWMvcWxjbmljX2N0eC5jPTYyNj1pbnQgcWxjbmljX2Z3X2NyZWF0ZV9jdHgoc3RydWN0IHFsY25pY19hZGFwdGVyICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWxjbmljL3FsY25pY19jdHguYy02MzAtXFx0aWYgKGRldi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBRTENOSUNfTkVFRF9GTFIpIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWxjbmljL3FsY25pY19jdHguYzo2MzE6XFx0XFx0ZXJyID0gcGNpX3Jlc2V0X2Z1bmN0aW9uKGRldi1cXHUwMDNlcGRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FsY25pYy9xbGNuaWNfY3R4LmMtNjMyLVxcdFxcdGlmIChlcnIpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9tY2RpLmM9MTkwNj1pbnQgZWZ4X21jZGlfcmVzZXQoc3RydWN0IGVmeF9uaWMgKmVmeCwgZW51bSByZXNldF90eXBlIG1ldGhvZClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9tY2RpLmMtMTkxMS1cXHRpZiAobWV0aG9kID09IFJFU0VUX1RZUEVfTUNESV9USU1FT1VUKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL21jZGkuYzoxOTEyOlxcdFxcdHJjID0gcGNpX3Jlc2V0X2Z1bmN0aW9uKGVmeC1cXHUwMDNlcGNpX2Rldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL21jZGkuYy0xOTEzLVxcdFxcdGlmIChyYylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9zaWVuYS9tY2RpLmM9MTg2Nj1pbnQgZWZ4X3NpZW5hX21jZGlfcmVzZXQoc3RydWN0IGVmeF9uaWMgKmVmeCwgZW51bSByZXNldF90eXBlIG1ldGhvZClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9zaWVuYS9tY2RpLmMtMTg3MS1cXHRpZiAobWV0aG9kID09IFJFU0VUX1RZUEVfTUNESV9USU1FT1VUKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL3NpZW5hL21jZGkuYzoxODcyOlxcdFxcdHJjID0gcGNpX3Jlc2V0X2Z1bmN0aW9uKGVmeC1cXHUwMDNlcGNpX2Rldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL3NpZW5hL21jZGkuYy0xODczLVxcdFxcdGlmIChyYylcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvcGNpZS9nZW4xXzIvdHJhbnMuYz0yMTI2PXN0YXRpYyB2b2lkIGl3bF90cmFuc19wY2llX2NhbGxfcmVzZXQoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL3BjaWUvZ2VuMV8yL3RyYW5zLmMtMjE2OC1cXHRJV0xfREVCVUdfREVWX1BPV0VSKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9wY2llL2dlbjFfMi90cmFucy5jOjIxNjk6XFx0XFx0XFx0ICAgIFxcXCJObyBCSU9TIHN1cHBvcnQsIHVzaW5nIHBjaV9yZXNldF9mdW5jdGlvbigpXFxcXG5cXFwiKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL3BjaWUvZ2VuMV8yL3RyYW5zLmMtMjE3MC0jZW5kaWZcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL3BjaWUvZ2VuMV8yL3RyYW5zLmM6MjE3MTpcXHRwY2lfcmVzZXRfZnVuY3Rpb24ocGRldik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9wY2llL2dlbjFfMi90cmFucy5jLTIxNzItfVxcbi0tXFxuZHJpdmVycy9uZXQvd3dhbi90N3h4L3Q3eHhfbW9kZW1fb3BzLmM9MTQ1PXN0YXRpYyBpbnQgdDd4eF9hY3BpX3Jlc2V0KHN0cnVjdCB0N3h4X3BjaV9kZXYgKnQ3eHhfZGV2LCBjaGFyICpmbl9uYW1lKVxcbi0tXFxuZHJpdmVycy9uZXQvd3dhbi90N3h4L3Q3eHhfbW9kZW1fb3BzLmMtMTc0LVxcbmRyaXZlcnMvbmV0L3d3YW4vdDd4eC90N3h4X21vZGVtX29wcy5jOjE3NTpcXHRyZXQgPSBwY2lfcmVzZXRfZnVuY3Rpb24odDd4eF9kZXYtXFx1MDAzZXBkZXYpO1xcbmRyaXZlcnMvbmV0L3d3YW4vdDd4eC90N3h4X21vZGVtX29wcy5jLTE3Ni1cXHRpZiAocmV0KSB7XFxuLS1cXG5kcml2ZXJzL3BjaS9wY2ktc3lzZnMuYz0xNTU2PXN0YXRpYyBzc2l6ZV90IHJlc2V0X3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXFxuLS1cXG5kcml2ZXJzL3BjaS9wY2ktc3lzZnMuYy0xNTY5LVxcdHBtX3J1bnRpbWVfZ2V0X3N5bmMoZGV2KTtcXG5kcml2ZXJzL3BjaS9wY2ktc3lzZnMuYzoxNTcwOlxcdHJlc3VsdCA9IHBjaV9yZXNldF9mdW5jdGlvbihwZGV2KTtcXG5kcml2ZXJzL3BjaS9wY2ktc3lzZnMuYy0xNTcxLVxcdHBtX3J1bnRpbWVfcHV0KGRldik7XFxuLS1cXG5kcml2ZXJzL3BjaS9wY2kuYz01MTQ0PWNvbnN0IHN0cnVjdCBwY2lfcmVzZXRfZm5fbWV0aG9kIHBjaV9yZXNldF9mbl9tZXRob2RzW10gPSB7XFxuLS1cXG5kcml2ZXJzL3BjaS9wY2kuYy01MTU1LS8qKlxcbmRyaXZlcnMvcGNpL3BjaS5jOjUxNTY6ICogX19wY2lfcmVzZXRfZnVuY3Rpb25fbG9ja2VkIC0gcmVzZXQgYSBQQ0kgZGV2aWNlIGZ1bmN0aW9uIHdoaWxlIGhvbGRpbmdcXG5kcml2ZXJzL3BjaS9wY2kuYy01MTU3LSAqIHRoZSBAZGV2IG11dGV4IGxvY2suXFxuLS1cXG5kcml2ZXJzL3BjaS9wY2kuYy01MTc2LSAqL1xcbmRyaXZlcnMvcGNpL3BjaS5jOjUxNzc6aW50IF9fcGNpX3Jlc2V0X2Z1bmN0aW9uX2xvY2tlZChzdHJ1Y3QgcGNpX2RldiAqZGV2KVxcbmRyaXZlcnMvcGNpL3BjaS5jLTUxNzgte1xcbi0tXFxuZHJpdmVycy9wY2kvcGNpLmMtNTIxMC19XFxuZHJpdmVycy9wY2kvcGNpLmM6NTIxMTpFWFBPUlRfU1lNQk9MX0dQTChfX3BjaV9yZXNldF9mdW5jdGlvbl9sb2NrZWQpO1xcbmRyaXZlcnMvcGNpL3BjaS5jLTUyMTItXFxuLS1cXG5kcml2ZXJzL3BjaS9wY2kuYz01MjI1PXZvaWQgcGNpX2luaXRfcmVzZXRfbWV0aG9kcyhzdHJ1Y3QgcGNpX2RldiAqZGV2KVxcbi0tXFxuZHJpdmVycy9wY2kvcGNpLmMtNTI0NS0vKipcXG5kcml2ZXJzL3BjaS9wY2kuYzo1MjQ2OiAqIHBjaV9yZXNldF9mdW5jdGlvbiAtIHF1aWVzY2UgYW5kIHJlc2V0IGEgUENJIGRldmljZSBmdW5jdGlvblxcbmRyaXZlcnMvcGNpL3BjaS5jLTUyNDctICogQGRldjogUENJIGRldmljZSB0byByZXNldFxcbi0tXFxuZHJpdmVycy9wY2kvcGNpLmMtNTI1NC0gKiBjbGVhcnMgYWxsIHRoZSBzdGF0ZSBhc3NvY2lhdGVkIHdpdGggdGhlIGRldmljZS4gIFRoaXMgZnVuY3Rpb24gZGlmZmVyc1xcbmRyaXZlcnMvcGNpL3BjaS5jOjUyNTU6ICogZnJvbSBfX3BjaV9yZXNldF9mdW5jdGlvbl9sb2NrZWQoKSBpbiB0aGF0IGl0IHNhdmVzIGFuZCByZXN0b3JlcyBkZXZpY2Ugc3RhdGVcXG5kcml2ZXJzL3BjaS9wY2kuYy01MjU2LSAqIG92ZXIgdGhlIHJlc2V0IGFuZCB0YWtlcyB0aGUgUENJIGRldmljZSBsb2NrLlxcbi0tXFxuZHJpdmVycy9wY2kvcGNpLmMtNTI2MC0gKi9cXG5kcml2ZXJzL3BjaS9wY2kuYzo1MjYxOmludCBwY2lfcmVzZXRfZnVuY3Rpb24oc3RydWN0IHBjaV9kZXYgKmRldilcXG5kcml2ZXJzL3BjaS9wY2kuYy01MjYyLXtcXG4tLVxcbmRyaXZlcnMvcGNpL3BjaS5jLTUyNzktXFxuZHJpdmVycy9wY2kvcGNpLmM6NTI4MDpcXHRyYyA9IF9fcGNpX3Jlc2V0X2Z1bmN0aW9uX2xvY2tlZChkZXYpO1xcbmRyaXZlcnMvcGNpL3BjaS5jLTUyODEtXFxuLS1cXG5kcml2ZXJzL3BjaS9wY2kuYy01Mjg5LX1cXG5kcml2ZXJzL3BjaS9wY2kuYzo1MjkwOkVYUE9SVF9TWU1CT0xfR1BMKHBjaV9yZXNldF9mdW5jdGlvbik7XFxuZHJpdmVycy9wY2kvcGNpLmMtNTI5MS1cXG5kcml2ZXJzL3BjaS9wY2kuYy01MjkyLS8qKlxcbmRyaXZlcnMvcGNpL3BjaS5jOjUyOTM6ICogcGNpX3Jlc2V0X2Z1bmN0aW9uX2xvY2tlZCAtIHF1aWVzY2UgYW5kIHJlc2V0IGEgUENJIGRldmljZSBmdW5jdGlvblxcbmRyaXZlcnMvcGNpL3BjaS5jLTUyOTQtICogQGRldjogUENJIGRldmljZSB0byByZXNldFxcbi0tXFxuZHJpdmVycy9wY2kvcGNpLmMtNTMwMS0gKiBjbGVhcnMgYWxsIHRoZSBzdGF0ZSBhc3NvY2lhdGVkIHdpdGggdGhlIGRldmljZS4gIFRoaXMgZnVuY3Rpb24gZGlmZmVyc1xcbmRyaXZlcnMvcGNpL3BjaS5jOjUzMDI6ICogZnJvbSBfX3BjaV9yZXNldF9mdW5jdGlvbl9sb2NrZWQoKSBpbiB0aGF0IGl0IHNhdmVzIGFuZCByZXN0b3JlcyBkZXZpY2Ugc3RhdGVcXG5kcml2ZXJzL3BjaS9wY2kuYzo1MzAzOiAqIG92ZXIgdGhlIHJlc2V0LiAgSXQgYWxzbyBkaWZmZXJzIGZyb20gcGNpX3Jlc2V0X2Z1bmN0aW9uKCkgaW4gdGhhdCBpdFxcbmRyaXZlcnMvcGNpL3BjaS5jLTUzMDQtICogcmVxdWlyZXMgdGhlIFBDSSBkZXZpY2UgbG9jayB0byBiZSBoZWxkLlxcbi0tXFxuZHJpdmVycy9wY2kvcGNpLmMtNTMxMC0gKi9cXG5kcml2ZXJzL3BjaS9wY2kuYzo1MzExOmludCBwY2lfcmVzZXRfZnVuY3Rpb25fbG9ja2VkKHN0cnVjdCBwY2lfZGV2ICpkZXYpXFxuZHJpdmVycy9wY2kvcGNpLmMtNTMxMi17XFxuLS1cXG5kcml2ZXJzL3BjaS9wY2kuYy01MzIxLVxcbmRyaXZlcnMvcGNpL3BjaS5jOjUzMjI6XFx0cmMgPSBfX3BjaV9yZXNldF9mdW5jdGlvbl9sb2NrZWQoZGV2KTtcXG5kcml2ZXJzL3BjaS9wY2kuYy01MzIzLVxcbi0tXFxuZHJpdmVycy9wY2kvcGNpLmMtNTMyNy19XFxuZHJpdmVycy9wY2kvcGNpLmM6NTMyODpFWFBPUlRfU1lNQk9MX0dQTChwY2lfcmVzZXRfZnVuY3Rpb25fbG9ja2VkKTtcXG5kcml2ZXJzL3BjaS9wY2kuYy01MzI5LVxcbi0tXFxuZHJpdmVycy9wY2kvcGNpLmM9NTMzNj1pbnQgcGNpX3RyeV9yZXNldF9mdW5jdGlvbihzdHJ1Y3QgcGNpX2RldiAqZGV2KVxcbi0tXFxuZHJpdmVycy9wY2kvcGNpLmMtNTM0Ni1cXHRwY2lfZGV2X3NhdmVfYW5kX2Rpc2FibGUoZGV2KTtcXG5kcml2ZXJzL3BjaS9wY2kuYzo1MzQ3OlxcdHJjID0gX19wY2lfcmVzZXRfZnVuY3Rpb25fbG9ja2VkKGRldik7XFxuZHJpdmVycy9wY2kvcGNpLmMtNTM0OC1cXHRwY2lfZGV2X3Jlc3RvcmUoZGV2KTtcXG4tLVxcbmRyaXZlcnMvcGNpL3F1aXJrcy5jPTM4MTQ9c3RhdGljIHZvaWQgcXVpcmtfbm9fcG1fcmVzZXQoc3RydWN0IHBjaV9kZXYgKmRldilcXG4tLVxcbmRyaXZlcnMvcGNpL3F1aXJrcy5jLTM4MjgtICogbW9uaXRvciBzeW5jLiAgQWR2ZXJ0aXNpbmcgdGhpcyBzdXBwb3J0IG1ha2VzIG90aGVyIGxheWVycywgbGlrZSBWRklPLFxcbmRyaXZlcnMvcGNpL3F1aXJrcy5jOjM4Mjk6ICogYXNzdW1lIHBjaV9yZXNldF9mdW5jdGlvbigpIGlzIHZpYWJsZSBmb3IgdGhpcyBkZXZpY2UuICBNYXJrIGl0IGFzXFxuZHJpdmVycy9wY2kvcXVpcmtzLmMtMzgzMC0gKiB1bmF2YWlsYWJsZSB0byBza2lwIGl0IHdoZW4gdGVzdGluZyByZXNldCBtZXRob2RzLlxcbi0tXFxuZHJpdmVycy9wY2kvcXVpcmtzLmM9NDAwNT1zdGF0aWMgaW50IHJlc2V0X2NoZWxzaW9fZ2VuZXJpY19kZXYoc3RydWN0IHBjaV9kZXYgKmRldiwgYm9vbCBwcm9iZSlcXG4tLVxcbmRyaXZlcnMvcGNpL3F1aXJrcy5jLTQwMjctXFx0ICogTGV2ZWwgUmVzZXQgY29tcGxldGVzLiAgKEJVU19NQVNURVIgaXMgZGlzYWJsZWQgaW5cXG5kcml2ZXJzL3BjaS9xdWlya3MuYzo0MDI4OlxcdCAqIHBjaV9yZXNldF9mdW5jdGlvbigpKS5cXG5kcml2ZXJzL3BjaS9xdWlya3MuYy00MDI5LVxcdCAqL1xcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmM9NjgzPXZvaWQgdmZpb19wY2lfY29yZV9kaXNhYmxlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldilcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTcwNy1cXHQvKlxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jOjcwODpcXHQgKiBUaGlzIGZ1bmN0aW9uIGNhbGxzIF9fcGNpX3Jlc2V0X2Z1bmN0aW9uX2xvY2tlZCgpIHdoaWNoIGludGVybmFsbHlcXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy03MDktXFx0ICogY2FuIHVzZSBwY2lfcG1fcmVzZXQoKSBmb3IgdGhlIGZ1bmN0aW9uIHJlc2V0LiBwY2lfcG1fcmVzZXQoKSB3aWxsXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy03ODAtXFx0ICogRGlzYWJsZSBJTlR4IGFuZCBNU0ksIHByZXN1bWFibHkgdG8gYXZvaWQgc3B1cmlvdXMgaW50ZXJydXB0c1xcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jOjc4MTpcXHQgKiBkdXJpbmcgcmVzZXQuICBTdG9sZW4gZnJvbSBwY2lfcmVzZXRfZnVuY3Rpb24oKVxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTc4Mi1cXHQgKi9cXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTc5Ni1cXHRcXHRpZiAocGNpX2Rldl90cnlsb2NrKHBkZXYpKSB7XFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmM6Nzk3OlxcdFxcdFxcdGlmICghX19wY2lfcmVzZXRfZnVuY3Rpb25fbG9ja2VkKHBkZXYpKVxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTc5OC1cXHRcXHRcXHRcXHR2ZGV2LVxcdTAwM2VuZWVkc19yZXNldCA9IGZhbHNlO1xcbi0tXFxuZHJpdmVycy94ZW4veGVuLXBjaWJhY2svcGNpX3N0dWIuYz0xMDE9c3RhdGljIGludCBwY2lzdHViX3Jlc2V0X2RldmljZV9zdGF0ZShzdHJ1Y3QgcGNpX2RldiAqZGV2KVxcbmRyaXZlcnMveGVuL3hlbi1wY2liYWNrL3BjaV9zdHViLmMtMTAyLXtcXG5kcml2ZXJzL3hlbi94ZW4tcGNpYmFjay9wY2lfc3R1Yi5jOjEwMzpcXHRfX3BjaV9yZXNldF9mdW5jdGlvbl9sb2NrZWQoZGV2KTtcXG5kcml2ZXJzL3hlbi94ZW4tcGNpYmFjay9wY2lfc3R1Yi5jLTEwNC1cXG4tLVxcbmRyaXZlcnMveGVuL3hlbi1wY2liYWNrL3BjaV9zdHViLmM9NjAxPXN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciB4ZW5fcGNpYmtfcGNpX2RyaXZlcjtcXG5kcml2ZXJzL3hlbi94ZW4tcGNpYmFjay9wY2lfc3R1Yi5jLTYwMi1cXG5kcml2ZXJzL3hlbi94ZW4tcGNpYmFjay9wY2lfc3R1Yi5jOjYwMzovKiBDYWxsZWQgd2hlbiAnYmluZCcuIFRoaXMgbWVhbnMgd2UgbXVzdCBfTk9UXyBjYWxsIHBjaV9yZXNldF9mdW5jdGlvbiBvclxcbmRyaXZlcnMveGVuL3hlbi1wY2liYWNrL3BjaV9zdHViLmMtNjA0LSAqIG90aGVyIGZ1bmN0aW9ucyB0aGF0IHRha2UgdGhlIHN5c2ZzIGxvY2suICovXFxuZHJpdmVycy94ZW4veGVuLXBjaWJhY2svcGNpX3N0dWIuYz02MDU9c3RhdGljIGludCBwY2lzdHViX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcXG4tLVxcbmRyaXZlcnMveGVuL3hlbi1wY2liYWNrL3BjaV9zdHViLmMtNjQ0LVxcbmRyaXZlcnMveGVuL3hlbi1wY2liYWNrL3BjaV9zdHViLmM6NjQ1Oi8qIENhbGxlZCB3aGVuICd1bmJpbmQnLiBUaGlzIG1lYW5zIHdlIG11c3QgX05PVF8gY2FsbCBwY2lfcmVzZXRfZnVuY3Rpb24gb3JcXG5kcml2ZXJzL3hlbi94ZW4tcGNpYmFjay9wY2lfc3R1Yi5jLTY0Ni0gKiBvdGhlciBmdW5jdGlvbnMgdGhhdCB0YWtlIHRoZSBzeXNmcyBsb2NrLiAqL1xcbi0tXFxuaW5jbHVkZS9saW51eC9wY2kuaD0xNDgzPWludCBwY2llX2ZscihzdHJ1Y3QgcGNpX2RldiAqZGV2KTtcXG5pbmNsdWRlL2xpbnV4L3BjaS5oOjE0ODQ6aW50IF9fcGNpX3Jlc2V0X2Z1bmN0aW9uX2xvY2tlZChzdHJ1Y3QgcGNpX2RldiAqZGV2KTtcXG5pbmNsdWRlL2xpbnV4L3BjaS5oOjE0ODU6aW50IHBjaV9yZXNldF9mdW5jdGlvbihzdHJ1Y3QgcGNpX2RldiAqZGV2KTtcXG5pbmNsdWRlL2xpbnV4L3BjaS5oOjE0ODY6aW50IHBjaV9yZXNldF9mdW5jdGlvbl9sb2NrZWQoc3RydWN0IHBjaV9kZXYgKmRldik7XFxuaW5jbHVkZS9saW51eC9wY2kuaC0xNDg3LWludCBwY2lfdHJ5X3Jlc2V0X2Z1bmN0aW9uKHN0cnVjdCBwY2lfZGV2ICpkZXYpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwOTowODo1Mi45MDUwOTU3MDlaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NTIzMzAxNjIzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgdGhlIFBDSSBSZXNldCBGdW5jdGlvbmFsaXR5KipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byBob3cgUENJIGRldmljZSByZXNldHMgYXJlIGhhbmRsZWQsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGtlcm5lbC4gSSd2ZSBiZWVuIGRpcmVjdGVkIHRvIGBkcml2ZXJzL3BjaS9wY2ktc3lzZnMuY2AgYW5kIGZvdW5kIHRoaXMgc25pcHBldDpcblxuYGBgY1xuc3RhdGljIHNzaXplX3QgcmVzZXRfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbi4uLlxuXHRwbV9ydW50aW1lX2dldF9zeW5jKGRldik7XG5cdHJlc3VsdCA9IHBjaV9yZXNldF9mdW5jdGlvbihwZGV2KTtcblx0cG1fcnVudGltZV9wdXQoZGV2KTtcbmBgYFxuXG5NeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJSaWdodCwgYHBtX3J1bnRpbWVfZ2V0X3N5bmNgIGFuZCBgcG1fcnVudGltZV9wdXRgIGFyZSBjbGVhcmx5IG1hbmFnaW5nIHBvd2VyIHN0YXRlcywgbWFraW5nIHN1cmUgdGhlIGRldmljZSBpcyBhY3RpdmUgZm9yIHRoZSByZXNldCBvcGVyYXRpb24uXCIgQnV0IHRoZSBjb3JlIG9mIHRoZSBtYXR0ZXIgaXMgYHBjaV9yZXNldF9mdW5jdGlvbihwZGV2KWAuIFRoYXQncyB3aGVyZSB0aGUgKmFjdHVhbCogcmVzZXQgbG9naWMgbGllcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGF0IGZ1bmN0aW9uIGlzIGRvaW5nLlxuXG5UaGVyZWZvcmUsIEknbGwgbm93IGhhdmUgdG8gY3Jvc3MtcmVmZXJlbmNlIGBkcml2ZXJzL3BjaS9wY2kuY2AgYW5kIGp1bXAgdG8gdGhlIHZpY2luaXR5IG9mIGxpbmVzIDUyNjEgYW5kIDUwOTQgdG8gc2VlIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIGZvciBgcGNpX3Jlc2V0X2Z1bmN0aW9uYC4gSSBjYW4gaW1hZ2luZSB0aGVyZSBhcmUgZGV2aWNlLXNwZWNpZmljIGNoZWNrcyBmb3IgcmVzZXQgY2FwYWJpbGl0aWVzLCBoYW5kbGluZyBvZiBkaWZmZXJlbnQgcmVzZXQgbWV0aG9kcywgcGVyaGFwcyBzb21lIGNvbmZpZ3VyYXRpb24gb2YgdGhlIFBDSSBjb25maWd1cmF0aW9uIHNwYWNlLCBhbmQgZXJyb3IgY2hlY2tpbmcuIFVuZGVyc3RhbmRpbmcgdGhlIGZsb3cgdGhlcmUgaXMgY3J1Y2lhbCB0byBwcm9wZXJseSBhc3Nlc3MgdGhlIG92ZXJhbGwgcmVzZXQgcHJvY2VkdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDkyNSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwOTowODo1OC4xMzgxMTU2OVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjczMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9wY2kvcGNpLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTA4OCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNTA4ODpcXHRzdGF0aWMgdm9pZCBwY2lfZGV2X3NhdmVfYW5kX2Rpc2FibGUoc3RydWN0IHBjaV9kZXYgKmRldilcXG41MDg5OlxcdHtcXG41MDkwOlxcdFxcdGNvbnN0IHN0cnVjdCBwY2lfZXJyb3JfaGFuZGxlcnMgKmVycl9oYW5kbGVyID1cXG41MDkxOlxcdFxcdFxcdFxcdGRldi1cXHUwMDNlZHJpdmVyID8gZGV2LVxcdTAwM2Vkcml2ZXItXFx1MDAzZWVycl9oYW5kbGVyIDogTlVMTDtcXG41MDkyOlxcdFxcbjUwOTM6XFx0XFx0LypcXG41MDk0OlxcdFxcdCAqIGRldi1cXHUwMDNlZHJpdmVyLVxcdTAwM2VlcnJfaGFuZGxlci1cXHUwMDNlcmVzZXRfcHJlcGFyZSgpIGlzIHByb3RlY3RlZCBhZ2FpbnN0XFxuNTA5NTpcXHRcXHQgKiByYWNlcyB3aXRoIC1cXHUwMDNlcmVtb3ZlKCkgYnkgdGhlIGRldmljZSBsb2NrLCB3aGljaCBtdXN0IGJlIGhlbGQgYnlcXG41MDk2OlxcdFxcdCAqIHRoZSBjYWxsZXIuXFxuNTA5NzpcXHRcXHQgKi9cXG41MDk4OlxcdFxcdGRldmljZV9sb2NrX2Fzc2VydChcXHUwMDI2ZGV2LVxcdTAwM2VkZXYpO1xcbjUwOTk6XFx0XFx0aWYgKGVycl9oYW5kbGVyIFxcdTAwMjZcXHUwMDI2IGVycl9oYW5kbGVyLVxcdTAwM2VyZXNldF9wcmVwYXJlKVxcbjUxMDA6XFx0XFx0XFx0ZXJyX2hhbmRsZXItXFx1MDAzZXJlc2V0X3ByZXBhcmUoZGV2KTtcXG41MTAxOlxcdFxcdGVsc2UgaWYgKGRldi1cXHUwMDNlZHJpdmVyKVxcbjUxMDI6XFx0XFx0XFx0cGNpX3dhcm4oZGV2LCBcXFwicmVzZXR0aW5nXFxcIik7XFxuNTEwMzpcXHRcXG41MTA0OlxcdFxcdC8qXFxuNTEwNTpcXHRcXHQgKiBXYWtlLXVwIGRldmljZSBwcmlvciB0byBzYXZlLiAgUE0gcmVnaXN0ZXJzIGRlZmF1bHQgdG8gRDAgYWZ0ZXJcXG41MTA2OlxcdFxcdCAqIHJlc2V0IGFuZCBhIHNpbXBsZSByZWdpc3RlciByZXN0b3JlIGRvZXNuJ3QgcmVsaWFibHkgcmV0dXJuXFxuNTEwNzpcXHRcXHQgKiB0byBhIG5vbi1EMCBzdGF0ZSBhbnl3YXkuXFxuNTEwODpcXHRcXHQgKi9cXG41MTA5OlxcdFxcdHBjaV9zZXRfcG93ZXJfc3RhdGUoZGV2LCBQQ0lfRDApO1xcbjUxMTA6XFx0XFxuNTExMTpcXHRcXHRpZiAoIXBjaV9kZXZfY29uZmlnX2FjY2Vzc2libGUoZGV2LCBcXFwic2F2ZSBzdGF0ZVxcXCIpKVxcbjUxMTI6XFx0XFx0XFx0cmV0dXJuO1xcbjUxMTM6XFx0XFxuNTExNDpcXHRcXHRwY2lfc2F2ZV9zdGF0ZShkZXYpO1xcbjUxMTU6XFx0XFx0LypcXG41MTE2OlxcdFxcdCAqIERpc2FibGUgdGhlIGRldmljZSBieSBjbGVhcmluZyB0aGUgQ29tbWFuZCByZWdpc3RlciwgZXhjZXB0IGZvclxcbjUxMTc6XFx0XFx0ICogSU5UeC1kaXNhYmxlIHdoaWNoIGlzIHNldC4gIFRoaXMgbm90IG9ubHkgZGlzYWJsZXMgTU1JTyBhbmQgSS9PIHBvcnRcXG41MTE4OlxcdFxcdCAqIEJBUnMsIGJ1dCBhbHNvIHByZXZlbnRzIHRoZSBkZXZpY2UgZnJvbSBiZWluZyBCdXMgTWFzdGVyLCBwcmV2ZW50aW5nXFxuNTExOTpcXHRcXHQgKiBETUEgZnJvbSB0aGUgZGV2aWNlIGluY2x1ZGluZyBNU0kvTVNJLVggaW50ZXJydXB0cy4gIEZvciBQQ0kgMi4zXFxuNTEyMDpcXHRcXHQgKiBjb21wbGlhbnQgZGV2aWNlcywgSU5UeC1kaXNhYmxlIHByZXZlbnRzIGxlZ2FjeSBpbnRlcnJ1cHRzLlxcbjUxMjE6XFx0XFx0ICovXFxuNTEyMjpcXHRcXHRwY2lfd3JpdGVfY29uZmlnX3dvcmQoZGV2LCBQQ0lfQ09NTUFORCwgUENJX0NPTU1BTkRfSU5UWF9ESVNBQkxFKTtcXG41MTIzOlxcdH1cXG41MTI0OlxcdFxcbjUxMjU6XFx0c3RhdGljIHZvaWQgcGNpX2Rldl9yZXN0b3JlKHN0cnVjdCBwY2lfZGV2ICpkZXYpXFxuNTEyNjpcXHR7XFxuNTEyNzpcXHRcXHRjb25zdCBzdHJ1Y3QgcGNpX2Vycm9yX2hhbmRsZXJzICplcnJfaGFuZGxlciA9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDA5OjA4OjU4LjEzODM4NTI4WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjU5NTA3NjAwNTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgYSBQb3RlbnRpYWwgVnVsbmVyYWJpbGl0eSBpbiBWaXJ0aW8gQmxvY2sgRGV2aWNlIFJlc2V0KipcblxuT2theSwgc28gaGVyZSdzIHdoYXQgSSdtIHRoaW5raW5nOiBgcGNpX2Rldl9zYXZlX2FuZF9kaXNhYmxlYCB0cmlnZ2VycyBgZXJyX2hhbmRsZXItXHUwMDNlcmVzZXRfcHJlcGFyZShkZXYpYC4gTG9va2luZyBhdCB0aGUgVmlydGlvIFBDSSBkcml2ZXIgKGBkcml2ZXJzL3ZpcnRpby92aXJ0aW9fcGNpX2NvbW1vbi5jYCksIHRoYXQgdHJhbnNsYXRlcyB0byBgdmlydGlvX3BjaV9yZXNldF9wcmVwYXJlYCwgd2hpY2ggaW4gdHVybiBjYWxscyBgdmlydGlvX2RldmljZV9yZXNldF9wcmVwYXJlYC4gVGhpcyBldmVudHVhbGx5IGxlYWRzIHRvIGEgZHJpdmVyLXNwZWNpZmljIGByZXNldF9wcmVwYXJlYCBmdW5jdGlvbiwgd2hpY2gsIGZvciBgdmlydGlvX2Jsa2AsIGlzIGB2aXJ0YmxrX3Jlc2V0X3ByZXBhcmVgLCBhbmQgdGhhdCBjYWxscyBgdmlydGJsa19mcmVlemVfcHJpdmAuXG5cbk5vdywgaGVyZSdzIHRoZSBraWNrZXI6IGB2aXJ0aW9fYmxrYCBpcyBhIHN0YW5kYXJkIHZpcnRpbyBkZXZpY2UsIGFuZCBhbG1vc3QgZXZlcnkgUUVNVSBWTSBydW5uaW5nIHN5emthbGxlciB1c2VzIGl0IGZvciBpdHMgcm9vdCBvciBhZGRpdGlvbmFsIGRpc2tzLiBUaGlzIG1lYW5zIGAvc3lzL2J1cy9wY2kvZGV2aWNlcy8uLi4vcmVzZXRgIGlzIGxpa2VseSBhY2Nlc3NpYmxlIHRvIHJvb3QgKGFuZCB0aHVzLCBzeXprYWxsZXIpIGluIHRoZSBWTSBpZiB2aXJ0aW8tcGNpIGlzIGluIHVzZS4gQWx0ZXJuYXRpdmVseSwgcG93ZXIgbWFuYWdlbWVudCBzdXNwZW5kL3Jlc3VtZSAoYC9zeXMvcG93ZXIvc3RhdGVgKSBjYW4gYWxzbyB0cmlnZ2VyIHRoZSBzYW1lIGNvZGUgcGF0aCwgYHZpcnRibGtfZnJlZXplX3ByaXZgLlxuXG5UaGUgbWlsbGlvbi1kb2xsYXIgcXVlc3Rpb246IGlzIHRoaXMgY29kZSByZWFjaGFibGU/IFllcyEgVmlydGlvIGJsb2NrIGRldmljZXMgYXJlIGVtdWxhdGVkIGJ5IFFFTVUsIG1ha2luZyBpdCBhIHZpYWJsZSB0YXJnZXQuIEdpdmVuIHRoYXQgdGhlIGNyaXRlcmlhIEkgd2FzIHJldmlld2luZyBpbmNsdWRlIGRyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcywgdGhpcyBzZWVtcyB0byBmaXQgcGVyZmVjdGx5LiBTZWN0aW9uIDMgZXhwbGljaXRseSBoaWdobGlnaHRzIHRoaXMgYXMgYW4gYXJlYSBvZiBjb25jZXJuLlxuXG5Ob3cgSSBuZWVkIHRvIGNsYXJpZnk6IGlzIGB2aXJ0YmxrX2ZyZWV6ZV9wcml2YCBhIHRlYXJkb3duIGNhbGxiYWNrPyBObywgaXQncyBjYWxsZWQgZHVyaW5nIGByZXNldF9wcmVwYXJlYCAoYSBQQ0kgZGV2aWNlIHJlc2V0KSBhbmQgZHVyaW5nIFBNIGZyZWV6ZSAocG93ZXIgbWFuYWdlbWVudCBzdXNwZW5kKSwgbm90IGR1cmluZyBgcmVtb3ZlYCwgb3IgaG90LXVucGx1Zy4gSXTigJlzIGltcG9ydGFudCB0byBjbGFyaWZ5IHRoYXQgdGhpcyBpc27igJl0IGEgaG90cGx1ZyBvciBtYW51YWwgdW5iaW5kaW5nLiBJdCdzIGFjdHVhbGx5IGEgcmVzZXQuIEkgc2hvdWxkIHByb2JhYmx5IGFsc28gY2hlY2sgYHZpcnRibGtfcmVtb3ZlYCBqdXN0IHRvIGJlIGNvbXBsZXRlbHkgc3VyZSB0aGVyZSBpc24ndCBzb21lIGNyb3Nzb3ZlciBvciBhY2NpZGVudGFsIHNoYXJpbmcgb2YgY29kZS4gQnV0LCBiYXNlZCBvbiB0aGUgY3VycmVudCBjb250ZXh0LCB0aGlzIGxvb2tzIGxpa2UgYSB2YWxpZCBhdHRhY2sgdmVjdG9yIHdvcnRoIGV4cGxvcmluZyBmdXJ0aGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjA0NywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU2OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDA5OjA5OjA0LjA4OTE0NzU5M1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc3NDYzNDQzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZpcnRibGtfcmVtb3ZlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jPTU1PXN0cnVjdCB2aXJ0aW9fYmxrIHtcXG4tLVxcbmRyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jLTU3LVxcdCAqIFRoaXMgbXV0ZXggbXVzdCBiZSBoZWxkIGJ5IGFueXRoaW5nIHRoYXQgbWF5IHJ1biBhZnRlclxcbmRyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jOjU4OlxcdCAqIHZpcnRibGtfcmVtb3ZlKCkgc2V0cyB2YmxrLVxcdTAwM2V2ZGV2IHRvIE5VTEwuXFxuZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmMtNTktXFx0ICpcXG4tLVxcbmRyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jPTE0Mzg9c3RhdGljIGludCB2aXJ0YmxrX3Byb2JlKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KVxcbi0tXFxuZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmMtMTU2My1cXG5kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYzoxNTY0OnN0YXRpYyB2b2lkIHZpcnRibGtfcmVtb3ZlKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KVxcbmRyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jLTE1NjUte1xcbi0tXFxuZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmM9MTY3Nz1zdGF0aWMgc3RydWN0IHZpcnRpb19kcml2ZXIgdmlydGlvX2JsayA9IHtcXG4tLVxcbmRyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jLTE2ODQtXFx0LnByb2JlXFx0XFx0XFx0XFx0PSB2aXJ0YmxrX3Byb2JlLFxcbmRyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jOjE2ODU6XFx0LnJlbW92ZVxcdFxcdFxcdFxcdD0gdmlydGJsa19yZW1vdmUsXFxuZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmMtMTY4Ni1cXHQuY29uZmlnX2NoYW5nZWRcXHRcXHRcXHQ9IHZpcnRibGtfY29uZmlnX2NoYW5nZWQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDA5OjA5OjA0LjI2NjYxODI3NloiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMzE2OTEyODQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHZpcnRibGtfcmVtb3ZlKipcblxuQWxyaWdodCwgbGV0J3MgcHVsbCB1cCBgZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmNgIGFuZCB6ZXJvIGluIG9uIHRoZSBgdmlydGJsa19yZW1vdmVgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMTU2NC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBkZXZpY2UgcmVtb3ZhbCBwYXRoLiBUaGlzIGlzIGxpa2VseSB0aGUgY3J1Y2lhbCBwb2ludCB3aGVyZSB0aGUgdmlydGlvLWJsayBkZXZpY2UgaXMgZ3JhY2VmdWxseSBkZXRhY2hlZCBmcm9tIHRoZSBzeXN0ZW0uIEknbSBleHBlY3RpbmcgdG8gc2VlIHJlc291cmNlIGNsZWFudXA6IGZyZWVpbmcgYWxsb2NhdGVkIG1lbW9yeSAobGlrZSB0aGUgcmVxdWVzdCBxdWV1ZXMpLCBkZS1yZWdpc3RlcmluZyB0aGUgYmxvY2sgZGV2aWNlLCBwb3RlbnRpYWxseSBoYW5kbGluZyBwZW5kaW5nIEkvTywgYW5kIG1heWJlIGV2ZW4gZGlzYWJsaW5nIGludGVycnVwdHMgYXNzb2NpYXRlZCB3aXRoIHRoZSBkZXZpY2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGZ1bmN0aW9uIGNvb3JkaW5hdGVzIHdpdGggdGhlIG90aGVyIHBhcnRzIG9mIHRoZSB2aXJ0aW8tYmxrIGRyaXZlciBkdXJpbmcgc2h1dGRvd24sIGFuZCBob3cgaXQgYXZvaWRzIHJhY2UgY29uZGl0aW9ucyB3aXRoIG9uZ29pbmcgSS9PIG9wZXJhdGlvbnMuIExldCdzIHNlZSBob3cgdGhlIGRyaXZlciBoYW5kbGVzIHBvdGVudGlhbGx5IGNvbmN1cnJlbnQgcmVxdWVzdHMgYXMgaXQgdW5sb2Fkcy4gU3BlY2lmaWNhbGx5LCBJJ20gbG9va2luZyBmb3IgdGhlIHVzZSBvZiBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcyB0byBwcm90ZWN0IHNoYXJlZCBkYXRhIHN0cnVjdHVyZXMgYW5kIGVuc3VyZSBhIGNsZWFuIHRlYXJkb3duLiBJIGFudGljaXBhdGUgdGhpcyBmdW5jdGlvbiB3aWxsIGRvIGl0cyBkdWUgZGlsaWdlbmNlIHRvIHByZXZlbnQgZGF0YSBjb3JydXB0aW9uLiBJJ20gY3VyaW91cyBhYm91dCB0aGUgc3BlY2lmaWMgb3JkZXIgb2Ygb3BlcmF0aW9ucyDigJMgaXQncyBjcnVjaWFsIGZvciB0aGUgY29ycmVjdCBzaHV0ZG93biBvZiB0aGUgc3Vic3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzQ0MiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDA5OjA5OjA2LjU4MzUzMzcyM1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDI0NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTU2MCxcbiAgXCJMaW5lQ291bnRcIjogMzVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTU2MDpcXHRvdXQ6XFxuMTU2MTpcXHRcXHRyZXR1cm4gZXJyO1xcbjE1NjI6XFx0fVxcbjE1NjM6XFx0XFxuMTU2NDpcXHRzdGF0aWMgdm9pZCB2aXJ0YmxrX3JlbW92ZShzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldilcXG4xNTY1OlxcdHtcXG4xNTY2OlxcdFxcdHN0cnVjdCB2aXJ0aW9fYmxrICp2YmxrID0gdmRldi1cXHUwMDNlcHJpdjtcXG4xNTY3OlxcdFxcbjE1Njg6XFx0XFx0LyogTWFrZSBzdXJlIG5vIHdvcmsgaGFuZGxlciBpcyBhY2Nlc3NpbmcgdGhlIGRldmljZS4gKi9cXG4xNTY5OlxcdFxcdGZsdXNoX3dvcmsoXFx1MDAyNnZibGstXFx1MDAzZWNvbmZpZ193b3JrKTtcXG4xNTcwOlxcdFxcbjE1NzE6XFx0XFx0ZGVsX2dlbmRpc2sodmJsay1cXHUwMDNlZGlzayk7XFxuMTU3MjpcXHRcXHRibGtfbXFfZnJlZV90YWdfc2V0KFxcdTAwMjZ2YmxrLVxcdTAwM2V0YWdfc2V0KTtcXG4xNTczOlxcdFxcbjE1NzQ6XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2dmJsay1cXHUwMDNldmRldl9tdXRleCk7XFxuMTU3NTpcXHRcXG4xNTc2OlxcdFxcdC8qIFN0b3AgYWxsIHRoZSB2aXJ0cXVldWVzLiAqL1xcbjE1Nzc6XFx0XFx0dmlydGlvX3Jlc2V0X2RldmljZSh2ZGV2KTtcXG4xNTc4OlxcdFxcbjE1Nzk6XFx0XFx0LyogVmlydHF1ZXVlcyBhcmUgc3RvcHBlZCwgbm90aGluZyBjYW4gdXNlIHZibGstXFx1MDAzZXZkZXYgYW55bW9yZS4gKi9cXG4xNTgwOlxcdFxcdHZibGstXFx1MDAzZXZkZXYgPSBOVUxMO1xcbjE1ODE6XFx0XFxuMTU4MjpcXHRcXHR2ZGV2LVxcdTAwM2Vjb25maWctXFx1MDAzZWRlbF92cXModmRldik7XFxuMTU4MzpcXHRcXHRrZnJlZSh2YmxrLVxcdTAwM2V2cXMpO1xcbjE1ODQ6XFx0XFxuMTU4NTpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNnZibGstXFx1MDAzZXZkZXZfbXV0ZXgpO1xcbjE1ODY6XFx0XFxuMTU4NzpcXHRcXHRwdXRfZGlzayh2YmxrLVxcdTAwM2VkaXNrKTtcXG4xNTg4OlxcdH1cXG4xNTg5OlxcdFxcbjE1OTA6XFx0c3RhdGljIGludCB2aXJ0YmxrX2ZyZWV6ZV9wcml2KHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KVxcbjE1OTE6XFx0e1xcbjE1OTI6XFx0XFx0c3RydWN0IHZpcnRpb19ibGsgKnZibGsgPSB2ZGV2LVxcdTAwM2Vwcml2O1xcbjE1OTM6XFx0XFx0c3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSB2YmxrLVxcdTAwM2VkaXNrLVxcdTAwM2VxdWV1ZTtcXG4xNTk0OlxcdFxcdHVuc2lnbmVkIGludCBtZW1mbGFncztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDk6MDk6MDYuNTgzNjM4MTIzWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQxMTY4ODA5NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBgdmlydGJsa19mcmVlemVfcHJpdmAgYW5kIFBvdGVudGlhbCBRdWllc2NlIElzc3VlcyoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBgdmlydGJsa19mcmVlemVfcHJpdmAgZnVuY3Rpb24sIGFuZCBpdCBzZWVtcyBsaWtlIEkgaGF2ZSBzb21lIGluY29ycmVjdCBhc3N1bXB0aW9ucy4gVGhlIGRvY3VtZW50YXRpb24gc3RhdGVzIHRoYXQgaXQncyAqbm90KiBjYWxsZWQgYnkgYHZpcnRibGtfcmVtb3ZlYCwgd2hpY2ggaXMgZ29vZCB0byBjbGFyaWZ5LCBidXQgaXQgKmlzKiBjYWxsZWQgYnkgYHZpcnRibGtfZnJlZXplYCBhbmQgYHZpcnRibGtfcmVzZXRfcHJlcGFyZWAuIFRoYXQncyBpbXBvcnRhbnQgdG8ga2VlcCBpbiBtaW5kLlxuXG5Ob3csIG15IHJlYWwgY29uY2VybiBpcyB0aGlzIGFwcGFyZW50IGNoYW5nZSBmcm9tIHVzaW5nIGBibGtfbXFfcXVpZXNjZV9xdWV1ZV9ub3dhaXRgIHRvIGBibGtfbXFfcXVpZXNjZV9xdWV1ZWAgd2l0aGluIHRoYXQgZnVuY3Rpb24uIEkgaW1tZWRpYXRlbHkgc2VlIHRoZSBwb3RlbnRpYWwgZm9yIHByb2JsZW1zIGhlcmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoaXMgc2hpZnQgaW4gcXVpZXNjZSBtZXRob2RzIGNvdWxkIGludHJvZHVjZSBkZWFkbG9ja3Mgb3Igb3RoZXIgaXNzdWVzIGluIHRoZSBibG9jayBJL08gbGF5ZXIsIHdoaWNoIGlzIG15IG1haW4gYXJlYSBvZiBmb2N1cy5cblxuTGV0IG1lIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgdmlydGJsa19mcmVlemVfcHJpdmAncyBpbXBsZW1lbnRhdGlvbjogdGhlIGNvZGUgc25pcHBldCBjb25maXJtcyBteSBpbnRlcmVzdCBpbiB0aGlzIGFyZWE6XG5cbmBgYGNcblx0LyogRW5zdXJlIG5vIHJlcXVlc3RzIGluIHZpcnRxdWV1ZXMgYmVmb3JlIGRlbGV0aW5nIHZxcy4gKi9cblx0bWVtZmxhZ3MgPSBibGtfbXFfZnJlZXplX3F1ZXVlKHEpO1xuXHRibGtfbXFfcXVpZXNjZV9xdWV1ZShxKTtcblx0YmxrX21xX3VuZnJlZXplX3F1ZXVlKHEsIG1lbWZsYWdzKTtcbmBgYFxuXG5IZXJlIGl0J3MgY2xlYXI6IHdlIGZyZWV6ZSwgcXVpZXNjZSwgdGhlbiB1bmZyZWV6ZSB0aGUgcXVldWUuIEJ1dCAqd2h5KiB3YXMgYGJsa19tcV9xdWllc2NlX3F1ZXVlX25vd2FpdGAgY2hhbmdlZCB0byBgYmxrX21xX3F1aWVzY2VfcXVldWVgPyBUaGF0J3MgdGhlIGtleSBxdWVzdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlYXNvbmluZyBiZWhpbmQgdGhpcyBkZWNpc2lvbi4gSXQgY291bGQgaGF2ZSBiZWVuIGludGVudGlvbmFsLCBwZXJoYXBzIGZvciBwZXJmb3JtYW5jZSBvciBzeW5jaHJvbml6YXRpb24gcmVhc29ucywgYnV0IGl0IGNvdWxkIGFsc28gaGF2ZSBiZWVuIGFuIG92ZXJzaWdodCB0aGF0IGNvdWxkIGhhdmUgc2VyaW91cyBjb25zZXF1ZW5jZXMuXG5cbkkgbmVlZCB0byB0cmFjZSB0aGUgY2hhbmdlLiBJIGhhdmUgdG8gZmluZCB0aGUgY29tbWl0IHRoYXQgaW50cm9kdWNlZCB0aGlzIG1vZGlmaWNhdGlvbi4gSSdsbCBzdGFydCB3aXRoIHRoZSBjb21taXQgbWVzc2FnZSwgdGhlIHVzdWFsIHBsYWNlIHRvIGZpbmQgcmVhc29uaW5nLiBJJ2xsIHNlYXJjaCB0aGUgZ2l0IGxvZyBmb3Igb2NjdXJyZW5jZXMgb2YgXCJ2aXJ0YmxrX2ZyZWV6ZV9wcml2XCIgb3IgXCJibGtfbXFfcXVpZXNjZV9xdWV1ZV9ub3dhaXRcIi4gQWx0ZXJuYXRpdmVseSwgaWYgdGhlIGNvbW1pdCBtZXNzYWdlIGlzIHVuaGVscGZ1bCwgSSdsbCBzZWFyY2ggdGhlIGxvZyBmb3IgKmFueSogY29tbWl0cyBtZW50aW9uaW5nIGBibGtfbXFfcXVpZXNjZV9xdWV1ZV9ub3dhaXRgLiBJZiB0aGF0IHNlYXJjaCB5aWVsZHMgbm90aGluZywgSSBtYXkgZXhwYW5kIHRvIHVzZSBncmVwcGVyIHRvIHBlcmZvcm0gYSBjb2RlYmFzZS13aWRlIHNlYXJjaCBmb3IgdGhhdCBmdW5jdGlvbiBuYW1lIHRvIGdpdmUgbWUgc29tZSBjb250ZXh0IG9uIGhvdyB0aGUgZnVuY3Rpb24gbmFtZSBpcyB1c2VkIGFjcm9zcyB0aGUgY29kZWJhc2UuIEkgaGF2ZSB0byBmaW5kIHRoZSBoaXN0b3J5IGFuZCB1bmRlcnN0YW5kIHRoZSByYXRpb25hbGUuIFRoaXMgaXMgY3J1Y2lhbCBmb3IgZXZhbHVhdGluZyB0aGUgcG90ZW50aWFsIGltcGFjdCBvZiB0aGlzIG1vZGlmaWNhdGlvbiBvbiB0aGUgb3ZlcmFsbCBzeXN0ZW0ncyBzdGFiaWxpdHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4MjY3LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjk4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDk6MDk6MTAuNzAwNTIxNjJaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NDY3MzkzMDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYmxrX21xX3F1aWVzY2VfcXVldWVfbm93YWl0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL2Jsay1tcS5jPTI1NT1FWFBPUlRfU1lNQk9MX0dQTChibGtfbXFfdW5mcmVlemVfcXVldWVfbm9uX293bmVyKTtcXG4tLVxcbmJsb2NrL2Jsay1tcS5jLTI2MC0gKi9cXG5ibG9jay9ibGstbXEuYzoyNjE6dm9pZCBibGtfbXFfcXVpZXNjZV9xdWV1ZV9ub3dhaXQoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpXFxuYmxvY2svYmxrLW1xLmMtMjYyLXtcXG4tLVxcbmJsb2NrL2Jsay1tcS5jLTI2OS19XFxuYmxvY2svYmxrLW1xLmM6MjcwOkVYUE9SVF9TWU1CT0xfR1BMKGJsa19tcV9xdWllc2NlX3F1ZXVlX25vd2FpdCk7XFxuYmxvY2svYmxrLW1xLmMtMjcxLVxcbi0tXFxuYmxvY2svYmxrLW1xLmMtMjc4LSAqIGZ1bmN0aW9uIG9ubHkgd2FpdHMgZm9yIHRoZSBxdWllc2NlIG9uIHRob3NlIHJlcXVlc3RfcXVldWVzIHRoYXQgaGFkXFxuYmxvY2svYmxrLW1xLmM6Mjc5OiAqIHRoZSBxdWllc2NlIGZsYWcgc2V0IHVzaW5nIGJsa19tcV9xdWllc2NlX3F1ZXVlX25vd2FpdC5cXG5ibG9jay9ibGstbXEuYy0yODAtICovXFxuLS1cXG5ibG9jay9ibGstbXEuYz0yOTk9dm9pZCBibGtfbXFfcXVpZXNjZV9xdWV1ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSlcXG5ibG9jay9ibGstbXEuYy0zMDAte1xcbmJsb2NrL2Jsay1tcS5jOjMwMTpcXHRibGtfbXFfcXVpZXNjZV9xdWV1ZV9ub3dhaXQocSk7XFxuYmxvY2svYmxrLW1xLmMtMzAyLVxcdC8qIG5vdGhpbmcgdG8gd2FpdCBmb3Igbm9uLW1xIHF1ZXVlcyAqL1xcbi0tXFxuYmxvY2svYmxrLW1xLmM9MzM1PXZvaWQgYmxrX21xX3F1aWVzY2VfdGFnc2V0KHN0cnVjdCBibGtfbXFfdGFnX3NldCAqc2V0KVxcbi0tXFxuYmxvY2svYmxrLW1xLmMtMzQxLVxcdFxcdGlmICghYmxrX3F1ZXVlX3NraXBfdGFnc2V0X3F1aWVzY2UocSkpXFxuYmxvY2svYmxrLW1xLmM6MzQyOlxcdFxcdFxcdGJsa19tcV9xdWllc2NlX3F1ZXVlX25vd2FpdChxKTtcXG5ibG9jay9ibGstbXEuYy0zNDMtXFx0fVxcbi0tXFxuZHJpdmVycy9zY3NpL3Njc2lfbGliLmM9MjkzOT1zdGF0aWMgdm9pZCBzY3NpX3N0b3BfcXVldWUoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KVxcbi0tXFxuZHJpdmVycy9zY3NpL3Njc2lfbGliLmMtMjk0Ny1cXHRpZiAoIWNtcHhjaGcoXFx1MDAyNnNkZXYtXFx1MDAzZXF1ZXVlX3N0b3BwZWQsIDAsIDEpKVxcbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jOjI5NDg6XFx0XFx0YmxrX21xX3F1aWVzY2VfcXVldWVfbm93YWl0KHNkZXYtXFx1MDAzZXJlcXVlc3RfcXVldWUpO1xcbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jLTI5NDktfVxcbi0tXFxuaW5jbHVkZS9saW51eC9ibGstbXEuaD05Nzc9dm9pZCBibGtfbXFfdXBkYXRlX25yX2h3X3F1ZXVlcyhzdHJ1Y3QgYmxrX21xX3RhZ19zZXQgKnNldCwgaW50IG5yX2h3X3F1ZXVlcyk7XFxuaW5jbHVkZS9saW51eC9ibGstbXEuaC05NzgtXFxuaW5jbHVkZS9saW51eC9ibGstbXEuaDo5Nzk6dm9pZCBibGtfbXFfcXVpZXNjZV9xdWV1ZV9ub3dhaXQoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpO1xcbmluY2x1ZGUvbGludXgvYmxrLW1xLmgtOTgwLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwOTowOToxMi4zNDcyNjcyMzFaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NzA5MjkxMzI5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFZpcnRpbyBCbG9jayBEcml2ZXIncyBRdWllc2NpbmcgTG9naWMqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgVmlydGlvIGJsb2NrIGRyaXZlciBjb2RlLCBhbmQgSSBzZWUgYSBrZXkgY2hhbmdlOiB0aGV5J3ZlIHN3YXBwZWQgb3V0IGBibGtfbXFfcXVpZXNjZV9xdWV1ZV9ub3dhaXRgIHdpdGggYGJsa19tcV9xdWllc2NlX3F1ZXVlKHEpYC4gSW50ZXJlc3RpbmcuIE15IGluaXRpYWwgdGhvdWdodCBpcywgd2h5IHRoZSBjaGFuZ2U/IEl0J3MgaW1tZWRpYXRlbHkgY2xlYXIgdGhhdCBgdmlydGJsa19mcmVlemVfcHJpdmAgaXMgZG9pbmcgc29tZSBxdWV1ZSBtYW5pcHVsYXRpb24uIExvb2tpbmcgYXQgbGluZXMgMTU5Ni0xNjAwLCBpdCdzIGNsZWFyOiBUaGV5J3JlIGZyZWV6aW5nLCBxdWllc2NpbmcsIGFuZCB0aGVuIHVuZnJlZXppbmcgdGhlIHF1ZXVlLiBUaGlzIHNldHMgb2ZmIHNvbWUgYWxhcm1zLCBuYXR1cmFsbHkuXG5cblRoZSBpbXBvcnRhbnQgcGFydCBpcyB0aGF0IGBibGtfbXFfcXVpZXNjZV9xdWV1ZShxKWAgKndhaXRzKiBmb3IgYWxsIGFjdGl2ZSBkaXNwYXRjaGVzIHRvIGZpbmlzaCB2aWEgYGJsa19tcV93YWl0X3F1aWVzY2VfZG9uZWAgd2hpY2gsIG5vdGFibHksIGNhbGxzIGBzeW5jaHJvbml6ZV9yY3UoKWAuIFNvLCBpdCdzIGEgc3luY2hyb25vdXMgb3BlcmF0aW9uLiBJIHdhcyBjb25jZXJuZWQgYWJvdXQgdGhlIHVuZnJlZXppbmcgYWZ0ZXJ3YXJkLiBUaGUgaW1wbGljYXRpb24gaXMgdGhhdCB0aGV5J3JlIGVuc3VyaW5nIGFsbCBvbmdvaW5nIHJlcXVlc3RzIGFyZSBjb21wbGV0ZSBiZWZvcmUgc29tZXRoaW5nIGhhcHBlbnMsIEkgYW0gYXNzdW1pbmcgdGhpcyBpcyByZWxhdGVkIHRvIHRoZSByZXNldCBvciBkZWxldGlvbiBvZiB2aXJ0cXVldWVzLlxuXG5Ob3csIHRoaXMgcmVhbGx5IG1ha2VzIHNlbnNlLiBgYmxrX21xX3F1aWVzY2VfcXVldWVgIGJsb2NrcyBuZXcgZGlzcGF0Y2hlcyB1bnRpbCBpdCdzIHVucXVpZXNjZWQuIFRoZW4sIGB2aXJ0YmxrX3Jlc3RvcmVfcHJpdmAgY2FsbHMgYGJsa19tcV91bnF1aWVzY2VfcXVldWUodmJsay1cdTAwM2VkaXNrLVx1MDAzZXF1ZXVlKWAuIFNvLCB0aGUgcXVldWUgaXMgZXNzZW50aWFsbHkgbG9ja2VkIGRvd24gYmV0d2VlbiBgdmlydGJsa19mcmVlemVfcHJpdmAgYW5kIGB2aXJ0YmxrX3Jlc3RvcmVfcHJpdmAuIFRoaXMgaXMgdG8gbWFrZSBzdXJlIHRoYXQgd2hlbiBgdmlydGJsa19mcmVlemVfcHJpdmAgcHJvY2VlZHMgdG8gYHZpcnRpb19yZXNldF9kZXZpY2UodmRldilgIGFuZCBgdmRldi1cdTAwM2Vjb25maWctXHUwMDNlZGVsX3Zxcyh2ZGV2KWAsIGFsbCBkaXNwYXRjaGVzIGhhdmUgZ2VudWluZWx5IGZpbmlzaGVkIVxuXG5UaGUgcHJvYmxlbSB3aXRoIHRoZSBvbGQgY29kZSAoYGJsa19tcV9xdWllc2NlX3F1ZXVlX25vd2FpdChxKWApIGlzIG9idmlvdXMgbm93LiBEaXNwYXRjaGVzIGNvdWxkIGhhdmUgY29udGludWVkIHRvIHJ1biwgcG90ZW50aWFsbHkgYWNjZXNzaW5nIGZyZWVkIHZpcnRxdWV1ZXMgKmFmdGVyKiBgdmlydGlvX3Jlc2V0X2RldmljZWAgb3IgYGRlbF92cXModmRldilgISBXaXRoIGBibGtfbXFfcXVpZXNjZV9xdWV1ZShxKWAsIHdlIGdldCB0aGUgbmVjZXNzYXJ5IHdhaXQgZm9yIGNvbXBsZXRpb24uIEJ1dCB3YWl0IC0gdGhpcyBgYmxrX21xX3F1aWVzY2VfcXVldWVgIGNhbiBzbGVlcCAoaXQgY2FsbHMgYHN5bmNocm9uaXplX3JjdWAgb3IgYHN5bmNocm9uaXplX3NyY3VgKS5cblxuU28sIHRoZSBxdWVzdGlvbiBpcywgaXMgaXQgYWxsb3dlZCB0byBzbGVlcCBpbiBgdmlydGJsa19mcmVlemVfcHJpdmA/IExldCdzIGNoZWNrLiBZZXMsIGl0IGRvZXMgYGJsa19tcV9mcmVlemVfcXVldWUocSlgIGFuZCBgZmx1c2hfd29ya2Agd2hpY2ggY2FuIHNsZWVwLlxuXG5BIG1vcmUgaW1wb3J0YW50IHF1ZXN0aW9uIGFyaXNlcy4gQ2FuIHRoaXMgbmV3IGNvZGUgaGFuZyBvciBkZWFkbG9jayBpZiBhIGRpc3BhdGNoIGlzIGJsb2NrZWQgd2FpdGluZyBmb3Igc29tZXRoaW5nPyBUaGlzIGlzIHdoZXJlIHRoZSByZWFsIHZ1bG5lcmFiaWxpdHkgbGllcy4gVGhlIGltcGxpY2F0aW9ucyBhcmUgY2xlYXIuIElmIGEgZGlzcGF0Y2ggaXMgd2FpdGluZyBvbiwgc2F5LCBhIGxvY2sgaGVsZCBkdXJpbmcgdGhpcyBxdWllc2NlIHNlcXVlbmNlLCB3ZSdkIGhhdmUgYSBkZWFkbG9jay4gSSB3b25kZXIgaG93IHRoaXMgaW50ZXJhY3RzIHdpdGggYW55IG90aGVyIGJsb2NraW5nIGNhbGxzIHdpdGhpbiB0aGUgSS9PIHBhdGguXG5cbk5vdywgSSdtIHRoaW5raW5nIGFib3V0IGZ1enppbmcgdGhpcy4gQ2FuIHN5emthbGxlciB0cmlnZ2VyIHRoaXMgc2NlbmFyaW8/XG5cbkkndmUgZ290IHRvIGNvbnNpZGVyIGhvdyBzeXprYWxsZXIgaGFuZGxlcyB0aGluZ3MuIEhvdyBkb2VzIHN5emthbGxlciBmdXp6IFBNLCBQQ0kgcmVzZXRzLCBvciBibG9jayBkZXZpY2VzPyBJIG5lZWQgdG8gY2hlY2sgaWYgc3l6a2FsbGVyIGhhcyB0aGUgcHJpbWl0aXZlcyB0byB0ZXN0IFBNIGZyZWV6ZS9zdXNwZW5kL3Jlc3RvcmUuIExldCdzIHNlZSBpZiBzeXprYWxsZXIgaGFzIHN5c2NhbGwgZGVmaW5pdGlvbnMgb3IsIHNwZWNpZmljYWxseSwgdGVzdHMgUE0gc2xlZXAuXG5cbkFscmlnaHQsIHN5emthbGxlciBhcHBlYXJzIHRvIGhhdmUgc29tZSB0b29sczogYHN5el9tb3VudF9pbWFnZWAsIHN5c2ZzIHdyaXRlcyAobGlrZSBgL3N5cy9wb3dlci9zdGF0ZWApLCBhbmQgZXZlbiB0aGluZ3MgbGlrZSBgL3N5cy9idXMvcGNpL2RldmljZXMvKi9yZXNldGAuIFNvLCBpdCBzZWVtcyBsaWtlIHRoZXJlIG1pZ2h0IGJlIGEgcGF0aC5cblxuTm93LCBhIGtleSBxdWVzdGlvbjogaXMgdmlydGlvX2JsayBlbmFibGVkIGluIGEgc3RhbmRhcmQgc3l6a2FsbGVyIGtlcm5lbCBjb25maWc/IEkgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyBmb3IgYHZpcnRpb19ibGtgLiBJZiBzbywgdGhpcyBpcyBhIHByaW1lIGNhbmRpZGF0ZSBmb3IgYSBzeXprYWxsZXIgdGVzdCwgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIHByb2JlIGZvciB0aGVzZSBxdWllc2NlLXJlbGF0ZWQgZGVhZGxvY2tzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTg2OCwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY3NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwOTowOToxOS40NDAxODM3WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTA3NjIwOTg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBWSVJUSU9fQkxLXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svS2NvbmZpZz0yODY9Y29uZmlnIFhFTl9CTEtERVZfQkFDS0VORFxcbi0tXFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTMwNi1cXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc6MzA3OmNvbmZpZyBWSVJUSU9fQkxLXFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTMwOC1cXHR0cmlzdGF0ZSBcXFwiVmlydGlvIGJsb2NrIGRyaXZlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDk6MDk6MjEuMzQ3ODIzNTE3WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI4MDczNjM1MDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gQmxvY2sgRGV2aWNlIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBsZXQncyB6ZXJvIGluIG9uIHRoZSBibG9jayBkZXZpY2UgY29uZmlndXJhdGlvbi4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGNoZWNrIGBkcml2ZXJzL2Jsb2NrL0tjb25maWdgLiBJJ20gc3BlY2lmaWNhbGx5IGludGVyZXN0ZWQgaW4gd2hhdCdzIGhhcHBlbmluZyBhcm91bmQgbGluZSAzMDcuIFRoYXQgYXJlYSB1c3VhbGx5IGhvbGRzIGNydWNpYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIHRoZSBpbmNsdXNpb24gYW5kIGNvbmZpZ3VyYXRpb24gb2YgdmFyaW91cyBibG9jayBkZXZpY2UgZHJpdmVycywgdGhlaXIgZGVwZW5kZW5jaWVzLCBhbmQgYW55IHJlbGV2YW50IG9wdGlvbnMuIEknbSBleHBlY3RpbmcgdG8gZmluZCBkZXRhaWxzIG9uIGhvdyBzcGVjaWZpYyBmZWF0dXJlcyBvciBkcml2ZXJzIGFyZSBlbmFibGVkIG9yIGRpc2FibGVkIHZpYSBrZXJuZWwgY29uZmlndXJhdGlvbi4gSSdtIGhvcGluZyBpdCBhbHNvIHByb3ZpZGVzIGhpbnRzIG9uIGhvdyB0byBkaWFnbm9zZSBhbnkgcG90ZW50aWFsIGNvbmZsaWN0cyBvciBkZXBlbmRlbmNpZXMuIEZyb20gYSBzeXN0ZW1zIGFyY2hpdGVjdHVyZSBwZXJzcGVjdGl2ZSwgdGhpcyBpcyB3aGVyZSBhIGxvdCBvZiB0aGUgbG93LWxldmVsIGludGVyYWN0aW9ucyBhcmUgZGVjaWRlZCwgc28gaXQgbWFrZXMgc2Vuc2UgdG8gc3RhcnQgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzE1MDgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwOTowOToyNC4xNTUxODk4OTNaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzMxODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9ibG9jay9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMwNSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDMwNTpcXHRcXG4gMzA2OlxcdFxcbiAzMDc6XFx0Y29uZmlnIFZJUlRJT19CTEtcXG4gMzA4OlxcdFxcdHRyaXN0YXRlIFxcXCJWaXJ0aW8gYmxvY2sgZHJpdmVyXFxcIlxcbiAzMDk6XFx0XFx0ZGVwZW5kcyBvbiBWSVJUSU9cXG4gMzEwOlxcdFxcdHNlbGVjdCBTR19QT09MXFxuIDMxMTpcXHRcXHRoZWxwXFxuIDMxMjpcXHRcXHQgIFRoaXMgaXMgdGhlIHZpcnR1YWwgYmxvY2sgZHJpdmVyIGZvciB2aXJ0aW8uICBJdCBjYW4gYmUgdXNlZCB3aXRoXFxuIDMxMzpcXHQgICAgICAgICAgUUVNVSBiYXNlZCBWTU1zIChsaWtlIEtWTSBvciBYZW4pLiAgU2F5IFkgb3IgTS5cXG4gMzE0OlxcdFxcbiAzMTU6XFx0Y29uZmlnIEJMS19ERVZfUkJEXFxuIDMxNjpcXHRcXHR0cmlzdGF0ZSBcXFwiUmFkb3MgYmxvY2sgZGV2aWNlIChSQkQpXFxcIlxcbiAzMTc6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUIFxcdTAwMjZcXHUwMDI2IEJMT0NLXFxuIDMxODpcXHRcXHRzZWxlY3QgQ0VQSF9MSUJcXG4gMzE5OlxcdFxcdGhlbHBcXG4gMzIwOlxcdFxcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCBpbmNsdWRlIHRoZSBSYWRvcyBibG9jayBkZXZpY2UsIHdoaWNoIHN0cmlwZXNcXG4gMzIxOlxcdFxcdCAgYSBibG9jayBkZXZpY2Ugb3ZlciBvYmplY3RzIHN0b3JlZCBpbiB0aGUgQ2VwaCBkaXN0cmlidXRlZCBvYmplY3RcXG4gMzIyOlxcdFxcdCAgc3RvcmUuXFxuIDMyMzpcXHRcXG4gMzI0OlxcdFxcdCAgTW9yZSBpbmZvcm1hdGlvbiBhdCBodHRwOi8vY2VwaC5uZXdkcmVhbS5uZXQvLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwOTowOToyNC4xNTUyNjU0ODRaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjE4ODM4MjE1NDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBEZWNpc2lvbiBmb3IgdmlydGlvX2Jsay5jIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBGaXJzdCwgSSBuZWVkIHRvIHJpZ29yb3VzbHkgYXBwbHkgdGhlIHBhdGNoIGZ1enppbmcgY3JpdGVyaWEuIFRoZSBnb2FsIGlzIHRvIGlkZW50aWZ5IHBvdGVudGlhbCBjcmFzaGVzIG9yIHJlZ3Jlc3Npb25zLiBUaGUgY29yZSBwcmluY2lwbGUgaXMgdGhhdCBmdXp6aW5nIGlzIG9ubHkgdmFsdWFibGUgZm9yIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgKmV4ZWN1dGUqIGluIGEgc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIFRoaXMgcGF0Y2ggaW52b2x2ZXMgY2hhbmdlcyB0byBgdmlydGlvX2Jsay5jYCwgYW5kIHRoYXQncyBhIGRyaXZlciBmb3IgYSB2aXJ0aW8gYmxvY2sgZGV2aWNlLiAgVmlydGlvIGlzICpkZWZpbml0ZWx5KiByZWFjaGFibGUgaW4gc3RhbmRhcmQgUUVNVS4gIFNvIGZhciwgc28gZ29vZC5cblxuTm93LCBsZXQncyBnbyB0aHJvdWdoIHRoZSBuZWdhdGl2ZSBjcml0ZXJpYSwgdGhlIFwid2hlbiB0byByZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlXCIgY2hlY2tsaXN0OlxuXG4xLiAgKipOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOioqICBUaGlzIGlzbid0IGRvY3VtZW50YXRpb24sIHNjcmlwdHMsIG9yIGJ1aWxkIHN5c3RlbSBjaGFuZ2VzLiBOby5cbjIuICAqKlN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToqKiAgVGhpcyBpc24ndCB2ZW5kb3Itc3BlY2lmaWMgUENJZSBoYXJkd2FyZSByZXF1aXJpbmcgYSByZWFsIEFTSUMuIFZpcnRpbyBibG9jayBpcyBmdW5kYW1lbnRhbCB0byBRRU1VLiBUaGlzIGlzIE5PVCB1bnJlYWNoYWJsZS5cbjMuICAqKlVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoqKiBPa2F5LCB0aGlzIGlzIHRoZSBvbmUgdG8gc2NydXRpbml6ZSBjYXJlZnVsbHkuIFRoZSBwYXRjaCBtb2RpZmllcyBgdmlydGJsa19mcmVlemVfcHJpdmAuICBJcyB0aGlzIGEgdGVhcmRvd24gY2FsbGJhY2sgbGlrZSBgLnJlbW92ZWAsIGAuc2h1dGRvd25gLCBvciBgcGNpX3VucmVnaXN0ZXJfZHJpdmVyYCB0aGF0IG9ubHkgaGFwcGVucyBkdXJpbmcgaG90LXVucGx1ZyBvciBtYW51YWwgdW5iaW5kaW5nPyBObyEgSXQncyB1c2VkIGluIGAuZnJlZXplYCAoUE0gc3VzcGVuZC9zbGVlcCkgYW5kIGAucmVzZXRfcHJlcGFyZWAgKHZpcnRpbyByZXNldCBvciBQQ0kgZXJyb3IgaGFuZGxlciByZXNldCkuICBCdXQgY2FuIHRoZXNlIGFjdGlvbnMgaGFwcGVuICpkdXJpbmcgcnVudGltZSo/ICBBYnNvbHV0ZWx5ISBRRU1VIGNhbiBkbyB2aXJ0aW8gYmxvY2sgcmVzZXRzIGFuZCBQTSBzdXNwZW5kLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlLCBzbyB0aGlzIGlzIE5PVCBhIG5lZ2F0aXZlIGNvbmRpdGlvbi5cblxuU28sIG5vbmUgb2YgdGhlIG5lZ2F0aXZlIGNyaXRlcmlhIGFwcGx5LiAgVGhpcyBwYXRjaCAqdG91Y2hlcyBleGVjdXRhYmxlIGNvZGUqLiBBbmQgU2VjdGlvbiAzIHNwZWNpZmljYWxseSBtZW50aW9ucyBcIlJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHNcIiBpbmNsdWRpbmcgZHJpdmVycyB1c2luZyB2aXJ0aW8uIFRoZXJlZm9yZSwgSSBNVVNUIHNldCBgV29ydGhGdXp6aW5nID0gdHJ1ZWAuXG5cbk5vdywgbGV0J3MgZGV0ZXJtaW5lIHRoZSBgRm9jdXNTeW1ib2xzYC4gIFdoYXQgc3BlY2lmaWMgc3ltYm9scyBzaG91bGQgdGhlIGZ1enplciB0YXJnZXQ/IFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgYXJvdW5kIGB2aXJ0YmxrX2ZyZWV6ZV9wcml2YC4gU2luY2UgdGhpcyBpcyBhIHN0YXRpYyBmdW5jdGlvbiB3aXRoaW4gYSAuYyBmaWxlLCBpdCAqd2lsbCogaGF2ZSBhIHN5bWJvbC4gSSAqZG9uJ3QqIG5lZWQgdG8gd29ycnkgYWJvdXQgc3RhdGljIGlubGluZXMgaW4gaGVhZGVycy4gTGV0J3MgdHJhY2UgaXQgZG93bjogYHZpcnRibGtfZnJlZXplX3ByaXZgIGlzIGNhbGxlZCBieSBgdmlydGJsa19mcmVlemVgIGFuZCBgdmlydGJsa19yZXNldF9wcmVwYXJlYCwgYm90aCBvZiB3aGljaCBhcmUgYWxzbyB3aXRoaW4gYGRyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jYC4gQWxsIHRoZSBmdW5jdGlvbnMgdG91Y2hlZCBhcmUgZmVhdHVyZS1zcGVjaWZpYyBhbmQgYXJlICpub3QqIGEgdWJpcXVpdG91cyBob3QtcGF0aCBmdW5jdGlvbi4gIEkgY2FuIGluY2x1ZGUgdGhvc2UgZnVuY3Rpb25zIHRvIHNwZWNpZmljYWxseSB0YXJnZXQgdGhlIGxvZ2ljLiBUaGF0J3MgY2xlYW4gYW5kIHRhcmdldGVkLiBJdCdzIHRoZSBjbGVhbmVzdCB3YXkgdG8gZm9jdXMgZnV6emluZyBvbiB0aGUgY2hhbmdlcyB0aGVtc2VsdmVzLlxuXG5UaGVyZWZvcmUsIHRoZSBhcHByb3ByaWF0ZSBgRm9jdXNTeW1ib2xzYCBhcmU6XG4qICAgYHZpcnRibGtfZnJlZXplX3ByaXZgXG4qICAgYHZpcnRibGtfZnJlZXplYFxuKiAgIGB2aXJ0YmxrX3Jlc2V0X3ByZXBhcmVgXG5cbk5leHQsIHRoZSBgRW5hYmxlQ29uZmlnc2AgYXJlIHRob3NlIG5lZWRlZCB0byBjb21waWxlIGFuZCBydW4gdmlydGlvLWJsay4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSByZWxldmFudCBgTWFrZWZpbGVgIGZvciB0aGUgbmVjZXNzYXJ5IEtjb25maWcgb3B0aW9ucyB0byBlbmFibGUgYHZpcnRpb19ibGsuY2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyMDE4LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQ5MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDA5OjA5OjQ2LjAzOTA4OTE3NFoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTAwMTU1NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmlydGlvX2Jsa1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svTWFrZWZpbGU9MjU9b2JqLSQoQ09ORklHX0JMS19ERVZfTkJEKVxcdCs9IG5iZC5vXFxuZHJpdmVycy9ibG9jay9NYWtlZmlsZToyNjpvYmotJChDT05GSUdfVklSVElPX0JMSylcXHQrPSB2aXJ0aW9fYmxrLm9cXG5kcml2ZXJzL2Jsb2NrL01ha2VmaWxlLTI3LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwOTowOTo0Ni4wODkxMTE4NTNaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjE2OTY0NDkxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLZXJuZWwgQ29uZmlndXJhdGlvbiBJbnF1aXJ5KipcblxuT2theSwgc28gSSBuZWVkIHRvIG1ha2Ugc3VyZSBgdmlydGlvX2Jsay5vYCBpcyBnb2luZyB0byBidWlsZC4gVGhhdCBtZWFucyBJIG5lZWQgYENPTkZJR19WSVJUSU9fQkxLYCBlbmFibGVkLiBMZXQncyBzdGFydCBieSBsb29raW5nIGF0IGBkcml2ZXJzL2Jsb2NrL0tjb25maWdgIHRvIHNlZSBpZiBpdCdzIGRlZmluZWQgYW5kIGhvdyBpdCdzIGNvbmZpZ3VyZWQuIEFoLCB0aGVyZSBpdCBpcyEgYENPTkZJR19WSVJUSU9fQkxLYCBpcyBhIHRyaXN0YXRlIG9wdGlvbiBhbmQgZGVwZW5kcyBvbiBgVklSVElPYCwgYW5kIGFsc28gc2VsZWN0cyBgU0dfUE9PTGAuIEludGVyZXN0aW5nLiBOb3csIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIHRoYXQgdGhlIGRlcGVuZGVuY3kgb24gYFZJUlRJT2AgaXMgYWxzbyBtZXQuIEkgc2hvdWxkIHByb2JhYmx5IG5vdyBnbyBjaGVjayBgZHJpdmVycy92aXJ0aW8vS2NvbmZpZ2AgdG8gY29uZmlybSB0aGF0IGBDT05GSUdfVklSVElPYCBpcyBkZWZpbmVkIGFuZCBlbmFibGVkIGFzIG5lZWRlZC4gVGltZSB0byBkZWx2ZSBpbnRvIHRoZSB2aXJ0aW8gY29uZmlndXJhdGlvbiBhbmQgbWFrZSBzdXJlIGV2ZXJ5dGhpbmcgaXMgaW4gcGxhY2UgZm9yIGEgc3VjY2Vzc2Z1bCBidWlsZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzUyOTYsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDk6MDk6NDguMjU4NzU5NjE2WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjI1NDI2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVklSVElPXFxcXGJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy92aXJ0aW8vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmlydGlvL0tjb25maWc9Mj1jb25maWcgVklSVElPX0FOQ0hPUlxcbi0tXFxuZHJpdmVycy92aXJ0aW8vS2NvbmZpZy00LVxcbmRyaXZlcnMvdmlydGlvL0tjb25maWc6NTpjb25maWcgVklSVElPXFxuZHJpdmVycy92aXJ0aW8vS2NvbmZpZy02LVxcdHRyaXN0YXRlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDA5OjA5OjQ4LjMwNTAyMjQ3MVoiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyOTk1MDg1MDYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoYXQgS2NvbmZpZyBmaWxlOlxuXG4qKkludmVzdGlnYXRpbmcgVmlydGlvIERyaXZlciBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGBkcml2ZXJzL3ZpcnRpby9LY29uZmlnYCBmaWxlLiBJJ20gZ29pbmcgdG8ganVtcCByaWdodCB0byBhcm91bmQgbGluZSA1IHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgYmlnZ2VyIHBpY3R1cmUuIEknbSBsb29raW5nIGZvciB0aGUgY29yZSBkZXBlbmRlbmNpZXMgYW5kIHRoZSB2YXJpb3VzIHRyYW5zcG9ydCBvcHRpb25zLCBlc3BlY2lhbGx5IHRoaW5ncyBsaWtlIGBWSVJUSU9fUENJYCwgc2luY2UgdGhhdCdzIGEgY29tbW9uIG9uZS4gR2V0dGluZyBhIHF1aWNrIG92ZXJ2aWV3IG9mIHRoZSBjb25kaXRpb25hbCBsb2dpYyBhdCB0aGUgdG9wIG9mIHRoZSBmaWxlIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXBzIGJldHdlZW4gdGhlIGRpZmZlcmVudCBWaXJ0aW8gZmVhdHVyZXMgYW5kIHRoZWlyIHVuZGVybHlpbmcgaGFyZHdhcmUgb3Igc3lzdGVtIGNvbmZpZ3VyYXRpb25zLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgc29saWQgZm91bmRhdGlvbiBmb3IgdW5kZXJzdGFuZGluZyB0aGUgcmVzdCBvZiB0aGUgZmlsZSBhbmQgaG93IHRoZSBkcml2ZXIgaXMgc3RydWN0dXJlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzU2ODcsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwOTowOTo1MS4zMDAxMTAxNzFaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODI1NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy92aXJ0aW8vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0Y29uZmlnIFZJUlRJT19BTkNIT1JcXG4gICAzOlxcdFxcdGJvb2xcXG4gICA0OlxcdFxcbiAgIDU6XFx0Y29uZmlnIFZJUlRJT1xcbiAgIDY6XFx0XFx0dHJpc3RhdGVcXG4gICA3OlxcdFxcdHNlbGVjdCBWSVJUSU9fQU5DSE9SXFxuICAgODpcXHRcXHRoZWxwXFxuICAgOTpcXHRcXHQgIFRoaXMgb3B0aW9uIGlzIHNlbGVjdGVkIGJ5IGFueSBkcml2ZXIgd2hpY2ggaW1wbGVtZW50cyB0aGUgdmlydGlvXFxuICAxMDpcXHRcXHQgIGJ1cywgc3VjaCBhcyBDT05GSUdfVklSVElPX1BDSSwgQ09ORklHX1ZJUlRJT19NTUlPLCBDT05GSUdfUlBNU0dcXG4gIDExOlxcdFxcdCAgb3IgQ09ORklHX1MzOTBfR1VFU1QuXFxuICAxMjpcXHRcXG4gIDEzOlxcdGNvbmZpZyBWSVJUSU9fUENJX0xJQlxcbiAgMTQ6XFx0XFx0dHJpc3RhdGVcXG4gIDE1OlxcdFxcdGhlbHBcXG4gIDE2OlxcdFxcdCAgTW9kZXJuIFBDSSBkZXZpY2UgaW1wbGVtZW50YXRpb24uIFRoaXMgbW9kdWxlIGltcGxlbWVudHMgdGhlXFxuICAxNzpcXHRcXHQgIGJhc2ljIHByb2JlIGFuZCBjb250cm9sIGZvciBkZXZpY2VzIHdoaWNoIGFyZSBiYXNlZCBvbiBtb2Rlcm5cXG4gIDE4OlxcdFxcdCAgUENJIGRldmljZSB3aXRoIHBvc3NpYmxlIHZlbmRvciBzcGVjaWZpYyBleHRlbnNpb25zLiBBbnlcXG4gIDE5OlxcdFxcdCAgbW9kdWxlIHRoYXQgc2VsZWN0cyB0aGlzIG1vZHVsZSBtdXN0IGRlcGVuZCBvbiBQQ0kuXFxuICAyMDpcXHRcXG4gIDIxOlxcdGNvbmZpZyBWSVJUSU9fUENJX0xJQl9MRUdBQ1lcXG4gIDIyOlxcdFxcdHRyaXN0YXRlXFxuICAyMzpcXHRcXHRoZWxwXFxuICAyNDpcXHRcXHQgIExlZ2FjeSBQQ0kgZGV2aWNlIChWaXJ0aW8gUENJIENhcmQgMC45LnggRHJhZnQgYW5kIG9sZGVyIGRldmljZSlcXG4gIDI1OlxcdFxcdCAgaW1wbGVtZW50YXRpb24uXFxuICAyNjpcXHRcXHQgIFRoaXMgbW9kdWxlIGltcGxlbWVudHMgdGhlIGJhc2ljIHByb2JlIGFuZCBjb250cm9sIGZvciBkZXZpY2VzXFxuICAyNzpcXHRcXHQgIHdoaWNoIGFyZSBiYXNlZCBvbiBsZWdhY3kgUENJIGRldmljZS4gQW55IG1vZHVsZSB0aGF0IHNlbGVjdHMgdGhpc1xcbiAgMjg6XFx0XFx0ICBtb2R1bGUgbXVzdCBkZXBlbmQgb24gUENJLlxcbiAgMjk6XFx0XFxuICAzMDpcXHRtZW51Y29uZmlnIFZJUlRJT19NRU5VXFxuICAzMTpcXHRcXHRib29sIFxcXCJWaXJ0aW8gZHJpdmVyc1xcXCJcXG4gIDMyOlxcdFxcdGRlZmF1bHQgeVxcbiAgMzM6XFx0XFxuICAzNDpcXHRpZiBWSVJUSU9fTUVOVVxcbiAgMzU6XFx0XFxuICAzNjpcXHRjb25maWcgVklSVElPX0hBUkRFTl9OT1RJRklDQVRJT05cXG4gIDM3OlxcdCAgICAgICAgYm9vbCBcXFwiSGFyZGVuIHZpcnRpbyBub3RpZmljYXRpb25cXFwiXFxuICAzODpcXHQgICAgICAgIGRlcGVuZHMgb24gQlJPS0VOXFxuICAzOTpcXHQgICAgICAgIGhlbHBcXG4gIDQwOlxcdCAgICAgICAgICBFbmFibGUgdGhpcyB0byBoYXJkZW4gdGhlIGRldmljZSBub3RpZmljYXRpb25zIGFuZCBzdXBwcmVzc1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwOTowOTo1MS4zMDAxOTUxMzFaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTk3NjA2MzQ4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIFZJUlRJTyBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gYFZJUlRJT2AgaXMgZ2V0dGluZyBjaG9zZW4sIGFuZCB0aGF0J3MgaGFwcGVuaW5nIHNwZWNpZmljYWxseSB0aHJvdWdoIGBWSVJUSU9fUENJYC4gQWxyaWdodCwgdGhhdCBtYWtlcyBzZW5zZS4gVGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgYW5kIGRpdmUgcmlnaHQgaW50byB0aGUgYEtjb25maWdgIGZpbGVzLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBjaGVjayB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBgQ09ORklHX1ZJUlRJT19QQ0lgLiBJJ2xsIGhlYWQgb3ZlciB0byBgZHJpdmVycy92aXJ0aW8vS2NvbmZpZ2AgdG8gc2VlIHdoYXQncyBkcml2aW5nICp0aGlzKiBkZWNpc2lvbi4gR290dGEgdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIGFuZCB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUuIExldCdzIHNlZSB3aGF0IHdlJ3ZlIGdvdCBpbiB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzY0MjAsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDA5OjA5OjUzLjI3NjI2MTk1NVoiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkxOTkxOTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFZJUlRJT19QQ0lcXFxcYlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3ZpcnRpby9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy92aXJ0aW8vS2NvbmZpZz0zNj1jb25maWcgVklSVElPX0hBUkRFTl9OT1RJRklDQVRJT05cXG4tLVxcbmRyaXZlcnMvdmlydGlvL0tjb25maWctNDktXFxuZHJpdmVycy92aXJ0aW8vS2NvbmZpZzo1MDpjb25maWcgVklSVElPX1BDSVxcbmRyaXZlcnMvdmlydGlvL0tjb25maWctNTEtXFx0dHJpc3RhdGUgXFxcIlBDSSBkcml2ZXIgZm9yIHZpcnRpbyBkZXZpY2VzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwOTowOTo1My4zMjU0NjU2MTNaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NTI4NjY3NTg2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBWaXJ0aW8tYmxrIFBvd2VyIE1hbmFnZW1lbnQgYW5kIFJlc2V0IExvZ2ljKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpbW1lZGlhdGVseSBzZWUgdGhhdCBgQ09ORklHX1BNX1NMRUVQYCBpcyB0aGUga2V5IHByZXByb2Nlc3NvciBkaXJlY3RpdmUgY29udHJvbGxpbmcgdGhlIGluY2x1c2lvbiBvZiB0aGUgYHZpcnRibGtfZnJlZXplYCBmdW5jdGlvbiB3aXRoaW4gYHZpcnRpb19ibGsuY2AuIFRoaXMgaXMgaW1wb3J0YW50LCBhcyBgdmlydGJsa19mcmVlemVgIGlzIGxpbmtlZCB0byBwb3dlciBtYW5hZ2VtZW50IGZ1bmN0aW9uYWxpdHksIGFuZCBsaWtlbHkgaGFuZGxlcyB0aGUgc3VzcGVuZCBwcm9jZXNzLiBTaW5jZSBgVklSVElPX0JMS2AgY29tcGlsZXMgYHZpcnRpb19ibGsuY2AsIGFuZCBgVklSVElPX1BDSWAgcHJvdmlkZXMgdGhlIFBDSSB0cmFuc3BvcnQgZm9yIHZpcnRpbyBkZXZpY2VzIChhbmQgaW5jbHVkZXMgdGhlIGNydWNpYWwgYHZpcnRpb19wY2lfcmVzZXRfcHJlcGFyZWAgcmVzZXQgaGFuZGxlciksIGl0J3Mgc2FmZSB0byBhc3N1bWUgYFBDSWAgaXMgZm91bmRhdGlvbmFsIGZvciBgVklSVElPX1BDSWAgdG8gb3BlcmF0ZS5cblxuVG8gY29uZmlybSBteSB1bmRlcnN0YW5kaW5nLCBsZXQncyBqdXN0IG1ha2UgYSBxdWljayBtZW50YWwgbGlzdCBvZiB0aGUgY29uZmlnIG9wdGlvbnMgYXQgcGxheSBoZXJlOiBgVklSVElPX0JMS2AsIGBWSVJUSU9fUENJYCwgYFBNX1NMRUVQYCwgYW5kIGBQQ0lgLiBHb3QgaXQuXG5cbk5vdywgbGV0J3MgcXVpY2tseSByZXZpZXcgdGhlIGNvcmUgc3ltYm9scyBpbnZvbHZlZDogYHZpcnRibGtfZnJlZXplX3ByaXZgLCBgdmlydGJsa19yZXNldF9wcmVwYXJlYCwgYW5kIGB2aXJ0YmxrX2ZyZWV6ZWAuIEknbSBhbHJlYWR5IGF3YXJlIG9mIHRoZWlyIGZ1bmN0aW9uLlxuXG5GaW5hbGx5LCBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBzb2xpZCBvbiB0aGUgcmVhc29uaW5nIGZvciB0aGlzIHBhdGNoLiBJIHVuZGVyc3RhbmQgaXQgcmVwbGFjZXMgdGhlIG5vbi1ibG9ja2luZyBgYmxrX21xX3F1aWVzY2VfcXVldWVfbm93YWl0KHEpYCB3aXRoIHRoZSBibG9ja2luZyBgYmxrX21xX3F1aWVzY2VfcXVldWUocSlgIHdpdGhpbiBgdmlydGJsa19mcmVlemVfcHJpdigpYC4gVGhpcyBlbnN1cmVzIGFsbCBpbi1mbGlnaHQgcmVxdWVzdHMgYXJlIGNvbXBsZXRlZCBiZWZvcmUgdGhlIHZpcnRxdWV1ZXMgYXJlIHRvcm4gZG93bi4gVGhpcyBmdW5jdGlvbiBpcyByZWFjaGFibGUgaW4gdHdvIHdheXM6IHRocm91Z2ggdGhlIFBDSSByZXNldCBvciB0aHJvdWdoIHRoZSBwb3dlciBtYW5hZ2VtZW50IGZyZWV6ZS9zdXNwZW5kIHByb2Nlc3MuIEl0IGxvb2tzIGxpa2UgdGhlIFBDSSByZXNldCBpcyB0cmlnZ2VyZWQgdmlhIHN5c2ZzLCBvciB0aGUgYHZpcnRibGtfcmVzZXRfcHJlcGFyZWAuIEJlY2F1c2UgdGhpcyBpcyBhIHRvdWNoIHRvIGxpdmUgZHJpdmVyIGNvZGUgaW4gYSB2aXJ0aW8gZW52aXJvbm1lbnQsIGZ1enppbmcgaXMgYWJzb2x1dGVseSB3YXJyYW50ZWQgdG8gZW5zdXJlIHRoaXMgY2hhbmdlIGRvZXNuJ3QgaW50cm9kdWNlIGFueSByZWdyZXNzaW9ucyBvciB1bmV4cGVjdGVkIGJlaGF2aW9yLiBBbGwgc2VlbXMgZ29vZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzY3MjUsIk91dHB1dFRva2VucyI6MjA4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDA5OjA5OjU4LjYxMjE0ODI5NVoiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczNDE4MTEyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJWSVJUSU9fQkxLXCIsXG4gICAgXCJWSVJUSU9fUENJXCIsXG4gICAgXCJQTV9TTEVFUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZpcnRibGtfZnJlZXplX3ByaXZcIixcbiAgICBcInZpcnRibGtfcmVzZXRfcHJlcGFyZVwiLFxuICAgIFwidmlydGJsa19mcmVlemVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB2aXJ0YmxrX2ZyZWV6ZV9wcml2KCkgaW4gdGhlIHZpcnRpbyBibG9jayBkcml2ZXIgKGRyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jKSB0byB1c2UgYmxrX21xX3F1aWVzY2VfcXVldWUoKSBpbnN0ZWFkIG9mIGJsa19tcV9xdWllc2NlX3F1ZXVlX25vd2FpdCgpLCBlbnN1cmluZyB0aGF0IGFsbCBwZW5kaW5nIHJlcXVlc3QgZGlzcGF0Y2hlcyBjb21wbGV0ZSBiZWZvcmUgZGVsZXRpbmcgdmlydHF1ZXVlcy4gVmlydGlvIGJsb2NrIGRldmljZXMgYXJlIGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgdmlydHVhbGl6ZWQgdGVzdCBlbnZpcm9ubWVudHMgYW5kIHRoaXMgcGF0aCBpcyByZWFjaGFibGUgdmlhIFBDSSByZXNldCAodmlydGJsa19yZXNldF9wcmVwYXJlKSBvciBwb3dlciBtYW5hZ2VtZW50IHN1c3BlbmQgKHZpcnRibGtfZnJlZXplKS4gU2luY2UgdGhlIHBhdGNoIG1vZGlmaWVzIHJlYWNoYWJsZSBkcml2ZXIgbG9naWMgb24gYSB2aXJ0dWFsIGJ1cywgaXQgaXMgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJWSVJUSU9fQkxLXCIsXG4gICAgXCJWSVJUSU9fUENJXCIsXG4gICAgXCJQTV9TTEVFUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZpcnRibGtfZnJlZXplX3ByaXZcIixcbiAgICBcInZpcnRibGtfcmVzZXRfcHJlcGFyZVwiLFxuICAgIFwidmlydGJsa19mcmVlemVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB2aXJ0YmxrX2ZyZWV6ZV9wcml2KCkgaW4gdGhlIHZpcnRpbyBibG9jayBkcml2ZXIgKGRyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jKSB0byB1c2UgYmxrX21xX3F1aWVzY2VfcXVldWUoKSBpbnN0ZWFkIG9mIGJsa19tcV9xdWllc2NlX3F1ZXVlX25vd2FpdCgpLCBlbnN1cmluZyB0aGF0IGFsbCBwZW5kaW5nIHJlcXVlc3QgZGlzcGF0Y2hlcyBjb21wbGV0ZSBiZWZvcmUgZGVsZXRpbmcgdmlydHF1ZXVlcy4gVmlydGlvIGJsb2NrIGRldmljZXMgYXJlIGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgdmlydHVhbGl6ZWQgdGVzdCBlbnZpcm9ubWVudHMgYW5kIHRoaXMgcGF0aCBpcyByZWFjaGFibGUgdmlhIFBDSSByZXNldCAodmlydGJsa19yZXNldF9wcmVwYXJlKSBvciBwb3dlciBtYW5hZ2VtZW50IHN1c3BlbmQgKHZpcnRibGtfZnJlZXplKS4gU2luY2UgdGhlIHBhdGNoIG1vZGlmaWVzIHJlYWNoYWJsZSBkcml2ZXIgbG9naWMgb24gYSB2aXJ0dWFsIGJ1cywgaXQgaXMgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDk6MDk6NTguNjg1NTc0NDM3WiIsIlNlcSI6NDMsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjgyNjcyMDQzMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDA5OjA5OjU4LjY4Njg3OTY4OVoiLCJTZXEiOjQ0LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjEyODI1NDEwMzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZXBsYWNlcyBibGtfbXFfcXVpZXNjZV9xdWV1ZV9ub3dhaXQocSkgd2l0aCBibGtfbXFfcXVpZXNjZV9xdWV1ZShxKSBpbiB2aXJ0YmxrX2ZyZWV6ZV9wcml2KCkgdG8gZW5zdXJlIHRoYXQgaW4tZmxpZ2h0IHJlcXVlc3RzIGFuZCBoYW5kbGVycyBmaW5pc2ggYmVmb3JlIHRoZSB2aXJ0cXVldWVzIGFyZSBkZWxldGVkIGFuZCBmcmVlZC5cXG5cXG5LTVNBTiB2cyBLQVNBTiBBcHBsaWNhYmlsaXR5Olxcbi0gS01TQU4gZGV0ZWN0cyByZWFkcyBhbmQgaW5mb3JtYXRpb24gbGVha3Mgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoaXMgcGF0Y2ggZG9lcyBub3QgYWxsb2NhdGUgbmV3IG1lbW9yeSwgaW5pdGlhbGl6ZSBvciByZWFkIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcywgY29weSBkYXRhIHRvIHVzZXIgc3BhY2UsIG9yIGFsdGVyIGRhdGEgbGVuZ3RoL2JvdW5kcyBjYWxjdWxhdGlvbnMuIFRoZXJlIGlzIHplcm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZS5cXG4tIFRoZSBjaGFuZ2UgYWRkcmVzc2VzIHJlcXVlc3QtcXVldWUgc3luY2hyb25pemF0aW9uIGFuZCBjb25jdXJyZW5jeSBkdXJpbmcgdmlydGlvLWJsayBkZXZpY2UgZnJlZXppbmcuIEFueSBidWdzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHBhdGggKHN1Y2ggYXMgcmFjZSBjb25kaXRpb25zLCBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGFjY2Vzc2VzIGR1cmluZyBxdWV1ZSB0ZWFyZG93bikgYXJlIHRyYWNrZWQgYW5kIGNhdWdodCBieSBLQVNBTiBhbmQgTE9DS0RFUC5cXG5cXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGVhNjFjNTc3ZTEzNzFhMDZkYzM5MGEzY2E2YjMyMWYwNWE2NzQyMzRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IFNlcCAxMiAwOTowODowNSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jIGIvZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmNcbmluZGV4IDMyYmYzYmEwN2E5ZGMuLjdhNTcwNTkxZTA0MGEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuY1xuKysrIGIvZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmNcbkBAIC0xNTk1LDcgKzE1OTUsNyBAQCBzdGF0aWMgaW50IHZpcnRibGtfZnJlZXplX3ByaXYoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpXG4gXG4gXHQvKiBFbnN1cmUgbm8gcmVxdWVzdHMgaW4gdmlydHF1ZXVlcyBiZWZvcmUgZGVsZXRpbmcgdnFzLiAqL1xuIFx0bWVtZmxhZ3MgPSBibGtfbXFfZnJlZXplX3F1ZXVlKHEpO1xuLVx0YmxrX21xX3F1aWVzY2VfcXVldWVfbm93YWl0KHEpO1xuK1x0YmxrX21xX3F1aWVzY2VfcXVldWUocSk7XG4gXHRibGtfbXFfdW5mcmVlemVfcXVldWUocSwgbWVtZmxhZ3MpO1xuIFxuIFx0LyogRW5zdXJlIHdlIGRvbid0IHJlY2VpdmUgYW55IG1vcmUgaW50ZXJydXB0cyAqL1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDk6MDk6NTguNjg2ODgyMDM5WiIsIlNlcSI6NDUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjUzOTY1Mjc2MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gSnVzdGlmaWNhdGlvbiBmb3IgVmlydGlvLWJsay5jIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGFza2VkIHRvIGFzc2VzcyB3aGV0aGVyIHRoaXMgcGF0Y2ggdG8gYGRyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jYCB3YXJyYW50cyBhIGRlZGljYXRlZCBLZXJuZWwgTWVtb3J5IFNhbml0aXplciAoS01TQU4pIHNlc3Npb24uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBsZXQncyBkaXZlIGluIGFuZCBzZWUgd2hhdCdzIGNoYW5nZWQuIEkgd2FudCBhIHByb3BlciBhbmFseXNpcywgbm90IGp1c3QgYSBndXQgZmVlbGluZy5cblxuSSdtIGxvb2tpbmcgYXQgdGhlIGRpZmY6IGBibGtfbXFfcXVpZXNjZV9xdWV1ZV9ub3dhaXQocSlgIGhhcyBiZWVuIGNoYW5nZWQgdG8gYGJsa19tcV9xdWllc2NlX3F1ZXVlKHEpYC4gVGhhdCdzIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgaGVyZS4gUXVpZXNjaW5nIGEgcXVldWUuLi4gdGhhdCdzIHVzdWFsbHkgYWJvdXQgZW5zdXJpbmcgdGhhdCBubyBmdXJ0aGVyIG9wZXJhdGlvbnMgYXJlIHN1Ym1pdHRlZCB0byBpdC4gVGhpcyBzdWdnZXN0cyBhIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbiBvciBtZW1vcnkgc2FmZXR5IGNvbmNlcm4gZHVyaW5nIGZyZWV6ZS90aGF3IG9wZXJhdGlvbnMsIHdoaWNoIGlzIGFsd2F5cyB3b3J0aCBhIGNsb3NlciBsb29rLlxuXG5MZXQgbWUgcmVhZCB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiBgdmlydGlvX2Jsay5jYCBhcm91bmQgbGluZSAxNTk1IHVzaW5nIHRoZSBgcmVhZC1maWxlYCBjb21tYW5kLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgKmNvbnRleHQqIG9mIHRoaXMgcXVpZXNjZSBvcGVyYXRpb24uIFdoYXQncyBgdmlydGJsa19mcmVlemVfcHJpdmAgdHJ5aW5nIHRvIGFjaGlldmU/IElzIGl0IGNyaXRpY2FsIGZvciBkYXRhIGludGVncml0eT8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBpZiBhIHJhY2UgY29uZGl0aW9uIHdlcmUgdG8gb2NjdXIgaGVyZT8gSSBuZWVkIHRvIGFuYWx5emUgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZ3Jhc3AgdGhlIGludGVudCBvZiB0aGVzZSBsaW5lcy5cblxuTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgdGhpcyBjaGFuZ2UgKm1pZ2h0KiBiZSBzaWduaWZpY2FudCBmcm9tIGEgbWVtb3J5IHNhZmV0eSBwZXJzcGVjdGl2ZS4gQSBzeW5jaHJvbm91cyBxdWllc2NlIGluc3RlYWQgb2YgYW4gYXN5bmNocm9ub3VzIG9uZSBjb3VsZCBhbHRlciB0aW1pbmcgYW5kIHRoZSBwb3RlbnRpYWwgZm9yIGNvbmN1cnJlbnQgYWNjZXNzLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGlzIGltcGFjdHMgdGhlIG92ZXJhbGwgZmxvdyBvZiBkYXRhIGFuZCBjb21tYW5kcywgZXNwZWNpYWxseSByZWdhcmRpbmcgdGhvc2UgbWVtb3J5IGZsYWdzLiBUaGlzIGNlcnRhaW5seSBtZXJpdHMgZnVydGhlciBpbnZlc3RpZ2F0aW9uIHVuZGVyIEtNU0FOLiBJIHRoaW5rIGl0IHdvdWxkIGJlIGEgZ29vZCBpZGVhIHRvIHBlcmZvcm0gYSBkZWVwZXIgYW5hbHlzaXMgd2l0aCBLTVNBTiB0byBlbnN1cmUgdGhlcmUgYXJlIG5vIHVuaW50ZW5kZWQgY29uc2VxdWVuY2VzLiBMZXQncyBkaWcgaW4gYW5kIGZpZ3VyZSBvdXQgaWYgS01TQU4gaXMgcmVhbGx5IG5lZWRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjEwMSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5MSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDA5OjEwOjA0LjA4MzQxMjk5OVoiLCJTZXEiOjQ2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDAxODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTU4NSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTU4NTpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNnZibGstXFx1MDAzZXZkZXZfbXV0ZXgpO1xcbjE1ODY6XFx0XFxuMTU4NzpcXHRcXHRwdXRfZGlzayh2YmxrLVxcdTAwM2VkaXNrKTtcXG4xNTg4OlxcdH1cXG4xNTg5OlxcdFxcbjE1OTA6XFx0c3RhdGljIGludCB2aXJ0YmxrX2ZyZWV6ZV9wcml2KHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KVxcbjE1OTE6XFx0e1xcbjE1OTI6XFx0XFx0c3RydWN0IHZpcnRpb19ibGsgKnZibGsgPSB2ZGV2LVxcdTAwM2Vwcml2O1xcbjE1OTM6XFx0XFx0c3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSB2YmxrLVxcdTAwM2VkaXNrLVxcdTAwM2VxdWV1ZTtcXG4xNTk0OlxcdFxcdHVuc2lnbmVkIGludCBtZW1mbGFncztcXG4xNTk1OlxcdFxcbjE1OTY6XFx0XFx0LyogRW5zdXJlIG5vIHJlcXVlc3RzIGluIHZpcnRxdWV1ZXMgYmVmb3JlIGRlbGV0aW5nIHZxcy4gKi9cXG4xNTk3OlxcdFxcdG1lbWZsYWdzID0gYmxrX21xX2ZyZWV6ZV9xdWV1ZShxKTtcXG4xNTk4OlxcdFxcdGJsa19tcV9xdWllc2NlX3F1ZXVlKHEpO1xcbjE1OTk6XFx0XFx0YmxrX21xX3VuZnJlZXplX3F1ZXVlKHEsIG1lbWZsYWdzKTtcXG4xNjAwOlxcdFxcbjE2MDE6XFx0XFx0LyogRW5zdXJlIHdlIGRvbid0IHJlY2VpdmUgYW55IG1vcmUgaW50ZXJydXB0cyAqL1xcbjE2MDI6XFx0XFx0dmlydGlvX3Jlc2V0X2RldmljZSh2ZGV2KTtcXG4xNjAzOlxcdFxcbjE2MDQ6XFx0XFx0LyogTWFrZSBzdXJlIG5vIHdvcmsgaGFuZGxlciBpcyBhY2Nlc3NpbmcgdGhlIGRldmljZS4gKi9cXG4xNjA1OlxcdFxcdGZsdXNoX3dvcmsoXFx1MDAyNnZibGstXFx1MDAzZWNvbmZpZ193b3JrKTtcXG4xNjA2OlxcdFxcbjE2MDc6XFx0XFx0dmRldi1cXHUwMDNlY29uZmlnLVxcdTAwM2VkZWxfdnFzKHZkZXYpO1xcbjE2MDg6XFx0XFx0a2ZyZWUodmJsay1cXHUwMDNldnFzKTtcXG4xNjA5OlxcdFxcdC8qXFxuMTYxMDpcXHRcXHQgKiBTZXQgdG8gTlVMTCB0byBwcmV2ZW50IGZyZWVpbmcgdnFzIGFnYWluIGFmdGVyIGEgZmFpbGVkIHZxc1xcbjE2MTE6XFx0XFx0ICogYWxsb2NhdGlvbiBkdXJpbmcgcmVzdW1lLiBOb3RlIHRoYXQga2ZyZWUoKSBhbHJlYWR5IGhhbmRsZXMgTlVMTFxcbjE2MTI6XFx0XFx0ICogcG9pbnRlcnMgc2FmZWx5LlxcbjE2MTM6XFx0XFx0ICovXFxuMTYxNDpcXHRcXHR2YmxrLVxcdTAwM2V2cXMgPSBOVUxMO1xcbjE2MTU6XFx0XFxuMTYxNjpcXHRcXHRyZXR1cm4gMDtcXG4xNjE3OlxcdH1cXG4xNjE4OlxcdFxcbjE2MTk6XFx0c3RhdGljIGludCB2aXJ0YmxrX3Jlc3RvcmVfcHJpdihzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldilcXG4xNjIwOlxcdHtcXG4xNjIxOlxcdFxcdHN0cnVjdCB2aXJ0aW9fYmxrICp2YmxrID0gdmRldi1cXHUwMDNlcHJpdjtcXG4xNjIyOlxcdFxcdGludCByZXQ7XFxuMTYyMzpcXHRcXG4xNjI0OlxcdFxcdHJldCA9IGluaXRfdnEodmRldi1cXHUwMDNlcHJpdik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDA5OjEwOjA0LjA4MzU1NjY3WiIsIlNlcSI6NDcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjc0Mjg3MTEzMjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQXNzZXNzbWVudDogdmlydGlvLWJsayBRdWV1ZSBRdWllc2NpbmcgU3luY2hyb25pemF0aW9uIEZpeCoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGNvcmUgb2YgdGhpcyBjaGFuZ2UgaW52b2x2ZXMgc3dhcHBpbmcgb3V0IGBibGtfbXFfcXVpZXNjZV9xdWV1ZV9ub3dhaXQocSlgIGZvciBgYmxrX21xX3F1aWVzY2VfcXVldWUocSlgLiBUaGUgY3JpdGljYWwgZGlmZmVyZW5jZSBpcyB0aGUgd2FpdGluZyBiZWhhdmlvcjogdGhlIGBub3dhaXRgIHZlcnNpb24gZG9lc24ndCBlbnN1cmUgdGhlIGNvbXBsZXRpb24gb2YgaW4tZmxpZ2h0IHJlcXVlc3RzIGJlZm9yZSBwcm9jZWVkaW5nLCB3aGlsZSB0aGUgc3RhbmRhcmQgdmVyc2lvbiAqZG9lcyouIFRoZSBjb21tZW50IGNsZWFybHkgcG9pbnRzIG91dCB0aGUgbW90aXZhdGlvbjogdG8gcHJldmVudCBhIHJhY2Ugd2hlcmUgcmVxdWVzdHMgbWlnaHQgc3RpbGwgYmUgb3BlcmF0aW5nIG9uIHZpcnRxdWV1ZXMgd2hpbGUgd2UncmUgdHJ5aW5nIHRvIGRlbGV0ZSB0aGVtLCBsZWFkaW5nIHRvIGEgbmFzdHkgdXNlLWFmdGVyLWZyZWUgb3IgbWVtb3J5IGNvcnJ1cHRpb24gd2hlbiBgZGVsX3ZxcygpYCBpcyBjYWxsZWQsIGZvbGxvd2VkIGJ5IGBrZnJlZSh2YmxrLVx1MDAzZXZxcylgLlxuXG5UaGUgY3J1Y2lhbCBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoaXMgY2hhbmdlIGludHJvZHVjZXMgb3IgZXhwb3NlcyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIEkndmUgZ290IHRvIGNhcmVmdWxseSBjb25zaWRlciB0aGlzLCBnaXZlbiBLTVNBTidzIHB1cnBvc2UuIFJldmlld2luZyB0aGUgY29kZSwgSSBzZWUgbm8gaW5kaWNhdGlvbiBvZiB1bmluaXRpYWxpemVkIHN0cnVjdHVyZXMgYmVpbmcgc2VudCB0byB1c2Vyc3BhY2UsIG5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGJlaW5nIHJlYWQsIG5vIG5ldyBhbGxvY2F0aW9ucyBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzLCBhbmQgbm8gY2hhbmdlcyB0byBib3VuZHMgY2hlY2tzIG9yIGxvZ2ljIHRoYXQgY291bGQgbGVhZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3MuIFdlIGFyZSBmaXhpbmcgYSBjb25jdXJyZW5jeS9zeW5jaHJvbml6YXRpb24gaXNzdWUgaGVyZSAoc3BlY2lmaWNhbGx5LCBwb3RlbnRpYWxseSBwcmV2ZW50aW5nIGEgdXNlLWFmdGVyLWZyZWUgb3IgcmFjZSBjb25kaXRpb24gd2hlbiBkZWxldGluZyB2aXJ0cXVldWVzIHdoaWxlIHJlcXVlc3RzIGFyZSBpbi1mbGlnaHQpLiBBbnkgc3VjaCBpc3N1ZXMgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIG9yIExPQ0tERVAuXG5cblJlbWVtYmVyIHRoZSBjcml0aWNhbCBkaXN0aW5jdGlvbjogS0FTQU4gY292ZXJzIG91dC1vZi1ib3VuZHMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZXMsIGFuZCBpbnZhbGlkIGZyZWVzLCBhbmQgTE9DS0RFUCBjYXRjaGVzIGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzLiBLTVNBTiBmb2N1c2VzIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIChzdGFjaywgaGVhcCwgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5UaGUgcnVsZSBvZiB0aHVtYiBpczogaWYgdGhlIGJ1ZyBpcyBzb21ldGhpbmcgdGhhdCBLQVNBTiwgTE9DS0RFUCwgb3Igb3RoZXIgc3RhbmRhcmQgYnVnIGRldGVjdG9ycyB3b3VsZCBjYXRjaCwgdGhlcmUncyBubyBuZWVkIHRvIHJ1biBLTVNBTi4gVGhpcyBwYXRjaCBmb2N1c2VzIG9uIHN5bmNocm9uaXphdGlvbiBhbmQgY29uY3VycmVuY3ksIG5vdCB1bmluaXRpYWxpemVkIG1lbW9yeS4gTW9yZW92ZXIsIGFsbCBzdGFjayBhbmQgaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQvaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IGluaXRpYWxpemVkICh6ZXJvZWQvbWVtc2V0L2t6YWxsb2MnZCkgYmVmb3JlIGJlaW5nIHJlYWQuIFRoaXMgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblRoZSBwYXRjaCdzIHB1cnBvc2UgaXMgYSBzeW5jaHJvbml6YXRpb24gZml4OiBlbnN1cmluZyB0aGUgcXVldWUgaXMgZnVsbHkgcXVpZXNjZWQgYmVmb3JlIGRlbGV0aW5nIHZpcnRxdWV1ZXMuIEZhaWx1cmVzIGhlcmUgd291bGQgYmUgcmVsYXRlZCB0byBjb25jdXJyZW5jeSwgc3luY2hyb25pemF0aW9uLCBvciBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgZHVyaW5nIGZyZWV6ZS9wb3dlciBtYW5hZ2VtZW50IG9mIHZpcnRpby1ibGsuXG5cblRoZXJlZm9yZSwgKk5lZWRzS01TQU4gPSBmYWxzZSouXG5cblRvIGp1c3RpZnkgdGhpcyBjb25jbHVzaW9uLCBJJ2xsIGNvbmNpc2VseSBleHBsYWluOlxuXG4qICAgVGhlIHBhdGNoJ3MgZnVuY3Rpb25hbGl0eTogUmVwbGFjaW5nIHRoZSBub24td2FpdGluZyB2ZXJzaW9uIHdpdGggdGhlIHdhaXRpbmcgdmVyc2lvbiBpbiBgdmlydGJsa19mcmVlemVfcHJpdigpYCBlbnN1cmVzIGNvbXBsZXRpb24gb2YgaW4tZmxpZ2h0IHJlcXVlc3RzIGJlZm9yZSBmcmVlaW5nIHZpcnRpbyBxdWV1ZXMuXG4qICAgS01TQU4ncyByZWxldmFuY2U6IEtNU0FOIGRldGVjdHMgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlIG9yIGxlYWtzLiBUaGlzIHBhdGNoIGhhcyBubyBzdWNoIHJpc2suXG4qICAgS0FTQU4vTE9DS0RFUCdzIHJlbGV2YW5jZTogVGhlIGZpeGVkIGJ1ZyBpcyBhYm91dCBjb25jdXJyZW5jeS9zeW5jaHJvbml6YXRpb24sIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgYW5kIHVzZS1hZnRlci1mcmVlcywgd2hpY2ggS0FTQU4vTE9DS0RFUCB3b3VsZCBkZXRlY3QuXG4qICAgVGhlIG92ZXJhbGwgY29uY2x1c2lvbiBpcyB0aGF0IGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCBuZWNlc3NhcnkgaGVyZS4gSSBjYW4gZXhlY3V0ZSBgc2V0LXJlc3VsdHNgIG5vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQwMCwiT3V0cHV0VG9rZW5zIjoyMjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MzcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwOToxMDoxMS41MTIyNzEwNTlaIiwiU2VxIjo0OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjY4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlcGxhY2VzIGJsa19tcV9xdWllc2NlX3F1ZXVlX25vd2FpdChxKSB3aXRoIGJsa19tcV9xdWllc2NlX3F1ZXVlKHEpIGluIHZpcnRibGtfZnJlZXplX3ByaXYoKSB0byBlbnN1cmUgdGhhdCBpbi1mbGlnaHQgcmVxdWVzdHMgYW5kIGhhbmRsZXJzIGZpbmlzaCBiZWZvcmUgdGhlIHZpcnRxdWV1ZXMgYXJlIGRlbGV0ZWQgYW5kIGZyZWVkLlxcblxcbktNU0FOIHZzIEtBU0FOIEFwcGxpY2FiaWxpdHk6XFxuLSBLTVNBTiBkZXRlY3RzIHJlYWRzIGFuZCBpbmZvcm1hdGlvbiBsZWFrcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhpcyBwYXRjaCBkb2VzIG5vdCBhbGxvY2F0ZSBuZXcgbWVtb3J5LCBpbml0aWFsaXplIG9yIHJlYWQgdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzLCBjb3B5IGRhdGEgdG8gdXNlciBzcGFjZSwgb3IgYWx0ZXIgZGF0YSBsZW5ndGgvYm91bmRzIGNhbGN1bGF0aW9ucy4gVGhlcmUgaXMgemVybyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLlxcbi0gVGhlIGNoYW5nZSBhZGRyZXNzZXMgcmVxdWVzdC1xdWV1ZSBzeW5jaHJvbml6YXRpb24gYW5kIGNvbmN1cnJlbmN5IGR1cmluZyB2aXJ0aW8tYmxrIGRldmljZSBmcmVlemluZy4gQW55IGJ1Z3MgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcGF0aCAoc3VjaCBhcyByYWNlIGNvbmRpdGlvbnMsIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYWNjZXNzZXMgZHVyaW5nIHF1ZXVlIHRlYXJkb3duKSBhcmUgdHJhY2tlZCBhbmQgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBMT0NLREVQLlxcblxcblRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVwbGFjZXMgYmxrX21xX3F1aWVzY2VfcXVldWVfbm93YWl0KHEpIHdpdGggYmxrX21xX3F1aWVzY2VfcXVldWUocSkgaW4gdmlydGJsa19mcmVlemVfcHJpdigpIHRvIGVuc3VyZSB0aGF0IGluLWZsaWdodCByZXF1ZXN0cyBhbmQgaGFuZGxlcnMgZmluaXNoIGJlZm9yZSB0aGUgdmlydHF1ZXVlcyBhcmUgZGVsZXRlZCBhbmQgZnJlZWQuXFxuXFxuS01TQU4gdnMgS0FTQU4gQXBwbGljYWJpbGl0eTpcXG4tIEtNU0FOIGRldGVjdHMgcmVhZHMgYW5kIGluZm9ybWF0aW9uIGxlYWtzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGlzIHBhdGNoIGRvZXMgbm90IGFsbG9jYXRlIG5ldyBtZW1vcnksIGluaXRpYWxpemUgb3IgcmVhZCB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMsIGNvcHkgZGF0YSB0byB1c2VyIHNwYWNlLCBvciBhbHRlciBkYXRhIGxlbmd0aC9ib3VuZHMgY2FsY3VsYXRpb25zLiBUaGVyZSBpcyB6ZXJvIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UuXFxuLSBUaGUgY2hhbmdlIGFkZHJlc3NlcyByZXF1ZXN0LXF1ZXVlIHN5bmNocm9uaXphdGlvbiBhbmQgY29uY3VycmVuY3kgZHVyaW5nIHZpcnRpby1ibGsgZGV2aWNlIGZyZWV6aW5nLiBBbnkgYnVncyBhc3NvY2lhdGVkIHdpdGggdGhpcyBwYXRoIChzdWNoIGFzIHJhY2UgY29uZGl0aW9ucywgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBhY2Nlc3NlcyBkdXJpbmcgcXVldWUgdGVhcmRvd24pIGFyZSB0cmFja2VkIGFuZCBjYXVnaHQgYnkgS0FTQU4gYW5kIExPQ0tERVAuXFxuXFxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowsx85t[1] Phase: Succeeded StartedAt: 2026-09-12 09:10:22 +0000 UTC FinishedAt: 2026-09-12 09:10:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsx85t[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-12 09:10:22 +0000 UTC FinishedAt: 2026-09-12 09:10:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsx85t[2] Phase: Succeeded StartedAt: 2026-09-12 09:10:22 +0000 UTC FinishedAt: 2026-09-12 09:59:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsx85t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTIO_BLK","VIRTIO_PCI","PM_SLEEP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"50d05c7c76c96b90462f24debacca971d2e86713","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","kvm"],"focus_symbols":["virtblk_freeze_priv","virtblk_reset_prepare","virtblk_freeze"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTIO_BLK","VIRTIO_PCI","PM_SLEEP"],"series_id":"06d09dac-14d4-4fc8-8dd0-ee292b9f35c9","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-09-12 09:10:22 +0000 UTC FinishedAt: 2026-09-12 09:59:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTIO_BLK","VIRTIO_PCI","PM_SLEEP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"base_commit":"50d05c7c76c96b90462f24debacca971d2e86713","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","kvm"],"focus_symbols":["virtblk_freeze_priv","virtblk_reset_prepare","virtblk_freeze"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTIO_BLK","VIRTIO_PCI","PM_SLEEP"],"series_id":"06d09dac-14d4-4fc8-8dd0-ee292b9f35c9","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-workflowsx85t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTIO_BLK","VIRTIO_PCI","PM_SLEEP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"50d05c7c76c96b90462f24debacca971d2e86713","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","kvm"],"focus_symbols":["virtblk_freeze_priv","virtblk_reset_prepare","virtblk_freeze"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTIO_BLK","VIRTIO_PCI","PM_SLEEP"],"series_id":"06d09dac-14d4-4fc8-8dd0-ee292b9f35c9","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-09-12 09:10:22 +0000 UTC FinishedAt: 2026-09-12 09:10:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsx85t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTIO_BLK","VIRTIO_PCI","PM_SLEEP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"50d05c7c76c96b90462f24debacca971d2e86713","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","kvm"],"focus_symbols":["virtblk_freeze_priv","virtblk_reset_prepare","virtblk_freeze"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTIO_BLK","VIRTIO_PCI","PM_SLEEP"],"series_id":"06d09dac-14d4-4fc8-8dd0-ee292b9f35c9","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-09-12 09:10:22 +0000 UTC FinishedAt: 2026-09-12 09:10:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTIO_BLK","VIRTIO_PCI","PM_SLEEP"],"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-workflowsx85t/series-workflowsx85t-convert-artifact-874883706/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsx85t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTIO_BLK","VIRTIO_PCI","PM_SLEEP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"50d05c7c76c96b90462f24debacca971d2e86713","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","kvm"],"focus_symbols":["virtblk_freeze_priv","virtblk_reset_prepare","virtblk_freeze"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTIO_BLK","VIRTIO_PCI","PM_SLEEP"],"series_id":"06d09dac-14d4-4fc8-8dd0-ee292b9f35c9","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-09-12 09:10:32 +0000 UTC FinishedAt: 2026-09-12 09:26:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsx85t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTIO_BLK","VIRTIO_PCI","PM_SLEEP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"50d05c7c76c96b90462f24debacca971d2e86713","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","kvm"],"focus_symbols":["virtblk_freeze_priv","virtblk_reset_prepare","virtblk_freeze"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTIO_BLK","VIRTIO_PCI","PM_SLEEP"],"series_id":"06d09dac-14d4-4fc8-8dd0-ee292b9f35c9","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-09-12 09:10:32 +0000 UTC FinishedAt: 2026-09-12 09:26:57 +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:*0790a972-607b-4135-968f-055a3b92cbbe,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-workflowsx85t/series-workflowsx85t-convert-artifact-874883706/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": "c702890f-b50c-4df8-be51-1cb6d3bb7032", "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-workflowsx85t/series-workflowsx85t-build-action-3209657128/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsx85t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTIO_BLK","VIRTIO_PCI","PM_SLEEP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"50d05c7c76c96b90462f24debacca971d2e86713","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","kvm"],"focus_symbols":["virtblk_freeze_priv","virtblk_reset_prepare","virtblk_freeze"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTIO_BLK","VIRTIO_PCI","PM_SLEEP"],"series_id":"06d09dac-14d4-4fc8-8dd0-ee292b9f35c9","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-09-12 09:10:32 +0000 UTC FinishedAt: 2026-09-12 09:26:47 +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:*0790a972-607b-4135-968f-055a3b92cbbe,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-workflowsx85t/series-workflowsx85t-convert-artifact-874883706/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": "c702890f-b50c-4df8-be51-1cb6d3bb7032", "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-workflowsx85t/series-workflowsx85t-build-action-3209657128/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsx85t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTIO_BLK","VIRTIO_PCI","PM_SLEEP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"50d05c7c76c96b90462f24debacca971d2e86713","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","kvm"],"focus_symbols":["virtblk_freeze_priv","virtblk_reset_prepare","virtblk_freeze"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTIO_BLK","VIRTIO_PCI","PM_SLEEP"],"series_id":"06d09dac-14d4-4fc8-8dd0-ee292b9f35c9","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-09-12 09:26:57 +0000 UTC FinishedAt: 2026-09-12 09:26:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsx85t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTIO_BLK","VIRTIO_PCI","PM_SLEEP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"50d05c7c76c96b90462f24debacca971d2e86713","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","kvm"],"focus_symbols":["virtblk_freeze_priv","virtblk_reset_prepare","virtblk_freeze"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTIO_BLK","VIRTIO_PCI","PM_SLEEP"],"series_id":"06d09dac-14d4-4fc8-8dd0-ee292b9f35c9","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-09-12 09:26:57 +0000 UTC FinishedAt: 2026-09-12 09:26:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsx85t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTIO_BLK","VIRTIO_PCI","PM_SLEEP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"50d05c7c76c96b90462f24debacca971d2e86713","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","kvm"],"focus_symbols":["virtblk_freeze_priv","virtblk_reset_prepare","virtblk_freeze"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTIO_BLK","VIRTIO_PCI","PM_SLEEP"],"series_id":"06d09dac-14d4-4fc8-8dd0-ee292b9f35c9","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-09-12 09:26:57 +0000 UTC FinishedAt: 2026-09-12 09:27:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsx85t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTIO_BLK","VIRTIO_PCI","PM_SLEEP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"50d05c7c76c96b90462f24debacca971d2e86713","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","kvm"],"focus_symbols":["virtblk_freeze_priv","virtblk_reset_prepare","virtblk_freeze"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTIO_BLK","VIRTIO_PCI","PM_SLEEP"],"series_id":"06d09dac-14d4-4fc8-8dd0-ee292b9f35c9","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-09-12 09:26:57 +0000 UTC FinishedAt: 2026-09-12 09:27:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTIO_BLK","VIRTIO_PCI","PM_SLEEP"],"series_id":"06d09dac-14d4-4fc8-8dd0-ee292b9f35c9","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-workflowsx85t/series-workflowsx85t-convert-artifact-567902165/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsx85t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTIO_BLK","VIRTIO_PCI","PM_SLEEP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"50d05c7c76c96b90462f24debacca971d2e86713","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","kvm"],"focus_symbols":["virtblk_freeze_priv","virtblk_reset_prepare","virtblk_freeze"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTIO_BLK","VIRTIO_PCI","PM_SLEEP"],"series_id":"06d09dac-14d4-4fc8-8dd0-ee292b9f35c9","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-09-12 09:27:07 +0000 UTC FinishedAt: 2026-09-12 09:29:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsx85t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTIO_BLK","VIRTIO_PCI","PM_SLEEP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"50d05c7c76c96b90462f24debacca971d2e86713","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","kvm"],"focus_symbols":["virtblk_freeze_priv","virtblk_reset_prepare","virtblk_freeze"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTIO_BLK","VIRTIO_PCI","PM_SLEEP"],"series_id":"06d09dac-14d4-4fc8-8dd0-ee292b9f35c9","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-09-12 09:27:07 +0000 UTC FinishedAt: 2026-09-12 09:28:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*c702890f-b50c-4df8-be51-1cb6d3bb7032,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-workflowsx85t/series-workflowsx85t-build-action-3209657128/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-workflowsx85t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTIO_BLK","VIRTIO_PCI","PM_SLEEP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"50d05c7c76c96b90462f24debacca971d2e86713","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","kvm"],"focus_symbols":["virtblk_freeze_priv","virtblk_reset_prepare","virtblk_freeze"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTIO_BLK","VIRTIO_PCI","PM_SLEEP"],"series_id":"06d09dac-14d4-4fc8-8dd0-ee292b9f35c9","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-09-12 09:29:04 +0000 UTC FinishedAt: 2026-09-12 09:29:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsx85t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTIO_BLK","VIRTIO_PCI","PM_SLEEP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"50d05c7c76c96b90462f24debacca971d2e86713","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","kvm"],"focus_symbols":["virtblk_freeze_priv","virtblk_reset_prepare","virtblk_freeze"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTIO_BLK","VIRTIO_PCI","PM_SLEEP"],"series_id":"06d09dac-14d4-4fc8-8dd0-ee292b9f35c9","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-09-12 09:29:04 +0000 UTC FinishedAt: 2026-09-12 09:29:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsx85t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTIO_BLK","VIRTIO_PCI","PM_SLEEP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"50d05c7c76c96b90462f24debacca971d2e86713","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","kvm"],"focus_symbols":["virtblk_freeze_priv","virtblk_reset_prepare","virtblk_freeze"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTIO_BLK","VIRTIO_PCI","PM_SLEEP"],"series_id":"06d09dac-14d4-4fc8-8dd0-ee292b9f35c9","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-09-12 09:29:04 +0000 UTC FinishedAt: 2026-09-12 09:45:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsx85t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTIO_BLK","VIRTIO_PCI","PM_SLEEP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"50d05c7c76c96b90462f24debacca971d2e86713","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","kvm"],"focus_symbols":["virtblk_freeze_priv","virtblk_reset_prepare","virtblk_freeze"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTIO_BLK","VIRTIO_PCI","PM_SLEEP"],"series_id":"06d09dac-14d4-4fc8-8dd0-ee292b9f35c9","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-09-12 09:29:04 +0000 UTC FinishedAt: 2026-09-12 09:45:39 +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:*0790a972-607b-4135-968f-055a3b92cbbe,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-workflowsx85t/series-workflowsx85t-convert-artifact-567902165/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": "b2d4c971-3225-44c3-9ef2-73daef22f732", "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-workflowsx85t/series-workflowsx85t-build-action-2143986017/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsx85t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTIO_BLK","VIRTIO_PCI","PM_SLEEP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"50d05c7c76c96b90462f24debacca971d2e86713","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","kvm"],"focus_symbols":["virtblk_freeze_priv","virtblk_reset_prepare","virtblk_freeze"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTIO_BLK","VIRTIO_PCI","PM_SLEEP"],"series_id":"06d09dac-14d4-4fc8-8dd0-ee292b9f35c9","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-09-12 09:29:04 +0000 UTC FinishedAt: 2026-09-12 09:45:29 +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:*0790a972-607b-4135-968f-055a3b92cbbe,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-workflowsx85t/series-workflowsx85t-convert-artifact-567902165/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": "b2d4c971-3225-44c3-9ef2-73daef22f732", "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-workflowsx85t/series-workflowsx85t-build-action-2143986017/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsx85t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTIO_BLK","VIRTIO_PCI","PM_SLEEP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"50d05c7c76c96b90462f24debacca971d2e86713","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","kvm"],"focus_symbols":["virtblk_freeze_priv","virtblk_reset_prepare","virtblk_freeze"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTIO_BLK","VIRTIO_PCI","PM_SLEEP"],"series_id":"06d09dac-14d4-4fc8-8dd0-ee292b9f35c9","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-09-12 09:45:39 +0000 UTC FinishedAt: 2026-09-12 09:45:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsx85t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTIO_BLK","VIRTIO_PCI","PM_SLEEP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"50d05c7c76c96b90462f24debacca971d2e86713","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","kvm"],"focus_symbols":["virtblk_freeze_priv","virtblk_reset_prepare","virtblk_freeze"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTIO_BLK","VIRTIO_PCI","PM_SLEEP"],"series_id":"06d09dac-14d4-4fc8-8dd0-ee292b9f35c9","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-09-12 09:45:39 +0000 UTC FinishedAt: 2026-09-12 09:45:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsx85t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTIO_BLK","VIRTIO_PCI","PM_SLEEP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"50d05c7c76c96b90462f24debacca971d2e86713","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","kvm"],"focus_symbols":["virtblk_freeze_priv","virtblk_reset_prepare","virtblk_freeze"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTIO_BLK","VIRTIO_PCI","PM_SLEEP"],"series_id":"06d09dac-14d4-4fc8-8dd0-ee292b9f35c9","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-09-12 09:45:39 +0000 UTC FinishedAt: 2026-09-12 09:47:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsx85t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTIO_BLK","VIRTIO_PCI","PM_SLEEP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"50d05c7c76c96b90462f24debacca971d2e86713","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","kvm"],"focus_symbols":["virtblk_freeze_priv","virtblk_reset_prepare","virtblk_freeze"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTIO_BLK","VIRTIO_PCI","PM_SLEEP"],"series_id":"06d09dac-14d4-4fc8-8dd0-ee292b9f35c9","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-09-12 09:45:39 +0000 UTC FinishedAt: 2026-09-12 09:47:23 +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:*b2d4c971-3225-44c3-9ef2-73daef22f732,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-workflowsx85t/series-workflowsx85t-build-action-2143986017/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-workflowsx85t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTIO_BLK","VIRTIO_PCI","PM_SLEEP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"50d05c7c76c96b90462f24debacca971d2e86713","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","kvm"],"focus_symbols":["virtblk_freeze_priv","virtblk_reset_prepare","virtblk_freeze"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTIO_BLK","VIRTIO_PCI","PM_SLEEP"],"series_id":"06d09dac-14d4-4fc8-8dd0-ee292b9f35c9","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-09-12 09:47:33 +0000 UTC FinishedAt: 2026-09-12 09:59:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsx85t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTIO_BLK","VIRTIO_PCI","PM_SLEEP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"50d05c7c76c96b90462f24debacca971d2e86713","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","kvm"],"focus_symbols":["virtblk_freeze_priv","virtblk_reset_prepare","virtblk_freeze"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTIO_BLK","VIRTIO_PCI","PM_SLEEP"],"series_id":"06d09dac-14d4-4fc8-8dd0-ee292b9f35c9","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-09-12 09:47:33 +0000 UTC FinishedAt: 2026-09-12 09:59:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"base_commit":"50d05c7c76c96b90462f24debacca971d2e86713","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","kvm"],"focus_symbols":["virtblk_freeze_priv","virtblk_reset_prepare","virtblk_freeze"],"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:*c702890f-b50c-4df8-be51-1cb6d3bb7032,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*b2d4c971-3225-44c3-9ef2-73daef22f732,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-workflowsx85t/series-workflowsx85t-build-action-3209657128/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-workflowsx85t/series-workflowsx85t-build-action-2143986017/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowsx85t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTIO_BLK","VIRTIO_PCI","PM_SLEEP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"50d05c7c76c96b90462f24debacca971d2e86713","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","kvm"],"focus_symbols":["virtblk_freeze_priv","virtblk_reset_prepare","virtblk_freeze"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTIO_BLK","VIRTIO_PCI","PM_SLEEP"],"series_id":"06d09dac-14d4-4fc8-8dd0-ee292b9f35c9","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-09-12 09:47:33 +0000 UTC FinishedAt: 2026-09-12 09:47:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsx85t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTIO_BLK","VIRTIO_PCI","PM_SLEEP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"50d05c7c76c96b90462f24debacca971d2e86713","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","kvm"],"focus_symbols":["virtblk_freeze_priv","virtblk_reset_prepare","virtblk_freeze"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTIO_BLK","VIRTIO_PCI","PM_SLEEP"],"series_id":"06d09dac-14d4-4fc8-8dd0-ee292b9f35c9","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-09-12 09:47:33 +0000 UTC FinishedAt: 2026-09-12 09:47:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"base_commit":"50d05c7c76c96b90462f24debacca971d2e86713","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","kvm"],"focus_symbols":["virtblk_freeze_priv","virtblk_reset_prepare","virtblk_freeze"],"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-workflowsx85t/series-workflowsx85t-convert-artifact-133418682/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsx85t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTIO_BLK","VIRTIO_PCI","PM_SLEEP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"50d05c7c76c96b90462f24debacca971d2e86713","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","kvm"],"focus_symbols":["virtblk_freeze_priv","virtblk_reset_prepare","virtblk_freeze"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTIO_BLK","VIRTIO_PCI","PM_SLEEP"],"series_id":"06d09dac-14d4-4fc8-8dd0-ee292b9f35c9","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-09-12 09:47:33 +0000 UTC FinishedAt: 2026-09-12 09:47:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsx85t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTIO_BLK","VIRTIO_PCI","PM_SLEEP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"50d05c7c76c96b90462f24debacca971d2e86713","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","kvm"],"focus_symbols":["virtblk_freeze_priv","virtblk_reset_prepare","virtblk_freeze"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTIO_BLK","VIRTIO_PCI","PM_SLEEP"],"series_id":"06d09dac-14d4-4fc8-8dd0-ee292b9f35c9","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-09-12 09:47:33 +0000 UTC FinishedAt: 2026-09-12 09:47:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsx85t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTIO_BLK","VIRTIO_PCI","PM_SLEEP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"50d05c7c76c96b90462f24debacca971d2e86713","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","kvm"],"focus_symbols":["virtblk_freeze_priv","virtblk_reset_prepare","virtblk_freeze"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTIO_BLK","VIRTIO_PCI","PM_SLEEP"],"series_id":"06d09dac-14d4-4fc8-8dd0-ee292b9f35c9","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-09-12 09:47:33 +0000 UTC FinishedAt: 2026-09-12 09:47:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsx85t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTIO_BLK","VIRTIO_PCI","PM_SLEEP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"50d05c7c76c96b90462f24debacca971d2e86713","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","kvm"],"focus_symbols":["virtblk_freeze_priv","virtblk_reset_prepare","virtblk_freeze"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTIO_BLK","VIRTIO_PCI","PM_SLEEP"],"series_id":"06d09dac-14d4-4fc8-8dd0-ee292b9f35c9","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-09-12 09:47:43 +0000 UTC FinishedAt: 2026-09-12 09:59:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsx85t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTIO_BLK","VIRTIO_PCI","PM_SLEEP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"50d05c7c76c96b90462f24debacca971d2e86713","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","kvm"],"focus_symbols":["virtblk_freeze_priv","virtblk_reset_prepare","virtblk_freeze"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTIO_BLK","VIRTIO_PCI","PM_SLEEP"],"series_id":"06d09dac-14d4-4fc8-8dd0-ee292b9f35c9","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-09-12 09:47:43 +0000 UTC FinishedAt: 2026-09-12 09:58:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*c702890f-b50c-4df8-be51-1cb6d3bb7032,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*b2d4c971-3225-44c3-9ef2-73daef22f732,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-workflowsx85t/series-workflowsx85t-build-action-3209657128/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-workflowsx85t/series-workflowsx85t-build-action-2143986017/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-workflowsx85t/series-workflowsx85t-convert-artifact-133418682/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,}