Name: series-workflowm7b7x Phase: Running StartedAt: 2026-08-02 08:10:30 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm7b7x[0] Phase: Running StartedAt: 2026-08-02 08:10:30 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm7b7x[0].run-triage Phase: Running StartedAt: 2026-08-02 08:10:30 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm7b7x[0].run-triage(0) Phase: Running StartedAt: 2026-08-02 08:10:30 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "1327e30657d283976c839f1bd24e2d3f68474097", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MOTORCOMM_PHY", "MDIO_MVUSB" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "1327e30657d283976c839f1bd24e2d3f68474097", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MOTORCOMM_PHY", "MDIO_MVUSB" ], "series_id": "ec9b551c-1390-4e7a-ac6c-53fe0585b775" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "yt8824_probe", "yt8824_config_init", "yt8824_config_aneg", "yt8824_aneg_done", "yt8824_read_status", "yt8824_soft_reset", "yt8824_suspend", "yt8824_resume", "yt8824_read_page", "yt8824_write_page", "genphy_c45_template_testmode" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA4OjMyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01PVE9SQ09NTV9QSFkmIzM0OywKICAgICYjMzQ7TURJT19NVlVTQiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3l0ODgyNF9wcm9iZSYjMzQ7LAogICAgJiMzNDt5dDg4MjRfY29uZmlnX2luaXQmIzM0OywKICAgICYjMzQ7eXQ4ODI0X2NvbmZpZ19hbmVnJiMzNDssCiAgICAmIzM0O3l0ODgyNF9hbmVnX2RvbmUmIzM0OywKICAgICYjMzQ7eXQ4ODI0X3JlYWRfc3RhdHVzJiMzNDssCiAgICAmIzM0O3l0ODgyNF9zb2Z0X3Jlc2V0JiMzNDssCiAgICAmIzM0O3l0ODgyNF9zdXNwZW5kJiMzNDssCiAgICAmIzM0O3l0ODgyNF9yZXN1bWUmIzM0OywKICAgICYjMzQ7eXQ4ODI0X3JlYWRfcGFnZSYjMzQ7LAogICAgJiMzNDt5dDg4MjRfd3JpdGVfcGFnZSYjMzQ7LAogICAgJiMzNDtnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgdGhlIE1vdG9yY29tbSBZVDg4MjQgUEhZIGRyaXZlci4gSXQgaW50cm9kdWNlcyBhIG5ldyBQSFkgZHJpdmVyIHN0cnVjdHVyZSB3aXRoIHZhcmlvdXMgY2FsbGJhY2tzIGZvciBwcm9iaW5nLCBpbml0aWFsaXphdGlvbiwgYXV0by1uZWdvdGlhdGlvbiwgc3RhdHVzIHJlYWRpbmcsIGFuZCBwb3dlciBtYW5hZ2VtZW50LiBUaGVzZSBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZSB2aWEgTURJTyBidXMgZW11bGF0aW9uIChlLmcuLCB1c2luZyB0aGUgTWFydmVsbCBVU0IgTURJTyBhZGFwdGVyIGRyaXZlcikuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBuZXdseSBhZGRlZCBQSFkgZHJpdmVyIGNhbGxiYWNrcyBhbmQgdGhlIGV4cG9ydGVkIGhlbHBlciBgZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZWAuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDg6MzI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBlMmRmMTllNjE2MzFlM2ZjZjM2NmRmZDI5ZmMxOWE5ZTA4MjI3MDQ0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBBdWcgMiAwODozMjo0MCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMgYi9kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmNcbmluZGV4IDMzOTZhMzhjZmMwZjIuLjg2OGEwYzlmMjlhN2UgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uY1xuQEAgLTEsMjQgJiM0MzsxLDMzIEBAXG4gLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAmIzQzO1xuIC8qXG4tICogTW90b3Jjb21tIDg1MTEvODUyMS84NTIyLzg1MzEvODUzMVMvODgyMSBQSFkgZHJpdmVyLlxuJiM0MzsgKiBNb3RvcmNvbW0gODUxMS84NTIxLzg1MjIvODUzMS84NTMxUy84ODIxLzg4MjQgUEhZIGRyaXZlci5cbiAgKlxuICAqIEF1dGhvcjogUGV0ZXIgR2VpcyBcdTAwM2NwZ3dpcGVvdXRAZ21haWwuY29tXHUwMDNlXG4gICogQXV0aG9yOiBGcmFuayBcdTAwM2NGcmFuay5TYWVAbW90b3ItY29tbS5jb21cdTAwM2VcbiYjNDM7ICogQXV0aG9yOiBLeWxlIFx1MDAzY2t5bGUuc3dpdGNoQG1vdG9yLWNvbW0uY29tXHUwMDNlXG4gICovXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY2xrLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ldGhlcmRldmljZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva2VybmVsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9vZi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGh5LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wcm9wZXJ0eS5oXHUwMDNlXG4gXG4mIzQzOyNpbmNsdWRlIFwmIzM0O3BoeWxpYi5oXCYjMzQ7XG4mIzQzO1xuJiM0MzsvKiBkZWZpbmUgUEhZODgyNCB0b3AgZXh0ZW5kIGFkZHIgb2Zmc2V0IGludGVybmFsIGFuZCBleHRlcm5hbCovXG4mIzQzOyNkZWZpbmUgSU5URVJOQUxfUEhZODgyNF9UT1BfRVhURU5EX09GRlNFVCAgICAoNSlcbiYjNDM7I2RlZmluZSBFWFRFUk5BTF9QSFk4ODI0X1RPUF9FWFRFTkRfT0ZGU0VUICAgICg0KVxuJiM0MztcbiAjZGVmaW5lIFBIWV9JRF9ZVDg1MTFcdFx0MHgwMDAwMDEwYVxuICNkZWZpbmUgUEhZX0lEX1lUODUyMVx0XHQweDAwMDAwMTFhXG4gI2RlZmluZSBQSFlfSURfWVQ4NTIyXHRcdDB4NGY1MWU5MjhcbiAjZGVmaW5lIFBIWV9JRF9ZVDg1MzFcdFx0MHg0ZjUxZTkxYlxuICNkZWZpbmUgUEhZX0lEX1lUODUzMVNcdFx0MHg0ZjUxZTkxYVxuICNkZWZpbmUgUEhZX0lEX1lUODgyMVx0XHQweDRmNTFlYTE5XG4mIzQzOyNkZWZpbmUgUEhZX0lEX1lUODgyNFx0XHQweDRmNTFlOGI4XG4gLyogWVQ4NTIxL1lUODUzMVMvWVQ4ODIxIFJlZ2lzdGVyIE92ZXJ2aWV3XG4gICpcdFVUUCBSZWdpc3RlciBzcGFjZVx0fFx0RklCRVIgUmVnaXN0ZXIgc3BhY2VcbiAgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5AQCAtMzAsNiAmIzQzOzM5LDE4IEBAXG4gICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAqL1xuIFxuJiM0MzsvKiBZVDg4MjQgUmVnaXN0ZXIgT3ZlcnZpZXdcbiYjNDM7ICpcdFVUUCBSZWdpc3RlciBzcGFjZVx0fFx0RklCRVIgUmVnaXN0ZXIgc3BhY2VcbiYjNDM7ICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuJiM0MzsgKiB8XHRVVFAgTUlJXHRcdFx0fFx0RklCRVIgTUlJXHQgICAgICAgIHxcbiYjNDM7ICogfFx0VVRQIE1NRFx0XHRcdHxcdFx0XHRcdHxcbiYjNDM7ICogfFx0VVRQIEV4dGVuZGVkXHRcdHxcdEZJQkVSIEV4dGVuZGVkXHRcdHxcbiYjNDM7ICogfFx0VVRQIFRvcCBFeHRlbmRlZFx0fFx0RklCRVIgVG9wIEV4dGVuZGVkXHR8XG4mIzQzOyAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiYjNDM7ICogfFx0XHRcdENvbW1vbiBUb3AgRXh0ZW5kZWRcdFx0XHR8XG4mIzQzOyAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiYjNDM7ICovXG4mIzQzO1xuIC8qIDB4MTAgfiAweDE1ICwgMHgxRSBhbmQgMHgxRiBhcmUgY29tbW9uIE1JSSByZWdpc3RlcnMgb2YgeXQgcGh5ICovXG4gXG4gLyogU3BlY2lmaWMgRnVuY3Rpb24gQ29udHJvbCBSZWdpc3RlciAqL1xuQEAgLTM3Niw2ICYjNDM7Mzk3LDE1IEBAXG4gI2RlZmluZSBZVDg4MjFfQ0hJUF9NT0RFX0FVVE9fQlgyNTAwX1NHTUlJXHQwXG4gI2RlZmluZSBZVDg4MjFfQ0hJUF9NT0RFX0ZPUkNFX0JYMjUwMFx0XHQxXG4gXG4mIzQzOyNkZWZpbmUgWVQ4ODI0X1JTU1JfU1BBQ0VfTUFTS1x0XHRcdEJJVCgwKVxuJiM0MzsjZGVmaW5lIFlUODgyNF9SU1NSX1VTWEdNSUlfU1BBQ0VcdFx0KDB4MSlcbiYjNDM7I2RlZmluZSBZVDg4MjRfUlNTUl9VVFBfU1BBQ0VcdFx0XHQoMHgwKVxuJiM0MzsjZGVmaW5lIFlUODgyNF9VVFBfVEVNUExBVEVfVEVTVF9NT0RFMVx0XHQweDIwMDBcbiYjNDM7I2RlZmluZSBZVDg4MjRfVVRQX1RFTVBMQVRFX1RFU1RfTk9STUFMXHRcdDB4MDAwMFxuJiM0MzsjZGVmaW5lIFlUODgyNF9TRFNfQ0ZHX01JTl9QUkVfTUFTS1x0XHRHRU5NQVNLKDMsIDApXG4mIzQzOyNkZWZpbmUgWVQ4ODI0X1NEU19FTl9GSUxMX1BSRVx0XHRcdEJJVCgxMylcbiYjNDM7I2RlZmluZSBZVDg4MjRfU0RTX1RYX1BSRV9QQURESU5HXHRcdCgweDcpXG4mIzQzO1xuIHN0cnVjdCB5dDg1MjFfcHJpdiB7XG4gXHQvKiBjb21ib19hZHZlcnRpc2luZyBpcyB1c2VkIGZvciBjYXNlIG9mIFlUODUyMSBpbiBjb21ibyBtb2RlLFxuIFx0ICogdGhpcyBtZWFucyB0aGF0IHl0ODUyMSBtYXkgd29yayBpbiB1dHAgb3IgZmliZXIgbW9kZSB3aGljaCBkZXBlbmRzXG5AQCAtMzk0LDYgJiM0Mzs0MjQsMTEgQEAgc3RydWN0IHl0ODUyMV9wcml2IHtcbiBcdHU4IHJlZ19wYWdlO1xuIH07XG4gXG4mIzQzO3N0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYge1xuJiM0MztcdHVuc2lnbmVkIGludCBpbnRlcmZhY2VfbW9kZTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgb2Zmc2V0O1xuJiM0Mzt9O1xuJiM0MztcbiAvKipcbiAgKiB5dHBoeV9yZWFkX2V4dCgpIC0gcmVhZCBhIFBIWSYjMzk7cyBleHRlbmRlZCByZWdpc3RlclxuICAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG5AQCAtNDMyLDYgJiM0Mzs0NjcsNzAgQEAgc3RhdGljIGludCB5dHBoeV9yZWFkX2V4dF93aXRoX2xvY2soc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTE2IHJlZ251bSlcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuJiM0MzsvKipcbiYjNDM7ICogeXRwaHlfcmVhZF90b3BfZXh0KCkgLSByZWFkIGEgUEhZJiMzOTtzIHRvcCBleHRlbmRlZCByZWdpc3RlciBmb3IgWVQ4ODI0XG4mIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4mIzQzOyAqIEByZWdudW06IHJlZ2lzdGVyIG51bWJlciB0byByZWFkXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IHRoZSB2YWx1ZSBvZiByZWdudW0gcmVnIG9yIG5lZ2F0aXZlIGVycm9yIGNvZGVcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgeXRwaHlfcmVhZF90b3BfZXh0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUxNiByZWdudW0pXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmJ1cy1cdTAwM2VtZGlvX2xvY2spO1xuJiM0MztcdHJldCA9IF9fcGh5X3BhY2thZ2Vfd3JpdGUocGh5ZGV2LCAwLCBZVFBIWV9QQUdFX1NFTEVDVCwgcmVnbnVtKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIF9fcGh5X3BhY2thZ2VfcmVhZChwaHlkZXYsIDAsIFlUUEhZX1BBR0VfREFUQSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB5dHBoeV93cml0ZV90b3BfZXh0KCkgLSB3cml0ZSBhIFBIWSYjMzk7cyB0b3AgZXh0ZW5kZWQgcmVnaXN0ZXIgZm9yIFlUODgyNFxuJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuJiM0MzsgKiBAcmVnbnVtOiByZWdpc3RlciBudW1iZXIgdG8gd3JpdGVcbiYjNDM7ICogQHZhbDogcmVnaXN0ZXIgdmFsIHRvIHdyaXRlXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IHRoZSB2YWx1ZSBvZiByZWdudW0gcmVnIG9yIG5lZ2F0aXZlIGVycm9yIGNvZGVcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgeXRwaHlfd3JpdGVfdG9wX2V4dChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MTYgcmVnbnVtLFxuJiM0MztcdFx0XHQgICAgICAgdTE2IHZhbClcbiYjNDM7e1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uYnVzLVx1MDAzZW1kaW9fbG9jayk7XG4mIzQzO1x0cmV0ID0gX19waHlfcGFja2FnZV93cml0ZShwaHlkZXYsIDAsIFlUUEhZX1BBR0VfU0VMRUNULCByZWdudW0pO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gX19waHlfcGFja2FnZV93cml0ZShwaHlkZXYsIDAsIFlUUEhZX1BBR0VfREFUQSwgdmFsKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2soKSAtIHdyaXRlIHBhZ2UgZm9yIFlUODgyNFxuJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuJiM0MzsgKiBAcGFnZTogcmVnIHBhZ2UoWVQ4ODI0X1JTU1JfVVNYR01JSV9TUEFDRS9ZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm5zOiB0aGUgdmFsdWUgb2YgcmVnbnVtIHJlZyBvciBuZWdhdGl2ZSBlcnJvciBjb2RlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2soc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IHBhZ2UpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRwaHlfbG9ja19tZGlvX2J1cyhwaHlkZXYpO1xuJiM0MztcdHJldCA9IHl0cGh5X3JlYWRfdG9wX2V4dChwaHlkZXYsIFlUODUyMV9SRUdfU1BBQ0VfU0VMRUNUX1JFRyk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHRyZXQgXHUwMDI2PSB+WVQ4ODI0X1JTU1JfU1BBQ0VfTUFTSztcbiYjNDM7XHRyZXQgfD0gKHBhZ2UgXHUwMDI2IFlUODgyNF9SU1NSX1NQQUNFX01BU0spO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX3RvcF9leHQocGh5ZGV2LCBZVDg1MjFfUkVHX1NQQUNFX1NFTEVDVF9SRUcsIHJldCk7XG4mIzQzO1xuJiM0MztlcnJfcmVzdG9yZV9wYWdlOlxuJiM0MztcdHBoeV91bmxvY2tfbWRpb19idXMocGh5ZGV2KTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuIC8qKlxuICAqIHl0cGh5X3dyaXRlX2V4dCgpIC0gd3JpdGUgYSBQSFkmIzM5O3MgZXh0ZW5kZWQgcmVnaXN0ZXJcbiAgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuQEAgLTYyMSwxMSAmIzQzOzcyMCw5OTggQEAgc3RhdGljIGludCB5dHBoeV9zZXRfd29sKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHN0cnVjdCBldGh0b29sX3dvbGluZm8gKndvbClcbiBcdFx0cmV0ID0gX19waHlfbW9kaWZ5KHBoeWRldiwgWVRQSFlfSU5URVJSVVBUX0VOQUJMRV9SRUcsXG4gXHRcdFx0XHQgICBZVFBIWV9JRVJfV09MLCAwKTtcbiBcdFx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztlcnJfcmVzdG9yZV9wYWdlOlxuJiM0MztcdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB5dDg4MjRfcmVhZF9wYWdlKCkgLSByZWFkIFBIWTg4MjQgcmVnIHBhZ2VcbiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogY3VycmVudCByZWcgc3BhY2Ugb2YgeXQ4ODI0IChZVDg4MjRfUlNTUl9VU1hHTUlJX1NQQUNFL1xuJiM0MzsgKiBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3JlYWRfcGFnZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0aW50IG9sZF9wYWdlO1xuJiM0MztcbiYjNDM7XHRvbGRfcGFnZSA9IHl0cGh5X3JlYWRfdG9wX2V4dChwaHlkZXYsIFlUODUyMV9SRUdfU1BBQ0VfU0VMRUNUX1JFRyk7XG4mIzQzO1x0aWYgKG9sZF9wYWdlIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIG9sZF9wYWdlO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gb2xkX3BhZ2UgXHUwMDI2IFlUODgyNF9SU1NSX1NQQUNFX01BU0s7XG4mIzQzO307XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X3dyaXRlX3BhZ2UoKSAtIHdyaXRlIHJlZyBwYWdlXG4mIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4mIzQzOyAqIEBwYWdlOiBSZWcgcGFnZShZVDg4MjRfUlNTUl9VU1hHTUlJX1NQQUNFL1lUODgyNF9SU1NSX1VUUF9TUEFDRSkgdG8gd3JpdGUuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfd3JpdGVfcGFnZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgcGFnZSlcbiYjNDM7e1xuJiM0MztcdGludCBvbGRfcGFnZTtcbiYjNDM7XHR1MTYgZGF0YTtcbiYjNDM7XG4mIzQzO1x0b2xkX3BhZ2UgPSB5dHBoeV9yZWFkX3RvcF9leHQocGh5ZGV2LCBZVDg1MjFfUkVHX1NQQUNFX1NFTEVDVF9SRUcpO1xuJiM0MztcdGlmIChvbGRfcGFnZSBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiBvbGRfcGFnZTtcbiYjNDM7XHRkYXRhID0gb2xkX3BhZ2UgXHUwMDI2ICh+WVQ4ODI0X1JTU1JfU1BBQ0VfTUFTSyk7XG4mIzQzO1x0ZGF0YSB8PSBwYWdlO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4geXRwaHlfd3JpdGVfdG9wX2V4dChwaHlkZXYsIFlUODUyMV9SRUdfU1BBQ0VfU0VMRUNUX1JFRywgZGF0YSk7XG4mIzQzO307XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZCgpIC0gY29uZmlnIFlUODgyNCB0byBpbnZhbGlkIHRlc3QgbW9kZS5cbiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHl0ODgyNF91dHBfaW52YWxpZF90ZXN0X21vZGVfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdGludCByZXQgPSAwO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUocGh5ZGV2LFxuJiM0MztcdFx0XHRcdFx0ICAgIFlUODgyNF9VVFBfVEVNUExBVEVfVEVTVF9NT0RFMSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB5dDg4MjRfc2RzX2lzb2xhdGVfcGFnZWQoKSAtIGVuYWJsZSBZVDg4MjQgc2VyZGVzIGlzb2xhdGUuXG4mIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfc2RzX2lzb2xhdGVfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdGludCBvbGRfcGFnZTtcbiYjNDM7XHRpbnQgcmV0ID0gMDtcbiYjNDM7XG4mIzQzO1x0b2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCBZVDg4MjRfUlNTUl9VU1hHTUlJX1NQQUNFKTtcbiYjNDM7XHRpZiAob2xkX3BhZ2UgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdHJldCA9IF9fcGh5X3JlYWQocGh5ZGV2LCBNSUlfQk1DUik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHQvKiBpc29sYXRpb24gKi9cbiYjNDM7XHRyZXQgfD0gQk1DUl9JU09MQVRFO1xuJiM0MztcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgTUlJX0JNQ1IsIHJldCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO2Vycl9yZXN0b3JlX3BhZ2U6XG4mIzQzO1x0cmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRfcGFnZSwgcmV0KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHl0ODgyNF91dHBfc29mdHJlc2V0X3BhZ2VkKCkgLSBjb25maWcgWVQ4ODI0IFVUUCBzb2Z0cmVzZXQuXG4mIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfdXRwX3NvZnRyZXNldF9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJldCA9IDA7XG4mIzQzO1x0aW50IHZhbDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0cmV0ID0gcGh5X3JlYWQocGh5ZGV2LCBNSUlfQk1DUik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0cmV0IHw9IEJNQ1JfUkVTRVQ7XG4mIzQzO1x0cmV0ID0gcGh5X3dyaXRlKHBoeWRldiwgTUlJX0JNQ1IsIHJldCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0Lyogd2FpdCB1bnRpbCBzb2Z0cmVzZXQgZG9uZS4gKi9cbiYjNDM7XHRyZXR1cm4gcGh5X3JlYWRfcG9sbF90aW1lb3V0KHBoeWRldiwgTUlJX0JNQ1IsIHZhbCxcbiYjNDM7XHRcdFx0XHQgICAgICEodmFsIFx1MDAyNiBCTUNSX1JFU0VUKSxcbiYjNDM7XHRcdFx0XHQgICAgIDUwMDAwLCA2MDAwMDAsIHRydWUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKCkgLSBjb25maWcgWVQ4ODI0IHRvIG5vcm1hbCB0ZXN0IG1vZGUuXG4mIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdGludCByZXQgPSAwO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUocGh5ZGV2LFxuJiM0MztcdFx0XHRcdFx0ICAgIFlUODgyNF9VVFBfVEVNUExBVEVfVEVTVF9OT1JNQUwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X3Nkc19pc29sYXRlX2FuZF9zb2Z0cmVzZXRfcGFnZWQoKSAtIGRpc2FibGUgWVQ4ODI0IHNlcmRlcyBpc29sYXRlXG4mIzQzOyAqIGFuZCBzZHMgc29mdHJlc2V0LlxuJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3Nkc19pc29sYXRlX2FuZF9zb2Z0cmVzZXRfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdHVuc2lnbmVkIGludCByZXRyeSA9IDEyO1xuJiM0MztcdGludCBvbGRfcGFnZTtcbiYjNDM7XHRpbnQgcmV0ID0gLTE7XG4mIzQzO1xuJiM0MztcdG9sZF9wYWdlID0gcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVNYR01JSV9TUEFDRSk7XG4mIzQzO1x0aWYgKG9sZF9wYWdlIFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBfX3BoeV9yZWFkKHBoeWRldiwgTUlJX0JNQ1IpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdC8qIGRpc2FibGUgaXNvbGF0aW9uICovXG4mIzQzO1x0cmV0IFx1MDAyNj0gfkJJVCgxMCk7XG4mIzQzO1x0Lyogc29mdCByZXNldCAqL1xuJiM0MztcdHJldCB8PSBCTUNSX1JFU0VUO1xuJiM0MztcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgTUlJX0JNQ1IsIHJldCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHRkbyB7XG4mIzQzO1x0XHRtc2xlZXAoNTApO1xuJiM0MztcdFx0cmV0ID0gX19waHlfcmVhZChwaHlkZXYsIE1JSV9CTUNSKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHR9IHdoaWxlICgocmV0IFx1MDAyNiBCTUNSX1JFU0VUKSBcdTAwMjZcdTAwMjYgLS1yZXRyeSk7XG4mIzQzO1xuJiM0MztcdGlmIChyZXQgXHUwMDI2IEJNQ1JfUkVTRVQpIHtcbiYjNDM7XHRcdHJldCA9IC1FVElNRURPVVQ7XG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7ZXJyX3Jlc3RvcmVfcGFnZTpcbiYjNDM7XHRyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X3NvZnRfcmVzZXQoKSAtIGNhbGxlZCB0byBkbyBQSFkgc29mdHdhcmUgcmVzZXRcbiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHl0ODgyNF9zb2Z0X3Jlc2V0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAocGh5ZGV2LVx1MDAzZWludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUwpIHtcbiYjNDM7XHRcdC8qIGludmFsaWQgdGVzdCBtb2RlICovXG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdFx0cmV0ID0geXQ4ODI0X3V0cF9zb2Z0cmVzZXRfcGFnZWQocGh5ZGV2KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0XHQvKiBub3JtYWwgbW9kZSAqL1xuJiM0MztcdFx0cmV0ID0geXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHQvKiBpbnZhbGlkIHRlc3QgbW9kZSAqL1xuJiM0MztcdFx0cmV0ID0geXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0XHQvKiBzZHMgaXNvbGF0aW9uICovXG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfc2RzX2lzb2xhdGVfcGFnZWQocGh5ZGV2KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdFx0LyogdXRwIHNvZnQgcmVzZXQgKi9cbiYjNDM7XHRcdHJldCA9IHl0ODgyNF91dHBfc29mdHJlc2V0X3BhZ2VkKHBoeWRldik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRcdC8qIG5vcm1hbCBtb2RlICovXG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdFx0Lyogc2RzIHNvZnQgcmVzZXQgYW5kIGRpc2FibGUgaXNvbGF0aW9uICovXG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfc2RzX2lzb2xhdGVfYW5kX3NvZnRyZXNldF9wYWdlZChwaHlkZXYpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB5dDg4MjRfZXh0ZXJuX2NvbmZpZ191dHBfaW5pdF9wYWdlZCgpIC0gY29uZmlnIGV4dGVybmFsIHBoeTg4MjQgdXRwIGluaXRcbiYjNDM7ICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0XG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfZXh0ZXJuX2NvbmZpZ191dHBfaW5pdF9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0aW50IGRhdGEgPSAwO1xuJiM0MztcdGludCByZXQgPSAwO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHQvKiBwb3dlciBkb3duICovXG4mIzQzO1x0ZGF0YSA9IHBoeV9yZWFkKHBoeWRldiwgTUlJX0JNQ1IpO1xuJiM0MztcdGlmIChkYXRhIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIGRhdGE7XG4mIzQzO1x0ZGF0YSB8PSBCTUNSX1BET1dOO1xuJiM0MztcdHJldCA9IHBoeV93cml0ZShwaHlkZXYsIE1JSV9CTUNSLCBkYXRhKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0LyogcGxsIGNhbGlicmF0aW9uICovXG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDAwMSwgMHgwMDAzKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTIwZSwgMHgwY2JhKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTIwYSwgMHhjM2YxKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTIwYywgMHgxNjIwKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJiNiwgMHgwYTAwKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJiNiwgMHgwZTAwKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0Lyogb3B0aW1pemF0aW9uIHV0cCAqL1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAwMDEsIDB4MDAwMyk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdC8qIGVuYWJsZSBuaWJibGUgKi9cbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDAzLCAweDAwMDMpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHQvKiBpZGxlIGVyciBkZXRlY3QgZW5hYmxlICovXG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDNkMCwgMHg1MjEwKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0Lyogb3B0aW1pemVkIDIuNUcgbG9uZyBjYWJsZSBwZXJmb3JtYW5jZSAqL1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzNzIsIDB4NTAzOCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzN2MsIDB4NjA2OCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzODgsIDB4MDBhMCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdC8qIG9wdGltaXplZCBmYXN0IHJldHJhaW4gKi9cbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzU5LCAweDIxNDApO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMDBjLCAweGMxYTApO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHQvKiAyLjVHIHRlbXBsYXRlIHRvbmUgKi9cbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmZhLCAweDAwODMpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNGUyLCAweDAxNDkpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHQvKiBvcHRpbWl6ZWQgMi41RyB0ZW1wbGF0ZSAqL1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0N2UsIDB4MzkzOSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0N2YsIDB4MzkzOSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0ODAsIDB4MzkzOSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0ODEsIDB4MzkzOSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdC8qIG9wdGltaXplZCAxMDAwTSBjYWJsZSBsZW5ndGggdGhyZXNob2xkICovXG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDMzNiwgMHhhYjBhKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDM0MCwgMHgzMDFkKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0LyogMTAwTSB0ZW1wbGF0ZSBhbXBsaXR1ZGUgKi9cbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDZlLCAweDQ1NDUpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDZmLCAweDQ1NDUpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDcwLCAweDQ1NDUpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDcxLCAweDQ1NDUpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHQvKiBvcHRpbWl6ZWQgMTAwTSBjYWJsZSBsZW5ndGggdGhyZXNob2xkICovXG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDMwYiwgMHhhYTFkKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDcxZiwgMHgwMDM2KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0LyogMTBNIHRlbXBsYXRlIGFtcGxpdHVkZSAqL1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NmIsIDB4MTgxOCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NmMsIDB4MTgxOCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdC8qIG9wdGltaXplZCAxME0gY2FibGUgbGVuZ3RoIHRocmVzaG9sZCAqL1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NjYsIDB4NmM2Yyk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NjcsIDB4NmM2Yyk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NjgsIDB4NmM2Yyk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NjksIDB4NmM2Yyk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdC8qIG9wdGltaXplIHV0cCAxMDAwTSBwZXJmb3JtYW5jZSAqL1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzNGEsIDB4ZmYwMyk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAwZjgsIDB4YjNmZik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAwNTksIDB4NDA0MCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzMmMsIDB4NTA5NCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzMmQsIDB4ZDA5NCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzMmUsIDB4NTMwOCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzMjIsIDB4NjQ0MCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0ZDMsIDB4NTIyMCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0ZDIsIDB4NTIyMCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdC8qIG9wdGltaXplZCBFTUMgQ1MgKi9cbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMGM4LCAweGZmZmYpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMGJlLCAweDY0MDYpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzdhLCAweDQwZmYpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHQvKiBvcHRpbWl6ZWQgRU1DIFJFICovXG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ4MiwgMHhmZmZmKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJkNSwgMHgxZjFmKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJkNiwgMHgxZjFmKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJkNywgMHgxZjFmKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJkOCwgMHgxZjFmKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTIxOCwgMHgwMDZlKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTAxZCwgMHhmZmYwKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTAxZSwgMHhmZmYwKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTAxZCwgMHhmZmZmKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTAxZSwgMHhmZmZmKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHl0ODgyNF9leHRlcm5fY29uZmlnX3Nkc19pbml0X3BhZ2VkKCkgLSBjb25maWcgZXh0ZXJuYWwgcGh5ODgyNCBzZHMgaW5pdFxuJiM0MzsgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3RcbiYjNDM7ICpcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHl0ODgyNF9leHRlcm5fY29uZmlnX3Nkc19pbml0X3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpzaGFyZWRfcHJpdjtcbiYjNDM7XHRpbnQgcmV0ID0gMCwgb2xkX3BhZ2U7XG4mIzQzO1x0aW50IHZhbF8xLCB2YWxfMiwgdmFsXzMsIHRtcDtcbiYjNDM7XHR1MTYgZGF0YSA9IDA7XG4mIzQzO1x0aW50IHBvcnQ7XG4mIzQzO1xuJiM0MztcdHNoYXJlZF9wcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcbiYjNDM7XHRwb3J0ID0gcGh5ZGV2LVx1MDAzZW1kaW8uYWRkciAtIHNoYXJlZF9wcml2LVx1MDAzZW9mZnNldDtcbiYjNDM7XHRpZiAocG9ydCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdG9sZF9wYWdlID0gcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVNYR01JSV9TUEFDRSk7XG4mIzQzO1x0aWYgKG9sZF9wYWdlIFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHQvKiByZWFkIGVmdXNlICovXG4mIzQzO1x0dmFsXzEgPSB5dHBoeV9yZWFkX3RvcF9leHQocGh5ZGV2LCAweGExM2UpO1xuJiM0MztcdGlmICh2YWxfMSBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0dmFsXzIgPSB5dHBoeV9yZWFkX3RvcF9leHQocGh5ZGV2LCAweGExM2YpO1xuJiM0MztcdGlmICh2YWxfMiBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0dmFsXzMgPSB5dHBoeV9yZWFkX3RvcF9leHQocGh5ZGV2LCAweGExNDApO1xuJiM0MztcdGlmICh2YWxfMyBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0aWYgKHBvcnQgPT0gMCkge1xuJiM0MztcdFx0LyogU2VyZGVzIG9wdGltaXphdGlvbiAqL1xuJiM0MztcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGJlLCAweDAwMGQpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ5ZiwgMHg3ZGVkKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YTksIDB4MDA5Zik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0LyogYW5hbG9nIENEUiAqL1xuJiM0MztcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDA2LCAweDA4MDApO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdC8qIG9wdGltaXplZCBWQ08gKi9cbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQzOCwgMHg5MDI0KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0MzksIDB4MDBjMCk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0Lyogb3B0aW1pemVkIFBMTCBsb2NrICovXG4mIzQzO1x0XHRyZXQgPSB5dHBoeV9yZWFkX2V4dChwaHlkZXYsIDB4MDQyOSk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0cmV0IFx1MDAyNj0gfihCSVQoMTMpIHwgQklUKDEyKSk7XG4mIzQzO1x0XHR0bXAgPSAodmFsXzEgXHUwMDI2IChCSVQoNykgfCBCSVQoNikpKSBcdTAwM2VcdTAwM2UgNjtcbiYjNDM7XHRcdHJldCB8PSAodG1wIFx1MDAzY1x1MDAzYyAxMik7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0MjksIHJldCk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0geXRwaHlfcmVhZF9leHQocGh5ZGV2LCAweDA0NDEpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdHJldCBcdTAwMjY9IH4oQklUKDEpIHwgQklUKDApKTtcbiYjNDM7XHRcdHRtcCA9ICh2YWxfMSBcdTAwMjYgKEJJVCg1KSB8IEJJVCg0KSkpIFx1MDAzZVx1MDAzZSA0O1xuJiM0MztcdFx0cmV0IHw9IHRtcDtcbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ0MSwgcmV0KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV9yZWFkX2V4dChwaHlkZXYsIDB4MDQyYik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0cmV0IFx1MDAyNj0gfihCSVQoMTMpIHwgQklUKDEyKSk7XG4mIzQzO1x0XHR0bXAgPSAodmFsXzMgXHUwMDI2IChCSVQoMSkgfCBCSVQoMCkpKTtcbiYjNDM7XHRcdHJldCB8PSAodG1wIFx1MDAzY1x1MDAzYyAxMik7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0MmIsIHJldCk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDNhLCAweDEwMDYpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQyYSwgMHhmMDcwKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHQvKiBjYWJsZSBsZW5ndGggdGhyZXNob2xkICovXG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OTEsIDB4MDA3Zik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDkyLCAweDdmN2YpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdC8qIFNlcmRlcyB0cmFpbmluZyB0aHJlc2hvbGQgKi9cbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ1NCwgMHgwZjE0KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OTcsIDB4MGE0NCk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0LyogZGlnaXRhbCBleWUgZGlhZ3JhbSBvZiBTZXJEZXMgKi9cbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRjZCwgMHgwMDAwKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHQvKiBTZXJkZXMgTERPICovXG4mIzQzO1x0XHRyZXQgPSB5dHBoeV9yZWFkX2V4dChwaHlkZXYsIDB4MDRiNSk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0cmV0IFx1MDAyNj0gfihCSVQoNikgfCBCSVQoNSkgfCBCSVQoNCkpO1xuJiM0MztcdFx0dG1wID0gKHZhbF8yIFx1MDAyNiAoQklUKDQpIHwgQklUKDMpIHwgQklUKDIpKSkgXHUwMDNlXHUwMDNlIDI7XG4mIzQzO1x0XHRyZXQgfD0gKHRtcCBcdTAwM2NcdTAwM2MgNCk7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YjUsIHJldCk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0geXRwaHlfcmVhZF9leHQocGh5ZGV2LCAweDA0YjQpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdHJldCBcdTAwMjY9IH4oQklUKDEwKSB8IEJJVCg5KSB8IEJJVCg4KSk7XG4mIzQzO1x0XHR0bXAgPSAodmFsXzIgXHUwMDI2IChCSVQoNykgfCBCSVQoNikgfCBCSVQoNSkpKSBcdTAwM2VcdTAwM2UgNTtcbiYjNDM7XHRcdHJldCB8PSAodG1wIFx1MDAzY1x1MDAzYyA4KTtcbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRiNCwgcmV0KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHQvKiBvcHRpbWl6ZWQgU2VyZGVzIFJYICovXG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YWYsIDB4NDVlMyk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDhhLCAweDBmZmYpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQwOCwgMHg3YzAwKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0ZDYsIDB4MDA3Zik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDRmLCAweGZmMDgpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdC8qIG9wdGltaXplZCBTZXJkZXMgVFggKi9cbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ4ZSwgMHg3ZDAwKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAwMGQsIDB4MDYwNik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0LyogU2VyZGVzIG1hbnVhbCBjb25maWcgKi9cbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRiMCwgMHgwODA0KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YjEsIDB4NzA3NCk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGFmLCAweDQ1ZTcpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdC8qIHJlc3RhcnQgY2FsaWJyYXRpb24gKi9cbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDAwMywgMHg1NjAzKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OTIsIDB4N2ZmZik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDkyLCAweDdmN2YpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MjAwMCwgMHgwMDQwKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDIwMDAsIDB4MDAwMCk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBUWCBwcmVhbWJsZSBwYWRkZWQgdG8gODsgUlggSVBHIGFsd2F5cyBcdTAwM2UgOCAqL1xuJiM0MztcdHJldCA9IF9fcGh5X3JlYWQocGh5ZGV2LCBNSUlfUkVTVjEpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0cmV0IFx1MDAyNj0gfllUODgyNF9TRFNfQ0ZHX01JTl9QUkVfTUFTSztcbiYjNDM7XHRyZXQgfD0gWVQ4ODI0X1NEU19UWF9QUkVfUEFERElORztcbiYjNDM7XHRyZXQgfD0gWVQ4ODI0X1NEU19FTl9GSUxMX1BSRTtcbiYjNDM7XHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIE1JSV9SRVNWMSwgcmV0KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRkYXRhID0gX19waHlfcmVhZChwaHlkZXYsIE1JSV9CTUNSKTtcbiYjNDM7XHRpZiAoZGF0YSBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHRkYXRhIHw9IEJNQ1JfUkVTRVQ7XG4mIzQzO1x0ZGF0YSB8PSBCTUNSX0FORU5BQkxFO1xuJiM0MztcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgTUlJX0JNQ1IsIGRhdGEpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztlcnJfcmVzdG9yZV9wYWdlOlxuJiM0MztcdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB5dDg4MjRfaW50ZXJuYWxfY29uZmlnX2luaXRfcGFnZWQoKSAtIGNvbmZpZyBpbnRlcm5hbCBwaHk4ODI0IGluaXRcbiYjNDM7ICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0XG4mIzQzOyAqXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfaW50ZXJuYWxfY29uZmlnX2luaXRfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnNoYXJlZF9wcml2O1xuJiM0MztcdGludCBwb3J0ID0gMDtcbiYjNDM7XHRpbnQgcmV0ID0gMDtcbiYjNDM7XHRpbnQgZGF0YTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHNoYXJlZF9wcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcbiYjNDM7XHRwb3J0ID0gcGh5ZGV2LVx1MDAzZW1kaW8uYWRkciAtIHNoYXJlZF9wcml2LVx1MDAzZW9mZnNldDtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgxLCAweDMpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdGRhdGEgPSBwaHlfcmVhZChwaHlkZXYsIE1JSV9CTUNSKTtcbiYjNDM7XHRpZiAoZGF0YSBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiBkYXRhO1xuJiM0MztcdGRhdGEgfD0gQk1DUl9QRE9XTjtcbiYjNDM7XHRyZXQgPSBwaHlfd3JpdGUocGh5ZGV2LCBNSUlfQk1DUiwgZGF0YSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0aWYgKHBvcnQgPT0gMCkge1xuJiM0MztcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTIwZSwgMHhjYmEpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyMGEsIDB4YzNmMSk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTIwYywgMHgxNjIwKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmI2LCAweGEwMCk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJiNiwgMHhlMDApO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEwMDMsIDB4Myk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH1cbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzZDAsIDB4NTIxMCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzcyLCAweDUwMzgpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDM3YywgMHg2MDY4KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzODgsIDB4YTApO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDM1OSwgMHgyMTQwKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmZhLCAweDgzKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0ZTIsIDB4MTQ5KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHQvKiAyLjVHIHRlbXBhdGUgKi9cbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0N2UsIDB4MzkzOSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDdmLCAweDM5MzkpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ4MCwgMHgzOTM5KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0ODEsIDB4MzkzOSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0LyogMTAwMCBjYWJsZSBsZW5ndGggdGhyZXNob2xkICovXG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzM2LCAweGFiMGEpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDM0MCwgMHgzMDFkKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHQvKiAxMDAwIHBlcmZvcm1hbmNlICovXG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzRhLCAweGZmMDMpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGY4LCAweGIzZmYpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDMyYywgMHg1MDk0KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzMmQsIDB4ZDA5NCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzJlLCAweDUzMDgpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDMyMiwgMHg2NDQwKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0ZDMsIDB4NTIyMCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NGQyLCAweDUyMjApO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdC8qIDEwMCB0ZW1wYXRlICovXG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDZlLCAweDQ1NDUpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ2ZiwgMHg0NTQ1KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NzAsIDB4NDU0NSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDcxLCAweDQ1NDUpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdC8qIDEwMCBjYWJsZSBsZW5ndGggdGhyZXNob2xkICovXG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzBiLCAweGFhMWQpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDcxZiwgMHgzNik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0LyogMTAgdGVtcGF0ZSAqL1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ2YiwgMHgxODE4KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NmMsIDB4MTgxOCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0LyogMTAgdGVtcGF0ZSBNQVUqL1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ2NiwgMHg2YzZjKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NjcsIDB4NmM2Yyk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDY4LCAweDZjNmMpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ2OSwgMHg2YzZjKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHQvKiBFTUMgQ1MgKi9cbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhjOCwgMHhmZmYpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGJlLCAweDY0MDYpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDM3YSwgMHg0MGZmKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHQvKiBFTUMgUkUqL1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ4MiwgMHhmZmZmKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRpZiAocG9ydCA9PSAwKSB7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0ODIsIDB4ZmZmZik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJkNSwgMHgxZjFmKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmQ2LCAweDFmMWYpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZDcsIDB4MWYxZik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJkOCwgMHgxZjFmKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMjE4LCAweDZlKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDFkLCAweGZmZjApO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEwMWUsIDB4ZmZmMCk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTAxZCwgMHhmZmZmKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDFlLCAweGZmZmYpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHR9XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YywgMHg0MWExKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRyZXQgPSBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlKHBoeWRldixcbiYjNDM7XHRcdFx0XHRcdCAgIFlUODgyNF9VVFBfVEVNUExBVEVfVEVTVF9NT0RFMSk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0ZGF0YSA9IHBoeV9yZWFkKHBoeWRldiwgTUlJX0JNQ1IpO1xuJiM0MztcdGlmIChkYXRhIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRkYXRhIHw9IEJNQ1JfUkVTRVQ7XG4mIzQzO1x0ZGF0YSB8PSBCTUNSX0FORU5BQkxFO1xuJiM0MztcdHJldCA9IHBoeV93cml0ZShwaHlkZXYsIE1JSV9CTUNSLCBkYXRhKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRyZXQgPSBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlKHBoeWRldixcbiYjNDM7XHRcdFx0XHRcdCAgIFlUODgyNF9VVFBfVEVNUExBVEVfVEVTVF9OT1JNQUwpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X2NvbmZpZ19pbml0KCkgLSBwaHkgaW5pdGlhbGl6YXRpb2luXG4mIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfY29uZmlnX2luaXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGlmIChwaHlkZXYtXHUwMDNlaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTCkge1xuJiM0MztcdFx0cmV0ID0geXQ4ODI0X2ludGVybmFsX2NvbmZpZ19pbml0X3BhZ2VkKHBoeWRldik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfZXh0ZXJuX2NvbmZpZ191dHBfaW5pdF9wYWdlZChwaHlkZXYpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdHJldCA9IHl0ODgyNF9leHRlcm5fY29uZmlnX3Nkc19pbml0X3BhZ2VkKHBoeWRldik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuIFx0fVxuJiM0MztcdHJldCA9IHl0ODgyNF9zb2Z0X3Jlc2V0KHBoeWRldik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4gXG4tZXJyX3Jlc3RvcmVfcGFnZTpcbi1cdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7XG4mIzQzO1x0cGh5ZGV2X2RiZyhwaHlkZXYsIFwmIzM0OyVzIGRvbmUsIHBoeSBhZGRyOiAlZFxcblwmIzM0OyxcbiYjNDM7XHRcdCAgIF9fZnVuY19fLCBwaHlkZXYtXHUwMDNlbWRpby5hZGRyKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4gfVxuIFxuIHN0YXRpYyBpbnQgeXQ4NTMxX3NldF93b2woc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbkBAIC0zMDY2LDYgJiM0Mzs0MTUyLDM3MyBAQCBzdGF0aWMgaW50IHl0ODgyMV9yZXN1bWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiBcdHJldHVybiB5dDg4MjFfbW9kaWZ5X3V0cF9maWJlcl9ibWNyKHBoeWRldiwgQk1DUl9QRE9XTiwgMCk7XG4gfVxuIFxuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X2FuZWdfZG9uZSgpICAtIGNoZWNrIG5lZ290aWF0aW9uIHN0YXRlLlxuJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X2FuZWdfZG9uZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0aW50IGxpbmsgPSAwO1xuJiM0MztcdGludCByZXQgPSAwO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcGh5X3JlYWQocGh5ZGV2LCBZVFBIWV9TUEVDSUZJQ19TVEFUVVNfUkVHKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRsaW5rID0gISEocmV0IFx1MDAyNiBZVFBIWV9TU1JfTElOSyk7XG4mIzQzO1xuJiM0MztcdHBoeWRldl9kYmcocGh5ZGV2LCBcJiMzNDslcywgcGh5IGFkZHI6ICVkLCBsaW5rX3V0cDogJWRcXG5cJiMzNDssXG4mIzQzO1x0XHQgICBfX2Z1bmNfXywgcGh5ZGV2LVx1MDAzZW1kaW8uYWRkciwgbGluayk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBsaW5rO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X3JlYWRfc3RhdHVzX3BhZ2VkKCkgLSAgZGV0ZXJtaW5lcyB0aGUgc3BlZWQgYW5kIGR1cGxleCBvZiBvbmUgcGFnZVxuJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuJiM0MzsgKiBAc3RhdHVzOiBUaGUgbGluayBzdGF0dXMsIGluY2x1ZGUgc3BlZWQsIGR1cGxleCBhbmQgbGluayBzdGF0ZS5cbiYjNDM7ICogQGxwYTogbGluayBwYXJ0bmVyIGFkdmVydGlzaW5nLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm5zOiAxICh1dHAgbGluayksMCAobm8gbGluaykgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfcmVhZF9zdGF0dXNfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbiYjNDM7XHRcdFx0XHQgICAgaW50ICpzdGF0dXMsIGludCAqbHBhKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJldCA9IDA7XG4mIzQzO1xuJiM0MztcdHJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBwaHlfcmVhZChwaHlkZXYsIE1JSV9MUEEpO1xuJiM0MztcdCpscGEgPSByZXQ7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHBoeV9yZWFkKHBoeWRldiwgWVRQSFlfU1BFQ0lGSUNfU1RBVFVTX1JFRyk7XG4mIzQzO1x0KnN0YXR1cyA9IHJldDtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gISEoKnN0YXR1cyBcdTAwMjYgWVRQSFlfU1NSX0xJTkspO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X3JlYWRfc3RhdHVzKCkgLSAgZGV0ZXJtaW5lcyB0aGUgbmVnb3RpYXRlZCBzcGVlZCBhbmQgZHVwbGV4XG4mIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfcmVhZF9zdGF0dXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdGludCBsaW5rO1xuJiM0MztcdGludCBscGE7XG4mIzQzO1x0aW50IHZhbDtcbiYjNDM7XG4mIzQzO1x0cGh5ZGV2LVx1MDAzZXBhdXNlID0gMDtcbiYjNDM7XHRwaHlkZXYtXHUwMDNlYXN5bV9wYXVzZSA9IDA7XG4mIzQzO1x0cGh5ZGV2LVx1MDAzZWxpbmsgPSAwO1xuJiM0MztcdHBoeWRldi1cdTAwM2VzcGVlZCA9IFNQRUVEX1VOS05PV047XG4mIzQzO1x0cGh5ZGV2LVx1MDAzZWR1cGxleCA9IERVUExFWF9VTktOT1dOO1xuJiM0MztcbiYjNDM7XHRsaW5rID0geXQ4ODI0X3JlYWRfc3RhdHVzX3BhZ2VkKHBoeWRldixcbiYjNDM7XHRcdFx0XHRcdFx1MDAyNnZhbCwgXHUwMDI2bHBhKTtcbiYjNDM7XHRpZiAobGluayBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiBsaW5rO1xuJiM0MztcbiYjNDM7XHRpZiAobGluaykge1xuJiM0MztcdFx0cGh5ZGV2LVx1MDAzZWxpbmsgPSAxO1xuJiM0MztcdFx0cGh5ZGV2LVx1MDAzZXBhdXNlID0gISEobHBhIFx1MDAyNiBCSVQoMTApKTtcbiYjNDM7XHRcdHBoeWRldi1cdTAwM2Vhc3ltX3BhdXNlID0gISEobHBhIFx1MDAyNiBCSVQoMTEpKTtcbiYjNDM7XG4mIzQzO1x0XHQvKiB1cGRhdGUgc3BlZWQgXHUwMDI2IGR1cGxleCAqL1xuJiM0MztcdFx0eXQ4ODIxX2FkanVzdF9zdGF0dXMocGh5ZGV2LCB2YWwpO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRwaHlkZXYtXHUwMDNlbGluayA9IDA7XG4mIzQzO1x0XHRwaHlkZXYtXHUwMDNlcGF1c2UgPSAwO1xuJiM0MztcdFx0cGh5ZGV2LVx1MDAzZWFzeW1fcGF1c2UgPSAwO1xuJiM0MztcdFx0cGh5ZGV2LVx1MDAzZXNwZWVkID0gU1BFRURfVU5LTk9XTjtcbiYjNDM7XHRcdHBoeWRldi1cdTAwM2VkdXBsZXggPSBEVVBMRVhfVU5LTk9XTjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X3V0cF9wb3dlcl9vbigpOiB1dHAgcG93ZXIgb24uXG4mIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfdXRwX3Bvd2VyX29uKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmV0ID0gMDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHBoeV9yZWFkKHBoeWRldiwgTUlJX0JNQ1IpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgXHUwMDI2PSB+Qk1DUl9QRE9XTjtcbiYjNDM7XHRyZXQgXHUwMDI2PSB+Qk1DUl9JU09MQVRFO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcGh5X3dyaXRlKHBoeWRldiwgTUlJX0JNQ1IsIHJldCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB5dDg4MjRfdXRwX3Bvd2VyX2Rvd24oKTogdXRwIHBvd2VyIGRvd24uXG4mIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfdXRwX3Bvd2VyX2Rvd24oc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdGludCByZXQgPSAwO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcGh5X3JlYWQocGh5ZGV2LCBNSUlfQk1DUik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldHVybiBwaHlfd3JpdGUocGh5ZGV2LCBNSUlfQk1DUiwgcmV0IHwgQk1DUl9QRE9XTik7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB5dDg4MjRfcG93ZXJfb24oKSAgLSBzZXQgdXRwIHBvd2VyIG9uLlxuJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuJiM0MzsgKlxuJiM0MzsgKiBOT1RFOiBuZWVkIFdBIGxpa2Ugc29mdHJlc2V0XG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfcG93ZXJfb24oc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGlmIChwaHlkZXYtXHUwMDNlaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTCkge1xuJiM0MztcdFx0LyogaW52YWxpZCB0ZXN0IG1vZGUgKi9cbiYjNDM7XHRcdHJldCA9IHl0ODgyNF91dHBfaW52YWxpZF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0XHQvKiB1dHAgcG93ZXIgb24gKi9cbiYjNDM7XHRcdHJldCA9IHl0ODgyNF91dHBfcG93ZXJfb24ocGh5ZGV2KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0XHQvKiBub3JtYWwgbW9kZSAqL1xuJiM0MztcdFx0cmV0ID0geXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHQvKiBpbnZhbGlkIHRlc3QgbW9kZSAqL1xuJiM0MztcdFx0cmV0ID0geXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0XHQvKiBzZHMgaXNvbGF0aW9uICovXG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfc2RzX2lzb2xhdGVfcGFnZWQocGh5ZGV2KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdFx0LyogdXRwIHBvd2VyIG9uICovXG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfdXRwX3Bvd2VyX29uKHBoeWRldik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRcdC8qIG5vcm1hbCBtb2RlICovXG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdFx0Lyogc2RzIHNvZnQgcmVzZXQgYW5kIGRpc2FibGUgaXNvbGF0aW9uICovXG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfc2RzX2lzb2xhdGVfYW5kX3NvZnRyZXNldF9wYWdlZChwaHlkZXYpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB5dDg4MjRfcmVzdW1lKCkgLSByZXN1bWUgdGhlIGhhcmR3YXJlXG4mIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfcmVzdW1lKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4geXQ4ODI0X3Bvd2VyX29uKHBoeWRldik7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB5dDg4MjRfcG93ZXJfZG93bigpICAtIHNldCB1dHAgcG93ZXIgZG93bi5cbiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbiYjNDM7ICpcbiYjNDM7ICogTk9URTogbmVlZCBXQSBsaWtlIHNvZnRyZXNldFxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3Bvd2VyX2Rvd24oc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGlmIChwaHlkZXYtXHUwMDNlaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTCkge1xuJiM0MztcdFx0LyogaW52YWxpZCB0ZXN0IG1vZGUgKi9cbiYjNDM7XHRcdHJldCA9IHl0ODgyNF91dHBfaW52YWxpZF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0XHQvKiB1dHAgcG93ZXIgZG93biAqL1xuJiM0MztcdFx0cmV0ID0geXQ4ODI0X3V0cF9wb3dlcl9kb3duKHBoeWRldik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdFx0Lyogbm9ybWFsIG1vZGUgKi9cbiYjNDM7XHRcdHJldCA9IHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0LyogaW52YWxpZCB0ZXN0IG1vZGUgKi9cbiYjNDM7XHRcdHJldCA9IHl0ODgyNF91dHBfaW52YWxpZF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdFx0Lyogc2RzIGlzb2xhdGlvbiAqL1xuJiM0MztcdFx0cmV0ID0geXQ4ODI0X3Nkc19pc29sYXRlX3BhZ2VkKHBoeWRldik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRcdC8qIHV0cCBwb3dlciBkb3duICovXG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfdXRwX3Bvd2VyX2Rvd24ocGh5ZGV2KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdFx0Lyogbm9ybWFsIG1vZGUgKi9cbiYjNDM7XHRcdHJldCA9IHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0XHQvKiBzZHMgc29mdCByZXNldCBhbmQgZGlzYWJsZSBpc29sYXRpb24gKi9cbiYjNDM7XHRcdHJldCA9IHl0ODgyNF9zZHNfaXNvbGF0ZV9hbmRfc29mdHJlc2V0X3BhZ2VkKHBoeWRldik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHl0ODgyNF9zdXNwZW5kKCkgLSBzdXNwZW5kIHRoZSBoYXJkd2FyZVxuJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3N1c3BlbmQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdHJldHVybiB5dDg4MjRfcG93ZXJfZG93bihwaHlkZXYpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X2NvbmZpZ19hbmVnKCkgLSBjb25maWcgbmVnb3RpYXRpb25cbiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHl0ODgyNF9jb25maWdfYW5lZyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0aW50IHBoeV9jdHJsID0gMDtcbiYjNDM7XHRpbnQgcmV0ID0gMDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdGlmIChsaW5rbW9kZV90ZXN0X2JpdChFVEhUT09MX0xJTktfTU9ERV8yNTAwYmFzZVRfRnVsbF9CSVQsXG4mIzQzO1x0XHRcdCAgICAgIHBoeWRldi1cdTAwM2VhZHZlcnRpc2luZykpXG4mIzQzO1x0XHRwaHlfY3RybCA9IE1ESU9fQU5fMTBHQlRfQ1RSTF9BRFYyXzVHO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBwaHlfbW9kaWZ5X21tZF9jaGFuZ2VkKHBoeWRldiwgTURJT19NTURfQU4sXG4mIzQzO1x0XHRcdFx0ICAgICBNRElPX0FOXzEwR0JUX0NUUkwsXG4mIzQzO1x0XHRcdFx0ICAgICBNRElPX0FOXzEwR0JUX0NUUkxfQURWMl81RyxcbiYjNDM7XHRcdFx0XHQgICAgIHBoeV9jdHJsKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGdlbnBoeV9jb25maWdfYW5lZyhwaHlkZXYpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X3BoeV9wYWNrYWdlX3Byb2JlX29uY2UoKSAgLSBpbml0IHBoeSBwYWNrZXQgZm9yIHBoeTg4MjQuXG4mIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfcGh5X3BhY2thZ2VfcHJvYmVfb25jZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XG4mIzQzO1x0c3RydWN0IGRldmljZV9ub2RlICpucCA9IHBoeV9wYWNrYWdlX2dldF9ub2RlKHBoeWRldik7XG4mIzQzO1x0Y29uc3QgY2hhciAqaW50ZXJmYWNlX21vZGVfbmFtZTtcbiYjNDM7XG4mIzQzO1x0cHJpdi1cdTAwM2VpbnRlcmZhY2VfbW9kZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9OQTtcbiYjNDM7XHRwcml2LVx1MDAzZW9mZnNldCA9IElOVEVSTkFMX1BIWTg4MjRfVE9QX0VYVEVORF9PRkZTRVQ7XG4mIzQzO1x0aWYgKCFvZl9wcm9wZXJ0eV9yZWFkX3N0cmluZyhucCwgXCYjMzQ7bW90b3Jjb21tLGludGVyZmFjZS1tb2RlXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgICAgXHUwMDI2aW50ZXJmYWNlX21vZGVfbmFtZSkpIHtcbiYjNDM7XHRcdGlmICghc3RyY2FzZWNtcChpbnRlcmZhY2VfbW9kZV9uYW1lLFxuJiM0MztcdFx0XHRcdHBoeV9tb2RlcyhQSFlfSU5URVJGQUNFX01PREVfVVNYR01JSSkpKSB7XG4mIzQzO1x0XHRcdHByaXYtXHUwMDNlaW50ZXJmYWNlX21vZGUgPSBQSFlfSU5URVJGQUNFX01PREVfVVNYR01JSTtcbiYjNDM7XHRcdFx0cHJpdi1cdTAwM2VvZmZzZXQgPSBFWFRFUk5BTF9QSFk4ODI0X1RPUF9FWFRFTkRfT0ZGU0VUO1xuJiM0MztcdFx0fSBlbHNlIGlmICghc3RyY2FzZWNtcFxuJiM0MztcdFx0XHRcdChpbnRlcmZhY2VfbW9kZV9uYW1lLFxuJiM0MztcdFx0XHRcdCBwaHlfbW9kZXMoUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMKSkpIHtcbiYjNDM7XHRcdFx0cHJpdi1cdTAwM2VpbnRlcmZhY2VfbW9kZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTDtcbiYjNDM7XHRcdFx0cHJpdi1cdTAwM2VvZmZzZXQgPSBJTlRFUk5BTF9QSFk4ODI0X1RPUF9FWFRFTkRfT0ZGU0VUO1xuJiM0MztcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X3Byb2JlKCkgLSBwaHk4ODI0IHByb2JlLlxuJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXY7XG4mIzQzO1x0c3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqc2hhcmVkX3ByaXY7XG4mIzQzO1x0c3RydWN0IHl0ODUyMV9wcml2ICpwcml2O1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IGRldm1fb2ZfcGh5X3BhY2thZ2Vfam9pbihkZXYsIHBoeWRldiwgc2l6ZW9mKCpzaGFyZWRfcHJpdikpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAocGh5X3BhY2thZ2VfcHJvYmVfb25jZShwaHlkZXYpKSB7XG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfcGh5X3BhY2thZ2VfcHJvYmVfb25jZShwaHlkZXYpO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHByaXYgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRpZiAoIXByaXYpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4mIzQzO1x0cGh5ZGV2LVx1MDAzZXByaXYgPSBwcml2O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgbW90b3Jjb21tX3BoeV9kcnZzW10gPSB7XG4gXHR7XG4gXHRcdFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4NTExKSxcbkBAIC0zMTUyLDEzICYjNDM7NDYwNSwyOSBAQCBzdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgbW90b3Jjb21tX3BoeV9kcnZzW10gPSB7XG4gXHRcdC5zdXNwZW5kXHRcdD0geXQ4ODIxX3N1c3BlbmQsXG4gXHRcdC5yZXN1bWVcdFx0XHQ9IHl0ODgyMV9yZXN1bWUsXG4gXHR9LFxuJiM0MztcdHtcbiYjNDM7XHRcdFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4ODI0KSxcbiYjNDM7XHRcdC5uYW1lXHRcdFx0PSBcJiMzNDtZVDg4MjQgUXVhZCBQb3J0cyAyLjVHYnBzIEV0aGVybmV0XCYjMzQ7LFxuJiM0MztcdFx0LmdldF9mZWF0dXJlc1x0XHQ9IHl0ODgyMV9nZXRfZmVhdHVyZXMsXG4mIzQzO1x0XHQucmVhZF9wYWdlXHRcdD0geXQ4ODI0X3JlYWRfcGFnZSxcbiYjNDM7XHRcdC53cml0ZV9wYWdlXHRcdD0geXQ4ODI0X3dyaXRlX3BhZ2UsXG4mIzQzO1x0XHQucHJvYmVcdFx0ICAgICAgICA9IHl0ODgyNF9wcm9iZSxcbiYjNDM7XHRcdC5jb25maWdfYW5lZ1x0XHQ9IHl0ODgyNF9jb25maWdfYW5lZyxcbiYjNDM7XHRcdC5hbmVnX2RvbmVcdFx0PSB5dDg4MjRfYW5lZ19kb25lLFxuJiM0MztcdFx0LmNvbmZpZ19pbml0XHRcdD0geXQ4ODI0X2NvbmZpZ19pbml0LFxuJiM0MztcdFx0LnJlYWRfc3RhdHVzXHRcdD0geXQ4ODI0X3JlYWRfc3RhdHVzLFxuJiM0MztcdFx0LnNvZnRfcmVzZXRcdFx0PSB5dDg4MjRfc29mdF9yZXNldCxcbiYjNDM7XHRcdC5zdXNwZW5kXHRcdD0geXQ4ODI0X3N1c3BlbmQsXG4mIzQzO1x0XHQucmVzdW1lXHRcdFx0PSB5dDg4MjRfcmVzdW1lLFxuJiM0MztcdH0sXG4gfTtcbiBcbiBtb2R1bGVfcGh5X2RyaXZlcihtb3RvcmNvbW1fcGh5X2RydnMpO1xuIFxuLU1PRFVMRV9ERVNDUklQVElPTihcJiMzNDtNb3RvcmNvbW0gODUxMS84NTIxLzg1MzEvODUzMVMvODgyMSBQSFkgZHJpdmVyXCYjMzQ7KTtcbiYjNDM7TU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O01vdG9yY29tbSA4NTExLzg1MjEvODUzMS84NTMxUy84ODIxLzg4MjQgUEhZIGRyaXZlclwmIzM0Oyk7XG4gTU9EVUxFX0FVVEhPUihcJiMzNDtQZXRlciBHZWlzXCYjMzQ7KTtcbiBNT0RVTEVfQVVUSE9SKFwmIzM0O0ZyYW5rXCYjMzQ7KTtcbiYjNDM7TU9EVUxFX0FVVEhPUihcJiMzNDtLeWxlXCYjMzQ7KTtcbiBNT0RVTEVfTElDRU5TRShcJiMzNDtHUExcJiMzNDspO1xuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbWRpb19kZXZpY2VfaWQgX19tYXliZV91bnVzZWQgbW90b3Jjb21tX3RibFtdID0ge1xuQEAgLTMxNjgsNiAmIzQzOzQ2MzcsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG1kaW9fZGV2aWNlX2lkIF9fbWF5YmVfdW51c2VkIG1vdG9yY29tbV90YmxbXSA9IHtcbiBcdHsgUEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg1MzEpIH0sXG4gXHR7IFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4NTMxUykgfSxcbiBcdHsgUEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg4MjEpIH0sXG4mIzQzO1x0eyBQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODgyNCkgfSxcbiBcdHsgLyogc2VudGluZWwgKi8gfVxuIH07XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuYyBiL2RyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmNcbmluZGV4IDEyNjk1MTc0MTQyODguLjkwNDMwNmFmNmMxYTcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jXG5AQCAtMTI4Myw2ICYjNDM7MTI4MywyMyBAQCBpbnQgZ2VucGh5X2M0NV9mYXN0X3JldHJhaW4oc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgYm9vbCBlbmFibGUpXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKGdlbnBoeV9jNDVfZmFzdF9yZXRyYWluKTtcbiBcbiYjNDM7LyoqXG4mIzQzOyAqIGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUgLSBjb25maWd1cmUgdGVtcGxhdGUgdGVzdG1vZGUgcmVnaXN0ZXJzXG4mIzQzOyAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdFxuJiM0MzsgKiBAdGVzdF9tb2RlOiB0ZXN0bW9kZSBpbmNsdWRlcyBUZXN0IG1vZGUgMSB0byBUZXN0IG1vZGUgN1xuJiM0MzsgKlxuJiM0MzsgKiBEZXNjcmlwdGlvbjogU2V0IHRlbXBsYXRlIHRlc3Rtb2RlIGluY2x1ZGUgVGVzdCBtb2RlIDEgdG8gVGVzdCBtb2RlIDdcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlIChlLmcuIHJlZ2lzdGVyXG4mIzQzOyAqXHRyZWFkL3dyaXRlIGVycm9yKS5cbiYjNDM7ICovXG4mIzQzO2ludCBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCB0ZXN0X21vZGUpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gcGh5X21vZGlmeV9tbWQocGh5ZGV2LCBNRElPX01NRF9QTUFQTUQsIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFLFxuJiM0MztcdFx0XHRNRElPX1BNQV9URU1QTEFURV9URVNUTU9ERSwgdGVzdF9tb2RlKTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlKTtcbiYjNDM7XG4gLyoqXG4gICogZ2VucGh5X2M0NV9wbGNhX2dldF9jZmcgLSBnZXQgUExDQSBjb25maWd1cmF0aW9uIGZyb20gc3RhbmRhcmQgcmVnaXN0ZXJzXG4gICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9waHkuaCBiL2luY2x1ZGUvbGludXgvcGh5LmhcbmluZGV4IDExMDkyYzMxNzViM2QuLjVkYmM2OTJmNDQyZDAgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BoeS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3BoeS5oXG5AQCAtMjMzOCw2ICYjNDM7MjMzOCw3IEBAIGludCBnZW5waHlfYzQ1X2xvb3BiYWNrKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGJvb2wgZW5hYmxlLCBpbnQgc3BlZWQpO1xuIGludCBnZW5waHlfYzQ1X3BtYV9yZXN1bWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7XG4gaW50IGdlbnBoeV9jNDVfcG1hX3N1c3BlbmQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7XG4gaW50IGdlbnBoeV9jNDVfZmFzdF9yZXRyYWluKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGJvb2wgZW5hYmxlKTtcbiYjNDM7aW50IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IHRlc3RfbW9kZSk7XG4gaW50IGdlbnBoeV9jNDVfcGxjYV9nZXRfY2ZnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG4gXHRcdFx0ICAgIHN0cnVjdCBwaHlfcGxjYV9jZmcgKnBsY2FfY2ZnKTtcbiBpbnQgZ2VucGh5X2M0NV9wbGNhX3NldF9jZmcoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvbWRpby5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L21kaW8uaFxuaW5kZXggYjI1NDFjOTQ4ZmMxZS4uYmNmMTgzZTAwOGY1OCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9tZGlvLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdWFwaS9saW51eC9tZGlvLmhcbkBAIC02Myw2ICYjNDM7NjMsNyBAQFxuIC8qIE1lZGlhLWRlcGVuZGVudCByZWdpc3RlcnMuICovXG4gI2RlZmluZSBNRElPX1BNQV8xMEdCVF9TV0FQUE9MXHQxMzBcdC8qIDEwR0JBU0UtVCBwYWlyIHN3YXAgXHUwMDI2IHBvbGFyaXR5ICovXG4gI2RlZmluZSBNRElPX1BNQV8xMEdCVF9UWFBXUlx0MTMxXHQvKiAxMEdCQVNFLVQgVFggcG93ZXIgY29udHJvbCAqL1xuJiM0MzsjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFIDEzMlx0LyogVGVzdCBtb2RlIGNvbnRyb2wgKi9cbiAjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1NOUlx0MTMzXHQvKiAxMEdCQVNFLVQgU05SIG1hcmdpbiwgbGFuZSBBLlxuIFx0XHRcdFx0XHQgKiBMYW5lcyBCLUQgYXJlIG51bWJlcmVkIDEzNC0xMzYuICovXG4gI2RlZmluZSBNRElPX1BNQV8xMEdCUl9GU1JUX0NTUlx0MTQ3XHQvKiAxMEdCQVNFLVIgZmFzdCByZXRyYWluIHN0YXR1cyBhbmQgY29udHJvbCAqL1xuQEAgLTEzOSw3ICYjNDM7MTQwLDggQEBcbiAjZGVmaW5lIE1ESU9fUE1BX0NUUkwxX1NQRUVEMl81R1x0KE1ESU9fQ1RSTDFfU1BFRURTRUxFWFQgfCAweDE4KVxuIC8qIDUgR2IvcyAqL1xuICNkZWZpbmUgTURJT19QTUFfQ1RSTDFfU1BFRUQ1R1x0XHQoTURJT19DVFJMMV9TUEVFRFNFTEVYVCB8IDB4MWMpXG4tXG4mIzQzOy8qIHRlbXBsYXRlIHRlc3QgbW9kZSAqL1xuJiM0MzsjZGVmaW5lIE1ESU9fUE1BX1RFTVBMQVRFX1RFU1RNT0RFICAgICAgMHhFMDAwXG4gXG4gLyogU3RhdHVzIHJlZ2lzdGVyIDEuICovXG4gI2RlZmluZSBNRElPX1NUQVQxX0xQT1dFUkFCTEVcdFx0MHgwMDAyXHQvKiBMb3ctcG93ZXIgYWJpbGl0eSAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA4OjMyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNT1RPUkNPTU1fUEhZJiMzNDssCiAgICAmIzM0O01ESU9fTVZVU0ImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt5dDg4MjRfcHJvYmUmIzM0OywKICAgICYjMzQ7eXQ4ODI0X2NvbmZpZ19pbml0JiMzNDssCiAgICAmIzM0O3l0ODgyNF9jb25maWdfYW5lZyYjMzQ7LAogICAgJiMzNDt5dDg4MjRfYW5lZ19kb25lJiMzNDssCiAgICAmIzM0O3l0ODgyNF9yZWFkX3N0YXR1cyYjMzQ7LAogICAgJiMzNDt5dDg4MjRfc29mdF9yZXNldCYjMzQ7LAogICAgJiMzNDt5dDg4MjRfc3VzcGVuZCYjMzQ7LAogICAgJiMzNDt5dDg4MjRfcmVzdW1lJiMzNDssCiAgICAmIzM0O3l0ODgyNF9yZWFkX3BhZ2UmIzM0OywKICAgICYjMzQ7eXQ4ODI0X3dyaXRlX3BhZ2UmIzM0OywKICAgICYjMzQ7Z2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHRoZSBNb3RvcmNvbW0gWVQ4ODI0IFBIWSBkcml2ZXIuIEl0IGludHJvZHVjZXMgYSBuZXcgUEhZIGRyaXZlciBzdHJ1Y3R1cmUgd2l0aCB2YXJpb3VzIGNhbGxiYWNrcyBmb3IgcHJvYmluZywgaW5pdGlhbGl6YXRpb24sIGF1dG8tbmVnb3RpYXRpb24sIHN0YXR1cyByZWFkaW5nLCBhbmQgcG93ZXIgbWFuYWdlbWVudC4gVGhlc2UgZnVuY3Rpb25zIGFyZSByZWFjaGFibGUgdmlhIE1ESU8gYnVzIGVtdWxhdGlvbiAoZS5nLiwgdXNpbmcgdGhlIE1hcnZlbGwgVVNCIE1ESU8gYWRhcHRlciBkcml2ZXIpLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbmV3bHkgYWRkZWQgUEhZIGRyaXZlciBjYWxsYmFja3MgYW5kIHRoZSBleHBvcnRlZCBoZWxwZXIgYGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGVgLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZTJkZjE5ZTYxNjMxZTNmY2YzNjZkZmQyOWZjMTlhOWUwODIyNzA0NApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gQXVnIDIgMDg6MzI6NDAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMgYi9kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMKaW5kZXggMzM5NmEzOGNmYzBmMi4uODY4YTBjOWYyOWE3ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYwpAQCAtMSwyNCAmIzQzOzEsMzMgQEAKIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wJiM0MzsKIC8qCi0gKiBNb3RvcmNvbW0gODUxMS84NTIxLzg1MjIvODUzMS84NTMxUy84ODIxIFBIWSBkcml2ZXIuCiYjNDM7ICogTW90b3Jjb21tIDg1MTEvODUyMS84NTIyLzg1MzEvODUzMVMvODgyMS84ODI0IFBIWSBkcml2ZXIuCiAgKgogICogQXV0aG9yOiBQZXRlciBHZWlzICZsdDtwZ3dpcGVvdXRAZ21haWwuY29tJmd0OwogICogQXV0aG9yOiBGcmFuayAmbHQ7RnJhbmsuU2FlQG1vdG9yLWNvbW0uY29tJmd0OwomIzQzOyAqIEF1dGhvcjogS3lsZSAmbHQ7a3lsZS5zd2l0Y2hAbW90b3ItY29tbS5jb20mZ3Q7CiAgKi8KIAogI2luY2x1ZGUgJmx0O2xpbnV4L2Nsay5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2V0aGVyZGV2aWNlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgva2VybmVsLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbW9kdWxlLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L29mLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcGh5LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcHJvcGVydHkuaCZndDsKIAomIzQzOyNpbmNsdWRlICYjMzQ7cGh5bGliLmgmIzM0OwomIzQzOwomIzQzOy8qIGRlZmluZSBQSFk4ODI0IHRvcCBleHRlbmQgYWRkciBvZmZzZXQgaW50ZXJuYWwgYW5kIGV4dGVybmFsKi8KJiM0MzsjZGVmaW5lIElOVEVSTkFMX1BIWTg4MjRfVE9QX0VYVEVORF9PRkZTRVQgICAgKDUpCiYjNDM7I2RlZmluZSBFWFRFUk5BTF9QSFk4ODI0X1RPUF9FWFRFTkRfT0ZGU0VUICAgICg0KQomIzQzOwogI2RlZmluZSBQSFlfSURfWVQ4NTExCQkweDAwMDAwMTBhCiAjZGVmaW5lIFBIWV9JRF9ZVDg1MjEJCTB4MDAwMDAxMWEKICNkZWZpbmUgUEhZX0lEX1lUODUyMgkJMHg0ZjUxZTkyOAogI2RlZmluZSBQSFlfSURfWVQ4NTMxCQkweDRmNTFlOTFiCiAjZGVmaW5lIFBIWV9JRF9ZVDg1MzFTCQkweDRmNTFlOTFhCiAjZGVmaW5lIFBIWV9JRF9ZVDg4MjEJCTB4NGY1MWVhMTkKJiM0MzsjZGVmaW5lIFBIWV9JRF9ZVDg4MjQJCTB4NGY1MWU4YjgKIC8qIFlUODUyMS9ZVDg1MzFTL1lUODgyMSBSZWdpc3RlciBPdmVydmlldwogICoJVVRQIFJlZ2lzdGVyIHNwYWNlCXwJRklCRVIgUmVnaXN0ZXIgc3BhY2UKICAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTMwLDYgJiM0MzszOSwxOCBAQAogICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCiAKJiM0MzsvKiBZVDg4MjQgUmVnaXN0ZXIgT3ZlcnZpZXcKJiM0MzsgKglVVFAgUmVnaXN0ZXIgc3BhY2UJfAlGSUJFUiBSZWdpc3RlciBzcGFjZQomIzQzOyAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KJiM0MzsgKiB8CVVUUCBNSUkJCQl8CUZJQkVSIE1JSQkgICAgICAgIHwKJiM0MzsgKiB8CVVUUCBNTUQJCQl8CQkJCXwKJiM0MzsgKiB8CVVUUCBFeHRlbmRlZAkJfAlGSUJFUiBFeHRlbmRlZAkJfAomIzQzOyAqIHwJVVRQIFRvcCBFeHRlbmRlZAl8CUZJQkVSIFRvcCBFeHRlbmRlZAl8CiYjNDM7ICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQomIzQzOyAqIHwJCQlDb21tb24gVG9wIEV4dGVuZGVkCQkJfAomIzQzOyAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KJiM0MzsgKi8KJiM0MzsKIC8qIDB4MTAgfiAweDE1ICwgMHgxRSBhbmQgMHgxRiBhcmUgY29tbW9uIE1JSSByZWdpc3RlcnMgb2YgeXQgcGh5ICovCiAKIC8qIFNwZWNpZmljIEZ1bmN0aW9uIENvbnRyb2wgUmVnaXN0ZXIgKi8KQEAgLTM3Niw2ICYjNDM7Mzk3LDE1IEBACiAjZGVmaW5lIFlUODgyMV9DSElQX01PREVfQVVUT19CWDI1MDBfU0dNSUkJMAogI2RlZmluZSBZVDg4MjFfQ0hJUF9NT0RFX0ZPUkNFX0JYMjUwMAkJMQogCiYjNDM7I2RlZmluZSBZVDg4MjRfUlNTUl9TUEFDRV9NQVNLCQkJQklUKDApCiYjNDM7I2RlZmluZSBZVDg4MjRfUlNTUl9VU1hHTUlJX1NQQUNFCQkoMHgxKQomIzQzOyNkZWZpbmUgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFCQkJKDB4MCkKJiM0MzsjZGVmaW5lIFlUODgyNF9VVFBfVEVNUExBVEVfVEVTVF9NT0RFMQkJMHgyMDAwCiYjNDM7I2RlZmluZSBZVDg4MjRfVVRQX1RFTVBMQVRFX1RFU1RfTk9STUFMCQkweDAwMDAKJiM0MzsjZGVmaW5lIFlUODgyNF9TRFNfQ0ZHX01JTl9QUkVfTUFTSwkJR0VOTUFTSygzLCAwKQomIzQzOyNkZWZpbmUgWVQ4ODI0X1NEU19FTl9GSUxMX1BSRQkJCUJJVCgxMykKJiM0MzsjZGVmaW5lIFlUODgyNF9TRFNfVFhfUFJFX1BBRERJTkcJCSgweDcpCiYjNDM7CiBzdHJ1Y3QgeXQ4NTIxX3ByaXYgewogCS8qIGNvbWJvX2FkdmVydGlzaW5nIGlzIHVzZWQgZm9yIGNhc2Ugb2YgWVQ4NTIxIGluIGNvbWJvIG1vZGUsCiAJICogdGhpcyBtZWFucyB0aGF0IHl0ODUyMSBtYXkgd29yayBpbiB1dHAgb3IgZmliZXIgbW9kZSB3aGljaCBkZXBlbmRzCkBAIC0zOTQsNiAmIzQzOzQyNCwxMSBAQCBzdHJ1Y3QgeXQ4NTIxX3ByaXYgewogCXU4IHJlZ19wYWdlOwogfTsKIAomIzQzO3N0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgewomIzQzOwl1bnNpZ25lZCBpbnQgaW50ZXJmYWNlX21vZGU7CiYjNDM7CXVuc2lnbmVkIGludCBvZmZzZXQ7CiYjNDM7fTsKJiM0MzsKIC8qKgogICogeXRwaHlfcmVhZF9leHQoKSAtIHJlYWQgYSBQSFkmIzM5O3MgZXh0ZW5kZWQgcmVnaXN0ZXIKICAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhICZhbXA7c3RydWN0IHBoeV9kZXZpY2UKQEAgLTQzMiw2ICYjNDM7NDY3LDcwIEBAIHN0YXRpYyBpbnQgeXRwaHlfcmVhZF9leHRfd2l0aF9sb2NrKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUxNiByZWdudW0pCiAJcmV0dXJuIHJldDsKIH0KIAomIzQzOy8qKgomIzQzOyAqIHl0cGh5X3JlYWRfdG9wX2V4dCgpIC0gcmVhZCBhIFBIWSYjMzk7cyB0b3AgZXh0ZW5kZWQgcmVnaXN0ZXIgZm9yIFlUODgyNAomIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhICZhbXA7c3RydWN0IHBoeV9kZXZpY2UKJiM0MzsgKiBAcmVnbnVtOiByZWdpc3RlciBudW1iZXIgdG8gcmVhZAomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogdGhlIHZhbHVlIG9mIHJlZ251bSByZWcgb3IgbmVnYXRpdmUgZXJyb3IgY29kZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgeXRwaHlfcmVhZF90b3BfZXh0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUxNiByZWdudW0pCiYjNDM7ewomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZhbXA7cGh5ZGV2LSZndDttZGlvLmJ1cy0mZ3Q7bWRpb19sb2NrKTsKJiM0MzsJcmV0ID0gX19waHlfcGFja2FnZV93cml0ZShwaHlkZXYsIDAsIFlUUEhZX1BBR0VfU0VMRUNULCByZWdudW0pOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldHVybiBfX3BoeV9wYWNrYWdlX3JlYWQocGh5ZGV2LCAwLCBZVFBIWV9QQUdFX0RBVEEpOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB5dHBoeV93cml0ZV90b3BfZXh0KCkgLSB3cml0ZSBhIFBIWSYjMzk7cyB0b3AgZXh0ZW5kZWQgcmVnaXN0ZXIgZm9yIFlUODgyNAomIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhICZhbXA7c3RydWN0IHBoeV9kZXZpY2UKJiM0MzsgKiBAcmVnbnVtOiByZWdpc3RlciBudW1iZXIgdG8gd3JpdGUKJiM0MzsgKiBAdmFsOiByZWdpc3RlciB2YWwgdG8gd3JpdGUKJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IHRoZSB2YWx1ZSBvZiByZWdudW0gcmVnIG9yIG5lZ2F0aXZlIGVycm9yIGNvZGUKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHl0cGh5X3dyaXRlX3RvcF9leHQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTE2IHJlZ251bSwKJiM0MzsJCQkgICAgICAgdTE2IHZhbCkKJiM0Mzt7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDtwaHlkZXYtJmd0O21kaW8uYnVzLSZndDttZGlvX2xvY2spOwomIzQzOwlyZXQgPSBfX3BoeV9wYWNrYWdlX3dyaXRlKHBoeWRldiwgMCwgWVRQSFlfUEFHRV9TRUxFQ1QsIHJlZ251bSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0dXJuIF9fcGh5X3BhY2thZ2Vfd3JpdGUocGh5ZGV2LCAwLCBZVFBIWV9QQUdFX0RBVEEsIHZhbCk7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2soKSAtIHdyaXRlIHBhZ2UgZm9yIFlUODgyNAomIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhICZhbXA7c3RydWN0IHBoeV9kZXZpY2UKJiM0MzsgKiBAcGFnZTogcmVnIHBhZ2UoWVQ4ODI0X1JTU1JfVVNYR01JSV9TUEFDRS9ZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogdGhlIHZhbHVlIG9mIHJlZ251bSByZWcgb3IgbmVnYXRpdmUgZXJyb3IgY29kZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgcGFnZSkKJiM0Mzt7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXBoeV9sb2NrX21kaW9fYnVzKHBoeWRldik7CiYjNDM7CXJldCA9IHl0cGh5X3JlYWRfdG9wX2V4dChwaHlkZXYsIFlUODUyMV9SRUdfU1BBQ0VfU0VMRUNUX1JFRyk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwlyZXQgJmFtcDs9IH5ZVDg4MjRfUlNTUl9TUEFDRV9NQVNLOwomIzQzOwlyZXQgfD0gKHBhZ2UgJmFtcDsgWVQ4ODI0X1JTU1JfU1BBQ0VfTUFTSyk7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX3RvcF9leHQocGh5ZGV2LCBZVDg1MjFfUkVHX1NQQUNFX1NFTEVDVF9SRUcsIHJldCk7CiYjNDM7CiYjNDM7ZXJyX3Jlc3RvcmVfcGFnZToKJiM0MzsJcGh5X3VubG9ja19tZGlvX2J1cyhwaHlkZXYpOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKIC8qKgogICogeXRwaHlfd3JpdGVfZXh0KCkgLSB3cml0ZSBhIFBIWSYjMzk7cyBleHRlbmRlZCByZWdpc3RlcgogICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQpAQCAtNjIxLDExICYjNDM7NzIwLDk5OCBAQCBzdGF0aWMgaW50IHl0cGh5X3NldF93b2woc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgc3RydWN0IGV0aHRvb2xfd29saW5mbyAqd29sKQogCQlyZXQgPSBfX3BoeV9tb2RpZnkocGh5ZGV2LCBZVFBIWV9JTlRFUlJVUFRfRU5BQkxFX1JFRywKIAkJCQkgICBZVFBIWV9JRVJfV09MLCAwKTsKIAkJaWYgKHJldCAmbHQ7IDApCi0JCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwl9CiYjNDM7CiYjNDM7ZXJyX3Jlc3RvcmVfcGFnZToKJiM0MzsJcmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRfcGFnZSwgcmV0KTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogeXQ4ODI0X3JlYWRfcGFnZSgpIC0gcmVhZCBQSFk4ODI0IHJlZyBwYWdlCiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogY3VycmVudCByZWcgc3BhY2Ugb2YgeXQ4ODI0IChZVDg4MjRfUlNTUl9VU1hHTUlJX1NQQUNFLwomIzQzOyAqIFlUODgyNF9SU1NSX1VUUF9TUEFDRSkgb3IgbmVnYXRpdmUgZXJybm8gY29kZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3JlYWRfcGFnZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJaW50IG9sZF9wYWdlOwomIzQzOwomIzQzOwlvbGRfcGFnZSA9IHl0cGh5X3JlYWRfdG9wX2V4dChwaHlkZXYsIFlUODUyMV9SRUdfU1BBQ0VfU0VMRUNUX1JFRyk7CiYjNDM7CWlmIChvbGRfcGFnZSAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gb2xkX3BhZ2U7CiYjNDM7CiYjNDM7CXJldHVybiBvbGRfcGFnZSAmYW1wOyBZVDg4MjRfUlNTUl9TUEFDRV9NQVNLOwomIzQzO307CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogeXQ4ODI0X3dyaXRlX3BhZ2UoKSAtIHdyaXRlIHJlZyBwYWdlCiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQomIzQzOyAqIEBwYWdlOiBSZWcgcGFnZShZVDg4MjRfUlNTUl9VU1hHTUlJX1NQQUNFL1lUODgyNF9SU1NSX1VUUF9TUEFDRSkgdG8gd3JpdGUuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGUKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHl0ODgyNF93cml0ZV9wYWdlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCBwYWdlKQomIzQzO3sKJiM0MzsJaW50IG9sZF9wYWdlOwomIzQzOwl1MTYgZGF0YTsKJiM0MzsKJiM0MzsJb2xkX3BhZ2UgPSB5dHBoeV9yZWFkX3RvcF9leHQocGh5ZGV2LCBZVDg1MjFfUkVHX1NQQUNFX1NFTEVDVF9SRUcpOwomIzQzOwlpZiAob2xkX3BhZ2UgJmx0OyAwKQomIzQzOwkJcmV0dXJuIG9sZF9wYWdlOwomIzQzOwlkYXRhID0gb2xkX3BhZ2UgJmFtcDsgKH5ZVDg4MjRfUlNTUl9TUEFDRV9NQVNLKTsKJiM0MzsJZGF0YSB8PSBwYWdlOwomIzQzOwomIzQzOwlyZXR1cm4geXRwaHlfd3JpdGVfdG9wX2V4dChwaHlkZXYsIFlUODUyMV9SRUdfU1BBQ0VfU0VMRUNUX1JFRywgZGF0YSk7CiYjNDM7fTsKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkKCkgLSBjb25maWcgWVQ4ODI0IHRvIGludmFsaWQgdGVzdCBtb2RlLgomIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhICZhbXA7c3RydWN0IHBoeV9kZXZpY2UKJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJaW50IHJldCA9IDA7CiYjNDM7CiYjNDM7CXJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldHVybiBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlKHBoeWRldiwKJiM0MzsJCQkJCSAgICBZVDg4MjRfVVRQX1RFTVBMQVRFX1RFU1RfTU9ERTEpOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB5dDg4MjRfc2RzX2lzb2xhdGVfcGFnZWQoKSAtIGVuYWJsZSBZVDg4MjQgc2VyZGVzIGlzb2xhdGUuCiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB5dDg4MjRfc2RzX2lzb2xhdGVfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CWludCBvbGRfcGFnZTsKJiM0MzsJaW50IHJldCA9IDA7CiYjNDM7CiYjNDM7CW9sZF9wYWdlID0gcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVNYR01JSV9TUEFDRSk7CiYjNDM7CWlmIChvbGRfcGFnZSAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CXJldCA9IF9fcGh5X3JlYWQocGh5ZGV2LCBNSUlfQk1DUik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwkvKiBpc29sYXRpb24gKi8KJiM0MzsJcmV0IHw9IEJNQ1JfSVNPTEFURTsKJiM0MzsJcmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBNSUlfQk1DUiwgcmV0KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7ZXJyX3Jlc3RvcmVfcGFnZToKJiM0MzsJcmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRfcGFnZSwgcmV0KTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogeXQ4ODI0X3V0cF9zb2Z0cmVzZXRfcGFnZWQoKSAtIGNvbmZpZyBZVDg4MjQgVVRQIHNvZnRyZXNldC4KJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSAmYW1wO3N0cnVjdCBwaHlfZGV2aWNlCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGUKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHl0ODgyNF91dHBfc29mdHJlc2V0X3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlpbnQgcmV0ID0gMDsKJiM0MzsJaW50IHZhbDsKJiM0MzsKJiM0MzsJcmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJcmV0ID0gcGh5X3JlYWQocGh5ZGV2LCBNSUlfQk1DUik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJcmV0IHw9IEJNQ1JfUkVTRVQ7CiYjNDM7CXJldCA9IHBoeV93cml0ZShwaHlkZXYsIE1JSV9CTUNSLCByZXQpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CS8qIHdhaXQgdW50aWwgc29mdHJlc2V0IGRvbmUuICovCiYjNDM7CXJldHVybiBwaHlfcmVhZF9wb2xsX3RpbWVvdXQocGh5ZGV2LCBNSUlfQk1DUiwgdmFsLAomIzQzOwkJCQkgICAgICEodmFsICZhbXA7IEJNQ1JfUkVTRVQpLAomIzQzOwkJCQkgICAgIDUwMDAwLCA2MDAwMDAsIHRydWUpOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQoKSAtIGNvbmZpZyBZVDg4MjQgdG8gbm9ybWFsIHRlc3QgbW9kZS4KJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSAmYW1wO3N0cnVjdCBwaHlfZGV2aWNlCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGUKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJaW50IHJldCA9IDA7CiYjNDM7CiYjNDM7CXJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldHVybiBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlKHBoeWRldiwKJiM0MzsJCQkJCSAgICBZVDg4MjRfVVRQX1RFTVBMQVRFX1RFU1RfTk9STUFMKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogeXQ4ODI0X3Nkc19pc29sYXRlX2FuZF9zb2Z0cmVzZXRfcGFnZWQoKSAtIGRpc2FibGUgWVQ4ODI0IHNlcmRlcyBpc29sYXRlCiYjNDM7ICogYW5kIHNkcyBzb2Z0cmVzZXQuCiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB5dDg4MjRfc2RzX2lzb2xhdGVfYW5kX3NvZnRyZXNldF9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJdW5zaWduZWQgaW50IHJldHJ5ID0gMTI7CiYjNDM7CWludCBvbGRfcGFnZTsKJiM0MzsJaW50IHJldCA9IC0xOwomIzQzOwomIzQzOwlvbGRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIFlUODgyNF9SU1NSX1VTWEdNSUlfU1BBQ0UpOwomIzQzOwlpZiAob2xkX3BhZ2UgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwlyZXQgPSBfX3BoeV9yZWFkKHBoeWRldiwgTUlJX0JNQ1IpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJLyogZGlzYWJsZSBpc29sYXRpb24gKi8KJiM0MzsJcmV0ICZhbXA7PSB+QklUKDEwKTsKJiM0MzsJLyogc29mdCByZXNldCAqLwomIzQzOwlyZXQgfD0gQk1DUl9SRVNFVDsKJiM0MzsJcmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBNSUlfQk1DUiwgcmV0KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CWRvIHsKJiM0MzsJCW1zbGVlcCg1MCk7CiYjNDM7CQlyZXQgPSBfX3BoeV9yZWFkKHBoeWRldiwgTUlJX0JNQ1IpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwl9IHdoaWxlICgocmV0ICZhbXA7IEJNQ1JfUkVTRVQpICZhbXA7JmFtcDsgLS1yZXRyeSk7CiYjNDM7CiYjNDM7CWlmIChyZXQgJmFtcDsgQk1DUl9SRVNFVCkgewomIzQzOwkJcmV0ID0gLUVUSU1FRE9VVDsKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJfQomIzQzOwomIzQzO2Vycl9yZXN0b3JlX3BhZ2U6CiYjNDM7CXJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHl0ODgyNF9zb2Z0X3Jlc2V0KCkgLSBjYWxsZWQgdG8gZG8gUEhZIHNvZnR3YXJlIHJlc2V0CiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB5dDg4MjRfc29mdF9yZXNldChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJaWYgKHBoeWRldi0mZ3Q7aW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTCkgewomIzQzOwkJLyogaW52YWxpZCB0ZXN0IG1vZGUgKi8KJiM0MzsJCXJldCA9IHl0ODgyNF91dHBfaW52YWxpZF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CQlyZXQgPSB5dDg4MjRfdXRwX3NvZnRyZXNldF9wYWdlZChwaHlkZXYpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsJCS8qIG5vcm1hbCBtb2RlICovCiYjNDM7CQlyZXQgPSB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQkvKiBpbnZhbGlkIHRlc3QgbW9kZSAqLwomIzQzOwkJcmV0ID0geXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJCS8qIHNkcyBpc29sYXRpb24gKi8KJiM0MzsJCXJldCA9IHl0ODgyNF9zZHNfaXNvbGF0ZV9wYWdlZChwaHlkZXYpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJCS8qIHV0cCBzb2Z0IHJlc2V0ICovCiYjNDM7CQlyZXQgPSB5dDg4MjRfdXRwX3NvZnRyZXNldF9wYWdlZChwaHlkZXYpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJCS8qIG5vcm1hbCBtb2RlICovCiYjNDM7CQlyZXQgPSB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CQkvKiBzZHMgc29mdCByZXNldCBhbmQgZGlzYWJsZSBpc29sYXRpb24gKi8KJiM0MzsJCXJldCA9IHl0ODgyNF9zZHNfaXNvbGF0ZV9hbmRfc29mdHJlc2V0X3BhZ2VkKHBoeWRldik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwl9CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB5dDg4MjRfZXh0ZXJuX2NvbmZpZ191dHBfaW5pdF9wYWdlZCgpIC0gY29uZmlnIGV4dGVybmFsIHBoeTg4MjQgdXRwIGluaXQKJiM0MzsgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3QKJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X2V4dGVybl9jb25maWdfdXRwX2luaXRfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CWludCBkYXRhID0gMDsKJiM0MzsJaW50IHJldCA9IDA7CiYjNDM7CiYjNDM7CXJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CS8qIHBvd2VyIGRvd24gKi8KJiM0MzsJZGF0YSA9IHBoeV9yZWFkKHBoeWRldiwgTUlJX0JNQ1IpOwomIzQzOwlpZiAoZGF0YSAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gZGF0YTsKJiM0MzsJZGF0YSB8PSBCTUNSX1BET1dOOwomIzQzOwlyZXQgPSBwaHlfd3JpdGUocGh5ZGV2LCBNSUlfQk1DUiwgZGF0YSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJLyogcGxsIGNhbGlicmF0aW9uICovCiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAwMDEsIDB4MDAwMyk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTIwZSwgMHgwY2JhKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMjBhLCAweGMzZjEpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyMGMsIDB4MTYyMCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJiNiwgMHgwYTAwKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmI2LCAweDBlMDApOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CS8qIG9wdGltaXphdGlvbiB1dHAgKi8KJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDAwMSwgMHgwMDAzKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwkvKiBlbmFibGUgbmliYmxlICovCiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEwMDMsIDB4MDAwMyk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJLyogaWRsZSBlcnIgZGV0ZWN0IGVuYWJsZSAqLwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwM2QwLCAweDUyMTApOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CS8qIG9wdGltaXplZCAyLjVHIGxvbmcgY2FibGUgcGVyZm9ybWFuY2UgKi8KJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDM3MiwgMHg1MDM4KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzdjLCAweDYwNjgpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzODgsIDB4MDBhMCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJLyogb3B0aW1pemVkIGZhc3QgcmV0cmFpbiAqLwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzU5LCAweDIxNDApOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAwMGMsIDB4YzFhMCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJLyogMi41RyB0ZW1wbGF0ZSB0b25lICovCiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZmEsIDB4MDA4Myk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDRlMiwgMHgwMTQ5KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwkvKiBvcHRpbWl6ZWQgMi41RyB0ZW1wbGF0ZSAqLwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDdlLCAweDM5MzkpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0N2YsIDB4MzkzOSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ4MCwgMHgzOTM5KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDgxLCAweDM5MzkpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CS8qIG9wdGltaXplZCAxMDAwTSBjYWJsZSBsZW5ndGggdGhyZXNob2xkICovCiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzMzYsIDB4YWIwYSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDM0MCwgMHgzMDFkKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwkvKiAxMDBNIHRlbXBsYXRlIGFtcGxpdHVkZSAqLwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDZlLCAweDQ1NDUpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NmYsIDB4NDU0NSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ3MCwgMHg0NTQ1KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDcxLCAweDQ1NDUpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CS8qIG9wdGltaXplZCAxMDBNIGNhYmxlIGxlbmd0aCB0aHJlc2hvbGQgKi8KJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDMwYiwgMHhhYTFkKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNzFmLCAweDAwMzYpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CS8qIDEwTSB0ZW1wbGF0ZSBhbXBsaXR1ZGUgKi8KJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ2YiwgMHgxODE4KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDZjLCAweDE4MTgpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CS8qIG9wdGltaXplZCAxME0gY2FibGUgbGVuZ3RoIHRocmVzaG9sZCAqLwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDY2LCAweDZjNmMpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NjcsIDB4NmM2Yyk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ2OCwgMHg2YzZjKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDY5LCAweDZjNmMpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CS8qIG9wdGltaXplIHV0cCAxMDAwTSBwZXJmb3JtYW5jZSAqLwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzRhLCAweGZmMDMpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAwZjgsIDB4YjNmZik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDA1OSwgMHg0MDQwKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzJjLCAweDUwOTQpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzMmQsIDB4ZDA5NCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDMyZSwgMHg1MzA4KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzIyLCAweDY0NDApOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0ZDMsIDB4NTIyMCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDRkMiwgMHg1MjIwKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwkvKiBvcHRpbWl6ZWQgRU1DIENTICovCiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAwYzgsIDB4ZmZmZik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDBiZSwgMHg2NDA2KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzdhLCAweDQwZmYpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CS8qIG9wdGltaXplZCBFTUMgUkUgKi8KJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ4MiwgMHhmZmZmKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmQ1LCAweDFmMWYpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZDYsIDB4MWYxZik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJkNywgMHgxZjFmKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmQ4LCAweDFmMWYpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyMTgsIDB4MDA2ZSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTAxZCwgMHhmZmYwKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDFlLCAweGZmZjApOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEwMWQsIDB4ZmZmZik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTAxZSwgMHhmZmZmKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB5dDg4MjRfZXh0ZXJuX2NvbmZpZ19zZHNfaW5pdF9wYWdlZCgpIC0gY29uZmlnIGV4dGVybmFsIHBoeTg4MjQgc2RzIGluaXQKJiM0MzsgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3QKJiM0MzsgKgomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB5dDg4MjRfZXh0ZXJuX2NvbmZpZ19zZHNfaW5pdF9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqc2hhcmVkX3ByaXY7CiYjNDM7CWludCByZXQgPSAwLCBvbGRfcGFnZTsKJiM0MzsJaW50IHZhbF8xLCB2YWxfMiwgdmFsXzMsIHRtcDsKJiM0MzsJdTE2IGRhdGEgPSAwOwomIzQzOwlpbnQgcG9ydDsKJiM0MzsKJiM0MzsJc2hhcmVkX3ByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpOwomIzQzOwlwb3J0ID0gcGh5ZGV2LSZndDttZGlvLmFkZHIgLSBzaGFyZWRfcHJpdi0mZ3Q7b2Zmc2V0OwomIzQzOwlpZiAocG9ydCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJb2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCBZVDg4MjRfUlNTUl9VU1hHTUlJX1NQQUNFKTsKJiM0MzsJaWYgKG9sZF9wYWdlICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJLyogcmVhZCBlZnVzZSAqLwomIzQzOwl2YWxfMSA9IHl0cGh5X3JlYWRfdG9wX2V4dChwaHlkZXYsIDB4YTEzZSk7CiYjNDM7CWlmICh2YWxfMSAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CXZhbF8yID0geXRwaHlfcmVhZF90b3BfZXh0KHBoeWRldiwgMHhhMTNmKTsKJiM0MzsJaWYgKHZhbF8yICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJdmFsXzMgPSB5dHBoeV9yZWFkX3RvcF9leHQocGh5ZGV2LCAweGExNDApOwomIzQzOwlpZiAodmFsXzMgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwlpZiAocG9ydCA9PSAwKSB7CiYjNDM7CQkvKiBTZXJkZXMgb3B0aW1pemF0aW9uICovCiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YmUsIDB4MDAwZCk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OWYsIDB4N2RlZCk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YTksIDB4MDA5Zik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQkvKiBhbmFsb2cgQ0RSICovCiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0MDYsIDB4MDgwMCk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQkvKiBvcHRpbWl6ZWQgVkNPICovCiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0MzgsIDB4OTAyNCk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0MzksIDB4MDBjMCk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQkvKiBvcHRpbWl6ZWQgUExMIGxvY2sgKi8KJiM0MzsJCXJldCA9IHl0cGh5X3JlYWRfZXh0KHBoeWRldiwgMHgwNDI5KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCXJldCAmYW1wOz0gfihCSVQoMTMpIHwgQklUKDEyKSk7CiYjNDM7CQl0bXAgPSAodmFsXzEgJmFtcDsgKEJJVCg3KSB8IEJJVCg2KSkpICZndDsmZ3Q7IDY7CiYjNDM7CQlyZXQgfD0gKHRtcCAmbHQ7Jmx0OyAxMik7CiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0MjksIHJldCk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQlyZXQgPSB5dHBoeV9yZWFkX2V4dChwaHlkZXYsIDB4MDQ0MSk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQlyZXQgJmFtcDs9IH4oQklUKDEpIHwgQklUKDApKTsKJiM0MzsJCXRtcCA9ICh2YWxfMSAmYW1wOyAoQklUKDUpIHwgQklUKDQpKSkgJmd0OyZndDsgNDsKJiM0MzsJCXJldCB8PSB0bXA7CiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0NDEsIHJldCk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQlyZXQgPSB5dHBoeV9yZWFkX2V4dChwaHlkZXYsIDB4MDQyYik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQlyZXQgJmFtcDs9IH4oQklUKDEzKSB8IEJJVCgxMikpOwomIzQzOwkJdG1wID0gKHZhbF8zICZhbXA7IChCSVQoMSkgfCBCSVQoMCkpKTsKJiM0MzsJCXJldCB8PSAodG1wICZsdDsmbHQ7IDEyKTsKJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQyYiwgcmV0KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQzYSwgMHgxMDA2KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQyYSwgMHhmMDcwKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCS8qIGNhYmxlIGxlbmd0aCB0aHJlc2hvbGQgKi8KJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ5MSwgMHgwMDdmKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ5MiwgMHg3ZjdmKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCS8qIFNlcmRlcyB0cmFpbmluZyB0aHJlc2hvbGQgKi8KJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ1NCwgMHgwZjE0KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ5NywgMHgwYTQ0KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCS8qIGRpZ2l0YWwgZXllIGRpYWdyYW0gb2YgU2VyRGVzICovCiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0Y2QsIDB4MDAwMCk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQkvKiBTZXJkZXMgTERPICovCiYjNDM7CQlyZXQgPSB5dHBoeV9yZWFkX2V4dChwaHlkZXYsIDB4MDRiNSk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQlyZXQgJmFtcDs9IH4oQklUKDYpIHwgQklUKDUpIHwgQklUKDQpKTsKJiM0MzsJCXRtcCA9ICh2YWxfMiAmYW1wOyAoQklUKDQpIHwgQklUKDMpIHwgQklUKDIpKSkgJmd0OyZndDsgMjsKJiM0MzsJCXJldCB8PSAodG1wICZsdDsmbHQ7IDQpOwomIzQzOwkJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGI1LCByZXQpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkJcmV0ID0geXRwaHlfcmVhZF9leHQocGh5ZGV2LCAweDA0YjQpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkJcmV0ICZhbXA7PSB+KEJJVCgxMCkgfCBCSVQoOSkgfCBCSVQoOCkpOwomIzQzOwkJdG1wID0gKHZhbF8yICZhbXA7IChCSVQoNykgfCBCSVQoNikgfCBCSVQoNSkpKSAmZ3Q7Jmd0OyA1OwomIzQzOwkJcmV0IHw9ICh0bXAgJmx0OyZsdDsgOCk7CiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YjQsIHJldCk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQkvKiBvcHRpbWl6ZWQgU2VyZGVzIFJYICovCiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YWYsIDB4NDVlMyk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OGEsIDB4MGZmZik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0MDgsIDB4N2MwMCk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0ZDYsIDB4MDA3Zik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0NGYsIDB4ZmYwOCk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQkvKiBvcHRpbWl6ZWQgU2VyZGVzIFRYICovCiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OGUsIDB4N2QwMCk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAwMGQsIDB4MDYwNik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQkvKiBTZXJkZXMgbWFudWFsIGNvbmZpZyAqLwomIzQzOwkJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGIwLCAweDA4MDQpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGIxLCAweDcwNzQpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGFmLCAweDQ1ZTcpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkJLyogcmVzdGFydCBjYWxpYnJhdGlvbiAqLwomIzQzOwkJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMDAzLCAweDU2MDMpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDkyLCAweDdmZmYpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDkyLCAweDdmN2YpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgyMDAwLCAweDAwNDApOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgyMDAwLCAweDAwMDApOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIFRYIHByZWFtYmxlIHBhZGRlZCB0byA4OyBSWCBJUEcgYWx3YXlzICZndDsgOCAqLwomIzQzOwlyZXQgPSBfX3BoeV9yZWFkKHBoeWRldiwgTUlJX1JFU1YxKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CXJldCAmYW1wOz0gfllUODgyNF9TRFNfQ0ZHX01JTl9QUkVfTUFTSzsKJiM0MzsJcmV0IHw9IFlUODgyNF9TRFNfVFhfUFJFX1BBRERJTkc7CiYjNDM7CXJldCB8PSBZVDg4MjRfU0RTX0VOX0ZJTExfUFJFOwomIzQzOwlyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIE1JSV9SRVNWMSwgcmV0KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CWRhdGEgPSBfX3BoeV9yZWFkKHBoeWRldiwgTUlJX0JNQ1IpOwomIzQzOwlpZiAoZGF0YSAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CWRhdGEgfD0gQk1DUl9SRVNFVDsKJiM0MzsJZGF0YSB8PSBCTUNSX0FORU5BQkxFOwomIzQzOwlyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIE1JSV9CTUNSLCBkYXRhKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7ZXJyX3Jlc3RvcmVfcGFnZToKJiM0MzsJcmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRfcGFnZSwgcmV0KTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogeXQ4ODI0X2ludGVybmFsX2NvbmZpZ19pbml0X3BhZ2VkKCkgLSBjb25maWcgaW50ZXJuYWwgcGh5ODgyNCBpbml0CiYjNDM7ICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0CiYjNDM7ICoKJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X2ludGVybmFsX2NvbmZpZ19pbml0X3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpzaGFyZWRfcHJpdjsKJiM0MzsJaW50IHBvcnQgPSAwOwomIzQzOwlpbnQgcmV0ID0gMDsKJiM0MzsJaW50IGRhdGE7CiYjNDM7CiYjNDM7CXJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXNoYXJlZF9wcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTsKJiM0MzsJcG9ydCA9IHBoeWRldi0mZ3Q7bWRpby5hZGRyIC0gc2hhcmVkX3ByaXYtJmd0O29mZnNldDsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MSwgMHgzKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwlkYXRhID0gcGh5X3JlYWQocGh5ZGV2LCBNSUlfQk1DUik7CiYjNDM7CWlmIChkYXRhICZsdDsgMCkKJiM0MzsJCXJldHVybiBkYXRhOwomIzQzOwlkYXRhIHw9IEJNQ1JfUERPV047CiYjNDM7CXJldCA9IHBoeV93cml0ZShwaHlkZXYsIE1JSV9CTUNSLCBkYXRhKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwlpZiAocG9ydCA9PSAwKSB7CiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMjBlLCAweGNiYSk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwkJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTIwYSwgMHhjM2YxKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMjBjLCAweDE2MjApOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyYjYsIDB4YTAwKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmI2LCAweGUwMCk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwkJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTAwMywgMHgzKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CX0KJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4M2QwLCAweDUyMTApOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDM3MiwgMHg1MDM4KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzN2MsIDB4NjA2OCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4Mzg4LCAweGEwKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzNTksIDB4MjE0MCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJmYSwgMHg4Myk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NGUyLCAweDE0OSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJLyogMi41RyB0ZW1wYXRlICovCiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ3ZSwgMHgzOTM5KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0N2YsIDB4MzkzOSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDgwLCAweDM5MzkpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ4MSwgMHgzOTM5KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwkvKiAxMDAwIGNhYmxlIGxlbmd0aCB0aHJlc2hvbGQgKi8KJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzM2LCAweGFiMGEpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDM0MCwgMHgzMDFkKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwkvKiAxMDAwIHBlcmZvcm1hbmNlICovCiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDM0YSwgMHhmZjAzKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhmOCwgMHhiM2ZmKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzMmMsIDB4NTA5NCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzJkLCAweGQwOTQpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDMyZSwgMHg1MzA4KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzMjIsIDB4NjQ0MCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NGQzLCAweDUyMjApOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDRkMiwgMHg1MjIwKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwkvKiAxMDAgdGVtcGF0ZSAqLwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NmUsIDB4NDU0NSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDZmLCAweDQ1NDUpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ3MCwgMHg0NTQ1KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NzEsIDB4NDU0NSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJLyogMTAwIGNhYmxlIGxlbmd0aCB0aHJlc2hvbGQgKi8KJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzBiLCAweGFhMWQpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDcxZiwgMHgzNik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJLyogMTAgdGVtcGF0ZSAqLwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NmIsIDB4MTgxOCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDZjLCAweDE4MTgpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CS8qIDEwIHRlbXBhdGUgTUFVKi8KJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDY2LCAweDZjNmMpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ2NywgMHg2YzZjKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NjgsIDB4NmM2Yyk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDY5LCAweDZjNmMpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CS8qIEVNQyBDUyAqLwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhjOCwgMHhmZmYpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGJlLCAweDY0MDYpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDM3YSwgMHg0MGZmKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwkvKiBFTUMgUkUqLwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0ODIsIDB4ZmZmZik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJaWYgKHBvcnQgPT0gMCkgewomIzQzOwkJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDgyLCAweGZmZmYpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZDUsIDB4MWYxZik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwkJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJkNiwgMHgxZjFmKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmQ3LCAweDFmMWYpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZDgsIDB4MWYxZik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwkJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTIxOCwgMHg2ZSk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwkJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTAxZCwgMHhmZmYwKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDFlLCAweGZmZjApOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEwMWQsIDB4ZmZmZik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwkJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTAxZSwgMHhmZmZmKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CX0KJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YywgMHg0MWExKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwlyZXQgPSBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlKHBoeWRldiwKJiM0MzsJCQkJCSAgIFlUODgyNF9VVFBfVEVNUExBVEVfVEVTVF9NT0RFMSk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwlkYXRhID0gcGh5X3JlYWQocGh5ZGV2LCBNSUlfQk1DUik7CiYjNDM7CWlmIChkYXRhICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CWRhdGEgfD0gQk1DUl9SRVNFVDsKJiM0MzsJZGF0YSB8PSBCTUNSX0FORU5BQkxFOwomIzQzOwlyZXQgPSBwaHlfd3JpdGUocGh5ZGV2LCBNSUlfQk1DUiwgZGF0YSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJcmV0ID0gZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZShwaHlkZXYsCiYjNDM7CQkJCQkgICBZVDg4MjRfVVRQX1RFTVBMQVRFX1RFU1RfTk9STUFMKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogeXQ4ODI0X2NvbmZpZ19pbml0KCkgLSBwaHkgaW5pdGlhbGl6YXRpb2luCiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB5dDg4MjRfY29uZmlnX2luaXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWlmIChwaHlkZXYtJmd0O2ludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUwpIHsKJiM0MzsJCXJldCA9IHl0ODgyNF9pbnRlcm5hbF9jb25maWdfaW5pdF9wYWdlZChwaHlkZXYpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXJldCA9IHl0ODgyNF9leHRlcm5fY29uZmlnX3V0cF9pbml0X3BhZ2VkKHBoeWRldik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwkJcmV0ID0geXQ4ODI0X2V4dGVybl9jb25maWdfc2RzX2luaXRfcGFnZWQocGh5ZGV2KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCXJldHVybiByZXQ7CiAJfQomIzQzOwlyZXQgPSB5dDg4MjRfc29mdF9yZXNldChwaHlkZXYpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiAKLWVycl9yZXN0b3JlX3BhZ2U6Ci0JcmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRfcGFnZSwgcmV0KTsKJiM0MzsJcGh5ZGV2X2RiZyhwaHlkZXYsICYjMzQ7JXMgZG9uZSwgcGh5IGFkZHI6ICVkXG4mIzM0OywKJiM0MzsJCSAgIF9fZnVuY19fLCBwaHlkZXYtJmd0O21kaW8uYWRkcik7CiYjNDM7CiYjNDM7CXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHl0ODUzMV9zZXRfd29sKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsCkBAIC0zMDY2LDYgJiM0Mzs0MTUyLDM3MyBAQCBzdGF0aWMgaW50IHl0ODgyMV9yZXN1bWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKIAlyZXR1cm4geXQ4ODIxX21vZGlmeV91dHBfZmliZXJfYm1jcihwaHlkZXYsIEJNQ1JfUERPV04sIDApOwogfQogCiYjNDM7LyoqCiYjNDM7ICogeXQ4ODI0X2FuZWdfZG9uZSgpICAtIGNoZWNrIG5lZ290aWF0aW9uIHN0YXRlLgomIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhICZhbXA7c3RydWN0IHBoeV9kZXZpY2UKJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X2FuZWdfZG9uZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJaW50IGxpbmsgPSAwOwomIzQzOwlpbnQgcmV0ID0gMDsKJiM0MzsKJiM0MzsJcmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gcGh5X3JlYWQocGh5ZGV2LCBZVFBIWV9TUEVDSUZJQ19TVEFUVVNfUkVHKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwlsaW5rID0gISEocmV0ICZhbXA7IFlUUEhZX1NTUl9MSU5LKTsKJiM0MzsKJiM0MzsJcGh5ZGV2X2RiZyhwaHlkZXYsICYjMzQ7JXMsIHBoeSBhZGRyOiAlZCwgbGlua191dHA6ICVkXG4mIzM0OywKJiM0MzsJCSAgIF9fZnVuY19fLCBwaHlkZXYtJmd0O21kaW8uYWRkciwgbGluayk7CiYjNDM7CiYjNDM7CXJldHVybiBsaW5rOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB5dDg4MjRfcmVhZF9zdGF0dXNfcGFnZWQoKSAtICBkZXRlcm1pbmVzIHRoZSBzcGVlZCBhbmQgZHVwbGV4IG9mIG9uZSBwYWdlCiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQomIzQzOyAqIEBzdGF0dXM6IFRoZSBsaW5rIHN0YXR1cywgaW5jbHVkZSBzcGVlZCwgZHVwbGV4IGFuZCBsaW5rIHN0YXRlLgomIzQzOyAqIEBscGE6IGxpbmsgcGFydG5lciBhZHZlcnRpc2luZy4KJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IDEgKHV0cCBsaW5rKSwwIChubyBsaW5rKSBvciBuZWdhdGl2ZSBlcnJubyBjb2RlCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB5dDg4MjRfcmVhZF9zdGF0dXNfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwKJiM0MzsJCQkJICAgIGludCAqc3RhdHVzLCBpbnQgKmxwYSkKJiM0Mzt7CiYjNDM7CWludCByZXQgPSAwOwomIzQzOwomIzQzOwlyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXQgPSBwaHlfcmVhZChwaHlkZXYsIE1JSV9MUEEpOwomIzQzOwkqbHBhID0gcmV0OwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHBoeV9yZWFkKHBoeWRldiwgWVRQSFlfU1BFQ0lGSUNfU1RBVFVTX1JFRyk7CiYjNDM7CSpzdGF0dXMgPSByZXQ7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gISEoKnN0YXR1cyAmYW1wOyBZVFBIWV9TU1JfTElOSyk7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHl0ODgyNF9yZWFkX3N0YXR1cygpIC0gIGRldGVybWluZXMgdGhlIG5lZ290aWF0ZWQgc3BlZWQgYW5kIGR1cGxleAomIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhICZhbXA7c3RydWN0IHBoeV9kZXZpY2UKJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3JlYWRfc3RhdHVzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlpbnQgbGluazsKJiM0MzsJaW50IGxwYTsKJiM0MzsJaW50IHZhbDsKJiM0MzsKJiM0MzsJcGh5ZGV2LSZndDtwYXVzZSA9IDA7CiYjNDM7CXBoeWRldi0mZ3Q7YXN5bV9wYXVzZSA9IDA7CiYjNDM7CXBoeWRldi0mZ3Q7bGluayA9IDA7CiYjNDM7CXBoeWRldi0mZ3Q7c3BlZWQgPSBTUEVFRF9VTktOT1dOOwomIzQzOwlwaHlkZXYtJmd0O2R1cGxleCA9IERVUExFWF9VTktOT1dOOwomIzQzOwomIzQzOwlsaW5rID0geXQ4ODI0X3JlYWRfc3RhdHVzX3BhZ2VkKHBoeWRldiwKJiM0MzsJCQkJCSZhbXA7dmFsLCAmYW1wO2xwYSk7CiYjNDM7CWlmIChsaW5rICZsdDsgMCkKJiM0MzsJCXJldHVybiBsaW5rOwomIzQzOwomIzQzOwlpZiAobGluaykgewomIzQzOwkJcGh5ZGV2LSZndDtsaW5rID0gMTsKJiM0MzsJCXBoeWRldi0mZ3Q7cGF1c2UgPSAhIShscGEgJmFtcDsgQklUKDEwKSk7CiYjNDM7CQlwaHlkZXYtJmd0O2FzeW1fcGF1c2UgPSAhIShscGEgJmFtcDsgQklUKDExKSk7CiYjNDM7CiYjNDM7CQkvKiB1cGRhdGUgc3BlZWQgJmFtcDsgZHVwbGV4ICovCiYjNDM7CQl5dDg4MjFfYWRqdXN0X3N0YXR1cyhwaHlkZXYsIHZhbCk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlwaHlkZXYtJmd0O2xpbmsgPSAwOwomIzQzOwkJcGh5ZGV2LSZndDtwYXVzZSA9IDA7CiYjNDM7CQlwaHlkZXYtJmd0O2FzeW1fcGF1c2UgPSAwOwomIzQzOwkJcGh5ZGV2LSZndDtzcGVlZCA9IFNQRUVEX1VOS05PV047CiYjNDM7CQlwaHlkZXYtJmd0O2R1cGxleCA9IERVUExFWF9VTktOT1dOOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB5dDg4MjRfdXRwX3Bvd2VyX29uKCk6IHV0cCBwb3dlciBvbi4KJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSAmYW1wO3N0cnVjdCBwaHlfZGV2aWNlCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGUKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHl0ODgyNF91dHBfcG93ZXJfb24oc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CWludCByZXQgPSAwOwomIzQzOwomIzQzOwlyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXQgPSBwaHlfcmVhZChwaHlkZXYsIE1JSV9CTUNSKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXQgJmFtcDs9IH5CTUNSX1BET1dOOwomIzQzOwlyZXQgJmFtcDs9IH5CTUNSX0lTT0xBVEU7CiYjNDM7CiYjNDM7CXJldHVybiBwaHlfd3JpdGUocGh5ZGV2LCBNSUlfQk1DUiwgcmV0KTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogeXQ4ODI0X3V0cF9wb3dlcl9kb3duKCk6IHV0cCBwb3dlciBkb3duLgomIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhICZhbXA7c3RydWN0IHBoeV9kZXZpY2UKJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3V0cF9wb3dlcl9kb3duKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlpbnQgcmV0ID0gMDsKJiM0MzsKJiM0MzsJcmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gcGh5X3JlYWQocGh5ZGV2LCBNSUlfQk1DUik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0dXJuIHBoeV93cml0ZShwaHlkZXYsIE1JSV9CTUNSLCByZXQgfCBCTUNSX1BET1dOKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogeXQ4ODI0X3Bvd2VyX29uKCkgIC0gc2V0IHV0cCBwb3dlciBvbi4KJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSAmYW1wO3N0cnVjdCBwaHlfZGV2aWNlCiYjNDM7ICoKJiM0MzsgKiBOT1RFOiBuZWVkIFdBIGxpa2Ugc29mdHJlc2V0CiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGUKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHl0ODgyNF9wb3dlcl9vbihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJaWYgKHBoeWRldi0mZ3Q7aW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTCkgewomIzQzOwkJLyogaW52YWxpZCB0ZXN0IG1vZGUgKi8KJiM0MzsJCXJldCA9IHl0ODgyNF91dHBfaW52YWxpZF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CQkvKiB1dHAgcG93ZXIgb24gKi8KJiM0MzsJCXJldCA9IHl0ODgyNF91dHBfcG93ZXJfb24ocGh5ZGV2KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CQkvKiBub3JtYWwgbW9kZSAqLwomIzQzOwkJcmV0ID0geXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwl9IGVsc2UgewomIzQzOwkJLyogaW52YWxpZCB0ZXN0IG1vZGUgKi8KJiM0MzsJCXJldCA9IHl0ODgyNF91dHBfaW52YWxpZF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CQkvKiBzZHMgaXNvbGF0aW9uICovCiYjNDM7CQlyZXQgPSB5dDg4MjRfc2RzX2lzb2xhdGVfcGFnZWQocGh5ZGV2KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CQkvKiB1dHAgcG93ZXIgb24gKi8KJiM0MzsJCXJldCA9IHl0ODgyNF91dHBfcG93ZXJfb24ocGh5ZGV2KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CQkvKiBub3JtYWwgbW9kZSAqLwomIzQzOwkJcmV0ID0geXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwkJLyogc2RzIHNvZnQgcmVzZXQgYW5kIGRpc2FibGUgaXNvbGF0aW9uICovCiYjNDM7CQlyZXQgPSB5dDg4MjRfc2RzX2lzb2xhdGVfYW5kX3NvZnRyZXNldF9wYWdlZChwaHlkZXYpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsJfQomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogeXQ4ODI0X3Jlc3VtZSgpIC0gcmVzdW1lIHRoZSBoYXJkd2FyZQomIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhICZhbXA7c3RydWN0IHBoeV9kZXZpY2UKJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3Jlc3VtZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJcmV0dXJuIHl0ODgyNF9wb3dlcl9vbihwaHlkZXYpOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB5dDg4MjRfcG93ZXJfZG93bigpICAtIHNldCB1dHAgcG93ZXIgZG93bi4KJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSAmYW1wO3N0cnVjdCBwaHlfZGV2aWNlCiYjNDM7ICoKJiM0MzsgKiBOT1RFOiBuZWVkIFdBIGxpa2Ugc29mdHJlc2V0CiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGUKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHl0ODgyNF9wb3dlcl9kb3duKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlpZiAocGh5ZGV2LSZndDtpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMKSB7CiYjNDM7CQkvKiBpbnZhbGlkIHRlc3QgbW9kZSAqLwomIzQzOwkJcmV0ID0geXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsJCS8qIHV0cCBwb3dlciBkb3duICovCiYjNDM7CQlyZXQgPSB5dDg4MjRfdXRwX3Bvd2VyX2Rvd24ocGh5ZGV2KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CQkvKiBub3JtYWwgbW9kZSAqLwomIzQzOwkJcmV0ID0geXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwl9IGVsc2UgewomIzQzOwkJLyogaW52YWxpZCB0ZXN0IG1vZGUgKi8KJiM0MzsJCXJldCA9IHl0ODgyNF91dHBfaW52YWxpZF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CQkvKiBzZHMgaXNvbGF0aW9uICovCiYjNDM7CQlyZXQgPSB5dDg4MjRfc2RzX2lzb2xhdGVfcGFnZWQocGh5ZGV2KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CQkvKiB1dHAgcG93ZXIgZG93biAqLwomIzQzOwkJcmV0ID0geXQ4ODI0X3V0cF9wb3dlcl9kb3duKHBoeWRldik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwkJLyogbm9ybWFsIG1vZGUgKi8KJiM0MzsJCXJldCA9IHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJCS8qIHNkcyBzb2Z0IHJlc2V0IGFuZCBkaXNhYmxlIGlzb2xhdGlvbiAqLwomIzQzOwkJcmV0ID0geXQ4ODI0X3Nkc19pc29sYXRlX2FuZF9zb2Z0cmVzZXRfcGFnZWQocGh5ZGV2KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CX0KJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHl0ODgyNF9zdXNwZW5kKCkgLSBzdXNwZW5kIHRoZSBoYXJkd2FyZQomIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhICZhbXA7c3RydWN0IHBoeV9kZXZpY2UKJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3N1c3BlbmQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CXJldHVybiB5dDg4MjRfcG93ZXJfZG93bihwaHlkZXYpOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB5dDg4MjRfY29uZmlnX2FuZWcoKSAtIGNvbmZpZyBuZWdvdGlhdGlvbgomIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhICZhbXA7c3RydWN0IHBoeV9kZXZpY2UKJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X2NvbmZpZ19hbmVnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlpbnQgcGh5X2N0cmwgPSAwOwomIzQzOwlpbnQgcmV0ID0gMDsKJiM0MzsKJiM0MzsJcmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJaWYgKGxpbmttb2RlX3Rlc3RfYml0KEVUSFRPT0xfTElOS19NT0RFXzI1MDBiYXNlVF9GdWxsX0JJVCwKJiM0MzsJCQkgICAgICBwaHlkZXYtJmd0O2FkdmVydGlzaW5nKSkKJiM0MzsJCXBoeV9jdHJsID0gTURJT19BTl8xMEdCVF9DVFJMX0FEVjJfNUc7CiYjNDM7CiYjNDM7CXJldCA9IHBoeV9tb2RpZnlfbW1kX2NoYW5nZWQocGh5ZGV2LCBNRElPX01NRF9BTiwKJiM0MzsJCQkJICAgICBNRElPX0FOXzEwR0JUX0NUUkwsCiYjNDM7CQkJCSAgICAgTURJT19BTl8xMEdCVF9DVFJMX0FEVjJfNUcsCiYjNDM7CQkJCSAgICAgcGh5X2N0cmwpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldHVybiBnZW5waHlfY29uZmlnX2FuZWcocGh5ZGV2KTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogeXQ4ODI0X3BoeV9wYWNrYWdlX3Byb2JlX29uY2UoKSAgLSBpbml0IHBoeSBwYWNrZXQgZm9yIHBoeTg4MjQuCiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB5dDg4MjRfcGh5X3BhY2thZ2VfcHJvYmVfb25jZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7CiYjNDM7CXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBwaHlfcGFja2FnZV9nZXRfbm9kZShwaHlkZXYpOwomIzQzOwljb25zdCBjaGFyICppbnRlcmZhY2VfbW9kZV9uYW1lOwomIzQzOwomIzQzOwlwcml2LSZndDtpbnRlcmZhY2VfbW9kZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9OQTsKJiM0MzsJcHJpdi0mZ3Q7b2Zmc2V0ID0gSU5URVJOQUxfUEhZODgyNF9UT1BfRVhURU5EX09GRlNFVDsKJiM0MzsJaWYgKCFvZl9wcm9wZXJ0eV9yZWFkX3N0cmluZyhucCwgJiMzNDttb3RvcmNvbW0saW50ZXJmYWNlLW1vZGUmIzM0OywKJiM0MzsJCQkJICAgICAmYW1wO2ludGVyZmFjZV9tb2RlX25hbWUpKSB7CiYjNDM7CQlpZiAoIXN0cmNhc2VjbXAoaW50ZXJmYWNlX21vZGVfbmFtZSwKJiM0MzsJCQkJcGh5X21vZGVzKFBIWV9JTlRFUkZBQ0VfTU9ERV9VU1hHTUlJKSkpIHsKJiM0MzsJCQlwcml2LSZndDtpbnRlcmZhY2VfbW9kZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9VU1hHTUlJOwomIzQzOwkJCXByaXYtJmd0O29mZnNldCA9IEVYVEVSTkFMX1BIWTg4MjRfVE9QX0VYVEVORF9PRkZTRVQ7CiYjNDM7CQl9IGVsc2UgaWYgKCFzdHJjYXNlY21wCiYjNDM7CQkJCShpbnRlcmZhY2VfbW9kZV9uYW1lLAomIzQzOwkJCQkgcGh5X21vZGVzKFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTCkpKSB7CiYjNDM7CQkJcHJpdi0mZ3Q7aW50ZXJmYWNlX21vZGUgPSBQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUw7CiYjNDM7CQkJcHJpdi0mZ3Q7b2Zmc2V0ID0gSU5URVJOQUxfUEhZODgyNF9UT1BfRVhURU5EX09GRlNFVDsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHl0ODgyNF9wcm9iZSgpIC0gcGh5ODgyNCBwcm9iZS4KJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSAmYW1wO3N0cnVjdCBwaHlfZGV2aWNlCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGUKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHl0ODgyNF9wcm9iZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IGRldmljZSAqZGV2ID0gJmFtcDtwaHlkZXYtJmd0O21kaW8uZGV2OwomIzQzOwlzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpzaGFyZWRfcHJpdjsKJiM0MzsJc3RydWN0IHl0ODUyMV9wcml2ICpwcml2OwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlyZXQgPSBkZXZtX29mX3BoeV9wYWNrYWdlX2pvaW4oZGV2LCBwaHlkZXYsIHNpemVvZigqc2hhcmVkX3ByaXYpKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CWlmIChwaHlfcGFja2FnZV9wcm9iZV9vbmNlKHBoeWRldikpIHsKJiM0MzsJCXJldCA9IHl0ODgyNF9waHlfcGFja2FnZV9wcm9iZV9vbmNlKHBoeWRldik7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcHJpdiA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpOwomIzQzOwlpZiAoIXByaXYpCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsKJiM0MzsJcGh5ZGV2LSZndDtwcml2ID0gcHJpdjsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogc3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIG1vdG9yY29tbV9waHlfZHJ2c1tdID0gewogCXsKIAkJUEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg1MTEpLApAQCAtMzE1MiwxMyAmIzQzOzQ2MDUsMjkgQEAgc3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIG1vdG9yY29tbV9waHlfZHJ2c1tdID0gewogCQkuc3VzcGVuZAkJPSB5dDg4MjFfc3VzcGVuZCwKIAkJLnJlc3VtZQkJCT0geXQ4ODIxX3Jlc3VtZSwKIAl9LAomIzQzOwl7CiYjNDM7CQlQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODgyNCksCiYjNDM7CQkubmFtZQkJCT0gJiMzNDtZVDg4MjQgUXVhZCBQb3J0cyAyLjVHYnBzIEV0aGVybmV0JiMzNDssCiYjNDM7CQkuZ2V0X2ZlYXR1cmVzCQk9IHl0ODgyMV9nZXRfZmVhdHVyZXMsCiYjNDM7CQkucmVhZF9wYWdlCQk9IHl0ODgyNF9yZWFkX3BhZ2UsCiYjNDM7CQkud3JpdGVfcGFnZQkJPSB5dDg4MjRfd3JpdGVfcGFnZSwKJiM0MzsJCS5wcm9iZQkJICAgICAgICA9IHl0ODgyNF9wcm9iZSwKJiM0MzsJCS5jb25maWdfYW5lZwkJPSB5dDg4MjRfY29uZmlnX2FuZWcsCiYjNDM7CQkuYW5lZ19kb25lCQk9IHl0ODgyNF9hbmVnX2RvbmUsCiYjNDM7CQkuY29uZmlnX2luaXQJCT0geXQ4ODI0X2NvbmZpZ19pbml0LAomIzQzOwkJLnJlYWRfc3RhdHVzCQk9IHl0ODgyNF9yZWFkX3N0YXR1cywKJiM0MzsJCS5zb2Z0X3Jlc2V0CQk9IHl0ODgyNF9zb2Z0X3Jlc2V0LAomIzQzOwkJLnN1c3BlbmQJCT0geXQ4ODI0X3N1c3BlbmQsCiYjNDM7CQkucmVzdW1lCQkJPSB5dDg4MjRfcmVzdW1lLAomIzQzOwl9LAogfTsKIAogbW9kdWxlX3BoeV9kcml2ZXIobW90b3Jjb21tX3BoeV9kcnZzKTsKIAotTU9EVUxFX0RFU0NSSVBUSU9OKCYjMzQ7TW90b3Jjb21tIDg1MTEvODUyMS84NTMxLzg1MzFTLzg4MjEgUEhZIGRyaXZlciYjMzQ7KTsKJiM0MztNT0RVTEVfREVTQ1JJUFRJT04oJiMzNDtNb3RvcmNvbW0gODUxMS84NTIxLzg1MzEvODUzMVMvODgyMS84ODI0IFBIWSBkcml2ZXImIzM0Oyk7CiBNT0RVTEVfQVVUSE9SKCYjMzQ7UGV0ZXIgR2VpcyYjMzQ7KTsKIE1PRFVMRV9BVVRIT1IoJiMzNDtGcmFuayYjMzQ7KTsKJiM0MztNT0RVTEVfQVVUSE9SKCYjMzQ7S3lsZSYjMzQ7KTsKIE1PRFVMRV9MSUNFTlNFKCYjMzQ7R1BMJiMzNDspOwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IG1kaW9fZGV2aWNlX2lkIF9fbWF5YmVfdW51c2VkIG1vdG9yY29tbV90YmxbXSA9IHsKQEAgLTMxNjgsNiAmIzQzOzQ2MzcsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG1kaW9fZGV2aWNlX2lkIF9fbWF5YmVfdW51c2VkIG1vdG9yY29tbV90YmxbXSA9IHsKIAl7IFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4NTMxKSB9LAogCXsgUEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg1MzFTKSB9LAogCXsgUEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg4MjEpIH0sCiYjNDM7CXsgUEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg4MjQpIH0sCiAJeyAvKiBzZW50aW5lbCAqLyB9CiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jIGIvZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuYwppbmRleCAxMjY5NTE3NDE0Mjg4Li45MDQzMDZhZjZjMWE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmMKQEAgLTEyODMsNiAmIzQzOzEyODMsMjMgQEAgaW50IGdlbnBoeV9jNDVfZmFzdF9yZXRyYWluKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGJvb2wgZW5hYmxlKQogfQogRVhQT1JUX1NZTUJPTF9HUEwoZ2VucGh5X2M0NV9mYXN0X3JldHJhaW4pOwogCiYjNDM7LyoqCiYjNDM7ICogZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZSAtIGNvbmZpZ3VyZSB0ZW1wbGF0ZSB0ZXN0bW9kZSByZWdpc3RlcnMKJiM0MzsgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3QKJiM0MzsgKiBAdGVzdF9tb2RlOiB0ZXN0bW9kZSBpbmNsdWRlcyBUZXN0IG1vZGUgMSB0byBUZXN0IG1vZGUgNwomIzQzOyAqCiYjNDM7ICogRGVzY3JpcHRpb246IFNldCB0ZW1wbGF0ZSB0ZXN0bW9kZSBpbmNsdWRlIFRlc3QgbW9kZSAxIHRvIFRlc3QgbW9kZSA3CiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2Vzcywgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUgKGUuZy4gcmVnaXN0ZXIKJiM0MzsgKglyZWFkL3dyaXRlIGVycm9yKS4KJiM0MzsgKi8KJiM0MztpbnQgZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgdGVzdF9tb2RlKQomIzQzO3sKJiM0MzsJcmV0dXJuIHBoeV9tb2RpZnlfbW1kKHBoeWRldiwgTURJT19NTURfUE1BUE1ELCBNRElPX1BNQV8xMEdCVF9URVNUTU9ERSwKJiM0MzsJCQlNRElPX1BNQV9URU1QTEFURV9URVNUTU9ERSwgdGVzdF9tb2RlKTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwoZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZSk7CiYjNDM7CiAvKioKICAqIGdlbnBoeV9jNDVfcGxjYV9nZXRfY2ZnIC0gZ2V0IFBMQ0EgY29uZmlndXJhdGlvbiBmcm9tIHN0YW5kYXJkIHJlZ2lzdGVycwogICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BoeS5oIGIvaW5jbHVkZS9saW51eC9waHkuaAppbmRleCAxMTA5MmMzMTc1YjNkLi41ZGJjNjkyZjQ0MmQwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BoeS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGh5LmgKQEAgLTIzMzgsNiAmIzQzOzIzMzgsNyBAQCBpbnQgZ2VucGh5X2M0NV9sb29wYmFjayhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBib29sIGVuYWJsZSwgaW50IHNwZWVkKTsKIGludCBnZW5waHlfYzQ1X3BtYV9yZXN1bWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7CiBpbnQgZ2VucGh5X2M0NV9wbWFfc3VzcGVuZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTsKIGludCBnZW5waHlfYzQ1X2Zhc3RfcmV0cmFpbihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBib29sIGVuYWJsZSk7CiYjNDM7aW50IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IHRlc3RfbW9kZSk7CiBpbnQgZ2VucGh5X2M0NV9wbGNhX2dldF9jZmcoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwKIAkJCSAgICBzdHJ1Y3QgcGh5X3BsY2FfY2ZnICpwbGNhX2NmZyk7CiBpbnQgZ2VucGh5X2M0NV9wbGNhX3NldF9jZmcoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9tZGlvLmggYi9pbmNsdWRlL3VhcGkvbGludXgvbWRpby5oCmluZGV4IGIyNTQxYzk0OGZjMWUuLmJjZjE4M2UwMDhmNTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9tZGlvLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS91YXBpL2xpbnV4L21kaW8uaApAQCAtNjMsNiAmIzQzOzYzLDcgQEAKIC8qIE1lZGlhLWRlcGVuZGVudCByZWdpc3RlcnMuICovCiAjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1NXQVBQT0wJMTMwCS8qIDEwR0JBU0UtVCBwYWlyIHN3YXAgJmFtcDsgcG9sYXJpdHkgKi8KICNkZWZpbmUgTURJT19QTUFfMTBHQlRfVFhQV1IJMTMxCS8qIDEwR0JBU0UtVCBUWCBwb3dlciBjb250cm9sICovCiYjNDM7I2RlZmluZSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERSAxMzIJLyogVGVzdCBtb2RlIGNvbnRyb2wgKi8KICNkZWZpbmUgTURJT19QTUFfMTBHQlRfU05SCTEzMwkvKiAxMEdCQVNFLVQgU05SIG1hcmdpbiwgbGFuZSBBLgogCQkJCQkgKiBMYW5lcyBCLUQgYXJlIG51bWJlcmVkIDEzNC0xMzYuICovCiAjZGVmaW5lIE1ESU9fUE1BXzEwR0JSX0ZTUlRfQ1NSCTE0NwkvKiAxMEdCQVNFLVIgZmFzdCByZXRyYWluIHN0YXR1cyBhbmQgY29udHJvbCAqLwpAQCAtMTM5LDcgJiM0MzsxNDAsOCBAQAogI2RlZmluZSBNRElPX1BNQV9DVFJMMV9TUEVFRDJfNUcJKE1ESU9fQ1RSTDFfU1BFRURTRUxFWFQgfCAweDE4KQogLyogNSBHYi9zICovCiAjZGVmaW5lIE1ESU9fUE1BX0NUUkwxX1NQRUVENUcJCShNRElPX0NUUkwxX1NQRUVEU0VMRVhUIHwgMHgxYykKLQomIzQzOy8qIHRlbXBsYXRlIHRlc3QgbW9kZSAqLwomIzQzOyNkZWZpbmUgTURJT19QTUFfVEVNUExBVEVfVEVTVE1PREUgICAgICAweEUwMDAKIAogLyogU3RhdHVzIHJlZ2lzdGVyIDEuICovCiAjZGVmaW5lIE1ESU9fU1RBVDFfTFBPV0VSQUJMRQkJMHgwMDAyCS8qIExvdy1wb3dlciBhYmlsaXR5ICovCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA4OjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMzM2CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMzEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlYWNoaW5nIHRoZSBOZXcgUEhZIERyaXZlciBpbiBRRU1VIHdpdGggU3l6a2FsbGVyKioKCk9rYXksIHNvIHdlJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBhZGRpbmcgTW90b3Jjb21tIFlUODgyNCBQSFkgZHJpdmVyIHN1cHBvcnQuIEl0IGFsc28gaW5jbHVkZXMgdGhpcyBoZWxwZXIgZnVuY3Rpb24sIGBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlYCwgaW4gYHBoeS1jNDUuY2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O0NhbiB3ZSBhY3R1YWxseSAqcmVhY2gqIHRoaXMgdGhpbmcgaW4gYSBRRU1VIGVudmlyb25tZW50PyYjMzQ7IFBIWSBkcml2ZXJzLCBjbGFzc2ljYWxseSwgYXJlIGJyb3VnaHQgdXAgdGhyb3VnaCB0aGUgTURJTyBidXMuIFNvIHRoZSBuZXh0IGxvZ2ljYWwgcXVlc3Rpb24gaXM6IGNhbiB3ZSBnZXQgdGhpcyBQSFkgZW11bGF0ZWQgd2l0aGluIFFFTVU/IFRoZSB1c3VhbCBkYW5jZSBpcyByZWFkaW5nIHRoZSBQSFkgSUQgZnJvbSB0aG9zZSBNRElPIHJlZ2lzdGVycyBkdXJpbmcgdGhlIHByb2JlIHByb2Nlc3MuCgpUaGUgcmVhbCBjaGFsbGVuZ2UgaXM6IGNhbiBzeXprYWxsZXIgaGVscCB1cyBnZXQgdGhlcmU/IERvZXMgaXQgaGF2ZSBhbnkgY2FwYWJpbGl0eSB0byBlbXVsYXRlIE1ESU8gZGV2aWNlcz8gT3IgaXMgdGhlcmUgc29tZSBvdGhlciB0cmljayB0byB0cmlnZ2VyIFBIWSBwcm9iaW5nIHdpdGhvdXQgcmVseWluZyBvbiBhIHJlYWwgTURJTyBidXM/IEhhbmcgb24sIGRpZG4mIzM5O3QgSSB2YWd1ZWx5IHJlY2FsbCBzb21ldGhpbmcgYWJvdXQgc3l6a2FsbGVyIGhhdmluZyAqc29tZSogTURJTyBpbmplY3Rpb24gcG9zc2liaWxpdGllcz8gSSBzaG91bGQgcmVhbGx5IGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgc3l6a2FsbGVyIGRlc2NyaXB0aW9ucyBzcGVjaWZpY2FsbHkgZm9yIE1ESU8gb3IgUEhZLgoKSG1tbSwgcmlnaHQsIHN5emthbGxlciBtb3N0bHkgcmVsaWVzIG9uIGB0dW5gL2B0YXBgIG9yIGB2ZXRoYCBpbnRlcmZhY2VzLCBzbyBwdXJlIE1ESU8gaXMgcHJvYmFibHkgb3V0LiBXYWl0LCBkaWRuJiMzOTt0IHdlIGhhdmUgdGhpbmdzIGxpa2UgYHZoY2lgIGZvciBVU0IgYW5kIGBtYWM4MDIxMV9od3NpbWAgZm9yIHdpZmkgdGhhdCBjb3VsZCBiZSB1c2VkIHdpdGggc3l6a2FsbGVyPyAgSXMgdGhlcmUgYW55dGhpbmcgbGlrZSBhbiBNRElPIGVtdWxhdG9yICp3aXRoaW4gdGhlIGtlcm5lbCBpdHNlbGYqIHRoYXQgc3l6a2FsbGVyIGNvdWxkIGxldmVyYWdlPyBNYXliZSBhIGBkcml2ZXJzL25ldC9waHkvbWRpby1tb2NrdXAuY2AgdHlwZSB0aGluZz8gIE5lZWQgdG8gZG8gc29tZSBrZXJuZWwgc3BlbHVua2luZy4KCkFscmlnaHQsIHRpbWUgdG8gZ2V0IHNlcmlvdXMuIExldCYjMzk7cyBkaWcgaW50byB0aGUgcG9zc2liaWxpdHkgb2YgZnV6emluZyBNRElPIGl0c2VsZi4gSSBuZWVkIHRvIHJ1biBzb21lIHNwZWNpZmljIHNlYXJjaGVzIGZvciBgbWRpb2Agb3IgYHBoeWAgZnV6emluZy4gU2VlIHdoYXQgY29tZXMgdXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDg6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZGlvLiptb2NrdXAmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA4OjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMDc4CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCBzdGFuZHM6CgoqKkxvb2tpbmcgZm9yIFBsYWNlaG9sZGVyIFBIWSBEcml2ZXJzKioKCk9rYXksIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSB0aGUgcG90ZW50aWFsIGZvciBtb2NrIG9yIGR1bW15IGRyaXZlcnMgd2l0aGluIHRoZSBuZXR3b3JrIFBIWSAoUGh5c2ljYWwgTGF5ZXIpIGRyaXZlciBzcGFjZS4gVGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgdGhhdCBpbnZlc3RpZ2F0aW9uIGlzIGBkcml2ZXJzL25ldC9waHkvYC4gVGhhdCBkaXJlY3RvcnkgaXMgd2hlcmUgSSYjMzk7ZCBleHBlY3QgdG8gZmluZCB0aGVzZSBzb3J0cyBvZiBwbGFjZWhvbGRlciBpbXBsZW1lbnRhdGlvbnMsIGlmIHRoZXkgZXhpc3Qgd2l0aGluIHRoZSBrZXJuZWwmIzM5O3Mgc291cmNlIHRyZWUuIEkmIzM5O2xsIG5lZWQgdG8gcG9rZSBhcm91bmQgdGhlcmUgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgdGVzdGluZyBzdHJhdGVneSB3aXRoaW4gdGhlIFBIWSBjb21wb25lbnQuIEhvcGVmdWxseSB0aGVyZSYjMzk7cyBzb21ldGhpbmcgcmVhZGlseSBhcHBhcmVudCBpbiB0aGUgZm9sZGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA4OjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Y29kZXNlYXJjaC1kaXItaW5kZXg8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0RpciYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZXMmIzM0OzogWwogICAgJiMzNDthZGluLmMmIzM0OywKICAgICYjMzQ7YWRpbjExMDAuYyYjMzQ7LAogICAgJiMzNDthZGluMTE0MC1waHkuYyYjMzQ7LAogICAgJiMzNDthaXJfYW44ODAxLmMmIzM0OywKICAgICYjMzQ7YWlyX2VuODgxMWguYyYjMzQ7LAogICAgJiMzNDthaXJfcGh5X2xpYi5jJiMzNDssCiAgICAmIzM0O2Fpcl9waHlfbGliLmgmIzM0OywKICAgICYjMzQ7YW1kLmMmIzM0OywKICAgICYjMzQ7YXMyMXh4eC5jJiMzNDssCiAgICAmIzM0O2F4ODg3OTZiLmMmIzM0OywKICAgICYjMzQ7YXg4ODc5NmJfcnVzdC5ycyYjMzQ7LAogICAgJiMzNDtiY20tY3lnbnVzLmMmIzM0OywKICAgICYjMzQ7YmNtLXBoeS1saWIuYyYjMzQ7LAogICAgJiMzNDtiY20tcGh5LWxpYi5oJiMzNDssCiAgICAmIzM0O2JjbS1waHktcHRwLmMmIzM0OywKICAgICYjMzQ7YmNtNTQxNDAuYyYjMzQ7LAogICAgJiMzNDtiY202M3h4LmMmIzM0OywKICAgICYjMzQ7YmNtN3h4eC5jJiMzNDssCiAgICAmIzM0O2JjbTg0ODgxLmMmIzM0OywKICAgICYjMzQ7YmNtODd4eC5jJiMzNDssCiAgICAmIzM0O2Jyb2FkY29tLmMmIzM0OywKICAgICYjMzQ7Y2ljYWRhLmMmIzM0OywKICAgICYjMzQ7Y29ydGluYS5jJiMzNDssCiAgICAmIzM0O2Rhdmljb20uYyYjMzQ7LAogICAgJiMzNDtkcDgzNjQwLmMmIzM0OywKICAgICYjMzQ7ZHA4MzY0MF9yZWcuaCYjMzQ7LAogICAgJiMzNDtkcDgzODIyLmMmIzM0OywKICAgICYjMzQ7ZHA4Mzg0OC5jJiMzNDssCiAgICAmIzM0O2RwODM4NjcuYyYjMzQ7LAogICAgJiMzNDtkcDgzODY5LmMmIzM0OywKICAgICYjMzQ7ZHA4M3RjODExLmMmIzM0OywKICAgICYjMzQ7ZHA4M3RkNTEwLmMmIzM0OywKICAgICYjMzQ7ZHA4M3RnNzIwLmMmIzM0OywKICAgICYjMzQ7ZXQxMDExYy5jJiMzNDssCiAgICAmIzM0O2ZpeGVkX3BoeS5jJiMzNDssCiAgICAmIzM0O2ljcGx1cy5jJiMzNDssCiAgICAmIzM0O2ludGVsLXh3YXkuYyYjMzQ7LAogICAgJiMzNDtsaW5rbW9kZS5jJiMzNDssCiAgICAmIzM0O2x4dC5jJiMzNDssCiAgICAmIzM0O21hcnZlbGwtODhxMnh4eC5jJiMzNDssCiAgICAmIzM0O21hcnZlbGwtODh4MjIyMi5jJiMzNDssCiAgICAmIzM0O21hcnZlbGwuYyYjMzQ7LAogICAgJiMzNDttYXJ2ZWxsMTBnLmMmIzM0OywKICAgICYjMzQ7bWRpby1vcGVuLWFsbGlhbmNlLmgmIzM0OywKICAgICYjMzQ7bWRpb19idXMuYyYjMzQ7LAogICAgJiMzNDttZGlvX2J1c19wcm92aWRlci5jJiMzNDssCiAgICAmIzM0O21kaW9fZGV2aWNlLmMmIzM0OywKICAgICYjMzQ7bWRpb19kZXZyZXMuYyYjMzQ7LAogICAgJiMzNDttZXNvbi1neGwuYyYjMzQ7LAogICAgJiMzNDttaWNyZWwuYyYjMzQ7LAogICAgJiMzNDttaWNyb2NoaXAuYyYjMzQ7LAogICAgJiMzNDttaWNyb2NoaXBfcmRzX3B0cC5jJiMzNDssCiAgICAmIzM0O21pY3JvY2hpcF9yZHNfcHRwLmgmIzM0OywKICAgICYjMzQ7bWljcm9jaGlwX3QxLmMmIzM0OywKICAgICYjMzQ7bWljcm9jaGlwX3Qxcy5jJiMzNDssCiAgICAmIzM0O21paV90aW1lc3RhbXBlci5jJiMzNDssCiAgICAmIzM0O21vdG9yY29tbS5jJiMzNDssCiAgICAmIzM0O214bC04NjExMC5jJiMzNDssCiAgICAmIzM0O214bC1ncHkuYyYjMzQ7LAogICAgJiMzNDtuYXRpb25hbC5jJiMzNDssCiAgICAmIzM0O25jbjI2MDAwLmMmIzM0OywKICAgICYjMzQ7bnhwLWM0NS10amExMXh4LW1hY3NlYy5jJiMzNDssCiAgICAmIzM0O254cC1jNDUtdGphMTF4eC5jJiMzNDssCiAgICAmIzM0O254cC1jNDUtdGphMTF4eC5oJiMzNDssCiAgICAmIzM0O254cC1jYnR4LmMmIzM0OywKICAgICYjMzQ7bnhwLXRqYTExeHguYyYjMzQ7LAogICAgJiMzNDtvcGVuX2FsbGlhbmNlX2hlbHBlcnMuYyYjMzQ7LAogICAgJiMzNDtvcGVuX2FsbGlhbmNlX2hlbHBlcnMuaCYjMzQ7LAogICAgJiMzNDtwaHktYzQ1LmMmIzM0OywKICAgICYjMzQ7cGh5LWNhcHMuaCYjMzQ7LAogICAgJiMzNDtwaHktY29yZS5jJiMzNDssCiAgICAmIzM0O3BoeS5jJiMzNDssCiAgICAmIzM0O3BoeV9jYXBzLmMmIzM0OywKICAgICYjMzQ7cGh5X2RldmljZS5jJiMzNDssCiAgICAmIzM0O3BoeV9sZWRfdHJpZ2dlcnMuYyYjMzQ7LAogICAgJiMzNDtwaHlfbGlua190b3BvbG9neS5jJiMzNDssCiAgICAmIzM0O3BoeV9wYWNrYWdlLmMmIzM0OywKICAgICYjMzQ7cGh5X3BvcnQuYyYjMzQ7LAogICAgJiMzNDtwaHlsaWItaW50ZXJuYWwuaCYjMzQ7LAogICAgJiMzNDtwaHlsaWIuaCYjMzQ7LAogICAgJiMzNDtwaHlsaW5rLmMmIzM0OywKICAgICYjMzQ7cXNlbWkuYyYjMzQ7LAogICAgJiMzNDtxdDIwMjUucnMmIzM0OywKICAgICYjMzQ7cm9ja2NoaXAuYyYjMzQ7LAogICAgJiMzNDtzZnAtYnVzLmMmIzM0OywKICAgICYjMzQ7c2ZwLmMmIzM0OywKICAgICYjMzQ7c2ZwLmgmIzM0OywKICAgICYjMzQ7c21zYy5jJiMzNDssCiAgICAmIzM0O3N0ZTEwWHAuYyYjMzQ7LAogICAgJiMzNDtzdHVicy5jJiMzNDssCiAgICAmIzM0O3N3cGh5LmMmIzM0OywKICAgICYjMzQ7c3dwaHkuaCYjMzQ7LAogICAgJiMzNDt0ZXJhbmV0aWNzLmMmIzM0OywKICAgICYjMzQ7dVBENjA2MjAuYyYjMzQ7LAogICAgJiMzNDt2aXRlc3NlLmMmIzM0OywKICAgICYjMzQ7eGlsaW54X2dtaWkycmdtaWkuYyYjMzQ7CiAgXSwKICAmIzM0O1N1YmRpcnMmIzM0OzogWwogICAgJiMzNDthcXVhbnRpYSYjMzQ7LAogICAgJiMzNDttZWRpYXRlayYjMzQ7LAogICAgJiMzNDttc2NjJiMzNDssCiAgICAmIzM0O3Fjb20mIzM0OywKICAgICYjMzQ7cmVhbHRlayYjMzQ7CiAgXQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDg6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQyMzAKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiA2MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNRElPIERldmljZSBFbXVsYXRpb24gRXhwbG9yYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSB0cnlpbmcgdG8gZmlndXJlIG91dCBob3cgdG8gZW11bGF0ZSBNRElPIGRldmljZXMuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBjYW4gdGhpcyBldmVuIGJlIGRvbmU/IFRoZW4gSSByZW1lbWJlciB0aGF0IEkgc2F3IGBmaXhlZF9waHkuY2Agc29tZXdoZXJlLCBhbmQgdGhhdCYjMzk7cyBsaWtlbHkgZm9yIGZpeGVkIFBIWXMsIHdoaWNoIGlzbiYjMzk7dCBxdWl0ZSB3aGF0IEkmIzM5O20gYWZ0ZXIuIEJ1dCB0aGF0IGdldHMgbWUgdGhpbmtpbmcgYWJvdXQgc3l6a2FsbGVyLiBDb3VsZCBpdCBwb3RlbnRpYWxseSBnZW5lcmF0ZSBhIGR1bW15IE1ESU8gYnVzIGFuZCB0aGVuIGF0dGFjaCBhIFBIWSB0byBpdD8gVGhhdCB3b3VsZCBiZSBpZGVhbCBmb3IgdGVzdGluZy4gVGltZSB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBzeXpsYW5nIGRlZmluaXRpb25zIGZvciBNRElPIG91dCB0aGVyZS4gVGhhdCB3b3VsZCBnaXZlIG1lIGEgc3RhcnRpbmcgcG9pbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDg6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWRpbyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2RzYS9kc2EuYz02MjI9c3RhdGljIGludCBkc2Ffc3dpdGNoX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbi0tXG5uZXQvZHNhL2RzYS5jLTY1NC1cdGlmICghZHMtXHUwMDNldXNlcl9taWlfYnVzIFx1MDAyNlx1MDAyNiBkcy1cdTAwM2VvcHMtXHUwMDNlcGh5X3JlYWQpIHtcbm5ldC9kc2EvZHNhLmM6NjU1Olx0XHRkcy1cdTAwM2V1c2VyX21paV9idXMgPSBtZGlvYnVzX2FsbG9jKCk7XG5uZXQvZHNhL2RzYS5jLTY1Ni1cdFx0aWYgKCFkcy1cdTAwM2V1c2VyX21paV9idXMpIHtcbi0tXG5uZXQvZHNhL2RzYS5jLTY2Mi1cbm5ldC9kc2EvZHNhLmM6NjYzOlx0XHRlcnIgPSBtZGlvYnVzX3JlZ2lzdGVyKGRzLVx1MDAzZXVzZXJfbWlpX2J1cyk7XG5uZXQvZHNhL2RzYS5jLTY2NC1cdFx0aWYgKGVyciBcdTAwM2MgMClcbi0tXG5uZXQvZHNhL2RzYS5jLTY3NC1cdGlmIChkcy1cdTAwM2V1c2VyX21paV9idXMgXHUwMDI2XHUwMDI2IGRzLVx1MDAzZW9wcy1cdTAwM2VwaHlfcmVhZClcbm5ldC9kc2EvZHNhLmM6Njc1Olx0XHRtZGlvYnVzX2ZyZWUoZHMtXHUwMDNldXNlcl9taWlfYnVzKTtcbm5ldC9kc2EvZHNhLmMtNjc2LXRlYXJkb3duOlxuLS1cbm5ldC9kc2EvZHNhLmM9Njg2PXN0YXRpYyB2b2lkIGRzYV9zd2l0Y2hfdGVhcmRvd24oc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuLS1cbm5ldC9kc2EvZHNhLmMtNjkzLVx0aWYgKGRzLVx1MDAzZXVzZXJfbWlpX2J1cyBcdTAwMjZcdTAwMjYgZHMtXHUwMDNlb3BzLVx1MDAzZXBoeV9yZWFkKSB7XG5uZXQvZHNhL2RzYS5jOjY5NDpcdFx0bWRpb2J1c191bnJlZ2lzdGVyKGRzLVx1MDAzZXVzZXJfbWlpX2J1cyk7XG5uZXQvZHNhL2RzYS5jOjY5NTpcdFx0bWRpb2J1c19mcmVlKGRzLVx1MDAzZXVzZXJfbWlpX2J1cyk7XG5uZXQvZHNhL2RzYS5jLTY5Ni1cdFx0ZHMtXHUwMDNldXNlcl9taWlfYnVzID0gTlVMTDtcbi0tXG5uZXQvZHNhL3BvcnQuYy0xMS0jaW5jbHVkZSBcdTAwM2NsaW51eC9ub3RpZmllci5oXHUwMDNlXG5uZXQvZHNhL3BvcnQuYzoxMjojaW5jbHVkZSBcdTAwM2NsaW51eC9vZl9tZGlvLmhcdTAwM2Vcbm5ldC9kc2EvcG9ydC5jLTEzLSNpbmNsdWRlIFx1MDAzY2xpbnV4L29mX25ldC5oXHUwMDNlXG4tLVxubmV0L2RzYS9wb3J0LmM9MTcyNj1zdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGRzYV9zd2l0Y2hlc19hcHBseV93b3JrYXJvdW5kc1tdID0ge1xuLS1cbm5ldC9kc2EvcG9ydC5jLTE3OTYtI2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9EU0FfU01TQ19MQU45MzAzX01ESU8pXG5uZXQvZHNhL3BvcnQuYzoxNzk3Olx0XCYjMzQ7c21zYyxsYW45MzAzLW1kaW9cJiMzNDssXG5uZXQvZHNhL3BvcnQuYy0xNzk4LSNlbmRpZlxuLS1cbm5ldC9kc2EvdXNlci5jLTEzLSNpbmNsdWRlIFx1MDAzY2xpbnV4L29mX25ldC5oXHUwMDNlXG5uZXQvZHNhL3VzZXIuYzoxNDojaW5jbHVkZSBcdTAwM2NsaW51eC9vZl9tZGlvLmhcdTAwM2Vcbm5ldC9kc2EvdXNlci5jOjE1OiNpbmNsdWRlIFx1MDAzY2xpbnV4L21kaW8uaFx1MDAzZVxubmV0L2RzYS91c2VyLmMtMTYtI2luY2x1ZGUgXHUwMDNjbmV0L25ldGRldl9sb2NrLmhcdTAwM2Vcbi0tXG5uZXQvZHNhL3VzZXIuYz0yNjM4PXN0YXRpYyBpbnQgZHNhX3VzZXJfcGh5X2Nvbm5lY3Qoc3RydWN0IG5ldF9kZXZpY2UgKnVzZXJfZGV2LCBpbnQgYWRkcixcbi0tXG5uZXQvZHNhL3VzZXIuYy0yNjQzLVxubmV0L2RzYS91c2VyLmM6MjY0NDpcdHVzZXJfZGV2LVx1MDAzZXBoeWRldiA9IG1kaW9idXNfZ2V0X3BoeShkcy1cdTAwM2V1c2VyX21paV9idXMsIGFkZHIpO1xubmV0L2RzYS91c2VyLmMtMjY0NS1cdGlmICghdXNlcl9kZXYtXHUwMDNlcGh5ZGV2KSB7XG4tLVxubmV0L2V0aHRvb2wvY29tbW9uLmM9NTg3PWNvbnZlcnRfbGVnYWN5X3NldHRpbmdzX3RvX2xpbmtfa3NldHRpbmdzKFxuLS1cbm5ldC9ldGh0b29sL2NvbW1vbi5jLTYyMS1cdFx0PSBsZWdhY3lfc2V0dGluZ3MtXHUwMDNlYXV0b25lZztcbm5ldC9ldGh0b29sL2NvbW1vbi5jOjYyMjpcdGxpbmtfa3NldHRpbmdzLVx1MDAzZWJhc2UubWRpb19zdXBwb3J0XG5uZXQvZXRodG9vbC9jb21tb24uYzo2MjM6XHRcdD0gbGVnYWN5X3NldHRpbmdzLVx1MDAzZW1kaW9fc3VwcG9ydDtcbm5ldC9ldGh0b29sL2NvbW1vbi5jLTYyNC1cdGxpbmtfa3NldHRpbmdzLVx1MDAzZWJhc2UuZXRoX3RwX21kaXhcbi0tXG5uZXQvZXRodG9vbC9pb2N0bC5jPTM4Mj1jb252ZXJ0X2xpbmtfa3NldHRpbmdzX3RvX2xlZ2FjeV9zZXR0aW5ncyhcbi0tXG5uZXQvZXRodG9vbC9pb2N0bC5jLTQxMi1cdFx0PSBsaW5rX2tzZXR0aW5ncy1cdTAwM2ViYXNlLmF1dG9uZWc7XG5uZXQvZXRodG9vbC9pb2N0bC5jOjQxMzpcdGxlZ2FjeV9zZXR0aW5ncy1cdTAwM2VtZGlvX3N1cHBvcnRcbm5ldC9ldGh0b29sL2lvY3RsLmM6NDE0Olx0XHQ9IGxpbmtfa3NldHRpbmdzLVx1MDAzZWJhc2UubWRpb19zdXBwb3J0O1xubmV0L2V0aHRvb2wvaW9jdGwuYy00MTUtXHRsZWdhY3lfc2V0dGluZ3MtXHUwMDNlZXRoX3RwX21kaXhcbi0tXG5uZXQvZXRodG9vbC9waHkuYz03MD1zdGF0aWMgaW50IHBoeV9wcmVwYXJlX2RhdGEoY29uc3Qgc3RydWN0IGV0aG5sX3JlcV9pbmZvICpyZXFfaW5mbyxcbi0tXG5uZXQvZXRodG9vbC9waHkuYy05MS1cbm5ldC9ldGh0b29sL3BoeS5jOjkyOlx0cmVwX2RhdGEtXHUwMDNlbmFtZSA9IGtzdHJkdXAoZGV2X25hbWUoXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2KSwgR0ZQX0tFUk5FTCk7XG5uZXQvZXRodG9vbC9waHkuYy05My1cdGlmICghcmVwX2RhdGEtXHUwMDNlbmFtZSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwODozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTcwMwoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDg3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IFN5emthbGxlciBJbnZlc3RpZ2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gaGl0dGluZyBhIHJvYWRibG9jay4gSXQganVzdCBoaXQgbWUgdGhhdCBzeXprYWxsZXIgZG9lc24mIzM5O3Qgb2ZmZXIgYSBkaXJlY3QgbWV0aG9kIHRvIGVtdWxhdGUgdGhlc2UgUEhZcyBhcmJpdHJhcmlseS4gRGFtbi4gVGhhdCB0aHJvd3MgYSB3cmVuY2ggaW4gdGhlIHdvcmtzLiBNeSBnb2FsIGlzIHRvIGdldCB0byBgeXQ4ODI0X3Byb2JlYCwgYnV0IEkmIzM5O20gcmVhbGl6aW5nIHRoZSBjb25zdHJhaW50cy4gSSBrbm93IGl0IG5lZWRzIGFuIE1ESU8gYnVzIGFuZCBhIHNwZWNpZmljIFBIWSBJRC4gVGhlIGltbWVkaWF0ZSBpc3N1ZSwgb2YgY291cnNlLCBpcyB0aGF0IHVubGVzcyBzeXprYWxsZXIgY2FuIGNvbmZpZ3VyZSBhIHZpcnR1YWwgTURJTyBidXMgdG8gcmVwb3J0IHRoYXQgcGFydGljdWxhciBQSFkgSUQsIGl0JiMzOTtzIGEgZGVhZCBlbmQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoZXJlIGlzIGV2ZW4gYSB2aXJ0dWFsIE1ESU8gYnVzIEkgY2FuIHVzZSB3aXRoaW4gdGhlIHRvb2wgdG8gd29yayB3aXRoLiBUaW1lIHRvIGNoZWNrIGlmIGFueSBvZiB0aGUgdW5kZXJseWluZyBpbmZyYXN0cnVjdHVyZSBwcm92aWRlcyBhIHNvbHV0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwODozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21kaW8uKm1vY2t1cCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA4OjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1OTkyCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKk5hdmlnYXRpbmcgdGhlIE5ldHdvcmsgRHJpdmVyIExhbmRzY2FwZSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmluZCBzb21ldGhpbmcgc3BlY2lmaWMsIGxpa2VseSByZWxhdGVkIHRvIG1lZGlhLWluZGVwZW5kZW50IGludGVyZmFjZSAoTURJTykgaW50ZXJhY3Rpb24gd2l0aGluIHRoZSBuZXR3b3JrIHN0YWNrLiBNeSBmaXJzdCBpbnN0aW5jdCwgZ2l2ZW4gbXkgZXhwZXJpZW5jZSwgaXMgdG8gaGVhZCBkaXJlY3RseSBpbnRvIHRoZSBrZXJuZWwgc291cmNlIHRyZWUuIEkga25vdyB0aGF0IG5ldHdvcmsgZHJpdmVyIGNvZGUgaXMgdHlwaWNhbGx5IHdlbGwtb3JnYW5pemVkIHdpdGhpbiB0aGUgYGRyaXZlcnMvbmV0L2AgZGlyZWN0b3J5LiBHaXZlbiB0aGUgc3BlY2lmaWMgbWVudGlvbiBvZiBNRElPLCBJJiMzOTttIGdvaW5nIHRvIGRyaWxsIGRvd24gaW50byB0aGUgYG1kaW9gIHN1YmRpcmVjdG9yeSB3aXRoaW4gdGhhdC4gVGhhdCBzZWVtcyBsaWtlIHRoZSBtb3N0IGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgZm9yIGludmVzdGlnYXRpbmcgdGhlIHJlbGV2YW50IGNvZGUuIFRpbWUgdG8gbmF2aWdhdGUgdGhlcmUgYW5kIHNlZSB3aGF0IEkgY2FuIGZpbmQuIExldCYjMzk7cyBzdGFydCB3aXRoIGBkcml2ZXJzL25ldC9tZGlvL2AgYW5kIGdvIGZyb20gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA4OjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Y29kZXNlYXJjaC1kaXItaW5kZXg8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0RpciYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L21kaW8vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGVzJiMzNDs6IFsKICAgICYjMzQ7YWNwaV9tZGlvLmMmIzM0OywKICAgICYjMzQ7Zndub2RlX21kaW8uYyYjMzQ7LAogICAgJiMzNDttZGlvLWFpcm9oYS5jJiMzNDssCiAgICAmIzM0O21kaW8tYXNwZWVkLmMmIzM0OywKICAgICYjMzQ7bWRpby1iY20taXByb2MuYyYjMzQ7LAogICAgJiMzNDttZGlvLWJjbS11bmltYWMuYyYjMzQ7LAogICAgJiMzNDttZGlvLWJpdGJhbmcuYyYjMzQ7LAogICAgJiMzNDttZGlvLWNhdml1bS5jJiMzNDssCiAgICAmIzM0O21kaW8tY2F2aXVtLmgmIzM0OywKICAgICYjMzQ7bWRpby1ncGlvLmMmIzM0OywKICAgICYjMzQ7bWRpby1oaXNpLWZlbWFjLmMmIzM0OywKICAgICYjMzQ7bWRpby1pMmMuYyYjMzQ7LAogICAgJiMzNDttZGlvLWlwcTQwMTkuYyYjMzQ7LAogICAgJiMzNDttZGlvLWlwcTgwNjQuYyYjMzQ7LAogICAgJiMzNDttZGlvLW1veGFydC5jJiMzNDssCiAgICAmIzM0O21kaW8tbXNjYy1taWltLmMmIzM0OywKICAgICYjMzQ7bWRpby1tdXgtYmNtLWlwcm9jLmMmIzM0OywKICAgICYjMzQ7bWRpby1tdXgtYmNtNjM2OC5jJiMzNDssCiAgICAmIzM0O21kaW8tbXV4LWdwaW8uYyYjMzQ7LAogICAgJiMzNDttZGlvLW11eC1tZXNvbi1nMTJhLmMmIzM0OywKICAgICYjMzQ7bWRpby1tdXgtbWVzb24tZ3hsLmMmIzM0OywKICAgICYjMzQ7bWRpby1tdXgtbW1pb3JlZy5jJiMzNDssCiAgICAmIzM0O21kaW8tbXV4LW11bHRpcGxleGVyLmMmIzM0OywKICAgICYjMzQ7bWRpby1tdXguYyYjMzQ7LAogICAgJiMzNDttZGlvLW12dXNiLmMmIzM0OywKICAgICYjMzQ7bWRpby1vY3Rlb24uYyYjMzQ7LAogICAgJiMzNDttZGlvLXBpYzY0aHBzYy5jJiMzNDssCiAgICAmIzM0O21kaW8tcmVhbHRlay1ydGw5MzAwLmMmIzM0OywKICAgICYjMzQ7bWRpby1yZWdtYXAuYyYjMzQ7LAogICAgJiMzNDttZGlvLXN1bjRpLmMmIzM0OywKICAgICYjMzQ7bWRpby10aHVuZGVyLmMmIzM0OywKICAgICYjMzQ7bWRpby14Z2VuZS5jJiMzNDssCiAgICAmIzM0O29mX21kaW8uYyYjMzQ7CiAgXSwKICAmIzM0O1N1YmRpcnMmIzM0OzogbnVsbAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA4OjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2NTg5CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkVtdWxhdGluZyBNYXJ2ZWxsIFVTQiBNRElPIHdpdGggU3l6a2FsbGVyKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBNRElPIGRyaXZlcnM6IGBtZGlvLW12dXNiLmNgLCBgbWRpby1ncGlvLmNgLCBhbmQgYG1kaW8taTJjLmNgLiBUaGUgcXVlc3Rpb24gaXMsIGNhbiBTeXprYWxsZXIgaGVscCBtZSBlbXVsYXRlIHRoaXM/IEkga25vdyBTeXprYWxsZXIgdXNlcyBgdmhjaWAgZm9yIFVTQiBlbXVsYXRpb24sIHdoaWNoIGlzIHByb21pc2luZy4gQnV0IGBtZGlvLW12dXNiLmNgIHNwZWNpZmljYWxseSB0YXJnZXRzIE1hcnZlbGwgVVNCIE1ESU8uIERvZXMgU3l6a2FsbGVyIGFjY291bnQgZm9yIHRoYXQ/CgpMZXQmIzM5O3Mgc2VlLi4uIFllcywgU3l6a2FsbGVyIGRvZXMgaGF2ZSBVU0IgZnV6emluZyBjYXBhYmlsaXRpZXMuIElmIEkgY2FuIGdldCBpdCB0byBlbXVsYXRlIGEgVVNCIGRldmljZSwgaXQgKmNvdWxkKiByZWdpc3RlciBhbiBNRElPIGJ1cy4gVGhlIHJlYWwgY2hhbGxlbmdlIGlzLCBob3cgZG8gSSBnZXQgaXQgdG8gcmV0dXJuIHRoZSBwcmVjaXNlIFBIWSBJRCwgYDB4NGY1MWU4YjhgPyBUaGF0JiMzOTtzIHRoZSBrZXkuIFRoZSBVU0IgZGV2aWNlLCBlbXVsYXRlZCBieSBTeXprYWxsZXIsIG5lZWRzIHRvIHJlc3BvbmQgd2l0aCB0aGlzIElEIHdoZW4gdGhlIE1ESU8gYnVzIHBlcmZvcm1zIHJlYWQgb3BlcmF0aW9ucy4KCkFoYSEgU2luY2UgU3l6a2FsbGVyIGNvbnRyb2xzIHRoZSByZXNwb25zZXMgZnJvbSB0aGUgVVNCIGRldmljZSwgaXQgKmNhbiogYmUgY29uZmlndXJlZCB0byByZXR1cm4gYDB4NGY1MWU4YjhgIHdoZW4gdGhlIE1ESU8gYnVzIHJlYWRzIHRob3NlIGNydWNpYWwgUEhZIElEIHJlZ2lzdGVycywgc3BlY2lmaWNhbGx5IE1JSV9QSFlTSUQxIGFuZCBNSUlfUEhZU0lEMi4gVGhhdCYjMzk7cyB0aGUgY3JpdGljYWwgYml0ISBJZiBTeXprYWxsZXIgY2FuIGVtdWxhdGUgYSBNYXJ2ZWxsIFVTQiBNRElPIGRldmljZSwgdGhlIGtlcm5lbCAqd2lsbCogcmVnaXN0ZXIgYW4gTURJTyBidXMuIFRoZW4sIHRoZSBrZXJuZWwgd2lsbCBzY2FuIHRoYXQgYnVzIGZvciBQSFlzLCBhbmQgaXQgZG9lcyB0aGlzIGJ5IHJlYWRpbmcgcmVnaXN0ZXJzIDIgYW5kIDMgKE1JSV9QSFlTSUQxIGFuZCBNSUlfUEhZU0lEMikuIFN5emthbGxlciBjYW4gYmUgdGhlIHNvdXJjZSBvZiB0aGVzZSByZXNwb25zZXMsIHByb3ZpZGluZyB0aGUgZXhwZWN0ZWQgYDB4NGY1MWU4YjhgIHZhbHVlLiBBbmQgaWYgdGhhdCYjMzk7cyB0aGUgY2FzZSwgdGhlIGtlcm5lbCAqd2lsbCogbWF0Y2ggdGhlIFBIWSBJRCBhbmQgcHJvYmUgdGhlIGB5dDg4MjRgIGRyaXZlciEKCk9rYXksIHRpbWUgdG8gdmVyaWZ5LiBJIG5lZWQgdG8gY2hlY2sgaWYgYG1kaW8tbXZ1c2IuY2AgaXMgZW5hYmxlZCBpbiB0eXBpY2FsIFN5emthbGxlciBjb25maWd1cmF0aW9ucywgb3IgaWYgSSBjYW4gZW5hYmxlIGl0IGVhc2lseS4gSXMgdGhlcmUgYW5vdGhlciB3YXk/IFdoYXQgYWJvdXQgYHZoY2lgIGZvciBJMkM/IFN5emthbGxlciBoYXMgc29tZSBJMkMgZnV6emluZywgYnV0IHByb2JhYmx5IG5vdCB0aGUgc29sdXRpb24gSSYjMzk7bSBsb29raW5nIGZvciBoZXJlLiBXaGF0IGFib3V0IGBtYWM4MDIxMV9od3NpbWA/IE5vLCB0aGF0JiMzOTtzIG5vdCBpdC4gT3IgYG5ldGRldnNpbWA/IERvZXMgYG5ldGRldnNpbWAgaGF2ZSBhbiBNRElPIGJ1cz8gSSBuZWVkIHRvIGxvb2sgaW50byB0aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwODozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21kaW8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRkZXZzaW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDg6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc1ODkKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gdGhlIGBtZGlvLW12dXNiLmNgIFNvdXJjZSBDb2RlKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBzZWUgd2hhdCYjMzk7cyBhY3R1YWxseSBnb2luZyBvbiBpbnNpZGUgYG1kaW8tbXZ1c2IuY2AuIFRoZSBuYW1lIGl0c2VsZiBoaW50cyBhdCBzb21lIGtpbmQgb2YgTWVkaWEgSW5kZXBlbmRlbnQgSW50ZXJmYWNlIChNSUkpIG92ZXIgVVNCIGludGVyYWN0aW9uLCB3aGljaCBpcyBhIGJpdCB1bnVzdWFsLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgdG8gZmlndXJlIG91dCBpZiB0aGlzIGRyaXZlciBhZGhlcmVzIHRvIHN0YW5kYXJkIFVTQiBkcml2ZXIgY29udmVudGlvbnMsIG9yIGlmIGl0JiMzOTtzIGVtcGxveWluZyBzb21lIGN1c3RvbSBNYXJ2ZWxsLXNwZWNpZmljIHByb3RvY29sIG9uIHRvcCBvZiB0aGUgVVNCIHN0YWNrLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0eXBpY2FsIFVTQiBkZXNjcmlwdG9ycywgZW5kcG9pbnQgY29uZmlndXJhdGlvbnMsIGFuZCBob3cgaXQgaGFuZGxlcyBkZXZpY2UgZW51bWVyYXRpb24gYW5kIGNvbW11bmljYXRpb24uIEtub3dpbmcgaWYgaXQgbGV2ZXJhZ2VzIHN0YW5kYXJkIFVTQiBjbGFzc2VzIG9yIGEgdmVuZG9yLXNwZWNpZmljIGFwcHJvYWNoIHdpbGwgZnVuZGFtZW50YWxseSBzaGFwZSBteSB1bmRlcnN0YW5kaW5nIG9mIGl0cyBkZXNpZ24gYW5kIGhvdyBpdCYjMzk7cyBpbnRlbmRlZCB0byBiZSB1c2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwODozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L21kaW8vbWRpby1tdnVzYi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0XG4gICAzOlx0I2luY2x1ZGUgXHUwMDNjbGludXgva2VybmVsLmhcdTAwM2VcbiAgIDQ6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuICAgNTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L29mX21kaW8uaFx1MDAzZVxuICAgNjpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeS5oXHUwMDNlXG4gICA3Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvdXNiLmhcdTAwM2VcbiAgIDg6XHRcbiAgIDk6XHQjZGVmaW5lIFVTQl9NQVJWRUxMX1ZJRFx0MHgxMjg2XG4gIDEwOlx0XG4gIDExOlx0c3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIG12dXNiX21kaW9fdGFibGVbXSA9IHtcbiAgMTI6XHRcdHsgVVNCX0RFVklDRShVU0JfTUFSVkVMTF9WSUQsIDB4MWZhNCkgfSxcbiAgMTM6XHRcbiAgMTQ6XHRcdHt9XG4gIDE1Olx0fTtcbiAgMTY6XHRNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgbXZ1c2JfbWRpb190YWJsZSk7XG4gIDE3Olx0XG4gIDE4Olx0ZW51bSB7XG4gIDE5Olx0XHRNVlVTQl9DTURfUFJFQU1CTEUwLFxuICAyMDpcdFx0TVZVU0JfQ01EX1BSRUFNQkxFMSxcbiAgMjE6XHRcdE1WVVNCX0NNRF9BRERSLFxuICAyMjpcdFx0TVZVU0JfQ01EX1ZBTCxcbiAgMjM6XHR9O1xuICAyNDpcdFxuICAyNTpcdHN0cnVjdCBtdnVzYl9tZGlvIHtcbiAgMjY6XHRcdHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2O1xuICAyNzpcdFx0c3RydWN0IG1paV9idXMgKm1kaW87XG4gIDI4Olx0XG4gIDI5Olx0XHRfX2xlMTYgYnVmWzRdO1xuICAzMDpcdH07XG4gIDMxOlx0XG4gIDMyOlx0c3RhdGljIGludCBtdnVzYl9tZGlvX3JlYWQoc3RydWN0IG1paV9idXMgKm1kaW8sIGludCBkZXYsIGludCByZWcpXG4gIDMzOlx0e1xuICAzNDpcdFx0c3RydWN0IG12dXNiX21kaW8gKm12dXNiID0gbWRpby1cdTAwM2Vwcml2O1xuICAzNTpcdFx0aW50IGVyciwgYWxlbjtcbiAgMzY6XHRcbiAgMzc6XHRcdG12dXNiLVx1MDAzZWJ1ZltNVlVTQl9DTURfQUREUl0gPSBjcHVfdG9fbGUxNigweGE0MDAgfCAoZGV2IFx1MDAzY1x1MDAzYyA1KSB8IHJlZyk7XG4gIDM4Olx0XG4gIDM5Olx0XHRlcnIgPSB1c2JfYnVsa19tc2cobXZ1c2ItXHUwMDNldWRldiwgdXNiX3NuZGJ1bGtwaXBlKG12dXNiLVx1MDAzZXVkZXYsIDIpLFxuICA0MDpcdFx0XHRcdCAgIG12dXNiLVx1MDAzZWJ1ZiwgNiwgXHUwMDI2YWxlbiwgMTAwKTtcbiAgNDE6XHRcdGlmIChlcnIpXG4gIDQyOlx0XHRcdHJldHVybiBlcnI7XG4gIDQzOlx0XG4gIDQ0Olx0XHRlcnIgPSB1c2JfYnVsa19tc2cobXZ1c2ItXHUwMDNldWRldiwgdXNiX3JjdmJ1bGtwaXBlKG12dXNiLVx1MDAzZXVkZXYsIDYpLFxuICA0NTpcdFx0XHRcdCAgIFx1MDAyNm12dXNiLVx1MDAzZWJ1ZltNVlVTQl9DTURfVkFMXSwgMiwgXHUwMDI2YWxlbiwgMTAwKTtcbiAgNDY6XHRcdGlmIChlcnIpXG4gIDQ3Olx0XHRcdHJldHVybiBlcnI7XG4gIDQ4Olx0XG4gIDQ5Olx0XHRyZXR1cm4gbGUxNl90b19jcHUobXZ1c2ItXHUwMDNlYnVmW01WVVNCX0NNRF9WQUxdKTtcbiAgNTA6XHR9XG4gIDUxOlx0XG4gIDUyOlx0c3RhdGljIGludCBtdnVzYl9tZGlvX3dyaXRlKHN0cnVjdCBtaWlfYnVzICptZGlvLCBpbnQgZGV2LCBpbnQgcmVnLCB1MTYgdmFsKVxuICA1MzpcdHtcbiAgNTQ6XHRcdHN0cnVjdCBtdnVzYl9tZGlvICptdnVzYiA9IG1kaW8tXHUwMDNlcHJpdjtcbiAgNTU6XHRcdGludCBhbGVuO1xuICA1NjpcdFxuICA1NzpcdFx0bXZ1c2ItXHUwMDNlYnVmW01WVVNCX0NNRF9BRERSXSA9IGNwdV90b19sZTE2KDB4ODAwMCB8IChkZXYgXHUwMDNjXHUwMDNjIDUpIHwgcmVnKTtcbiAgNTg6XHRcdG12dXNiLVx1MDAzZWJ1ZltNVlVTQl9DTURfVkFMXSAgPSBjcHVfdG9fbGUxNih2YWwpO1xuICA1OTpcdFxuICA2MDpcdFx0cmV0dXJuIHVzYl9idWxrX21zZyhtdnVzYi1cdTAwM2V1ZGV2LCB1c2Jfc25kYnVsa3BpcGUobXZ1c2ItXHUwMDNldWRldiwgMiksXG4gIDYxOlx0XHRcdFx0ICAgIG12dXNiLVx1MDAzZWJ1ZiwgOCwgXHUwMDI2YWxlbiwgMTAwKTtcbiAgNjI6XHR9XG4gIDYzOlx0XG4gIDY0Olx0c3RhdGljIGludCBtdnVzYl9tZGlvX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UsXG4gIDY1Olx0XHRcdFx0ICAgIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZClcbiAgNjY6XHR7XG4gIDY3Olx0XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZpbnRlcmZhY2UtXHUwMDNlZGV2O1xuICA2ODpcdFx0c3RydWN0IG12dXNiX21kaW8gKm12dXNiO1xuICA2OTpcdFx0c3RydWN0IG1paV9idXMgKm1kaW87XG4gIDcwOlx0XG4gIDcxOlx0XHRtZGlvID0gZGV2bV9tZGlvYnVzX2FsbG9jX3NpemUoZGV2LCBzaXplb2YoKm12dXNiKSk7XG4gIDcyOlx0XHRpZiAoIW1kaW8pXG4gIDczOlx0XHRcdHJldHVybiAtRU5PTUVNO1xuICA3NDpcdFxuICA3NTpcdFx0bXZ1c2IgPSBtZGlvLVx1MDAzZXByaXY7XG4gIDc2Olx0XHRtdnVzYi1cdTAwM2VtZGlvID0gbWRpbztcbiAgNzc6XHRcdG12dXNiLVx1MDAzZXVkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGVyZmFjZSk7XG4gIDc4Olx0XG4gIDc5Olx0XHQvKiBSZXZlcnNlZCBmcm9tIFVTQiBQQ0FQcywgbm8gaWRlYSB3aGF0IHRoZXNlIG1lYW4uICovXG4gIDgwOlx0XHRtdnVzYi1cdTAwM2VidWZbTVZVU0JfQ01EX1BSRUFNQkxFMF0gPSBjcHVfdG9fbGUxNigweGU4MDApO1xuICA4MTpcdFx0bXZ1c2ItXHUwMDNlYnVmW01WVVNCX0NNRF9QUkVBTUJMRTFdID0gY3B1X3RvX2xlMTYoMHgwMDAxKTtcbiAgODI6XHRcbiAgODM6XHRcdHNucHJpbnRmKG1kaW8tXHUwMDNlaWQsIE1JSV9CVVNfSURfU0laRSwgXCYjMzQ7bXZ1c2ItJXNcJiMzNDssIGRldl9uYW1lKGRldikpO1xuICA4NDpcdFx0bWRpby1cdTAwM2VuYW1lID0gbWRpby1cdTAwM2VpZDtcbiAgODU6XHRcdG1kaW8tXHUwMDNlcGFyZW50ID0gZGV2O1xuICA4NjpcdFx0bWRpby1cdTAwM2VyZWFkID0gbXZ1c2JfbWRpb19yZWFkO1xuICA4NzpcdFx0bWRpby1cdTAwM2V3cml0ZSA9IG12dXNiX21kaW9fd3JpdGU7XG4gIDg4Olx0XG4gIDg5Olx0XHR1c2Jfc2V0X2ludGZkYXRhKGludGVyZmFjZSwgbXZ1c2IpO1xuICA5MDpcdFxuICA5MTpcdFx0cmV0dXJuIG9mX21kaW9idXNfcmVnaXN0ZXIobWRpbywgZGV2LVx1MDAzZW9mX25vZGUpO1xuICA5MjpcdH1cbiAgOTM6XHRcbiAgOTQ6XHRzdGF0aWMgdm9pZCBtdnVzYl9tZGlvX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSlcbiAgOTU6XHR7XG4gIDk2Olx0XHRzdHJ1Y3QgbXZ1c2JfbWRpbyAqbXZ1c2IgPSB1c2JfZ2V0X2ludGZkYXRhKGludGVyZmFjZSk7XG4gIDk3Olx0XG4gIDk4Olx0XHRtZGlvYnVzX3VucmVnaXN0ZXIobXZ1c2ItXHUwMDNlbWRpbyk7XG4gIDk5Olx0XHR1c2Jfc2V0X2ludGZkYXRhKGludGVyZmFjZSwgTlVMTCk7XG4gMTAwOlx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwODozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTM2OAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDE0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNRElPIE92ZXIgVVNCOiBBIEZhdm9yYWJsZSBTZXR1cCBmb3IgRnV6emluZyoqCgpZZXMhIFRoZSBgbWRpby1tdnVzYi5jYCBkcml2ZXIgaXMgZXhhY3RseSB3aGF0IEkgd2FzIGhvcGluZyBmb3IuIEl0IHJlZ2lzdGVycyBhbiBNRElPIGJ1cyBhbmQsIGNydWNpYWxseSwgdHJhbnNsYXRlcyBNRElPIHJlYWQvd3JpdGUgb3BlcmF0aW9ucyBpbnRvIFVTQiBidWxrIG1lc3NhZ2VzLiBUaGlzIGlzIGtleSEgSWYgSSBjYW4gc3VjY2Vzc2Z1bGx5IGxldmVyYWdlIFN5emthbGxlciYjMzk7cyBVU0IgZnV6emVyIHRvIGVtdWxhdGUgdGhlIHNwZWNpZmljIGRldmljZSB3aXRoIHZlbmRvciBJRCBgMHgxMjg2YCBhbmQgcHJvZHVjdCBJRCBgMHgxZmE0YCBhbmQgaGF2ZSBpdCByZXNwb25kIHRvIHRob3NlIGJ1bGsgbWVzc2FnZXMgd2l0aCB0aGUgZXhwZWN0ZWQgUEhZIElELCBgMHg0ZjUxZThiOGAsIEkmIzM5O2xsIGJlIGluIGJ1c2luZXNzLgoKQnV0IGhvbGQgb24uLi4gSSBuZWVkIHRvIGNvbnNpZGVyIGEgcG90ZW50aWFsIHdyaW5rbGUuIFRoZSBjb2RlIHV0aWxpemVzIGBvZl9tZGlvYnVzX3JlZ2lzdGVyYC4gSWYsIGFzIEkgc3VzcGVjdCwgdGhlIGBkZXYtJmd0O29mX25vZGVgIGlzIGBOVUxMYCBmb3IgYSBVU0IgZGV2aWNlIHRoYXQgaXNuJiMzOTt0IGRlc2NyaWJlZCBpbiB0aGUgRGV2aWNlIFRyZWUsIGl0IHNob3VsZCBncmFjZWZ1bGx5IGZhbGwgYmFjayB0byBhIHN0YW5kYXJkIGBtZGlvYnVzX3JlZ2lzdGVyYC4gSnVzdCB0byBiZSBzdXJlLCBJIHNob3VsZCBjaGVjayB0aGUgaW1wbGVtZW50YXRpb24gb2YgYG9mX21kaW9idXNfcmVnaXN0ZXJgIHRvIGNvbmZpcm0gdGhpcyBhc3N1bXB0aW9uLiBMZXQmIzM5O3MgZGlnIGludG8gdGhhdCBmdW5jdGlvbiBkZWZpbml0aW9uIG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDg6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7b2ZfbWRpb2J1c19yZWdpc3RlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jPTQ0PUVYUE9SVF9TWU1CT0wob2ZfbWRpb2J1c19waHlfZGV2aWNlX3JlZ2lzdGVyKTtcbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jLTQ1LVxuZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmM6NDY6c3RhdGljIGludCBvZl9tZGlvYnVzX3JlZ2lzdGVyX3BoeShzdHJ1Y3QgbWlpX2J1cyAqbWRpbyxcbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jLTQ3LVx0XHRcdFx0ICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqY2hpbGQsIHUzMiBhZGRyKVxuLS1cbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jLTUxLVxuZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmM6NTI6c3RhdGljIGludCBvZl9tZGlvYnVzX3JlZ2lzdGVyX2RldmljZShzdHJ1Y3QgbWlpX2J1cyAqbWRpbyxcbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jLTUzLVx0XHRcdFx0ICAgICAgc3RydWN0IGRldmljZV9ub2RlICpjaGlsZCwgdTMyIGFkZHIpXG4tLVxuZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmM9MTM5PXN0YXRpYyBpbnQgX19vZl9tZGlvYnVzX3BhcnNlX3BoeXMoc3RydWN0IG1paV9idXMgKm1kaW8sIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsXG4tLVxuZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmMtMTY3LVx0XHRpZiAob2ZfbWRpb2J1c19jaGlsZF9pc19waHkoY2hpbGQpKVxuZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmM6MTY4Olx0XHRcdHJjID0gb2ZfbWRpb2J1c19yZWdpc3Rlcl9waHkobWRpbywgY2hpbGQsIGFkZHIpO1xuZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmMtMTY5LVx0XHRlbHNlXG5kcml2ZXJzL25ldC9tZGlvL29mX21kaW8uYzoxNzA6XHRcdFx0cmMgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyX2RldmljZShtZGlvLCBjaGlsZCwgYWRkcik7XG5kcml2ZXJzL25ldC9tZGlvL29mX21kaW8uYy0xNzEtXG4tLVxuZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmMtMTg2LS8qKlxuZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmM6MTg3OiAqIF9fb2ZfbWRpb2J1c19yZWdpc3RlciAtIFJlZ2lzdGVyIG1paV9idXMgYW5kIGNyZWF0ZSBQSFlzIGZyb20gdGhlIGRldmljZSB0cmVlXG5kcml2ZXJzL25ldC9tZGlvL29mX21kaW8uYy0xODgtICogQG1kaW86IHBvaW50ZXIgdG8gbWlpX2J1cyBzdHJ1Y3R1cmVcbi0tXG5kcml2ZXJzL25ldC9tZGlvL29mX21kaW8uYy0xOTQtICovXG5kcml2ZXJzL25ldC9tZGlvL29mX21kaW8uYzoxOTU6aW50IF9fb2ZfbWRpb2J1c19yZWdpc3RlcihzdHJ1Y3QgbWlpX2J1cyAqbWRpbywgc3RydWN0IGRldmljZV9ub2RlICpucCxcbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jLTE5Ni1cdFx0XHQgIHN0cnVjdCBtb2R1bGUgKm93bmVyKVxuLS1cbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jLTI1NC1cdFx0XHRcdCAqL1xuZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmM6MjU1Olx0XHRcdFx0cmMgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyX3BoeShtZGlvLCBjaGlsZCwgYWRkcik7XG5kcml2ZXJzL25ldC9tZGlvL29mX21kaW8uYy0yNTYtXHRcdFx0XHRpZiAoIXJjKVxuLS1cbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jLTI3MS19XG5kcml2ZXJzL25ldC9tZGlvL29mX21kaW8uYzoyNzI6RVhQT1JUX1NZTUJPTChfX29mX21kaW9idXNfcmVnaXN0ZXIpO1xuZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmMtMjczLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwODozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDU3MgoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHdoYXQgd2UmIzM5O3JlIGxvb2tpbmcgYXQsIHN1bW1hcml6ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXNzdW1pbmcgSSYjMzk7bSBhbHJlYWR5IHByZXR0eSBmYW1pbGlhciB3aXRoIHRoaXMgY29kZWJhc2U6CgoqKlJldmlld2luZyBgX19vZl9tZGlvYnVzX3JlZ2lzdGVyYCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCBhIGdvb2QgbG9vayBhdCBgX19vZl9tZGlvYnVzX3JlZ2lzdGVyYC4gVGhpcyBpcyBhIGNydWNpYWwgZnVuY3Rpb24sIGFuZCB1bmRlcnN0YW5kaW5nIGl0IHdpbGwgYmUgdml0YWwuIEJhc2VkIG9uIHRoZSBuYW1pbmcsIGl0JiMzOTtzIHByZXR0eSBjbGVhciB0aGlzIGlzIGFib3V0IHJlZ2lzdGVyaW5nIGFuIE1ESU8gYnVzLCBhbmQgdGhlIGRvdWJsZSB1bmRlcnNjb3JlIHN1Z2dlc3RzIGl0IGlzIGEgaW50ZXJuYWwgZnVuY3Rpb24uIEkgaW1hZ2luZSB0aGUgJiMzNDtvZiYjMzQ7IHByZWZpeCBpcyBjcml0aWNhbDsgaXQgcHJvYmFibHkgaGFuZGxlcyByZWdpc3RlcmluZyBhbiBNRElPIGJ1cyBmcm9tIGEgRGV2aWNlIFRyZWUuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMgZm9yIHBsYXRmb3JtIGRldmljZSBjb25maWd1cmF0aW9uIG9uIHRoZXNlIHN5c3RlbXMuIEkmIzM5O2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgcGFyYW1ldGVyIGxpc3QsIGFuZCBlc3BlY2lhbGx5IGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgZGV2aWNlIHRyZWUuIEkmIzM5O2xsIHdhbnQgdG8gc2VlIGhvdyB0aGUgYnVzIGlzIGluaXRpYWxpemVkLCBob3cgaXRzIGNsb2NrIGFuZCBpbnRlcnJ1cHQgcmVzb3VyY2VzIGFyZSBjb25maWd1cmVkLCBhbmQgdWx0aW1hdGVseSBob3cgaXQmIzM5O3MgaW50ZWdyYXRlZCB3aXRoIHRoZSByZXN0IG9mIHRoZSBNRElPIHN1YnN5c3RlbS4gQW55IHBvdGVudGlhbCBxdWlya3Mgb3IgZXJyb3IgaGFuZGxpbmcgZHVyaW5nIHRoZSByZWdpc3RyYXRpb24gcHJvY2VzcyB3b3VsZCBhbHNvIGJlIHNvbWV0aGluZyB0byB3YXRjaC4gSXQgaXMgbGlrZWx5IGNhbGxlZCBhcyBwYXJ0IG9mIE1ESU8gb3IgRXRoZXJuZXQgZHJpdmVyIGluaXRpYWxpemF0aW9uLiBUaGUgY29kZSBzaG91bGQgcHJvdmlkZSBpbnNpZ2h0cyBmb3IgaGFyZHdhcmUgZGV0ZWN0aW9uIGFuZCBtYW5hZ2VtZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwODozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTg2LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTg2Olx0LyoqXG4gMTg3Olx0ICogX19vZl9tZGlvYnVzX3JlZ2lzdGVyIC0gUmVnaXN0ZXIgbWlpX2J1cyBhbmQgY3JlYXRlIFBIWXMgZnJvbSB0aGUgZGV2aWNlIHRyZWVcbiAxODg6XHQgKiBAbWRpbzogcG9pbnRlciB0byBtaWlfYnVzIHN0cnVjdHVyZVxuIDE4OTpcdCAqIEBucDogcG9pbnRlciB0byBkZXZpY2Vfbm9kZSBvZiBNRElPIGJ1cy5cbiAxOTA6XHQgKiBAb3duZXI6IG1vZHVsZSBvd25pbmcgdGhlIEBtZGlvIG9iamVjdC5cbiAxOTE6XHQgKlxuIDE5MjpcdCAqIFRoaXMgZnVuY3Rpb24gcmVnaXN0ZXJzIHRoZSBtaWlfYnVzIHN0cnVjdHVyZSBhbmQgcmVnaXN0ZXJzIGEgcGh5X2RldmljZVxuIDE5MzpcdCAqIGZvciBlYWNoIGNoaWxkIG5vZGUgb2YgQG5wLlxuIDE5NDpcdCAqL1xuIDE5NTpcdGludCBfX29mX21kaW9idXNfcmVnaXN0ZXIoc3RydWN0IG1paV9idXMgKm1kaW8sIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsXG4gMTk2Olx0XHRcdFx0ICBzdHJ1Y3QgbW9kdWxlICpvd25lcilcbiAxOTc6XHR7XG4gMTk4Olx0XHRzdHJ1Y3QgZGV2aWNlX25vZGUgKmNoaWxkO1xuIDE5OTpcdFx0Ym9vbCBzY2FucGh5cyA9IGZhbHNlO1xuIDIwMDpcdFx0aW50IGFkZHIsIHJjO1xuIDIwMTpcdFxuIDIwMjpcdFx0aWYgKCFucClcbiAyMDM6XHRcdFx0cmV0dXJuIF9fbWRpb2J1c19yZWdpc3RlcihtZGlvLCBvd25lcik7XG4gMjA0Olx0XG4gMjA1Olx0XHQvKiBEbyBub3QgY29udGludWUgaWYgdGhlIG5vZGUgaXMgZGlzYWJsZWQgKi9cbiAyMDY6XHRcdGlmICghb2ZfZGV2aWNlX2lzX2F2YWlsYWJsZShucCkpXG4gMjA3Olx0XHRcdHJldHVybiAtRU5PREVWO1xuIDIwODpcdFxuIDIwOTpcdFx0LyogTWFzayBvdXQgYWxsIFBIWXMgZnJvbSBhdXRvIHByb2JpbmcuICBJbnN0ZWFkIHRoZSBQSFlzIGxpc3RlZCBpblxuIDIxMDpcdFx0ICogdGhlIGRldmljZSB0cmVlIGFyZSBwb3B1bGF0ZWQgYWZ0ZXIgdGhlIGJ1cyBoYXMgYmVlbiByZWdpc3RlcmVkICovXG4gMjExOlx0XHRtZGlvLVx1MDAzZXBoeV9tYXNrID0gfjA7XG4gMjEyOlx0XG4gMjEzOlx0XHRkZXZpY2Vfc2V0X25vZGUoXHUwMDI2bWRpby1cdTAwM2VkZXYsIG9mX2Z3bm9kZV9oYW5kbGUobnApKTtcbiAyMTQ6XHRcbiAyMTU6XHRcdC8qIEdldCBidXMgbGV2ZWwgUEhZIHJlc2V0IEdQSU8gZGV0YWlscyAqL1xuIDIxNjpcdFx0bWRpby1cdTAwM2VyZXNldF9kZWxheV91cyA9IERFRkFVTFRfR1BJT19SRVNFVF9ERUxBWTtcbiAyMTc6XHRcdG9mX3Byb3BlcnR5X3JlYWRfdTMyKG5wLCBcJiMzNDtyZXNldC1kZWxheS11c1wmIzM0OywgXHUwMDI2bWRpby1cdTAwM2VyZXNldF9kZWxheV91cyk7XG4gMjE4Olx0XHRtZGlvLVx1MDAzZXJlc2V0X3Bvc3RfZGVsYXlfdXMgPSAwO1xuIDIxOTpcdFx0b2ZfcHJvcGVydHlfcmVhZF91MzIobnAsIFwmIzM0O3Jlc2V0LXBvc3QtZGVsYXktdXNcJiMzNDssIFx1MDAyNm1kaW8tXHUwMDNlcmVzZXRfcG9zdF9kZWxheV91cyk7XG4gMjIwOlx0XG4gMjIxOlx0XHQvKiBSZWdpc3RlciB0aGUgTURJTyBidXMgKi9cbiAyMjI6XHRcdHJjID0gX19tZGlvYnVzX3JlZ2lzdGVyKG1kaW8sIG93bmVyKTtcbiAyMjM6XHRcdGlmIChyYylcbiAyMjQ6XHRcdFx0cmV0dXJuIHJjO1xuIDIyNTpcdFxuIDIyNjpcdFx0LyogTG9vcCBvdmVyIHRoZSBjaGlsZCBub2RlcyBhbmQgcmVnaXN0ZXIgYSBwaHlfZGV2aWNlIGZvciBlYWNoIHBoeSAqL1xuIDIyNzpcdFx0cmMgPSBfX29mX21kaW9idXNfcGFyc2VfcGh5cyhtZGlvLCBucCwgXHUwMDI2c2NhbnBoeXMpO1xuIDIyODpcdFx0aWYgKHJjKVxuIDIyOTpcdFx0XHRnb3RvIHVucmVnaXN0ZXI7XG4gMjMwOlx0XG4gMjMxOlx0XHRpZiAoIXNjYW5waHlzKVxuIDIzMjpcdFx0XHRyZXR1cm4gMDtcbiAyMzM6XHRcbiAyMzQ6XHRcdC8qIGF1dG8gc2NhbiBmb3IgUEhZcyB3aXRoIGVtcHR5IHJlZyBwcm9wZXJ0eSAqL1xuIDIzNTpcdFx0Zm9yX2VhY2hfYXZhaWxhYmxlX2NoaWxkX29mX25vZGUobnAsIGNoaWxkKSB7XG4gMjM2Olx0XHRcdC8qIFNraXAgUEhZcyB3aXRoIHJlZyBwcm9wZXJ0eSBzZXQgb3IgZXRoZXJuZXQtcGh5LXBhY2thZ2Ugbm9kZSAqL1xuIDIzNzpcdFx0XHRpZiAob2ZfcHJvcGVydHlfcHJlc2VudChjaGlsZCwgXCYjMzQ7cmVnXCYjMzQ7KSB8fFxuIDIzODpcdFx0XHQgICAgb2Zfbm9kZV9uYW1lX2VxKGNoaWxkLCBcJiMzNDtldGhlcm5ldC1waHktcGFja2FnZVwmIzM0OykpXG4gMjM5Olx0XHRcdFx0Y29udGludWU7XG4gMjQwOlx0XG4gMjQxOlx0XHRcdGZvciAoYWRkciA9IDA7IGFkZHIgXHUwMDNjIFBIWV9NQVhfQUREUjsgYWRkciYjNDM7JiM0MzspIHtcbiAyNDI6XHRcdFx0XHQvKiBza2lwIGFscmVhZHkgcmVnaXN0ZXJlZCBQSFlzICovXG4gMjQzOlx0XHRcdFx0aWYgKG1kaW9idXNfaXNfcmVnaXN0ZXJlZF9kZXZpY2UobWRpbywgYWRkcikpXG4gMjQ0Olx0XHRcdFx0XHRjb250aW51ZTtcbiAyNDU6XHRcbiAyNDY6XHRcdFx0XHQvKiBiZSBub2lzeSB0byBlbmNvdXJhZ2UgcGVvcGxlIHRvIHNldCByZWcgcHJvcGVydHkgKi9cbiAyNDc6XHRcdFx0XHRkZXZfaW5mbyhcdTAwMjZtZGlvLVx1MDAzZWRldiwgXCYjMzQ7c2NhbiBwaHkgJXBPRm4gYXQgYWRkcmVzcyAlaVxcblwmIzM0OyxcbiAyNDg6XHRcdFx0XHRcdCBjaGlsZCwgYWRkcik7XG4gMjQ5Olx0XG4gMjUwOlx0XHRcdFx0aWYgKG9mX21kaW9idXNfY2hpbGRfaXNfcGh5KGNoaWxkKSkge1xuIDI1MTpcdFx0XHRcdFx0LyogLUVOT0RFViBpcyB0aGUgcmV0dXJuIGNvZGUgdGhhdCBQSFlMSUIgaGFzXG4gMjUyOlx0XHRcdFx0XHQgKiBzdGFuZGFyZGl6ZWQgb24gdG8gaW5kaWNhdGUgdGhhdCBidXNcbiAyNTM6XHRcdFx0XHRcdCAqIHNjYW5uaW5nIHNob3VsZCBjb250aW51ZS5cbiAyNTQ6XHRcdFx0XHRcdCAqL1xuIDI1NTpcdFx0XHRcdFx0cmMgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyX3BoeShtZGlvLCBjaGlsZCwgYWRkcik7XG4gMjU2Olx0XHRcdFx0XHRpZiAoIXJjKVxuIDI1NzpcdFx0XHRcdFx0XHRicmVhaztcbiAyNTg6XHRcdFx0XHRcdGlmIChyYyAhPSAtRU5PREVWKVxuIDI1OTpcdFx0XHRcdFx0XHRnb3RvIHB1dF91bnJlZ2lzdGVyO1xuIDI2MDpcdFx0XHRcdH1cbiAyNjE6XHRcdFx0fVxuIDI2MjpcdFx0fVxuIDI2MzpcdFxuIDI2NDpcdFx0cmV0dXJuIDA7XG4gMjY1Olx0XG4gMjY2Olx0cHV0X3VucmVnaXN0ZXI6XG4gMjY3Olx0XHRvZl9ub2RlX3B1dChjaGlsZCk7XG4gMjY4Olx0dW5yZWdpc3RlcjpcbiAyNjk6XHRcdG1kaW9idXNfdW5yZWdpc3RlcihtZGlvKTtcbiAyNzA6XHRcdHJldHVybiByYztcbiAyNzE6XHR9XG4gMjcyOlx0RVhQT1JUX1NZTUJPTChfX29mX21kaW9idXNfcmVnaXN0ZXIpO1xuIDI3MzpcdFxuIDI3NDpcdC8qKlxuIDI3NTpcdCAqIG9mX21kaW9fZmluZF9kZXZpY2UgLSBHaXZlbiBhIGRldmljZSB0cmVlIG5vZGUsIGZpbmQgdGhlIG1kaW9fZGV2aWNlXG4gMjc2Olx0ICogQG5wOiBwb2ludGVyIHRvIHRoZSBtZGlvX2RldmljZSYjMzk7cyBkZXZpY2UgdHJlZSBub2RlXG4gMjc3Olx0ICpcbiAyNzg6XHQgKiBJZiBzdWNjZXNzZnVsLCByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgbWRpb19kZXZpY2Ugd2l0aCB0aGUgZW1iZWRkZWRcbiAyNzk6XHQgKiBzdHJ1Y3QgZGV2aWNlIHJlZmNvdW50IGluY3JlbWVudGVkIGJ5IG9uZSwgb3IgTlVMTCBvbiBmYWlsdXJlLlxuIDI4MDpcdCAqIFRoZSBjYWxsZXIgc2hvdWxkIGNhbGwgcHV0X2RldmljZSgpIG9uIHRoZSBtZGlvX2RldmljZSBhZnRlciBpdHMgdXNlXG4gMjgxOlx0ICovXG4gMjgyOlx0c3RydWN0IG1kaW9fZGV2aWNlICpvZl9tZGlvX2ZpbmRfZGV2aWNlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApXG4gMjgzOlx0e1xuIDI4NDpcdFx0cmV0dXJuIGZ3bm9kZV9tZGlvX2ZpbmRfZGV2aWNlKG9mX2Z3bm9kZV9oYW5kbGUobnApKTtcbiAyODU6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA4OjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyNDU1CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkRpdmluZyBpbnRvIHRoZSBNRElPIEJ1cyBSZWdpc3RyYXRpb24qKgoKUmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUsIGFuZCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhpcyBjb25kaXRpb25hbDogKklmIGBucGAgaXMgTlVMTC4uLiogV2VsbCwgdGhhdCYjMzk7cyBzdHJhaWdodGZvcndhcmQgZW5vdWdoOiBJZiBgbnBgIGlzIE5VTEwsIHRoZW4gdGhlIGNvZGUgKmltbWVkaWF0ZWx5KiBjYWxscyBgX19tZGlvYnVzX3JlZ2lzdGVyKG1kaW8sIG93bmVyKWAuIFRoZSBpbXBsaWNhdGlvbiBpcyB0aGF0IGBucGAgcHJvYmFibHkgcmVwcmVzZW50cyBzb21lIHNvcnQgb2YgZGV2aWNlIG5vZGUgb3IgYXNzb2NpYXRlZCBzdHJ1Y3R1cmUuIE51bGwgbWVhbnMgaXQgZG9lc24mIzM5O3QgZXhpc3QuIE5vdywgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eSBoZXJlIG11c3QgYmUgd2l0aGluIHRoYXQgcmVnaXN0cmF0aW9uIGZ1bmN0aW9uLiBTbywgbXkgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIGBfX21kaW9idXNfcmVnaXN0ZXJgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGhhcHBlbmluZyAqaW5zaWRlKiB0aGF0IGZ1bmN0aW9uIGluIG9yZGVyIHRvIGdyYXNwIHRoZSBvdmVyYWxsIGludGVudGlvbiBvZiB0aGlzIHNlY3Rpb24gb2YgY29kZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBNRElPIGJ1cyBpcyBiZWluZyByZWdpc3RlcmVkIGluIHRoZSBhYnNlbmNlIG9mIGEgZGV2aWNlIG5vZGUuIElzIGl0IGEgZmFsbGJhY2s/IEEgbGVnYWN5IHBhdGg/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyByZWdpc3RyYXRpb24gd2hlbiBgbnBgIGlzIE5VTEw/IEkgbmVlZCB0byBhbmFseXplIGBfX21kaW9idXNfcmVnaXN0ZXJgIHRvIGRldGVybWluZSB0aGUgYW5zd2VyIHRvIHRoZXNlIHF1ZXN0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDg6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX21kaW9idXNfcmVnaXN0ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvbWRpb19idXMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA4OjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyNzc4CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipNRElPIEJ1cyBSZWdpc3RyYXRpb246IERpZ2dpbmcgaW50byB0aGUgQ29yZSoqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O3ZlIGdvdCB0aGlzIHN0cmFpZ2h0LiBUaGF0IGBfX21kaW9idXNfcmVnaXN0ZXJgIGZ1bmN0aW9u4oCmIEkgdGhvdWdodCBJIGhhZCBhIGhhbmRsZSBvbiB3aGVyZSBpdCBsaXZlZC4gTGV0IG1lIGRvdWJsZS1jaGVjay4gKldhaXQsIGl0JiMzOTtzIGFjdHVhbGx5IGluKiBgZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzLmNgPyBHb29kIHRvIGtub3csIGl0IGhlbHBzIHRvIGtlZXAgYSBtYXAgb2YgdGhlc2UgdGhpbmdzLCBlc3BlY2lhbGx5IHdoZW4gaXQgY29tZXMgdG8gdGhlIGxvd2VyLWxldmVsIGJ1cyBpbnRlcmFjdGlvbnMuIExldCBtZSBxdWlja2x5IHJlZnJlc2ggbXlzZWxmIG9uIHRoZSBhcmd1bWVudHMgaXQgdGFrZXMgYW5kIGl0cyBnZW5lcmFsIGJlaGF2aW9yIGJ5IGNoZWNraW5nIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgbWRpb2J1c19yZWdpc3RlcmAsIGp1c3QgdG8gbWFrZSBzdXJlIG15IHVuZGVyc3RhbmRpbmcgaXMgYWNjdXJhdGUuIE5vIHBvaW50IGluIG1ha2luZyBhbnkgYXNzdW1wdGlvbnMgYXQgdGhpcyBsZXZlbCBvZiBhYnN0cmFjdGlvbi4gQWx3YXlzIGdvb2QgdG8gZHJpbGwgZG93biBhbmQgY29uZmlybSB0aGUgZGV0YWlscywgcGFydGljdWxhcmx5IHdpdGggdGhlIG1vcmUgY3JpdGljYWwgYnVzIG1hbmFnZW1lbnQgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDg6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWRpb2J1c19yZWdpc3RlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jPTE5NT1zdGF0aWMgaW50IF9faW5pdCBmaXhlZF9tZGlvX2J1c19pbml0KHZvaWQpXG4tLVxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTIwOC1cbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzoyMDk6XHRyZXQgPSBtZGlvYnVzX3JlZ2lzdGVyKGZtYl9taWlfYnVzKTtcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0yMTAtXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jPTUyNT1zdGF0aWMgYm9vbCBtZGlvYnVzX3ByZXZlbnRfYzQ1X3NjYW4oc3RydWN0IG1paV9idXMgKmJ1cylcbi0tXG5kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYy01MzktLyoqXG5kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYzo1NDA6ICogX19tZGlvYnVzX3JlZ2lzdGVyIC0gYnJpbmcgdXAgYWxsIHRoZSBQSFlzIG9uIGEgZ2l2ZW4gYnVzIGFuZCBhdHRhY2ggdGhlbSB0byBidXNcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jLTU0MS0gKiBAYnVzOiB0YXJnZXQgbWlpX2J1c1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jLTU0NS0gKiAgIG9uIGEgZ2l2ZW4gYnVzLCBhbmQgYXR0YWNoIHRoZW0gdG8gdGhlIGJ1cy4gRHJpdmVycyBzaG91bGQgdXNlXG5kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYzo1NDY6ICogICBtZGlvYnVzX3JlZ2lzdGVyKCkgcmF0aGVyIHRoYW4gX19tZGlvYnVzX3JlZ2lzdGVyKCkgdW5sZXNzIHRoZXlcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jLTU0Ny0gKiAgIG5lZWQgdG8gcGFzcyBhIHNwZWNpZmljIG93bmVyIG1vZHVsZS4gTURJTyBkZXZpY2VzIHdoaWNoIGFyZSBub3RcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jLTU0OC0gKiAgIFBIWXMgd2lsbCBub3QgYmUgYnJvdWdodCB1cCBieSB0aGlzIGZ1bmN0aW9uLiBUaGV5IGFyZSBleHBlY3RlZFxuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmM6NTQ5OiAqICAgdG8gYmUgZXhwbGljaXRseSBsaXN0ZWQgaW4gRFQgYW5kIGluc3RhbnRpYXRlZCBieSBvZl9tZGlvYnVzX3JlZ2lzdGVyKCkuXG5kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYy01NTAtICpcbi0tXG5kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYy01NTItICovXG5kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYzo1NTM6aW50IF9fbWRpb2J1c19yZWdpc3RlcihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBzdHJ1Y3QgbW9kdWxlICpvd25lcilcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jLTU1NC17XG4tLVxuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmMtNjY2LX1cbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jOjY2NzpFWFBPUlRfU1lNQk9MKF9fbWRpb2J1c19yZWdpc3Rlcik7XG5kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYy02NjgtXG4tLVxuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmM9NzM0PUVYUE9SVF9TWU1CT0wobWRpb19maW5kX2J1cyk7XG4tLVxuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmMtNzQ1LSAqIEJlY2F1c2UgdGhlIGFzc29jaWF0aW9uIG9mIGEgZGV2aWNlX25vZGUgYW5kIG1paV9idXMgaXMgbWFkZSB2aWFcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jOjc0NjogKiBvZl9tZGlvYnVzX3JlZ2lzdGVyKCksIHRoZSBtaWlfYnVzIGNhbm5vdCBiZSBmb3VuZCBiZWZvcmUgaXQgaXNcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jOjc0NzogKiByZWdpc3RlcmVkIHdpdGggb2ZfbWRpb2J1c19yZWdpc3RlcigpLlxuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmMtNzQ4LSAqXG4tLVxuZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmM9MTUxPWludCBtZGlvX2RldmljZV9yZWdpc3RlcihzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG4tLVxuZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmMtMTU2LVxuZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmM6MTU3Olx0ZXJyID0gbWRpb2J1c19yZWdpc3Rlcl9kZXZpY2UobWRpb2Rldik7XG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuYy0xNTgtXHRpZiAoZXJyKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2RldmljZS5jPTE4OT1FWFBPUlRfU1lNQk9MKG1kaW9fZGV2aWNlX3JlbW92ZSk7XG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuYy0xOTAtXG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuYzoxOTE6aW50IG1kaW9idXNfcmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2RldmljZS5jLTE5Mi17XG4tLVxuZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2cmVzLmM9NTY9c3RhdGljIGludCBtZGlvYnVzX2RldnJlc19tYXRjaChzdHJ1Y3QgZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2cmVzLmMtNjUtLyoqXG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZyZXMuYzo2NjogKiBfX2Rldm1fbWRpb2J1c19yZWdpc3RlciAtIFJlc291cmNlLW1hbmFnZWQgdmFyaWFudCBvZiBtZGlvYnVzX3JlZ2lzdGVyKClcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2RldnJlcy5jLTY3LSAqIEBkZXY6XHREZXZpY2UgdG8gcmVnaXN0ZXIgbWlpX2J1cyBmb3Jcbi0tXG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZyZXMuYy03Mi0gKi9cbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2RldnJlcy5jOjczOmludCBfX2Rldm1fbWRpb2J1c19yZWdpc3RlcihzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBtaWlfYnVzICpidXMsXG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZyZXMuYy03NC1cdFx0XHQgICAgc3RydWN0IG1vZHVsZSAqb3duZXIpXG4tLVxuZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2cmVzLmMtODYtXG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZyZXMuYzo4NzpcdHJldCA9IF9fbWRpb2J1c19yZWdpc3RlcihidXMsIG93bmVyKTtcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2RldnJlcy5jLTg4LVx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2RldnJlcy5jLTk2LX1cbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2RldnJlcy5jOjk3OkVYUE9SVF9TWU1CT0woX19kZXZtX21kaW9idXNfcmVnaXN0ZXIpO1xuZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2cmVzLmMtOTgtXG4tLVxuZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2cmVzLmMtMTAwLS8qKlxuZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2cmVzLmM6MTAxOiAqIF9fZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyIC0gUmVzb3VyY2UgbWFuYWdlZCB2YXJpYW50IG9mIG9mX21kaW9idXNfcmVnaXN0ZXIoKVxuZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2cmVzLmMtMTAyLSAqIEBkZXY6XHREZXZpY2UgdG8gcmVnaXN0ZXIgbWlpX2J1cyBmb3Jcbi0tXG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZyZXMuYy0xMDYtICovXG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZyZXMuYzoxMDc6aW50IF9fZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IG1paV9idXMgKm1kaW8sXG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZyZXMuYy0xMDgtXHRcdFx0ICAgICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsIHN0cnVjdCBtb2R1bGUgKm93bmVyKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2RldnJlcy5jLTEyMC1cbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2RldnJlcy5jOjEyMTpcdHJldCA9IF9fb2ZfbWRpb2J1c19yZWdpc3RlcihtZGlvLCBucCwgb3duZXIpO1xuZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2cmVzLmMtMTIyLVx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2RldnJlcy5jLTEzMC19XG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZyZXMuYzoxMzE6RVhQT1JUX1NZTUJPTChfX2Rldm1fb2ZfbWRpb2J1c19yZWdpc3Rlcik7XG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZyZXMuYy0xMzItI2VuZGlmIC8qIENPTkZJR19PRl9NRElPICovXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0xMTA5PWludCBwaHlfZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMTEyLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxMTEzOlx0ZXJyID0gbWRpb2J1c19yZWdpc3Rlcl9kZXZpY2UoXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8pO1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMTE0LVx0aWYgKGVycilcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGliLWludGVybmFsLmg9MjU9dm9pZCBwaHlfY2hlY2tfZG93bnNoaWZ0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpO1xuZHJpdmVycy9uZXQvcGh5L3BoeWxpYi1pbnRlcm5hbC5oLTI2LVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpYi1pbnRlcm5hbC5oOjI3OmludCBtZGlvYnVzX3JlZ2lzdGVyX2RldmljZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpO1xuZHJpdmVycy9uZXQvcGh5L3BoeWxpYi1pbnRlcm5hbC5oLTI4LWludCBtZGlvYnVzX3VucmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2Rldik7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3NmcC5jPTk0Mj1zdGF0aWMgaW50IHNmcF9pMmNfbWRpb2J1c19jcmVhdGUoc3RydWN0IHNmcCAqc2ZwKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9zZnAuYy05NTMtXG5kcml2ZXJzL25ldC9waHkvc2ZwLmM6OTU0Olx0cmV0ID0gbWRpb2J1c19yZWdpc3RlcihpMmNfbWlpKTtcbmRyaXZlcnMvbmV0L3BoeS9zZnAuYy05NTUtXHRpZiAocmV0IFx1MDAzYyAwKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA4OjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1MTI1CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBQSFkgUmVnaXN0cmF0aW9uIFByb2Nlc3MqKgoKUmlnaHQsIGxldCYjMzk7cyBzZWUsIGBfX21kaW9idXNfcmVnaXN0ZXJgIGlzIGRlZmluZWQgaW4gYGRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGRvZXMgdGhpcyByb3V0aW5lIHBlcmZvcm0gYW55IFBIWSBzY2FubmluZyBvciBlbnVtZXJhdGlvbiBhcyBwYXJ0IG9mIGl0cyByZWdpc3RyYXRpb24gcHJvY2Vzcz8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IFBIWXMgYXJlIGluaXRpYWxseSBkaXNjb3ZlcmVkIGFuZCBhc3NvY2lhdGVkIHdpdGggdGhlIE1ESU8gYnVzLiBJJiMzOTttIGdvaW5nIHRvIGp1bXAgaW50byB0aGUgYF9fbWRpb2J1c19yZWdpc3RlcmAgZnVuY3Rpb24gZGVmaW5pdGlvbiBhbmQgc2VlIHdoYXQgaXQgYWN0dWFsbHkgKmRvZXMqLiBJcyBpdCBzaW1wbHkgcmVnaXN0ZXJpbmcgdGhlIGJ1cywgb3IgaXMgaXQgZGlnZ2luZyBhcm91bmQgaW4gdGhlIE1ESU8gc3BhY2UgZm9yIGF2YWlsYWJsZSBkZXZpY2VzIGR1cmluZyB0aGUgcmVnaXN0cmF0aW9uIGl0c2VsZj8gVGhhdCYjMzk7cyB0aGUgY3JpdGljYWwgcXVlc3Rpb24gaGVyZSwgc2luY2UgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgbG93LWxldmVsIFBIWSBpbnRlcmFjdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDg6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDU1MDpcdCAqXG4gNTUxOlx0ICogUmV0dXJucyAwIG9uIHN1Y2Nlc3Mgb3IgXHUwMDNjIDAgb24gZXJyb3IuXG4gNTUyOlx0ICovXG4gNTUzOlx0aW50IF9fbWRpb2J1c19yZWdpc3RlcihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBzdHJ1Y3QgbW9kdWxlICpvd25lcilcbiA1NTQ6XHR7XG4gNTU1Olx0XHRzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXY7XG4gNTU2Olx0XHRzdHJ1Y3QgZ3Bpb19kZXNjICpncGlvZDtcbiA1NTc6XHRcdGJvb2wgcHJldmVudF9jNDVfc2NhbjtcbiA1NTg6XHRcdGludCBpLCBlcnI7XG4gNTU5Olx0XG4gNTYwOlx0XHRpZiAoIWJ1cyB8fCAhYnVzLVx1MDAzZW5hbWUpXG4gNTYxOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDU2MjpcdFxuIDU2MzpcdFx0LyogQW4gYWNjZXNzIG1ldGhvZCBhbHdheXMgbmVlZHMgYm90aCByZWFkIGFuZCB3cml0ZSBvcGVyYXRpb25zICovXG4gNTY0Olx0XHRpZiAoISFidXMtXHUwMDNlcmVhZCAhPSAhIWJ1cy1cdTAwM2V3cml0ZSB8fCAhIWJ1cy1cdTAwM2VyZWFkX2M0NSAhPSAhIWJ1cy1cdTAwM2V3cml0ZV9jNDUpXG4gNTY1Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDU2NjpcdFxuIDU2NzpcdFx0LyogQXQgbGVhc3Qgb25lIG1ldGhvZCBpcyBtYW5kYXRvcnkgKi9cbiA1Njg6XHRcdGlmICghYnVzLVx1MDAzZXJlYWQgXHUwMDI2XHUwMDI2ICFidXMtXHUwMDNlcmVhZF9jNDUpXG4gNTY5Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDU3MDpcdFxuIDU3MTpcdFx0aWYgKGJ1cy1cdTAwM2VwYXJlbnQgXHUwMDI2XHUwMDI2IGJ1cy1cdTAwM2VwYXJlbnQtXHUwMDNlb2Zfbm9kZSlcbiA1NzI6XHRcdFx0Zndub2RlX3NldF9mbGFnKFx1MDAyNmJ1cy1cdTAwM2VwYXJlbnQtXHUwMDNlb2Zfbm9kZS1cdTAwM2Vmd25vZGUsXG4gNTczOlx0XHRcdFx0XHRGV05PREVfRkxBR19ORUVEU19DSElMRF9CT1VORF9PTl9BREQpO1xuIDU3NDpcdFxuIDU3NTpcdFx0V0FSTihidXMtXHUwMDNlc3RhdGUgIT0gTURJT0JVU19BTExPQ0FURUQgXHUwMDI2XHUwMDI2XG4gNTc2Olx0XHQgICAgIGJ1cy1cdTAwM2VzdGF0ZSAhPSBNRElPQlVTX1VOUkVHSVNURVJFRCxcbiA1Nzc6XHRcdCAgICAgXCYjMzQ7JXM6IG5vdCBpbiBBTExPQ0FURUQgb3IgVU5SRUdJU1RFUkVEIHN0YXRlXFxuXCYjMzQ7LCBidXMtXHUwMDNlaWQpO1xuIDU3ODpcdFxuIDU3OTpcdFx0YnVzLVx1MDAzZW93bmVyID0gb3duZXI7XG4gNTgwOlx0XHRidXMtXHUwMDNlZGV2LnBhcmVudCA9IGJ1cy1cdTAwM2VwYXJlbnQ7XG4gNTgxOlx0XHRidXMtXHUwMDNlZGV2LmNsYXNzID0gXHUwMDI2bWRpb19idXNfY2xhc3M7XG4gNTgyOlx0XHRidXMtXHUwMDNlZGV2Lmdyb3VwcyA9IE5VTEw7XG4gNTgzOlx0XHRkZXZfc2V0X25hbWUoXHUwMDI2YnVzLVx1MDAzZWRldiwgXCYjMzQ7JXNcJiMzNDssIGJ1cy1cdTAwM2VpZCk7XG4gNTg0Olx0XG4gNTg1Olx0XHQvKiBJZiB0aGUgYnVzIHN0YXRlIGlzIGFsbG9jYXRlZCwgd2UmIzM5O3JlIHJlZ2lzdGVyaW5nIGEgZnJlc2ggYnVzXG4gNTg2Olx0XHQgKiB0aGF0IG1heSBoYXZlIGEgZndub2RlIGFzc29jaWF0ZWQgd2l0aCBpdC4gR3JhYiBhIHJlZmVyZW5jZVxuIDU4NzpcdFx0ICogdG8gdGhlIGZ3bm9kZS4gVGhpcyB3aWxsIGJlIGRyb3BwZWQgd2hlbiB0aGUgYnVzIGlzIHJlbGVhc2VkLlxuIDU4ODpcdFx0ICogSWYgdGhlIGJ1cyB3YXMgc2V0IHRvIHVucmVnaXN0ZXJlZCwgaXQgbWVhbnMgdGhhdCB0aGUgYnVzIHdhc1xuIDU4OTpcdFx0ICogcHJldmlvdXNseSByZWdpc3RlcmVkLCBhbmQgd2UmIzM5O3ZlIGFscmVhZHkgZ3JhYmJlZCBhIHJlZmVyZW5jZS5cbiA1OTA6XHRcdCAqL1xuIDU5MTpcdFx0aWYgKGJ1cy1cdTAwM2VzdGF0ZSA9PSBNRElPQlVTX0FMTE9DQVRFRClcbiA1OTI6XHRcdFx0Zndub2RlX2hhbmRsZV9nZXQoZGV2X2Z3bm9kZShcdTAwMjZidXMtXHUwMDNlZGV2KSk7XG4gNTkzOlx0XG4gNTk0Olx0XHQvKiBXZSBuZWVkIHRvIHNldCBzdGF0ZSB0byBNRElPQlVTX1VOUkVHSVNURVJFRCB0byBjb3JyZWN0bHkgcmVsZWFzZVxuIDU5NTpcdFx0ICogdGhlIGRldmljZSBpbiBtZGlvYnVzX2ZyZWUoKVxuIDU5NjpcdFx0ICpcbiA1OTc6XHRcdCAqIFN0YXRlIHdpbGwgYmUgdXBkYXRlZCBsYXRlciBpbiB0aGlzIGZ1bmN0aW9uIGluIGNhc2Ugb2Ygc3VjY2Vzc1xuIDU5ODpcdFx0ICovXG4gNTk5Olx0XHRidXMtXHUwMDNlc3RhdGUgPSBNRElPQlVTX1VOUkVHSVNURVJFRDtcbiA2MDA6XHRcbiA2MDE6XHRcdGVyciA9IGRldmljZV9yZWdpc3RlcihcdTAwMjZidXMtXHUwMDNlZGV2KTtcbiA2MDI6XHRcdGlmIChlcnIpIHtcbiA2MDM6XHRcdFx0cHJfZXJyKFwmIzM0O21paV9idXMgJXMgZmFpbGVkIHRvIHJlZ2lzdGVyXFxuXCYjMzQ7LCBidXMtXHUwMDNlaWQpO1xuIDYwNDpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA2MDU6XHRcdH1cbiA2MDY6XHRcbiA2MDc6XHRcdG11dGV4X2luaXQoXHUwMDI2YnVzLVx1MDAzZW1kaW9fbG9jayk7XG4gNjA4Olx0XHRtdXRleF9pbml0KFx1MDAyNmJ1cy1cdTAwM2VzaGFyZWRfbG9jayk7XG4gNjA5Olx0XG4gNjEwOlx0XHQvKiBhc3NlcnQgYnVzIGxldmVsIFBIWSBHUElPIHJlc2V0ICovXG4gNjExOlx0XHRncGlvZCA9IGRldm1fZ3Bpb2RfZ2V0X29wdGlvbmFsKFx1MDAyNmJ1cy1cdTAwM2VkZXYsIFwmIzM0O3Jlc2V0XCYjMzQ7LCBHUElPRF9PVVRfSElHSCk7XG4gNjEyOlx0XHRpZiAoSVNfRVJSKGdwaW9kKSkge1xuIDYxMzpcdFx0XHRlcnIgPSBkZXZfZXJyX3Byb2JlKFx1MDAyNmJ1cy1cdTAwM2VkZXYsIFBUUl9FUlIoZ3Bpb2QpLFxuIDYxNDpcdFx0XHRcdFx0ICAgIFwmIzM0O21paV9idXMgJXMgY291bGRuJiMzOTt0IGdldCByZXNldCBHUElPXFxuXCYjMzQ7LFxuIDYxNTpcdFx0XHRcdFx0ICAgIGJ1cy1cdTAwM2VpZCk7XG4gNjE2Olx0XHRcdGRldmljZV9kZWwoXHUwMDI2YnVzLVx1MDAzZWRldik7XG4gNjE3Olx0XHRcdHJldHVybiBlcnI7XG4gNjE4Olx0XHR9IGVsc2VcdGlmIChncGlvZCkge1xuIDYxOTpcdFx0XHRidXMtXHUwMDNlcmVzZXRfZ3Bpb2QgPSBncGlvZDtcbiA2MjA6XHRcdFx0ZnNsZWVwKGJ1cy1cdTAwM2VyZXNldF9kZWxheV91cyk7XG4gNjIxOlx0XHRcdGdwaW9kX3NldF92YWx1ZV9jYW5zbGVlcChncGlvZCwgMCk7XG4gNjIyOlx0XHRcdGlmIChidXMtXHUwMDNlcmVzZXRfcG9zdF9kZWxheV91cyBcdTAwM2UgMClcbiA2MjM6XHRcdFx0XHRmc2xlZXAoYnVzLVx1MDAzZXJlc2V0X3Bvc3RfZGVsYXlfdXMpO1xuIDYyNDpcdFx0fVxuIDYyNTpcdFxuIDYyNjpcdFx0aWYgKGJ1cy1cdTAwM2VyZXNldCkge1xuIDYyNzpcdFx0XHRlcnIgPSBidXMtXHUwMDNlcmVzZXQoYnVzKTtcbiA2Mjg6XHRcdFx0aWYgKGVycilcbiA2Mjk6XHRcdFx0XHRnb3RvIGVycm9yX3Jlc2V0X2dwaW9kO1xuIDYzMDpcdFx0fVxuIDYzMTpcdFxuIDYzMjpcdFx0aWYgKGJ1cy1cdTAwM2VyZWFkKSB7XG4gNjMzOlx0XHRcdGVyciA9IG1kaW9idXNfc2Nhbl9idXNfYzIyKGJ1cyk7XG4gNjM0Olx0XHRcdGlmIChlcnIpXG4gNjM1Olx0XHRcdFx0Z290byBlcnJvcjtcbiA2MzY6XHRcdH1cbiA2Mzc6XHRcbiA2Mzg6XHRcdHByZXZlbnRfYzQ1X3NjYW4gPSBtZGlvYnVzX3ByZXZlbnRfYzQ1X3NjYW4oYnVzKTtcbiA2Mzk6XHRcbiA2NDA6XHRcdGlmICghcHJldmVudF9jNDVfc2NhbiBcdTAwMjZcdTAwMjYgYnVzLVx1MDAzZXJlYWRfYzQ1KSB7XG4gNjQxOlx0XHRcdGVyciA9IG1kaW9idXNfc2Nhbl9idXNfYzQ1KGJ1cyk7XG4gNjQyOlx0XHRcdGlmIChlcnIpXG4gNjQzOlx0XHRcdFx0Z290byBlcnJvcjtcbiA2NDQ6XHRcdH1cbiA2NDU6XHRcbiA2NDY6XHRcdGJ1cy1cdTAwM2VzdGF0ZSA9IE1ESU9CVVNfUkVHSVNURVJFRDtcbiA2NDc6XHRcdGRldl9kYmcoXHUwMDI2YnVzLVx1MDAzZWRldiwgXCYjMzQ7cHJvYmVkXFxuXCYjMzQ7KTtcbiA2NDg6XHRcdHJldHVybiAwO1xuIDY0OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwODozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjk2OQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDQzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgUEhZIERyaXZlciBQYXRoKioKCk9rYXksIHNvIEkmIzM5O3ZlIHRyYWNlZCB0aGUgcGF0aC4gYF9fbWRpb2J1c19yZWdpc3RlcmAgaXMgZGVmaW5pdGVseSB0aGUga2V5IGVudHJ5IHBvaW50IGhlcmUuIEl0IGNhbGxzIGBtZGlvYnVzX3NjYW5fYnVzX2MyMihidXMpYCwgd2hpY2ggZG9lcyBleGFjdGx5IHdoYXQgSSBleHBlY3RlZDogaXQgc2NhbnMgdGhlIE1ESU8gYnVzIGZvciBQSFlzLCBpdGVyYXRpbmcgdGhyb3VnaCBhZGRyZXNzZXMgMCB0byAzMS4gV2hlbiBpdCBmaW5kcyBzb21ldGhpbmcsIGl0IHJlZ2lzdGVycyBpdC4gRnJvbSB0aGVyZSwgdGhlIFBIWSBzdWJzeXN0ZW0gdGFrZXMgb3ZlciwgbWF0Y2hpbmcgdGhlIFBIWSBJRCBhZ2FpbnN0IGBtb3RvcmNvbW1fcGh5X2RydnNgIGFuZCB1bHRpbWF0ZWx5IHByb2JpbmcgYHl0ODgyNF9wcm9iZWAuIFNvLCB0aGVyZSYjMzk7cyBhIGdvb2Qgc2hvdCB0aGlzIGlzIHJlYWNoYWJsZSB0aHJvdWdoIFVTQiBmdXp6aW5nIQoKQnV0LCBob2xkIG9uLiBgbWRpby1tdnVzYi5jYC4uLiB0aGF0JiMzOTtzIGEgVVNCIGRyaXZlciwgaXNuJiMzOTt0IGl0PyBJIG5lZWQgdG8gY2hlY2sgdGhlIHN5emthbGxlciBjb25maWdzIHRvIHNlZSBpZiBgQ09ORklHX1VTQl9NRElPYCBvciBgQ09ORklHX01ESU9fTVZVU0JgIG9yIHNvbWV0aGluZyBzaW1pbGFyIGlzIGVuYWJsZWQuIFdhaXQsIGxldCBtZSBub3QganVtcCB0byBjb25jbHVzaW9ucy4uLiB0aGVyZSBhcmUgb3RoZXIgd2F5cyB0byByZWdpc3RlciBhbiBNRElPIGJ1cyBiZXNpZGVzIHRoYXQgZHJpdmVyLCBsaWtlIGBtZGlvLWkyYy5jYCwgYG1kaW8tZ3Bpby5jYCwgb3IgZXZlbiBhIGBmaXhlZC1waHlgLiBCdXQsIHllYWgsIHRoZSBgdmhjaWAgc3VwcG9ydCBpbiBzeXprYWxsZXIgbWFrZXMgYG1kaW8tbXZ1c2JgIGEgcGVyZmVjdGx5IHZhbGlkIHBhdGggdG8gZXhwbG9yZS4KCkFscmlnaHQsIHRpbWUgdG8gZGl2ZSBkZWVwZXIgaW50byBgeXQ4ODI0X3Byb2JlYC4gSXQgY2FsbHMgYGRldm1fb2ZfcGh5X3BhY2thZ2Vfam9pbmAsIGBwaHlfcGFja2FnZV9wcm9iZV9vbmNlYCwgYHl0ODgyNF9waHlfcGFja2FnZV9wcm9iZV9vbmNlYCwgYW5kIGBkZXZtX2t6YWxsb2NgLiBMZXQmIzM5O3MgZm9jdXMgb24gYHl0ODgyNF9waHlfcGFja2FnZV9wcm9iZV9vbmNlYCBzcGVjaWZpY2FsbHkuIEFoISBJdCYjMzk7cyByZWFkaW5nIGZyb20gdGhlIGRldmljZSB0cmVlOiBgb2ZfcHJvcGVydHlfcmVhZF9zdHJpbmcobnAsICYjMzQ7bW90b3Jjb21tLGludGVyZmFjZS1tb2RlJiMzNDssICZhbXA7aW50ZXJmYWNlX21vZGVfbmFtZSlgLiBDcnVjaWFsbHksIGBucGAgaXMgZ29pbmcgdG8gYmUgTlVMTCBmb3IgYSBVU0IgTURJTyBidXMsIGFuZCBgb2ZfcHJvcGVydHlfcmVhZF9zdHJpbmdgIHdpbGwgcmV0dXJuIGFuIGVycm9yIChwcm9iYWJseSBgLUVJTlZBTGApLiBUaW1lIHRvIGNoZWNrIGB5dDg4MjRfcGh5X3BhY2thZ2VfcHJvYmVfb25jZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA4OjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDU2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs0NTYwOlx0XHR7XG40NTYxOlx0XHRcdFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4NTMxKSxcbjQ1NjI6XHRcdFx0Lm5hbWVcdFx0PSBcJiMzNDtZVDg1MzEgR2lnYWJpdCBFdGhlcm5ldFwmIzM0OyxcbjQ1NjM6XHRcdFx0LnByb2JlXHRcdD0geXQ4NTMxX3Byb2JlLFxuNDU2NDpcdFx0XHQuY29uZmlnX2luaXRcdD0geXQ4NTMxX2NvbmZpZ19pbml0LFxuNDU2NTpcdFx0XHQuc3VzcGVuZFx0PSBnZW5waHlfc3VzcGVuZCxcbjQ1NjY6XHRcdFx0LnJlc3VtZVx0XHQ9IGdlbnBoeV9yZXN1bWUsXG40NTY3Olx0XHRcdC5nZXRfd29sXHQ9IHl0cGh5X2dldF93b2wsXG40NTY4Olx0XHRcdC5zZXRfd29sXHQ9IHl0ODUzMV9zZXRfd29sLFxuNDU2OTpcdFx0XHQubGlua19jaGFuZ2Vfbm90aWZ5ID0geXQ4NTMxX2xpbmtfY2hhbmdlX25vdGlmeSxcbjQ1NzA6XHRcdFx0LmxlZF9od19pc19zdXBwb3J0ZWQgPSB5dDg1MjFfbGVkX2h3X2lzX3N1cHBvcnRlZCxcbjQ1NzE6XHRcdFx0LmxlZF9od19jb250cm9sX3NldCA9IHl0ODUyMV9sZWRfaHdfY29udHJvbF9zZXQsXG40NTcyOlx0XHRcdC5sZWRfaHdfY29udHJvbF9nZXQgPSB5dDg1MjFfbGVkX2h3X2NvbnRyb2xfZ2V0LFxuNDU3MzpcdFx0fSxcbjQ1NzQ6XHRcdHtcbjQ1NzU6XHRcdFx0UEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg1MzFTKSxcbjQ1NzY6XHRcdFx0Lm5hbWVcdFx0PSBcJiMzNDtZVDg1MzFTIEdpZ2FiaXQgRXRoZXJuZXRcJiMzNDssXG40NTc3Olx0XHRcdC5nZXRfZmVhdHVyZXNcdD0geXQ4NTIxX2dldF9mZWF0dXJlcyxcbjQ1Nzg6XHRcdFx0LnByb2JlXHRcdD0geXQ4NTIxX3Byb2JlLFxuNDU3OTpcdFx0XHQucmVhZF9wYWdlXHQ9IHl0ODUyMV9yZWFkX3BhZ2UsXG40NTgwOlx0XHRcdC53cml0ZV9wYWdlXHQ9IHl0ODUyMV93cml0ZV9wYWdlLFxuNDU4MTpcdFx0XHQuZ2V0X3dvbFx0PSB5dHBoeV9nZXRfd29sLFxuNDU4MjpcdFx0XHQuc2V0X3dvbFx0PSB5dHBoeV9zZXRfd29sLFxuNDU4MzpcdFx0XHQuY29uZmlnX2FuZWdcdD0geXQ4NTIxX2NvbmZpZ19hbmVnLFxuNDU4NDpcdFx0XHQuYW5lZ19kb25lXHQ9IHl0ODUyMV9hbmVnX2RvbmUsXG40NTg1Olx0XHRcdC5jb25maWdfaW5pdFx0PSB5dDg1MjFfY29uZmlnX2luaXQsXG40NTg2Olx0XHRcdC5yZWFkX3N0YXR1c1x0PSB5dDg1MjFfcmVhZF9zdGF0dXMsXG40NTg3Olx0XHRcdC5zb2Z0X3Jlc2V0XHQ9IHl0ODUyMV9zb2Z0X3Jlc2V0LFxuNDU4ODpcdFx0XHQuc3VzcGVuZFx0PSB5dDg1MjFfc3VzcGVuZCxcbjQ1ODk6XHRcdFx0LnJlc3VtZVx0XHQ9IHl0ODUyMV9yZXN1bWUsXG40NTkwOlx0XHR9LFxuNDU5MTpcdFx0e1xuNDU5MjpcdFx0XHRQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODgyMSksXG40NTkzOlx0XHRcdC5uYW1lXHRcdFx0PSBcJiMzNDtZVDg4MjEgMi41R2JwcyBQSFlcJiMzNDssXG40NTk0Olx0XHRcdC5nZXRfZmVhdHVyZXNcdFx0PSB5dDg4MjFfZ2V0X2ZlYXR1cmVzLFxuNDU5NTpcdFx0XHQucmVhZF9wYWdlXHRcdD0geXQ4NTIxX3JlYWRfcGFnZSxcbjQ1OTY6XHRcdFx0LndyaXRlX3BhZ2VcdFx0PSB5dDg1MjFfd3JpdGVfcGFnZSxcbjQ1OTc6XHRcdFx0LmdldF93b2xcdFx0PSB5dHBoeV9nZXRfd29sLFxuNDU5ODpcdFx0XHQuc2V0X3dvbFx0XHQ9IHl0cGh5X3NldF93b2wsXG40NTk5Olx0XHRcdC5jb25maWdfYW5lZ1x0XHQ9IGdlbnBoeV9jb25maWdfYW5lZyxcbjQ2MDA6XHRcdFx0LmFuZWdfZG9uZVx0XHQ9IHl0ODgyMV9hbmVnX2RvbmUsXG40NjAxOlx0XHRcdC5jb25maWdfaW5pdFx0XHQ9IHl0ODgyMV9jb25maWdfaW5pdCxcbjQ2MDI6XHRcdFx0LmdldF9yYXRlX21hdGNoaW5nXHQ9IHl0ODgyMV9nZXRfcmF0ZV9tYXRjaGluZyxcbjQ2MDM6XHRcdFx0LnJlYWRfc3RhdHVzXHRcdD0geXQ4ODIxX3JlYWRfc3RhdHVzLFxuNDYwNDpcdFx0XHQuc29mdF9yZXNldFx0XHQ9IHl0ODgyMV9zb2Z0X3Jlc2V0LFxuNDYwNTpcdFx0XHQuc3VzcGVuZFx0XHQ9IHl0ODgyMV9zdXNwZW5kLFxuNDYwNjpcdFx0XHQucmVzdW1lXHRcdFx0PSB5dDg4MjFfcmVzdW1lLFxuNDYwNzpcdFx0fSxcbjQ2MDg6XHRcdHtcbjQ2MDk6XHRcdFx0UEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg4MjQpLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwODozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODk1OAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipOYXZpZ2F0aW5nIHRoZSBDb2RlYmFzZSoqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJIG5lZWQgdG8gZ2V0IG9yaWVudGVkLiBCZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gYW55dGhpbmcsIEkmIzM5O20gZ2V0dGluZyBhIHNlbnNlIHRoYXQgYHl0ODgyNF9waHlfcGFja2FnZV9wcm9iZV9vbmNlYCBpcyBnb2luZyB0byBiZSBjZW50cmFsIHRvIHVuZGVyc3RhbmRpbmcgdGhpcyBzZWN0aW9uIG9mIGNvZGUuIEkmIzM5O20gaGF2aW5nIGEgc3Ryb25nIGluc3RpbmN0IHRoYXQgc29tZXRoaW5nIGhpbmdlcyBvbiBob3cgdGhhdCBmdW5jdGlvbiBpcyBiZWluZyB1c2VkLCBvciB3aGF0IGl0cyBkZXBlbmRlbmNpZXMgYXJlLiBTbywgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGdyYXNwIGl0cyByb2xlIGFuZCBpbXBsZW1lbnRhdGlvbiBiZWZvcmUgSSBnbyBhbnkgZnVydGhlci4gSSYjMzk7bSBnb2luZyB0byB0cmFjayBpdCBkb3duIGFuZCBzZWUgZXhhY3RseSB3aGF0JiMzOTtzIGdvaW5nIG9uIHdpdGggaXQuIExldCYjMzk7cyBzZWUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDg6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0NTIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzQ1MjA6XHR9XG40NTIxOlx0XG40NTIyOlx0c3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIG1vdG9yY29tbV9waHlfZHJ2c1tdID0ge1xuNDUyMzpcdFx0e1xuNDUyNDpcdFx0XHRQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODUxMSksXG40NTI1Olx0XHRcdC5uYW1lXHRcdD0gXCYjMzQ7WVQ4NTExIEdpZ2FiaXQgRXRoZXJuZXRcJiMzNDssXG40NTI2Olx0XHRcdC5jb25maWdfaW5pdFx0PSB5dDg1MTFfY29uZmlnX2luaXQsXG40NTI3Olx0XHRcdC5zdXNwZW5kXHQ9IGdlbnBoeV9zdXNwZW5kLFxuNDUyODpcdFx0XHQucmVzdW1lXHRcdD0gZ2VucGh5X3Jlc3VtZSxcbjQ1Mjk6XHRcdFx0LnJlYWRfcGFnZVx0PSB5dDg1MTFfcmVhZF9wYWdlLFxuNDUzMDpcdFx0XHQud3JpdGVfcGFnZVx0PSB5dDg1MTFfd3JpdGVfcGFnZSxcbjQ1MzE6XHRcdH0sXG40NTMyOlx0XHR7XG40NTMzOlx0XHRcdFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4NTIxKSxcbjQ1MzQ6XHRcdFx0Lm5hbWVcdFx0PSBcJiMzNDtZVDg1MjEgR2lnYWJpdCBFdGhlcm5ldFwmIzM0OyxcbjQ1MzU6XHRcdFx0LmdldF9mZWF0dXJlc1x0PSB5dDg1MjFfZ2V0X2ZlYXR1cmVzLFxuNDUzNjpcdFx0XHQucHJvYmVcdFx0PSB5dDg1MjFfcHJvYmUsXG40NTM3Olx0XHRcdC5yZWFkX3BhZ2VcdD0geXQ4NTIxX3JlYWRfcGFnZSxcbjQ1Mzg6XHRcdFx0LndyaXRlX3BhZ2VcdD0geXQ4NTIxX3dyaXRlX3BhZ2UsXG40NTM5Olx0XHRcdC5nZXRfd29sXHQ9IHl0cGh5X2dldF93b2wsXG40NTQwOlx0XHRcdC5zZXRfd29sXHQ9IHl0cGh5X3NldF93b2wsXG40NTQxOlx0XHRcdC5jb25maWdfYW5lZ1x0PSB5dDg1MjFfY29uZmlnX2FuZWcsXG40NTQyOlx0XHRcdC5hbmVnX2RvbmVcdD0geXQ4NTIxX2FuZWdfZG9uZSxcbjQ1NDM6XHRcdFx0LmNvbmZpZ19pbml0XHQ9IHl0ODUyMV9jb25maWdfaW5pdCxcbjQ1NDQ6XHRcdFx0LnJlYWRfc3RhdHVzXHQ9IHl0ODUyMV9yZWFkX3N0YXR1cyxcbjQ1NDU6XHRcdFx0LnNvZnRfcmVzZXRcdD0geXQ4NTIxX3NvZnRfcmVzZXQsXG40NTQ2Olx0XHRcdC5zdXNwZW5kXHQ9IHl0ODUyMV9zdXNwZW5kLFxuNDU0NzpcdFx0XHQucmVzdW1lXHRcdD0geXQ4NTIxX3Jlc3VtZSxcbjQ1NDg6XHRcdFx0LmxlZF9od19pc19zdXBwb3J0ZWQgPSB5dDg1MjFfbGVkX2h3X2lzX3N1cHBvcnRlZCxcbjQ1NDk6XHRcdFx0LmxlZF9od19jb250cm9sX3NldCA9IHl0ODUyMV9sZWRfaHdfY29udHJvbF9zZXQsXG40NTUwOlx0XHRcdC5sZWRfaHdfY29udHJvbF9nZXQgPSB5dDg1MjFfbGVkX2h3X2NvbnRyb2xfZ2V0LFxuNDU1MTpcdFx0fSxcbjQ1NTI6XHRcdHtcbjQ1NTM6XHRcdFx0UEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg1MjIpLFxuNDU1NDpcdFx0XHQubmFtZVx0XHQ9IFwmIzM0O1lUODUyMiAxMDAgTWVnYWJpdCBFdGhlcm5ldFwmIzM0OyxcbjQ1NTU6XHRcdFx0LmNvbmZpZ19hbmVnXHQ9IGdlbnBoeV9jb25maWdfYW5lZyxcbjQ1NTY6XHRcdFx0LmNvbmZpZ19pbml0XHQ9IHl0ODUyMl9jb25maWdfaW5pdCxcbjQ1NTc6XHRcdFx0LnN1c3BlbmRcdD0gZ2VucGh5X3N1c3BlbmQsXG40NTU4Olx0XHRcdC5yZXN1bWVcdFx0PSBnZW5waHlfcmVzdW1lLFxuNDU1OTpcdFx0fSxcbjQ1NjA6XHRcdHtcbjQ1NjE6XHRcdFx0UEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg1MzEpLFxuNDU2MjpcdFx0XHQubmFtZVx0XHQ9IFwmIzM0O1lUODUzMSBHaWdhYml0IEV0aGVybmV0XCYjMzQ7LFxuNDU2MzpcdFx0XHQucHJvYmVcdFx0PSB5dDg1MzFfcHJvYmUsXG40NTY0Olx0XHRcdC5jb25maWdfaW5pdFx0PSB5dDg1MzFfY29uZmlnX2luaXQsXG40NTY1Olx0XHRcdC5zdXNwZW5kXHQ9IGdlbnBoeV9zdXNwZW5kLFxuNDU2NjpcdFx0XHQucmVzdW1lXHRcdD0gZ2VucGh5X3Jlc3VtZSxcbjQ1Njc6XHRcdFx0LmdldF93b2xcdD0geXRwaHlfZ2V0X3dvbCxcbjQ1Njg6XHRcdFx0LnNldF93b2xcdD0geXQ4NTMxX3NldF93b2wsXG40NTY5Olx0XHRcdC5saW5rX2NoYW5nZV9ub3RpZnkgPSB5dDg1MzFfbGlua19jaGFuZ2Vfbm90aWZ5LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwODozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDE2MQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipOYXZpZ2F0aW5nIHRoZSBDb2RlYmFzZSoqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBCZWZvcmUgSSBwcm9jZWVkIGFueSBmdXJ0aGVyIHdpdGggdGhpcyBsaW5lIG9mIGludmVzdGlnYXRpb24sIEkgbmVlZCB0byBnZXQgYSBjbGVhciB1bmRlcnN0YW5kaW5nIG9mIGB5dDg4MjRfcGh5X3BhY2thZ2VfcHJvYmVfb25jZWAuIEl0JiMzOTtzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBwcm9iZSBmdW5jdGlvbiBvcGVyYXRlcy4gSSBuZWVkIHRvIGtub3cgcHJlY2lzZWx5IHdoYXQgaXQmIzM5O3MgcmVzcG9uc2libGUgZm9yIGluaXRpYWxpemluZywgaG93IGl0IGhhbmRsZXMgdGhlIGhhcmR3YXJlIGRldGVjdGlvbiwgYW5kIHdoYXQgaXRzIG92ZXJhbGwgbGlmZWN5Y2xlIGxvb2tzIGxpa2UuIEkgY2Fubm90IG1vdmUgb24gdW50aWwgSSBoYXZlIGZ1bGx5IHVuZGVyc3Rvb2QgaG93IHRoYXQgcHJvYmUgZnVuY3Rpb24gd29ya3MuIE9ubHkgdGhlbiB3aWxsIEkgYmUgYWJsZSB0byBjb250aW51ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDg6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0NDgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzQ0ODA6XHRcdFx0XHRcdCBwaHlfbW9kZXMoUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMKSkpIHtcbjQ0ODE6XHRcdFx0XHRwcml2LVx1MDAzZWludGVyZmFjZV9tb2RlID0gUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMO1xuNDQ4MjpcdFx0XHRcdHByaXYtXHUwMDNlb2Zmc2V0ID0gSU5URVJOQUxfUEhZODgyNF9UT1BfRVhURU5EX09GRlNFVDtcbjQ0ODM6XHRcdFx0fSBlbHNlIHtcbjQ0ODQ6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjQ0ODU6XHRcdFx0fVxuNDQ4NjpcdFx0fVxuNDQ4NzpcdFx0cmV0dXJuIDA7XG40NDg4Olx0fVxuNDQ4OTpcdFxuNDQ5MDpcdC8qKlxuNDQ5MTpcdCAqIHl0ODgyNF9wcm9iZSgpIC0gcGh5ODgyNCBwcm9iZS5cbjQ0OTI6XHQgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuNDQ5MzpcdCAqXG40NDk0Olx0ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG40NDk1Olx0ICovXG40NDk2Olx0c3RhdGljIGludCB5dDg4MjRfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbjQ0OTc6XHR7XG40NDk4Olx0XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXY7XG40NDk5Olx0XHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpzaGFyZWRfcHJpdjtcbjQ1MDA6XHRcdHN0cnVjdCB5dDg1MjFfcHJpdiAqcHJpdjtcbjQ1MDE6XHRcdGludCByZXQ7XG40NTAyOlx0XG40NTAzOlx0XHRyZXQgPSBkZXZtX29mX3BoeV9wYWNrYWdlX2pvaW4oZGV2LCBwaHlkZXYsIHNpemVvZigqc2hhcmVkX3ByaXYpKTtcbjQ1MDQ6XHRcdGlmIChyZXQpXG40NTA1Olx0XHRcdHJldHVybiByZXQ7XG40NTA2Olx0XG40NTA3Olx0XHRpZiAocGh5X3BhY2thZ2VfcHJvYmVfb25jZShwaHlkZXYpKSB7XG40NTA4Olx0XHRcdHJldCA9IHl0ODgyNF9waHlfcGFja2FnZV9wcm9iZV9vbmNlKHBoeWRldik7XG40NTA5Olx0XHRcdGlmIChyZXQpXG40NTEwOlx0XHRcdFx0cmV0dXJuIHJldDtcbjQ1MTE6XHRcdH1cbjQ1MTI6XHRcbjQ1MTM6XHRcdHByaXYgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTtcbjQ1MTQ6XHRcdGlmICghcHJpdilcbjQ1MTU6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG40NTE2Olx0XG40NTE3Olx0XHRwaHlkZXYtXHUwMDNlcHJpdiA9IHByaXY7XG40NTE4Olx0XG40NTE5Olx0XHRyZXR1cm4gMDtcbjQ1MjA6XHR9XG40NTIxOlx0XG40NTIyOlx0c3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIG1vdG9yY29tbV9waHlfZHJ2c1tdID0ge1xuNDUyMzpcdFx0e1xuNDUyNDpcdFx0XHRQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODUxMSksXG40NTI1Olx0XHRcdC5uYW1lXHRcdD0gXCYjMzQ7WVQ4NTExIEdpZ2FiaXQgRXRoZXJuZXRcJiMzNDssXG40NTI2Olx0XHRcdC5jb25maWdfaW5pdFx0PSB5dDg1MTFfY29uZmlnX2luaXQsXG40NTI3Olx0XHRcdC5zdXNwZW5kXHQ9IGdlbnBoeV9zdXNwZW5kLFxuNDUyODpcdFx0XHQucmVzdW1lXHRcdD0gZ2VucGh5X3Jlc3VtZSxcbjQ1Mjk6XHRcdFx0LnJlYWRfcGFnZVx0PSB5dDg1MTFfcmVhZF9wYWdlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwODozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTA4OQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkLCBpbiB0aGUgZmlyc3QgcGVyc29uIGFuZCB0YXJnZXRlZCB0b3dhcmRzIGFuIGV4cGVydDoKCioqQW5hbHl6aW5nIHRoZSBQcm9iZSBSb3V0aW5lOiB5dDg4MjRfcGh5X3BhY2thZ2VfcHJvYmVfb25jZSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYHl0ODgyNF9waHlfcGFja2FnZV9wcm9iZV9vbmNlYCByb3V0aW5lLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGNvbXBsZXRlbHkuIEkmIzM5O20gZ29pbmcgdG8gY2FyZWZ1bGx5IHJlYWQgZXZlcnkgbGluZSwgYmVjYXVzZSBhIHByb2JlIGZ1bmN0aW9uIGNhbiBiZSBhIGNyaXRpY2FsIHBvaW50IG9mIGZhaWx1cmUgb3Igc3VjY2VzcyB3aGVuIGRlYWxpbmcgd2l0aCBQSFkgaW5pdGlhbGl6YXRpb24gYW5kIGJyaW5ndXAuIEnigJlsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZToKCiogICAqKkluaXRpYWxpemF0aW9uIFNlcXVlbmNlOioqIEhvdyBkb2VzIGl0IGFjdHVhbGx5IGRldGVjdCBhbmQgY29uZmlndXJlIHRoZSBQSFk/IElzIGl0IHVzaW5nIGEgc3RhbmRhcmQgTUlJL0dNSUkgaW50ZXJmYWNlLCBvciBhcmUgdGhlcmUgY3VzdG9tIHJlZ2lzdGVyIGFjY2VzcyBwYXR0ZXJucz8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGluaXRpYWwgYXNzdW1wdGlvbnMuCiogICAqKkRldmljZSBJZGVudGlmaWNhdGlvbjoqKiBXaGF0JiMzOTtzIHRoZSBkZXRlY3Rpb24gbWVjaGFuaXNtPyBEb2VzIGl0IHJlbHkgb24gYSBzcGVjaWZpYyBQSFkgSUQgb3IgYXV0b25lZ290aWF0aW9uIHBhcmFtZXRlcnM/IEFyZSB0aGVyZSBhbnkgaGFyZGNvZGVkIGFzc3VtcHRpb25zIGFib3V0IHRoZSBQSFkgdHlwZSwgb3IgaXMgaXQgbW9yZSByb2J1c3Q/CiogICAqKkVycm9yIEhhbmRsaW5nOioqIFdoYXQgaGFwcGVucyBpZiB0aGUgcHJvYmUgZmFpbHM/IEFyZSB0aGVyZSByZXRyaWVzPyBBcmUgdGhlcmUgZmFsbGJhY2sgbWVjaGFuaXNtcywgb3IgZG9lcyBpdCBzaW1wbHkgcmV0dXJuIGFuIGVycm9yPyBUaGUgZXJyb3IgaGFuZGxpbmcgaXMga2V5LCBlc3BlY2lhbGx5IGluIGNvbXBsZXggZW52aXJvbm1lbnRzIHdoZXJlIFBIWXMgY2FuIGJlIHVucmVsaWFibGUgb3IgcmVxdWlyZSBzcGVjaWZpYyBjbG9ja2luZy4KKiAgICoqQ2xvY2tpbmc6KiogSXMgdGhlIGNsb2NraW5nIGNvbmZpZ3VyYXRpb24gaGFuZGxlZCBoZXJlPyBPciBpcyB0aGF0IGRlbGVnYXRlZCBlbHNld2hlcmU/IFVuZGVyc3RhbmRpbmcgdGhlIGNsb2NraW5nIHJlbGF0aW9uc2hpcHMgaXMgKmNydWNpYWwqIGZvciBzdGFibGUgb3BlcmF0aW9uLiBJbXByb3BlciBjbG9jayBjb25maWd1cmF0aW9uIGlzIGEgY29tbW9uIHJvb3QgY2F1c2UuCiogICAqKlJlZ2lzdGVyIENvbmZpZ3VyYXRpb246KiogV2hhdCByZWdpc3RlcnMgYXJlIGJlaW5nIHJlYWQgYW5kIHdyaXR0ZW4gdG8gZHVyaW5nIHRoZSBwcm9iZT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGludGVudCBvZiBlYWNoIHJlZ2lzdGVyIGFjY2VzcyDigJMgd2hhdCBhcmUgd2UgdHJ5aW5nIHRvIGFjaGlldmU/CiogICAqKkRlcGVuZGVuY2llczoqKiBEb2VzIHRoaXMgcm91dGluZSBoYXZlIGFueSBkZXBlbmRlbmNpZXMgb24gb3RoZXIgZnVuY3Rpb25zIG9yIGRhdGEgc3RydWN0dXJlcz8gQXJlIHRoZXJlIGFueSBnbG9iYWwgdmFyaWFibGVzIHRoYXQgaXQgcmVsaWVzIG9uLCBvciBkb2VzIGl0IGNhbGwgb3RoZXIgZnVuY3Rpb25zIHRoYXQgSSBuZWVkIHRvIGludmVzdGlnYXRlIGFzIHdlbGw/CiogICAqKkhhcmR3YXJlIEFic3RyYWN0aW9uOioqIEhvdyBhYnN0cmFjdGVkIGlzIHRoZSBoYXJkd2FyZT8gSXMgaXQgdXNpbmcgYSBnZW5lcmljIE1JSS9HTUlJIGRyaXZlciwgb3IgYXJlIHRoZXJlIGRldmljZS1zcGVjaWZpYyByZWdpc3RlciBkZWZpbml0aW9ucyBhbmQgYWNjZXNzIG1ldGhvZHMgZGlyZWN0bHkgY29kZWQgaGVyZT8gVGhpcyB3aWxsIGluZm9ybSBob3cgcG9ydGFibGUgdGhlIGRlc2lnbiBpcy4KKiAgICoqUmVzb3VyY2UgQWxsb2NhdGlvbjoqKiBEb2VzIGl0IGFsbG9jYXRlIGFueSByZXNvdXJjZXM/IFRoaXMgbWF0dGVycyB0byBlbnN1cmUgaXTigJlzIG9wZXJhdGluZyB3aXRoIGFkZXF1YXRlIG1lbW9yeSBzcGFjZS4KCkkmIzM5O20gZXNzZW50aWFsbHkgcmV2ZXJzZS1lbmdpbmVlcmluZyB0aGUgaW50ZW5kZWQgYmVoYXZpb3IgdG8gYnVpbGQgYSBjb21wcmVoZW5zaXZlIG1lbnRhbCBtb2RlbC4gSSB3YW50IHRvIGJ1aWxkIGEgcm9jay1zb2xpZCB1bmRlcnN0YW5kaW5nIG9mIHdoYXQgdGhlIGZ1bmN0aW9uICpzaG91bGQqIGRvLCAqd2lsbCogZG8sIGFuZCAqbWlnaHQqIGRvIHVuZGVyIHZhcmlvdXMgY29uZGl0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDg6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0NDUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzQ0NTA6XHRcdFx0XHRcdCAgICAgTURJT19BTl8xMEdCVF9DVFJMX0FEVjJfNUcsXG40NDUxOlx0XHRcdFx0XHQgICAgIHBoeV9jdHJsKTtcbjQ0NTI6XHRcdGlmIChyZXQgXHUwMDNjIDApXG40NDUzOlx0XHRcdHJldHVybiByZXQ7XG40NDU0Olx0XG40NDU1Olx0XHRyZXR1cm4gZ2VucGh5X2NvbmZpZ19hbmVnKHBoeWRldik7XG40NDU2Olx0fVxuNDQ1NzpcdFxuNDQ1ODpcdC8qKlxuNDQ1OTpcdCAqIHl0ODgyNF9waHlfcGFja2FnZV9wcm9iZV9vbmNlKCkgIC0gaW5pdCBwaHkgcGFja2V0IGZvciBwaHk4ODI0LlxuNDQ2MDpcdCAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG40NDYxOlx0ICpcbjQ0NjI6XHQgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbjQ0NjM6XHQgKi9cbjQ0NjQ6XHRzdGF0aWMgaW50IHl0ODgyNF9waHlfcGFja2FnZV9wcm9iZV9vbmNlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG40NDY1Olx0e1xuNDQ2NjpcdFx0c3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XG40NDY3Olx0XHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gcGh5X3BhY2thZ2VfZ2V0X25vZGUocGh5ZGV2KTtcbjQ0Njg6XHRcdGNvbnN0IGNoYXIgKmludGVyZmFjZV9tb2RlX25hbWU7XG40NDY5Olx0XG40NDcwOlx0XHRwcml2LVx1MDAzZWludGVyZmFjZV9tb2RlID0gUEhZX0lOVEVSRkFDRV9NT0RFX05BO1xuNDQ3MTpcdFx0cHJpdi1cdTAwM2VvZmZzZXQgPSBJTlRFUk5BTF9QSFk4ODI0X1RPUF9FWFRFTkRfT0ZGU0VUO1xuNDQ3MjpcdFx0aWYgKCFvZl9wcm9wZXJ0eV9yZWFkX3N0cmluZyhucCwgXCYjMzQ7bW90b3Jjb21tLGludGVyZmFjZS1tb2RlXCYjMzQ7LFxuNDQ3MzpcdFx0XHRcdFx0ICAgICBcdTAwMjZpbnRlcmZhY2VfbW9kZV9uYW1lKSkge1xuNDQ3NDpcdFx0XHRpZiAoIXN0cmNhc2VjbXAoaW50ZXJmYWNlX21vZGVfbmFtZSxcbjQ0NzU6XHRcdFx0XHRcdHBoeV9tb2RlcyhQSFlfSU5URVJGQUNFX01PREVfVVNYR01JSSkpKSB7XG40NDc2Olx0XHRcdFx0cHJpdi1cdTAwM2VpbnRlcmZhY2VfbW9kZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9VU1hHTUlJO1xuNDQ3NzpcdFx0XHRcdHByaXYtXHUwMDNlb2Zmc2V0ID0gRVhURVJOQUxfUEhZODgyNF9UT1BfRVhURU5EX09GRlNFVDtcbjQ0Nzg6XHRcdFx0fSBlbHNlIGlmICghc3RyY2FzZWNtcFxuNDQ3OTpcdFx0XHRcdFx0KGludGVyZmFjZV9tb2RlX25hbWUsXG40NDgwOlx0XHRcdFx0XHQgcGh5X21vZGVzKFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTCkpKSB7XG40NDgxOlx0XHRcdFx0cHJpdi1cdTAwM2VpbnRlcmZhY2VfbW9kZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTDtcbjQ0ODI6XHRcdFx0XHRwcml2LVx1MDAzZW9mZnNldCA9IElOVEVSTkFMX1BIWTg4MjRfVE9QX0VYVEVORF9PRkZTRVQ7XG40NDgzOlx0XHRcdH0gZWxzZSB7XG40NDg0Olx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG40NDg1Olx0XHRcdH1cbjQ0ODY6XHRcdH1cbjQ0ODc6XHRcdHJldHVybiAwO1xuNDQ4ODpcdH1cbjQ0ODk6XHRcbjQ0OTA6XHQvKipcbjQ0OTE6XHQgKiB5dDg4MjRfcHJvYmUoKSAtIHBoeTg4MjQgcHJvYmUuXG40NDkyOlx0ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbjQ0OTM6XHQgKlxuNDQ5NDpcdCAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuNDQ5NTpcdCAqL1xuNDQ5NjpcdHN0YXRpYyBpbnQgeXQ4ODI0X3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG40NDk3Olx0e1xuNDQ5ODpcdFx0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2O1xuNDQ5OTpcdFx0c3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqc2hhcmVkX3ByaXY7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA4OjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyNDk3CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTU3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRHJpdmVyIFByb2JlIExvZ2ljKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGRyaXZlciYjMzk7cyBwcm9iZSBmdW5jdGlvbi4gSXQgc2VlbXMgbGlrZSB0aGUgY29yZSBsb2dpYyByZXZvbHZlcyBhcm91bmQgcmVhZGluZyBhIHN0cmluZyBwcm9wZXJ0eSBmcm9tIHRoZSBkZXZpY2UgdHJlZSB1c2luZyBgb2ZfcHJvcGVydHlfcmVhZF9zdHJpbmdgLiBUaGUga2V5IGlzIHRoYXQgdGhpcyBmdW5jdGlvbiByZXR1cm5zIGAtRUlOVkFMYCB3aGVuIHRoZSBwcm9wZXJ0eSBpc24mIzM5O3QgcHJlc2VudC4gQW5kIHRoZSBjb2RlIGlzIHVzaW5nIHRoZSBpbnZlcnNlIGxvZ2ljOiBgIW9mX3Byb3BlcnR5X3JlYWRfc3RyaW5nYC4gU28sIHdoZW4gdGhlIHByb3BlcnR5IGlzICptaXNzaW5nKiwgdGhlIGZ1bmN0aW9uICpyZXR1cm5zKiBgLUVJTlZBTGAsIG1ha2luZyB0aGUgKnJlc3VsdCBvZiB0aGUgZXhwcmVzc2lvbiBmYWxzZSohIFRoZW4sIHRoZSBjb2RlIGltbWVkaWF0ZWx5IHJldHVybnMgMCwgaW5kaWNhdGluZyBhIHN1Y2Nlc3NmdWwgcHJvYmUuCgpUaGlzIGFsc28gYXBwbGllcyB3aGVuIHRoZSBub2RlIHBvaW50ZXIsIGBucGAsIGlzIE5VTEwuIGBvZl9wcm9wZXJ0eV9yZWFkX3N0cmluZ2Agc3RpbGwgcmV0dXJucyBgLUVJTlZBTGAuIFRoZSBjb25kaXRpb25hbCBzdGF0ZW1lbnQgaXMgdGhlbiBmYWxzZS4gVGhlIHByb2JlIHdpbGwgYXBwZWFyIHN1Y2Nlc3NmdWwgYXMgd2VsbC4gCgpUaGUgaW50ZXJlc3RpbmcgcGFydCBpcyBob3cgdGhpcyBhYnNlbmNlIGlzIGhhbmRsZWQuIEl0IHNlZW1zIHRoYXQgaWYgdGhlIHN0cmluZyBwcm9wZXJ0eSBpcyBtaXNzaW5nLCB0aGUgY29kZSBkZWZhdWx0cyBgcHJpdi0mZ3Q7aW50ZXJmYWNlX21vZGVgIHRvIGBQSFlfSU5URVJGQUNFX01PREVfTkFgIGFuZCBzZXRzIGBwcml2LSZndDtvZmZzZXRgIHRvIGBJTlRFUk5BTF9QSFk4ODI0X1RPUF9FWFRFTkRfT0ZGU0VUYC4gVGhpcyBwcm9iYWJseSBtZWFucyB0aGUgZHJpdmVyIGlzIHNldCB1cCB0byB1c2UgZGVmYXVsdCBjb25maWd1cmF0aW9uIHZhbHVlcy4gVWx0aW1hdGVseSwgYHl0ODgyNF9jb25maWdfaW5pdGAgd2lsbCBzdGlsbCBiZSBjYWxsZWQuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhhdCBmdW5jdGlvbiB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIGJlaGF2ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA4OjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTEzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMTMwOlx0XHRcdHJldHVybiByZXQ7XG4xMTMxOlx0XG4xMTMyOlx0XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMGY4LCAweGIzZmYpO1xuMTEzMzpcdFx0aWYgKHJldCBcdTAwM2MgMClcbjExMzQ6XHRcdFx0cmV0dXJuIHJldDtcbjExMzU6XHRcbjExMzY6XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAwNTksIDB4NDA0MCk7XG4xMTM3Olx0XHRpZiAocmV0IFx1MDAzYyAwKVxuMTEzODpcdFx0XHRyZXR1cm4gcmV0O1xuMTEzOTpcdFxuMTE0MDpcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDMyYywgMHg1MDk0KTtcbjExNDE6XHRcdGlmIChyZXQgXHUwMDNjIDApXG4xMTQyOlx0XHRcdHJldHVybiByZXQ7XG4xMTQzOlx0XG4xMTQ0Olx0XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzJkLCAweGQwOTQpO1xuMTE0NTpcdFx0aWYgKHJldCBcdTAwM2MgMClcbjExNDY6XHRcdFx0cmV0dXJuIHJldDtcbjExNDc6XHRcbjExNDg6XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzMmUsIDB4NTMwOCk7XG4xMTQ5Olx0XHRpZiAocmV0IFx1MDAzYyAwKVxuMTE1MDpcdFx0XHRyZXR1cm4gcmV0O1xuMTE1MTpcdFxuMTE1MjpcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDMyMiwgMHg2NDQwKTtcbjExNTM6XHRcdGlmIChyZXQgXHUwMDNjIDApXG4xMTU0Olx0XHRcdHJldHVybiByZXQ7XG4xMTU1Olx0XG4xMTU2Olx0XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNGQzLCAweDUyMjApO1xuMTE1NzpcdFx0aWYgKHJldCBcdTAwM2MgMClcbjExNTg6XHRcdFx0cmV0dXJuIHJldDtcbjExNTk6XHRcbjExNjA6XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0ZDIsIDB4NTIyMCk7XG4xMTYxOlx0XHRpZiAocmV0IFx1MDAzYyAwKVxuMTE2MjpcdFx0XHRyZXR1cm4gcmV0O1xuMTE2MzpcdFxuMTE2NDpcdFx0Lyogb3B0aW1pemVkIEVNQyBDUyAqL1xuMTE2NTpcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDBjOCwgMHhmZmZmKTtcbjExNjY6XHRcdGlmIChyZXQgXHUwMDNjIDApXG4xMTY3Olx0XHRcdHJldHVybiByZXQ7XG4xMTY4Olx0XG4xMTY5Olx0XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMGJlLCAweDY0MDYpO1xuMTE3MDpcdFx0aWYgKHJldCBcdTAwM2MgMClcbjExNzE6XHRcdFx0cmV0dXJuIHJldDtcbjExNzI6XHRcbjExNzM6XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzN2EsIDB4NDBmZik7XG4xMTc0Olx0XHRpZiAocmV0IFx1MDAzYyAwKVxuMTE3NTpcdFx0XHRyZXR1cm4gcmV0O1xuMTE3NjpcdFxuMTE3NzpcdFx0Lyogb3B0aW1pemVkIEVNQyBSRSAqL1xuMTE3ODpcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ4MiwgMHhmZmZmKTtcbjExNzk6XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA4OjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzODQ3CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBDb25maWd1cmF0aW9uIEluaXRpYWxpemF0aW9uKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhpcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gdGhlIGB5dDg4MjRfY29uZmlnX2luaXRgIGZ1bmN0aW9uLiBJdCYjMzk7cyB0aGUgc3RhcnRpbmcgcG9pbnQsIHRoZSBmb3VuZGF0aW9uLCBzbyB0byBzcGVhay4gVW5kZXJzdGFuZGluZyBpdHMgYmVoYXZpb3IgaXMgY3JpdGljYWwgYmVmb3JlIEkgbW92ZSBhbnkgZnVydGhlci4gV2hhdCYjMzk7cyBpdCBkb2luZz8gSXMgaXQgaGFuZGxpbmcgdGhlIGJhc2UgcmVnaXN0ZXIgc2V0dXA/IERvZXMgaXQgY2FsbCBhbnkgc3VwcG9ydGluZyBmdW5jdGlvbnMsIGFuZCBpZiBzbywgd2hhdCBhcmUgdGhleSBkb2luZyBiZWhpbmQgdGhlIHNjZW5lcz8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIHBvdGVudGlhbCBpc3N1ZXMsIGxpa2UgbWlzc2VkIGJvdW5kYXJ5IGNoZWNrcyBvciBpbXByb3Blcmx5IGluaXRpYWxpemVkIGRhdGEgc3RydWN0dXJlcywgcmlnaHQgb2ZmIHRoZSBiYXQ/IFRoaXMgaXMgd2hlcmUgZXZlcnl0aGluZyBnZXRzIHNldCB1cDsgaWYgdGhlcmUmIzM5O3MgYSBwcm9ibGVtIGhlcmUsIGl0JiMzOTtsbCBjYXNjYWRlIGFuZCBjYXVzZSBzaWduaWZpY2FudCBkb3duc3RyZWFtIHByb2JsZW1zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwODozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE0MTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTQxMDpcdFx0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbjE0MTE6XHRcbjE0MTI6XHRcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGFmLCAweDQ1ZTcpO1xuMTQxMzpcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuMTQxNDpcdFx0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbjE0MTU6XHRcbjE0MTY6XHRcdFx0LyogcmVzdGFydCBjYWxpYnJhdGlvbiAqL1xuMTQxNzpcdFx0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAwMDMsIDB4NTYwMyk7XG4xNDE4Olx0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4xNDE5Olx0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuMTQyMDpcdFxuMTQyMTpcdFx0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OTIsIDB4N2ZmZik7XG4xNDIyOlx0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4xNDIzOlx0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuMTQyNDpcdFxuMTQyNTpcdFx0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OTIsIDB4N2Y3Zik7XG4xNDI2Olx0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4xNDI3Olx0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuMTQyODpcdFxuMTQyOTpcdFx0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDIwMDAsIDB4MDA0MCk7XG4xNDMwOlx0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4xNDMxOlx0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuMTQzMjpcdFxuMTQzMzpcdFx0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDIwMDAsIDB4MDAwMCk7XG4xNDM0Olx0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4xNDM1Olx0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuMTQzNjpcdFx0fVxuMTQzNzpcdFxuMTQzODpcdFx0LyogVFggcHJlYW1ibGUgcGFkZGVkIHRvIDg7IFJYIElQRyBhbHdheXMgXHUwMDNlIDggKi9cbjE0Mzk6XHRcdHJldCA9IF9fcGh5X3JlYWQocGh5ZGV2LCBNSUlfUkVTVjEpO1xuMTQ0MDpcdFx0aWYgKHJldCBcdTAwM2MgMClcbjE0NDE6XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuMTQ0MjpcdFx0cmV0IFx1MDAyNj0gfllUODgyNF9TRFNfQ0ZHX01JTl9QUkVfTUFTSztcbjE0NDM6XHRcdHJldCB8PSBZVDg4MjRfU0RTX1RYX1BSRV9QQURESU5HO1xuMTQ0NDpcdFx0cmV0IHw9IFlUODgyNF9TRFNfRU5fRklMTF9QUkU7XG4xNDQ1Olx0XHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIE1JSV9SRVNWMSwgcmV0KTtcbjE0NDY6XHRcdGlmIChyZXQgXHUwMDNjIDApXG4xNDQ3Olx0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbjE0NDg6XHRcbjE0NDk6XHRcdGRhdGEgPSBfX3BoeV9yZWFkKHBoeWRldiwgTUlJX0JNQ1IpO1xuMTQ1MDpcdFx0aWYgKGRhdGEgXHUwMDNjIDApXG4xNDUxOlx0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbjE0NTI6XHRcdGRhdGEgfD0gQk1DUl9SRVNFVDtcbjE0NTM6XHRcdGRhdGEgfD0gQk1DUl9BTkVOQUJMRTtcbjE0NTQ6XHRcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgTUlJX0JNQ1IsIGRhdGEpO1xuMTQ1NTpcdFx0aWYgKHJldCBcdTAwM2MgMClcbjE0NTY6XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuMTQ1NzpcdFxuMTQ1ODpcdGVycl9yZXN0b3JlX3BhZ2U6XG4xNDU5Olx0XHRyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwODozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDkxOAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipOYXZpZ2F0aW5nIHRoZSBDb2RlYmFzZSoqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJIG5lZWQgdG8gZ2V0IG15IGJlYXJpbmdzIGhlcmUuIEkmIzM5O20gd29ya2luZyBvbiBzb21ldGhpbmcsIGFuZCB0aGUga2V5IGZ1bmN0aW9uIEkmIzM5O20gbG9va2luZyBmb3IgaXMgYHl0ODgyNF9jb25maWdfaW5pdGAuIEl0JiMzOTtzIGNydWNpYWwsIHNvIEkgbmVlZCB0byB0cmFjayBkb3duIGV4YWN0bHkgd2hlcmUgaXQmIzM5O3MgZGVmaW5lZCBhbmQgaG93IGl0JiMzOTtzIGJlaW5nIGNhbGxlZC4gSSYjMzk7bSBnb2luZyB0byBoYXZlIHRvIGRpdmUgaW50byB0aGUgY29kZWJhc2UgYW5kIHF1aWNrbHkgbG9jYXRlIHRoYXQgc3BlY2lmaWMgZnVuY3Rpb24uIFRoaXMgaW5pdGlhbGl6YXRpb24gaXMgbGlrZWx5IHRoZSBiYWNrYm9uZSBmb3Igd2hhdGV2ZXIgSSYjMzk7bSB0cm91Ymxlc2hvb3RpbmcsIGRlYnVnZ2luZywgb3IgZXh0ZW5kaW5nIHJpZ2h0IG5vdy4gTGV0JiMzOTtzIHNlZSBpZiBJIGNhbiBmaW5kIGl0IHF1aWNrbHkuIFRpbWUgdG8gbmF2aWdhdGUgdGhlIGNvZGUhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA4OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3l0ODgyNF9jb25maWdfaW5pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmM9MTQ2OT1zdGF0aWMgaW50IHl0ODgyNF9pbnRlcm5hbF9jb25maWdfaW5pdF9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYy0xNjg1LS8qKlxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jOjE2ODY6ICogeXQ4ODI0X2NvbmZpZ19pbml0KCkgLSBwaHkgaW5pdGlhbGl6YXRpb2luXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMtMTY4Ny0gKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYy0xNjkwLSAqL1xuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jOjE2OTE6c3RhdGljIGludCB5dDg4MjRfY29uZmlnX2luaXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYy0xNjkyLXtcbi0tXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmM9NDUyMj1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgbW90b3Jjb21tX3BoeV9kcnZzW10gPSB7XG4tLVxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLTQ2MTYtXHRcdC5hbmVnX2RvbmVcdFx0PSB5dDg4MjRfYW5lZ19kb25lLFxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jOjQ2MTc6XHRcdC5jb25maWdfaW5pdFx0XHQ9IHl0ODgyNF9jb25maWdfaW5pdCxcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYy00NjE4LVx0XHQucmVhZF9zdGF0dXNcdFx0PSB5dDg4MjRfcmVhZF9zdGF0dXMsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA4OjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ1NDcyCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUgd2UgZ28uLi4KCioqSW5pdGlhbCBBc3Nlc3NtZW50OiBEaXZpbmcgaW50byBgeXQ4ODI0X2NvbmZpZ19pbml0YCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoZWFkIGluIHRoaXMgY29kZS4gTGV0JiMzOTtzIHNlZSwgdGhlIGZpbGUgbmFtZSBhbHJlYWR5IHN1Z2dlc3RzIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggY29uZmlndXJhdGlvbiBpbml0aWFsaXphdGlvbiwgc3BlY2lmaWNhbGx5IGZvciBzb21ldGhpbmcgcmVsYXRlZCB0byBgeXQ4ODI0YC4gVGhhdCBsaWtlbHkgcG9pbnRzIHRvIGEgcGFydGljdWxhciBoYXJkd2FyZSBjb21wb25lbnQgb3IgZHJpdmVyLCBwb3NzaWJseSB2aWRlbyBvciBuZXR3b3JrLXJlbGF0ZWQuIE15IG1pbmQgaW1tZWRpYXRlbHkgc3RhcnRzIHJ1bm5pbmcgdGhyb3VnaCB0aGUgdHlwaWNhbCBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZXMgSSYjMzk7dmUgd29ya2VkIHdpdGggYmVmb3JlLiBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBvcmRlciBvZiBvcGVyYXRpb25zOiByZWdpc3RlciBzZXR1cCwgbWVtb3J5IGFsbG9jYXRpb24gKGlmIHJlbGV2YW50KSwgcGVyaGFwcyBzb21lIGRldmljZSBkZXRlY3Rpb24gYW5kIHZhbGlkYXRpb24sIGFuZCBkZWZpbml0ZWx5IHRoZSBwYXJzaW5nIGFuZCBsb2FkaW5nIG9mIHNvbWUga2luZCBvZiBjb25maWd1cmF0aW9uIGRhdGEuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgYSBzZXJpZXMgb2YgZnVuY3Rpb24gY2FsbHMsIHBvdGVudGlhbGx5IG5lc3RlZCwgdGhhdCBoYW5kbGUgdGhlc2UgdGFza3MuIEkmIzM5O2xsIGJlIGtlZXBpbmcgYW4gZXllIG91dCBmb3IgYW55IGVycm9yIGhhbmRsaW5nLCBwYXJ0aWN1bGFybHkgYXJvdW5kIHJlc291cmNlIGFsbG9jYXRpb24gYW5kIGNvbmZpZyBmaWxlIHBhcnNpbmcuIFRoYXQmIzM5O3MgdXN1YWxseSB3aGVyZSB0aGUgc3VidGxlIGJ1Z3MgbGlrZSB0byBoaWRlISBMZXQmIzM5O3MgZ2V0IHJlYWRpbmcgYW5kIHNlZSB3aGF0IHdlJiMzOTt2ZSBnb3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA4OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTY4NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNjg1Olx0LyoqXG4xNjg2Olx0ICogeXQ4ODI0X2NvbmZpZ19pbml0KCkgLSBwaHkgaW5pdGlhbGl6YXRpb2luXG4xNjg3Olx0ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbjE2ODg6XHQgKlxuMTY4OTpcdCAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuMTY5MDpcdCAqL1xuMTY5MTpcdHN0YXRpYyBpbnQgeXQ4ODI0X2NvbmZpZ19pbml0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4xNjkyOlx0e1xuMTY5MzpcdFx0aW50IHJldDtcbjE2OTQ6XHRcbjE2OTU6XHRcdGlmIChwaHlkZXYtXHUwMDNlaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTCkge1xuMTY5NjpcdFx0XHRyZXQgPSB5dDg4MjRfaW50ZXJuYWxfY29uZmlnX2luaXRfcGFnZWQocGh5ZGV2KTtcbjE2OTc6XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbjE2OTg6XHRcdFx0XHRyZXR1cm4gcmV0O1xuMTY5OTpcdFx0fSBlbHNlIHtcbjE3MDA6XHRcdFx0cmV0ID0geXQ4ODI0X2V4dGVybl9jb25maWdfdXRwX2luaXRfcGFnZWQocGh5ZGV2KTtcbjE3MDE6XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbjE3MDI6XHRcdFx0XHRyZXR1cm4gcmV0O1xuMTcwMzpcdFx0XHRyZXQgPSB5dDg4MjRfZXh0ZXJuX2NvbmZpZ19zZHNfaW5pdF9wYWdlZChwaHlkZXYpO1xuMTcwNDpcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuMTcwNTpcdFx0XHRcdHJldHVybiByZXQ7XG4xNzA2Olx0XHR9XG4xNzA3Olx0XHRyZXQgPSB5dDg4MjRfc29mdF9yZXNldChwaHlkZXYpO1xuMTcwODpcdFx0aWYgKHJldCBcdTAwM2MgMClcbjE3MDk6XHRcdFx0cmV0dXJuIHJldDtcbjE3MTA6XHRcbjE3MTE6XHRcdHBoeWRldl9kYmcocGh5ZGV2LCBcJiMzNDslcyBkb25lLCBwaHkgYWRkcjogJWRcXG5cJiMzNDssXG4xNzEyOlx0XHRcdCAgIF9fZnVuY19fLCBwaHlkZXYtXHUwMDNlbWRpby5hZGRyKTtcbjE3MTM6XHRcbjE3MTQ6XHRcdHJldHVybiAwO1xuMTcxNTpcdH1cbjE3MTY6XHRcbjE3MTc6XHRzdGF0aWMgaW50IHl0ODUzMV9zZXRfd29sKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG4xNzE4Olx0XHRcdFx0ICBzdHJ1Y3QgZXRodG9vbF93b2xpbmZvICp3b2wpXG4xNzE5Olx0e1xuMTcyMDpcdFx0Y29uc3QgdTE2IG1hY19hZGRyX3JlZ1tdID0ge1xuMTcyMTpcdFx0XHRZVFBIWV9XT0xfTUFDQUREUjJfUkVHLFxuMTcyMjpcdFx0XHRZVFBIWV9XT0xfTUFDQUREUjFfUkVHLFxuMTcyMzpcdFx0XHRZVFBIWV9XT0xfTUFDQUREUjBfUkVHLFxuMTcyNDpcdFx0fTtcbjE3MjU6XHRcdGNvbnN0IHU4ICptYWNfYWRkcjtcbjE3MjY6XHRcdHUxNiBtYXNrLCB2YWw7XG4xNzI3Olx0XHRpbnQgcmV0O1xuMTcyODpcdFx0dTggaTtcbjE3Mjk6XHRcbjE3MzA6XHRcdGlmICh3b2wtXHUwMDNld29sb3B0cyBcdTAwMjYgV0FLRV9NQUdJQykge1xuMTczMTpcdFx0XHRtYWNfYWRkciA9IHBoeWRldi1cdTAwM2VhdHRhY2hlZF9kZXYtXHUwMDNlZGV2X2FkZHI7XG4xNzMyOlx0XG4xNzMzOlx0XHRcdC8qIFN0b3JlIHRoZSBkZXZpY2UgYWRkcmVzcyBmb3IgdGhlIG1hZ2ljIHBhY2tldCAqL1xuMTczNDpcdFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyAzOyBpJiM0MzsmIzQzOykge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwODozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NjUwMgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDI2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFlUODgyNCBQSFkgRHJpdmVyIEltcGxlbWVudGF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJJiMzOTttIHNlZWluZywgYHl0ODgyNF9jb25maWdfaW5pdGAgaXMgdGhlIGtleSBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiBoZXJlLiBJdCBkZWxlZ2F0ZXMgdG8gZWl0aGVyIGB5dDg4MjRfaW50ZXJuYWxfY29uZmlnX2luaXRfcGFnZWRgIG9yIGB5dDg4MjRfZXh0ZXJuX2NvbmZpZ191dHBfaW5pdF9wYWdlZGAgYW5kIGB5dDg4MjRfZXh0ZXJuX2NvbmZpZ19zZHNfaW5pdF9wYWdlZGAsIGFuZCB0aGVuIGl0IGNvbmNsdWRlcyB3aXRoIGEgYHl0ODgyNF9zb2Z0X3Jlc2V0YC4gU2VlbXMgbGlrZSBhIHN0YW5kYXJkIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlIHdpdGggc3BlY2lmaWMgY29uZmlndXJhdGlvbnMsIHRoZW4gYSByZXNldC4gQWxsIG9mIHRoZXNlIGZ1bmN0aW9ucyBhcmUgZGVmaW5pdGVseSByZWFjaGFibGUsIHNvIHRoYXQmIzM5O3MgZ29vZC4KClRoaXMgaXMgYSByZWFsIGZ1bmN0aW9uYWwgYWRkaXRpb24uIFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBzdXBwb3J0IGZvciBhIG5ldyBQSFkgZHJpdmVyLCB0aGUgYFlUODgyNGAsIHdpdGhpbiBgbW90b3Jjb21tLmNgLiBUaGF0JiMzOTtzIGEgc29saWQsIHRhbmdpYmxlIGNoYW5nZS4gQW5kIHRoZSBNRElPIGJ1cyBlbXVsYXRpb24gYXNwZWN0IOKAkyBVU0Igb3IgSTJDIOKAkyBpcyBpbXBvcnRhbnQgYmVjYXVzZSBpdCBtZWFucyB0aGlzIGlzbiYjMzk7dCBqdXN0IGEgdGhlb3JldGljYWwgZHJpdmVyOyBpdCBoYXMgcHJhY3RpY2FsIGFwcGxpY2F0aW9uLiBJdCBzdWdnZXN0cyB3ZSBjYW4gaW50ZXJhY3Qgd2l0aCB0aGlzIFBIWSB0aHJvdWdoIGEgdmFyaWV0eSBvZiBpbnRlcmZhY2VzLgoKTm93LCBsZXQmIzM5O3MgemVybyBpbiBvbiB0aGUgY29yZSBmdW5jdGlvbmFsaXR5LiBJIG5lZWQgdG8gY2xvc2VseSBleGFtaW5lIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zOiBgeXQ4ODI0X3Byb2JlYCwgYHl0ODgyNF9jb25maWdfaW5pdGAsIGB5dDg4MjRfY29uZmlnX2FuZWdgLCBgeXQ4ODI0X2FuZWdfZG9uZWAsIGB5dDg4MjRfcmVhZF9zdGF0dXNgLCBgeXQ4ODI0X3NvZnRfcmVzZXRgLCBgeXQ4ODI0X3N1c3BlbmRgLCBhbmQgYHl0ODgyNF9yZXN1bWVgLiBJJiMzOTtsbCB3YW50IHRvIHRyYWNlIHRoZSBjb250cm9sIGZsb3csIHVuZGVyc3RhbmQgdGhlaXIgaW50ZXJhY3Rpb25zLCBhbmQgY2hlY2sgdGhlIE1ESU8gcmVnaXN0ZXIgYWNjZXNzIHBhdHRlcm4uCgpCZWZvcmUgSSBnbyBhbnkgZnVydGhlciwgSSYjMzk7bGwgY2hlY2sgaWYgdGhlIGBNT1RPUkNPTU1fUEhZYCBjb25maWd1cmF0aW9uIGlzIG5lZWRlZCB0byBlbmFibGUgdGhpcyBkcml2ZXIuIEkmIzM5O2xsIG1ha2Ugc3VyZSBpdCYjMzk7cyBlbmFibGVkIG9yIG5vdCBhbmQgdGhhdCB0aGVyZSBhcmUgbm8gY29uZGl0aW9uYWwgY29tcGlsYXRpb24gcHJvYmxlbXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA4OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O01PVE9SQ09NTV9QSFkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvS2NvbmZpZz0zNDQ9Y29uZmlnIE1JQ1JPU0VNSV9QSFlcbi0tXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0zNTItXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZzozNTM6Y29uZmlnIE1PVE9SQ09NTV9QSFlcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTM1NC1cdHRyaXN0YXRlIFwmIzM0O01vdG9yY29tbSBQSFlzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA4OjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ3MzEyCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ3VycmVudCBBc3Nlc3NtZW50KioKCk9rYXksIHllcywgSSYjMzk7dmUgZ290IGl0LiBXZSBkZWZpbml0ZWx5IG5lZWQgYE1PVE9SQ09NTV9QSFlgIGluIHRoaXMgY29uZmlndXJhdGlvbi4gV2FpdCBhIHNlY29uZC4uLiBJIGp1c3QgcmVtZW1iZXJlZCB0aGF0IGBNT1RPUkNPTU1fUEhZYCBpcywgaW4gZmFjdCwgYSB0cmlzdGF0ZS4gR2l2ZW4gdGhhdCwgdGhlIGNvcnJlY3QgdGhpbmcgdG8gZG8gaGVyZSBpcyB0byBtYWtlIHN1cmUgaXQmIzM5O3MgcmV0dXJuZWQgd2l0aGluIGBFbmFibGVDb25maWdzYC4gVGhhdOKAmXMgdGhlIHJpZ2h0IGFwcHJvYWNoLiBOb3csIGJlZm9yZSBJIGNvbW1pdCB0byB0aGF0LCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW7igJl0IG1pc3NlZCBhbnl0aGluZy4gTGV0IG1lIHF1aWNrbHkgc2NhbiBmb3IgYW55IG90aGVyIHBvdGVudGlhbCBkZXBlbmRlbmNpZXMgb3IgcmVsYXRlZCBjb25maWd1cmF0aW9uIHBvaW50cyB0aGF0IG1pZ2h0IGJlIGFmZmVjdGVkIGJ5IHRoaXMgY2hhbmdlLiBHb3R0YSBiZSB0aG9yb3VnaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDg6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM1MywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzUzOlx0Y29uZmlnIE1PVE9SQ09NTV9QSFlcbiAzNTQ6XHRcdHRyaXN0YXRlIFwmIzM0O01vdG9yY29tbSBQSFlzXCYjMzQ7XG4gMzU1Olx0XHRoZWxwXG4gMzU2Olx0XHQgIEVuYWJsZXMgc3VwcG9ydCBmb3IgTW90b3Jjb21tIG5ldHdvcmsgUEhZcy5cbiAzNTc6XHRcdCAgQ3VycmVudGx5IHN1cHBvcnRzIFlUODV4eCBHaWdhYml0IEV0aGVybmV0IFBIWXMuXG4gMzU4Olx0XG4gMzU5Olx0Y29uZmlnIE5BVElPTkFMX1BIWVxuIDM2MDpcdFx0dHJpc3RhdGUgXCYjMzQ7TmF0aW9uYWwgU2VtaWNvbmR1Y3RvciBQSFlzXCYjMzQ7XG4gMzYxOlx0XHRoZWxwXG4gMzYyOlx0XHQgIEN1cnJlbnRseSBzdXBwb3J0cyB0aGUgRFA4Mzg2NSBQSFkuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA4OjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ3NjczCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogODAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQ29uc2lkZXJpbmcgRGVwZW5kZW5jaWVzIGZvciBNT1RPUkNPTU1fUEhZKioKCk9rYXksIHNvIEkmIzM5O20gZm9jdXNpbmcgb24gYE1PVE9SQ09NTV9QSFlgIGhlcmUuIEl0IHNlZW1zLCBpbml0aWFsbHksIHRoYXQgaXQgbWlnaHQgYmUgc3RhbmRhbG9uZSwgbm8gaW1tZWRpYXRlIGRlcGVuZGVuY2llcyBqdW1waW5nIG91dCBhdCBtZS4gQnV0IHdhaXQsIGxldCYjMzk7cyBqdXN0IG1ha2Ugc3VyZSDigJMgaXNuJiMzOTt0IHRoZXJlIHNvbWV0aGluZ+KApmBNRElPX01WVVNCYD8gT3IgYSBzaW1pbGFyIG1vZHVsZSB1c2VkIGZvciBNRElPIGJ1cyBlbXVsYXRpb24/IEkgZmVlbCBsaWtlIHRoZXJlJiMzOTtzIHNvbWUgY29ubmVjdGlvbiB0aGVyZSwgc29tZSB3YXkgdG8gc2ltdWxhdGUgdGhlIE1ESU8gaW50ZXJmYWNlLgoKUmlnaHQsIHRpbWUgdG8gY29uc2lkZXIgaG93IFN5emthbGxlciBjb3VsZCBpbnRlcmFjdCB3aXRoIGl0OyBpdCBvZmZlcnMgYSBmZXcgb3B0aW9ucyB0byBpbnRlcmZhY2Ugd2l0aCBNRElPIGJ1c2VzOiBgTURJT19CSVRCQU5HYCwgYE1ESU9fR1BJT2AsIGBNRElPX0kyQ2AsIGFuZCB0aGF0IGBNRElPX01WVVNCYCBJIHdhcyBqdXN0IG11bGxpbmcgb3Zlci4gTGV04oCZcyBkb3VibGUtY2hlY2sgaG93IGBNRElPX01WVVNCYCB3b3JrczsgdGhhdCYjMzk7cyB0aGUgcGF0aCBJIHdhbnQgdG8gaW52ZXN0aWdhdGUgbm93LCBzZWUgaWYgaXQgaXMgcmVsZXZhbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA4OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O01ESU9fTVZVU0ImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9tZGlvL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbWRpby9LY29uZmlnPTEwNz1jb25maWcgTURJT19JMkNcbi0tXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctMTE2LVxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnOjExNzpjb25maWcgTURJT19NVlVTQlxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnLTExOC1cdHRyaXN0YXRlIFwmIzM0O01hcnZlbGwgVVNCIHRvIE1ESU8gQWRhcHRlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwODozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0ODA4NAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqTURJT19NVlVTQiBEZXBlbmRlbmN5IENoZWNrKioKCk9rYXksIHNvIHRoZSBmaXJzdCB0aGluZyBvbiBteSBtaW5kIGlzIHRvIHJpZ29yb3VzbHkgZXhhbWluZSB0aGUgZGVwZW5kZW5jaWVzIG9mIGBNRElPX01WVVNCYC4gSXQmIzM5O3MgYSBrZXkgbW9kdWxlLCBzbyBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCBldmVyeXRoaW5nIGl0IHJlbGllcyBvbi4gSSYjMzk7bSB0aGlua2luZyBJJiMzOTtsbCBuZWVkIHRvIGdvIHRocm91Z2ggdGhlIHR5cGljYWwgZGVwZW5kZW5jeSBhbmFseXNpcy4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUgY2hlY2sgYW55IGhlYWRlcnMsIGxpYnJhcmllcywgb3Igb3RoZXIgbW9kdWxlcyB0aGF0IGBNRElPX01WVVNCYCBwdWxscyBpbi4gSSYjMzk7bSBjb25zaWRlcmluZyBwb3RlbnRpYWwgdmVyc2lvbiBjb25mbGljdHMsIGxpYnJhcnkgY29tcGF0aWJpbGl0eSwgYW5kIHRoZSBpbXBhY3Qgb2YgY2hhbmdlcyBpbiB0aG9zZSBkb3duc3RyZWFtIGNvbXBvbmVudHMgb24gdGhpcyBjb3JlIG1vZHVsZS4gSSYjMzk7bGwgcHJvYmFibHkgc3RhcnQgd2l0aCBhIHF1aWNrIGNvZGUgaW5zcGVjdGlvbiB0byBnZXQgYSBiaXJkcy1leWUgdmlldyBhbmQgdGhlbiBkcmlsbCBkb3duIGFzIG5lZWRlZC4gSeKAmW0gdGhpbmtpbmcgdGhlcmUgbWlnaHQgYmUgc29tZSBzdWJ0bGUgaW50ZXJhY3Rpb25zIHdpdGggdGhlIFVTQiBzdGFjayB0aGF0IEkgbmVlZCB0byBsb29rIG91dCBmb3IsIHNvIEkmIzM5O2xsIHByaW9yaXRpemUgdGhvc2UgYXJlYXMuIEdvdHRhIGVuc3VyZSBhIHNvbGlkIGZvdW5kYXRpb24gYmVmb3JlIEkgc3RhcnQgcG9raW5nIGFyb3VuZCB3aXRoIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwODozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L21kaW8vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExNywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTE3Olx0Y29uZmlnIE1ESU9fTVZVU0JcbiAxMTg6XHRcdHRyaXN0YXRlIFwmIzM0O01hcnZlbGwgVVNCIHRvIE1ESU8gQWRhcHRlclwmIzM0O1xuIDExOTpcdFx0ZGVwZW5kcyBvbiBVU0JcbiAxMjA6XHRcdGhlbHBcbiAxMjE6XHRcdCAgQSBVU0IgdG8gTURJTyBjb252ZXJ0ZXIgcHJlc2VudCBvbiBkZXZlbG9wbWVudCBib2FyZHMgZm9yXG4gMTIyOlx0XHQgIE1hcnZlbGwmIzM5O3MgTGluayBTdHJlZXQgZmFtaWx5IG9mIEV0aGVybmV0IHN3aXRjaGVzLlxuIDEyMzpcdFxuIDEyNDpcdGNvbmZpZyBNRElPX01TQ0NfTUlJTVxuIDEyNTpcdFx0dHJpc3RhdGUgXCYjMzQ7TWljcm9zZW1pIE1JSU0gaW50ZXJmYWNlIHN1cHBvcnRcJiMzNDtcbiAxMjY6XHRcdGRlcGVuZHMgb24gSEFTX0lPTUVNXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA4OjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ4NDk2CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogOTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQ29uc2lkZXJpbmcgVVNCIGFuZCBNRElPIEJ1cyBFbXVsYXRpb24gZm9yIFN5emthbGxlcioqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGhvdyB0byBoYW5kbGUgdGhlIE1ESU8gYnVzIGZvciB0ZXN0aW5nLCBwYXJ0aWN1bGFybHkgd2l0aGluIHRoZSBTeXprYWxsZXIgZW52aXJvbm1lbnQuIFRoZSB1c3VhbCBTeXprYWxsZXIgY29uZmlncyB0ZW5kIHRvIGhhdmUgYFVTQmAgZW5hYmxlZCwgd2hpY2ggaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIGp1c3QgYWRkIGBNRElPX01WVVNCYCB0byB0aGUgYEVuYWJsZUNvbmZpZ3NgIHRvIGJlIGNvbXBsZXRlbHkgc2FmZSwgYW5kIGVuc3VyZSB0aGF0IHRoZSBNRElPIGJ1cyBjYW4gYWx3YXlzIGJlIGVtdWxhdGVkLiBCdXQsIGhhbmcgb24uLi4gZGlkbiYjMzk7dCBJIHNlZSBzb21ldGhpbmcgYWJvdXQgU3l6a2FsbGVyIGFsc28gdXNpbmcgYE1ESU9fSTJDYD8gQWggeWVzLCBpdCBkb2VzISBBbmQgdGhhdCBjYW4gYmUgZW11bGF0ZWQgdXNpbmcgZWl0aGVyIGBpMmMtc3R1YmAgb3IgYGkyYy1tb2NrYC4gSG1tbS4gUmlnaHQsIGJldHRlciB0byB2ZXJpZnkgdGhhdCBgTURJT19JMkNgIGNvbmZpZ3VyYXRpb24gYW5kIG1ha2Ugc3VyZSBteSBzZXR1cCBhY2NvdW50cyBmb3IgdGhhdC4gTGV0IG1lIGRvdWJsZS1jaGVjayB0aGF0IHBhcnQuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDg6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9tZGlvL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDcsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDEwNzpcdGNvbmZpZyBNRElPX0kyQ1xuIDEwODpcdFx0dHJpc3RhdGVcbiAxMDk6XHRcdGRlcGVuZHMgb24gSTJDXG4gMTEwOlx0XHRoZWxwXG4gMTExOlx0XHQgIFN1cHBvcnQgSTJDIGJhc2VkIFBIWXMuICBUaGlzIHByb3ZpZGVzIGEgTURJTyBidXMgYnJpZGdlZFxuIDExMjpcdFx0ICB0byBJMkMgdG8gYWxsb3cgUEhZcyBjb25uZWN0ZWQgaW4gSTJDIG1vZGUgdG8gYmUgYWNjZXNzZWRcbiAxMTM6XHRcdCAgdXNpbmcgdGhlIGV4aXN0aW5nIGluZnJhc3RydWN0dXJlLlxuIDExNDpcdFxuIDExNTpcdFx0ICBUaGlzIGlzIGxpYnJhcnkgbW9kZS5cbiAxMTY6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDg6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDg5NjgKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC4KCioqTURJTyBJbnRlcmZhY2UgQ29uZnVzaW9uKioKCkFscmlnaHQsIEkgbmVlZCB0byBjbGFyaWZ5IG15IHVuZGVyc3RhbmRpbmcgb2YgdGhpcyBNRElPIGludGVyZmFjZSBjb25maWd1cmF0aW9uLiBIYW5nIG9uLi4uIGBNRElPX0kyQ2AuIFRoYXQmIzM5O3Mgbm90IGEgc3RhbmRhbG9uZSBtb2RlLCBpcyBpdD8gUmlnaHQsIGl0JiMzOTtzIHVzZWQgYXMgYSBsaWJyYXJ5ISBJdCYjMzk7cyBpbnZva2VkIGJ5IG90aGVyIGRyaXZlcnMsIGxpa2UgdGhlIFNGUCBkcml2ZXIsIHNvIGl0IGRvZXNuJiMzOTt0IGhhdmUgaXRzIG93biBjb21tYW5kIHByb21wdCBvciBhbnl0aGluZyBsaWtlIHRoYXQuIFRoYXQgbWFrZXMgc2Vuc2UuIE9rYXksIHNvIGBNRElPX0kyQ2AgaXNuJiMzOTt0IHRoZSBvbmUgSSBzaG91bGQgYmUgZm9jdXNlZCBvbiBoZXJlLgoKTm93LCB3aGF0IGFib3V0IGBNRElPX0JJVEJBTkdgPyBUaGF0JiMzOTtzIHRoZSBtb2RlIEkgKnNob3VsZCogYmUgbG9va2luZyBhdCBtb3JlIGNsb3NlbHksIGl0IHNlZW1zLiBMZXQgbWUgY29uc2lkZXIgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGF0IG9uZSBmb3IgYSBtb21lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA4OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbWRpby9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgTURJTyBMYXllciBDb25maWd1cmF0aW9uXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdG1lbnUgXCYjMzQ7TURJTyBjb250cm9sbGVyIGRyaXZlcnNcJiMzNDtcbiAgIDc6XHRcdGRlcGVuZHMgb24gUEhZTElCXG4gICA4Olx0XG4gICA5Olx0Y29uZmlnIEZXTk9ERV9NRElPXG4gIDEwOlx0XHRkZWZfdHJpc3RhdGUgKEFDUEkgfHwgT0YpIHx8IENPTVBJTEVfVEVTVFxuICAxMTpcdFx0aGVscFxuICAxMjpcdFx0ICBGV05PREUgTURJTyBidXMgKEV0aGVybmV0IFBIWSkgYWNjZXNzb3JzXG4gIDEzOlx0XG4gIDE0Olx0Y29uZmlnIE9GX01ESU9cbiAgMTU6XHRcdGRlZl90cmlzdGF0ZSBPRlxuICAxNjpcdFx0c2VsZWN0IEZJWEVEX1BIWVxuICAxNzpcdFx0aGVscFxuICAxODpcdFx0ICBPcGVuRmlybXdhcmUgTURJTyBidXMgKEV0aGVybmV0IFBIWSkgYWNjZXNzb3JzXG4gIDE5Olx0XG4gIDIwOlx0Y29uZmlnIEFDUElfTURJT1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwODozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTQ0MQoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDIxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLZXJuZWwgUGF0Y2ggRGVlcCBEaXZlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsICYjMzQ7TGV0JiMzOTtzIGp1c3QgaW5jbHVkZSBgTU9UT1JDT01NX1BIWWAgYW5kIGBNRElPX01WVVNCYCBpbiBgRW5hYmxlQ29uZmlnc2AuIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2guJiMzNDsgVGhlbiBJIHJlY29nbml6ZSB0aGF0IHRoaXMgaXMgbW9yZSB0aGFuIGp1c3QgYSBjb25maWd1cmF0aW9uIGNoYW5nZSDigJMgaXQgaW50cm9kdWNlcyBmdW5jdGlvbmFsIGtlcm5lbCBtb2RpZmljYXRpb25zLiBUaGlzIGlzIHNlcmlvdXMuCgpTcGVjaWZpY2FsbHksIGl0JiMzOTtzIGFkZGluZyBhIG5ldyBQSFkgZHJpdmVyLCBgWVQ4ODI0YC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBkcml2ZXIgdGhvcm91Z2hseS4gVGhlcmVmb3JlLCBJIG5lZWQgdG8gZm9jdXMgbXkgYXR0ZW50aW9uIG9uIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdGllczogYHl0ODgyNF9wcm9iZWAsIHRvIHVuZGVyc3RhbmQgaXRzIGluaXRpYWxpemF0aW9uOyBgeXQ4ODI0X2NvbmZpZ19pbml0YCBhbmQgYHl0ODgyNF9jb25maWdfYW5lZ2Agd2hpY2ggbWFuYWdlIGNvbmZpZ3VyYXRpb24gYW5kIGF1dG8tbmVnb3RpYXRpb247IGB5dDg4MjRfYW5lZ19kb25lYCB0byBjaGVjayB3aGVuIGF1dG8tbmVnb3RpYXRpb24gaGFzIGZpbmlzaGVkOyBgeXQ4ODI0X3JlYWRfc3RhdHVzYCB0byBkZXRlcm1pbmUgdGhlIHN0YXRlOyBhbmQgYHl0ODgyNF9zb2Z0X3Jlc2V0YCBmb3IgYnJpbmdpbmcgaXQgYmFjayBmcm9tIGEgbm9uLXJlc3BvbnNpdmUgc3RhdGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBwb3dlciBtYW5hZ2VtZW50IGlzIGhhbmRsZWQsIHNvIEkgc2hvdWxkIGxvb2sgaW50byBgeXQ4ODI0X3N1c3BlbmRgIGFuZCBgeXQ4ODI0X3Jlc3VtZWAuIE9mIGNvdXJzZSwgdGhlcmUgYXJlIGFsc28gZnVuY3Rpb25zIGZvciBpbnRlcmFjdGluZyB3aXRoIHRoZSBoYXJkd2FyZSwgbGlrZSBgeXQ4ODI0X3JlYWRfcGFnZWAgYW5kIGB5dDg4MjRfd3JpdGVfcGFnZWAuCgpGaW5hbGx5LCBpdCBhbHNvIGluY2x1ZGVzIGBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlYCwgYW5kIGJlZm9yZSBJIGdvIGFueSBmdXJ0aGVyLCBJIHNob3VsZCB2ZXJpZnkgdGhhdCB0aGlzIGZ1bmN0aW9uIGlzbiYjMzk7dCBkZWNsYXJlZCBhcyBgc3RhdGljYC4gSXQmIzM5O3MgaW1wb3J0YW50IHRvIGtub3cgdGhhdCBpdCBpcyBhdmFpbGFibGUgdG8gdGhlIHJlc3Qgb2YgdGhlIGtlcm5lbCwgaWYgaXQgaXMgdG8gYmUgdXNlZnVsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwODozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jPTEyODQ9RVhQT1JUX1NZTUJPTF9HUEwoZ2VucGh5X2M0NV9mYXN0X3JldHJhaW4pO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmMtMTI4Ni0vKipcbmRyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmM6MTI4NzogKiBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlIC0gY29uZmlndXJlIHRlbXBsYXRlIHRlc3Rtb2RlIHJlZ2lzdGVyc1xuZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuYy0xMjg4LSAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmMtMTI5NS0gKi9cbmRyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmM6MTI5NjppbnQgZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgdGVzdF9tb2RlKVxuZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuYy0xMjk3LXtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jLTEzMDAtfVxuZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuYzoxMzAxOkVYUE9SVF9TWU1CT0xfR1BMKGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUpO1xuZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuYy0xMzAyLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwODozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MDM3NgoJCQkJCQkJb3V0cHV0OiAyNzEKCQkJCQkJCXRob3VnaHRzOiA3MDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNb3RvcmNvbW0gUEhZIERyaXZlcioqCgpPa2F5LCBpdCBsb29rcyBsaWtlIHRoaXMgY29kZSBoYXMgYmVlbiBleHBvcnRlZCwgZ29vZC4gVGltZSB0byBkaXZlIGludG8gdGhlIGBtb3RvcmNvbW0uY2AgZmlsZSBhbmQgdW5kZXJzdGFuZCB0aGUgcmVjZW50IGFkZGl0aW9ucy4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSByZXZpZXdpbmcgdGhlIGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiBpbXBsZW1lbnRlZC4gSSBzZWUgYSB3aWRlIHZhcmlldHkgaGVyZSwgZnJvbSBsb3ctbGV2ZWwgcmVnaXN0ZXIgYWNjZXNzIChgeXRwaHlfcmVhZF90b3BfZXh0YCwgYHl0cGh5X3dyaXRlX3RvcF9leHRgLCBwYWdlIGFjY2VzcyB3aXRoIGxvY2tzKSB0byBtb3JlIGhpZ2gtbGV2ZWwgUEhZIGNvbnRyb2wgYW5kIGNvbmZpZ3VyYXRpb24gKGB5dDg4MjRfY29uZmlnX2luaXRgLCBgeXQ4ODI0X2FuZWdfZG9uZWAsIGB5dDg4MjRfcG93ZXJfb24vZG93bmApLiBUaGVyZSBhcmUgYWxzbyBzcGVjaWZpYyB0ZXN0IG1vZGUgZnVuY3Rpb25zLCByZXNldCBvcGVyYXRpb25zLCBhbmQgcG93ZXIgbWFuYWdlbWVudCBjYWxsYmFja3MuCgpOb3csIEkgbmVlZCB0byBpZGVudGlmeSB3aGljaCBvZiB0aGVzZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5ICpyZWxldmFudCogdG8gbXkgY3VycmVudCBpbnZlc3RpZ2F0aW9uLiBNeSBmb2N1cyB3aWxsIGJlIG9uIHRoZSBub24tc3RhdGljIGZ1bmN0aW9ucywgcGFydGljdWxhcmx5IHRob3NlIHRoYXQgYXJlIGRpcmVjdGx5IGFzc29jaWF0ZWQgd2l0aCB0aGUgYHBoeV9kcml2ZXJgIHN0cnVjdCBvciBhcmUgY2FsbGVkIGV4dGVybmFsbHkuIEhvd2V2ZXIsIHdhaXQgYSBtaW51dGUsIGB5dDg4MjRfcHJvYmVgIGlzIGRlY2xhcmVkIHN0YXRpYywgYnV0IGl0JiMzOTtzIGFzc2lnbmVkIHRvIHRoZSBgLnByb2JlYCBmaWVsZCB3aXRoaW4gYG1vdG9yY29tbV9waHlfZHJ2c2AuIFNvLCBpdOKAmXMgc3RpbGwgaW1wb3J0YW50IGFuZCBJIHdpbGwgaW5jbHVkZSBpdC4KCkkmIzM5O20gbWFraW5nIGEgbGlzdCBmb3IgdGhlIGBGb2N1c1N5bWJvbHNgIHNlY3Rpb24gbm93LiBJdCYjMzk7bGwgaW5jbHVkZTogYHl0ODgyNF9wcm9iZWAsIGB5dDg4MjRfY29uZmlnX2luaXRgLCBgeXQ4ODI0X2NvbmZpZ19hbmVnYCwgYHl0ODgyNF9hbmVnX2RvbmVgLCBgeXQ4ODI0X3JlYWRfc3RhdHVzYCwgYHl0ODgyNF9zb2Z0X3Jlc2V0YCwgYHl0ODgyNF9zdXNwZW5kYCwgYHl0ODgyNF9yZXN1bWVgLCBgeXQ4ODI0X3JlYWRfcGFnZWAsIGFuZCBgeXQ4ODI0X3dyaXRlX3BhZ2VgLiBJJiMzOTttIGFsc28gZ29pbmcgdG8gYWRkIGBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlYCwgYXMgdGhpcyBmdW5jdGlvbiBzZWVtcyBpbXBvcnRhbnQgdG8gZGVidWdnaW5nLgoKRmluYWxseSwgSSBuZWVkIHRvIGVuc3VyZSB0aGUgY29ycmVjdCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHNldC4gTGV0IG1lIGp1c3QgY29uZmlybSB0aGF0IGBNT1RPUkNPTU1fUEhZYCBpcyBpbmRlZWQgdGhlIG1haW4gZHJpdmVyIGNvbmZpZ3VyYXRpb24gZm9yIGBkcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmNgLiBZdXAsIHRoYXQgbG9va3MgY29ycmVjdC4gSSBzaG91bGQgYWxzbyBpbmNsdWRlIGBNRElPX01WVVNCYCB0byBlbnN1cmUgdGhhdCBJIGhhdmUgTURJTyBidXMgZW11bGF0aW9uIGF2YWlsYWJsZS4KCk9rYXksIHdpdGggdGhlIHN5bWJvbCBsaXN0IGFuZCBjb25maWd1cmF0aW9uIHNvcnRlZCwgaXQmIzM5O3MgdGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuIEkgY2FuIGJlZ2luIGFuYWx5emluZyB0aGUgY29kZSBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA4OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNT1RPUkNPTU1fUEhZJiMzNDssCiAgICAmIzM0O01ESU9fTVZVU0ImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt5dDg4MjRfcHJvYmUmIzM0OywKICAgICYjMzQ7eXQ4ODI0X2NvbmZpZ19pbml0JiMzNDssCiAgICAmIzM0O3l0ODgyNF9jb25maWdfYW5lZyYjMzQ7LAogICAgJiMzNDt5dDg4MjRfYW5lZ19kb25lJiMzNDssCiAgICAmIzM0O3l0ODgyNF9yZWFkX3N0YXR1cyYjMzQ7LAogICAgJiMzNDt5dDg4MjRfc29mdF9yZXNldCYjMzQ7LAogICAgJiMzNDt5dDg4MjRfc3VzcGVuZCYjMzQ7LAogICAgJiMzNDt5dDg4MjRfcmVzdW1lJiMzNDssCiAgICAmIzM0O3l0ODgyNF9yZWFkX3BhZ2UmIzM0OywKICAgICYjMzQ7eXQ4ODI0X3dyaXRlX3BhZ2UmIzM0OywKICAgICYjMzQ7Z2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHRoZSBNb3RvcmNvbW0gWVQ4ODI0IFBIWSBkcml2ZXIuIEl0IGludHJvZHVjZXMgYSBuZXcgUEhZIGRyaXZlciBzdHJ1Y3R1cmUgd2l0aCB2YXJpb3VzIGNhbGxiYWNrcyBmb3IgcHJvYmluZywgaW5pdGlhbGl6YXRpb24sIGF1dG8tbmVnb3RpYXRpb24sIHN0YXR1cyByZWFkaW5nLCBhbmQgcG93ZXIgbWFuYWdlbWVudC4gVGhlc2UgZnVuY3Rpb25zIGFyZSByZWFjaGFibGUgdmlhIE1ESU8gYnVzIGVtdWxhdGlvbiAoZS5nLiwgdXNpbmcgdGhlIE1hcnZlbGwgVVNCIE1ESU8gYWRhcHRlciBkcml2ZXIpLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbmV3bHkgYWRkZWQgUEhZIGRyaXZlciBjYWxsYmFja3MgYW5kIHRoZSBleHBvcnRlZCBoZWxwZXIgYGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGVgLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNT1RPUkNPTU1fUEhZJiMzNDssCiAgICAmIzM0O01ESU9fTVZVU0ImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt5dDg4MjRfcHJvYmUmIzM0OywKICAgICYjMzQ7eXQ4ODI0X2NvbmZpZ19pbml0JiMzNDssCiAgICAmIzM0O3l0ODgyNF9jb25maWdfYW5lZyYjMzQ7LAogICAgJiMzNDt5dDg4MjRfYW5lZ19kb25lJiMzNDssCiAgICAmIzM0O3l0ODgyNF9yZWFkX3N0YXR1cyYjMzQ7LAogICAgJiMzNDt5dDg4MjRfc29mdF9yZXNldCYjMzQ7LAogICAgJiMzNDt5dDg4MjRfc3VzcGVuZCYjMzQ7LAogICAgJiMzNDt5dDg4MjRfcmVzdW1lJiMzNDssCiAgICAmIzM0O3l0ODgyNF9yZWFkX3BhZ2UmIzM0OywKICAgICYjMzQ7eXQ4ODI0X3dyaXRlX3BhZ2UmIzM0OywKICAgICYjMzQ7Z2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHRoZSBNb3RvcmNvbW0gWVQ4ODI0IFBIWSBkcml2ZXIuIEl0IGludHJvZHVjZXMgYSBuZXcgUEhZIGRyaXZlciBzdHJ1Y3R1cmUgd2l0aCB2YXJpb3VzIGNhbGxiYWNrcyBmb3IgcHJvYmluZywgaW5pdGlhbGl6YXRpb24sIGF1dG8tbmVnb3RpYXRpb24sIHN0YXR1cyByZWFkaW5nLCBhbmQgcG93ZXIgbWFuYWdlbWVudC4gVGhlc2UgZnVuY3Rpb25zIGFyZSByZWFjaGFibGUgdmlhIE1ESU8gYnVzIGVtdWxhdGlvbiAoZS5nLiwgdXNpbmcgdGhlIE1hcnZlbGwgVVNCIE1ESU8gYWRhcHRlciBkcml2ZXIpLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbmV3bHkgYWRkZWQgUEhZIGRyaXZlciBjYWxsYmFja3MgYW5kIHRoZSBleHBvcnRlZCBoZWxwZXIgYGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGVgLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDg6MzI6NDEuNTA3NzgzNzk2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIzMjUxNDc2Mzg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1PVE9SQ09NTV9QSFlcIixcbiAgICBcIk1ESU9fTVZVU0JcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ5dDg4MjRfcHJvYmVcIixcbiAgICBcInl0ODgyNF9jb25maWdfaW5pdFwiLFxuICAgIFwieXQ4ODI0X2NvbmZpZ19hbmVnXCIsXG4gICAgXCJ5dDg4MjRfYW5lZ19kb25lXCIsXG4gICAgXCJ5dDg4MjRfcmVhZF9zdGF0dXNcIixcbiAgICBcInl0ODgyNF9zb2Z0X3Jlc2V0XCIsXG4gICAgXCJ5dDg4MjRfc3VzcGVuZFwiLFxuICAgIFwieXQ4ODI0X3Jlc3VtZVwiLFxuICAgIFwieXQ4ODI0X3JlYWRfcGFnZVwiLFxuICAgIFwieXQ4ODI0X3dyaXRlX3BhZ2VcIixcbiAgICBcImdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHRoZSBNb3RvcmNvbW0gWVQ4ODI0IFBIWSBkcml2ZXIuIEl0IGludHJvZHVjZXMgYSBuZXcgUEhZIGRyaXZlciBzdHJ1Y3R1cmUgd2l0aCB2YXJpb3VzIGNhbGxiYWNrcyBmb3IgcHJvYmluZywgaW5pdGlhbGl6YXRpb24sIGF1dG8tbmVnb3RpYXRpb24sIHN0YXR1cyByZWFkaW5nLCBhbmQgcG93ZXIgbWFuYWdlbWVudC4gVGhlc2UgZnVuY3Rpb25zIGFyZSByZWFjaGFibGUgdmlhIE1ESU8gYnVzIGVtdWxhdGlvbiAoZS5nLiwgdXNpbmcgdGhlIE1hcnZlbGwgVVNCIE1ESU8gYWRhcHRlciBkcml2ZXIpLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbmV3bHkgYWRkZWQgUEhZIGRyaXZlciBjYWxsYmFja3MgYW5kIHRoZSBleHBvcnRlZCBoZWxwZXIgYGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGVgLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwODozMjo0MS41MDc3OTI4NDZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwMzI4Njg1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGUyZGYxOWU2MTYzMWUzZmNmMzY2ZGZkMjlmYzE5YTllMDgyMjcwNDRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFN1biBBdWcgMiAwODozMjo0MCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMgYi9kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmNcXG5pbmRleCAzMzk2YTM4Y2ZjMGYyLi44NjhhMGM5ZjI5YTdlIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uY1xcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uY1xcbkBAIC0xLDI0ICsxLDMzIEBAXFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wK1xcbiAvKlxcbi0gKiBNb3RvcmNvbW0gODUxMS84NTIxLzg1MjIvODUzMS84NTMxUy84ODIxIFBIWSBkcml2ZXIuXFxuKyAqIE1vdG9yY29tbSA4NTExLzg1MjEvODUyMi84NTMxLzg1MzFTLzg4MjEvODgyNCBQSFkgZHJpdmVyLlxcbiAgKlxcbiAgKiBBdXRob3I6IFBldGVyIEdlaXMgXFx1MDAzY3Bnd2lwZW91dEBnbWFpbC5jb21cXHUwMDNlXFxuICAqIEF1dGhvcjogRnJhbmsgXFx1MDAzY0ZyYW5rLlNhZUBtb3Rvci1jb21tLmNvbVxcdTAwM2VcXG4rICogQXV0aG9yOiBLeWxlIFxcdTAwM2NreWxlLnN3aXRjaEBtb3Rvci1jb21tLmNvbVxcdTAwM2VcXG4gICovXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvY2xrLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9ldGhlcmRldmljZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgva2VybmVsLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9tb2R1bGUuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L29mLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9waHkuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3Byb3BlcnR5LmhcXHUwMDNlXFxuIFxcbisjaW5jbHVkZSBcXFwicGh5bGliLmhcXFwiXFxuK1xcbisvKiBkZWZpbmUgUEhZODgyNCB0b3AgZXh0ZW5kIGFkZHIgb2Zmc2V0IGludGVybmFsIGFuZCBleHRlcm5hbCovXFxuKyNkZWZpbmUgSU5URVJOQUxfUEhZODgyNF9UT1BfRVhURU5EX09GRlNFVCAgICAoNSlcXG4rI2RlZmluZSBFWFRFUk5BTF9QSFk4ODI0X1RPUF9FWFRFTkRfT0ZGU0VUICAgICg0KVxcbitcXG4gI2RlZmluZSBQSFlfSURfWVQ4NTExXFx0XFx0MHgwMDAwMDEwYVxcbiAjZGVmaW5lIFBIWV9JRF9ZVDg1MjFcXHRcXHQweDAwMDAwMTFhXFxuICNkZWZpbmUgUEhZX0lEX1lUODUyMlxcdFxcdDB4NGY1MWU5MjhcXG4gI2RlZmluZSBQSFlfSURfWVQ4NTMxXFx0XFx0MHg0ZjUxZTkxYlxcbiAjZGVmaW5lIFBIWV9JRF9ZVDg1MzFTXFx0XFx0MHg0ZjUxZTkxYVxcbiAjZGVmaW5lIFBIWV9JRF9ZVDg4MjFcXHRcXHQweDRmNTFlYTE5XFxuKyNkZWZpbmUgUEhZX0lEX1lUODgyNFxcdFxcdDB4NGY1MWU4YjhcXG4gLyogWVQ4NTIxL1lUODUzMVMvWVQ4ODIxIFJlZ2lzdGVyIE92ZXJ2aWV3XFxuICAqXFx0VVRQIFJlZ2lzdGVyIHNwYWNlXFx0fFxcdEZJQkVSIFJlZ2lzdGVyIHNwYWNlXFxuICAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cXG5AQCAtMzAsNiArMzksMTggQEBcXG4gICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcbiAgKi9cXG4gXFxuKy8qIFlUODgyNCBSZWdpc3RlciBPdmVydmlld1xcbisgKlxcdFVUUCBSZWdpc3RlciBzcGFjZVxcdHxcXHRGSUJFUiBSZWdpc3RlciBzcGFjZVxcbisgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFxuKyAqIHxcXHRVVFAgTUlJXFx0XFx0XFx0fFxcdEZJQkVSIE1JSVxcdCAgICAgICAgfFxcbisgKiB8XFx0VVRQIE1NRFxcdFxcdFxcdHxcXHRcXHRcXHRcXHR8XFxuKyAqIHxcXHRVVFAgRXh0ZW5kZWRcXHRcXHR8XFx0RklCRVIgRXh0ZW5kZWRcXHRcXHR8XFxuKyAqIHxcXHRVVFAgVG9wIEV4dGVuZGVkXFx0fFxcdEZJQkVSIFRvcCBFeHRlbmRlZFxcdHxcXG4rICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcbisgKiB8XFx0XFx0XFx0Q29tbW9uIFRvcCBFeHRlbmRlZFxcdFxcdFxcdHxcXG4rICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcbisgKi9cXG4rXFxuIC8qIDB4MTAgfiAweDE1ICwgMHgxRSBhbmQgMHgxRiBhcmUgY29tbW9uIE1JSSByZWdpc3RlcnMgb2YgeXQgcGh5ICovXFxuIFxcbiAvKiBTcGVjaWZpYyBGdW5jdGlvbiBDb250cm9sIFJlZ2lzdGVyICovXFxuQEAgLTM3Niw2ICszOTcsMTUgQEBcXG4gI2RlZmluZSBZVDg4MjFfQ0hJUF9NT0RFX0FVVE9fQlgyNTAwX1NHTUlJXFx0MFxcbiAjZGVmaW5lIFlUODgyMV9DSElQX01PREVfRk9SQ0VfQlgyNTAwXFx0XFx0MVxcbiBcXG4rI2RlZmluZSBZVDg4MjRfUlNTUl9TUEFDRV9NQVNLXFx0XFx0XFx0QklUKDApXFxuKyNkZWZpbmUgWVQ4ODI0X1JTU1JfVVNYR01JSV9TUEFDRVxcdFxcdCgweDEpXFxuKyNkZWZpbmUgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFXFx0XFx0XFx0KDB4MClcXG4rI2RlZmluZSBZVDg4MjRfVVRQX1RFTVBMQVRFX1RFU1RfTU9ERTFcXHRcXHQweDIwMDBcXG4rI2RlZmluZSBZVDg4MjRfVVRQX1RFTVBMQVRFX1RFU1RfTk9STUFMXFx0XFx0MHgwMDAwXFxuKyNkZWZpbmUgWVQ4ODI0X1NEU19DRkdfTUlOX1BSRV9NQVNLXFx0XFx0R0VOTUFTSygzLCAwKVxcbisjZGVmaW5lIFlUODgyNF9TRFNfRU5fRklMTF9QUkVcXHRcXHRcXHRCSVQoMTMpXFxuKyNkZWZpbmUgWVQ4ODI0X1NEU19UWF9QUkVfUEFERElOR1xcdFxcdCgweDcpXFxuK1xcbiBzdHJ1Y3QgeXQ4NTIxX3ByaXYge1xcbiBcXHQvKiBjb21ib19hZHZlcnRpc2luZyBpcyB1c2VkIGZvciBjYXNlIG9mIFlUODUyMSBpbiBjb21ibyBtb2RlLFxcbiBcXHQgKiB0aGlzIG1lYW5zIHRoYXQgeXQ4NTIxIG1heSB3b3JrIGluIHV0cCBvciBmaWJlciBtb2RlIHdoaWNoIGRlcGVuZHNcXG5AQCAtMzk0LDYgKzQyNCwxMSBAQCBzdHJ1Y3QgeXQ4NTIxX3ByaXYge1xcbiBcXHR1OCByZWdfcGFnZTtcXG4gfTtcXG4gXFxuK3N0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYge1xcbitcXHR1bnNpZ25lZCBpbnQgaW50ZXJmYWNlX21vZGU7XFxuK1xcdHVuc2lnbmVkIGludCBvZmZzZXQ7XFxuK307XFxuK1xcbiAvKipcXG4gICogeXRwaHlfcmVhZF9leHQoKSAtIHJlYWQgYSBQSFkncyBleHRlbmRlZCByZWdpc3RlclxcbiAgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcXG5AQCAtNDMyLDYgKzQ2Nyw3MCBAQCBzdGF0aWMgaW50IHl0cGh5X3JlYWRfZXh0X3dpdGhfbG9jayhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MTYgcmVnbnVtKVxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbisvKipcXG4rICogeXRwaHlfcmVhZF90b3BfZXh0KCkgLSByZWFkIGEgUEhZJ3MgdG9wIGV4dGVuZGVkIHJlZ2lzdGVyIGZvciBZVDg4MjRcXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXFxuKyAqIEByZWdudW06IHJlZ2lzdGVyIG51bWJlciB0byByZWFkXFxuKyAqXFxuKyAqIFJldHVybnM6IHRoZSB2YWx1ZSBvZiByZWdudW0gcmVnIG9yIG5lZ2F0aXZlIGVycm9yIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgeXRwaHlfcmVhZF90b3BfZXh0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUxNiByZWdudW0pXFxuK3tcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNnBoeWRldi1cXHUwMDNlbWRpby5idXMtXFx1MDAzZW1kaW9fbG9jayk7XFxuK1xcdHJldCA9IF9fcGh5X3BhY2thZ2Vfd3JpdGUocGh5ZGV2LCAwLCBZVFBIWV9QQUdFX1NFTEVDVCwgcmVnbnVtKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXR1cm4gX19waHlfcGFja2FnZV9yZWFkKHBoeWRldiwgMCwgWVRQSFlfUEFHRV9EQVRBKTtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHl0cGh5X3dyaXRlX3RvcF9leHQoKSAtIHdyaXRlIGEgUEhZJ3MgdG9wIGV4dGVuZGVkIHJlZ2lzdGVyIGZvciBZVDg4MjRcXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXFxuKyAqIEByZWdudW06IHJlZ2lzdGVyIG51bWJlciB0byB3cml0ZVxcbisgKiBAdmFsOiByZWdpc3RlciB2YWwgdG8gd3JpdGVcXG4rICpcXG4rICogUmV0dXJuczogdGhlIHZhbHVlIG9mIHJlZ251bSByZWcgb3IgbmVnYXRpdmUgZXJyb3IgY29kZVxcbisgKi9cXG4rc3RhdGljIGludCB5dHBoeV93cml0ZV90b3BfZXh0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUxNiByZWdudW0sXFxuK1xcdFxcdFxcdCAgICAgICB1MTYgdmFsKVxcbit7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZwaHlkZXYtXFx1MDAzZW1kaW8uYnVzLVxcdTAwM2VtZGlvX2xvY2spO1xcbitcXHRyZXQgPSBfX3BoeV9wYWNrYWdlX3dyaXRlKHBoeWRldiwgMCwgWVRQSFlfUEFHRV9TRUxFQ1QsIHJlZ251bSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0dXJuIF9fcGh5X3BhY2thZ2Vfd3JpdGUocGh5ZGV2LCAwLCBZVFBIWV9QQUdFX0RBVEEsIHZhbCk7XFxuK31cXG4rXFxuKy8qKlxcbisgKiBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKCkgLSB3cml0ZSBwYWdlIGZvciBZVDg4MjRcXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXFxuKyAqIEBwYWdlOiByZWcgcGFnZShZVDg4MjRfUlNTUl9VU1hHTUlJX1NQQUNFL1lUODgyNF9SU1NSX1VUUF9TUEFDRSkuXFxuKyAqXFxuKyAqIFJldHVybnM6IHRoZSB2YWx1ZSBvZiByZWdudW0gcmVnIG9yIG5lZ2F0aXZlIGVycm9yIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgcGFnZSlcXG4re1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cGh5X2xvY2tfbWRpb19idXMocGh5ZGV2KTtcXG4rXFx0cmV0ID0geXRwaHlfcmVhZF90b3BfZXh0KHBoeWRldiwgWVQ4NTIxX1JFR19TUEFDRV9TRUxFQ1RfUkVHKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0cmV0IFxcdTAwMjY9IH5ZVDg4MjRfUlNTUl9TUEFDRV9NQVNLO1xcbitcXHRyZXQgfD0gKHBhZ2UgXFx1MDAyNiBZVDg4MjRfUlNTUl9TUEFDRV9NQVNLKTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfdG9wX2V4dChwaHlkZXYsIFlUODUyMV9SRUdfU1BBQ0VfU0VMRUNUX1JFRywgcmV0KTtcXG4rXFxuK2Vycl9yZXN0b3JlX3BhZ2U6XFxuK1xcdHBoeV91bmxvY2tfbWRpb19idXMocGh5ZGV2KTtcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4gLyoqXFxuICAqIHl0cGh5X3dyaXRlX2V4dCgpIC0gd3JpdGUgYSBQSFkncyBleHRlbmRlZCByZWdpc3RlclxcbiAgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcXG5AQCAtNjIxLDExICs3MjAsOTk4IEBAIHN0YXRpYyBpbnQgeXRwaHlfc2V0X3dvbChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBzdHJ1Y3QgZXRodG9vbF93b2xpbmZvICp3b2wpXFxuIFxcdFxcdHJldCA9IF9fcGh5X21vZGlmeShwaHlkZXYsIFlUUEhZX0lOVEVSUlVQVF9FTkFCTEVfUkVHLFxcbiBcXHRcXHRcXHRcXHQgICBZVFBIWV9JRVJfV09MLCAwKTtcXG4gXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLVxcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXHR9XFxuK1xcbitlcnJfcmVzdG9yZV9wYWdlOlxcbitcXHRyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpO1xcbit9XFxuK1xcbisvKipcXG4rICogeXQ4ODI0X3JlYWRfcGFnZSgpIC0gcmVhZCBQSFk4ODI0IHJlZyBwYWdlXFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbisgKlxcbisgKiBSZXR1cm5zOiBjdXJyZW50IHJlZyBzcGFjZSBvZiB5dDg4MjQgKFlUODgyNF9SU1NSX1VTWEdNSUlfU1BBQ0UvXFxuKyAqIFlUODgyNF9SU1NSX1VUUF9TUEFDRSkgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxcbisgKi9cXG4rc3RhdGljIGludCB5dDg4MjRfcmVhZF9wYWdlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0aW50IG9sZF9wYWdlO1xcbitcXG4rXFx0b2xkX3BhZ2UgPSB5dHBoeV9yZWFkX3RvcF9leHQocGh5ZGV2LCBZVDg1MjFfUkVHX1NQQUNFX1NFTEVDVF9SRUcpO1xcbitcXHRpZiAob2xkX3BhZ2UgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gb2xkX3BhZ2U7XFxuK1xcbitcXHRyZXR1cm4gb2xkX3BhZ2UgXFx1MDAyNiBZVDg4MjRfUlNTUl9TUEFDRV9NQVNLO1xcbit9O1xcbitcXG4rLyoqXFxuKyAqIHl0ODgyNF93cml0ZV9wYWdlKCkgLSB3cml0ZSByZWcgcGFnZVxcbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcXG4rICogQHBhZ2U6IFJlZyBwYWdlKFlUODgyNF9SU1NSX1VTWEdNSUlfU1BBQ0UvWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKSB0byB3cml0ZS5cXG4rICpcXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXFxuKyAqL1xcbitzdGF0aWMgaW50IHl0ODgyNF93cml0ZV9wYWdlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCBwYWdlKVxcbit7XFxuK1xcdGludCBvbGRfcGFnZTtcXG4rXFx0dTE2IGRhdGE7XFxuK1xcbitcXHRvbGRfcGFnZSA9IHl0cGh5X3JlYWRfdG9wX2V4dChwaHlkZXYsIFlUODUyMV9SRUdfU1BBQ0VfU0VMRUNUX1JFRyk7XFxuK1xcdGlmIChvbGRfcGFnZSBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiBvbGRfcGFnZTtcXG4rXFx0ZGF0YSA9IG9sZF9wYWdlIFxcdTAwMjYgKH5ZVDg4MjRfUlNTUl9TUEFDRV9NQVNLKTtcXG4rXFx0ZGF0YSB8PSBwYWdlO1xcbitcXG4rXFx0cmV0dXJuIHl0cGh5X3dyaXRlX3RvcF9leHQocGh5ZGV2LCBZVDg1MjFfUkVHX1NQQUNFX1NFTEVDVF9SRUcsIGRhdGEpO1xcbit9O1xcbitcXG4rLyoqXFxuKyAqIHl0ODgyNF91dHBfaW52YWxpZF90ZXN0X21vZGVfcGFnZWQoKSAtIGNvbmZpZyBZVDg4MjQgdG8gaW52YWxpZCB0ZXN0IG1vZGUuXFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbisgKlxcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgeXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdGludCByZXQgPSAwO1xcbitcXG4rXFx0cmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0dXJuIGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUocGh5ZGV2LFxcbitcXHRcXHRcXHRcXHRcXHQgICAgWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX01PREUxKTtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHl0ODgyNF9zZHNfaXNvbGF0ZV9wYWdlZCgpIC0gZW5hYmxlIFlUODgyNCBzZXJkZXMgaXNvbGF0ZS5cXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXFxuKyAqXFxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxcbisgKi9cXG4rc3RhdGljIGludCB5dDg4MjRfc2RzX2lzb2xhdGVfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRpbnQgb2xkX3BhZ2U7XFxuK1xcdGludCByZXQgPSAwO1xcbitcXG4rXFx0b2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCBZVDg4MjRfUlNTUl9VU1hHTUlJX1NQQUNFKTtcXG4rXFx0aWYgKG9sZF9wYWdlIFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0cmV0ID0gX19waHlfcmVhZChwaHlkZXYsIE1JSV9CTUNSKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0LyogaXNvbGF0aW9uICovXFxuK1xcdHJldCB8PSBCTUNSX0lTT0xBVEU7XFxuK1xcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgTUlJX0JNQ1IsIHJldCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitlcnJfcmVzdG9yZV9wYWdlOlxcbitcXHRyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpO1xcbit9XFxuK1xcbisvKipcXG4rICogeXQ4ODI0X3V0cF9zb2Z0cmVzZXRfcGFnZWQoKSAtIGNvbmZpZyBZVDg4MjQgVVRQIHNvZnRyZXNldC5cXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXFxuKyAqXFxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxcbisgKi9cXG4rc3RhdGljIGludCB5dDg4MjRfdXRwX3NvZnRyZXNldF9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdGludCByZXQgPSAwO1xcbitcXHRpbnQgdmFsO1xcbitcXG4rXFx0cmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRyZXQgPSBwaHlfcmVhZChwaHlkZXYsIE1JSV9CTUNSKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdHJldCB8PSBCTUNSX1JFU0VUO1xcbitcXHRyZXQgPSBwaHlfd3JpdGUocGh5ZGV2LCBNSUlfQk1DUiwgcmV0KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdC8qIHdhaXQgdW50aWwgc29mdHJlc2V0IGRvbmUuICovXFxuK1xcdHJldHVybiBwaHlfcmVhZF9wb2xsX3RpbWVvdXQocGh5ZGV2LCBNSUlfQk1DUiwgdmFsLFxcbitcXHRcXHRcXHRcXHQgICAgICEodmFsIFxcdTAwMjYgQk1DUl9SRVNFVCksXFxuK1xcdFxcdFxcdFxcdCAgICAgNTAwMDAsIDYwMDAwMCwgdHJ1ZSk7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQoKSAtIGNvbmZpZyBZVDg4MjQgdG8gbm9ybWFsIHRlc3QgbW9kZS5cXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXFxuKyAqXFxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxcbisgKi9cXG4rc3RhdGljIGludCB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRpbnQgcmV0ID0gMDtcXG4rXFxuK1xcdHJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldHVybiBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlKHBoeWRldixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIFlUODgyNF9VVFBfVEVNUExBVEVfVEVTVF9OT1JNQUwpO1xcbit9XFxuK1xcbisvKipcXG4rICogeXQ4ODI0X3Nkc19pc29sYXRlX2FuZF9zb2Z0cmVzZXRfcGFnZWQoKSAtIGRpc2FibGUgWVQ4ODI0IHNlcmRlcyBpc29sYXRlXFxuKyAqIGFuZCBzZHMgc29mdHJlc2V0LlxcbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcXG4rICpcXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXFxuKyAqL1xcbitzdGF0aWMgaW50IHl0ODgyNF9zZHNfaXNvbGF0ZV9hbmRfc29mdHJlc2V0X3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0dW5zaWduZWQgaW50IHJldHJ5ID0gMTI7XFxuK1xcdGludCBvbGRfcGFnZTtcXG4rXFx0aW50IHJldCA9IC0xO1xcbitcXG4rXFx0b2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCBZVDg4MjRfUlNTUl9VU1hHTUlJX1NQQUNFKTtcXG4rXFx0aWYgKG9sZF9wYWdlIFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0cmV0ID0gX19waHlfcmVhZChwaHlkZXYsIE1JSV9CTUNSKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdC8qIGRpc2FibGUgaXNvbGF0aW9uICovXFxuK1xcdHJldCBcXHUwMDI2PSB+QklUKDEwKTtcXG4rXFx0Lyogc29mdCByZXNldCAqL1xcbitcXHRyZXQgfD0gQk1DUl9SRVNFVDtcXG4rXFx0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBNSUlfQk1DUiwgcmV0KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0ZG8ge1xcbitcXHRcXHRtc2xlZXAoNTApO1xcbitcXHRcXHRyZXQgPSBfX3BoeV9yZWFkKHBoeWRldiwgTUlJX0JNQ1IpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXHR9IHdoaWxlICgocmV0IFxcdTAwMjYgQk1DUl9SRVNFVCkgXFx1MDAyNlxcdTAwMjYgLS1yZXRyeSk7XFxuK1xcbitcXHRpZiAocmV0IFxcdTAwMjYgQk1DUl9SRVNFVCkge1xcbitcXHRcXHRyZXQgPSAtRVRJTUVET1VUO1xcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdH1cXG4rXFxuK2Vycl9yZXN0b3JlX3BhZ2U6XFxuK1xcdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB5dDg4MjRfc29mdF9yZXNldCgpIC0gY2FsbGVkIHRvIGRvIFBIWSBzb2Z0d2FyZSByZXNldFxcbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcXG4rICpcXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXFxuKyAqL1xcbitzdGF0aWMgaW50IHl0ODgyNF9zb2Z0X3Jlc2V0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGlmIChwaHlkZXYtXFx1MDAzZWludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUwpIHtcXG4rXFx0XFx0LyogaW52YWxpZCB0ZXN0IG1vZGUgKi9cXG4rXFx0XFx0cmV0ID0geXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0cmV0ID0geXQ4ODI0X3V0cF9zb2Z0cmVzZXRfcGFnZWQocGh5ZGV2KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdC8qIG5vcm1hbCBtb2RlICovXFxuK1xcdFxcdHJldCA9IHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0LyogaW52YWxpZCB0ZXN0IG1vZGUgKi9cXG4rXFx0XFx0cmV0ID0geXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdFxcdC8qIHNkcyBpc29sYXRpb24gKi9cXG4rXFx0XFx0cmV0ID0geXQ4ODI0X3Nkc19pc29sYXRlX3BhZ2VkKHBoeWRldik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0XFx0LyogdXRwIHNvZnQgcmVzZXQgKi9cXG4rXFx0XFx0cmV0ID0geXQ4ODI0X3V0cF9zb2Z0cmVzZXRfcGFnZWQocGh5ZGV2KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRcXHQvKiBub3JtYWwgbW9kZSAqL1xcbitcXHRcXHRyZXQgPSB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRcXHQvKiBzZHMgc29mdCByZXNldCBhbmQgZGlzYWJsZSBpc29sYXRpb24gKi9cXG4rXFx0XFx0cmV0ID0geXQ4ODI0X3Nkc19pc29sYXRlX2FuZF9zb2Z0cmVzZXRfcGFnZWQocGh5ZGV2KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB5dDg4MjRfZXh0ZXJuX2NvbmZpZ191dHBfaW5pdF9wYWdlZCgpIC0gY29uZmlnIGV4dGVybmFsIHBoeTg4MjQgdXRwIGluaXRcXG4rICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0XFxuKyAqXFxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxcbisgKi9cXG4rc3RhdGljIGludCB5dDg4MjRfZXh0ZXJuX2NvbmZpZ191dHBfaW5pdF9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdGludCBkYXRhID0gMDtcXG4rXFx0aW50IHJldCA9IDA7XFxuK1xcbitcXHRyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdC8qIHBvd2VyIGRvd24gKi9cXG4rXFx0ZGF0YSA9IHBoeV9yZWFkKHBoeWRldiwgTUlJX0JNQ1IpO1xcbitcXHRpZiAoZGF0YSBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiBkYXRhO1xcbitcXHRkYXRhIHw9IEJNQ1JfUERPV047XFxuK1xcdHJldCA9IHBoeV93cml0ZShwaHlkZXYsIE1JSV9CTUNSLCBkYXRhKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHQvKiBwbGwgY2FsaWJyYXRpb24gKi9cXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDAwMSwgMHgwMDAzKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMjBlLCAweDBjYmEpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyMGEsIDB4YzNmMSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTIwYywgMHgxNjIwKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmI2LCAweDBhMDApO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyYjYsIDB4MGUwMCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0Lyogb3B0aW1pemF0aW9uIHV0cCAqL1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMDAxLCAweDAwMDMpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdC8qIGVuYWJsZSBuaWJibGUgKi9cXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTAwMywgMHgwMDAzKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHQvKiBpZGxlIGVyciBkZXRlY3QgZW5hYmxlICovXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzZDAsIDB4NTIxMCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0Lyogb3B0aW1pemVkIDIuNUcgbG9uZyBjYWJsZSBwZXJmb3JtYW5jZSAqL1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzcyLCAweDUwMzgpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzN2MsIDB4NjA2OCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDM4OCwgMHgwMGEwKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHQvKiBvcHRpbWl6ZWQgZmFzdCByZXRyYWluICovXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzNTksIDB4MjE0MCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDAwYywgMHhjMWEwKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHQvKiAyLjVHIHRlbXBsYXRlIHRvbmUgKi9cXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJmYSwgMHgwMDgzKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNGUyLCAweDAxNDkpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdC8qIG9wdGltaXplZCAyLjVHIHRlbXBsYXRlICovXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0N2UsIDB4MzkzOSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ3ZiwgMHgzOTM5KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDgwLCAweDM5MzkpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0ODEsIDB4MzkzOSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0Lyogb3B0aW1pemVkIDEwMDBNIGNhYmxlIGxlbmd0aCB0aHJlc2hvbGQgKi9cXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDMzNiwgMHhhYjBhKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzQwLCAweDMwMWQpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdC8qIDEwME0gdGVtcGxhdGUgYW1wbGl0dWRlICovXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NmUsIDB4NDU0NSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ2ZiwgMHg0NTQ1KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDcwLCAweDQ1NDUpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NzEsIDB4NDU0NSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0Lyogb3B0aW1pemVkIDEwME0gY2FibGUgbGVuZ3RoIHRocmVzaG9sZCAqL1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzBiLCAweGFhMWQpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA3MWYsIDB4MDAzNik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0LyogMTBNIHRlbXBsYXRlIGFtcGxpdHVkZSAqL1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDZiLCAweDE4MTgpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NmMsIDB4MTgxOCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0Lyogb3B0aW1pemVkIDEwTSBjYWJsZSBsZW5ndGggdGhyZXNob2xkICovXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NjYsIDB4NmM2Yyk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ2NywgMHg2YzZjKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDY4LCAweDZjNmMpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NjksIDB4NmM2Yyk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0Lyogb3B0aW1pemUgdXRwIDEwMDBNIHBlcmZvcm1hbmNlICovXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzNGEsIDB4ZmYwMyk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDBmOCwgMHhiM2ZmKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMDU5LCAweDQwNDApO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzMmMsIDB4NTA5NCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDMyZCwgMHhkMDk0KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzJlLCAweDUzMDgpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzMjIsIDB4NjQ0MCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDRkMywgMHg1MjIwKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNGQyLCAweDUyMjApO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdC8qIG9wdGltaXplZCBFTUMgQ1MgKi9cXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDBjOCwgMHhmZmZmKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMGJlLCAweDY0MDYpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzN2EsIDB4NDBmZik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0Lyogb3B0aW1pemVkIEVNQyBSRSAqL1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDgyLCAweGZmZmYpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZDUsIDB4MWYxZik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJkNiwgMHgxZjFmKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmQ3LCAweDFmMWYpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZDgsIDB4MWYxZik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTIxOCwgMHgwMDZlKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDFkLCAweGZmZjApO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEwMWUsIDB4ZmZmMCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTAxZCwgMHhmZmZmKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDFlLCAweGZmZmYpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB5dDg4MjRfZXh0ZXJuX2NvbmZpZ19zZHNfaW5pdF9wYWdlZCgpIC0gY29uZmlnIGV4dGVybmFsIHBoeTg4MjQgc2RzIGluaXRcXG4rICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0XFxuKyAqXFxuKyAqXFxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxcbisgKi9cXG4rc3RhdGljIGludCB5dDg4MjRfZXh0ZXJuX2NvbmZpZ19zZHNfaW5pdF9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnNoYXJlZF9wcml2O1xcbitcXHRpbnQgcmV0ID0gMCwgb2xkX3BhZ2U7XFxuK1xcdGludCB2YWxfMSwgdmFsXzIsIHZhbF8zLCB0bXA7XFxuK1xcdHUxNiBkYXRhID0gMDtcXG4rXFx0aW50IHBvcnQ7XFxuK1xcbitcXHRzaGFyZWRfcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XFxuK1xcdHBvcnQgPSBwaHlkZXYtXFx1MDAzZW1kaW8uYWRkciAtIHNoYXJlZF9wcml2LVxcdTAwM2VvZmZzZXQ7XFxuK1xcdGlmIChwb3J0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdG9sZF9wYWdlID0gcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVNYR01JSV9TUEFDRSk7XFxuK1xcdGlmIChvbGRfcGFnZSBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdC8qIHJlYWQgZWZ1c2UgKi9cXG4rXFx0dmFsXzEgPSB5dHBoeV9yZWFkX3RvcF9leHQocGh5ZGV2LCAweGExM2UpO1xcbitcXHRpZiAodmFsXzEgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHR2YWxfMiA9IHl0cGh5X3JlYWRfdG9wX2V4dChwaHlkZXYsIDB4YTEzZik7XFxuK1xcdGlmICh2YWxfMiBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdHZhbF8zID0geXRwaHlfcmVhZF90b3BfZXh0KHBoeWRldiwgMHhhMTQwKTtcXG4rXFx0aWYgKHZhbF8zIFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0aWYgKHBvcnQgPT0gMCkge1xcbitcXHRcXHQvKiBTZXJkZXMgb3B0aW1pemF0aW9uICovXFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRiZSwgMHgwMDBkKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ5ZiwgMHg3ZGVkKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRhOSwgMHgwMDlmKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdC8qIGFuYWxvZyBDRFIgKi9cXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDA2LCAweDA4MDApO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0Lyogb3B0aW1pemVkIFZDTyAqL1xcbitcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0MzgsIDB4OTAyNCk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0MzksIDB4MDBjMCk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHQvKiBvcHRpbWl6ZWQgUExMIGxvY2sgKi9cXG4rXFx0XFx0cmV0ID0geXRwaHlfcmVhZF9leHQocGh5ZGV2LCAweDA0MjkpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0cmV0IFxcdTAwMjY9IH4oQklUKDEzKSB8IEJJVCgxMikpO1xcbitcXHRcXHR0bXAgPSAodmFsXzEgXFx1MDAyNiAoQklUKDcpIHwgQklUKDYpKSkgXFx1MDAzZVxcdTAwM2UgNjtcXG4rXFx0XFx0cmV0IHw9ICh0bXAgXFx1MDAzY1xcdTAwM2MgMTIpO1xcbitcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0MjksIHJldCk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHRyZXQgPSB5dHBoeV9yZWFkX2V4dChwaHlkZXYsIDB4MDQ0MSk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHRyZXQgXFx1MDAyNj0gfihCSVQoMSkgfCBCSVQoMCkpO1xcbitcXHRcXHR0bXAgPSAodmFsXzEgXFx1MDAyNiAoQklUKDUpIHwgQklUKDQpKSkgXFx1MDAzZVxcdTAwM2UgNDtcXG4rXFx0XFx0cmV0IHw9IHRtcDtcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDQxLCByZXQpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0cmV0ID0geXRwaHlfcmVhZF9leHQocGh5ZGV2LCAweDA0MmIpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0cmV0IFxcdTAwMjY9IH4oQklUKDEzKSB8IEJJVCgxMikpO1xcbitcXHRcXHR0bXAgPSAodmFsXzMgXFx1MDAyNiAoQklUKDEpIHwgQklUKDApKSk7XFxuK1xcdFxcdHJldCB8PSAodG1wIFxcdTAwM2NcXHUwMDNjIDEyKTtcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDJiLCByZXQpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDNhLCAweDEwMDYpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDJhLCAweGYwNzApO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0LyogY2FibGUgbGVuZ3RoIHRocmVzaG9sZCAqL1xcbitcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OTEsIDB4MDA3Zik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OTIsIDB4N2Y3Zik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHQvKiBTZXJkZXMgdHJhaW5pbmcgdGhyZXNob2xkICovXFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ1NCwgMHgwZjE0KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ5NywgMHgwYTQ0KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdC8qIGRpZ2l0YWwgZXllIGRpYWdyYW0gb2YgU2VyRGVzICovXFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRjZCwgMHgwMDAwKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdC8qIFNlcmRlcyBMRE8gKi9cXG4rXFx0XFx0cmV0ID0geXRwaHlfcmVhZF9leHQocGh5ZGV2LCAweDA0YjUpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0cmV0IFxcdTAwMjY9IH4oQklUKDYpIHwgQklUKDUpIHwgQklUKDQpKTtcXG4rXFx0XFx0dG1wID0gKHZhbF8yIFxcdTAwMjYgKEJJVCg0KSB8IEJJVCgzKSB8IEJJVCgyKSkpIFxcdTAwM2VcXHUwMDNlIDI7XFxuK1xcdFxcdHJldCB8PSAodG1wIFxcdTAwM2NcXHUwMDNjIDQpO1xcbitcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YjUsIHJldCk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHRyZXQgPSB5dHBoeV9yZWFkX2V4dChwaHlkZXYsIDB4MDRiNCk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHRyZXQgXFx1MDAyNj0gfihCSVQoMTApIHwgQklUKDkpIHwgQklUKDgpKTtcXG4rXFx0XFx0dG1wID0gKHZhbF8yIFxcdTAwMjYgKEJJVCg3KSB8IEJJVCg2KSB8IEJJVCg1KSkpIFxcdTAwM2VcXHUwMDNlIDU7XFxuK1xcdFxcdHJldCB8PSAodG1wIFxcdTAwM2NcXHUwMDNjIDgpO1xcbitcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YjQsIHJldCk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHQvKiBvcHRpbWl6ZWQgU2VyZGVzIFJYICovXFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRhZiwgMHg0NWUzKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ4YSwgMHgwZmZmKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQwOCwgMHg3YzAwKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRkNiwgMHgwMDdmKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ0ZiwgMHhmZjA4KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdC8qIG9wdGltaXplZCBTZXJkZXMgVFggKi9cXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDhlLCAweDdkMDApO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMDBkLCAweDA2MDYpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0LyogU2VyZGVzIG1hbnVhbCBjb25maWcgKi9cXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGIwLCAweDA4MDQpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGIxLCAweDcwNzQpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGFmLCAweDQ1ZTcpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0LyogcmVzdGFydCBjYWxpYnJhdGlvbiAqL1xcbitcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAwMDMsIDB4NTYwMyk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OTIsIDB4N2ZmZik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OTIsIDB4N2Y3Zik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDIwMDAsIDB4MDA0MCk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDIwMDAsIDB4MDAwMCk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIFRYIHByZWFtYmxlIHBhZGRlZCB0byA4OyBSWCBJUEcgYWx3YXlzIFxcdTAwM2UgOCAqL1xcbitcXHRyZXQgPSBfX3BoeV9yZWFkKHBoeWRldiwgTUlJX1JFU1YxKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0cmV0IFxcdTAwMjY9IH5ZVDg4MjRfU0RTX0NGR19NSU5fUFJFX01BU0s7XFxuK1xcdHJldCB8PSBZVDg4MjRfU0RTX1RYX1BSRV9QQURESU5HO1xcbitcXHRyZXQgfD0gWVQ4ODI0X1NEU19FTl9GSUxMX1BSRTtcXG4rXFx0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBNSUlfUkVTVjEsIHJldCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRkYXRhID0gX19waHlfcmVhZChwaHlkZXYsIE1JSV9CTUNSKTtcXG4rXFx0aWYgKGRhdGEgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdGRhdGEgfD0gQk1DUl9SRVNFVDtcXG4rXFx0ZGF0YSB8PSBCTUNSX0FORU5BQkxFO1xcbitcXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIE1JSV9CTUNSLCBkYXRhKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK2Vycl9yZXN0b3JlX3BhZ2U6XFxuK1xcdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB5dDg4MjRfaW50ZXJuYWxfY29uZmlnX2luaXRfcGFnZWQoKSAtIGNvbmZpZyBpbnRlcm5hbCBwaHk4ODI0IGluaXRcXG4rICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0XFxuKyAqXFxuKyAqXFxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxcbisgKi9cXG4rc3RhdGljIGludCB5dDg4MjRfaW50ZXJuYWxfY29uZmlnX2luaXRfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpzaGFyZWRfcHJpdjtcXG4rXFx0aW50IHBvcnQgPSAwO1xcbitcXHRpbnQgcmV0ID0gMDtcXG4rXFx0aW50IGRhdGE7XFxuK1xcbitcXHRyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRzaGFyZWRfcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XFxuK1xcdHBvcnQgPSBwaHlkZXYtXFx1MDAzZW1kaW8uYWRkciAtIHNoYXJlZF9wcml2LVxcdTAwM2VvZmZzZXQ7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDEsIDB4Myk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRkYXRhID0gcGh5X3JlYWQocGh5ZGV2LCBNSUlfQk1DUik7XFxuK1xcdGlmIChkYXRhIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIGRhdGE7XFxuK1xcdGRhdGEgfD0gQk1DUl9QRE9XTjtcXG4rXFx0cmV0ID0gcGh5X3dyaXRlKHBoeWRldiwgTUlJX0JNQ1IsIGRhdGEpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0aWYgKHBvcnQgPT0gMCkge1xcbitcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMjBlLCAweGNiYSk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMjBhLCAweGMzZjEpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTIwYywgMHgxNjIwKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyYjYsIDB4YTAwKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyYjYsIDB4ZTAwKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEwMDMsIDB4Myk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDNkMCwgMHg1MjEwKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDM3MiwgMHg1MDM4KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDM3YywgMHg2MDY4KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDM4OCwgMHhhMCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzNTksIDB4MjE0MCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmZhLCAweDgzKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDRlMiwgMHgxNDkpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0LyogMi41RyB0ZW1wYXRlICovXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ3ZSwgMHgzOTM5KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ3ZiwgMHgzOTM5KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ4MCwgMHgzOTM5KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ4MSwgMHgzOTM5KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdC8qIDEwMDAgY2FibGUgbGVuZ3RoIHRocmVzaG9sZCAqL1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzMzYsIDB4YWIwYSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzNDAsIDB4MzAxZCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHQvKiAxMDAwIHBlcmZvcm1hbmNlICovXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDM0YSwgMHhmZjAzKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGY4LCAweGIzZmYpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzJjLCAweDUwOTQpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzJkLCAweGQwOTQpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzJlLCAweDUzMDgpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzIyLCAweDY0NDApO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NGQzLCAweDUyMjApO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NGQyLCAweDUyMjApO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0LyogMTAwIHRlbXBhdGUgKi9cXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDZlLCAweDQ1NDUpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDZmLCAweDQ1NDUpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDcwLCAweDQ1NDUpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDcxLCAweDQ1NDUpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0LyogMTAwIGNhYmxlIGxlbmd0aCB0aHJlc2hvbGQgKi9cXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzBiLCAweGFhMWQpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NzFmLCAweDM2KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdC8qIDEwIHRlbXBhdGUgKi9cXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDZiLCAweDE4MTgpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDZjLCAweDE4MTgpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0LyogMTAgdGVtcGF0ZSBNQVUqL1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NjYsIDB4NmM2Yyk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NjcsIDB4NmM2Yyk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NjgsIDB4NmM2Yyk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NjksIDB4NmM2Yyk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHQvKiBFTUMgQ1MgKi9cXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YzgsIDB4ZmZmKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGJlLCAweDY0MDYpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzdhLCAweDQwZmYpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0LyogRU1DIFJFKi9cXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDgyLCAweGZmZmYpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0aWYgKHBvcnQgPT0gMCkge1xcbitcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0ODIsIDB4ZmZmZik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmQ1LCAweDFmMWYpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJkNiwgMHgxZjFmKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZDcsIDB4MWYxZik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmQ4LCAweDFmMWYpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTIxOCwgMHg2ZSk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDFkLCAweGZmZjApO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTAxZSwgMHhmZmYwKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEwMWQsIDB4ZmZmZik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDFlLCAweGZmZmYpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0fVxcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhjLCAweDQxYTEpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0cmV0ID0gZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZShwaHlkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIFlUODgyNF9VVFBfVEVNUExBVEVfVEVTVF9NT0RFMSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdGRhdGEgPSBwaHlfcmVhZChwaHlkZXYsIE1JSV9CTUNSKTtcXG4rXFx0aWYgKGRhdGEgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRkYXRhIHw9IEJNQ1JfUkVTRVQ7XFxuK1xcdGRhdGEgfD0gQk1DUl9BTkVOQUJMRTtcXG4rXFx0cmV0ID0gcGh5X3dyaXRlKHBoeWRldiwgTUlJX0JNQ1IsIGRhdGEpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0cmV0ID0gZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZShwaHlkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIFlUODgyNF9VVFBfVEVNUExBVEVfVEVTVF9OT1JNQUwpO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHl0ODgyNF9jb25maWdfaW5pdCgpIC0gcGh5IGluaXRpYWxpemF0aW9pblxcbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcXG4rICpcXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXFxuKyAqL1xcbitzdGF0aWMgaW50IHl0ODgyNF9jb25maWdfaW5pdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRpZiAocGh5ZGV2LVxcdTAwM2VpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMKSB7XFxuK1xcdFxcdHJldCA9IHl0ODgyNF9pbnRlcm5hbF9jb25maWdfaW5pdF9wYWdlZChwaHlkZXYpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0cmV0ID0geXQ4ODI0X2V4dGVybl9jb25maWdfdXRwX2luaXRfcGFnZWQocGh5ZGV2KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdHJldCA9IHl0ODgyNF9leHRlcm5fY29uZmlnX3Nkc19pbml0X3BhZ2VkKHBoeWRldik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXHR9XFxuK1xcdHJldCA9IHl0ODgyNF9zb2Z0X3Jlc2V0KHBoeWRldik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG4tZXJyX3Jlc3RvcmVfcGFnZTpcXG4tXFx0cmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRfcGFnZSwgcmV0KTtcXG4rXFx0cGh5ZGV2X2RiZyhwaHlkZXYsIFxcXCIlcyBkb25lLCBwaHkgYWRkcjogJWRcXFxcblxcXCIsXFxuK1xcdFxcdCAgIF9fZnVuY19fLCBwaHlkZXYtXFx1MDAzZW1kaW8uYWRkcik7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4gc3RhdGljIGludCB5dDg1MzFfc2V0X3dvbChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxcbkBAIC0zMDY2LDYgKzQxNTIsMzczIEBAIHN0YXRpYyBpbnQgeXQ4ODIxX3Jlc3VtZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbiBcXHRyZXR1cm4geXQ4ODIxX21vZGlmeV91dHBfZmliZXJfYm1jcihwaHlkZXYsIEJNQ1JfUERPV04sIDApO1xcbiB9XFxuIFxcbisvKipcXG4rICogeXQ4ODI0X2FuZWdfZG9uZSgpICAtIGNoZWNrIG5lZ290aWF0aW9uIHN0YXRlLlxcbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcXG4rICpcXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXFxuKyAqL1xcbitzdGF0aWMgaW50IHl0ODgyNF9hbmVnX2RvbmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRpbnQgbGluayA9IDA7XFxuK1xcdGludCByZXQgPSAwO1xcbitcXG4rXFx0cmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0ID0gcGh5X3JlYWQocGh5ZGV2LCBZVFBIWV9TUEVDSUZJQ19TVEFUVVNfUkVHKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdGxpbmsgPSAhIShyZXQgXFx1MDAyNiBZVFBIWV9TU1JfTElOSyk7XFxuK1xcbitcXHRwaHlkZXZfZGJnKHBoeWRldiwgXFxcIiVzLCBwaHkgYWRkcjogJWQsIGxpbmtfdXRwOiAlZFxcXFxuXFxcIixcXG4rXFx0XFx0ICAgX19mdW5jX18sIHBoeWRldi1cXHUwMDNlbWRpby5hZGRyLCBsaW5rKTtcXG4rXFxuK1xcdHJldHVybiBsaW5rO1xcbit9XFxuK1xcbisvKipcXG4rICogeXQ4ODI0X3JlYWRfc3RhdHVzX3BhZ2VkKCkgLSAgZGV0ZXJtaW5lcyB0aGUgc3BlZWQgYW5kIGR1cGxleCBvZiBvbmUgcGFnZVxcbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcXG4rICogQHN0YXR1czogVGhlIGxpbmsgc3RhdHVzLCBpbmNsdWRlIHNwZWVkLCBkdXBsZXggYW5kIGxpbmsgc3RhdGUuXFxuKyAqIEBscGE6IGxpbmsgcGFydG5lciBhZHZlcnRpc2luZy5cXG4rICpcXG4rICogUmV0dXJuczogMSAodXRwIGxpbmspLDAgKG5vIGxpbmspIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgeXQ4ODI0X3JlYWRfc3RhdHVzX3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXFxuK1xcdFxcdFxcdFxcdCAgICBpbnQgKnN0YXR1cywgaW50ICpscGEpXFxuK3tcXG4rXFx0aW50IHJldCA9IDA7XFxuK1xcbitcXHRyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSBwaHlfcmVhZChwaHlkZXYsIE1JSV9MUEEpO1xcbitcXHQqbHBhID0gcmV0O1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldCA9IHBoeV9yZWFkKHBoeWRldiwgWVRQSFlfU1BFQ0lGSUNfU1RBVFVTX1JFRyk7XFxuK1xcdCpzdGF0dXMgPSByZXQ7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0ID0gISEoKnN0YXR1cyBcXHUwMDI2IFlUUEhZX1NTUl9MSU5LKTtcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB5dDg4MjRfcmVhZF9zdGF0dXMoKSAtICBkZXRlcm1pbmVzIHRoZSBuZWdvdGlhdGVkIHNwZWVkIGFuZCBkdXBsZXhcXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXFxuKyAqXFxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxcbisgKi9cXG4rc3RhdGljIGludCB5dDg4MjRfcmVhZF9zdGF0dXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRpbnQgbGluaztcXG4rXFx0aW50IGxwYTtcXG4rXFx0aW50IHZhbDtcXG4rXFxuK1xcdHBoeWRldi1cXHUwMDNlcGF1c2UgPSAwO1xcbitcXHRwaHlkZXYtXFx1MDAzZWFzeW1fcGF1c2UgPSAwO1xcbitcXHRwaHlkZXYtXFx1MDAzZWxpbmsgPSAwO1xcbitcXHRwaHlkZXYtXFx1MDAzZXNwZWVkID0gU1BFRURfVU5LTk9XTjtcXG4rXFx0cGh5ZGV2LVxcdTAwM2VkdXBsZXggPSBEVVBMRVhfVU5LTk9XTjtcXG4rXFxuK1xcdGxpbmsgPSB5dDg4MjRfcmVhZF9zdGF0dXNfcGFnZWQocGh5ZGV2LFxcbitcXHRcXHRcXHRcXHRcXHRcXHUwMDI2dmFsLCBcXHUwMDI2bHBhKTtcXG4rXFx0aWYgKGxpbmsgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gbGluaztcXG4rXFxuK1xcdGlmIChsaW5rKSB7XFxuK1xcdFxcdHBoeWRldi1cXHUwMDNlbGluayA9IDE7XFxuK1xcdFxcdHBoeWRldi1cXHUwMDNlcGF1c2UgPSAhIShscGEgXFx1MDAyNiBCSVQoMTApKTtcXG4rXFx0XFx0cGh5ZGV2LVxcdTAwM2Vhc3ltX3BhdXNlID0gISEobHBhIFxcdTAwMjYgQklUKDExKSk7XFxuK1xcbitcXHRcXHQvKiB1cGRhdGUgc3BlZWQgXFx1MDAyNiBkdXBsZXggKi9cXG4rXFx0XFx0eXQ4ODIxX2FkanVzdF9zdGF0dXMocGh5ZGV2LCB2YWwpO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRwaHlkZXYtXFx1MDAzZWxpbmsgPSAwO1xcbitcXHRcXHRwaHlkZXYtXFx1MDAzZXBhdXNlID0gMDtcXG4rXFx0XFx0cGh5ZGV2LVxcdTAwM2Vhc3ltX3BhdXNlID0gMDtcXG4rXFx0XFx0cGh5ZGV2LVxcdTAwM2VzcGVlZCA9IFNQRUVEX1VOS05PV047XFxuK1xcdFxcdHBoeWRldi1cXHUwMDNlZHVwbGV4ID0gRFVQTEVYX1VOS05PV047XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisvKipcXG4rICogeXQ4ODI0X3V0cF9wb3dlcl9vbigpOiB1dHAgcG93ZXIgb24uXFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbisgKlxcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgeXQ4ODI0X3V0cF9wb3dlcl9vbihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdGludCByZXQgPSAwO1xcbitcXG4rXFx0cmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0ID0gcGh5X3JlYWQocGh5ZGV2LCBNSUlfQk1DUik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0IFxcdTAwMjY9IH5CTUNSX1BET1dOO1xcbitcXHRyZXQgXFx1MDAyNj0gfkJNQ1JfSVNPTEFURTtcXG4rXFxuK1xcdHJldHVybiBwaHlfd3JpdGUocGh5ZGV2LCBNSUlfQk1DUiwgcmV0KTtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHl0ODgyNF91dHBfcG93ZXJfZG93bigpOiB1dHAgcG93ZXIgZG93bi5cXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXFxuKyAqXFxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxcbisgKi9cXG4rc3RhdGljIGludCB5dDg4MjRfdXRwX3Bvd2VyX2Rvd24oc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRpbnQgcmV0ID0gMDtcXG4rXFxuK1xcdHJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldCA9IHBoeV9yZWFkKHBoeWRldiwgTUlJX0JNQ1IpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldHVybiBwaHlfd3JpdGUocGh5ZGV2LCBNSUlfQk1DUiwgcmV0IHwgQk1DUl9QRE9XTik7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB5dDg4MjRfcG93ZXJfb24oKSAgLSBzZXQgdXRwIHBvd2VyIG9uLlxcbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcXG4rICpcXG4rICogTk9URTogbmVlZCBXQSBsaWtlIHNvZnRyZXNldFxcbisgKlxcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgeXQ4ODI0X3Bvd2VyX29uKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGlmIChwaHlkZXYtXFx1MDAzZWludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUwpIHtcXG4rXFx0XFx0LyogaW52YWxpZCB0ZXN0IG1vZGUgKi9cXG4rXFx0XFx0cmV0ID0geXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0LyogdXRwIHBvd2VyIG9uICovXFxuK1xcdFxcdHJldCA9IHl0ODgyNF91dHBfcG93ZXJfb24ocGh5ZGV2KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdC8qIG5vcm1hbCBtb2RlICovXFxuK1xcdFxcdHJldCA9IHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0LyogaW52YWxpZCB0ZXN0IG1vZGUgKi9cXG4rXFx0XFx0cmV0ID0geXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdFxcdC8qIHNkcyBpc29sYXRpb24gKi9cXG4rXFx0XFx0cmV0ID0geXQ4ODI0X3Nkc19pc29sYXRlX3BhZ2VkKHBoeWRldik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0XFx0LyogdXRwIHBvd2VyIG9uICovXFxuK1xcdFxcdHJldCA9IHl0ODgyNF91dHBfcG93ZXJfb24ocGh5ZGV2KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRcXHQvKiBub3JtYWwgbW9kZSAqL1xcbitcXHRcXHRyZXQgPSB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRcXHQvKiBzZHMgc29mdCByZXNldCBhbmQgZGlzYWJsZSBpc29sYXRpb24gKi9cXG4rXFx0XFx0cmV0ID0geXQ4ODI0X3Nkc19pc29sYXRlX2FuZF9zb2Z0cmVzZXRfcGFnZWQocGh5ZGV2KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB5dDg4MjRfcmVzdW1lKCkgLSByZXN1bWUgdGhlIGhhcmR3YXJlXFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbisgKlxcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgeXQ4ODI0X3Jlc3VtZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdHJldHVybiB5dDg4MjRfcG93ZXJfb24ocGh5ZGV2KTtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHl0ODgyNF9wb3dlcl9kb3duKCkgIC0gc2V0IHV0cCBwb3dlciBkb3duLlxcbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcXG4rICpcXG4rICogTk9URTogbmVlZCBXQSBsaWtlIHNvZnRyZXNldFxcbisgKlxcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgeXQ4ODI0X3Bvd2VyX2Rvd24oc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0aWYgKHBoeWRldi1cXHUwMDNlaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTCkge1xcbitcXHRcXHQvKiBpbnZhbGlkIHRlc3QgbW9kZSAqL1xcbitcXHRcXHRyZXQgPSB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRcXHQvKiB1dHAgcG93ZXIgZG93biAqL1xcbitcXHRcXHRyZXQgPSB5dDg4MjRfdXRwX3Bvd2VyX2Rvd24ocGh5ZGV2KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdC8qIG5vcm1hbCBtb2RlICovXFxuK1xcdFxcdHJldCA9IHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0LyogaW52YWxpZCB0ZXN0IG1vZGUgKi9cXG4rXFx0XFx0cmV0ID0geXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdFxcdC8qIHNkcyBpc29sYXRpb24gKi9cXG4rXFx0XFx0cmV0ID0geXQ4ODI0X3Nkc19pc29sYXRlX3BhZ2VkKHBoeWRldik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0XFx0LyogdXRwIHBvd2VyIGRvd24gKi9cXG4rXFx0XFx0cmV0ID0geXQ4ODI0X3V0cF9wb3dlcl9kb3duKHBoeWRldik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0XFx0Lyogbm9ybWFsIG1vZGUgKi9cXG4rXFx0XFx0cmV0ID0geXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0XFx0Lyogc2RzIHNvZnQgcmVzZXQgYW5kIGRpc2FibGUgaXNvbGF0aW9uICovXFxuK1xcdFxcdHJldCA9IHl0ODgyNF9zZHNfaXNvbGF0ZV9hbmRfc29mdHJlc2V0X3BhZ2VkKHBoeWRldik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisvKipcXG4rICogeXQ4ODI0X3N1c3BlbmQoKSAtIHN1c3BlbmQgdGhlIGhhcmR3YXJlXFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbisgKlxcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgeXQ4ODI0X3N1c3BlbmQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRyZXR1cm4geXQ4ODI0X3Bvd2VyX2Rvd24ocGh5ZGV2KTtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHl0ODgyNF9jb25maWdfYW5lZygpIC0gY29uZmlnIG5lZ290aWF0aW9uXFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbisgKlxcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgeXQ4ODI0X2NvbmZpZ19hbmVnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0aW50IHBoeV9jdHJsID0gMDtcXG4rXFx0aW50IHJldCA9IDA7XFxuK1xcbitcXHRyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRpZiAobGlua21vZGVfdGVzdF9iaXQoRVRIVE9PTF9MSU5LX01PREVfMjUwMGJhc2VUX0Z1bGxfQklULFxcbitcXHRcXHRcXHQgICAgICBwaHlkZXYtXFx1MDAzZWFkdmVydGlzaW5nKSlcXG4rXFx0XFx0cGh5X2N0cmwgPSBNRElPX0FOXzEwR0JUX0NUUkxfQURWMl81RztcXG4rXFxuK1xcdHJldCA9IHBoeV9tb2RpZnlfbW1kX2NoYW5nZWQocGh5ZGV2LCBNRElPX01NRF9BTixcXG4rXFx0XFx0XFx0XFx0ICAgICBNRElPX0FOXzEwR0JUX0NUUkwsXFxuK1xcdFxcdFxcdFxcdCAgICAgTURJT19BTl8xMEdCVF9DVFJMX0FEVjJfNUcsXFxuK1xcdFxcdFxcdFxcdCAgICAgcGh5X2N0cmwpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldHVybiBnZW5waHlfY29uZmlnX2FuZWcocGh5ZGV2KTtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHl0ODgyNF9waHlfcGFja2FnZV9wcm9iZV9vbmNlKCkgIC0gaW5pdCBwaHkgcGFja2V0IGZvciBwaHk4ODI0LlxcbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcXG4rICpcXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXFxuKyAqL1xcbitzdGF0aWMgaW50IHl0ODgyNF9waHlfcGFja2FnZV9wcm9iZV9vbmNlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0c3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XFxuK1xcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBwaHlfcGFja2FnZV9nZXRfbm9kZShwaHlkZXYpO1xcbitcXHRjb25zdCBjaGFyICppbnRlcmZhY2VfbW9kZV9uYW1lO1xcbitcXG4rXFx0cHJpdi1cXHUwMDNlaW50ZXJmYWNlX21vZGUgPSBQSFlfSU5URVJGQUNFX01PREVfTkE7XFxuK1xcdHByaXYtXFx1MDAzZW9mZnNldCA9IElOVEVSTkFMX1BIWTg4MjRfVE9QX0VYVEVORF9PRkZTRVQ7XFxuK1xcdGlmICghb2ZfcHJvcGVydHlfcmVhZF9zdHJpbmcobnAsIFxcXCJtb3RvcmNvbW0saW50ZXJmYWNlLW1vZGVcXFwiLFxcbitcXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZpbnRlcmZhY2VfbW9kZV9uYW1lKSkge1xcbitcXHRcXHRpZiAoIXN0cmNhc2VjbXAoaW50ZXJmYWNlX21vZGVfbmFtZSxcXG4rXFx0XFx0XFx0XFx0cGh5X21vZGVzKFBIWV9JTlRFUkZBQ0VfTU9ERV9VU1hHTUlJKSkpIHtcXG4rXFx0XFx0XFx0cHJpdi1cXHUwMDNlaW50ZXJmYWNlX21vZGUgPSBQSFlfSU5URVJGQUNFX01PREVfVVNYR01JSTtcXG4rXFx0XFx0XFx0cHJpdi1cXHUwMDNlb2Zmc2V0ID0gRVhURVJOQUxfUEhZODgyNF9UT1BfRVhURU5EX09GRlNFVDtcXG4rXFx0XFx0fSBlbHNlIGlmICghc3RyY2FzZWNtcFxcbitcXHRcXHRcXHRcXHQoaW50ZXJmYWNlX21vZGVfbmFtZSxcXG4rXFx0XFx0XFx0XFx0IHBoeV9tb2RlcyhQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUwpKSkge1xcbitcXHRcXHRcXHRwcml2LVxcdTAwM2VpbnRlcmZhY2VfbW9kZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTDtcXG4rXFx0XFx0XFx0cHJpdi1cXHUwMDNlb2Zmc2V0ID0gSU5URVJOQUxfUEhZODgyNF9UT1BfRVhURU5EX09GRlNFVDtcXG4rXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHl0ODgyNF9wcm9iZSgpIC0gcGh5ODgyNCBwcm9iZS5cXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXFxuKyAqXFxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxcbisgKi9cXG4rc3RhdGljIGludCB5dDg4MjRfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvLmRldjtcXG4rXFx0c3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqc2hhcmVkX3ByaXY7XFxuK1xcdHN0cnVjdCB5dDg1MjFfcHJpdiAqcHJpdjtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHJldCA9IGRldm1fb2ZfcGh5X3BhY2thZ2Vfam9pbihkZXYsIHBoeWRldiwgc2l6ZW9mKCpzaGFyZWRfcHJpdikpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0aWYgKHBoeV9wYWNrYWdlX3Byb2JlX29uY2UocGh5ZGV2KSkge1xcbitcXHRcXHRyZXQgPSB5dDg4MjRfcGh5X3BhY2thZ2VfcHJvYmVfb25jZShwaHlkZXYpO1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9XFxuK1xcbitcXHRwcml2ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7XFxuK1xcdGlmICghcHJpdilcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHRwaHlkZXYtXFx1MDAzZXByaXYgPSBwcml2O1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIHN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBtb3RvcmNvbW1fcGh5X2RydnNbXSA9IHtcXG4gXFx0e1xcbiBcXHRcXHRQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODUxMSksXFxuQEAgLTMxNTIsMTMgKzQ2MDUsMjkgQEAgc3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIG1vdG9yY29tbV9waHlfZHJ2c1tdID0ge1xcbiBcXHRcXHQuc3VzcGVuZFxcdFxcdD0geXQ4ODIxX3N1c3BlbmQsXFxuIFxcdFxcdC5yZXN1bWVcXHRcXHRcXHQ9IHl0ODgyMV9yZXN1bWUsXFxuIFxcdH0sXFxuK1xcdHtcXG4rXFx0XFx0UEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg4MjQpLFxcbitcXHRcXHQubmFtZVxcdFxcdFxcdD0gXFxcIllUODgyNCBRdWFkIFBvcnRzIDIuNUdicHMgRXRoZXJuZXRcXFwiLFxcbitcXHRcXHQuZ2V0X2ZlYXR1cmVzXFx0XFx0PSB5dDg4MjFfZ2V0X2ZlYXR1cmVzLFxcbitcXHRcXHQucmVhZF9wYWdlXFx0XFx0PSB5dDg4MjRfcmVhZF9wYWdlLFxcbitcXHRcXHQud3JpdGVfcGFnZVxcdFxcdD0geXQ4ODI0X3dyaXRlX3BhZ2UsXFxuK1xcdFxcdC5wcm9iZVxcdFxcdCAgICAgICAgPSB5dDg4MjRfcHJvYmUsXFxuK1xcdFxcdC5jb25maWdfYW5lZ1xcdFxcdD0geXQ4ODI0X2NvbmZpZ19hbmVnLFxcbitcXHRcXHQuYW5lZ19kb25lXFx0XFx0PSB5dDg4MjRfYW5lZ19kb25lLFxcbitcXHRcXHQuY29uZmlnX2luaXRcXHRcXHQ9IHl0ODgyNF9jb25maWdfaW5pdCxcXG4rXFx0XFx0LnJlYWRfc3RhdHVzXFx0XFx0PSB5dDg4MjRfcmVhZF9zdGF0dXMsXFxuK1xcdFxcdC5zb2Z0X3Jlc2V0XFx0XFx0PSB5dDg4MjRfc29mdF9yZXNldCxcXG4rXFx0XFx0LnN1c3BlbmRcXHRcXHQ9IHl0ODgyNF9zdXNwZW5kLFxcbitcXHRcXHQucmVzdW1lXFx0XFx0XFx0PSB5dDg4MjRfcmVzdW1lLFxcbitcXHR9LFxcbiB9O1xcbiBcXG4gbW9kdWxlX3BoeV9kcml2ZXIobW90b3Jjb21tX3BoeV9kcnZzKTtcXG4gXFxuLU1PRFVMRV9ERVNDUklQVElPTihcXFwiTW90b3Jjb21tIDg1MTEvODUyMS84NTMxLzg1MzFTLzg4MjEgUEhZIGRyaXZlclxcXCIpO1xcbitNT0RVTEVfREVTQ1JJUFRJT04oXFxcIk1vdG9yY29tbSA4NTExLzg1MjEvODUzMS84NTMxUy84ODIxLzg4MjQgUEhZIGRyaXZlclxcXCIpO1xcbiBNT0RVTEVfQVVUSE9SKFxcXCJQZXRlciBHZWlzXFxcIik7XFxuIE1PRFVMRV9BVVRIT1IoXFxcIkZyYW5rXFxcIik7XFxuK01PRFVMRV9BVVRIT1IoXFxcIkt5bGVcXFwiKTtcXG4gTU9EVUxFX0xJQ0VOU0UoXFxcIkdQTFxcXCIpO1xcbiBcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBtZGlvX2RldmljZV9pZCBfX21heWJlX3VudXNlZCBtb3RvcmNvbW1fdGJsW10gPSB7XFxuQEAgLTMxNjgsNiArNDYzNyw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbWRpb19kZXZpY2VfaWQgX19tYXliZV91bnVzZWQgbW90b3Jjb21tX3RibFtdID0ge1xcbiBcXHR7IFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4NTMxKSB9LFxcbiBcXHR7IFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4NTMxUykgfSxcXG4gXFx0eyBQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODgyMSkgfSxcXG4rXFx0eyBQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODgyNCkgfSxcXG4gXFx0eyAvKiBzZW50aW5lbCAqLyB9XFxuIH07XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jIGIvZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuY1xcbmluZGV4IDEyNjk1MTc0MTQyODguLjkwNDMwNmFmNmMxYTcgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuY1xcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmNcXG5AQCAtMTI4Myw2ICsxMjgzLDIzIEBAIGludCBnZW5waHlfYzQ1X2Zhc3RfcmV0cmFpbihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBib29sIGVuYWJsZSlcXG4gfVxcbiBFWFBPUlRfU1lNQk9MX0dQTChnZW5waHlfYzQ1X2Zhc3RfcmV0cmFpbik7XFxuIFxcbisvKipcXG4rICogZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZSAtIGNvbmZpZ3VyZSB0ZW1wbGF0ZSB0ZXN0bW9kZSByZWdpc3RlcnNcXG4rICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0XFxuKyAqIEB0ZXN0X21vZGU6IHRlc3Rtb2RlIGluY2x1ZGVzIFRlc3QgbW9kZSAxIHRvIFRlc3QgbW9kZSA3XFxuKyAqXFxuKyAqIERlc2NyaXB0aW9uOiBTZXQgdGVtcGxhdGUgdGVzdG1vZGUgaW5jbHVkZSBUZXN0IG1vZGUgMSB0byBUZXN0IG1vZGUgN1xcbisgKlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2Vzcywgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUgKGUuZy4gcmVnaXN0ZXJcXG4rICpcXHRyZWFkL3dyaXRlIGVycm9yKS5cXG4rICovXFxuK2ludCBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCB0ZXN0X21vZGUpXFxuK3tcXG4rXFx0cmV0dXJuIHBoeV9tb2RpZnlfbW1kKHBoeWRldiwgTURJT19NTURfUE1BUE1ELCBNRElPX1BNQV8xMEdCVF9URVNUTU9ERSxcXG4rXFx0XFx0XFx0TURJT19QTUFfVEVNUExBVEVfVEVTVE1PREUsIHRlc3RfbW9kZSk7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwoZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZSk7XFxuK1xcbiAvKipcXG4gICogZ2VucGh5X2M0NV9wbGNhX2dldF9jZmcgLSBnZXQgUExDQSBjb25maWd1cmF0aW9uIGZyb20gc3RhbmRhcmQgcmVnaXN0ZXJzXFxuICAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BoeS5oIGIvaW5jbHVkZS9saW51eC9waHkuaFxcbmluZGV4IDExMDkyYzMxNzViM2QuLjVkYmM2OTJmNDQyZDAgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9waHkuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvcGh5LmhcXG5AQCAtMjMzOCw2ICsyMzM4LDcgQEAgaW50IGdlbnBoeV9jNDVfbG9vcGJhY2soc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgYm9vbCBlbmFibGUsIGludCBzcGVlZCk7XFxuIGludCBnZW5waHlfYzQ1X3BtYV9yZXN1bWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7XFxuIGludCBnZW5waHlfYzQ1X3BtYV9zdXNwZW5kKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpO1xcbiBpbnQgZ2VucGh5X2M0NV9mYXN0X3JldHJhaW4oc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgYm9vbCBlbmFibGUpO1xcbitpbnQgZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgdGVzdF9tb2RlKTtcXG4gaW50IGdlbnBoeV9jNDVfcGxjYV9nZXRfY2ZnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXFxuIFxcdFxcdFxcdCAgICBzdHJ1Y3QgcGh5X3BsY2FfY2ZnICpwbGNhX2NmZyk7XFxuIGludCBnZW5waHlfYzQ1X3BsY2Ffc2V0X2NmZyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvbWRpby5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L21kaW8uaFxcbmluZGV4IGIyNTQxYzk0OGZjMWUuLmJjZjE4M2UwMDhmNTggMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L21kaW8uaFxcbisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9tZGlvLmhcXG5AQCAtNjMsNiArNjMsNyBAQFxcbiAvKiBNZWRpYS1kZXBlbmRlbnQgcmVnaXN0ZXJzLiAqL1xcbiAjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1NXQVBQT0xcXHQxMzBcXHQvKiAxMEdCQVNFLVQgcGFpciBzd2FwIFxcdTAwMjYgcG9sYXJpdHkgKi9cXG4gI2RlZmluZSBNRElPX1BNQV8xMEdCVF9UWFBXUlxcdDEzMVxcdC8qIDEwR0JBU0UtVCBUWCBwb3dlciBjb250cm9sICovXFxuKyNkZWZpbmUgTURJT19QTUFfMTBHQlRfVEVTVE1PREUgMTMyXFx0LyogVGVzdCBtb2RlIGNvbnRyb2wgKi9cXG4gI2RlZmluZSBNRElPX1BNQV8xMEdCVF9TTlJcXHQxMzNcXHQvKiAxMEdCQVNFLVQgU05SIG1hcmdpbiwgbGFuZSBBLlxcbiBcXHRcXHRcXHRcXHRcXHQgKiBMYW5lcyBCLUQgYXJlIG51bWJlcmVkIDEzNC0xMzYuICovXFxuICNkZWZpbmUgTURJT19QTUFfMTBHQlJfRlNSVF9DU1JcXHQxNDdcXHQvKiAxMEdCQVNFLVIgZmFzdCByZXRyYWluIHN0YXR1cyBhbmQgY29udHJvbCAqL1xcbkBAIC0xMzksNyArMTQwLDggQEBcXG4gI2RlZmluZSBNRElPX1BNQV9DVFJMMV9TUEVFRDJfNUdcXHQoTURJT19DVFJMMV9TUEVFRFNFTEVYVCB8IDB4MTgpXFxuIC8qIDUgR2IvcyAqL1xcbiAjZGVmaW5lIE1ESU9fUE1BX0NUUkwxX1NQRUVENUdcXHRcXHQoTURJT19DVFJMMV9TUEVFRFNFTEVYVCB8IDB4MWMpXFxuLVxcbisvKiB0ZW1wbGF0ZSB0ZXN0IG1vZGUgKi9cXG4rI2RlZmluZSBNRElPX1BNQV9URU1QTEFURV9URVNUTU9ERSAgICAgIDB4RTAwMFxcbiBcXG4gLyogU3RhdHVzIHJlZ2lzdGVyIDEuICovXFxuICNkZWZpbmUgTURJT19TVEFUMV9MUE9XRVJBQkxFXFx0XFx0MHgwMDAyXFx0LyogTG93LXBvd2VyIGFiaWxpdHkgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDg6MzI6NDIuMDEyMjIzMjgzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTIyNzQ3MDI4MDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1PVE9SQ09NTV9QSFlcIixcbiAgICBcIk1ESU9fTVZVU0JcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ5dDg4MjRfcHJvYmVcIixcbiAgICBcInl0ODgyNF9jb25maWdfaW5pdFwiLFxuICAgIFwieXQ4ODI0X2NvbmZpZ19hbmVnXCIsXG4gICAgXCJ5dDg4MjRfYW5lZ19kb25lXCIsXG4gICAgXCJ5dDg4MjRfcmVhZF9zdGF0dXNcIixcbiAgICBcInl0ODgyNF9zb2Z0X3Jlc2V0XCIsXG4gICAgXCJ5dDg4MjRfc3VzcGVuZFwiLFxuICAgIFwieXQ4ODI0X3Jlc3VtZVwiLFxuICAgIFwieXQ4ODI0X3JlYWRfcGFnZVwiLFxuICAgIFwieXQ4ODI0X3dyaXRlX3BhZ2VcIixcbiAgICBcImdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHRoZSBNb3RvcmNvbW0gWVQ4ODI0IFBIWSBkcml2ZXIuIEl0IGludHJvZHVjZXMgYSBuZXcgUEhZIGRyaXZlciBzdHJ1Y3R1cmUgd2l0aCB2YXJpb3VzIGNhbGxiYWNrcyBmb3IgcHJvYmluZywgaW5pdGlhbGl6YXRpb24sIGF1dG8tbmVnb3RpYXRpb24sIHN0YXR1cyByZWFkaW5nLCBhbmQgcG93ZXIgbWFuYWdlbWVudC4gVGhlc2UgZnVuY3Rpb25zIGFyZSByZWFjaGFibGUgdmlhIE1ESU8gYnVzIGVtdWxhdGlvbiAoZS5nLiwgdXNpbmcgdGhlIE1hcnZlbGwgVVNCIE1ESU8gYWRhcHRlciBkcml2ZXIpLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbmV3bHkgYWRkZWQgUEhZIGRyaXZlciBjYWxsYmFja3MgYW5kIHRoZSBleHBvcnRlZCBoZWxwZXIgYGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGVgLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBlMmRmMTllNjE2MzFlM2ZjZjM2NmRmZDI5ZmMxOWE5ZTA4MjI3MDQ0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBBdWcgMiAwODozMjo0MCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYyBiL2RyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uY1xuaW5kZXggMzM5NmEzOGNmYzBmMi4uODY4YTBjOWYyOWE3ZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uY1xuKysrIGIvZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jXG5AQCAtMSwyNCArMSwzMyBAQFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wK1xuIC8qXG4tICogTW90b3Jjb21tIDg1MTEvODUyMS84NTIyLzg1MzEvODUzMVMvODgyMSBQSFkgZHJpdmVyLlxuKyAqIE1vdG9yY29tbSA4NTExLzg1MjEvODUyMi84NTMxLzg1MzFTLzg4MjEvODgyNCBQSFkgZHJpdmVyLlxuICAqXG4gICogQXV0aG9yOiBQZXRlciBHZWlzIFx1MDAzY3Bnd2lwZW91dEBnbWFpbC5jb21cdTAwM2VcbiAgKiBBdXRob3I6IEZyYW5rIFx1MDAzY0ZyYW5rLlNhZUBtb3Rvci1jb21tLmNvbVx1MDAzZVxuKyAqIEF1dGhvcjogS3lsZSBcdTAwM2NreWxlLnN3aXRjaEBtb3Rvci1jb21tLmNvbVx1MDAzZVxuICAqL1xuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Nsay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZXRoZXJkZXZpY2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2tlcm5lbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9vZi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGh5LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wcm9wZXJ0eS5oXHUwMDNlXG4gXG4rI2luY2x1ZGUgXCJwaHlsaWIuaFwiXG4rXG4rLyogZGVmaW5lIFBIWTg4MjQgdG9wIGV4dGVuZCBhZGRyIG9mZnNldCBpbnRlcm5hbCBhbmQgZXh0ZXJuYWwqL1xuKyNkZWZpbmUgSU5URVJOQUxfUEhZODgyNF9UT1BfRVhURU5EX09GRlNFVCAgICAoNSlcbisjZGVmaW5lIEVYVEVSTkFMX1BIWTg4MjRfVE9QX0VYVEVORF9PRkZTRVQgICAgKDQpXG4rXG4gI2RlZmluZSBQSFlfSURfWVQ4NTExXHRcdDB4MDAwMDAxMGFcbiAjZGVmaW5lIFBIWV9JRF9ZVDg1MjFcdFx0MHgwMDAwMDExYVxuICNkZWZpbmUgUEhZX0lEX1lUODUyMlx0XHQweDRmNTFlOTI4XG4gI2RlZmluZSBQSFlfSURfWVQ4NTMxXHRcdDB4NGY1MWU5MWJcbiAjZGVmaW5lIFBIWV9JRF9ZVDg1MzFTXHRcdDB4NGY1MWU5MWFcbiAjZGVmaW5lIFBIWV9JRF9ZVDg4MjFcdFx0MHg0ZjUxZWExOVxuKyNkZWZpbmUgUEhZX0lEX1lUODgyNFx0XHQweDRmNTFlOGI4XG4gLyogWVQ4NTIxL1lUODUzMVMvWVQ4ODIxIFJlZ2lzdGVyIE92ZXJ2aWV3XG4gICpcdFVUUCBSZWdpc3RlciBzcGFjZVx0fFx0RklCRVIgUmVnaXN0ZXIgc3BhY2VcbiAgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5AQCAtMzAsNiArMzksMTggQEBcbiAgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICovXG4gXG4rLyogWVQ4ODI0IFJlZ2lzdGVyIE92ZXJ2aWV3XG4rICpcdFVUUCBSZWdpc3RlciBzcGFjZVx0fFx0RklCRVIgUmVnaXN0ZXIgc3BhY2VcbisgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4rICogfFx0VVRQIE1JSVx0XHRcdHxcdEZJQkVSIE1JSVx0ICAgICAgICB8XG4rICogfFx0VVRQIE1NRFx0XHRcdHxcdFx0XHRcdHxcbisgKiB8XHRVVFAgRXh0ZW5kZWRcdFx0fFx0RklCRVIgRXh0ZW5kZWRcdFx0fFxuKyAqIHxcdFVUUCBUb3AgRXh0ZW5kZWRcdHxcdEZJQkVSIFRvcCBFeHRlbmRlZFx0fFxuKyAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbisgKiB8XHRcdFx0Q29tbW9uIFRvcCBFeHRlbmRlZFx0XHRcdHxcbisgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4rICovXG4rXG4gLyogMHgxMCB+IDB4MTUgLCAweDFFIGFuZCAweDFGIGFyZSBjb21tb24gTUlJIHJlZ2lzdGVycyBvZiB5dCBwaHkgKi9cbiBcbiAvKiBTcGVjaWZpYyBGdW5jdGlvbiBDb250cm9sIFJlZ2lzdGVyICovXG5AQCAtMzc2LDYgKzM5NywxNSBAQFxuICNkZWZpbmUgWVQ4ODIxX0NISVBfTU9ERV9BVVRPX0JYMjUwMF9TR01JSVx0MFxuICNkZWZpbmUgWVQ4ODIxX0NISVBfTU9ERV9GT1JDRV9CWDI1MDBcdFx0MVxuIFxuKyNkZWZpbmUgWVQ4ODI0X1JTU1JfU1BBQ0VfTUFTS1x0XHRcdEJJVCgwKVxuKyNkZWZpbmUgWVQ4ODI0X1JTU1JfVVNYR01JSV9TUEFDRVx0XHQoMHgxKVxuKyNkZWZpbmUgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFXHRcdFx0KDB4MClcbisjZGVmaW5lIFlUODgyNF9VVFBfVEVNUExBVEVfVEVTVF9NT0RFMVx0XHQweDIwMDBcbisjZGVmaW5lIFlUODgyNF9VVFBfVEVNUExBVEVfVEVTVF9OT1JNQUxcdFx0MHgwMDAwXG4rI2RlZmluZSBZVDg4MjRfU0RTX0NGR19NSU5fUFJFX01BU0tcdFx0R0VOTUFTSygzLCAwKVxuKyNkZWZpbmUgWVQ4ODI0X1NEU19FTl9GSUxMX1BSRVx0XHRcdEJJVCgxMylcbisjZGVmaW5lIFlUODgyNF9TRFNfVFhfUFJFX1BBRERJTkdcdFx0KDB4NylcbitcbiBzdHJ1Y3QgeXQ4NTIxX3ByaXYge1xuIFx0LyogY29tYm9fYWR2ZXJ0aXNpbmcgaXMgdXNlZCBmb3IgY2FzZSBvZiBZVDg1MjEgaW4gY29tYm8gbW9kZSxcbiBcdCAqIHRoaXMgbWVhbnMgdGhhdCB5dDg1MjEgbWF5IHdvcmsgaW4gdXRwIG9yIGZpYmVyIG1vZGUgd2hpY2ggZGVwZW5kc1xuQEAgLTM5NCw2ICs0MjQsMTEgQEAgc3RydWN0IHl0ODUyMV9wcml2IHtcbiBcdHU4IHJlZ19wYWdlO1xuIH07XG4gXG4rc3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiB7XG4rXHR1bnNpZ25lZCBpbnQgaW50ZXJmYWNlX21vZGU7XG4rXHR1bnNpZ25lZCBpbnQgb2Zmc2V0O1xuK307XG4rXG4gLyoqXG4gICogeXRwaHlfcmVhZF9leHQoKSAtIHJlYWQgYSBQSFkncyBleHRlbmRlZCByZWdpc3RlclxuICAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG5AQCAtNDMyLDYgKzQ2Nyw3MCBAQCBzdGF0aWMgaW50IHl0cGh5X3JlYWRfZXh0X3dpdGhfbG9jayhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MTYgcmVnbnVtKVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4rLyoqXG4rICogeXRwaHlfcmVhZF90b3BfZXh0KCkgLSByZWFkIGEgUEhZJ3MgdG9wIGV4dGVuZGVkIHJlZ2lzdGVyIGZvciBZVDg4MjRcbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuKyAqIEByZWdudW06IHJlZ2lzdGVyIG51bWJlciB0byByZWFkXG4rICpcbisgKiBSZXR1cm5zOiB0aGUgdmFsdWUgb2YgcmVnbnVtIHJlZyBvciBuZWdhdGl2ZSBlcnJvciBjb2RlXG4rICovXG4rc3RhdGljIGludCB5dHBoeV9yZWFkX3RvcF9leHQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTE2IHJlZ251bSlcbit7XG4rXHRpbnQgcmV0O1xuK1xuK1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5idXMtXHUwMDNlbWRpb19sb2NrKTtcbitcdHJldCA9IF9fcGh5X3BhY2thZ2Vfd3JpdGUocGh5ZGV2LCAwLCBZVFBIWV9QQUdFX1NFTEVDVCwgcmVnbnVtKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXR1cm4gX19waHlfcGFja2FnZV9yZWFkKHBoeWRldiwgMCwgWVRQSFlfUEFHRV9EQVRBKTtcbit9XG4rXG4rLyoqXG4rICogeXRwaHlfd3JpdGVfdG9wX2V4dCgpIC0gd3JpdGUgYSBQSFkncyB0b3AgZXh0ZW5kZWQgcmVnaXN0ZXIgZm9yIFlUODgyNFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4rICogQHJlZ251bTogcmVnaXN0ZXIgbnVtYmVyIHRvIHdyaXRlXG4rICogQHZhbDogcmVnaXN0ZXIgdmFsIHRvIHdyaXRlXG4rICpcbisgKiBSZXR1cm5zOiB0aGUgdmFsdWUgb2YgcmVnbnVtIHJlZyBvciBuZWdhdGl2ZSBlcnJvciBjb2RlXG4rICovXG4rc3RhdGljIGludCB5dHBoeV93cml0ZV90b3BfZXh0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUxNiByZWdudW0sXG4rXHRcdFx0ICAgICAgIHUxNiB2YWwpXG4re1xuK1x0aW50IHJldDtcbitcbitcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uYnVzLVx1MDAzZW1kaW9fbG9jayk7XG4rXHRyZXQgPSBfX3BoeV9wYWNrYWdlX3dyaXRlKHBoeWRldiwgMCwgWVRQSFlfUEFHRV9TRUxFQ1QsIHJlZ251bSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0dXJuIF9fcGh5X3BhY2thZ2Vfd3JpdGUocGh5ZGV2LCAwLCBZVFBIWV9QQUdFX0RBVEEsIHZhbCk7XG4rfVxuK1xuKy8qKlxuKyAqIHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2soKSAtIHdyaXRlIHBhZ2UgZm9yIFlUODgyNFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4rICogQHBhZ2U6IHJlZyBwYWdlKFlUODgyNF9SU1NSX1VTWEdNSUlfU1BBQ0UvWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKS5cbisgKlxuKyAqIFJldHVybnM6IHRoZSB2YWx1ZSBvZiByZWdudW0gcmVnIG9yIG5lZ2F0aXZlIGVycm9yIGNvZGVcbisgKi9cbitzdGF0aWMgaW50IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2soc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IHBhZ2UpXG4re1xuK1x0aW50IHJldDtcbitcbitcdHBoeV9sb2NrX21kaW9fYnVzKHBoeWRldik7XG4rXHRyZXQgPSB5dHBoeV9yZWFkX3RvcF9leHQocGh5ZGV2LCBZVDg1MjFfUkVHX1NQQUNFX1NFTEVDVF9SRUcpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1x0cmV0IFx1MDAyNj0gfllUODgyNF9SU1NSX1NQQUNFX01BU0s7XG4rXHRyZXQgfD0gKHBhZ2UgXHUwMDI2IFlUODgyNF9SU1NSX1NQQUNFX01BU0spO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfdG9wX2V4dChwaHlkZXYsIFlUODUyMV9SRUdfU1BBQ0VfU0VMRUNUX1JFRywgcmV0KTtcbitcbitlcnJfcmVzdG9yZV9wYWdlOlxuK1x0cGh5X3VubG9ja19tZGlvX2J1cyhwaHlkZXYpO1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4gLyoqXG4gICogeXRwaHlfd3JpdGVfZXh0KCkgLSB3cml0ZSBhIFBIWSdzIGV4dGVuZGVkIHJlZ2lzdGVyXG4gICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbkBAIC02MjEsMTEgKzcyMCw5OTggQEAgc3RhdGljIGludCB5dHBoeV9zZXRfd29sKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHN0cnVjdCBldGh0b29sX3dvbGluZm8gKndvbClcbiBcdFx0cmV0ID0gX19waHlfbW9kaWZ5KHBoeWRldiwgWVRQSFlfSU5URVJSVVBUX0VOQUJMRV9SRUcsXG4gXHRcdFx0XHQgICBZVFBIWV9JRVJfV09MLCAwKTtcbiBcdFx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1x0fVxuK1xuK2Vycl9yZXN0b3JlX3BhZ2U6XG4rXHRyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpO1xuK31cbitcbisvKipcbisgKiB5dDg4MjRfcmVhZF9wYWdlKCkgLSByZWFkIFBIWTg4MjQgcmVnIHBhZ2VcbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuKyAqXG4rICogUmV0dXJuczogY3VycmVudCByZWcgc3BhY2Ugb2YgeXQ4ODI0IChZVDg4MjRfUlNTUl9VU1hHTUlJX1NQQUNFL1xuKyAqIFlUODgyNF9SU1NSX1VUUF9TUEFDRSkgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuKyAqL1xuK3N0YXRpYyBpbnQgeXQ4ODI0X3JlYWRfcGFnZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdGludCBvbGRfcGFnZTtcbitcbitcdG9sZF9wYWdlID0geXRwaHlfcmVhZF90b3BfZXh0KHBoeWRldiwgWVQ4NTIxX1JFR19TUEFDRV9TRUxFQ1RfUkVHKTtcbitcdGlmIChvbGRfcGFnZSBcdTAwM2MgMClcbitcdFx0cmV0dXJuIG9sZF9wYWdlO1xuK1xuK1x0cmV0dXJuIG9sZF9wYWdlIFx1MDAyNiBZVDg4MjRfUlNTUl9TUEFDRV9NQVNLO1xuK307XG4rXG4rLyoqXG4rICogeXQ4ODI0X3dyaXRlX3BhZ2UoKSAtIHdyaXRlIHJlZyBwYWdlXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbisgKiBAcGFnZTogUmVnIHBhZ2UoWVQ4ODI0X1JTU1JfVVNYR01JSV9TUEFDRS9ZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpIHRvIHdyaXRlLlxuKyAqXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4rICovXG4rc3RhdGljIGludCB5dDg4MjRfd3JpdGVfcGFnZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgcGFnZSlcbit7XG4rXHRpbnQgb2xkX3BhZ2U7XG4rXHR1MTYgZGF0YTtcbitcbitcdG9sZF9wYWdlID0geXRwaHlfcmVhZF90b3BfZXh0KHBoeWRldiwgWVQ4NTIxX1JFR19TUEFDRV9TRUxFQ1RfUkVHKTtcbitcdGlmIChvbGRfcGFnZSBcdTAwM2MgMClcbitcdFx0cmV0dXJuIG9sZF9wYWdlO1xuK1x0ZGF0YSA9IG9sZF9wYWdlIFx1MDAyNiAofllUODgyNF9SU1NSX1NQQUNFX01BU0spO1xuK1x0ZGF0YSB8PSBwYWdlO1xuK1xuK1x0cmV0dXJuIHl0cGh5X3dyaXRlX3RvcF9leHQocGh5ZGV2LCBZVDg1MjFfUkVHX1NQQUNFX1NFTEVDVF9SRUcsIGRhdGEpO1xuK307XG4rXG4rLyoqXG4rICogeXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZCgpIC0gY29uZmlnIFlUODgyNCB0byBpbnZhbGlkIHRlc3QgbW9kZS5cbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuKyAqXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4rICovXG4rc3RhdGljIGludCB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0aW50IHJldCA9IDA7XG4rXG4rXHRyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXR1cm4gZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZShwaHlkZXYsXG4rXHRcdFx0XHRcdCAgICBZVDg4MjRfVVRQX1RFTVBMQVRFX1RFU1RfTU9ERTEpO1xuK31cbitcbisvKipcbisgKiB5dDg4MjRfc2RzX2lzb2xhdGVfcGFnZWQoKSAtIGVuYWJsZSBZVDg4MjQgc2VyZGVzIGlzb2xhdGUuXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbisgKlxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuKyAqL1xuK3N0YXRpYyBpbnQgeXQ4ODI0X3Nkc19pc29sYXRlX3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0aW50IG9sZF9wYWdlO1xuK1x0aW50IHJldCA9IDA7XG4rXG4rXHRvbGRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIFlUODgyNF9SU1NSX1VTWEdNSUlfU1BBQ0UpO1xuK1x0aWYgKG9sZF9wYWdlIFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRyZXQgPSBfX3BoeV9yZWFkKHBoeWRldiwgTUlJX0JNQ1IpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1x0LyogaXNvbGF0aW9uICovXG4rXHRyZXQgfD0gQk1DUl9JU09MQVRFO1xuK1x0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBNSUlfQk1DUiwgcmV0KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitlcnJfcmVzdG9yZV9wYWdlOlxuK1x0cmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRfcGFnZSwgcmV0KTtcbit9XG4rXG4rLyoqXG4rICogeXQ4ODI0X3V0cF9zb2Z0cmVzZXRfcGFnZWQoKSAtIGNvbmZpZyBZVDg4MjQgVVRQIHNvZnRyZXNldC5cbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuKyAqXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4rICovXG4rc3RhdGljIGludCB5dDg4MjRfdXRwX3NvZnRyZXNldF9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdGludCByZXQgPSAwO1xuK1x0aW50IHZhbDtcbitcbitcdHJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcdHJldCA9IHBoeV9yZWFkKHBoeWRldiwgTUlJX0JNQ1IpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcdHJldCB8PSBCTUNSX1JFU0VUO1xuK1x0cmV0ID0gcGh5X3dyaXRlKHBoeWRldiwgTUlJX0JNQ1IsIHJldCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1x0Lyogd2FpdCB1bnRpbCBzb2Z0cmVzZXQgZG9uZS4gKi9cbitcdHJldHVybiBwaHlfcmVhZF9wb2xsX3RpbWVvdXQocGh5ZGV2LCBNSUlfQk1DUiwgdmFsLFxuK1x0XHRcdFx0ICAgICAhKHZhbCBcdTAwMjYgQk1DUl9SRVNFVCksXG4rXHRcdFx0XHQgICAgIDUwMDAwLCA2MDAwMDAsIHRydWUpO1xuK31cbitcbisvKipcbisgKiB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQoKSAtIGNvbmZpZyBZVDg4MjQgdG8gbm9ybWFsIHRlc3QgbW9kZS5cbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuKyAqXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4rICovXG4rc3RhdGljIGludCB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRpbnQgcmV0ID0gMDtcbitcbitcdHJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldHVybiBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlKHBoeWRldixcbitcdFx0XHRcdFx0ICAgIFlUODgyNF9VVFBfVEVNUExBVEVfVEVTVF9OT1JNQUwpO1xuK31cbitcbisvKipcbisgKiB5dDg4MjRfc2RzX2lzb2xhdGVfYW5kX3NvZnRyZXNldF9wYWdlZCgpIC0gZGlzYWJsZSBZVDg4MjQgc2VyZGVzIGlzb2xhdGVcbisgKiBhbmQgc2RzIHNvZnRyZXNldC5cbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuKyAqXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4rICovXG4rc3RhdGljIGludCB5dDg4MjRfc2RzX2lzb2xhdGVfYW5kX3NvZnRyZXNldF9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdHVuc2lnbmVkIGludCByZXRyeSA9IDEyO1xuK1x0aW50IG9sZF9wYWdlO1xuK1x0aW50IHJldCA9IC0xO1xuK1xuK1x0b2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCBZVDg4MjRfUlNTUl9VU1hHTUlJX1NQQUNFKTtcbitcdGlmIChvbGRfcGFnZSBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0cmV0ID0gX19waHlfcmVhZChwaHlkZXYsIE1JSV9CTUNSKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdC8qIGRpc2FibGUgaXNvbGF0aW9uICovXG4rXHRyZXQgXHUwMDI2PSB+QklUKDEwKTtcbitcdC8qIHNvZnQgcmVzZXQgKi9cbitcdHJldCB8PSBCTUNSX1JFU0VUO1xuK1x0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBNSUlfQk1DUiwgcmV0KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcdGRvIHtcbitcdFx0bXNsZWVwKDUwKTtcbitcdFx0cmV0ID0gX19waHlfcmVhZChwaHlkZXYsIE1JSV9CTUNSKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHR9IHdoaWxlICgocmV0IFx1MDAyNiBCTUNSX1JFU0VUKSBcdTAwMjZcdTAwMjYgLS1yZXRyeSk7XG4rXG4rXHRpZiAocmV0IFx1MDAyNiBCTUNSX1JFU0VUKSB7XG4rXHRcdHJldCA9IC1FVElNRURPVVQ7XG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcdH1cbitcbitlcnJfcmVzdG9yZV9wYWdlOlxuK1x0cmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRfcGFnZSwgcmV0KTtcbit9XG4rXG4rLyoqXG4rICogeXQ4ODI0X3NvZnRfcmVzZXQoKSAtIGNhbGxlZCB0byBkbyBQSFkgc29mdHdhcmUgcmVzZXRcbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuKyAqXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4rICovXG4rc3RhdGljIGludCB5dDg4MjRfc29mdF9yZXNldChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdGludCByZXQ7XG4rXG4rXHRpZiAocGh5ZGV2LVx1MDAzZWludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUwpIHtcbitcdFx0LyogaW52YWxpZCB0ZXN0IG1vZGUgKi9cbitcdFx0cmV0ID0geXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXHRcdHJldCA9IHl0ODgyNF91dHBfc29mdHJlc2V0X3BhZ2VkKHBoeWRldik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdFx0Lyogbm9ybWFsIG1vZGUgKi9cbitcdFx0cmV0ID0geXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdH0gZWxzZSB7XG4rXHRcdC8qIGludmFsaWQgdGVzdCBtb2RlICovXG4rXHRcdHJldCA9IHl0ODgyNF91dHBfaW52YWxpZF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1xuK1x0XHQvKiBzZHMgaXNvbGF0aW9uICovXG4rXHRcdHJldCA9IHl0ODgyNF9zZHNfaXNvbGF0ZV9wYWdlZChwaHlkZXYpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXG4rXHRcdC8qIHV0cCBzb2Z0IHJlc2V0ICovXG4rXHRcdHJldCA9IHl0ODgyNF91dHBfc29mdHJlc2V0X3BhZ2VkKHBoeWRldik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcbitcdFx0Lyogbm9ybWFsIG1vZGUgKi9cbitcdFx0cmV0ID0geXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcbitcdFx0Lyogc2RzIHNvZnQgcmVzZXQgYW5kIGRpc2FibGUgaXNvbGF0aW9uICovXG4rXHRcdHJldCA9IHl0ODgyNF9zZHNfaXNvbGF0ZV9hbmRfc29mdHJlc2V0X3BhZ2VkKHBoeWRldik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdH1cbitcdHJldHVybiAwO1xuK31cbitcbisvKipcbisgKiB5dDg4MjRfZXh0ZXJuX2NvbmZpZ191dHBfaW5pdF9wYWdlZCgpIC0gY29uZmlnIGV4dGVybmFsIHBoeTg4MjQgdXRwIGluaXRcbisgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3RcbisgKlxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuKyAqL1xuK3N0YXRpYyBpbnQgeXQ4ODI0X2V4dGVybl9jb25maWdfdXRwX2luaXRfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRpbnQgZGF0YSA9IDA7XG4rXHRpbnQgcmV0ID0gMDtcbitcbitcdHJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcdC8qIHBvd2VyIGRvd24gKi9cbitcdGRhdGEgPSBwaHlfcmVhZChwaHlkZXYsIE1JSV9CTUNSKTtcbitcdGlmIChkYXRhIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gZGF0YTtcbitcdGRhdGEgfD0gQk1DUl9QRE9XTjtcbitcdHJldCA9IHBoeV93cml0ZShwaHlkZXYsIE1JSV9CTUNSLCBkYXRhKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHQvKiBwbGwgY2FsaWJyYXRpb24gKi9cbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAwMDEsIDB4MDAwMyk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTIwZSwgMHgwY2JhKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMjBhLCAweGMzZjEpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyMGMsIDB4MTYyMCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJiNiwgMHgwYTAwKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmI2LCAweDBlMDApO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdC8qIG9wdGltaXphdGlvbiB1dHAgKi9cbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAwMDEsIDB4MDAwMyk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0LyogZW5hYmxlIG5pYmJsZSAqL1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTAwMywgMHgwMDAzKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHQvKiBpZGxlIGVyciBkZXRlY3QgZW5hYmxlICovXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwM2QwLCAweDUyMTApO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdC8qIG9wdGltaXplZCAyLjVHIGxvbmcgY2FibGUgcGVyZm9ybWFuY2UgKi9cbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzNzIsIDB4NTAzOCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDM3YywgMHg2MDY4KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzg4LCAweDAwYTApO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdC8qIG9wdGltaXplZCBmYXN0IHJldHJhaW4gKi9cbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzNTksIDB4MjE0MCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDAwYywgMHhjMWEwKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHQvKiAyLjVHIHRlbXBsYXRlIHRvbmUgKi9cbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZmEsIDB4MDA4Myk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDRlMiwgMHgwMTQ5KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHQvKiBvcHRpbWl6ZWQgMi41RyB0ZW1wbGF0ZSAqL1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ3ZSwgMHgzOTM5KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDdmLCAweDM5MzkpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0ODAsIDB4MzkzOSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ4MSwgMHgzOTM5KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHQvKiBvcHRpbWl6ZWQgMTAwME0gY2FibGUgbGVuZ3RoIHRocmVzaG9sZCAqL1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDMzNiwgMHhhYjBhKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzQwLCAweDMwMWQpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdC8qIDEwME0gdGVtcGxhdGUgYW1wbGl0dWRlICovXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDZlLCAweDQ1NDUpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NmYsIDB4NDU0NSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ3MCwgMHg0NTQ1KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDcxLCAweDQ1NDUpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdC8qIG9wdGltaXplZCAxMDBNIGNhYmxlIGxlbmd0aCB0aHJlc2hvbGQgKi9cbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzMGIsIDB4YWExZCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDcxZiwgMHgwMDM2KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHQvKiAxME0gdGVtcGxhdGUgYW1wbGl0dWRlICovXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDZiLCAweDE4MTgpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NmMsIDB4MTgxOCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0Lyogb3B0aW1pemVkIDEwTSBjYWJsZSBsZW5ndGggdGhyZXNob2xkICovXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDY2LCAweDZjNmMpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NjcsIDB4NmM2Yyk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ2OCwgMHg2YzZjKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDY5LCAweDZjNmMpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdC8qIG9wdGltaXplIHV0cCAxMDAwTSBwZXJmb3JtYW5jZSAqL1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDM0YSwgMHhmZjAzKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMGY4LCAweGIzZmYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAwNTksIDB4NDA0MCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDMyYywgMHg1MDk0KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzJkLCAweGQwOTQpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzMmUsIDB4NTMwOCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDMyMiwgMHg2NDQwKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNGQzLCAweDUyMjApO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0ZDIsIDB4NTIyMCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0Lyogb3B0aW1pemVkIEVNQyBDUyAqL1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDBjOCwgMHhmZmZmKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMGJlLCAweDY0MDYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzN2EsIDB4NDBmZik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0Lyogb3B0aW1pemVkIEVNQyBSRSAqL1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ4MiwgMHhmZmZmKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmQ1LCAweDFmMWYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZDYsIDB4MWYxZik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJkNywgMHgxZjFmKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmQ4LCAweDFmMWYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyMTgsIDB4MDA2ZSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTAxZCwgMHhmZmYwKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDFlLCAweGZmZjApO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEwMWQsIDB4ZmZmZik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTAxZSwgMHhmZmZmKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbisvKipcbisgKiB5dDg4MjRfZXh0ZXJuX2NvbmZpZ19zZHNfaW5pdF9wYWdlZCgpIC0gY29uZmlnIGV4dGVybmFsIHBoeTg4MjQgc2RzIGluaXRcbisgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3RcbisgKlxuKyAqXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4rICovXG4rc3RhdGljIGludCB5dDg4MjRfZXh0ZXJuX2NvbmZpZ19zZHNfaW5pdF9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnNoYXJlZF9wcml2O1xuK1x0aW50IHJldCA9IDAsIG9sZF9wYWdlO1xuK1x0aW50IHZhbF8xLCB2YWxfMiwgdmFsXzMsIHRtcDtcbitcdHUxNiBkYXRhID0gMDtcbitcdGludCBwb3J0O1xuK1xuK1x0c2hhcmVkX3ByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xuK1x0cG9ydCA9IHBoeWRldi1cdTAwM2VtZGlvLmFkZHIgLSBzaGFyZWRfcHJpdi1cdTAwM2VvZmZzZXQ7XG4rXHRpZiAocG9ydCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRvbGRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIFlUODgyNF9SU1NSX1VTWEdNSUlfU1BBQ0UpO1xuK1x0aWYgKG9sZF9wYWdlIFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHQvKiByZWFkIGVmdXNlICovXG4rXHR2YWxfMSA9IHl0cGh5X3JlYWRfdG9wX2V4dChwaHlkZXYsIDB4YTEzZSk7XG4rXHRpZiAodmFsXzEgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdHZhbF8yID0geXRwaHlfcmVhZF90b3BfZXh0KHBoeWRldiwgMHhhMTNmKTtcbitcdGlmICh2YWxfMiBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0dmFsXzMgPSB5dHBoeV9yZWFkX3RvcF9leHQocGh5ZGV2LCAweGExNDApO1xuK1x0aWYgKHZhbF8zIFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRpZiAocG9ydCA9PSAwKSB7XG4rXHRcdC8qIFNlcmRlcyBvcHRpbWl6YXRpb24gKi9cbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGJlLCAweDAwMGQpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDlmLCAweDdkZWQpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGE5LCAweDAwOWYpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0LyogYW5hbG9nIENEUiAqL1xuK1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0MDYsIDB4MDgwMCk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHQvKiBvcHRpbWl6ZWQgVkNPICovXG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQzOCwgMHg5MDI0KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQzOSwgMHgwMGMwKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdC8qIG9wdGltaXplZCBQTEwgbG9jayAqL1xuK1x0XHRyZXQgPSB5dHBoeV9yZWFkX2V4dChwaHlkZXYsIDB4MDQyOSk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHRyZXQgXHUwMDI2PSB+KEJJVCgxMykgfCBCSVQoMTIpKTtcbitcdFx0dG1wID0gKHZhbF8xIFx1MDAyNiAoQklUKDcpIHwgQklUKDYpKSkgXHUwMDNlXHUwMDNlIDY7XG4rXHRcdHJldCB8PSAodG1wIFx1MDAzY1x1MDAzYyAxMik7XG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQyOSwgcmV0KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdHJldCA9IHl0cGh5X3JlYWRfZXh0KHBoeWRldiwgMHgwNDQxKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdHJldCBcdTAwMjY9IH4oQklUKDEpIHwgQklUKDApKTtcbitcdFx0dG1wID0gKHZhbF8xIFx1MDAyNiAoQklUKDUpIHwgQklUKDQpKSkgXHUwMDNlXHUwMDNlIDQ7XG4rXHRcdHJldCB8PSB0bXA7XG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ0MSwgcmV0KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdHJldCA9IHl0cGh5X3JlYWRfZXh0KHBoeWRldiwgMHgwNDJiKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdHJldCBcdTAwMjY9IH4oQklUKDEzKSB8IEJJVCgxMikpO1xuK1x0XHR0bXAgPSAodmFsXzMgXHUwMDI2IChCSVQoMSkgfCBCSVQoMCkpKTtcbitcdFx0cmV0IHw9ICh0bXAgXHUwMDNjXHUwMDNjIDEyKTtcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDJiLCByZXQpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDNhLCAweDEwMDYpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDJhLCAweGYwNzApO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0LyogY2FibGUgbGVuZ3RoIHRocmVzaG9sZCAqL1xuK1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OTEsIDB4MDA3Zik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OTIsIDB4N2Y3Zik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHQvKiBTZXJkZXMgdHJhaW5pbmcgdGhyZXNob2xkICovXG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ1NCwgMHgwZjE0KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ5NywgMHgwYTQ0KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdC8qIGRpZ2l0YWwgZXllIGRpYWdyYW0gb2YgU2VyRGVzICovXG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRjZCwgMHgwMDAwKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdC8qIFNlcmRlcyBMRE8gKi9cbitcdFx0cmV0ID0geXRwaHlfcmVhZF9leHQocGh5ZGV2LCAweDA0YjUpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0cmV0IFx1MDAyNj0gfihCSVQoNikgfCBCSVQoNSkgfCBCSVQoNCkpO1xuK1x0XHR0bXAgPSAodmFsXzIgXHUwMDI2IChCSVQoNCkgfCBCSVQoMykgfCBCSVQoMikpKSBcdTAwM2VcdTAwM2UgMjtcbitcdFx0cmV0IHw9ICh0bXAgXHUwMDNjXHUwMDNjIDQpO1xuK1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YjUsIHJldCk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHRyZXQgPSB5dHBoeV9yZWFkX2V4dChwaHlkZXYsIDB4MDRiNCk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHRyZXQgXHUwMDI2PSB+KEJJVCgxMCkgfCBCSVQoOSkgfCBCSVQoOCkpO1xuK1x0XHR0bXAgPSAodmFsXzIgXHUwMDI2IChCSVQoNykgfCBCSVQoNikgfCBCSVQoNSkpKSBcdTAwM2VcdTAwM2UgNTtcbitcdFx0cmV0IHw9ICh0bXAgXHUwMDNjXHUwMDNjIDgpO1xuK1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YjQsIHJldCk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHQvKiBvcHRpbWl6ZWQgU2VyZGVzIFJYICovXG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRhZiwgMHg0NWUzKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ4YSwgMHgwZmZmKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQwOCwgMHg3YzAwKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRkNiwgMHgwMDdmKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ0ZiwgMHhmZjA4KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdC8qIG9wdGltaXplZCBTZXJkZXMgVFggKi9cbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDhlLCAweDdkMDApO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMDBkLCAweDA2MDYpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0LyogU2VyZGVzIG1hbnVhbCBjb25maWcgKi9cbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGIwLCAweDA4MDQpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGIxLCAweDcwNzQpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGFmLCAweDQ1ZTcpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0LyogcmVzdGFydCBjYWxpYnJhdGlvbiAqL1xuK1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAwMDMsIDB4NTYwMyk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OTIsIDB4N2ZmZik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OTIsIDB4N2Y3Zik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDIwMDAsIDB4MDA0MCk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDIwMDAsIDB4MDAwMCk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1x0fVxuK1xuK1x0LyogVFggcHJlYW1ibGUgcGFkZGVkIHRvIDg7IFJYIElQRyBhbHdheXMgXHUwMDNlIDggKi9cbitcdHJldCA9IF9fcGh5X3JlYWQocGh5ZGV2LCBNSUlfUkVTVjEpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1x0cmV0IFx1MDAyNj0gfllUODgyNF9TRFNfQ0ZHX01JTl9QUkVfTUFTSztcbitcdHJldCB8PSBZVDg4MjRfU0RTX1RYX1BSRV9QQURESU5HO1xuK1x0cmV0IHw9IFlUODgyNF9TRFNfRU5fRklMTF9QUkU7XG4rXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIE1JSV9SRVNWMSwgcmV0KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdGRhdGEgPSBfX3BoeV9yZWFkKHBoeWRldiwgTUlJX0JNQ1IpO1xuK1x0aWYgKGRhdGEgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcdGRhdGEgfD0gQk1DUl9SRVNFVDtcbitcdGRhdGEgfD0gQk1DUl9BTkVOQUJMRTtcbitcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgTUlJX0JNQ1IsIGRhdGEpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK2Vycl9yZXN0b3JlX3BhZ2U6XG4rXHRyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpO1xuK31cbitcbisvKipcbisgKiB5dDg4MjRfaW50ZXJuYWxfY29uZmlnX2luaXRfcGFnZWQoKSAtIGNvbmZpZyBpbnRlcm5hbCBwaHk4ODI0IGluaXRcbisgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3RcbisgKlxuKyAqXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4rICovXG4rc3RhdGljIGludCB5dDg4MjRfaW50ZXJuYWxfY29uZmlnX2luaXRfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpzaGFyZWRfcHJpdjtcbitcdGludCBwb3J0ID0gMDtcbitcdGludCByZXQgPSAwO1xuK1x0aW50IGRhdGE7XG4rXG4rXHRyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRzaGFyZWRfcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XG4rXHRwb3J0ID0gcGh5ZGV2LVx1MDAzZW1kaW8uYWRkciAtIHNoYXJlZF9wcml2LVx1MDAzZW9mZnNldDtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDEsIDB4Myk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1x0ZGF0YSA9IHBoeV9yZWFkKHBoeWRldiwgTUlJX0JNQ1IpO1xuK1x0aWYgKGRhdGEgXHUwMDNjIDApXG4rXHRcdHJldHVybiBkYXRhO1xuK1x0ZGF0YSB8PSBCTUNSX1BET1dOO1xuK1x0cmV0ID0gcGh5X3dyaXRlKHBoeWRldiwgTUlJX0JNQ1IsIGRhdGEpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcdGlmIChwb3J0ID09IDApIHtcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTIwZSwgMHhjYmEpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyMGEsIDB4YzNmMSk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTIwYywgMHgxNjIwKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmI2LCAweGEwMCk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJiNiwgMHhlMDApO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEwMDMsIDB4Myk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdH1cbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDNkMCwgMHg1MjEwKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzNzIsIDB4NTAzOCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzdjLCAweDYwNjgpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDM4OCwgMHhhMCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzU5LCAweDIxNDApO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZmEsIDB4ODMpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDRlMiwgMHgxNDkpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcdC8qIDIuNUcgdGVtcGF0ZSAqL1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDdlLCAweDM5MzkpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ3ZiwgMHgzOTM5KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0ODAsIDB4MzkzOSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDgxLCAweDM5MzkpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcdC8qIDEwMDAgY2FibGUgbGVuZ3RoIHRocmVzaG9sZCAqL1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzM2LCAweGFiMGEpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDM0MCwgMHgzMDFkKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXHQvKiAxMDAwIHBlcmZvcm1hbmNlICovXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzNGEsIDB4ZmYwMyk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4ZjgsIDB4YjNmZik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzJjLCAweDUwOTQpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDMyZCwgMHhkMDk0KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzMmUsIDB4NTMwOCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzIyLCAweDY0NDApO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDRkMywgMHg1MjIwKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0ZDIsIDB4NTIyMCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1x0LyogMTAwIHRlbXBhdGUgKi9cbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ2ZSwgMHg0NTQ1KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NmYsIDB4NDU0NSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDcwLCAweDQ1NDUpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ3MSwgMHg0NTQ1KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXHQvKiAxMDAgY2FibGUgbGVuZ3RoIHRocmVzaG9sZCAqL1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzBiLCAweGFhMWQpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDcxZiwgMHgzNik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1x0LyogMTAgdGVtcGF0ZSAqL1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDZiLCAweDE4MTgpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ2YywgMHgxODE4KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXHQvKiAxMCB0ZW1wYXRlIE1BVSovXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NjYsIDB4NmM2Yyk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDY3LCAweDZjNmMpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ2OCwgMHg2YzZjKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NjksIDB4NmM2Yyk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1x0LyogRU1DIENTICovXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhjOCwgMHhmZmYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGJlLCAweDY0MDYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDM3YSwgMHg0MGZmKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXHQvKiBFTUMgUkUqL1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDgyLCAweGZmZmYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcdGlmIChwb3J0ID09IDApIHtcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDgyLCAweGZmZmYpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZDUsIDB4MWYxZik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJkNiwgMHgxZjFmKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmQ3LCAweDFmMWYpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZDgsIDB4MWYxZik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTIxOCwgMHg2ZSk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTAxZCwgMHhmZmYwKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDFlLCAweGZmZjApO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEwMWQsIDB4ZmZmZik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTAxZSwgMHhmZmZmKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1x0fVxuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YywgMHg0MWExKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXHRyZXQgPSBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlKHBoeWRldixcbitcdFx0XHRcdFx0ICAgWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX01PREUxKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXHRkYXRhID0gcGh5X3JlYWQocGh5ZGV2LCBNSUlfQk1DUik7XG4rXHRpZiAoZGF0YSBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcdGRhdGEgfD0gQk1DUl9SRVNFVDtcbitcdGRhdGEgfD0gQk1DUl9BTkVOQUJMRTtcbitcdHJldCA9IHBoeV93cml0ZShwaHlkZXYsIE1JSV9CTUNSLCBkYXRhKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXHRyZXQgPSBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlKHBoeWRldixcbitcdFx0XHRcdFx0ICAgWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX05PUk1BTCk7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbisvKipcbisgKiB5dDg4MjRfY29uZmlnX2luaXQoKSAtIHBoeSBpbml0aWFsaXphdGlvaW5cbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuKyAqXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4rICovXG4rc3RhdGljIGludCB5dDg4MjRfY29uZmlnX2luaXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRpbnQgcmV0O1xuK1xuK1x0aWYgKHBoeWRldi1cdTAwM2VpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMKSB7XG4rXHRcdHJldCA9IHl0ODgyNF9pbnRlcm5hbF9jb25maWdfaW5pdF9wYWdlZChwaHlkZXYpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXHR9IGVsc2Uge1xuK1x0XHRyZXQgPSB5dDg4MjRfZXh0ZXJuX2NvbmZpZ191dHBfaW5pdF9wYWdlZChwaHlkZXYpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXHRcdHJldCA9IHl0ODgyNF9leHRlcm5fY29uZmlnX3Nkc19pbml0X3BhZ2VkKHBoeWRldik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIHJldDtcbiBcdH1cbitcdHJldCA9IHl0ODgyNF9zb2Z0X3Jlc2V0KHBoeWRldik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuIFxuLWVycl9yZXN0b3JlX3BhZ2U6XG4tXHRyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpO1xuK1x0cGh5ZGV2X2RiZyhwaHlkZXYsIFwiJXMgZG9uZSwgcGh5IGFkZHI6ICVkXFxuXCIsXG4rXHRcdCAgIF9fZnVuY19fLCBwaHlkZXYtXHUwMDNlbWRpby5hZGRyKTtcbitcbitcdHJldHVybiAwO1xuIH1cbiBcbiBzdGF0aWMgaW50IHl0ODUzMV9zZXRfd29sKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG5AQCAtMzA2Niw2ICs0MTUyLDM3MyBAQCBzdGF0aWMgaW50IHl0ODgyMV9yZXN1bWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiBcdHJldHVybiB5dDg4MjFfbW9kaWZ5X3V0cF9maWJlcl9ibWNyKHBoeWRldiwgQk1DUl9QRE9XTiwgMCk7XG4gfVxuIFxuKy8qKlxuKyAqIHl0ODgyNF9hbmVnX2RvbmUoKSAgLSBjaGVjayBuZWdvdGlhdGlvbiBzdGF0ZS5cbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuKyAqXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4rICovXG4rc3RhdGljIGludCB5dDg4MjRfYW5lZ19kb25lKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0aW50IGxpbmsgPSAwO1xuK1x0aW50IHJldCA9IDA7XG4rXG4rXHRyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSBwaHlfcmVhZChwaHlkZXYsIFlUUEhZX1NQRUNJRklDX1NUQVRVU19SRUcpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcdGxpbmsgPSAhIShyZXQgXHUwMDI2IFlUUEhZX1NTUl9MSU5LKTtcbitcbitcdHBoeWRldl9kYmcocGh5ZGV2LCBcIiVzLCBwaHkgYWRkcjogJWQsIGxpbmtfdXRwOiAlZFxcblwiLFxuK1x0XHQgICBfX2Z1bmNfXywgcGh5ZGV2LVx1MDAzZW1kaW8uYWRkciwgbGluayk7XG4rXG4rXHRyZXR1cm4gbGluaztcbit9XG4rXG4rLyoqXG4rICogeXQ4ODI0X3JlYWRfc3RhdHVzX3BhZ2VkKCkgLSAgZGV0ZXJtaW5lcyB0aGUgc3BlZWQgYW5kIGR1cGxleCBvZiBvbmUgcGFnZVxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4rICogQHN0YXR1czogVGhlIGxpbmsgc3RhdHVzLCBpbmNsdWRlIHNwZWVkLCBkdXBsZXggYW5kIGxpbmsgc3RhdGUuXG4rICogQGxwYTogbGluayBwYXJ0bmVyIGFkdmVydGlzaW5nLlxuKyAqXG4rICogUmV0dXJuczogMSAodXRwIGxpbmspLDAgKG5vIGxpbmspIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbisgKi9cbitzdGF0aWMgaW50IHl0ODgyNF9yZWFkX3N0YXR1c19wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuK1x0XHRcdFx0ICAgIGludCAqc3RhdHVzLCBpbnQgKmxwYSlcbit7XG4rXHRpbnQgcmV0ID0gMDtcbitcbitcdHJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldCA9IHBoeV9yZWFkKHBoeWRldiwgTUlJX0xQQSk7XG4rXHQqbHBhID0gcmV0O1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldCA9IHBoeV9yZWFkKHBoeWRldiwgWVRQSFlfU1BFQ0lGSUNfU1RBVFVTX1JFRyk7XG4rXHQqc3RhdHVzID0gcmV0O1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldCA9ICEhKCpzdGF0dXMgXHUwMDI2IFlUUEhZX1NTUl9MSU5LKTtcbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuKy8qKlxuKyAqIHl0ODgyNF9yZWFkX3N0YXR1cygpIC0gIGRldGVybWluZXMgdGhlIG5lZ290aWF0ZWQgc3BlZWQgYW5kIGR1cGxleFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4rICpcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbisgKi9cbitzdGF0aWMgaW50IHl0ODgyNF9yZWFkX3N0YXR1cyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdGludCBsaW5rO1xuK1x0aW50IGxwYTtcbitcdGludCB2YWw7XG4rXG4rXHRwaHlkZXYtXHUwMDNlcGF1c2UgPSAwO1xuK1x0cGh5ZGV2LVx1MDAzZWFzeW1fcGF1c2UgPSAwO1xuK1x0cGh5ZGV2LVx1MDAzZWxpbmsgPSAwO1xuK1x0cGh5ZGV2LVx1MDAzZXNwZWVkID0gU1BFRURfVU5LTk9XTjtcbitcdHBoeWRldi1cdTAwM2VkdXBsZXggPSBEVVBMRVhfVU5LTk9XTjtcbitcbitcdGxpbmsgPSB5dDg4MjRfcmVhZF9zdGF0dXNfcGFnZWQocGh5ZGV2LFxuK1x0XHRcdFx0XHRcdTAwMjZ2YWwsIFx1MDAyNmxwYSk7XG4rXHRpZiAobGluayBcdTAwM2MgMClcbitcdFx0cmV0dXJuIGxpbms7XG4rXG4rXHRpZiAobGluaykge1xuK1x0XHRwaHlkZXYtXHUwMDNlbGluayA9IDE7XG4rXHRcdHBoeWRldi1cdTAwM2VwYXVzZSA9ICEhKGxwYSBcdTAwMjYgQklUKDEwKSk7XG4rXHRcdHBoeWRldi1cdTAwM2Vhc3ltX3BhdXNlID0gISEobHBhIFx1MDAyNiBCSVQoMTEpKTtcbitcbitcdFx0LyogdXBkYXRlIHNwZWVkIFx1MDAyNiBkdXBsZXggKi9cbitcdFx0eXQ4ODIxX2FkanVzdF9zdGF0dXMocGh5ZGV2LCB2YWwpO1xuK1x0fSBlbHNlIHtcbitcdFx0cGh5ZGV2LVx1MDAzZWxpbmsgPSAwO1xuK1x0XHRwaHlkZXYtXHUwMDNlcGF1c2UgPSAwO1xuK1x0XHRwaHlkZXYtXHUwMDNlYXN5bV9wYXVzZSA9IDA7XG4rXHRcdHBoeWRldi1cdTAwM2VzcGVlZCA9IFNQRUVEX1VOS05PV047XG4rXHRcdHBoeWRldi1cdTAwM2VkdXBsZXggPSBEVVBMRVhfVU5LTk9XTjtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbisvKipcbisgKiB5dDg4MjRfdXRwX3Bvd2VyX29uKCk6IHV0cCBwb3dlciBvbi5cbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuKyAqXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4rICovXG4rc3RhdGljIGludCB5dDg4MjRfdXRwX3Bvd2VyX29uKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0aW50IHJldCA9IDA7XG4rXG4rXHRyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSBwaHlfcmVhZChwaHlkZXYsIE1JSV9CTUNSKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgXHUwMDI2PSB+Qk1DUl9QRE9XTjtcbitcdHJldCBcdTAwMjY9IH5CTUNSX0lTT0xBVEU7XG4rXG4rXHRyZXR1cm4gcGh5X3dyaXRlKHBoeWRldiwgTUlJX0JNQ1IsIHJldCk7XG4rfVxuK1xuKy8qKlxuKyAqIHl0ODgyNF91dHBfcG93ZXJfZG93bigpOiB1dHAgcG93ZXIgZG93bi5cbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuKyAqXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4rICovXG4rc3RhdGljIGludCB5dDg4MjRfdXRwX3Bvd2VyX2Rvd24oc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRpbnQgcmV0ID0gMDtcbitcbitcdHJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldCA9IHBoeV9yZWFkKHBoeWRldiwgTUlJX0JNQ1IpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldHVybiBwaHlfd3JpdGUocGh5ZGV2LCBNSUlfQk1DUiwgcmV0IHwgQk1DUl9QRE9XTik7XG4rfVxuK1xuKy8qKlxuKyAqIHl0ODgyNF9wb3dlcl9vbigpICAtIHNldCB1dHAgcG93ZXIgb24uXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbisgKlxuKyAqIE5PVEU6IG5lZWQgV0EgbGlrZSBzb2Z0cmVzZXRcbisgKlxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuKyAqL1xuK3N0YXRpYyBpbnQgeXQ4ODI0X3Bvd2VyX29uKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0aW50IHJldDtcbitcbitcdGlmIChwaHlkZXYtXHUwMDNlaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTCkge1xuK1x0XHQvKiBpbnZhbGlkIHRlc3QgbW9kZSAqL1xuK1x0XHRyZXQgPSB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdFx0LyogdXRwIHBvd2VyIG9uICovXG4rXHRcdHJldCA9IHl0ODgyNF91dHBfcG93ZXJfb24ocGh5ZGV2KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1x0XHQvKiBub3JtYWwgbW9kZSAqL1xuK1x0XHRyZXQgPSB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1x0fSBlbHNlIHtcbitcdFx0LyogaW52YWxpZCB0ZXN0IG1vZGUgKi9cbitcdFx0cmV0ID0geXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXG4rXHRcdC8qIHNkcyBpc29sYXRpb24gKi9cbitcdFx0cmV0ID0geXQ4ODI0X3Nkc19pc29sYXRlX3BhZ2VkKHBoeWRldik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcbitcdFx0LyogdXRwIHBvd2VyIG9uICovXG4rXHRcdHJldCA9IHl0ODgyNF91dHBfcG93ZXJfb24ocGh5ZGV2KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1xuK1x0XHQvKiBub3JtYWwgbW9kZSAqL1xuK1x0XHRyZXQgPSB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1xuK1x0XHQvKiBzZHMgc29mdCByZXNldCBhbmQgZGlzYWJsZSBpc29sYXRpb24gKi9cbitcdFx0cmV0ID0geXQ4ODI0X3Nkc19pc29sYXRlX2FuZF9zb2Z0cmVzZXRfcGFnZWQocGh5ZGV2KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1x0fVxuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKy8qKlxuKyAqIHl0ODgyNF9yZXN1bWUoKSAtIHJlc3VtZSB0aGUgaGFyZHdhcmVcbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuKyAqXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4rICovXG4rc3RhdGljIGludCB5dDg4MjRfcmVzdW1lKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0cmV0dXJuIHl0ODgyNF9wb3dlcl9vbihwaHlkZXYpO1xuK31cbitcbisvKipcbisgKiB5dDg4MjRfcG93ZXJfZG93bigpICAtIHNldCB1dHAgcG93ZXIgZG93bi5cbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuKyAqXG4rICogTk9URTogbmVlZCBXQSBsaWtlIHNvZnRyZXNldFxuKyAqXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4rICovXG4rc3RhdGljIGludCB5dDg4MjRfcG93ZXJfZG93bihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdGludCByZXQ7XG4rXG4rXHRpZiAocGh5ZGV2LVx1MDAzZWludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUwpIHtcbitcdFx0LyogaW52YWxpZCB0ZXN0IG1vZGUgKi9cbitcdFx0cmV0ID0geXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXHRcdC8qIHV0cCBwb3dlciBkb3duICovXG4rXHRcdHJldCA9IHl0ODgyNF91dHBfcG93ZXJfZG93bihwaHlkZXYpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXHRcdC8qIG5vcm1hbCBtb2RlICovXG4rXHRcdHJldCA9IHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXHR9IGVsc2Uge1xuK1x0XHQvKiBpbnZhbGlkIHRlc3QgbW9kZSAqL1xuK1x0XHRyZXQgPSB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcbitcdFx0Lyogc2RzIGlzb2xhdGlvbiAqL1xuK1x0XHRyZXQgPSB5dDg4MjRfc2RzX2lzb2xhdGVfcGFnZWQocGh5ZGV2KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1xuK1x0XHQvKiB1dHAgcG93ZXIgZG93biAqL1xuK1x0XHRyZXQgPSB5dDg4MjRfdXRwX3Bvd2VyX2Rvd24ocGh5ZGV2KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1xuK1x0XHQvKiBub3JtYWwgbW9kZSAqL1xuK1x0XHRyZXQgPSB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1xuK1x0XHQvKiBzZHMgc29mdCByZXNldCBhbmQgZGlzYWJsZSBpc29sYXRpb24gKi9cbitcdFx0cmV0ID0geXQ4ODI0X3Nkc19pc29sYXRlX2FuZF9zb2Z0cmVzZXRfcGFnZWQocGh5ZGV2KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1x0fVxuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKy8qKlxuKyAqIHl0ODgyNF9zdXNwZW5kKCkgLSBzdXNwZW5kIHRoZSBoYXJkd2FyZVxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4rICpcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbisgKi9cbitzdGF0aWMgaW50IHl0ODgyNF9zdXNwZW5kKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0cmV0dXJuIHl0ODgyNF9wb3dlcl9kb3duKHBoeWRldik7XG4rfVxuK1xuKy8qKlxuKyAqIHl0ODgyNF9jb25maWdfYW5lZygpIC0gY29uZmlnIG5lZ290aWF0aW9uXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbisgKlxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuKyAqL1xuK3N0YXRpYyBpbnQgeXQ4ODI0X2NvbmZpZ19hbmVnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0aW50IHBoeV9jdHJsID0gMDtcbitcdGludCByZXQgPSAwO1xuK1xuK1x0cmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0aWYgKGxpbmttb2RlX3Rlc3RfYml0KEVUSFRPT0xfTElOS19NT0RFXzI1MDBiYXNlVF9GdWxsX0JJVCxcbitcdFx0XHQgICAgICBwaHlkZXYtXHUwMDNlYWR2ZXJ0aXNpbmcpKVxuK1x0XHRwaHlfY3RybCA9IE1ESU9fQU5fMTBHQlRfQ1RSTF9BRFYyXzVHO1xuK1xuK1x0cmV0ID0gcGh5X21vZGlmeV9tbWRfY2hhbmdlZChwaHlkZXYsIE1ESU9fTU1EX0FOLFxuK1x0XHRcdFx0ICAgICBNRElPX0FOXzEwR0JUX0NUUkwsXG4rXHRcdFx0XHQgICAgIE1ESU9fQU5fMTBHQlRfQ1RSTF9BRFYyXzVHLFxuK1x0XHRcdFx0ICAgICBwaHlfY3RybCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0dXJuIGdlbnBoeV9jb25maWdfYW5lZyhwaHlkZXYpO1xuK31cbitcbisvKipcbisgKiB5dDg4MjRfcGh5X3BhY2thZ2VfcHJvYmVfb25jZSgpICAtIGluaXQgcGh5IHBhY2tldCBmb3IgcGh5ODgyNC5cbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuKyAqXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4rICovXG4rc3RhdGljIGludCB5dDg4MjRfcGh5X3BhY2thZ2VfcHJvYmVfb25jZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xuK1x0c3RydWN0IGRldmljZV9ub2RlICpucCA9IHBoeV9wYWNrYWdlX2dldF9ub2RlKHBoeWRldik7XG4rXHRjb25zdCBjaGFyICppbnRlcmZhY2VfbW9kZV9uYW1lO1xuK1xuK1x0cHJpdi1cdTAwM2VpbnRlcmZhY2VfbW9kZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9OQTtcbitcdHByaXYtXHUwMDNlb2Zmc2V0ID0gSU5URVJOQUxfUEhZODgyNF9UT1BfRVhURU5EX09GRlNFVDtcbitcdGlmICghb2ZfcHJvcGVydHlfcmVhZF9zdHJpbmcobnAsIFwibW90b3Jjb21tLGludGVyZmFjZS1tb2RlXCIsXG4rXHRcdFx0XHQgICAgIFx1MDAyNmludGVyZmFjZV9tb2RlX25hbWUpKSB7XG4rXHRcdGlmICghc3RyY2FzZWNtcChpbnRlcmZhY2VfbW9kZV9uYW1lLFxuK1x0XHRcdFx0cGh5X21vZGVzKFBIWV9JTlRFUkZBQ0VfTU9ERV9VU1hHTUlJKSkpIHtcbitcdFx0XHRwcml2LVx1MDAzZWludGVyZmFjZV9tb2RlID0gUEhZX0lOVEVSRkFDRV9NT0RFX1VTWEdNSUk7XG4rXHRcdFx0cHJpdi1cdTAwM2VvZmZzZXQgPSBFWFRFUk5BTF9QSFk4ODI0X1RPUF9FWFRFTkRfT0ZGU0VUO1xuK1x0XHR9IGVsc2UgaWYgKCFzdHJjYXNlY21wXG4rXHRcdFx0XHQoaW50ZXJmYWNlX21vZGVfbmFtZSxcbitcdFx0XHRcdCBwaHlfbW9kZXMoUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMKSkpIHtcbitcdFx0XHRwcml2LVx1MDAzZWludGVyZmFjZV9tb2RlID0gUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMO1xuK1x0XHRcdHByaXYtXHUwMDNlb2Zmc2V0ID0gSU5URVJOQUxfUEhZODgyNF9UT1BfRVhURU5EX09GRlNFVDtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0fVxuK1x0fVxuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKy8qKlxuKyAqIHl0ODgyNF9wcm9iZSgpIC0gcGh5ODgyNCBwcm9iZS5cbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuKyAqXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4rICovXG4rc3RhdGljIGludCB5dDg4MjRfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXY7XG4rXHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpzaGFyZWRfcHJpdjtcbitcdHN0cnVjdCB5dDg1MjFfcHJpdiAqcHJpdjtcbitcdGludCByZXQ7XG4rXG4rXHRyZXQgPSBkZXZtX29mX3BoeV9wYWNrYWdlX2pvaW4oZGV2LCBwaHlkZXYsIHNpemVvZigqc2hhcmVkX3ByaXYpKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRpZiAocGh5X3BhY2thZ2VfcHJvYmVfb25jZShwaHlkZXYpKSB7XG4rXHRcdHJldCA9IHl0ODgyNF9waHlfcGFja2FnZV9wcm9iZV9vbmNlKHBoeWRldik7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdH1cbitcbitcdHByaXYgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTtcbitcdGlmICghcHJpdilcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRwaHlkZXYtXHUwMDNlcHJpdiA9IHByaXY7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gc3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIG1vdG9yY29tbV9waHlfZHJ2c1tdID0ge1xuIFx0e1xuIFx0XHRQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODUxMSksXG5AQCAtMzE1MiwxMyArNDYwNSwyOSBAQCBzdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgbW90b3Jjb21tX3BoeV9kcnZzW10gPSB7XG4gXHRcdC5zdXNwZW5kXHRcdD0geXQ4ODIxX3N1c3BlbmQsXG4gXHRcdC5yZXN1bWVcdFx0XHQ9IHl0ODgyMV9yZXN1bWUsXG4gXHR9LFxuK1x0e1xuK1x0XHRQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODgyNCksXG4rXHRcdC5uYW1lXHRcdFx0PSBcIllUODgyNCBRdWFkIFBvcnRzIDIuNUdicHMgRXRoZXJuZXRcIixcbitcdFx0LmdldF9mZWF0dXJlc1x0XHQ9IHl0ODgyMV9nZXRfZmVhdHVyZXMsXG4rXHRcdC5yZWFkX3BhZ2VcdFx0PSB5dDg4MjRfcmVhZF9wYWdlLFxuK1x0XHQud3JpdGVfcGFnZVx0XHQ9IHl0ODgyNF93cml0ZV9wYWdlLFxuK1x0XHQucHJvYmVcdFx0ICAgICAgICA9IHl0ODgyNF9wcm9iZSxcbitcdFx0LmNvbmZpZ19hbmVnXHRcdD0geXQ4ODI0X2NvbmZpZ19hbmVnLFxuK1x0XHQuYW5lZ19kb25lXHRcdD0geXQ4ODI0X2FuZWdfZG9uZSxcbitcdFx0LmNvbmZpZ19pbml0XHRcdD0geXQ4ODI0X2NvbmZpZ19pbml0LFxuK1x0XHQucmVhZF9zdGF0dXNcdFx0PSB5dDg4MjRfcmVhZF9zdGF0dXMsXG4rXHRcdC5zb2Z0X3Jlc2V0XHRcdD0geXQ4ODI0X3NvZnRfcmVzZXQsXG4rXHRcdC5zdXNwZW5kXHRcdD0geXQ4ODI0X3N1c3BlbmQsXG4rXHRcdC5yZXN1bWVcdFx0XHQ9IHl0ODgyNF9yZXN1bWUsXG4rXHR9LFxuIH07XG4gXG4gbW9kdWxlX3BoeV9kcml2ZXIobW90b3Jjb21tX3BoeV9kcnZzKTtcbiBcbi1NT0RVTEVfREVTQ1JJUFRJT04oXCJNb3RvcmNvbW0gODUxMS84NTIxLzg1MzEvODUzMVMvODgyMSBQSFkgZHJpdmVyXCIpO1xuK01PRFVMRV9ERVNDUklQVElPTihcIk1vdG9yY29tbSA4NTExLzg1MjEvODUzMS84NTMxUy84ODIxLzg4MjQgUEhZIGRyaXZlclwiKTtcbiBNT0RVTEVfQVVUSE9SKFwiUGV0ZXIgR2Vpc1wiKTtcbiBNT0RVTEVfQVVUSE9SKFwiRnJhbmtcIik7XG4rTU9EVUxFX0FVVEhPUihcIkt5bGVcIik7XG4gTU9EVUxFX0xJQ0VOU0UoXCJHUExcIik7XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBtZGlvX2RldmljZV9pZCBfX21heWJlX3VudXNlZCBtb3RvcmNvbW1fdGJsW10gPSB7XG5AQCAtMzE2OCw2ICs0NjM3LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBtZGlvX2RldmljZV9pZCBfX21heWJlX3VudXNlZCBtb3RvcmNvbW1fdGJsW10gPSB7XG4gXHR7IFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4NTMxKSB9LFxuIFx0eyBQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODUzMVMpIH0sXG4gXHR7IFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4ODIxKSB9LFxuK1x0eyBQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODgyNCkgfSxcbiBcdHsgLyogc2VudGluZWwgKi8gfVxuIH07XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuYyBiL2RyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmNcbmluZGV4IDEyNjk1MTc0MTQyODguLjkwNDMwNmFmNmMxYTcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jXG4rKysgYi9kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jXG5AQCAtMTI4Myw2ICsxMjgzLDIzIEBAIGludCBnZW5waHlfYzQ1X2Zhc3RfcmV0cmFpbihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBib29sIGVuYWJsZSlcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoZ2VucGh5X2M0NV9mYXN0X3JldHJhaW4pO1xuIFxuKy8qKlxuKyAqIGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUgLSBjb25maWd1cmUgdGVtcGxhdGUgdGVzdG1vZGUgcmVnaXN0ZXJzXG4rICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0XG4rICogQHRlc3RfbW9kZTogdGVzdG1vZGUgaW5jbHVkZXMgVGVzdCBtb2RlIDEgdG8gVGVzdCBtb2RlIDdcbisgKlxuKyAqIERlc2NyaXB0aW9uOiBTZXQgdGVtcGxhdGUgdGVzdG1vZGUgaW5jbHVkZSBUZXN0IG1vZGUgMSB0byBUZXN0IG1vZGUgN1xuKyAqXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlIChlLmcuIHJlZ2lzdGVyXG4rICpcdHJlYWQvd3JpdGUgZXJyb3IpLlxuKyAqL1xuK2ludCBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCB0ZXN0X21vZGUpXG4re1xuK1x0cmV0dXJuIHBoeV9tb2RpZnlfbW1kKHBoeWRldiwgTURJT19NTURfUE1BUE1ELCBNRElPX1BNQV8xMEdCVF9URVNUTU9ERSxcbitcdFx0XHRNRElPX1BNQV9URU1QTEFURV9URVNUTU9ERSwgdGVzdF9tb2RlKTtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwoZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZSk7XG4rXG4gLyoqXG4gICogZ2VucGh5X2M0NV9wbGNhX2dldF9jZmcgLSBnZXQgUExDQSBjb25maWd1cmF0aW9uIGZyb20gc3RhbmRhcmQgcmVnaXN0ZXJzXG4gICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9waHkuaCBiL2luY2x1ZGUvbGludXgvcGh5LmhcbmluZGV4IDExMDkyYzMxNzViM2QuLjVkYmM2OTJmNDQyZDAgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BoeS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3BoeS5oXG5AQCAtMjMzOCw2ICsyMzM4LDcgQEAgaW50IGdlbnBoeV9jNDVfbG9vcGJhY2soc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgYm9vbCBlbmFibGUsIGludCBzcGVlZCk7XG4gaW50IGdlbnBoeV9jNDVfcG1hX3Jlc3VtZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTtcbiBpbnQgZ2VucGh5X2M0NV9wbWFfc3VzcGVuZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTtcbiBpbnQgZ2VucGh5X2M0NV9mYXN0X3JldHJhaW4oc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgYm9vbCBlbmFibGUpO1xuK2ludCBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCB0ZXN0X21vZGUpO1xuIGludCBnZW5waHlfYzQ1X3BsY2FfZ2V0X2NmZyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuIFx0XHRcdCAgICBzdHJ1Y3QgcGh5X3BsY2FfY2ZnICpwbGNhX2NmZyk7XG4gaW50IGdlbnBoeV9jNDVfcGxjYV9zZXRfY2ZnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L21kaW8uaCBiL2luY2x1ZGUvdWFwaS9saW51eC9tZGlvLmhcbmluZGV4IGIyNTQxYzk0OGZjMWUuLmJjZjE4M2UwMDhmNTggMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvbWRpby5oXG4rKysgYi9pbmNsdWRlL3VhcGkvbGludXgvbWRpby5oXG5AQCAtNjMsNiArNjMsNyBAQFxuIC8qIE1lZGlhLWRlcGVuZGVudCByZWdpc3RlcnMuICovXG4gI2RlZmluZSBNRElPX1BNQV8xMEdCVF9TV0FQUE9MXHQxMzBcdC8qIDEwR0JBU0UtVCBwYWlyIHN3YXAgXHUwMDI2IHBvbGFyaXR5ICovXG4gI2RlZmluZSBNRElPX1BNQV8xMEdCVF9UWFBXUlx0MTMxXHQvKiAxMEdCQVNFLVQgVFggcG93ZXIgY29udHJvbCAqL1xuKyNkZWZpbmUgTURJT19QTUFfMTBHQlRfVEVTVE1PREUgMTMyXHQvKiBUZXN0IG1vZGUgY29udHJvbCAqL1xuICNkZWZpbmUgTURJT19QTUFfMTBHQlRfU05SXHQxMzNcdC8qIDEwR0JBU0UtVCBTTlIgbWFyZ2luLCBsYW5lIEEuXG4gXHRcdFx0XHRcdCAqIExhbmVzIEItRCBhcmUgbnVtYmVyZWQgMTM0LTEzNi4gKi9cbiAjZGVmaW5lIE1ESU9fUE1BXzEwR0JSX0ZTUlRfQ1NSXHQxNDdcdC8qIDEwR0JBU0UtUiBmYXN0IHJldHJhaW4gc3RhdHVzIGFuZCBjb250cm9sICovXG5AQCAtMTM5LDcgKzE0MCw4IEBAXG4gI2RlZmluZSBNRElPX1BNQV9DVFJMMV9TUEVFRDJfNUdcdChNRElPX0NUUkwxX1NQRUVEU0VMRVhUIHwgMHgxOClcbiAvKiA1IEdiL3MgKi9cbiAjZGVmaW5lIE1ESU9fUE1BX0NUUkwxX1NQRUVENUdcdFx0KE1ESU9fQ1RSTDFfU1BFRURTRUxFWFQgfCAweDFjKVxuLVxuKy8qIHRlbXBsYXRlIHRlc3QgbW9kZSAqL1xuKyNkZWZpbmUgTURJT19QTUFfVEVNUExBVEVfVEVTVE1PREUgICAgICAweEUwMDBcbiBcbiAvKiBTdGF0dXMgcmVnaXN0ZXIgMS4gKi9cbiAjZGVmaW5lIE1ESU9fU1RBVDFfTFBPV0VSQUJMRVx0XHQweDAwMDJcdC8qIExvdy1wb3dlciBhYmlsaXR5ICovXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwODozMjo0Mi4wMTIyMjYwNjNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2OTMwMjQ2MDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlYWNoaW5nIHRoZSBOZXcgUEhZIERyaXZlciBpbiBRRU1VIHdpdGggU3l6a2FsbGVyKipcblxuT2theSwgc28gd2UndmUgZ290IHRoaXMgcGF0Y2ggYWRkaW5nIE1vdG9yY29tbSBZVDg4MjQgUEhZIGRyaXZlciBzdXBwb3J0LiBJdCBhbHNvIGluY2x1ZGVzIHRoaXMgaGVscGVyIGZ1bmN0aW9uLCBgZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZWAsIGluIGBwaHktYzQ1LmNgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJDYW4gd2UgYWN0dWFsbHkgKnJlYWNoKiB0aGlzIHRoaW5nIGluIGEgUUVNVSBlbnZpcm9ubWVudD9cIiBQSFkgZHJpdmVycywgY2xhc3NpY2FsbHksIGFyZSBicm91Z2h0IHVwIHRocm91Z2ggdGhlIE1ESU8gYnVzLiBTbyB0aGUgbmV4dCBsb2dpY2FsIHF1ZXN0aW9uIGlzOiBjYW4gd2UgZ2V0IHRoaXMgUEhZIGVtdWxhdGVkIHdpdGhpbiBRRU1VPyBUaGUgdXN1YWwgZGFuY2UgaXMgcmVhZGluZyB0aGUgUEhZIElEIGZyb20gdGhvc2UgTURJTyByZWdpc3RlcnMgZHVyaW5nIHRoZSBwcm9iZSBwcm9jZXNzLlxuXG5UaGUgcmVhbCBjaGFsbGVuZ2UgaXM6IGNhbiBzeXprYWxsZXIgaGVscCB1cyBnZXQgdGhlcmU/IERvZXMgaXQgaGF2ZSBhbnkgY2FwYWJpbGl0eSB0byBlbXVsYXRlIE1ESU8gZGV2aWNlcz8gT3IgaXMgdGhlcmUgc29tZSBvdGhlciB0cmljayB0byB0cmlnZ2VyIFBIWSBwcm9iaW5nIHdpdGhvdXQgcmVseWluZyBvbiBhIHJlYWwgTURJTyBidXM/IEhhbmcgb24sIGRpZG4ndCBJIHZhZ3VlbHkgcmVjYWxsIHNvbWV0aGluZyBhYm91dCBzeXprYWxsZXIgaGF2aW5nICpzb21lKiBNRElPIGluamVjdGlvbiBwb3NzaWJpbGl0aWVzPyBJIHNob3VsZCByZWFsbHkgY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBzeXprYWxsZXIgZGVzY3JpcHRpb25zIHNwZWNpZmljYWxseSBmb3IgTURJTyBvciBQSFkuXG5cbkhtbW0sIHJpZ2h0LCBzeXprYWxsZXIgbW9zdGx5IHJlbGllcyBvbiBgdHVuYC9gdGFwYCBvciBgdmV0aGAgaW50ZXJmYWNlcywgc28gcHVyZSBNRElPIGlzIHByb2JhYmx5IG91dC4gV2FpdCwgZGlkbid0IHdlIGhhdmUgdGhpbmdzIGxpa2UgYHZoY2lgIGZvciBVU0IgYW5kIGBtYWM4MDIxMV9od3NpbWAgZm9yIHdpZmkgdGhhdCBjb3VsZCBiZSB1c2VkIHdpdGggc3l6a2FsbGVyPyAgSXMgdGhlcmUgYW55dGhpbmcgbGlrZSBhbiBNRElPIGVtdWxhdG9yICp3aXRoaW4gdGhlIGtlcm5lbCBpdHNlbGYqIHRoYXQgc3l6a2FsbGVyIGNvdWxkIGxldmVyYWdlPyBNYXliZSBhIGBkcml2ZXJzL25ldC9waHkvbWRpby1tb2NrdXAuY2AgdHlwZSB0aGluZz8gIE5lZWQgdG8gZG8gc29tZSBrZXJuZWwgc3BlbHVua2luZy5cblxuQWxyaWdodCwgdGltZSB0byBnZXQgc2VyaW91cy4gTGV0J3MgZGlnIGludG8gdGhlIHBvc3NpYmlsaXR5IG9mIGZ1enppbmcgTURJTyBpdHNlbGYuIEkgbmVlZCB0byBydW4gc29tZSBzcGVjaWZpYyBzZWFyY2hlcyBmb3IgYG1kaW9gIG9yIGBwaHlgIGZ1enppbmcuIFNlZSB3aGF0IGNvbWVzIHVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjMzNiwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxMywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA4OjMyOjQ4Ljk0MjQ3NjY1M1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODcxNzIyMzgzLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZGlvLiptb2NrdXBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA4OjMyOjUxLjgxNDIxNTQzNloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI1NzU3ODkzMTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHN0YW5kczpcblxuKipMb29raW5nIGZvciBQbGFjZWhvbGRlciBQSFkgRHJpdmVycyoqXG5cbk9rYXksIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSB0aGUgcG90ZW50aWFsIGZvciBtb2NrIG9yIGR1bW15IGRyaXZlcnMgd2l0aGluIHRoZSBuZXR3b3JrIFBIWSAoUGh5c2ljYWwgTGF5ZXIpIGRyaXZlciBzcGFjZS4gVGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgdGhhdCBpbnZlc3RpZ2F0aW9uIGlzIGBkcml2ZXJzL25ldC9waHkvYC4gVGhhdCBkaXJlY3RvcnkgaXMgd2hlcmUgSSdkIGV4cGVjdCB0byBmaW5kIHRoZXNlIHNvcnRzIG9mIHBsYWNlaG9sZGVyIGltcGxlbWVudGF0aW9ucywgaWYgdGhleSBleGlzdCB3aXRoaW4gdGhlIGtlcm5lbCdzIHNvdXJjZSB0cmVlLiBJJ2xsIG5lZWQgdG8gcG9rZSBhcm91bmQgdGhlcmUgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgdGVzdGluZyBzdHJhdGVneSB3aXRoaW4gdGhlIFBIWSBjb21wb25lbnQuIEhvcGVmdWxseSB0aGVyZSdzIHNvbWV0aGluZyByZWFkaWx5IGFwcGFyZW50IGluIHRoZSBmb2xkZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMDc4LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDg6MzI6NTQuMzkwMDA2NzY5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiY29kZXNlYXJjaC1kaXItaW5kZXgiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDkwNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJEaXJcIjogXCJkcml2ZXJzL25ldC9waHkvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIkZpbGVzXCI6IFtcbiAgICBcImFkaW4uY1wiLFxuICAgIFwiYWRpbjExMDAuY1wiLFxuICAgIFwiYWRpbjExNDAtcGh5LmNcIixcbiAgICBcImFpcl9hbjg4MDEuY1wiLFxuICAgIFwiYWlyX2VuODgxMWguY1wiLFxuICAgIFwiYWlyX3BoeV9saWIuY1wiLFxuICAgIFwiYWlyX3BoeV9saWIuaFwiLFxuICAgIFwiYW1kLmNcIixcbiAgICBcImFzMjF4eHguY1wiLFxuICAgIFwiYXg4ODc5NmIuY1wiLFxuICAgIFwiYXg4ODc5NmJfcnVzdC5yc1wiLFxuICAgIFwiYmNtLWN5Z251cy5jXCIsXG4gICAgXCJiY20tcGh5LWxpYi5jXCIsXG4gICAgXCJiY20tcGh5LWxpYi5oXCIsXG4gICAgXCJiY20tcGh5LXB0cC5jXCIsXG4gICAgXCJiY201NDE0MC5jXCIsXG4gICAgXCJiY202M3h4LmNcIixcbiAgICBcImJjbTd4eHguY1wiLFxuICAgIFwiYmNtODQ4ODEuY1wiLFxuICAgIFwiYmNtODd4eC5jXCIsXG4gICAgXCJicm9hZGNvbS5jXCIsXG4gICAgXCJjaWNhZGEuY1wiLFxuICAgIFwiY29ydGluYS5jXCIsXG4gICAgXCJkYXZpY29tLmNcIixcbiAgICBcImRwODM2NDAuY1wiLFxuICAgIFwiZHA4MzY0MF9yZWcuaFwiLFxuICAgIFwiZHA4MzgyMi5jXCIsXG4gICAgXCJkcDgzODQ4LmNcIixcbiAgICBcImRwODM4NjcuY1wiLFxuICAgIFwiZHA4Mzg2OS5jXCIsXG4gICAgXCJkcDgzdGM4MTEuY1wiLFxuICAgIFwiZHA4M3RkNTEwLmNcIixcbiAgICBcImRwODN0ZzcyMC5jXCIsXG4gICAgXCJldDEwMTFjLmNcIixcbiAgICBcImZpeGVkX3BoeS5jXCIsXG4gICAgXCJpY3BsdXMuY1wiLFxuICAgIFwiaW50ZWwteHdheS5jXCIsXG4gICAgXCJsaW5rbW9kZS5jXCIsXG4gICAgXCJseHQuY1wiLFxuICAgIFwibWFydmVsbC04OHEyeHh4LmNcIixcbiAgICBcIm1hcnZlbGwtODh4MjIyMi5jXCIsXG4gICAgXCJtYXJ2ZWxsLmNcIixcbiAgICBcIm1hcnZlbGwxMGcuY1wiLFxuICAgIFwibWRpby1vcGVuLWFsbGlhbmNlLmhcIixcbiAgICBcIm1kaW9fYnVzLmNcIixcbiAgICBcIm1kaW9fYnVzX3Byb3ZpZGVyLmNcIixcbiAgICBcIm1kaW9fZGV2aWNlLmNcIixcbiAgICBcIm1kaW9fZGV2cmVzLmNcIixcbiAgICBcIm1lc29uLWd4bC5jXCIsXG4gICAgXCJtaWNyZWwuY1wiLFxuICAgIFwibWljcm9jaGlwLmNcIixcbiAgICBcIm1pY3JvY2hpcF9yZHNfcHRwLmNcIixcbiAgICBcIm1pY3JvY2hpcF9yZHNfcHRwLmhcIixcbiAgICBcIm1pY3JvY2hpcF90MS5jXCIsXG4gICAgXCJtaWNyb2NoaXBfdDFzLmNcIixcbiAgICBcIm1paV90aW1lc3RhbXBlci5jXCIsXG4gICAgXCJtb3RvcmNvbW0uY1wiLFxuICAgIFwibXhsLTg2MTEwLmNcIixcbiAgICBcIm14bC1ncHkuY1wiLFxuICAgIFwibmF0aW9uYWwuY1wiLFxuICAgIFwibmNuMjYwMDAuY1wiLFxuICAgIFwibnhwLWM0NS10amExMXh4LW1hY3NlYy5jXCIsXG4gICAgXCJueHAtYzQ1LXRqYTExeHguY1wiLFxuICAgIFwibnhwLWM0NS10amExMXh4LmhcIixcbiAgICBcIm54cC1jYnR4LmNcIixcbiAgICBcIm54cC10amExMXh4LmNcIixcbiAgICBcIm9wZW5fYWxsaWFuY2VfaGVscGVycy5jXCIsXG4gICAgXCJvcGVuX2FsbGlhbmNlX2hlbHBlcnMuaFwiLFxuICAgIFwicGh5LWM0NS5jXCIsXG4gICAgXCJwaHktY2Fwcy5oXCIsXG4gICAgXCJwaHktY29yZS5jXCIsXG4gICAgXCJwaHkuY1wiLFxuICAgIFwicGh5X2NhcHMuY1wiLFxuICAgIFwicGh5X2RldmljZS5jXCIsXG4gICAgXCJwaHlfbGVkX3RyaWdnZXJzLmNcIixcbiAgICBcInBoeV9saW5rX3RvcG9sb2d5LmNcIixcbiAgICBcInBoeV9wYWNrYWdlLmNcIixcbiAgICBcInBoeV9wb3J0LmNcIixcbiAgICBcInBoeWxpYi1pbnRlcm5hbC5oXCIsXG4gICAgXCJwaHlsaWIuaFwiLFxuICAgIFwicGh5bGluay5jXCIsXG4gICAgXCJxc2VtaS5jXCIsXG4gICAgXCJxdDIwMjUucnNcIixcbiAgICBcInJvY2tjaGlwLmNcIixcbiAgICBcInNmcC1idXMuY1wiLFxuICAgIFwic2ZwLmNcIixcbiAgICBcInNmcC5oXCIsXG4gICAgXCJzbXNjLmNcIixcbiAgICBcInN0ZTEwWHAuY1wiLFxuICAgIFwic3R1YnMuY1wiLFxuICAgIFwic3dwaHkuY1wiLFxuICAgIFwic3dwaHkuaFwiLFxuICAgIFwidGVyYW5ldGljcy5jXCIsXG4gICAgXCJ1UEQ2MDYyMC5jXCIsXG4gICAgXCJ2aXRlc3NlLmNcIixcbiAgICBcInhpbGlueF9nbWlpMnJnbWlpLmNcIlxuICBdLFxuICBcIlN1YmRpcnNcIjogW1xuICAgIFwiYXF1YW50aWFcIixcbiAgICBcIm1lZGlhdGVrXCIsXG4gICAgXCJtc2NjXCIsXG4gICAgXCJxY29tXCIsXG4gICAgXCJyZWFsdGVrXCJcbiAgXVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDg6MzI6NTQuMzkwMjE4MTQ5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA4NTY3MTg5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNRElPIERldmljZSBFbXVsYXRpb24gRXhwbG9yYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaG93IHRvIGVtdWxhdGUgTURJTyBkZXZpY2VzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgY2FuIHRoaXMgZXZlbiBiZSBkb25lPyBUaGVuIEkgcmVtZW1iZXIgdGhhdCBJIHNhdyBgZml4ZWRfcGh5LmNgIHNvbWV3aGVyZSwgYW5kIHRoYXQncyBsaWtlbHkgZm9yIGZpeGVkIFBIWXMsIHdoaWNoIGlzbid0IHF1aXRlIHdoYXQgSSdtIGFmdGVyLiBCdXQgdGhhdCBnZXRzIG1lIHRoaW5raW5nIGFib3V0IHN5emthbGxlci4gQ291bGQgaXQgcG90ZW50aWFsbHkgZ2VuZXJhdGUgYSBkdW1teSBNRElPIGJ1cyBhbmQgdGhlbiBhdHRhY2ggYSBQSFkgdG8gaXQ/IFRoYXQgd291bGQgYmUgaWRlYWwgZm9yIHRlc3RpbmcuIFRpbWUgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgc3l6bGFuZyBkZWZpbml0aW9ucyBmb3IgTURJTyBvdXQgdGhlcmUuIFRoYXQgd291bGQgZ2l2ZSBtZSBhIHN0YXJ0aW5nIHBvaW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDIzMCwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYxLCJUb29sQ2FsbHMiOlsiY29kZXNlYXJjaC1kaXItaW5kZXgiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwODozMjo1Ny40NzU4OTI1OThaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUzODk3MjUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1kaW9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvZHNhL2RzYS5jPTYyMj1zdGF0aWMgaW50IGRzYV9zd2l0Y2hfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxcbi0tXFxubmV0L2RzYS9kc2EuYy02NTQtXFx0aWYgKCFkcy1cXHUwMDNldXNlcl9taWlfYnVzIFxcdTAwMjZcXHUwMDI2IGRzLVxcdTAwM2VvcHMtXFx1MDAzZXBoeV9yZWFkKSB7XFxubmV0L2RzYS9kc2EuYzo2NTU6XFx0XFx0ZHMtXFx1MDAzZXVzZXJfbWlpX2J1cyA9IG1kaW9idXNfYWxsb2MoKTtcXG5uZXQvZHNhL2RzYS5jLTY1Ni1cXHRcXHRpZiAoIWRzLVxcdTAwM2V1c2VyX21paV9idXMpIHtcXG4tLVxcbm5ldC9kc2EvZHNhLmMtNjYyLVxcbm5ldC9kc2EvZHNhLmM6NjYzOlxcdFxcdGVyciA9IG1kaW9idXNfcmVnaXN0ZXIoZHMtXFx1MDAzZXVzZXJfbWlpX2J1cyk7XFxubmV0L2RzYS9kc2EuYy02NjQtXFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuLS1cXG5uZXQvZHNhL2RzYS5jLTY3NC1cXHRpZiAoZHMtXFx1MDAzZXVzZXJfbWlpX2J1cyBcXHUwMDI2XFx1MDAyNiBkcy1cXHUwMDNlb3BzLVxcdTAwM2VwaHlfcmVhZClcXG5uZXQvZHNhL2RzYS5jOjY3NTpcXHRcXHRtZGlvYnVzX2ZyZWUoZHMtXFx1MDAzZXVzZXJfbWlpX2J1cyk7XFxubmV0L2RzYS9kc2EuYy02NzYtdGVhcmRvd246XFxuLS1cXG5uZXQvZHNhL2RzYS5jPTY4Nj1zdGF0aWMgdm9pZCBkc2Ffc3dpdGNoX3RlYXJkb3duKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG4tLVxcbm5ldC9kc2EvZHNhLmMtNjkzLVxcdGlmIChkcy1cXHUwMDNldXNlcl9taWlfYnVzIFxcdTAwMjZcXHUwMDI2IGRzLVxcdTAwM2VvcHMtXFx1MDAzZXBoeV9yZWFkKSB7XFxubmV0L2RzYS9kc2EuYzo2OTQ6XFx0XFx0bWRpb2J1c191bnJlZ2lzdGVyKGRzLVxcdTAwM2V1c2VyX21paV9idXMpO1xcbm5ldC9kc2EvZHNhLmM6Njk1OlxcdFxcdG1kaW9idXNfZnJlZShkcy1cXHUwMDNldXNlcl9taWlfYnVzKTtcXG5uZXQvZHNhL2RzYS5jLTY5Ni1cXHRcXHRkcy1cXHUwMDNldXNlcl9taWlfYnVzID0gTlVMTDtcXG4tLVxcbm5ldC9kc2EvcG9ydC5jLTExLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9ub3RpZmllci5oXFx1MDAzZVxcbm5ldC9kc2EvcG9ydC5jOjEyOiNpbmNsdWRlIFxcdTAwM2NsaW51eC9vZl9tZGlvLmhcXHUwMDNlXFxubmV0L2RzYS9wb3J0LmMtMTMtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L29mX25ldC5oXFx1MDAzZVxcbi0tXFxubmV0L2RzYS9wb3J0LmM9MTcyNj1zdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGRzYV9zd2l0Y2hlc19hcHBseV93b3JrYXJvdW5kc1tdID0ge1xcbi0tXFxubmV0L2RzYS9wb3J0LmMtMTc5Ni0jaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX0RTQV9TTVNDX0xBTjkzMDNfTURJTylcXG5uZXQvZHNhL3BvcnQuYzoxNzk3OlxcdFxcXCJzbXNjLGxhbjkzMDMtbWRpb1xcXCIsXFxubmV0L2RzYS9wb3J0LmMtMTc5OC0jZW5kaWZcXG4tLVxcbm5ldC9kc2EvdXNlci5jLTEzLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9vZl9uZXQuaFxcdTAwM2VcXG5uZXQvZHNhL3VzZXIuYzoxNDojaW5jbHVkZSBcXHUwMDNjbGludXgvb2ZfbWRpby5oXFx1MDAzZVxcbm5ldC9kc2EvdXNlci5jOjE1OiNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZGlvLmhcXHUwMDNlXFxubmV0L2RzYS91c2VyLmMtMTYtI2luY2x1ZGUgXFx1MDAzY25ldC9uZXRkZXZfbG9jay5oXFx1MDAzZVxcbi0tXFxubmV0L2RzYS91c2VyLmM9MjYzOD1zdGF0aWMgaW50IGRzYV91c2VyX3BoeV9jb25uZWN0KHN0cnVjdCBuZXRfZGV2aWNlICp1c2VyX2RldiwgaW50IGFkZHIsXFxuLS1cXG5uZXQvZHNhL3VzZXIuYy0yNjQzLVxcbm5ldC9kc2EvdXNlci5jOjI2NDQ6XFx0dXNlcl9kZXYtXFx1MDAzZXBoeWRldiA9IG1kaW9idXNfZ2V0X3BoeShkcy1cXHUwMDNldXNlcl9taWlfYnVzLCBhZGRyKTtcXG5uZXQvZHNhL3VzZXIuYy0yNjQ1LVxcdGlmICghdXNlcl9kZXYtXFx1MDAzZXBoeWRldikge1xcbi0tXFxubmV0L2V0aHRvb2wvY29tbW9uLmM9NTg3PWNvbnZlcnRfbGVnYWN5X3NldHRpbmdzX3RvX2xpbmtfa3NldHRpbmdzKFxcbi0tXFxubmV0L2V0aHRvb2wvY29tbW9uLmMtNjIxLVxcdFxcdD0gbGVnYWN5X3NldHRpbmdzLVxcdTAwM2VhdXRvbmVnO1xcbm5ldC9ldGh0b29sL2NvbW1vbi5jOjYyMjpcXHRsaW5rX2tzZXR0aW5ncy1cXHUwMDNlYmFzZS5tZGlvX3N1cHBvcnRcXG5uZXQvZXRodG9vbC9jb21tb24uYzo2MjM6XFx0XFx0PSBsZWdhY3lfc2V0dGluZ3MtXFx1MDAzZW1kaW9fc3VwcG9ydDtcXG5uZXQvZXRodG9vbC9jb21tb24uYy02MjQtXFx0bGlua19rc2V0dGluZ3MtXFx1MDAzZWJhc2UuZXRoX3RwX21kaXhcXG4tLVxcbm5ldC9ldGh0b29sL2lvY3RsLmM9MzgyPWNvbnZlcnRfbGlua19rc2V0dGluZ3NfdG9fbGVnYWN5X3NldHRpbmdzKFxcbi0tXFxubmV0L2V0aHRvb2wvaW9jdGwuYy00MTItXFx0XFx0PSBsaW5rX2tzZXR0aW5ncy1cXHUwMDNlYmFzZS5hdXRvbmVnO1xcbm5ldC9ldGh0b29sL2lvY3RsLmM6NDEzOlxcdGxlZ2FjeV9zZXR0aW5ncy1cXHUwMDNlbWRpb19zdXBwb3J0XFxubmV0L2V0aHRvb2wvaW9jdGwuYzo0MTQ6XFx0XFx0PSBsaW5rX2tzZXR0aW5ncy1cXHUwMDNlYmFzZS5tZGlvX3N1cHBvcnQ7XFxubmV0L2V0aHRvb2wvaW9jdGwuYy00MTUtXFx0bGVnYWN5X3NldHRpbmdzLVxcdTAwM2VldGhfdHBfbWRpeFxcbi0tXFxubmV0L2V0aHRvb2wvcGh5LmM9NzA9c3RhdGljIGludCBwaHlfcHJlcGFyZV9kYXRhKGNvbnN0IHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2luZm8sXFxuLS1cXG5uZXQvZXRodG9vbC9waHkuYy05MS1cXG5uZXQvZXRodG9vbC9waHkuYzo5MjpcXHRyZXBfZGF0YS1cXHUwMDNlbmFtZSA9IGtzdHJkdXAoZGV2X25hbWUoXFx1MDAyNnBoeWRldi1cXHUwMDNlbWRpby5kZXYpLCBHRlBfS0VSTkVMKTtcXG5uZXQvZXRodG9vbC9waHkuYy05My1cXHRpZiAoIXJlcF9kYXRhLVxcdTAwM2VuYW1lKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwODozMjo1Ny42Mjk3OTYwMDhaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTU1NjE2NzU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IFN5emthbGxlciBJbnZlc3RpZ2F0aW9uKipcblxuT2theSwgc28gSSdtIGhpdHRpbmcgYSByb2FkYmxvY2suIEl0IGp1c3QgaGl0IG1lIHRoYXQgc3l6a2FsbGVyIGRvZXNuJ3Qgb2ZmZXIgYSBkaXJlY3QgbWV0aG9kIHRvIGVtdWxhdGUgdGhlc2UgUEhZcyBhcmJpdHJhcmlseS4gRGFtbi4gVGhhdCB0aHJvd3MgYSB3cmVuY2ggaW4gdGhlIHdvcmtzLiBNeSBnb2FsIGlzIHRvIGdldCB0byBgeXQ4ODI0X3Byb2JlYCwgYnV0IEknbSByZWFsaXppbmcgdGhlIGNvbnN0cmFpbnRzLiBJIGtub3cgaXQgbmVlZHMgYW4gTURJTyBidXMgYW5kIGEgc3BlY2lmaWMgUEhZIElELiBUaGUgaW1tZWRpYXRlIGlzc3VlLCBvZiBjb3Vyc2UsIGlzIHRoYXQgdW5sZXNzIHN5emthbGxlciBjYW4gY29uZmlndXJlIGEgdmlydHVhbCBNRElPIGJ1cyB0byByZXBvcnQgdGhhdCBwYXJ0aWN1bGFyIFBIWSBJRCwgaXQncyBhIGRlYWQgZW5kLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGVyZSBpcyBldmVuIGEgdmlydHVhbCBNRElPIGJ1cyBJIGNhbiB1c2Ugd2l0aGluIHRoZSB0b29sIHRvIHdvcmsgd2l0aC4gVGltZSB0byBjaGVjayBpZiBhbnkgb2YgdGhlIHVuZGVybHlpbmcgaW5mcmFzdHJ1Y3R1cmUgcHJvdmlkZXMgYSBzb2x1dGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU3MDMsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwODozMzowMS4xODU0MTU3MTdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4MDQyMzU2MSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWRpby4qbW9ja3VwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDg6MzM6MDEuNDY1ODQ5Mzc5WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxMTIzNjQzODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipOYXZpZ2F0aW5nIHRoZSBOZXR3b3JrIERyaXZlciBMYW5kc2NhcGUqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmluZCBzb21ldGhpbmcgc3BlY2lmaWMsIGxpa2VseSByZWxhdGVkIHRvIG1lZGlhLWluZGVwZW5kZW50IGludGVyZmFjZSAoTURJTykgaW50ZXJhY3Rpb24gd2l0aGluIHRoZSBuZXR3b3JrIHN0YWNrLiBNeSBmaXJzdCBpbnN0aW5jdCwgZ2l2ZW4gbXkgZXhwZXJpZW5jZSwgaXMgdG8gaGVhZCBkaXJlY3RseSBpbnRvIHRoZSBrZXJuZWwgc291cmNlIHRyZWUuIEkga25vdyB0aGF0IG5ldHdvcmsgZHJpdmVyIGNvZGUgaXMgdHlwaWNhbGx5IHdlbGwtb3JnYW5pemVkIHdpdGhpbiB0aGUgYGRyaXZlcnMvbmV0L2AgZGlyZWN0b3J5LiBHaXZlbiB0aGUgc3BlY2lmaWMgbWVudGlvbiBvZiBNRElPLCBJJ20gZ29pbmcgdG8gZHJpbGwgZG93biBpbnRvIHRoZSBgbWRpb2Agc3ViZGlyZWN0b3J5IHdpdGhpbiB0aGF0LiBUaGF0IHNlZW1zIGxpa2UgdGhlIG1vc3QgbG9naWNhbCBzdGFydGluZyBwb2ludCBmb3IgaW52ZXN0aWdhdGluZyB0aGUgcmVsZXZhbnQgY29kZS4gVGltZSB0byBuYXZpZ2F0ZSB0aGVyZSBhbmQgc2VlIHdoYXQgSSBjYW4gZmluZC4gTGV0J3Mgc3RhcnQgd2l0aCBgZHJpdmVycy9uZXQvbWRpby9gIGFuZCBnbyBmcm9tIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTk5MiwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA4OjMzOjA0LjU3ODIxNTkzN1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJjb2Rlc2VhcmNoLWRpci1pbmRleCIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc3OTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRGlyXCI6IFwiZHJpdmVycy9uZXQvbWRpby9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRmlsZXNcIjogW1xuICAgIFwiYWNwaV9tZGlvLmNcIixcbiAgICBcImZ3bm9kZV9tZGlvLmNcIixcbiAgICBcIm1kaW8tYWlyb2hhLmNcIixcbiAgICBcIm1kaW8tYXNwZWVkLmNcIixcbiAgICBcIm1kaW8tYmNtLWlwcm9jLmNcIixcbiAgICBcIm1kaW8tYmNtLXVuaW1hYy5jXCIsXG4gICAgXCJtZGlvLWJpdGJhbmcuY1wiLFxuICAgIFwibWRpby1jYXZpdW0uY1wiLFxuICAgIFwibWRpby1jYXZpdW0uaFwiLFxuICAgIFwibWRpby1ncGlvLmNcIixcbiAgICBcIm1kaW8taGlzaS1mZW1hYy5jXCIsXG4gICAgXCJtZGlvLWkyYy5jXCIsXG4gICAgXCJtZGlvLWlwcTQwMTkuY1wiLFxuICAgIFwibWRpby1pcHE4MDY0LmNcIixcbiAgICBcIm1kaW8tbW94YXJ0LmNcIixcbiAgICBcIm1kaW8tbXNjYy1taWltLmNcIixcbiAgICBcIm1kaW8tbXV4LWJjbS1pcHJvYy5jXCIsXG4gICAgXCJtZGlvLW11eC1iY202MzY4LmNcIixcbiAgICBcIm1kaW8tbXV4LWdwaW8uY1wiLFxuICAgIFwibWRpby1tdXgtbWVzb24tZzEyYS5jXCIsXG4gICAgXCJtZGlvLW11eC1tZXNvbi1neGwuY1wiLFxuICAgIFwibWRpby1tdXgtbW1pb3JlZy5jXCIsXG4gICAgXCJtZGlvLW11eC1tdWx0aXBsZXhlci5jXCIsXG4gICAgXCJtZGlvLW11eC5jXCIsXG4gICAgXCJtZGlvLW12dXNiLmNcIixcbiAgICBcIm1kaW8tb2N0ZW9uLmNcIixcbiAgICBcIm1kaW8tcGljNjRocHNjLmNcIixcbiAgICBcIm1kaW8tcmVhbHRlay1ydGw5MzAwLmNcIixcbiAgICBcIm1kaW8tcmVnbWFwLmNcIixcbiAgICBcIm1kaW8tc3VuNGkuY1wiLFxuICAgIFwibWRpby10aHVuZGVyLmNcIixcbiAgICBcIm1kaW8teGdlbmUuY1wiLFxuICAgIFwib2ZfbWRpby5jXCJcbiAgXSxcbiAgXCJTdWJkaXJzXCI6IG51bGxcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA4OjMzOjA0LjU3ODI5NTA3N1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MjQ3MDYyOTc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkVtdWxhdGluZyBNYXJ2ZWxsIFVTQiBNRElPIHdpdGggU3l6a2FsbGVyKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgTURJTyBkcml2ZXJzOiBgbWRpby1tdnVzYi5jYCwgYG1kaW8tZ3Bpby5jYCwgYW5kIGBtZGlvLWkyYy5jYC4gVGhlIHF1ZXN0aW9uIGlzLCBjYW4gU3l6a2FsbGVyIGhlbHAgbWUgZW11bGF0ZSB0aGlzPyBJIGtub3cgU3l6a2FsbGVyIHVzZXMgYHZoY2lgIGZvciBVU0IgZW11bGF0aW9uLCB3aGljaCBpcyBwcm9taXNpbmcuIEJ1dCBgbWRpby1tdnVzYi5jYCBzcGVjaWZpY2FsbHkgdGFyZ2V0cyBNYXJ2ZWxsIFVTQiBNRElPLiBEb2VzIFN5emthbGxlciBhY2NvdW50IGZvciB0aGF0P1xuXG5MZXQncyBzZWUuLi4gWWVzLCBTeXprYWxsZXIgZG9lcyBoYXZlIFVTQiBmdXp6aW5nIGNhcGFiaWxpdGllcy4gSWYgSSBjYW4gZ2V0IGl0IHRvIGVtdWxhdGUgYSBVU0IgZGV2aWNlLCBpdCAqY291bGQqIHJlZ2lzdGVyIGFuIE1ESU8gYnVzLiBUaGUgcmVhbCBjaGFsbGVuZ2UgaXMsIGhvdyBkbyBJIGdldCBpdCB0byByZXR1cm4gdGhlIHByZWNpc2UgUEhZIElELCBgMHg0ZjUxZThiOGA/IFRoYXQncyB0aGUga2V5LiBUaGUgVVNCIGRldmljZSwgZW11bGF0ZWQgYnkgU3l6a2FsbGVyLCBuZWVkcyB0byByZXNwb25kIHdpdGggdGhpcyBJRCB3aGVuIHRoZSBNRElPIGJ1cyBwZXJmb3JtcyByZWFkIG9wZXJhdGlvbnMuXG5cbkFoYSEgU2luY2UgU3l6a2FsbGVyIGNvbnRyb2xzIHRoZSByZXNwb25zZXMgZnJvbSB0aGUgVVNCIGRldmljZSwgaXQgKmNhbiogYmUgY29uZmlndXJlZCB0byByZXR1cm4gYDB4NGY1MWU4YjhgIHdoZW4gdGhlIE1ESU8gYnVzIHJlYWRzIHRob3NlIGNydWNpYWwgUEhZIElEIHJlZ2lzdGVycywgc3BlY2lmaWNhbGx5IE1JSV9QSFlTSUQxIGFuZCBNSUlfUEhZU0lEMi4gVGhhdCdzIHRoZSBjcml0aWNhbCBiaXQhIElmIFN5emthbGxlciBjYW4gZW11bGF0ZSBhIE1hcnZlbGwgVVNCIE1ESU8gZGV2aWNlLCB0aGUga2VybmVsICp3aWxsKiByZWdpc3RlciBhbiBNRElPIGJ1cy4gVGhlbiwgdGhlIGtlcm5lbCB3aWxsIHNjYW4gdGhhdCBidXMgZm9yIFBIWXMsIGFuZCBpdCBkb2VzIHRoaXMgYnkgcmVhZGluZyByZWdpc3RlcnMgMiBhbmQgMyAoTUlJX1BIWVNJRDEgYW5kIE1JSV9QSFlTSUQyKS4gU3l6a2FsbGVyIGNhbiBiZSB0aGUgc291cmNlIG9mIHRoZXNlIHJlc3BvbnNlcywgcHJvdmlkaW5nIHRoZSBleHBlY3RlZCBgMHg0ZjUxZThiOGAgdmFsdWUuIEFuZCBpZiB0aGF0J3MgdGhlIGNhc2UsIHRoZSBrZXJuZWwgKndpbGwqIG1hdGNoIHRoZSBQSFkgSUQgYW5kIHByb2JlIHRoZSBgeXQ4ODI0YCBkcml2ZXIhXG5cbk9rYXksIHRpbWUgdG8gdmVyaWZ5LiBJIG5lZWQgdG8gY2hlY2sgaWYgYG1kaW8tbXZ1c2IuY2AgaXMgZW5hYmxlZCBpbiB0eXBpY2FsIFN5emthbGxlciBjb25maWd1cmF0aW9ucywgb3IgaWYgSSBjYW4gZW5hYmxlIGl0IGVhc2lseS4gSXMgdGhlcmUgYW5vdGhlciB3YXk/IFdoYXQgYWJvdXQgYHZoY2lgIGZvciBJMkM/IFN5emthbGxlciBoYXMgc29tZSBJMkMgZnV6emluZywgYnV0IHByb2JhYmx5IG5vdCB0aGUgc29sdXRpb24gSSdtIGxvb2tpbmcgZm9yIGhlcmUuIFdoYXQgYWJvdXQgYG1hYzgwMjExX2h3c2ltYD8gTm8sIHRoYXQncyBub3QgaXQuIE9yIGBuZXRkZXZzaW1gPyBEb2VzIGBuZXRkZXZzaW1gIGhhdmUgYW4gTURJTyBidXM/IEkgbmVlZCB0byBsb29rIGludG8gdGhhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjY1ODksIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MjYsIlRvb2xDYWxscyI6WyJjb2Rlc2VhcmNoLWRpci1pbmRleCJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA4OjMzOjExLjgyNTM2MjU1NloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzM4MDA0NTUsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1kaW9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvbmV0ZGV2c2ltL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDg6MzM6MTEuODk5MTcxOTAxWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMjQyMjM5MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byB0aGUgYG1kaW8tbXZ1c2IuY2AgU291cmNlIENvZGUqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gc2VlIHdoYXQncyBhY3R1YWxseSBnb2luZyBvbiBpbnNpZGUgYG1kaW8tbXZ1c2IuY2AuIFRoZSBuYW1lIGl0c2VsZiBoaW50cyBhdCBzb21lIGtpbmQgb2YgTWVkaWEgSW5kZXBlbmRlbnQgSW50ZXJmYWNlIChNSUkpIG92ZXIgVVNCIGludGVyYWN0aW9uLCB3aGljaCBpcyBhIGJpdCB1bnVzdWFsLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgdG8gZmlndXJlIG91dCBpZiB0aGlzIGRyaXZlciBhZGhlcmVzIHRvIHN0YW5kYXJkIFVTQiBkcml2ZXIgY29udmVudGlvbnMsIG9yIGlmIGl0J3MgZW1wbG95aW5nIHNvbWUgY3VzdG9tIE1hcnZlbGwtc3BlY2lmaWMgcHJvdG9jb2wgb24gdG9wIG9mIHRoZSBVU0Igc3RhY2suIEknbGwgYmUgbG9va2luZyBmb3IgdHlwaWNhbCBVU0IgZGVzY3JpcHRvcnMsIGVuZHBvaW50IGNvbmZpZ3VyYXRpb25zLCBhbmQgaG93IGl0IGhhbmRsZXMgZGV2aWNlIGVudW1lcmF0aW9uIGFuZCBjb21tdW5pY2F0aW9uLiBLbm93aW5nIGlmIGl0IGxldmVyYWdlcyBzdGFuZGFyZCBVU0IgY2xhc3NlcyBvciBhIHZlbmRvci1zcGVjaWZpYyBhcHByb2FjaCB3aWxsIGZ1bmRhbWVudGFsbHkgc2hhcGUgbXkgdW5kZXJzdGFuZGluZyBvZiBpdHMgZGVzaWduIGFuZCBob3cgaXQncyBpbnRlbmRlZCB0byBiZSB1c2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzU4OSwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA4OjMzOjE1LjIyMzQwMDgwNVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzA4NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvbWRpby9tZGlvLW12dXNiLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gICAyOlxcdFxcbiAgIDM6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2tlcm5lbC5oXFx1MDAzZVxcbiAgIDQ6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L21vZHVsZS5oXFx1MDAzZVxcbiAgIDU6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L29mX21kaW8uaFxcdTAwM2VcXG4gICA2OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9waHkuaFxcdTAwM2VcXG4gICA3OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC91c2IuaFxcdTAwM2VcXG4gICA4OlxcdFxcbiAgIDk6XFx0I2RlZmluZSBVU0JfTUFSVkVMTF9WSURcXHQweDEyODZcXG4gIDEwOlxcdFxcbiAgMTE6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIG12dXNiX21kaW9fdGFibGVbXSA9IHtcXG4gIDEyOlxcdFxcdHsgVVNCX0RFVklDRShVU0JfTUFSVkVMTF9WSUQsIDB4MWZhNCkgfSxcXG4gIDEzOlxcdFxcbiAgMTQ6XFx0XFx0e31cXG4gIDE1OlxcdH07XFxuICAxNjpcXHRNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgbXZ1c2JfbWRpb190YWJsZSk7XFxuICAxNzpcXHRcXG4gIDE4OlxcdGVudW0ge1xcbiAgMTk6XFx0XFx0TVZVU0JfQ01EX1BSRUFNQkxFMCxcXG4gIDIwOlxcdFxcdE1WVVNCX0NNRF9QUkVBTUJMRTEsXFxuICAyMTpcXHRcXHRNVlVTQl9DTURfQUREUixcXG4gIDIyOlxcdFxcdE1WVVNCX0NNRF9WQUwsXFxuICAyMzpcXHR9O1xcbiAgMjQ6XFx0XFxuICAyNTpcXHRzdHJ1Y3QgbXZ1c2JfbWRpbyB7XFxuICAyNjpcXHRcXHRzdHJ1Y3QgdXNiX2RldmljZSAqdWRldjtcXG4gIDI3OlxcdFxcdHN0cnVjdCBtaWlfYnVzICptZGlvO1xcbiAgMjg6XFx0XFxuICAyOTpcXHRcXHRfX2xlMTYgYnVmWzRdO1xcbiAgMzA6XFx0fTtcXG4gIDMxOlxcdFxcbiAgMzI6XFx0c3RhdGljIGludCBtdnVzYl9tZGlvX3JlYWQoc3RydWN0IG1paV9idXMgKm1kaW8sIGludCBkZXYsIGludCByZWcpXFxuICAzMzpcXHR7XFxuICAzNDpcXHRcXHRzdHJ1Y3QgbXZ1c2JfbWRpbyAqbXZ1c2IgPSBtZGlvLVxcdTAwM2Vwcml2O1xcbiAgMzU6XFx0XFx0aW50IGVyciwgYWxlbjtcXG4gIDM2OlxcdFxcbiAgMzc6XFx0XFx0bXZ1c2ItXFx1MDAzZWJ1ZltNVlVTQl9DTURfQUREUl0gPSBjcHVfdG9fbGUxNigweGE0MDAgfCAoZGV2IFxcdTAwM2NcXHUwMDNjIDUpIHwgcmVnKTtcXG4gIDM4OlxcdFxcbiAgMzk6XFx0XFx0ZXJyID0gdXNiX2J1bGtfbXNnKG12dXNiLVxcdTAwM2V1ZGV2LCB1c2Jfc25kYnVsa3BpcGUobXZ1c2ItXFx1MDAzZXVkZXYsIDIpLFxcbiAgNDA6XFx0XFx0XFx0XFx0ICAgbXZ1c2ItXFx1MDAzZWJ1ZiwgNiwgXFx1MDAyNmFsZW4sIDEwMCk7XFxuICA0MTpcXHRcXHRpZiAoZXJyKVxcbiAgNDI6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gIDQzOlxcdFxcbiAgNDQ6XFx0XFx0ZXJyID0gdXNiX2J1bGtfbXNnKG12dXNiLVxcdTAwM2V1ZGV2LCB1c2JfcmN2YnVsa3BpcGUobXZ1c2ItXFx1MDAzZXVkZXYsIDYpLFxcbiAgNDU6XFx0XFx0XFx0XFx0ICAgXFx1MDAyNm12dXNiLVxcdTAwM2VidWZbTVZVU0JfQ01EX1ZBTF0sIDIsIFxcdTAwMjZhbGVuLCAxMDApO1xcbiAgNDY6XFx0XFx0aWYgKGVycilcXG4gIDQ3OlxcdFxcdFxcdHJldHVybiBlcnI7XFxuICA0ODpcXHRcXG4gIDQ5OlxcdFxcdHJldHVybiBsZTE2X3RvX2NwdShtdnVzYi1cXHUwMDNlYnVmW01WVVNCX0NNRF9WQUxdKTtcXG4gIDUwOlxcdH1cXG4gIDUxOlxcdFxcbiAgNTI6XFx0c3RhdGljIGludCBtdnVzYl9tZGlvX3dyaXRlKHN0cnVjdCBtaWlfYnVzICptZGlvLCBpbnQgZGV2LCBpbnQgcmVnLCB1MTYgdmFsKVxcbiAgNTM6XFx0e1xcbiAgNTQ6XFx0XFx0c3RydWN0IG12dXNiX21kaW8gKm12dXNiID0gbWRpby1cXHUwMDNlcHJpdjtcXG4gIDU1OlxcdFxcdGludCBhbGVuO1xcbiAgNTY6XFx0XFxuICA1NzpcXHRcXHRtdnVzYi1cXHUwMDNlYnVmW01WVVNCX0NNRF9BRERSXSA9IGNwdV90b19sZTE2KDB4ODAwMCB8IChkZXYgXFx1MDAzY1xcdTAwM2MgNSkgfCByZWcpO1xcbiAgNTg6XFx0XFx0bXZ1c2ItXFx1MDAzZWJ1ZltNVlVTQl9DTURfVkFMXSAgPSBjcHVfdG9fbGUxNih2YWwpO1xcbiAgNTk6XFx0XFxuICA2MDpcXHRcXHRyZXR1cm4gdXNiX2J1bGtfbXNnKG12dXNiLVxcdTAwM2V1ZGV2LCB1c2Jfc25kYnVsa3BpcGUobXZ1c2ItXFx1MDAzZXVkZXYsIDIpLFxcbiAgNjE6XFx0XFx0XFx0XFx0ICAgIG12dXNiLVxcdTAwM2VidWYsIDgsIFxcdTAwMjZhbGVuLCAxMDApO1xcbiAgNjI6XFx0fVxcbiAgNjM6XFx0XFxuICA2NDpcXHRzdGF0aWMgaW50IG12dXNiX21kaW9fcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSxcXG4gIDY1OlxcdFxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpXFxuICA2NjpcXHR7XFxuICA2NzpcXHRcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcXHUwMDI2aW50ZXJmYWNlLVxcdTAwM2VkZXY7XFxuICA2ODpcXHRcXHRzdHJ1Y3QgbXZ1c2JfbWRpbyAqbXZ1c2I7XFxuICA2OTpcXHRcXHRzdHJ1Y3QgbWlpX2J1cyAqbWRpbztcXG4gIDcwOlxcdFxcbiAgNzE6XFx0XFx0bWRpbyA9IGRldm1fbWRpb2J1c19hbGxvY19zaXplKGRldiwgc2l6ZW9mKCptdnVzYikpO1xcbiAgNzI6XFx0XFx0aWYgKCFtZGlvKVxcbiAgNzM6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuICA3NDpcXHRcXG4gIDc1OlxcdFxcdG12dXNiID0gbWRpby1cXHUwMDNlcHJpdjtcXG4gIDc2OlxcdFxcdG12dXNiLVxcdTAwM2VtZGlvID0gbWRpbztcXG4gIDc3OlxcdFxcdG12dXNiLVxcdTAwM2V1ZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRlcmZhY2UpO1xcbiAgNzg6XFx0XFxuICA3OTpcXHRcXHQvKiBSZXZlcnNlZCBmcm9tIFVTQiBQQ0FQcywgbm8gaWRlYSB3aGF0IHRoZXNlIG1lYW4uICovXFxuICA4MDpcXHRcXHRtdnVzYi1cXHUwMDNlYnVmW01WVVNCX0NNRF9QUkVBTUJMRTBdID0gY3B1X3RvX2xlMTYoMHhlODAwKTtcXG4gIDgxOlxcdFxcdG12dXNiLVxcdTAwM2VidWZbTVZVU0JfQ01EX1BSRUFNQkxFMV0gPSBjcHVfdG9fbGUxNigweDAwMDEpO1xcbiAgODI6XFx0XFxuICA4MzpcXHRcXHRzbnByaW50ZihtZGlvLVxcdTAwM2VpZCwgTUlJX0JVU19JRF9TSVpFLCBcXFwibXZ1c2ItJXNcXFwiLCBkZXZfbmFtZShkZXYpKTtcXG4gIDg0OlxcdFxcdG1kaW8tXFx1MDAzZW5hbWUgPSBtZGlvLVxcdTAwM2VpZDtcXG4gIDg1OlxcdFxcdG1kaW8tXFx1MDAzZXBhcmVudCA9IGRldjtcXG4gIDg2OlxcdFxcdG1kaW8tXFx1MDAzZXJlYWQgPSBtdnVzYl9tZGlvX3JlYWQ7XFxuICA4NzpcXHRcXHRtZGlvLVxcdTAwM2V3cml0ZSA9IG12dXNiX21kaW9fd3JpdGU7XFxuICA4ODpcXHRcXG4gIDg5OlxcdFxcdHVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBtdnVzYik7XFxuICA5MDpcXHRcXG4gIDkxOlxcdFxcdHJldHVybiBvZl9tZGlvYnVzX3JlZ2lzdGVyKG1kaW8sIGRldi1cXHUwMDNlb2Zfbm9kZSk7XFxuICA5MjpcXHR9XFxuICA5MzpcXHRcXG4gIDk0OlxcdHN0YXRpYyB2b2lkIG12dXNiX21kaW9fZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlKVxcbiAgOTU6XFx0e1xcbiAgOTY6XFx0XFx0c3RydWN0IG12dXNiX21kaW8gKm12dXNiID0gdXNiX2dldF9pbnRmZGF0YShpbnRlcmZhY2UpO1xcbiAgOTc6XFx0XFxuICA5ODpcXHRcXHRtZGlvYnVzX3VucmVnaXN0ZXIobXZ1c2ItXFx1MDAzZW1kaW8pO1xcbiAgOTk6XFx0XFx0dXNiX3NldF9pbnRmZGF0YShpbnRlcmZhY2UsIE5VTEwpO1xcbiAxMDA6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwODozMzoxNS4yMjM1NzQzOTZaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDIxNjg4OTU1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNRElPIE92ZXIgVVNCOiBBIEZhdm9yYWJsZSBTZXR1cCBmb3IgRnV6emluZyoqXG5cblllcyEgVGhlIGBtZGlvLW12dXNiLmNgIGRyaXZlciBpcyBleGFjdGx5IHdoYXQgSSB3YXMgaG9waW5nIGZvci4gSXQgcmVnaXN0ZXJzIGFuIE1ESU8gYnVzIGFuZCwgY3J1Y2lhbGx5LCB0cmFuc2xhdGVzIE1ESU8gcmVhZC93cml0ZSBvcGVyYXRpb25zIGludG8gVVNCIGJ1bGsgbWVzc2FnZXMuIFRoaXMgaXMga2V5ISBJZiBJIGNhbiBzdWNjZXNzZnVsbHkgbGV2ZXJhZ2UgU3l6a2FsbGVyJ3MgVVNCIGZ1enplciB0byBlbXVsYXRlIHRoZSBzcGVjaWZpYyBkZXZpY2Ugd2l0aCB2ZW5kb3IgSUQgYDB4MTI4NmAgYW5kIHByb2R1Y3QgSUQgYDB4MWZhNGAgYW5kIGhhdmUgaXQgcmVzcG9uZCB0byB0aG9zZSBidWxrIG1lc3NhZ2VzIHdpdGggdGhlIGV4cGVjdGVkIFBIWSBJRCwgYDB4NGY1MWU4YjhgLCBJJ2xsIGJlIGluIGJ1c2luZXNzLlxuXG5CdXQgaG9sZCBvbi4uLiBJIG5lZWQgdG8gY29uc2lkZXIgYSBwb3RlbnRpYWwgd3JpbmtsZS4gVGhlIGNvZGUgdXRpbGl6ZXMgYG9mX21kaW9idXNfcmVnaXN0ZXJgLiBJZiwgYXMgSSBzdXNwZWN0LCB0aGUgYGRldi1cdTAwM2VvZl9ub2RlYCBpcyBgTlVMTGAgZm9yIGEgVVNCIGRldmljZSB0aGF0IGlzbid0IGRlc2NyaWJlZCBpbiB0aGUgRGV2aWNlIFRyZWUsIGl0IHNob3VsZCBncmFjZWZ1bGx5IGZhbGwgYmFjayB0byBhIHN0YW5kYXJkIGBtZGlvYnVzX3JlZ2lzdGVyYC4gSnVzdCB0byBiZSBzdXJlLCBJIHNob3VsZCBjaGVjayB0aGUgaW1wbGVtZW50YXRpb24gb2YgYG9mX21kaW9idXNfcmVnaXN0ZXJgIHRvIGNvbmZpcm0gdGhpcyBhc3N1bXB0aW9uLiBMZXQncyBkaWcgaW50byB0aGF0IGZ1bmN0aW9uIGRlZmluaXRpb24gbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTM2OCwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA4OjMzOjE5LjQ0MDQ2NzQ0MloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzgyNjQ3OTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwib2ZfbWRpb2J1c19yZWdpc3RlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9tZGlvL29mX21kaW8uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9tZGlvL29mX21kaW8uYz00ND1FWFBPUlRfU1lNQk9MKG9mX21kaW9idXNfcGh5X2RldmljZV9yZWdpc3Rlcik7XFxuZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmMtNDUtXFxuZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmM6NDY6c3RhdGljIGludCBvZl9tZGlvYnVzX3JlZ2lzdGVyX3BoeShzdHJ1Y3QgbWlpX2J1cyAqbWRpbyxcXG5kcml2ZXJzL25ldC9tZGlvL29mX21kaW8uYy00Ny1cXHRcXHRcXHRcXHQgICAgc3RydWN0IGRldmljZV9ub2RlICpjaGlsZCwgdTMyIGFkZHIpXFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL29mX21kaW8uYy01MS1cXG5kcml2ZXJzL25ldC9tZGlvL29mX21kaW8uYzo1MjpzdGF0aWMgaW50IG9mX21kaW9idXNfcmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCBtaWlfYnVzICptZGlvLFxcbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jLTUzLVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqY2hpbGQsIHUzMiBhZGRyKVxcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmM9MTM5PXN0YXRpYyBpbnQgX19vZl9tZGlvYnVzX3BhcnNlX3BoeXMoc3RydWN0IG1paV9idXMgKm1kaW8sIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsXFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL29mX21kaW8uYy0xNjctXFx0XFx0aWYgKG9mX21kaW9idXNfY2hpbGRfaXNfcGh5KGNoaWxkKSlcXG5kcml2ZXJzL25ldC9tZGlvL29mX21kaW8uYzoxNjg6XFx0XFx0XFx0cmMgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyX3BoeShtZGlvLCBjaGlsZCwgYWRkcik7XFxuZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmMtMTY5LVxcdFxcdGVsc2VcXG5kcml2ZXJzL25ldC9tZGlvL29mX21kaW8uYzoxNzA6XFx0XFx0XFx0cmMgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyX2RldmljZShtZGlvLCBjaGlsZCwgYWRkcik7XFxuZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmMtMTcxLVxcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmMtMTg2LS8qKlxcbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jOjE4NzogKiBfX29mX21kaW9idXNfcmVnaXN0ZXIgLSBSZWdpc3RlciBtaWlfYnVzIGFuZCBjcmVhdGUgUEhZcyBmcm9tIHRoZSBkZXZpY2UgdHJlZVxcbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jLTE4OC0gKiBAbWRpbzogcG9pbnRlciB0byBtaWlfYnVzIHN0cnVjdHVyZVxcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmMtMTk0LSAqL1xcbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jOjE5NTppbnQgX19vZl9tZGlvYnVzX3JlZ2lzdGVyKHN0cnVjdCBtaWlfYnVzICptZGlvLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLFxcbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jLTE5Ni1cXHRcXHRcXHQgIHN0cnVjdCBtb2R1bGUgKm93bmVyKVxcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmMtMjU0LVxcdFxcdFxcdFxcdCAqL1xcbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jOjI1NTpcXHRcXHRcXHRcXHRyYyA9IG9mX21kaW9idXNfcmVnaXN0ZXJfcGh5KG1kaW8sIGNoaWxkLCBhZGRyKTtcXG5kcml2ZXJzL25ldC9tZGlvL29mX21kaW8uYy0yNTYtXFx0XFx0XFx0XFx0aWYgKCFyYylcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jLTI3MS19XFxuZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmM6MjcyOkVYUE9SVF9TWU1CT0woX19vZl9tZGlvYnVzX3JlZ2lzdGVyKTtcXG5kcml2ZXJzL25ldC9tZGlvL29mX21kaW8uYy0yNzMtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA4OjMzOjE5LjUxODc0MjM3N1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzg1ODQ0OTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB3aGF0IHdlJ3JlIGxvb2tpbmcgYXQsIHN1bW1hcml6ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXNzdW1pbmcgSSdtIGFscmVhZHkgcHJldHR5IGZhbWlsaWFyIHdpdGggdGhpcyBjb2RlYmFzZTpcblxuKipSZXZpZXdpbmcgYF9fb2ZfbWRpb2J1c19yZWdpc3RlcmAqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBhIGdvb2QgbG9vayBhdCBgX19vZl9tZGlvYnVzX3JlZ2lzdGVyYC4gVGhpcyBpcyBhIGNydWNpYWwgZnVuY3Rpb24sIGFuZCB1bmRlcnN0YW5kaW5nIGl0IHdpbGwgYmUgdml0YWwuIEJhc2VkIG9uIHRoZSBuYW1pbmcsIGl0J3MgcHJldHR5IGNsZWFyIHRoaXMgaXMgYWJvdXQgcmVnaXN0ZXJpbmcgYW4gTURJTyBidXMsIGFuZCB0aGUgZG91YmxlIHVuZGVyc2NvcmUgc3VnZ2VzdHMgaXQgaXMgYSBpbnRlcm5hbCBmdW5jdGlvbi4gSSBpbWFnaW5lIHRoZSBcIm9mXCIgcHJlZml4IGlzIGNyaXRpY2FsOyBpdCBwcm9iYWJseSBoYW5kbGVzIHJlZ2lzdGVyaW5nIGFuIE1ESU8gYnVzIGZyb20gYSBEZXZpY2UgVHJlZS4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucyBmb3IgcGxhdGZvcm0gZGV2aWNlIGNvbmZpZ3VyYXRpb24gb24gdGhlc2Ugc3lzdGVtcy4gSSdsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIHBhcmFtZXRlciBsaXN0LCBhbmQgZXNwZWNpYWxseSBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGRldmljZSB0cmVlLiBJJ2xsIHdhbnQgdG8gc2VlIGhvdyB0aGUgYnVzIGlzIGluaXRpYWxpemVkLCBob3cgaXRzIGNsb2NrIGFuZCBpbnRlcnJ1cHQgcmVzb3VyY2VzIGFyZSBjb25maWd1cmVkLCBhbmQgdWx0aW1hdGVseSBob3cgaXQncyBpbnRlZ3JhdGVkIHdpdGggdGhlIHJlc3Qgb2YgdGhlIE1ESU8gc3Vic3lzdGVtLiBBbnkgcG90ZW50aWFsIHF1aXJrcyBvciBlcnJvciBoYW5kbGluZyBkdXJpbmcgdGhlIHJlZ2lzdHJhdGlvbiBwcm9jZXNzIHdvdWxkIGFsc28gYmUgc29tZXRoaW5nIHRvIHdhdGNoLiBJdCBpcyBsaWtlbHkgY2FsbGVkIGFzIHBhcnQgb2YgTURJTyBvciBFdGhlcm5ldCBkcml2ZXIgaW5pdGlhbGl6YXRpb24uIFRoZSBjb2RlIHNob3VsZCBwcm92aWRlIGluc2lnaHRzIGZvciBoYXJkd2FyZSBkZXRlY3Rpb24gYW5kIG1hbmFnZW1lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwNTcyLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDg6MzM6MjIuOTA0NTg5ODE3WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExOTA3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9tZGlvL29mX21kaW8uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxODYsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTg2OlxcdC8qKlxcbiAxODc6XFx0ICogX19vZl9tZGlvYnVzX3JlZ2lzdGVyIC0gUmVnaXN0ZXIgbWlpX2J1cyBhbmQgY3JlYXRlIFBIWXMgZnJvbSB0aGUgZGV2aWNlIHRyZWVcXG4gMTg4OlxcdCAqIEBtZGlvOiBwb2ludGVyIHRvIG1paV9idXMgc3RydWN0dXJlXFxuIDE4OTpcXHQgKiBAbnA6IHBvaW50ZXIgdG8gZGV2aWNlX25vZGUgb2YgTURJTyBidXMuXFxuIDE5MDpcXHQgKiBAb3duZXI6IG1vZHVsZSBvd25pbmcgdGhlIEBtZGlvIG9iamVjdC5cXG4gMTkxOlxcdCAqXFxuIDE5MjpcXHQgKiBUaGlzIGZ1bmN0aW9uIHJlZ2lzdGVycyB0aGUgbWlpX2J1cyBzdHJ1Y3R1cmUgYW5kIHJlZ2lzdGVycyBhIHBoeV9kZXZpY2VcXG4gMTkzOlxcdCAqIGZvciBlYWNoIGNoaWxkIG5vZGUgb2YgQG5wLlxcbiAxOTQ6XFx0ICovXFxuIDE5NTpcXHRpbnQgX19vZl9tZGlvYnVzX3JlZ2lzdGVyKHN0cnVjdCBtaWlfYnVzICptZGlvLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLFxcbiAxOTY6XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbW9kdWxlICpvd25lcilcXG4gMTk3OlxcdHtcXG4gMTk4OlxcdFxcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqY2hpbGQ7XFxuIDE5OTpcXHRcXHRib29sIHNjYW5waHlzID0gZmFsc2U7XFxuIDIwMDpcXHRcXHRpbnQgYWRkciwgcmM7XFxuIDIwMTpcXHRcXG4gMjAyOlxcdFxcdGlmICghbnApXFxuIDIwMzpcXHRcXHRcXHRyZXR1cm4gX19tZGlvYnVzX3JlZ2lzdGVyKG1kaW8sIG93bmVyKTtcXG4gMjA0OlxcdFxcbiAyMDU6XFx0XFx0LyogRG8gbm90IGNvbnRpbnVlIGlmIHRoZSBub2RlIGlzIGRpc2FibGVkICovXFxuIDIwNjpcXHRcXHRpZiAoIW9mX2RldmljZV9pc19hdmFpbGFibGUobnApKVxcbiAyMDc6XFx0XFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuIDIwODpcXHRcXG4gMjA5OlxcdFxcdC8qIE1hc2sgb3V0IGFsbCBQSFlzIGZyb20gYXV0byBwcm9iaW5nLiAgSW5zdGVhZCB0aGUgUEhZcyBsaXN0ZWQgaW5cXG4gMjEwOlxcdFxcdCAqIHRoZSBkZXZpY2UgdHJlZSBhcmUgcG9wdWxhdGVkIGFmdGVyIHRoZSBidXMgaGFzIGJlZW4gcmVnaXN0ZXJlZCAqL1xcbiAyMTE6XFx0XFx0bWRpby1cXHUwMDNlcGh5X21hc2sgPSB+MDtcXG4gMjEyOlxcdFxcbiAyMTM6XFx0XFx0ZGV2aWNlX3NldF9ub2RlKFxcdTAwMjZtZGlvLVxcdTAwM2VkZXYsIG9mX2Z3bm9kZV9oYW5kbGUobnApKTtcXG4gMjE0OlxcdFxcbiAyMTU6XFx0XFx0LyogR2V0IGJ1cyBsZXZlbCBQSFkgcmVzZXQgR1BJTyBkZXRhaWxzICovXFxuIDIxNjpcXHRcXHRtZGlvLVxcdTAwM2VyZXNldF9kZWxheV91cyA9IERFRkFVTFRfR1BJT19SRVNFVF9ERUxBWTtcXG4gMjE3OlxcdFxcdG9mX3Byb3BlcnR5X3JlYWRfdTMyKG5wLCBcXFwicmVzZXQtZGVsYXktdXNcXFwiLCBcXHUwMDI2bWRpby1cXHUwMDNlcmVzZXRfZGVsYXlfdXMpO1xcbiAyMTg6XFx0XFx0bWRpby1cXHUwMDNlcmVzZXRfcG9zdF9kZWxheV91cyA9IDA7XFxuIDIxOTpcXHRcXHRvZl9wcm9wZXJ0eV9yZWFkX3UzMihucCwgXFxcInJlc2V0LXBvc3QtZGVsYXktdXNcXFwiLCBcXHUwMDI2bWRpby1cXHUwMDNlcmVzZXRfcG9zdF9kZWxheV91cyk7XFxuIDIyMDpcXHRcXG4gMjIxOlxcdFxcdC8qIFJlZ2lzdGVyIHRoZSBNRElPIGJ1cyAqL1xcbiAyMjI6XFx0XFx0cmMgPSBfX21kaW9idXNfcmVnaXN0ZXIobWRpbywgb3duZXIpO1xcbiAyMjM6XFx0XFx0aWYgKHJjKVxcbiAyMjQ6XFx0XFx0XFx0cmV0dXJuIHJjO1xcbiAyMjU6XFx0XFxuIDIyNjpcXHRcXHQvKiBMb29wIG92ZXIgdGhlIGNoaWxkIG5vZGVzIGFuZCByZWdpc3RlciBhIHBoeV9kZXZpY2UgZm9yIGVhY2ggcGh5ICovXFxuIDIyNzpcXHRcXHRyYyA9IF9fb2ZfbWRpb2J1c19wYXJzZV9waHlzKG1kaW8sIG5wLCBcXHUwMDI2c2NhbnBoeXMpO1xcbiAyMjg6XFx0XFx0aWYgKHJjKVxcbiAyMjk6XFx0XFx0XFx0Z290byB1bnJlZ2lzdGVyO1xcbiAyMzA6XFx0XFxuIDIzMTpcXHRcXHRpZiAoIXNjYW5waHlzKVxcbiAyMzI6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDIzMzpcXHRcXG4gMjM0OlxcdFxcdC8qIGF1dG8gc2NhbiBmb3IgUEhZcyB3aXRoIGVtcHR5IHJlZyBwcm9wZXJ0eSAqL1xcbiAyMzU6XFx0XFx0Zm9yX2VhY2hfYXZhaWxhYmxlX2NoaWxkX29mX25vZGUobnAsIGNoaWxkKSB7XFxuIDIzNjpcXHRcXHRcXHQvKiBTa2lwIFBIWXMgd2l0aCByZWcgcHJvcGVydHkgc2V0IG9yIGV0aGVybmV0LXBoeS1wYWNrYWdlIG5vZGUgKi9cXG4gMjM3OlxcdFxcdFxcdGlmIChvZl9wcm9wZXJ0eV9wcmVzZW50KGNoaWxkLCBcXFwicmVnXFxcIikgfHxcXG4gMjM4OlxcdFxcdFxcdCAgICBvZl9ub2RlX25hbWVfZXEoY2hpbGQsIFxcXCJldGhlcm5ldC1waHktcGFja2FnZVxcXCIpKVxcbiAyMzk6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDI0MDpcXHRcXG4gMjQxOlxcdFxcdFxcdGZvciAoYWRkciA9IDA7IGFkZHIgXFx1MDAzYyBQSFlfTUFYX0FERFI7IGFkZHIrKykge1xcbiAyNDI6XFx0XFx0XFx0XFx0Lyogc2tpcCBhbHJlYWR5IHJlZ2lzdGVyZWQgUEhZcyAqL1xcbiAyNDM6XFx0XFx0XFx0XFx0aWYgKG1kaW9idXNfaXNfcmVnaXN0ZXJlZF9kZXZpY2UobWRpbywgYWRkcikpXFxuIDI0NDpcXHRcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gMjQ1OlxcdFxcbiAyNDY6XFx0XFx0XFx0XFx0LyogYmUgbm9pc3kgdG8gZW5jb3VyYWdlIHBlb3BsZSB0byBzZXQgcmVnIHByb3BlcnR5ICovXFxuIDI0NzpcXHRcXHRcXHRcXHRkZXZfaW5mbyhcXHUwMDI2bWRpby1cXHUwMDNlZGV2LCBcXFwic2NhbiBwaHkgJXBPRm4gYXQgYWRkcmVzcyAlaVxcXFxuXFxcIixcXG4gMjQ4OlxcdFxcdFxcdFxcdFxcdCBjaGlsZCwgYWRkcik7XFxuIDI0OTpcXHRcXG4gMjUwOlxcdFxcdFxcdFxcdGlmIChvZl9tZGlvYnVzX2NoaWxkX2lzX3BoeShjaGlsZCkpIHtcXG4gMjUxOlxcdFxcdFxcdFxcdFxcdC8qIC1FTk9ERVYgaXMgdGhlIHJldHVybiBjb2RlIHRoYXQgUEhZTElCIGhhc1xcbiAyNTI6XFx0XFx0XFx0XFx0XFx0ICogc3RhbmRhcmRpemVkIG9uIHRvIGluZGljYXRlIHRoYXQgYnVzXFxuIDI1MzpcXHRcXHRcXHRcXHRcXHQgKiBzY2FubmluZyBzaG91bGQgY29udGludWUuXFxuIDI1NDpcXHRcXHRcXHRcXHRcXHQgKi9cXG4gMjU1OlxcdFxcdFxcdFxcdFxcdHJjID0gb2ZfbWRpb2J1c19yZWdpc3Rlcl9waHkobWRpbywgY2hpbGQsIGFkZHIpO1xcbiAyNTY6XFx0XFx0XFx0XFx0XFx0aWYgKCFyYylcXG4gMjU3OlxcdFxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbiAyNTg6XFx0XFx0XFx0XFx0XFx0aWYgKHJjICE9IC1FTk9ERVYpXFxuIDI1OTpcXHRcXHRcXHRcXHRcXHRcXHRnb3RvIHB1dF91bnJlZ2lzdGVyO1xcbiAyNjA6XFx0XFx0XFx0XFx0fVxcbiAyNjE6XFx0XFx0XFx0fVxcbiAyNjI6XFx0XFx0fVxcbiAyNjM6XFx0XFxuIDI2NDpcXHRcXHRyZXR1cm4gMDtcXG4gMjY1OlxcdFxcbiAyNjY6XFx0cHV0X3VucmVnaXN0ZXI6XFxuIDI2NzpcXHRcXHRvZl9ub2RlX3B1dChjaGlsZCk7XFxuIDI2ODpcXHR1bnJlZ2lzdGVyOlxcbiAyNjk6XFx0XFx0bWRpb2J1c191bnJlZ2lzdGVyKG1kaW8pO1xcbiAyNzA6XFx0XFx0cmV0dXJuIHJjO1xcbiAyNzE6XFx0fVxcbiAyNzI6XFx0RVhQT1JUX1NZTUJPTChfX29mX21kaW9idXNfcmVnaXN0ZXIpO1xcbiAyNzM6XFx0XFxuIDI3NDpcXHQvKipcXG4gMjc1OlxcdCAqIG9mX21kaW9fZmluZF9kZXZpY2UgLSBHaXZlbiBhIGRldmljZSB0cmVlIG5vZGUsIGZpbmQgdGhlIG1kaW9fZGV2aWNlXFxuIDI3NjpcXHQgKiBAbnA6IHBvaW50ZXIgdG8gdGhlIG1kaW9fZGV2aWNlJ3MgZGV2aWNlIHRyZWUgbm9kZVxcbiAyNzc6XFx0ICpcXG4gMjc4OlxcdCAqIElmIHN1Y2Nlc3NmdWwsIHJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBtZGlvX2RldmljZSB3aXRoIHRoZSBlbWJlZGRlZFxcbiAyNzk6XFx0ICogc3RydWN0IGRldmljZSByZWZjb3VudCBpbmNyZW1lbnRlZCBieSBvbmUsIG9yIE5VTEwgb24gZmFpbHVyZS5cXG4gMjgwOlxcdCAqIFRoZSBjYWxsZXIgc2hvdWxkIGNhbGwgcHV0X2RldmljZSgpIG9uIHRoZSBtZGlvX2RldmljZSBhZnRlciBpdHMgdXNlXFxuIDI4MTpcXHQgKi9cXG4gMjgyOlxcdHN0cnVjdCBtZGlvX2RldmljZSAqb2ZfbWRpb19maW5kX2RldmljZShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKVxcbiAyODM6XFx0e1xcbiAyODQ6XFx0XFx0cmV0dXJuIGZ3bm9kZV9tZGlvX2ZpbmRfZGV2aWNlKG9mX2Z3bm9kZV9oYW5kbGUobnApKTtcXG4gMjg1OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDg6MzM6MjIuOTA0NzExODM3WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMDEzMTU2MzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipEaXZpbmcgaW50byB0aGUgTURJTyBCdXMgUmVnaXN0cmF0aW9uKipcblxuUmlnaHQsIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSwgYW5kIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGlzIGNvbmRpdGlvbmFsOiAqSWYgYG5wYCBpcyBOVUxMLi4uKiBXZWxsLCB0aGF0J3Mgc3RyYWlnaHRmb3J3YXJkIGVub3VnaDogSWYgYG5wYCBpcyBOVUxMLCB0aGVuIHRoZSBjb2RlICppbW1lZGlhdGVseSogY2FsbHMgYF9fbWRpb2J1c19yZWdpc3RlcihtZGlvLCBvd25lcilgLiBUaGUgaW1wbGljYXRpb24gaXMgdGhhdCBgbnBgIHByb2JhYmx5IHJlcHJlc2VudHMgc29tZSBzb3J0IG9mIGRldmljZSBub2RlIG9yIGFzc29jaWF0ZWQgc3RydWN0dXJlLiBOdWxsIG1lYW5zIGl0IGRvZXNuJ3QgZXhpc3QuIE5vdywgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eSBoZXJlIG11c3QgYmUgd2l0aGluIHRoYXQgcmVnaXN0cmF0aW9uIGZ1bmN0aW9uLiBTbywgbXkgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIGBfX21kaW9idXNfcmVnaXN0ZXJgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgaGFwcGVuaW5nICppbnNpZGUqIHRoYXQgZnVuY3Rpb24gaW4gb3JkZXIgdG8gZ3Jhc3AgdGhlIG92ZXJhbGwgaW50ZW50aW9uIG9mIHRoaXMgc2VjdGlvbiBvZiBjb2RlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIE1ESU8gYnVzIGlzIGJlaW5nIHJlZ2lzdGVyZWQgaW4gdGhlIGFic2VuY2Ugb2YgYSBkZXZpY2Ugbm9kZS4gSXMgaXQgYSBmYWxsYmFjaz8gQSBsZWdhY3kgcGF0aD8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIHJlZ2lzdHJhdGlvbiB3aGVuIGBucGAgaXMgTlVMTD8gSSBuZWVkIHRvIGFuYWx5emUgYF9fbWRpb2J1c19yZWdpc3RlcmAgdG8gZGV0ZXJtaW5lIHRoZSBhbnN3ZXIgdG8gdGhlc2UgcXVlc3Rpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjQ1NSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDg6MzM6MjYuMjA2MDMwNDkyWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MDM1ODU2NCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19tZGlvYnVzX3JlZ2lzdGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1cy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwODozMzoyNi4yOTYzOTk5OTZaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI0MTYwNTg5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipNRElPIEJ1cyBSZWdpc3RyYXRpb246IERpZ2dpbmcgaW50byB0aGUgQ29yZSoqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSd2ZSBnb3QgdGhpcyBzdHJhaWdodC4gVGhhdCBgX19tZGlvYnVzX3JlZ2lzdGVyYCBmdW5jdGlvbuKApiBJIHRob3VnaHQgSSBoYWQgYSBoYW5kbGUgb24gd2hlcmUgaXQgbGl2ZWQuIExldCBtZSBkb3VibGUtY2hlY2suICpXYWl0LCBpdCdzIGFjdHVhbGx5IGluKiBgZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzLmNgPyBHb29kIHRvIGtub3csIGl0IGhlbHBzIHRvIGtlZXAgYSBtYXAgb2YgdGhlc2UgdGhpbmdzLCBlc3BlY2lhbGx5IHdoZW4gaXQgY29tZXMgdG8gdGhlIGxvd2VyLWxldmVsIGJ1cyBpbnRlcmFjdGlvbnMuIExldCBtZSBxdWlja2x5IHJlZnJlc2ggbXlzZWxmIG9uIHRoZSBhcmd1bWVudHMgaXQgdGFrZXMgYW5kIGl0cyBnZW5lcmFsIGJlaGF2aW9yIGJ5IGNoZWNraW5nIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgbWRpb2J1c19yZWdpc3RlcmAsIGp1c3QgdG8gbWFrZSBzdXJlIG15IHVuZGVyc3RhbmRpbmcgaXMgYWNjdXJhdGUuIE5vIHBvaW50IGluIG1ha2luZyBhbnkgYXNzdW1wdGlvbnMgYXQgdGhpcyBsZXZlbCBvZiBhYnN0cmFjdGlvbi4gQWx3YXlzIGdvb2QgdG8gZHJpbGwgZG93biBhbmQgY29uZmlybSB0aGUgZGV0YWlscywgcGFydGljdWxhcmx5IHdpdGggdGhlIG1vcmUgY3JpdGljYWwgYnVzIG1hbmFnZW1lbnQgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzI3NzgsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwODozMzoyOS41MzgwMDk4NjZaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcyNTU3ODE1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1kaW9idXNfcmVnaXN0ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcGh5L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM9MTk1PXN0YXRpYyBpbnQgX19pbml0IGZpeGVkX21kaW9fYnVzX2luaXQodm9pZClcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0yMDgtXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjIwOTpcXHRyZXQgPSBtZGlvYnVzX3JlZ2lzdGVyKGZtYl9taWlfYnVzKTtcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMjEwLVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYz01MjU9c3RhdGljIGJvb2wgbWRpb2J1c19wcmV2ZW50X2M0NV9zY2FuKHN0cnVjdCBtaWlfYnVzICpidXMpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYy01MzktLyoqXFxuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmM6NTQwOiAqIF9fbWRpb2J1c19yZWdpc3RlciAtIGJyaW5nIHVwIGFsbCB0aGUgUEhZcyBvbiBhIGdpdmVuIGJ1cyBhbmQgYXR0YWNoIHRoZW0gdG8gYnVzXFxuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmMtNTQxLSAqIEBidXM6IHRhcmdldCBtaWlfYnVzXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYy01NDUtICogICBvbiBhIGdpdmVuIGJ1cywgYW5kIGF0dGFjaCB0aGVtIHRvIHRoZSBidXMuIERyaXZlcnMgc2hvdWxkIHVzZVxcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jOjU0NjogKiAgIG1kaW9idXNfcmVnaXN0ZXIoKSByYXRoZXIgdGhhbiBfX21kaW9idXNfcmVnaXN0ZXIoKSB1bmxlc3MgdGhleVxcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jLTU0Ny0gKiAgIG5lZWQgdG8gcGFzcyBhIHNwZWNpZmljIG93bmVyIG1vZHVsZS4gTURJTyBkZXZpY2VzIHdoaWNoIGFyZSBub3RcXG5kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYy01NDgtICogICBQSFlzIHdpbGwgbm90IGJlIGJyb3VnaHQgdXAgYnkgdGhpcyBmdW5jdGlvbi4gVGhleSBhcmUgZXhwZWN0ZWRcXG5kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYzo1NDk6ICogICB0byBiZSBleHBsaWNpdGx5IGxpc3RlZCBpbiBEVCBhbmQgaW5zdGFudGlhdGVkIGJ5IG9mX21kaW9idXNfcmVnaXN0ZXIoKS5cXG5kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYy01NTAtICpcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jLTU1Mi0gKi9cXG5kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYzo1NTM6aW50IF9fbWRpb2J1c19yZWdpc3RlcihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBzdHJ1Y3QgbW9kdWxlICpvd25lcilcXG5kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYy01NTQte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmMtNjY2LX1cXG5kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYzo2Njc6RVhQT1JUX1NZTUJPTChfX21kaW9idXNfcmVnaXN0ZXIpO1xcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jLTY2OC1cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jPTczND1FWFBPUlRfU1lNQk9MKG1kaW9fZmluZF9idXMpO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmMtNzQ1LSAqIEJlY2F1c2UgdGhlIGFzc29jaWF0aW9uIG9mIGEgZGV2aWNlX25vZGUgYW5kIG1paV9idXMgaXMgbWFkZSB2aWFcXG5kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYzo3NDY6ICogb2ZfbWRpb2J1c19yZWdpc3RlcigpLCB0aGUgbWlpX2J1cyBjYW5ub3QgYmUgZm91bmQgYmVmb3JlIGl0IGlzXFxuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmM6NzQ3OiAqIHJlZ2lzdGVyZWQgd2l0aCBvZl9tZGlvYnVzX3JlZ2lzdGVyKCkuXFxuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmMtNzQ4LSAqXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuYz0xNTE9aW50IG1kaW9fZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2RldmljZS5jLTE1Ni1cXG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuYzoxNTc6XFx0ZXJyID0gbWRpb2J1c19yZWdpc3Rlcl9kZXZpY2UobWRpb2Rldik7XFxuZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmMtMTU4LVxcdGlmIChlcnIpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuYz0xODk9RVhQT1JUX1NZTUJPTChtZGlvX2RldmljZV9yZW1vdmUpO1xcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2RldmljZS5jLTE5MC1cXG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuYzoxOTE6aW50IG1kaW9idXNfcmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcXG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuYy0xOTIte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2cmVzLmM9NTY9c3RhdGljIGludCBtZGlvYnVzX2RldnJlc19tYXRjaChzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZyZXMuYy02NS0vKipcXG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZyZXMuYzo2NjogKiBfX2Rldm1fbWRpb2J1c19yZWdpc3RlciAtIFJlc291cmNlLW1hbmFnZWQgdmFyaWFudCBvZiBtZGlvYnVzX3JlZ2lzdGVyKClcXG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZyZXMuYy02Ny0gKiBAZGV2OlxcdERldmljZSB0byByZWdpc3RlciBtaWlfYnVzIGZvclxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2cmVzLmMtNzItICovXFxuZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2cmVzLmM6NzM6aW50IF9fZGV2bV9tZGlvYnVzX3JlZ2lzdGVyKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IG1paV9idXMgKmJ1cyxcXG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZyZXMuYy03NC1cXHRcXHRcXHQgICAgc3RydWN0IG1vZHVsZSAqb3duZXIpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZyZXMuYy04Ni1cXG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZyZXMuYzo4NzpcXHRyZXQgPSBfX21kaW9idXNfcmVnaXN0ZXIoYnVzLCBvd25lcik7XFxuZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2cmVzLmMtODgtXFx0aWYgKHJldCkge1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2cmVzLmMtOTYtfVxcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2RldnJlcy5jOjk3OkVYUE9SVF9TWU1CT0woX19kZXZtX21kaW9idXNfcmVnaXN0ZXIpO1xcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2RldnJlcy5jLTk4LVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2cmVzLmMtMTAwLS8qKlxcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2RldnJlcy5jOjEwMTogKiBfX2Rldm1fb2ZfbWRpb2J1c19yZWdpc3RlciAtIFJlc291cmNlIG1hbmFnZWQgdmFyaWFudCBvZiBvZl9tZGlvYnVzX3JlZ2lzdGVyKClcXG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZyZXMuYy0xMDItICogQGRldjpcXHREZXZpY2UgdG8gcmVnaXN0ZXIgbWlpX2J1cyBmb3JcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2RldnJlcy5jLTEwNi0gKi9cXG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZyZXMuYzoxMDc6aW50IF9fZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IG1paV9idXMgKm1kaW8sXFxuZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2cmVzLmMtMTA4LVxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLCBzdHJ1Y3QgbW9kdWxlICpvd25lcilcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2RldnJlcy5jLTEyMC1cXG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZyZXMuYzoxMjE6XFx0cmV0ID0gX19vZl9tZGlvYnVzX3JlZ2lzdGVyKG1kaW8sIG5wLCBvd25lcik7XFxuZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2cmVzLmMtMTIyLVxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2RldnJlcy5jLTEzMC19XFxuZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2cmVzLmM6MTMxOkVYUE9SVF9TWU1CT0woX19kZXZtX29mX21kaW9idXNfcmVnaXN0ZXIpO1xcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2RldnJlcy5jLTEzMi0jZW5kaWYgLyogQ09ORklHX09GX01ESU8gKi9cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MTEwOT1pbnQgcGh5X2RldmljZV9yZWdpc3RlcihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMTEyLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTExMzpcXHRlcnIgPSBtZGlvYnVzX3JlZ2lzdGVyX2RldmljZShcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvKTtcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTExMTQtXFx0aWYgKGVycilcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaWItaW50ZXJuYWwuaD0yNT12b2lkIHBoeV9jaGVja19kb3duc2hpZnQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7XFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpYi1pbnRlcm5hbC5oLTI2LVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaWItaW50ZXJuYWwuaDoyNzppbnQgbWRpb2J1c19yZWdpc3Rlcl9kZXZpY2Uoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KTtcXG5kcml2ZXJzL25ldC9waHkvcGh5bGliLWludGVybmFsLmgtMjgtaW50IG1kaW9idXNfdW5yZWdpc3Rlcl9kZXZpY2Uoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9zZnAuYz05NDI9c3RhdGljIGludCBzZnBfaTJjX21kaW9idXNfY3JlYXRlKHN0cnVjdCBzZnAgKnNmcClcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9zZnAuYy05NTMtXFxuZHJpdmVycy9uZXQvcGh5L3NmcC5jOjk1NDpcXHRyZXQgPSBtZGlvYnVzX3JlZ2lzdGVyKGkyY19taWkpO1xcbmRyaXZlcnMvbmV0L3BoeS9zZnAuYy05NTUtXFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDg6MzM6MjkuNjEwNTc0NDQxWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NjU4MjY0NzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgUEhZIFJlZ2lzdHJhdGlvbiBQcm9jZXNzKipcblxuUmlnaHQsIGxldCdzIHNlZSwgYF9fbWRpb2J1c19yZWdpc3RlcmAgaXMgZGVmaW5lZCBpbiBgZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmNgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgZG9lcyB0aGlzIHJvdXRpbmUgcGVyZm9ybSBhbnkgUEhZIHNjYW5uaW5nIG9yIGVudW1lcmF0aW9uIGFzIHBhcnQgb2YgaXRzIHJlZ2lzdHJhdGlvbiBwcm9jZXNzPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgUEhZcyBhcmUgaW5pdGlhbGx5IGRpc2NvdmVyZWQgYW5kIGFzc29jaWF0ZWQgd2l0aCB0aGUgTURJTyBidXMuIEknbSBnb2luZyB0byBqdW1wIGludG8gdGhlIGBfX21kaW9idXNfcmVnaXN0ZXJgIGZ1bmN0aW9uIGRlZmluaXRpb24gYW5kIHNlZSB3aGF0IGl0IGFjdHVhbGx5ICpkb2VzKi4gSXMgaXQgc2ltcGx5IHJlZ2lzdGVyaW5nIHRoZSBidXMsIG9yIGlzIGl0IGRpZ2dpbmcgYXJvdW5kIGluIHRoZSBNRElPIHNwYWNlIGZvciBhdmFpbGFibGUgZGV2aWNlcyBkdXJpbmcgdGhlIHJlZ2lzdHJhdGlvbiBpdHNlbGY/IFRoYXQncyB0aGUgY3JpdGljYWwgcXVlc3Rpb24gaGVyZSwgc2luY2UgSSdtIHRoaW5raW5nIGFib3V0IHRoZSBsb3ctbGV2ZWwgUEhZIGludGVyYWN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTEyNSwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA4OjMzOjMzLjA3NjQwNTExNloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjU4NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTUwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDU1MDpcXHQgKlxcbiA1NTE6XFx0ICogUmV0dXJucyAwIG9uIHN1Y2Nlc3Mgb3IgXFx1MDAzYyAwIG9uIGVycm9yLlxcbiA1NTI6XFx0ICovXFxuIDU1MzpcXHRpbnQgX19tZGlvYnVzX3JlZ2lzdGVyKHN0cnVjdCBtaWlfYnVzICpidXMsIHN0cnVjdCBtb2R1bGUgKm93bmVyKVxcbiA1NTQ6XFx0e1xcbiA1NTU6XFx0XFx0c3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2O1xcbiA1NTY6XFx0XFx0c3RydWN0IGdwaW9fZGVzYyAqZ3Bpb2Q7XFxuIDU1NzpcXHRcXHRib29sIHByZXZlbnRfYzQ1X3NjYW47XFxuIDU1ODpcXHRcXHRpbnQgaSwgZXJyO1xcbiA1NTk6XFx0XFxuIDU2MDpcXHRcXHRpZiAoIWJ1cyB8fCAhYnVzLVxcdTAwM2VuYW1lKVxcbiA1NjE6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDU2MjpcXHRcXG4gNTYzOlxcdFxcdC8qIEFuIGFjY2VzcyBtZXRob2QgYWx3YXlzIG5lZWRzIGJvdGggcmVhZCBhbmQgd3JpdGUgb3BlcmF0aW9ucyAqL1xcbiA1NjQ6XFx0XFx0aWYgKCEhYnVzLVxcdTAwM2VyZWFkICE9ICEhYnVzLVxcdTAwM2V3cml0ZSB8fCAhIWJ1cy1cXHUwMDNlcmVhZF9jNDUgIT0gISFidXMtXFx1MDAzZXdyaXRlX2M0NSlcXG4gNTY1OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA1NjY6XFx0XFxuIDU2NzpcXHRcXHQvKiBBdCBsZWFzdCBvbmUgbWV0aG9kIGlzIG1hbmRhdG9yeSAqL1xcbiA1Njg6XFx0XFx0aWYgKCFidXMtXFx1MDAzZXJlYWQgXFx1MDAyNlxcdTAwMjYgIWJ1cy1cXHUwMDNlcmVhZF9jNDUpXFxuIDU2OTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNTcwOlxcdFxcbiA1NzE6XFx0XFx0aWYgKGJ1cy1cXHUwMDNlcGFyZW50IFxcdTAwMjZcXHUwMDI2IGJ1cy1cXHUwMDNlcGFyZW50LVxcdTAwM2VvZl9ub2RlKVxcbiA1NzI6XFx0XFx0XFx0Zndub2RlX3NldF9mbGFnKFxcdTAwMjZidXMtXFx1MDAzZXBhcmVudC1cXHUwMDNlb2Zfbm9kZS1cXHUwMDNlZndub2RlLFxcbiA1NzM6XFx0XFx0XFx0XFx0XFx0RldOT0RFX0ZMQUdfTkVFRFNfQ0hJTERfQk9VTkRfT05fQUREKTtcXG4gNTc0OlxcdFxcbiA1NzU6XFx0XFx0V0FSTihidXMtXFx1MDAzZXN0YXRlICE9IE1ESU9CVVNfQUxMT0NBVEVEIFxcdTAwMjZcXHUwMDI2XFxuIDU3NjpcXHRcXHQgICAgIGJ1cy1cXHUwMDNlc3RhdGUgIT0gTURJT0JVU19VTlJFR0lTVEVSRUQsXFxuIDU3NzpcXHRcXHQgICAgIFxcXCIlczogbm90IGluIEFMTE9DQVRFRCBvciBVTlJFR0lTVEVSRUQgc3RhdGVcXFxcblxcXCIsIGJ1cy1cXHUwMDNlaWQpO1xcbiA1Nzg6XFx0XFxuIDU3OTpcXHRcXHRidXMtXFx1MDAzZW93bmVyID0gb3duZXI7XFxuIDU4MDpcXHRcXHRidXMtXFx1MDAzZWRldi5wYXJlbnQgPSBidXMtXFx1MDAzZXBhcmVudDtcXG4gNTgxOlxcdFxcdGJ1cy1cXHUwMDNlZGV2LmNsYXNzID0gXFx1MDAyNm1kaW9fYnVzX2NsYXNzO1xcbiA1ODI6XFx0XFx0YnVzLVxcdTAwM2VkZXYuZ3JvdXBzID0gTlVMTDtcXG4gNTgzOlxcdFxcdGRldl9zZXRfbmFtZShcXHUwMDI2YnVzLVxcdTAwM2VkZXYsIFxcXCIlc1xcXCIsIGJ1cy1cXHUwMDNlaWQpO1xcbiA1ODQ6XFx0XFxuIDU4NTpcXHRcXHQvKiBJZiB0aGUgYnVzIHN0YXRlIGlzIGFsbG9jYXRlZCwgd2UncmUgcmVnaXN0ZXJpbmcgYSBmcmVzaCBidXNcXG4gNTg2OlxcdFxcdCAqIHRoYXQgbWF5IGhhdmUgYSBmd25vZGUgYXNzb2NpYXRlZCB3aXRoIGl0LiBHcmFiIGEgcmVmZXJlbmNlXFxuIDU4NzpcXHRcXHQgKiB0byB0aGUgZndub2RlLiBUaGlzIHdpbGwgYmUgZHJvcHBlZCB3aGVuIHRoZSBidXMgaXMgcmVsZWFzZWQuXFxuIDU4ODpcXHRcXHQgKiBJZiB0aGUgYnVzIHdhcyBzZXQgdG8gdW5yZWdpc3RlcmVkLCBpdCBtZWFucyB0aGF0IHRoZSBidXMgd2FzXFxuIDU4OTpcXHRcXHQgKiBwcmV2aW91c2x5IHJlZ2lzdGVyZWQsIGFuZCB3ZSd2ZSBhbHJlYWR5IGdyYWJiZWQgYSByZWZlcmVuY2UuXFxuIDU5MDpcXHRcXHQgKi9cXG4gNTkxOlxcdFxcdGlmIChidXMtXFx1MDAzZXN0YXRlID09IE1ESU9CVVNfQUxMT0NBVEVEKVxcbiA1OTI6XFx0XFx0XFx0Zndub2RlX2hhbmRsZV9nZXQoZGV2X2Z3bm9kZShcXHUwMDI2YnVzLVxcdTAwM2VkZXYpKTtcXG4gNTkzOlxcdFxcbiA1OTQ6XFx0XFx0LyogV2UgbmVlZCB0byBzZXQgc3RhdGUgdG8gTURJT0JVU19VTlJFR0lTVEVSRUQgdG8gY29ycmVjdGx5IHJlbGVhc2VcXG4gNTk1OlxcdFxcdCAqIHRoZSBkZXZpY2UgaW4gbWRpb2J1c19mcmVlKClcXG4gNTk2OlxcdFxcdCAqXFxuIDU5NzpcXHRcXHQgKiBTdGF0ZSB3aWxsIGJlIHVwZGF0ZWQgbGF0ZXIgaW4gdGhpcyBmdW5jdGlvbiBpbiBjYXNlIG9mIHN1Y2Nlc3NcXG4gNTk4OlxcdFxcdCAqL1xcbiA1OTk6XFx0XFx0YnVzLVxcdTAwM2VzdGF0ZSA9IE1ESU9CVVNfVU5SRUdJU1RFUkVEO1xcbiA2MDA6XFx0XFxuIDYwMTpcXHRcXHRlcnIgPSBkZXZpY2VfcmVnaXN0ZXIoXFx1MDAyNmJ1cy1cXHUwMDNlZGV2KTtcXG4gNjAyOlxcdFxcdGlmIChlcnIpIHtcXG4gNjAzOlxcdFxcdFxcdHByX2VycihcXFwibWlpX2J1cyAlcyBmYWlsZWQgdG8gcmVnaXN0ZXJcXFxcblxcXCIsIGJ1cy1cXHUwMDNlaWQpO1xcbiA2MDQ6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDYwNTpcXHRcXHR9XFxuIDYwNjpcXHRcXG4gNjA3OlxcdFxcdG11dGV4X2luaXQoXFx1MDAyNmJ1cy1cXHUwMDNlbWRpb19sb2NrKTtcXG4gNjA4OlxcdFxcdG11dGV4X2luaXQoXFx1MDAyNmJ1cy1cXHUwMDNlc2hhcmVkX2xvY2spO1xcbiA2MDk6XFx0XFxuIDYxMDpcXHRcXHQvKiBhc3NlcnQgYnVzIGxldmVsIFBIWSBHUElPIHJlc2V0ICovXFxuIDYxMTpcXHRcXHRncGlvZCA9IGRldm1fZ3Bpb2RfZ2V0X29wdGlvbmFsKFxcdTAwMjZidXMtXFx1MDAzZWRldiwgXFxcInJlc2V0XFxcIiwgR1BJT0RfT1VUX0hJR0gpO1xcbiA2MTI6XFx0XFx0aWYgKElTX0VSUihncGlvZCkpIHtcXG4gNjEzOlxcdFxcdFxcdGVyciA9IGRldl9lcnJfcHJvYmUoXFx1MDAyNmJ1cy1cXHUwMDNlZGV2LCBQVFJfRVJSKGdwaW9kKSxcXG4gNjE0OlxcdFxcdFxcdFxcdFxcdCAgICBcXFwibWlpX2J1cyAlcyBjb3VsZG4ndCBnZXQgcmVzZXQgR1BJT1xcXFxuXFxcIixcXG4gNjE1OlxcdFxcdFxcdFxcdFxcdCAgICBidXMtXFx1MDAzZWlkKTtcXG4gNjE2OlxcdFxcdFxcdGRldmljZV9kZWwoXFx1MDAyNmJ1cy1cXHUwMDNlZGV2KTtcXG4gNjE3OlxcdFxcdFxcdHJldHVybiBlcnI7XFxuIDYxODpcXHRcXHR9IGVsc2VcXHRpZiAoZ3Bpb2QpIHtcXG4gNjE5OlxcdFxcdFxcdGJ1cy1cXHUwMDNlcmVzZXRfZ3Bpb2QgPSBncGlvZDtcXG4gNjIwOlxcdFxcdFxcdGZzbGVlcChidXMtXFx1MDAzZXJlc2V0X2RlbGF5X3VzKTtcXG4gNjIxOlxcdFxcdFxcdGdwaW9kX3NldF92YWx1ZV9jYW5zbGVlcChncGlvZCwgMCk7XFxuIDYyMjpcXHRcXHRcXHRpZiAoYnVzLVxcdTAwM2VyZXNldF9wb3N0X2RlbGF5X3VzIFxcdTAwM2UgMClcXG4gNjIzOlxcdFxcdFxcdFxcdGZzbGVlcChidXMtXFx1MDAzZXJlc2V0X3Bvc3RfZGVsYXlfdXMpO1xcbiA2MjQ6XFx0XFx0fVxcbiA2MjU6XFx0XFxuIDYyNjpcXHRcXHRpZiAoYnVzLVxcdTAwM2VyZXNldCkge1xcbiA2Mjc6XFx0XFx0XFx0ZXJyID0gYnVzLVxcdTAwM2VyZXNldChidXMpO1xcbiA2Mjg6XFx0XFx0XFx0aWYgKGVycilcXG4gNjI5OlxcdFxcdFxcdFxcdGdvdG8gZXJyb3JfcmVzZXRfZ3Bpb2Q7XFxuIDYzMDpcXHRcXHR9XFxuIDYzMTpcXHRcXG4gNjMyOlxcdFxcdGlmIChidXMtXFx1MDAzZXJlYWQpIHtcXG4gNjMzOlxcdFxcdFxcdGVyciA9IG1kaW9idXNfc2Nhbl9idXNfYzIyKGJ1cyk7XFxuIDYzNDpcXHRcXHRcXHRpZiAoZXJyKVxcbiA2MzU6XFx0XFx0XFx0XFx0Z290byBlcnJvcjtcXG4gNjM2OlxcdFxcdH1cXG4gNjM3OlxcdFxcbiA2Mzg6XFx0XFx0cHJldmVudF9jNDVfc2NhbiA9IG1kaW9idXNfcHJldmVudF9jNDVfc2NhbihidXMpO1xcbiA2Mzk6XFx0XFxuIDY0MDpcXHRcXHRpZiAoIXByZXZlbnRfYzQ1X3NjYW4gXFx1MDAyNlxcdTAwMjYgYnVzLVxcdTAwM2VyZWFkX2M0NSkge1xcbiA2NDE6XFx0XFx0XFx0ZXJyID0gbWRpb2J1c19zY2FuX2J1c19jNDUoYnVzKTtcXG4gNjQyOlxcdFxcdFxcdGlmIChlcnIpXFxuIDY0MzpcXHRcXHRcXHRcXHRnb3RvIGVycm9yO1xcbiA2NDQ6XFx0XFx0fVxcbiA2NDU6XFx0XFxuIDY0NjpcXHRcXHRidXMtXFx1MDAzZXN0YXRlID0gTURJT0JVU19SRUdJU1RFUkVEO1xcbiA2NDc6XFx0XFx0ZGV2X2RiZyhcXHUwMDI2YnVzLVxcdTAwM2VkZXYsIFxcXCJwcm9iZWRcXFxcblxcXCIpO1xcbiA2NDg6XFx0XFx0cmV0dXJuIDA7XFxuIDY0OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDg6MzM6MzMuMDc2NTczMjk2WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY5ODAxMTEyOTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIFBIWSBEcml2ZXIgUGF0aCoqXG5cbk9rYXksIHNvIEkndmUgdHJhY2VkIHRoZSBwYXRoLiBgX19tZGlvYnVzX3JlZ2lzdGVyYCBpcyBkZWZpbml0ZWx5IHRoZSBrZXkgZW50cnkgcG9pbnQgaGVyZS4gSXQgY2FsbHMgYG1kaW9idXNfc2Nhbl9idXNfYzIyKGJ1cylgLCB3aGljaCBkb2VzIGV4YWN0bHkgd2hhdCBJIGV4cGVjdGVkOiBpdCBzY2FucyB0aGUgTURJTyBidXMgZm9yIFBIWXMsIGl0ZXJhdGluZyB0aHJvdWdoIGFkZHJlc3NlcyAwIHRvIDMxLiBXaGVuIGl0IGZpbmRzIHNvbWV0aGluZywgaXQgcmVnaXN0ZXJzIGl0LiBGcm9tIHRoZXJlLCB0aGUgUEhZIHN1YnN5c3RlbSB0YWtlcyBvdmVyLCBtYXRjaGluZyB0aGUgUEhZIElEIGFnYWluc3QgYG1vdG9yY29tbV9waHlfZHJ2c2AgYW5kIHVsdGltYXRlbHkgcHJvYmluZyBgeXQ4ODI0X3Byb2JlYC4gU28sIHRoZXJlJ3MgYSBnb29kIHNob3QgdGhpcyBpcyByZWFjaGFibGUgdGhyb3VnaCBVU0IgZnV6emluZyFcblxuQnV0LCBob2xkIG9uLiBgbWRpby1tdnVzYi5jYC4uLiB0aGF0J3MgYSBVU0IgZHJpdmVyLCBpc24ndCBpdD8gSSBuZWVkIHRvIGNoZWNrIHRoZSBzeXprYWxsZXIgY29uZmlncyB0byBzZWUgaWYgYENPTkZJR19VU0JfTURJT2Agb3IgYENPTkZJR19NRElPX01WVVNCYCBvciBzb21ldGhpbmcgc2ltaWxhciBpcyBlbmFibGVkLiBXYWl0LCBsZXQgbWUgbm90IGp1bXAgdG8gY29uY2x1c2lvbnMuLi4gdGhlcmUgYXJlIG90aGVyIHdheXMgdG8gcmVnaXN0ZXIgYW4gTURJTyBidXMgYmVzaWRlcyB0aGF0IGRyaXZlciwgbGlrZSBgbWRpby1pMmMuY2AsIGBtZGlvLWdwaW8uY2AsIG9yIGV2ZW4gYSBgZml4ZWQtcGh5YC4gQnV0LCB5ZWFoLCB0aGUgYHZoY2lgIHN1cHBvcnQgaW4gc3l6a2FsbGVyIG1ha2VzIGBtZGlvLW12dXNiYCBhIHBlcmZlY3RseSB2YWxpZCBwYXRoIHRvIGV4cGxvcmUuXG5cbkFscmlnaHQsIHRpbWUgdG8gZGl2ZSBkZWVwZXIgaW50byBgeXQ4ODI0X3Byb2JlYC4gSXQgY2FsbHMgYGRldm1fb2ZfcGh5X3BhY2thZ2Vfam9pbmAsIGBwaHlfcGFja2FnZV9wcm9iZV9vbmNlYCwgYHl0ODgyNF9waHlfcGFja2FnZV9wcm9iZV9vbmNlYCwgYW5kIGBkZXZtX2t6YWxsb2NgLiBMZXQncyBmb2N1cyBvbiBgeXQ4ODI0X3BoeV9wYWNrYWdlX3Byb2JlX29uY2VgIHNwZWNpZmljYWxseS4gQWghIEl0J3MgcmVhZGluZyBmcm9tIHRoZSBkZXZpY2UgdHJlZTogYG9mX3Byb3BlcnR5X3JlYWRfc3RyaW5nKG5wLCBcIm1vdG9yY29tbSxpbnRlcmZhY2UtbW9kZVwiLCBcdTAwMjZpbnRlcmZhY2VfbW9kZV9uYW1lKWAuIENydWNpYWxseSwgYG5wYCBpcyBnb2luZyB0byBiZSBOVUxMIGZvciBhIFVTQiBNRElPIGJ1cywgYW5kIGBvZl9wcm9wZXJ0eV9yZWFkX3N0cmluZ2Agd2lsbCByZXR1cm4gYW4gZXJyb3IgKHByb2JhYmx5IGAtRUlOVkFMYCkuIFRpbWUgdG8gY2hlY2sgYHl0ODgyNF9waHlfcGFja2FnZV9wcm9iZV9vbmNlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzY5NjksIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MzMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwODozMzo0MC4wNTY2OTA0MDJaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjg3NjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0NTYwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI0NTYwOlxcdFxcdHtcXG40NTYxOlxcdFxcdFxcdFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4NTMxKSxcXG40NTYyOlxcdFxcdFxcdC5uYW1lXFx0XFx0PSBcXFwiWVQ4NTMxIEdpZ2FiaXQgRXRoZXJuZXRcXFwiLFxcbjQ1NjM6XFx0XFx0XFx0LnByb2JlXFx0XFx0PSB5dDg1MzFfcHJvYmUsXFxuNDU2NDpcXHRcXHRcXHQuY29uZmlnX2luaXRcXHQ9IHl0ODUzMV9jb25maWdfaW5pdCxcXG40NTY1OlxcdFxcdFxcdC5zdXNwZW5kXFx0PSBnZW5waHlfc3VzcGVuZCxcXG40NTY2OlxcdFxcdFxcdC5yZXN1bWVcXHRcXHQ9IGdlbnBoeV9yZXN1bWUsXFxuNDU2NzpcXHRcXHRcXHQuZ2V0X3dvbFxcdD0geXRwaHlfZ2V0X3dvbCxcXG40NTY4OlxcdFxcdFxcdC5zZXRfd29sXFx0PSB5dDg1MzFfc2V0X3dvbCxcXG40NTY5OlxcdFxcdFxcdC5saW5rX2NoYW5nZV9ub3RpZnkgPSB5dDg1MzFfbGlua19jaGFuZ2Vfbm90aWZ5LFxcbjQ1NzA6XFx0XFx0XFx0LmxlZF9od19pc19zdXBwb3J0ZWQgPSB5dDg1MjFfbGVkX2h3X2lzX3N1cHBvcnRlZCxcXG40NTcxOlxcdFxcdFxcdC5sZWRfaHdfY29udHJvbF9zZXQgPSB5dDg1MjFfbGVkX2h3X2NvbnRyb2xfc2V0LFxcbjQ1NzI6XFx0XFx0XFx0LmxlZF9od19jb250cm9sX2dldCA9IHl0ODUyMV9sZWRfaHdfY29udHJvbF9nZXQsXFxuNDU3MzpcXHRcXHR9LFxcbjQ1NzQ6XFx0XFx0e1xcbjQ1NzU6XFx0XFx0XFx0UEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg1MzFTKSxcXG40NTc2OlxcdFxcdFxcdC5uYW1lXFx0XFx0PSBcXFwiWVQ4NTMxUyBHaWdhYml0IEV0aGVybmV0XFxcIixcXG40NTc3OlxcdFxcdFxcdC5nZXRfZmVhdHVyZXNcXHQ9IHl0ODUyMV9nZXRfZmVhdHVyZXMsXFxuNDU3ODpcXHRcXHRcXHQucHJvYmVcXHRcXHQ9IHl0ODUyMV9wcm9iZSxcXG40NTc5OlxcdFxcdFxcdC5yZWFkX3BhZ2VcXHQ9IHl0ODUyMV9yZWFkX3BhZ2UsXFxuNDU4MDpcXHRcXHRcXHQud3JpdGVfcGFnZVxcdD0geXQ4NTIxX3dyaXRlX3BhZ2UsXFxuNDU4MTpcXHRcXHRcXHQuZ2V0X3dvbFxcdD0geXRwaHlfZ2V0X3dvbCxcXG40NTgyOlxcdFxcdFxcdC5zZXRfd29sXFx0PSB5dHBoeV9zZXRfd29sLFxcbjQ1ODM6XFx0XFx0XFx0LmNvbmZpZ19hbmVnXFx0PSB5dDg1MjFfY29uZmlnX2FuZWcsXFxuNDU4NDpcXHRcXHRcXHQuYW5lZ19kb25lXFx0PSB5dDg1MjFfYW5lZ19kb25lLFxcbjQ1ODU6XFx0XFx0XFx0LmNvbmZpZ19pbml0XFx0PSB5dDg1MjFfY29uZmlnX2luaXQsXFxuNDU4NjpcXHRcXHRcXHQucmVhZF9zdGF0dXNcXHQ9IHl0ODUyMV9yZWFkX3N0YXR1cyxcXG40NTg3OlxcdFxcdFxcdC5zb2Z0X3Jlc2V0XFx0PSB5dDg1MjFfc29mdF9yZXNldCxcXG40NTg4OlxcdFxcdFxcdC5zdXNwZW5kXFx0PSB5dDg1MjFfc3VzcGVuZCxcXG40NTg5OlxcdFxcdFxcdC5yZXN1bWVcXHRcXHQ9IHl0ODUyMV9yZXN1bWUsXFxuNDU5MDpcXHRcXHR9LFxcbjQ1OTE6XFx0XFx0e1xcbjQ1OTI6XFx0XFx0XFx0UEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg4MjEpLFxcbjQ1OTM6XFx0XFx0XFx0Lm5hbWVcXHRcXHRcXHQ9IFxcXCJZVDg4MjEgMi41R2JwcyBQSFlcXFwiLFxcbjQ1OTQ6XFx0XFx0XFx0LmdldF9mZWF0dXJlc1xcdFxcdD0geXQ4ODIxX2dldF9mZWF0dXJlcyxcXG40NTk1OlxcdFxcdFxcdC5yZWFkX3BhZ2VcXHRcXHQ9IHl0ODUyMV9yZWFkX3BhZ2UsXFxuNDU5NjpcXHRcXHRcXHQud3JpdGVfcGFnZVxcdFxcdD0geXQ4NTIxX3dyaXRlX3BhZ2UsXFxuNDU5NzpcXHRcXHRcXHQuZ2V0X3dvbFxcdFxcdD0geXRwaHlfZ2V0X3dvbCxcXG40NTk4OlxcdFxcdFxcdC5zZXRfd29sXFx0XFx0PSB5dHBoeV9zZXRfd29sLFxcbjQ1OTk6XFx0XFx0XFx0LmNvbmZpZ19hbmVnXFx0XFx0PSBnZW5waHlfY29uZmlnX2FuZWcsXFxuNDYwMDpcXHRcXHRcXHQuYW5lZ19kb25lXFx0XFx0PSB5dDg4MjFfYW5lZ19kb25lLFxcbjQ2MDE6XFx0XFx0XFx0LmNvbmZpZ19pbml0XFx0XFx0PSB5dDg4MjFfY29uZmlnX2luaXQsXFxuNDYwMjpcXHRcXHRcXHQuZ2V0X3JhdGVfbWF0Y2hpbmdcXHQ9IHl0ODgyMV9nZXRfcmF0ZV9tYXRjaGluZyxcXG40NjAzOlxcdFxcdFxcdC5yZWFkX3N0YXR1c1xcdFxcdD0geXQ4ODIxX3JlYWRfc3RhdHVzLFxcbjQ2MDQ6XFx0XFx0XFx0LnNvZnRfcmVzZXRcXHRcXHQ9IHl0ODgyMV9zb2Z0X3Jlc2V0LFxcbjQ2MDU6XFx0XFx0XFx0LnN1c3BlbmRcXHRcXHQ9IHl0ODgyMV9zdXNwZW5kLFxcbjQ2MDY6XFx0XFx0XFx0LnJlc3VtZVxcdFxcdFxcdD0geXQ4ODIxX3Jlc3VtZSxcXG40NjA3OlxcdFxcdH0sXFxuNDYwODpcXHRcXHR7XFxuNDYwOTpcXHRcXHRcXHRQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODgyNCksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA4OjMzOjQwLjA1Njk4MTc3MloiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDA3NTkwODc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqTmF2aWdhdGluZyB0aGUgQ29kZWJhc2UqKlxuXG5Pa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJIG5lZWQgdG8gZ2V0IG9yaWVudGVkLiBCZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gYW55dGhpbmcsIEknbSBnZXR0aW5nIGEgc2Vuc2UgdGhhdCBgeXQ4ODI0X3BoeV9wYWNrYWdlX3Byb2JlX29uY2VgIGlzIGdvaW5nIHRvIGJlIGNlbnRyYWwgdG8gdW5kZXJzdGFuZGluZyB0aGlzIHNlY3Rpb24gb2YgY29kZS4gSSdtIGhhdmluZyBhIHN0cm9uZyBpbnN0aW5jdCB0aGF0IHNvbWV0aGluZyBoaW5nZXMgb24gaG93IHRoYXQgZnVuY3Rpb24gaXMgYmVpbmcgdXNlZCwgb3Igd2hhdCBpdHMgZGVwZW5kZW5jaWVzIGFyZS4gU28sIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBncmFzcCBpdHMgcm9sZSBhbmQgaW1wbGVtZW50YXRpb24gYmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIuIEknbSBnb2luZyB0byB0cmFjayBpdCBkb3duIGFuZCBzZWUgZXhhY3RseSB3aGF0J3MgZ29pbmcgb24gd2l0aCBpdC4gTGV0J3Mgc2VlLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4OTU4LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwODozMzo0My4wNjQ1NzY4ODdaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzQyODYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0NTIwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI0NTIwOlxcdH1cXG40NTIxOlxcdFxcbjQ1MjI6XFx0c3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIG1vdG9yY29tbV9waHlfZHJ2c1tdID0ge1xcbjQ1MjM6XFx0XFx0e1xcbjQ1MjQ6XFx0XFx0XFx0UEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg1MTEpLFxcbjQ1MjU6XFx0XFx0XFx0Lm5hbWVcXHRcXHQ9IFxcXCJZVDg1MTEgR2lnYWJpdCBFdGhlcm5ldFxcXCIsXFxuNDUyNjpcXHRcXHRcXHQuY29uZmlnX2luaXRcXHQ9IHl0ODUxMV9jb25maWdfaW5pdCxcXG40NTI3OlxcdFxcdFxcdC5zdXNwZW5kXFx0PSBnZW5waHlfc3VzcGVuZCxcXG40NTI4OlxcdFxcdFxcdC5yZXN1bWVcXHRcXHQ9IGdlbnBoeV9yZXN1bWUsXFxuNDUyOTpcXHRcXHRcXHQucmVhZF9wYWdlXFx0PSB5dDg1MTFfcmVhZF9wYWdlLFxcbjQ1MzA6XFx0XFx0XFx0LndyaXRlX3BhZ2VcXHQ9IHl0ODUxMV93cml0ZV9wYWdlLFxcbjQ1MzE6XFx0XFx0fSxcXG40NTMyOlxcdFxcdHtcXG40NTMzOlxcdFxcdFxcdFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4NTIxKSxcXG40NTM0OlxcdFxcdFxcdC5uYW1lXFx0XFx0PSBcXFwiWVQ4NTIxIEdpZ2FiaXQgRXRoZXJuZXRcXFwiLFxcbjQ1MzU6XFx0XFx0XFx0LmdldF9mZWF0dXJlc1xcdD0geXQ4NTIxX2dldF9mZWF0dXJlcyxcXG40NTM2OlxcdFxcdFxcdC5wcm9iZVxcdFxcdD0geXQ4NTIxX3Byb2JlLFxcbjQ1Mzc6XFx0XFx0XFx0LnJlYWRfcGFnZVxcdD0geXQ4NTIxX3JlYWRfcGFnZSxcXG40NTM4OlxcdFxcdFxcdC53cml0ZV9wYWdlXFx0PSB5dDg1MjFfd3JpdGVfcGFnZSxcXG40NTM5OlxcdFxcdFxcdC5nZXRfd29sXFx0PSB5dHBoeV9nZXRfd29sLFxcbjQ1NDA6XFx0XFx0XFx0LnNldF93b2xcXHQ9IHl0cGh5X3NldF93b2wsXFxuNDU0MTpcXHRcXHRcXHQuY29uZmlnX2FuZWdcXHQ9IHl0ODUyMV9jb25maWdfYW5lZyxcXG40NTQyOlxcdFxcdFxcdC5hbmVnX2RvbmVcXHQ9IHl0ODUyMV9hbmVnX2RvbmUsXFxuNDU0MzpcXHRcXHRcXHQuY29uZmlnX2luaXRcXHQ9IHl0ODUyMV9jb25maWdfaW5pdCxcXG40NTQ0OlxcdFxcdFxcdC5yZWFkX3N0YXR1c1xcdD0geXQ4NTIxX3JlYWRfc3RhdHVzLFxcbjQ1NDU6XFx0XFx0XFx0LnNvZnRfcmVzZXRcXHQ9IHl0ODUyMV9zb2Z0X3Jlc2V0LFxcbjQ1NDY6XFx0XFx0XFx0LnN1c3BlbmRcXHQ9IHl0ODUyMV9zdXNwZW5kLFxcbjQ1NDc6XFx0XFx0XFx0LnJlc3VtZVxcdFxcdD0geXQ4NTIxX3Jlc3VtZSxcXG40NTQ4OlxcdFxcdFxcdC5sZWRfaHdfaXNfc3VwcG9ydGVkID0geXQ4NTIxX2xlZF9od19pc19zdXBwb3J0ZWQsXFxuNDU0OTpcXHRcXHRcXHQubGVkX2h3X2NvbnRyb2xfc2V0ID0geXQ4NTIxX2xlZF9od19jb250cm9sX3NldCxcXG40NTUwOlxcdFxcdFxcdC5sZWRfaHdfY29udHJvbF9nZXQgPSB5dDg1MjFfbGVkX2h3X2NvbnRyb2xfZ2V0LFxcbjQ1NTE6XFx0XFx0fSxcXG40NTUyOlxcdFxcdHtcXG40NTUzOlxcdFxcdFxcdFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4NTIyKSxcXG40NTU0OlxcdFxcdFxcdC5uYW1lXFx0XFx0PSBcXFwiWVQ4NTIyIDEwMCBNZWdhYml0IEV0aGVybmV0XFxcIixcXG40NTU1OlxcdFxcdFxcdC5jb25maWdfYW5lZ1xcdD0gZ2VucGh5X2NvbmZpZ19hbmVnLFxcbjQ1NTY6XFx0XFx0XFx0LmNvbmZpZ19pbml0XFx0PSB5dDg1MjJfY29uZmlnX2luaXQsXFxuNDU1NzpcXHRcXHRcXHQuc3VzcGVuZFxcdD0gZ2VucGh5X3N1c3BlbmQsXFxuNDU1ODpcXHRcXHRcXHQucmVzdW1lXFx0XFx0PSBnZW5waHlfcmVzdW1lLFxcbjQ1NTk6XFx0XFx0fSxcXG40NTYwOlxcdFxcdHtcXG40NTYxOlxcdFxcdFxcdFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4NTMxKSxcXG40NTYyOlxcdFxcdFxcdC5uYW1lXFx0XFx0PSBcXFwiWVQ4NTMxIEdpZ2FiaXQgRXRoZXJuZXRcXFwiLFxcbjQ1NjM6XFx0XFx0XFx0LnByb2JlXFx0XFx0PSB5dDg1MzFfcHJvYmUsXFxuNDU2NDpcXHRcXHRcXHQuY29uZmlnX2luaXRcXHQ9IHl0ODUzMV9jb25maWdfaW5pdCxcXG40NTY1OlxcdFxcdFxcdC5zdXNwZW5kXFx0PSBnZW5waHlfc3VzcGVuZCxcXG40NTY2OlxcdFxcdFxcdC5yZXN1bWVcXHRcXHQ9IGdlbnBoeV9yZXN1bWUsXFxuNDU2NzpcXHRcXHRcXHQuZ2V0X3dvbFxcdD0geXRwaHlfZ2V0X3dvbCxcXG40NTY4OlxcdFxcdFxcdC5zZXRfd29sXFx0PSB5dDg1MzFfc2V0X3dvbCxcXG40NTY5OlxcdFxcdFxcdC5saW5rX2NoYW5nZV9ub3RpZnkgPSB5dDg1MzFfbGlua19jaGFuZ2Vfbm90aWZ5LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwODozMzo0My4wNjQ5MjMxMjdaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI0NTUzMDAzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKk5hdmlnYXRpbmcgdGhlIENvZGViYXNlKipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4gQmVmb3JlIEkgcHJvY2VlZCBhbnkgZnVydGhlciB3aXRoIHRoaXMgbGluZSBvZiBpbnZlc3RpZ2F0aW9uLCBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgdW5kZXJzdGFuZGluZyBvZiBgeXQ4ODI0X3BoeV9wYWNrYWdlX3Byb2JlX29uY2VgLiBJdCdzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBwcm9iZSBmdW5jdGlvbiBvcGVyYXRlcy4gSSBuZWVkIHRvIGtub3cgcHJlY2lzZWx5IHdoYXQgaXQncyByZXNwb25zaWJsZSBmb3IgaW5pdGlhbGl6aW5nLCBob3cgaXQgaGFuZGxlcyB0aGUgaGFyZHdhcmUgZGV0ZWN0aW9uLCBhbmQgd2hhdCBpdHMgb3ZlcmFsbCBsaWZlY3ljbGUgbG9va3MgbGlrZS4gSSBjYW5ub3QgbW92ZSBvbiB1bnRpbCBJIGhhdmUgZnVsbHkgdW5kZXJzdG9vZCBob3cgdGhhdCBwcm9iZSBmdW5jdGlvbiB3b3Jrcy4gT25seSB0aGVuIHdpbGwgSSBiZSBhYmxlIHRvIGNvbnRpbnVlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDE2MSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDg6MzM6NDYuMzEwNDU3MDg2WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMyNTA5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDQ4MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNDQ4MDpcXHRcXHRcXHRcXHRcXHQgcGh5X21vZGVzKFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTCkpKSB7XFxuNDQ4MTpcXHRcXHRcXHRcXHRwcml2LVxcdTAwM2VpbnRlcmZhY2VfbW9kZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTDtcXG40NDgyOlxcdFxcdFxcdFxcdHByaXYtXFx1MDAzZW9mZnNldCA9IElOVEVSTkFMX1BIWTg4MjRfVE9QX0VYVEVORF9PRkZTRVQ7XFxuNDQ4MzpcXHRcXHRcXHR9IGVsc2Uge1xcbjQ0ODQ6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuNDQ4NTpcXHRcXHRcXHR9XFxuNDQ4NjpcXHRcXHR9XFxuNDQ4NzpcXHRcXHRyZXR1cm4gMDtcXG40NDg4OlxcdH1cXG40NDg5OlxcdFxcbjQ0OTA6XFx0LyoqXFxuNDQ5MTpcXHQgKiB5dDg4MjRfcHJvYmUoKSAtIHBoeTg4MjQgcHJvYmUuXFxuNDQ5MjpcXHQgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcXG40NDkzOlxcdCAqXFxuNDQ5NDpcXHQgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcXG40NDk1OlxcdCAqL1xcbjQ0OTY6XFx0c3RhdGljIGludCB5dDg4MjRfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG40NDk3OlxcdHtcXG40NDk4OlxcdFxcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFxcdTAwMjZwaHlkZXYtXFx1MDAzZW1kaW8uZGV2O1xcbjQ0OTk6XFx0XFx0c3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqc2hhcmVkX3ByaXY7XFxuNDUwMDpcXHRcXHRzdHJ1Y3QgeXQ4NTIxX3ByaXYgKnByaXY7XFxuNDUwMTpcXHRcXHRpbnQgcmV0O1xcbjQ1MDI6XFx0XFxuNDUwMzpcXHRcXHRyZXQgPSBkZXZtX29mX3BoeV9wYWNrYWdlX2pvaW4oZGV2LCBwaHlkZXYsIHNpemVvZigqc2hhcmVkX3ByaXYpKTtcXG40NTA0OlxcdFxcdGlmIChyZXQpXFxuNDUwNTpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjQ1MDY6XFx0XFxuNDUwNzpcXHRcXHRpZiAocGh5X3BhY2thZ2VfcHJvYmVfb25jZShwaHlkZXYpKSB7XFxuNDUwODpcXHRcXHRcXHRyZXQgPSB5dDg4MjRfcGh5X3BhY2thZ2VfcHJvYmVfb25jZShwaHlkZXYpO1xcbjQ1MDk6XFx0XFx0XFx0aWYgKHJldClcXG40NTEwOlxcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuNDUxMTpcXHRcXHR9XFxuNDUxMjpcXHRcXG40NTEzOlxcdFxcdHByaXYgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTtcXG40NTE0OlxcdFxcdGlmICghcHJpdilcXG40NTE1OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjQ1MTY6XFx0XFxuNDUxNzpcXHRcXHRwaHlkZXYtXFx1MDAzZXByaXYgPSBwcml2O1xcbjQ1MTg6XFx0XFxuNDUxOTpcXHRcXHRyZXR1cm4gMDtcXG40NTIwOlxcdH1cXG40NTIxOlxcdFxcbjQ1MjI6XFx0c3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIG1vdG9yY29tbV9waHlfZHJ2c1tdID0ge1xcbjQ1MjM6XFx0XFx0e1xcbjQ1MjQ6XFx0XFx0XFx0UEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg1MTEpLFxcbjQ1MjU6XFx0XFx0XFx0Lm5hbWVcXHRcXHQ9IFxcXCJZVDg1MTEgR2lnYWJpdCBFdGhlcm5ldFxcXCIsXFxuNDUyNjpcXHRcXHRcXHQuY29uZmlnX2luaXRcXHQ9IHl0ODUxMV9jb25maWdfaW5pdCxcXG40NTI3OlxcdFxcdFxcdC5zdXNwZW5kXFx0PSBnZW5waHlfc3VzcGVuZCxcXG40NTI4OlxcdFxcdFxcdC5yZXN1bWVcXHRcXHQ9IGdlbnBoeV9yZXN1bWUsXFxuNDUyOTpcXHRcXHRcXHQucmVhZF9wYWdlXFx0PSB5dDg1MTFfcmVhZF9wYWdlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwODozMzo0Ni4zMTA3ODY5ODZaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDk0MDU0NzY2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkLCBpbiB0aGUgZmlyc3QgcGVyc29uIGFuZCB0YXJnZXRlZCB0b3dhcmRzIGFuIGV4cGVydDpcblxuKipBbmFseXppbmcgdGhlIFByb2JlIFJvdXRpbmU6IHl0ODgyNF9waHlfcGFja2FnZV9wcm9iZV9vbmNlKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYHl0ODgyNF9waHlfcGFja2FnZV9wcm9iZV9vbmNlYCByb3V0aW5lLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGNvbXBsZXRlbHkuIEknbSBnb2luZyB0byBjYXJlZnVsbHkgcmVhZCBldmVyeSBsaW5lLCBiZWNhdXNlIGEgcHJvYmUgZnVuY3Rpb24gY2FuIGJlIGEgY3JpdGljYWwgcG9pbnQgb2YgZmFpbHVyZSBvciBzdWNjZXNzIHdoZW4gZGVhbGluZyB3aXRoIFBIWSBpbml0aWFsaXphdGlvbiBhbmQgYnJpbmd1cC4gSeKAmWxsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlOlxuXG4qICAgKipJbml0aWFsaXphdGlvbiBTZXF1ZW5jZToqKiBIb3cgZG9lcyBpdCBhY3R1YWxseSBkZXRlY3QgYW5kIGNvbmZpZ3VyZSB0aGUgUEhZPyBJcyBpdCB1c2luZyBhIHN0YW5kYXJkIE1JSS9HTUlJIGludGVyZmFjZSwgb3IgYXJlIHRoZXJlIGN1c3RvbSByZWdpc3RlciBhY2Nlc3MgcGF0dGVybnM/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbml0aWFsIGFzc3VtcHRpb25zLlxuKiAgICoqRGV2aWNlIElkZW50aWZpY2F0aW9uOioqIFdoYXQncyB0aGUgZGV0ZWN0aW9uIG1lY2hhbmlzbT8gRG9lcyBpdCByZWx5IG9uIGEgc3BlY2lmaWMgUEhZIElEIG9yIGF1dG9uZWdvdGlhdGlvbiBwYXJhbWV0ZXJzPyBBcmUgdGhlcmUgYW55IGhhcmRjb2RlZCBhc3N1bXB0aW9ucyBhYm91dCB0aGUgUEhZIHR5cGUsIG9yIGlzIGl0IG1vcmUgcm9idXN0P1xuKiAgICoqRXJyb3IgSGFuZGxpbmc6KiogV2hhdCBoYXBwZW5zIGlmIHRoZSBwcm9iZSBmYWlscz8gQXJlIHRoZXJlIHJldHJpZXM/IEFyZSB0aGVyZSBmYWxsYmFjayBtZWNoYW5pc21zLCBvciBkb2VzIGl0IHNpbXBseSByZXR1cm4gYW4gZXJyb3I/IFRoZSBlcnJvciBoYW5kbGluZyBpcyBrZXksIGVzcGVjaWFsbHkgaW4gY29tcGxleCBlbnZpcm9ubWVudHMgd2hlcmUgUEhZcyBjYW4gYmUgdW5yZWxpYWJsZSBvciByZXF1aXJlIHNwZWNpZmljIGNsb2NraW5nLlxuKiAgICoqQ2xvY2tpbmc6KiogSXMgdGhlIGNsb2NraW5nIGNvbmZpZ3VyYXRpb24gaGFuZGxlZCBoZXJlPyBPciBpcyB0aGF0IGRlbGVnYXRlZCBlbHNld2hlcmU/IFVuZGVyc3RhbmRpbmcgdGhlIGNsb2NraW5nIHJlbGF0aW9uc2hpcHMgaXMgKmNydWNpYWwqIGZvciBzdGFibGUgb3BlcmF0aW9uLiBJbXByb3BlciBjbG9jayBjb25maWd1cmF0aW9uIGlzIGEgY29tbW9uIHJvb3QgY2F1c2UuXG4qICAgKipSZWdpc3RlciBDb25maWd1cmF0aW9uOioqIFdoYXQgcmVnaXN0ZXJzIGFyZSBiZWluZyByZWFkIGFuZCB3cml0dGVuIHRvIGR1cmluZyB0aGUgcHJvYmU/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbnRlbnQgb2YgZWFjaCByZWdpc3RlciBhY2Nlc3Mg4oCTIHdoYXQgYXJlIHdlIHRyeWluZyB0byBhY2hpZXZlP1xuKiAgICoqRGVwZW5kZW5jaWVzOioqIERvZXMgdGhpcyByb3V0aW5lIGhhdmUgYW55IGRlcGVuZGVuY2llcyBvbiBvdGhlciBmdW5jdGlvbnMgb3IgZGF0YSBzdHJ1Y3R1cmVzPyBBcmUgdGhlcmUgYW55IGdsb2JhbCB2YXJpYWJsZXMgdGhhdCBpdCByZWxpZXMgb24sIG9yIGRvZXMgaXQgY2FsbCBvdGhlciBmdW5jdGlvbnMgdGhhdCBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgYXMgd2VsbD9cbiogICAqKkhhcmR3YXJlIEFic3RyYWN0aW9uOioqIEhvdyBhYnN0cmFjdGVkIGlzIHRoZSBoYXJkd2FyZT8gSXMgaXQgdXNpbmcgYSBnZW5lcmljIE1JSS9HTUlJIGRyaXZlciwgb3IgYXJlIHRoZXJlIGRldmljZS1zcGVjaWZpYyByZWdpc3RlciBkZWZpbml0aW9ucyBhbmQgYWNjZXNzIG1ldGhvZHMgZGlyZWN0bHkgY29kZWQgaGVyZT8gVGhpcyB3aWxsIGluZm9ybSBob3cgcG9ydGFibGUgdGhlIGRlc2lnbiBpcy5cbiogICAqKlJlc291cmNlIEFsbG9jYXRpb246KiogRG9lcyBpdCBhbGxvY2F0ZSBhbnkgcmVzb3VyY2VzPyBUaGlzIG1hdHRlcnMgdG8gZW5zdXJlIGl04oCZcyBvcGVyYXRpbmcgd2l0aCBhZGVxdWF0ZSBtZW1vcnkgc3BhY2UuXG5cbkknbSBlc3NlbnRpYWxseSByZXZlcnNlLWVuZ2luZWVyaW5nIHRoZSBpbnRlbmRlZCBiZWhhdmlvciB0byBidWlsZCBhIGNvbXByZWhlbnNpdmUgbWVudGFsIG1vZGVsLiBJIHdhbnQgdG8gYnVpbGQgYSByb2NrLXNvbGlkIHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCB0aGUgZnVuY3Rpb24gKnNob3VsZCogZG8sICp3aWxsKiBkbywgYW5kICptaWdodCogZG8gdW5kZXIgdmFyaW91cyBjb25kaXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTA4OSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDg6MzM6NTEuMjUxMzM3ODM3WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4MTc2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDQ1MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNDQ1MDpcXHRcXHRcXHRcXHRcXHQgICAgIE1ESU9fQU5fMTBHQlRfQ1RSTF9BRFYyXzVHLFxcbjQ0NTE6XFx0XFx0XFx0XFx0XFx0ICAgICBwaHlfY3RybCk7XFxuNDQ1MjpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG40NDUzOlxcdFxcdFxcdHJldHVybiByZXQ7XFxuNDQ1NDpcXHRcXG40NDU1OlxcdFxcdHJldHVybiBnZW5waHlfY29uZmlnX2FuZWcocGh5ZGV2KTtcXG40NDU2OlxcdH1cXG40NDU3OlxcdFxcbjQ0NTg6XFx0LyoqXFxuNDQ1OTpcXHQgKiB5dDg4MjRfcGh5X3BhY2thZ2VfcHJvYmVfb25jZSgpICAtIGluaXQgcGh5IHBhY2tldCBmb3IgcGh5ODgyNC5cXG40NDYwOlxcdCAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbjQ0NjE6XFx0ICpcXG40NDYyOlxcdCAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxcbjQ0NjM6XFx0ICovXFxuNDQ2NDpcXHRzdGF0aWMgaW50IHl0ODgyNF9waHlfcGFja2FnZV9wcm9iZV9vbmNlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuNDQ2NTpcXHR7XFxuNDQ2NjpcXHRcXHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcXG40NDY3OlxcdFxcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBwaHlfcGFja2FnZV9nZXRfbm9kZShwaHlkZXYpO1xcbjQ0Njg6XFx0XFx0Y29uc3QgY2hhciAqaW50ZXJmYWNlX21vZGVfbmFtZTtcXG40NDY5OlxcdFxcbjQ0NzA6XFx0XFx0cHJpdi1cXHUwMDNlaW50ZXJmYWNlX21vZGUgPSBQSFlfSU5URVJGQUNFX01PREVfTkE7XFxuNDQ3MTpcXHRcXHRwcml2LVxcdTAwM2VvZmZzZXQgPSBJTlRFUk5BTF9QSFk4ODI0X1RPUF9FWFRFTkRfT0ZGU0VUO1xcbjQ0NzI6XFx0XFx0aWYgKCFvZl9wcm9wZXJ0eV9yZWFkX3N0cmluZyhucCwgXFxcIm1vdG9yY29tbSxpbnRlcmZhY2UtbW9kZVxcXCIsXFxuNDQ3MzpcXHRcXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZpbnRlcmZhY2VfbW9kZV9uYW1lKSkge1xcbjQ0NzQ6XFx0XFx0XFx0aWYgKCFzdHJjYXNlY21wKGludGVyZmFjZV9tb2RlX25hbWUsXFxuNDQ3NTpcXHRcXHRcXHRcXHRcXHRwaHlfbW9kZXMoUEhZX0lOVEVSRkFDRV9NT0RFX1VTWEdNSUkpKSkge1xcbjQ0NzY6XFx0XFx0XFx0XFx0cHJpdi1cXHUwMDNlaW50ZXJmYWNlX21vZGUgPSBQSFlfSU5URVJGQUNFX01PREVfVVNYR01JSTtcXG40NDc3OlxcdFxcdFxcdFxcdHByaXYtXFx1MDAzZW9mZnNldCA9IEVYVEVSTkFMX1BIWTg4MjRfVE9QX0VYVEVORF9PRkZTRVQ7XFxuNDQ3ODpcXHRcXHRcXHR9IGVsc2UgaWYgKCFzdHJjYXNlY21wXFxuNDQ3OTpcXHRcXHRcXHRcXHRcXHQoaW50ZXJmYWNlX21vZGVfbmFtZSxcXG40NDgwOlxcdFxcdFxcdFxcdFxcdCBwaHlfbW9kZXMoUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMKSkpIHtcXG40NDgxOlxcdFxcdFxcdFxcdHByaXYtXFx1MDAzZWludGVyZmFjZV9tb2RlID0gUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMO1xcbjQ0ODI6XFx0XFx0XFx0XFx0cHJpdi1cXHUwMDNlb2Zmc2V0ID0gSU5URVJOQUxfUEhZODgyNF9UT1BfRVhURU5EX09GRlNFVDtcXG40NDgzOlxcdFxcdFxcdH0gZWxzZSB7XFxuNDQ4NDpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG40NDg1OlxcdFxcdFxcdH1cXG40NDg2OlxcdFxcdH1cXG40NDg3OlxcdFxcdHJldHVybiAwO1xcbjQ0ODg6XFx0fVxcbjQ0ODk6XFx0XFxuNDQ5MDpcXHQvKipcXG40NDkxOlxcdCAqIHl0ODgyNF9wcm9iZSgpIC0gcGh5ODgyNCBwcm9iZS5cXG40NDkyOlxcdCAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbjQ0OTM6XFx0ICpcXG40NDk0OlxcdCAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxcbjQ0OTU6XFx0ICovXFxuNDQ5NjpcXHRzdGF0aWMgaW50IHl0ODgyNF9wcm9iZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbjQ0OTc6XFx0e1xcbjQ0OTg6XFx0XFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNnBoeWRldi1cXHUwMDNlbWRpby5kZXY7XFxuNDQ5OTpcXHRcXHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpzaGFyZWRfcHJpdjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDg6MzM6NTEuMjUxNjQ4OTk3WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2NzIzMDgzODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBEcml2ZXIgUHJvYmUgTG9naWMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGRyaXZlcidzIHByb2JlIGZ1bmN0aW9uLiBJdCBzZWVtcyBsaWtlIHRoZSBjb3JlIGxvZ2ljIHJldm9sdmVzIGFyb3VuZCByZWFkaW5nIGEgc3RyaW5nIHByb3BlcnR5IGZyb20gdGhlIGRldmljZSB0cmVlIHVzaW5nIGBvZl9wcm9wZXJ0eV9yZWFkX3N0cmluZ2AuIFRoZSBrZXkgaXMgdGhhdCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgYC1FSU5WQUxgIHdoZW4gdGhlIHByb3BlcnR5IGlzbid0IHByZXNlbnQuIEFuZCB0aGUgY29kZSBpcyB1c2luZyB0aGUgaW52ZXJzZSBsb2dpYzogYCFvZl9wcm9wZXJ0eV9yZWFkX3N0cmluZ2AuIFNvLCB3aGVuIHRoZSBwcm9wZXJ0eSBpcyAqbWlzc2luZyosIHRoZSBmdW5jdGlvbiAqcmV0dXJucyogYC1FSU5WQUxgLCBtYWtpbmcgdGhlICpyZXN1bHQgb2YgdGhlIGV4cHJlc3Npb24gZmFsc2UqISBUaGVuLCB0aGUgY29kZSBpbW1lZGlhdGVseSByZXR1cm5zIDAsIGluZGljYXRpbmcgYSBzdWNjZXNzZnVsIHByb2JlLlxuXG5UaGlzIGFsc28gYXBwbGllcyB3aGVuIHRoZSBub2RlIHBvaW50ZXIsIGBucGAsIGlzIE5VTEwuIGBvZl9wcm9wZXJ0eV9yZWFkX3N0cmluZ2Agc3RpbGwgcmV0dXJucyBgLUVJTlZBTGAuIFRoZSBjb25kaXRpb25hbCBzdGF0ZW1lbnQgaXMgdGhlbiBmYWxzZS4gVGhlIHByb2JlIHdpbGwgYXBwZWFyIHN1Y2Nlc3NmdWwgYXMgd2VsbC4gXG5cblRoZSBpbnRlcmVzdGluZyBwYXJ0IGlzIGhvdyB0aGlzIGFic2VuY2UgaXMgaGFuZGxlZC4gSXQgc2VlbXMgdGhhdCBpZiB0aGUgc3RyaW5nIHByb3BlcnR5IGlzIG1pc3NpbmcsIHRoZSBjb2RlIGRlZmF1bHRzIGBwcml2LVx1MDAzZWludGVyZmFjZV9tb2RlYCB0byBgUEhZX0lOVEVSRkFDRV9NT0RFX05BYCBhbmQgc2V0cyBgcHJpdi1cdTAwM2VvZmZzZXRgIHRvIGBJTlRFUk5BTF9QSFk4ODI0X1RPUF9FWFRFTkRfT0ZGU0VUYC4gVGhpcyBwcm9iYWJseSBtZWFucyB0aGUgZHJpdmVyIGlzIHNldCB1cCB0byB1c2UgZGVmYXVsdCBjb25maWd1cmF0aW9uIHZhbHVlcy4gVWx0aW1hdGVseSwgYHl0ODgyNF9jb25maWdfaW5pdGAgd2lsbCBzdGlsbCBiZSBjYWxsZWQuIEknbGwgbmVlZCB0byBkaWcgaW50byB0aGF0IGZ1bmN0aW9uIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gYmVoYXZlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDI0OTcsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwODozMzo1NS45MjM5NjE2ODFaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzc3NDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMTMwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMTMwOlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMTEzMTpcXHRcXG4xMTMyOlxcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAwZjgsIDB4YjNmZik7XFxuMTEzMzpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4xMTM0OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMTEzNTpcXHRcXG4xMTM2OlxcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAwNTksIDB4NDA0MCk7XFxuMTEzNzpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4xMTM4OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMTEzOTpcXHRcXG4xMTQwOlxcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzMmMsIDB4NTA5NCk7XFxuMTE0MTpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4xMTQyOlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMTE0MzpcXHRcXG4xMTQ0OlxcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzMmQsIDB4ZDA5NCk7XFxuMTE0NTpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4xMTQ2OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMTE0NzpcXHRcXG4xMTQ4OlxcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzMmUsIDB4NTMwOCk7XFxuMTE0OTpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4xMTUwOlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMTE1MTpcXHRcXG4xMTUyOlxcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzMjIsIDB4NjQ0MCk7XFxuMTE1MzpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4xMTU0OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMTE1NTpcXHRcXG4xMTU2OlxcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0ZDMsIDB4NTIyMCk7XFxuMTE1NzpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4xMTU4OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMTE1OTpcXHRcXG4xMTYwOlxcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0ZDIsIDB4NTIyMCk7XFxuMTE2MTpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4xMTYyOlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMTE2MzpcXHRcXG4xMTY0OlxcdFxcdC8qIG9wdGltaXplZCBFTUMgQ1MgKi9cXG4xMTY1OlxcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAwYzgsIDB4ZmZmZik7XFxuMTE2NjpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4xMTY3OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMTE2ODpcXHRcXG4xMTY5OlxcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAwYmUsIDB4NjQwNik7XFxuMTE3MDpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4xMTcxOlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMTE3MjpcXHRcXG4xMTczOlxcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzN2EsIDB4NDBmZik7XFxuMTE3NDpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4xMTc1OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMTE3NjpcXHRcXG4xMTc3OlxcdFxcdC8qIG9wdGltaXplZCBFTUMgUkUgKi9cXG4xMTc4OlxcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0ODIsIDB4ZmZmZik7XFxuMTE3OTpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDg6MzM6NTUuOTI0MzQ2MjExWiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxODIyMTA0NTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgQ29uZmlndXJhdGlvbiBJbml0aWFsaXphdGlvbioqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhpcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gdGhlIGB5dDg4MjRfY29uZmlnX2luaXRgIGZ1bmN0aW9uLiBJdCdzIHRoZSBzdGFydGluZyBwb2ludCwgdGhlIGZvdW5kYXRpb24sIHNvIHRvIHNwZWFrLiBVbmRlcnN0YW5kaW5nIGl0cyBiZWhhdmlvciBpcyBjcml0aWNhbCBiZWZvcmUgSSBtb3ZlIGFueSBmdXJ0aGVyLiBXaGF0J3MgaXQgZG9pbmc/IElzIGl0IGhhbmRsaW5nIHRoZSBiYXNlIHJlZ2lzdGVyIHNldHVwPyBEb2VzIGl0IGNhbGwgYW55IHN1cHBvcnRpbmcgZnVuY3Rpb25zLCBhbmQgaWYgc28sIHdoYXQgYXJlIHRoZXkgZG9pbmcgYmVoaW5kIHRoZSBzY2VuZXM/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyBwb3RlbnRpYWwgaXNzdWVzLCBsaWtlIG1pc3NlZCBib3VuZGFyeSBjaGVja3Mgb3IgaW1wcm9wZXJseSBpbml0aWFsaXplZCBkYXRhIHN0cnVjdHVyZXMsIHJpZ2h0IG9mZiB0aGUgYmF0PyBUaGlzIGlzIHdoZXJlIGV2ZXJ5dGhpbmcgZ2V0cyBzZXQgdXA7IGlmIHRoZXJlJ3MgYSBwcm9ibGVtIGhlcmUsIGl0J2xsIGNhc2NhZGUgYW5kIGNhdXNlIHNpZ25pZmljYW50IGRvd25zdHJlYW0gcHJvYmxlbXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzODQ3LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwODozMzo1OS4xMDY1NTk5NTVaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzMwMjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNDEwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNDEwOlxcdFxcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4xNDExOlxcdFxcbjE0MTI6XFx0XFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGFmLCAweDQ1ZTcpO1xcbjE0MTM6XFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuMTQxNDpcXHRcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuMTQxNTpcXHRcXG4xNDE2OlxcdFxcdFxcdC8qIHJlc3RhcnQgY2FsaWJyYXRpb24gKi9cXG4xNDE3OlxcdFxcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDAwMywgMHg1NjAzKTtcXG4xNDE4OlxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbjE0MTk6XFx0XFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbjE0MjA6XFx0XFxuMTQyMTpcXHRcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OTIsIDB4N2ZmZik7XFxuMTQyMjpcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4xNDIzOlxcdFxcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4xNDI0OlxcdFxcbjE0MjU6XFx0XFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDkyLCAweDdmN2YpO1xcbjE0MjY6XFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuMTQyNzpcXHRcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuMTQyODpcXHRcXG4xNDI5OlxcdFxcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MjAwMCwgMHgwMDQwKTtcXG4xNDMwOlxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbjE0MzE6XFx0XFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbjE0MzI6XFx0XFxuMTQzMzpcXHRcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDIwMDAsIDB4MDAwMCk7XFxuMTQzNDpcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4xNDM1OlxcdFxcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4xNDM2OlxcdFxcdH1cXG4xNDM3OlxcdFxcbjE0Mzg6XFx0XFx0LyogVFggcHJlYW1ibGUgcGFkZGVkIHRvIDg7IFJYIElQRyBhbHdheXMgXFx1MDAzZSA4ICovXFxuMTQzOTpcXHRcXHRyZXQgPSBfX3BoeV9yZWFkKHBoeWRldiwgTUlJX1JFU1YxKTtcXG4xNDQwOlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbjE0NDE6XFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbjE0NDI6XFx0XFx0cmV0IFxcdTAwMjY9IH5ZVDg4MjRfU0RTX0NGR19NSU5fUFJFX01BU0s7XFxuMTQ0MzpcXHRcXHRyZXQgfD0gWVQ4ODI0X1NEU19UWF9QUkVfUEFERElORztcXG4xNDQ0OlxcdFxcdHJldCB8PSBZVDg4MjRfU0RTX0VOX0ZJTExfUFJFO1xcbjE0NDU6XFx0XFx0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBNSUlfUkVTVjEsIHJldCk7XFxuMTQ0NjpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4xNDQ3OlxcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4xNDQ4OlxcdFxcbjE0NDk6XFx0XFx0ZGF0YSA9IF9fcGh5X3JlYWQocGh5ZGV2LCBNSUlfQk1DUik7XFxuMTQ1MDpcXHRcXHRpZiAoZGF0YSBcXHUwMDNjIDApXFxuMTQ1MTpcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuMTQ1MjpcXHRcXHRkYXRhIHw9IEJNQ1JfUkVTRVQ7XFxuMTQ1MzpcXHRcXHRkYXRhIHw9IEJNQ1JfQU5FTkFCTEU7XFxuMTQ1NDpcXHRcXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIE1JSV9CTUNSLCBkYXRhKTtcXG4xNDU1OlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbjE0NTY6XFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbjE0NTc6XFx0XFxuMTQ1ODpcXHRlcnJfcmVzdG9yZV9wYWdlOlxcbjE0NTk6XFx0XFx0cmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRfcGFnZSwgcmV0KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDg6MzM6NTkuMTA2ODkyMjg1WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4OTA3MDY3MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipOYXZpZ2F0aW5nIHRoZSBDb2RlYmFzZSoqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEkgbmVlZCB0byBnZXQgbXkgYmVhcmluZ3MgaGVyZS4gSSdtIHdvcmtpbmcgb24gc29tZXRoaW5nLCBhbmQgdGhlIGtleSBmdW5jdGlvbiBJJ20gbG9va2luZyBmb3IgaXMgYHl0ODgyNF9jb25maWdfaW5pdGAuIEl0J3MgY3J1Y2lhbCwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gZXhhY3RseSB3aGVyZSBpdCdzIGRlZmluZWQgYW5kIGhvdyBpdCdzIGJlaW5nIGNhbGxlZC4gSSdtIGdvaW5nIHRvIGhhdmUgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlYmFzZSBhbmQgcXVpY2tseSBsb2NhdGUgdGhhdCBzcGVjaWZpYyBmdW5jdGlvbi4gVGhpcyBpbml0aWFsaXphdGlvbiBpcyBsaWtlbHkgdGhlIGJhY2tib25lIGZvciB3aGF0ZXZlciBJJ20gdHJvdWJsZXNob290aW5nLCBkZWJ1Z2dpbmcsIG9yIGV4dGVuZGluZyByaWdodCBub3cuIExldCdzIHNlZSBpZiBJIGNhbiBmaW5kIGl0IHF1aWNrbHkuIFRpbWUgdG8gbmF2aWdhdGUgdGhlIGNvZGUhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0OTE4LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwODozNDowMS45OTc2MDI4MTlaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMDYxOTc1MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ5dDg4MjRfY29uZmlnX2luaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYz0xNDY5PXN0YXRpYyBpbnQgeXQ4ODI0X2ludGVybmFsX2NvbmZpZ19pbml0X3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMtMTY4NS0vKipcXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmM6MTY4NjogKiB5dDg4MjRfY29uZmlnX2luaXQoKSAtIHBoeSBpbml0aWFsaXphdGlvaW5cXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMtMTY4Ny0gKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYy0xNjkwLSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYzoxNjkxOnN0YXRpYyBpbnQgeXQ4ODI0X2NvbmZpZ19pbml0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLTE2OTIte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jPTQ1MjI9c3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIG1vdG9yY29tbV9waHlfZHJ2c1tdID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLTQ2MTYtXFx0XFx0LmFuZWdfZG9uZVxcdFxcdD0geXQ4ODI0X2FuZWdfZG9uZSxcXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmM6NDYxNzpcXHRcXHQuY29uZmlnX2luaXRcXHRcXHQ9IHl0ODgyNF9jb25maWdfaW5pdCxcXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMtNDYxOC1cXHRcXHQucmVhZF9zdGF0dXNcXHRcXHQ9IHl0ODgyNF9yZWFkX3N0YXR1cyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDg6MzQ6MDIuMDk4MjMyOTgyWiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1MDQyMDcyODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUgd2UgZ28uLi5cblxuKipJbml0aWFsIEFzc2Vzc21lbnQ6IERpdmluZyBpbnRvIGB5dDg4MjRfY29uZmlnX2luaXRgKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGVhZCBpbiB0aGlzIGNvZGUuIExldCdzIHNlZSwgdGhlIGZpbGUgbmFtZSBhbHJlYWR5IHN1Z2dlc3RzIHdlJ3JlIGRlYWxpbmcgd2l0aCBjb25maWd1cmF0aW9uIGluaXRpYWxpemF0aW9uLCBzcGVjaWZpY2FsbHkgZm9yIHNvbWV0aGluZyByZWxhdGVkIHRvIGB5dDg4MjRgLiBUaGF0IGxpa2VseSBwb2ludHMgdG8gYSBwYXJ0aWN1bGFyIGhhcmR3YXJlIGNvbXBvbmVudCBvciBkcml2ZXIsIHBvc3NpYmx5IHZpZGVvIG9yIG5ldHdvcmstcmVsYXRlZC4gTXkgbWluZCBpbW1lZGlhdGVseSBzdGFydHMgcnVubmluZyB0aHJvdWdoIHRoZSB0eXBpY2FsIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlcyBJJ3ZlIHdvcmtlZCB3aXRoIGJlZm9yZS4gSSdtIHRoaW5raW5nIGFib3V0IHRoZSBvcmRlciBvZiBvcGVyYXRpb25zOiByZWdpc3RlciBzZXR1cCwgbWVtb3J5IGFsbG9jYXRpb24gKGlmIHJlbGV2YW50KSwgcGVyaGFwcyBzb21lIGRldmljZSBkZXRlY3Rpb24gYW5kIHZhbGlkYXRpb24sIGFuZCBkZWZpbml0ZWx5IHRoZSBwYXJzaW5nIGFuZCBsb2FkaW5nIG9mIHNvbWUga2luZCBvZiBjb25maWd1cmF0aW9uIGRhdGEuIEknbSBleHBlY3RpbmcgdG8gZmluZCBhIHNlcmllcyBvZiBmdW5jdGlvbiBjYWxscywgcG90ZW50aWFsbHkgbmVzdGVkLCB0aGF0IGhhbmRsZSB0aGVzZSB0YXNrcy4gSSdsbCBiZSBrZWVwaW5nIGFuIGV5ZSBvdXQgZm9yIGFueSBlcnJvciBoYW5kbGluZywgcGFydGljdWxhcmx5IGFyb3VuZCByZXNvdXJjZSBhbGxvY2F0aW9uIGFuZCBjb25maWcgZmlsZSBwYXJzaW5nLiBUaGF0J3MgdXN1YWxseSB3aGVyZSB0aGUgc3VidGxlIGJ1Z3MgbGlrZSB0byBoaWRlISBMZXQncyBnZXQgcmVhZGluZyBhbmQgc2VlIHdoYXQgd2UndmUgZ290LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NTQ3MiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA4OjM0OjA1LjYwMjQ0MzYyNVoiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzM3OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE2ODUsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE2ODU6XFx0LyoqXFxuMTY4NjpcXHQgKiB5dDg4MjRfY29uZmlnX2luaXQoKSAtIHBoeSBpbml0aWFsaXphdGlvaW5cXG4xNjg3OlxcdCAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbjE2ODg6XFx0ICpcXG4xNjg5OlxcdCAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxcbjE2OTA6XFx0ICovXFxuMTY5MTpcXHRzdGF0aWMgaW50IHl0ODgyNF9jb25maWdfaW5pdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbjE2OTI6XFx0e1xcbjE2OTM6XFx0XFx0aW50IHJldDtcXG4xNjk0OlxcdFxcbjE2OTU6XFx0XFx0aWYgKHBoeWRldi1cXHUwMDNlaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTCkge1xcbjE2OTY6XFx0XFx0XFx0cmV0ID0geXQ4ODI0X2ludGVybmFsX2NvbmZpZ19pbml0X3BhZ2VkKHBoeWRldik7XFxuMTY5NzpcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4xNjk4OlxcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuMTY5OTpcXHRcXHR9IGVsc2Uge1xcbjE3MDA6XFx0XFx0XFx0cmV0ID0geXQ4ODI0X2V4dGVybl9jb25maWdfdXRwX2luaXRfcGFnZWQocGh5ZGV2KTtcXG4xNzAxOlxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbjE3MDI6XFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4xNzAzOlxcdFxcdFxcdHJldCA9IHl0ODgyNF9leHRlcm5fY29uZmlnX3Nkc19pbml0X3BhZ2VkKHBoeWRldik7XFxuMTcwNDpcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4xNzA1OlxcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuMTcwNjpcXHRcXHR9XFxuMTcwNzpcXHRcXHRyZXQgPSB5dDg4MjRfc29mdF9yZXNldChwaHlkZXYpO1xcbjE3MDg6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuMTcwOTpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjE3MTA6XFx0XFxuMTcxMTpcXHRcXHRwaHlkZXZfZGJnKHBoeWRldiwgXFxcIiVzIGRvbmUsIHBoeSBhZGRyOiAlZFxcXFxuXFxcIixcXG4xNzEyOlxcdFxcdFxcdCAgIF9fZnVuY19fLCBwaHlkZXYtXFx1MDAzZW1kaW8uYWRkcik7XFxuMTcxMzpcXHRcXG4xNzE0OlxcdFxcdHJldHVybiAwO1xcbjE3MTU6XFx0fVxcbjE3MTY6XFx0XFxuMTcxNzpcXHRzdGF0aWMgaW50IHl0ODUzMV9zZXRfd29sKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXFxuMTcxODpcXHRcXHRcXHRcXHQgIHN0cnVjdCBldGh0b29sX3dvbGluZm8gKndvbClcXG4xNzE5OlxcdHtcXG4xNzIwOlxcdFxcdGNvbnN0IHUxNiBtYWNfYWRkcl9yZWdbXSA9IHtcXG4xNzIxOlxcdFxcdFxcdFlUUEhZX1dPTF9NQUNBRERSMl9SRUcsXFxuMTcyMjpcXHRcXHRcXHRZVFBIWV9XT0xfTUFDQUREUjFfUkVHLFxcbjE3MjM6XFx0XFx0XFx0WVRQSFlfV09MX01BQ0FERFIwX1JFRyxcXG4xNzI0OlxcdFxcdH07XFxuMTcyNTpcXHRcXHRjb25zdCB1OCAqbWFjX2FkZHI7XFxuMTcyNjpcXHRcXHR1MTYgbWFzaywgdmFsO1xcbjE3Mjc6XFx0XFx0aW50IHJldDtcXG4xNzI4OlxcdFxcdHU4IGk7XFxuMTcyOTpcXHRcXG4xNzMwOlxcdFxcdGlmICh3b2wtXFx1MDAzZXdvbG9wdHMgXFx1MDAyNiBXQUtFX01BR0lDKSB7XFxuMTczMTpcXHRcXHRcXHRtYWNfYWRkciA9IHBoeWRldi1cXHUwMDNlYXR0YWNoZWRfZGV2LVxcdTAwM2VkZXZfYWRkcjtcXG4xNzMyOlxcdFxcbjE3MzM6XFx0XFx0XFx0LyogU3RvcmUgdGhlIGRldmljZSBhZGRyZXNzIGZvciB0aGUgbWFnaWMgcGFja2V0ICovXFxuMTczNDpcXHRcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgMzsgaSsrKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA4OjM0OjA1LjYwMjcyMDQ1NVoiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NTY0NzUyMzAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgWVQ4ODI0IFBIWSBEcml2ZXIgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJJ20gc2VlaW5nLCBgeXQ4ODI0X2NvbmZpZ19pbml0YCBpcyB0aGUga2V5IGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGhlcmUuIEl0IGRlbGVnYXRlcyB0byBlaXRoZXIgYHl0ODgyNF9pbnRlcm5hbF9jb25maWdfaW5pdF9wYWdlZGAgb3IgYHl0ODgyNF9leHRlcm5fY29uZmlnX3V0cF9pbml0X3BhZ2VkYCBhbmQgYHl0ODgyNF9leHRlcm5fY29uZmlnX3Nkc19pbml0X3BhZ2VkYCwgYW5kIHRoZW4gaXQgY29uY2x1ZGVzIHdpdGggYSBgeXQ4ODI0X3NvZnRfcmVzZXRgLiBTZWVtcyBsaWtlIGEgc3RhbmRhcmQgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2Ugd2l0aCBzcGVjaWZpYyBjb25maWd1cmF0aW9ucywgdGhlbiBhIHJlc2V0LiBBbGwgb2YgdGhlc2UgZnVuY3Rpb25zIGFyZSBkZWZpbml0ZWx5IHJlYWNoYWJsZSwgc28gdGhhdCdzIGdvb2QuXG5cblRoaXMgaXMgYSByZWFsIGZ1bmN0aW9uYWwgYWRkaXRpb24uIFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBzdXBwb3J0IGZvciBhIG5ldyBQSFkgZHJpdmVyLCB0aGUgYFlUODgyNGAsIHdpdGhpbiBgbW90b3Jjb21tLmNgLiBUaGF0J3MgYSBzb2xpZCwgdGFuZ2libGUgY2hhbmdlLiBBbmQgdGhlIE1ESU8gYnVzIGVtdWxhdGlvbiBhc3BlY3Qg4oCTIFVTQiBvciBJMkMg4oCTIGlzIGltcG9ydGFudCBiZWNhdXNlIGl0IG1lYW5zIHRoaXMgaXNuJ3QganVzdCBhIHRoZW9yZXRpY2FsIGRyaXZlcjsgaXQgaGFzIHByYWN0aWNhbCBhcHBsaWNhdGlvbi4gSXQgc3VnZ2VzdHMgd2UgY2FuIGludGVyYWN0IHdpdGggdGhpcyBQSFkgdGhyb3VnaCBhIHZhcmlldHkgb2YgaW50ZXJmYWNlcy5cblxuTm93LCBsZXQncyB6ZXJvIGluIG9uIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkuIEkgbmVlZCB0byBjbG9zZWx5IGV4YW1pbmUgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6IGB5dDg4MjRfcHJvYmVgLCBgeXQ4ODI0X2NvbmZpZ19pbml0YCwgYHl0ODgyNF9jb25maWdfYW5lZ2AsIGB5dDg4MjRfYW5lZ19kb25lYCwgYHl0ODgyNF9yZWFkX3N0YXR1c2AsIGB5dDg4MjRfc29mdF9yZXNldGAsIGB5dDg4MjRfc3VzcGVuZGAsIGFuZCBgeXQ4ODI0X3Jlc3VtZWAuIEknbGwgd2FudCB0byB0cmFjZSB0aGUgY29udHJvbCBmbG93LCB1bmRlcnN0YW5kIHRoZWlyIGludGVyYWN0aW9ucywgYW5kIGNoZWNrIHRoZSBNRElPIHJlZ2lzdGVyIGFjY2VzcyBwYXR0ZXJuLlxuXG5CZWZvcmUgSSBnbyBhbnkgZnVydGhlciwgSSdsbCBjaGVjayBpZiB0aGUgYE1PVE9SQ09NTV9QSFlgIGNvbmZpZ3VyYXRpb24gaXMgbmVlZGVkIHRvIGVuYWJsZSB0aGlzIGRyaXZlci4gSSdsbCBtYWtlIHN1cmUgaXQncyBlbmFibGVkIG9yIG5vdCBhbmQgdGhhdCB0aGVyZSBhcmUgbm8gY29uZGl0aW9uYWwgY29tcGlsYXRpb24gcHJvYmxlbXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ2NTAyLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjY3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDg6MzQ6MTEuMTY3NDc1Mzc4WiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODM2NDQxNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJNT1RPUkNPTU1fUEhZXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BoeS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BoeS9LY29uZmlnPTM0ND1jb25maWcgTUlDUk9TRU1JX1BIWVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMzUyLVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnOjM1Mzpjb25maWcgTU9UT1JDT01NX1BIWVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTM1NC1cXHR0cmlzdGF0ZSBcXFwiTW90b3Jjb21tIFBIWXNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA4OjM0OjExLjIxNTg0NzkxNVoiLCJTZXEiOjQ1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjA1MzIxNzAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEN1cnJlbnQgQXNzZXNzbWVudCoqXG5cbk9rYXksIHllcywgSSd2ZSBnb3QgaXQuIFdlIGRlZmluaXRlbHkgbmVlZCBgTU9UT1JDT01NX1BIWWAgaW4gdGhpcyBjb25maWd1cmF0aW9uLiBXYWl0IGEgc2Vjb25kLi4uIEkganVzdCByZW1lbWJlcmVkIHRoYXQgYE1PVE9SQ09NTV9QSFlgIGlzLCBpbiBmYWN0LCBhIHRyaXN0YXRlLiBHaXZlbiB0aGF0LCB0aGUgY29ycmVjdCB0aGluZyB0byBkbyBoZXJlIGlzIHRvIG1ha2Ugc3VyZSBpdCdzIHJldHVybmVkIHdpdGhpbiBgRW5hYmxlQ29uZmlnc2AuIFRoYXTigJlzIHRoZSByaWdodCBhcHByb2FjaC4gTm93LCBiZWZvcmUgSSBjb21taXQgdG8gdGhhdCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVu4oCZdCBtaXNzZWQgYW55dGhpbmcuIExldCBtZSBxdWlja2x5IHNjYW4gZm9yIGFueSBvdGhlciBwb3RlbnRpYWwgZGVwZW5kZW5jaWVzIG9yIHJlbGF0ZWQgY29uZmlndXJhdGlvbiBwb2ludHMgdGhhdCBtaWdodCBiZSBhZmZlY3RlZCBieSB0aGlzIGNoYW5nZS4gR290dGEgYmUgdGhvcm91Z2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3MzEyLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDg6MzQ6MTQuNDIxMTcyNDQ4WiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk4ODEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3BoeS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM1MyxcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDM1MzpcXHRjb25maWcgTU9UT1JDT01NX1BIWVxcbiAzNTQ6XFx0XFx0dHJpc3RhdGUgXFxcIk1vdG9yY29tbSBQSFlzXFxcIlxcbiAzNTU6XFx0XFx0aGVscFxcbiAzNTY6XFx0XFx0ICBFbmFibGVzIHN1cHBvcnQgZm9yIE1vdG9yY29tbSBuZXR3b3JrIFBIWXMuXFxuIDM1NzpcXHRcXHQgIEN1cnJlbnRseSBzdXBwb3J0cyBZVDg1eHggR2lnYWJpdCBFdGhlcm5ldCBQSFlzLlxcbiAzNTg6XFx0XFxuIDM1OTpcXHRjb25maWcgTkFUSU9OQUxfUEhZXFxuIDM2MDpcXHRcXHR0cmlzdGF0ZSBcXFwiTmF0aW9uYWwgU2VtaWNvbmR1Y3RvciBQSFlzXFxcIlxcbiAzNjE6XFx0XFx0aGVscFxcbiAzNjI6XFx0XFx0ICBDdXJyZW50bHkgc3VwcG9ydHMgdGhlIERQODM4NjUgUEhZLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwODozNDoxNC40MjEyNzM3NzhaIiwiU2VxIjo0NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk4NjQzMjk4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipDb25zaWRlcmluZyBEZXBlbmRlbmNpZXMgZm9yIE1PVE9SQ09NTV9QSFkqKlxuXG5Pa2F5LCBzbyBJJ20gZm9jdXNpbmcgb24gYE1PVE9SQ09NTV9QSFlgIGhlcmUuIEl0IHNlZW1zLCBpbml0aWFsbHksIHRoYXQgaXQgbWlnaHQgYmUgc3RhbmRhbG9uZSwgbm8gaW1tZWRpYXRlIGRlcGVuZGVuY2llcyBqdW1waW5nIG91dCBhdCBtZS4gQnV0IHdhaXQsIGxldCdzIGp1c3QgbWFrZSBzdXJlIOKAkyBpc24ndCB0aGVyZSBzb21ldGhpbmfigKZgTURJT19NVlVTQmA/IE9yIGEgc2ltaWxhciBtb2R1bGUgdXNlZCBmb3IgTURJTyBidXMgZW11bGF0aW9uPyBJIGZlZWwgbGlrZSB0aGVyZSdzIHNvbWUgY29ubmVjdGlvbiB0aGVyZSwgc29tZSB3YXkgdG8gc2ltdWxhdGUgdGhlIE1ESU8gaW50ZXJmYWNlLlxuXG5SaWdodCwgdGltZSB0byBjb25zaWRlciBob3cgU3l6a2FsbGVyIGNvdWxkIGludGVyYWN0IHdpdGggaXQ7IGl0IG9mZmVycyBhIGZldyBvcHRpb25zIHRvIGludGVyZmFjZSB3aXRoIE1ESU8gYnVzZXM6IGBNRElPX0JJVEJBTkdgLCBgTURJT19HUElPYCwgYE1ESU9fSTJDYCwgYW5kIHRoYXQgYE1ESU9fTVZVU0JgIEkgd2FzIGp1c3QgbXVsbGluZyBvdmVyLiBMZXTigJlzIGRvdWJsZS1jaGVjayBob3cgYE1ESU9fTVZVU0JgIHdvcmtzOyB0aGF0J3MgdGhlIHBhdGggSSB3YW50IHRvIGludmVzdGlnYXRlIG5vdywgc2VlIGlmIGl0IGlzIHJlbGV2YW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NzY3MywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDg6MzQ6MTguNDA3NzEwMDk4WiIsIlNlcSI6NDgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjEyMTEwNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJNRElPX01WVVNCXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9tZGlvL0tjb25maWc9MTA3PWNvbmZpZyBNRElPX0kyQ1xcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnLTExNi1cXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWc6MTE3OmNvbmZpZyBNRElPX01WVVNCXFxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnLTExOC1cXHR0cmlzdGF0ZSBcXFwiTWFydmVsbCBVU0IgdG8gTURJTyBBZGFwdGVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwODozNDoxOC40NDk4MzY5NTVaIiwiU2VxIjo0OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU2MzU1OTUxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipNRElPX01WVVNCIERlcGVuZGVuY3kgQ2hlY2sqKlxuXG5Pa2F5LCBzbyB0aGUgZmlyc3QgdGhpbmcgb24gbXkgbWluZCBpcyB0byByaWdvcm91c2x5IGV4YW1pbmUgdGhlIGRlcGVuZGVuY2llcyBvZiBgTURJT19NVlVTQmAuIEl0J3MgYSBrZXkgbW9kdWxlLCBzbyBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCBldmVyeXRoaW5nIGl0IHJlbGllcyBvbi4gSSdtIHRoaW5raW5nIEknbGwgbmVlZCB0byBnbyB0aHJvdWdoIHRoZSB0eXBpY2FsIGRlcGVuZGVuY3kgYW5hbHlzaXMuIEknbGwgbmVlZCB0byBkb3VibGUgY2hlY2sgYW55IGhlYWRlcnMsIGxpYnJhcmllcywgb3Igb3RoZXIgbW9kdWxlcyB0aGF0IGBNRElPX01WVVNCYCBwdWxscyBpbi4gSSdtIGNvbnNpZGVyaW5nIHBvdGVudGlhbCB2ZXJzaW9uIGNvbmZsaWN0cywgbGlicmFyeSBjb21wYXRpYmlsaXR5LCBhbmQgdGhlIGltcGFjdCBvZiBjaGFuZ2VzIGluIHRob3NlIGRvd25zdHJlYW0gY29tcG9uZW50cyBvbiB0aGlzIGNvcmUgbW9kdWxlLiBJJ2xsIHByb2JhYmx5IHN0YXJ0IHdpdGggYSBxdWljayBjb2RlIGluc3BlY3Rpb24gdG8gZ2V0IGEgYmlyZHMtZXllIHZpZXcgYW5kIHRoZW4gZHJpbGwgZG93biBhcyBuZWVkZWQuIEnigJltIHRoaW5raW5nIHRoZXJlIG1pZ2h0IGJlIHNvbWUgc3VidGxlIGludGVyYWN0aW9ucyB3aXRoIHRoZSBVU0Igc3RhY2sgdGhhdCBJIG5lZWQgdG8gbG9vayBvdXQgZm9yLCBzbyBJJ2xsIHByaW9yaXRpemUgdGhvc2UgYXJlYXMuIEdvdHRhIGVuc3VyZSBhIHNvbGlkIGZvdW5kYXRpb24gYmVmb3JlIEkgc3RhcnQgcG9raW5nIGFyb3VuZCB3aXRoIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0ODA4NCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA4OjM0OjIyLjAxMzQwMDQ0NFoiLCJTZXEiOjUwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NzE0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9tZGlvL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTE3LFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTE3OlxcdGNvbmZpZyBNRElPX01WVVNCXFxuIDExODpcXHRcXHR0cmlzdGF0ZSBcXFwiTWFydmVsbCBVU0IgdG8gTURJTyBBZGFwdGVyXFxcIlxcbiAxMTk6XFx0XFx0ZGVwZW5kcyBvbiBVU0JcXG4gMTIwOlxcdFxcdGhlbHBcXG4gMTIxOlxcdFxcdCAgQSBVU0IgdG8gTURJTyBjb252ZXJ0ZXIgcHJlc2VudCBvbiBkZXZlbG9wbWVudCBib2FyZHMgZm9yXFxuIDEyMjpcXHRcXHQgIE1hcnZlbGwncyBMaW5rIFN0cmVldCBmYW1pbHkgb2YgRXRoZXJuZXQgc3dpdGNoZXMuXFxuIDEyMzpcXHRcXG4gMTI0OlxcdGNvbmZpZyBNRElPX01TQ0NfTUlJTVxcbiAxMjU6XFx0XFx0dHJpc3RhdGUgXFxcIk1pY3Jvc2VtaSBNSUlNIGludGVyZmFjZSBzdXBwb3J0XFxcIlxcbiAxMjY6XFx0XFx0ZGVwZW5kcyBvbiBIQVNfSU9NRU1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDg6MzQ6MjIuMDEzNDc5NzQ0WiIsIlNlcSI6NTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyODg1NDA2OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQ29uc2lkZXJpbmcgVVNCIGFuZCBNRElPIEJ1cyBFbXVsYXRpb24gZm9yIFN5emthbGxlcioqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCBob3cgdG8gaGFuZGxlIHRoZSBNRElPIGJ1cyBmb3IgdGVzdGluZywgcGFydGljdWxhcmx5IHdpdGhpbiB0aGUgU3l6a2FsbGVyIGVudmlyb25tZW50LiBUaGUgdXN1YWwgU3l6a2FsbGVyIGNvbmZpZ3MgdGVuZCB0byBoYXZlIGBVU0JgIGVuYWJsZWQsIHdoaWNoIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byBqdXN0IGFkZCBgTURJT19NVlVTQmAgdG8gdGhlIGBFbmFibGVDb25maWdzYCB0byBiZSBjb21wbGV0ZWx5IHNhZmUsIGFuZCBlbnN1cmUgdGhhdCB0aGUgTURJTyBidXMgY2FuIGFsd2F5cyBiZSBlbXVsYXRlZC4gQnV0LCBoYW5nIG9uLi4uIGRpZG4ndCBJIHNlZSBzb21ldGhpbmcgYWJvdXQgU3l6a2FsbGVyIGFsc28gdXNpbmcgYE1ESU9fSTJDYD8gQWggeWVzLCBpdCBkb2VzISBBbmQgdGhhdCBjYW4gYmUgZW11bGF0ZWQgdXNpbmcgZWl0aGVyIGBpMmMtc3R1YmAgb3IgYGkyYy1tb2NrYC4gSG1tbS4gUmlnaHQsIGJldHRlciB0byB2ZXJpZnkgdGhhdCBgTURJT19JMkNgIGNvbmZpZ3VyYXRpb24gYW5kIG1ha2Ugc3VyZSBteSBzZXR1cCBhY2NvdW50cyBmb3IgdGhhdC4gTGV0IG1lIGRvdWJsZS1jaGVjayB0aGF0IHBhcnQuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDg0OTYsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA4OjM0OjI2LjMwMjAyMjY1M1oiLCJTZXEiOjUyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODQ4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9tZGlvL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTA3LFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTA3OlxcdGNvbmZpZyBNRElPX0kyQ1xcbiAxMDg6XFx0XFx0dHJpc3RhdGVcXG4gMTA5OlxcdFxcdGRlcGVuZHMgb24gSTJDXFxuIDExMDpcXHRcXHRoZWxwXFxuIDExMTpcXHRcXHQgIFN1cHBvcnQgSTJDIGJhc2VkIFBIWXMuICBUaGlzIHByb3ZpZGVzIGEgTURJTyBidXMgYnJpZGdlZFxcbiAxMTI6XFx0XFx0ICB0byBJMkMgdG8gYWxsb3cgUEhZcyBjb25uZWN0ZWQgaW4gSTJDIG1vZGUgdG8gYmUgYWNjZXNzZWRcXG4gMTEzOlxcdFxcdCAgdXNpbmcgdGhlIGV4aXN0aW5nIGluZnJhc3RydWN0dXJlLlxcbiAxMTQ6XFx0XFxuIDExNTpcXHRcXHQgIFRoaXMgaXMgbGlicmFyeSBtb2RlLlxcbiAxMTY6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA4OjM0OjI2LjMwMjEwMjYyM1oiLCJTZXEiOjUzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjEwNzk4OTAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoLlxuXG4qKk1ESU8gSW50ZXJmYWNlIENvbmZ1c2lvbioqXG5cbkFscmlnaHQsIEkgbmVlZCB0byBjbGFyaWZ5IG15IHVuZGVyc3RhbmRpbmcgb2YgdGhpcyBNRElPIGludGVyZmFjZSBjb25maWd1cmF0aW9uLiBIYW5nIG9uLi4uIGBNRElPX0kyQ2AuIFRoYXQncyBub3QgYSBzdGFuZGFsb25lIG1vZGUsIGlzIGl0PyBSaWdodCwgaXQncyB1c2VkIGFzIGEgbGlicmFyeSEgSXQncyBpbnZva2VkIGJ5IG90aGVyIGRyaXZlcnMsIGxpa2UgdGhlIFNGUCBkcml2ZXIsIHNvIGl0IGRvZXNuJ3QgaGF2ZSBpdHMgb3duIGNvbW1hbmQgcHJvbXB0IG9yIGFueXRoaW5nIGxpa2UgdGhhdC4gVGhhdCBtYWtlcyBzZW5zZS4gT2theSwgc28gYE1ESU9fSTJDYCBpc24ndCB0aGUgb25lIEkgc2hvdWxkIGJlIGZvY3VzZWQgb24gaGVyZS5cblxuTm93LCB3aGF0IGFib3V0IGBNRElPX0JJVEJBTkdgPyBUaGF0J3MgdGhlIG1vZGUgSSAqc2hvdWxkKiBiZSBsb29raW5nIGF0IG1vcmUgY2xvc2VseSwgaXQgc2VlbXMuIExldCBtZSBjb25zaWRlciB0aGUgaW1wbGljYXRpb25zIG9mIHRoYXQgb25lIGZvciBhIG1vbWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDg5NjgsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA4OjM0OjI5LjUxMjkwNDUwNloiLCJTZXEiOjU0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODQzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9tZGlvL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgTURJTyBMYXllciBDb25maWd1cmF0aW9uXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdG1lbnUgXFxcIk1ESU8gY29udHJvbGxlciBkcml2ZXJzXFxcIlxcbiAgIDc6XFx0XFx0ZGVwZW5kcyBvbiBQSFlMSUJcXG4gICA4OlxcdFxcbiAgIDk6XFx0Y29uZmlnIEZXTk9ERV9NRElPXFxuICAxMDpcXHRcXHRkZWZfdHJpc3RhdGUgKEFDUEkgfHwgT0YpIHx8IENPTVBJTEVfVEVTVFxcbiAgMTE6XFx0XFx0aGVscFxcbiAgMTI6XFx0XFx0ICBGV05PREUgTURJTyBidXMgKEV0aGVybmV0IFBIWSkgYWNjZXNzb3JzXFxuICAxMzpcXHRcXG4gIDE0OlxcdGNvbmZpZyBPRl9NRElPXFxuICAxNTpcXHRcXHRkZWZfdHJpc3RhdGUgT0ZcXG4gIDE2OlxcdFxcdHNlbGVjdCBGSVhFRF9QSFlcXG4gIDE3OlxcdFxcdGhlbHBcXG4gIDE4OlxcdFxcdCAgT3BlbkZpcm13YXJlIE1ESU8gYnVzIChFdGhlcm5ldCBQSFkpIGFjY2Vzc29yc1xcbiAgMTk6XFx0XFxuICAyMDpcXHRjb25maWcgQUNQSV9NRElPXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA4OjM0OjI5LjUxMjk4NDE5NloiLCJTZXEiOjU1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTE2MDMzMjQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktlcm5lbCBQYXRjaCBEZWVwIERpdmUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsIFwiTGV0J3MganVzdCBpbmNsdWRlIGBNT1RPUkNPTU1fUEhZYCBhbmQgYE1ESU9fTVZVU0JgIGluIGBFbmFibGVDb25maWdzYC4gU2VlbXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaC5cIiBUaGVuIEkgcmVjb2duaXplIHRoYXQgdGhpcyBpcyBtb3JlIHRoYW4ganVzdCBhIGNvbmZpZ3VyYXRpb24gY2hhbmdlIOKAkyBpdCBpbnRyb2R1Y2VzIGZ1bmN0aW9uYWwga2VybmVsIG1vZGlmaWNhdGlvbnMuIFRoaXMgaXMgc2VyaW91cy5cblxuU3BlY2lmaWNhbGx5LCBpdCdzIGFkZGluZyBhIG5ldyBQSFkgZHJpdmVyLCBgWVQ4ODI0YC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBkcml2ZXIgdGhvcm91Z2hseS4gVGhlcmVmb3JlLCBJIG5lZWQgdG8gZm9jdXMgbXkgYXR0ZW50aW9uIG9uIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdGllczogYHl0ODgyNF9wcm9iZWAsIHRvIHVuZGVyc3RhbmQgaXRzIGluaXRpYWxpemF0aW9uOyBgeXQ4ODI0X2NvbmZpZ19pbml0YCBhbmQgYHl0ODgyNF9jb25maWdfYW5lZ2Agd2hpY2ggbWFuYWdlIGNvbmZpZ3VyYXRpb24gYW5kIGF1dG8tbmVnb3RpYXRpb247IGB5dDg4MjRfYW5lZ19kb25lYCB0byBjaGVjayB3aGVuIGF1dG8tbmVnb3RpYXRpb24gaGFzIGZpbmlzaGVkOyBgeXQ4ODI0X3JlYWRfc3RhdHVzYCB0byBkZXRlcm1pbmUgdGhlIHN0YXRlOyBhbmQgYHl0ODgyNF9zb2Z0X3Jlc2V0YCBmb3IgYnJpbmdpbmcgaXQgYmFjayBmcm9tIGEgbm9uLXJlc3BvbnNpdmUgc3RhdGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBwb3dlciBtYW5hZ2VtZW50IGlzIGhhbmRsZWQsIHNvIEkgc2hvdWxkIGxvb2sgaW50byBgeXQ4ODI0X3N1c3BlbmRgIGFuZCBgeXQ4ODI0X3Jlc3VtZWAuIE9mIGNvdXJzZSwgdGhlcmUgYXJlIGFsc28gZnVuY3Rpb25zIGZvciBpbnRlcmFjdGluZyB3aXRoIHRoZSBoYXJkd2FyZSwgbGlrZSBgeXQ4ODI0X3JlYWRfcGFnZWAgYW5kIGB5dDg4MjRfd3JpdGVfcGFnZWAuXG5cbkZpbmFsbHksIGl0IGFsc28gaW5jbHVkZXMgYGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGVgLCBhbmQgYmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIsIEkgc2hvdWxkIHZlcmlmeSB0aGF0IHRoaXMgZnVuY3Rpb24gaXNuJ3QgZGVjbGFyZWQgYXMgYHN0YXRpY2AuIEl0J3MgaW1wb3J0YW50IHRvIGtub3cgdGhhdCBpdCBpcyBhdmFpbGFibGUgdG8gdGhlIHJlc3Qgb2YgdGhlIGtlcm5lbCwgaWYgaXQgaXMgdG8gYmUgdXNlZnVsLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0OTQ0MSwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA4OjM0OjM0LjQyOTAyMTYzM1oiLCJTZXEiOjU2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ4MjA0NTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmM9MTI4ND1FWFBPUlRfU1lNQk9MX0dQTChnZW5waHlfYzQ1X2Zhc3RfcmV0cmFpbik7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jLTEyODYtLyoqXFxuZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuYzoxMjg3OiAqIGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUgLSBjb25maWd1cmUgdGVtcGxhdGUgdGVzdG1vZGUgcmVnaXN0ZXJzXFxuZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuYy0xMjg4LSAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuYy0xMjk1LSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmM6MTI5NjppbnQgZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgdGVzdF9tb2RlKVxcbmRyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmMtMTI5Ny17XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jLTEzMDAtfVxcbmRyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmM6MTMwMTpFWFBPUlRfU1lNQk9MX0dQTChnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlKTtcXG5kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jLTEzMDItXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA4OjM0OjM0LjQ3Mzg0NzdaIiwiU2VxIjo1NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTAyMDg3ODc5ODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNb3RvcmNvbW0gUEhZIERyaXZlcioqXG5cbk9rYXksIGl0IGxvb2tzIGxpa2UgdGhpcyBjb2RlIGhhcyBiZWVuIGV4cG9ydGVkLCBnb29kLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgYG1vdG9yY29tbS5jYCBmaWxlIGFuZCB1bmRlcnN0YW5kIHRoZSByZWNlbnQgYWRkaXRpb25zLiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgcmV2aWV3aW5nIHRoZSBmdW5jdGlvbnMgdGhhdCBoYXZlIGJlZW4gaW1wbGVtZW50ZWQuIEkgc2VlIGEgd2lkZSB2YXJpZXR5IGhlcmUsIGZyb20gbG93LWxldmVsIHJlZ2lzdGVyIGFjY2VzcyAoYHl0cGh5X3JlYWRfdG9wX2V4dGAsIGB5dHBoeV93cml0ZV90b3BfZXh0YCwgcGFnZSBhY2Nlc3Mgd2l0aCBsb2NrcykgdG8gbW9yZSBoaWdoLWxldmVsIFBIWSBjb250cm9sIGFuZCBjb25maWd1cmF0aW9uIChgeXQ4ODI0X2NvbmZpZ19pbml0YCwgYHl0ODgyNF9hbmVnX2RvbmVgLCBgeXQ4ODI0X3Bvd2VyX29uL2Rvd25gKS4gVGhlcmUgYXJlIGFsc28gc3BlY2lmaWMgdGVzdCBtb2RlIGZ1bmN0aW9ucywgcmVzZXQgb3BlcmF0aW9ucywgYW5kIHBvd2VyIG1hbmFnZW1lbnQgY2FsbGJhY2tzLlxuXG5Ob3csIEkgbmVlZCB0byBpZGVudGlmeSB3aGljaCBvZiB0aGVzZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5ICpyZWxldmFudCogdG8gbXkgY3VycmVudCBpbnZlc3RpZ2F0aW9uLiBNeSBmb2N1cyB3aWxsIGJlIG9uIHRoZSBub24tc3RhdGljIGZ1bmN0aW9ucywgcGFydGljdWxhcmx5IHRob3NlIHRoYXQgYXJlIGRpcmVjdGx5IGFzc29jaWF0ZWQgd2l0aCB0aGUgYHBoeV9kcml2ZXJgIHN0cnVjdCBvciBhcmUgY2FsbGVkIGV4dGVybmFsbHkuIEhvd2V2ZXIsIHdhaXQgYSBtaW51dGUsIGB5dDg4MjRfcHJvYmVgIGlzIGRlY2xhcmVkIHN0YXRpYywgYnV0IGl0J3MgYXNzaWduZWQgdG8gdGhlIGAucHJvYmVgIGZpZWxkIHdpdGhpbiBgbW90b3Jjb21tX3BoeV9kcnZzYC4gU28sIGl04oCZcyBzdGlsbCBpbXBvcnRhbnQgYW5kIEkgd2lsbCBpbmNsdWRlIGl0LlxuXG5JJ20gbWFraW5nIGEgbGlzdCBmb3IgdGhlIGBGb2N1c1N5bWJvbHNgIHNlY3Rpb24gbm93LiBJdCdsbCBpbmNsdWRlOiBgeXQ4ODI0X3Byb2JlYCwgYHl0ODgyNF9jb25maWdfaW5pdGAsIGB5dDg4MjRfY29uZmlnX2FuZWdgLCBgeXQ4ODI0X2FuZWdfZG9uZWAsIGB5dDg4MjRfcmVhZF9zdGF0dXNgLCBgeXQ4ODI0X3NvZnRfcmVzZXRgLCBgeXQ4ODI0X3N1c3BlbmRgLCBgeXQ4ODI0X3Jlc3VtZWAsIGB5dDg4MjRfcmVhZF9wYWdlYCwgYW5kIGB5dDg4MjRfd3JpdGVfcGFnZWAuIEknbSBhbHNvIGdvaW5nIHRvIGFkZCBgZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZWAsIGFzIHRoaXMgZnVuY3Rpb24gc2VlbXMgaW1wb3J0YW50IHRvIGRlYnVnZ2luZy5cblxuRmluYWxseSwgSSBuZWVkIHRvIGVuc3VyZSB0aGUgY29ycmVjdCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHNldC4gTGV0IG1lIGp1c3QgY29uZmlybSB0aGF0IGBNT1RPUkNPTU1fUEhZYCBpcyBpbmRlZWQgdGhlIG1haW4gZHJpdmVyIGNvbmZpZ3VyYXRpb24gZm9yIGBkcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmNgLiBZdXAsIHRoYXQgbG9va3MgY29ycmVjdC4gSSBzaG91bGQgYWxzbyBpbmNsdWRlIGBNRElPX01WVVNCYCB0byBlbnN1cmUgdGhhdCBJIGhhdmUgTURJTyBidXMgZW11bGF0aW9uIGF2YWlsYWJsZS5cblxuT2theSwgd2l0aCB0aGUgc3ltYm9sIGxpc3QgYW5kIGNvbmZpZ3VyYXRpb24gc29ydGVkLCBpdCdzIHRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLiBJIGNhbiBiZWdpbiBhbmFseXppbmcgdGhlIGNvZGUgbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MDM3NiwiT3V0cHV0VG9rZW5zIjoyNzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDg6MzQ6NDQuNjgyNjM4NTI5WiIsIlNlcSI6NTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzY2MDQ4MjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1PVE9SQ09NTV9QSFlcIixcbiAgICBcIk1ESU9fTVZVU0JcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ5dDg4MjRfcHJvYmVcIixcbiAgICBcInl0ODgyNF9jb25maWdfaW5pdFwiLFxuICAgIFwieXQ4ODI0X2NvbmZpZ19hbmVnXCIsXG4gICAgXCJ5dDg4MjRfYW5lZ19kb25lXCIsXG4gICAgXCJ5dDg4MjRfcmVhZF9zdGF0dXNcIixcbiAgICBcInl0ODgyNF9zb2Z0X3Jlc2V0XCIsXG4gICAgXCJ5dDg4MjRfc3VzcGVuZFwiLFxuICAgIFwieXQ4ODI0X3Jlc3VtZVwiLFxuICAgIFwieXQ4ODI0X3JlYWRfcGFnZVwiLFxuICAgIFwieXQ4ODI0X3dyaXRlX3BhZ2VcIixcbiAgICBcImdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHRoZSBNb3RvcmNvbW0gWVQ4ODI0IFBIWSBkcml2ZXIuIEl0IGludHJvZHVjZXMgYSBuZXcgUEhZIGRyaXZlciBzdHJ1Y3R1cmUgd2l0aCB2YXJpb3VzIGNhbGxiYWNrcyBmb3IgcHJvYmluZywgaW5pdGlhbGl6YXRpb24sIGF1dG8tbmVnb3RpYXRpb24sIHN0YXR1cyByZWFkaW5nLCBhbmQgcG93ZXIgbWFuYWdlbWVudC4gVGhlc2UgZnVuY3Rpb25zIGFyZSByZWFjaGFibGUgdmlhIE1ESU8gYnVzIGVtdWxhdGlvbiAoZS5nLiwgdXNpbmcgdGhlIE1hcnZlbGwgVVNCIE1ESU8gYWRhcHRlciBkcml2ZXIpLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbmV3bHkgYWRkZWQgUEhZIGRyaXZlciBjYWxsYmFja3MgYW5kIHRoZSBleHBvcnRlZCBoZWxwZXIgYGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGVgLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1PVE9SQ09NTV9QSFlcIixcbiAgICBcIk1ESU9fTVZVU0JcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ5dDg4MjRfcHJvYmVcIixcbiAgICBcInl0ODgyNF9jb25maWdfaW5pdFwiLFxuICAgIFwieXQ4ODI0X2NvbmZpZ19hbmVnXCIsXG4gICAgXCJ5dDg4MjRfYW5lZ19kb25lXCIsXG4gICAgXCJ5dDg4MjRfcmVhZF9zdGF0dXNcIixcbiAgICBcInl0ODgyNF9zb2Z0X3Jlc2V0XCIsXG4gICAgXCJ5dDg4MjRfc3VzcGVuZFwiLFxuICAgIFwieXQ4ODI0X3Jlc3VtZVwiLFxuICAgIFwieXQ4ODI0X3JlYWRfcGFnZVwiLFxuICAgIFwieXQ4ODI0X3dyaXRlX3BhZ2VcIixcbiAgICBcImdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHRoZSBNb3RvcmNvbW0gWVQ4ODI0IFBIWSBkcml2ZXIuIEl0IGludHJvZHVjZXMgYSBuZXcgUEhZIGRyaXZlciBzdHJ1Y3R1cmUgd2l0aCB2YXJpb3VzIGNhbGxiYWNrcyBmb3IgcHJvYmluZywgaW5pdGlhbGl6YXRpb24sIGF1dG8tbmVnb3RpYXRpb24sIHN0YXR1cyByZWFkaW5nLCBhbmQgcG93ZXIgbWFuYWdlbWVudC4gVGhlc2UgZnVuY3Rpb25zIGFyZSByZWFjaGFibGUgdmlhIE1ESU8gYnVzIGVtdWxhdGlvbiAoZS5nLiwgdXNpbmcgdGhlIE1hcnZlbGwgVVNCIE1ESU8gYWRhcHRlciBkcml2ZXIpLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbmV3bHkgYWRkZWQgUEhZIGRyaXZlciBjYWxsYmFja3MgYW5kIHRoZSBleHBvcnRlZCBoZWxwZXIgYGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGVgLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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:nil,}