Name: series-workflowjhv67 Phase: Succeeded StartedAt: 2026-08-03 07:23:55 +0000 UTC FinishedAt: 2026-08-03 11:31:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjhv67[0] Phase: Succeeded StartedAt: 2026-08-03 07:23:55 +0000 UTC FinishedAt: 2026-08-03 07:42:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjhv67[0].run-triage Phase: Succeeded StartedAt: 2026-08-03 07:23:55 +0000 UTC FinishedAt: 2026-08-03 07:42:47 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "f5098b6bae761e346ebcd9da7f95622c04733cff", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ZONE_DEVICE", "DEVICE_PRIVATE", "TEST_HMM", "TRANSPARENT_HUGEPAGE", "MEMORY_HOTPLUG", "MEMORY_HOTREMOVE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "f5098b6bae761e346ebcd9da7f95622c04733cff", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ZONE_DEVICE", "DEVICE_PRIVATE", "TEST_HMM", "TRANSPARENT_HUGEPAGE", "MEMORY_HOTPLUG", "MEMORY_HOTREMOVE" ], "series_id": "31bdad63-31c2-4e82-89db-41b7bdcb73e6" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "memmap_init_zone_device", "memremap_pages", "devm_memremap_pages" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDA3OjQwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1pPTkVfREVWSUNFJiMzNDssCiAgICAmIzM0O0RFVklDRV9QUklWQVRFJiMzNDssCiAgICAmIzM0O1RFU1RfSE1NJiMzNDssCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDssCiAgICAmIzM0O01FTU9SWV9IT1RQTFVHJiMzNDssCiAgICAmIzM0O01FTU9SWV9IT1RSRU1PVkUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttZW1tYXBfaW5pdF96b25lX2RldmljZSYjMzQ7LAogICAgJiMzNDttZW1yZW1hcF9wYWdlcyYjMzQ7LAogICAgJiMzNDtkZXZtX21lbXJlbWFwX3BhZ2VzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9wdGltaXplcyBzdHJ1Y3QgcGFnZSBpbml0aWFsaXphdGlvbiBmb3IgWk9ORV9ERVZJQ0UgbWVtb3J5IGJ5IHVzaW5nIGEgdGVtcGxhdGUgcGFnZSBhbmQgbm9uLXRlbXBvcmFsIG1lbW9yeSBjb3BpZXMgKG1lbWNweV9ub250ZW1wb3JhbCkuIFRoaXMgaXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyByZWFjaGFibGUgdmlhIGRldmljZSBtZW1vcnkgaG90cGx1Zywgc3VjaCBhcyB3aGVuIGxvYWRpbmcgdGhlIFRFU1RfSE1NIG1vZHVsZSBvciB1c2luZyBEQVgvUE1FTSBkZXZpY2VzLiBGdXp6aW5nIHRoaXMgaXMgaW1wb3J0YW50IHRvIGNhdGNoIHBvdGVudGlhbCBhbGlnbm1lbnQgb3IgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzIGR1cmluZyBwYWdlIGluaXRpYWxpemF0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDA3OjQwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNjE3YWMxNWM5MmZhOTIzNDM3MTFhZTYxZDY1OTNlMGExYWExNGU0NFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDMgMDc6NDA6MTEgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaFxuaW5kZXggNDYzNTYxNjg2M2Y1My4uYmM2YTlmMzRiMzQ2YSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaFxuQEAgLTgyLDcgJiM0Mzs4MiwzNSBAQCBpbnQgc3RyY21wKGNvbnN0IGNoYXIgKmNzLCBjb25zdCBjaGFyICpjdCk7XG4gI2lmZGVmIENPTkZJR19BUkNIX0hBU19VQUNDRVNTX0ZMVVNIQ0FDSEVcbiAjZGVmaW5lIF9fSEFWRV9BUkNIX01FTUNQWV9GTFVTSENBQ0hFIDFcbiB2b2lkIF9fbWVtY3B5X2ZsdXNoY2FjaGUodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBjbnQpO1xuLXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtZW1jcHlfZmx1c2hjYWNoZSh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IGNudClcbiYjNDM7XG4mIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtb3ZudGlfOCh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYylcbiYjNDM7e1xuJiM0MztcdGFzbSB2b2xhdGlsZShcJiMzNDttb3ZudGlxICUxLCAlMFwmIzM0O1xuJiM0MztcdFx0ICAgICA6IFwmIzM0Oz1tXCYjMzQ7KCoodTY0ICopZHN0KVxuJiM0MztcdFx0ICAgICA6IFwmIzM0O3JcJiMzNDsoKihjb25zdCB1NjQgKilzcmMpXG4mIzQzO1x0XHQgICAgIDogXCYjMzQ7bWVtb3J5XCYjMzQ7KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG1vdm50aV8xNih2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYylcbiYjNDM7e1xuJiM0MztcdG1vdm50aV84KGRzdCwgc3JjKTtcbiYjNDM7XHRtb3ZudGlfOChkc3QgJiM0MzsgOCwgc3JjICYjNDM7IDgpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbW92bnRpXzMyKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjKVxuJiM0Mzt7XG4mIzQzO1x0bW92bnRpXzE2KGRzdCwgc3JjKTtcbiYjNDM7XHRtb3ZudGlfMTYoZHN0ICYjNDM7IDE2LCBzcmMgJiM0MzsgMTYpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbW92bnRpXzY0KHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjKVxuJiM0Mzt7XG4mIzQzO1x0bW92bnRpXzMyKGRzdCwgc3JjKTtcbiYjNDM7XHRtb3ZudGlfMzIoZHN0ICYjNDM7IDMyLCBzcmMgJiM0MzsgMzIpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbWVtY3B5X2ZsdXNoY2FjaGUodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsXG4mIzQzO1x0XHRcdFx0XHQgICAgICBzaXplX3QgY250KVxuIHtcbiBcdGlmIChfX2J1aWx0aW5fY29uc3RhbnRfcChjbnQpKSB7XG4gXHRcdHN3aXRjaCAoY250KSB7XG5AQCAtOTYsMTAgJiM0MzsxMjQsNDggQEAgc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG1lbWNweV9mbHVzaGNhY2hlKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3RcbiBcdFx0XHRcdGFzbSAoXCYjMzQ7bW92bnRpcSAlMSwgJTBcJiMzNDsgOiBcJiMzNDs9bVwmIzM0OygqKHU2NCAqKWRzdCkgOiBcJiMzNDtyXCYjMzQ7KCoodTY0ICopc3JjKSk7XG4gXHRcdFx0XHRhc20gKFwmIzM0O21vdm50aXEgJTEsICUwXCYjMzQ7IDogXCYjMzQ7PW1cJiMzNDsoKih1NjQgKikoZHN0ICYjNDM7IDgpKSA6IFwmIzM0O3JcJiMzNDsoKih1NjQgKikoc3JjICYjNDM7IDgpKSk7XG4gXHRcdFx0XHRyZXR1cm47XG4mIzQzO1x0XHRcdC8qXG4mIzQzO1x0XHRcdCAqIFRoZSByZWxldmFudCBmaXhlZC1zaXplIGNvcGllcyBoZXJlIGFyZSB0aGVcbiYjNDM7XHRcdFx0ICogeDg2XzY0IHN0cnVjdCBwYWdlIHNpemVzOiA2NCwgODAsIGFuZCA5NiBieXRlcy5cbiYjNDM7XHRcdFx0ICogS2VlcCAzMi1ieXRlIGFuZCA0OC1ieXRlIGNvcGllcyBpbmxpbmUgYXMgd2VsbFxuJiM0MztcdFx0XHQgKiBpbnN0ZWFkIG9mIHNlbmRpbmcgdGhvc2UgbmVhcmJ5IGZpeGVkLXNpemVcbiYjNDM7XHRcdFx0ICogY2FzZXMgYmFjayB0byBfX21lbWNweV9mbHVzaGNhY2hlKCkuXG4mIzQzO1x0XHRcdCAqL1xuJiM0MztcdFx0XHRjYXNlIDMyOlxuJiM0MztcdFx0XHRcdG1vdm50aV8zMihkc3QsIHNyYyk7XG4mIzQzO1x0XHRcdFx0cmV0dXJuO1xuJiM0MztcdFx0XHRjYXNlIDQ4OlxuJiM0MztcdFx0XHRcdG1vdm50aV8zMihkc3QsIHNyYyk7XG4mIzQzO1x0XHRcdFx0bW92bnRpXzE2KGRzdCAmIzQzOyAzMiwgc3JjICYjNDM7IDMyKTtcbiYjNDM7XHRcdFx0XHRyZXR1cm47XG4mIzQzO1x0XHRcdGNhc2UgNjQ6XG4mIzQzO1x0XHRcdFx0bW92bnRpXzY0KGRzdCwgc3JjKTtcbiYjNDM7XHRcdFx0XHRyZXR1cm47XG4mIzQzO1x0XHRcdGNhc2UgODA6XG4mIzQzO1x0XHRcdFx0bW92bnRpXzY0KGRzdCwgc3JjKTtcbiYjNDM7XHRcdFx0XHRtb3ZudGlfMTYoZHN0ICYjNDM7IDY0LCBzcmMgJiM0MzsgNjQpO1xuJiM0MztcdFx0XHRcdHJldHVybjtcbiYjNDM7XHRcdFx0Y2FzZSA5NjpcbiYjNDM7XHRcdFx0XHRtb3ZudGlfNjQoZHN0LCBzcmMpO1xuJiM0MztcdFx0XHRcdG1vdm50aV8zMihkc3QgJiM0MzsgNjQsIHNyYyAmIzQzOyA2NCk7XG4mIzQzO1x0XHRcdFx0cmV0dXJuO1xuIFx0XHR9XG4gXHR9XG4mIzQzO1xuIFx0X19tZW1jcHlfZmx1c2hjYWNoZShkc3QsIHNyYywgY250KTtcbiB9XG4mIzQzO1xuJiM0MzsjZGVmaW5lIG1lbWNweV9ub250ZW1wb3JhbCBtZW1jcHlfbm9udGVtcG9yYWxcbiYjNDM7LypcbiYjNDM7ICogUmV1c2UgdGhlIGV4aXN0aW5nIHg4NiBmbHVzaGNhY2hlIGJhY2tlbmQgYXMgdGhlIG5vbi10ZW1wb3JhbCBjb3B5XG4mIzQzOyAqIHByaW1pdGl2ZS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtZW1jcHlfbm9udGVtcG9yYWwodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsXG4mIzQzO1x0XHRzaXplX3QgY250KVxuJiM0Mzt7XG4mIzQzO1x0bWVtY3B5X2ZsdXNoY2FjaGUoZHN0LCBzcmMsIGNudCk7XG4mIzQzO31cbiYjNDM7XG4gI2VuZGlmXG4gXG4gI2VuZGlmIC8qIF9fS0VSTkVMX18gKi9cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tLmggYi9pbmNsdWRlL2xpbnV4L21tLmhcbmluZGV4IDQ4NWRmOWMyZGJkZGIuLjQzMzQzYmZjZTQ5MzYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbW0uaFxuQEAgLTI1NDEsMTEgJiM0MzsyNTQxLDIyIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcGFnZV9zZWN0aW9uKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIHNlY3Rpb24pXG4gXHRwYWdlLVx1MDAzZWZsYWdzLmYgfD0gKHNlY3Rpb24gXHUwMDI2IFNFQ1RJT05TX01BU0spIFx1MDAzY1x1MDAzYyBTRUNUSU9OU19QR1NISUZUO1xuIH1cbiBcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHNldF9wYWdlX3NlY3Rpb25fZnJvbV9wZm4oc3RydWN0IHBhZ2UgKnBhZ2UsXG4mIzQzO1x0XHR1bnNpZ25lZCBsb25nIHBmbilcbiYjNDM7e1xuJiM0MztcdHNldF9wYWdlX3NlY3Rpb24ocGFnZSwgcGZuX3RvX3NlY3Rpb25fbnIocGZuKSk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG1lbWRlc2Nfc2VjdGlvbihtZW1kZXNjX2ZsYWdzX3QgbWRmKVxuIHtcbiBcdHJldHVybiAobWRmLmYgXHUwMDNlXHUwMDNlIFNFQ1RJT05TX1BHU0hJRlQpIFx1MDAyNiBTRUNUSU9OU19NQVNLO1xuIH1cbiAjZWxzZSAvKiAhU0VDVElPTl9JTl9QQUdFX0ZMQUdTICovXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcGFnZV9zZWN0aW9uX2Zyb21fcGZuKHN0cnVjdCBwYWdlICpwYWdlLFxuJiM0MztcdFx0dW5zaWduZWQgbG9uZyBwZm4pXG4mIzQzO3tcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbWVtZGVzY19zZWN0aW9uKG1lbWRlc2NfZmxhZ3NfdCBtZGYpXG4ge1xuIFx0cmV0dXJuIDA7XG5AQCAtMjc2OCw5ICYjNDM7Mjc3OSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcGFnZV9saW5rcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgZW51bSB6b25lX3R5cGUgem9uZSxcbiB7XG4gXHRzZXRfcGFnZV96b25lKHBhZ2UsIHpvbmUpO1xuIFx0c2V0X3BhZ2Vfbm9kZShwYWdlLCBub2RlKTtcbi0jaWZkZWYgU0VDVElPTl9JTl9QQUdFX0ZMQUdTXG4tXHRzZXRfcGFnZV9zZWN0aW9uKHBhZ2UsIHBmbl90b19zZWN0aW9uX25yKHBmbikpO1xuLSNlbmRpZlxuJiM0MztcdHNldF9wYWdlX3NlY3Rpb25fZnJvbV9wZm4ocGFnZSwgcGZuKTtcbiB9XG4gXG4gLyoqXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zdHJpbmcuaCBiL2luY2x1ZGUvbGludXgvc3RyaW5nLmhcbmluZGV4IDU3MDJkYWNhNDMyNmIuLjZjYjVjZGQwMTE1OGIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3N0cmluZy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3N0cmluZy5oXG5AQCAtMjc4LDYgJiM0MzsyNzgsMTkgQEAgc3RhdGljIGlubGluZSB2b2lkIG1lbWNweV9mbHVzaGNhY2hlKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgY250KVxuIH1cbiAjZW5kaWZcbiBcbiYjNDM7I2lmbmRlZiBtZW1jcHlfbm9udGVtcG9yYWxcbiYjNDM7LypcbiYjNDM7ICogbWVtY3B5X25vbnRlbXBvcmFsKCkgcmVxdWVzdHMgYSBub24tdGVtcG9yYWwgY29weSB3aGVuIHRoZVxuJiM0MzsgKiBhcmNoaXRlY3R1cmUgaGFzIGEgc3VpdGFibGUgYmFja2VuZC4gQXJjaGl0ZWN0dXJlcyB3aXRob3V0IGFcbiYjNDM7ICogc3BlY2lhbGl6ZWQgYmFja2VuZCBmYWxsIGJhY2sgdG8gbWVtY3B5KCkuIEtlZXAgdGhpcyBhcyBhXG4mIzQzOyAqIGZ1bmN0aW9uLWxpa2UgbWFjcm8gc28gdGhlIGNvbXBpbGVyIGNhbiBzdGlsbCBzZWUgdGhlIG9yaWdpbmFsXG4mIzQzOyAqIG1lbWNweSgpIGNhbGwgc2l0ZSBhbmQgcHJlc2VydmUgdGhlIHVzdWFsIEZPUlRJRlkgY292ZXJhZ2Ugd2hlblxuJiM0MzsgKiBvYmplY3Qgc2l6ZXMgcmVtYWluIHZpc2libGUgdGhlcmUsIHdoaWxlIGtlZXBpbmcgdGhlIEFQSSB2b2lkLlxuJiM0MzsgKi9cbiYjNDM7I2RlZmluZSBtZW1jcHlfbm9udGVtcG9yYWwoZHN0LCBzcmMsIGxlbikgXFxcbiYjNDM7XHQoKHZvaWQpbWVtY3B5KGRzdCwgc3JjLCBsZW4pKVxuJiM0MzsjZW5kaWZcbiYjNDM7XG4gdm9pZCAqbWVtY2hyX2ludihjb25zdCB2b2lkICpzLCBpbnQgYywgc2l6ZV90IG4pO1xuIGNoYXIgKnN0cnJlcGxhY2UoY2hhciAqc3RyLCBjaGFyIG9sZCwgY2hhciBuZXcpO1xuIFxuZGlmZiAtLWdpdCBhL21tL21tX2luaXQuYyBiL21tL21tX2luaXQuY1xuaW5kZXggMGY2NDkwOWU4ZDIwZS4uYmIyMDA3ODA2YTI4NyAxMDA2NDRcbi0tLSBhL21tL21tX2luaXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbW1faW5pdC5jXG5AQCAtMTAwNSwxMSAmIzQzOzEwMDUsMzcgQEAgc3RhdGljIHZvaWQgX19pbml0IG1lbW1hcF9pbml0KHZvaWQpXG4gfVxuIFxuICNpZmRlZiBDT05GSUdfWk9ORV9ERVZJQ0Vcbi1zdGF0aWMgdm9pZCBfX3JlZiBfX2luaXRfem9uZV9kZXZpY2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBwZm4sXG4mIzQzOy8qXG4mIzQzOyAqIFJldHVybiB0cnVlIHdoZW4gbWVtbWFwX2luaXRfem9uZV9kZXZpY2UoKSBtdXN0IGluaXRpYWxpemUgdGhlIHBhZ2VcbiYjNDM7ICogcmVmY291bnQgdG8gMC4gTUVNT1JZX0RFVklDRV9HRU5FUklDIHBhZ2VzIHJlZ2FpbiBhIHJlZmNvdW50IG9mIDEgaW5cbiYjNDM7ICogdGhlIGZyZWUgcGF0aCwgd2hpbGUgdGhlIHJlbWFpbmluZyBaT05FX0RFVklDRSB0eXBlcyBzdGFydCBmcm9tIDAgaGVyZVxuJiM0MzsgKiBhbmQgcmFpc2UgdGhlIGNvdW50IGFnYWluIHdoZW4gdGhlIGFsbG9jYXRvciBvciBkcml2ZXIgaGFuZHMgdGhlIHBhZ2VcbiYjNDM7ICogb3V0LlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGlubGluZSBib29sIHBhZ2VtYXBfcmVxdWlyZXNfcmVmY291bnRfcmVzZXQoY29uc3Qgc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcClcbiYjNDM7e1xuJiM0MztcdC8qXG4mIzQzO1x0ICogTUVNT1JZX0RFVklDRV9HRU5FUklDIHBhZ2VzIHJlZ2FpbiBhIHJlZmNvdW50IG9mIDEgaW4gdGhlIGZyZWVcbiYjNDM7XHQgKiBwYXRoLiBUaGUgcmVtYWluaW5nIFpPTkVfREVWSUNFIHR5cGVzIHN0YXJ0IGZyb20gMCBoZXJlIGFuZCByYWlzZVxuJiM0MztcdCAqIHRoZSBjb3VudCBhZ2FpbiB3aGVuIHRoZSBhbGxvY2F0b3Igb3IgZHJpdmVyIGhhbmRzIHRoZSBwYWdlIG91dC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRzd2l0Y2ggKHBnbWFwLVx1MDAzZXR5cGUpIHtcbiYjNDM7XHRjYXNlIE1FTU9SWV9ERVZJQ0VfRlNfREFYOlxuJiM0MztcdGNhc2UgTUVNT1JZX0RFVklDRV9QUklWQVRFOlxuJiM0MztcdGNhc2UgTUVNT1JZX0RFVklDRV9DT0hFUkVOVDpcbiYjNDM7XHRjYXNlIE1FTU9SWV9ERVZJQ0VfUENJX1AyUERNQTpcbiYjNDM7XHRcdHJldHVybiB0cnVlO1xuJiM0MztcdGNhc2UgTUVNT1JZX0RFVklDRV9HRU5FUklDOlxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGZhbHNlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBfX3JlZiBfX3pvbmVfZGV2aWNlX3BhZ2VfaW5pdChzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBwZm4sXG4gXHRcdFx0XHRcdCAgdW5zaWduZWQgbG9uZyB6b25lX2lkeCwgaW50IG5pZCxcbiBcdFx0XHRcdFx0ICBzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwKVxuIHtcbi1cbiBcdF9faW5pdF9zaW5nbGVfcGFnZShwYWdlLCBwZm4sIHpvbmVfaWR4LCBuaWQpO1xuIFxuIFx0LypcbkBAIC0xMDI4LDI3ICYjNDM7MTA1NCw1NCBAQCBzdGF0aWMgdm9pZCBfX3JlZiBfX2luaXRfem9uZV9kZXZpY2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBwZm4sXG4gXHQgKi9cbiBcdHBhZ2VfZm9saW8ocGFnZSktXHUwMDNlcGdtYXAgPSBwZ21hcDtcbiBcdHBhZ2UtXHUwMDNlem9uZV9kZXZpY2VfZGF0YSA9IE5VTEw7XG4mIzQzO31cbiBcbi1cdC8qXG4tXHQgKiBaT05FX0RFVklDRSBwYWdlcyBvdGhlciB0aGFuIE1FTU9SWV9UWVBFX0dFTkVSSUMgYXJlIHJlbGVhc2VkXG4tXHQgKiBkaXJlY3RseSB0byB0aGUgZHJpdmVyIHBhZ2UgYWxsb2NhdG9yIHdoaWNoIHdpbGwgc2V0IHRoZSBwYWdlIGNvdW50XG4tXHQgKiB0byAxIHdoZW4gYWxsb2NhdGluZyB0aGUgcGFnZS5cbi1cdCAqXG4tXHQgKiBNRU1PUllfVFlQRV9HRU5FUklDIGFuZCBNRU1PUllfVFlQRV9GU19EQVggcGFnZXMgYXV0b21hdGljYWxseSBoYXZlXG4tXHQgKiB0aGVpciByZWZjb3VudCByZXNldCB0byBvbmUgd2hlbmV2ZXIgdGhleSBhcmUgZnJlZWQgKGllLiBhZnRlclxuLVx0ICogdGhlaXIgcmVmY291bnQgZHJvcHMgdG8gMCkuXG4tXHQgKi9cbi1cdHN3aXRjaCAocGdtYXAtXHUwMDNldHlwZSkge1xuLVx0Y2FzZSBNRU1PUllfREVWSUNFX0ZTX0RBWDpcbi1cdGNhc2UgTUVNT1JZX0RFVklDRV9QUklWQVRFOlxuLVx0Y2FzZSBNRU1PUllfREVWSUNFX0NPSEVSRU5UOlxuLVx0Y2FzZSBNRU1PUllfREVWSUNFX1BDSV9QMlBETUE6XG4mIzQzO3N0YXRpYyB2b2lkIF9fcmVmIHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9zbG93KHN0cnVjdCBwYWdlICpwYWdlLFxuJiM0MztcdFx0dW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgem9uZV9pZHgsIGludCBuaWQsXG4mIzQzO1x0XHRzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwKVxuJiM0Mzt7XG4mIzQzO1x0X196b25lX2RldmljZV9wYWdlX2luaXQocGFnZSwgcGZuLCB6b25lX2lkeCwgbmlkLCBwZ21hcCk7XG4mIzQzO1x0aWYgKHBhZ2VtYXBfcmVxdWlyZXNfcmVmY291bnRfcmVzZXQocGdtYXApKVxuIFx0XHRzZXRfcGFnZV9jb3VudChwYWdlLCAwKTtcbi1cdFx0YnJlYWs7XG4mIzQzO31cbiBcbi1cdGNhc2UgTUVNT1JZX0RFVklDRV9HRU5FUklDOlxuLVx0XHRicmVhaztcbi1cdH1cbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHpvbmVfZGV2aWNlX3RhaWxfcGFnZV9pbml0KHN0cnVjdCBwYWdlICpwYWdlLFxuJiM0MztcdFx0dW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgem9uZV9pZHgsIGludCBuaWQsXG4mIzQzO1x0XHRzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwLCBjb25zdCBzdHJ1Y3QgcGFnZSAqaGVhZCxcbiYjNDM7XHRcdHVuc2lnbmVkIGludCBvcmRlcilcbiYjNDM7e1xuJiM0MztcdHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9zbG93KHBhZ2UsIHBmbiwgem9uZV9pZHgsIG5pZCwgcGdtYXApO1xuJiM0MztcdHByZXBfY29tcG91bmRfdGFpbChwYWdlLCBoZWFkLCBvcmRlcik7XG4mIzQzO1x0c2V0X3BhZ2VfY291bnQocGFnZSwgMCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqICYjMzk7dGVtcGxhdGUmIzM5OyBpcyBhIHJldXNhYmxlIHBhZ2UgcHJvdG90eXBlIHJhdGhlciB0aGFuIGEgc3RyaWN0bHkgaW1tdXRhYmxlXG4mIzQzOyAqIG9iamVjdC4gTW9zdCBaT05FX0RFVklDRSBmaWVsZHMgc3RheSBjb25zdGFudCBhY3Jvc3MgdGhlIHBhZ2VzIGNvdmVyZWQgYnlcbiYjNDM7ICogdGhlIGN1cnJlbnQgdGVtcGxhdGUsIGJ1dCBzZWN0aW9uIGJpdHMgYW5kIHBhZ2UtXHUwMDNldmlydHVhbCBtYXkgc3RpbGwgZGVwZW5kXG4mIzQzOyAqIG9uIHRoZSBQRk4uIFJlZnJlc2ggdGhvc2UgUEZOLWRlcGVuZGVudCBmaWVsZHMgaW4gdGhlIHRlbXBsYXRlIGJlZm9yZVxuJiM0MzsgKiBjb3B5aW5nIGl0IGludG8gQHBhZ2UuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgem9uZV9kZXZpY2VfcGFnZV91cGRhdGVfdGVtcGxhdGUoc3RydWN0IHBhZ2UgKnRlbXBsYXRlLFxuJiM0MztcdFx0dW5zaWduZWQgbG9uZyBwZm4pXG4mIzQzO3tcbiYjNDM7XHRzZXRfcGFnZV9zZWN0aW9uX2Zyb21fcGZuKHRlbXBsYXRlLCBwZm4pO1xuJiM0MzsjaWZkZWYgV0FOVF9QQUdFX1ZJUlRVQUxcbiYjNDM7XHRpZiAoIWlzX2hpZ2htZW1faWR4KFpPTkVfREVWSUNFKSlcbiYjNDM7XHRcdHNldF9wYWdlX2FkZHJlc3ModGVtcGxhdGUsIF9fdmEocGZuIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUKSk7XG4mIzQzOyNlbmRpZlxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCB6b25lX2RldmljZV9wYWdlX2luaXRfZnJvbV90ZW1wbGF0ZShzdHJ1Y3QgcGFnZSAqcGFnZSxcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgcGZuLCBzdHJ1Y3QgcGFnZSAqdGVtcGxhdGUpXG4mIzQzO3tcbiYjNDM7XHQvKlxuJiM0MztcdCAqICYjMzk7dGVtcGxhdGUmIzM5OyBjYXJyaWVzIHRoZSBpbnZhcmlhbnQgcG9ydGlvbiBvZiBhIFpPTkVfREVWSUNFIHN0cnVjdFxuJiM0MztcdCAqIHBhZ2UuIFVwZGF0ZSB0aGUgUEZOLWRlcGVuZGVudCBmaWVsZHMgaW4gcGxhY2UgYmVmb3JlIGNvcHlpbmcgaXRcbiYjNDM7XHQgKiB0byB0aGUgZGVzdGluYXRpb24gcGFnZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHR6b25lX2RldmljZV9wYWdlX3VwZGF0ZV90ZW1wbGF0ZSh0ZW1wbGF0ZSwgcGZuKTtcbiYjNDM7XHRtZW1jcHlfbm9udGVtcG9yYWwocGFnZSwgdGVtcGxhdGUsIHNpemVvZigqcGFnZSkpO1xuIH1cbiBcbiAvKlxuQEAgLTEwODMsNiAmIzQzOzExMzYsNyBAQCBzdGF0aWMgdm9pZCBfX3JlZiBtZW1tYXBfaW5pdF9jb21wb3VuZChzdHJ1Y3QgcGFnZSAqaGVhZCxcbiB7XG4gXHR1bnNpZ25lZCBsb25nIHBmbiwgZW5kX3BmbiA9IGhlYWRfcGZuICYjNDM7IG5yX3BhZ2VzO1xuIFx0dW5zaWduZWQgaW50IG9yZGVyID0gcGdtYXAtXHUwMDNldm1lbW1hcF9zaGlmdDtcbiYjNDM7XHRzdHJ1Y3QgcGFnZSB0ZW1wbGF0ZTtcbiBcbiBcdC8qXG4gXHQgKiBXZSBoYXZlIHRvIGluaXRpYWxpemUgdGhlIHBhZ2VzLCBpbmNsdWRpbmcgc2V0dGluZyB1cCBwYWdlIGxpbmtzLlxuQEAgLTEwOTEsMTIgJiM0MzsxMTQ1LDI2IEBAIHN0YXRpYyB2b2lkIF9fcmVmIG1lbW1hcF9pbml0X2NvbXBvdW5kKHN0cnVjdCBwYWdlICpoZWFkLFxuIFx0ICogdGhlIHBhZ2VzIGluIHRoZSBzYW1lIGdvLlxuIFx0ICovXG4gXHRfX1NldFBhZ2VIZWFkKGhlYWQpO1xuJiM0MztcbiBcdGZvciAocGZuID0gaGVhZF9wZm4gJiM0MzsgMTsgcGZuIFx1MDAzYyBlbmRfcGZuOyBwZm4mIzQzOyYjNDM7KSB7XG4gXHRcdHN0cnVjdCBwYWdlICpwYWdlID0gcGZuX3RvX3BhZ2UocGZuKTtcbiBcbi1cdFx0X19pbml0X3pvbmVfZGV2aWNlX3BhZ2UocGFnZSwgcGZuLCB6b25lX2lkeCwgbmlkLCBwZ21hcCk7XG4tXHRcdHByZXBfY29tcG91bmRfdGFpbChwYWdlLCBoZWFkLCBvcmRlcik7XG4tXHRcdHNldF9wYWdlX2NvdW50KHBhZ2UsIDApO1xuJiM0MztcdFx0aWYgKHBmbiA9PSBoZWFkX3BmbiAmIzQzOyAxKSB7XG4mIzQzO1x0XHRcdC8qXG4mIzQzO1x0XHRcdCAqIEFsbCB0YWlscyBvZiB0aGUgc2FtZSBjb21wb3VuZCBwYWdlIHNoYXJlIHRoZVxuJiM0MztcdFx0XHQgKiBzdGF0ZSBlc3RhYmxpc2hlZCBieSBwcmVwX2NvbXBvdW5kX3RhaWwoKS4gUmV1c2VcbiYjNDM7XHRcdFx0ICogb25lIHRhaWwgdGVtcGxhdGUgZm9yIHRoZSB3aG9sZSByYW5nZSBhbmRcbiYjNDM7XHRcdFx0ICogcmVmcmVzaCBvbmx5IHRoZSBQRk4tZGVwZW5kZW50IGZpZWxkcyBpbiB0aGF0XG4mIzQzO1x0XHRcdCAqIHRlbXBsYXRlIGJlZm9yZSBlYWNoIGNvcHkuXG4mIzQzO1x0XHRcdCAqL1xuJiM0MztcdFx0XHR6b25lX2RldmljZV90YWlsX3BhZ2VfaW5pdChwYWdlLCBwZm4sIHpvbmVfaWR4LCBuaWQsXG4mIzQzO1x0XHRcdFx0XHRcdCAgIHBnbWFwLCBoZWFkLCBvcmRlcik7XG4mIzQzO1x0XHRcdC8qIGluaXQgdGVtcGxhdGUgcGFnZSAqL1xuJiM0MztcdFx0XHRtZW1jcHkoXHUwMDI2dGVtcGxhdGUsIHBhZ2UsIHNpemVvZigqcGFnZSkpO1xuJiM0MztcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0em9uZV9kZXZpY2VfcGFnZV9pbml0X2Zyb21fdGVtcGxhdGUocGFnZSwgcGZuLFxuJiM0MztcdFx0XHRcdFx0XHRcdCAgICBcdTAwMjZ0ZW1wbGF0ZSk7XG4mIzQzO1x0XHR9XG4gXHR9XG4gXHRwcmVwX2NvbXBvdW5kX2hlYWQoaGVhZCwgb3JkZXIpO1xuIH1cbkBAIC0xMTEzLDYgJiM0MzsxMTgxLDcgQEAgdm9pZCBfX3JlZiBtZW1tYXBfaW5pdF96b25lX2RldmljZShzdHJ1Y3Qgem9uZSAqem9uZSxcbiBcdHVuc2lnbmVkIGxvbmcgem9uZV9pZHggPSB6b25lX2lkeCh6b25lKTtcbiBcdHVuc2lnbmVkIGxvbmcgc3RhcnQgPSBqaWZmaWVzO1xuIFx0aW50IG5pZCA9IHBnZGF0LVx1MDAzZW5vZGVfaWQ7XG4mIzQzO1x0c3RydWN0IHBhZ2UgdGVtcGxhdGU7XG4gXG4gXHRpZiAoV0FSTl9PTl9PTkNFKCFwZ21hcCB8fCB6b25lX2lkeCAhPSBaT05FX0RFVklDRSkpXG4gXHRcdHJldHVybjtcbkBAIC0xMTMwLDcgJiM0MzsxMTk5LDIyIEBAIHZvaWQgX19yZWYgbWVtbWFwX2luaXRfem9uZV9kZXZpY2Uoc3RydWN0IHpvbmUgKnpvbmUsXG4gXHRmb3IgKHBmbiA9IHN0YXJ0X3BmbjsgcGZuIFx1MDAzYyBlbmRfcGZuOyBwZm4gJiM0Mzs9IHBmbnNfcGVyX2NvbXBvdW5kKSB7XG4gXHRcdHN0cnVjdCBwYWdlICpwYWdlID0gcGZuX3RvX3BhZ2UocGZuKTtcbiBcbi1cdFx0X19pbml0X3pvbmVfZGV2aWNlX3BhZ2UocGFnZSwgcGZuLCB6b25lX2lkeCwgbmlkLCBwZ21hcCk7XG4mIzQzO1x0XHRpZiAocGZuID09IHN0YXJ0X3Bmbikge1xuJiM0MztcdFx0XHQvKlxuJiM0MztcdFx0XHQgKiBTZWVkIHRoZSByZXVzYWJsZSBoZWFkLXBhZ2UgdGVtcGxhdGUgZnJvbSB0aGVcbiYjNDM7XHRcdFx0ICogZmlyc3QgcmVhbCBzdHJ1Y3QgcGFnZS4gVGhpcyBpbml0aWFsaXplcyB0aGVcbiYjNDM7XHRcdFx0ICogZmlyc3QgcGFnZSB0aHJvdWdoIHRoZSBleGlzdGluZyBzbG93IHBhdGggYW5kXG4mIzQzO1x0XHRcdCAqIHRoZW4gcmV1c2VzIHRoYXQgZmluYWwgc3RhdGUgYXMgdGhlIHRlbXBsYXRlXG4mIzQzO1x0XHRcdCAqIGZvciBzdWJzZXF1ZW50IHBhZ2VzLlxuJiM0MztcdFx0XHQgKi9cbiYjNDM7XHRcdFx0em9uZV9kZXZpY2VfcGFnZV9pbml0X3Nsb3cocGFnZSwgcGZuLCB6b25lX2lkeCxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgbmlkLCBwZ21hcCk7XG4mIzQzO1x0XHRcdC8qIGluaXQgdGVtcGxhdGUgcGFnZSAqL1xuJiM0MztcdFx0XHRtZW1jcHkoXHUwMDI2dGVtcGxhdGUsIHBhZ2UsIHNpemVvZigqcGFnZSkpO1xuJiM0MztcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0em9uZV9kZXZpY2VfcGFnZV9pbml0X2Zyb21fdGVtcGxhdGUocGFnZSwgcGZuLFxuJiM0MztcdFx0XHRcdFx0XHRcdCAgICBcdTAwMjZ0ZW1wbGF0ZSk7XG4mIzQzO1x0XHR9XG4gXG4gXHRcdGlmIChJU19BTElHTkVEKHBmbiwgUEFHRVNfUEVSX1NFQ1RJT04pKVxuIFx0XHRcdGNvbmRfcmVzY2hlZCgpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDA3OjQwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtaT05FX0RFVklDRSYjMzQ7LAogICAgJiMzNDtERVZJQ0VfUFJJVkFURSYjMzQ7LAogICAgJiMzNDtURVNUX0hNTSYjMzQ7LAogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7LAogICAgJiMzNDtNRU1PUllfSE9UUExVRyYjMzQ7LAogICAgJiMzNDtNRU1PUllfSE9UUkVNT1ZFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWVtbWFwX2luaXRfem9uZV9kZXZpY2UmIzM0OywKICAgICYjMzQ7bWVtcmVtYXBfcGFnZXMmIzM0OywKICAgICYjMzQ7ZGV2bV9tZW1yZW1hcF9wYWdlcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvcHRpbWl6ZXMgc3RydWN0IHBhZ2UgaW5pdGlhbGl6YXRpb24gZm9yIFpPTkVfREVWSUNFIG1lbW9yeSBieSB1c2luZyBhIHRlbXBsYXRlIHBhZ2UgYW5kIG5vbi10ZW1wb3JhbCBtZW1vcnkgY29waWVzIChtZW1jcHlfbm9udGVtcG9yYWwpLiBUaGlzIGlzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgcmVhY2hhYmxlIHZpYSBkZXZpY2UgbWVtb3J5IGhvdHBsdWcsIHN1Y2ggYXMgd2hlbiBsb2FkaW5nIHRoZSBURVNUX0hNTSBtb2R1bGUgb3IgdXNpbmcgREFYL1BNRU0gZGV2aWNlcy4gRnV6emluZyB0aGlzIGlzIGltcG9ydGFudCB0byBjYXRjaCBwb3RlbnRpYWwgYWxpZ25tZW50IG9yIG1lbW9yeSBjb3JydXB0aW9uIGlzc3VlcyBkdXJpbmcgcGFnZSBpbml0aWFsaXphdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDYxN2FjMTVjOTJmYTkyMzQzNzExYWU2MWQ2NTkzZTBhMWFhMTRlNDQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAzIDA3OjQwOjExIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaAppbmRleCA0NjM1NjE2ODYzZjUzLi5iYzZhOWYzNGIzNDZhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaApAQCAtODIsNyAmIzQzOzgyLDM1IEBAIGludCBzdHJjbXAoY29uc3QgY2hhciAqY3MsIGNvbnN0IGNoYXIgKmN0KTsKICNpZmRlZiBDT05GSUdfQVJDSF9IQVNfVUFDQ0VTU19GTFVTSENBQ0hFCiAjZGVmaW5lIF9fSEFWRV9BUkNIX01FTUNQWV9GTFVTSENBQ0hFIDEKIHZvaWQgX19tZW1jcHlfZmx1c2hjYWNoZSh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IGNudCk7Ci1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbWVtY3B5X2ZsdXNoY2FjaGUodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBjbnQpCiYjNDM7CiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG1vdm50aV84KHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjKQomIzQzO3sKJiM0MzsJYXNtIHZvbGF0aWxlKCYjMzQ7bW92bnRpcSAlMSwgJTAmIzM0OwomIzQzOwkJICAgICA6ICYjMzQ7PW0mIzM0OygqKHU2NCAqKWRzdCkKJiM0MzsJCSAgICAgOiAmIzM0O3ImIzM0OygqKGNvbnN0IHU2NCAqKXNyYykKJiM0MzsJCSAgICAgOiAmIzM0O21lbW9yeSYjMzQ7KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG1vdm50aV8xNih2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYykKJiM0Mzt7CiYjNDM7CW1vdm50aV84KGRzdCwgc3JjKTsKJiM0MzsJbW92bnRpXzgoZHN0ICYjNDM7IDgsIHNyYyAmIzQzOyA4KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG1vdm50aV8zMih2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYykKJiM0Mzt7CiYjNDM7CW1vdm50aV8xNihkc3QsIHNyYyk7CiYjNDM7CW1vdm50aV8xNihkc3QgJiM0MzsgMTYsIHNyYyAmIzQzOyAxNik7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtb3ZudGlfNjQodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMpCiYjNDM7ewomIzQzOwltb3ZudGlfMzIoZHN0LCBzcmMpOwomIzQzOwltb3ZudGlfMzIoZHN0ICYjNDM7IDMyLCBzcmMgJiM0MzsgMzIpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbWVtY3B5X2ZsdXNoY2FjaGUodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsCiYjNDM7CQkJCQkgICAgICBzaXplX3QgY250KQogewogCWlmIChfX2J1aWx0aW5fY29uc3RhbnRfcChjbnQpKSB7CiAJCXN3aXRjaCAoY250KSB7CkBAIC05NiwxMCAmIzQzOzEyNCw0OCBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbWVtY3B5X2ZsdXNoY2FjaGUodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdAogCQkJCWFzbSAoJiMzNDttb3ZudGlxICUxLCAlMCYjMzQ7IDogJiMzNDs9bSYjMzQ7KCoodTY0ICopZHN0KSA6ICYjMzQ7ciYjMzQ7KCoodTY0ICopc3JjKSk7CiAJCQkJYXNtICgmIzM0O21vdm50aXEgJTEsICUwJiMzNDsgOiAmIzM0Oz1tJiMzNDsoKih1NjQgKikoZHN0ICYjNDM7IDgpKSA6ICYjMzQ7ciYjMzQ7KCoodTY0ICopKHNyYyAmIzQzOyA4KSkpOwogCQkJCXJldHVybjsKJiM0MzsJCQkvKgomIzQzOwkJCSAqIFRoZSByZWxldmFudCBmaXhlZC1zaXplIGNvcGllcyBoZXJlIGFyZSB0aGUKJiM0MzsJCQkgKiB4ODZfNjQgc3RydWN0IHBhZ2Ugc2l6ZXM6IDY0LCA4MCwgYW5kIDk2IGJ5dGVzLgomIzQzOwkJCSAqIEtlZXAgMzItYnl0ZSBhbmQgNDgtYnl0ZSBjb3BpZXMgaW5saW5lIGFzIHdlbGwKJiM0MzsJCQkgKiBpbnN0ZWFkIG9mIHNlbmRpbmcgdGhvc2UgbmVhcmJ5IGZpeGVkLXNpemUKJiM0MzsJCQkgKiBjYXNlcyBiYWNrIHRvIF9fbWVtY3B5X2ZsdXNoY2FjaGUoKS4KJiM0MzsJCQkgKi8KJiM0MzsJCQljYXNlIDMyOgomIzQzOwkJCQltb3ZudGlfMzIoZHN0LCBzcmMpOwomIzQzOwkJCQlyZXR1cm47CiYjNDM7CQkJY2FzZSA0ODoKJiM0MzsJCQkJbW92bnRpXzMyKGRzdCwgc3JjKTsKJiM0MzsJCQkJbW92bnRpXzE2KGRzdCAmIzQzOyAzMiwgc3JjICYjNDM7IDMyKTsKJiM0MzsJCQkJcmV0dXJuOwomIzQzOwkJCWNhc2UgNjQ6CiYjNDM7CQkJCW1vdm50aV82NChkc3QsIHNyYyk7CiYjNDM7CQkJCXJldHVybjsKJiM0MzsJCQljYXNlIDgwOgomIzQzOwkJCQltb3ZudGlfNjQoZHN0LCBzcmMpOwomIzQzOwkJCQltb3ZudGlfMTYoZHN0ICYjNDM7IDY0LCBzcmMgJiM0MzsgNjQpOwomIzQzOwkJCQlyZXR1cm47CiYjNDM7CQkJY2FzZSA5NjoKJiM0MzsJCQkJbW92bnRpXzY0KGRzdCwgc3JjKTsKJiM0MzsJCQkJbW92bnRpXzMyKGRzdCAmIzQzOyA2NCwgc3JjICYjNDM7IDY0KTsKJiM0MzsJCQkJcmV0dXJuOwogCQl9CiAJfQomIzQzOwogCV9fbWVtY3B5X2ZsdXNoY2FjaGUoZHN0LCBzcmMsIGNudCk7CiB9CiYjNDM7CiYjNDM7I2RlZmluZSBtZW1jcHlfbm9udGVtcG9yYWwgbWVtY3B5X25vbnRlbXBvcmFsCiYjNDM7LyoKJiM0MzsgKiBSZXVzZSB0aGUgZXhpc3RpbmcgeDg2IGZsdXNoY2FjaGUgYmFja2VuZCBhcyB0aGUgbm9uLXRlbXBvcmFsIGNvcHkKJiM0MzsgKiBwcmltaXRpdmUuCiYjNDM7ICovCiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG1lbWNweV9ub250ZW1wb3JhbCh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYywKJiM0MzsJCXNpemVfdCBjbnQpCiYjNDM7ewomIzQzOwltZW1jcHlfZmx1c2hjYWNoZShkc3QsIHNyYywgY250KTsKJiM0Mzt9CiYjNDM7CiAjZW5kaWYKIAogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW0uaCBiL2luY2x1ZGUvbGludXgvbW0uaAppbmRleCA0ODVkZjljMmRiZGRiLi40MzM0M2JmY2U0OTM2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tbS5oCkBAIC0yNTQxLDExICYjNDM7MjU0MSwyMiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3BhZ2Vfc2VjdGlvbihzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBzZWN0aW9uKQogCXBhZ2UtJmd0O2ZsYWdzLmYgfD0gKHNlY3Rpb24gJmFtcDsgU0VDVElPTlNfTUFTSykgJmx0OyZsdDsgU0VDVElPTlNfUEdTSElGVDsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcGFnZV9zZWN0aW9uX2Zyb21fcGZuKHN0cnVjdCBwYWdlICpwYWdlLAomIzQzOwkJdW5zaWduZWQgbG9uZyBwZm4pCiYjNDM7ewomIzQzOwlzZXRfcGFnZV9zZWN0aW9uKHBhZ2UsIHBmbl90b19zZWN0aW9uX25yKHBmbikpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBtZW1kZXNjX3NlY3Rpb24obWVtZGVzY19mbGFnc190IG1kZikKIHsKIAlyZXR1cm4gKG1kZi5mICZndDsmZ3Q7IFNFQ1RJT05TX1BHU0hJRlQpICZhbXA7IFNFQ1RJT05TX01BU0s7CiB9CiAjZWxzZSAvKiAhU0VDVElPTl9JTl9QQUdFX0ZMQUdTICovCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHNldF9wYWdlX3NlY3Rpb25fZnJvbV9wZm4oc3RydWN0IHBhZ2UgKnBhZ2UsCiYjNDM7CQl1bnNpZ25lZCBsb25nIHBmbikKJiM0Mzt7CiYjNDM7fQomIzQzOwogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG1lbWRlc2Nfc2VjdGlvbihtZW1kZXNjX2ZsYWdzX3QgbWRmKQogewogCXJldHVybiAwOwpAQCAtMjc2OCw5ICYjNDM7Mjc3OSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcGFnZV9saW5rcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgZW51bSB6b25lX3R5cGUgem9uZSwKIHsKIAlzZXRfcGFnZV96b25lKHBhZ2UsIHpvbmUpOwogCXNldF9wYWdlX25vZGUocGFnZSwgbm9kZSk7Ci0jaWZkZWYgU0VDVElPTl9JTl9QQUdFX0ZMQUdTCi0Jc2V0X3BhZ2Vfc2VjdGlvbihwYWdlLCBwZm5fdG9fc2VjdGlvbl9ucihwZm4pKTsKLSNlbmRpZgomIzQzOwlzZXRfcGFnZV9zZWN0aW9uX2Zyb21fcGZuKHBhZ2UsIHBmbik7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zdHJpbmcuaCBiL2luY2x1ZGUvbGludXgvc3RyaW5nLmgKaW5kZXggNTcwMmRhY2E0MzI2Yi4uNmNiNWNkZDAxMTU4YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zdHJpbmcuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3N0cmluZy5oCkBAIC0yNzgsNiAmIzQzOzI3OCwxOSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWVtY3B5X2ZsdXNoY2FjaGUodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBjbnQpCiB9CiAjZW5kaWYKIAomIzQzOyNpZm5kZWYgbWVtY3B5X25vbnRlbXBvcmFsCiYjNDM7LyoKJiM0MzsgKiBtZW1jcHlfbm9udGVtcG9yYWwoKSByZXF1ZXN0cyBhIG5vbi10ZW1wb3JhbCBjb3B5IHdoZW4gdGhlCiYjNDM7ICogYXJjaGl0ZWN0dXJlIGhhcyBhIHN1aXRhYmxlIGJhY2tlbmQuIEFyY2hpdGVjdHVyZXMgd2l0aG91dCBhCiYjNDM7ICogc3BlY2lhbGl6ZWQgYmFja2VuZCBmYWxsIGJhY2sgdG8gbWVtY3B5KCkuIEtlZXAgdGhpcyBhcyBhCiYjNDM7ICogZnVuY3Rpb24tbGlrZSBtYWNybyBzbyB0aGUgY29tcGlsZXIgY2FuIHN0aWxsIHNlZSB0aGUgb3JpZ2luYWwKJiM0MzsgKiBtZW1jcHkoKSBjYWxsIHNpdGUgYW5kIHByZXNlcnZlIHRoZSB1c3VhbCBGT1JUSUZZIGNvdmVyYWdlIHdoZW4KJiM0MzsgKiBvYmplY3Qgc2l6ZXMgcmVtYWluIHZpc2libGUgdGhlcmUsIHdoaWxlIGtlZXBpbmcgdGhlIEFQSSB2b2lkLgomIzQzOyAqLwomIzQzOyNkZWZpbmUgbWVtY3B5X25vbnRlbXBvcmFsKGRzdCwgc3JjLCBsZW4pIFwKJiM0MzsJKCh2b2lkKW1lbWNweShkc3QsIHNyYywgbGVuKSkKJiM0MzsjZW5kaWYKJiM0MzsKIHZvaWQgKm1lbWNocl9pbnYoY29uc3Qgdm9pZCAqcywgaW50IGMsIHNpemVfdCBuKTsKIGNoYXIgKnN0cnJlcGxhY2UoY2hhciAqc3RyLCBjaGFyIG9sZCwgY2hhciBuZXcpOwogCmRpZmYgLS1naXQgYS9tbS9tbV9pbml0LmMgYi9tbS9tbV9pbml0LmMKaW5kZXggMGY2NDkwOWU4ZDIwZS4uYmIyMDA3ODA2YTI4NyAxMDA2NDQKLS0tIGEvbW0vbW1faW5pdC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21tX2luaXQuYwpAQCAtMTAwNSwxMSAmIzQzOzEwMDUsMzcgQEAgc3RhdGljIHZvaWQgX19pbml0IG1lbW1hcF9pbml0KHZvaWQpCiB9CiAKICNpZmRlZiBDT05GSUdfWk9ORV9ERVZJQ0UKLXN0YXRpYyB2b2lkIF9fcmVmIF9faW5pdF96b25lX2RldmljZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIHBmbiwKJiM0MzsvKgomIzQzOyAqIFJldHVybiB0cnVlIHdoZW4gbWVtbWFwX2luaXRfem9uZV9kZXZpY2UoKSBtdXN0IGluaXRpYWxpemUgdGhlIHBhZ2UKJiM0MzsgKiByZWZjb3VudCB0byAwLiBNRU1PUllfREVWSUNFX0dFTkVSSUMgcGFnZXMgcmVnYWluIGEgcmVmY291bnQgb2YgMSBpbgomIzQzOyAqIHRoZSBmcmVlIHBhdGgsIHdoaWxlIHRoZSByZW1haW5pbmcgWk9ORV9ERVZJQ0UgdHlwZXMgc3RhcnQgZnJvbSAwIGhlcmUKJiM0MzsgKiBhbmQgcmFpc2UgdGhlIGNvdW50IGFnYWluIHdoZW4gdGhlIGFsbG9jYXRvciBvciBkcml2ZXIgaGFuZHMgdGhlIHBhZ2UKJiM0MzsgKiBvdXQuCiYjNDM7ICovCiYjNDM7c3RhdGljIGlubGluZSBib29sIHBhZ2VtYXBfcmVxdWlyZXNfcmVmY291bnRfcmVzZXQoY29uc3Qgc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcCkKJiM0Mzt7CiYjNDM7CS8qCiYjNDM7CSAqIE1FTU9SWV9ERVZJQ0VfR0VORVJJQyBwYWdlcyByZWdhaW4gYSByZWZjb3VudCBvZiAxIGluIHRoZSBmcmVlCiYjNDM7CSAqIHBhdGguIFRoZSByZW1haW5pbmcgWk9ORV9ERVZJQ0UgdHlwZXMgc3RhcnQgZnJvbSAwIGhlcmUgYW5kIHJhaXNlCiYjNDM7CSAqIHRoZSBjb3VudCBhZ2FpbiB3aGVuIHRoZSBhbGxvY2F0b3Igb3IgZHJpdmVyIGhhbmRzIHRoZSBwYWdlIG91dC4KJiM0MzsJICovCiYjNDM7CXN3aXRjaCAocGdtYXAtJmd0O3R5cGUpIHsKJiM0MzsJY2FzZSBNRU1PUllfREVWSUNFX0ZTX0RBWDoKJiM0MzsJY2FzZSBNRU1PUllfREVWSUNFX1BSSVZBVEU6CiYjNDM7CWNhc2UgTUVNT1JZX0RFVklDRV9DT0hFUkVOVDoKJiM0MzsJY2FzZSBNRU1PUllfREVWSUNFX1BDSV9QMlBETUE6CiYjNDM7CQlyZXR1cm4gdHJ1ZTsKJiM0MzsJY2FzZSBNRU1PUllfREVWSUNFX0dFTkVSSUM6CiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIGZhbHNlOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBfX3JlZiBfX3pvbmVfZGV2aWNlX3BhZ2VfaW5pdChzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBwZm4sCiAJCQkJCSAgdW5zaWduZWQgbG9uZyB6b25lX2lkeCwgaW50IG5pZCwKIAkJCQkJICBzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwKQogewotCiAJX19pbml0X3NpbmdsZV9wYWdlKHBhZ2UsIHBmbiwgem9uZV9pZHgsIG5pZCk7CiAKIAkvKgpAQCAtMTAyOCwyNyAmIzQzOzEwNTQsNTQgQEAgc3RhdGljIHZvaWQgX19yZWYgX19pbml0X3pvbmVfZGV2aWNlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgcGZuLAogCSAqLwogCXBhZ2VfZm9saW8ocGFnZSktJmd0O3BnbWFwID0gcGdtYXA7CiAJcGFnZS0mZ3Q7em9uZV9kZXZpY2VfZGF0YSA9IE5VTEw7CiYjNDM7fQogCi0JLyoKLQkgKiBaT05FX0RFVklDRSBwYWdlcyBvdGhlciB0aGFuIE1FTU9SWV9UWVBFX0dFTkVSSUMgYXJlIHJlbGVhc2VkCi0JICogZGlyZWN0bHkgdG8gdGhlIGRyaXZlciBwYWdlIGFsbG9jYXRvciB3aGljaCB3aWxsIHNldCB0aGUgcGFnZSBjb3VudAotCSAqIHRvIDEgd2hlbiBhbGxvY2F0aW5nIHRoZSBwYWdlLgotCSAqCi0JICogTUVNT1JZX1RZUEVfR0VORVJJQyBhbmQgTUVNT1JZX1RZUEVfRlNfREFYIHBhZ2VzIGF1dG9tYXRpY2FsbHkgaGF2ZQotCSAqIHRoZWlyIHJlZmNvdW50IHJlc2V0IHRvIG9uZSB3aGVuZXZlciB0aGV5IGFyZSBmcmVlZCAoaWUuIGFmdGVyCi0JICogdGhlaXIgcmVmY291bnQgZHJvcHMgdG8gMCkuCi0JICovCi0Jc3dpdGNoIChwZ21hcC0mZ3Q7dHlwZSkgewotCWNhc2UgTUVNT1JZX0RFVklDRV9GU19EQVg6Ci0JY2FzZSBNRU1PUllfREVWSUNFX1BSSVZBVEU6Ci0JY2FzZSBNRU1PUllfREVWSUNFX0NPSEVSRU5UOgotCWNhc2UgTUVNT1JZX0RFVklDRV9QQ0lfUDJQRE1BOgomIzQzO3N0YXRpYyB2b2lkIF9fcmVmIHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9zbG93KHN0cnVjdCBwYWdlICpwYWdlLAomIzQzOwkJdW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgem9uZV9pZHgsIGludCBuaWQsCiYjNDM7CQlzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwKQomIzQzO3sKJiM0MzsJX196b25lX2RldmljZV9wYWdlX2luaXQocGFnZSwgcGZuLCB6b25lX2lkeCwgbmlkLCBwZ21hcCk7CiYjNDM7CWlmIChwYWdlbWFwX3JlcXVpcmVzX3JlZmNvdW50X3Jlc2V0KHBnbWFwKSkKIAkJc2V0X3BhZ2VfY291bnQocGFnZSwgMCk7Ci0JCWJyZWFrOwomIzQzO30KIAotCWNhc2UgTUVNT1JZX0RFVklDRV9HRU5FUklDOgotCQlicmVhazsKLQl9CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHpvbmVfZGV2aWNlX3RhaWxfcGFnZV9pbml0KHN0cnVjdCBwYWdlICpwYWdlLAomIzQzOwkJdW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgem9uZV9pZHgsIGludCBuaWQsCiYjNDM7CQlzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwLCBjb25zdCBzdHJ1Y3QgcGFnZSAqaGVhZCwKJiM0MzsJCXVuc2lnbmVkIGludCBvcmRlcikKJiM0Mzt7CiYjNDM7CXpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9zbG93KHBhZ2UsIHBmbiwgem9uZV9pZHgsIG5pZCwgcGdtYXApOwomIzQzOwlwcmVwX2NvbXBvdW5kX3RhaWwocGFnZSwgaGVhZCwgb3JkZXIpOwomIzQzOwlzZXRfcGFnZV9jb3VudChwYWdlLCAwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiAmIzM5O3RlbXBsYXRlJiMzOTsgaXMgYSByZXVzYWJsZSBwYWdlIHByb3RvdHlwZSByYXRoZXIgdGhhbiBhIHN0cmljdGx5IGltbXV0YWJsZQomIzQzOyAqIG9iamVjdC4gTW9zdCBaT05FX0RFVklDRSBmaWVsZHMgc3RheSBjb25zdGFudCBhY3Jvc3MgdGhlIHBhZ2VzIGNvdmVyZWQgYnkKJiM0MzsgKiB0aGUgY3VycmVudCB0ZW1wbGF0ZSwgYnV0IHNlY3Rpb24gYml0cyBhbmQgcGFnZS0mZ3Q7dmlydHVhbCBtYXkgc3RpbGwgZGVwZW5kCiYjNDM7ICogb24gdGhlIFBGTi4gUmVmcmVzaCB0aG9zZSBQRk4tZGVwZW5kZW50IGZpZWxkcyBpbiB0aGUgdGVtcGxhdGUgYmVmb3JlCiYjNDM7ICogY29weWluZyBpdCBpbnRvIEBwYWdlLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCB6b25lX2RldmljZV9wYWdlX3VwZGF0ZV90ZW1wbGF0ZShzdHJ1Y3QgcGFnZSAqdGVtcGxhdGUsCiYjNDM7CQl1bnNpZ25lZCBsb25nIHBmbikKJiM0Mzt7CiYjNDM7CXNldF9wYWdlX3NlY3Rpb25fZnJvbV9wZm4odGVtcGxhdGUsIHBmbik7CiYjNDM7I2lmZGVmIFdBTlRfUEFHRV9WSVJUVUFMCiYjNDM7CWlmICghaXNfaGlnaG1lbV9pZHgoWk9ORV9ERVZJQ0UpKQomIzQzOwkJc2V0X3BhZ2VfYWRkcmVzcyh0ZW1wbGF0ZSwgX192YShwZm4gJmx0OyZsdDsgUEFHRV9TSElGVCkpOwomIzQzOyNlbmRpZgomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB6b25lX2RldmljZV9wYWdlX2luaXRfZnJvbV90ZW1wbGF0ZShzdHJ1Y3QgcGFnZSAqcGFnZSwKJiM0MzsJCXVuc2lnbmVkIGxvbmcgcGZuLCBzdHJ1Y3QgcGFnZSAqdGVtcGxhdGUpCiYjNDM7ewomIzQzOwkvKgomIzQzOwkgKiAmIzM5O3RlbXBsYXRlJiMzOTsgY2FycmllcyB0aGUgaW52YXJpYW50IHBvcnRpb24gb2YgYSBaT05FX0RFVklDRSBzdHJ1Y3QKJiM0MzsJICogcGFnZS4gVXBkYXRlIHRoZSBQRk4tZGVwZW5kZW50IGZpZWxkcyBpbiBwbGFjZSBiZWZvcmUgY29weWluZyBpdAomIzQzOwkgKiB0byB0aGUgZGVzdGluYXRpb24gcGFnZS4KJiM0MzsJICovCiYjNDM7CXpvbmVfZGV2aWNlX3BhZ2VfdXBkYXRlX3RlbXBsYXRlKHRlbXBsYXRlLCBwZm4pOwomIzQzOwltZW1jcHlfbm9udGVtcG9yYWwocGFnZSwgdGVtcGxhdGUsIHNpemVvZigqcGFnZSkpOwogfQogCiAvKgpAQCAtMTA4Myw2ICYjNDM7MTEzNiw3IEBAIHN0YXRpYyB2b2lkIF9fcmVmIG1lbW1hcF9pbml0X2NvbXBvdW5kKHN0cnVjdCBwYWdlICpoZWFkLAogewogCXVuc2lnbmVkIGxvbmcgcGZuLCBlbmRfcGZuID0gaGVhZF9wZm4gJiM0MzsgbnJfcGFnZXM7CiAJdW5zaWduZWQgaW50IG9yZGVyID0gcGdtYXAtJmd0O3ZtZW1tYXBfc2hpZnQ7CiYjNDM7CXN0cnVjdCBwYWdlIHRlbXBsYXRlOwogCiAJLyoKIAkgKiBXZSBoYXZlIHRvIGluaXRpYWxpemUgdGhlIHBhZ2VzLCBpbmNsdWRpbmcgc2V0dGluZyB1cCBwYWdlIGxpbmtzLgpAQCAtMTA5MSwxMiAmIzQzOzExNDUsMjYgQEAgc3RhdGljIHZvaWQgX19yZWYgbWVtbWFwX2luaXRfY29tcG91bmQoc3RydWN0IHBhZ2UgKmhlYWQsCiAJICogdGhlIHBhZ2VzIGluIHRoZSBzYW1lIGdvLgogCSAqLwogCV9fU2V0UGFnZUhlYWQoaGVhZCk7CiYjNDM7CiAJZm9yIChwZm4gPSBoZWFkX3BmbiAmIzQzOyAxOyBwZm4gJmx0OyBlbmRfcGZuOyBwZm4mIzQzOyYjNDM7KSB7CiAJCXN0cnVjdCBwYWdlICpwYWdlID0gcGZuX3RvX3BhZ2UocGZuKTsKIAotCQlfX2luaXRfem9uZV9kZXZpY2VfcGFnZShwYWdlLCBwZm4sIHpvbmVfaWR4LCBuaWQsIHBnbWFwKTsKLQkJcHJlcF9jb21wb3VuZF90YWlsKHBhZ2UsIGhlYWQsIG9yZGVyKTsKLQkJc2V0X3BhZ2VfY291bnQocGFnZSwgMCk7CiYjNDM7CQlpZiAocGZuID09IGhlYWRfcGZuICYjNDM7IDEpIHsKJiM0MzsJCQkvKgomIzQzOwkJCSAqIEFsbCB0YWlscyBvZiB0aGUgc2FtZSBjb21wb3VuZCBwYWdlIHNoYXJlIHRoZQomIzQzOwkJCSAqIHN0YXRlIGVzdGFibGlzaGVkIGJ5IHByZXBfY29tcG91bmRfdGFpbCgpLiBSZXVzZQomIzQzOwkJCSAqIG9uZSB0YWlsIHRlbXBsYXRlIGZvciB0aGUgd2hvbGUgcmFuZ2UgYW5kCiYjNDM7CQkJICogcmVmcmVzaCBvbmx5IHRoZSBQRk4tZGVwZW5kZW50IGZpZWxkcyBpbiB0aGF0CiYjNDM7CQkJICogdGVtcGxhdGUgYmVmb3JlIGVhY2ggY29weS4KJiM0MzsJCQkgKi8KJiM0MzsJCQl6b25lX2RldmljZV90YWlsX3BhZ2VfaW5pdChwYWdlLCBwZm4sIHpvbmVfaWR4LCBuaWQsCiYjNDM7CQkJCQkJICAgcGdtYXAsIGhlYWQsIG9yZGVyKTsKJiM0MzsJCQkvKiBpbml0IHRlbXBsYXRlIHBhZ2UgKi8KJiM0MzsJCQltZW1jcHkoJmFtcDt0ZW1wbGF0ZSwgcGFnZSwgc2l6ZW9mKCpwYWdlKSk7CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCXpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9mcm9tX3RlbXBsYXRlKHBhZ2UsIHBmbiwKJiM0MzsJCQkJCQkJICAgICZhbXA7dGVtcGxhdGUpOwomIzQzOwkJfQogCX0KIAlwcmVwX2NvbXBvdW5kX2hlYWQoaGVhZCwgb3JkZXIpOwogfQpAQCAtMTExMyw2ICYjNDM7MTE4MSw3IEBAIHZvaWQgX19yZWYgbWVtbWFwX2luaXRfem9uZV9kZXZpY2Uoc3RydWN0IHpvbmUgKnpvbmUsCiAJdW5zaWduZWQgbG9uZyB6b25lX2lkeCA9IHpvbmVfaWR4KHpvbmUpOwogCXVuc2lnbmVkIGxvbmcgc3RhcnQgPSBqaWZmaWVzOwogCWludCBuaWQgPSBwZ2RhdC0mZ3Q7bm9kZV9pZDsKJiM0MzsJc3RydWN0IHBhZ2UgdGVtcGxhdGU7CiAKIAlpZiAoV0FSTl9PTl9PTkNFKCFwZ21hcCB8fCB6b25lX2lkeCAhPSBaT05FX0RFVklDRSkpCiAJCXJldHVybjsKQEAgLTExMzAsNyAmIzQzOzExOTksMjIgQEAgdm9pZCBfX3JlZiBtZW1tYXBfaW5pdF96b25lX2RldmljZShzdHJ1Y3Qgem9uZSAqem9uZSwKIAlmb3IgKHBmbiA9IHN0YXJ0X3BmbjsgcGZuICZsdDsgZW5kX3BmbjsgcGZuICYjNDM7PSBwZm5zX3Blcl9jb21wb3VuZCkgewogCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHBmbl90b19wYWdlKHBmbik7CiAKLQkJX19pbml0X3pvbmVfZGV2aWNlX3BhZ2UocGFnZSwgcGZuLCB6b25lX2lkeCwgbmlkLCBwZ21hcCk7CiYjNDM7CQlpZiAocGZuID09IHN0YXJ0X3BmbikgewomIzQzOwkJCS8qCiYjNDM7CQkJICogU2VlZCB0aGUgcmV1c2FibGUgaGVhZC1wYWdlIHRlbXBsYXRlIGZyb20gdGhlCiYjNDM7CQkJICogZmlyc3QgcmVhbCBzdHJ1Y3QgcGFnZS4gVGhpcyBpbml0aWFsaXplcyB0aGUKJiM0MzsJCQkgKiBmaXJzdCBwYWdlIHRocm91Z2ggdGhlIGV4aXN0aW5nIHNsb3cgcGF0aCBhbmQKJiM0MzsJCQkgKiB0aGVuIHJldXNlcyB0aGF0IGZpbmFsIHN0YXRlIGFzIHRoZSB0ZW1wbGF0ZQomIzQzOwkJCSAqIGZvciBzdWJzZXF1ZW50IHBhZ2VzLgomIzQzOwkJCSAqLwomIzQzOwkJCXpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9zbG93KHBhZ2UsIHBmbiwgem9uZV9pZHgsCiYjNDM7CQkJCQkJICAgbmlkLCBwZ21hcCk7CiYjNDM7CQkJLyogaW5pdCB0ZW1wbGF0ZSBwYWdlICovCiYjNDM7CQkJbWVtY3B5KCZhbXA7dGVtcGxhdGUsIHBhZ2UsIHNpemVvZigqcGFnZSkpOwomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQl6b25lX2RldmljZV9wYWdlX2luaXRfZnJvbV90ZW1wbGF0ZShwYWdlLCBwZm4sCiYjNDM7CQkJCQkJCSAgICAmYW1wO3RlbXBsYXRlKTsKJiM0MzsJCX0KIAogCQlpZiAoSVNfQUxJR05FRChwZm4sIFBBR0VTX1BFUl9TRUNUSU9OKSkKIAkJCWNvbmRfcmVzY2hlZCgpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAwNzo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1OTI5CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMzY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBhdGNoOiBgc3RydWN0IHBhZ2VgIEluaXRpYWxpemF0aW9uIGZvciBgWk9ORV9ERVZJQ0VgKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIHRoZSBgc3RydWN0IHBhZ2VgIGluaXRpYWxpemF0aW9uIHByb2Nlc3Mgc3BlY2lmaWNhbGx5IGZvciBgWk9ORV9ERVZJQ0VgIG1lbW9yeS4gSXQgc2VlbXMgbGlrZSB0aGUgY29yZSBjaGFuZ2UgaXMgdGhlIGludHJvZHVjdGlvbiBvZiBgbWVtY3B5X25vbnRlbXBvcmFsYCB0byBhY2NlbGVyYXRlIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAgYnkgY29weWluZyBhIHRlbXBsYXRlIGBzdHJ1Y3QgcGFnZWAuIFRoYXQmIzM5O3MgYSBjbGFzc2ljIG9wdGltaXphdGlvbiB0ZWNobmlxdWUsIHRyeWluZyB0byBhdm9pZCBjYWNoZSBwb2xsdXRpb24gZHVyaW5nIG1lbW9yeSBpbml0aWFsaXphdGlvbi4gVGhlIGNoYW5nZXMgYXJlIHNwcmVhZCBhY3Jvc3MgYSBmZXcgZmlsZXM6IHRoZSB4ODYgYXNzZW1ibHkgaGVhZGVyLCBzb21lIGNvcmUgbW0gaGVhZGVycywgYSBzdHJpbmcgaGFuZGxpbmcgaGVhZGVyLCBhbmQgdGhlIG1tIGluaXRpYWxpemF0aW9uIGNvZGUgaXRzZWxmLgoKTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGNhbiB3ZSAqcmVhY2gqIHRoaXMgY29kZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBgWk9ORV9ERVZJQ0VgIGlzIHVzdWFsbHkgYXNzb2NpYXRlZCB3aXRoIERBWCwgcGVyc2lzdGVudCBtZW1vcnksIGFuZCBkZXZpY2VzIHRoYXQgdXNlIFBDSSBwZWVyLXRvLXBlZXIgRE1BLiBXZSBjYW4gcHJvYmFibHkgdHJpZ2dlciB0aGlzIGluIFFFTVUgYmVjYXVzZSBpdCBzdXBwb3J0cyBlbXVsYXRpbmcgTlZESU1NcyAod2hpY2ggdXNlIERBWCkgYW5kIHBvdGVudGlhbGx5IFBNRU0gZGV2aWNlcy4gVGhlIGBaT05FX0RFVklDRWAgaXMgYWxzbyB0b3VjaGVkIGJ5IGBkYXhgIG9yIGBwYWdlbWFwYCB0ZXN0cy4KCklzIGZ1enppbmcgdGhpcyB3b3J0aCB0aGUgZWZmb3J0PyBBYnNvbHV0ZWx5LiBJdOKAmXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBpbml0aWFsaXphdGlvbiwgc3BlY2lmaWNhbGx5IGZvciBtZW1vcnkgaG90cGx1ZyBvciBkZXZpY2UgbWVtb3J5LiBUaGlzIG1lYW5zIGl04oCZcyBoYW5kbGluZyBjcml0aWNhbCBwYXJ0cyBvZiB0aGUgc3lzdGVtIHdoZW4gbmV3IG1lbW9yeSBpcyBhZGRlZCBvciBkZXZpY2VzIGFyZSBpbml0aWFsaXplZC4gVGhhdCYjMzk7cyBhIGp1aWN5IHRhcmdldCBmb3IgZmluZGluZyBzdWJ0bGUgbWVtb3J5IGNvcnJ1cHRpb24gYnVncy4gVGhlIGZ1bmN0aW9uIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAgZ2V0cyBjYWxsZWQgZHVyaW5nIG1lbW9yeSBob3RwbHVnIG9yIGRldmljZSBpbml0aWFsaXphdGlvbiwgdGhpbmsgYGRldm1fbWVtcmVtYXBfcGFnZXNgIGFuZCBzaW1pbGFyIGZ1bmN0aW9ucy4KCkNhbiBzeXprYWxsZXIgdHJpZ2dlciB0aGlzPyBQb3RlbnRpYWxseSwgeWVzLiBTeXprYWxsZXIgY2FuIHByb2JhYmx5IGludGVyYWN0IHdpdGggYC9zeXMvYnVzL25kYCBvciBzb21ldGhpbmcgc2ltaWxhciB0byB0cmlnZ2VyIHRoaXMsIG9yIGl0IG1pZ2h0IGdldCBoaXQgZHVyaW5nIGJvb3QgaWYgd2UgY29uZmlndXJlIE5WRElNTSBpbiBRRU1VLiBTeXprYWxsZXIgbWlnaHQgbm90IGVuYWJsZSBOVkRJTU0gYnkgZGVmYXVsdCwgdW5sZXNzIGl04oCZcyBzcGVjaWZpY2FsbHkgY29uZmlndXJlZC4gQnV0IGhleSwgaXQmIzM5O3Mgb2Z0ZW4gZW5hYmxlZCBiZWNhdXNlIG9mIGBDT05GSUdfWk9ORV9ERVZJQ0VgLiBTbywgdGhlIHBvdGVudGlhbCBhdHRhY2sgc3VyZmFjZSBpcyBiaWdnZXIgdGhhbiBJJiMzOTtkIG9yaWdpbmFsbHkgdGhvdWdodC4KCk9rYXksIG5leHQgc3RlcCBpcyB0byBsb29rIGF0IHRoZSBvdGhlciBjYWxsZXJzIG9mIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAgdG8gc2VlIGhvdyBlbHNlIHRoaXMgZnVuY3Rpb24gaXMgdHJpZ2dlcmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDA3OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbW1hcF9pbml0X3pvbmVfZGV2aWNlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbW16b25lLmg9MTMxMT1zdGF0aWMgaW5saW5lIGJvb2wgem9uZV9kZXZpY2VfcGFnZXNfaGF2ZV9zYW1lX3BnbWFwKGNvbnN0IHN0cnVjdCBwYWdlICphLFxuLS1cbmluY2x1ZGUvbGludXgvbW16b25lLmgtMTMyMC1cbmluY2x1ZGUvbGludXgvbW16b25lLmg6MTMyMTpleHRlcm4gdm9pZCBtZW1tYXBfaW5pdF96b25lX2RldmljZShzdHJ1Y3Qgem9uZSAqLCB1bnNpZ25lZCBsb25nLFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC0xMzIyLVx0XHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcsIHN0cnVjdCBkZXZfcGFnZW1hcCAqKTtcbi0tXG5tbS9tZW1yZW1hcC5jPTE0ND1zdGF0aWMgaW50IHBhZ2VtYXBfcmFuZ2Uoc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcCwgc3RydWN0IG1ocF9wYXJhbXMgKnBhcmFtcyxcbi0tXG5tbS9tZW1yZW1hcC5jLTI0MS1cdCAqL1xubW0vbWVtcmVtYXAuYzoyNDI6XHRtZW1tYXBfaW5pdF96b25lX2RldmljZShcdTAwMjZOT0RFX0RBVEEobmlkKS1cdTAwM2Vub2RlX3pvbmVzW1pPTkVfREVWSUNFXSxcbm1tL21lbXJlbWFwLmMtMjQzLVx0XHRcdFx0UEhZU19QRk4ocmFuZ2UtXHUwMDNlc3RhcnQpLFxuLS1cbm1tL21tX2luaXQuYz05Njg9c3RhdGljIHZvaWQgX19pbml0IG1lbW1hcF9pbml0KHZvaWQpXG4tLVxubW0vbW1faW5pdC5jLTEwMDgtLypcbm1tL21tX2luaXQuYzoxMDA5OiAqIFJldHVybiB0cnVlIHdoZW4gbWVtbWFwX2luaXRfem9uZV9kZXZpY2UoKSBtdXN0IGluaXRpYWxpemUgdGhlIHBhZ2Vcbm1tL21tX2luaXQuYy0xMDEwLSAqIHJlZmNvdW50IHRvIDAuIE1FTU9SWV9ERVZJQ0VfR0VORVJJQyBwYWdlcyByZWdhaW4gYSByZWZjb3VudCBvZiAxIGluXG4tLVxubW0vbW1faW5pdC5jPTExMzE9c3RhdGljIHZvaWQgX19yZWYgbWVtbWFwX2luaXRfY29tcG91bmQoc3RydWN0IHBhZ2UgKmhlYWQsXG4tLVxubW0vbW1faW5pdC5jLTExNzEtXG5tbS9tbV9pbml0LmM6MTE3Mjp2b2lkIF9fcmVmIG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlKHN0cnVjdCB6b25lICp6b25lLFxubW0vbW1faW5pdC5jLTExNzMtXHRcdFx0XHQgICB1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAwNzo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MjQxCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRlY29uc3RydWN0aW5nIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAqKgoKT2theSwgc28gYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYCBpcyBiZWluZyBjYWxsZWQgZnJvbSBgcGFnZW1hcF9yYW5nZWAgd2l0aGluIGBtbS9tZW1yZW1hcC5jYC4gSG1tLCBgbW0vbWVtcmVtYXAuY2AgaXMgdXN1YWxseSBpbnZvbHZlZCBpbiByZW1hcHBpbmcgbWVtb3J5IHJlZ2lvbnMuIFRoYXQmIzM5O3MgaW50ZXJlc3RpbmcsIGFuZCBpdCBzdWdnZXN0cyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGRldmljZSBtZW1vcnkgbWFwcGluZyBpbiBzb21lIGNhcGFjaXR5LiBUbyB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IGJldHRlciwgSSBuZWVkIHRvIHRyYWNlICp3aHkqIGBwYWdlbWFwX3JhbmdlYCBpcyBiZWluZyB1c2VkLiBXaGF0JiMzOTtzIGNhbGxpbmcgKml0Kj8gVGhhdCYjMzk7cyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGZ1bGwgcGljdHVyZSBoZXJlLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgdXBzdHJlYW0gY2FsbGVycyBvZiBgcGFnZW1hcF9yYW5nZWAuIFRoaXMgd2lsbCBpbGx1bWluYXRlIHdoYXQgb3BlcmF0aW9ucyBhcmUgdHJpZ2dlcmluZyB0aGlzIG1lbW9yeSByZW1hcHBpbmcgYmVoYXZpb3IgYW5kIHdoeSB3ZSYjMzk7cmUgc3BlY2lmaWNhbGx5IGluaXRpYWxpemluZyBhIHpvbmUgZGV2aWNlLiBUaGlzIGNvbnRleHQgd2lsbCBiZSBjcnVjaWFsIGZvciBhbnkgZnVydGhlciBkZWJ1Z2dpbmcgb3IgYW5hbHlzaXMuIExldCYjMzk7cyBzZWUuLi4gYmFja3RyYWNlIG9yIGNyb3NzLXJlZmVyZW5jZSwgaXQgaXMhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMDc6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGFnZW1hcF9yYW5nZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1yZW1hcC5jPTEzNz1zdGF0aWMgdm9pZCBkZXZfcGFnZW1hcF9wZXJjcHVfcmVsZWFzZShzdHJ1Y3QgcGVyY3B1X3JlZiAqcmVmKVxuLS1cbm1tL21lbXJlbWFwLmMtMTQzLVxubW0vbWVtcmVtYXAuYzoxNDQ6c3RhdGljIGludCBwYWdlbWFwX3JhbmdlKHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXAsIHN0cnVjdCBtaHBfcGFyYW1zICpwYXJhbXMsXG5tbS9tZW1yZW1hcC5jLTE0NS1cdFx0aW50IHJhbmdlX2lkLCBpbnQgbmlkKVxuLS1cbm1tL21lbXJlbWFwLmM9MjY2PXZvaWQgKm1lbXJlbWFwX3BhZ2VzKHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXAsIGludCBuaWQpXG4tLVxubW0vbWVtcmVtYXAuYy0zMzctXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9yYW5nZTsgaSYjNDM7JiM0MzspIHtcbm1tL21lbXJlbWFwLmM6MzM4Olx0XHRlcnJvciA9IHBhZ2VtYXBfcmFuZ2UocGdtYXAsIFx1MDAyNnBhcmFtcywgaSwgbmlkKTtcbm1tL21lbXJlbWFwLmMtMzM5LVx0XHRpZiAoZXJyb3IpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMDc6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzc1MwoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipUaGlua2luZyBUaHJvdWdoIG1lbXJlbWFwX3BhZ2VzKioKClJpZ2h0LCBzbyBgbWVtcmVtYXBfcGFnZXNgIGlzIGJlaW5nIGNhbGxlZCBieSAqZHJpdmVycyouIFRoYXQmIzM5O3MgdGhlIGtleSBzdGFydGluZyBwb2ludC4gSXQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhpcyBmdW5jdGlvbiBpcyBhIGNyaXRpY2FsIHBpZWNlIG9mIHRoZSBrZXJuZWwmIzM5O3MgbWVtb3J5IG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSBjb25jZXJuaW5nIGhvdyBoYXJkd2FyZSBpbnRlcmFjdHMgd2l0aCB0aGUgc3lzdGVtJiMzOTtzIG1lbW9yeSBzcGFjZS4gRHJpdmVycywgYnkgdGhlaXIgdmVyeSBuYXR1cmUsIGFyZSByZXNwb25zaWJsZSBmb3IgaW50ZXJmYWNpbmcgd2l0aCBwaHlzaWNhbCBkZXZpY2VzLCBhbmQgb2Z0ZW4gbmVlZCB0byBtYXAgcGh5c2ljYWwgbWVtb3J5IHJlZ2lvbnMgaW50byB0aGUgdmlydHVhbCBhZGRyZXNzIHNwYWNlIG9mIHRoZSBrZXJuZWwsIG9yIHBvdGVudGlhbGx5IGV2ZW4gdXNlciBzcGFjZSwgZm9yIERNQSBvcGVyYXRpb25zIG9yIGRpcmVjdCBhY2Nlc3MuCgpNeSBtaW5kIGltbWVkaWF0ZWx5IHN0YXJ0cyB0aWNraW5nIHRocm91Z2ggdGhlIGltcGxpY2F0aW9uczogV2hhdCBraW5kIG9mIGRyaXZlcnM/IEFyZSB3ZSB0YWxraW5nIGFib3V0IG5ldHdvcmsgYWRhcHRlcnMgbWFwcGluZyBidWZmZXJzLCBncmFwaGljcyBjYXJkcyBoYW5kbGluZyBmcmFtZWJ1ZmZlcnMsIG9yIHN0b3JhZ2UgY29udHJvbGxlcnMgZGVhbGluZyB3aXRoIGRpc2sgc2VjdG9ycz8gVGhlIHNwZWNpZmljcyBtYXR0ZXIgZm9yIHBlcmZvcm1hbmNlIGFuZCBzZWN1cml0eS4gSXMgdGhpcyBhIGNvbW1vbiBvcGVyYXRpb24gb3Igc29tZXRoaW5nIHJlbGF0aXZlbHkgcmFyZT8gVGhlIGZyZXF1ZW5jeSBvZiBpdHMgdXNlIHdpbGwgZ2l2ZSBhIGNsdWUgYXMgdG8gaXRzIGNyaXRpY2FsaXR5IGZvciBvcHRpbWl6YXRpb24uCgpJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uc3RyYWludHMuIEhvdyBsYXJnZSBhcmUgdGhlIG1lbW9yeSByZWdpb25zIGJlaW5nIG1hcHBlZD8gQXJlIHdlIHRhbGtpbmcgYWJvdXQgc2luZ2xlIHBhZ2VzLCBvciBwb3RlbnRpYWxseSBodWdlIGJsb2Nrcz8gTGFyZ2VyIHJlZ2lvbnMgaW1wbHkgcG90ZW50aWFsIGZvciBtb3JlIGNvbXBsZXggcGFnZSB0YWJsZSBtYW5pcHVsYXRpb25zIGFuZCByZXNvdXJjZSBjb250ZW50aW9uLiBBbmQgaXMgaXQgYW4gYXJlYSBvZiBtZW1vcnkgdGhhdCBpcyBzaGFyZWQgYmV0d2VlbiB1c2VyIGFuZCBrZXJuZWwsIG9yIGlzIHRoaXMgbWFwcGluZyBwdXJlbHkga2VybmVsIHNwYWNlPyBTaGFyZWQgcmVnaW9ucyBjYW4gb3BlbiB1cCB2dWxuZXJhYmlsaXRpZXMgaWYgbm90IGhhbmRsZWQgY29ycmVjdGx5LgoKSSYjMzk7bSBhbHNvIGNvbnNpZGVyaW5nIHRoZSBwb3RlbnRpYWwgZm9yIGVycm9ycy4gV2hhdCBlcnJvciBoYW5kbGluZyBpcyBpbiBwbGFjZT8gQXJlIHdlIGNoZWNraW5nIGZvciB2YWxpZCBwaHlzaWNhbCBhZGRyZXNzZXM/IFdoYXQgaGFwcGVucyBpZiB0aGUgbWFwcGluZyBmYWlscyDigJMgZG9lcyBpdCBncmFjZWZ1bGx5IGRlZ3JhZGUsIG9yIGNvdWxkIGl0IGxlYWQgdG8gc3lzdGVtIGluc3RhYmlsaXR5PyBTZWN1cml0eSBpbXBsaWNhdGlvbnMgYXJlIGFub3RoZXIgaW1wb3J0YW50IGFzcGVjdCB0byBjb25zaWRlciBoZXJlIC0gYXJlIHRoZXJlIGNoZWNrcyBpbiBwbGFjZSB0byBlbnN1cmUgdGhhdCB0aGUgZHJpdmVyIGNhbiBhY3R1YWxseSBhY2Nlc3MgdGhlIHJlcXVlc3RlZCBtZW1vcnk/IElzIHRoZXJlIGEgcmlzayBvZiBtZW1vcnkgbGVha3MgaWYgbWFwcGluZ3MgYXJlIG5vdCBwcm9wZXJseSB1bm1hcHBlZD8gVGhlIHJldHVybiB2YWx1ZSBvZiB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUgYSBrZXkgcGllY2Ugb2YgaW5mb3JtYXRpb24uCgpFc3NlbnRpYWxseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgKndoeSogb2YgdGhpcyBmdW5jdGlvbiBjYWxsLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoZSBkcml2ZXIgaXMgdHJ5aW5nIHRvICphY2hpZXZlKiB3aXRoIGBtZW1yZW1hcF9wYWdlc2AuIEtub3dpbmcgdGhhdCB3aWxsIGVuYWJsZSBtZSB0byBzZWUgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIGFuZCBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMuIEkmIzM5O20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgdGhlIGZvbGxvdy11cCBxdWVzdGlvbnM6IHdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgZm9yIE5VTUEgc3lzdGVtcywgYW5kIGhvdyBkb2VzIHRoaXMgZnVuY3Rpb24gaGFuZGxlIHBhZ2UgY2FjaGluZyBhbmQgY29oZXJlbmNlPyBUaW1lIHRvIGRpZyBpbnRvIHRoZSBzb3VyY2UgYW5kIHNlZSB3aGF0JiMzOTtzIHJlYWxseSBoYXBwZW5pbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMDc6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVtcmVtYXBfcGFnZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0PTI3ND1UaGVzZSBjYW4gYmUgYWxsb2NhdGVkIGFuZCBmcmVlZCB3aXRoOjpcbi0tXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMjg1LSAgICBwYWdlbWFwLm9wcyA9IFx1MDAyNmRldmljZV9kZXZtZW1fb3BzO1xuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0OjI4NjogICAgbWVtcmVtYXBfcGFnZXMoXHUwMDI2cGFnZW1hcCwgbnVtYV9ub2RlX2lkKCkpO1xuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTI4Ny1cbi0tXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMjkwLVxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0OjI5MTpUaGVyZSBhcmUgYWxzbyBkZXZtX3JlcXVlc3RfZnJlZV9tZW1fcmVnaW9uKCksIGRldm1fbWVtcmVtYXBfcGFnZXMoKSxcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0yOTItZGV2bV9tZW11bm1hcF9wYWdlcygpLCBhbmQgZGV2bV9yZWxlYXNlX21lbV9yZWdpb24oKSB3aGVuIHRoZSByZXNvdXJjZXMgY2FuXG4tLVxuRG9jdW1lbnRhdGlvbi9tbS9tZW1vcnktbW9kZWwucnN0PTE0MT10byBrZWVwIHRoZSBtZW1vcnkgcGlubmVkIGZvciBhY3RpdmUgdXNlLiBgWk9ORV9ERVZJQ0VgLCB2aWFcbkRvY3VtZW50YXRpb24vbW0vbWVtb3J5LW1vZGVsLnJzdDoxNDI6OmM6ZnVuYzpgZGV2bV9tZW1yZW1hcF9wYWdlc2AsIHBlcmZvcm1zIGp1c3QgZW5vdWdoIG1lbW9yeSBob3RwbHVnIHRvXG5Eb2N1bWVudGF0aW9uL21tL21lbW9yeS1tb2RlbC5yc3QtMTQzLXR1cm4gb24gOmM6ZnVuYzpgcGZuX3RvX3BhZ2VgLCA6YzpmdW5jOmBwYWdlX3RvX3BmbmAsIGFuZFxuLS1cbkRvY3VtZW50YXRpb24vbW0vbWVtb3J5LW1vZGVsLnJzdD0xNTc9bWVtb3J5IGhvdHBsdWcuIFN1Yi1zZWN0aW9uIHN1cHBvcnQgYWxsb3dzIGZvciAyTUIgYXMgdGhlIGNyb3NzLWFyY2hcbkRvY3VtZW50YXRpb24vbW0vbWVtb3J5LW1vZGVsLnJzdDoxNTg6Y29tbW9uIGFsaWdubWVudCBncmFudWxhcml0eSBmb3IgOmM6ZnVuYzpgZGV2bV9tZW1yZW1hcF9wYWdlc2AuXG5Eb2N1bWVudGF0aW9uL21tL21lbW9yeS1tb2RlbC5yc3QtMTU5LVxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3Q9MjIwPW1pZ3JhdGVfdm1hX2ZpbmFsaXplKCkg5Ye95pWw5peo5Zyo5L2/6amx5Yqo56iL5bqP5pu05piT5LqO57yW5YaZ5bm26ZuG5Lit6Leo6amx5Yqo56iL5bqP55qE6YCa55So5Luj56CB44CCXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdC0yMzYtICAgIHBhZ2VtYXAub3BzID0gXHUwMDI2ZGV2aWNlX2Rldm1lbV9vcHM7XG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0OjIzNzogICAgbWVtcmVtYXBfcGFnZXMoXHUwMDI2cGFnZW1hcCwgbnVtYV9ub2RlX2lkKCkpO1xuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdC0yMzgtXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdC0yNDEtXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0OjI0Mjrov5jmnIlkZXZtX3JlcXVlc3RfZnJlZV9tZW1fcmVnaW9uKCksIGRldm1fbWVtcmVtYXBfcGFnZXMoKSxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3QtMjQzLWRldm1fbWVtdW5tYXBfcGFnZXMoKSDlkowgZGV2bV9yZWxlYXNlX21lbV9yZWdpb24oKSDlvZPotYTmupDlj6/ku6Xnu5HlrprliLAgYGBzdHJ1Y3QgZGV2aWNlYGAuXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vbWVtb3J5LW1vZGVsLnJzdD0xMDc9Wk9ORV9ERVZJQ0Vcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9tZW1vcnktbW9kZWwucnN0LTExMS3kuovlrp7mnInlhbPvvJrov5nkupvlnLDlnYDojIPlm7TnmoTpobXpnaLlr7nosaHku47mnKrooqvlnKjnur/moIforrDov4fvvIzogIzkuJTlv4Xpobvlr7norr7lpIfov5vooYzlvJXnlKjvvIzogIzkuI3ku4Xku4VcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL21lbW9yeS1tb2RlbC5yc3Q6MTEyOuaYr+mhtemdou+8jOS7peS/neaMgeWGheWtmOiiq+KAnOmUgeWumuKAneS7peS+v+S9v+eUqOOAgiBgWk9ORV9ERVZJQ0VgIO+8jOmAmui/hyA6YzpmdW5jOmBkZXZtX21lbXJlbWFwX3BhZ2VzYCDvvIxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL21lbW9yeS1tb2RlbC5yc3QtMTEzLeS4uue7meWumueahHBmbnPojIPlm7TmiafooYzotrPlpJ/nmoTlhoXlrZjng63mj5Lmi5TmnaXlvIDlkK8gOmM6ZnVuYzpgcGZuX3RvX3BhZ2Vg77yMXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vbWVtb3J5LW1vZGVsLnJzdC0xMjItOmM6ZnVuYzpgYXJjaF9hZGRfbWVtb3J5YCDvvIzljbPlhoXlrZjng63mj5Lmi5TnmoTkuIrljYrpg6jliIbjgILlrZDmrrXmlK/mjIHlhYHorrgyTULkvZzkuLpcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL21lbW9yeS1tb2RlbC5yc3Q6MTIzOjpjOmZ1bmM6YGRldm1fbWVtcmVtYXBfcGFnZXNgIOeahOi3qOaetuaehOmAmueUqOWvuem9kOmil+eykuW6puOAglxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vbWVtb3J5LW1vZGVsLnJzdC0xMjQtXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfdXZtZW0uYz0xMTU4PWludCBrdm1wcGNfdXZtZW1faW5pdCh2b2lkKVxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3V2bWVtLmMtMTE4OS1cdGt2bXBwY191dm1lbV9wZ21hcC5vd25lciA9IFx1MDAyNmt2bXBwY191dm1lbV9wZ21hcDtcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3V2bWVtLmM6MTE5MDpcdGFkZHIgPSBtZW1yZW1hcF9wYWdlcyhcdTAwMjZrdm1wcGNfdXZtZW1fcGdtYXAsIE5VTUFfTk9fTk9ERSk7XG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl91dm1lbS5jLTExOTEtXHRpZiAoSVNfRVJSKGFkZHIpKSB7XG4tLVxuYXJjaC94ODYvbW0vaW5pdF82NC5jPTk2ND1pbnQgYWRkX3BhZ2VzKGludCBuaWQsIHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxuLS1cbmFyY2gveDg2L21tL2luaXRfNjQuYy05NzYtXHQvKlxuYXJjaC94ODYvbW0vaW5pdF82NC5jOjk3NzpcdCAqIFNwZWNpYWwgY2FzZTogYWRkX3BhZ2VzKCkgaXMgY2FsbGVkIGJ5IG1lbXJlbWFwX3BhZ2VzKCkgZm9yIGFkZGluZyBkZXZpY2VcbmFyY2gveDg2L21tL2luaXRfNjQuYy05NzgtXHQgKiBwcml2YXRlIHBhZ2VzLiBEbyBub3QgYnVtcCB1cCBtYXhfcGZuIGluIHRoZSBkZXZpY2UgcHJpdmF0ZSBwYXRoLFxuLS1cbmRyaXZlcnMvZGF4L2RldmljZS5jPTM4MD1zdGF0aWMgaW50IGRldl9kYXhfcHJvYmUoc3RydWN0IGRldl9kYXggKmRldl9kYXgpXG4tLVxuZHJpdmVycy9kYXgvZGV2aWNlLmMtNDM0LVx0XHRcdG9yZGVyX2Jhc2VfMihkZXZfZGF4LVx1MDAzZWFsaWduIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUKTtcbmRyaXZlcnMvZGF4L2RldmljZS5jOjQzNTpcdGFkZHIgPSBkZXZtX21lbXJlbWFwX3BhZ2VzKGRldiwgcGdtYXApO1xuZHJpdmVycy9kYXgvZGV2aWNlLmMtNDM2LVx0aWYgKElTX0VSUihhZGRyKSlcbi0tXG5kcml2ZXJzL2RheC9mc2Rldi5jPTIwNz1zdGF0aWMgaW50IGZzZGV2X2RheF9wcm9iZShzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheClcbi0tXG5kcml2ZXJzL2RheC9mc2Rldi5jLTI3My1cbmRyaXZlcnMvZGF4L2ZzZGV2LmM6Mjc0Olx0YWRkciA9IGRldm1fbWVtcmVtYXBfcGFnZXMoZGV2LCBwZ21hcCk7XG5kcml2ZXJzL2RheC9mc2Rldi5jLTI3NS1cdGlmIChJU19FUlIoYWRkcikpXG4tLVxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX21pZ3JhdGUuYz0xMDI2PWludCBrZ2Qya2ZkX2luaXRfem9uZV9kZXZpY2Uoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpXG4tLVxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX21pZ3JhdGUuYy0xMDY3LVx0ICovXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfbWlncmF0ZS5jOjEwNjg6XHRyID0gZGV2bV9tZW1yZW1hcF9wYWdlcyhhZGV2LVx1MDAzZWRldiwgcGdtYXApO1xuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX21pZ3JhdGUuYy0xMDY5LVx0aWYgKElTX0VSUihyKSkge1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZG1lbS5jPTI5Nj1ub3V2ZWF1X2RtZW1fY2h1bmtfYWxsb2Moc3RydWN0IG5vdXZlYXVfZHJtICpkcm0sIHN0cnVjdCBwYWdlICoqcHBhZ2UsXG4tLVxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWVtLmMtMzMyLVxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWVtLmM6MzMzOlx0cHRyID0gbWVtcmVtYXBfcGFnZXMoXHUwMDI2Y2h1bmstXHUwMDNlcGFnZW1hcCwgbnVtYV9ub2RlX2lkKCkpO1xuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWVtLmMtMzM0LVx0aWYgKElTX0VSUihwdHIpKSB7XG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jPTE3NjA9c3RhdGljIHN0cnVjdCB4ZV9wYWdlbWFwICp4ZV9wYWdlbWFwX2NyZWF0ZShzdHJ1Y3QgeGVfZGV2aWNlICp4ZSwgc3RydWN0IHhlX3ZyYW1fcmVnaW9uICp2cilcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmMtMTgwMS1cdHBhZ2VtYXAtXHUwMDNlb3BzID0gZHJtX3BhZ2VtYXBfcGFnZW1hcF9vcHNfZ2V0KCk7XG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmM6MTgwMjpcdGFkZHIgPSBkZXZtX21lbXJlbWFwX3BhZ2VzKGRldiwgcGFnZW1hcCk7XG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmMtMTgwMy1cdGlmIChJU19FUlIoYWRkcikpIHtcbi0tXG5kcml2ZXJzL2h2L21zaHZfdnRsX21haW4uYz0zODE9c3RhdGljIGludCBtc2h2X3Z0bF9pb2N0bF9hZGRfdnRsMF9tZW0oc3RydWN0IG1zaHZfdnRsICp2dGwsIHZvaWQgX191c2VyICphcmcpXG4tLVxuZHJpdmVycy9odi9tc2h2X3Z0bF9tYWluLmMtNDEwLVx0ICogVGhpcyB3b3JrcyBiZXN0IHdoZW4gdGhlIHJhbmdlIGlzIGFsaWduZWQ7IGkuZS4gYm90aCB0aGUgc3RhcnQgYW5kIHRoZSBsZW5ndGguXG5kcml2ZXJzL2h2L21zaHZfdnRsX21haW4uYzo0MTE6XHQgKiBDbGFtcCB0byBNQVhfRk9MSU9fT1JERVIgdG8gYXZvaWQgYSBXQVJOIGluIG1lbXJlbWFwX3BhZ2VzKCkgd2hlbiB0aGUgcmFuZ2VcbmRyaXZlcnMvaHYvbXNodl92dGxfbWFpbi5jLTQxMi1cdCAqIGFsaWdubWVudCBleGNlZWRzIHRoZSBtYXhpbXVtIHN1cHBvcnRlZCBmb2xpbyBvcmRlciBmb3IgdGhpcyBrZXJuZWwgY29uZmlnLlxuLS1cbmRyaXZlcnMvaHYvbXNodl92dGxfbWFpbi5jLTQxOS1cbmRyaXZlcnMvaHYvbXNodl92dGxfbWFpbi5jOjQyMDpcdGFkZHIgPSBkZXZtX21lbXJlbWFwX3BhZ2VzKG1lbV9kZXYsIHBnbWFwKTtcbmRyaXZlcnMvaHYvbXNodl92dGxfbWFpbi5jLTQyMS1cdGlmIChJU19FUlIoYWRkcikpIHtcbmRyaXZlcnMvaHYvbXNodl92dGxfbWFpbi5jOjQyMjpcdFx0ZGV2X2Vycih2dGwtXHUwMDNlbW9kdWxlX2RldiwgXCYjMzQ7ZGV2bV9tZW1yZW1hcF9wYWdlcyBlcnJvcjogJWxkXFxuXCYjMzQ7LCBQVFJfRVJSKGFkZHIpKTtcbmRyaXZlcnMvaHYvbXNodl92dGxfbWFpbi5jLTQyMy1cdFx0a2ZyZWUocGdtYXApO1xuLS1cbmRyaXZlcnMvbnZkaW1tL0tjb25maWc9MTQzPWNvbmZpZyBOVkRJTU1fVEVTVF9CVUlMRFxuLS1cbmRyaXZlcnMvbnZkaW1tL0tjb25maWctMTUxLVx0ICBvdGhlcndpc2UgaGVscHMgY2F0Y2ggYnVpbGQgZXJyb3JzIGluZHVjZWQgYnkgY2hhbmdlcyB0byB0aGVcbmRyaXZlcnMvbnZkaW1tL0tjb25maWc6MTUyOlx0ICBjb3JlIGRldm1fbWVtcmVtYXBfcGFnZXMoKSBpbXBsZW1lbnRhdGlvbiBhbmQgb3RoZXJcbmRyaXZlcnMvbnZkaW1tL0tjb25maWctMTUzLVx0ICBpbmZyYXN0cnVjdHVyZS5cbi0tXG5kcml2ZXJzL252ZGltbS9wbWVtLmM9NDQ4PXN0YXRpYyBpbnQgcG1lbV9hdHRhY2hfZGlzayhzdHJ1Y3QgZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTUxNy1cdFx0cG1lbS1cdTAwM2VwZ21hcC5vcHMgPSBcdTAwMjZmc2RheF9wYWdlbWFwX29wcztcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYzo1MTg6XHRcdGFkZHIgPSBkZXZtX21lbXJlbWFwX3BhZ2VzKGRldiwgXHUwMDI2cG1lbS1cdTAwM2VwZ21hcCk7XG5kcml2ZXJzL252ZGltbS9wbWVtLmMtNTE5LVx0XHRwZm5fc2IgPSBuZF9wZm4tXHUwMDNlcGZuX3NiO1xuLS1cbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy01MzAtXHRcdHBtZW0tXHUwMDNlcGdtYXAub3BzID0gXHUwMDI2ZnNkYXhfcGFnZW1hcF9vcHM7XG5kcml2ZXJzL252ZGltbS9wbWVtLmM6NTMxOlx0XHRhZGRyID0gZGV2bV9tZW1yZW1hcF9wYWdlcyhkZXYsIFx1MDAyNnBtZW0tXHUwMDNlcGdtYXApO1xuZHJpdmVycy9udmRpbW0vcG1lbS5jLTUzMi1cdFx0YmJfcmFuZ2UgPSBwbWVtLVx1MDAzZXBnbWFwLnJhbmdlO1xuLS1cbmRyaXZlcnMvbnZkaW1tL3JlZ2lvbl9kZXZzLmM9OTM0PUVYUE9SVF9TWU1CT0wobmRfcmVnaW9uX3JlbGVhc2VfbGFuZSk7XG4tLVxuZHJpdmVycy9udmRpbW0vcmVnaW9uX2RldnMuYy05MzYtLypcbmRyaXZlcnMvbnZkaW1tL3JlZ2lvbl9kZXZzLmM6OTM3OiAqIFBvd2VyUEMgcmVxdWlyZXMgdGhpcyBhbGlnbm1lbnQgZm9yIG1lbXJlbWFwX3BhZ2VzKCkuIEFsbCBvdGhlciBhcmNoc1xuZHJpdmVycy9udmRpbW0vcmVnaW9uX2RldnMuYy05MzgtICogc2hvdWxkIGJlIG9rIHdpdGggU1VCU0VDVElPTl9TSVpFIChzZWUgbWVtcmVtYXBfY29tcGF0X2FsaWduKCkpLlxuLS1cbmRyaXZlcnMvcGNpL3AycGRtYS5jPTM4Nz1pbnQgcGNpX3AycGRtYV9hZGRfcmVzb3VyY2Uoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBiYXIsIHNpemVfdCBzaXplLFxuLS1cbmRyaXZlcnMvcGNpL3AycGRtYS5jLTQzNi1cbmRyaXZlcnMvcGNpL3AycGRtYS5jOjQzNzpcdGFkZHIgPSBkZXZtX21lbXJlbWFwX3BhZ2VzKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBwZ21hcCk7XG5kcml2ZXJzL3BjaS9wMnBkbWEuYy00MzgtXHRpZiAoSVNfRVJSKGFkZHIpKSB7XG4tLVxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rjc3NibGsuYz01NTM9ZGNzc2Jsa19hZGRfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXG4tLVxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rjc3NibGsuYy02OTYtXHRcdGRldl9pbmZvLVx1MDAzZXBnbWFwLm5yX3JhbmdlXHQ9IDE7XG5kcml2ZXJzL3MzOTAvYmxvY2svZGNzc2Jsay5jOjY5NzpcdFx0YWRkciA9IGRldm1fbWVtcmVtYXBfcGFnZXMoXHUwMDI2ZGV2X2luZm8tXHUwMDNlZGV2LCBcdTAwMjZkZXZfaW5mby1cdTAwM2VwZ21hcCk7XG5kcml2ZXJzL3MzOTAvYmxvY2svZGNzc2Jsay5jLTY5OC1cdFx0aWYgKElTX0VSUihhZGRyKSkge1xuLS1cbmRyaXZlcnMveGVuL3VucG9wdWxhdGVkLWFsbG9jLmM9Mzc9c3RhdGljIGludCBmaWxsX2xpc3QodW5zaWduZWQgaW50IG5yX3BhZ2VzKVxuLS1cbmRyaXZlcnMveGVuL3VucG9wdWxhdGVkLWFsbG9jLmMtMTIzLVxuZHJpdmVycy94ZW4vdW5wb3B1bGF0ZWQtYWxsb2MuYzoxMjQ6XHR2YWRkciA9IG1lbXJlbWFwX3BhZ2VzKHBnbWFwLCBOVU1BX05PX05PREUpO1xuZHJpdmVycy94ZW4vdW5wb3B1bGF0ZWQtYWxsb2MuYy0xMjUtXHRpZiAoSVNfRVJSKHZhZGRyKSkge1xuLS1cbmZzL2Z1c2UvdmlydGlvX2ZzLmM9MTA3Nj1zdGF0aWMgaW50IHZpcnRpb19mc19zZXR1cF9kYXgoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYsIHN0cnVjdCB2aXJ0aW9fZnMgKmZzKVxuLS1cbmZzL2Z1c2UvdmlydGlvX2ZzLmMtMTExNi1cdC8qIElkZWFsbHkgd2Ugd291bGQgZGlyZWN0bHkgdXNlIHRoZSBQQ0kgQkFSIHJlc291cmNlIGJ1dFxuZnMvZnVzZS92aXJ0aW9fZnMuYzoxMTE3Olx0ICogZGV2bV9tZW1yZW1hcF9wYWdlcygpIHdhbnRzIGl0cyBvd24gY29weSBpbiBwZ21hcC4gIFNvXG5mcy9mdXNlL3ZpcnRpb19mcy5jLTExMTgtXHQgKiBpbml0aWFsaXplIGEgc3RydWN0IHJlc291cmNlIGZyb20gc2NyYXRjaCAob25seSB0aGUgc3RhcnRcbi0tXG5mcy9mdXNlL3ZpcnRpb19mcy5jLTExMjYtXG5mcy9mdXNlL3ZpcnRpb19mcy5jOjExMjc6XHRmcy1cdTAwM2V3aW5kb3dfa2FkZHIgPSBkZXZtX21lbXJlbWFwX3BhZ2VzKFx1MDAyNnZkZXYtXHUwMDNlZGV2LCBwZ21hcCk7XG5mcy9mdXNlL3ZpcnRpb19mcy5jLTExMjgtXHRpZiAoSVNfRVJSKGZzLVx1MDAzZXdpbmRvd19rYWRkcikpXG4tLVxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oPTc3PXN0cnVjdCBkZXZfcGFnZW1hcF9vcHMge1xuLS1cbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaC0xMTUtICogQGFsdG1hcDogcHJlLWFsbG9jYXRlZC9yZXNlcnZlZCBtZW1vcnkgZm9yIHZtZW1tYXAgYWxsb2NhdGlvbnNcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaDoxMTY6ICogQHJlZjogcmVmZXJlbmNlIGNvdW50IHRoYXQgcGlucyB0aGUgZGV2bV9tZW1yZW1hcF9wYWdlcygpIG1hcHBpbmdcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaC0xMTctICogQGRvbmU6IGNvbXBsZXRpb24gZm9yIEByZWZcbi0tXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmg9MjI3PXZvaWQgem9uZV9kZXZpY2VfcGFnZV9pbml0KHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwLFxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oLTIyOC1cdFx0XHQgICB1bnNpZ25lZCBpbnQgb3JkZXIpO1xuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oOjIyOTp2b2lkICptZW1yZW1hcF9wYWdlcyhzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwLCBpbnQgbmlkKTtcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaC0yMzAtdm9pZCBtZW11bm1hcF9wYWdlcyhzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwKTtcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaDoyMzE6dm9pZCAqZGV2bV9tZW1yZW1hcF9wYWdlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXApO1xuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oLTIzMi12b2lkIGRldm1fbWVtdW5tYXBfcGFnZXMoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwKTtcbi0tXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmg9MjQ3PXN0YXRpYyBpbmxpbmUgdm9pZCB6b25lX2RldmljZV9wcml2YXRlX3NwbGl0X2NiKHN0cnVjdCBmb2xpbyAqb3JpZ2luYWxfZm9saW8sXG4tLVxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oLTI2NC0jZWxzZVxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oOjI2NTpzdGF0aWMgaW5saW5lIHZvaWQgKmRldm1fbWVtcmVtYXBfcGFnZXMoc3RydWN0IGRldmljZSAqZGV2LFxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oLTI2Ni1cdFx0c3RydWN0IGRldl9wYWdlbWFwICpwZ21hcClcbi0tXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmgtMjY4LVx0LypcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaDoyNjk6XHQgKiBGYWlsIGF0dGVtcHRzIHRvIGNhbGwgZGV2bV9tZW1yZW1hcF9wYWdlcygpIHdpdGhvdXRcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaC0yNzAtXHQgKiBaT05FX0RFVklDRSBzdXBwb3J0IGVuYWJsZWQsIHRoaXMgcmVxdWlyZXMgY2FsbGVycyB0byBmYWxsXG4tLVxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oPTI4Nz1zdGF0aWMgaW5saW5lIGJvb2wgcGdtYXBfcGZuX3ZhbGlkKHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXAsIHVuc2lnbmVkIGxvbmcgcGZuKVxuLS1cbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaC0yOTEtXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmg6MjkyOi8qIHdoZW4gbWVtcmVtYXBfcGFnZXMoKSBpcyBkaXNhYmxlZCBhbGwgYXJjaHMgY2FuIHJlbWFwIGEgc2luZ2xlIHBhZ2UgKi9cbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaC0yOTMtc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG1lbXJlbWFwX2NvbXBhdF9hbGlnbih2b2lkKVxuLS1cbmxpYi90ZXN0X2htbS5jPTU1OD1zdGF0aWMgaW50IGRtaXJyb3JfYWxsb2NhdGVfY2h1bmsoc3RydWN0IGRtaXJyb3JfZGV2aWNlICptZGV2aWNlLFxuLS1cbmxpYi90ZXN0X2htbS5jLTYxNS1cdH1cbmxpYi90ZXN0X2htbS5jOjYxNjpcdHB0ciA9IG1lbXJlbWFwX3BhZ2VzKFx1MDAyNmRldm1lbS1cdTAwM2VwYWdlbWFwLCBudW1hX25vZGVfaWQoKSk7XG5saWIvdGVzdF9obW0uYy02MTctXHRpZiAoSVNfRVJSX09SX05VTEwocHRyKSkge1xuLS1cbm1tL21lbXJlbWFwLmM9MTc9c3RhdGljIERFRklORV9YQVJSQVkocGdtYXBfYXJyYXkpO1xuLS1cbm1tL21lbXJlbWFwLmMtMTktLypcbm1tL21lbXJlbWFwLmM6MjA6ICogVGhlIG1lbXJlbWFwKCkgYW5kIG1lbXJlbWFwX3BhZ2VzKCkgaW50ZXJmYWNlcyBhcmUgYWx0ZXJuYXRlbHkgdXNlZFxubW0vbWVtcmVtYXAuYy0yMS0gKiB0byBtYXAgcGVyc2lzdGVudCBtZW1vcnkgbmFtZXNwYWNlcy4gVGhlc2UgaW50ZXJmYWNlcyBwbGFjZSBkaWZmZXJlbnRcbm1tL21lbXJlbWFwLmMtMjItICogY29uc3RyYWludHMgb24gdGhlIGFsaWdubWVudCBhbmQgc2l6ZSBvZiB0aGUgbWFwcGluZyAobmFtZXNwYWNlKS5cbm1tL21lbXJlbWFwLmM6MjM6ICogbWVtcmVtYXAoKSBjYW4gbWFwIGluZGl2aWR1YWwgUEFHRV9TSVpFIHBhZ2VzLiBtZW1yZW1hcF9wYWdlcygpIGNhblxubW0vbWVtcmVtYXAuYy0yNC0gKiBvbmx5IG1hcCBzdWJzZWN0aW9ucyAoMk1CKSwgYW5kIGF0IGxlYXN0IG9uZSBhcmNoaXRlY3R1cmUgKFBvd2VyUEMpXG5tbS9tZW1yZW1hcC5jOjI1OiAqIHRoZSBtaW5pbXVtIG1hcHBpbmcgZ3JhbnVsYXJpdHkgb2YgbWVtcmVtYXBfcGFnZXMoKSBpcyAxNk1CLlxubW0vbWVtcmVtYXAuYy0yNi0gKlxuLS1cbm1tL21lbXJlbWFwLmM9MTMwPUVYUE9SVF9TWU1CT0xfR1BMKG1lbXVubWFwX3BhZ2VzKTtcbm1tL21lbXJlbWFwLmMtMTMxLVxubW0vbWVtcmVtYXAuYzoxMzI6c3RhdGljIHZvaWQgZGV2bV9tZW1yZW1hcF9wYWdlc19yZWxlYXNlKHZvaWQgKmRhdGEpXG5tbS9tZW1yZW1hcC5jLTEzMy17XG4tLVxubW0vbWVtcmVtYXAuYz0xNDQ9c3RhdGljIGludCBwYWdlbWFwX3JhbmdlKHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXAsIHN0cnVjdCBtaHBfcGFyYW1zICpwYXJhbXMsXG4tLVxubW0vbWVtcmVtYXAuYy0yNjEtLypcbm1tL21lbXJlbWFwLmM6MjYyOiAqIE5vdCBkZXZpY2UgbWFuYWdlZCB2ZXJzaW9uIG9mIGRldm1fbWVtcmVtYXBfcGFnZXMsIHVuZG9uZSBieVxubW0vbWVtcmVtYXAuYzoyNjM6ICogbWVtdW5tYXBfcGFnZXMoKS4gIFBsZWFzZSB1c2UgZGV2bV9tZW1yZW1hcF9wYWdlcyBpZiB5b3UgaGF2ZSBhIHN0cnVjdFxubW0vbWVtcmVtYXAuYy0yNjQtICogZGV2aWNlIGF2YWlsYWJsZS5cbm1tL21lbXJlbWFwLmMtMjY1LSAqL1xubW0vbWVtcmVtYXAuYzoyNjY6dm9pZCAqbWVtcmVtYXBfcGFnZXMoc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcCwgaW50IG5pZClcbm1tL21lbXJlbWFwLmMtMjY3LXtcbi0tXG5tbS9tZW1yZW1hcC5jLTM1MS19XG5tbS9tZW1yZW1hcC5jOjM1MjpFWFBPUlRfU1lNQk9MX0dQTChtZW1yZW1hcF9wYWdlcyk7XG5tbS9tZW1yZW1hcC5jLTM1My1cbm1tL21lbXJlbWFwLmMtMzU0LS8qKlxubW0vbWVtcmVtYXAuYzozNTU6ICogZGV2bV9tZW1yZW1hcF9wYWdlcyAtIHJlbWFwIGFuZCBwcm92aWRlIG1lbW1hcCBiYWNraW5nIGZvciB0aGUgZ2l2ZW4gcmVzb3VyY2Vcbm1tL21lbXJlbWFwLmMtMzU2LSAqIEBkZXY6IGhvc3RpbmcgZGV2aWNlIGZvciBAcmVzXG4tLVxubW0vbWVtcmVtYXAuYy0zNjctICogICAgJiMzOTtsaXZlJiMzOTsgb24gZW50cnkgYW5kIHdpbGwgYmUga2lsbGVkIGFuZCByZWFwZWQgYXRcbm1tL21lbXJlbWFwLmM6MzY4OiAqICAgIGRldm1fbWVtcmVtYXBfcGFnZXNfcmVsZWFzZSgpIHRpbWUsIG9yIGlmIHRoaXMgcm91dGluZSBmYWlscy5cbm1tL21lbXJlbWFwLmMtMzY5LSAqXG4tLVxubW0vbWVtcmVtYXAuYy0zNzMtICovXG5tbS9tZW1yZW1hcC5jOjM3NDp2b2lkICpkZXZtX21lbXJlbWFwX3BhZ2VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcClcbm1tL21lbXJlbWFwLmMtMzc1LXtcbi0tXG5tbS9tZW1yZW1hcC5jLTM3OC1cbm1tL21lbXJlbWFwLmM6Mzc5Olx0cmV0ID0gbWVtcmVtYXBfcGFnZXMocGdtYXAsIGRldl90b19ub2RlKGRldikpO1xubW0vbWVtcmVtYXAuYy0zODAtXHRpZiAoSVNfRVJSKHJldCkpXG4tLVxubW0vbWVtcmVtYXAuYy0zODItXG5tbS9tZW1yZW1hcC5jOjM4MzpcdGVycm9yID0gZGV2bV9hZGRfYWN0aW9uX29yX3Jlc2V0KGRldiwgZGV2bV9tZW1yZW1hcF9wYWdlc19yZWxlYXNlLFxubW0vbWVtcmVtYXAuYy0zODQtXHRcdFx0cGdtYXApO1xuLS1cbm1tL21lbXJlbWFwLmMtMzg4LX1cbm1tL21lbXJlbWFwLmM6Mzg5OkVYUE9SVF9TWU1CT0xfR1BMKGRldm1fbWVtcmVtYXBfcGFnZXMpO1xubW0vbWVtcmVtYXAuYy0zOTAtXG5tbS9tZW1yZW1hcC5jPTM5MT12b2lkIGRldm1fbWVtdW5tYXBfcGFnZXMoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwKVxubW0vbWVtcmVtYXAuYy0zOTIte1xubW0vbWVtcmVtYXAuYzozOTM6XHRkZXZtX3JlbGVhc2VfYWN0aW9uKGRldiwgZGV2bV9tZW1yZW1hcF9wYWdlc19yZWxlYXNlLCBwZ21hcCk7XG5tbS9tZW1yZW1hcC5jLTM5NC19XG4tLVxubW0vc3BhcnNlLXZtZW1tYXAuYz00MDI9aW50IF9fbWVtaW5pdCB2bWVtbWFwX3BvcHVsYXRlX2h1Z2VwYWdlcyh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbi0tXG5tbS9zcGFyc2Utdm1lbW1hcC5jLTQ1OS0gKlxubW0vc3BhcnNlLXZtZW1tYXAuYzo0NjA6ICogTm90ZSB0aGF0IG1lbXJlbWFwX3BhZ2VzKCkgcmVzZXRzIEBucl9yYW5nZSB2YWx1ZSBhbmQgd2lsbCBpbmNyZW1lbnRcbm1tL3NwYXJzZS12bWVtbWFwLmMtNDYxLSAqIGl0IGFmdGVyIGVhY2ggcmFuZ2Ugc3VjY2Vzc2Z1bCBvbmxpbmluZy4gVGh1cyB0aGUgdmFsdWUgb3IgQG5yX3JhbmdlXG4tLVxudG9vbHMvdGVzdGluZy9udmRpbW0vS2J1aWxkPTEzPWxkZmxhZ3MteSAmIzQzOz0gLS13cmFwPV9fcmVsZWFzZV9yZWdpb25cbnRvb2xzL3Rlc3RpbmcvbnZkaW1tL0tidWlsZDoxNDpsZGZsYWdzLXkgJiM0Mzs9IC0td3JhcD1kZXZtX21lbXJlbWFwX3BhZ2VzXG50b29scy90ZXN0aW5nL252ZGltbS9LYnVpbGQtMTUtbGRmbGFncy15ICYjNDM7PSAtLXdyYXA9aW5zZXJ0X3Jlc291cmNlXG4tLVxudG9vbHMvdGVzdGluZy9udmRpbW0vdGVzdC9pb21hcC5jPTEwOD1zdGF0aWMgdm9pZCBkZXZfcGFnZW1hcF9wZXJjcHVfcmVsZWFzZShzdHJ1Y3QgcGVyY3B1X3JlZiAqcmVmKVxuLS1cbnRvb2xzL3Rlc3RpbmcvbnZkaW1tL3Rlc3QvaW9tYXAuYy0xMTQtXG50b29scy90ZXN0aW5nL252ZGltbS90ZXN0L2lvbWFwLmM6MTE1OnZvaWQgKl9fd3JhcF9kZXZtX21lbXJlbWFwX3BhZ2VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcClcbnRvb2xzL3Rlc3RpbmcvbnZkaW1tL3Rlc3QvaW9tYXAuYy0xMTYte1xuLS1cbnRvb2xzL3Rlc3RpbmcvbnZkaW1tL3Rlc3QvaW9tYXAuYy0xMjEtXHRpZiAoIW5maXRfcmVzKVxudG9vbHMvdGVzdGluZy9udmRpbW0vdGVzdC9pb21hcC5jOjEyMjpcdFx0cmV0dXJuIGRldm1fbWVtcmVtYXBfcGFnZXMoZGV2LCBwZ21hcCk7XG50b29scy90ZXN0aW5nL252ZGltbS90ZXN0L2lvbWFwLmMtMTIzLVxuLS1cbnRvb2xzL3Rlc3RpbmcvbnZkaW1tL3Rlc3QvaW9tYXAuYy0xMzQtfVxudG9vbHMvdGVzdGluZy9udmRpbW0vdGVzdC9pb21hcC5jOjEzNTpFWFBPUlRfU1lNQk9MX0dQTChfX3dyYXBfZGV2bV9tZW1yZW1hcF9wYWdlcyk7XG50b29scy90ZXN0aW5nL252ZGltbS90ZXN0L2lvbWFwLmMtMTM2LVxuLS1cbnRvb2xzL3Rlc3RpbmcvbnZkaW1tL3Rlc3QvbmZpdF90ZXN0Lmg9MjEyPXZvaWQgKl9fd3JhcF9kZXZtX21lbXJlbWFwKHN0cnVjdCBkZXZpY2UgKmRldiwgcmVzb3VyY2Vfc2l6ZV90IG9mZnNldCxcbnRvb2xzL3Rlc3RpbmcvbnZkaW1tL3Rlc3QvbmZpdF90ZXN0LmgtMjEzLVx0XHRzaXplX3Qgc2l6ZSwgdW5zaWduZWQgbG9uZyBmbGFncyk7XG50b29scy90ZXN0aW5nL252ZGltbS90ZXN0L25maXRfdGVzdC5oOjIxNDp2b2lkICpfX3dyYXBfZGV2bV9tZW1yZW1hcF9wYWdlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXApO1xudG9vbHMvdGVzdGluZy9udmRpbW0vdGVzdC9uZml0X3Rlc3QuaC0yMTUtdm9pZCAqX193cmFwX21lbXJlbWFwKHJlc291cmNlX3NpemVfdCBvZmZzZXQsIHNpemVfdCBzaXplLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDA3OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MjAxCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMzA1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgbWVtcmVtYXBfcGFnZXMgUGF0aCBhbmQgT3B0aW1pemF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEl0IGxvb2tzIGxpa2UgYG1lbXJlbWFwX3BhZ2VzYCBpcyBhIGtleSBmdW5jdGlvbiwgY2FsbGVkIGluZGlyZWN0bHkgYnkgYGRldm1fbWVtcmVtYXBfcGFnZXNgLiBJIHNlZSB0aGlzIGlzIHVzZWQgaW4gc2V2ZXJhbCBpbXBvcnRhbnQgYXJlYXM6IHRoZSBEQVggZHJpdmVycyAoYGRldmljZS5jYCwgYGZzZGV2LmNgKSwgcGVyc2lzdGVudCBtZW1vcnkgKGBwbWVtLmNgKSwgdGhlIHZpcnRpby1mcyBpbXBsZW1lbnRhdGlvbiwgYW5kIHAycGRtYS4gU3BlY2lmaWNhbGx5LCB2aXJ0aW8tZnMgc3RhbmRzIG91dCBhcyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBpbiBhIFFFTVUgZW52aXJvbm1lbnQsIHdoaWNoIGlzIHVzZWZ1bCB0byBrbm93LiBQbHVzLCB0aGVyZSYjMzk7cyBgbGliL3Rlc3RfaG1tLmNgLCB3aGljaCB1c2VzIGl0LiBgdGVzdF9obW1gIHN1Z2dlc3RzIHdlIGNhbiBkaXJlY3RseSB0ZXN0IHRoaXMgZnVuY3Rpb25hbGl0eS4gVGhpcyBtZWFucyBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgIGlzIHBvdGVudGlhbGx5IHJlYWNoYWJsZSBpbiBhIFFFTVUgY29udGV4dCBhcyB3ZWxsLgoKTm93LCBsZXQmIzM5O3MgcmVmb2N1cyBvbiB0aGUgcGF0Y2ggaXRzZWxmLiBJdCBtb2RpZmllcyBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgIGFuZCBgbWVtbWFwX2luaXRfY29tcG91bmRgIHdpdGhpbiBgbW0vbW1faW5pdC5jYC4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBsb2dpYyByZXNpZGVzLiBUaGUgcGF0Y2ggYWxzbyBpbnRyb2R1Y2VzIGBtZW1jcHlfbm9udGVtcG9yYWxgLCBhZGRpbmcgaXQgdG8gYm90aCBgYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmhgIGFuZCB0aGUgZ2VuZXJhbCBgaW5jbHVkZS9saW51eC9zdHJpbmcuaGAgaGVhZGVycy4KCk15IGltbWVkaWF0ZSBpbnRlcnByZXRhdGlvbiBpcyB0aGF0IHRoZSBwYXRjaCBpcyBvcHRpbWl6aW5nIGhvdyBgc3RydWN0IHBhZ2VgIGlzIGluaXRpYWxpemVkLCBzcGVjaWZpY2FsbHkgZm9yIGBaT05FX0RFVklDRWAgbWVtb3J5LiBUaGUgc3RyYXRlZ3kgaXMgdG8gY3JlYXRlIGEgdGVtcGxhdGUgcGFnZSBhbmQgdGhlbiBlZmZpY2llbnRseSBjb3B5IGl0IHRvIHRoZSByZW1haW5pbmcgcGFnZXMgdXNpbmcgYG1lbWNweV9ub250ZW1wb3JhbGAuIFRoaXMgaXMgYSBjbGFzc2ljIG9wdGltaXphdGlvbiB0ZWNobmlxdWUgZm9yIG1lbW9yeSBpbml0aWFsaXphdGlvbiwgYXNzdW1pbmcgdGhlIGluaXRpYWwgcGFnZSBjb250YWlucyB0aGUgbmVjZXNzYXJ5IGRlZmF1bHQgdmFsdWVzLiBHaXZlbiB0aGUgY29udGV4dCwgdGhpcyBwcm9iYWJseSBhZGRyZXNzZXMgc29tZSBzcGVjaWZpYyBwZXJmb3JtYW5jZSBib3R0bGVuZWNrIGR1cmluZyBkZXZpY2UgaW5pdGlhbGl6YXRpb24uCgpUaW1lIHRvIGRlbHZlIGludG8gdGhlIGNvZGUgY2hhbmdlcyBpbiBgbW0vbW1faW5pdC5jYCBhbmQgY29uZmlybSB0aGVzZSBhc3N1bXB0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMDc6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7em9uZV9kZXZpY2VfcGFnZV9pbml0X2Zyb21fdGVtcGxhdGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbW1faW5pdC5jPTEwODU9c3RhdGljIGlubGluZSB2b2lkIHpvbmVfZGV2aWNlX3BhZ2VfdXBkYXRlX3RlbXBsYXRlKHN0cnVjdCBwYWdlICp0ZW1wbGF0ZSxcbi0tXG5tbS9tbV9pbml0LmMtMTA5NC1cbm1tL21tX2luaXQuYzoxMDk1OnN0YXRpYyB2b2lkIHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9mcm9tX3RlbXBsYXRlKHN0cnVjdCBwYWdlICpwYWdlLFxubW0vbW1faW5pdC5jLTEwOTYtXHRcdHVuc2lnbmVkIGxvbmcgcGZuLCBzdHJ1Y3QgcGFnZSAqdGVtcGxhdGUpXG4tLVxubW0vbW1faW5pdC5jPTExMzE9c3RhdGljIHZvaWQgX19yZWYgbWVtbWFwX2luaXRfY29tcG91bmQoc3RydWN0IHBhZ2UgKmhlYWQsXG4tLVxubW0vbW1faW5pdC5jLTExNjQtXHRcdH0gZWxzZSB7XG5tbS9tbV9pbml0LmM6MTE2NTpcdFx0XHR6b25lX2RldmljZV9wYWdlX2luaXRfZnJvbV90ZW1wbGF0ZShwYWdlLCBwZm4sXG5tbS9tbV9pbml0LmMtMTE2Ni1cdFx0XHRcdFx0XHRcdCAgICBcdTAwMjZ0ZW1wbGF0ZSk7XG4tLVxubW0vbW1faW5pdC5jPTExNzI9dm9pZCBfX3JlZiBtZW1tYXBfaW5pdF96b25lX2RldmljZShzdHJ1Y3Qgem9uZSAqem9uZSxcbi0tXG5tbS9tbV9pbml0LmMtMTIxNC1cdFx0fSBlbHNlIHtcbm1tL21tX2luaXQuYzoxMjE1Olx0XHRcdHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9mcm9tX3RlbXBsYXRlKHBhZ2UsIHBmbixcbm1tL21tX2luaXQuYy0xMjE2LVx0XHRcdFx0XHRcdFx0ICAgIFx1MDAyNnRlbXBsYXRlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMDc6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUyNDAKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAxMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBab25lIERldmljZSBJbml0aWFsaXphdGlvbiBGdW5jdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGUgem9uZSBkZXZpY2UgaW5pdGlhbGl6YXRpb24gY29kZSwgYW5kIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGtleSBmdW5jdGlvbnMgaGVyZS4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgb25lcyB0aGF0IGltbWVkaWF0ZWx5IGp1bXAgb3V0IGFyZTogYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYCwgYG1lbW1hcF9pbml0X2NvbXBvdW5kYCwgYHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9mcm9tX3RlbXBsYXRlYCwgYHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9zbG93YCwgYHpvbmVfZGV2aWNlX3RhaWxfcGFnZV9pbml0YCwgYW5kIGB6b25lX2RldmljZV9wYWdlX3VwZGF0ZV90ZW1wbGF0ZWAuIFJpZ2h0LCB0aGF0IHNlZW1zIHRvIGJlIHRoZSBjb3JlIHNldCBJIG5lZWQgdG8gdW5kZXJzdGFuZC4KCldhaXQgYSBzZWNvbmQsIGdsYW5jaW5nIGJhY2suLi4gYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYCBsb29rcyBsaWtlIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50LiBUaGF0IG1ha2VzIHNlbnNlLiBOb3csIGxldCYjMzk7cyBmaWd1cmUgb3V0IHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gV2hhdCBmbGFncyBvciBmZWF0dXJlcyBuZWVkIHRvIGJlIGVuYWJsZWQgZm9yIHRoaXMgdG8gZXZlbiBydW4/IEkmIzM5O2xsIGJldCBgQ09ORklHX1pPTkVfREVWSUNFYCBpcyB0aGUga2V5LiBUaW1lIHRvIGNyYWNrIG9wZW4gYG1tL0tjb25maWdgIGFuZCBkb3VibGUtY2hlY2suIEdvdHRhIGNvbmZpcm0gdGhhdCBiZWZvcmUgSSBnbyBhbnkgZnVydGhlciBkb3duIHRoZSByYWJiaXQgaG9sZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMDc6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFpPTkVfREVWSUNFJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9MTIzMT1jb25maWcgWk9ORV9ETUEzMlxuLS1cbm1tL0tjb25maWctMTIzNS1cbm1tL0tjb25maWc6MTIzNjpjb25maWcgWk9ORV9ERVZJQ0Vcbm1tL0tjb25maWctMTIzNy1cdGJvb2wgXCYjMzQ7RGV2aWNlIG1lbW9yeSAocG1lbSwgSE1NLCBldGMuLi4pIGhvdHBsdWcgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAwNzo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTcwNQoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIERlcGVuZGVuY2llcyBmb3IgWk9ORV9ERVZJQ0UqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGFyY2hpdGVjdHVyYWwgaW1wbGljYXRpb25zIG9mIGBaT05FX0RFVklDRWAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O1doYXQgYXJlIHRoZSBkZXBlbmRlbmNpZXMgaGVyZT8mIzM0OyBJIG5lZWQgdG8gZGlnIGRlZXBlciBhbmQgc2VlIHdoYXQgcGllY2VzIG9mIHRoZSBzeXN0ZW0gcmVseSBvbiB0aGlzLiBBcmUgd2UgdGFsa2luZyBoYXJkd2FyZSBhYnN0cmFjdGlvbj8gSXMgaXQgcmVsYXRlZCB0byB0aGUgb3ZlcmFsbCByZXNvdXJjZSBtYW5hZ2VtZW50IHdpdGhpbiB0aGUgem9uZT8gT3IsIGlzIGl0IHBlcmhhcHMgYSBsb2dpY2FsIGNvbnN0cnVjdD8gS25vd2luZyB0aGUgZGVwZW5kZW5jaWVzIGlzIGNydWNpYWwgdG8gYXNzZXNzIHRoZSBwb3RlbnRpYWwgaW1wYWN0IG9mIGFueSBjaGFuZ2VzIG9yIHRvIHRyb3VibGVzaG9vdCB1bmV4cGVjdGVkIGJlaGF2aW9yIGRvd24gdGhlIGxpbmUuIEl0IHJlYWxseSBib2lscyBkb3duIHRvOiAmIzM0O1doYXQgYXJlIHRoZSAqZXh0ZXJuYWwqIHN5c3RlbXMgb3IgZnVuY3Rpb25hbGl0aWVzIHdoaWNoIGhhdmUgYSB0aWdodCBjb3VwbGluZyB3aXRoIGBaT05FX0RFVklDRWA/JiMzNDsgSSBuZWVkIHRvIG1hcCBpdCBhbGwgb3V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAwNzo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZXBlbmRzIG9uLipaT05FX0RFVklDRSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2dwdS9kcm0veGUvS2NvbmZpZz03OT1jb25maWcgRFJNX1hFX0dQVVNWTVxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS9LY29uZmlnLTgyLVx0ZGVwZW5kcyBvbiAhVU1MXG5kcml2ZXJzL2dwdS9kcm0veGUvS2NvbmZpZzo4MzpcdGRlcGVuZHMgb24gWk9ORV9ERVZJQ0VcbmRyaXZlcnMvZ3B1L2RybS94ZS9LY29uZmlnLTg0LVx0ZGVmYXVsdCB5XG4tLVxuZHJpdmVycy9udmRpbW0vS2NvbmZpZz02Mj1jb25maWcgTlZESU1NX1BGTlxuLS1cbmRyaXZlcnMvbnZkaW1tL0tjb25maWctNjQtXHRkZWZhdWx0IExJQk5WRElNTVxuZHJpdmVycy9udmRpbW0vS2NvbmZpZzo2NTpcdGRlcGVuZHMgb24gWk9ORV9ERVZJQ0VcbmRyaXZlcnMvbnZkaW1tL0tjb25maWctNjYtXHRzZWxlY3QgTkRfQ0xBSU1cbi0tXG5kcml2ZXJzL3BjaS9LY29uZmlnPTIwNj1jb25maWcgUENJX1AyUERNQVxuZHJpdmVycy9wY2kvS2NvbmZpZy0yMDctXHRib29sIFwmIzM0O1BDSSBwZWVyLXRvLXBlZXIgdHJhbnNmZXIgc3VwcG9ydFwmIzM0O1xuZHJpdmVycy9wY2kvS2NvbmZpZzoyMDg6XHRkZXBlbmRzIG9uIFpPTkVfREVWSUNFXG5kcml2ZXJzL3BjaS9LY29uZmlnLTIwOS1cdCNcbi0tXG5kcml2ZXJzL3MzOTAvYmxvY2svS2NvbmZpZz01PWNvbmZpZyBEQ1NTQkxLXG4tLVxuZHJpdmVycy9zMzkwL2Jsb2NrL0tjb25maWctNy1cdHByb21wdCBcJiMzNDtEQ1NTQkxLIHN1cHBvcnRcJiMzNDtcbmRyaXZlcnMvczM5MC9ibG9jay9LY29uZmlnOjg6XHRkZXBlbmRzIG9uIFMzOTAgXHUwMDI2XHUwMDI2IEJMT0NLIFx1MDAyNlx1MDAyNiBaT05FX0RFVklDRVxuZHJpdmVycy9zMzkwL2Jsb2NrL0tjb25maWctOS1cdHNlbGVjdCBGU19EQVhcbi0tXG5kcml2ZXJzL3hlbi9LY29uZmlnPTMzNj1jb25maWcgWEVOX1VOUE9QVUxBVEVEX0FMTE9DXG5kcml2ZXJzL3hlbi9LY29uZmlnLTMzNy1cdGJvb2wgXCYjMzQ7VXNlIHVucG9wdWxhdGVkIG1lbW9yeSByYW5nZXMgZm9yIGd1ZXN0IG1hcHBpbmdzXCYjMzQ7XG5kcml2ZXJzL3hlbi9LY29uZmlnOjMzODpcdGRlcGVuZHMgb24gWk9ORV9ERVZJQ0VcbmRyaXZlcnMveGVuL0tjb25maWctMzM5LVx0ZGVmYXVsdCBYRU5fQkFDS0VORCB8fCBYRU5fR05UREVWIHx8IFhFTl9ET00wXG4tLVxuZnMvS2NvbmZpZz01OD1jb25maWcgRlNfREFYXG4tLVxuZnMvS2NvbmZpZy02MC1cdGRlcGVuZHMgb24gTU1VXG5mcy9LY29uZmlnOjYxOlx0ZGVwZW5kcyBvbiBaT05FX0RFVklDRVxuZnMvS2NvbmZpZy02Mi1cdHNlbGVjdCBGU19JT01BUFxuLS1cbmZzL0tjb25maWc9OTA9Y29uZmlnIEZTX0RBWF9QTURcbi0tXG5mcy9LY29uZmlnLTkzLVx0ZGVwZW5kcyBvbiBGU19EQVhcbmZzL0tjb25maWc6OTQ6XHRkZXBlbmRzIG9uIFpPTkVfREVWSUNFXG5mcy9LY29uZmlnLTk1LVx0ZGVwZW5kcyBvbiBUUkFOU1BBUkVOVF9IVUdFUEFHRVxuLS1cbm1tL0tjb25maWc9MTI2Nz1jb25maWcgREVWSUNFX1BSSVZBVEVcbm1tL0tjb25maWctMTI2OC1cdGJvb2wgXCYjMzQ7VW5hZGRyZXNzYWJsZSBkZXZpY2UgbWVtb3J5IChHUFUgbWVtb3J5LCAuLi4pXCYjMzQ7XG5tbS9LY29uZmlnOjEyNjk6XHRkZXBlbmRzIG9uIFpPTkVfREVWSUNFXG5tbS9LY29uZmlnLTEyNzAtXHRzZWxlY3QgR0VUX0ZSRUVfUkVHSU9OXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDA3OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NTU3CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUuIE15IG1pbmQmIzM5O3MgYnV6emluZyDigJMgSSYjMzk7bSBpbiB0aGUgdGhpY2sgb2YgdGhpcyBhbmQgSSBuZWVkIHRvIGVuc3VyZSBteSB1bmRlcnN0YW5kaW5nIGlzIHJvY2sgc29saWQgYmVmb3JlIEkgcHJvY2VlZC4KCioqRGVwZW5kZW5jaWVzIENoZWNrOiBEZWVwIERpdmUqKgoKSG9sZCBvbiwgYmVmb3JlIEkgZGl2ZSBhbnkgZGVlcGVyLCBJIG5lZWQgdG8gdGFrZSBhIHN0ZXAgYmFjayBhbmQgZXhhbWluZSB0aGUgZm91bmRhdGlvbi4gSXQmIzM5O3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgb2YgYFpPTkVfREVWSUNFYC4gV2hhdCYjMzk7cyB0aGlzIHBhcnRpY3VsYXIgcGllY2UgcmVseWluZyBvbiBhdCBpdHMgbW9zdCBiYXNpYyBsZXZlbD8gV2hhdCBhcmUgdGhlIHVuZGVybHlpbmcgY29tcG9uZW50cyBvciBjb25maWd1cmF0aW9ucyB0aGF0ICppdCogcmVxdWlyZXMgdG8gZnVuY3Rpb24gY29ycmVjdGx5PyBJIG5lZWQgdG8gYnVpbGQgdXAgYSBjbGVhciBtZW50YWwgbWFwIG9mIHdoYXQgKnRoaXMqIGRlcGVuZHMgb24uIE5lZWQgdG8gZmluZCB0aGUga2V5IGRlcGVuZGVuY2llcywgbm90IGp1c3Qgd2hlcmUgaXQgdG91Y2hlcyBvdGhlciBjb2RlLCBidXQgd2hhdCB0aGUgYmVkcm9jayBpcywgYW5kIHdoYXQgdGhlIGRlcGVuZGVuY2llcyBvZiBUSEFUIGFyZS4gT25seSBvbmNlIEkgdHJ1bHkga25vdyBpdHMgZGVwZW5kZW5jaWVzIGNhbiBJIGJlIGNvbmZpZGVudCB0aGF0IEkmIzM5O20gbm90IG1ha2luZyBhc3N1bXB0aW9ucyBhbmQgSSBjYW4gYmVnaW4gdG8gdW5yYXZlbCB0aGlzIHBhcnRpY3VsYXIgaXNzdWUuIEdvdHRhIGNoYXNlIGRvd24gYWxsIHRoZSBicmFuY2hlcyBvZiByZWxpYW5jZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMDc6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFpPTkVfREVWSUNFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTEyMzE9Y29uZmlnIFpPTkVfRE1BMzJcbi0tXG5tbS9LY29uZmlnLTEyMzUtXG5tbS9LY29uZmlnOjEyMzY6Y29uZmlnIFpPTkVfREVWSUNFXG5tbS9LY29uZmlnLTEyMzctXHRib29sIFwmIzM0O0RldmljZSBtZW1vcnkgKHBtZW0sIEhNTSwgZXRjLi4uKSBob3RwbHVnIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMDc6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY4ODAKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBNYXplKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSYjMzk7bSBnb2luZyB0byBqdW1wIGludG8gdGhlIGBtbS9LY29uZmlnYCBmaWxlLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gYWltaW5nIGZvciBhcm91bmQgbGluZSAxMjM2LiBHaXZlbiBteSBmYW1pbGlhcml0eSB3aXRoIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0sIEkgc3VzcGVjdCB0aGF0IHNlY3Rpb24gbWlnaHQgaG9sZCBjbHVlcyBhYm91dCBhIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9uIG9yIHJlbGF0ZWQgZGVwZW5kZW5jaWVzIEkmIzM5O3ZlIGJlZW4gY29uc2lkZXJpbmcuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgaW5mb3JtYXRpb24gcGVydGFpbmluZyB0byBzb21lIG1lbW9yeSBtYW5hZ2VtZW50IGZlYXR1cmUgb3IgYSBjb25maWd1cmF0aW9uIGtub2IgdGhhdCBtaWdodCBiZSBjcnVjaWFsIHRvIHNvbWUgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uIEkmIzM5O20gd29ya2luZyB0aHJvdWdoLCBvciBwb3NzaWJseSBldmVuIGRlYnVnZ2luZy4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBLY29uZmlnIGhhcyB0byBzYXkhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDA3OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyMzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTIzMDpcdFxuMTIzMTpcdGNvbmZpZyBaT05FX0RNQTMyXG4xMjMyOlx0XHRib29sIFwmIzM0O1N1cHBvcnQgRE1BMzIgem9uZVwmIzM0OyBpZiBBUkNIX0hBU19aT05FX0RNQV9TRVRcbjEyMzM6XHRcdGRlcGVuZHMgb24gIVg4Nl8zMlxuMTIzNDpcdFx0ZGVmYXVsdCB5IGlmIEFSTTY0XG4xMjM1Olx0XG4xMjM2Olx0Y29uZmlnIFpPTkVfREVWSUNFXG4xMjM3Olx0XHRib29sIFwmIzM0O0RldmljZSBtZW1vcnkgKHBtZW0sIEhNTSwgZXRjLi4uKSBob3RwbHVnIHN1cHBvcnRcJiMzNDtcbjEyMzg6XHRcdGRlcGVuZHMgb24gTUVNT1JZX0hPVFBMVUdcbjEyMzk6XHRcdGRlcGVuZHMgb24gTUVNT1JZX0hPVFJFTU9WRVxuMTI0MDpcdFx0ZGVwZW5kcyBvbiBTUEFSU0VNRU1fVk1FTU1BUFxuMTI0MTpcdFx0c2VsZWN0IFhBUlJBWV9NVUxUSVxuMTI0MjpcdFxuMTI0MzpcdFx0aGVscFxuMTI0NDpcdFx0ICBEZXZpY2UgbWVtb3J5IGhvdHBsdWcgc3VwcG9ydCBhbGxvd3MgZm9yIGVzdGFibGlzaGluZyBwbWVtLFxuMTI0NTpcdFx0ICBvciBvdGhlciBkZXZpY2UgZHJpdmVyIGRpc2NvdmVyZWQgbWVtb3J5IHJlZ2lvbnMsIGluIHRoZVxuMTI0NjpcdFx0ICBtZW1tYXAuIFRoaXMgYWxsb3dzIHBmbl90b19wYWdlKCkgbG9va3VwcyBvZiBvdGhlcndpc2VcbjEyNDc6XHRcdCAgXCYjMzQ7ZGV2aWNlLXBoeXNpY2FsXCYjMzQ7IGFkZHJlc3NlcyB3aGljaCBpcyBuZWVkZWQgZm9yIERBWCwgUENJX1AyUERNQSwgYW5kXG4xMjQ4Olx0XHQgIERFVklDRV9QUklWQVRFIGZlYXR1cmVzIGFtb25nIG90aGVycy5cbjEyNDk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMDc6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTczOTQKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAxMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRW5hYmxpbmcgWm9uZSBEZXZpY2VzIGFuZCBBc3NvY2lhdGVkIERlcGVuZGVuY2llcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYFpPTkVfREVWSUNFYCwgYW5kIGl0JiMzOTtzIGNsZWFyIHRoYXQgaXQmIzM5O3MgcmVsaWFudCBvbiBhIGZldyBrZXkgYnVpbGRpbmcgYmxvY2tzOiBgTUVNT1JZX0hPVFBMVUdgLCBgTUVNT1JZX0hPVFJFTU9WRWAsIGFuZCBgU1BBUlNFTUVNX1ZNRU1NQVBgLiBNYWtlcyBzZW5zZSDigJMgdGhlIHdob2xlIHBvaW50IGlzIG1hbmFnaW5nIGRldmljZSBtZW1vcnkgZHluYW1pY2FsbHkuIEFscmlnaHQsIGxldCYjMzk7cyBlbmFibGUgYFpPTkVfREVWSUNFYC4gTm93LCB0aGUgbmV4dCBsb2dpY2FsIHF1ZXN0aW9uIGlzLCB3aGF0IGNhbiBhY3R1YWxseSAqdXNlKiBpdD8gV2UgbmVlZCBhIGRyaXZlciBvciBmZWF0dXJlIHRoYXQgaW50ZWdyYXRlcyB3aXRoIGl0IHRvIHJlYWxseSB0ZXN0IGl0cyBmdW5jdGlvbmFsaXR5LgoKVGhpbmtpbmcgdGhyb3VnaCBwb3RlbnRpYWwgY2FuZGlkYXRlcy4uLiBgRlNfREFYYCBpcyBhIHN0cm9uZyBjb250ZW5kZXIg4oCTIERpcmVjdCBBY2Nlc3Mgc3RvcmFnZSBzb3VuZHMgbGlrZSBpdCB3b3VsZCBwbGF5IG5pY2VseS4gVGhlbiB0aGVyZSYjMzk7cyBgUENJX1AyUERNQWAsIHRoYXQgY291bGQgYmUgcmVsYXRlZCB0byBtZW1vcnkgbWFwcGVkIGludG8gdGhlIFBDSSBzcGFjZSwgYERFVklDRV9QUklWQVRFYCwgd2hpY2ggaXMgYSBjb21tb24gaG9vaywgb3IgYE5WRElNTV9QRk5gLiBUaG9zZSBhbGwgaGF2ZSBhIGdvb2QgY2hhbmNlIG9mIGJlaW5nIHJlbGV2YW50LiBCZWZvcmUgSSBnZXQgdG9vIGRlZXAgaW50byBhbnkgb2YgdGhvc2UsIGxldCYjMzk7cyBqdXN0IG1ha2Ugc3VyZSB0aGVyZSYjMzk7cyBhbiBlYXN5IHRyaWdnZXIgdG8gdGVzdCB0aGlzIG9uIHRoZSBsb3dlciBsZXZlbCwgYW5kIGZvciB0aGF0IEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgYFRFU1RfSE1NYCBpbiBgbGliL0tjb25maWcuZGVidWdgLiBJdCYjMzk7cyBsaWtlbHkgdGhhdCBhIHNtYWxsIGRlYnVnZ2luZyB0ZXN0IGlzIGF2YWlsYWJsZSB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMDc6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFRFU1RfSE1NJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2xpYi9LY29uZmlnLmRlYnVnPTMzNDY9Y29uZmlnIFRFU1RfTUVNSU5JVFxuLS1cbmxpYi9LY29uZmlnLmRlYnVnLTMzNTMtXG5saWIvS2NvbmZpZy5kZWJ1ZzozMzU0OmNvbmZpZyBURVNUX0hNTVxubGliL0tjb25maWcuZGVidWctMzM1NS1cdHRyaXN0YXRlIFwmIzM0O1Rlc3QgSE1NIChIZXRlcm9nZW5lb3VzIE1lbW9yeSBNYW5hZ2VtZW50KVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAwNzo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzg4MQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byBEZWJ1Z2dpbmcgQ29uZmlndXJhdGlvbioqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgc29tZXRoaW5nIHNwZWNpZmljIGFib3V0IHRoZSBkZWJ1Z2dpbmcgY29uZmlndXJhdGlvbiBmb3IgdGhpcyBwcm9qZWN0LiBNeSBpbnR1aXRpb24gdGVsbHMgbWUgdGhhdCB0aGUgcmVsZXZhbnQgc2V0dGluZ3MgYXJlIGxpa2VseSBsb2NhdGVkIHdpdGhpbiB0aGUgYEtjb25maWcuZGVidWdgIGZpbGUsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAzMzU0LiBJJiMzOTtsbCB0YWtlIGEgbG9vayBhdCB0aGF0IGZpbGUgbG9jYXRpb24gZGlyZWN0bHkuIExldCYjMzk7cyBzZWUgd2hhdCBzZWNyZXRzIGl0IGhvbGRzLiBIb3BlZnVsbHksIHRoaXMgc2VjdGlvbiB3aWxsIHNoZWQgc29tZSBsaWdodCBvbiB0aGUgY29uZmlndXJhdGlvbiBJJiMzOTttIHRyeWluZyB0byBkZWNpcGhlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMDc6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtsaWIvS2NvbmZpZy5kZWJ1ZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMzNTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzM1MDpcdFx0ICBUaGlzIGNhbiBiZSB1c2VmdWwgdG8gdGVzdCBpbml0X29uX2FsbG9jIGFuZCBpbml0X29uX2ZyZWUgZmVhdHVyZXMuXG4zMzUxOlx0XG4zMzUyOlx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4zMzUzOlx0XG4zMzU0Olx0Y29uZmlnIFRFU1RfSE1NXG4zMzU1Olx0XHR0cmlzdGF0ZSBcJiMzNDtUZXN0IEhNTSAoSGV0ZXJvZ2VuZW91cyBNZW1vcnkgTWFuYWdlbWVudClcJiMzNDtcbjMzNTY6XHRcdGRlcGVuZHMgb24gVFJBTlNQQVJFTlRfSFVHRVBBR0VcbjMzNTc6XHRcdGRlcGVuZHMgb24gREVWSUNFX1BSSVZBVEVcbjMzNTg6XHRcdHNlbGVjdCBITU1fTUlSUk9SXG4zMzU5Olx0XHRzZWxlY3QgTU1VX05PVElGSUVSXG4zMzYwOlx0XHRoZWxwXG4zMzYxOlx0XHQgIFRoaXMgaXMgYSBwc2V1ZG8gZGV2aWNlIGRyaXZlciBzb2xlbHkgZm9yIHRlc3RpbmcgSE1NLlxuMzM2MjpcdFx0ICBTYXkgTSBoZXJlIGlmIHlvdSB3YW50IHRvIGJ1aWxkIHRoZSBITU0gdGVzdCBtb2R1bGUuXG4zMzYzOlx0XHQgIERvaW5nIHNvIHdpbGwgYWxsb3cgeW91IHRvIHJ1biB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0L3ZtL2htbS10ZXN0cy5cbjMzNjQ6XHRcbjMzNjU6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbjMzNjY6XHRcbjMzNjc6XHRjb25maWcgVEVTVF9GUkVFX1BBR0VTXG4zMzY4Olx0XHR0cmlzdGF0ZSBcJiMzNDtUZXN0IGZyZWVpbmcgcGFnZXNcJiMzNDtcbjMzNjk6XHRcdGhlbHBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMDc6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgzNDkKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAxMDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgUmVhc29uaW5nIG9uIHRoZSBURVNUX0hNTSBEZXBlbmRlbmN5IENoYWluKioKCk9rYXksIGhlcmUmIzM5O3MgaG93IEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzLiBgVEVTVF9ITU1gIGhhcyBhIGRpcmVjdCBkZXBlbmRlbmN5IG9uIGBERVZJQ0VfUFJJVkFURWAuIGBERVZJQ0VfUFJJVkFURWAsIGluIHR1cm4sIHJlbGllcyBvbiBgWk9ORV9ERVZJQ0VgLiBTbywgd2UgKmNvdWxkKiBqdXN0IGVuYWJsZSBhbGwgdGhyZWU6IGBURVNUX0hNTWAsIGBERVZJQ0VfUFJJVkFURWAsIGFuZCBgWk9ORV9ERVZJQ0VgLiBUaGF0JiMzOTtzIHRoZSBzdHJhaWdodGZvcndhcmQgYXBwcm9hY2guCgpCdXQsIGhvbGQgb24uLi4gdGhlIHJlYWwgcXVlc3Rpb24gaXMgd2hldGhlciBgVEVTVF9ITU1gIGlzIGFjdHVhbGx5ICpleHBsb2l0YWJsZSogdmlhIHN5emthbGxlci4gRG9lcyBzeXprYWxsZXIgaGF2ZSBhIHBhdGggdG8gcmVhY2ggaXQ/IFN5emthbGxlciBjYW4gbG9hZCBtb2R1bGVzIGFuZCBpdCBjYW4gaW50ZXJhY3Qgd2l0aCBgL2Rldi9obW1fZG1pcnJvcipgIGRldmljZXMgaWYgdGhleSYjMzk7cmUgYnVpbHQtaW4uIFRoYXQmIzM5O3MgdGhlIGNydWNpYWwgbGluay4gU28sIEkgbmVlZCB0byBjaGVjayBpZiBgVEVTVF9ITU1gIGFjdHVhbGx5ICpjcmVhdGVzKiBhIGRldmljZSBub2RlLiBUaGF0JiMzOTtzIHRoZSBseW5jaHBpbi4gVGhhdCYjMzk7cyB3aGF0IGRldGVybWluZXMgaWYgc3l6a2FsbGVyIGNhbiByZWFsaXN0aWNhbGx5IGJlIHVzZWQgdG8gdGVzdCBpdC4gSSBuZWVkIHRvIGNvbmZpcm0gaWYgaXQgaGFzIGEgZHJpdmVyIG9yIGRldmljZSBhc3NvY2lhdGVkIHdpdGggaXQsIGJlZm9yZSBzcGVuZGluZyBtb3JlIHRpbWUgb24gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDA3OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2htbV9kbWlycm9yJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2xpYi90ZXN0X2htbS5jPTQyNT1zdGF0aWMgaW50IGRtaXJyb3JfZG9fcmVhZChzdHJ1Y3QgZG1pcnJvciAqZG1pcnJvciwgdW5zaWduZWQgbG9uZyBzdGFydCxcbi0tXG5saWIvdGVzdF9obW0uYy00NTAtXG5saWIvdGVzdF9obW0uYzo0NTE6c3RhdGljIGludCBkbWlycm9yX3JlYWQoc3RydWN0IGRtaXJyb3IgKmRtaXJyb3IsIHN0cnVjdCBobW1fZG1pcnJvcl9jbWQgKmNtZClcbmxpYi90ZXN0X2htbS5jLTQ1Mi17XG4tLVxubGliL3Rlc3RfaG1tLmM9NDkxPXN0YXRpYyBpbnQgZG1pcnJvcl9kb193cml0ZShzdHJ1Y3QgZG1pcnJvciAqZG1pcnJvciwgdW5zaWduZWQgbG9uZyBzdGFydCxcbi0tXG5saWIvdGVzdF9obW0uYy01MTYtXG5saWIvdGVzdF9obW0uYzo1MTc6c3RhdGljIGludCBkbWlycm9yX3dyaXRlKHN0cnVjdCBkbWlycm9yICpkbWlycm9yLCBzdHJ1Y3QgaG1tX2RtaXJyb3JfY21kICpjbWQpXG5saWIvdGVzdF9obW0uYy01MTgte1xuLS1cbmxpYi90ZXN0X2htbS5jPTU1OD1zdGF0aWMgaW50IGRtaXJyb3JfYWxsb2NhdGVfY2h1bmsoc3RydWN0IGRtaXJyb3JfZGV2aWNlICptZGV2aWNlLFxuLS1cbmxpYi90ZXN0X2htbS5jLTU3NS1cdFx0cmVzID0gcmVxdWVzdF9mcmVlX21lbV9yZWdpb24oXHUwMDI2aW9tZW1fcmVzb3VyY2UsIERFVk1FTV9DSFVOS19TSVpFLFxubGliL3Rlc3RfaG1tLmM6NTc2Olx0XHRcdFx0XHQgICAgICBcJiMzNDtobW1fZG1pcnJvclwmIzM0Oyk7XG5saWIvdGVzdF9obW0uYy01NzctXHRcdGlmIChJU19FUlJfT1JfTlVMTChyZXMpKVxuLS1cbmxpYi90ZXN0X2htbS5jPTk0Nz1zdGF0aWMgaW50IGRtaXJyb3JfZXhjbHVzaXZlKHN0cnVjdCBkbWlycm9yICpkbWlycm9yLFxubGliL3Rlc3RfaG1tLmM6OTQ4Olx0XHRcdCAgICAgc3RydWN0IGhtbV9kbWlycm9yX2NtZCAqY21kKVxubGliL3Rlc3RfaG1tLmMtOTQ5LXtcbi0tXG5saWIvdGVzdF9obW0uYz0xMTIwPXN0YXRpYyBpbnQgZG1pcnJvcl9taWdyYXRlX3RvX3N5c3RlbShzdHJ1Y3QgZG1pcnJvciAqZG1pcnJvcixcbmxpYi90ZXN0X2htbS5jOjExMjE6XHRcdFx0XHQgICAgIHN0cnVjdCBobW1fZG1pcnJvcl9jbWQgKmNtZClcbmxpYi90ZXN0X2htbS5jLTExMjIte1xuLS1cbmxpYi90ZXN0X2htbS5jPTExODk9c3RhdGljIGludCBkbWlycm9yX21pZ3JhdGVfdG9fZGV2aWNlKHN0cnVjdCBkbWlycm9yICpkbWlycm9yLFxubGliL3Rlc3RfaG1tLmM6MTE5MDpcdFx0XHRcdHN0cnVjdCBobW1fZG1pcnJvcl9jbWQgKmNtZClcbmxpYi90ZXN0X2htbS5jLTExOTEte1xuLS1cbmxpYi90ZXN0X2htbS5jPTE0MDk9c3RhdGljIGludCBkbWlycm9yX3NuYXBzaG90KHN0cnVjdCBkbWlycm9yICpkbWlycm9yLFxubGliL3Rlc3RfaG1tLmM6MTQxMDpcdFx0XHQgICAgc3RydWN0IGhtbV9kbWlycm9yX2NtZCAqY21kKVxubGliL3Rlc3RfaG1tLmMtMTQxMS17XG4tLVxubGliL3Rlc3RfaG1tLmM9MTUxMz1zdGF0aWMgbG9uZyBkbWlycm9yX2ZvcHNfdW5sb2NrZWRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsXG4tLVxubGliL3Rlc3RfaG1tLmMtMTUxNy1cdHZvaWQgX191c2VyICp1YXJnID0gKHZvaWQgX191c2VyICopYXJnO1xubGliL3Rlc3RfaG1tLmM6MTUxODpcdHN0cnVjdCBobW1fZG1pcnJvcl9jbWQgY21kO1xubGliL3Rlc3RfaG1tLmMtMTUxOS1cdHN0cnVjdCBkbWlycm9yICpkbWlycm9yO1xuLS1cbmxpYi90ZXN0X2htbS5jPTE3Nzk9c3RhdGljIGludCBkbWlycm9yX2RldmljZV9pbml0KHN0cnVjdCBkbWlycm9yX2RldmljZSAqbWRldmljZSwgaW50IGlkKVxuLS1cbmxpYi90ZXN0X2htbS5jLTE3OTQtXG5saWIvdGVzdF9obW0uYzoxNzk1Olx0cmV0ID0gZGV2X3NldF9uYW1lKFx1MDAyNm1kZXZpY2UtXHUwMDNlZGV2aWNlLCBcJiMzNDtobW1fZG1pcnJvciV1XCYjMzQ7LCBpZCk7XG5saWIvdGVzdF9obW0uYy0xNzk2LVx0aWYgKHJldClcbi0tXG5saWIvdGVzdF9obW0uYz0xODE1PXN0YXRpYyB2b2lkIGRtaXJyb3JfZGV2aWNlX3JlbW92ZShzdHJ1Y3QgZG1pcnJvcl9kZXZpY2UgKm1kZXZpY2UpXG4tLVxubGliL3Rlc3RfaG1tLmMtMTgyMC1cbmxpYi90ZXN0X2htbS5jOjE4MjE6c3RhdGljIGludCBfX2luaXQgaG1tX2RtaXJyb3JfaW5pdCh2b2lkKVxubGliL3Rlc3RfaG1tLmMtMTgyMi17XG4tLVxubGliL3Rlc3RfaG1tLmMtMTg1OS1cbmxpYi90ZXN0X2htbS5jOjE4NjA6c3RhdGljIHZvaWQgX19leGl0IGhtbV9kbWlycm9yX2V4aXQodm9pZClcbmxpYi90ZXN0X2htbS5jLTE4NjEte1xuLS1cbmxpYi90ZXN0X2htbS5jLTE4NjktXG5saWIvdGVzdF9obW0uYzoxODcwOm1vZHVsZV9pbml0KGhtbV9kbWlycm9yX2luaXQpO1xubGliL3Rlc3RfaG1tLmM6MTg3MTptb2R1bGVfZXhpdChobW1fZG1pcnJvcl9leGl0KTtcbmxpYi90ZXN0X2htbS5jLTE4NzItTU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O0hNTSAoSGV0ZXJvZ2VuZW91cyBNZW1vcnkgTWFuYWdlbWVudCkgdGVzdCBtb2R1bGVcJiMzNDspO1xuLS1cbmxpYi90ZXN0X2htbV91YXBpLmgtMjItICovXG5saWIvdGVzdF9obW1fdWFwaS5oOjIzOnN0cnVjdCBobW1fZG1pcnJvcl9jbWQge1xubGliL3Rlc3RfaG1tX3VhcGkuaC0yNC1cdF9fdTY0XHRcdGFkZHI7XG4tLVxubGliL3Rlc3RfaG1tX3VhcGkuaC0zMS0vKiBFeHBvc2UgdGhlIGFkZHJlc3Mgc3BhY2Ugb2YgdGhlIGNhbGxpbmcgcHJvY2VzcyB0aHJvdWdoIGhtbSBkZXZpY2UgZmlsZSAqL1xubGliL3Rlc3RfaG1tX3VhcGkuaDozMjojZGVmaW5lIEhNTV9ETUlSUk9SX1JFQURcdFx0X0lPV1IoJiMzOTtIJiMzOTssIDB4MDAsIHN0cnVjdCBobW1fZG1pcnJvcl9jbWQpXG5saWIvdGVzdF9obW1fdWFwaS5oOjMzOiNkZWZpbmUgSE1NX0RNSVJST1JfV1JJVEVcdFx0X0lPV1IoJiMzOTtIJiMzOTssIDB4MDEsIHN0cnVjdCBobW1fZG1pcnJvcl9jbWQpXG5saWIvdGVzdF9obW1fdWFwaS5oOjM0OiNkZWZpbmUgSE1NX0RNSVJST1JfTUlHUkFURV9UT19ERVZcdF9JT1dSKCYjMzk7SCYjMzk7LCAweDAyLCBzdHJ1Y3QgaG1tX2RtaXJyb3JfY21kKVxubGliL3Rlc3RfaG1tX3VhcGkuaDozNTojZGVmaW5lIEhNTV9ETUlSUk9SX01JR1JBVEVfVE9fU1lTXHRfSU9XUigmIzM5O0gmIzM5OywgMHgwMywgc3RydWN0IGhtbV9kbWlycm9yX2NtZClcbmxpYi90ZXN0X2htbV91YXBpLmg6MzY6I2RlZmluZSBITU1fRE1JUlJPUl9TTkFQU0hPVFx0XHRfSU9XUigmIzM5O0gmIzM5OywgMHgwNCwgc3RydWN0IGhtbV9kbWlycm9yX2NtZClcbmxpYi90ZXN0X2htbV91YXBpLmg6Mzc6I2RlZmluZSBITU1fRE1JUlJPUl9FWENMVVNJVkVcdFx0X0lPV1IoJiMzOTtIJiMzOTssIDB4MDUsIHN0cnVjdCBobW1fZG1pcnJvcl9jbWQpXG5saWIvdGVzdF9obW1fdWFwaS5oOjM4OiNkZWZpbmUgSE1NX0RNSVJST1JfQ0hFQ0tfRVhDTFVTSVZFXHRfSU9XUigmIzM5O0gmIzM5OywgMHgwNiwgc3RydWN0IGhtbV9kbWlycm9yX2NtZClcbmxpYi90ZXN0X2htbV91YXBpLmg6Mzk6I2RlZmluZSBITU1fRE1JUlJPUl9SRUxFQVNFXHRcdF9JT1dSKCYjMzk7SCYjMzk7LCAweDA3LCBzdHJ1Y3QgaG1tX2RtaXJyb3JfY21kKVxubGliL3Rlc3RfaG1tX3VhcGkuaDo0MDojZGVmaW5lIEhNTV9ETUlSUk9SX0ZMQUdTXHRcdF9JT1dSKCYjMzk7SCYjMzk7LCAweDA4LCBzdHJ1Y3QgaG1tX2RtaXJyb3JfY21kKVxubGliL3Rlc3RfaG1tX3VhcGkuaC00MS1cbi0tXG5saWIvdGVzdF9obW1fdWFwaS5oLTQ0LS8qXG5saWIvdGVzdF9obW1fdWFwaS5oOjQ1OiAqIFZhbHVlcyByZXR1cm5lZCBpbiBobW1fZG1pcnJvcl9jbWQucHRyIGZvciBITU1fRE1JUlJPUl9TTkFQU0hPVC5cbmxpYi90ZXN0X2htbV91YXBpLmgtNDYtICogSE1NX0RNSVJST1JfUFJPVF9FUlJPUjogbm8gdmFsaWQgbWlycm9yIFBURSBmb3IgdGhpcyBwYWdlXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmM9MTI1PXN0YXRpYyBpbnQgaG1tX29wZW4oaW50IHVuaXQpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMtMTI5LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmM6MTMwOlx0c25wcmludGYocGF0aG5hbWUsIHNpemVvZihwYXRobmFtZSksIFwmIzM0Oy9kZXYvaG1tX2RtaXJyb3IlZFwmIzM0OywgdW5pdCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy0xMzEtXHRmZCA9IG9wZW4ocGF0aG5hbWUsIE9fUkRXUiwgMCk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmM9MTc1PUZJWFRVUkVfVEVBUkRPV04oaG1tMilcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy0xODYtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYzoxODc6c3RhdGljIGludCBobW1fZG1pcnJvcl9jbWQoaW50IGZkLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMtMTg4LVx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgcmVxdWVzdCxcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy0xOTEte1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmM6MTkyOlx0c3RydWN0IGhtbV9kbWlycm9yX2NtZCBjbWQ7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy0xOTMtXHRpbnQgcmV0O1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jPTI3OT1zdGF0aWMgaW50IGhtbV9taWdyYXRlX3N5c190b19kZXYoaW50IGZkLFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jLTI4Mi17XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYzoyODM6XHRyZXR1cm4gaG1tX2RtaXJyb3JfY21kKGZkLCBITU1fRE1JUlJPUl9NSUdSQVRFX1RPX0RFViwgYnVmZmVyLCBucGFnZXMpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMtMjg0LX1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYz0yODY9c3RhdGljIGludCBobW1fbWlncmF0ZV9kZXZfdG9fc3lzKGludCBmZCxcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy0yODkte1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmM6MjkwOlx0cmV0dXJuIGhtbV9kbWlycm9yX2NtZChmZCwgSE1NX0RNSVJST1JfTUlHUkFURV9UT19TWVMsIGJ1ZmZlciwgbnBhZ2VzKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jLTI5MS19XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmM9MzAzPVRFU1RfRihobW0sIGFub25fcmVhZClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy0zNDctXHQvKiBTaW11bGF0ZSBhIGRldmljZSByZWFkaW5nIHN5c3RlbSBtZW1vcnkuICovXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYzozNDg6XHRyZXQgPSBobW1fZG1pcnJvcl9jbWQoc2VsZi1cdTAwM2VmZCwgSE1NX0RNSVJST1JfUkVBRCwgYnVmZmVyLCBucGFnZXMpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMtMzQ5LVx0QVNTRVJUX0VRKHJldCwgMCk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmM9MzY3PVRFU1RfRihobW0sIGFub25fcmVhZF9wcm90KVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jLTQwNi1cdC8qIFNpbXVsYXRlIGEgZGV2aWNlIHJlYWRpbmcgc3lzdGVtIG1lbW9yeS4gKi9cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jOjQwNzpcdHJldCA9IGhtbV9kbWlycm9yX2NtZChzZWxmLVx1MDAzZWZkLCBITU1fRE1JUlJPUl9SRUFELCBidWZmZXIsIG5wYWdlcyk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy00MDgtXHRBU1NFUlRfRVEocmV0LCAtRUZBVUxUKTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYz00MjY9VEVTVF9GKGhtbSwgYW5vbl93cml0ZSlcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy00NTctXHQvKiBTaW11bGF0ZSBhIGRldmljZSB3cml0aW5nIHN5c3RlbSBtZW1vcnkuICovXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYzo0NTg6XHRyZXQgPSBobW1fZG1pcnJvcl9jbWQoc2VsZi1cdTAwM2VmZCwgSE1NX0RNSVJST1JfV1JJVEUsIGJ1ZmZlciwgbnBhZ2VzKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jLTQ1OS1cdEFTU0VSVF9FUShyZXQsIDApO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jPTQ3ND1URVNUX0YoaG1tLCBhbm9uX3dyaXRlX3Byb3QpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMtNTAxLVx0LyogU2ltdWxhdGUgYSBkZXZpY2UgcmVhZGluZyBhIHplcm8gcGFnZSBvZiBtZW1vcnkuICovXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYzo1MDI6XHRyZXQgPSBobW1fZG1pcnJvcl9jbWQoc2VsZi1cdTAwM2VmZCwgSE1NX0RNSVJST1JfUkVBRCwgYnVmZmVyLCAxKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jLTUwMy1cdEFTU0VSVF9FUShyZXQsIDApO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jLTUxMS1cdC8qIFNpbXVsYXRlIGEgZGV2aWNlIHdyaXRpbmcgc3lzdGVtIG1lbW9yeS4gKi9cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jOjUxMjpcdHJldCA9IGhtbV9kbWlycm9yX2NtZChzZWxmLVx1MDAzZWZkLCBITU1fRE1JUlJPUl9XUklURSwgYnVmZmVyLCBucGFnZXMpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMtNTEzLVx0QVNTRVJUX0VRKHJldCwgLUVQRVJNKTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy01MjMtXHQvKiBTaW11bGF0ZSBhIGRldmljZSB3cml0aW5nIHN5c3RlbSBtZW1vcnkuICovXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYzo1MjQ6XHRyZXQgPSBobW1fZG1pcnJvcl9jbWQoc2VsZi1cdTAwM2VmZCwgSE1NX0RNSVJST1JfV1JJVEUsIGJ1ZmZlciwgbnBhZ2VzKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jLTUyNS1cdEFTU0VSVF9FUShyZXQsIDApO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jPTU0Mj1URVNUX0YoaG1tLCBhbm9uX3dyaXRlX2NoaWxkKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jLTYyNy1cdFx0XHQvKiBTaW11bGF0ZSBhIGRldmljZSB3cml0aW5nIHN5c3RlbSBtZW1vcnkuICovXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYzo2Mjg6XHRcdFx0cmV0ID0gaG1tX2RtaXJyb3JfY21kKGNoaWxkX2ZkLCBITU1fRE1JUlJPUl9XUklURSwgYnVmZmVyLCBucGFnZXMpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMtNjI5LVx0XHRcdEFTU0VSVF9FUShyZXQsIDApO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jPTY0OT1URVNUX0YoaG1tLCBhbm9uX3dyaXRlX2NoaWxkX3NoYXJlZClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy03MDktXHQvKiBTaW11bGF0ZSBhIGRldmljZSB3cml0aW5nIHN5c3RlbSBtZW1vcnkuICovXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYzo3MTA6XHRyZXQgPSBobW1fZG1pcnJvcl9jbWQoY2hpbGRfZmQsIEhNTV9ETUlSUk9SX1dSSVRFLCBidWZmZXIsIG5wYWdlcyk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy03MTEtXHRBU1NFUlRfRVEocmV0LCAwKTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYz03MjY9VEVTVF9GKGhtbSwgYW5vbl93cml0ZV9odWdlKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jLTc2NS1cdC8qIFNpbXVsYXRlIGEgZGV2aWNlIHdyaXRpbmcgc3lzdGVtIG1lbW9yeS4gKi9cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jOjc2NjpcdHJldCA9IGhtbV9kbWlycm9yX2NtZChzZWxmLVx1MDAzZWZkLCBITU1fRE1JUlJPUl9XUklURSwgYnVmZmVyLCBucGFnZXMpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMtNzY3LVx0QVNTRVJUX0VRKHJldCwgMCk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmM9NzgyPVRFU1RfRihobW0sIGFub25fd3JpdGVfaHVnZXRsYmZzKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jLTgxOS1cdC8qIFNpbXVsYXRlIGEgZGV2aWNlIHdyaXRpbmcgc3lzdGVtIG1lbW9yeS4gKi9cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jOjgyMDpcdHJldCA9IGhtbV9kbWlycm9yX2NtZChzZWxmLVx1MDAzZWZkLCBITU1fRE1JUlJPUl9XUklURSwgYnVmZmVyLCBucGFnZXMpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMtODIxLVx0QVNTRVJUX0VRKHJldCwgMCk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmM9ODM3PVRFU1RfRihobW0sIGZpbGVfcmVhZClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy04NzYtXHQvKiBTaW11bGF0ZSBhIGRldmljZSByZWFkaW5nIHN5c3RlbSBtZW1vcnkuICovXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYzo4Nzc6XHRyZXQgPSBobW1fZG1pcnJvcl9jbWQoc2VsZi1cdTAwM2VmZCwgSE1NX0RNSVJST1JfUkVBRCwgYnVmZmVyLCBucGFnZXMpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMtODc4LVx0QVNTRVJUX0VRKHJldCwgMCk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmM9ODkyPVRFU1RfRihobW0sIGZpbGVfd3JpdGUpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMtOTI4LVx0LyogU2ltdWxhdGUgYSBkZXZpY2Ugd3JpdGluZyBzeXN0ZW0gbWVtb3J5LiAqL1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmM6OTI5Olx0cmV0ID0gaG1tX2RtaXJyb3JfY21kKHNlbGYtXHUwMDNlZmQsIEhNTV9ETUlSUk9SX1dSSVRFLCBidWZmZXIsIG5wYWdlcyk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy05MzAtXHRBU1NFUlRfRVEocmV0LCAwKTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYz0xMTA0PVRFU1RfRihobW0sIG1pZ3JhdGVfcmVsZWFzZSlcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy0xMTQyLVx0LyogUmVsZWFzZSBkZXZpY2UgbWVtb3J5LiAqL1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmM6MTE0MzpcdHJldCA9IGhtbV9kbWlycm9yX2NtZChzZWxmLVx1MDAzZWZkLCBITU1fRE1JUlJPUl9SRUxFQVNFLCBidWZmZXIsIG5wYWdlcyk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy0xMTQ0LVx0QVNTRVJUX0VRKHJldCwgMCk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmM9MTM0Mj1URVNUX0YoaG1tLCBhbm9uX3JlYWRfbXVsdGlwbGUpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMtMTM3NS1cdFx0LyogU2ltdWxhdGUgYSBkZXZpY2UgcmVhZGluZyBzeXN0ZW0gbWVtb3J5LiAqL1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmM6MTM3NjpcdFx0cmV0ID0gaG1tX2RtaXJyb3JfY21kKHNlbGYtXHUwMDNlZmQsIEhNTV9ETUlSUk9SX1JFQUQsIGJ1ZmZlcixcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jLTEzNzctXHRcdFx0XHQgICAgICBucGFnZXMpO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jPTE0MDU9VEVTVF9GKGhtbSwgYW5vbl90ZWFyZG93bilcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy0xNDQ0LVx0XHQvKiBTaW11bGF0ZSBhIGRldmljZSByZWFkaW5nIHN5c3RlbSBtZW1vcnkuICovXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYzoxNDQ1Olx0XHRyYyA9IGhtbV9kbWlycm9yX2NtZChzZWxmLVx1MDAzZWZkLCBITU1fRE1JUlJPUl9SRUFELCBidWZmZXIsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy0xNDQ2LVx0XHRcdFx0ICAgICBucGFnZXMpO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jPTE0NjY9VEVTVF9GKGhtbSwgbWl4ZWRtYXApXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMtMTQ5My1cdC8qIFNpbXVsYXRlIGEgZGV2aWNlIHNuYXBzaG90dGluZyBDUFUgcGFnZXRhYmxlcy4gKi9cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jOjE0OTQ6XHRyZXQgPSBobW1fZG1pcnJvcl9jbWQoc2VsZi1cdTAwM2VmZCwgSE1NX0RNSVJST1JfU05BUFNIT1QsIGJ1ZmZlciwgbnBhZ2VzKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jLTE0OTUtXHRBU1NFUlRfRVEocmV0LCAwKTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYz0xNTA4PVRFU1RfRihobW0yLCBzbmFwc2hvdClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy0xNTgwLVx0YnVmZmVyLVx1MDAzZXB0ciA9IHA7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYzoxNTgxOlx0cmV0ID0gaG1tX2RtaXJyb3JfY21kKHNlbGYtXHUwMDNlZmQwLCBITU1fRE1JUlJPUl9TTkFQU0hPVCwgYnVmZmVyLCBucGFnZXMpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMtMTU4Mi1cdEFTU0VSVF9FUShyZXQsIDApO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jPTE2MTA9VEVTVF9GKGhtbSwgY29tcG91bmQpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMtMTY0OS1cdC8qIFNpbXVsYXRlIGEgZGV2aWNlIHNuYXBzaG90dGluZyBDUFUgcGFnZXRhYmxlcy4gKi9cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jOjE2NTA6XHRyZXQgPSBobW1fZG1pcnJvcl9jbWQoc2VsZi1cdTAwM2VmZCwgSE1NX0RNSVJST1JfU05BUFNIT1QsIGJ1ZmZlciwgbnBhZ2VzKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jLTE2NTEtXHRBU1NFUlRfRVEocmV0LCAwKTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy0xNjczLVx0LyogU2ltdWxhdGUgYSBkZXZpY2Ugc25hcHNob3R0aW5nIENQVSBwYWdldGFibGVzLiAqL1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmM6MTY3NDpcdHJldCA9IGhtbV9kbWlycm9yX2NtZChzZWxmLVx1MDAzZWZkLCBITU1fRE1JUlJPUl9TTkFQU0hPVCwgYnVmZmVyLCBucGFnZXMpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMtMTY3NS1cdEFTU0VSVF9FUShyZXQsIDApO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jPTE2OTg9VEVTVF9GKGhtbTIsIGRvdWJsZV9tYXApXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMtMTczMy1cdC8qIFNpbXVsYXRlIGRldmljZSAwIHJlYWRpbmcgc3lzdGVtIG1lbW9yeS4gKi9cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jOjE3MzQ6XHRyZXQgPSBobW1fZG1pcnJvcl9jbWQoc2VsZi1cdTAwM2VmZDAsIEhNTV9ETUlSUk9SX1JFQUQsIGJ1ZmZlciwgbnBhZ2VzKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jLTE3MzUtXHRBU1NFUlRfRVEocmV0LCAwKTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy0xNzQzLVx0LyogU2ltdWxhdGUgZGV2aWNlIDEgcmVhZGluZyBzeXN0ZW0gbWVtb3J5LiAqL1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmM6MTc0NDpcdHJldCA9IGhtbV9kbWlycm9yX2NtZChzZWxmLVx1MDAzZWZkMSwgSE1NX0RNSVJST1JfUkVBRCwgYnVmZmVyLCBucGFnZXMpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMtMTc0NS1cdEFTU0VSVF9FUShyZXQsIDApO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jLTE3NTctXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYzoxNzU4Olx0cmV0ID0gaG1tX2RtaXJyb3JfY21kKHNlbGYtXHUwMDNlZmQwLCBITU1fRE1JUlJPUl9SRUFELCBidWZmZXIsIG5wYWdlcyk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy0xNzU5LVx0QVNTRVJUX0VRKHJldCwgMCk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmM9MTc3Mz1URVNUX0YoaG1tLCBleGNsdXNpdmUpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMtMTgwNC1cdC8qIE1hcCBtZW1vcnkgZXhjbHVzaXZlbHkgZm9yIGRldmljZSBhY2Nlc3MuICovXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYzoxODA1Olx0cmV0ID0gaG1tX2RtaXJyb3JfY21kKHNlbGYtXHUwMDNlZmQsIEhNTV9ETUlSUk9SX0VYQ0xVU0lWRSwgYnVmZmVyLCBucGFnZXMpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMtMTgwNi1cdEFTU0VSVF9FUShyZXQsIDApO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jLTE4MjAtXHQvKiBDaGVjayBhdG9taWMgYWNjZXNzIHJldm9rZWQgKi9cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jOjE4MjE6XHRyZXQgPSBobW1fZG1pcnJvcl9jbWQoc2VsZi1cdTAwM2VmZCwgSE1NX0RNSVJST1JfQ0hFQ0tfRVhDTFVTSVZFLCBidWZmZXIsIG5wYWdlcyk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy0xODIyLVx0QVNTRVJUX0VRKHJldCwgMCk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmM9MTgyNz1URVNUX0YoaG1tLCBleGNsdXNpdmVfbXByb3RlY3QpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMtMTg1OC1cdC8qIE1hcCBtZW1vcnkgZXhjbHVzaXZlbHkgZm9yIGRldmljZSBhY2Nlc3MuICovXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYzoxODU5Olx0cmV0ID0gaG1tX2RtaXJyb3JfY21kKHNlbGYtXHUwMDNlZmQsIEhNTV9ETUlSUk9SX0VYQ0xVU0lWRSwgYnVmZmVyLCBucGFnZXMpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMtMTg2MC1cdEFTU0VSVF9FUShyZXQsIDApO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jLTE4NzAtXHQvKiBTaW11bGF0ZSBhIGRldmljZSB3cml0aW5nIHN5c3RlbSBtZW1vcnkuICovXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYzoxODcxOlx0cmV0ID0gaG1tX2RtaXJyb3JfY21kKHNlbGYtXHUwMDNlZmQsIEhNTV9ETUlSUk9SX1dSSVRFLCBidWZmZXIsIG5wYWdlcyk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy0xODcyLVx0QVNTRVJUX0VRKHJldCwgLUVQRVJNKTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYz0xODgwPVRFU1RfRihobW0sIGV4Y2x1c2l2ZV9jb3cpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMtMTkxMy1cdC8qIE1hcCBtZW1vcnkgZXhjbHVzaXZlbHkgZm9yIGRldmljZSBhY2Nlc3MuICovXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYzoxOTE0Olx0cmV0ID0gaG1tX2RtaXJyb3JfY21kKHNlbGYtXHUwMDNlZmQsIEhNTV9ETUlSUk9SX0VYQ0xVU0lWRSwgYnVmZmVyLCBucGFnZXMpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMtMTkxNS1cdEFTU0VSVF9FUShyZXQsIDApO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jPTE5Nzg9VEVTVF9GKGhtbSwgaG1tX2d1cF90ZXN0KVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jLTIwMzUtXHQvKiBUYWtlIHNuYXBzaG90IHRvIENQVSBwYWdldGFibGVzICovXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYzoyMDM2Olx0cmV0ID0gaG1tX2RtaXJyb3JfY21kKHNlbGYtXHUwMDNlZmQsIEhNTV9ETUlSUk9SX1NOQVBTSE9ULCBidWZmZXIsIG5wYWdlcyk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy0yMDM3LVx0QVNTRVJUX0VRKHJldCwgMCk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmM9MjA2Nz1URVNUX0YoaG1tLCBobW1fY293X2luX2RldmljZSlcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy0yMTI4LVx0LyogVGFrZSBzbmFwc2hvdCB0byBDUFUgcGFnZXRhYmxlcyAqL1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmM6MjEyOTpcdHJldCA9IGhtbV9kbWlycm9yX2NtZChzZWxmLVx1MDAzZWZkLCBITU1fRE1JUlJPUl9TTkFQU0hPVCwgYnVmZmVyLCBucGFnZXMpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMtMjEzMC1cdEFTU0VSVF9FUShyZXQsIDApO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jPTIzMTY9VEVTVF9GKGhtbSwgbWlncmF0ZV9hbm9uX2h1Z2VfZmF1bHQpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMtMjM2OC1cdGlmICghaG1tX2lzX2NvaGVyZW50X3R5cGUodmFyaWFudC1cdTAwM2VkZXZpY2VfbnVtYmVyKSkge1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmM6MjM2OTpcdFx0cmV0ID0gaG1tX2RtaXJyb3JfY21kKHNlbGYtXHUwMDNlZmQsIEhNTV9ETUlSUk9SX1NOQVBTSE9ULFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMtMjM3MC1cdFx0XHRcdCAgICAgIGJ1ZmZlciwgbnBhZ2VzKTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYz0yNTgwPVRFU1RfRihobW0sIG1pZ3JhdGVfYW5vbl9odWdlX2Vycilcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy0yNjE2LVx0LyogTWlncmF0ZSBtZW1vcnkgdG8gZGV2aWNlIGJ1dCBmb3JjZSBhIFRIUCBhbGxvY2F0aW9uIGVycm9yLiAqL1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmM6MjYxNzpcdHJldCA9IGhtbV9kbWlycm9yX2NtZChzZWxmLVx1MDAzZWZkLCBITU1fRE1JUlJPUl9GTEFHUywgYnVmZmVyLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMtMjYxOC1cdFx0XHQgICAgICBITU1fRE1JUlJPUl9GTEFHX0ZBSUxfQUxMT0MpO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jLTI2NTgtXHQgKi9cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jOjI2NTk6XHRyZXQgPSBobW1fZG1pcnJvcl9jbWQoc2VsZi1cdTAwM2VmZCwgSE1NX0RNSVJST1JfRkxBR1MsIGJ1ZmZlcixcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jLTI2NjAtXHRcdFx0ICAgICAgSE1NX0RNSVJST1JfRkxBR19GQUlMX0FMTE9DKTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYz0yNjc1PVRFU1RfRihobW0sIG1pZ3JhdGVfYW5vbl9odWdlX3plcm9fZXJyKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jLTI3MDctXHQvKiBNaWdyYXRlIG1lbW9yeSB0byBkZXZpY2UgYnV0IGZvcmNlIGEgVEhQIGFsbG9jYXRpb24gZXJyb3IuICovXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYzoyNzA4Olx0cmV0ID0gaG1tX2RtaXJyb3JfY21kKHNlbGYtXHUwMDNlZmQsIEhNTV9ETUlSUk9SX0ZMQUdTLCBidWZmZXIsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy0yNzA5LVx0XHRcdCAgICAgIEhNTV9ETUlSUk9SX0ZMQUdfRkFJTF9BTExPQyk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMtMjczOC1cdC8qIE1pZ3JhdGUgbWVtb3J5IHRvIGRldmljZSBidXQgZm9yY2UgYSBUSFAgYWxsb2NhdGlvbiBlcnJvci4gKi9cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jOjI3Mzk6XHRyZXQgPSBobW1fZG1pcnJvcl9jbWQoc2VsZi1cdTAwM2VmZCwgSE1NX0RNSVJST1JfRkxBR1MsIGJ1ZmZlcixcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jLTI3NDAtXHRcdFx0ICAgICAgSE1NX0RNSVJST1JfRkxBR19GQUlMX0FMTE9DKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMDc6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU4MDUKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA5NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEhtbSBEbWlycm9yIE1vZHVsZSoqCgpPa2F5LCBzbyBsb29raW5nIGF0IHRoaXMsIGBURVNUX0hNTWAgc2VlbXMgdG8gYmUgcmVzcG9uc2libGUgZm9yIGNyZWF0aW5nIHR3byBkZXZpY2Ugbm9kZXM6IGAvZGV2L2htbV9kbWlycm9yMGAgYW5kIGAvZGV2L2htbV9kbWlycm9yMWAuIFJpZ2h0LCBhbmQgU3l6a2FsbGVyIGlzIHRoZSB0b29sIHRoYXQmIzM5O3MgaW50ZXJhY3Rpbmcgd2l0aCB0aGVzZSBkZXZpY2VzLCB1c2luZyB0aGVtIGFzIGEgdHJpZ2dlciBmb3IgYG1lbXJlbWFwX3BhZ2VzYCBhbmQgYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYC4gVGhhdCYjMzk7cyB0aGUga2V5OiBpdOKAmXMgdXNpbmcgdGhlc2UgY2FsbHMgb24gdGhlIGRldmljZXMuIEJ1dCBoYW5nIG9uLi4uaXNuJiMzOTt0IGBtZW1yZW1hcF9wYWdlc2AgYWxzbyBjYWxsZWQgZHVyaW5nIHRoZSBgZG1pcnJvcl9kZXZpY2VfaW5pdGAgZnVuY3Rpb24/IFRoYXQmIzM5O3Mgd2hlbiB0aGUgbW9kdWxlIGlzIGJlaW5nIGxvYWRlZCEgVGhhdCBzdWdnZXN0cyBhbiBpbnRlcmVzdGluZyBpbml0aWFsIHN0YXRlIGFuZCBpbnRlcmFjdGlvbiBwb2ludC4gSSBuZWVkIHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgZG1pcnJvcl9kZXZpY2VfaW5pdGAgdG8gZmlndXJlIG91dCB3aGF0JiMzOTtzIGdvaW5nIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAwNzo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkbWlycm9yX2RldmljZV9pbml0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2xpYi90ZXN0X2htbS5jPTE3NzI9c3RhdGljIHZvaWQgZG1pcnJvcl9kZXZpY2VfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpXG4tLVxubGliL3Rlc3RfaG1tLmMtMTc3OC1cbmxpYi90ZXN0X2htbS5jOjE3Nzk6c3RhdGljIGludCBkbWlycm9yX2RldmljZV9pbml0KHN0cnVjdCBkbWlycm9yX2RldmljZSAqbWRldmljZSwgaW50IGlkKVxubGliL3Rlc3RfaG1tLmMtMTc4MC17XG4tLVxubGliL3Rlc3RfaG1tLmM9MTgyMT1zdGF0aWMgaW50IF9faW5pdCBobW1fZG1pcnJvcl9pbml0KHZvaWQpXG4tLVxubGliL3Rlc3RfaG1tLmMtMTg0My1cdGZvciAoaWQgPSAwOyBpZCBcdTAwM2MgbmRldmljZXM7IGlkJiM0MzsmIzQzOykge1xubGliL3Rlc3RfaG1tLmM6MTg0NDpcdFx0cmV0ID0gZG1pcnJvcl9kZXZpY2VfaW5pdChkbWlycm9yX2RldmljZXMgJiM0MzsgaWQsIGlkKTtcbmxpYi90ZXN0X2htbS5jLTE4NDUtXHRcdGlmIChyZXQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDA3OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2MzIyCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQsIGdlYXJlZCB0b3dhcmQgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgZnJvbSBhIGZpcnN0LXBlcnNvbiBwZXJzcGVjdGl2ZToKCioqRGl2aW5nIGludG8gYGRtaXJyb3JfZGV2aWNlX2luaXRgKioKCkFscmlnaHQsIGxldCYjMzk7cyBjcmFjayBvcGVuIHRoaXMgYGRtaXJyb3JfZGV2aWNlX2luaXRgIGZ1bmN0aW9uLiBUaGUgbmFtZSBpdHNlbGYgaXMgcHJldHR5IHNlbGYtZXhwbGFuYXRvcnksIGJ1dCBJIHdhbnQgdG8gZ2V0IGEgZ29vZCBoYW5kbGUgb24gd2hhdCYjMzk7cyBnb2luZyBvbiBoZXJlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gbG9vayBmb3IgdGhlIGhpZ2gtbGV2ZWwgY29udHJvbCBmbG93OiBXaGF0JiMzOTtzIHRoZSBlbnRyeSBwb2ludD8gV2hhdCBraW5kIG9mIGRhdGEgc3RydWN0dXJlcyBhcmUgYmVpbmcgaW5pdGlhbGl6ZWQ/IEFueSBleHRlcm5hbCBkZXBlbmRlbmNpZXMgb3Igc3lzdGVtIGNhbGxzIHRoYXQgYXJlIGltbWVkaWF0ZWx5IGFwcGFyZW50PyBJdCYjMzk7cyBsaWtlbHkgaW52b2x2ZWQgaW4gc2V0dGluZyB1cCB0aGUgZGV2aWNlIG1pcnJvciBkcml2ZXIsIHNvIEkmIzM5O20gZXhwZWN0aW5nIHNvbWUga2luZCBvZiByZXNvdXJjZSBhbGxvY2F0aW9uLCByZWdpc3RlciBtYXBwaW5nLCBhbmQgaW50ZXJydXB0IGNvbmZpZ3VyYXRpb24uIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGhhcmR3YXJlLXNwZWNpZmljIHBhcmFtZXRlcnMgaXQmIzM5O3MgdGFraW5nIGFuZCBob3cgaXQgaGFuZGxlcyBwb3RlbnRpYWwgZXJyb3JzIGR1cmluZyBpbml0aWFsaXphdGlvbi4gR2l2ZW4gdGhhdCBpdCYjMzk7cyBhIGRldmljZSBpbml0IGZ1bmN0aW9uLCBJJiMzOTtsbCBiZSBsb29raW5nIHNwZWNpZmljYWxseSBmb3Igd2hhdCByZXNvdXJjZXMgaXQmIzM5O3MgdHJ5aW5nIHRvIG1hbmFnZS4gSSBhbHNvIGV4cGVjdCBhIG51bWJlciBvZiBjaGVja3MuIEFyZSB3ZSBkb2luZyBhIGNoZWNrIHRvIHNlZSBpZiB3ZSYjMzk7dmUgYWxyZWFkeSBkb25lIGFuIGluaXRpYWxpemF0aW9uPyBUaGF0JiMzOTtzIGNvbW1vbiwgc28gaXQmIzM5O3MgcHJvYmFibHkgaGVyZS4gSSYjMzk7bGwgYWxzbyBiZSBzY2FubmluZyBmb3IgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucy4gSSYjMzk7bSBnb2luZyB0byBzY2FuIHRoZSBjb2RlIGxvb2tpbmcgZm9yIHdoZXJlIGl0IGlzIHdyaXRpbmcgYW5kIHJlYWRpbmcgZGF0YSBmcm9tIHJlZ2lzdGVycy4gVGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRldGVybWluZSBob3cgdGhlIGRyaXZlciBoYW5kbGVzIGRpZmZlcmVudCBoYXJkd2FyZSBjb25maWd1cmF0aW9ucyBvciB2ZXJzaW9ucyBvZiB0aGUgdGFyZ2V0IGRldmljZS4gQXJlIHRoZXJlIGNvbmRpdGlvbmFsIGJsb2NrcyBiYXNlZCBvbiBkZXZpY2UgSURzIG9yIGNhcGFiaWxpdGllcz8gQW55IHVzZSBvZiBwbGF0Zm9ybS1zcGVjaWZpYyBtYWNyb3M/IEkgYWxzbyB3YW50IHRvIHBheSBjYXJlZnVsIGF0dGVudGlvbiB0byBhbnkgbG9ja2luZyBtZWNoYW5pc21zIHRvIGVuc3VyZSBjb25jdXJyZW5jeSBpcyBoYW5kbGVkIGNvcnJlY3RseSwgc2luY2UgdGhpcyBpcyBhIGtlcm5lbCBmdW5jdGlvbi4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgcmVmZXJlbmNlcyB0byBtdXRleGVzLCBzZW1hcGhvcmVzLCBvciBvdGhlciBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcy4gQW5kIG9mIGNvdXJzZSwgSSYjMzk7bGwga2VlcCBhbiBleWUgb3V0IGZvciBob3cgdGhpcyBmdW5jdGlvbiBoYW5kbGVzIHBvd2VyIG1hbmFnZW1lbnQuIElzIGl0IHNldHRpbmcgdXAgYW55IGNsb2NrcyBvciBwb3dlciBkb21haW5zPyBBbnkgc2xlZXAgb3Igd2FrZS11cCBjYWxscz8gV2hhdCBpcyB0aGUgcmVnaXN0ZXIgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2U/IFRoZSBvdmVyYWxsIGdvYWwgaXMgdG8gZm9ybSBhIHNvbGlkIG1lbnRhbCBtb2RlbCBvZiBob3cgYGRtaXJyb3JfZGV2aWNlX2luaXRgIGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlIG9mIHRoZSBkcml2ZXImIzM5O3Mgb3BlcmF0aW9uLCBhbmQgaG93IHJvYnVzdCBhbmQgZWZmaWNpZW50IGl0IGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAwNzo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2xpYi90ZXN0X2htbS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTc3OSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNzc5Olx0c3RhdGljIGludCBkbWlycm9yX2RldmljZV9pbml0KHN0cnVjdCBkbWlycm9yX2RldmljZSAqbWRldmljZSwgaW50IGlkKVxuMTc4MDpcdHtcbjE3ODE6XHRcdGRldl90IGRldjtcbjE3ODI6XHRcdGludCByZXQ7XG4xNzgzOlx0XG4xNzg0Olx0XHRkZXYgPSBNS0RFVihNQUpPUihkbWlycm9yX2RldiksIGlkKTtcbjE3ODU6XHRcdG11dGV4X2luaXQoXHUwMDI2bWRldmljZS1cdTAwM2VkZXZtZW1fbG9jayk7XG4xNzg2Olx0XHRzcGluX2xvY2tfaW5pdChcdTAwMjZtZGV2aWNlLVx1MDAzZWxvY2spO1xuMTc4NzpcdFxuMTc4ODpcdFx0Y2Rldl9pbml0KFx1MDAyNm1kZXZpY2UtXHUwMDNlY2RldmljZSwgXHUwMDI2ZG1pcnJvcl9mb3BzKTtcbjE3ODk6XHRcdG1kZXZpY2UtXHUwMDNlY2RldmljZS5vd25lciA9IFRISVNfTU9EVUxFO1xuMTc5MDpcdFx0bWRldmljZS1cdTAwM2VkZXZpY2UucmVsZWFzZSA9IGRtaXJyb3JfZGV2aWNlX3JlbGVhc2U7XG4xNzkxOlx0XG4xNzkyOlx0XHRkZXZpY2VfaW5pdGlhbGl6ZShcdTAwMjZtZGV2aWNlLVx1MDAzZWRldmljZSk7XG4xNzkzOlx0XHRtZGV2aWNlLVx1MDAzZWRldmljZS5kZXZ0ID0gZGV2O1xuMTc5NDpcdFxuMTc5NTpcdFx0cmV0ID0gZGV2X3NldF9uYW1lKFx1MDAyNm1kZXZpY2UtXHUwMDNlZGV2aWNlLCBcJiMzNDtobW1fZG1pcnJvciV1XCYjMzQ7LCBpZCk7XG4xNzk2Olx0XHRpZiAocmV0KVxuMTc5NzpcdFx0XHRnb3RvIHB1dF9kZXZpY2U7XG4xNzk4Olx0XG4xNzk5Olx0XHQvKiBCdWlsZCBhIGxpc3Qgb2YgZnJlZSBaT05FX0RFVklDRSBzdHJ1Y3QgcGFnZXMgKi9cbjE4MDA6XHRcdHJldCA9IGRtaXJyb3JfYWxsb2NhdGVfY2h1bmsobWRldmljZSwgTlVMTCwgZmFsc2UpO1xuMTgwMTpcdFx0aWYgKHJldClcbjE4MDI6XHRcdFx0Z290byBwdXRfZGV2aWNlO1xuMTgwMzpcdFxuMTgwNDpcdFx0cmV0ID0gY2Rldl9kZXZpY2VfYWRkKFx1MDAyNm1kZXZpY2UtXHUwMDNlY2RldmljZSwgXHUwMDI2bWRldmljZS1cdTAwM2VkZXZpY2UpO1xuMTgwNTpcdFx0aWYgKHJldClcbjE4MDY6XHRcdFx0Z290byBwdXRfZGV2aWNlO1xuMTgwNzpcdFxuMTgwODpcdFx0cmV0dXJuIDA7XG4xODA5Olx0XG4xODEwOlx0cHV0X2RldmljZTpcbjE4MTE6XHRcdHB1dF9kZXZpY2UoXHUwMDI2bWRldmljZS1cdTAwM2VkZXZpY2UpO1xuMTgxMjpcdFx0cmV0dXJuIHJldDtcbjE4MTM6XHR9XG4xODE0Olx0XG4xODE1Olx0c3RhdGljIHZvaWQgZG1pcnJvcl9kZXZpY2VfcmVtb3ZlKHN0cnVjdCBkbWlycm9yX2RldmljZSAqbWRldmljZSlcbjE4MTY6XHR7XG4xODE3Olx0XHRjZGV2X2RldmljZV9kZWwoXHUwMDI2bWRldmljZS1cdTAwM2VjZGV2aWNlLCBcdTAwMjZtZGV2aWNlLVx1MDAzZWRldmljZSk7XG4xODE4Olx0XHRwdXRfZGV2aWNlKFx1MDAyNm1kZXZpY2UtXHUwMDNlZGV2aWNlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMDc6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc0MDgKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAzNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJbXBsaWNhdGlvbnMgb2YgYG1lbXJlbWFwX3BhZ2VzYCBhbmQgTW9kdWxlIExvYWRpbmcqKgoKT2theSwgc28gYGRtaXJyb3JfYWxsb2NhdGVfY2h1bmtgIGNhbGxzIGBtZW1yZW1hcF9wYWdlc2AuIFRoYXQmIzM5O3MgdGhlIGtleS4gSnVzdCBsb2FkaW5nIHRoZSBgdGVzdF9obW1gIG1vZHVsZSBpcyBnb2luZyB0byB0cmlnZ2VyIGBtZW1yZW1hcF9wYWdlc2AsIGFuZCB0aGF0IGluIHR1cm4gaGl0cyBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiBgVEVTVF9ITU1gIGlzIGV2ZW4gZW5hYmxlZCBvbiBTeXpib3QsIGJlY2F1c2UgdGhvc2UgYm90cyB1c3VhbGx5IGhhdmUgYSB0b24gb2YgYFRFU1RfKmAgY29uZmlncyBzZXQuIFJpZ2h0LCBsZXQmIzM5O3MganVzdCBnbyBhaGVhZCBhbmQgYWRkIGBURVNUX0hNTWAgdG8gYEVuYWJsZUNvbmZpZ3NgIHRvIG1ha2Ugc3VyZSB3ZSYjMzk7cmUgdGVzdGluZyB0aGlzIHNjZW5hcmlvLgoKSG9sZCBvbiwgSSBzZWUgYSBkZXBlbmRlbmN5IGlzc3VlLiBgVEVTVF9ITU1gIGRlcGVuZHMgb24gYERFVklDRV9QUklWQVRFYCwgd2hpY2ggaW4gdHVybiBkZXBlbmRzIG9uIGBaT05FX0RFVklDRWAuIFNvLCB0byBiZSBjb21wbGV0ZSwgSSBuZWVkIHRvIGFkZCBhbGwgdGhyZWUgdG8gdGhlIGBFbmFibGVDb25maWdzYDogYFRFU1RfSE1NYCwgYERFVklDRV9QUklWQVRFYCwgYW5kIGBaT05FX0RFVklDRWAuIFRoYXQgc2hvdWxkIGVuc3VyZSB0aGUgcmVsZXZhbnQgY29kZSBwYXRocyBhcmUgYWN0aXZlLgoKTm93LCBsZXQmIzM5O3MgcXVpY2tseSB2ZXJpZnkgd2hpY2ggZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBiZWluZyB0b3VjaGVkIGJ5IHRoaXMgcGF0Y2ggc28gSSBjYW4gemVybyBpbiBvbiB0aGVtIGR1cmluZyB0ZXN0aW5nLiBJdCBsb29rcyBsaWtlIHRoZSBwYXRjaCBtb2RpZmllczogYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYCwgYG1lbW1hcF9pbml0X2NvbXBvdW5kYCwgYHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9mcm9tX3RlbXBsYXRlYCwgYHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9zbG93YCwgYHpvbmVfZGV2aWNlX3RhaWxfcGFnZV9pbml0YCwgYHpvbmVfZGV2aWNlX3BhZ2VfdXBkYXRlX3RlbXBsYXRlYCwgYW5kIGBtZW1jcHlfbm9udGVtcG9yYWxgLgoKV2FpdCBhIG1pbnV0ZSwgYG1lbWNweV9ub250ZW1wb3JhbGAgaXMgaW5saW5lLCBzbyBpdCYjMzk7cyBwcm9iYWJseSBub3Qgd2hlcmUgdGhlIHJlYWwgbG9naWMgaXMgaGFwcGVuaW5nLCBhbmQgaXMgYSBtYWNyby4gQW5kIHRoZSBgem9uZV9kZXZpY2VfcGFnZV9pbml0X2Zyb21fdGVtcGxhdGVgLCBgem9uZV9kZXZpY2VfcGFnZV9pbml0X3Nsb3dgLCBgem9uZV9kZXZpY2VfdGFpbF9wYWdlX2luaXRgIGFuZCBgem9uZV9kZXZpY2VfcGFnZV91cGRhdGVfdGVtcGxhdGVgIGFyZSBhbGwgc3RhdGljLiBUaGF0IHNpbXBsaWZpZXMgdGhpbmdzIGEgYml0LiBTbyByZWFsbHksIHRoZSBwcmltYXJ5IGZvY3VzIGZvciBpbnZlc3RpZ2F0aW9uIHNob3VsZCBiZSBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgIGFuZCBgbWVtbWFwX2luaXRfY29tcG91bmRgLiBJIG5lZWQgdG8gY29uZmlybSBpZiB0aG9zZSBhcmUgZXhwb3J0ZWQgb3Igbm90LCBiZWNhdXNlIHN0YXRpYyBmdW5jdGlvbnMgd2l0aGluIHRoZSBtb2R1bGUgYXJlIGxlc3MgY3JpdGljYWwgZm9yIGV4dGVybmFsIGRlcGVuZGVuY2llcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMDc6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dm9pZCBfX3JlZiBtZW1tYXBfaW5pdF96b25lX2RldmljZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tbV9pbml0LmM9MTEzMT1zdGF0aWMgdm9pZCBfX3JlZiBtZW1tYXBfaW5pdF9jb21wb3VuZChzdHJ1Y3QgcGFnZSAqaGVhZCxcbi0tXG5tbS9tbV9pbml0LmMtMTE3MS1cbm1tL21tX2luaXQuYzoxMTcyOnZvaWQgX19yZWYgbWVtbWFwX2luaXRfem9uZV9kZXZpY2Uoc3RydWN0IHpvbmUgKnpvbmUsXG5tbS9tbV9pbml0LmMtMTE3My1cdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAwNzo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODM2MQoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDE1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTWVtb3J5IE1hcHBpbmcgSW5pdGlhbGl6YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaW1tZWRpYXRlbHkgSSBzZWUgdGhhdCBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgIGlzbiYjMzk7dCBzdGF0aWMuIFRoYXQmIzM5O3MgYSBiaXQgb2YgYSBrZXkgb2JzZXJ2YXRpb24sIGlzbiYjMzk7dCBpdD8gT24gdGhlIG90aGVyIGhhbmQsIGBtZW1tYXBfaW5pdF9jb21wb3VuZGAgKmlzKiBzdGF0aWMuIEhtbSwgdGhhdCBzdWdnZXN0cyBpdCBtaWdodCBnZXQgaW5saW5lZCBieSB0aGUgY29tcGlsZXIsIG9yIHBlcmhhcHMgZG9lc24mIzM5O3QgZXZlbiBoYXZlIGEgc2VwYXJhdGUgc3ltYm9sLCBzbyBpdCBtYXkgbm90IGJlIGFzIGNyaXRpY2FsIHRvIGZvY3VzIG9uIGluIGRldGFpbC4gVGltZSB0byB2ZXJpZnkgaWYgdGhhdOKAmXMgdGhlIGNhc2UgYnkgcXVpY2tseSBzY2FubmluZyBmb3IgYW55IG90aGVyIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGluIHRoaXMgYXJlYS4KCmBtZW1tYXBfaW5pdF96b25lX2RldmljZWAgcmVhbGx5IHNlZW1zIHRvIGJlIHRoZSBjZW50cmFsIGZ1bmN0aW9uIGhlcmUuIEJ1dCwgd2hhdCBlbHNlIGlzIGFmZmVjdGVkPyBMZXQgbWUgdGFrZSBhIHF1aWNrIGxvb2sgdG8gY29uZmlybSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGZ1bmN0aW9ucyB0aGF0IGFyZSBjaGFuZ2VkLiBBaGEsIHRoZSBwYXRjaCB0b3VjaGVzIGBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaGAuIEludGVyZXN0aW5nLiBJdCBsb29rcyBsaWtlIHRoZXkmIzM5O3JlIGFkZGluZyBgbW92bnRpXzhgLCBgbW92bnRpXzE2YCwgYG1vdm50aV8zMmAsIGFuZCBgbW92bnRpXzY0YC4gVGhhdCBpbmRpY2F0ZXMgY2hhbmdlcyByZWxhdGVkIHRvIG5vbi10ZW1wb3JhbCBzdG9yZXMsIHdoaWNoIGlzIGEgbG93LWxldmVsIG9wdGltaXphdGlvbi4gSSBzaG91bGQgYWxzbyBjaGVjayBvdXQgdGhlIG1vZGlmaWNhdGlvbiB0byBgbWVtY3B5X2ZsdXNoY2FjaGVgLiBUaGVzZSBjaGFuZ2VzIGFyZSBhbGwgcmVsYXRlZCwgYW5kIHdpbGwgcmVxdWlyZSBhIGRlZXAgZGl2ZSBpbnRvIHRoZSBpbXBsaWNhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDA3OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbWNweV9mbHVzaGNhY2hlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vc3RyaW5nLmg9NDQ9ZXh0ZXJuIHZvaWQgKl9fbWVtc2V0KHZvaWQgKiwgaW50LCBfX2tlcm5lbF9zaXplX3QpO1xuLS1cbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vc3RyaW5nLmgtNDctI2RlZmluZSBfX0hBVkVfQVJDSF9NRU1DUFlfRkxVU0hDQUNIRVxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9zdHJpbmcuaDo0ODp2b2lkIG1lbWNweV9mbHVzaGNhY2hlKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgY250KTtcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vc3RyaW5nLmgtNDktI2VuZGlmXG4tLVxuYXJjaC9hcm02NC9saWIvdWFjY2Vzc19mbHVzaGNhY2hlLmMtOS1cbmFyY2gvYXJtNjQvbGliL3VhY2Nlc3NfZmx1c2hjYWNoZS5jOjEwOnZvaWQgbWVtY3B5X2ZsdXNoY2FjaGUodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBjbnQpXG5hcmNoL2FybTY0L2xpYi91YWNjZXNzX2ZsdXNoY2FjaGUuYy0xMS17XG4tLVxuYXJjaC9hcm02NC9saWIvdWFjY2Vzc19mbHVzaGNhY2hlLmMtMTktfVxuYXJjaC9hcm02NC9saWIvdWFjY2Vzc19mbHVzaGNhY2hlLmM6MjA6RVhQT1JUX1NZTUJPTF9HUEwobWVtY3B5X2ZsdXNoY2FjaGUpO1xuYXJjaC9hcm02NC9saWIvdWFjY2Vzc19mbHVzaGNhY2hlLmMtMjEtXG4tLVxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3N0cmluZy5oPTI4PWV4dGVybiB2b2lkICogbWVtY2hyKGNvbnN0IHZvaWQgKixpbnQsX19rZXJuZWxfc2l6ZV90KTtcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zdHJpbmcuaDoyOTp2b2lkIG1lbWNweV9mbHVzaGNhY2hlKHZvaWQgKmRlc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IHNpemUpO1xuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3N0cmluZy5oLTMwLVxuLS1cbmFyY2gvcG93ZXJwYy9saWIvcG1lbS5jPTY5PXNpemVfdCBjb3B5X2Zyb21fdXNlcl9mbHVzaGNhY2hlKHZvaWQgKmRlc3QsIGNvbnN0IHZvaWQgX191c2VyICpzcmMsXG4tLVxuYXJjaC9wb3dlcnBjL2xpYi9wbWVtLmMtODAtXG5hcmNoL3Bvd2VycGMvbGliL3BtZW0uYzo4MTp2b2lkIG1lbWNweV9mbHVzaGNhY2hlKHZvaWQgKmRlc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IHNpemUpXG5hcmNoL3Bvd2VycGMvbGliL3BtZW0uYy04Mi17XG4tLVxuYXJjaC9wb3dlcnBjL2xpYi9wbWVtLmMtODctfVxuYXJjaC9wb3dlcnBjL2xpYi9wbWVtLmM6ODg6RVhQT1JUX1NZTUJPTChtZW1jcHlfZmx1c2hjYWNoZSk7XG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0Lmg9ODA9aW50IHN0cmNtcChjb25zdCBjaGFyICpjcywgY29uc3QgY2hhciAqY3QpO1xuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oLTgzLSNkZWZpbmUgX19IQVZFX0FSQ0hfTUVNQ1BZX0ZMVVNIQ0FDSEUgMVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0Lmg6ODQ6dm9pZCBfX21lbWNweV9mbHVzaGNhY2hlKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgY250KTtcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oLTg1LVxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oPTEwNj1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbW92bnRpXzY0KHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjKVxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oLTExMS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oOjExMjpzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbWVtY3B5X2ZsdXNoY2FjaGUodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaC0xMTMtXHRcdFx0XHRcdCAgICAgIHNpemVfdCBjbnQpXG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmgtMTMxLVx0XHRcdCAqIGluc3RlYWQgb2Ygc2VuZGluZyB0aG9zZSBuZWFyYnkgZml4ZWQtc2l6ZVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0Lmg6MTMyOlx0XHRcdCAqIGNhc2VzIGJhY2sgdG8gX19tZW1jcHlfZmx1c2hjYWNoZSgpLlxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmgtMTMzLVx0XHRcdCAqL1xuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oLTE1NC1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oOjE1NTpcdF9fbWVtY3B5X2ZsdXNoY2FjaGUoZHN0LCBzcmMsIGNudCk7XG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaC0xNTYtfVxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oPTE2Mz1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbWVtY3B5X25vbnRlbXBvcmFsKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLFxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oLTE2NS17XG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaDoxNjY6XHRtZW1jcHlfZmx1c2hjYWNoZShkc3QsIHNyYywgY250KTtcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oLTE2Ny19XG4tLVxuYXJjaC94ODYva2VybmVsL2NyYXNoLmM9NTE0PXZvaWQgYXJjaF9jcmFzaF9oYW5kbGVfaG90cGx1Z19ldmVudChzdHJ1Y3Qga2ltYWdlICppbWFnZSwgdm9pZCAqYXJnKVxuLS1cbmFyY2gveDg2L2tlcm5lbC9jcmFzaC5jLTU2NS1cdHhjaGcoXHUwMDI2a2V4ZWNfY3Jhc2hfaW1hZ2UsIE5VTEwpO1xuYXJjaC94ODYva2VybmVsL2NyYXNoLmM6NTY2Olx0bWVtY3B5X2ZsdXNoY2FjaGUob2xkX2VsZmNvcmVoZHIsIGVsZmJ1ZiwgZWxmc3opO1xuYXJjaC94ODYva2VybmVsL2NyYXNoLmMtNTY3LVx0eGNoZyhcdTAwMjZrZXhlY19jcmFzaF9pbWFnZSwgaW1hZ2UpO1xuLS1cbmFyY2gveDg2L2xpYi91c2VyY29weV82NC5jPTQ2PXNpemVfdCBjb3B5X3VzZXJfZmx1c2hjYWNoZSh2b2lkICpkc3QsIGNvbnN0IHZvaWQgX191c2VyICpzcmMsIHNpemVfdCBzaXplKVxuLS1cbmFyY2gveDg2L2xpYi91c2VyY29weV82NC5jLTc5LVxuYXJjaC94ODYvbGliL3VzZXJjb3B5XzY0LmM6ODA6dm9pZCBfX21lbWNweV9mbHVzaGNhY2hlKHZvaWQgKl9kc3QsIGNvbnN0IHZvaWQgKl9zcmMsIHNpemVfdCBzaXplKVxuYXJjaC94ODYvbGliL3VzZXJjb3B5XzY0LmMtODEte1xuLS1cbmFyY2gveDg2L2xpYi91c2VyY29weV82NC5jLTE0Mi19XG5hcmNoL3g4Ni9saWIvdXNlcmNvcHlfNjQuYzoxNDM6RVhQT1JUX1NZTUJPTF9HUEwoX19tZW1jcHlfZmx1c2hjYWNoZSk7XG5hcmNoL3g4Ni9saWIvdXNlcmNvcHlfNjQuYy0xNDQtI2VuZGlmXG4tLVxuZHJpdmVycy9kYXgvZnNkZXYuYz0zMT1zdGF0aWMgdm9pZCBmc2Rldl93cml0ZV9kYXgodm9pZCAqYWRkciwgc3RydWN0IHBhZ2UgKnBhZ2UsXG4tLVxuZHJpdmVycy9kYXgvZnNkZXYuYy0zNy1cbmRyaXZlcnMvZGF4L2ZzZGV2LmM6Mzg6XHRcdG1lbWNweV9mbHVzaGNhY2hlKGFkZHIsIG1lbSAmIzQzOyBvZmYsIGNodW5rKTtcbmRyaXZlcnMvZGF4L2ZzZGV2LmMtMzktXHRcdGt1bm1hcF9sb2NhbChtZW0pO1xuLS1cbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlLmM9MTc9c3RhdGljIHZvaWQgY2FjaGVfaW5mb193cml0ZShzdHJ1Y3QgcGNhY2hlX2NhY2hlICpjYWNoZSlcbi0tXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZS5jLTI1LVx0Y2FjaGUtXHUwMDNlaW5mb19pbmRleCA9IChjYWNoZS1cdTAwM2VpbmZvX2luZGV4ICYjNDM7IDEpICUgUENBQ0hFX01FVEFfSU5ERVhfTUFYO1xuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGUuYzoyNjpcdG1lbWNweV9mbHVzaGNhY2hlKGdldF9jYWNoZV9pbmZvX2FkZHIoY2FjaGUpLCBjYWNoZV9pbmZvLFxuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGUuYy0yNy1cdFx0XHRzaXplb2Yoc3RydWN0IHBjYWNoZV9jYWNoZV9pbmZvKSk7XG4tLVxuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGUuYz04Nz12b2lkIGNhY2hlX3Bvc19lbmNvZGUoc3RydWN0IHBjYWNoZV9jYWNoZSAqY2FjaGUsXG4tLVxuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGUuYy0xMDAtXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZS5jOjEwMTpcdG1lbWNweV9mbHVzaGNhY2hlKHBvc19vbm1lZGlhX2FkZHIsIFx1MDAyNnBvc19vbm1lZGlhLCBzaXplb2Yoc3RydWN0IHBjYWNoZV9jYWNoZV9wb3Nfb25tZWRpYSkpO1xuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGUuYy0xMDItXHRwbWVtX3dtYigpO1xuLS1cbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlX2Rldi5jPTE0MD1zdGF0aWMgdm9pZCBzYl93cml0ZShzdHJ1Y3QgcGNhY2hlX2NhY2hlX2RldiAqY2FjaGVfZGV2LCBzdHJ1Y3QgcGNhY2hlX3NiICpzYilcbi0tXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZV9kZXYuYy0xNDMtXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZV9kZXYuYzoxNDQ6XHRtZW1jcHlfZmx1c2hjYWNoZShzYl9hZGRyLCBzYiwgc2l6ZW9mKHN0cnVjdCBwY2FjaGVfc2IpKTtcbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlX2Rldi5jLTE0NS1cdHBtZW1fd21iKCk7XG4tLVxuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGVfa2V5LmM9MTE0PXN0YXRpYyB2b2lkIGFwcGVuZF9sYXN0X2tzZXQoc3RydWN0IHBjYWNoZV9jYWNoZSAqY2FjaGUsIHUzMiBuZXh0X3NlZylcbi0tXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZV9rZXkuYy0xMjItXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZV9rZXkuYzoxMjM6XHRtZW1jcHlfZmx1c2hjYWNoZShnZXRfa2V5X2hlYWRfYWRkcihjYWNoZSksIFx1MDAyNmtzZXRfb25tZWRpYSwgc2l6ZW9mKHN0cnVjdCBwY2FjaGVfY2FjaGVfa3NldF9vbm1lZGlhKSk7XG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZV9rZXkuYy0xMjQtXHRwbWVtX3dtYigpO1xuLS1cbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlX2tleS5jPTEyOD1pbnQgY2FjaGVfa3NldF9jbG9zZShzdHJ1Y3QgcGNhY2hlX2NhY2hlICpjYWNoZSwgc3RydWN0IHBjYWNoZV9jYWNoZV9rc2V0ICprc2V0KVxuLS1cbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlX2tleS5jLTE1My1cdFx0LyogY2xlYXIgb3V0ZGF0ZWQga3NldCBpbiBuZXh0IHNlZyAqL1xuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGVfa2V5LmM6MTU0Olx0XHRtZW1jcHlfZmx1c2hjYWNoZShuZXh0X3NlZy1cdTAwM2VzZWdtZW50LmRhdGEsIFx1MDAyNnBjYWNoZV9lbXB0eV9rc2V0LFxuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGVfa2V5LmMtMTU1LVx0XHRcdFx0XHRzaXplb2Yoc3RydWN0IHBjYWNoZV9jYWNoZV9rc2V0X29ubWVkaWEpKTtcbi0tXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZV9rZXkuYy0xNjUtXHQvKiBjbGVhciBvdXRkYXRlZCBrc2V0IGFmdGVyIGN1cnJlbnQga3NldCAqL1xuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGVfa2V5LmM6MTY2Olx0bWVtY3B5X2ZsdXNoY2FjaGUoZ2V0X2tleV9oZWFkX2FkZHIoY2FjaGUpICYjNDM7IGtzZXRfb25tZWRpYV9zaXplLCBcdTAwMjZwY2FjaGVfZW1wdHlfa3NldCxcbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlX2tleS5jLTE2Ny1cdFx0XHRcdHNpemVvZihzdHJ1Y3QgcGNhY2hlX2NhY2hlX2tzZXRfb25tZWRpYSkpO1xuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGVfa2V5LmMtMTY4LVx0Lyogd3JpdGUgY3VycmVudCBrc2V0IGludG8gc2VnbWVudCAqL1xuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGVfa2V5LmM6MTY5Olx0bWVtY3B5X2ZsdXNoY2FjaGUoZ2V0X2tleV9oZWFkX2FkZHIoY2FjaGUpLCBrc2V0X29ubWVkaWEsIGtzZXRfb25tZWRpYV9zaXplKTtcbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlX2tleS5jLTE3MC1cdHBtZW1fd21iKCk7XG4tLVxuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGVfc2VnbWVudC5jPTIwPXN0YXRpYyB2b2lkIGNhY2hlX3NlZ19pbmZvX3dyaXRlKHN0cnVjdCBwY2FjaGVfY2FjaGVfc2VnbWVudCAqY2FjaGVfc2VnKVxuLS1cbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlX3NlZ21lbnQuYy0zMS1cdHNlZ19pbmZvX2FkZHIgPSBnZXRfc2VnX2luZm9fYWRkcihjYWNoZV9zZWcpO1xuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGVfc2VnbWVudC5jOjMyOlx0bWVtY3B5X2ZsdXNoY2FjaGUoc2VnX2luZm9fYWRkciwgc2VnX2luZm8sIHNpemVvZihzdHJ1Y3QgcGNhY2hlX3NlZ21lbnRfaW5mbykpO1xuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGVfc2VnbWVudC5jLTMzLVx0cG1lbV93bWIoKTtcbi0tXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZV9zZWdtZW50LmM9MTI2PXN0YXRpYyB2b2lkIGNhY2hlX3NlZ19jdHJsX3dyaXRlKHN0cnVjdCBwY2FjaGVfY2FjaGVfc2VnbWVudCAqY2FjaGVfc2VnKVxuLS1cbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlX3NlZ21lbnQuYy0xMzYtXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZV9zZWdtZW50LmM6MTM3Olx0bWVtY3B5X2ZsdXNoY2FjaGUoZ2V0X2NhY2hlX3NlZ19nZW5fYWRkcihjYWNoZV9zZWcpLCBcdTAwMjZjYWNoZV9zZWdfZ2VuLCBzaXplb2Yoc3RydWN0IHBjYWNoZV9jYWNoZV9zZWdfZ2VuKSk7XG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZV9zZWdtZW50LmMtMTM4LVx0cG1lbV93bWIoKTtcbi0tXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZV9zZWdtZW50LmM9MTgyPWludCBjYWNoZV9zZWdfaW5pdChzdHJ1Y3QgcGNhY2hlX2NhY2hlICpjYWNoZSwgdTMyIHNlZ19pZCwgdTMyIGNhY2hlX3NlZ19pZCxcbi0tXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZV9zZWdtZW50LmMtMjE2LVx0XHQvKiBjbGVhciBvdXRkYXRlZCBrc2V0IGluIHNlZ21lbnQgKi9cbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlX3NlZ21lbnQuYzoyMTc6XHRcdG1lbWNweV9mbHVzaGNhY2hlKHNlZ21lbnQtXHUwMDNlZGF0YSwgXHUwMDI2cGNhY2hlX2VtcHR5X2tzZXQsIHNpemVvZihzdHJ1Y3QgcGNhY2hlX2NhY2hlX2tzZXRfb25tZWRpYSkpO1xuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGVfc2VnbWVudC5jLTIxOC1cdFx0cG1lbV93bWIoKTtcbi0tXG5kcml2ZXJzL21kL2RtLXdyaXRlY2FjaGUuYz00Nj1kbyB7XHRcdFx0XHRcdFx0XHRcdFxcXG5kcml2ZXJzL21kL2RtLXdyaXRlY2FjaGUuYy00Ny1cdHR5cGVvZihkZXN0KSB1bmlxID0gKHNyYyk7XHRcdFx0XHRcXFxuZHJpdmVycy9tZC9kbS13cml0ZWNhY2hlLmM6NDg6XHRtZW1jcHlfZmx1c2hjYWNoZShcdTAwMjYoZGVzdCksIFx1MDAyNnVuaXEsIHNpemVvZihkZXN0KSk7XHRcXFxuZHJpdmVycy9tZC9kbS13cml0ZWNhY2hlLmMtNDktfSB3aGlsZSAoMClcbi0tXG5kcml2ZXJzL21kL2RtLXdyaXRlY2FjaGUuYz0xMTkwPXN0YXRpYyBpbnQgd3JpdGVjYWNoZV9tZXNzYWdlKHN0cnVjdCBkbV90YXJnZXQgKnRpLCB1bnNpZ25lZCBpbnQgYXJnYywgY2hhciAqKmFyZ3YsXG4tLVxuZHJpdmVycy9tZC9kbS13cml0ZWNhY2hlLmMtMTIwOS1cbmRyaXZlcnMvbWQvZG0td3JpdGVjYWNoZS5jOjEyMTA6c3RhdGljIHZvaWQgbWVtY3B5X2ZsdXNoY2FjaGVfb3B0aW1pemVkKHZvaWQgKmRlc3QsIHZvaWQgKnNvdXJjZSwgc2l6ZV90IHNpemUpXG5kcml2ZXJzL21kL2RtLXdyaXRlY2FjaGUuYy0xMjExLXtcbi0tXG5kcml2ZXJzL21kL2RtLXdyaXRlY2FjaGUuYy0xMjI0LVx0ICogTk9URTogdGhpcyBoYXBwZW5zIHRvIGJlIHRoZSBjYXNlIG5vdyAod2l0aCBkbS13cml0ZWNhY2hlJiMzOTtzIHNpbmdsZVxuZHJpdmVycy9tZC9kbS13cml0ZWNhY2hlLmM6MTIyNTpcdCAqIHRocmVhZGVkIG1vZGVsKSBidXQgcmUtZXZhbHVhdGUgdGhpcyBvbmNlIG1lbWNweV9mbHVzaGNhY2hlKCkgaXNcbmRyaXZlcnMvbWQvZG0td3JpdGVjYWNoZS5jLTEyMjYtXHQgKiBlbmFibGVkIHRvIHVzZSBtb3ZkaXI2NGIgd2hpY2ggbWlnaHQgaW52YWxpZGF0ZSB0aGlzIHBlcmZvcm1hbmNlXG4tLVxuZHJpdmVycy9tZC9kbS13cml0ZWNhY2hlLmMtMTI0Mi0jZW5kaWZcbmRyaXZlcnMvbWQvZG0td3JpdGVjYWNoZS5jOjEyNDM6XHRtZW1jcHlfZmx1c2hjYWNoZShkZXN0LCBzb3VyY2UsIHNpemUpO1xuZHJpdmVycy9tZC9kbS13cml0ZWNhY2hlLmMtMTI0NC19XG4tLVxuZHJpdmVycy9tZC9kbS13cml0ZWNhY2hlLmM9MTI0Nj1zdGF0aWMgdm9pZCBiaW9fY29weV9ibG9jayhzdHJ1Y3QgZG1fd3JpdGVjYWNoZSAqd2MsIHN0cnVjdCBiaW8gKmJpbywgdm9pZCAqZGF0YSlcbi0tXG5kcml2ZXJzL21kL2RtLXdyaXRlY2FjaGUuYy0xMjcxLVx0XHRcdGZsdXNoX2RjYWNoZV9wYWdlKGJpb19wYWdlKGJpbykpO1xuZHJpdmVycy9tZC9kbS13cml0ZWNhY2hlLmM6MTI3MjpcdFx0XHRtZW1jcHlfZmx1c2hjYWNoZV9vcHRpbWl6ZWQoZGF0YSwgYnVmLCBzaXplKTtcbmRyaXZlcnMvbWQvZG0td3JpdGVjYWNoZS5jLTEyNzMtXHRcdH1cbi0tXG5kcml2ZXJzL252ZGltbS9jbGFpbS5jPTIzMz1zdGF0aWMgaW50IG5zaW9fcndfYnl0ZXMoc3RydWN0IG5kX25hbWVzcGFjZV9jb21tb24gKm5kbnMsXG4tLVxuZHJpdmVycy9udmRpbW0vY2xhaW0uYy0yNzYtXG5kcml2ZXJzL252ZGltbS9jbGFpbS5jOjI3NzpcdG1lbWNweV9mbHVzaGNhY2hlKG5zaW8tXHUwMDNlYWRkciAmIzQzOyBvZmZzZXQsIGJ1Ziwgc2l6ZSk7XG5kcml2ZXJzL252ZGltbS9jbGFpbS5jLTI3OC1cdHJldCA9IG52ZGltbV9mbHVzaCh0b19uZF9yZWdpb24obmRucy1cdTAwM2VkZXYucGFyZW50KSwgTlVMTCk7XG4tLVxuZHJpdmVycy9udmRpbW0vcG1lbS5jPTEyND1zdGF0aWMgdm9pZCB3cml0ZV9wbWVtKHZvaWQgKnBtZW1fYWRkciwgc3RydWN0IHBhZ2UgKnBhZ2UsXG4tLVxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTEzMi1cdFx0Y2h1bmsgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIGxlbiwgUEFHRV9TSVpFIC0gb2ZmKTtcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYzoxMzM6XHRcdG1lbWNweV9mbHVzaGNhY2hlKHBtZW1fYWRkciwgbWVtICYjNDM7IG9mZiwgY2h1bmspO1xuZHJpdmVycy9udmRpbW0vcG1lbS5jLTEzNC1cdFx0a3VubWFwX2xvY2FsKG1lbSk7XG4tLVxuZHJpdmVycy9udmRpbW0vcmVnaW9uX2RldnMuYz0xMTA2PWludCBnZW5lcmljX252ZGltbV9mbHVzaChzdHJ1Y3QgbmRfcmVnaW9uICpuZF9yZWdpb24pXG4tLVxuZHJpdmVycy9udmRpbW0vcmVnaW9uX2RldnMuYy0xMTIxLVx0ICogdGhlIHBsYXRmb3JtIGJ1ZmZlciBmbHVzaC4gTm90ZSB0aGF0IHdlJiMzOTt2ZSBhbHJlYWR5IGFycmFuZ2VkIGZvciBwbWVtXG5kcml2ZXJzL252ZGltbS9yZWdpb25fZGV2cy5jOjExMjI6XHQgKiB3cml0ZXMgdG8gYXZvaWQgdGhlIGNhY2hlIHZpYSBtZW1jcHlfZmx1c2hjYWNoZSgpLiAgVGhlIGZpbmFsXG5kcml2ZXJzL252ZGltbS9yZWdpb25fZGV2cy5jLTExMjMtXHQgKiB3bWIoKSBlbnN1cmVzIG9yZGVyaW5nIGZvciB0aGUgTlZESU1NIGZsdXNoIHdyaXRlLlxuLS1cbmluY2x1ZGUvbGludXgvc3RyaW5nLmg9MjcyPWV4dGVybiB2b2lkICogbWVtY2hyKGNvbnN0IHZvaWQgKixpbnQsX19rZXJuZWxfc2l6ZV90KTtcbi0tXG5pbmNsdWRlL2xpbnV4L3N0cmluZy5oLTI3NC0jaWZuZGVmIF9fSEFWRV9BUkNIX01FTUNQWV9GTFVTSENBQ0hFXG5pbmNsdWRlL2xpbnV4L3N0cmluZy5oOjI3NTpzdGF0aWMgaW5saW5lIHZvaWQgbWVtY3B5X2ZsdXNoY2FjaGUodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBjbnQpXG5pbmNsdWRlL2xpbnV4L3N0cmluZy5oLTI3Ni17XG4tLVxubGliL2lvdl9pdGVyLmM9MzAzPXNpemVfdCBtZW1jcHlfZnJvbV9pdGVyX2ZsdXNoY2FjaGUodm9pZCAqaXRlcl9mcm9tLCBzaXplX3QgcHJvZ3Jlc3MsXG4tLVxubGliL2lvdl9pdGVyLmMtMzA1LXtcbmxpYi9pb3ZfaXRlci5jOjMwNjpcdG1lbWNweV9mbHVzaGNhY2hlKHRvICYjNDM7IHByb2dyZXNzLCBpdGVyX2Zyb20sIGxlbik7XG5saWIvaW92X2l0ZXIuYy0zMDctXHRyZXR1cm4gMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMDc6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzI5MjMKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxMDY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTWVtb3J5IENvcHkgT3B0aW1pemF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgaW50cm9kdWNlcyBgbWVtY3B5X25vbnRlbXBvcmFsYCwgd2hpY2gsIGlmIG5vdCBhbHJlYWR5IGRlZmluZWQsIGp1c3QgZmFsbHMgYmFjayB0byBhIHN0YW5kYXJkIGBtZW1jcHlgLiBCdXQgb24geDg2LCBpdCYjMzk7cyBhY3R1YWxseSB1c2luZyBhIGBtZW1jcHlfZmx1c2hjYWNoZWAgdW5kZXIgdGhlIGhvb2QuIFRoZSBjb3JlIG9mIHRoaXMgaXMgdGhlIG1vZGlmaWNhdGlvbiB0byBgYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmhgIOKAkyBpdCYjMzk7cyBhZGRpbmcgdGhlc2UgYG1vdm50aV8qYCBpbnN0cnVjdGlvbnMgZm9yIGRpZmZlcmVudCBkYXRhIHNpemVzICg4LCAxNiwgMzIsIDY0IGJ5dGVzKSB0aGF0IGFyZSB1dGlsaXplZCB3aXRoaW4gYG1lbWNweV9mbHVzaGNhY2hlYC4KClRoZSBpbnRlcmVzdGluZyBwYXJ0IGlzIHRoYXQgYG1lbWNweV9mbHVzaGNhY2hlYCBpcyBub3cgc3BlY2lmaWNhbGx5IG9wdGltaXplZCBmb3IgZml4ZWQgc2l6ZXM6IDMyLCA0OCwgNjQsIDgwLCBhbmQgOTYgYnl0ZXMuIFRoYXQgaW1tZWRpYXRlbHkganVtcHMgb3V0IGF0IG1lIGJlY2F1c2UgdGhvc2Ugc2l6ZXMgY29ycmVzcG9uZCB0byBjb21tb24gYHN0cnVjdCBwYWdlYCBzaXplcy4gVGhlcmVmb3JlLCB0aGlzIG9wdGltaXphdGlvbiBpcyBjbGVhcmx5IHRhcmdldGluZyBzY2VuYXJpb3Mgd2hlcmUgYHN0cnVjdCBwYWdlYCBkYXRhIGlzIGJlaW5nIGNvcGllZC4KCk5vdywgd2hlcmUgaXMgdGhpcyBhY3R1YWxseSBiZWluZyAqdXNlZCo/IEkgc2VlIHRoYXQgYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYCB1c2VzIGBtZW1jcHlfbm9udGVtcG9yYWxgIHRvIGNvcHkgYSBgc3RydWN0IHBhZ2VgIHRlbXBsYXRlLiBUaGF0JiMzOTtzIGEgZGlyZWN0IGhpdC4gU28gYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYCBpcyB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludCBmb3IgdGhpcyBuZXcgbG9naWMuIEhvd2V2ZXIsIEkgc2hvdWxkIGNoZWNrIGZvciBvdGhlciBjYWxsIHNpdGVzLCBqdXN0IHRvIGJlIHRob3JvdWdoLiBPa2F5LCBzbyBJIHNob3VsZCBhbHNvIGNvbnNpZGVyIGBtZW1yZW1hcF9wYWdlc2AgYW5kIGBkZXZtX21lbXJlbWFwX3BhZ2VzYCBhcyByZWxhdGVkIGZ1bmN0aW9ucy4KCkFmdGVyIGEgcXVpY2sgc2NhbiwgaXQgbG9va3MgbGlrZSBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgIGlzIHRoZSBtYWluIG9uZSB0aGF0ICpleGVjdXRlcyogdGhlIG1vZGlmaWVkIGNvZGUuIEkmIzM5O2xsIGFkZCB0aGF0IHRvIHRoZSBgRm9jdXNTeW1ib2xzYCBsaXN0LCB0byBtYWtlIHN1cmUgSSBhbSBmb2N1c2luZyBvbiB0aGUgcmVsZXZhbnQgcGFydHMuIFRoZSBvdGhlciBmdW5jdGlvbnMsIGxpa2UgYG1lbW1hcF9pbml0X2NvbXBvdW5kYCwgYHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9mcm9tX3RlbXBsYXRlYCwgYHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9zbG93YCwgYHpvbmVfZGV2aWNlX3RhaWxfcGFnZV9pbml0YCwgYHpvbmVfZGV2aWNlX3BhZ2VfdXBkYXRlX3RlbXBsYXRlYCwgYG1lbWNweV9ub250ZW1wb3JhbGAsIGFuZCBgbWVtY3B5X2ZsdXNoY2FjaGVgLCBzZWVtIGxlc3MgZGlyZWN0bHkgcmVsZXZhbnQgZm9yIG5vdywgYXMgdGhleSBhcmUgc3RhdGljIG9yIHN0YXRpYyBpbmxpbmUuCgpMZXQgbWUgdGhpbmsgYSBiaXQgbW9yZSBhYm91dCBob3cgdGhpbmdzIGFyZSB3aXJlZCB0b2dldGhlci4gT2theSwgc28gYGRldm1fbWVtcmVtYXBfcGFnZXNgIGNhbGxzIGBtZW1yZW1hcF9wYWdlc2AsIGFuZCB0aGF0IGluIHR1cm4gY2FsbHMgYHBhZ2VtYXBfcmFuZ2VgIHdoaWNoICp0aGVuKiBjYWxscyBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgLiBTbyBJIHdpbGwgYWRkIGBtZW1yZW1hcF9wYWdlc2AgYW5kIGBkZXZtX21lbXJlbWFwX3BhZ2VzYCB0byB0aGUgYEZvY3VzU3ltYm9sc2AgYXMgd2VsbC4KCkl0IHNlZW1zIGxpa2UgYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYCBpcyB0aGUgbWFpbiB0YXJnZXQuIEFuZCB0aGUgY2hhbmdlcyB0byBgYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmhgIGRpcmVjdGx5IGFmZmVjdCB0aGUgYmVoYXZpb3Igb2YgYG1lbWNweV9mbHVzaGNhY2hlYC4gWWVzLCBgbWVtY3B5X2ZsdXNoY2FjaGVgIGlzIGFsc28gdXNlZCBpbiBvdGhlciBwbGFjZXMgbGlrZSBgZHJpdmVycy9kYXgvZnNkZXYuY2AsIGBkcml2ZXJzL252ZGltbS9wbWVtLmNgLCBhbmQgYGxpYi9pb3ZfaXRlci5jYCwgYnV0IGl0IGlzIGJlaW5nIG9wdGltaXplZCBmb3Igc3BlY2lmaWMgcGFnZSBzaXplcyBpbiAqdGhpcyogcGF0Y2gsIHRodXMgaXQgaXMgbW9zdCByZWxldmFudCB0byAgYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYC4KCkxldCYjMzk7cyB0aGluayBhYm91dCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgd291bGQgYmUgcmVsZXZhbnQgaGVyZS4gSSYjMzk7dmUgZ290IGBaT05FX0RFVklDRWAsIGBERVZJQ0VfUFJJVkFURWAsIGFuZCBgVEVTVF9ITU1gLiBBbmQgYWxzbywgSSBzaG91bGQga2VlcCBhbiBleWUgb24gYEZTX0RBWGAuIExldCYjMzk7cyBjaGVjayBgRlNfREFYYCBkZXBlbmRlbmNpZXMuIEl0IGRlcGVuZHMgb24gYFpPTkVfREVWSUNFYC4gU28sIGBaT05FX0RFVklDRWAgaXMgdGhlIGtleS4KCk5vdywgbGV0JiMzOTtzIHNlZSBpZiBgVEVTVF9ITU1gIGlzIGVub3VnaCB0byB0cmlnZ2VyIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAuIFllcyEgYGhtbV9kbWlycm9yX2luaXRgIGNhbGxzIGBkbWlycm9yX2RldmljZV9pbml0YCwgd2hpY2ggdGhlbiBjYWxscyBgZG1pcnJvcl9hbGxvY2F0ZV9jaHVua2AsIGFuZCBmaW5hbGx5IHRoYXQgdHJpZ2dlcnMgYG1lbXJlbWFwX3BhZ2VzYC4gVGh1cywgaWYgYFRFU1RfSE1NYCBpcyBidWlsdC1pbiBvciBsb2FkZWQgYXMgYSBtb2R1bGUsIGl0JiMzOTtsbCBydW4gdGhlIGNvZGUuIFNwZWNpZmljYWxseSwgaWYgYFRFU1RfSE1NYCBpcyBidWlsdC1pbiwgdGhpcyB3aWxsIHJ1biBkdXJpbmcgdGhlIGJvb3QgcHJvY2Vzcy4gT2theSwgYGhtbV9kbWlycm9yX2luaXRgIGlzIGEgYG1vZHVsZV9pbml0YCwgc28gaWYgYnVpbHQtaW4sIGl0IHJ1bnMgZHVyaW5nIGtlcm5lbCBpbml0aWFsaXphdGlvbi4gTm93LCBJIHNob3VsZCBtYWtlIHN1cmUgdGhhdCB0aGUgYGRtaXJyb3JfYWxsb2NhdGVfY2h1bmtgIGNhbGwgdG8gYG1lbXJlbWFwX3BhZ2VzYCBpcyB1bmNvbmRpdGlvbmFsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAwNzo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkbWlycm9yX2FsbG9jYXRlX2NodW5rJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2xpYi90ZXN0X2htbS5jPTUxNz1zdGF0aWMgaW50IGRtaXJyb3Jfd3JpdGUoc3RydWN0IGRtaXJyb3IgKmRtaXJyb3IsIHN0cnVjdCBobW1fZG1pcnJvcl9jbWQgKmNtZClcbi0tXG5saWIvdGVzdF9obW0uYy01NTctXG5saWIvdGVzdF9obW0uYzo1NTg6c3RhdGljIGludCBkbWlycm9yX2FsbG9jYXRlX2NodW5rKHN0cnVjdCBkbWlycm9yX2RldmljZSAqbWRldmljZSxcbmxpYi90ZXN0X2htbS5jLTU1OS1cdFx0XHRcdCAgc3RydWN0IHBhZ2UgKipwcGFnZSwgYm9vbCBpc19sYXJnZSlcbi0tXG5saWIvdGVzdF9obW0uYz02OTA9c3RhdGljIHN0cnVjdCBwYWdlICpkbWlycm9yX2Rldm1lbV9hbGxvY19wYWdlKHN0cnVjdCBkbWlycm9yICpkbWlycm9yLFxuLS1cbmxpYi90ZXN0X2htbS5jLTcyMi1cdFx0c3Bpbl91bmxvY2soXHUwMDI2bWRldmljZS1cdTAwM2Vsb2NrKTtcbmxpYi90ZXN0X2htbS5jOjcyMzpcdFx0aWYgKGRtaXJyb3JfYWxsb2NhdGVfY2h1bmsobWRldmljZSwgXHUwMDI2ZHBhZ2UsIGlzX2xhcmdlKSlcbmxpYi90ZXN0X2htbS5jLTcyNC1cdFx0XHRnb3RvIGVycm9yO1xuLS1cbmxpYi90ZXN0X2htbS5jPTE3Nzk9c3RhdGljIGludCBkbWlycm9yX2RldmljZV9pbml0KHN0cnVjdCBkbWlycm9yX2RldmljZSAqbWRldmljZSwgaW50IGlkKVxuLS1cbmxpYi90ZXN0X2htbS5jLTE3OTktXHQvKiBCdWlsZCBhIGxpc3Qgb2YgZnJlZSBaT05FX0RFVklDRSBzdHJ1Y3QgcGFnZXMgKi9cbmxpYi90ZXN0X2htbS5jOjE4MDA6XHRyZXQgPSBkbWlycm9yX2FsbG9jYXRlX2NodW5rKG1kZXZpY2UsIE5VTEwsIGZhbHNlKTtcbmxpYi90ZXN0X2htbS5jLTE4MDEtXHRpZiAocmV0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAwNzo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTMwNgoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDI1NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbml0aWFsIFRob3VnaHRzIG9uIGBkbWlycm9yX2RldmljZV9pbml0YCBhbmQgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBgZG1pcnJvcl9kZXZpY2VfaW5pdGAgY2FsbHMgYGRtaXJyb3JfYWxsb2NhdGVfY2h1bmtgIOKAkyBuaWNlLCBzdHJhaWdodGZvcndhcmQuIFRoYXQgZnVuY3Rpb24gaW4gdHVybiBhbGxvY2F0ZXMgYSBjaHVuayBhbmQgdGhlbiBjYWxscyBgbWVtcmVtYXBfcGFnZXNgLiBUaGlzIGlzIGV4YWN0bHkgd2hhdCBJIHdhcyBob3BpbmcgZm9yLCBhcyBpdCBtZWFucyB0aGlzIGNyaXRpY2FsIGFsbG9jYXRpb24gaXMgdW5jb25kaXRpb25hbGx5IHRyaWdnZXJlZCByaWdodCBhdCBtb2R1bGUgbG9hZCBvciBib290LiBFeGNlbGxlbnQuIE5vdywgb250byB0aGUgY29uZmlndXJhdGlvbiBmb3IgYFRFU1RfSE1NYC4KClJpZ2h0LCBsZXQmIzM5O3Mgc2VlLi4uIGBURVNUX0hNTWAgZGVwZW5kcyBvbiBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGFuZCBgREVWSUNFX1BSSVZBVEVgLiBgREVWSUNFX1BSSVZBVEVgIGZ1cnRoZXIgcmVsaWVzIG9uIGBaT05FX0RFVklDRWAsIGFuZCBgWk9ORV9ERVZJQ0VgIHJlcXVpcmVzIGBNRU1PUllfSE9UUExVR2AsIGBNRU1PUllfSE9UUkVNT1ZFYCwgYW5kIGBTUEFSU0VNRU1fVk1FTU1BUGAuIE9rYXksIHNvIHRvIGJlIHN1cmUgdGhpcyBpcyB3b3JraW5nIHJpZ2h0IEkmIzM5O2xsIHdhbnQgdG8gYWRkOgoqICAgYFRFU1RfSE1NYAoqICAgYERFVklDRV9QUklWQVRFYAoqICAgYFpPTkVfREVWSUNFYAoqICAgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYAoqICAgYE1FTU9SWV9IT1RQTFVHYAoqICAgYE1FTU9SWV9IT1RSRU1PVkVgCiogICBgU1BBUlNFTUVNX1ZNRU1NQVBgCgpXYWl0IGEgc2Vjb25kLCBob2xkIG9uLi4uIGlzbiYjMzk7dCBgU1BBUlNFTUVNX1ZNRU1NQVBgIHVzdWFsbHkgZW5hYmxlZCBieSBkZWZhdWx0IG9uIHg4Nl82ND8gSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoYXQuIExldCBtZSBxdWlja2x5IHNjYW4gYG1tL0tjb25maWdgIHRvIGNvbmZpcm0uIEl0JiMzOTtzIGFsd2F5cyBiZXN0IHRvIGJlIHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDA3OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBTUEFSU0VNRU1fVk1FTU1BUCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTQ1MT1jb25maWcgU1BBUlNFTUVNX0VYVFJFTUVcbi0tXG5tbS9LY29uZmlnLTQ1NC1cbm1tL0tjb25maWc6NDU1OmNvbmZpZyBTUEFSU0VNRU1fVk1FTU1BUF9FTkFCTEVcbm1tL0tjb25maWctNDU2LVx0Ym9vbFxubW0vS2NvbmZpZy00NTctXG5tbS9LY29uZmlnOjQ1ODpjb25maWcgU1BBUlNFTUVNX1ZNRU1NQVBcbm1tL0tjb25maWctNDU5LVx0ZGVmX2Jvb2wgeVxuLS1cbm1tL0tjb25maWctNDY1LVxubW0vS2NvbmZpZzo0NjY6Y29uZmlnIFNQQVJTRU1FTV9WTUVNTUFQX1BSRUlOSVRcbm1tL0tjb25maWctNDY3LVx0Ym9vbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAwNzo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjA2NwoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDI4OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgQ29kZSBNb2RpZmljYXRpb24qKgoKT2theSwgc28gaWYgYFNQQVJTRU1FTV9WTUVNTUFQX0VOQUJMRWAgaXMgc2V0LCBgU1BBUlNFTUVNX1ZNRU1NQVBgIGlzIGF1dG9tYXRpY2FsbHkgZGVmaW5lZC4gVGhhdCYjMzk7cyBzdHJhaWdodGZvcndhcmQuIExldCYjMzk7cyBtYWtlIHN1cmUgd2UgaW5jbHVkZSBgVEVTVF9ITU1gLCBgREVWSUNFX1BSSVZBVEVgLCBgWk9ORV9ERVZJQ0VgLCBhbmQgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBpbiBvdXIgY29uc2lkZXJhdGlvbi4gSSByZW1lbWJlciBTeXprYWxsZXImIzM5O3MgY29uZmlndXJhdGlvbnMgdHlwaWNhbGx5IGluY2x1ZGUgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCwgc28gdGhhdCYjMzk7cyBzb21ldGhpbmcgdG8ga2VlcCBpbiBtaW5kLgoKTm93LCBsZXQmIzM5O3MgcmUtZXhhbWluZSB0aGlzIHBhdGNoIGFuZCBwaW5wb2ludCB0aGUga2V5IGZ1bmN0aW9ucyBpbXBhY3RlZC4gSXQgbG9va3MgbGlrZSB0aGUgY2hhbmdlIHRvdWNoZXMgYGFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oYCwgc3BlY2lmaWNhbGx5IHRvIG9wdGltaXplIGBtZW1jcHlfZmx1c2hjYWNoZWAgZm9yIGZpeGVkIHNpemVzLiBJbnRlcmVzdGluZy4gYG1lbWNweV9mbHVzaGNhY2hlYCBpcyB1c2VkIHdpdGhpbiBgbWVtY3B5X25vbnRlbXBvcmFsYCwgd2hpY2ggdGhlbiBnZXRzIGNhbGxlZCBieSBgem9uZV9kZXZpY2VfcGFnZV9pbml0X2Zyb21fdGVtcGxhdGVgLiBJbiB0dXJuLCB0aGF0IGZ1bmN0aW9uIGlzIHVzZWQgYnkgYm90aCBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgIGFuZCBgbWVtbWFwX2luaXRfY29tcG91bmRgLgoKVGhlcmVmb3JlLCBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgIGlzIHRoZSBwcmltYXJ5IGZ1bmN0aW9uIHRvIGZvY3VzIG9uLCBnaXZlbiB0aGUgY2FsbCBjaGFpbi4gQnV0IHdhaXQsIGlzIGBtZW1tYXBfaW5pdF9jb21wb3VuZGAgcmVhY2hhYmxlIHRvbz8gWWVzLCBhIHF1aWNrIGNoZWNrIHJldmVhbHMgdGhhdCBgbWVtbWFwX2luaXRfY29tcG91bmRgIGlzIGNhbGxlZCBieSBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgIGlmIGBwZ21hcC0mZ3Q7dm1lbW1hcF9zaGlmdGAgaXMgYWN0dWFsbHkgc2V0LiBPa2F5LCBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgIGluIGBtbS9tbV9pbml0LmNgIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGltcGFjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMDc6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVtbWFwX2luaXRfY29tcG91bmQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbW1faW5pdC5jPTExMTU9c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGNvbXBvdW5kX25yX3BhZ2VzKHVuc2lnbmVkIGxvbmcgcGZuLFxuLS1cbm1tL21tX2luaXQuYy0xMTMwLVxubW0vbW1faW5pdC5jOjExMzE6c3RhdGljIHZvaWQgX19yZWYgbWVtbWFwX2luaXRfY29tcG91bmQoc3RydWN0IHBhZ2UgKmhlYWQsXG5tbS9tbV9pbml0LmMtMTEzMi1cdFx0XHRcdCAgICAgICB1bnNpZ25lZCBsb25nIGhlYWRfcGZuLFxuLS1cbm1tL21tX2luaXQuYz0xMTcyPXZvaWQgX19yZWYgbWVtbWFwX2luaXRfem9uZV9kZXZpY2Uoc3RydWN0IHpvbmUgKnpvbmUsXG4tLVxubW0vbW1faW5pdC5jLTEyMjQtXG5tbS9tbV9pbml0LmM6MTIyNTpcdFx0bWVtbWFwX2luaXRfY29tcG91bmQocGFnZSwgcGZuLCB6b25lX2lkeCwgbmlkLCBwZ21hcCxcbm1tL21tX2luaXQuYy0xMjI2LVx0XHRcdFx0ICAgICBjb21wb3VuZF9ucl9wYWdlcyhwZm4sIGFsdG1hcCwgcGdtYXApKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMDc6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzY5NTgKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGVjb25zdHJ1Y3RpbmcgdGhlIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAgRnVuY3Rpb24qKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIGNvZGUsIGFuZCBpdCBsb29rcyBsaWtlIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAgaXMgdGhlIGNlbnRyYWwgcG9pbnQgb2YgaW50ZXJlc3QsIHRoZSBtYWluIGVudHJ5IHBvaW50IHRvIHVuZGVyc3RhbmQuIFRoYXQmIzM5O3MgZ29vZDsgaXQgZ2l2ZXMgbWUgYSBkZWZpbmVkIHBsYWNlIHRvIHN0YXJ0LgoKTm93IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYmV0dGVyLiBUbyBnZXQgYSBob2xpc3RpYyB2aWV3LCBJIHdvbmRlciBpZiBvdGhlciBmdW5jdGlvbnMgY2FsbCBgbWVtY3B5X25vbnRlbXBvcmFsYD8gSXQmIzM5O3MgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgaG93IGBtZW1jcHlfbm9udGVtcG9yYWxgIGlzIHVzZWQgZWxzZXdoZXJlIGluIHRoaXMgY29udGV4dCBzbyB0aGF0IEkgY2FuIHNlZSB0aGUgcG90ZW50aWFsIGZvciBjb2RlIHJldXNlIGFuZCB3aGVyZSB0aGUgb3B0aW1pemF0aW9ucyBtaWdodCBhcHBseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMDc6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVtY3B5X25vbnRlbXBvcmFsJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oPTExMj1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbWVtY3B5X2ZsdXNoY2FjaGUodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsXG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmgtMTU3LVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0Lmg6MTU4OiNkZWZpbmUgbWVtY3B5X25vbnRlbXBvcmFsIG1lbWNweV9ub250ZW1wb3JhbFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmgtMTU5LS8qXG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmgtMTYyLSAqL1xuYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0Lmg6MTYzOnN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtZW1jcHlfbm9udGVtcG9yYWwodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaC0xNjQtXHRcdHNpemVfdCBjbnQpXG4tLVxuaW5jbHVkZS9saW51eC9zdHJpbmcuaD0yNzU9c3RhdGljIGlubGluZSB2b2lkIG1lbWNweV9mbHVzaGNhY2hlKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgY250KVxuLS1cbmluY2x1ZGUvbGludXgvc3RyaW5nLmgtMjgwLVxuaW5jbHVkZS9saW51eC9zdHJpbmcuaDoyODE6I2lmbmRlZiBtZW1jcHlfbm9udGVtcG9yYWxcbmluY2x1ZGUvbGludXgvc3RyaW5nLmgtMjgyLS8qXG5pbmNsdWRlL2xpbnV4L3N0cmluZy5oOjI4MzogKiBtZW1jcHlfbm9udGVtcG9yYWwoKSByZXF1ZXN0cyBhIG5vbi10ZW1wb3JhbCBjb3B5IHdoZW4gdGhlXG5pbmNsdWRlL2xpbnV4L3N0cmluZy5oLTI4NC0gKiBhcmNoaXRlY3R1cmUgaGFzIGEgc3VpdGFibGUgYmFja2VuZC4gQXJjaGl0ZWN0dXJlcyB3aXRob3V0IGFcbi0tXG5pbmNsdWRlL2xpbnV4L3N0cmluZy5oLTI4OS0gKi9cbmluY2x1ZGUvbGludXgvc3RyaW5nLmg6MjkwOiNkZWZpbmUgbWVtY3B5X25vbnRlbXBvcmFsKGRzdCwgc3JjLCBsZW4pIFxcXG5pbmNsdWRlL2xpbnV4L3N0cmluZy5oLTI5MS1cdCgodm9pZCltZW1jcHkoZHN0LCBzcmMsIGxlbikpXG4tLVxubW0vbW1faW5pdC5jPTEwOTU9c3RhdGljIHZvaWQgem9uZV9kZXZpY2VfcGFnZV9pbml0X2Zyb21fdGVtcGxhdGUoc3RydWN0IHBhZ2UgKnBhZ2UsXG4tLVxubW0vbW1faW5pdC5jLTExMDMtXHR6b25lX2RldmljZV9wYWdlX3VwZGF0ZV90ZW1wbGF0ZSh0ZW1wbGF0ZSwgcGZuKTtcbm1tL21tX2luaXQuYzoxMTA0Olx0bWVtY3B5X25vbnRlbXBvcmFsKHBhZ2UsIHRlbXBsYXRlLCBzaXplb2YoKnBhZ2UpKTtcbm1tL21tX2luaXQuYy0xMTA1LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMDc6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzc3MDUKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiA5MjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBTdHJhdGVneSBmb3IgWk9ORV9ERVZJQ0UgTWVtb3J5IE9wdGltaXphdGlvbioqCgpPa2F5LCBzbyBoZXJlJiMzOTtzIHRoZSBicmVha2Rvd24gb2Ygd2hhdCBJIG5lZWQgdG8gZm9jdXMgb24uIEl0IGxvb2tzIGxpa2UgYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYCBpcyB0aGUgY2VudHJhbCBmdW5jdGlvbiBmb3IgdGhpcyBwYXRjaCwgYXMgaXQmIzM5O3MgdGhlIGNvcmUgZW50cnkgcG9pbnQgZm9yIHRoZSBvcHRpbWl6ZWQgbWVtb3J5IG1hbmFnZW1lbnQgd2l0aGluIGBaT05FX0RFVklDRWAuICBJIHNob3VsZCBhbHNvIGluY2x1ZGUgYG1lbXJlbWFwX3BhZ2VzYCBhbmQgYGRldm1fbWVtcmVtYXBfcGFnZXNgIGluIG15IGBGb2N1c1N5bWJvbHNgIHRvIGVuc3VyZSB0aGUgZnV6emVyIGdldHMgdG8gdGhhdCBjcml0aWNhbCBwYXRoLiAgYHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9mcm9tX3RlbXBsYXRlYCBkb2VzbiYjMzk7dCBzZWVtIHRvIGJlIGEga2V5IGVudHJ5IHBvaW50LCBqdXN0IGEgaGVscGVyLCBzbyBJJiMzOTtsbCBpZ25vcmUgdGhhdC4KCkxldCYjMzk7cyBjbGFyaWZ5OiBNeSBwcmltYXJ5IGdvYWwgaXMgdG8gZnV6eiB0aGUgYFpPTkVfREVWSUNFYCBtZW1vcnkgb3B0aW1pemF0aW9uLiBUaGlzIG9wdGltaXphdGlvbiByZXZvbHZlcyBhcm91bmQgdXNpbmcgdGVtcGxhdGVzIGFuZCBub24tdGVtcG9yYWwgbWVtb3J5IGNvcGllcyBkdXJpbmcgYHN0cnVjdCBwYWdlYCBpbml0aWFsaXphdGlvbi4gVGhpcyBpcyBhIGNydWNpYWwgYXJlYSB3aXRoaW4gbWVtb3J5IG1hbmFnZW1lbnQsIHdoaWNoIGNhbiBiZSByZWFjaGVkIHRocm91Z2ggaG90cGx1Z2dpbmcgZGV2aWNlIG1lbW9yeSwgc3VjaCBhcyB0aHJvdWdoIGxvYWRpbmcgdGhlIGBURVNUX0hNTWAgbW9kdWxlIG9yIHdpdGggREFYL1BNRU0gZGV2aWNlcy4KClRoZSBwYXRjaCBpbmNsdWRlcyBtb2RpZmljYXRpb25zIHRvIGBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaGAgd2l0aCB0aGUgYWRkaXRpb24gb2YgYG1vdm50aV8qYCBpbnN0cnVjdGlvbnMgYW5kIHRoZWlyIHVzZSBpbiBgbWVtY3B5X2ZsdXNoY2FjaGVgLiAgV2hpbGUgYG1lbWNweV9mbHVzaGNhY2hlYCBpdHNlbGYgaXMgd2lkZWx5IHVzZWQsIHBhcnRpY3VsYXJseSBpbiBjb250ZXh0cyBsaWtlIGBkcml2ZXJzL2RheC9mc2Rldi5jYCwgYGRyaXZlcnMvbnZkaW1tL3BtZW0uY2AsIGBsaWIvaW92X2l0ZXIuY2AsIGFuZCBgZHJpdmVycy9tZC9kbS13cml0ZWNhY2hlLmNgLCB0aGUgb3B0aW1pemF0aW9uIGlzICpzcGVjaWZpY2FsbHkqIHRhaWxvcmVkIGZvciB0aGUgc2l6ZXMgb2YgYHN0cnVjdCBwYWdlYCBvbiB4ODZfNjQsIHdoaWNoIGlzIDY0IGJ5dGVzICh3aXRob3V0IGBDT05GSUdfTUVNQ0dgKSwgb3IgODAgb3IgOTYgYnl0ZXMgKHdpdGggb3RoZXIgY29uZmlncykuIFRoZXJlZm9yZSwgdGhlIGZ1enplciBpcyBiZXN0IGRpcmVjdGVkIHRvd2FyZHMgYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYCBkaXJlY3RseS4KClRoZSBgVEVTVF9ITU1gIG1vZHVsZSBzZWVtcyBsaWtlIGEgZ29vZCBzdGFydGluZyBwb2ludC4gT24gbG9hZGluZywgYFRFU1RfSE1NYCBjYWxscyBgZG1pcnJvcl9kZXZpY2VfaW5pdGAsIHdoaWNoIHRoZW4gY2FsbHMgYGRtaXJyb3JfYWxsb2NhdGVfY2h1bmtgLiBUaGlzIHVsdGltYXRlbHkgbGVhZHMgdG8gYG1lbXJlbWFwX3BhZ2VzYCBhbmQgdGhlbiBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgLiAgSSBzaG91bGQgY2hlY2sgaWYgYFRFU1RfSE1NYCBpcyBlbm91Z2guIFRoZSBgaG1tX2RtaXJyb3JfY21kYCBpb2N0bCBpbiBgVEVTVF9ITU1gIGdpdmVzIG1vcmUgYWxsb2NhdGlvbiBjb250cm9sLCBzbyBpZiBgVEVTVF9ITU1gIGlzIGJ1aWx0LWluIHRoaXMgaGFwcGVucyBhdCBib290LiBPdGhlcndpc2UsIEkgY2FuIHVzZSBhbiBpb2N0bCB0byB0cmlnZ2VyIG1vcmUgYWxsb2NhdGlvbnMuCgpDcnVjaWFsbHksIHVzZXIgc3BhY2UgKmNhbiogZGlyZWN0bHkgdHJpZ2dlciB0aGlzIHRocm91Z2ggcGFnZSBmYXVsdHMuIGBkbWlycm9yX2FsbG9jYXRlX2NodW5rYCBpcyBhbHNvIGNhbGxlZCB0aHJvdWdoIGBkbWlycm9yX2Rldm1lbV9hbGxvY19wYWdlYCwgd2hpY2ggaXMgdXNlZCBkdXJpbmcgcGFnZSBmYXVsdHMgdGhyb3VnaCBgZG1pcnJvcl9kb193cml0ZWAgYW5kIGBkbWlycm9yX2RvX3JlYWRgLiBUaGlzIG1lYW5zIEkgY2FuIG1tYXAgdGhlIGRldmljZSBtZW1vcnkgYW5kIGFjY2VzcyBpdCwgb3IgdXNlIHRoZSBpb2N0bHMsIHRvIHRyaWdnZXIgdGhlIGNvZGUgcGF0aC4gIFRoYXQmIzM5O3MgZ3JlYXQgZm9yIGZ1enppbmcgYmVjYXVzZSBpdCBnaXZlcyBhIGxvdCBtb3JlIGNvbnRyb2wuIEkgY2FuIHVzZSB1c2VyIHNwYWNlIHRvIHNldCBpdCB1cCBuaWNlbHkuCgpTbywgaGVyZSYjMzk7cyB0aGUgcGxhbjoKCiogICAqKldvcnRoRnV6emluZzogVHJ1ZSoqIChBYnNvbHV0ZWx5LCB0aGlzIGlzIGhpZ2gtdmFsdWUpCiogICAqKkZvY3VzU3ltYm9sczoqKiBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgLCBgbWVtcmVtYXBfcGFnZXNgLCBgZGV2bV9tZW1yZW1hcF9wYWdlc2AKKiAgICoqRW5hYmxlQ29uZmlnczoqKiBgWk9ORV9ERVZJQ0VgLCBgREVWSUNFX1BSSVZBVEVgLCBgVEVTVF9ITU1gLCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgCgpUaGlzIGxvb2tzIGxpa2UgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBhIGZ1enplciEgSSYjMzk7bGwgbm93IGV4cGxvcmUgYGRtaXJyb3JfZGV2bWVtX2FsbG9jX3BhZ2VgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAwNzo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkbWlycm9yX2Rldm1lbV9hbGxvY19wYWdlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2xpYi90ZXN0X2htbS5jLTQxLSAqIEZvciBkZXZpY2VfcHJpdmF0ZSBwYWdlcywgZHBhZ2UgaXMganVzdCBhIGR1bW15IHN0cnVjdCBwYWdlXG5saWIvdGVzdF9obW0uYzo0MjogKiByZXByZXNlbnRpbmcgYSBwaWVjZSBvZiBkZXZpY2UgbWVtb3J5LiBkbWlycm9yX2Rldm1lbV9hbGxvY19wYWdlXG5saWIvdGVzdF9obW0uYy00My0gKiBhbGxvY2F0ZXMgYSByZWFsIHN5c3RlbSBtZW1vcnkgcGFnZSBhcyBiYWNraW5nIHN0b3JhZ2UgdG8gZmFrZSBhXG4tLVxubGliL3Rlc3RfaG1tLmM9NTU4PXN0YXRpYyBpbnQgZG1pcnJvcl9hbGxvY2F0ZV9jaHVuayhzdHJ1Y3QgZG1pcnJvcl9kZXZpY2UgKm1kZXZpY2UsXG4tLVxubGliL3Rlc3RfaG1tLmMtNjg5LVxubGliL3Rlc3RfaG1tLmM6NjkwOnN0YXRpYyBzdHJ1Y3QgcGFnZSAqZG1pcnJvcl9kZXZtZW1fYWxsb2NfcGFnZShzdHJ1Y3QgZG1pcnJvciAqZG1pcnJvcixcbmxpYi90ZXN0X2htbS5jLTY5MS1cdFx0XHRcdFx0ICAgICAgYm9vbCBpc19sYXJnZSlcbi0tXG5saWIvdGVzdF9obW0uYz03Mzk9c3RhdGljIHZvaWQgZG1pcnJvcl9taWdyYXRlX2FsbG9jX2FuZF9jb3B5KHN0cnVjdCBtaWdyYXRlX3ZtYSAqYXJncyxcbi0tXG5saWIvdGVzdF9obW0uYy03NzAtXHRcdH0gZWxzZVxubGliL3Rlc3RfaG1tLmM6NzcxOlx0XHRcdGRwYWdlID0gZG1pcnJvcl9kZXZtZW1fYWxsb2NfcGFnZShkbWlycm9yLCBpc19sYXJnZSk7XG5saWIvdGVzdF9obW0uYy03NzItXG4tLVxubGliL3Rlc3RfaG1tLmMtNzg5LVx0XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yIFx1MDAyNlx1MDAyNiBhZGRyIFx1MDAzYyBhcmdzLVx1MDAzZWVuZDsgaSYjNDM7JiM0MzspIHtcbmxpYi90ZXN0X2htbS5jOjc5MDpcdFx0XHRcdGRwYWdlID0gZG1pcnJvcl9kZXZtZW1fYWxsb2NfcGFnZShkbWlycm9yLCBmYWxzZSk7XG5saWIvdGVzdF9obW0uYy03OTEtXHRcdFx0XHRycGFnZSA9IEJBQ0tJTkdfUEFHRShkcGFnZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDA3OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5ODIyCgkJCQkJCQlvdXRwdXQ6IDE4MwoJCQkJCQkJdGhvdWdodHM6IDc4NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBgZG1pcnJvcmAgRnV6emluZyBTdHJhdGVneSoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIHRoaW5raW5nIGFib3V0IGhvdyB0byBlZmZlY3RpdmVseSBmdXp6IHRoaXMgYGRtaXJyb3JgIGZ1bmN0aW9uYWxpdHksIGFuZCBoZXJlJiMzOTtzIG15IGxpbmUgb2YgdGhvdWdodC4gRmlyc3QsIEkgcmVtZW1iZXIgdGhhdCBgZG1pcnJvcl9kZXZtZW1fYWxsb2NfcGFnZWAgY2FsbHMgYGRtaXJyb3JfYWxsb2NhdGVfY2h1bmtgIHdoZW4gaXQgbmVlZHMgbW9yZSBtZW1vcnkuIEFuZCBjcml0aWNhbGx5LCBgZG1pcnJvcl9taWdyYXRlX2FsbG9jX2FuZF9jb3B5YCBpcyB0cmlnZ2VyZWQgZHVyaW5nIG1pZ3JhdGlvbiB0byBkZXZpY2UgbWVtb3J5IHZpYSB0aGF0IGBITU1fRE1JUlJPUl9NSUdSQVRFX1RPX0RFVmAgaW9jdGwuIFNvLCB0aGF0IG1lYW5zIHN5emthbGxlciBjYW4gcmVhZGlseSBleGVyY2lzZSB0aGlzIGNvZGUgcGF0aCBqdXN0IGJ5IG9wZW5pbmcgYC9kZXYvaG1tX2RtaXJyb3IwYCBhbmQgdGhlbiBpc3N1aW5nIHRoZSByZWxldmFudCBpb2N0bHMuCgpOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gdGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzLiBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgYnVpbGQgaGFzOiBgWk9ORV9ERVZJQ0VgLCBgREVWSUNFX1BSSVZBVEVgLCBgVEVTVF9ITU1gLCBhbmQgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBlbmFibGVkLiBMZXQgbWUganVzdCBjb25maXJtIGFueSBvdGhlciBkZXBlbmRlbmNpZXMgZm9yIGBURVNUX0hNTWAgYmVjYXVzZSBJIGtub3cgdGhvc2UgdGhpbmdzIGNhbiBnZXQgdHJpY2t5LiBSaWdodCwgaXQgZGVwZW5kcyBvbiBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGFuZCBgREVWSUNFX1BSSVZBVEVgLiBBbmQgYERFVklDRV9QUklWQVRFYCBuZWVkcyBgWk9ORV9ERVZJQ0VgLCB3aGljaCBpbiB0dXJuIG5lZWRzIGBNRU1PUllfSE9UUExVR2AsIGBNRU1PUllfSE9UUkVNT1ZFYCwgYW5kIGBTUEFSU0VNRU1fVk1FTU1BUGAuIEZ1cnRoZXJtb3JlLCBgTUVNT1JZX0hPVFBMVUdgIGRlcGVuZHMgb24gZWl0aGVyIGBTUEFSU0VNRU1gIG9yIGBYODZfNjRgLCBhbmQgYE1FTU9SWV9IT1RSRU1PVkVgIHJlcXVpcmVzIGBNRU1PUllfSE9UUExVR2AgYW5kIGBBUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFYC4gU28sIHRvIGJlIGNlcnRhaW4sIHdlIHNob3VsZCBoYXZlIHRoZSBmb2xsb3dpbmcgZW5hYmxlZDoKCmBaT05FX0RFVklDRWAKYERFVklDRV9QUklWQVRFYApgVEVTVF9ITU1gCmBUUkFOU1BBUkVOVF9IVUdFUEFHRWAKYE1FTU9SWV9IT1RQTFVHYApgTUVNT1JZX0hPVFJFTU9WRWAKCkFjdHVhbGx5LCB3YWl0IGEgc2Vjb25kLiBgTUVNT1JZX0hPVFBMVUdgIGFuZCBgTUVNT1JZX0hPVFJFTU9WRWAgYXJlIHByZXR0eSBzdGFuZGFyZCBpbiBzeXprYWxsZXIgY29uZmlncywgYnV0IGl04oCZcyBhbHdheXMgc2FmZXIgdG8gbGlzdCB0aGVtIGV4cGxpY2l0bHkgdG8gYmUgY2VydGFpbi4gWWVzLCBJJiMzOTtsbCBnbyB3aXRoIHRoYXQgbW9yZSBjb25zZXJ2YXRpdmUgc2V0LgoKTm93LCBsZXQmIzM5O3MgcmVmaW5lIHRoZSBmdXp6aW5nIHN5bWJvbHMuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBvZiBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgLCBgbWVtcmVtYXBfcGFnZXNgLCBhbmQgYGRldm1fbWVtcmVtYXBfcGFnZXNgLiBMZXQgbWUgY2hlY2sgZXhwb3J0IHN0YXR1czogYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYCBpc24mIzM5O3QgZXhwb3J0ZWQsIGJ1dCBpdCYjMzk7cyBnbG9iYWwgYW5kIHRoZXJlZm9yZSBhY2Nlc3NpYmxlLiBgbWVtcmVtYXBfcGFnZXNgIGlzIGV4cG9ydGVkLCBhbmQgYGRldm1fbWVtcmVtYXBfcGFnZXNgIGlzIGFsc28gZXhwb3J0ZWQuCgpJIHRoaW5rIHRoaXMgbG9va3MgZ29vZC4KCk9rYXksIG9uZSBsYXN0IHBhc3Mgb3ZlciB0aGUgcGF0Y2ggaXRzZWxmIHRvIGVuc3VyZSBJIGhhdmVuJiMzOTt0IG92ZXJsb29rZWQgYW55IGhpZGRlbiBmZWF0dXJlcyBvciByZWxhdGVkIGNvZGUuIEkgc2VlIHRoYXQgdGhlIHBhdGNoIGludHJvZHVjZXMgYHNldF9wYWdlX3NlY3Rpb25fZnJvbV9wZm5gIGluIGBpbmNsdWRlL2xpbnV4L21tLmhgLiBJdCBjaGFuZ2VzIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAgYW5kIGBtZW1tYXBfaW5pdF9jb21wb3VuZGAgdG8gdXNlIGEgdGVtcGxhdGUgcGFnZSBhbmQgYG1lbWNweV9ub250ZW1wb3JhbGAuIEl0IGFkZHMgYG1lbWNweV9ub250ZW1wb3JhbGAgdG8gYGluY2x1ZGUvbGludXgvc3RyaW5nLmhgIGFuZCBgYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmhgLiBBZGRpdGlvbmFsbHksIGl0IGluY2x1ZGVzIGBtb3ZudGlfOGAsIGBtb3ZudGlfMTZgLCBgbW92bnRpXzMyYCwgYW5kIGBtb3ZudGlfNjRgIGluIGBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaGAuIEZpbmFsbHksIHRoZSBwYXRjaCBjaGFuZ2VzIGBtZW1jcHlfZmx1c2hjYWNoZWAgaW4gYGFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oYC4KCkV2ZXJ5dGhpbmcgaGVyZSBpcyBmdW5kYW1lbnRhbGx5IGFib3V0IG9wdGltaXppbmcgYHN0cnVjdCBwYWdlYCBpbml0aWFsaXphdGlvbiBmb3IgYFpPTkVfREVWSUNFYCBtZW1vcnkuIEltcG9ydGFudGx5LCB0aGUgbG9naWMgc2VlbXMgZnVuY3Rpb25hbCwgcmVhY2hhYmxlLCBhbmQgcXVpdGUgc3VzY2VwdGlibGUgdG8gc3VidGxlIG1lbW9yeSBjb3JydXB0aW9uIGlzc3Vlcy4gRnV6emluZyBpdCBpcyBkZWZpbml0ZWx5IHdvcnRoIGl0LiBXZSYjMzk7cmUgZGVhbGluZyB3aXRoIG1lbW9yeSBpbml0aWFsaXphdGlvbiBhbmQgbm9uLXRlbXBvcmFsIGNvcGllcywgYW5kIHRob3NlIG9mdGVuIGhhcmJvciBhbGlnbm1lbnQgaXNzdWVzLCBtaXNzaW5nIGJhcnJpZXJzLCBvciBpbmNvcnJlY3Qgc2l6ZXMuCgpOb3csIEkmIzM5O20gcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAwNzo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Wk9ORV9ERVZJQ0UmIzM0OywKICAgICYjMzQ7REVWSUNFX1BSSVZBVEUmIzM0OywKICAgICYjMzQ7VEVTVF9ITU0mIzM0OywKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OywKICAgICYjMzQ7TUVNT1JZX0hPVFBMVUcmIzM0OywKICAgICYjMzQ7TUVNT1JZX0hPVFJFTU9WRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21lbW1hcF9pbml0X3pvbmVfZGV2aWNlJiMzNDssCiAgICAmIzM0O21lbXJlbWFwX3BhZ2VzJiMzNDssCiAgICAmIzM0O2Rldm1fbWVtcmVtYXBfcGFnZXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb3B0aW1pemVzIHN0cnVjdCBwYWdlIGluaXRpYWxpemF0aW9uIGZvciBaT05FX0RFVklDRSBtZW1vcnkgYnkgdXNpbmcgYSB0ZW1wbGF0ZSBwYWdlIGFuZCBub24tdGVtcG9yYWwgbWVtb3J5IGNvcGllcyAobWVtY3B5X25vbnRlbXBvcmFsKS4gVGhpcyBpcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIHJlYWNoYWJsZSB2aWEgZGV2aWNlIG1lbW9yeSBob3RwbHVnLCBzdWNoIGFzIHdoZW4gbG9hZGluZyB0aGUgVEVTVF9ITU0gbW9kdWxlIG9yIHVzaW5nIERBWC9QTUVNIGRldmljZXMuIEZ1enppbmcgdGhpcyBpcyBpbXBvcnRhbnQgdG8gY2F0Y2ggcG90ZW50aWFsIGFsaWdubWVudCBvciBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZXMgZHVyaW5nIHBhZ2UgaW5pdGlhbGl6YXRpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1pPTkVfREVWSUNFJiMzNDssCiAgICAmIzM0O0RFVklDRV9QUklWQVRFJiMzNDssCiAgICAmIzM0O1RFU1RfSE1NJiMzNDssCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDssCiAgICAmIzM0O01FTU9SWV9IT1RQTFVHJiMzNDssCiAgICAmIzM0O01FTU9SWV9IT1RSRU1PVkUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttZW1tYXBfaW5pdF96b25lX2RldmljZSYjMzQ7LAogICAgJiMzNDttZW1yZW1hcF9wYWdlcyYjMzQ7LAogICAgJiMzNDtkZXZtX21lbXJlbWFwX3BhZ2VzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9wdGltaXplcyBzdHJ1Y3QgcGFnZSBpbml0aWFsaXphdGlvbiBmb3IgWk9ORV9ERVZJQ0UgbWVtb3J5IGJ5IHVzaW5nIGEgdGVtcGxhdGUgcGFnZSBhbmQgbm9uLXRlbXBvcmFsIG1lbW9yeSBjb3BpZXMgKG1lbWNweV9ub250ZW1wb3JhbCkuIFRoaXMgaXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyByZWFjaGFibGUgdmlhIGRldmljZSBtZW1vcnkgaG90cGx1Zywgc3VjaCBhcyB3aGVuIGxvYWRpbmcgdGhlIFRFU1RfSE1NIG1vZHVsZSBvciB1c2luZyBEQVgvUE1FTSBkZXZpY2VzLiBGdXp6aW5nIHRoaXMgaXMgaW1wb3J0YW50IHRvIGNhdGNoIHBvdGVudGlhbCBhbGlnbm1lbnQgb3IgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzIGR1cmluZyBwYWdlIGluaXRpYWxpemF0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDNUMDc6NDA6MTIuNDg1ODcyNDM5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ0MzI0MjY2NDI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlpPTkVfREVWSUNFXCIsXG4gICAgXCJERVZJQ0VfUFJJVkFURVwiLFxuICAgIFwiVEVTVF9ITU1cIixcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCIsXG4gICAgXCJNRU1PUllfSE9UUExVR1wiLFxuICAgIFwiTUVNT1JZX0hPVFJFTU9WRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1lbW1hcF9pbml0X3pvbmVfZGV2aWNlXCIsXG4gICAgXCJtZW1yZW1hcF9wYWdlc1wiLFxuICAgIFwiZGV2bV9tZW1yZW1hcF9wYWdlc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9wdGltaXplcyBzdHJ1Y3QgcGFnZSBpbml0aWFsaXphdGlvbiBmb3IgWk9ORV9ERVZJQ0UgbWVtb3J5IGJ5IHVzaW5nIGEgdGVtcGxhdGUgcGFnZSBhbmQgbm9uLXRlbXBvcmFsIG1lbW9yeSBjb3BpZXMgKG1lbWNweV9ub250ZW1wb3JhbCkuIFRoaXMgaXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyByZWFjaGFibGUgdmlhIGRldmljZSBtZW1vcnkgaG90cGx1Zywgc3VjaCBhcyB3aGVuIGxvYWRpbmcgdGhlIFRFU1RfSE1NIG1vZHVsZSBvciB1c2luZyBEQVgvUE1FTSBkZXZpY2VzLiBGdXp6aW5nIHRoaXMgaXMgaW1wb3J0YW50IHRvIGNhdGNoIHBvdGVudGlhbCBhbGlnbm1lbnQgb3IgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzIGR1cmluZyBwYWdlIGluaXRpYWxpemF0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QwNzo0MDoxMi40ODU4Nzg3MzlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwNzczMzYwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDYxN2FjMTVjOTJmYTkyMzQzNzExYWU2MWQ2NTkzZTBhMWFhMTRlNDRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBBdWcgMyAwNzo0MDoxMSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oXFxuaW5kZXggNDYzNTYxNjg2M2Y1My4uYmM2YTlmMzRiMzQ2YSAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaFxcbisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oXFxuQEAgLTgyLDcgKzgyLDM1IEBAIGludCBzdHJjbXAoY29uc3QgY2hhciAqY3MsIGNvbnN0IGNoYXIgKmN0KTtcXG4gI2lmZGVmIENPTkZJR19BUkNIX0hBU19VQUNDRVNTX0ZMVVNIQ0FDSEVcXG4gI2RlZmluZSBfX0hBVkVfQVJDSF9NRU1DUFlfRkxVU0hDQUNIRSAxXFxuIHZvaWQgX19tZW1jcHlfZmx1c2hjYWNoZSh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IGNudCk7XFxuLXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtZW1jcHlfZmx1c2hjYWNoZSh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IGNudClcXG4rXFxuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtb3ZudGlfOCh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYylcXG4re1xcbitcXHRhc20gdm9sYXRpbGUoXFxcIm1vdm50aXEgJTEsICUwXFxcIlxcbitcXHRcXHQgICAgIDogXFxcIj1tXFxcIigqKHU2NCAqKWRzdClcXG4rXFx0XFx0ICAgICA6IFxcXCJyXFxcIigqKGNvbnN0IHU2NCAqKXNyYylcXG4rXFx0XFx0ICAgICA6IFxcXCJtZW1vcnlcXFwiKTtcXG4rfVxcbitcXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG1vdm50aV8xNih2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYylcXG4re1xcbitcXHRtb3ZudGlfOChkc3QsIHNyYyk7XFxuK1xcdG1vdm50aV84KGRzdCArIDgsIHNyYyArIDgpO1xcbit9XFxuK1xcbitzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbW92bnRpXzMyKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjKVxcbit7XFxuK1xcdG1vdm50aV8xNihkc3QsIHNyYyk7XFxuK1xcdG1vdm50aV8xNihkc3QgKyAxNiwgc3JjICsgMTYpO1xcbit9XFxuK1xcbitzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbW92bnRpXzY0KHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjKVxcbit7XFxuK1xcdG1vdm50aV8zMihkc3QsIHNyYyk7XFxuK1xcdG1vdm50aV8zMihkc3QgKyAzMiwgc3JjICsgMzIpO1xcbit9XFxuK1xcbitzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbWVtY3B5X2ZsdXNoY2FjaGUodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIHNpemVfdCBjbnQpXFxuIHtcXG4gXFx0aWYgKF9fYnVpbHRpbl9jb25zdGFudF9wKGNudCkpIHtcXG4gXFx0XFx0c3dpdGNoIChjbnQpIHtcXG5AQCAtOTYsMTAgKzEyNCw0OCBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbWVtY3B5X2ZsdXNoY2FjaGUodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdFxcbiBcXHRcXHRcXHRcXHRhc20gKFxcXCJtb3ZudGlxICUxLCAlMFxcXCIgOiBcXFwiPW1cXFwiKCoodTY0ICopZHN0KSA6IFxcXCJyXFxcIigqKHU2NCAqKXNyYykpO1xcbiBcXHRcXHRcXHRcXHRhc20gKFxcXCJtb3ZudGlxICUxLCAlMFxcXCIgOiBcXFwiPW1cXFwiKCoodTY0ICopKGRzdCArIDgpKSA6IFxcXCJyXFxcIigqKHU2NCAqKShzcmMgKyA4KSkpO1xcbiBcXHRcXHRcXHRcXHRyZXR1cm47XFxuK1xcdFxcdFxcdC8qXFxuK1xcdFxcdFxcdCAqIFRoZSByZWxldmFudCBmaXhlZC1zaXplIGNvcGllcyBoZXJlIGFyZSB0aGVcXG4rXFx0XFx0XFx0ICogeDg2XzY0IHN0cnVjdCBwYWdlIHNpemVzOiA2NCwgODAsIGFuZCA5NiBieXRlcy5cXG4rXFx0XFx0XFx0ICogS2VlcCAzMi1ieXRlIGFuZCA0OC1ieXRlIGNvcGllcyBpbmxpbmUgYXMgd2VsbFxcbitcXHRcXHRcXHQgKiBpbnN0ZWFkIG9mIHNlbmRpbmcgdGhvc2UgbmVhcmJ5IGZpeGVkLXNpemVcXG4rXFx0XFx0XFx0ICogY2FzZXMgYmFjayB0byBfX21lbWNweV9mbHVzaGNhY2hlKCkuXFxuK1xcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHRjYXNlIDMyOlxcbitcXHRcXHRcXHRcXHRtb3ZudGlfMzIoZHN0LCBzcmMpO1xcbitcXHRcXHRcXHRcXHRyZXR1cm47XFxuK1xcdFxcdFxcdGNhc2UgNDg6XFxuK1xcdFxcdFxcdFxcdG1vdm50aV8zMihkc3QsIHNyYyk7XFxuK1xcdFxcdFxcdFxcdG1vdm50aV8xNihkc3QgKyAzMiwgc3JjICsgMzIpO1xcbitcXHRcXHRcXHRcXHRyZXR1cm47XFxuK1xcdFxcdFxcdGNhc2UgNjQ6XFxuK1xcdFxcdFxcdFxcdG1vdm50aV82NChkc3QsIHNyYyk7XFxuK1xcdFxcdFxcdFxcdHJldHVybjtcXG4rXFx0XFx0XFx0Y2FzZSA4MDpcXG4rXFx0XFx0XFx0XFx0bW92bnRpXzY0KGRzdCwgc3JjKTtcXG4rXFx0XFx0XFx0XFx0bW92bnRpXzE2KGRzdCArIDY0LCBzcmMgKyA2NCk7XFxuK1xcdFxcdFxcdFxcdHJldHVybjtcXG4rXFx0XFx0XFx0Y2FzZSA5NjpcXG4rXFx0XFx0XFx0XFx0bW92bnRpXzY0KGRzdCwgc3JjKTtcXG4rXFx0XFx0XFx0XFx0bW92bnRpXzMyKGRzdCArIDY0LCBzcmMgKyA2NCk7XFxuK1xcdFxcdFxcdFxcdHJldHVybjtcXG4gXFx0XFx0fVxcbiBcXHR9XFxuK1xcbiBcXHRfX21lbWNweV9mbHVzaGNhY2hlKGRzdCwgc3JjLCBjbnQpO1xcbiB9XFxuK1xcbisjZGVmaW5lIG1lbWNweV9ub250ZW1wb3JhbCBtZW1jcHlfbm9udGVtcG9yYWxcXG4rLypcXG4rICogUmV1c2UgdGhlIGV4aXN0aW5nIHg4NiBmbHVzaGNhY2hlIGJhY2tlbmQgYXMgdGhlIG5vbi10ZW1wb3JhbCBjb3B5XFxuKyAqIHByaW1pdGl2ZS5cXG4rICovXFxuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtZW1jcHlfbm9udGVtcG9yYWwodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsXFxuK1xcdFxcdHNpemVfdCBjbnQpXFxuK3tcXG4rXFx0bWVtY3B5X2ZsdXNoY2FjaGUoZHN0LCBzcmMsIGNudCk7XFxuK31cXG4rXFxuICNlbmRpZlxcbiBcXG4gI2VuZGlmIC8qIF9fS0VSTkVMX18gKi9cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbS5oIGIvaW5jbHVkZS9saW51eC9tbS5oXFxuaW5kZXggNDg1ZGY5YzJkYmRkYi4uNDMzNDNiZmNlNDkzNiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L21tLmhcXG5AQCAtMjU0MSwxMSArMjU0MSwyMiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3BhZ2Vfc2VjdGlvbihzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBzZWN0aW9uKVxcbiBcXHRwYWdlLVxcdTAwM2VmbGFncy5mIHw9IChzZWN0aW9uIFxcdTAwMjYgU0VDVElPTlNfTUFTSykgXFx1MDAzY1xcdTAwM2MgU0VDVElPTlNfUEdTSElGVDtcXG4gfVxcbiBcXG4rc3RhdGljIGlubGluZSB2b2lkIHNldF9wYWdlX3NlY3Rpb25fZnJvbV9wZm4oc3RydWN0IHBhZ2UgKnBhZ2UsXFxuK1xcdFxcdHVuc2lnbmVkIGxvbmcgcGZuKVxcbit7XFxuK1xcdHNldF9wYWdlX3NlY3Rpb24ocGFnZSwgcGZuX3RvX3NlY3Rpb25fbnIocGZuKSk7XFxuK31cXG4rXFxuIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBtZW1kZXNjX3NlY3Rpb24obWVtZGVzY19mbGFnc190IG1kZilcXG4ge1xcbiBcXHRyZXR1cm4gKG1kZi5mIFxcdTAwM2VcXHUwMDNlIFNFQ1RJT05TX1BHU0hJRlQpIFxcdTAwMjYgU0VDVElPTlNfTUFTSztcXG4gfVxcbiAjZWxzZSAvKiAhU0VDVElPTl9JTl9QQUdFX0ZMQUdTICovXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcGFnZV9zZWN0aW9uX2Zyb21fcGZuKHN0cnVjdCBwYWdlICpwYWdlLFxcbitcXHRcXHR1bnNpZ25lZCBsb25nIHBmbilcXG4re1xcbit9XFxuK1xcbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbWVtZGVzY19zZWN0aW9uKG1lbWRlc2NfZmxhZ3NfdCBtZGYpXFxuIHtcXG4gXFx0cmV0dXJuIDA7XFxuQEAgLTI3NjgsOSArMjc3OSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcGFnZV9saW5rcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgZW51bSB6b25lX3R5cGUgem9uZSxcXG4ge1xcbiBcXHRzZXRfcGFnZV96b25lKHBhZ2UsIHpvbmUpO1xcbiBcXHRzZXRfcGFnZV9ub2RlKHBhZ2UsIG5vZGUpO1xcbi0jaWZkZWYgU0VDVElPTl9JTl9QQUdFX0ZMQUdTXFxuLVxcdHNldF9wYWdlX3NlY3Rpb24ocGFnZSwgcGZuX3RvX3NlY3Rpb25fbnIocGZuKSk7XFxuLSNlbmRpZlxcbitcXHRzZXRfcGFnZV9zZWN0aW9uX2Zyb21fcGZuKHBhZ2UsIHBmbik7XFxuIH1cXG4gXFxuIC8qKlxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N0cmluZy5oIGIvaW5jbHVkZS9saW51eC9zdHJpbmcuaFxcbmluZGV4IDU3MDJkYWNhNDMyNmIuLjZjYjVjZGQwMTE1OGIgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9zdHJpbmcuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvc3RyaW5nLmhcXG5AQCAtMjc4LDYgKzI3OCwxOSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWVtY3B5X2ZsdXNoY2FjaGUodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBjbnQpXFxuIH1cXG4gI2VuZGlmXFxuIFxcbisjaWZuZGVmIG1lbWNweV9ub250ZW1wb3JhbFxcbisvKlxcbisgKiBtZW1jcHlfbm9udGVtcG9yYWwoKSByZXF1ZXN0cyBhIG5vbi10ZW1wb3JhbCBjb3B5IHdoZW4gdGhlXFxuKyAqIGFyY2hpdGVjdHVyZSBoYXMgYSBzdWl0YWJsZSBiYWNrZW5kLiBBcmNoaXRlY3R1cmVzIHdpdGhvdXQgYVxcbisgKiBzcGVjaWFsaXplZCBiYWNrZW5kIGZhbGwgYmFjayB0byBtZW1jcHkoKS4gS2VlcCB0aGlzIGFzIGFcXG4rICogZnVuY3Rpb24tbGlrZSBtYWNybyBzbyB0aGUgY29tcGlsZXIgY2FuIHN0aWxsIHNlZSB0aGUgb3JpZ2luYWxcXG4rICogbWVtY3B5KCkgY2FsbCBzaXRlIGFuZCBwcmVzZXJ2ZSB0aGUgdXN1YWwgRk9SVElGWSBjb3ZlcmFnZSB3aGVuXFxuKyAqIG9iamVjdCBzaXplcyByZW1haW4gdmlzaWJsZSB0aGVyZSwgd2hpbGUga2VlcGluZyB0aGUgQVBJIHZvaWQuXFxuKyAqL1xcbisjZGVmaW5lIG1lbWNweV9ub250ZW1wb3JhbChkc3QsIHNyYywgbGVuKSBcXFxcXFxuK1xcdCgodm9pZCltZW1jcHkoZHN0LCBzcmMsIGxlbikpXFxuKyNlbmRpZlxcbitcXG4gdm9pZCAqbWVtY2hyX2ludihjb25zdCB2b2lkICpzLCBpbnQgYywgc2l6ZV90IG4pO1xcbiBjaGFyICpzdHJyZXBsYWNlKGNoYXIgKnN0ciwgY2hhciBvbGQsIGNoYXIgbmV3KTtcXG4gXFxuZGlmZiAtLWdpdCBhL21tL21tX2luaXQuYyBiL21tL21tX2luaXQuY1xcbmluZGV4IDBmNjQ5MDllOGQyMGUuLmJiMjAwNzgwNmEyODcgMTAwNjQ0XFxuLS0tIGEvbW0vbW1faW5pdC5jXFxuKysrIGIvbW0vbW1faW5pdC5jXFxuQEAgLTEwMDUsMTEgKzEwMDUsMzcgQEAgc3RhdGljIHZvaWQgX19pbml0IG1lbW1hcF9pbml0KHZvaWQpXFxuIH1cXG4gXFxuICNpZmRlZiBDT05GSUdfWk9ORV9ERVZJQ0VcXG4tc3RhdGljIHZvaWQgX19yZWYgX19pbml0X3pvbmVfZGV2aWNlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgcGZuLFxcbisvKlxcbisgKiBSZXR1cm4gdHJ1ZSB3aGVuIG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlKCkgbXVzdCBpbml0aWFsaXplIHRoZSBwYWdlXFxuKyAqIHJlZmNvdW50IHRvIDAuIE1FTU9SWV9ERVZJQ0VfR0VORVJJQyBwYWdlcyByZWdhaW4gYSByZWZjb3VudCBvZiAxIGluXFxuKyAqIHRoZSBmcmVlIHBhdGgsIHdoaWxlIHRoZSByZW1haW5pbmcgWk9ORV9ERVZJQ0UgdHlwZXMgc3RhcnQgZnJvbSAwIGhlcmVcXG4rICogYW5kIHJhaXNlIHRoZSBjb3VudCBhZ2FpbiB3aGVuIHRoZSBhbGxvY2F0b3Igb3IgZHJpdmVyIGhhbmRzIHRoZSBwYWdlXFxuKyAqIG91dC5cXG4rICovXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBwYWdlbWFwX3JlcXVpcmVzX3JlZmNvdW50X3Jlc2V0KGNvbnN0IHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXApXFxuK3tcXG4rXFx0LypcXG4rXFx0ICogTUVNT1JZX0RFVklDRV9HRU5FUklDIHBhZ2VzIHJlZ2FpbiBhIHJlZmNvdW50IG9mIDEgaW4gdGhlIGZyZWVcXG4rXFx0ICogcGF0aC4gVGhlIHJlbWFpbmluZyBaT05FX0RFVklDRSB0eXBlcyBzdGFydCBmcm9tIDAgaGVyZSBhbmQgcmFpc2VcXG4rXFx0ICogdGhlIGNvdW50IGFnYWluIHdoZW4gdGhlIGFsbG9jYXRvciBvciBkcml2ZXIgaGFuZHMgdGhlIHBhZ2Ugb3V0LlxcbitcXHQgKi9cXG4rXFx0c3dpdGNoIChwZ21hcC1cXHUwMDNldHlwZSkge1xcbitcXHRjYXNlIE1FTU9SWV9ERVZJQ0VfRlNfREFYOlxcbitcXHRjYXNlIE1FTU9SWV9ERVZJQ0VfUFJJVkFURTpcXG4rXFx0Y2FzZSBNRU1PUllfREVWSUNFX0NPSEVSRU5UOlxcbitcXHRjYXNlIE1FTU9SWV9ERVZJQ0VfUENJX1AyUERNQTpcXG4rXFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcdGNhc2UgTUVNT1JZX0RFVklDRV9HRU5FUklDOlxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiBmYWxzZTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgX19yZWYgX196b25lX2RldmljZV9wYWdlX2luaXQoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgcGZuLFxcbiBcXHRcXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGxvbmcgem9uZV9pZHgsIGludCBuaWQsXFxuIFxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcClcXG4ge1xcbi1cXG4gXFx0X19pbml0X3NpbmdsZV9wYWdlKHBhZ2UsIHBmbiwgem9uZV9pZHgsIG5pZCk7XFxuIFxcbiBcXHQvKlxcbkBAIC0xMDI4LDI3ICsxMDU0LDU0IEBAIHN0YXRpYyB2b2lkIF9fcmVmIF9faW5pdF96b25lX2RldmljZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIHBmbixcXG4gXFx0ICovXFxuIFxcdHBhZ2VfZm9saW8ocGFnZSktXFx1MDAzZXBnbWFwID0gcGdtYXA7XFxuIFxcdHBhZ2UtXFx1MDAzZXpvbmVfZGV2aWNlX2RhdGEgPSBOVUxMO1xcbit9XFxuIFxcbi1cXHQvKlxcbi1cXHQgKiBaT05FX0RFVklDRSBwYWdlcyBvdGhlciB0aGFuIE1FTU9SWV9UWVBFX0dFTkVSSUMgYXJlIHJlbGVhc2VkXFxuLVxcdCAqIGRpcmVjdGx5IHRvIHRoZSBkcml2ZXIgcGFnZSBhbGxvY2F0b3Igd2hpY2ggd2lsbCBzZXQgdGhlIHBhZ2UgY291bnRcXG4tXFx0ICogdG8gMSB3aGVuIGFsbG9jYXRpbmcgdGhlIHBhZ2UuXFxuLVxcdCAqXFxuLVxcdCAqIE1FTU9SWV9UWVBFX0dFTkVSSUMgYW5kIE1FTU9SWV9UWVBFX0ZTX0RBWCBwYWdlcyBhdXRvbWF0aWNhbGx5IGhhdmVcXG4tXFx0ICogdGhlaXIgcmVmY291bnQgcmVzZXQgdG8gb25lIHdoZW5ldmVyIHRoZXkgYXJlIGZyZWVkIChpZS4gYWZ0ZXJcXG4tXFx0ICogdGhlaXIgcmVmY291bnQgZHJvcHMgdG8gMCkuXFxuLVxcdCAqL1xcbi1cXHRzd2l0Y2ggKHBnbWFwLVxcdTAwM2V0eXBlKSB7XFxuLVxcdGNhc2UgTUVNT1JZX0RFVklDRV9GU19EQVg6XFxuLVxcdGNhc2UgTUVNT1JZX0RFVklDRV9QUklWQVRFOlxcbi1cXHRjYXNlIE1FTU9SWV9ERVZJQ0VfQ09IRVJFTlQ6XFxuLVxcdGNhc2UgTUVNT1JZX0RFVklDRV9QQ0lfUDJQRE1BOlxcbitzdGF0aWMgdm9pZCBfX3JlZiB6b25lX2RldmljZV9wYWdlX2luaXRfc2xvdyhzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4rXFx0XFx0dW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgem9uZV9pZHgsIGludCBuaWQsXFxuK1xcdFxcdHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXApXFxuK3tcXG4rXFx0X196b25lX2RldmljZV9wYWdlX2luaXQocGFnZSwgcGZuLCB6b25lX2lkeCwgbmlkLCBwZ21hcCk7XFxuK1xcdGlmIChwYWdlbWFwX3JlcXVpcmVzX3JlZmNvdW50X3Jlc2V0KHBnbWFwKSlcXG4gXFx0XFx0c2V0X3BhZ2VfY291bnQocGFnZSwgMCk7XFxuLVxcdFxcdGJyZWFrO1xcbit9XFxuIFxcbi1cXHRjYXNlIE1FTU9SWV9ERVZJQ0VfR0VORVJJQzpcXG4tXFx0XFx0YnJlYWs7XFxuLVxcdH1cXG4rc3RhdGljIGlubGluZSB2b2lkIHpvbmVfZGV2aWNlX3RhaWxfcGFnZV9pbml0KHN0cnVjdCBwYWdlICpwYWdlLFxcbitcXHRcXHR1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyB6b25lX2lkeCwgaW50IG5pZCxcXG4rXFx0XFx0c3RydWN0IGRldl9wYWdlbWFwICpwZ21hcCwgY29uc3Qgc3RydWN0IHBhZ2UgKmhlYWQsXFxuK1xcdFxcdHVuc2lnbmVkIGludCBvcmRlcilcXG4re1xcbitcXHR6b25lX2RldmljZV9wYWdlX2luaXRfc2xvdyhwYWdlLCBwZm4sIHpvbmVfaWR4LCBuaWQsIHBnbWFwKTtcXG4rXFx0cHJlcF9jb21wb3VuZF90YWlsKHBhZ2UsIGhlYWQsIG9yZGVyKTtcXG4rXFx0c2V0X3BhZ2VfY291bnQocGFnZSwgMCk7XFxuK31cXG4rXFxuKy8qXFxuKyAqICd0ZW1wbGF0ZScgaXMgYSByZXVzYWJsZSBwYWdlIHByb3RvdHlwZSByYXRoZXIgdGhhbiBhIHN0cmljdGx5IGltbXV0YWJsZVxcbisgKiBvYmplY3QuIE1vc3QgWk9ORV9ERVZJQ0UgZmllbGRzIHN0YXkgY29uc3RhbnQgYWNyb3NzIHRoZSBwYWdlcyBjb3ZlcmVkIGJ5XFxuKyAqIHRoZSBjdXJyZW50IHRlbXBsYXRlLCBidXQgc2VjdGlvbiBiaXRzIGFuZCBwYWdlLVxcdTAwM2V2aXJ0dWFsIG1heSBzdGlsbCBkZXBlbmRcXG4rICogb24gdGhlIFBGTi4gUmVmcmVzaCB0aG9zZSBQRk4tZGVwZW5kZW50IGZpZWxkcyBpbiB0aGUgdGVtcGxhdGUgYmVmb3JlXFxuKyAqIGNvcHlpbmcgaXQgaW50byBAcGFnZS5cXG4rICovXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCB6b25lX2RldmljZV9wYWdlX3VwZGF0ZV90ZW1wbGF0ZShzdHJ1Y3QgcGFnZSAqdGVtcGxhdGUsXFxuK1xcdFxcdHVuc2lnbmVkIGxvbmcgcGZuKVxcbit7XFxuK1xcdHNldF9wYWdlX3NlY3Rpb25fZnJvbV9wZm4odGVtcGxhdGUsIHBmbik7XFxuKyNpZmRlZiBXQU5UX1BBR0VfVklSVFVBTFxcbitcXHRpZiAoIWlzX2hpZ2htZW1faWR4KFpPTkVfREVWSUNFKSlcXG4rXFx0XFx0c2V0X3BhZ2VfYWRkcmVzcyh0ZW1wbGF0ZSwgX192YShwZm4gXFx1MDAzY1xcdTAwM2MgUEFHRV9TSElGVCkpO1xcbisjZW5kaWZcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgem9uZV9kZXZpY2VfcGFnZV9pbml0X2Zyb21fdGVtcGxhdGUoc3RydWN0IHBhZ2UgKnBhZ2UsXFxuK1xcdFxcdHVuc2lnbmVkIGxvbmcgcGZuLCBzdHJ1Y3QgcGFnZSAqdGVtcGxhdGUpXFxuK3tcXG4rXFx0LypcXG4rXFx0ICogJ3RlbXBsYXRlJyBjYXJyaWVzIHRoZSBpbnZhcmlhbnQgcG9ydGlvbiBvZiBhIFpPTkVfREVWSUNFIHN0cnVjdFxcbitcXHQgKiBwYWdlLiBVcGRhdGUgdGhlIFBGTi1kZXBlbmRlbnQgZmllbGRzIGluIHBsYWNlIGJlZm9yZSBjb3B5aW5nIGl0XFxuK1xcdCAqIHRvIHRoZSBkZXN0aW5hdGlvbiBwYWdlLlxcbitcXHQgKi9cXG4rXFx0em9uZV9kZXZpY2VfcGFnZV91cGRhdGVfdGVtcGxhdGUodGVtcGxhdGUsIHBmbik7XFxuK1xcdG1lbWNweV9ub250ZW1wb3JhbChwYWdlLCB0ZW1wbGF0ZSwgc2l6ZW9mKCpwYWdlKSk7XFxuIH1cXG4gXFxuIC8qXFxuQEAgLTEwODMsNiArMTEzNiw3IEBAIHN0YXRpYyB2b2lkIF9fcmVmIG1lbW1hcF9pbml0X2NvbXBvdW5kKHN0cnVjdCBwYWdlICpoZWFkLFxcbiB7XFxuIFxcdHVuc2lnbmVkIGxvbmcgcGZuLCBlbmRfcGZuID0gaGVhZF9wZm4gKyBucl9wYWdlcztcXG4gXFx0dW5zaWduZWQgaW50IG9yZGVyID0gcGdtYXAtXFx1MDAzZXZtZW1tYXBfc2hpZnQ7XFxuK1xcdHN0cnVjdCBwYWdlIHRlbXBsYXRlO1xcbiBcXG4gXFx0LypcXG4gXFx0ICogV2UgaGF2ZSB0byBpbml0aWFsaXplIHRoZSBwYWdlcywgaW5jbHVkaW5nIHNldHRpbmcgdXAgcGFnZSBsaW5rcy5cXG5AQCAtMTA5MSwxMiArMTE0NSwyNiBAQCBzdGF0aWMgdm9pZCBfX3JlZiBtZW1tYXBfaW5pdF9jb21wb3VuZChzdHJ1Y3QgcGFnZSAqaGVhZCxcXG4gXFx0ICogdGhlIHBhZ2VzIGluIHRoZSBzYW1lIGdvLlxcbiBcXHQgKi9cXG4gXFx0X19TZXRQYWdlSGVhZChoZWFkKTtcXG4rXFxuIFxcdGZvciAocGZuID0gaGVhZF9wZm4gKyAxOyBwZm4gXFx1MDAzYyBlbmRfcGZuOyBwZm4rKykge1xcbiBcXHRcXHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IHBmbl90b19wYWdlKHBmbik7XFxuIFxcbi1cXHRcXHRfX2luaXRfem9uZV9kZXZpY2VfcGFnZShwYWdlLCBwZm4sIHpvbmVfaWR4LCBuaWQsIHBnbWFwKTtcXG4tXFx0XFx0cHJlcF9jb21wb3VuZF90YWlsKHBhZ2UsIGhlYWQsIG9yZGVyKTtcXG4tXFx0XFx0c2V0X3BhZ2VfY291bnQocGFnZSwgMCk7XFxuK1xcdFxcdGlmIChwZm4gPT0gaGVhZF9wZm4gKyAxKSB7XFxuK1xcdFxcdFxcdC8qXFxuK1xcdFxcdFxcdCAqIEFsbCB0YWlscyBvZiB0aGUgc2FtZSBjb21wb3VuZCBwYWdlIHNoYXJlIHRoZVxcbitcXHRcXHRcXHQgKiBzdGF0ZSBlc3RhYmxpc2hlZCBieSBwcmVwX2NvbXBvdW5kX3RhaWwoKS4gUmV1c2VcXG4rXFx0XFx0XFx0ICogb25lIHRhaWwgdGVtcGxhdGUgZm9yIHRoZSB3aG9sZSByYW5nZSBhbmRcXG4rXFx0XFx0XFx0ICogcmVmcmVzaCBvbmx5IHRoZSBQRk4tZGVwZW5kZW50IGZpZWxkcyBpbiB0aGF0XFxuK1xcdFxcdFxcdCAqIHRlbXBsYXRlIGJlZm9yZSBlYWNoIGNvcHkuXFxuK1xcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHR6b25lX2RldmljZV90YWlsX3BhZ2VfaW5pdChwYWdlLCBwZm4sIHpvbmVfaWR4LCBuaWQsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgIHBnbWFwLCBoZWFkLCBvcmRlcik7XFxuK1xcdFxcdFxcdC8qIGluaXQgdGVtcGxhdGUgcGFnZSAqL1xcbitcXHRcXHRcXHRtZW1jcHkoXFx1MDAyNnRlbXBsYXRlLCBwYWdlLCBzaXplb2YoKnBhZ2UpKTtcXG4rXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0em9uZV9kZXZpY2VfcGFnZV9pbml0X2Zyb21fdGVtcGxhdGUocGFnZSwgcGZuLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNnRlbXBsYXRlKTtcXG4rXFx0XFx0fVxcbiBcXHR9XFxuIFxcdHByZXBfY29tcG91bmRfaGVhZChoZWFkLCBvcmRlcik7XFxuIH1cXG5AQCAtMTExMyw2ICsxMTgxLDcgQEAgdm9pZCBfX3JlZiBtZW1tYXBfaW5pdF96b25lX2RldmljZShzdHJ1Y3Qgem9uZSAqem9uZSxcXG4gXFx0dW5zaWduZWQgbG9uZyB6b25lX2lkeCA9IHpvbmVfaWR4KHpvbmUpO1xcbiBcXHR1bnNpZ25lZCBsb25nIHN0YXJ0ID0gamlmZmllcztcXG4gXFx0aW50IG5pZCA9IHBnZGF0LVxcdTAwM2Vub2RlX2lkO1xcbitcXHRzdHJ1Y3QgcGFnZSB0ZW1wbGF0ZTtcXG4gXFxuIFxcdGlmIChXQVJOX09OX09OQ0UoIXBnbWFwIHx8IHpvbmVfaWR4ICE9IFpPTkVfREVWSUNFKSlcXG4gXFx0XFx0cmV0dXJuO1xcbkBAIC0xMTMwLDcgKzExOTksMjIgQEAgdm9pZCBfX3JlZiBtZW1tYXBfaW5pdF96b25lX2RldmljZShzdHJ1Y3Qgem9uZSAqem9uZSxcXG4gXFx0Zm9yIChwZm4gPSBzdGFydF9wZm47IHBmbiBcXHUwMDNjIGVuZF9wZm47IHBmbiArPSBwZm5zX3Blcl9jb21wb3VuZCkge1xcbiBcXHRcXHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IHBmbl90b19wYWdlKHBmbik7XFxuIFxcbi1cXHRcXHRfX2luaXRfem9uZV9kZXZpY2VfcGFnZShwYWdlLCBwZm4sIHpvbmVfaWR4LCBuaWQsIHBnbWFwKTtcXG4rXFx0XFx0aWYgKHBmbiA9PSBzdGFydF9wZm4pIHtcXG4rXFx0XFx0XFx0LypcXG4rXFx0XFx0XFx0ICogU2VlZCB0aGUgcmV1c2FibGUgaGVhZC1wYWdlIHRlbXBsYXRlIGZyb20gdGhlXFxuK1xcdFxcdFxcdCAqIGZpcnN0IHJlYWwgc3RydWN0IHBhZ2UuIFRoaXMgaW5pdGlhbGl6ZXMgdGhlXFxuK1xcdFxcdFxcdCAqIGZpcnN0IHBhZ2UgdGhyb3VnaCB0aGUgZXhpc3Rpbmcgc2xvdyBwYXRoIGFuZFxcbitcXHRcXHRcXHQgKiB0aGVuIHJldXNlcyB0aGF0IGZpbmFsIHN0YXRlIGFzIHRoZSB0ZW1wbGF0ZVxcbitcXHRcXHRcXHQgKiBmb3Igc3Vic2VxdWVudCBwYWdlcy5cXG4rXFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9zbG93KHBhZ2UsIHBmbiwgem9uZV9pZHgsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgIG5pZCwgcGdtYXApO1xcbitcXHRcXHRcXHQvKiBpbml0IHRlbXBsYXRlIHBhZ2UgKi9cXG4rXFx0XFx0XFx0bWVtY3B5KFxcdTAwMjZ0ZW1wbGF0ZSwgcGFnZSwgc2l6ZW9mKCpwYWdlKSk7XFxuK1xcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9mcm9tX3RlbXBsYXRlKHBhZ2UsIHBmbixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZ0ZW1wbGF0ZSk7XFxuK1xcdFxcdH1cXG4gXFxuIFxcdFxcdGlmIChJU19BTElHTkVEKHBmbiwgUEFHRVNfUEVSX1NFQ1RJT04pKVxcbiBcXHRcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMDc6NDA6MTIuNzk0MTk4Nzc1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTQ0MDE1OTI3ODcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlpPTkVfREVWSUNFXCIsXG4gICAgXCJERVZJQ0VfUFJJVkFURVwiLFxuICAgIFwiVEVTVF9ITU1cIixcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCIsXG4gICAgXCJNRU1PUllfSE9UUExVR1wiLFxuICAgIFwiTUVNT1JZX0hPVFJFTU9WRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1lbW1hcF9pbml0X3pvbmVfZGV2aWNlXCIsXG4gICAgXCJtZW1yZW1hcF9wYWdlc1wiLFxuICAgIFwiZGV2bV9tZW1yZW1hcF9wYWdlc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9wdGltaXplcyBzdHJ1Y3QgcGFnZSBpbml0aWFsaXphdGlvbiBmb3IgWk9ORV9ERVZJQ0UgbWVtb3J5IGJ5IHVzaW5nIGEgdGVtcGxhdGUgcGFnZSBhbmQgbm9uLXRlbXBvcmFsIG1lbW9yeSBjb3BpZXMgKG1lbWNweV9ub250ZW1wb3JhbCkuIFRoaXMgaXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyByZWFjaGFibGUgdmlhIGRldmljZSBtZW1vcnkgaG90cGx1Zywgc3VjaCBhcyB3aGVuIGxvYWRpbmcgdGhlIFRFU1RfSE1NIG1vZHVsZSBvciB1c2luZyBEQVgvUE1FTSBkZXZpY2VzLiBGdXp6aW5nIHRoaXMgaXMgaW1wb3J0YW50IHRvIGNhdGNoIHBvdGVudGlhbCBhbGlnbm1lbnQgb3IgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzIGR1cmluZyBwYWdlIGluaXRpYWxpemF0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA2MTdhYzE1YzkyZmE5MjM0MzcxMWFlNjFkNjU5M2UwYTFhYTE0ZTQ0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMyAwNzo0MDoxMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmhcbmluZGV4IDQ2MzU2MTY4NjNmNTMuLmJjNmE5ZjM0YjM0NmEgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmhcbkBAIC04Miw3ICs4MiwzNSBAQCBpbnQgc3RyY21wKGNvbnN0IGNoYXIgKmNzLCBjb25zdCBjaGFyICpjdCk7XG4gI2lmZGVmIENPTkZJR19BUkNIX0hBU19VQUNDRVNTX0ZMVVNIQ0FDSEVcbiAjZGVmaW5lIF9fSEFWRV9BUkNIX01FTUNQWV9GTFVTSENBQ0hFIDFcbiB2b2lkIF9fbWVtY3B5X2ZsdXNoY2FjaGUodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBjbnQpO1xuLXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtZW1jcHlfZmx1c2hjYWNoZSh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IGNudClcbitcbitzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbW92bnRpXzgodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMpXG4re1xuK1x0YXNtIHZvbGF0aWxlKFwibW92bnRpcSAlMSwgJTBcIlxuK1x0XHQgICAgIDogXCI9bVwiKCoodTY0ICopZHN0KVxuK1x0XHQgICAgIDogXCJyXCIoKihjb25zdCB1NjQgKilzcmMpXG4rXHRcdCAgICAgOiBcIm1lbW9yeVwiKTtcbit9XG4rXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG1vdm50aV8xNih2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYylcbit7XG4rXHRtb3ZudGlfOChkc3QsIHNyYyk7XG4rXHRtb3ZudGlfOChkc3QgKyA4LCBzcmMgKyA4KTtcbit9XG4rXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG1vdm50aV8zMih2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYylcbit7XG4rXHRtb3ZudGlfMTYoZHN0LCBzcmMpO1xuK1x0bW92bnRpXzE2KGRzdCArIDE2LCBzcmMgKyAxNik7XG4rfVxuK1xuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtb3ZudGlfNjQodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMpXG4re1xuK1x0bW92bnRpXzMyKGRzdCwgc3JjKTtcbitcdG1vdm50aV8zMihkc3QgKyAzMiwgc3JjICsgMzIpO1xuK31cbitcbitzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbWVtY3B5X2ZsdXNoY2FjaGUodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsXG4rXHRcdFx0XHRcdCAgICAgIHNpemVfdCBjbnQpXG4ge1xuIFx0aWYgKF9fYnVpbHRpbl9jb25zdGFudF9wKGNudCkpIHtcbiBcdFx0c3dpdGNoIChjbnQpIHtcbkBAIC05NiwxMCArMTI0LDQ4IEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtZW1jcHlfZmx1c2hjYWNoZSh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90XG4gXHRcdFx0XHRhc20gKFwibW92bnRpcSAlMSwgJTBcIiA6IFwiPW1cIigqKHU2NCAqKWRzdCkgOiBcInJcIigqKHU2NCAqKXNyYykpO1xuIFx0XHRcdFx0YXNtIChcIm1vdm50aXEgJTEsICUwXCIgOiBcIj1tXCIoKih1NjQgKikoZHN0ICsgOCkpIDogXCJyXCIoKih1NjQgKikoc3JjICsgOCkpKTtcbiBcdFx0XHRcdHJldHVybjtcbitcdFx0XHQvKlxuK1x0XHRcdCAqIFRoZSByZWxldmFudCBmaXhlZC1zaXplIGNvcGllcyBoZXJlIGFyZSB0aGVcbitcdFx0XHQgKiB4ODZfNjQgc3RydWN0IHBhZ2Ugc2l6ZXM6IDY0LCA4MCwgYW5kIDk2IGJ5dGVzLlxuK1x0XHRcdCAqIEtlZXAgMzItYnl0ZSBhbmQgNDgtYnl0ZSBjb3BpZXMgaW5saW5lIGFzIHdlbGxcbitcdFx0XHQgKiBpbnN0ZWFkIG9mIHNlbmRpbmcgdGhvc2UgbmVhcmJ5IGZpeGVkLXNpemVcbitcdFx0XHQgKiBjYXNlcyBiYWNrIHRvIF9fbWVtY3B5X2ZsdXNoY2FjaGUoKS5cbitcdFx0XHQgKi9cbitcdFx0XHRjYXNlIDMyOlxuK1x0XHRcdFx0bW92bnRpXzMyKGRzdCwgc3JjKTtcbitcdFx0XHRcdHJldHVybjtcbitcdFx0XHRjYXNlIDQ4OlxuK1x0XHRcdFx0bW92bnRpXzMyKGRzdCwgc3JjKTtcbitcdFx0XHRcdG1vdm50aV8xNihkc3QgKyAzMiwgc3JjICsgMzIpO1xuK1x0XHRcdFx0cmV0dXJuO1xuK1x0XHRcdGNhc2UgNjQ6XG4rXHRcdFx0XHRtb3ZudGlfNjQoZHN0LCBzcmMpO1xuK1x0XHRcdFx0cmV0dXJuO1xuK1x0XHRcdGNhc2UgODA6XG4rXHRcdFx0XHRtb3ZudGlfNjQoZHN0LCBzcmMpO1xuK1x0XHRcdFx0bW92bnRpXzE2KGRzdCArIDY0LCBzcmMgKyA2NCk7XG4rXHRcdFx0XHRyZXR1cm47XG4rXHRcdFx0Y2FzZSA5NjpcbitcdFx0XHRcdG1vdm50aV82NChkc3QsIHNyYyk7XG4rXHRcdFx0XHRtb3ZudGlfMzIoZHN0ICsgNjQsIHNyYyArIDY0KTtcbitcdFx0XHRcdHJldHVybjtcbiBcdFx0fVxuIFx0fVxuK1xuIFx0X19tZW1jcHlfZmx1c2hjYWNoZShkc3QsIHNyYywgY250KTtcbiB9XG4rXG4rI2RlZmluZSBtZW1jcHlfbm9udGVtcG9yYWwgbWVtY3B5X25vbnRlbXBvcmFsXG4rLypcbisgKiBSZXVzZSB0aGUgZXhpc3RpbmcgeDg2IGZsdXNoY2FjaGUgYmFja2VuZCBhcyB0aGUgbm9uLXRlbXBvcmFsIGNvcHlcbisgKiBwcmltaXRpdmUuXG4rICovXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG1lbWNweV9ub250ZW1wb3JhbCh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYyxcbitcdFx0c2l6ZV90IGNudClcbit7XG4rXHRtZW1jcHlfZmx1c2hjYWNoZShkc3QsIHNyYywgY250KTtcbit9XG4rXG4gI2VuZGlmXG4gXG4gI2VuZGlmIC8qIF9fS0VSTkVMX18gKi9cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tLmggYi9pbmNsdWRlL2xpbnV4L21tLmhcbmluZGV4IDQ4NWRmOWMyZGJkZGIuLjQzMzQzYmZjZTQ5MzYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbW0uaFxuQEAgLTI1NDEsMTEgKzI1NDEsMjIgQEAgc3RhdGljIGlubGluZSB2b2lkIHNldF9wYWdlX3NlY3Rpb24oc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgc2VjdGlvbilcbiBcdHBhZ2UtXHUwMDNlZmxhZ3MuZiB8PSAoc2VjdGlvbiBcdTAwMjYgU0VDVElPTlNfTUFTSykgXHUwMDNjXHUwMDNjIFNFQ1RJT05TX1BHU0hJRlQ7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcGFnZV9zZWN0aW9uX2Zyb21fcGZuKHN0cnVjdCBwYWdlICpwYWdlLFxuK1x0XHR1bnNpZ25lZCBsb25nIHBmbilcbit7XG4rXHRzZXRfcGFnZV9zZWN0aW9uKHBhZ2UsIHBmbl90b19zZWN0aW9uX25yKHBmbikpO1xuK31cbitcbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbWVtZGVzY19zZWN0aW9uKG1lbWRlc2NfZmxhZ3NfdCBtZGYpXG4ge1xuIFx0cmV0dXJuIChtZGYuZiBcdTAwM2VcdTAwM2UgU0VDVElPTlNfUEdTSElGVCkgXHUwMDI2IFNFQ1RJT05TX01BU0s7XG4gfVxuICNlbHNlIC8qICFTRUNUSU9OX0lOX1BBR0VfRkxBR1MgKi9cbitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3BhZ2Vfc2VjdGlvbl9mcm9tX3BmbihzdHJ1Y3QgcGFnZSAqcGFnZSxcbitcdFx0dW5zaWduZWQgbG9uZyBwZm4pXG4re1xuK31cbitcbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbWVtZGVzY19zZWN0aW9uKG1lbWRlc2NfZmxhZ3NfdCBtZGYpXG4ge1xuIFx0cmV0dXJuIDA7XG5AQCAtMjc2OCw5ICsyNzc5LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHNldF9wYWdlX2xpbmtzKHN0cnVjdCBwYWdlICpwYWdlLCBlbnVtIHpvbmVfdHlwZSB6b25lLFxuIHtcbiBcdHNldF9wYWdlX3pvbmUocGFnZSwgem9uZSk7XG4gXHRzZXRfcGFnZV9ub2RlKHBhZ2UsIG5vZGUpO1xuLSNpZmRlZiBTRUNUSU9OX0lOX1BBR0VfRkxBR1Ncbi1cdHNldF9wYWdlX3NlY3Rpb24ocGFnZSwgcGZuX3RvX3NlY3Rpb25fbnIocGZuKSk7XG4tI2VuZGlmXG4rXHRzZXRfcGFnZV9zZWN0aW9uX2Zyb21fcGZuKHBhZ2UsIHBmbik7XG4gfVxuIFxuIC8qKlxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3RyaW5nLmggYi9pbmNsdWRlL2xpbnV4L3N0cmluZy5oXG5pbmRleCA1NzAyZGFjYTQzMjZiLi42Y2I1Y2RkMDExNThiIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9zdHJpbmcuaFxuKysrIGIvaW5jbHVkZS9saW51eC9zdHJpbmcuaFxuQEAgLTI3OCw2ICsyNzgsMTkgQEAgc3RhdGljIGlubGluZSB2b2lkIG1lbWNweV9mbHVzaGNhY2hlKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgY250KVxuIH1cbiAjZW5kaWZcbiBcbisjaWZuZGVmIG1lbWNweV9ub250ZW1wb3JhbFxuKy8qXG4rICogbWVtY3B5X25vbnRlbXBvcmFsKCkgcmVxdWVzdHMgYSBub24tdGVtcG9yYWwgY29weSB3aGVuIHRoZVxuKyAqIGFyY2hpdGVjdHVyZSBoYXMgYSBzdWl0YWJsZSBiYWNrZW5kLiBBcmNoaXRlY3R1cmVzIHdpdGhvdXQgYVxuKyAqIHNwZWNpYWxpemVkIGJhY2tlbmQgZmFsbCBiYWNrIHRvIG1lbWNweSgpLiBLZWVwIHRoaXMgYXMgYVxuKyAqIGZ1bmN0aW9uLWxpa2UgbWFjcm8gc28gdGhlIGNvbXBpbGVyIGNhbiBzdGlsbCBzZWUgdGhlIG9yaWdpbmFsXG4rICogbWVtY3B5KCkgY2FsbCBzaXRlIGFuZCBwcmVzZXJ2ZSB0aGUgdXN1YWwgRk9SVElGWSBjb3ZlcmFnZSB3aGVuXG4rICogb2JqZWN0IHNpemVzIHJlbWFpbiB2aXNpYmxlIHRoZXJlLCB3aGlsZSBrZWVwaW5nIHRoZSBBUEkgdm9pZC5cbisgKi9cbisjZGVmaW5lIG1lbWNweV9ub250ZW1wb3JhbChkc3QsIHNyYywgbGVuKSBcXFxuK1x0KCh2b2lkKW1lbWNweShkc3QsIHNyYywgbGVuKSlcbisjZW5kaWZcbitcbiB2b2lkICptZW1jaHJfaW52KGNvbnN0IHZvaWQgKnMsIGludCBjLCBzaXplX3Qgbik7XG4gY2hhciAqc3RycmVwbGFjZShjaGFyICpzdHIsIGNoYXIgb2xkLCBjaGFyIG5ldyk7XG4gXG5kaWZmIC0tZ2l0IGEvbW0vbW1faW5pdC5jIGIvbW0vbW1faW5pdC5jXG5pbmRleCAwZjY0OTA5ZThkMjBlLi5iYjIwMDc4MDZhMjg3IDEwMDY0NFxuLS0tIGEvbW0vbW1faW5pdC5jXG4rKysgYi9tbS9tbV9pbml0LmNcbkBAIC0xMDA1LDExICsxMDA1LDM3IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBtZW1tYXBfaW5pdCh2b2lkKVxuIH1cbiBcbiAjaWZkZWYgQ09ORklHX1pPTkVfREVWSUNFXG4tc3RhdGljIHZvaWQgX19yZWYgX19pbml0X3pvbmVfZGV2aWNlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgcGZuLFxuKy8qXG4rICogUmV0dXJuIHRydWUgd2hlbiBtZW1tYXBfaW5pdF96b25lX2RldmljZSgpIG11c3QgaW5pdGlhbGl6ZSB0aGUgcGFnZVxuKyAqIHJlZmNvdW50IHRvIDAuIE1FTU9SWV9ERVZJQ0VfR0VORVJJQyBwYWdlcyByZWdhaW4gYSByZWZjb3VudCBvZiAxIGluXG4rICogdGhlIGZyZWUgcGF0aCwgd2hpbGUgdGhlIHJlbWFpbmluZyBaT05FX0RFVklDRSB0eXBlcyBzdGFydCBmcm9tIDAgaGVyZVxuKyAqIGFuZCByYWlzZSB0aGUgY291bnQgYWdhaW4gd2hlbiB0aGUgYWxsb2NhdG9yIG9yIGRyaXZlciBoYW5kcyB0aGUgcGFnZVxuKyAqIG91dC5cbisgKi9cbitzdGF0aWMgaW5saW5lIGJvb2wgcGFnZW1hcF9yZXF1aXJlc19yZWZjb3VudF9yZXNldChjb25zdCBzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwKVxuK3tcbitcdC8qXG4rXHQgKiBNRU1PUllfREVWSUNFX0dFTkVSSUMgcGFnZXMgcmVnYWluIGEgcmVmY291bnQgb2YgMSBpbiB0aGUgZnJlZVxuK1x0ICogcGF0aC4gVGhlIHJlbWFpbmluZyBaT05FX0RFVklDRSB0eXBlcyBzdGFydCBmcm9tIDAgaGVyZSBhbmQgcmFpc2VcbitcdCAqIHRoZSBjb3VudCBhZ2FpbiB3aGVuIHRoZSBhbGxvY2F0b3Igb3IgZHJpdmVyIGhhbmRzIHRoZSBwYWdlIG91dC5cbitcdCAqL1xuK1x0c3dpdGNoIChwZ21hcC1cdTAwM2V0eXBlKSB7XG4rXHRjYXNlIE1FTU9SWV9ERVZJQ0VfRlNfREFYOlxuK1x0Y2FzZSBNRU1PUllfREVWSUNFX1BSSVZBVEU6XG4rXHRjYXNlIE1FTU9SWV9ERVZJQ0VfQ09IRVJFTlQ6XG4rXHRjYXNlIE1FTU9SWV9ERVZJQ0VfUENJX1AyUERNQTpcbitcdFx0cmV0dXJuIHRydWU7XG4rXHRjYXNlIE1FTU9SWV9ERVZJQ0VfR0VORVJJQzpcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1x0fVxuK1xuK1x0cmV0dXJuIGZhbHNlO1xuK31cbitcbitzdGF0aWMgdm9pZCBfX3JlZiBfX3pvbmVfZGV2aWNlX3BhZ2VfaW5pdChzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBwZm4sXG4gXHRcdFx0XHRcdCAgdW5zaWduZWQgbG9uZyB6b25lX2lkeCwgaW50IG5pZCxcbiBcdFx0XHRcdFx0ICBzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwKVxuIHtcbi1cbiBcdF9faW5pdF9zaW5nbGVfcGFnZShwYWdlLCBwZm4sIHpvbmVfaWR4LCBuaWQpO1xuIFxuIFx0LypcbkBAIC0xMDI4LDI3ICsxMDU0LDU0IEBAIHN0YXRpYyB2b2lkIF9fcmVmIF9faW5pdF96b25lX2RldmljZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIHBmbixcbiBcdCAqL1xuIFx0cGFnZV9mb2xpbyhwYWdlKS1cdTAwM2VwZ21hcCA9IHBnbWFwO1xuIFx0cGFnZS1cdTAwM2V6b25lX2RldmljZV9kYXRhID0gTlVMTDtcbit9XG4gXG4tXHQvKlxuLVx0ICogWk9ORV9ERVZJQ0UgcGFnZXMgb3RoZXIgdGhhbiBNRU1PUllfVFlQRV9HRU5FUklDIGFyZSByZWxlYXNlZFxuLVx0ICogZGlyZWN0bHkgdG8gdGhlIGRyaXZlciBwYWdlIGFsbG9jYXRvciB3aGljaCB3aWxsIHNldCB0aGUgcGFnZSBjb3VudFxuLVx0ICogdG8gMSB3aGVuIGFsbG9jYXRpbmcgdGhlIHBhZ2UuXG4tXHQgKlxuLVx0ICogTUVNT1JZX1RZUEVfR0VORVJJQyBhbmQgTUVNT1JZX1RZUEVfRlNfREFYIHBhZ2VzIGF1dG9tYXRpY2FsbHkgaGF2ZVxuLVx0ICogdGhlaXIgcmVmY291bnQgcmVzZXQgdG8gb25lIHdoZW5ldmVyIHRoZXkgYXJlIGZyZWVkIChpZS4gYWZ0ZXJcbi1cdCAqIHRoZWlyIHJlZmNvdW50IGRyb3BzIHRvIDApLlxuLVx0ICovXG4tXHRzd2l0Y2ggKHBnbWFwLVx1MDAzZXR5cGUpIHtcbi1cdGNhc2UgTUVNT1JZX0RFVklDRV9GU19EQVg6XG4tXHRjYXNlIE1FTU9SWV9ERVZJQ0VfUFJJVkFURTpcbi1cdGNhc2UgTUVNT1JZX0RFVklDRV9DT0hFUkVOVDpcbi1cdGNhc2UgTUVNT1JZX0RFVklDRV9QQ0lfUDJQRE1BOlxuK3N0YXRpYyB2b2lkIF9fcmVmIHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9zbG93KHN0cnVjdCBwYWdlICpwYWdlLFxuK1x0XHR1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyB6b25lX2lkeCwgaW50IG5pZCxcbitcdFx0c3RydWN0IGRldl9wYWdlbWFwICpwZ21hcClcbit7XG4rXHRfX3pvbmVfZGV2aWNlX3BhZ2VfaW5pdChwYWdlLCBwZm4sIHpvbmVfaWR4LCBuaWQsIHBnbWFwKTtcbitcdGlmIChwYWdlbWFwX3JlcXVpcmVzX3JlZmNvdW50X3Jlc2V0KHBnbWFwKSlcbiBcdFx0c2V0X3BhZ2VfY291bnQocGFnZSwgMCk7XG4tXHRcdGJyZWFrO1xuK31cbiBcbi1cdGNhc2UgTUVNT1JZX0RFVklDRV9HRU5FUklDOlxuLVx0XHRicmVhaztcbi1cdH1cbitzdGF0aWMgaW5saW5lIHZvaWQgem9uZV9kZXZpY2VfdGFpbF9wYWdlX2luaXQoc3RydWN0IHBhZ2UgKnBhZ2UsXG4rXHRcdHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIHpvbmVfaWR4LCBpbnQgbmlkLFxuK1x0XHRzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwLCBjb25zdCBzdHJ1Y3QgcGFnZSAqaGVhZCxcbitcdFx0dW5zaWduZWQgaW50IG9yZGVyKVxuK3tcbitcdHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9zbG93KHBhZ2UsIHBmbiwgem9uZV9pZHgsIG5pZCwgcGdtYXApO1xuK1x0cHJlcF9jb21wb3VuZF90YWlsKHBhZ2UsIGhlYWQsIG9yZGVyKTtcbitcdHNldF9wYWdlX2NvdW50KHBhZ2UsIDApO1xuK31cbitcbisvKlxuKyAqICd0ZW1wbGF0ZScgaXMgYSByZXVzYWJsZSBwYWdlIHByb3RvdHlwZSByYXRoZXIgdGhhbiBhIHN0cmljdGx5IGltbXV0YWJsZVxuKyAqIG9iamVjdC4gTW9zdCBaT05FX0RFVklDRSBmaWVsZHMgc3RheSBjb25zdGFudCBhY3Jvc3MgdGhlIHBhZ2VzIGNvdmVyZWQgYnlcbisgKiB0aGUgY3VycmVudCB0ZW1wbGF0ZSwgYnV0IHNlY3Rpb24gYml0cyBhbmQgcGFnZS1cdTAwM2V2aXJ0dWFsIG1heSBzdGlsbCBkZXBlbmRcbisgKiBvbiB0aGUgUEZOLiBSZWZyZXNoIHRob3NlIFBGTi1kZXBlbmRlbnQgZmllbGRzIGluIHRoZSB0ZW1wbGF0ZSBiZWZvcmVcbisgKiBjb3B5aW5nIGl0IGludG8gQHBhZ2UuXG4rICovXG4rc3RhdGljIGlubGluZSB2b2lkIHpvbmVfZGV2aWNlX3BhZ2VfdXBkYXRlX3RlbXBsYXRlKHN0cnVjdCBwYWdlICp0ZW1wbGF0ZSxcbitcdFx0dW5zaWduZWQgbG9uZyBwZm4pXG4re1xuK1x0c2V0X3BhZ2Vfc2VjdGlvbl9mcm9tX3Bmbih0ZW1wbGF0ZSwgcGZuKTtcbisjaWZkZWYgV0FOVF9QQUdFX1ZJUlRVQUxcbitcdGlmICghaXNfaGlnaG1lbV9pZHgoWk9ORV9ERVZJQ0UpKVxuK1x0XHRzZXRfcGFnZV9hZGRyZXNzKHRlbXBsYXRlLCBfX3ZhKHBmbiBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCkpO1xuKyNlbmRpZlxuK31cbitcbitzdGF0aWMgdm9pZCB6b25lX2RldmljZV9wYWdlX2luaXRfZnJvbV90ZW1wbGF0ZShzdHJ1Y3QgcGFnZSAqcGFnZSxcbitcdFx0dW5zaWduZWQgbG9uZyBwZm4sIHN0cnVjdCBwYWdlICp0ZW1wbGF0ZSlcbit7XG4rXHQvKlxuK1x0ICogJ3RlbXBsYXRlJyBjYXJyaWVzIHRoZSBpbnZhcmlhbnQgcG9ydGlvbiBvZiBhIFpPTkVfREVWSUNFIHN0cnVjdFxuK1x0ICogcGFnZS4gVXBkYXRlIHRoZSBQRk4tZGVwZW5kZW50IGZpZWxkcyBpbiBwbGFjZSBiZWZvcmUgY29weWluZyBpdFxuK1x0ICogdG8gdGhlIGRlc3RpbmF0aW9uIHBhZ2UuXG4rXHQgKi9cbitcdHpvbmVfZGV2aWNlX3BhZ2VfdXBkYXRlX3RlbXBsYXRlKHRlbXBsYXRlLCBwZm4pO1xuK1x0bWVtY3B5X25vbnRlbXBvcmFsKHBhZ2UsIHRlbXBsYXRlLCBzaXplb2YoKnBhZ2UpKTtcbiB9XG4gXG4gLypcbkBAIC0xMDgzLDYgKzExMzYsNyBAQCBzdGF0aWMgdm9pZCBfX3JlZiBtZW1tYXBfaW5pdF9jb21wb3VuZChzdHJ1Y3QgcGFnZSAqaGVhZCxcbiB7XG4gXHR1bnNpZ25lZCBsb25nIHBmbiwgZW5kX3BmbiA9IGhlYWRfcGZuICsgbnJfcGFnZXM7XG4gXHR1bnNpZ25lZCBpbnQgb3JkZXIgPSBwZ21hcC1cdTAwM2V2bWVtbWFwX3NoaWZ0O1xuK1x0c3RydWN0IHBhZ2UgdGVtcGxhdGU7XG4gXG4gXHQvKlxuIFx0ICogV2UgaGF2ZSB0byBpbml0aWFsaXplIHRoZSBwYWdlcywgaW5jbHVkaW5nIHNldHRpbmcgdXAgcGFnZSBsaW5rcy5cbkBAIC0xMDkxLDEyICsxMTQ1LDI2IEBAIHN0YXRpYyB2b2lkIF9fcmVmIG1lbW1hcF9pbml0X2NvbXBvdW5kKHN0cnVjdCBwYWdlICpoZWFkLFxuIFx0ICogdGhlIHBhZ2VzIGluIHRoZSBzYW1lIGdvLlxuIFx0ICovXG4gXHRfX1NldFBhZ2VIZWFkKGhlYWQpO1xuK1xuIFx0Zm9yIChwZm4gPSBoZWFkX3BmbiArIDE7IHBmbiBcdTAwM2MgZW5kX3BmbjsgcGZuKyspIHtcbiBcdFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pO1xuIFxuLVx0XHRfX2luaXRfem9uZV9kZXZpY2VfcGFnZShwYWdlLCBwZm4sIHpvbmVfaWR4LCBuaWQsIHBnbWFwKTtcbi1cdFx0cHJlcF9jb21wb3VuZF90YWlsKHBhZ2UsIGhlYWQsIG9yZGVyKTtcbi1cdFx0c2V0X3BhZ2VfY291bnQocGFnZSwgMCk7XG4rXHRcdGlmIChwZm4gPT0gaGVhZF9wZm4gKyAxKSB7XG4rXHRcdFx0LypcbitcdFx0XHQgKiBBbGwgdGFpbHMgb2YgdGhlIHNhbWUgY29tcG91bmQgcGFnZSBzaGFyZSB0aGVcbitcdFx0XHQgKiBzdGF0ZSBlc3RhYmxpc2hlZCBieSBwcmVwX2NvbXBvdW5kX3RhaWwoKS4gUmV1c2VcbitcdFx0XHQgKiBvbmUgdGFpbCB0ZW1wbGF0ZSBmb3IgdGhlIHdob2xlIHJhbmdlIGFuZFxuK1x0XHRcdCAqIHJlZnJlc2ggb25seSB0aGUgUEZOLWRlcGVuZGVudCBmaWVsZHMgaW4gdGhhdFxuK1x0XHRcdCAqIHRlbXBsYXRlIGJlZm9yZSBlYWNoIGNvcHkuXG4rXHRcdFx0ICovXG4rXHRcdFx0em9uZV9kZXZpY2VfdGFpbF9wYWdlX2luaXQocGFnZSwgcGZuLCB6b25lX2lkeCwgbmlkLFxuK1x0XHRcdFx0XHRcdCAgIHBnbWFwLCBoZWFkLCBvcmRlcik7XG4rXHRcdFx0LyogaW5pdCB0ZW1wbGF0ZSBwYWdlICovXG4rXHRcdFx0bWVtY3B5KFx1MDAyNnRlbXBsYXRlLCBwYWdlLCBzaXplb2YoKnBhZ2UpKTtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHR6b25lX2RldmljZV9wYWdlX2luaXRfZnJvbV90ZW1wbGF0ZShwYWdlLCBwZm4sXG4rXHRcdFx0XHRcdFx0XHQgICAgXHUwMDI2dGVtcGxhdGUpO1xuK1x0XHR9XG4gXHR9XG4gXHRwcmVwX2NvbXBvdW5kX2hlYWQoaGVhZCwgb3JkZXIpO1xuIH1cbkBAIC0xMTEzLDYgKzExODEsNyBAQCB2b2lkIF9fcmVmIG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlKHN0cnVjdCB6b25lICp6b25lLFxuIFx0dW5zaWduZWQgbG9uZyB6b25lX2lkeCA9IHpvbmVfaWR4KHpvbmUpO1xuIFx0dW5zaWduZWQgbG9uZyBzdGFydCA9IGppZmZpZXM7XG4gXHRpbnQgbmlkID0gcGdkYXQtXHUwMDNlbm9kZV9pZDtcbitcdHN0cnVjdCBwYWdlIHRlbXBsYXRlO1xuIFxuIFx0aWYgKFdBUk5fT05fT05DRSghcGdtYXAgfHwgem9uZV9pZHggIT0gWk9ORV9ERVZJQ0UpKVxuIFx0XHRyZXR1cm47XG5AQCAtMTEzMCw3ICsxMTk5LDIyIEBAIHZvaWQgX19yZWYgbWVtbWFwX2luaXRfem9uZV9kZXZpY2Uoc3RydWN0IHpvbmUgKnpvbmUsXG4gXHRmb3IgKHBmbiA9IHN0YXJ0X3BmbjsgcGZuIFx1MDAzYyBlbmRfcGZuOyBwZm4gKz0gcGZuc19wZXJfY29tcG91bmQpIHtcbiBcdFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pO1xuIFxuLVx0XHRfX2luaXRfem9uZV9kZXZpY2VfcGFnZShwYWdlLCBwZm4sIHpvbmVfaWR4LCBuaWQsIHBnbWFwKTtcbitcdFx0aWYgKHBmbiA9PSBzdGFydF9wZm4pIHtcbitcdFx0XHQvKlxuK1x0XHRcdCAqIFNlZWQgdGhlIHJldXNhYmxlIGhlYWQtcGFnZSB0ZW1wbGF0ZSBmcm9tIHRoZVxuK1x0XHRcdCAqIGZpcnN0IHJlYWwgc3RydWN0IHBhZ2UuIFRoaXMgaW5pdGlhbGl6ZXMgdGhlXG4rXHRcdFx0ICogZmlyc3QgcGFnZSB0aHJvdWdoIHRoZSBleGlzdGluZyBzbG93IHBhdGggYW5kXG4rXHRcdFx0ICogdGhlbiByZXVzZXMgdGhhdCBmaW5hbCBzdGF0ZSBhcyB0aGUgdGVtcGxhdGVcbitcdFx0XHQgKiBmb3Igc3Vic2VxdWVudCBwYWdlcy5cbitcdFx0XHQgKi9cbitcdFx0XHR6b25lX2RldmljZV9wYWdlX2luaXRfc2xvdyhwYWdlLCBwZm4sIHpvbmVfaWR4LFxuK1x0XHRcdFx0XHRcdCAgIG5pZCwgcGdtYXApO1xuK1x0XHRcdC8qIGluaXQgdGVtcGxhdGUgcGFnZSAqL1xuK1x0XHRcdG1lbWNweShcdTAwMjZ0ZW1wbGF0ZSwgcGFnZSwgc2l6ZW9mKCpwYWdlKSk7XG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0em9uZV9kZXZpY2VfcGFnZV9pbml0X2Zyb21fdGVtcGxhdGUocGFnZSwgcGZuLFxuK1x0XHRcdFx0XHRcdFx0ICAgIFx1MDAyNnRlbXBsYXRlKTtcbitcdFx0fVxuIFxuIFx0XHRpZiAoSVNfQUxJR05FRChwZm4sIFBBR0VTX1BFUl9TRUNUSU9OKSlcbiBcdFx0XHRjb25kX3Jlc2NoZWQoKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDA3OjQwOjEyLjc5NDIwMDAxNVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcxODIzNzQ4OTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUGF0Y2g6IGBzdHJ1Y3QgcGFnZWAgSW5pdGlhbGl6YXRpb24gZm9yIGBaT05FX0RFVklDRWAqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIHRoZSBgc3RydWN0IHBhZ2VgIGluaXRpYWxpemF0aW9uIHByb2Nlc3Mgc3BlY2lmaWNhbGx5IGZvciBgWk9ORV9ERVZJQ0VgIG1lbW9yeS4gSXQgc2VlbXMgbGlrZSB0aGUgY29yZSBjaGFuZ2UgaXMgdGhlIGludHJvZHVjdGlvbiBvZiBgbWVtY3B5X25vbnRlbXBvcmFsYCB0byBhY2NlbGVyYXRlIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAgYnkgY29weWluZyBhIHRlbXBsYXRlIGBzdHJ1Y3QgcGFnZWAuIFRoYXQncyBhIGNsYXNzaWMgb3B0aW1pemF0aW9uIHRlY2huaXF1ZSwgdHJ5aW5nIHRvIGF2b2lkIGNhY2hlIHBvbGx1dGlvbiBkdXJpbmcgbWVtb3J5IGluaXRpYWxpemF0aW9uLiBUaGUgY2hhbmdlcyBhcmUgc3ByZWFkIGFjcm9zcyBhIGZldyBmaWxlczogdGhlIHg4NiBhc3NlbWJseSBoZWFkZXIsIHNvbWUgY29yZSBtbSBoZWFkZXJzLCBhIHN0cmluZyBoYW5kbGluZyBoZWFkZXIsIGFuZCB0aGUgbW0gaW5pdGlhbGl6YXRpb24gY29kZSBpdHNlbGYuXG5cbk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBjYW4gd2UgKnJlYWNoKiB0aGlzIGNvZGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gYFpPTkVfREVWSUNFYCBpcyB1c3VhbGx5IGFzc29jaWF0ZWQgd2l0aCBEQVgsIHBlcnNpc3RlbnQgbWVtb3J5LCBhbmQgZGV2aWNlcyB0aGF0IHVzZSBQQ0kgcGVlci10by1wZWVyIERNQS4gV2UgY2FuIHByb2JhYmx5IHRyaWdnZXIgdGhpcyBpbiBRRU1VIGJlY2F1c2UgaXQgc3VwcG9ydHMgZW11bGF0aW5nIE5WRElNTXMgKHdoaWNoIHVzZSBEQVgpIGFuZCBwb3RlbnRpYWxseSBQTUVNIGRldmljZXMuIFRoZSBgWk9ORV9ERVZJQ0VgIGlzIGFsc28gdG91Y2hlZCBieSBgZGF4YCBvciBgcGFnZW1hcGAgdGVzdHMuXG5cbklzIGZ1enppbmcgdGhpcyB3b3J0aCB0aGUgZWZmb3J0PyBBYnNvbHV0ZWx5LiBJdOKAmXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBpbml0aWFsaXphdGlvbiwgc3BlY2lmaWNhbGx5IGZvciBtZW1vcnkgaG90cGx1ZyBvciBkZXZpY2UgbWVtb3J5LiBUaGlzIG1lYW5zIGl04oCZcyBoYW5kbGluZyBjcml0aWNhbCBwYXJ0cyBvZiB0aGUgc3lzdGVtIHdoZW4gbmV3IG1lbW9yeSBpcyBhZGRlZCBvciBkZXZpY2VzIGFyZSBpbml0aWFsaXplZC4gVGhhdCdzIGEganVpY3kgdGFyZ2V0IGZvciBmaW5kaW5nIHN1YnRsZSBtZW1vcnkgY29ycnVwdGlvbiBidWdzLiBUaGUgZnVuY3Rpb24gYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYCBnZXRzIGNhbGxlZCBkdXJpbmcgbWVtb3J5IGhvdHBsdWcgb3IgZGV2aWNlIGluaXRpYWxpemF0aW9uLCB0aGluayBgZGV2bV9tZW1yZW1hcF9wYWdlc2AgYW5kIHNpbWlsYXIgZnVuY3Rpb25zLlxuXG5DYW4gc3l6a2FsbGVyIHRyaWdnZXIgdGhpcz8gUG90ZW50aWFsbHksIHllcy4gU3l6a2FsbGVyIGNhbiBwcm9iYWJseSBpbnRlcmFjdCB3aXRoIGAvc3lzL2J1cy9uZGAgb3Igc29tZXRoaW5nIHNpbWlsYXIgdG8gdHJpZ2dlciB0aGlzLCBvciBpdCBtaWdodCBnZXQgaGl0IGR1cmluZyBib290IGlmIHdlIGNvbmZpZ3VyZSBOVkRJTU0gaW4gUUVNVS4gU3l6a2FsbGVyIG1pZ2h0IG5vdCBlbmFibGUgTlZESU1NIGJ5IGRlZmF1bHQsIHVubGVzcyBpdOKAmXMgc3BlY2lmaWNhbGx5IGNvbmZpZ3VyZWQuIEJ1dCBoZXksIGl0J3Mgb2Z0ZW4gZW5hYmxlZCBiZWNhdXNlIG9mIGBDT05GSUdfWk9ORV9ERVZJQ0VgLiBTbywgdGhlIHBvdGVudGlhbCBhdHRhY2sgc3VyZmFjZSBpcyBiaWdnZXIgdGhhbiBJJ2Qgb3JpZ2luYWxseSB0aG91Z2h0LlxuXG5Pa2F5LCBuZXh0IHN0ZXAgaXMgdG8gbG9vayBhdCB0aGUgb3RoZXIgY2FsbGVycyBvZiBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgIHRvIHNlZSBob3cgZWxzZSB0aGlzIGZ1bmN0aW9uIGlzIHRyaWdnZXJlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTkyOSwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2OSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDA3OjQwOjE5Ljk3NjU3ODI2OFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODEyNTg4Njk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbW1hcF9pbml0X3pvbmVfZGV2aWNlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbW16b25lLmg9MTMxMT1zdGF0aWMgaW5saW5lIGJvb2wgem9uZV9kZXZpY2VfcGFnZXNfaGF2ZV9zYW1lX3BnbWFwKGNvbnN0IHN0cnVjdCBwYWdlICphLFxcbi0tXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC0xMzIwLVxcbmluY2x1ZGUvbGludXgvbW16b25lLmg6MTMyMTpleHRlcm4gdm9pZCBtZW1tYXBfaW5pdF96b25lX2RldmljZShzdHJ1Y3Qgem9uZSAqLCB1bnNpZ25lZCBsb25nLFxcbmluY2x1ZGUvbGludXgvbW16b25lLmgtMTMyMi1cXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgbG9uZywgc3RydWN0IGRldl9wYWdlbWFwICopO1xcbi0tXFxubW0vbWVtcmVtYXAuYz0xNDQ9c3RhdGljIGludCBwYWdlbWFwX3JhbmdlKHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXAsIHN0cnVjdCBtaHBfcGFyYW1zICpwYXJhbXMsXFxuLS1cXG5tbS9tZW1yZW1hcC5jLTI0MS1cXHQgKi9cXG5tbS9tZW1yZW1hcC5jOjI0MjpcXHRtZW1tYXBfaW5pdF96b25lX2RldmljZShcXHUwMDI2Tk9ERV9EQVRBKG5pZCktXFx1MDAzZW5vZGVfem9uZXNbWk9ORV9ERVZJQ0VdLFxcbm1tL21lbXJlbWFwLmMtMjQzLVxcdFxcdFxcdFxcdFBIWVNfUEZOKHJhbmdlLVxcdTAwM2VzdGFydCksXFxuLS1cXG5tbS9tbV9pbml0LmM9OTY4PXN0YXRpYyB2b2lkIF9faW5pdCBtZW1tYXBfaW5pdCh2b2lkKVxcbi0tXFxubW0vbW1faW5pdC5jLTEwMDgtLypcXG5tbS9tbV9pbml0LmM6MTAwOTogKiBSZXR1cm4gdHJ1ZSB3aGVuIG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlKCkgbXVzdCBpbml0aWFsaXplIHRoZSBwYWdlXFxubW0vbW1faW5pdC5jLTEwMTAtICogcmVmY291bnQgdG8gMC4gTUVNT1JZX0RFVklDRV9HRU5FUklDIHBhZ2VzIHJlZ2FpbiBhIHJlZmNvdW50IG9mIDEgaW5cXG4tLVxcbm1tL21tX2luaXQuYz0xMTMxPXN0YXRpYyB2b2lkIF9fcmVmIG1lbW1hcF9pbml0X2NvbXBvdW5kKHN0cnVjdCBwYWdlICpoZWFkLFxcbi0tXFxubW0vbW1faW5pdC5jLTExNzEtXFxubW0vbW1faW5pdC5jOjExNzI6dm9pZCBfX3JlZiBtZW1tYXBfaW5pdF96b25lX2RldmljZShzdHJ1Y3Qgem9uZSAqem9uZSxcXG5tbS9tbV9pbml0LmMtMTE3My1cXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMDc6NDA6MjEuNzg5MTc1NjE0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzcxNzAyNTgwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRlY29uc3RydWN0aW5nIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAqKlxuXG5Pa2F5LCBzbyBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgIGlzIGJlaW5nIGNhbGxlZCBmcm9tIGBwYWdlbWFwX3JhbmdlYCB3aXRoaW4gYG1tL21lbXJlbWFwLmNgLiBIbW0sIGBtbS9tZW1yZW1hcC5jYCBpcyB1c3VhbGx5IGludm9sdmVkIGluIHJlbWFwcGluZyBtZW1vcnkgcmVnaW9ucy4gVGhhdCdzIGludGVyZXN0aW5nLCBhbmQgaXQgc3VnZ2VzdHMgd2UncmUgZGVhbGluZyB3aXRoIGRldmljZSBtZW1vcnkgbWFwcGluZyBpbiBzb21lIGNhcGFjaXR5LiBUbyB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IGJldHRlciwgSSBuZWVkIHRvIHRyYWNlICp3aHkqIGBwYWdlbWFwX3JhbmdlYCBpcyBiZWluZyB1c2VkLiBXaGF0J3MgY2FsbGluZyAqaXQqPyBUaGF0J3MgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBmdWxsIHBpY3R1cmUgaGVyZS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHVwc3RyZWFtIGNhbGxlcnMgb2YgYHBhZ2VtYXBfcmFuZ2VgLiBUaGlzIHdpbGwgaWxsdW1pbmF0ZSB3aGF0IG9wZXJhdGlvbnMgYXJlIHRyaWdnZXJpbmcgdGhpcyBtZW1vcnkgcmVtYXBwaW5nIGJlaGF2aW9yIGFuZCB3aHkgd2UncmUgc3BlY2lmaWNhbGx5IGluaXRpYWxpemluZyBhIHpvbmUgZGV2aWNlLiBUaGlzIGNvbnRleHQgd2lsbCBiZSBjcnVjaWFsIGZvciBhbnkgZnVydGhlciBkZWJ1Z2dpbmcgb3IgYW5hbHlzaXMuIExldCdzIHNlZS4uLiBiYWNrdHJhY2Ugb3IgY3Jvc3MtcmVmZXJlbmNlLCBpdCBpcyFcblxuXG4iLCJJbnB1dFRva2VucyI6NzI0MSwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDA3OjQwOjI1LjUwNjIwMzY3NFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODIwOTk3ODc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBhZ2VtYXBfcmFuZ2VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtcmVtYXAuYz0xMzc9c3RhdGljIHZvaWQgZGV2X3BhZ2VtYXBfcGVyY3B1X3JlbGVhc2Uoc3RydWN0IHBlcmNwdV9yZWYgKnJlZilcXG4tLVxcbm1tL21lbXJlbWFwLmMtMTQzLVxcbm1tL21lbXJlbWFwLmM6MTQ0OnN0YXRpYyBpbnQgcGFnZW1hcF9yYW5nZShzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwLCBzdHJ1Y3QgbWhwX3BhcmFtcyAqcGFyYW1zLFxcbm1tL21lbXJlbWFwLmMtMTQ1LVxcdFxcdGludCByYW5nZV9pZCwgaW50IG5pZClcXG4tLVxcbm1tL21lbXJlbWFwLmM9MjY2PXZvaWQgKm1lbXJlbWFwX3BhZ2VzKHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXAsIGludCBuaWQpXFxuLS1cXG5tbS9tZW1yZW1hcC5jLTMzNy1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnJfcmFuZ2U7IGkrKykge1xcbm1tL21lbXJlbWFwLmM6MzM4OlxcdFxcdGVycm9yID0gcGFnZW1hcF9yYW5nZShwZ21hcCwgXFx1MDAyNnBhcmFtcywgaSwgbmlkKTtcXG5tbS9tZW1yZW1hcC5jLTMzOS1cXHRcXHRpZiAoZXJyb3IpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDA3OjQwOjI3LjMyNzIwODkxOVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2MDg1NjM2NzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKlRoaW5raW5nIFRocm91Z2ggbWVtcmVtYXBfcGFnZXMqKlxuXG5SaWdodCwgc28gYG1lbXJlbWFwX3BhZ2VzYCBpcyBiZWluZyBjYWxsZWQgYnkgKmRyaXZlcnMqLiBUaGF0J3MgdGhlIGtleSBzdGFydGluZyBwb2ludC4gSXQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhpcyBmdW5jdGlvbiBpcyBhIGNyaXRpY2FsIHBpZWNlIG9mIHRoZSBrZXJuZWwncyBtZW1vcnkgbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgaG93IGhhcmR3YXJlIGludGVyYWN0cyB3aXRoIHRoZSBzeXN0ZW0ncyBtZW1vcnkgc3BhY2UuIERyaXZlcnMsIGJ5IHRoZWlyIHZlcnkgbmF0dXJlLCBhcmUgcmVzcG9uc2libGUgZm9yIGludGVyZmFjaW5nIHdpdGggcGh5c2ljYWwgZGV2aWNlcywgYW5kIG9mdGVuIG5lZWQgdG8gbWFwIHBoeXNpY2FsIG1lbW9yeSByZWdpb25zIGludG8gdGhlIHZpcnR1YWwgYWRkcmVzcyBzcGFjZSBvZiB0aGUga2VybmVsLCBvciBwb3RlbnRpYWxseSBldmVuIHVzZXIgc3BhY2UsIGZvciBETUEgb3BlcmF0aW9ucyBvciBkaXJlY3QgYWNjZXNzLlxuXG5NeSBtaW5kIGltbWVkaWF0ZWx5IHN0YXJ0cyB0aWNraW5nIHRocm91Z2ggdGhlIGltcGxpY2F0aW9uczogV2hhdCBraW5kIG9mIGRyaXZlcnM/IEFyZSB3ZSB0YWxraW5nIGFib3V0IG5ldHdvcmsgYWRhcHRlcnMgbWFwcGluZyBidWZmZXJzLCBncmFwaGljcyBjYXJkcyBoYW5kbGluZyBmcmFtZWJ1ZmZlcnMsIG9yIHN0b3JhZ2UgY29udHJvbGxlcnMgZGVhbGluZyB3aXRoIGRpc2sgc2VjdG9ycz8gVGhlIHNwZWNpZmljcyBtYXR0ZXIgZm9yIHBlcmZvcm1hbmNlIGFuZCBzZWN1cml0eS4gSXMgdGhpcyBhIGNvbW1vbiBvcGVyYXRpb24gb3Igc29tZXRoaW5nIHJlbGF0aXZlbHkgcmFyZT8gVGhlIGZyZXF1ZW5jeSBvZiBpdHMgdXNlIHdpbGwgZ2l2ZSBhIGNsdWUgYXMgdG8gaXRzIGNyaXRpY2FsaXR5IGZvciBvcHRpbWl6YXRpb24uXG5cbkkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25zdHJhaW50cy4gSG93IGxhcmdlIGFyZSB0aGUgbWVtb3J5IHJlZ2lvbnMgYmVpbmcgbWFwcGVkPyBBcmUgd2UgdGFsa2luZyBhYm91dCBzaW5nbGUgcGFnZXMsIG9yIHBvdGVudGlhbGx5IGh1Z2UgYmxvY2tzPyBMYXJnZXIgcmVnaW9ucyBpbXBseSBwb3RlbnRpYWwgZm9yIG1vcmUgY29tcGxleCBwYWdlIHRhYmxlIG1hbmlwdWxhdGlvbnMgYW5kIHJlc291cmNlIGNvbnRlbnRpb24uIEFuZCBpcyBpdCBhbiBhcmVhIG9mIG1lbW9yeSB0aGF0IGlzIHNoYXJlZCBiZXR3ZWVuIHVzZXIgYW5kIGtlcm5lbCwgb3IgaXMgdGhpcyBtYXBwaW5nIHB1cmVseSBrZXJuZWwgc3BhY2U/IFNoYXJlZCByZWdpb25zIGNhbiBvcGVuIHVwIHZ1bG5lcmFiaWxpdGllcyBpZiBub3QgaGFuZGxlZCBjb3JyZWN0bHkuXG5cbkknbSBhbHNvIGNvbnNpZGVyaW5nIHRoZSBwb3RlbnRpYWwgZm9yIGVycm9ycy4gV2hhdCBlcnJvciBoYW5kbGluZyBpcyBpbiBwbGFjZT8gQXJlIHdlIGNoZWNraW5nIGZvciB2YWxpZCBwaHlzaWNhbCBhZGRyZXNzZXM/IFdoYXQgaGFwcGVucyBpZiB0aGUgbWFwcGluZyBmYWlscyDigJMgZG9lcyBpdCBncmFjZWZ1bGx5IGRlZ3JhZGUsIG9yIGNvdWxkIGl0IGxlYWQgdG8gc3lzdGVtIGluc3RhYmlsaXR5PyBTZWN1cml0eSBpbXBsaWNhdGlvbnMgYXJlIGFub3RoZXIgaW1wb3J0YW50IGFzcGVjdCB0byBjb25zaWRlciBoZXJlIC0gYXJlIHRoZXJlIGNoZWNrcyBpbiBwbGFjZSB0byBlbnN1cmUgdGhhdCB0aGUgZHJpdmVyIGNhbiBhY3R1YWxseSBhY2Nlc3MgdGhlIHJlcXVlc3RlZCBtZW1vcnk/IElzIHRoZXJlIGEgcmlzayBvZiBtZW1vcnkgbGVha3MgaWYgbWFwcGluZ3MgYXJlIG5vdCBwcm9wZXJseSB1bm1hcHBlZD8gVGhlIHJldHVybiB2YWx1ZSBvZiB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUgYSBrZXkgcGllY2Ugb2YgaW5mb3JtYXRpb24uXG5cbkVzc2VudGlhbGx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlICp3aHkqIG9mIHRoaXMgZnVuY3Rpb24gY2FsbC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGUgZHJpdmVyIGlzIHRyeWluZyB0byAqYWNoaWV2ZSogd2l0aCBgbWVtcmVtYXBfcGFnZXNgLiBLbm93aW5nIHRoYXQgd2lsbCBlbmFibGUgbWUgdG8gc2VlIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyBhbmQgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzLiBJJ20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgdGhlIGZvbGxvdy11cCBxdWVzdGlvbnM6IHdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgZm9yIE5VTUEgc3lzdGVtcywgYW5kIGhvdyBkb2VzIHRoaXMgZnVuY3Rpb24gaGFuZGxlIHBhZ2UgY2FjaGluZyBhbmQgY29oZXJlbmNlPyBUaW1lIHRvIGRpZyBpbnRvIHRoZSBzb3VyY2UgYW5kIHNlZSB3aGF0J3MgcmVhbGx5IGhhcHBlbmluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzc1MywiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDA3OjQwOjMxLjkzNTc3NTI5N1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjQzNzM3MzE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbXJlbWFwX3BhZ2VzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdD0yNzQ9VGhlc2UgY2FuIGJlIGFsbG9jYXRlZCBhbmQgZnJlZWQgd2l0aDo6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMjg1LSAgICBwYWdlbWFwLm9wcyA9IFxcdTAwMjZkZXZpY2VfZGV2bWVtX29wcztcXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3Q6Mjg2OiAgICBtZW1yZW1hcF9wYWdlcyhcXHUwMDI2cGFnZW1hcCwgbnVtYV9ub2RlX2lkKCkpO1xcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0yODctXFxuLS1cXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMjkwLVxcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdDoyOTE6VGhlcmUgYXJlIGFsc28gZGV2bV9yZXF1ZXN0X2ZyZWVfbWVtX3JlZ2lvbigpLCBkZXZtX21lbXJlbWFwX3BhZ2VzKCksXFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTI5Mi1kZXZtX21lbXVubWFwX3BhZ2VzKCksIGFuZCBkZXZtX3JlbGVhc2VfbWVtX3JlZ2lvbigpIHdoZW4gdGhlIHJlc291cmNlcyBjYW5cXG4tLVxcbkRvY3VtZW50YXRpb24vbW0vbWVtb3J5LW1vZGVsLnJzdD0xNDE9dG8ga2VlcCB0aGUgbWVtb3J5IHBpbm5lZCBmb3IgYWN0aXZlIHVzZS4gYFpPTkVfREVWSUNFYCwgdmlhXFxuRG9jdW1lbnRhdGlvbi9tbS9tZW1vcnktbW9kZWwucnN0OjE0Mjo6YzpmdW5jOmBkZXZtX21lbXJlbWFwX3BhZ2VzYCwgcGVyZm9ybXMganVzdCBlbm91Z2ggbWVtb3J5IGhvdHBsdWcgdG9cXG5Eb2N1bWVudGF0aW9uL21tL21lbW9yeS1tb2RlbC5yc3QtMTQzLXR1cm4gb24gOmM6ZnVuYzpgcGZuX3RvX3BhZ2VgLCA6YzpmdW5jOmBwYWdlX3RvX3BmbmAsIGFuZFxcbi0tXFxuRG9jdW1lbnRhdGlvbi9tbS9tZW1vcnktbW9kZWwucnN0PTE1Nz1tZW1vcnkgaG90cGx1Zy4gU3ViLXNlY3Rpb24gc3VwcG9ydCBhbGxvd3MgZm9yIDJNQiBhcyB0aGUgY3Jvc3MtYXJjaFxcbkRvY3VtZW50YXRpb24vbW0vbWVtb3J5LW1vZGVsLnJzdDoxNTg6Y29tbW9uIGFsaWdubWVudCBncmFudWxhcml0eSBmb3IgOmM6ZnVuYzpgZGV2bV9tZW1yZW1hcF9wYWdlc2AuXFxuRG9jdW1lbnRhdGlvbi9tbS9tZW1vcnktbW9kZWwucnN0LTE1OS1cXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3Q9MjIwPW1pZ3JhdGVfdm1hX2ZpbmFsaXplKCkg5Ye95pWw5peo5Zyo5L2/6amx5Yqo56iL5bqP5pu05piT5LqO57yW5YaZ5bm26ZuG5Lit6Leo6amx5Yqo56iL5bqP55qE6YCa55So5Luj56CB44CCXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0LTIzNi0gICAgcGFnZW1hcC5vcHMgPSBcXHUwMDI2ZGV2aWNlX2Rldm1lbV9vcHM7XFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdDoyMzc6ICAgIG1lbXJlbWFwX3BhZ2VzKFxcdTAwMjZwYWdlbWFwLCBudW1hX25vZGVfaWQoKSk7XFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdC0yMzgtXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0LTI0MS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0OjI0Mjrov5jmnIlkZXZtX3JlcXVlc3RfZnJlZV9tZW1fcmVnaW9uKCksIGRldm1fbWVtcmVtYXBfcGFnZXMoKSxcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0LTI0My1kZXZtX21lbXVubWFwX3BhZ2VzKCkg5ZKMIGRldm1fcmVsZWFzZV9tZW1fcmVnaW9uKCkg5b2T6LWE5rqQ5Y+v5Lul57uR5a6a5YiwIGBgc3RydWN0IGRldmljZWBgLlxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vbWVtb3J5LW1vZGVsLnJzdD0xMDc9Wk9ORV9ERVZJQ0VcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL21lbW9yeS1tb2RlbC5yc3QtMTExLeS6i+WunuacieWFs++8mui/meS6m+WcsOWdgOiMg+WbtOeahOmhtemdouWvueixoeS7juacquiiq+WcqOe6v+agh+iusOi/h++8jOiAjOS4lOW/hemhu+WvueiuvuWkh+i/m+ihjOW8leeUqO+8jOiAjOS4jeS7heS7hVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL21lbW9yeS1tb2RlbC5yc3Q6MTEyOuaYr+mhtemdou+8jOS7peS/neaMgeWGheWtmOiiq+KAnOmUgeWumuKAneS7peS+v+S9v+eUqOOAgiBgWk9ORV9ERVZJQ0VgIO+8jOmAmui/hyA6YzpmdW5jOmBkZXZtX21lbXJlbWFwX3BhZ2VzYCDvvIxcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9tZW1vcnktbW9kZWwucnN0LTExMy3kuLrnu5nlrprnmoRwZm5z6IyD5Zu05omn6KGM6Laz5aSf55qE5YaF5a2Y54Ot5o+S5ouU5p2l5byA5ZCvIDpjOmZ1bmM6YHBmbl90b19wYWdlYO+8jFxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vbWVtb3J5LW1vZGVsLnJzdC0xMjItOmM6ZnVuYzpgYXJjaF9hZGRfbWVtb3J5YCDvvIzljbPlhoXlrZjng63mj5Lmi5TnmoTkuIrljYrpg6jliIbjgILlrZDmrrXmlK/mjIHlhYHorrgyTULkvZzkuLpcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9tZW1vcnktbW9kZWwucnN0OjEyMzo6YzpmdW5jOmBkZXZtX21lbXJlbWFwX3BhZ2VzYCDnmoTot6jmnrbmnoTpgJrnlKjlr7npvZDpopfnspLluqbjgIJcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9tZW1vcnktbW9kZWwucnN0LTEyNC1cXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3V2bWVtLmM9MTE1OD1pbnQga3ZtcHBjX3V2bWVtX2luaXQodm9pZClcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3V2bWVtLmMtMTE4OS1cXHRrdm1wcGNfdXZtZW1fcGdtYXAub3duZXIgPSBcXHUwMDI2a3ZtcHBjX3V2bWVtX3BnbWFwO1xcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3V2bWVtLmM6MTE5MDpcXHRhZGRyID0gbWVtcmVtYXBfcGFnZXMoXFx1MDAyNmt2bXBwY191dm1lbV9wZ21hcCwgTlVNQV9OT19OT0RFKTtcXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl91dm1lbS5jLTExOTEtXFx0aWYgKElTX0VSUihhZGRyKSkge1xcbi0tXFxuYXJjaC94ODYvbW0vaW5pdF82NC5jPTk2ND1pbnQgYWRkX3BhZ2VzKGludCBuaWQsIHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbi0tXFxuYXJjaC94ODYvbW0vaW5pdF82NC5jLTk3Ni1cXHQvKlxcbmFyY2gveDg2L21tL2luaXRfNjQuYzo5Nzc6XFx0ICogU3BlY2lhbCBjYXNlOiBhZGRfcGFnZXMoKSBpcyBjYWxsZWQgYnkgbWVtcmVtYXBfcGFnZXMoKSBmb3IgYWRkaW5nIGRldmljZVxcbmFyY2gveDg2L21tL2luaXRfNjQuYy05NzgtXFx0ICogcHJpdmF0ZSBwYWdlcy4gRG8gbm90IGJ1bXAgdXAgbWF4X3BmbiBpbiB0aGUgZGV2aWNlIHByaXZhdGUgcGF0aCxcXG4tLVxcbmRyaXZlcnMvZGF4L2RldmljZS5jPTM4MD1zdGF0aWMgaW50IGRldl9kYXhfcHJvYmUoc3RydWN0IGRldl9kYXggKmRldl9kYXgpXFxuLS1cXG5kcml2ZXJzL2RheC9kZXZpY2UuYy00MzQtXFx0XFx0XFx0b3JkZXJfYmFzZV8yKGRldl9kYXgtXFx1MDAzZWFsaWduIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQpO1xcbmRyaXZlcnMvZGF4L2RldmljZS5jOjQzNTpcXHRhZGRyID0gZGV2bV9tZW1yZW1hcF9wYWdlcyhkZXYsIHBnbWFwKTtcXG5kcml2ZXJzL2RheC9kZXZpY2UuYy00MzYtXFx0aWYgKElTX0VSUihhZGRyKSlcXG4tLVxcbmRyaXZlcnMvZGF4L2ZzZGV2LmM9MjA3PXN0YXRpYyBpbnQgZnNkZXZfZGF4X3Byb2JlKHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4KVxcbi0tXFxuZHJpdmVycy9kYXgvZnNkZXYuYy0yNzMtXFxuZHJpdmVycy9kYXgvZnNkZXYuYzoyNzQ6XFx0YWRkciA9IGRldm1fbWVtcmVtYXBfcGFnZXMoZGV2LCBwZ21hcCk7XFxuZHJpdmVycy9kYXgvZnNkZXYuYy0yNzUtXFx0aWYgKElTX0VSUihhZGRyKSlcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9taWdyYXRlLmM9MTAyNj1pbnQga2dkMmtmZF9pbml0X3pvbmVfZGV2aWNlKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX21pZ3JhdGUuYy0xMDY3LVxcdCAqL1xcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9taWdyYXRlLmM6MTA2ODpcXHRyID0gZGV2bV9tZW1yZW1hcF9wYWdlcyhhZGV2LVxcdTAwM2VkZXYsIHBnbWFwKTtcXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfbWlncmF0ZS5jLTEwNjktXFx0aWYgKElTX0VSUihyKSkge1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWVtLmM9Mjk2PW5vdXZlYXVfZG1lbV9jaHVua19hbGxvYyhzdHJ1Y3Qgbm91dmVhdV9kcm0gKmRybSwgc3RydWN0IHBhZ2UgKipwcGFnZSxcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZG1lbS5jLTMzMi1cXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtZW0uYzozMzM6XFx0cHRyID0gbWVtcmVtYXBfcGFnZXMoXFx1MDAyNmNodW5rLVxcdTAwM2VwYWdlbWFwLCBudW1hX25vZGVfaWQoKSk7XFxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWVtLmMtMzM0LVxcdGlmIChJU19FUlIocHRyKSkge1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jPTE3NjA9c3RhdGljIHN0cnVjdCB4ZV9wYWdlbWFwICp4ZV9wYWdlbWFwX2NyZWF0ZShzdHJ1Y3QgeGVfZGV2aWNlICp4ZSwgc3RydWN0IHhlX3ZyYW1fcmVnaW9uICp2cilcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYy0xODAxLVxcdHBhZ2VtYXAtXFx1MDAzZW9wcyA9IGRybV9wYWdlbWFwX3BhZ2VtYXBfb3BzX2dldCgpO1xcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYzoxODAyOlxcdGFkZHIgPSBkZXZtX21lbXJlbWFwX3BhZ2VzKGRldiwgcGFnZW1hcCk7XFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jLTE4MDMtXFx0aWYgKElTX0VSUihhZGRyKSkge1xcbi0tXFxuZHJpdmVycy9odi9tc2h2X3Z0bF9tYWluLmM9MzgxPXN0YXRpYyBpbnQgbXNodl92dGxfaW9jdGxfYWRkX3Z0bDBfbWVtKHN0cnVjdCBtc2h2X3Z0bCAqdnRsLCB2b2lkIF9fdXNlciAqYXJnKVxcbi0tXFxuZHJpdmVycy9odi9tc2h2X3Z0bF9tYWluLmMtNDEwLVxcdCAqIFRoaXMgd29ya3MgYmVzdCB3aGVuIHRoZSByYW5nZSBpcyBhbGlnbmVkOyBpLmUuIGJvdGggdGhlIHN0YXJ0IGFuZCB0aGUgbGVuZ3RoLlxcbmRyaXZlcnMvaHYvbXNodl92dGxfbWFpbi5jOjQxMTpcXHQgKiBDbGFtcCB0byBNQVhfRk9MSU9fT1JERVIgdG8gYXZvaWQgYSBXQVJOIGluIG1lbXJlbWFwX3BhZ2VzKCkgd2hlbiB0aGUgcmFuZ2VcXG5kcml2ZXJzL2h2L21zaHZfdnRsX21haW4uYy00MTItXFx0ICogYWxpZ25tZW50IGV4Y2VlZHMgdGhlIG1heGltdW0gc3VwcG9ydGVkIGZvbGlvIG9yZGVyIGZvciB0aGlzIGtlcm5lbCBjb25maWcuXFxuLS1cXG5kcml2ZXJzL2h2L21zaHZfdnRsX21haW4uYy00MTktXFxuZHJpdmVycy9odi9tc2h2X3Z0bF9tYWluLmM6NDIwOlxcdGFkZHIgPSBkZXZtX21lbXJlbWFwX3BhZ2VzKG1lbV9kZXYsIHBnbWFwKTtcXG5kcml2ZXJzL2h2L21zaHZfdnRsX21haW4uYy00MjEtXFx0aWYgKElTX0VSUihhZGRyKSkge1xcbmRyaXZlcnMvaHYvbXNodl92dGxfbWFpbi5jOjQyMjpcXHRcXHRkZXZfZXJyKHZ0bC1cXHUwMDNlbW9kdWxlX2RldiwgXFxcImRldm1fbWVtcmVtYXBfcGFnZXMgZXJyb3I6ICVsZFxcXFxuXFxcIiwgUFRSX0VSUihhZGRyKSk7XFxuZHJpdmVycy9odi9tc2h2X3Z0bF9tYWluLmMtNDIzLVxcdFxcdGtmcmVlKHBnbWFwKTtcXG4tLVxcbmRyaXZlcnMvbnZkaW1tL0tjb25maWc9MTQzPWNvbmZpZyBOVkRJTU1fVEVTVF9CVUlMRFxcbi0tXFxuZHJpdmVycy9udmRpbW0vS2NvbmZpZy0xNTEtXFx0ICBvdGhlcndpc2UgaGVscHMgY2F0Y2ggYnVpbGQgZXJyb3JzIGluZHVjZWQgYnkgY2hhbmdlcyB0byB0aGVcXG5kcml2ZXJzL252ZGltbS9LY29uZmlnOjE1MjpcXHQgIGNvcmUgZGV2bV9tZW1yZW1hcF9wYWdlcygpIGltcGxlbWVudGF0aW9uIGFuZCBvdGhlclxcbmRyaXZlcnMvbnZkaW1tL0tjb25maWctMTUzLVxcdCAgaW5mcmFzdHJ1Y3R1cmUuXFxuLS1cXG5kcml2ZXJzL252ZGltbS9wbWVtLmM9NDQ4PXN0YXRpYyBpbnQgcG1lbV9hdHRhY2hfZGlzayhzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtNTE3LVxcdFxcdHBtZW0tXFx1MDAzZXBnbWFwLm9wcyA9IFxcdTAwMjZmc2RheF9wYWdlbWFwX29wcztcXG5kcml2ZXJzL252ZGltbS9wbWVtLmM6NTE4OlxcdFxcdGFkZHIgPSBkZXZtX21lbXJlbWFwX3BhZ2VzKGRldiwgXFx1MDAyNnBtZW0tXFx1MDAzZXBnbWFwKTtcXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtNTE5LVxcdFxcdHBmbl9zYiA9IG5kX3Bmbi1cXHUwMDNlcGZuX3NiO1xcbi0tXFxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTUzMC1cXHRcXHRwbWVtLVxcdTAwM2VwZ21hcC5vcHMgPSBcXHUwMDI2ZnNkYXhfcGFnZW1hcF9vcHM7XFxuZHJpdmVycy9udmRpbW0vcG1lbS5jOjUzMTpcXHRcXHRhZGRyID0gZGV2bV9tZW1yZW1hcF9wYWdlcyhkZXYsIFxcdTAwMjZwbWVtLVxcdTAwM2VwZ21hcCk7XFxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTUzMi1cXHRcXHRiYl9yYW5nZSA9IHBtZW0tXFx1MDAzZXBnbWFwLnJhbmdlO1xcbi0tXFxuZHJpdmVycy9udmRpbW0vcmVnaW9uX2RldnMuYz05MzQ9RVhQT1JUX1NZTUJPTChuZF9yZWdpb25fcmVsZWFzZV9sYW5lKTtcXG4tLVxcbmRyaXZlcnMvbnZkaW1tL3JlZ2lvbl9kZXZzLmMtOTM2LS8qXFxuZHJpdmVycy9udmRpbW0vcmVnaW9uX2RldnMuYzo5Mzc6ICogUG93ZXJQQyByZXF1aXJlcyB0aGlzIGFsaWdubWVudCBmb3IgbWVtcmVtYXBfcGFnZXMoKS4gQWxsIG90aGVyIGFyY2hzXFxuZHJpdmVycy9udmRpbW0vcmVnaW9uX2RldnMuYy05MzgtICogc2hvdWxkIGJlIG9rIHdpdGggU1VCU0VDVElPTl9TSVpFIChzZWUgbWVtcmVtYXBfY29tcGF0X2FsaWduKCkpLlxcbi0tXFxuZHJpdmVycy9wY2kvcDJwZG1hLmM9Mzg3PWludCBwY2lfcDJwZG1hX2FkZF9yZXNvdXJjZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IGJhciwgc2l6ZV90IHNpemUsXFxuLS1cXG5kcml2ZXJzL3BjaS9wMnBkbWEuYy00MzYtXFxuZHJpdmVycy9wY2kvcDJwZG1hLmM6NDM3OlxcdGFkZHIgPSBkZXZtX21lbXJlbWFwX3BhZ2VzKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIHBnbWFwKTtcXG5kcml2ZXJzL3BjaS9wMnBkbWEuYy00MzgtXFx0aWYgKElTX0VSUihhZGRyKSkge1xcbi0tXFxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rjc3NibGsuYz01NTM9ZGNzc2Jsa19hZGRfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXFxuLS1cXG5kcml2ZXJzL3MzOTAvYmxvY2svZGNzc2Jsay5jLTY5Ni1cXHRcXHRkZXZfaW5mby1cXHUwMDNlcGdtYXAubnJfcmFuZ2VcXHQ9IDE7XFxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rjc3NibGsuYzo2OTc6XFx0XFx0YWRkciA9IGRldm1fbWVtcmVtYXBfcGFnZXMoXFx1MDAyNmRldl9pbmZvLVxcdTAwM2VkZXYsIFxcdTAwMjZkZXZfaW5mby1cXHUwMDNlcGdtYXApO1xcbmRyaXZlcnMvczM5MC9ibG9jay9kY3NzYmxrLmMtNjk4LVxcdFxcdGlmIChJU19FUlIoYWRkcikpIHtcXG4tLVxcbmRyaXZlcnMveGVuL3VucG9wdWxhdGVkLWFsbG9jLmM9Mzc9c3RhdGljIGludCBmaWxsX2xpc3QodW5zaWduZWQgaW50IG5yX3BhZ2VzKVxcbi0tXFxuZHJpdmVycy94ZW4vdW5wb3B1bGF0ZWQtYWxsb2MuYy0xMjMtXFxuZHJpdmVycy94ZW4vdW5wb3B1bGF0ZWQtYWxsb2MuYzoxMjQ6XFx0dmFkZHIgPSBtZW1yZW1hcF9wYWdlcyhwZ21hcCwgTlVNQV9OT19OT0RFKTtcXG5kcml2ZXJzL3hlbi91bnBvcHVsYXRlZC1hbGxvYy5jLTEyNS1cXHRpZiAoSVNfRVJSKHZhZGRyKSkge1xcbi0tXFxuZnMvZnVzZS92aXJ0aW9fZnMuYz0xMDc2PXN0YXRpYyBpbnQgdmlydGlvX2ZzX3NldHVwX2RheChzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldiwgc3RydWN0IHZpcnRpb19mcyAqZnMpXFxuLS1cXG5mcy9mdXNlL3ZpcnRpb19mcy5jLTExMTYtXFx0LyogSWRlYWxseSB3ZSB3b3VsZCBkaXJlY3RseSB1c2UgdGhlIFBDSSBCQVIgcmVzb3VyY2UgYnV0XFxuZnMvZnVzZS92aXJ0aW9fZnMuYzoxMTE3OlxcdCAqIGRldm1fbWVtcmVtYXBfcGFnZXMoKSB3YW50cyBpdHMgb3duIGNvcHkgaW4gcGdtYXAuICBTb1xcbmZzL2Z1c2UvdmlydGlvX2ZzLmMtMTExOC1cXHQgKiBpbml0aWFsaXplIGEgc3RydWN0IHJlc291cmNlIGZyb20gc2NyYXRjaCAob25seSB0aGUgc3RhcnRcXG4tLVxcbmZzL2Z1c2UvdmlydGlvX2ZzLmMtMTEyNi1cXG5mcy9mdXNlL3ZpcnRpb19mcy5jOjExMjc6XFx0ZnMtXFx1MDAzZXdpbmRvd19rYWRkciA9IGRldm1fbWVtcmVtYXBfcGFnZXMoXFx1MDAyNnZkZXYtXFx1MDAzZWRldiwgcGdtYXApO1xcbmZzL2Z1c2UvdmlydGlvX2ZzLmMtMTEyOC1cXHRpZiAoSVNfRVJSKGZzLVxcdTAwM2V3aW5kb3dfa2FkZHIpKVxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oPTc3PXN0cnVjdCBkZXZfcGFnZW1hcF9vcHMge1xcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oLTExNS0gKiBAYWx0bWFwOiBwcmUtYWxsb2NhdGVkL3Jlc2VydmVkIG1lbW9yeSBmb3Igdm1lbW1hcCBhbGxvY2F0aW9uc1xcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaDoxMTY6ICogQHJlZjogcmVmZXJlbmNlIGNvdW50IHRoYXQgcGlucyB0aGUgZGV2bV9tZW1yZW1hcF9wYWdlcygpIG1hcHBpbmdcXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmgtMTE3LSAqIEBkb25lOiBjb21wbGV0aW9uIGZvciBAcmVmXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmg9MjI3PXZvaWQgem9uZV9kZXZpY2VfcGFnZV9pbml0KHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwLFxcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaC0yMjgtXFx0XFx0XFx0ICAgdW5zaWduZWQgaW50IG9yZGVyKTtcXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmg6MjI5OnZvaWQgKm1lbXJlbWFwX3BhZ2VzKHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXAsIGludCBuaWQpO1xcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaC0yMzAtdm9pZCBtZW11bm1hcF9wYWdlcyhzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwKTtcXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmg6MjMxOnZvaWQgKmRldm1fbWVtcmVtYXBfcGFnZXMoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwKTtcXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmgtMjMyLXZvaWQgZGV2bV9tZW11bm1hcF9wYWdlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXApO1xcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oPTI0Nz1zdGF0aWMgaW5saW5lIHZvaWQgem9uZV9kZXZpY2VfcHJpdmF0ZV9zcGxpdF9jYihzdHJ1Y3QgZm9saW8gKm9yaWdpbmFsX2ZvbGlvLFxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oLTI2NC0jZWxzZVxcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaDoyNjU6c3RhdGljIGlubGluZSB2b2lkICpkZXZtX21lbXJlbWFwX3BhZ2VzKHN0cnVjdCBkZXZpY2UgKmRldixcXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmgtMjY2LVxcdFxcdHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXApXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmgtMjY4LVxcdC8qXFxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oOjI2OTpcXHQgKiBGYWlsIGF0dGVtcHRzIHRvIGNhbGwgZGV2bV9tZW1yZW1hcF9wYWdlcygpIHdpdGhvdXRcXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmgtMjcwLVxcdCAqIFpPTkVfREVWSUNFIHN1cHBvcnQgZW5hYmxlZCwgdGhpcyByZXF1aXJlcyBjYWxsZXJzIHRvIGZhbGxcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaD0yODc9c3RhdGljIGlubGluZSBib29sIHBnbWFwX3Bmbl92YWxpZChzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwLCB1bnNpZ25lZCBsb25nIHBmbilcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaC0yOTEtXFxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oOjI5MjovKiB3aGVuIG1lbXJlbWFwX3BhZ2VzKCkgaXMgZGlzYWJsZWQgYWxsIGFyY2hzIGNhbiByZW1hcCBhIHNpbmdsZSBwYWdlICovXFxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oLTI5My1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbWVtcmVtYXBfY29tcGF0X2FsaWduKHZvaWQpXFxuLS1cXG5saWIvdGVzdF9obW0uYz01NTg9c3RhdGljIGludCBkbWlycm9yX2FsbG9jYXRlX2NodW5rKHN0cnVjdCBkbWlycm9yX2RldmljZSAqbWRldmljZSxcXG4tLVxcbmxpYi90ZXN0X2htbS5jLTYxNS1cXHR9XFxubGliL3Rlc3RfaG1tLmM6NjE2OlxcdHB0ciA9IG1lbXJlbWFwX3BhZ2VzKFxcdTAwMjZkZXZtZW0tXFx1MDAzZXBhZ2VtYXAsIG51bWFfbm9kZV9pZCgpKTtcXG5saWIvdGVzdF9obW0uYy02MTctXFx0aWYgKElTX0VSUl9PUl9OVUxMKHB0cikpIHtcXG4tLVxcbm1tL21lbXJlbWFwLmM9MTc9c3RhdGljIERFRklORV9YQVJSQVkocGdtYXBfYXJyYXkpO1xcbi0tXFxubW0vbWVtcmVtYXAuYy0xOS0vKlxcbm1tL21lbXJlbWFwLmM6MjA6ICogVGhlIG1lbXJlbWFwKCkgYW5kIG1lbXJlbWFwX3BhZ2VzKCkgaW50ZXJmYWNlcyBhcmUgYWx0ZXJuYXRlbHkgdXNlZFxcbm1tL21lbXJlbWFwLmMtMjEtICogdG8gbWFwIHBlcnNpc3RlbnQgbWVtb3J5IG5hbWVzcGFjZXMuIFRoZXNlIGludGVyZmFjZXMgcGxhY2UgZGlmZmVyZW50XFxubW0vbWVtcmVtYXAuYy0yMi0gKiBjb25zdHJhaW50cyBvbiB0aGUgYWxpZ25tZW50IGFuZCBzaXplIG9mIHRoZSBtYXBwaW5nIChuYW1lc3BhY2UpLlxcbm1tL21lbXJlbWFwLmM6MjM6ICogbWVtcmVtYXAoKSBjYW4gbWFwIGluZGl2aWR1YWwgUEFHRV9TSVpFIHBhZ2VzLiBtZW1yZW1hcF9wYWdlcygpIGNhblxcbm1tL21lbXJlbWFwLmMtMjQtICogb25seSBtYXAgc3Vic2VjdGlvbnMgKDJNQiksIGFuZCBhdCBsZWFzdCBvbmUgYXJjaGl0ZWN0dXJlIChQb3dlclBDKVxcbm1tL21lbXJlbWFwLmM6MjU6ICogdGhlIG1pbmltdW0gbWFwcGluZyBncmFudWxhcml0eSBvZiBtZW1yZW1hcF9wYWdlcygpIGlzIDE2TUIuXFxubW0vbWVtcmVtYXAuYy0yNi0gKlxcbi0tXFxubW0vbWVtcmVtYXAuYz0xMzA9RVhQT1JUX1NZTUJPTF9HUEwobWVtdW5tYXBfcGFnZXMpO1xcbm1tL21lbXJlbWFwLmMtMTMxLVxcbm1tL21lbXJlbWFwLmM6MTMyOnN0YXRpYyB2b2lkIGRldm1fbWVtcmVtYXBfcGFnZXNfcmVsZWFzZSh2b2lkICpkYXRhKVxcbm1tL21lbXJlbWFwLmMtMTMzLXtcXG4tLVxcbm1tL21lbXJlbWFwLmM9MTQ0PXN0YXRpYyBpbnQgcGFnZW1hcF9yYW5nZShzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwLCBzdHJ1Y3QgbWhwX3BhcmFtcyAqcGFyYW1zLFxcbi0tXFxubW0vbWVtcmVtYXAuYy0yNjEtLypcXG5tbS9tZW1yZW1hcC5jOjI2MjogKiBOb3QgZGV2aWNlIG1hbmFnZWQgdmVyc2lvbiBvZiBkZXZtX21lbXJlbWFwX3BhZ2VzLCB1bmRvbmUgYnlcXG5tbS9tZW1yZW1hcC5jOjI2MzogKiBtZW11bm1hcF9wYWdlcygpLiAgUGxlYXNlIHVzZSBkZXZtX21lbXJlbWFwX3BhZ2VzIGlmIHlvdSBoYXZlIGEgc3RydWN0XFxubW0vbWVtcmVtYXAuYy0yNjQtICogZGV2aWNlIGF2YWlsYWJsZS5cXG5tbS9tZW1yZW1hcC5jLTI2NS0gKi9cXG5tbS9tZW1yZW1hcC5jOjI2Njp2b2lkICptZW1yZW1hcF9wYWdlcyhzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwLCBpbnQgbmlkKVxcbm1tL21lbXJlbWFwLmMtMjY3LXtcXG4tLVxcbm1tL21lbXJlbWFwLmMtMzUxLX1cXG5tbS9tZW1yZW1hcC5jOjM1MjpFWFBPUlRfU1lNQk9MX0dQTChtZW1yZW1hcF9wYWdlcyk7XFxubW0vbWVtcmVtYXAuYy0zNTMtXFxubW0vbWVtcmVtYXAuYy0zNTQtLyoqXFxubW0vbWVtcmVtYXAuYzozNTU6ICogZGV2bV9tZW1yZW1hcF9wYWdlcyAtIHJlbWFwIGFuZCBwcm92aWRlIG1lbW1hcCBiYWNraW5nIGZvciB0aGUgZ2l2ZW4gcmVzb3VyY2VcXG5tbS9tZW1yZW1hcC5jLTM1Ni0gKiBAZGV2OiBob3N0aW5nIGRldmljZSBmb3IgQHJlc1xcbi0tXFxubW0vbWVtcmVtYXAuYy0zNjctICogICAgJ2xpdmUnIG9uIGVudHJ5IGFuZCB3aWxsIGJlIGtpbGxlZCBhbmQgcmVhcGVkIGF0XFxubW0vbWVtcmVtYXAuYzozNjg6ICogICAgZGV2bV9tZW1yZW1hcF9wYWdlc19yZWxlYXNlKCkgdGltZSwgb3IgaWYgdGhpcyByb3V0aW5lIGZhaWxzLlxcbm1tL21lbXJlbWFwLmMtMzY5LSAqXFxuLS1cXG5tbS9tZW1yZW1hcC5jLTM3My0gKi9cXG5tbS9tZW1yZW1hcC5jOjM3NDp2b2lkICpkZXZtX21lbXJlbWFwX3BhZ2VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcClcXG5tbS9tZW1yZW1hcC5jLTM3NS17XFxuLS1cXG5tbS9tZW1yZW1hcC5jLTM3OC1cXG5tbS9tZW1yZW1hcC5jOjM3OTpcXHRyZXQgPSBtZW1yZW1hcF9wYWdlcyhwZ21hcCwgZGV2X3RvX25vZGUoZGV2KSk7XFxubW0vbWVtcmVtYXAuYy0zODAtXFx0aWYgKElTX0VSUihyZXQpKVxcbi0tXFxubW0vbWVtcmVtYXAuYy0zODItXFxubW0vbWVtcmVtYXAuYzozODM6XFx0ZXJyb3IgPSBkZXZtX2FkZF9hY3Rpb25fb3JfcmVzZXQoZGV2LCBkZXZtX21lbXJlbWFwX3BhZ2VzX3JlbGVhc2UsXFxubW0vbWVtcmVtYXAuYy0zODQtXFx0XFx0XFx0cGdtYXApO1xcbi0tXFxubW0vbWVtcmVtYXAuYy0zODgtfVxcbm1tL21lbXJlbWFwLmM6Mzg5OkVYUE9SVF9TWU1CT0xfR1BMKGRldm1fbWVtcmVtYXBfcGFnZXMpO1xcbm1tL21lbXJlbWFwLmMtMzkwLVxcbm1tL21lbXJlbWFwLmM9MzkxPXZvaWQgZGV2bV9tZW11bm1hcF9wYWdlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXApXFxubW0vbWVtcmVtYXAuYy0zOTIte1xcbm1tL21lbXJlbWFwLmM6MzkzOlxcdGRldm1fcmVsZWFzZV9hY3Rpb24oZGV2LCBkZXZtX21lbXJlbWFwX3BhZ2VzX3JlbGVhc2UsIHBnbWFwKTtcXG5tbS9tZW1yZW1hcC5jLTM5NC19XFxuLS1cXG5tbS9zcGFyc2Utdm1lbW1hcC5jPTQwMj1pbnQgX19tZW1pbml0IHZtZW1tYXBfcG9wdWxhdGVfaHVnZXBhZ2VzKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbi0tXFxubW0vc3BhcnNlLXZtZW1tYXAuYy00NTktICpcXG5tbS9zcGFyc2Utdm1lbW1hcC5jOjQ2MDogKiBOb3RlIHRoYXQgbWVtcmVtYXBfcGFnZXMoKSByZXNldHMgQG5yX3JhbmdlIHZhbHVlIGFuZCB3aWxsIGluY3JlbWVudFxcbm1tL3NwYXJzZS12bWVtbWFwLmMtNDYxLSAqIGl0IGFmdGVyIGVhY2ggcmFuZ2Ugc3VjY2Vzc2Z1bCBvbmxpbmluZy4gVGh1cyB0aGUgdmFsdWUgb3IgQG5yX3JhbmdlXFxuLS1cXG50b29scy90ZXN0aW5nL252ZGltbS9LYnVpbGQ9MTM9bGRmbGFncy15ICs9IC0td3JhcD1fX3JlbGVhc2VfcmVnaW9uXFxudG9vbHMvdGVzdGluZy9udmRpbW0vS2J1aWxkOjE0OmxkZmxhZ3MteSArPSAtLXdyYXA9ZGV2bV9tZW1yZW1hcF9wYWdlc1xcbnRvb2xzL3Rlc3RpbmcvbnZkaW1tL0tidWlsZC0xNS1sZGZsYWdzLXkgKz0gLS13cmFwPWluc2VydF9yZXNvdXJjZVxcbi0tXFxudG9vbHMvdGVzdGluZy9udmRpbW0vdGVzdC9pb21hcC5jPTEwOD1zdGF0aWMgdm9pZCBkZXZfcGFnZW1hcF9wZXJjcHVfcmVsZWFzZShzdHJ1Y3QgcGVyY3B1X3JlZiAqcmVmKVxcbi0tXFxudG9vbHMvdGVzdGluZy9udmRpbW0vdGVzdC9pb21hcC5jLTExNC1cXG50b29scy90ZXN0aW5nL252ZGltbS90ZXN0L2lvbWFwLmM6MTE1OnZvaWQgKl9fd3JhcF9kZXZtX21lbXJlbWFwX3BhZ2VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcClcXG50b29scy90ZXN0aW5nL252ZGltbS90ZXN0L2lvbWFwLmMtMTE2LXtcXG4tLVxcbnRvb2xzL3Rlc3RpbmcvbnZkaW1tL3Rlc3QvaW9tYXAuYy0xMjEtXFx0aWYgKCFuZml0X3JlcylcXG50b29scy90ZXN0aW5nL252ZGltbS90ZXN0L2lvbWFwLmM6MTIyOlxcdFxcdHJldHVybiBkZXZtX21lbXJlbWFwX3BhZ2VzKGRldiwgcGdtYXApO1xcbnRvb2xzL3Rlc3RpbmcvbnZkaW1tL3Rlc3QvaW9tYXAuYy0xMjMtXFxuLS1cXG50b29scy90ZXN0aW5nL252ZGltbS90ZXN0L2lvbWFwLmMtMTM0LX1cXG50b29scy90ZXN0aW5nL252ZGltbS90ZXN0L2lvbWFwLmM6MTM1OkVYUE9SVF9TWU1CT0xfR1BMKF9fd3JhcF9kZXZtX21lbXJlbWFwX3BhZ2VzKTtcXG50b29scy90ZXN0aW5nL252ZGltbS90ZXN0L2lvbWFwLmMtMTM2LVxcbi0tXFxudG9vbHMvdGVzdGluZy9udmRpbW0vdGVzdC9uZml0X3Rlc3QuaD0yMTI9dm9pZCAqX193cmFwX2Rldm1fbWVtcmVtYXAoc3RydWN0IGRldmljZSAqZGV2LCByZXNvdXJjZV9zaXplX3Qgb2Zmc2V0LFxcbnRvb2xzL3Rlc3RpbmcvbnZkaW1tL3Rlc3QvbmZpdF90ZXN0LmgtMjEzLVxcdFxcdHNpemVfdCBzaXplLCB1bnNpZ25lZCBsb25nIGZsYWdzKTtcXG50b29scy90ZXN0aW5nL252ZGltbS90ZXN0L25maXRfdGVzdC5oOjIxNDp2b2lkICpfX3dyYXBfZGV2bV9tZW1yZW1hcF9wYWdlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXApO1xcbnRvb2xzL3Rlc3RpbmcvbnZkaW1tL3Rlc3QvbmZpdF90ZXN0LmgtMjE1LXZvaWQgKl9fd3JhcF9tZW1yZW1hcChyZXNvdXJjZV9zaXplX3Qgb2Zmc2V0LCBzaXplX3Qgc2l6ZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMDc6NDA6MzMuNTc5NTE4MTg1WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTYzMzczNjk2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIG1lbXJlbWFwX3BhZ2VzIFBhdGggYW5kIE9wdGltaXphdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSXQgbG9va3MgbGlrZSBgbWVtcmVtYXBfcGFnZXNgIGlzIGEga2V5IGZ1bmN0aW9uLCBjYWxsZWQgaW5kaXJlY3RseSBieSBgZGV2bV9tZW1yZW1hcF9wYWdlc2AuIEkgc2VlIHRoaXMgaXMgdXNlZCBpbiBzZXZlcmFsIGltcG9ydGFudCBhcmVhczogdGhlIERBWCBkcml2ZXJzIChgZGV2aWNlLmNgLCBgZnNkZXYuY2ApLCBwZXJzaXN0ZW50IG1lbW9yeSAoYHBtZW0uY2ApLCB0aGUgdmlydGlvLWZzIGltcGxlbWVudGF0aW9uLCBhbmQgcDJwZG1hLiBTcGVjaWZpY2FsbHksIHZpcnRpby1mcyBzdGFuZHMgb3V0IGFzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGluIGEgUUVNVSBlbnZpcm9ubWVudCwgd2hpY2ggaXMgdXNlZnVsIHRvIGtub3cuIFBsdXMsIHRoZXJlJ3MgYGxpYi90ZXN0X2htbS5jYCwgd2hpY2ggdXNlcyBpdC4gYHRlc3RfaG1tYCBzdWdnZXN0cyB3ZSBjYW4gZGlyZWN0bHkgdGVzdCB0aGlzIGZ1bmN0aW9uYWxpdHkuIFRoaXMgbWVhbnMgYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYCBpcyBwb3RlbnRpYWxseSByZWFjaGFibGUgaW4gYSBRRU1VIGNvbnRleHQgYXMgd2VsbC5cblxuTm93LCBsZXQncyByZWZvY3VzIG9uIHRoZSBwYXRjaCBpdHNlbGYuIEl0IG1vZGlmaWVzIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAgYW5kIGBtZW1tYXBfaW5pdF9jb21wb3VuZGAgd2l0aGluIGBtbS9tbV9pbml0LmNgLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIGxvZ2ljIHJlc2lkZXMuIFRoZSBwYXRjaCBhbHNvIGludHJvZHVjZXMgYG1lbWNweV9ub250ZW1wb3JhbGAsIGFkZGluZyBpdCB0byBib3RoIGBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaGAgYW5kIHRoZSBnZW5lcmFsIGBpbmNsdWRlL2xpbnV4L3N0cmluZy5oYCBoZWFkZXJzLlxuXG5NeSBpbW1lZGlhdGUgaW50ZXJwcmV0YXRpb24gaXMgdGhhdCB0aGUgcGF0Y2ggaXMgb3B0aW1pemluZyBob3cgYHN0cnVjdCBwYWdlYCBpcyBpbml0aWFsaXplZCwgc3BlY2lmaWNhbGx5IGZvciBgWk9ORV9ERVZJQ0VgIG1lbW9yeS4gVGhlIHN0cmF0ZWd5IGlzIHRvIGNyZWF0ZSBhIHRlbXBsYXRlIHBhZ2UgYW5kIHRoZW4gZWZmaWNpZW50bHkgY29weSBpdCB0byB0aGUgcmVtYWluaW5nIHBhZ2VzIHVzaW5nIGBtZW1jcHlfbm9udGVtcG9yYWxgLiBUaGlzIGlzIGEgY2xhc3NpYyBvcHRpbWl6YXRpb24gdGVjaG5pcXVlIGZvciBtZW1vcnkgaW5pdGlhbGl6YXRpb24sIGFzc3VtaW5nIHRoZSBpbml0aWFsIHBhZ2UgY29udGFpbnMgdGhlIG5lY2Vzc2FyeSBkZWZhdWx0IHZhbHVlcy4gR2l2ZW4gdGhlIGNvbnRleHQsIHRoaXMgcHJvYmFibHkgYWRkcmVzc2VzIHNvbWUgc3BlY2lmaWMgcGVyZm9ybWFuY2UgYm90dGxlbmVjayBkdXJpbmcgZGV2aWNlIGluaXRpYWxpemF0aW9uLlxuXG5UaW1lIHRvIGRlbHZlIGludG8gdGhlIGNvZGUgY2hhbmdlcyBpbiBgbW0vbW1faW5pdC5jYCBhbmQgY29uZmlybSB0aGVzZSBhc3N1bXB0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQyMDEsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMDc6NDA6MzkuMjEzMjU5MDQ5WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjc5MjkxMzY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9mcm9tX3RlbXBsYXRlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21tX2luaXQuYz0xMDg1PXN0YXRpYyBpbmxpbmUgdm9pZCB6b25lX2RldmljZV9wYWdlX3VwZGF0ZV90ZW1wbGF0ZShzdHJ1Y3QgcGFnZSAqdGVtcGxhdGUsXFxuLS1cXG5tbS9tbV9pbml0LmMtMTA5NC1cXG5tbS9tbV9pbml0LmM6MTA5NTpzdGF0aWMgdm9pZCB6b25lX2RldmljZV9wYWdlX2luaXRfZnJvbV90ZW1wbGF0ZShzdHJ1Y3QgcGFnZSAqcGFnZSxcXG5tbS9tbV9pbml0LmMtMTA5Ni1cXHRcXHR1bnNpZ25lZCBsb25nIHBmbiwgc3RydWN0IHBhZ2UgKnRlbXBsYXRlKVxcbi0tXFxubW0vbW1faW5pdC5jPTExMzE9c3RhdGljIHZvaWQgX19yZWYgbWVtbWFwX2luaXRfY29tcG91bmQoc3RydWN0IHBhZ2UgKmhlYWQsXFxuLS1cXG5tbS9tbV9pbml0LmMtMTE2NC1cXHRcXHR9IGVsc2Uge1xcbm1tL21tX2luaXQuYzoxMTY1OlxcdFxcdFxcdHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9mcm9tX3RlbXBsYXRlKHBhZ2UsIHBmbixcXG5tbS9tbV9pbml0LmMtMTE2Ni1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNnRlbXBsYXRlKTtcXG4tLVxcbm1tL21tX2luaXQuYz0xMTcyPXZvaWQgX19yZWYgbWVtbWFwX2luaXRfem9uZV9kZXZpY2Uoc3RydWN0IHpvbmUgKnpvbmUsXFxuLS1cXG5tbS9tbV9pbml0LmMtMTIxNC1cXHRcXHR9IGVsc2Uge1xcbm1tL21tX2luaXQuYzoxMjE1OlxcdFxcdFxcdHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9mcm9tX3RlbXBsYXRlKHBhZ2UsIHBmbixcXG5tbS9tbV9pbml0LmMtMTIxNi1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNnRlbXBsYXRlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMDc6NDA6NDAuODkyNTU2Njc3WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyMjEwNjAxOTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBab25lIERldmljZSBJbml0aWFsaXphdGlvbiBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhlIHpvbmUgZGV2aWNlIGluaXRpYWxpemF0aW9uIGNvZGUsIGFuZCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBrZXkgZnVuY3Rpb25zIGhlcmUuIExldCdzIHNlZS4uLiB0aGUgb25lcyB0aGF0IGltbWVkaWF0ZWx5IGp1bXAgb3V0IGFyZTogYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYCwgYG1lbW1hcF9pbml0X2NvbXBvdW5kYCwgYHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9mcm9tX3RlbXBsYXRlYCwgYHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9zbG93YCwgYHpvbmVfZGV2aWNlX3RhaWxfcGFnZV9pbml0YCwgYW5kIGB6b25lX2RldmljZV9wYWdlX3VwZGF0ZV90ZW1wbGF0ZWAuIFJpZ2h0LCB0aGF0IHNlZW1zIHRvIGJlIHRoZSBjb3JlIHNldCBJIG5lZWQgdG8gdW5kZXJzdGFuZC5cblxuV2FpdCBhIHNlY29uZCwgZ2xhbmNpbmcgYmFjay4uLiBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgIGxvb2tzIGxpa2UgdGhlIHByaW1hcnkgZW50cnkgcG9pbnQuIFRoYXQgbWFrZXMgc2Vuc2UuIE5vdywgbGV0J3MgZmlndXJlIG91dCB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIFdoYXQgZmxhZ3Mgb3IgZmVhdHVyZXMgbmVlZCB0byBiZSBlbmFibGVkIGZvciB0aGlzIHRvIGV2ZW4gcnVuPyBJJ2xsIGJldCBgQ09ORklHX1pPTkVfREVWSUNFYCBpcyB0aGUga2V5LiBUaW1lIHRvIGNyYWNrIG9wZW4gYG1tL0tjb25maWdgIGFuZCBkb3VibGUtY2hlY2suIEdvdHRhIGNvbmZpcm0gdGhhdCBiZWZvcmUgSSBnbyBhbnkgZnVydGhlciBkb3duIHRoZSByYWJiaXQgaG9sZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUyNDAsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMDc6NDA6NDUuMTEzNjIwMzRaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MDc4OTY0NDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFpPTkVfREVWSUNFXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9MTIzMT1jb25maWcgWk9ORV9ETUEzMlxcbi0tXFxubW0vS2NvbmZpZy0xMjM1LVxcbm1tL0tjb25maWc6MTIzNjpjb25maWcgWk9ORV9ERVZJQ0VcXG5tbS9LY29uZmlnLTEyMzctXFx0Ym9vbCBcXFwiRGV2aWNlIG1lbW9yeSAocG1lbSwgSE1NLCBldGMuLi4pIGhvdHBsdWcgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMDc6NDA6NDYuNzIxNTIxNjE4WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwNTAzOTIzNDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIERlcGVuZGVuY2llcyBmb3IgWk9ORV9ERVZJQ0UqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYXJjaGl0ZWN0dXJhbCBpbXBsaWNhdGlvbnMgb2YgYFpPTkVfREVWSUNFYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiV2hhdCBhcmUgdGhlIGRlcGVuZGVuY2llcyBoZXJlP1wiIEkgbmVlZCB0byBkaWcgZGVlcGVyIGFuZCBzZWUgd2hhdCBwaWVjZXMgb2YgdGhlIHN5c3RlbSByZWx5IG9uIHRoaXMuIEFyZSB3ZSB0YWxraW5nIGhhcmR3YXJlIGFic3RyYWN0aW9uPyBJcyBpdCByZWxhdGVkIHRvIHRoZSBvdmVyYWxsIHJlc291cmNlIG1hbmFnZW1lbnQgd2l0aGluIHRoZSB6b25lPyBPciwgaXMgaXQgcGVyaGFwcyBhIGxvZ2ljYWwgY29uc3RydWN0PyBLbm93aW5nIHRoZSBkZXBlbmRlbmNpZXMgaXMgY3J1Y2lhbCB0byBhc3Nlc3MgdGhlIHBvdGVudGlhbCBpbXBhY3Qgb2YgYW55IGNoYW5nZXMgb3IgdG8gdHJvdWJsZXNob290IHVuZXhwZWN0ZWQgYmVoYXZpb3IgZG93biB0aGUgbGluZS4gSXQgcmVhbGx5IGJvaWxzIGRvd24gdG86IFwiV2hhdCBhcmUgdGhlICpleHRlcm5hbCogc3lzdGVtcyBvciBmdW5jdGlvbmFsaXRpZXMgd2hpY2ggaGF2ZSBhIHRpZ2h0IGNvdXBsaW5nIHdpdGggYFpPTkVfREVWSUNFYD9cIiBJIG5lZWQgdG8gbWFwIGl0IGFsbCBvdXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NzA1LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMDc6NDA6NDkuNzcxOTE2NzQ3WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjA0MDYwMjkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlcGVuZHMgb24uKlpPTkVfREVWSUNFXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvZ3B1L2RybS94ZS9LY29uZmlnPTc5PWNvbmZpZyBEUk1fWEVfR1BVU1ZNXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUvS2NvbmZpZy04Mi1cXHRkZXBlbmRzIG9uICFVTUxcXG5kcml2ZXJzL2dwdS9kcm0veGUvS2NvbmZpZzo4MzpcXHRkZXBlbmRzIG9uIFpPTkVfREVWSUNFXFxuZHJpdmVycy9ncHUvZHJtL3hlL0tjb25maWctODQtXFx0ZGVmYXVsdCB5XFxuLS1cXG5kcml2ZXJzL252ZGltbS9LY29uZmlnPTYyPWNvbmZpZyBOVkRJTU1fUEZOXFxuLS1cXG5kcml2ZXJzL252ZGltbS9LY29uZmlnLTY0LVxcdGRlZmF1bHQgTElCTlZESU1NXFxuZHJpdmVycy9udmRpbW0vS2NvbmZpZzo2NTpcXHRkZXBlbmRzIG9uIFpPTkVfREVWSUNFXFxuZHJpdmVycy9udmRpbW0vS2NvbmZpZy02Ni1cXHRzZWxlY3QgTkRfQ0xBSU1cXG4tLVxcbmRyaXZlcnMvcGNpL0tjb25maWc9MjA2PWNvbmZpZyBQQ0lfUDJQRE1BXFxuZHJpdmVycy9wY2kvS2NvbmZpZy0yMDctXFx0Ym9vbCBcXFwiUENJIHBlZXItdG8tcGVlciB0cmFuc2ZlciBzdXBwb3J0XFxcIlxcbmRyaXZlcnMvcGNpL0tjb25maWc6MjA4OlxcdGRlcGVuZHMgb24gWk9ORV9ERVZJQ0VcXG5kcml2ZXJzL3BjaS9LY29uZmlnLTIwOS1cXHQjXFxuLS1cXG5kcml2ZXJzL3MzOTAvYmxvY2svS2NvbmZpZz01PWNvbmZpZyBEQ1NTQkxLXFxuLS1cXG5kcml2ZXJzL3MzOTAvYmxvY2svS2NvbmZpZy03LVxcdHByb21wdCBcXFwiRENTU0JMSyBzdXBwb3J0XFxcIlxcbmRyaXZlcnMvczM5MC9ibG9jay9LY29uZmlnOjg6XFx0ZGVwZW5kcyBvbiBTMzkwIFxcdTAwMjZcXHUwMDI2IEJMT0NLIFxcdTAwMjZcXHUwMDI2IFpPTkVfREVWSUNFXFxuZHJpdmVycy9zMzkwL2Jsb2NrL0tjb25maWctOS1cXHRzZWxlY3QgRlNfREFYXFxuLS1cXG5kcml2ZXJzL3hlbi9LY29uZmlnPTMzNj1jb25maWcgWEVOX1VOUE9QVUxBVEVEX0FMTE9DXFxuZHJpdmVycy94ZW4vS2NvbmZpZy0zMzctXFx0Ym9vbCBcXFwiVXNlIHVucG9wdWxhdGVkIG1lbW9yeSByYW5nZXMgZm9yIGd1ZXN0IG1hcHBpbmdzXFxcIlxcbmRyaXZlcnMveGVuL0tjb25maWc6MzM4OlxcdGRlcGVuZHMgb24gWk9ORV9ERVZJQ0VcXG5kcml2ZXJzL3hlbi9LY29uZmlnLTMzOS1cXHRkZWZhdWx0IFhFTl9CQUNLRU5EIHx8IFhFTl9HTlRERVYgfHwgWEVOX0RPTTBcXG4tLVxcbmZzL0tjb25maWc9NTg9Y29uZmlnIEZTX0RBWFxcbi0tXFxuZnMvS2NvbmZpZy02MC1cXHRkZXBlbmRzIG9uIE1NVVxcbmZzL0tjb25maWc6NjE6XFx0ZGVwZW5kcyBvbiBaT05FX0RFVklDRVxcbmZzL0tjb25maWctNjItXFx0c2VsZWN0IEZTX0lPTUFQXFxuLS1cXG5mcy9LY29uZmlnPTkwPWNvbmZpZyBGU19EQVhfUE1EXFxuLS1cXG5mcy9LY29uZmlnLTkzLVxcdGRlcGVuZHMgb24gRlNfREFYXFxuZnMvS2NvbmZpZzo5NDpcXHRkZXBlbmRzIG9uIFpPTkVfREVWSUNFXFxuZnMvS2NvbmZpZy05NS1cXHRkZXBlbmRzIG9uIFRSQU5TUEFSRU5UX0hVR0VQQUdFXFxuLS1cXG5tbS9LY29uZmlnPTEyNjc9Y29uZmlnIERFVklDRV9QUklWQVRFXFxubW0vS2NvbmZpZy0xMjY4LVxcdGJvb2wgXFxcIlVuYWRkcmVzc2FibGUgZGV2aWNlIG1lbW9yeSAoR1BVIG1lbW9yeSwgLi4uKVxcXCJcXG5tbS9LY29uZmlnOjEyNjk6XFx0ZGVwZW5kcyBvbiBaT05FX0RFVklDRVxcbm1tL0tjb25maWctMTI3MC1cXHRzZWxlY3QgR0VUX0ZSRUVfUkVHSU9OXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDA3OjQwOjUxLjk3NTk4NjQ3N1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjcxODIzNDU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUuIE15IG1pbmQncyBidXp6aW5nIOKAkyBJJ20gaW4gdGhlIHRoaWNrIG9mIHRoaXMgYW5kIEkgbmVlZCB0byBlbnN1cmUgbXkgdW5kZXJzdGFuZGluZyBpcyByb2NrIHNvbGlkIGJlZm9yZSBJIHByb2NlZWQuXG5cbioqRGVwZW5kZW5jaWVzIENoZWNrOiBEZWVwIERpdmUqKlxuXG5Ib2xkIG9uLCBiZWZvcmUgSSBkaXZlIGFueSBkZWVwZXIsIEkgbmVlZCB0byB0YWtlIGEgc3RlcCBiYWNrIGFuZCBleGFtaW5lIHRoZSBmb3VuZGF0aW9uLiBJdCdzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIG9mIGBaT05FX0RFVklDRWAuIFdoYXQncyB0aGlzIHBhcnRpY3VsYXIgcGllY2UgcmVseWluZyBvbiBhdCBpdHMgbW9zdCBiYXNpYyBsZXZlbD8gV2hhdCBhcmUgdGhlIHVuZGVybHlpbmcgY29tcG9uZW50cyBvciBjb25maWd1cmF0aW9ucyB0aGF0ICppdCogcmVxdWlyZXMgdG8gZnVuY3Rpb24gY29ycmVjdGx5PyBJIG5lZWQgdG8gYnVpbGQgdXAgYSBjbGVhciBtZW50YWwgbWFwIG9mIHdoYXQgKnRoaXMqIGRlcGVuZHMgb24uIE5lZWQgdG8gZmluZCB0aGUga2V5IGRlcGVuZGVuY2llcywgbm90IGp1c3Qgd2hlcmUgaXQgdG91Y2hlcyBvdGhlciBjb2RlLCBidXQgd2hhdCB0aGUgYmVkcm9jayBpcywgYW5kIHdoYXQgdGhlIGRlcGVuZGVuY2llcyBvZiBUSEFUIGFyZS4gT25seSBvbmNlIEkgdHJ1bHkga25vdyBpdHMgZGVwZW5kZW5jaWVzIGNhbiBJIGJlIGNvbmZpZGVudCB0aGF0IEknbSBub3QgbWFraW5nIGFzc3VtcHRpb25zIGFuZCBJIGNhbiBiZWdpbiB0byB1bnJhdmVsIHRoaXMgcGFydGljdWxhciBpc3N1ZS4gR290dGEgY2hhc2UgZG93biBhbGwgdGhlIGJyYW5jaGVzIG9mIHJlbGlhbmNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjU1NywiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDA3OjQwOjU1LjI0NzgxMjcyNFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQyOTM1MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFpPTkVfREVWSUNFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz0xMjMxPWNvbmZpZyBaT05FX0RNQTMyXFxuLS1cXG5tbS9LY29uZmlnLTEyMzUtXFxubW0vS2NvbmZpZzoxMjM2OmNvbmZpZyBaT05FX0RFVklDRVxcbm1tL0tjb25maWctMTIzNy1cXHRib29sIFxcXCJEZXZpY2UgbWVtb3J5IChwbWVtLCBITU0sIGV0Yy4uLikgaG90cGx1ZyBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QwNzo0MDo1NS4yOTIxMTQ3ODNaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE3NDg1Mzc4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTWF6ZSoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJ20gZ29pbmcgdG8ganVtcCBpbnRvIHRoZSBgbW0vS2NvbmZpZ2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJJ20gYWltaW5nIGZvciBhcm91bmQgbGluZSAxMjM2LiBHaXZlbiBteSBmYW1pbGlhcml0eSB3aXRoIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0sIEkgc3VzcGVjdCB0aGF0IHNlY3Rpb24gbWlnaHQgaG9sZCBjbHVlcyBhYm91dCBhIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9uIG9yIHJlbGF0ZWQgZGVwZW5kZW5jaWVzIEkndmUgYmVlbiBjb25zaWRlcmluZy4gSSdtIGV4cGVjdGluZyB0byBmaW5kIGluZm9ybWF0aW9uIHBlcnRhaW5pbmcgdG8gc29tZSBtZW1vcnkgbWFuYWdlbWVudCBmZWF0dXJlIG9yIGEgY29uZmlndXJhdGlvbiBrbm9iIHRoYXQgbWlnaHQgYmUgY3J1Y2lhbCB0byBzb21lIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiBJJ20gd29ya2luZyB0aHJvdWdoLCBvciBwb3NzaWJseSBldmVuIGRlYnVnZ2luZy4gTGV0J3Mgc2VlIHdoYXQgdGhlIEtjb25maWcgaGFzIHRvIHNheSFcblxuXG4iLCJJbnB1dFRva2VucyI6MTY4ODAsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QwNzo0MDo1OC40NjY5NzA2M1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzQ1MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMjMwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMjMwOlxcdFxcbjEyMzE6XFx0Y29uZmlnIFpPTkVfRE1BMzJcXG4xMjMyOlxcdFxcdGJvb2wgXFxcIlN1cHBvcnQgRE1BMzIgem9uZVxcXCIgaWYgQVJDSF9IQVNfWk9ORV9ETUFfU0VUXFxuMTIzMzpcXHRcXHRkZXBlbmRzIG9uICFYODZfMzJcXG4xMjM0OlxcdFxcdGRlZmF1bHQgeSBpZiBBUk02NFxcbjEyMzU6XFx0XFxuMTIzNjpcXHRjb25maWcgWk9ORV9ERVZJQ0VcXG4xMjM3OlxcdFxcdGJvb2wgXFxcIkRldmljZSBtZW1vcnkgKHBtZW0sIEhNTSwgZXRjLi4uKSBob3RwbHVnIHN1cHBvcnRcXFwiXFxuMTIzODpcXHRcXHRkZXBlbmRzIG9uIE1FTU9SWV9IT1RQTFVHXFxuMTIzOTpcXHRcXHRkZXBlbmRzIG9uIE1FTU9SWV9IT1RSRU1PVkVcXG4xMjQwOlxcdFxcdGRlcGVuZHMgb24gU1BBUlNFTUVNX1ZNRU1NQVBcXG4xMjQxOlxcdFxcdHNlbGVjdCBYQVJSQVlfTVVMVElcXG4xMjQyOlxcdFxcbjEyNDM6XFx0XFx0aGVscFxcbjEyNDQ6XFx0XFx0ICBEZXZpY2UgbWVtb3J5IGhvdHBsdWcgc3VwcG9ydCBhbGxvd3MgZm9yIGVzdGFibGlzaGluZyBwbWVtLFxcbjEyNDU6XFx0XFx0ICBvciBvdGhlciBkZXZpY2UgZHJpdmVyIGRpc2NvdmVyZWQgbWVtb3J5IHJlZ2lvbnMsIGluIHRoZVxcbjEyNDY6XFx0XFx0ICBtZW1tYXAuIFRoaXMgYWxsb3dzIHBmbl90b19wYWdlKCkgbG9va3VwcyBvZiBvdGhlcndpc2VcXG4xMjQ3OlxcdFxcdCAgXFxcImRldmljZS1waHlzaWNhbFxcXCIgYWRkcmVzc2VzIHdoaWNoIGlzIG5lZWRlZCBmb3IgREFYLCBQQ0lfUDJQRE1BLCBhbmRcXG4xMjQ4OlxcdFxcdCAgREVWSUNFX1BSSVZBVEUgZmVhdHVyZXMgYW1vbmcgb3RoZXJzLlxcbjEyNDk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDA3OjQwOjU4LjQ2NzE0ODAyWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxMDAyNDIzMjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRW5hYmxpbmcgWm9uZSBEZXZpY2VzIGFuZCBBc3NvY2lhdGVkIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBaT05FX0RFVklDRWAsIGFuZCBpdCdzIGNsZWFyIHRoYXQgaXQncyByZWxpYW50IG9uIGEgZmV3IGtleSBidWlsZGluZyBibG9ja3M6IGBNRU1PUllfSE9UUExVR2AsIGBNRU1PUllfSE9UUkVNT1ZFYCwgYW5kIGBTUEFSU0VNRU1fVk1FTU1BUGAuIE1ha2VzIHNlbnNlIOKAkyB0aGUgd2hvbGUgcG9pbnQgaXMgbWFuYWdpbmcgZGV2aWNlIG1lbW9yeSBkeW5hbWljYWxseS4gQWxyaWdodCwgbGV0J3MgZW5hYmxlIGBaT05FX0RFVklDRWAuIE5vdywgdGhlIG5leHQgbG9naWNhbCBxdWVzdGlvbiBpcywgd2hhdCBjYW4gYWN0dWFsbHkgKnVzZSogaXQ/IFdlIG5lZWQgYSBkcml2ZXIgb3IgZmVhdHVyZSB0aGF0IGludGVncmF0ZXMgd2l0aCBpdCB0byByZWFsbHkgdGVzdCBpdHMgZnVuY3Rpb25hbGl0eS5cblxuVGhpbmtpbmcgdGhyb3VnaCBwb3RlbnRpYWwgY2FuZGlkYXRlcy4uLiBgRlNfREFYYCBpcyBhIHN0cm9uZyBjb250ZW5kZXIg4oCTIERpcmVjdCBBY2Nlc3Mgc3RvcmFnZSBzb3VuZHMgbGlrZSBpdCB3b3VsZCBwbGF5IG5pY2VseS4gVGhlbiB0aGVyZSdzIGBQQ0lfUDJQRE1BYCwgdGhhdCBjb3VsZCBiZSByZWxhdGVkIHRvIG1lbW9yeSBtYXBwZWQgaW50byB0aGUgUENJIHNwYWNlLCBgREVWSUNFX1BSSVZBVEVgLCB3aGljaCBpcyBhIGNvbW1vbiBob29rLCBvciBgTlZESU1NX1BGTmAuIFRob3NlIGFsbCBoYXZlIGEgZ29vZCBjaGFuY2Ugb2YgYmVpbmcgcmVsZXZhbnQuIEJlZm9yZSBJIGdldCB0b28gZGVlcCBpbnRvIGFueSBvZiB0aG9zZSwgbGV0J3MganVzdCBtYWtlIHN1cmUgdGhlcmUncyBhbiBlYXN5IHRyaWdnZXIgdG8gdGVzdCB0aGlzIG9uIHRoZSBsb3dlciBsZXZlbCwgYW5kIGZvciB0aGF0IEknbGwgbmVlZCB0byBjaGVjayBgVEVTVF9ITU1gIGluIGBsaWIvS2NvbmZpZy5kZWJ1Z2AuIEl0J3MgbGlrZWx5IHRoYXQgYSBzbWFsbCBkZWJ1Z2dpbmcgdGVzdCBpcyBhdmFpbGFibGUgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3Mzk0LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMDc6NDE6MDIuNTY3Mzk0ODQ1WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjQxNDA5MTE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBURVNUX0hNTVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJsaWIvS2NvbmZpZy5kZWJ1Zz0zMzQ2PWNvbmZpZyBURVNUX01FTUlOSVRcXG4tLVxcbmxpYi9LY29uZmlnLmRlYnVnLTMzNTMtXFxubGliL0tjb25maWcuZGVidWc6MzM1NDpjb25maWcgVEVTVF9ITU1cXG5saWIvS2NvbmZpZy5kZWJ1Zy0zMzU1LVxcdHRyaXN0YXRlIFxcXCJUZXN0IEhNTSAoSGV0ZXJvZ2VuZW91cyBNZW1vcnkgTWFuYWdlbWVudClcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDA3OjQxOjA0LjIwODgxMDA2M1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNzcxMzU5NDQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gRGVidWdnaW5nIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgc29tZXRoaW5nIHNwZWNpZmljIGFib3V0IHRoZSBkZWJ1Z2dpbmcgY29uZmlndXJhdGlvbiBmb3IgdGhpcyBwcm9qZWN0LiBNeSBpbnR1aXRpb24gdGVsbHMgbWUgdGhhdCB0aGUgcmVsZXZhbnQgc2V0dGluZ3MgYXJlIGxpa2VseSBsb2NhdGVkIHdpdGhpbiB0aGUgYEtjb25maWcuZGVidWdgIGZpbGUsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAzMzU0LiBJJ2xsIHRha2UgYSBsb29rIGF0IHRoYXQgZmlsZSBsb2NhdGlvbiBkaXJlY3RseS4gTGV0J3Mgc2VlIHdoYXQgc2VjcmV0cyBpdCBob2xkcy4gSG9wZWZ1bGx5LCB0aGlzIHNlY3Rpb24gd2lsbCBzaGVkIHNvbWUgbGlnaHQgb24gdGhlIGNvbmZpZ3VyYXRpb24gSSdtIHRyeWluZyB0byBkZWNpcGhlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc4ODEsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QwNzo0MTowNi45ODAxNzM4MTVaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA0NjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImxpYi9LY29uZmlnLmRlYnVnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMzNTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjMzNTA6XFx0XFx0ICBUaGlzIGNhbiBiZSB1c2VmdWwgdG8gdGVzdCBpbml0X29uX2FsbG9jIGFuZCBpbml0X29uX2ZyZWUgZmVhdHVyZXMuXFxuMzM1MTpcXHRcXG4zMzUyOlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4zMzUzOlxcdFxcbjMzNTQ6XFx0Y29uZmlnIFRFU1RfSE1NXFxuMzM1NTpcXHRcXHR0cmlzdGF0ZSBcXFwiVGVzdCBITU0gKEhldGVyb2dlbmVvdXMgTWVtb3J5IE1hbmFnZW1lbnQpXFxcIlxcbjMzNTY6XFx0XFx0ZGVwZW5kcyBvbiBUUkFOU1BBUkVOVF9IVUdFUEFHRVxcbjMzNTc6XFx0XFx0ZGVwZW5kcyBvbiBERVZJQ0VfUFJJVkFURVxcbjMzNTg6XFx0XFx0c2VsZWN0IEhNTV9NSVJST1JcXG4zMzU5OlxcdFxcdHNlbGVjdCBNTVVfTk9USUZJRVJcXG4zMzYwOlxcdFxcdGhlbHBcXG4zMzYxOlxcdFxcdCAgVGhpcyBpcyBhIHBzZXVkbyBkZXZpY2UgZHJpdmVyIHNvbGVseSBmb3IgdGVzdGluZyBITU0uXFxuMzM2MjpcXHRcXHQgIFNheSBNIGhlcmUgaWYgeW91IHdhbnQgdG8gYnVpbGQgdGhlIEhNTSB0ZXN0IG1vZHVsZS5cXG4zMzYzOlxcdFxcdCAgRG9pbmcgc28gd2lsbCBhbGxvdyB5b3UgdG8gcnVuIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3Qvdm0vaG1tLXRlc3RzLlxcbjMzNjQ6XFx0XFxuMzM2NTpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuMzM2NjpcXHRcXG4zMzY3OlxcdGNvbmZpZyBURVNUX0ZSRUVfUEFHRVNcXG4zMzY4OlxcdFxcdHRyaXN0YXRlIFxcXCJUZXN0IGZyZWVpbmcgcGFnZXNcXFwiXFxuMzM2OTpcXHRcXHRoZWxwXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDA3OjQxOjA2Ljk4MDM4MDU4NloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDgxNjcwMTM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IFJlYXNvbmluZyBvbiB0aGUgVEVTVF9ITU0gRGVwZW5kZW5jeSBDaGFpbioqXG5cbk9rYXksIGhlcmUncyBob3cgSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcy4gYFRFU1RfSE1NYCBoYXMgYSBkaXJlY3QgZGVwZW5kZW5jeSBvbiBgREVWSUNFX1BSSVZBVEVgLiBgREVWSUNFX1BSSVZBVEVgLCBpbiB0dXJuLCByZWxpZXMgb24gYFpPTkVfREVWSUNFYC4gU28sIHdlICpjb3VsZCoganVzdCBlbmFibGUgYWxsIHRocmVlOiBgVEVTVF9ITU1gLCBgREVWSUNFX1BSSVZBVEVgLCBhbmQgYFpPTkVfREVWSUNFYC4gVGhhdCdzIHRoZSBzdHJhaWdodGZvcndhcmQgYXBwcm9hY2guXG5cbkJ1dCwgaG9sZCBvbi4uLiB0aGUgcmVhbCBxdWVzdGlvbiBpcyB3aGV0aGVyIGBURVNUX0hNTWAgaXMgYWN0dWFsbHkgKmV4cGxvaXRhYmxlKiB2aWEgc3l6a2FsbGVyLiBEb2VzIHN5emthbGxlciBoYXZlIGEgcGF0aCB0byByZWFjaCBpdD8gU3l6a2FsbGVyIGNhbiBsb2FkIG1vZHVsZXMgYW5kIGl0IGNhbiBpbnRlcmFjdCB3aXRoIGAvZGV2L2htbV9kbWlycm9yKmAgZGV2aWNlcyBpZiB0aGV5J3JlIGJ1aWx0LWluLiBUaGF0J3MgdGhlIGNydWNpYWwgbGluay4gU28sIEkgbmVlZCB0byBjaGVjayBpZiBgVEVTVF9ITU1gIGFjdHVhbGx5ICpjcmVhdGVzKiBhIGRldmljZSBub2RlLiBUaGF0J3MgdGhlIGx5bmNocGluLiBUaGF0J3Mgd2hhdCBkZXRlcm1pbmVzIGlmIHN5emthbGxlciBjYW4gcmVhbGlzdGljYWxseSBiZSB1c2VkIHRvIHRlc3QgaXQuIEkgbmVlZCB0byBjb25maXJtIGlmIGl0IGhhcyBhIGRyaXZlciBvciBkZXZpY2UgYXNzb2NpYXRlZCB3aXRoIGl0LCBiZWZvcmUgc3BlbmRpbmcgbW9yZSB0aW1lIG9uIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODM0OSwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDA3OjQxOjExLjA2MjA1NDIzMVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU2MDM0NjM2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJobW1fZG1pcnJvclwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJsaWIvdGVzdF9obW0uYz00MjU9c3RhdGljIGludCBkbWlycm9yX2RvX3JlYWQoc3RydWN0IGRtaXJyb3IgKmRtaXJyb3IsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXFxuLS1cXG5saWIvdGVzdF9obW0uYy00NTAtXFxubGliL3Rlc3RfaG1tLmM6NDUxOnN0YXRpYyBpbnQgZG1pcnJvcl9yZWFkKHN0cnVjdCBkbWlycm9yICpkbWlycm9yLCBzdHJ1Y3QgaG1tX2RtaXJyb3JfY21kICpjbWQpXFxubGliL3Rlc3RfaG1tLmMtNDUyLXtcXG4tLVxcbmxpYi90ZXN0X2htbS5jPTQ5MT1zdGF0aWMgaW50IGRtaXJyb3JfZG9fd3JpdGUoc3RydWN0IGRtaXJyb3IgKmRtaXJyb3IsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXFxuLS1cXG5saWIvdGVzdF9obW0uYy01MTYtXFxubGliL3Rlc3RfaG1tLmM6NTE3OnN0YXRpYyBpbnQgZG1pcnJvcl93cml0ZShzdHJ1Y3QgZG1pcnJvciAqZG1pcnJvciwgc3RydWN0IGhtbV9kbWlycm9yX2NtZCAqY21kKVxcbmxpYi90ZXN0X2htbS5jLTUxOC17XFxuLS1cXG5saWIvdGVzdF9obW0uYz01NTg9c3RhdGljIGludCBkbWlycm9yX2FsbG9jYXRlX2NodW5rKHN0cnVjdCBkbWlycm9yX2RldmljZSAqbWRldmljZSxcXG4tLVxcbmxpYi90ZXN0X2htbS5jLTU3NS1cXHRcXHRyZXMgPSByZXF1ZXN0X2ZyZWVfbWVtX3JlZ2lvbihcXHUwMDI2aW9tZW1fcmVzb3VyY2UsIERFVk1FTV9DSFVOS19TSVpFLFxcbmxpYi90ZXN0X2htbS5jOjU3NjpcXHRcXHRcXHRcXHRcXHQgICAgICBcXFwiaG1tX2RtaXJyb3JcXFwiKTtcXG5saWIvdGVzdF9obW0uYy01NzctXFx0XFx0aWYgKElTX0VSUl9PUl9OVUxMKHJlcykpXFxuLS1cXG5saWIvdGVzdF9obW0uYz05NDc9c3RhdGljIGludCBkbWlycm9yX2V4Y2x1c2l2ZShzdHJ1Y3QgZG1pcnJvciAqZG1pcnJvcixcXG5saWIvdGVzdF9obW0uYzo5NDg6XFx0XFx0XFx0ICAgICBzdHJ1Y3QgaG1tX2RtaXJyb3JfY21kICpjbWQpXFxubGliL3Rlc3RfaG1tLmMtOTQ5LXtcXG4tLVxcbmxpYi90ZXN0X2htbS5jPTExMjA9c3RhdGljIGludCBkbWlycm9yX21pZ3JhdGVfdG9fc3lzdGVtKHN0cnVjdCBkbWlycm9yICpkbWlycm9yLFxcbmxpYi90ZXN0X2htbS5jOjExMjE6XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgaG1tX2RtaXJyb3JfY21kICpjbWQpXFxubGliL3Rlc3RfaG1tLmMtMTEyMi17XFxuLS1cXG5saWIvdGVzdF9obW0uYz0xMTg5PXN0YXRpYyBpbnQgZG1pcnJvcl9taWdyYXRlX3RvX2RldmljZShzdHJ1Y3QgZG1pcnJvciAqZG1pcnJvcixcXG5saWIvdGVzdF9obW0uYzoxMTkwOlxcdFxcdFxcdFxcdHN0cnVjdCBobW1fZG1pcnJvcl9jbWQgKmNtZClcXG5saWIvdGVzdF9obW0uYy0xMTkxLXtcXG4tLVxcbmxpYi90ZXN0X2htbS5jPTE0MDk9c3RhdGljIGludCBkbWlycm9yX3NuYXBzaG90KHN0cnVjdCBkbWlycm9yICpkbWlycm9yLFxcbmxpYi90ZXN0X2htbS5jOjE0MTA6XFx0XFx0XFx0ICAgIHN0cnVjdCBobW1fZG1pcnJvcl9jbWQgKmNtZClcXG5saWIvdGVzdF9obW0uYy0xNDExLXtcXG4tLVxcbmxpYi90ZXN0X2htbS5jPTE1MTM9c3RhdGljIGxvbmcgZG1pcnJvcl9mb3BzX3VubG9ja2VkX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLFxcbi0tXFxubGliL3Rlc3RfaG1tLmMtMTUxNy1cXHR2b2lkIF9fdXNlciAqdWFyZyA9ICh2b2lkIF9fdXNlciAqKWFyZztcXG5saWIvdGVzdF9obW0uYzoxNTE4OlxcdHN0cnVjdCBobW1fZG1pcnJvcl9jbWQgY21kO1xcbmxpYi90ZXN0X2htbS5jLTE1MTktXFx0c3RydWN0IGRtaXJyb3IgKmRtaXJyb3I7XFxuLS1cXG5saWIvdGVzdF9obW0uYz0xNzc5PXN0YXRpYyBpbnQgZG1pcnJvcl9kZXZpY2VfaW5pdChzdHJ1Y3QgZG1pcnJvcl9kZXZpY2UgKm1kZXZpY2UsIGludCBpZClcXG4tLVxcbmxpYi90ZXN0X2htbS5jLTE3OTQtXFxubGliL3Rlc3RfaG1tLmM6MTc5NTpcXHRyZXQgPSBkZXZfc2V0X25hbWUoXFx1MDAyNm1kZXZpY2UtXFx1MDAzZWRldmljZSwgXFxcImhtbV9kbWlycm9yJXVcXFwiLCBpZCk7XFxubGliL3Rlc3RfaG1tLmMtMTc5Ni1cXHRpZiAocmV0KVxcbi0tXFxubGliL3Rlc3RfaG1tLmM9MTgxNT1zdGF0aWMgdm9pZCBkbWlycm9yX2RldmljZV9yZW1vdmUoc3RydWN0IGRtaXJyb3JfZGV2aWNlICptZGV2aWNlKVxcbi0tXFxubGliL3Rlc3RfaG1tLmMtMTgyMC1cXG5saWIvdGVzdF9obW0uYzoxODIxOnN0YXRpYyBpbnQgX19pbml0IGhtbV9kbWlycm9yX2luaXQodm9pZClcXG5saWIvdGVzdF9obW0uYy0xODIyLXtcXG4tLVxcbmxpYi90ZXN0X2htbS5jLTE4NTktXFxubGliL3Rlc3RfaG1tLmM6MTg2MDpzdGF0aWMgdm9pZCBfX2V4aXQgaG1tX2RtaXJyb3JfZXhpdCh2b2lkKVxcbmxpYi90ZXN0X2htbS5jLTE4NjEte1xcbi0tXFxubGliL3Rlc3RfaG1tLmMtMTg2OS1cXG5saWIvdGVzdF9obW0uYzoxODcwOm1vZHVsZV9pbml0KGhtbV9kbWlycm9yX2luaXQpO1xcbmxpYi90ZXN0X2htbS5jOjE4NzE6bW9kdWxlX2V4aXQoaG1tX2RtaXJyb3JfZXhpdCk7XFxubGliL3Rlc3RfaG1tLmMtMTg3Mi1NT0RVTEVfREVTQ1JJUFRJT04oXFxcIkhNTSAoSGV0ZXJvZ2VuZW91cyBNZW1vcnkgTWFuYWdlbWVudCkgdGVzdCBtb2R1bGVcXFwiKTtcXG4tLVxcbmxpYi90ZXN0X2htbV91YXBpLmgtMjItICovXFxubGliL3Rlc3RfaG1tX3VhcGkuaDoyMzpzdHJ1Y3QgaG1tX2RtaXJyb3JfY21kIHtcXG5saWIvdGVzdF9obW1fdWFwaS5oLTI0LVxcdF9fdTY0XFx0XFx0YWRkcjtcXG4tLVxcbmxpYi90ZXN0X2htbV91YXBpLmgtMzEtLyogRXhwb3NlIHRoZSBhZGRyZXNzIHNwYWNlIG9mIHRoZSBjYWxsaW5nIHByb2Nlc3MgdGhyb3VnaCBobW0gZGV2aWNlIGZpbGUgKi9cXG5saWIvdGVzdF9obW1fdWFwaS5oOjMyOiNkZWZpbmUgSE1NX0RNSVJST1JfUkVBRFxcdFxcdF9JT1dSKCdIJywgMHgwMCwgc3RydWN0IGhtbV9kbWlycm9yX2NtZClcXG5saWIvdGVzdF9obW1fdWFwaS5oOjMzOiNkZWZpbmUgSE1NX0RNSVJST1JfV1JJVEVcXHRcXHRfSU9XUignSCcsIDB4MDEsIHN0cnVjdCBobW1fZG1pcnJvcl9jbWQpXFxubGliL3Rlc3RfaG1tX3VhcGkuaDozNDojZGVmaW5lIEhNTV9ETUlSUk9SX01JR1JBVEVfVE9fREVWXFx0X0lPV1IoJ0gnLCAweDAyLCBzdHJ1Y3QgaG1tX2RtaXJyb3JfY21kKVxcbmxpYi90ZXN0X2htbV91YXBpLmg6MzU6I2RlZmluZSBITU1fRE1JUlJPUl9NSUdSQVRFX1RPX1NZU1xcdF9JT1dSKCdIJywgMHgwMywgc3RydWN0IGhtbV9kbWlycm9yX2NtZClcXG5saWIvdGVzdF9obW1fdWFwaS5oOjM2OiNkZWZpbmUgSE1NX0RNSVJST1JfU05BUFNIT1RcXHRcXHRfSU9XUignSCcsIDB4MDQsIHN0cnVjdCBobW1fZG1pcnJvcl9jbWQpXFxubGliL3Rlc3RfaG1tX3VhcGkuaDozNzojZGVmaW5lIEhNTV9ETUlSUk9SX0VYQ0xVU0lWRVxcdFxcdF9JT1dSKCdIJywgMHgwNSwgc3RydWN0IGhtbV9kbWlycm9yX2NtZClcXG5saWIvdGVzdF9obW1fdWFwaS5oOjM4OiNkZWZpbmUgSE1NX0RNSVJST1JfQ0hFQ0tfRVhDTFVTSVZFXFx0X0lPV1IoJ0gnLCAweDA2LCBzdHJ1Y3QgaG1tX2RtaXJyb3JfY21kKVxcbmxpYi90ZXN0X2htbV91YXBpLmg6Mzk6I2RlZmluZSBITU1fRE1JUlJPUl9SRUxFQVNFXFx0XFx0X0lPV1IoJ0gnLCAweDA3LCBzdHJ1Y3QgaG1tX2RtaXJyb3JfY21kKVxcbmxpYi90ZXN0X2htbV91YXBpLmg6NDA6I2RlZmluZSBITU1fRE1JUlJPUl9GTEFHU1xcdFxcdF9JT1dSKCdIJywgMHgwOCwgc3RydWN0IGhtbV9kbWlycm9yX2NtZClcXG5saWIvdGVzdF9obW1fdWFwaS5oLTQxLVxcbi0tXFxubGliL3Rlc3RfaG1tX3VhcGkuaC00NC0vKlxcbmxpYi90ZXN0X2htbV91YXBpLmg6NDU6ICogVmFsdWVzIHJldHVybmVkIGluIGhtbV9kbWlycm9yX2NtZC5wdHIgZm9yIEhNTV9ETUlSUk9SX1NOQVBTSE9ULlxcbmxpYi90ZXN0X2htbV91YXBpLmgtNDYtICogSE1NX0RNSVJST1JfUFJPVF9FUlJPUjogbm8gdmFsaWQgbWlycm9yIFBURSBmb3IgdGhpcyBwYWdlXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYz0xMjU9c3RhdGljIGludCBobW1fb3BlbihpbnQgdW5pdClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jLTEyOS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYzoxMzA6XFx0c25wcmludGYocGF0aG5hbWUsIHNpemVvZihwYXRobmFtZSksIFxcXCIvZGV2L2htbV9kbWlycm9yJWRcXFwiLCB1bml0KTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy0xMzEtXFx0ZmQgPSBvcGVuKHBhdGhuYW1lLCBPX1JEV1IsIDApO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmM9MTc1PUZJWFRVUkVfVEVBUkRPV04oaG1tMilcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jLTE4Ni1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYzoxODc6c3RhdGljIGludCBobW1fZG1pcnJvcl9jbWQoaW50IGZkLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jLTE4OC1cXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nIHJlcXVlc3QsXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy0xOTEte1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jOjE5MjpcXHRzdHJ1Y3QgaG1tX2RtaXJyb3JfY21kIGNtZDtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy0xOTMtXFx0aW50IHJldDtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jPTI3OT1zdGF0aWMgaW50IGhtbV9taWdyYXRlX3N5c190b19kZXYoaW50IGZkLFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMtMjgyLXtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYzoyODM6XFx0cmV0dXJuIGhtbV9kbWlycm9yX2NtZChmZCwgSE1NX0RNSVJST1JfTUlHUkFURV9UT19ERVYsIGJ1ZmZlciwgbnBhZ2VzKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy0yODQtfVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmM9Mjg2PXN0YXRpYyBpbnQgaG1tX21pZ3JhdGVfZGV2X3RvX3N5cyhpbnQgZmQsXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy0yODkte1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jOjI5MDpcXHRyZXR1cm4gaG1tX2RtaXJyb3JfY21kKGZkLCBITU1fRE1JUlJPUl9NSUdSQVRFX1RPX1NZUywgYnVmZmVyLCBucGFnZXMpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jLTI5MS19XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYz0zMDM9VEVTVF9GKGhtbSwgYW5vbl9yZWFkKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMtMzQ3LVxcdC8qIFNpbXVsYXRlIGEgZGV2aWNlIHJlYWRpbmcgc3lzdGVtIG1lbW9yeS4gKi9cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYzozNDg6XFx0cmV0ID0gaG1tX2RtaXJyb3JfY21kKHNlbGYtXFx1MDAzZWZkLCBITU1fRE1JUlJPUl9SRUFELCBidWZmZXIsIG5wYWdlcyk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMtMzQ5LVxcdEFTU0VSVF9FUShyZXQsIDApO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmM9MzY3PVRFU1RfRihobW0sIGFub25fcmVhZF9wcm90KVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMtNDA2LVxcdC8qIFNpbXVsYXRlIGEgZGV2aWNlIHJlYWRpbmcgc3lzdGVtIG1lbW9yeS4gKi9cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYzo0MDc6XFx0cmV0ID0gaG1tX2RtaXJyb3JfY21kKHNlbGYtXFx1MDAzZWZkLCBITU1fRE1JUlJPUl9SRUFELCBidWZmZXIsIG5wYWdlcyk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMtNDA4LVxcdEFTU0VSVF9FUShyZXQsIC1FRkFVTFQpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmM9NDI2PVRFU1RfRihobW0sIGFub25fd3JpdGUpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy00NTctXFx0LyogU2ltdWxhdGUgYSBkZXZpY2Ugd3JpdGluZyBzeXN0ZW0gbWVtb3J5LiAqL1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jOjQ1ODpcXHRyZXQgPSBobW1fZG1pcnJvcl9jbWQoc2VsZi1cXHUwMDNlZmQsIEhNTV9ETUlSUk9SX1dSSVRFLCBidWZmZXIsIG5wYWdlcyk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMtNDU5LVxcdEFTU0VSVF9FUShyZXQsIDApO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmM9NDc0PVRFU1RfRihobW0sIGFub25fd3JpdGVfcHJvdClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jLTUwMS1cXHQvKiBTaW11bGF0ZSBhIGRldmljZSByZWFkaW5nIGEgemVybyBwYWdlIG9mIG1lbW9yeS4gKi9cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYzo1MDI6XFx0cmV0ID0gaG1tX2RtaXJyb3JfY21kKHNlbGYtXFx1MDAzZWZkLCBITU1fRE1JUlJPUl9SRUFELCBidWZmZXIsIDEpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jLTUwMy1cXHRBU1NFUlRfRVEocmV0LCAwKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jLTUxMS1cXHQvKiBTaW11bGF0ZSBhIGRldmljZSB3cml0aW5nIHN5c3RlbSBtZW1vcnkuICovXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmM6NTEyOlxcdHJldCA9IGhtbV9kbWlycm9yX2NtZChzZWxmLVxcdTAwM2VmZCwgSE1NX0RNSVJST1JfV1JJVEUsIGJ1ZmZlciwgbnBhZ2VzKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy01MTMtXFx0QVNTRVJUX0VRKHJldCwgLUVQRVJNKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jLTUyMy1cXHQvKiBTaW11bGF0ZSBhIGRldmljZSB3cml0aW5nIHN5c3RlbSBtZW1vcnkuICovXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmM6NTI0OlxcdHJldCA9IGhtbV9kbWlycm9yX2NtZChzZWxmLVxcdTAwM2VmZCwgSE1NX0RNSVJST1JfV1JJVEUsIGJ1ZmZlciwgbnBhZ2VzKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy01MjUtXFx0QVNTRVJUX0VRKHJldCwgMCk7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYz01NDI9VEVTVF9GKGhtbSwgYW5vbl93cml0ZV9jaGlsZClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jLTYyNy1cXHRcXHRcXHQvKiBTaW11bGF0ZSBhIGRldmljZSB3cml0aW5nIHN5c3RlbSBtZW1vcnkuICovXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmM6NjI4OlxcdFxcdFxcdHJldCA9IGhtbV9kbWlycm9yX2NtZChjaGlsZF9mZCwgSE1NX0RNSVJST1JfV1JJVEUsIGJ1ZmZlciwgbnBhZ2VzKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy02MjktXFx0XFx0XFx0QVNTRVJUX0VRKHJldCwgMCk7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYz02NDk9VEVTVF9GKGhtbSwgYW5vbl93cml0ZV9jaGlsZF9zaGFyZWQpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy03MDktXFx0LyogU2ltdWxhdGUgYSBkZXZpY2Ugd3JpdGluZyBzeXN0ZW0gbWVtb3J5LiAqL1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jOjcxMDpcXHRyZXQgPSBobW1fZG1pcnJvcl9jbWQoY2hpbGRfZmQsIEhNTV9ETUlSUk9SX1dSSVRFLCBidWZmZXIsIG5wYWdlcyk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMtNzExLVxcdEFTU0VSVF9FUShyZXQsIDApO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmM9NzI2PVRFU1RfRihobW0sIGFub25fd3JpdGVfaHVnZSlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jLTc2NS1cXHQvKiBTaW11bGF0ZSBhIGRldmljZSB3cml0aW5nIHN5c3RlbSBtZW1vcnkuICovXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmM6NzY2OlxcdHJldCA9IGhtbV9kbWlycm9yX2NtZChzZWxmLVxcdTAwM2VmZCwgSE1NX0RNSVJST1JfV1JJVEUsIGJ1ZmZlciwgbnBhZ2VzKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy03NjctXFx0QVNTRVJUX0VRKHJldCwgMCk7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYz03ODI9VEVTVF9GKGhtbSwgYW5vbl93cml0ZV9odWdldGxiZnMpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy04MTktXFx0LyogU2ltdWxhdGUgYSBkZXZpY2Ugd3JpdGluZyBzeXN0ZW0gbWVtb3J5LiAqL1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jOjgyMDpcXHRyZXQgPSBobW1fZG1pcnJvcl9jbWQoc2VsZi1cXHUwMDNlZmQsIEhNTV9ETUlSUk9SX1dSSVRFLCBidWZmZXIsIG5wYWdlcyk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMtODIxLVxcdEFTU0VSVF9FUShyZXQsIDApO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmM9ODM3PVRFU1RfRihobW0sIGZpbGVfcmVhZClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jLTg3Ni1cXHQvKiBTaW11bGF0ZSBhIGRldmljZSByZWFkaW5nIHN5c3RlbSBtZW1vcnkuICovXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmM6ODc3OlxcdHJldCA9IGhtbV9kbWlycm9yX2NtZChzZWxmLVxcdTAwM2VmZCwgSE1NX0RNSVJST1JfUkVBRCwgYnVmZmVyLCBucGFnZXMpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jLTg3OC1cXHRBU1NFUlRfRVEocmV0LCAwKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jPTg5Mj1URVNUX0YoaG1tLCBmaWxlX3dyaXRlKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMtOTI4LVxcdC8qIFNpbXVsYXRlIGEgZGV2aWNlIHdyaXRpbmcgc3lzdGVtIG1lbW9yeS4gKi9cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYzo5Mjk6XFx0cmV0ID0gaG1tX2RtaXJyb3JfY21kKHNlbGYtXFx1MDAzZWZkLCBITU1fRE1JUlJPUl9XUklURSwgYnVmZmVyLCBucGFnZXMpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jLTkzMC1cXHRBU1NFUlRfRVEocmV0LCAwKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jPTExMDQ9VEVTVF9GKGhtbSwgbWlncmF0ZV9yZWxlYXNlKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMtMTE0Mi1cXHQvKiBSZWxlYXNlIGRldmljZSBtZW1vcnkuICovXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmM6MTE0MzpcXHRyZXQgPSBobW1fZG1pcnJvcl9jbWQoc2VsZi1cXHUwMDNlZmQsIEhNTV9ETUlSUk9SX1JFTEVBU0UsIGJ1ZmZlciwgbnBhZ2VzKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy0xMTQ0LVxcdEFTU0VSVF9FUShyZXQsIDApO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmM9MTM0Mj1URVNUX0YoaG1tLCBhbm9uX3JlYWRfbXVsdGlwbGUpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy0xMzc1LVxcdFxcdC8qIFNpbXVsYXRlIGEgZGV2aWNlIHJlYWRpbmcgc3lzdGVtIG1lbW9yeS4gKi9cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYzoxMzc2OlxcdFxcdHJldCA9IGhtbV9kbWlycm9yX2NtZChzZWxmLVxcdTAwM2VmZCwgSE1NX0RNSVJST1JfUkVBRCwgYnVmZmVyLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jLTEzNzctXFx0XFx0XFx0XFx0ICAgICAgbnBhZ2VzKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jPTE0MDU9VEVTVF9GKGhtbSwgYW5vbl90ZWFyZG93bilcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jLTE0NDQtXFx0XFx0LyogU2ltdWxhdGUgYSBkZXZpY2UgcmVhZGluZyBzeXN0ZW0gbWVtb3J5LiAqL1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jOjE0NDU6XFx0XFx0cmMgPSBobW1fZG1pcnJvcl9jbWQoc2VsZi1cXHUwMDNlZmQsIEhNTV9ETUlSUk9SX1JFQUQsIGJ1ZmZlcixcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy0xNDQ2LVxcdFxcdFxcdFxcdCAgICAgbnBhZ2VzKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jPTE0NjY9VEVTVF9GKGhtbSwgbWl4ZWRtYXApXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy0xNDkzLVxcdC8qIFNpbXVsYXRlIGEgZGV2aWNlIHNuYXBzaG90dGluZyBDUFUgcGFnZXRhYmxlcy4gKi9cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYzoxNDk0OlxcdHJldCA9IGhtbV9kbWlycm9yX2NtZChzZWxmLVxcdTAwM2VmZCwgSE1NX0RNSVJST1JfU05BUFNIT1QsIGJ1ZmZlciwgbnBhZ2VzKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy0xNDk1LVxcdEFTU0VSVF9FUShyZXQsIDApO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmM9MTUwOD1URVNUX0YoaG1tMiwgc25hcHNob3QpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy0xNTgwLVxcdGJ1ZmZlci1cXHUwMDNlcHRyID0gcDtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYzoxNTgxOlxcdHJldCA9IGhtbV9kbWlycm9yX2NtZChzZWxmLVxcdTAwM2VmZDAsIEhNTV9ETUlSUk9SX1NOQVBTSE9ULCBidWZmZXIsIG5wYWdlcyk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMtMTU4Mi1cXHRBU1NFUlRfRVEocmV0LCAwKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jPTE2MTA9VEVTVF9GKGhtbSwgY29tcG91bmQpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy0xNjQ5LVxcdC8qIFNpbXVsYXRlIGEgZGV2aWNlIHNuYXBzaG90dGluZyBDUFUgcGFnZXRhYmxlcy4gKi9cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYzoxNjUwOlxcdHJldCA9IGhtbV9kbWlycm9yX2NtZChzZWxmLVxcdTAwM2VmZCwgSE1NX0RNSVJST1JfU05BUFNIT1QsIGJ1ZmZlciwgbnBhZ2VzKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy0xNjUxLVxcdEFTU0VSVF9FUShyZXQsIDApO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMtMTY3My1cXHQvKiBTaW11bGF0ZSBhIGRldmljZSBzbmFwc2hvdHRpbmcgQ1BVIHBhZ2V0YWJsZXMuICovXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmM6MTY3NDpcXHRyZXQgPSBobW1fZG1pcnJvcl9jbWQoc2VsZi1cXHUwMDNlZmQsIEhNTV9ETUlSUk9SX1NOQVBTSE9ULCBidWZmZXIsIG5wYWdlcyk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMtMTY3NS1cXHRBU1NFUlRfRVEocmV0LCAwKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jPTE2OTg9VEVTVF9GKGhtbTIsIGRvdWJsZV9tYXApXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy0xNzMzLVxcdC8qIFNpbXVsYXRlIGRldmljZSAwIHJlYWRpbmcgc3lzdGVtIG1lbW9yeS4gKi9cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYzoxNzM0OlxcdHJldCA9IGhtbV9kbWlycm9yX2NtZChzZWxmLVxcdTAwM2VmZDAsIEhNTV9ETUlSUk9SX1JFQUQsIGJ1ZmZlciwgbnBhZ2VzKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy0xNzM1LVxcdEFTU0VSVF9FUShyZXQsIDApO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMtMTc0My1cXHQvKiBTaW11bGF0ZSBkZXZpY2UgMSByZWFkaW5nIHN5c3RlbSBtZW1vcnkuICovXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmM6MTc0NDpcXHRyZXQgPSBobW1fZG1pcnJvcl9jbWQoc2VsZi1cXHUwMDNlZmQxLCBITU1fRE1JUlJPUl9SRUFELCBidWZmZXIsIG5wYWdlcyk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMtMTc0NS1cXHRBU1NFUlRfRVEocmV0LCAwKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jLTE3NTctXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmM6MTc1ODpcXHRyZXQgPSBobW1fZG1pcnJvcl9jbWQoc2VsZi1cXHUwMDNlZmQwLCBITU1fRE1JUlJPUl9SRUFELCBidWZmZXIsIG5wYWdlcyk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMtMTc1OS1cXHRBU1NFUlRfRVEocmV0LCAwKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jPTE3NzM9VEVTVF9GKGhtbSwgZXhjbHVzaXZlKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMtMTgwNC1cXHQvKiBNYXAgbWVtb3J5IGV4Y2x1c2l2ZWx5IGZvciBkZXZpY2UgYWNjZXNzLiAqL1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jOjE4MDU6XFx0cmV0ID0gaG1tX2RtaXJyb3JfY21kKHNlbGYtXFx1MDAzZWZkLCBITU1fRE1JUlJPUl9FWENMVVNJVkUsIGJ1ZmZlciwgbnBhZ2VzKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy0xODA2LVxcdEFTU0VSVF9FUShyZXQsIDApO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMtMTgyMC1cXHQvKiBDaGVjayBhdG9taWMgYWNjZXNzIHJldm9rZWQgKi9cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYzoxODIxOlxcdHJldCA9IGhtbV9kbWlycm9yX2NtZChzZWxmLVxcdTAwM2VmZCwgSE1NX0RNSVJST1JfQ0hFQ0tfRVhDTFVTSVZFLCBidWZmZXIsIG5wYWdlcyk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMtMTgyMi1cXHRBU1NFUlRfRVEocmV0LCAwKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jPTE4Mjc9VEVTVF9GKGhtbSwgZXhjbHVzaXZlX21wcm90ZWN0KVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMtMTg1OC1cXHQvKiBNYXAgbWVtb3J5IGV4Y2x1c2l2ZWx5IGZvciBkZXZpY2UgYWNjZXNzLiAqL1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jOjE4NTk6XFx0cmV0ID0gaG1tX2RtaXJyb3JfY21kKHNlbGYtXFx1MDAzZWZkLCBITU1fRE1JUlJPUl9FWENMVVNJVkUsIGJ1ZmZlciwgbnBhZ2VzKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy0xODYwLVxcdEFTU0VSVF9FUShyZXQsIDApO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMtMTg3MC1cXHQvKiBTaW11bGF0ZSBhIGRldmljZSB3cml0aW5nIHN5c3RlbSBtZW1vcnkuICovXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmM6MTg3MTpcXHRyZXQgPSBobW1fZG1pcnJvcl9jbWQoc2VsZi1cXHUwMDNlZmQsIEhNTV9ETUlSUk9SX1dSSVRFLCBidWZmZXIsIG5wYWdlcyk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMtMTg3Mi1cXHRBU1NFUlRfRVEocmV0LCAtRVBFUk0pO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmM9MTg4MD1URVNUX0YoaG1tLCBleGNsdXNpdmVfY293KVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMtMTkxMy1cXHQvKiBNYXAgbWVtb3J5IGV4Y2x1c2l2ZWx5IGZvciBkZXZpY2UgYWNjZXNzLiAqL1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jOjE5MTQ6XFx0cmV0ID0gaG1tX2RtaXJyb3JfY21kKHNlbGYtXFx1MDAzZWZkLCBITU1fRE1JUlJPUl9FWENMVVNJVkUsIGJ1ZmZlciwgbnBhZ2VzKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy0xOTE1LVxcdEFTU0VSVF9FUShyZXQsIDApO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmM9MTk3OD1URVNUX0YoaG1tLCBobW1fZ3VwX3Rlc3QpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy0yMDM1LVxcdC8qIFRha2Ugc25hcHNob3QgdG8gQ1BVIHBhZ2V0YWJsZXMgKi9cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYzoyMDM2OlxcdHJldCA9IGhtbV9kbWlycm9yX2NtZChzZWxmLVxcdTAwM2VmZCwgSE1NX0RNSVJST1JfU05BUFNIT1QsIGJ1ZmZlciwgbnBhZ2VzKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy0yMDM3LVxcdEFTU0VSVF9FUShyZXQsIDApO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmM9MjA2Nz1URVNUX0YoaG1tLCBobW1fY293X2luX2RldmljZSlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jLTIxMjgtXFx0LyogVGFrZSBzbmFwc2hvdCB0byBDUFUgcGFnZXRhYmxlcyAqL1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jOjIxMjk6XFx0cmV0ID0gaG1tX2RtaXJyb3JfY21kKHNlbGYtXFx1MDAzZWZkLCBITU1fRE1JUlJPUl9TTkFQU0hPVCwgYnVmZmVyLCBucGFnZXMpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jLTIxMzAtXFx0QVNTRVJUX0VRKHJldCwgMCk7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYz0yMzE2PVRFU1RfRihobW0sIG1pZ3JhdGVfYW5vbl9odWdlX2ZhdWx0KVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMtMjM2OC1cXHRpZiAoIWhtbV9pc19jb2hlcmVudF90eXBlKHZhcmlhbnQtXFx1MDAzZWRldmljZV9udW1iZXIpKSB7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmM6MjM2OTpcXHRcXHRyZXQgPSBobW1fZG1pcnJvcl9jbWQoc2VsZi1cXHUwMDNlZmQsIEhNTV9ETUlSUk9SX1NOQVBTSE9ULFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jLTIzNzAtXFx0XFx0XFx0XFx0ICAgICAgYnVmZmVyLCBucGFnZXMpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmM9MjU4MD1URVNUX0YoaG1tLCBtaWdyYXRlX2Fub25faHVnZV9lcnIpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy0yNjE2LVxcdC8qIE1pZ3JhdGUgbWVtb3J5IHRvIGRldmljZSBidXQgZm9yY2UgYSBUSFAgYWxsb2NhdGlvbiBlcnJvci4gKi9cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYzoyNjE3OlxcdHJldCA9IGhtbV9kbWlycm9yX2NtZChzZWxmLVxcdTAwM2VmZCwgSE1NX0RNSVJST1JfRkxBR1MsIGJ1ZmZlcixcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy0yNjE4LVxcdFxcdFxcdCAgICAgIEhNTV9ETUlSUk9SX0ZMQUdfRkFJTF9BTExPQyk7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy0yNjU4LVxcdCAqL1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jOjI2NTk6XFx0cmV0ID0gaG1tX2RtaXJyb3JfY21kKHNlbGYtXFx1MDAzZWZkLCBITU1fRE1JUlJPUl9GTEFHUywgYnVmZmVyLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jLTI2NjAtXFx0XFx0XFx0ICAgICAgSE1NX0RNSVJST1JfRkxBR19GQUlMX0FMTE9DKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jPTI2NzU9VEVTVF9GKGhtbSwgbWlncmF0ZV9hbm9uX2h1Z2VfemVyb19lcnIpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy0yNzA3LVxcdC8qIE1pZ3JhdGUgbWVtb3J5IHRvIGRldmljZSBidXQgZm9yY2UgYSBUSFAgYWxsb2NhdGlvbiBlcnJvci4gKi9cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYzoyNzA4OlxcdHJldCA9IGhtbV9kbWlycm9yX2NtZChzZWxmLVxcdTAwM2VmZCwgSE1NX0RNSVJST1JfRkxBR1MsIGJ1ZmZlcixcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy0yNzA5LVxcdFxcdFxcdCAgICAgIEhNTV9ETUlSUk9SX0ZMQUdfRkFJTF9BTExPQyk7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy0yNzM4LVxcdC8qIE1pZ3JhdGUgbWVtb3J5IHRvIGRldmljZSBidXQgZm9yY2UgYSBUSFAgYWxsb2NhdGlvbiBlcnJvci4gKi9cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYzoyNzM5OlxcdHJldCA9IGhtbV9kbWlycm9yX2NtZChzZWxmLVxcdTAwM2VmZCwgSE1NX0RNSVJST1JfRkxBR1MsIGJ1ZmZlcixcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy0yNzQwLVxcdFxcdFxcdCAgICAgIEhNTV9ETUlSUk9SX0ZMQUdfRkFJTF9BTExPQyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDA3OjQxOjEyLjYyMjQwNloiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDc0MDU5NjgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSG1tIERtaXJyb3IgTW9kdWxlKipcblxuT2theSwgc28gbG9va2luZyBhdCB0aGlzLCBgVEVTVF9ITU1gIHNlZW1zIHRvIGJlIHJlc3BvbnNpYmxlIGZvciBjcmVhdGluZyB0d28gZGV2aWNlIG5vZGVzOiBgL2Rldi9obW1fZG1pcnJvcjBgIGFuZCBgL2Rldi9obW1fZG1pcnJvcjFgLiBSaWdodCwgYW5kIFN5emthbGxlciBpcyB0aGUgdG9vbCB0aGF0J3MgaW50ZXJhY3Rpbmcgd2l0aCB0aGVzZSBkZXZpY2VzLCB1c2luZyB0aGVtIGFzIGEgdHJpZ2dlciBmb3IgYG1lbXJlbWFwX3BhZ2VzYCBhbmQgYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYC4gVGhhdCdzIHRoZSBrZXk6IGl04oCZcyB1c2luZyB0aGVzZSBjYWxscyBvbiB0aGUgZGV2aWNlcy4gQnV0IGhhbmcgb24uLi5pc24ndCBgbWVtcmVtYXBfcGFnZXNgIGFsc28gY2FsbGVkIGR1cmluZyB0aGUgYGRtaXJyb3JfZGV2aWNlX2luaXRgIGZ1bmN0aW9uPyBUaGF0J3Mgd2hlbiB0aGUgbW9kdWxlIGlzIGJlaW5nIGxvYWRlZCEgVGhhdCBzdWdnZXN0cyBhbiBpbnRlcmVzdGluZyBpbml0aWFsIHN0YXRlIGFuZCBpbnRlcmFjdGlvbiBwb2ludC4gSSBuZWVkIHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgZG1pcnJvcl9kZXZpY2VfaW5pdGAgdG8gZmlndXJlIG91dCB3aGF0J3MgZ29pbmcgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1ODA1LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMDc6NDE6MTYuMDk2NDY5MDAzWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjA2MjE1MzI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRtaXJyb3JfZGV2aWNlX2luaXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibGliL3Rlc3RfaG1tLmM9MTc3Mj1zdGF0aWMgdm9pZCBkbWlycm9yX2RldmljZV9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldilcXG4tLVxcbmxpYi90ZXN0X2htbS5jLTE3NzgtXFxubGliL3Rlc3RfaG1tLmM6MTc3OTpzdGF0aWMgaW50IGRtaXJyb3JfZGV2aWNlX2luaXQoc3RydWN0IGRtaXJyb3JfZGV2aWNlICptZGV2aWNlLCBpbnQgaWQpXFxubGliL3Rlc3RfaG1tLmMtMTc4MC17XFxuLS1cXG5saWIvdGVzdF9obW0uYz0xODIxPXN0YXRpYyBpbnQgX19pbml0IGhtbV9kbWlycm9yX2luaXQodm9pZClcXG4tLVxcbmxpYi90ZXN0X2htbS5jLTE4NDMtXFx0Zm9yIChpZCA9IDA7IGlkIFxcdTAwM2MgbmRldmljZXM7IGlkKyspIHtcXG5saWIvdGVzdF9obW0uYzoxODQ0OlxcdFxcdHJldCA9IGRtaXJyb3JfZGV2aWNlX2luaXQoZG1pcnJvcl9kZXZpY2VzICsgaWQsIGlkKTtcXG5saWIvdGVzdF9obW0uYy0xODQ1LVxcdFxcdGlmIChyZXQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDA3OjQxOjE3LjcwMjY5MDQxMVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDQyNTc0MjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQsIGdlYXJlZCB0b3dhcmQgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgZnJvbSBhIGZpcnN0LXBlcnNvbiBwZXJzcGVjdGl2ZTpcblxuKipEaXZpbmcgaW50byBgZG1pcnJvcl9kZXZpY2VfaW5pdGAqKlxuXG5BbHJpZ2h0LCBsZXQncyBjcmFjayBvcGVuIHRoaXMgYGRtaXJyb3JfZGV2aWNlX2luaXRgIGZ1bmN0aW9uLiBUaGUgbmFtZSBpdHNlbGYgaXMgcHJldHR5IHNlbGYtZXhwbGFuYXRvcnksIGJ1dCBJIHdhbnQgdG8gZ2V0IGEgZ29vZCBoYW5kbGUgb24gd2hhdCdzIGdvaW5nIG9uIGhlcmUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBsb29rIGZvciB0aGUgaGlnaC1sZXZlbCBjb250cm9sIGZsb3c6IFdoYXQncyB0aGUgZW50cnkgcG9pbnQ/IFdoYXQga2luZCBvZiBkYXRhIHN0cnVjdHVyZXMgYXJlIGJlaW5nIGluaXRpYWxpemVkPyBBbnkgZXh0ZXJuYWwgZGVwZW5kZW5jaWVzIG9yIHN5c3RlbSBjYWxscyB0aGF0IGFyZSBpbW1lZGlhdGVseSBhcHBhcmVudD8gSXQncyBsaWtlbHkgaW52b2x2ZWQgaW4gc2V0dGluZyB1cCB0aGUgZGV2aWNlIG1pcnJvciBkcml2ZXIsIHNvIEknbSBleHBlY3Rpbmcgc29tZSBraW5kIG9mIHJlc291cmNlIGFsbG9jYXRpb24sIHJlZ2lzdGVyIG1hcHBpbmcsIGFuZCBpbnRlcnJ1cHQgY29uZmlndXJhdGlvbi4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBoYXJkd2FyZS1zcGVjaWZpYyBwYXJhbWV0ZXJzIGl0J3MgdGFraW5nIGFuZCBob3cgaXQgaGFuZGxlcyBwb3RlbnRpYWwgZXJyb3JzIGR1cmluZyBpbml0aWFsaXphdGlvbi4gR2l2ZW4gdGhhdCBpdCdzIGEgZGV2aWNlIGluaXQgZnVuY3Rpb24sIEknbGwgYmUgbG9va2luZyBzcGVjaWZpY2FsbHkgZm9yIHdoYXQgcmVzb3VyY2VzIGl0J3MgdHJ5aW5nIHRvIG1hbmFnZS4gSSBhbHNvIGV4cGVjdCBhIG51bWJlciBvZiBjaGVja3MuIEFyZSB3ZSBkb2luZyBhIGNoZWNrIHRvIHNlZSBpZiB3ZSd2ZSBhbHJlYWR5IGRvbmUgYW4gaW5pdGlhbGl6YXRpb24/IFRoYXQncyBjb21tb24sIHNvIGl0J3MgcHJvYmFibHkgaGVyZS4gSSdsbCBhbHNvIGJlIHNjYW5uaW5nIGZvciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLiBJJ20gZ29pbmcgdG8gc2NhbiB0aGUgY29kZSBsb29raW5nIGZvciB3aGVyZSBpdCBpcyB3cml0aW5nIGFuZCByZWFkaW5nIGRhdGEgZnJvbSByZWdpc3RlcnMuIFRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkZXRlcm1pbmUgaG93IHRoZSBkcml2ZXIgaGFuZGxlcyBkaWZmZXJlbnQgaGFyZHdhcmUgY29uZmlndXJhdGlvbnMgb3IgdmVyc2lvbnMgb2YgdGhlIHRhcmdldCBkZXZpY2UuIEFyZSB0aGVyZSBjb25kaXRpb25hbCBibG9ja3MgYmFzZWQgb24gZGV2aWNlIElEcyBvciBjYXBhYmlsaXRpZXM/IEFueSB1c2Ugb2YgcGxhdGZvcm0tc3BlY2lmaWMgbWFjcm9zPyBJIGFsc28gd2FudCB0byBwYXkgY2FyZWZ1bCBhdHRlbnRpb24gdG8gYW55IGxvY2tpbmcgbWVjaGFuaXNtcyB0byBlbnN1cmUgY29uY3VycmVuY3kgaXMgaGFuZGxlZCBjb3JyZWN0bHksIHNpbmNlIHRoaXMgaXMgYSBrZXJuZWwgZnVuY3Rpb24uIEknbGwgYmUgbG9va2luZyBmb3IgcmVmZXJlbmNlcyB0byBtdXRleGVzLCBzZW1hcGhvcmVzLCBvciBvdGhlciBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcy4gQW5kIG9mIGNvdXJzZSwgSSdsbCBrZWVwIGFuIGV5ZSBvdXQgZm9yIGhvdyB0aGlzIGZ1bmN0aW9uIGhhbmRsZXMgcG93ZXIgbWFuYWdlbWVudC4gSXMgaXQgc2V0dGluZyB1cCBhbnkgY2xvY2tzIG9yIHBvd2VyIGRvbWFpbnM/IEFueSBzbGVlcCBvciB3YWtlLXVwIGNhbGxzPyBXaGF0IGlzIHRoZSByZWdpc3RlciBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZT8gVGhlIG92ZXJhbGwgZ29hbCBpcyB0byBmb3JtIGEgc29saWQgbWVudGFsIG1vZGVsIG9mIGhvdyBgZG1pcnJvcl9kZXZpY2VfaW5pdGAgZml0cyBpbnRvIHRoZSBicm9hZGVyIHBpY3R1cmUgb2YgdGhlIGRyaXZlcidzIG9wZXJhdGlvbiwgYW5kIGhvdyByb2J1c3QgYW5kIGVmZmljaWVudCBpdCBpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjYzMjIsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QwNzo0MToyMi4xNDUyNjY4NjFaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM1NjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImxpYi90ZXN0X2htbS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE3NzksXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE3Nzk6XFx0c3RhdGljIGludCBkbWlycm9yX2RldmljZV9pbml0KHN0cnVjdCBkbWlycm9yX2RldmljZSAqbWRldmljZSwgaW50IGlkKVxcbjE3ODA6XFx0e1xcbjE3ODE6XFx0XFx0ZGV2X3QgZGV2O1xcbjE3ODI6XFx0XFx0aW50IHJldDtcXG4xNzgzOlxcdFxcbjE3ODQ6XFx0XFx0ZGV2ID0gTUtERVYoTUFKT1IoZG1pcnJvcl9kZXYpLCBpZCk7XFxuMTc4NTpcXHRcXHRtdXRleF9pbml0KFxcdTAwMjZtZGV2aWNlLVxcdTAwM2VkZXZtZW1fbG9jayk7XFxuMTc4NjpcXHRcXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2bWRldmljZS1cXHUwMDNlbG9jayk7XFxuMTc4NzpcXHRcXG4xNzg4OlxcdFxcdGNkZXZfaW5pdChcXHUwMDI2bWRldmljZS1cXHUwMDNlY2RldmljZSwgXFx1MDAyNmRtaXJyb3JfZm9wcyk7XFxuMTc4OTpcXHRcXHRtZGV2aWNlLVxcdTAwM2VjZGV2aWNlLm93bmVyID0gVEhJU19NT0RVTEU7XFxuMTc5MDpcXHRcXHRtZGV2aWNlLVxcdTAwM2VkZXZpY2UucmVsZWFzZSA9IGRtaXJyb3JfZGV2aWNlX3JlbGVhc2U7XFxuMTc5MTpcXHRcXG4xNzkyOlxcdFxcdGRldmljZV9pbml0aWFsaXplKFxcdTAwMjZtZGV2aWNlLVxcdTAwM2VkZXZpY2UpO1xcbjE3OTM6XFx0XFx0bWRldmljZS1cXHUwMDNlZGV2aWNlLmRldnQgPSBkZXY7XFxuMTc5NDpcXHRcXG4xNzk1OlxcdFxcdHJldCA9IGRldl9zZXRfbmFtZShcXHUwMDI2bWRldmljZS1cXHUwMDNlZGV2aWNlLCBcXFwiaG1tX2RtaXJyb3IldVxcXCIsIGlkKTtcXG4xNzk2OlxcdFxcdGlmIChyZXQpXFxuMTc5NzpcXHRcXHRcXHRnb3RvIHB1dF9kZXZpY2U7XFxuMTc5ODpcXHRcXG4xNzk5OlxcdFxcdC8qIEJ1aWxkIGEgbGlzdCBvZiBmcmVlIFpPTkVfREVWSUNFIHN0cnVjdCBwYWdlcyAqL1xcbjE4MDA6XFx0XFx0cmV0ID0gZG1pcnJvcl9hbGxvY2F0ZV9jaHVuayhtZGV2aWNlLCBOVUxMLCBmYWxzZSk7XFxuMTgwMTpcXHRcXHRpZiAocmV0KVxcbjE4MDI6XFx0XFx0XFx0Z290byBwdXRfZGV2aWNlO1xcbjE4MDM6XFx0XFxuMTgwNDpcXHRcXHRyZXQgPSBjZGV2X2RldmljZV9hZGQoXFx1MDAyNm1kZXZpY2UtXFx1MDAzZWNkZXZpY2UsIFxcdTAwMjZtZGV2aWNlLVxcdTAwM2VkZXZpY2UpO1xcbjE4MDU6XFx0XFx0aWYgKHJldClcXG4xODA2OlxcdFxcdFxcdGdvdG8gcHV0X2RldmljZTtcXG4xODA3OlxcdFxcbjE4MDg6XFx0XFx0cmV0dXJuIDA7XFxuMTgwOTpcXHRcXG4xODEwOlxcdHB1dF9kZXZpY2U6XFxuMTgxMTpcXHRcXHRwdXRfZGV2aWNlKFxcdTAwMjZtZGV2aWNlLVxcdTAwM2VkZXZpY2UpO1xcbjE4MTI6XFx0XFx0cmV0dXJuIHJldDtcXG4xODEzOlxcdH1cXG4xODE0OlxcdFxcbjE4MTU6XFx0c3RhdGljIHZvaWQgZG1pcnJvcl9kZXZpY2VfcmVtb3ZlKHN0cnVjdCBkbWlycm9yX2RldmljZSAqbWRldmljZSlcXG4xODE2OlxcdHtcXG4xODE3OlxcdFxcdGNkZXZfZGV2aWNlX2RlbChcXHUwMDI2bWRldmljZS1cXHUwMDNlY2RldmljZSwgXFx1MDAyNm1kZXZpY2UtXFx1MDAzZWRldmljZSk7XFxuMTgxODpcXHRcXHRwdXRfZGV2aWNlKFxcdTAwMjZtZGV2aWNlLVxcdTAwM2VkZXZpY2UpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QwNzo0MToyMi4xNDU0MDM4MzFaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjI3NDY1Mzg4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEltcGxpY2F0aW9ucyBvZiBgbWVtcmVtYXBfcGFnZXNgIGFuZCBNb2R1bGUgTG9hZGluZyoqXG5cbk9rYXksIHNvIGBkbWlycm9yX2FsbG9jYXRlX2NodW5rYCBjYWxscyBgbWVtcmVtYXBfcGFnZXNgLiBUaGF0J3MgdGhlIGtleS4gSnVzdCBsb2FkaW5nIHRoZSBgdGVzdF9obW1gIG1vZHVsZSBpcyBnb2luZyB0byB0cmlnZ2VyIGBtZW1yZW1hcF9wYWdlc2AsIGFuZCB0aGF0IGluIHR1cm4gaGl0cyBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiBgVEVTVF9ITU1gIGlzIGV2ZW4gZW5hYmxlZCBvbiBTeXpib3QsIGJlY2F1c2UgdGhvc2UgYm90cyB1c3VhbGx5IGhhdmUgYSB0b24gb2YgYFRFU1RfKmAgY29uZmlncyBzZXQuIFJpZ2h0LCBsZXQncyBqdXN0IGdvIGFoZWFkIGFuZCBhZGQgYFRFU1RfSE1NYCB0byBgRW5hYmxlQ29uZmlnc2AgdG8gbWFrZSBzdXJlIHdlJ3JlIHRlc3RpbmcgdGhpcyBzY2VuYXJpby5cblxuSG9sZCBvbiwgSSBzZWUgYSBkZXBlbmRlbmN5IGlzc3VlLiBgVEVTVF9ITU1gIGRlcGVuZHMgb24gYERFVklDRV9QUklWQVRFYCwgd2hpY2ggaW4gdHVybiBkZXBlbmRzIG9uIGBaT05FX0RFVklDRWAuIFNvLCB0byBiZSBjb21wbGV0ZSwgSSBuZWVkIHRvIGFkZCBhbGwgdGhyZWUgdG8gdGhlIGBFbmFibGVDb25maWdzYDogYFRFU1RfSE1NYCwgYERFVklDRV9QUklWQVRFYCwgYW5kIGBaT05FX0RFVklDRWAuIFRoYXQgc2hvdWxkIGVuc3VyZSB0aGUgcmVsZXZhbnQgY29kZSBwYXRocyBhcmUgYWN0aXZlLlxuXG5Ob3csIGxldCdzIHF1aWNrbHkgdmVyaWZ5IHdoaWNoIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgYmVpbmcgdG91Y2hlZCBieSB0aGlzIHBhdGNoIHNvIEkgY2FuIHplcm8gaW4gb24gdGhlbSBkdXJpbmcgdGVzdGluZy4gSXQgbG9va3MgbGlrZSB0aGUgcGF0Y2ggbW9kaWZpZXM6IGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAsIGBtZW1tYXBfaW5pdF9jb21wb3VuZGAsIGB6b25lX2RldmljZV9wYWdlX2luaXRfZnJvbV90ZW1wbGF0ZWAsIGB6b25lX2RldmljZV9wYWdlX2luaXRfc2xvd2AsIGB6b25lX2RldmljZV90YWlsX3BhZ2VfaW5pdGAsIGB6b25lX2RldmljZV9wYWdlX3VwZGF0ZV90ZW1wbGF0ZWAsIGFuZCBgbWVtY3B5X25vbnRlbXBvcmFsYC5cblxuV2FpdCBhIG1pbnV0ZSwgYG1lbWNweV9ub250ZW1wb3JhbGAgaXMgaW5saW5lLCBzbyBpdCdzIHByb2JhYmx5IG5vdCB3aGVyZSB0aGUgcmVhbCBsb2dpYyBpcyBoYXBwZW5pbmcsIGFuZCBpcyBhIG1hY3JvLiBBbmQgdGhlIGB6b25lX2RldmljZV9wYWdlX2luaXRfZnJvbV90ZW1wbGF0ZWAsIGB6b25lX2RldmljZV9wYWdlX2luaXRfc2xvd2AsIGB6b25lX2RldmljZV90YWlsX3BhZ2VfaW5pdGAgYW5kIGB6b25lX2RldmljZV9wYWdlX3VwZGF0ZV90ZW1wbGF0ZWAgYXJlIGFsbCBzdGF0aWMuIFRoYXQgc2ltcGxpZmllcyB0aGluZ3MgYSBiaXQuIFNvIHJlYWxseSwgdGhlIHByaW1hcnkgZm9jdXMgZm9yIGludmVzdGlnYXRpb24gc2hvdWxkIGJlIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAgYW5kIGBtZW1tYXBfaW5pdF9jb21wb3VuZGAuIEkgbmVlZCB0byBjb25maXJtIGlmIHRob3NlIGFyZSBleHBvcnRlZCBvciBub3QsIGJlY2F1c2Ugc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIG1vZHVsZSBhcmUgbGVzcyBjcml0aWNhbCBmb3IgZXh0ZXJuYWwgZGVwZW5kZW5jaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzQwOCwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDA3OjQxOjI4LjQyMDA2MTIyN1oiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY1NzYzNzU0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2b2lkIF9fcmVmIG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21tX2luaXQuYz0xMTMxPXN0YXRpYyB2b2lkIF9fcmVmIG1lbW1hcF9pbml0X2NvbXBvdW5kKHN0cnVjdCBwYWdlICpoZWFkLFxcbi0tXFxubW0vbW1faW5pdC5jLTExNzEtXFxubW0vbW1faW5pdC5jOjExNzI6dm9pZCBfX3JlZiBtZW1tYXBfaW5pdF96b25lX2RldmljZShzdHJ1Y3Qgem9uZSAqem9uZSxcXG5tbS9tbV9pbml0LmMtMTE3My1cXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMDc6NDE6MzAuMDc3NzAzNzA0WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0MjQ3ODQ3ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE1lbW9yeSBNYXBwaW5nIEluaXRpYWxpemF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpbW1lZGlhdGVseSBJIHNlZSB0aGF0IGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAgaXNuJ3Qgc3RhdGljLiBUaGF0J3MgYSBiaXQgb2YgYSBrZXkgb2JzZXJ2YXRpb24sIGlzbid0IGl0PyBPbiB0aGUgb3RoZXIgaGFuZCwgYG1lbW1hcF9pbml0X2NvbXBvdW5kYCAqaXMqIHN0YXRpYy4gSG1tLCB0aGF0IHN1Z2dlc3RzIGl0IG1pZ2h0IGdldCBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciwgb3IgcGVyaGFwcyBkb2Vzbid0IGV2ZW4gaGF2ZSBhIHNlcGFyYXRlIHN5bWJvbCwgc28gaXQgbWF5IG5vdCBiZSBhcyBjcml0aWNhbCB0byBmb2N1cyBvbiBpbiBkZXRhaWwuIFRpbWUgdG8gdmVyaWZ5IGlmIHRoYXTigJlzIHRoZSBjYXNlIGJ5IHF1aWNrbHkgc2Nhbm5pbmcgZm9yIGFueSBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9ucyBpbiB0aGlzIGFyZWEuXG5cbmBtZW1tYXBfaW5pdF96b25lX2RldmljZWAgcmVhbGx5IHNlZW1zIHRvIGJlIHRoZSBjZW50cmFsIGZ1bmN0aW9uIGhlcmUuIEJ1dCwgd2hhdCBlbHNlIGlzIGFmZmVjdGVkPyBMZXQgbWUgdGFrZSBhIHF1aWNrIGxvb2sgdG8gY29uZmlybSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGZ1bmN0aW9ucyB0aGF0IGFyZSBjaGFuZ2VkLiBBaGEsIHRoZSBwYXRjaCB0b3VjaGVzIGBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaGAuIEludGVyZXN0aW5nLiBJdCBsb29rcyBsaWtlIHRoZXkncmUgYWRkaW5nIGBtb3ZudGlfOGAsIGBtb3ZudGlfMTZgLCBgbW92bnRpXzMyYCwgYW5kIGBtb3ZudGlfNjRgLiBUaGF0IGluZGljYXRlcyBjaGFuZ2VzIHJlbGF0ZWQgdG8gbm9uLXRlbXBvcmFsIHN0b3Jlcywgd2hpY2ggaXMgYSBsb3ctbGV2ZWwgb3B0aW1pemF0aW9uLiBJIHNob3VsZCBhbHNvIGNoZWNrIG91dCB0aGUgbW9kaWZpY2F0aW9uIHRvIGBtZW1jcHlfZmx1c2hjYWNoZWAuIFRoZXNlIGNoYW5nZXMgYXJlIGFsbCByZWxhdGVkLCBhbmQgd2lsbCByZXF1aXJlIGEgZGVlcCBkaXZlIGludG8gdGhlIGltcGxpY2F0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjgzNjEsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMDc6NDE6MzQuNTAyNDkyMzM1WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTA4NjA4Mjk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbWNweV9mbHVzaGNhY2hlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtNjQvaW5jbHVkZS9hc20vc3RyaW5nLmg9NDQ9ZXh0ZXJuIHZvaWQgKl9fbWVtc2V0KHZvaWQgKiwgaW50LCBfX2tlcm5lbF9zaXplX3QpO1xcbi0tXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9zdHJpbmcuaC00Ny0jZGVmaW5lIF9fSEFWRV9BUkNIX01FTUNQWV9GTFVTSENBQ0hFXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9zdHJpbmcuaDo0ODp2b2lkIG1lbWNweV9mbHVzaGNhY2hlKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgY250KTtcXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3N0cmluZy5oLTQ5LSNlbmRpZlxcbi0tXFxuYXJjaC9hcm02NC9saWIvdWFjY2Vzc19mbHVzaGNhY2hlLmMtOS1cXG5hcmNoL2FybTY0L2xpYi91YWNjZXNzX2ZsdXNoY2FjaGUuYzoxMDp2b2lkIG1lbWNweV9mbHVzaGNhY2hlKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgY250KVxcbmFyY2gvYXJtNjQvbGliL3VhY2Nlc3NfZmx1c2hjYWNoZS5jLTExLXtcXG4tLVxcbmFyY2gvYXJtNjQvbGliL3VhY2Nlc3NfZmx1c2hjYWNoZS5jLTE5LX1cXG5hcmNoL2FybTY0L2xpYi91YWNjZXNzX2ZsdXNoY2FjaGUuYzoyMDpFWFBPUlRfU1lNQk9MX0dQTChtZW1jcHlfZmx1c2hjYWNoZSk7XFxuYXJjaC9hcm02NC9saWIvdWFjY2Vzc19mbHVzaGNhY2hlLmMtMjEtXFxuLS1cXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc3RyaW5nLmg9Mjg9ZXh0ZXJuIHZvaWQgKiBtZW1jaHIoY29uc3Qgdm9pZCAqLGludCxfX2tlcm5lbF9zaXplX3QpO1xcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zdHJpbmcuaDoyOTp2b2lkIG1lbWNweV9mbHVzaGNhY2hlKHZvaWQgKmRlc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IHNpemUpO1xcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zdHJpbmcuaC0zMC1cXG4tLVxcbmFyY2gvcG93ZXJwYy9saWIvcG1lbS5jPTY5PXNpemVfdCBjb3B5X2Zyb21fdXNlcl9mbHVzaGNhY2hlKHZvaWQgKmRlc3QsIGNvbnN0IHZvaWQgX191c2VyICpzcmMsXFxuLS1cXG5hcmNoL3Bvd2VycGMvbGliL3BtZW0uYy04MC1cXG5hcmNoL3Bvd2VycGMvbGliL3BtZW0uYzo4MTp2b2lkIG1lbWNweV9mbHVzaGNhY2hlKHZvaWQgKmRlc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IHNpemUpXFxuYXJjaC9wb3dlcnBjL2xpYi9wbWVtLmMtODIte1xcbi0tXFxuYXJjaC9wb3dlcnBjL2xpYi9wbWVtLmMtODctfVxcbmFyY2gvcG93ZXJwYy9saWIvcG1lbS5jOjg4OkVYUE9SVF9TWU1CT0wobWVtY3B5X2ZsdXNoY2FjaGUpO1xcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0Lmg9ODA9aW50IHN0cmNtcChjb25zdCBjaGFyICpjcywgY29uc3QgY2hhciAqY3QpO1xcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmgtODMtI2RlZmluZSBfX0hBVkVfQVJDSF9NRU1DUFlfRkxVU0hDQUNIRSAxXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0Lmg6ODQ6dm9pZCBfX21lbWNweV9mbHVzaGNhY2hlKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgY250KTtcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaC04NS1cXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oPTEwNj1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbW92bnRpXzY0KHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjKVxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmgtMTExLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oOjExMjpzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbWVtY3B5X2ZsdXNoY2FjaGUodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmgtMTEzLVxcdFxcdFxcdFxcdFxcdCAgICAgIHNpemVfdCBjbnQpXFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaC0xMzEtXFx0XFx0XFx0ICogaW5zdGVhZCBvZiBzZW5kaW5nIHRob3NlIG5lYXJieSBmaXhlZC1zaXplXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0Lmg6MTMyOlxcdFxcdFxcdCAqIGNhc2VzIGJhY2sgdG8gX19tZW1jcHlfZmx1c2hjYWNoZSgpLlxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oLTEzMy1cXHRcXHRcXHQgKi9cXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oLTE1NC1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaDoxNTU6XFx0X19tZW1jcHlfZmx1c2hjYWNoZShkc3QsIHNyYywgY250KTtcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaC0xNTYtfVxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0Lmg9MTYzPXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtZW1jcHlfbm9udGVtcG9yYWwodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsXFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaC0xNjUte1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oOjE2NjpcXHRtZW1jcHlfZmx1c2hjYWNoZShkc3QsIHNyYywgY250KTtcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaC0xNjctfVxcbi0tXFxuYXJjaC94ODYva2VybmVsL2NyYXNoLmM9NTE0PXZvaWQgYXJjaF9jcmFzaF9oYW5kbGVfaG90cGx1Z19ldmVudChzdHJ1Y3Qga2ltYWdlICppbWFnZSwgdm9pZCAqYXJnKVxcbi0tXFxuYXJjaC94ODYva2VybmVsL2NyYXNoLmMtNTY1LVxcdHhjaGcoXFx1MDAyNmtleGVjX2NyYXNoX2ltYWdlLCBOVUxMKTtcXG5hcmNoL3g4Ni9rZXJuZWwvY3Jhc2guYzo1NjY6XFx0bWVtY3B5X2ZsdXNoY2FjaGUob2xkX2VsZmNvcmVoZHIsIGVsZmJ1ZiwgZWxmc3opO1xcbmFyY2gveDg2L2tlcm5lbC9jcmFzaC5jLTU2Ny1cXHR4Y2hnKFxcdTAwMjZrZXhlY19jcmFzaF9pbWFnZSwgaW1hZ2UpO1xcbi0tXFxuYXJjaC94ODYvbGliL3VzZXJjb3B5XzY0LmM9NDY9c2l6ZV90IGNvcHlfdXNlcl9mbHVzaGNhY2hlKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCBfX3VzZXIgKnNyYywgc2l6ZV90IHNpemUpXFxuLS1cXG5hcmNoL3g4Ni9saWIvdXNlcmNvcHlfNjQuYy03OS1cXG5hcmNoL3g4Ni9saWIvdXNlcmNvcHlfNjQuYzo4MDp2b2lkIF9fbWVtY3B5X2ZsdXNoY2FjaGUodm9pZCAqX2RzdCwgY29uc3Qgdm9pZCAqX3NyYywgc2l6ZV90IHNpemUpXFxuYXJjaC94ODYvbGliL3VzZXJjb3B5XzY0LmMtODEte1xcbi0tXFxuYXJjaC94ODYvbGliL3VzZXJjb3B5XzY0LmMtMTQyLX1cXG5hcmNoL3g4Ni9saWIvdXNlcmNvcHlfNjQuYzoxNDM6RVhQT1JUX1NZTUJPTF9HUEwoX19tZW1jcHlfZmx1c2hjYWNoZSk7XFxuYXJjaC94ODYvbGliL3VzZXJjb3B5XzY0LmMtMTQ0LSNlbmRpZlxcbi0tXFxuZHJpdmVycy9kYXgvZnNkZXYuYz0zMT1zdGF0aWMgdm9pZCBmc2Rldl93cml0ZV9kYXgodm9pZCAqYWRkciwgc3RydWN0IHBhZ2UgKnBhZ2UsXFxuLS1cXG5kcml2ZXJzL2RheC9mc2Rldi5jLTM3LVxcbmRyaXZlcnMvZGF4L2ZzZGV2LmM6Mzg6XFx0XFx0bWVtY3B5X2ZsdXNoY2FjaGUoYWRkciwgbWVtICsgb2ZmLCBjaHVuayk7XFxuZHJpdmVycy9kYXgvZnNkZXYuYy0zOS1cXHRcXHRrdW5tYXBfbG9jYWwobWVtKTtcXG4tLVxcbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlLmM9MTc9c3RhdGljIHZvaWQgY2FjaGVfaW5mb193cml0ZShzdHJ1Y3QgcGNhY2hlX2NhY2hlICpjYWNoZSlcXG4tLVxcbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlLmMtMjUtXFx0Y2FjaGUtXFx1MDAzZWluZm9faW5kZXggPSAoY2FjaGUtXFx1MDAzZWluZm9faW5kZXggKyAxKSAlIFBDQUNIRV9NRVRBX0lOREVYX01BWDtcXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZS5jOjI2OlxcdG1lbWNweV9mbHVzaGNhY2hlKGdldF9jYWNoZV9pbmZvX2FkZHIoY2FjaGUpLCBjYWNoZV9pbmZvLFxcbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlLmMtMjctXFx0XFx0XFx0c2l6ZW9mKHN0cnVjdCBwY2FjaGVfY2FjaGVfaW5mbykpO1xcbi0tXFxuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGUuYz04Nz12b2lkIGNhY2hlX3Bvc19lbmNvZGUoc3RydWN0IHBjYWNoZV9jYWNoZSAqY2FjaGUsXFxuLS1cXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZS5jLTEwMC1cXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZS5jOjEwMTpcXHRtZW1jcHlfZmx1c2hjYWNoZShwb3Nfb25tZWRpYV9hZGRyLCBcXHUwMDI2cG9zX29ubWVkaWEsIHNpemVvZihzdHJ1Y3QgcGNhY2hlX2NhY2hlX3Bvc19vbm1lZGlhKSk7XFxuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGUuYy0xMDItXFx0cG1lbV93bWIoKTtcXG4tLVxcbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlX2Rldi5jPTE0MD1zdGF0aWMgdm9pZCBzYl93cml0ZShzdHJ1Y3QgcGNhY2hlX2NhY2hlX2RldiAqY2FjaGVfZGV2LCBzdHJ1Y3QgcGNhY2hlX3NiICpzYilcXG4tLVxcbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlX2Rldi5jLTE0My1cXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZV9kZXYuYzoxNDQ6XFx0bWVtY3B5X2ZsdXNoY2FjaGUoc2JfYWRkciwgc2IsIHNpemVvZihzdHJ1Y3QgcGNhY2hlX3NiKSk7XFxuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGVfZGV2LmMtMTQ1LVxcdHBtZW1fd21iKCk7XFxuLS1cXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZV9rZXkuYz0xMTQ9c3RhdGljIHZvaWQgYXBwZW5kX2xhc3Rfa3NldChzdHJ1Y3QgcGNhY2hlX2NhY2hlICpjYWNoZSwgdTMyIG5leHRfc2VnKVxcbi0tXFxuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGVfa2V5LmMtMTIyLVxcbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlX2tleS5jOjEyMzpcXHRtZW1jcHlfZmx1c2hjYWNoZShnZXRfa2V5X2hlYWRfYWRkcihjYWNoZSksIFxcdTAwMjZrc2V0X29ubWVkaWEsIHNpemVvZihzdHJ1Y3QgcGNhY2hlX2NhY2hlX2tzZXRfb25tZWRpYSkpO1xcbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlX2tleS5jLTEyNC1cXHRwbWVtX3dtYigpO1xcbi0tXFxuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGVfa2V5LmM9MTI4PWludCBjYWNoZV9rc2V0X2Nsb3NlKHN0cnVjdCBwY2FjaGVfY2FjaGUgKmNhY2hlLCBzdHJ1Y3QgcGNhY2hlX2NhY2hlX2tzZXQgKmtzZXQpXFxuLS1cXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZV9rZXkuYy0xNTMtXFx0XFx0LyogY2xlYXIgb3V0ZGF0ZWQga3NldCBpbiBuZXh0IHNlZyAqL1xcbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlX2tleS5jOjE1NDpcXHRcXHRtZW1jcHlfZmx1c2hjYWNoZShuZXh0X3NlZy1cXHUwMDNlc2VnbWVudC5kYXRhLCBcXHUwMDI2cGNhY2hlX2VtcHR5X2tzZXQsXFxuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGVfa2V5LmMtMTU1LVxcdFxcdFxcdFxcdFxcdHNpemVvZihzdHJ1Y3QgcGNhY2hlX2NhY2hlX2tzZXRfb25tZWRpYSkpO1xcbi0tXFxuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGVfa2V5LmMtMTY1LVxcdC8qIGNsZWFyIG91dGRhdGVkIGtzZXQgYWZ0ZXIgY3VycmVudCBrc2V0ICovXFxuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGVfa2V5LmM6MTY2OlxcdG1lbWNweV9mbHVzaGNhY2hlKGdldF9rZXlfaGVhZF9hZGRyKGNhY2hlKSArIGtzZXRfb25tZWRpYV9zaXplLCBcXHUwMDI2cGNhY2hlX2VtcHR5X2tzZXQsXFxuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGVfa2V5LmMtMTY3LVxcdFxcdFxcdFxcdHNpemVvZihzdHJ1Y3QgcGNhY2hlX2NhY2hlX2tzZXRfb25tZWRpYSkpO1xcbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlX2tleS5jLTE2OC1cXHQvKiB3cml0ZSBjdXJyZW50IGtzZXQgaW50byBzZWdtZW50ICovXFxuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGVfa2V5LmM6MTY5OlxcdG1lbWNweV9mbHVzaGNhY2hlKGdldF9rZXlfaGVhZF9hZGRyKGNhY2hlKSwga3NldF9vbm1lZGlhLCBrc2V0X29ubWVkaWFfc2l6ZSk7XFxuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGVfa2V5LmMtMTcwLVxcdHBtZW1fd21iKCk7XFxuLS1cXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZV9zZWdtZW50LmM9MjA9c3RhdGljIHZvaWQgY2FjaGVfc2VnX2luZm9fd3JpdGUoc3RydWN0IHBjYWNoZV9jYWNoZV9zZWdtZW50ICpjYWNoZV9zZWcpXFxuLS1cXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZV9zZWdtZW50LmMtMzEtXFx0c2VnX2luZm9fYWRkciA9IGdldF9zZWdfaW5mb19hZGRyKGNhY2hlX3NlZyk7XFxuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGVfc2VnbWVudC5jOjMyOlxcdG1lbWNweV9mbHVzaGNhY2hlKHNlZ19pbmZvX2FkZHIsIHNlZ19pbmZvLCBzaXplb2Yoc3RydWN0IHBjYWNoZV9zZWdtZW50X2luZm8pKTtcXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZV9zZWdtZW50LmMtMzMtXFx0cG1lbV93bWIoKTtcXG4tLVxcbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlX3NlZ21lbnQuYz0xMjY9c3RhdGljIHZvaWQgY2FjaGVfc2VnX2N0cmxfd3JpdGUoc3RydWN0IHBjYWNoZV9jYWNoZV9zZWdtZW50ICpjYWNoZV9zZWcpXFxuLS1cXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZV9zZWdtZW50LmMtMTM2LVxcbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlX3NlZ21lbnQuYzoxMzc6XFx0bWVtY3B5X2ZsdXNoY2FjaGUoZ2V0X2NhY2hlX3NlZ19nZW5fYWRkcihjYWNoZV9zZWcpLCBcXHUwMDI2Y2FjaGVfc2VnX2dlbiwgc2l6ZW9mKHN0cnVjdCBwY2FjaGVfY2FjaGVfc2VnX2dlbikpO1xcbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlX3NlZ21lbnQuYy0xMzgtXFx0cG1lbV93bWIoKTtcXG4tLVxcbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlX3NlZ21lbnQuYz0xODI9aW50IGNhY2hlX3NlZ19pbml0KHN0cnVjdCBwY2FjaGVfY2FjaGUgKmNhY2hlLCB1MzIgc2VnX2lkLCB1MzIgY2FjaGVfc2VnX2lkLFxcbi0tXFxuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGVfc2VnbWVudC5jLTIxNi1cXHRcXHQvKiBjbGVhciBvdXRkYXRlZCBrc2V0IGluIHNlZ21lbnQgKi9cXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZV9zZWdtZW50LmM6MjE3OlxcdFxcdG1lbWNweV9mbHVzaGNhY2hlKHNlZ21lbnQtXFx1MDAzZWRhdGEsIFxcdTAwMjZwY2FjaGVfZW1wdHlfa3NldCwgc2l6ZW9mKHN0cnVjdCBwY2FjaGVfY2FjaGVfa3NldF9vbm1lZGlhKSk7XFxuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGVfc2VnbWVudC5jLTIxOC1cXHRcXHRwbWVtX3dtYigpO1xcbi0tXFxuZHJpdmVycy9tZC9kbS13cml0ZWNhY2hlLmM9NDY9ZG8ge1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG5kcml2ZXJzL21kL2RtLXdyaXRlY2FjaGUuYy00Ny1cXHR0eXBlb2YoZGVzdCkgdW5pcSA9IChzcmMpO1xcdFxcdFxcdFxcdFxcXFxcXG5kcml2ZXJzL21kL2RtLXdyaXRlY2FjaGUuYzo0ODpcXHRtZW1jcHlfZmx1c2hjYWNoZShcXHUwMDI2KGRlc3QpLCBcXHUwMDI2dW5pcSwgc2l6ZW9mKGRlc3QpKTtcXHRcXFxcXFxuZHJpdmVycy9tZC9kbS13cml0ZWNhY2hlLmMtNDktfSB3aGlsZSAoMClcXG4tLVxcbmRyaXZlcnMvbWQvZG0td3JpdGVjYWNoZS5jPTExOTA9c3RhdGljIGludCB3cml0ZWNhY2hlX21lc3NhZ2Uoc3RydWN0IGRtX3RhcmdldCAqdGksIHVuc2lnbmVkIGludCBhcmdjLCBjaGFyICoqYXJndixcXG4tLVxcbmRyaXZlcnMvbWQvZG0td3JpdGVjYWNoZS5jLTEyMDktXFxuZHJpdmVycy9tZC9kbS13cml0ZWNhY2hlLmM6MTIxMDpzdGF0aWMgdm9pZCBtZW1jcHlfZmx1c2hjYWNoZV9vcHRpbWl6ZWQodm9pZCAqZGVzdCwgdm9pZCAqc291cmNlLCBzaXplX3Qgc2l6ZSlcXG5kcml2ZXJzL21kL2RtLXdyaXRlY2FjaGUuYy0xMjExLXtcXG4tLVxcbmRyaXZlcnMvbWQvZG0td3JpdGVjYWNoZS5jLTEyMjQtXFx0ICogTk9URTogdGhpcyBoYXBwZW5zIHRvIGJlIHRoZSBjYXNlIG5vdyAod2l0aCBkbS13cml0ZWNhY2hlJ3Mgc2luZ2xlXFxuZHJpdmVycy9tZC9kbS13cml0ZWNhY2hlLmM6MTIyNTpcXHQgKiB0aHJlYWRlZCBtb2RlbCkgYnV0IHJlLWV2YWx1YXRlIHRoaXMgb25jZSBtZW1jcHlfZmx1c2hjYWNoZSgpIGlzXFxuZHJpdmVycy9tZC9kbS13cml0ZWNhY2hlLmMtMTIyNi1cXHQgKiBlbmFibGVkIHRvIHVzZSBtb3ZkaXI2NGIgd2hpY2ggbWlnaHQgaW52YWxpZGF0ZSB0aGlzIHBlcmZvcm1hbmNlXFxuLS1cXG5kcml2ZXJzL21kL2RtLXdyaXRlY2FjaGUuYy0xMjQyLSNlbmRpZlxcbmRyaXZlcnMvbWQvZG0td3JpdGVjYWNoZS5jOjEyNDM6XFx0bWVtY3B5X2ZsdXNoY2FjaGUoZGVzdCwgc291cmNlLCBzaXplKTtcXG5kcml2ZXJzL21kL2RtLXdyaXRlY2FjaGUuYy0xMjQ0LX1cXG4tLVxcbmRyaXZlcnMvbWQvZG0td3JpdGVjYWNoZS5jPTEyNDY9c3RhdGljIHZvaWQgYmlvX2NvcHlfYmxvY2soc3RydWN0IGRtX3dyaXRlY2FjaGUgKndjLCBzdHJ1Y3QgYmlvICpiaW8sIHZvaWQgKmRhdGEpXFxuLS1cXG5kcml2ZXJzL21kL2RtLXdyaXRlY2FjaGUuYy0xMjcxLVxcdFxcdFxcdGZsdXNoX2RjYWNoZV9wYWdlKGJpb19wYWdlKGJpbykpO1xcbmRyaXZlcnMvbWQvZG0td3JpdGVjYWNoZS5jOjEyNzI6XFx0XFx0XFx0bWVtY3B5X2ZsdXNoY2FjaGVfb3B0aW1pemVkKGRhdGEsIGJ1Ziwgc2l6ZSk7XFxuZHJpdmVycy9tZC9kbS13cml0ZWNhY2hlLmMtMTI3My1cXHRcXHR9XFxuLS1cXG5kcml2ZXJzL252ZGltbS9jbGFpbS5jPTIzMz1zdGF0aWMgaW50IG5zaW9fcndfYnl0ZXMoc3RydWN0IG5kX25hbWVzcGFjZV9jb21tb24gKm5kbnMsXFxuLS1cXG5kcml2ZXJzL252ZGltbS9jbGFpbS5jLTI3Ni1cXG5kcml2ZXJzL252ZGltbS9jbGFpbS5jOjI3NzpcXHRtZW1jcHlfZmx1c2hjYWNoZShuc2lvLVxcdTAwM2VhZGRyICsgb2Zmc2V0LCBidWYsIHNpemUpO1xcbmRyaXZlcnMvbnZkaW1tL2NsYWltLmMtMjc4LVxcdHJldCA9IG52ZGltbV9mbHVzaCh0b19uZF9yZWdpb24obmRucy1cXHUwMDNlZGV2LnBhcmVudCksIE5VTEwpO1xcbi0tXFxuZHJpdmVycy9udmRpbW0vcG1lbS5jPTEyND1zdGF0aWMgdm9pZCB3cml0ZV9wbWVtKHZvaWQgKnBtZW1fYWRkciwgc3RydWN0IHBhZ2UgKnBhZ2UsXFxuLS1cXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtMTMyLVxcdFxcdGNodW5rID0gbWluX3QodW5zaWduZWQgaW50LCBsZW4sIFBBR0VfU0laRSAtIG9mZik7XFxuZHJpdmVycy9udmRpbW0vcG1lbS5jOjEzMzpcXHRcXHRtZW1jcHlfZmx1c2hjYWNoZShwbWVtX2FkZHIsIG1lbSArIG9mZiwgY2h1bmspO1xcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy0xMzQtXFx0XFx0a3VubWFwX2xvY2FsKG1lbSk7XFxuLS1cXG5kcml2ZXJzL252ZGltbS9yZWdpb25fZGV2cy5jPTExMDY9aW50IGdlbmVyaWNfbnZkaW1tX2ZsdXNoKHN0cnVjdCBuZF9yZWdpb24gKm5kX3JlZ2lvbilcXG4tLVxcbmRyaXZlcnMvbnZkaW1tL3JlZ2lvbl9kZXZzLmMtMTEyMS1cXHQgKiB0aGUgcGxhdGZvcm0gYnVmZmVyIGZsdXNoLiBOb3RlIHRoYXQgd2UndmUgYWxyZWFkeSBhcnJhbmdlZCBmb3IgcG1lbVxcbmRyaXZlcnMvbnZkaW1tL3JlZ2lvbl9kZXZzLmM6MTEyMjpcXHQgKiB3cml0ZXMgdG8gYXZvaWQgdGhlIGNhY2hlIHZpYSBtZW1jcHlfZmx1c2hjYWNoZSgpLiAgVGhlIGZpbmFsXFxuZHJpdmVycy9udmRpbW0vcmVnaW9uX2RldnMuYy0xMTIzLVxcdCAqIHdtYigpIGVuc3VyZXMgb3JkZXJpbmcgZm9yIHRoZSBOVkRJTU0gZmx1c2ggd3JpdGUuXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3N0cmluZy5oPTI3Mj1leHRlcm4gdm9pZCAqIG1lbWNocihjb25zdCB2b2lkICosaW50LF9fa2VybmVsX3NpemVfdCk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3N0cmluZy5oLTI3NC0jaWZuZGVmIF9fSEFWRV9BUkNIX01FTUNQWV9GTFVTSENBQ0hFXFxuaW5jbHVkZS9saW51eC9zdHJpbmcuaDoyNzU6c3RhdGljIGlubGluZSB2b2lkIG1lbWNweV9mbHVzaGNhY2hlKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgY250KVxcbmluY2x1ZGUvbGludXgvc3RyaW5nLmgtMjc2LXtcXG4tLVxcbmxpYi9pb3ZfaXRlci5jPTMwMz1zaXplX3QgbWVtY3B5X2Zyb21faXRlcl9mbHVzaGNhY2hlKHZvaWQgKml0ZXJfZnJvbSwgc2l6ZV90IHByb2dyZXNzLFxcbi0tXFxubGliL2lvdl9pdGVyLmMtMzA1LXtcXG5saWIvaW92X2l0ZXIuYzozMDY6XFx0bWVtY3B5X2ZsdXNoY2FjaGUodG8gKyBwcm9ncmVzcywgaXRlcl9mcm9tLCBsZW4pO1xcbmxpYi9pb3ZfaXRlci5jLTMwNy1cXHRyZXR1cm4gMDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMDc6NDE6MzYuMDExMTA2MTE1WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE1MDk3MTkxMjc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTWVtb3J5IENvcHkgT3B0aW1pemF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IGludHJvZHVjZXMgYG1lbWNweV9ub250ZW1wb3JhbGAsIHdoaWNoLCBpZiBub3QgYWxyZWFkeSBkZWZpbmVkLCBqdXN0IGZhbGxzIGJhY2sgdG8gYSBzdGFuZGFyZCBgbWVtY3B5YC4gQnV0IG9uIHg4NiwgaXQncyBhY3R1YWxseSB1c2luZyBhIGBtZW1jcHlfZmx1c2hjYWNoZWAgdW5kZXIgdGhlIGhvb2QuIFRoZSBjb3JlIG9mIHRoaXMgaXMgdGhlIG1vZGlmaWNhdGlvbiB0byBgYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmhgIOKAkyBpdCdzIGFkZGluZyB0aGVzZSBgbW92bnRpXypgIGluc3RydWN0aW9ucyBmb3IgZGlmZmVyZW50IGRhdGEgc2l6ZXMgKDgsIDE2LCAzMiwgNjQgYnl0ZXMpIHRoYXQgYXJlIHV0aWxpemVkIHdpdGhpbiBgbWVtY3B5X2ZsdXNoY2FjaGVgLlxuXG5UaGUgaW50ZXJlc3RpbmcgcGFydCBpcyB0aGF0IGBtZW1jcHlfZmx1c2hjYWNoZWAgaXMgbm93IHNwZWNpZmljYWxseSBvcHRpbWl6ZWQgZm9yIGZpeGVkIHNpemVzOiAzMiwgNDgsIDY0LCA4MCwgYW5kIDk2IGJ5dGVzLiBUaGF0IGltbWVkaWF0ZWx5IGp1bXBzIG91dCBhdCBtZSBiZWNhdXNlIHRob3NlIHNpemVzIGNvcnJlc3BvbmQgdG8gY29tbW9uIGBzdHJ1Y3QgcGFnZWAgc2l6ZXMuIFRoZXJlZm9yZSwgdGhpcyBvcHRpbWl6YXRpb24gaXMgY2xlYXJseSB0YXJnZXRpbmcgc2NlbmFyaW9zIHdoZXJlIGBzdHJ1Y3QgcGFnZWAgZGF0YSBpcyBiZWluZyBjb3BpZWQuXG5cbk5vdywgd2hlcmUgaXMgdGhpcyBhY3R1YWxseSBiZWluZyAqdXNlZCo/IEkgc2VlIHRoYXQgYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYCB1c2VzIGBtZW1jcHlfbm9udGVtcG9yYWxgIHRvIGNvcHkgYSBgc3RydWN0IHBhZ2VgIHRlbXBsYXRlLiBUaGF0J3MgYSBkaXJlY3QgaGl0LiBTbyBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgIGlzIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50IGZvciB0aGlzIG5ldyBsb2dpYy4gSG93ZXZlciwgSSBzaG91bGQgY2hlY2sgZm9yIG90aGVyIGNhbGwgc2l0ZXMsIGp1c3QgdG8gYmUgdGhvcm91Z2guIE9rYXksIHNvIEkgc2hvdWxkIGFsc28gY29uc2lkZXIgYG1lbXJlbWFwX3BhZ2VzYCBhbmQgYGRldm1fbWVtcmVtYXBfcGFnZXNgIGFzIHJlbGF0ZWQgZnVuY3Rpb25zLlxuXG5BZnRlciBhIHF1aWNrIHNjYW4sIGl0IGxvb2tzIGxpa2UgYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYCBpcyB0aGUgbWFpbiBvbmUgdGhhdCAqZXhlY3V0ZXMqIHRoZSBtb2RpZmllZCBjb2RlLiBJJ2xsIGFkZCB0aGF0IHRvIHRoZSBgRm9jdXNTeW1ib2xzYCBsaXN0LCB0byBtYWtlIHN1cmUgSSBhbSBmb2N1c2luZyBvbiB0aGUgcmVsZXZhbnQgcGFydHMuIFRoZSBvdGhlciBmdW5jdGlvbnMsIGxpa2UgYG1lbW1hcF9pbml0X2NvbXBvdW5kYCwgYHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9mcm9tX3RlbXBsYXRlYCwgYHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9zbG93YCwgYHpvbmVfZGV2aWNlX3RhaWxfcGFnZV9pbml0YCwgYHpvbmVfZGV2aWNlX3BhZ2VfdXBkYXRlX3RlbXBsYXRlYCwgYG1lbWNweV9ub250ZW1wb3JhbGAsIGFuZCBgbWVtY3B5X2ZsdXNoY2FjaGVgLCBzZWVtIGxlc3MgZGlyZWN0bHkgcmVsZXZhbnQgZm9yIG5vdywgYXMgdGhleSBhcmUgc3RhdGljIG9yIHN0YXRpYyBpbmxpbmUuXG5cbkxldCBtZSB0aGluayBhIGJpdCBtb3JlIGFib3V0IGhvdyB0aGluZ3MgYXJlIHdpcmVkIHRvZ2V0aGVyLiBPa2F5LCBzbyBgZGV2bV9tZW1yZW1hcF9wYWdlc2AgY2FsbHMgYG1lbXJlbWFwX3BhZ2VzYCwgYW5kIHRoYXQgaW4gdHVybiBjYWxscyBgcGFnZW1hcF9yYW5nZWAgd2hpY2ggKnRoZW4qIGNhbGxzIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAuIFNvIEkgd2lsbCBhZGQgYG1lbXJlbWFwX3BhZ2VzYCBhbmQgYGRldm1fbWVtcmVtYXBfcGFnZXNgIHRvIHRoZSBgRm9jdXNTeW1ib2xzYCBhcyB3ZWxsLlxuXG5JdCBzZWVtcyBsaWtlIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAgaXMgdGhlIG1haW4gdGFyZ2V0LiBBbmQgdGhlIGNoYW5nZXMgdG8gYGFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oYCBkaXJlY3RseSBhZmZlY3QgdGhlIGJlaGF2aW9yIG9mIGBtZW1jcHlfZmx1c2hjYWNoZWAuIFllcywgYG1lbWNweV9mbHVzaGNhY2hlYCBpcyBhbHNvIHVzZWQgaW4gb3RoZXIgcGxhY2VzIGxpa2UgYGRyaXZlcnMvZGF4L2ZzZGV2LmNgLCBgZHJpdmVycy9udmRpbW0vcG1lbS5jYCwgYW5kIGBsaWIvaW92X2l0ZXIuY2AsIGJ1dCBpdCBpcyBiZWluZyBvcHRpbWl6ZWQgZm9yIHNwZWNpZmljIHBhZ2Ugc2l6ZXMgaW4gKnRoaXMqIHBhdGNoLCB0aHVzIGl0IGlzIG1vc3QgcmVsZXZhbnQgdG8gIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAuXG5cbkxldCdzIHRoaW5rIGFib3V0IHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCB3b3VsZCBiZSByZWxldmFudCBoZXJlLiBJJ3ZlIGdvdCBgWk9ORV9ERVZJQ0VgLCBgREVWSUNFX1BSSVZBVEVgLCBhbmQgYFRFU1RfSE1NYC4gQW5kIGFsc28sIEkgc2hvdWxkIGtlZXAgYW4gZXllIG9uIGBGU19EQVhgLiBMZXQncyBjaGVjayBgRlNfREFYYCBkZXBlbmRlbmNpZXMuIEl0IGRlcGVuZHMgb24gYFpPTkVfREVWSUNFYC4gU28sIGBaT05FX0RFVklDRWAgaXMgdGhlIGtleS5cblxuTm93LCBsZXQncyBzZWUgaWYgYFRFU1RfSE1NYCBpcyBlbm91Z2ggdG8gdHJpZ2dlciBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgLiBZZXMhIGBobW1fZG1pcnJvcl9pbml0YCBjYWxscyBgZG1pcnJvcl9kZXZpY2VfaW5pdGAsIHdoaWNoIHRoZW4gY2FsbHMgYGRtaXJyb3JfYWxsb2NhdGVfY2h1bmtgLCBhbmQgZmluYWxseSB0aGF0IHRyaWdnZXJzIGBtZW1yZW1hcF9wYWdlc2AuIFRodXMsIGlmIGBURVNUX0hNTWAgaXMgYnVpbHQtaW4gb3IgbG9hZGVkIGFzIGEgbW9kdWxlLCBpdCdsbCBydW4gdGhlIGNvZGUuIFNwZWNpZmljYWxseSwgaWYgYFRFU1RfSE1NYCBpcyBidWlsdC1pbiwgdGhpcyB3aWxsIHJ1biBkdXJpbmcgdGhlIGJvb3QgcHJvY2Vzcy4gT2theSwgYGhtbV9kbWlycm9yX2luaXRgIGlzIGEgYG1vZHVsZV9pbml0YCwgc28gaWYgYnVpbHQtaW4sIGl0IHJ1bnMgZHVyaW5nIGtlcm5lbCBpbml0aWFsaXphdGlvbi4gTm93LCBJIHNob3VsZCBtYWtlIHN1cmUgdGhhdCB0aGUgYGRtaXJyb3JfYWxsb2NhdGVfY2h1bmtgIGNhbGwgdG8gYG1lbXJlbWFwX3BhZ2VzYCBpcyB1bmNvbmRpdGlvbmFsLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjkyMywiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMDc6NDE6NTEuMTA4MzAwODMxWiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTc5ODk2MjI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRtaXJyb3JfYWxsb2NhdGVfY2h1bmtcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibGliL3Rlc3RfaG1tLmM9NTE3PXN0YXRpYyBpbnQgZG1pcnJvcl93cml0ZShzdHJ1Y3QgZG1pcnJvciAqZG1pcnJvciwgc3RydWN0IGhtbV9kbWlycm9yX2NtZCAqY21kKVxcbi0tXFxubGliL3Rlc3RfaG1tLmMtNTU3LVxcbmxpYi90ZXN0X2htbS5jOjU1ODpzdGF0aWMgaW50IGRtaXJyb3JfYWxsb2NhdGVfY2h1bmsoc3RydWN0IGRtaXJyb3JfZGV2aWNlICptZGV2aWNlLFxcbmxpYi90ZXN0X2htbS5jLTU1OS1cXHRcXHRcXHRcXHQgIHN0cnVjdCBwYWdlICoqcHBhZ2UsIGJvb2wgaXNfbGFyZ2UpXFxuLS1cXG5saWIvdGVzdF9obW0uYz02OTA9c3RhdGljIHN0cnVjdCBwYWdlICpkbWlycm9yX2Rldm1lbV9hbGxvY19wYWdlKHN0cnVjdCBkbWlycm9yICpkbWlycm9yLFxcbi0tXFxubGliL3Rlc3RfaG1tLmMtNzIyLVxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZtZGV2aWNlLVxcdTAwM2Vsb2NrKTtcXG5saWIvdGVzdF9obW0uYzo3MjM6XFx0XFx0aWYgKGRtaXJyb3JfYWxsb2NhdGVfY2h1bmsobWRldmljZSwgXFx1MDAyNmRwYWdlLCBpc19sYXJnZSkpXFxubGliL3Rlc3RfaG1tLmMtNzI0LVxcdFxcdFxcdGdvdG8gZXJyb3I7XFxuLS1cXG5saWIvdGVzdF9obW0uYz0xNzc5PXN0YXRpYyBpbnQgZG1pcnJvcl9kZXZpY2VfaW5pdChzdHJ1Y3QgZG1pcnJvcl9kZXZpY2UgKm1kZXZpY2UsIGludCBpZClcXG4tLVxcbmxpYi90ZXN0X2htbS5jLTE3OTktXFx0LyogQnVpbGQgYSBsaXN0IG9mIGZyZWUgWk9ORV9ERVZJQ0Ugc3RydWN0IHBhZ2VzICovXFxubGliL3Rlc3RfaG1tLmM6MTgwMDpcXHRyZXQgPSBkbWlycm9yX2FsbG9jYXRlX2NodW5rKG1kZXZpY2UsIE5VTEwsIGZhbHNlKTtcXG5saWIvdGVzdF9obW0uYy0xODAxLVxcdGlmIChyZXQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDA3OjQxOjUyLjY4ODIxNzVaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTY5MzY3MzAzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbml0aWFsIFRob3VnaHRzIG9uIGBkbWlycm9yX2RldmljZV9pbml0YCBhbmQgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIGBkbWlycm9yX2RldmljZV9pbml0YCBjYWxscyBgZG1pcnJvcl9hbGxvY2F0ZV9jaHVua2Ag4oCTIG5pY2UsIHN0cmFpZ2h0Zm9yd2FyZC4gVGhhdCBmdW5jdGlvbiBpbiB0dXJuIGFsbG9jYXRlcyBhIGNodW5rIGFuZCB0aGVuIGNhbGxzIGBtZW1yZW1hcF9wYWdlc2AuIFRoaXMgaXMgZXhhY3RseSB3aGF0IEkgd2FzIGhvcGluZyBmb3IsIGFzIGl0IG1lYW5zIHRoaXMgY3JpdGljYWwgYWxsb2NhdGlvbiBpcyB1bmNvbmRpdGlvbmFsbHkgdHJpZ2dlcmVkIHJpZ2h0IGF0IG1vZHVsZSBsb2FkIG9yIGJvb3QuIEV4Y2VsbGVudC4gTm93LCBvbnRvIHRoZSBjb25maWd1cmF0aW9uIGZvciBgVEVTVF9ITU1gLlxuXG5SaWdodCwgbGV0J3Mgc2VlLi4uIGBURVNUX0hNTWAgZGVwZW5kcyBvbiBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGFuZCBgREVWSUNFX1BSSVZBVEVgLiBgREVWSUNFX1BSSVZBVEVgIGZ1cnRoZXIgcmVsaWVzIG9uIGBaT05FX0RFVklDRWAsIGFuZCBgWk9ORV9ERVZJQ0VgIHJlcXVpcmVzIGBNRU1PUllfSE9UUExVR2AsIGBNRU1PUllfSE9UUkVNT1ZFYCwgYW5kIGBTUEFSU0VNRU1fVk1FTU1BUGAuIE9rYXksIHNvIHRvIGJlIHN1cmUgdGhpcyBpcyB3b3JraW5nIHJpZ2h0IEknbGwgd2FudCB0byBhZGQ6XG4qICAgYFRFU1RfSE1NYFxuKiAgIGBERVZJQ0VfUFJJVkFURWBcbiogICBgWk9ORV9ERVZJQ0VgXG4qICAgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYFxuKiAgIGBNRU1PUllfSE9UUExVR2BcbiogICBgTUVNT1JZX0hPVFJFTU9WRWBcbiogICBgU1BBUlNFTUVNX1ZNRU1NQVBgXG5cbldhaXQgYSBzZWNvbmQsIGhvbGQgb24uLi4gaXNuJ3QgYFNQQVJTRU1FTV9WTUVNTUFQYCB1c3VhbGx5IGVuYWJsZWQgYnkgZGVmYXVsdCBvbiB4ODZfNjQ/IEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGF0LiBMZXQgbWUgcXVpY2tseSBzY2FuIGBtbS9LY29uZmlnYCB0byBjb25maXJtLiBJdCdzIGFsd2F5cyBiZXN0IHRvIGJlIHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1MzA2LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjU1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDA3OjQxOjU4LjM4MTg5MzU2M1oiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY5NTEwNzEyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgU1BBUlNFTUVNX1ZNRU1NQVBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz00NTE9Y29uZmlnIFNQQVJTRU1FTV9FWFRSRU1FXFxuLS1cXG5tbS9LY29uZmlnLTQ1NC1cXG5tbS9LY29uZmlnOjQ1NTpjb25maWcgU1BBUlNFTUVNX1ZNRU1NQVBfRU5BQkxFXFxubW0vS2NvbmZpZy00NTYtXFx0Ym9vbFxcbm1tL0tjb25maWctNDU3LVxcbm1tL0tjb25maWc6NDU4OmNvbmZpZyBTUEFSU0VNRU1fVk1FTU1BUFxcbm1tL0tjb25maWctNDU5LVxcdGRlZl9ib29sIHlcXG4tLVxcbm1tL0tjb25maWctNDY1LVxcbm1tL0tjb25maWc6NDY2OmNvbmZpZyBTUEFSU0VNRU1fVk1FTU1BUF9QUkVJTklUXFxubW0vS2NvbmZpZy00NjctXFx0Ym9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QwNzo0MjowMC4wNzcwMTIyNloiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NjAxMTQ2NTY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBDb2RlIE1vZGlmaWNhdGlvbioqXG5cbk9rYXksIHNvIGlmIGBTUEFSU0VNRU1fVk1FTU1BUF9FTkFCTEVgIGlzIHNldCwgYFNQQVJTRU1FTV9WTUVNTUFQYCBpcyBhdXRvbWF0aWNhbGx5IGRlZmluZWQuIFRoYXQncyBzdHJhaWdodGZvcndhcmQuIExldCdzIG1ha2Ugc3VyZSB3ZSBpbmNsdWRlIGBURVNUX0hNTWAsIGBERVZJQ0VfUFJJVkFURWAsIGBaT05FX0RFVklDRWAsIGFuZCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGluIG91ciBjb25zaWRlcmF0aW9uLiBJIHJlbWVtYmVyIFN5emthbGxlcidzIGNvbmZpZ3VyYXRpb25zIHR5cGljYWxseSBpbmNsdWRlIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAsIHNvIHRoYXQncyBzb21ldGhpbmcgdG8ga2VlcCBpbiBtaW5kLlxuXG5Ob3csIGxldCdzIHJlLWV4YW1pbmUgdGhpcyBwYXRjaCBhbmQgcGlucG9pbnQgdGhlIGtleSBmdW5jdGlvbnMgaW1wYWN0ZWQuIEl0IGxvb2tzIGxpa2UgdGhlIGNoYW5nZSB0b3VjaGVzIGBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaGAsIHNwZWNpZmljYWxseSB0byBvcHRpbWl6ZSBgbWVtY3B5X2ZsdXNoY2FjaGVgIGZvciBmaXhlZCBzaXplcy4gSW50ZXJlc3RpbmcuIGBtZW1jcHlfZmx1c2hjYWNoZWAgaXMgdXNlZCB3aXRoaW4gYG1lbWNweV9ub250ZW1wb3JhbGAsIHdoaWNoIHRoZW4gZ2V0cyBjYWxsZWQgYnkgYHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9mcm9tX3RlbXBsYXRlYC4gSW4gdHVybiwgdGhhdCBmdW5jdGlvbiBpcyB1c2VkIGJ5IGJvdGggYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYCBhbmQgYG1lbW1hcF9pbml0X2NvbXBvdW5kYC5cblxuVGhlcmVmb3JlLCBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgIGlzIHRoZSBwcmltYXJ5IGZ1bmN0aW9uIHRvIGZvY3VzIG9uLCBnaXZlbiB0aGUgY2FsbCBjaGFpbi4gQnV0IHdhaXQsIGlzIGBtZW1tYXBfaW5pdF9jb21wb3VuZGAgcmVhY2hhYmxlIHRvbz8gWWVzLCBhIHF1aWNrIGNoZWNrIHJldmVhbHMgdGhhdCBgbWVtbWFwX2luaXRfY29tcG91bmRgIGlzIGNhbGxlZCBieSBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgIGlmIGBwZ21hcC1cdTAwM2V2bWVtbWFwX3NoaWZ0YCBpcyBhY3R1YWxseSBzZXQuIE9rYXksIEknbGwgbmVlZCB0byBjaGVjayB0aGUgaW1wbGVtZW50YXRpb24gb2YgYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYCBpbiBgbW0vbW1faW5pdC5jYCB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBpbXBhY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2MDY3LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjg5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDA3OjQyOjA1LjY3ODE2MjcxNVoiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYwMzcxMzA3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1tYXBfaW5pdF9jb21wb3VuZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tbV9pbml0LmM9MTExNT1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgY29tcG91bmRfbnJfcGFnZXModW5zaWduZWQgbG9uZyBwZm4sXFxuLS1cXG5tbS9tbV9pbml0LmMtMTEzMC1cXG5tbS9tbV9pbml0LmM6MTEzMTpzdGF0aWMgdm9pZCBfX3JlZiBtZW1tYXBfaW5pdF9jb21wb3VuZChzdHJ1Y3QgcGFnZSAqaGVhZCxcXG5tbS9tbV9pbml0LmMtMTEzMi1cXHRcXHRcXHRcXHQgICAgICAgdW5zaWduZWQgbG9uZyBoZWFkX3BmbixcXG4tLVxcbm1tL21tX2luaXQuYz0xMTcyPXZvaWQgX19yZWYgbWVtbWFwX2luaXRfem9uZV9kZXZpY2Uoc3RydWN0IHpvbmUgKnpvbmUsXFxuLS1cXG5tbS9tbV9pbml0LmMtMTIyNC1cXG5tbS9tbV9pbml0LmM6MTIyNTpcXHRcXHRtZW1tYXBfaW5pdF9jb21wb3VuZChwYWdlLCBwZm4sIHpvbmVfaWR4LCBuaWQsIHBnbWFwLFxcbm1tL21tX2luaXQuYy0xMjI2LVxcdFxcdFxcdFxcdCAgICAgY29tcG91bmRfbnJfcGFnZXMocGZuLCBhbHRtYXAsIHBnbWFwKSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDA3OjQyOjA3LjI4MTg4MjI4M1oiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTQ0NTUyMjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGVjb25zdHJ1Y3RpbmcgdGhlIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAgRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBjb2RlLCBhbmQgaXQgbG9va3MgbGlrZSBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgIGlzIHRoZSBjZW50cmFsIHBvaW50IG9mIGludGVyZXN0LCB0aGUgbWFpbiBlbnRyeSBwb2ludCB0byB1bmRlcnN0YW5kLiBUaGF0J3MgZ29vZDsgaXQgZ2l2ZXMgbWUgYSBkZWZpbmVkIHBsYWNlIHRvIHN0YXJ0LlxuXG5Ob3cgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBiZXR0ZXIuIFRvIGdldCBhIGhvbGlzdGljIHZpZXcsIEkgd29uZGVyIGlmIG90aGVyIGZ1bmN0aW9ucyBjYWxsIGBtZW1jcHlfbm9udGVtcG9yYWxgPyBJdCdzIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIGhvdyBgbWVtY3B5X25vbnRlbXBvcmFsYCBpcyB1c2VkIGVsc2V3aGVyZSBpbiB0aGlzIGNvbnRleHQgc28gdGhhdCBJIGNhbiBzZWUgdGhlIHBvdGVudGlhbCBmb3IgY29kZSByZXVzZSBhbmQgd2hlcmUgdGhlIG9wdGltaXphdGlvbnMgbWlnaHQgYXBwbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2OTU4LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMDc6NDI6MTAuMjI2NDM3NDE0WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjQ5NDY0OTc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbWNweV9ub250ZW1wb3JhbFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaD0xMTI9c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG1lbWNweV9mbHVzaGNhY2hlKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLFxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmgtMTU3LVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oOjE1ODojZGVmaW5lIG1lbWNweV9ub250ZW1wb3JhbCBtZW1jcHlfbm9udGVtcG9yYWxcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaC0xNTktLypcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oLTE2Mi0gKi9cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaDoxNjM6c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG1lbWNweV9ub250ZW1wb3JhbCh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYyxcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaC0xNjQtXFx0XFx0c2l6ZV90IGNudClcXG4tLVxcbmluY2x1ZGUvbGludXgvc3RyaW5nLmg9Mjc1PXN0YXRpYyBpbmxpbmUgdm9pZCBtZW1jcHlfZmx1c2hjYWNoZSh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IGNudClcXG4tLVxcbmluY2x1ZGUvbGludXgvc3RyaW5nLmgtMjgwLVxcbmluY2x1ZGUvbGludXgvc3RyaW5nLmg6MjgxOiNpZm5kZWYgbWVtY3B5X25vbnRlbXBvcmFsXFxuaW5jbHVkZS9saW51eC9zdHJpbmcuaC0yODItLypcXG5pbmNsdWRlL2xpbnV4L3N0cmluZy5oOjI4MzogKiBtZW1jcHlfbm9udGVtcG9yYWwoKSByZXF1ZXN0cyBhIG5vbi10ZW1wb3JhbCBjb3B5IHdoZW4gdGhlXFxuaW5jbHVkZS9saW51eC9zdHJpbmcuaC0yODQtICogYXJjaGl0ZWN0dXJlIGhhcyBhIHN1aXRhYmxlIGJhY2tlbmQuIEFyY2hpdGVjdHVyZXMgd2l0aG91dCBhXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3N0cmluZy5oLTI4OS0gKi9cXG5pbmNsdWRlL2xpbnV4L3N0cmluZy5oOjI5MDojZGVmaW5lIG1lbWNweV9ub250ZW1wb3JhbChkc3QsIHNyYywgbGVuKSBcXFxcXFxuaW5jbHVkZS9saW51eC9zdHJpbmcuaC0yOTEtXFx0KCh2b2lkKW1lbWNweShkc3QsIHNyYywgbGVuKSlcXG4tLVxcbm1tL21tX2luaXQuYz0xMDk1PXN0YXRpYyB2b2lkIHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9mcm9tX3RlbXBsYXRlKHN0cnVjdCBwYWdlICpwYWdlLFxcbi0tXFxubW0vbW1faW5pdC5jLTExMDMtXFx0em9uZV9kZXZpY2VfcGFnZV91cGRhdGVfdGVtcGxhdGUodGVtcGxhdGUsIHBmbik7XFxubW0vbW1faW5pdC5jOjExMDQ6XFx0bWVtY3B5X25vbnRlbXBvcmFsKHBhZ2UsIHRlbXBsYXRlLCBzaXplb2YoKnBhZ2UpKTtcXG5tbS9tbV9pbml0LmMtMTEwNS19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDA3OjQyOjExLjg3NTkwODI0MloiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTU0MTM1OTE3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFN0cmF0ZWd5IGZvciBaT05FX0RFVklDRSBNZW1vcnkgT3B0aW1pemF0aW9uKipcblxuT2theSwgc28gaGVyZSdzIHRoZSBicmVha2Rvd24gb2Ygd2hhdCBJIG5lZWQgdG8gZm9jdXMgb24uIEl0IGxvb2tzIGxpa2UgYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYCBpcyB0aGUgY2VudHJhbCBmdW5jdGlvbiBmb3IgdGhpcyBwYXRjaCwgYXMgaXQncyB0aGUgY29yZSBlbnRyeSBwb2ludCBmb3IgdGhlIG9wdGltaXplZCBtZW1vcnkgbWFuYWdlbWVudCB3aXRoaW4gYFpPTkVfREVWSUNFYC4gIEkgc2hvdWxkIGFsc28gaW5jbHVkZSBgbWVtcmVtYXBfcGFnZXNgIGFuZCBgZGV2bV9tZW1yZW1hcF9wYWdlc2AgaW4gbXkgYEZvY3VzU3ltYm9sc2AgdG8gZW5zdXJlIHRoZSBmdXp6ZXIgZ2V0cyB0byB0aGF0IGNyaXRpY2FsIHBhdGguICBgem9uZV9kZXZpY2VfcGFnZV9pbml0X2Zyb21fdGVtcGxhdGVgIGRvZXNuJ3Qgc2VlbSB0byBiZSBhIGtleSBlbnRyeSBwb2ludCwganVzdCBhIGhlbHBlciwgc28gSSdsbCBpZ25vcmUgdGhhdC5cblxuTGV0J3MgY2xhcmlmeTogTXkgcHJpbWFyeSBnb2FsIGlzIHRvIGZ1enogdGhlIGBaT05FX0RFVklDRWAgbWVtb3J5IG9wdGltaXphdGlvbi4gVGhpcyBvcHRpbWl6YXRpb24gcmV2b2x2ZXMgYXJvdW5kIHVzaW5nIHRlbXBsYXRlcyBhbmQgbm9uLXRlbXBvcmFsIG1lbW9yeSBjb3BpZXMgZHVyaW5nIGBzdHJ1Y3QgcGFnZWAgaW5pdGlhbGl6YXRpb24uIFRoaXMgaXMgYSBjcnVjaWFsIGFyZWEgd2l0aGluIG1lbW9yeSBtYW5hZ2VtZW50LCB3aGljaCBjYW4gYmUgcmVhY2hlZCB0aHJvdWdoIGhvdHBsdWdnaW5nIGRldmljZSBtZW1vcnksIHN1Y2ggYXMgdGhyb3VnaCBsb2FkaW5nIHRoZSBgVEVTVF9ITU1gIG1vZHVsZSBvciB3aXRoIERBWC9QTUVNIGRldmljZXMuXG5cblRoZSBwYXRjaCBpbmNsdWRlcyBtb2RpZmljYXRpb25zIHRvIGBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaGAgd2l0aCB0aGUgYWRkaXRpb24gb2YgYG1vdm50aV8qYCBpbnN0cnVjdGlvbnMgYW5kIHRoZWlyIHVzZSBpbiBgbWVtY3B5X2ZsdXNoY2FjaGVgLiAgV2hpbGUgYG1lbWNweV9mbHVzaGNhY2hlYCBpdHNlbGYgaXMgd2lkZWx5IHVzZWQsIHBhcnRpY3VsYXJseSBpbiBjb250ZXh0cyBsaWtlIGBkcml2ZXJzL2RheC9mc2Rldi5jYCwgYGRyaXZlcnMvbnZkaW1tL3BtZW0uY2AsIGBsaWIvaW92X2l0ZXIuY2AsIGFuZCBgZHJpdmVycy9tZC9kbS13cml0ZWNhY2hlLmNgLCB0aGUgb3B0aW1pemF0aW9uIGlzICpzcGVjaWZpY2FsbHkqIHRhaWxvcmVkIGZvciB0aGUgc2l6ZXMgb2YgYHN0cnVjdCBwYWdlYCBvbiB4ODZfNjQsIHdoaWNoIGlzIDY0IGJ5dGVzICh3aXRob3V0IGBDT05GSUdfTUVNQ0dgKSwgb3IgODAgb3IgOTYgYnl0ZXMgKHdpdGggb3RoZXIgY29uZmlncykuIFRoZXJlZm9yZSwgdGhlIGZ1enplciBpcyBiZXN0IGRpcmVjdGVkIHRvd2FyZHMgYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYCBkaXJlY3RseS5cblxuVGhlIGBURVNUX0hNTWAgbW9kdWxlIHNlZW1zIGxpa2UgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBPbiBsb2FkaW5nLCBgVEVTVF9ITU1gIGNhbGxzIGBkbWlycm9yX2RldmljZV9pbml0YCwgd2hpY2ggdGhlbiBjYWxscyBgZG1pcnJvcl9hbGxvY2F0ZV9jaHVua2AuIFRoaXMgdWx0aW1hdGVseSBsZWFkcyB0byBgbWVtcmVtYXBfcGFnZXNgIGFuZCB0aGVuIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAuICBJIHNob3VsZCBjaGVjayBpZiBgVEVTVF9ITU1gIGlzIGVub3VnaC4gVGhlIGBobW1fZG1pcnJvcl9jbWRgIGlvY3RsIGluIGBURVNUX0hNTWAgZ2l2ZXMgbW9yZSBhbGxvY2F0aW9uIGNvbnRyb2wsIHNvIGlmIGBURVNUX0hNTWAgaXMgYnVpbHQtaW4gdGhpcyBoYXBwZW5zIGF0IGJvb3QuIE90aGVyd2lzZSwgSSBjYW4gdXNlIGFuIGlvY3RsIHRvIHRyaWdnZXIgbW9yZSBhbGxvY2F0aW9ucy5cblxuQ3J1Y2lhbGx5LCB1c2VyIHNwYWNlICpjYW4qIGRpcmVjdGx5IHRyaWdnZXIgdGhpcyB0aHJvdWdoIHBhZ2UgZmF1bHRzLiBgZG1pcnJvcl9hbGxvY2F0ZV9jaHVua2AgaXMgYWxzbyBjYWxsZWQgdGhyb3VnaCBgZG1pcnJvcl9kZXZtZW1fYWxsb2NfcGFnZWAsIHdoaWNoIGlzIHVzZWQgZHVyaW5nIHBhZ2UgZmF1bHRzIHRocm91Z2ggYGRtaXJyb3JfZG9fd3JpdGVgIGFuZCBgZG1pcnJvcl9kb19yZWFkYC4gVGhpcyBtZWFucyBJIGNhbiBtbWFwIHRoZSBkZXZpY2UgbWVtb3J5IGFuZCBhY2Nlc3MgaXQsIG9yIHVzZSB0aGUgaW9jdGxzLCB0byB0cmlnZ2VyIHRoZSBjb2RlIHBhdGguICBUaGF0J3MgZ3JlYXQgZm9yIGZ1enppbmcgYmVjYXVzZSBpdCBnaXZlcyBhIGxvdCBtb3JlIGNvbnRyb2wuIEkgY2FuIHVzZSB1c2VyIHNwYWNlIHRvIHNldCBpdCB1cCBuaWNlbHkuXG5cblNvLCBoZXJlJ3MgdGhlIHBsYW46XG5cbiogICAqKldvcnRoRnV6emluZzogVHJ1ZSoqIChBYnNvbHV0ZWx5LCB0aGlzIGlzIGhpZ2gtdmFsdWUpXG4qICAgKipGb2N1c1N5bWJvbHM6KiogYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYCwgYG1lbXJlbWFwX3BhZ2VzYCwgYGRldm1fbWVtcmVtYXBfcGFnZXNgXG4qICAgKipFbmFibGVDb25maWdzOioqIGBaT05FX0RFVklDRWAsIGBERVZJQ0VfUFJJVkFURWAsIGBURVNUX0hNTWAsIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWBcblxuVGhpcyBsb29rcyBsaWtlIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgYSBmdXp6ZXIhIEknbGwgbm93IGV4cGxvcmUgYGRtaXJyb3JfZGV2bWVtX2FsbG9jX3BhZ2VgLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNzcwNSwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QwNzo0MjoyMy40MTcyNzExOTZaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MTMxNjExNTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZG1pcnJvcl9kZXZtZW1fYWxsb2NfcGFnZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJsaWIvdGVzdF9obW0uYy00MS0gKiBGb3IgZGV2aWNlX3ByaXZhdGUgcGFnZXMsIGRwYWdlIGlzIGp1c3QgYSBkdW1teSBzdHJ1Y3QgcGFnZVxcbmxpYi90ZXN0X2htbS5jOjQyOiAqIHJlcHJlc2VudGluZyBhIHBpZWNlIG9mIGRldmljZSBtZW1vcnkuIGRtaXJyb3JfZGV2bWVtX2FsbG9jX3BhZ2VcXG5saWIvdGVzdF9obW0uYy00My0gKiBhbGxvY2F0ZXMgYSByZWFsIHN5c3RlbSBtZW1vcnkgcGFnZSBhcyBiYWNraW5nIHN0b3JhZ2UgdG8gZmFrZSBhXFxuLS1cXG5saWIvdGVzdF9obW0uYz01NTg9c3RhdGljIGludCBkbWlycm9yX2FsbG9jYXRlX2NodW5rKHN0cnVjdCBkbWlycm9yX2RldmljZSAqbWRldmljZSxcXG4tLVxcbmxpYi90ZXN0X2htbS5jLTY4OS1cXG5saWIvdGVzdF9obW0uYzo2OTA6c3RhdGljIHN0cnVjdCBwYWdlICpkbWlycm9yX2Rldm1lbV9hbGxvY19wYWdlKHN0cnVjdCBkbWlycm9yICpkbWlycm9yLFxcbmxpYi90ZXN0X2htbS5jLTY5MS1cXHRcXHRcXHRcXHRcXHQgICAgICBib29sIGlzX2xhcmdlKVxcbi0tXFxubGliL3Rlc3RfaG1tLmM9NzM5PXN0YXRpYyB2b2lkIGRtaXJyb3JfbWlncmF0ZV9hbGxvY19hbmRfY29weShzdHJ1Y3QgbWlncmF0ZV92bWEgKmFyZ3MsXFxuLS1cXG5saWIvdGVzdF9obW0uYy03NzAtXFx0XFx0fSBlbHNlXFxubGliL3Rlc3RfaG1tLmM6NzcxOlxcdFxcdFxcdGRwYWdlID0gZG1pcnJvcl9kZXZtZW1fYWxsb2NfcGFnZShkbWlycm9yLCBpc19sYXJnZSk7XFxubGliL3Rlc3RfaG1tLmMtNzcyLVxcbi0tXFxubGliL3Rlc3RfaG1tLmMtNzg5LVxcdFxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBuciBcXHUwMDI2XFx1MDAyNiBhZGRyIFxcdTAwM2MgYXJncy1cXHUwMDNlZW5kOyBpKyspIHtcXG5saWIvdGVzdF9obW0uYzo3OTA6XFx0XFx0XFx0XFx0ZHBhZ2UgPSBkbWlycm9yX2Rldm1lbV9hbGxvY19wYWdlKGRtaXJyb3IsIGZhbHNlKTtcXG5saWIvdGVzdF9obW0uYy03OTEtXFx0XFx0XFx0XFx0cnBhZ2UgPSBCQUNLSU5HX1BBR0UoZHBhZ2UpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QwNzo0MjoyNS4wMzA0MzkwOTVaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTE3MDYwMDYwNTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgYGRtaXJyb3JgIEZ1enppbmcgU3RyYXRlZ3kqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gdGhpbmtpbmcgYWJvdXQgaG93IHRvIGVmZmVjdGl2ZWx5IGZ1enogdGhpcyBgZG1pcnJvcmAgZnVuY3Rpb25hbGl0eSwgYW5kIGhlcmUncyBteSBsaW5lIG9mIHRob3VnaHQuIEZpcnN0LCBJIHJlbWVtYmVyIHRoYXQgYGRtaXJyb3JfZGV2bWVtX2FsbG9jX3BhZ2VgIGNhbGxzIGBkbWlycm9yX2FsbG9jYXRlX2NodW5rYCB3aGVuIGl0IG5lZWRzIG1vcmUgbWVtb3J5LiBBbmQgY3JpdGljYWxseSwgYGRtaXJyb3JfbWlncmF0ZV9hbGxvY19hbmRfY29weWAgaXMgdHJpZ2dlcmVkIGR1cmluZyBtaWdyYXRpb24gdG8gZGV2aWNlIG1lbW9yeSB2aWEgdGhhdCBgSE1NX0RNSVJST1JfTUlHUkFURV9UT19ERVZgIGlvY3RsLiBTbywgdGhhdCBtZWFucyBzeXprYWxsZXIgY2FuIHJlYWRpbHkgZXhlcmNpc2UgdGhpcyBjb2RlIHBhdGgganVzdCBieSBvcGVuaW5nIGAvZGV2L2htbV9kbWlycm9yMGAgYW5kIHRoZW4gaXNzdWluZyB0aGUgcmVsZXZhbnQgaW9jdGxzLlxuXG5Ob3csIGxldCdzIG5haWwgZG93biB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMuIFdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBidWlsZCBoYXM6IGBaT05FX0RFVklDRWAsIGBERVZJQ0VfUFJJVkFURWAsIGBURVNUX0hNTWAsIGFuZCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGVuYWJsZWQuIExldCBtZSBqdXN0IGNvbmZpcm0gYW55IG90aGVyIGRlcGVuZGVuY2llcyBmb3IgYFRFU1RfSE1NYCBiZWNhdXNlIEkga25vdyB0aG9zZSB0aGluZ3MgY2FuIGdldCB0cmlja3kuIFJpZ2h0LCBpdCBkZXBlbmRzIG9uIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgYW5kIGBERVZJQ0VfUFJJVkFURWAuIEFuZCBgREVWSUNFX1BSSVZBVEVgIG5lZWRzIGBaT05FX0RFVklDRWAsIHdoaWNoIGluIHR1cm4gbmVlZHMgYE1FTU9SWV9IT1RQTFVHYCwgYE1FTU9SWV9IT1RSRU1PVkVgLCBhbmQgYFNQQVJTRU1FTV9WTUVNTUFQYC4gRnVydGhlcm1vcmUsIGBNRU1PUllfSE9UUExVR2AgZGVwZW5kcyBvbiBlaXRoZXIgYFNQQVJTRU1FTWAgb3IgYFg4Nl82NGAsIGFuZCBgTUVNT1JZX0hPVFJFTU9WRWAgcmVxdWlyZXMgYE1FTU9SWV9IT1RQTFVHYCBhbmQgYEFSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkVgLiBTbywgdG8gYmUgY2VydGFpbiwgd2Ugc2hvdWxkIGhhdmUgdGhlIGZvbGxvd2luZyBlbmFibGVkOlxuXG5gWk9ORV9ERVZJQ0VgXG5gREVWSUNFX1BSSVZBVEVgXG5gVEVTVF9ITU1gXG5gVFJBTlNQQVJFTlRfSFVHRVBBR0VgXG5gTUVNT1JZX0hPVFBMVUdgXG5gTUVNT1JZX0hPVFJFTU9WRWBcblxuQWN0dWFsbHksIHdhaXQgYSBzZWNvbmQuIGBNRU1PUllfSE9UUExVR2AgYW5kIGBNRU1PUllfSE9UUkVNT1ZFYCBhcmUgcHJldHR5IHN0YW5kYXJkIGluIHN5emthbGxlciBjb25maWdzLCBidXQgaXTigJlzIGFsd2F5cyBzYWZlciB0byBsaXN0IHRoZW0gZXhwbGljaXRseSB0byBiZSBjZXJ0YWluLiBZZXMsIEknbGwgZ28gd2l0aCB0aGF0IG1vcmUgY29uc2VydmF0aXZlIHNldC5cblxuTm93LCBsZXQncyByZWZpbmUgdGhlIGZ1enppbmcgc3ltYm9scy4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgb2YgYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYCwgYG1lbXJlbWFwX3BhZ2VzYCwgYW5kIGBkZXZtX21lbXJlbWFwX3BhZ2VzYC4gTGV0IG1lIGNoZWNrIGV4cG9ydCBzdGF0dXM6IGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAgaXNuJ3QgZXhwb3J0ZWQsIGJ1dCBpdCdzIGdsb2JhbCBhbmQgdGhlcmVmb3JlIGFjY2Vzc2libGUuIGBtZW1yZW1hcF9wYWdlc2AgaXMgZXhwb3J0ZWQsIGFuZCBgZGV2bV9tZW1yZW1hcF9wYWdlc2AgaXMgYWxzbyBleHBvcnRlZC5cblxuSSB0aGluayB0aGlzIGxvb2tzIGdvb2QuXG5cbk9rYXksIG9uZSBsYXN0IHBhc3Mgb3ZlciB0aGUgcGF0Y2ggaXRzZWxmIHRvIGVuc3VyZSBJIGhhdmVuJ3Qgb3Zlcmxvb2tlZCBhbnkgaGlkZGVuIGZlYXR1cmVzIG9yIHJlbGF0ZWQgY29kZS4gSSBzZWUgdGhhdCB0aGUgcGF0Y2ggaW50cm9kdWNlcyBgc2V0X3BhZ2Vfc2VjdGlvbl9mcm9tX3BmbmAgaW4gYGluY2x1ZGUvbGludXgvbW0uaGAuIEl0IGNoYW5nZXMgYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYCBhbmQgYG1lbW1hcF9pbml0X2NvbXBvdW5kYCB0byB1c2UgYSB0ZW1wbGF0ZSBwYWdlIGFuZCBgbWVtY3B5X25vbnRlbXBvcmFsYC4gSXQgYWRkcyBgbWVtY3B5X25vbnRlbXBvcmFsYCB0byBgaW5jbHVkZS9saW51eC9zdHJpbmcuaGAgYW5kIGBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaGAuIEFkZGl0aW9uYWxseSwgaXQgaW5jbHVkZXMgYG1vdm50aV84YCwgYG1vdm50aV8xNmAsIGBtb3ZudGlfMzJgLCBhbmQgYG1vdm50aV82NGAgaW4gYGFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oYC4gRmluYWxseSwgdGhlIHBhdGNoIGNoYW5nZXMgYG1lbWNweV9mbHVzaGNhY2hlYCBpbiBgYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmhgLlxuXG5FdmVyeXRoaW5nIGhlcmUgaXMgZnVuZGFtZW50YWxseSBhYm91dCBvcHRpbWl6aW5nIGBzdHJ1Y3QgcGFnZWAgaW5pdGlhbGl6YXRpb24gZm9yIGBaT05FX0RFVklDRWAgbWVtb3J5LiBJbXBvcnRhbnRseSwgdGhlIGxvZ2ljIHNlZW1zIGZ1bmN0aW9uYWwsIHJlYWNoYWJsZSwgYW5kIHF1aXRlIHN1c2NlcHRpYmxlIHRvIHN1YnRsZSBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZXMuIEZ1enppbmcgaXQgaXMgZGVmaW5pdGVseSB3b3J0aCBpdC4gV2UncmUgZGVhbGluZyB3aXRoIG1lbW9yeSBpbml0aWFsaXphdGlvbiBhbmQgbm9uLXRlbXBvcmFsIGNvcGllcywgYW5kIHRob3NlIG9mdGVuIGhhcmJvciBhbGlnbm1lbnQgaXNzdWVzLCBtaXNzaW5nIGJhcnJpZXJzLCBvciBpbmNvcnJlY3Qgc2l6ZXMuXG5cbk5vdywgSSdtIHJlYWR5IHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzk4MjIsIk91dHB1dFRva2VucyI6MTgzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Nzg1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDA3OjQyOjM2LjczNjQ0ODA3N1oiLCJTZXEiOjQ0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczNjc1MzY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJaT05FX0RFVklDRVwiLFxuICAgIFwiREVWSUNFX1BSSVZBVEVcIixcbiAgICBcIlRFU1RfSE1NXCIsXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiLFxuICAgIFwiTUVNT1JZX0hPVFBMVUdcIixcbiAgICBcIk1FTU9SWV9IT1RSRU1PVkVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtZW1tYXBfaW5pdF96b25lX2RldmljZVwiLFxuICAgIFwibWVtcmVtYXBfcGFnZXNcIixcbiAgICBcImRldm1fbWVtcmVtYXBfcGFnZXNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvcHRpbWl6ZXMgc3RydWN0IHBhZ2UgaW5pdGlhbGl6YXRpb24gZm9yIFpPTkVfREVWSUNFIG1lbW9yeSBieSB1c2luZyBhIHRlbXBsYXRlIHBhZ2UgYW5kIG5vbi10ZW1wb3JhbCBtZW1vcnkgY29waWVzIChtZW1jcHlfbm9udGVtcG9yYWwpLiBUaGlzIGlzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgcmVhY2hhYmxlIHZpYSBkZXZpY2UgbWVtb3J5IGhvdHBsdWcsIHN1Y2ggYXMgd2hlbiBsb2FkaW5nIHRoZSBURVNUX0hNTSBtb2R1bGUgb3IgdXNpbmcgREFYL1BNRU0gZGV2aWNlcy4gRnV6emluZyB0aGlzIGlzIGltcG9ydGFudCB0byBjYXRjaCBwb3RlbnRpYWwgYWxpZ25tZW50IG9yIG1lbW9yeSBjb3JydXB0aW9uIGlzc3VlcyBkdXJpbmcgcGFnZSBpbml0aWFsaXphdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJaT05FX0RFVklDRVwiLFxuICAgIFwiREVWSUNFX1BSSVZBVEVcIixcbiAgICBcIlRFU1RfSE1NXCIsXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiLFxuICAgIFwiTUVNT1JZX0hPVFBMVUdcIixcbiAgICBcIk1FTU9SWV9IT1RSRU1PVkVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtZW1tYXBfaW5pdF96b25lX2RldmljZVwiLFxuICAgIFwibWVtcmVtYXBfcGFnZXNcIixcbiAgICBcImRldm1fbWVtcmVtYXBfcGFnZXNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvcHRpbWl6ZXMgc3RydWN0IHBhZ2UgaW5pdGlhbGl6YXRpb24gZm9yIFpPTkVfREVWSUNFIG1lbW9yeSBieSB1c2luZyBhIHRlbXBsYXRlIHBhZ2UgYW5kIG5vbi10ZW1wb3JhbCBtZW1vcnkgY29waWVzIChtZW1jcHlfbm9udGVtcG9yYWwpLiBUaGlzIGlzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgcmVhY2hhYmxlIHZpYSBkZXZpY2UgbWVtb3J5IGhvdHBsdWcsIHN1Y2ggYXMgd2hlbiBsb2FkaW5nIHRoZSBURVNUX0hNTSBtb2R1bGUgb3IgdXNpbmcgREFYL1BNRU0gZGV2aWNlcy4gRnV6emluZyB0aGlzIGlzIGltcG9ydGFudCB0byBjYXRjaCBwb3RlbnRpYWwgYWxpZ25tZW50IG9yIG1lbW9yeSBjb3JydXB0aW9uIGlzc3VlcyBkdXJpbmcgcGFnZSBpbml0aWFsaXphdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowjhv67[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-03 07:23:55 +0000 UTC FinishedAt: 2026-08-03 07:42:37 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "f5098b6bae761e346ebcd9da7f95622c04733cff", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ZONE_DEVICE", "DEVICE_PRIVATE", "TEST_HMM", "TRANSPARENT_HUGEPAGE", "MEMORY_HOTPLUG", "MEMORY_HOTREMOVE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "f5098b6bae761e346ebcd9da7f95622c04733cff", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ZONE_DEVICE", "DEVICE_PRIVATE", "TEST_HMM", "TRANSPARENT_HUGEPAGE", "MEMORY_HOTPLUG", "MEMORY_HOTREMOVE" ], "series_id": "31bdad63-31c2-4e82-89db-41b7bdcb73e6" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "memmap_init_zone_device", "memremap_pages", "devm_memremap_pages" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDA3OjQwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1pPTkVfREVWSUNFJiMzNDssCiAgICAmIzM0O0RFVklDRV9QUklWQVRFJiMzNDssCiAgICAmIzM0O1RFU1RfSE1NJiMzNDssCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDssCiAgICAmIzM0O01FTU9SWV9IT1RQTFVHJiMzNDssCiAgICAmIzM0O01FTU9SWV9IT1RSRU1PVkUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttZW1tYXBfaW5pdF96b25lX2RldmljZSYjMzQ7LAogICAgJiMzNDttZW1yZW1hcF9wYWdlcyYjMzQ7LAogICAgJiMzNDtkZXZtX21lbXJlbWFwX3BhZ2VzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9wdGltaXplcyBzdHJ1Y3QgcGFnZSBpbml0aWFsaXphdGlvbiBmb3IgWk9ORV9ERVZJQ0UgbWVtb3J5IGJ5IHVzaW5nIGEgdGVtcGxhdGUgcGFnZSBhbmQgbm9uLXRlbXBvcmFsIG1lbW9yeSBjb3BpZXMgKG1lbWNweV9ub250ZW1wb3JhbCkuIFRoaXMgaXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyByZWFjaGFibGUgdmlhIGRldmljZSBtZW1vcnkgaG90cGx1Zywgc3VjaCBhcyB3aGVuIGxvYWRpbmcgdGhlIFRFU1RfSE1NIG1vZHVsZSBvciB1c2luZyBEQVgvUE1FTSBkZXZpY2VzLiBGdXp6aW5nIHRoaXMgaXMgaW1wb3J0YW50IHRvIGNhdGNoIHBvdGVudGlhbCBhbGlnbm1lbnQgb3IgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzIGR1cmluZyBwYWdlIGluaXRpYWxpemF0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDA3OjQwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNjE3YWMxNWM5MmZhOTIzNDM3MTFhZTYxZDY1OTNlMGExYWExNGU0NFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDMgMDc6NDA6MTEgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaFxuaW5kZXggNDYzNTYxNjg2M2Y1My4uYmM2YTlmMzRiMzQ2YSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaFxuQEAgLTgyLDcgJiM0Mzs4MiwzNSBAQCBpbnQgc3RyY21wKGNvbnN0IGNoYXIgKmNzLCBjb25zdCBjaGFyICpjdCk7XG4gI2lmZGVmIENPTkZJR19BUkNIX0hBU19VQUNDRVNTX0ZMVVNIQ0FDSEVcbiAjZGVmaW5lIF9fSEFWRV9BUkNIX01FTUNQWV9GTFVTSENBQ0hFIDFcbiB2b2lkIF9fbWVtY3B5X2ZsdXNoY2FjaGUodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBjbnQpO1xuLXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtZW1jcHlfZmx1c2hjYWNoZSh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IGNudClcbiYjNDM7XG4mIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtb3ZudGlfOCh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYylcbiYjNDM7e1xuJiM0MztcdGFzbSB2b2xhdGlsZShcJiMzNDttb3ZudGlxICUxLCAlMFwmIzM0O1xuJiM0MztcdFx0ICAgICA6IFwmIzM0Oz1tXCYjMzQ7KCoodTY0ICopZHN0KVxuJiM0MztcdFx0ICAgICA6IFwmIzM0O3JcJiMzNDsoKihjb25zdCB1NjQgKilzcmMpXG4mIzQzO1x0XHQgICAgIDogXCYjMzQ7bWVtb3J5XCYjMzQ7KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG1vdm50aV8xNih2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYylcbiYjNDM7e1xuJiM0MztcdG1vdm50aV84KGRzdCwgc3JjKTtcbiYjNDM7XHRtb3ZudGlfOChkc3QgJiM0MzsgOCwgc3JjICYjNDM7IDgpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbW92bnRpXzMyKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjKVxuJiM0Mzt7XG4mIzQzO1x0bW92bnRpXzE2KGRzdCwgc3JjKTtcbiYjNDM7XHRtb3ZudGlfMTYoZHN0ICYjNDM7IDE2LCBzcmMgJiM0MzsgMTYpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbW92bnRpXzY0KHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjKVxuJiM0Mzt7XG4mIzQzO1x0bW92bnRpXzMyKGRzdCwgc3JjKTtcbiYjNDM7XHRtb3ZudGlfMzIoZHN0ICYjNDM7IDMyLCBzcmMgJiM0MzsgMzIpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbWVtY3B5X2ZsdXNoY2FjaGUodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsXG4mIzQzO1x0XHRcdFx0XHQgICAgICBzaXplX3QgY250KVxuIHtcbiBcdGlmIChfX2J1aWx0aW5fY29uc3RhbnRfcChjbnQpKSB7XG4gXHRcdHN3aXRjaCAoY250KSB7XG5AQCAtOTYsMTAgJiM0MzsxMjQsNDggQEAgc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG1lbWNweV9mbHVzaGNhY2hlKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3RcbiBcdFx0XHRcdGFzbSAoXCYjMzQ7bW92bnRpcSAlMSwgJTBcJiMzNDsgOiBcJiMzNDs9bVwmIzM0OygqKHU2NCAqKWRzdCkgOiBcJiMzNDtyXCYjMzQ7KCoodTY0ICopc3JjKSk7XG4gXHRcdFx0XHRhc20gKFwmIzM0O21vdm50aXEgJTEsICUwXCYjMzQ7IDogXCYjMzQ7PW1cJiMzNDsoKih1NjQgKikoZHN0ICYjNDM7IDgpKSA6IFwmIzM0O3JcJiMzNDsoKih1NjQgKikoc3JjICYjNDM7IDgpKSk7XG4gXHRcdFx0XHRyZXR1cm47XG4mIzQzO1x0XHRcdC8qXG4mIzQzO1x0XHRcdCAqIFRoZSByZWxldmFudCBmaXhlZC1zaXplIGNvcGllcyBoZXJlIGFyZSB0aGVcbiYjNDM7XHRcdFx0ICogeDg2XzY0IHN0cnVjdCBwYWdlIHNpemVzOiA2NCwgODAsIGFuZCA5NiBieXRlcy5cbiYjNDM7XHRcdFx0ICogS2VlcCAzMi1ieXRlIGFuZCA0OC1ieXRlIGNvcGllcyBpbmxpbmUgYXMgd2VsbFxuJiM0MztcdFx0XHQgKiBpbnN0ZWFkIG9mIHNlbmRpbmcgdGhvc2UgbmVhcmJ5IGZpeGVkLXNpemVcbiYjNDM7XHRcdFx0ICogY2FzZXMgYmFjayB0byBfX21lbWNweV9mbHVzaGNhY2hlKCkuXG4mIzQzO1x0XHRcdCAqL1xuJiM0MztcdFx0XHRjYXNlIDMyOlxuJiM0MztcdFx0XHRcdG1vdm50aV8zMihkc3QsIHNyYyk7XG4mIzQzO1x0XHRcdFx0cmV0dXJuO1xuJiM0MztcdFx0XHRjYXNlIDQ4OlxuJiM0MztcdFx0XHRcdG1vdm50aV8zMihkc3QsIHNyYyk7XG4mIzQzO1x0XHRcdFx0bW92bnRpXzE2KGRzdCAmIzQzOyAzMiwgc3JjICYjNDM7IDMyKTtcbiYjNDM7XHRcdFx0XHRyZXR1cm47XG4mIzQzO1x0XHRcdGNhc2UgNjQ6XG4mIzQzO1x0XHRcdFx0bW92bnRpXzY0KGRzdCwgc3JjKTtcbiYjNDM7XHRcdFx0XHRyZXR1cm47XG4mIzQzO1x0XHRcdGNhc2UgODA6XG4mIzQzO1x0XHRcdFx0bW92bnRpXzY0KGRzdCwgc3JjKTtcbiYjNDM7XHRcdFx0XHRtb3ZudGlfMTYoZHN0ICYjNDM7IDY0LCBzcmMgJiM0MzsgNjQpO1xuJiM0MztcdFx0XHRcdHJldHVybjtcbiYjNDM7XHRcdFx0Y2FzZSA5NjpcbiYjNDM7XHRcdFx0XHRtb3ZudGlfNjQoZHN0LCBzcmMpO1xuJiM0MztcdFx0XHRcdG1vdm50aV8zMihkc3QgJiM0MzsgNjQsIHNyYyAmIzQzOyA2NCk7XG4mIzQzO1x0XHRcdFx0cmV0dXJuO1xuIFx0XHR9XG4gXHR9XG4mIzQzO1xuIFx0X19tZW1jcHlfZmx1c2hjYWNoZShkc3QsIHNyYywgY250KTtcbiB9XG4mIzQzO1xuJiM0MzsjZGVmaW5lIG1lbWNweV9ub250ZW1wb3JhbCBtZW1jcHlfbm9udGVtcG9yYWxcbiYjNDM7LypcbiYjNDM7ICogUmV1c2UgdGhlIGV4aXN0aW5nIHg4NiBmbHVzaGNhY2hlIGJhY2tlbmQgYXMgdGhlIG5vbi10ZW1wb3JhbCBjb3B5XG4mIzQzOyAqIHByaW1pdGl2ZS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtZW1jcHlfbm9udGVtcG9yYWwodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsXG4mIzQzO1x0XHRzaXplX3QgY250KVxuJiM0Mzt7XG4mIzQzO1x0bWVtY3B5X2ZsdXNoY2FjaGUoZHN0LCBzcmMsIGNudCk7XG4mIzQzO31cbiYjNDM7XG4gI2VuZGlmXG4gXG4gI2VuZGlmIC8qIF9fS0VSTkVMX18gKi9cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tLmggYi9pbmNsdWRlL2xpbnV4L21tLmhcbmluZGV4IDQ4NWRmOWMyZGJkZGIuLjQzMzQzYmZjZTQ5MzYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbW0uaFxuQEAgLTI1NDEsMTEgJiM0MzsyNTQxLDIyIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcGFnZV9zZWN0aW9uKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIHNlY3Rpb24pXG4gXHRwYWdlLVx1MDAzZWZsYWdzLmYgfD0gKHNlY3Rpb24gXHUwMDI2IFNFQ1RJT05TX01BU0spIFx1MDAzY1x1MDAzYyBTRUNUSU9OU19QR1NISUZUO1xuIH1cbiBcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHNldF9wYWdlX3NlY3Rpb25fZnJvbV9wZm4oc3RydWN0IHBhZ2UgKnBhZ2UsXG4mIzQzO1x0XHR1bnNpZ25lZCBsb25nIHBmbilcbiYjNDM7e1xuJiM0MztcdHNldF9wYWdlX3NlY3Rpb24ocGFnZSwgcGZuX3RvX3NlY3Rpb25fbnIocGZuKSk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG1lbWRlc2Nfc2VjdGlvbihtZW1kZXNjX2ZsYWdzX3QgbWRmKVxuIHtcbiBcdHJldHVybiAobWRmLmYgXHUwMDNlXHUwMDNlIFNFQ1RJT05TX1BHU0hJRlQpIFx1MDAyNiBTRUNUSU9OU19NQVNLO1xuIH1cbiAjZWxzZSAvKiAhU0VDVElPTl9JTl9QQUdFX0ZMQUdTICovXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcGFnZV9zZWN0aW9uX2Zyb21fcGZuKHN0cnVjdCBwYWdlICpwYWdlLFxuJiM0MztcdFx0dW5zaWduZWQgbG9uZyBwZm4pXG4mIzQzO3tcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbWVtZGVzY19zZWN0aW9uKG1lbWRlc2NfZmxhZ3NfdCBtZGYpXG4ge1xuIFx0cmV0dXJuIDA7XG5AQCAtMjc2OCw5ICYjNDM7Mjc3OSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcGFnZV9saW5rcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgZW51bSB6b25lX3R5cGUgem9uZSxcbiB7XG4gXHRzZXRfcGFnZV96b25lKHBhZ2UsIHpvbmUpO1xuIFx0c2V0X3BhZ2Vfbm9kZShwYWdlLCBub2RlKTtcbi0jaWZkZWYgU0VDVElPTl9JTl9QQUdFX0ZMQUdTXG4tXHRzZXRfcGFnZV9zZWN0aW9uKHBhZ2UsIHBmbl90b19zZWN0aW9uX25yKHBmbikpO1xuLSNlbmRpZlxuJiM0MztcdHNldF9wYWdlX3NlY3Rpb25fZnJvbV9wZm4ocGFnZSwgcGZuKTtcbiB9XG4gXG4gLyoqXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zdHJpbmcuaCBiL2luY2x1ZGUvbGludXgvc3RyaW5nLmhcbmluZGV4IDU3MDJkYWNhNDMyNmIuLjZjYjVjZGQwMTE1OGIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3N0cmluZy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3N0cmluZy5oXG5AQCAtMjc4LDYgJiM0MzsyNzgsMTkgQEAgc3RhdGljIGlubGluZSB2b2lkIG1lbWNweV9mbHVzaGNhY2hlKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgY250KVxuIH1cbiAjZW5kaWZcbiBcbiYjNDM7I2lmbmRlZiBtZW1jcHlfbm9udGVtcG9yYWxcbiYjNDM7LypcbiYjNDM7ICogbWVtY3B5X25vbnRlbXBvcmFsKCkgcmVxdWVzdHMgYSBub24tdGVtcG9yYWwgY29weSB3aGVuIHRoZVxuJiM0MzsgKiBhcmNoaXRlY3R1cmUgaGFzIGEgc3VpdGFibGUgYmFja2VuZC4gQXJjaGl0ZWN0dXJlcyB3aXRob3V0IGFcbiYjNDM7ICogc3BlY2lhbGl6ZWQgYmFja2VuZCBmYWxsIGJhY2sgdG8gbWVtY3B5KCkuIEtlZXAgdGhpcyBhcyBhXG4mIzQzOyAqIGZ1bmN0aW9uLWxpa2UgbWFjcm8gc28gdGhlIGNvbXBpbGVyIGNhbiBzdGlsbCBzZWUgdGhlIG9yaWdpbmFsXG4mIzQzOyAqIG1lbWNweSgpIGNhbGwgc2l0ZSBhbmQgcHJlc2VydmUgdGhlIHVzdWFsIEZPUlRJRlkgY292ZXJhZ2Ugd2hlblxuJiM0MzsgKiBvYmplY3Qgc2l6ZXMgcmVtYWluIHZpc2libGUgdGhlcmUsIHdoaWxlIGtlZXBpbmcgdGhlIEFQSSB2b2lkLlxuJiM0MzsgKi9cbiYjNDM7I2RlZmluZSBtZW1jcHlfbm9udGVtcG9yYWwoZHN0LCBzcmMsIGxlbikgXFxcbiYjNDM7XHQoKHZvaWQpbWVtY3B5KGRzdCwgc3JjLCBsZW4pKVxuJiM0MzsjZW5kaWZcbiYjNDM7XG4gdm9pZCAqbWVtY2hyX2ludihjb25zdCB2b2lkICpzLCBpbnQgYywgc2l6ZV90IG4pO1xuIGNoYXIgKnN0cnJlcGxhY2UoY2hhciAqc3RyLCBjaGFyIG9sZCwgY2hhciBuZXcpO1xuIFxuZGlmZiAtLWdpdCBhL21tL21tX2luaXQuYyBiL21tL21tX2luaXQuY1xuaW5kZXggMGY2NDkwOWU4ZDIwZS4uYmIyMDA3ODA2YTI4NyAxMDA2NDRcbi0tLSBhL21tL21tX2luaXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbW1faW5pdC5jXG5AQCAtMTAwNSwxMSAmIzQzOzEwMDUsMzcgQEAgc3RhdGljIHZvaWQgX19pbml0IG1lbW1hcF9pbml0KHZvaWQpXG4gfVxuIFxuICNpZmRlZiBDT05GSUdfWk9ORV9ERVZJQ0Vcbi1zdGF0aWMgdm9pZCBfX3JlZiBfX2luaXRfem9uZV9kZXZpY2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBwZm4sXG4mIzQzOy8qXG4mIzQzOyAqIFJldHVybiB0cnVlIHdoZW4gbWVtbWFwX2luaXRfem9uZV9kZXZpY2UoKSBtdXN0IGluaXRpYWxpemUgdGhlIHBhZ2VcbiYjNDM7ICogcmVmY291bnQgdG8gMC4gTUVNT1JZX0RFVklDRV9HRU5FUklDIHBhZ2VzIHJlZ2FpbiBhIHJlZmNvdW50IG9mIDEgaW5cbiYjNDM7ICogdGhlIGZyZWUgcGF0aCwgd2hpbGUgdGhlIHJlbWFpbmluZyBaT05FX0RFVklDRSB0eXBlcyBzdGFydCBmcm9tIDAgaGVyZVxuJiM0MzsgKiBhbmQgcmFpc2UgdGhlIGNvdW50IGFnYWluIHdoZW4gdGhlIGFsbG9jYXRvciBvciBkcml2ZXIgaGFuZHMgdGhlIHBhZ2VcbiYjNDM7ICogb3V0LlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGlubGluZSBib29sIHBhZ2VtYXBfcmVxdWlyZXNfcmVmY291bnRfcmVzZXQoY29uc3Qgc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcClcbiYjNDM7e1xuJiM0MztcdC8qXG4mIzQzO1x0ICogTUVNT1JZX0RFVklDRV9HRU5FUklDIHBhZ2VzIHJlZ2FpbiBhIHJlZmNvdW50IG9mIDEgaW4gdGhlIGZyZWVcbiYjNDM7XHQgKiBwYXRoLiBUaGUgcmVtYWluaW5nIFpPTkVfREVWSUNFIHR5cGVzIHN0YXJ0IGZyb20gMCBoZXJlIGFuZCByYWlzZVxuJiM0MztcdCAqIHRoZSBjb3VudCBhZ2FpbiB3aGVuIHRoZSBhbGxvY2F0b3Igb3IgZHJpdmVyIGhhbmRzIHRoZSBwYWdlIG91dC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRzd2l0Y2ggKHBnbWFwLVx1MDAzZXR5cGUpIHtcbiYjNDM7XHRjYXNlIE1FTU9SWV9ERVZJQ0VfRlNfREFYOlxuJiM0MztcdGNhc2UgTUVNT1JZX0RFVklDRV9QUklWQVRFOlxuJiM0MztcdGNhc2UgTUVNT1JZX0RFVklDRV9DT0hFUkVOVDpcbiYjNDM7XHRjYXNlIE1FTU9SWV9ERVZJQ0VfUENJX1AyUERNQTpcbiYjNDM7XHRcdHJldHVybiB0cnVlO1xuJiM0MztcdGNhc2UgTUVNT1JZX0RFVklDRV9HRU5FUklDOlxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGZhbHNlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBfX3JlZiBfX3pvbmVfZGV2aWNlX3BhZ2VfaW5pdChzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBwZm4sXG4gXHRcdFx0XHRcdCAgdW5zaWduZWQgbG9uZyB6b25lX2lkeCwgaW50IG5pZCxcbiBcdFx0XHRcdFx0ICBzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwKVxuIHtcbi1cbiBcdF9faW5pdF9zaW5nbGVfcGFnZShwYWdlLCBwZm4sIHpvbmVfaWR4LCBuaWQpO1xuIFxuIFx0LypcbkBAIC0xMDI4LDI3ICYjNDM7MTA1NCw1NCBAQCBzdGF0aWMgdm9pZCBfX3JlZiBfX2luaXRfem9uZV9kZXZpY2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBwZm4sXG4gXHQgKi9cbiBcdHBhZ2VfZm9saW8ocGFnZSktXHUwMDNlcGdtYXAgPSBwZ21hcDtcbiBcdHBhZ2UtXHUwMDNlem9uZV9kZXZpY2VfZGF0YSA9IE5VTEw7XG4mIzQzO31cbiBcbi1cdC8qXG4tXHQgKiBaT05FX0RFVklDRSBwYWdlcyBvdGhlciB0aGFuIE1FTU9SWV9UWVBFX0dFTkVSSUMgYXJlIHJlbGVhc2VkXG4tXHQgKiBkaXJlY3RseSB0byB0aGUgZHJpdmVyIHBhZ2UgYWxsb2NhdG9yIHdoaWNoIHdpbGwgc2V0IHRoZSBwYWdlIGNvdW50XG4tXHQgKiB0byAxIHdoZW4gYWxsb2NhdGluZyB0aGUgcGFnZS5cbi1cdCAqXG4tXHQgKiBNRU1PUllfVFlQRV9HRU5FUklDIGFuZCBNRU1PUllfVFlQRV9GU19EQVggcGFnZXMgYXV0b21hdGljYWxseSBoYXZlXG4tXHQgKiB0aGVpciByZWZjb3VudCByZXNldCB0byBvbmUgd2hlbmV2ZXIgdGhleSBhcmUgZnJlZWQgKGllLiBhZnRlclxuLVx0ICogdGhlaXIgcmVmY291bnQgZHJvcHMgdG8gMCkuXG4tXHQgKi9cbi1cdHN3aXRjaCAocGdtYXAtXHUwMDNldHlwZSkge1xuLVx0Y2FzZSBNRU1PUllfREVWSUNFX0ZTX0RBWDpcbi1cdGNhc2UgTUVNT1JZX0RFVklDRV9QUklWQVRFOlxuLVx0Y2FzZSBNRU1PUllfREVWSUNFX0NPSEVSRU5UOlxuLVx0Y2FzZSBNRU1PUllfREVWSUNFX1BDSV9QMlBETUE6XG4mIzQzO3N0YXRpYyB2b2lkIF9fcmVmIHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9zbG93KHN0cnVjdCBwYWdlICpwYWdlLFxuJiM0MztcdFx0dW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgem9uZV9pZHgsIGludCBuaWQsXG4mIzQzO1x0XHRzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwKVxuJiM0Mzt7XG4mIzQzO1x0X196b25lX2RldmljZV9wYWdlX2luaXQocGFnZSwgcGZuLCB6b25lX2lkeCwgbmlkLCBwZ21hcCk7XG4mIzQzO1x0aWYgKHBhZ2VtYXBfcmVxdWlyZXNfcmVmY291bnRfcmVzZXQocGdtYXApKVxuIFx0XHRzZXRfcGFnZV9jb3VudChwYWdlLCAwKTtcbi1cdFx0YnJlYWs7XG4mIzQzO31cbiBcbi1cdGNhc2UgTUVNT1JZX0RFVklDRV9HRU5FUklDOlxuLVx0XHRicmVhaztcbi1cdH1cbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHpvbmVfZGV2aWNlX3RhaWxfcGFnZV9pbml0KHN0cnVjdCBwYWdlICpwYWdlLFxuJiM0MztcdFx0dW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgem9uZV9pZHgsIGludCBuaWQsXG4mIzQzO1x0XHRzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwLCBjb25zdCBzdHJ1Y3QgcGFnZSAqaGVhZCxcbiYjNDM7XHRcdHVuc2lnbmVkIGludCBvcmRlcilcbiYjNDM7e1xuJiM0MztcdHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9zbG93KHBhZ2UsIHBmbiwgem9uZV9pZHgsIG5pZCwgcGdtYXApO1xuJiM0MztcdHByZXBfY29tcG91bmRfdGFpbChwYWdlLCBoZWFkLCBvcmRlcik7XG4mIzQzO1x0c2V0X3BhZ2VfY291bnQocGFnZSwgMCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqICYjMzk7dGVtcGxhdGUmIzM5OyBpcyBhIHJldXNhYmxlIHBhZ2UgcHJvdG90eXBlIHJhdGhlciB0aGFuIGEgc3RyaWN0bHkgaW1tdXRhYmxlXG4mIzQzOyAqIG9iamVjdC4gTW9zdCBaT05FX0RFVklDRSBmaWVsZHMgc3RheSBjb25zdGFudCBhY3Jvc3MgdGhlIHBhZ2VzIGNvdmVyZWQgYnlcbiYjNDM7ICogdGhlIGN1cnJlbnQgdGVtcGxhdGUsIGJ1dCBzZWN0aW9uIGJpdHMgYW5kIHBhZ2UtXHUwMDNldmlydHVhbCBtYXkgc3RpbGwgZGVwZW5kXG4mIzQzOyAqIG9uIHRoZSBQRk4uIFJlZnJlc2ggdGhvc2UgUEZOLWRlcGVuZGVudCBmaWVsZHMgaW4gdGhlIHRlbXBsYXRlIGJlZm9yZVxuJiM0MzsgKiBjb3B5aW5nIGl0IGludG8gQHBhZ2UuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgem9uZV9kZXZpY2VfcGFnZV91cGRhdGVfdGVtcGxhdGUoc3RydWN0IHBhZ2UgKnRlbXBsYXRlLFxuJiM0MztcdFx0dW5zaWduZWQgbG9uZyBwZm4pXG4mIzQzO3tcbiYjNDM7XHRzZXRfcGFnZV9zZWN0aW9uX2Zyb21fcGZuKHRlbXBsYXRlLCBwZm4pO1xuJiM0MzsjaWZkZWYgV0FOVF9QQUdFX1ZJUlRVQUxcbiYjNDM7XHRpZiAoIWlzX2hpZ2htZW1faWR4KFpPTkVfREVWSUNFKSlcbiYjNDM7XHRcdHNldF9wYWdlX2FkZHJlc3ModGVtcGxhdGUsIF9fdmEocGZuIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUKSk7XG4mIzQzOyNlbmRpZlxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCB6b25lX2RldmljZV9wYWdlX2luaXRfZnJvbV90ZW1wbGF0ZShzdHJ1Y3QgcGFnZSAqcGFnZSxcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgcGZuLCBzdHJ1Y3QgcGFnZSAqdGVtcGxhdGUpXG4mIzQzO3tcbiYjNDM7XHQvKlxuJiM0MztcdCAqICYjMzk7dGVtcGxhdGUmIzM5OyBjYXJyaWVzIHRoZSBpbnZhcmlhbnQgcG9ydGlvbiBvZiBhIFpPTkVfREVWSUNFIHN0cnVjdFxuJiM0MztcdCAqIHBhZ2UuIFVwZGF0ZSB0aGUgUEZOLWRlcGVuZGVudCBmaWVsZHMgaW4gcGxhY2UgYmVmb3JlIGNvcHlpbmcgaXRcbiYjNDM7XHQgKiB0byB0aGUgZGVzdGluYXRpb24gcGFnZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHR6b25lX2RldmljZV9wYWdlX3VwZGF0ZV90ZW1wbGF0ZSh0ZW1wbGF0ZSwgcGZuKTtcbiYjNDM7XHRtZW1jcHlfbm9udGVtcG9yYWwocGFnZSwgdGVtcGxhdGUsIHNpemVvZigqcGFnZSkpO1xuIH1cbiBcbiAvKlxuQEAgLTEwODMsNiAmIzQzOzExMzYsNyBAQCBzdGF0aWMgdm9pZCBfX3JlZiBtZW1tYXBfaW5pdF9jb21wb3VuZChzdHJ1Y3QgcGFnZSAqaGVhZCxcbiB7XG4gXHR1bnNpZ25lZCBsb25nIHBmbiwgZW5kX3BmbiA9IGhlYWRfcGZuICYjNDM7IG5yX3BhZ2VzO1xuIFx0dW5zaWduZWQgaW50IG9yZGVyID0gcGdtYXAtXHUwMDNldm1lbW1hcF9zaGlmdDtcbiYjNDM7XHRzdHJ1Y3QgcGFnZSB0ZW1wbGF0ZTtcbiBcbiBcdC8qXG4gXHQgKiBXZSBoYXZlIHRvIGluaXRpYWxpemUgdGhlIHBhZ2VzLCBpbmNsdWRpbmcgc2V0dGluZyB1cCBwYWdlIGxpbmtzLlxuQEAgLTEwOTEsMTIgJiM0MzsxMTQ1LDI2IEBAIHN0YXRpYyB2b2lkIF9fcmVmIG1lbW1hcF9pbml0X2NvbXBvdW5kKHN0cnVjdCBwYWdlICpoZWFkLFxuIFx0ICogdGhlIHBhZ2VzIGluIHRoZSBzYW1lIGdvLlxuIFx0ICovXG4gXHRfX1NldFBhZ2VIZWFkKGhlYWQpO1xuJiM0MztcbiBcdGZvciAocGZuID0gaGVhZF9wZm4gJiM0MzsgMTsgcGZuIFx1MDAzYyBlbmRfcGZuOyBwZm4mIzQzOyYjNDM7KSB7XG4gXHRcdHN0cnVjdCBwYWdlICpwYWdlID0gcGZuX3RvX3BhZ2UocGZuKTtcbiBcbi1cdFx0X19pbml0X3pvbmVfZGV2aWNlX3BhZ2UocGFnZSwgcGZuLCB6b25lX2lkeCwgbmlkLCBwZ21hcCk7XG4tXHRcdHByZXBfY29tcG91bmRfdGFpbChwYWdlLCBoZWFkLCBvcmRlcik7XG4tXHRcdHNldF9wYWdlX2NvdW50KHBhZ2UsIDApO1xuJiM0MztcdFx0aWYgKHBmbiA9PSBoZWFkX3BmbiAmIzQzOyAxKSB7XG4mIzQzO1x0XHRcdC8qXG4mIzQzO1x0XHRcdCAqIEFsbCB0YWlscyBvZiB0aGUgc2FtZSBjb21wb3VuZCBwYWdlIHNoYXJlIHRoZVxuJiM0MztcdFx0XHQgKiBzdGF0ZSBlc3RhYmxpc2hlZCBieSBwcmVwX2NvbXBvdW5kX3RhaWwoKS4gUmV1c2VcbiYjNDM7XHRcdFx0ICogb25lIHRhaWwgdGVtcGxhdGUgZm9yIHRoZSB3aG9sZSByYW5nZSBhbmRcbiYjNDM7XHRcdFx0ICogcmVmcmVzaCBvbmx5IHRoZSBQRk4tZGVwZW5kZW50IGZpZWxkcyBpbiB0aGF0XG4mIzQzO1x0XHRcdCAqIHRlbXBsYXRlIGJlZm9yZSBlYWNoIGNvcHkuXG4mIzQzO1x0XHRcdCAqL1xuJiM0MztcdFx0XHR6b25lX2RldmljZV90YWlsX3BhZ2VfaW5pdChwYWdlLCBwZm4sIHpvbmVfaWR4LCBuaWQsXG4mIzQzO1x0XHRcdFx0XHRcdCAgIHBnbWFwLCBoZWFkLCBvcmRlcik7XG4mIzQzO1x0XHRcdC8qIGluaXQgdGVtcGxhdGUgcGFnZSAqL1xuJiM0MztcdFx0XHRtZW1jcHkoXHUwMDI2dGVtcGxhdGUsIHBhZ2UsIHNpemVvZigqcGFnZSkpO1xuJiM0MztcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0em9uZV9kZXZpY2VfcGFnZV9pbml0X2Zyb21fdGVtcGxhdGUocGFnZSwgcGZuLFxuJiM0MztcdFx0XHRcdFx0XHRcdCAgICBcdTAwMjZ0ZW1wbGF0ZSk7XG4mIzQzO1x0XHR9XG4gXHR9XG4gXHRwcmVwX2NvbXBvdW5kX2hlYWQoaGVhZCwgb3JkZXIpO1xuIH1cbkBAIC0xMTEzLDYgJiM0MzsxMTgxLDcgQEAgdm9pZCBfX3JlZiBtZW1tYXBfaW5pdF96b25lX2RldmljZShzdHJ1Y3Qgem9uZSAqem9uZSxcbiBcdHVuc2lnbmVkIGxvbmcgem9uZV9pZHggPSB6b25lX2lkeCh6b25lKTtcbiBcdHVuc2lnbmVkIGxvbmcgc3RhcnQgPSBqaWZmaWVzO1xuIFx0aW50IG5pZCA9IHBnZGF0LVx1MDAzZW5vZGVfaWQ7XG4mIzQzO1x0c3RydWN0IHBhZ2UgdGVtcGxhdGU7XG4gXG4gXHRpZiAoV0FSTl9PTl9PTkNFKCFwZ21hcCB8fCB6b25lX2lkeCAhPSBaT05FX0RFVklDRSkpXG4gXHRcdHJldHVybjtcbkBAIC0xMTMwLDcgJiM0MzsxMTk5LDIyIEBAIHZvaWQgX19yZWYgbWVtbWFwX2luaXRfem9uZV9kZXZpY2Uoc3RydWN0IHpvbmUgKnpvbmUsXG4gXHRmb3IgKHBmbiA9IHN0YXJ0X3BmbjsgcGZuIFx1MDAzYyBlbmRfcGZuOyBwZm4gJiM0Mzs9IHBmbnNfcGVyX2NvbXBvdW5kKSB7XG4gXHRcdHN0cnVjdCBwYWdlICpwYWdlID0gcGZuX3RvX3BhZ2UocGZuKTtcbiBcbi1cdFx0X19pbml0X3pvbmVfZGV2aWNlX3BhZ2UocGFnZSwgcGZuLCB6b25lX2lkeCwgbmlkLCBwZ21hcCk7XG4mIzQzO1x0XHRpZiAocGZuID09IHN0YXJ0X3Bmbikge1xuJiM0MztcdFx0XHQvKlxuJiM0MztcdFx0XHQgKiBTZWVkIHRoZSByZXVzYWJsZSBoZWFkLXBhZ2UgdGVtcGxhdGUgZnJvbSB0aGVcbiYjNDM7XHRcdFx0ICogZmlyc3QgcmVhbCBzdHJ1Y3QgcGFnZS4gVGhpcyBpbml0aWFsaXplcyB0aGVcbiYjNDM7XHRcdFx0ICogZmlyc3QgcGFnZSB0aHJvdWdoIHRoZSBleGlzdGluZyBzbG93IHBhdGggYW5kXG4mIzQzO1x0XHRcdCAqIHRoZW4gcmV1c2VzIHRoYXQgZmluYWwgc3RhdGUgYXMgdGhlIHRlbXBsYXRlXG4mIzQzO1x0XHRcdCAqIGZvciBzdWJzZXF1ZW50IHBhZ2VzLlxuJiM0MztcdFx0XHQgKi9cbiYjNDM7XHRcdFx0em9uZV9kZXZpY2VfcGFnZV9pbml0X3Nsb3cocGFnZSwgcGZuLCB6b25lX2lkeCxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgbmlkLCBwZ21hcCk7XG4mIzQzO1x0XHRcdC8qIGluaXQgdGVtcGxhdGUgcGFnZSAqL1xuJiM0MztcdFx0XHRtZW1jcHkoXHUwMDI2dGVtcGxhdGUsIHBhZ2UsIHNpemVvZigqcGFnZSkpO1xuJiM0MztcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0em9uZV9kZXZpY2VfcGFnZV9pbml0X2Zyb21fdGVtcGxhdGUocGFnZSwgcGZuLFxuJiM0MztcdFx0XHRcdFx0XHRcdCAgICBcdTAwMjZ0ZW1wbGF0ZSk7XG4mIzQzO1x0XHR9XG4gXG4gXHRcdGlmIChJU19BTElHTkVEKHBmbiwgUEFHRVNfUEVSX1NFQ1RJT04pKVxuIFx0XHRcdGNvbmRfcmVzY2hlZCgpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDA3OjQwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtaT05FX0RFVklDRSYjMzQ7LAogICAgJiMzNDtERVZJQ0VfUFJJVkFURSYjMzQ7LAogICAgJiMzNDtURVNUX0hNTSYjMzQ7LAogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7LAogICAgJiMzNDtNRU1PUllfSE9UUExVRyYjMzQ7LAogICAgJiMzNDtNRU1PUllfSE9UUkVNT1ZFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWVtbWFwX2luaXRfem9uZV9kZXZpY2UmIzM0OywKICAgICYjMzQ7bWVtcmVtYXBfcGFnZXMmIzM0OywKICAgICYjMzQ7ZGV2bV9tZW1yZW1hcF9wYWdlcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvcHRpbWl6ZXMgc3RydWN0IHBhZ2UgaW5pdGlhbGl6YXRpb24gZm9yIFpPTkVfREVWSUNFIG1lbW9yeSBieSB1c2luZyBhIHRlbXBsYXRlIHBhZ2UgYW5kIG5vbi10ZW1wb3JhbCBtZW1vcnkgY29waWVzIChtZW1jcHlfbm9udGVtcG9yYWwpLiBUaGlzIGlzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgcmVhY2hhYmxlIHZpYSBkZXZpY2UgbWVtb3J5IGhvdHBsdWcsIHN1Y2ggYXMgd2hlbiBsb2FkaW5nIHRoZSBURVNUX0hNTSBtb2R1bGUgb3IgdXNpbmcgREFYL1BNRU0gZGV2aWNlcy4gRnV6emluZyB0aGlzIGlzIGltcG9ydGFudCB0byBjYXRjaCBwb3RlbnRpYWwgYWxpZ25tZW50IG9yIG1lbW9yeSBjb3JydXB0aW9uIGlzc3VlcyBkdXJpbmcgcGFnZSBpbml0aWFsaXphdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDYxN2FjMTVjOTJmYTkyMzQzNzExYWU2MWQ2NTkzZTBhMWFhMTRlNDQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAzIDA3OjQwOjExIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaAppbmRleCA0NjM1NjE2ODYzZjUzLi5iYzZhOWYzNGIzNDZhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaApAQCAtODIsNyAmIzQzOzgyLDM1IEBAIGludCBzdHJjbXAoY29uc3QgY2hhciAqY3MsIGNvbnN0IGNoYXIgKmN0KTsKICNpZmRlZiBDT05GSUdfQVJDSF9IQVNfVUFDQ0VTU19GTFVTSENBQ0hFCiAjZGVmaW5lIF9fSEFWRV9BUkNIX01FTUNQWV9GTFVTSENBQ0hFIDEKIHZvaWQgX19tZW1jcHlfZmx1c2hjYWNoZSh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IGNudCk7Ci1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbWVtY3B5X2ZsdXNoY2FjaGUodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBjbnQpCiYjNDM7CiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG1vdm50aV84KHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjKQomIzQzO3sKJiM0MzsJYXNtIHZvbGF0aWxlKCYjMzQ7bW92bnRpcSAlMSwgJTAmIzM0OwomIzQzOwkJICAgICA6ICYjMzQ7PW0mIzM0OygqKHU2NCAqKWRzdCkKJiM0MzsJCSAgICAgOiAmIzM0O3ImIzM0OygqKGNvbnN0IHU2NCAqKXNyYykKJiM0MzsJCSAgICAgOiAmIzM0O21lbW9yeSYjMzQ7KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG1vdm50aV8xNih2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYykKJiM0Mzt7CiYjNDM7CW1vdm50aV84KGRzdCwgc3JjKTsKJiM0MzsJbW92bnRpXzgoZHN0ICYjNDM7IDgsIHNyYyAmIzQzOyA4KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG1vdm50aV8zMih2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYykKJiM0Mzt7CiYjNDM7CW1vdm50aV8xNihkc3QsIHNyYyk7CiYjNDM7CW1vdm50aV8xNihkc3QgJiM0MzsgMTYsIHNyYyAmIzQzOyAxNik7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtb3ZudGlfNjQodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMpCiYjNDM7ewomIzQzOwltb3ZudGlfMzIoZHN0LCBzcmMpOwomIzQzOwltb3ZudGlfMzIoZHN0ICYjNDM7IDMyLCBzcmMgJiM0MzsgMzIpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbWVtY3B5X2ZsdXNoY2FjaGUodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsCiYjNDM7CQkJCQkgICAgICBzaXplX3QgY250KQogewogCWlmIChfX2J1aWx0aW5fY29uc3RhbnRfcChjbnQpKSB7CiAJCXN3aXRjaCAoY250KSB7CkBAIC05NiwxMCAmIzQzOzEyNCw0OCBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbWVtY3B5X2ZsdXNoY2FjaGUodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdAogCQkJCWFzbSAoJiMzNDttb3ZudGlxICUxLCAlMCYjMzQ7IDogJiMzNDs9bSYjMzQ7KCoodTY0ICopZHN0KSA6ICYjMzQ7ciYjMzQ7KCoodTY0ICopc3JjKSk7CiAJCQkJYXNtICgmIzM0O21vdm50aXEgJTEsICUwJiMzNDsgOiAmIzM0Oz1tJiMzNDsoKih1NjQgKikoZHN0ICYjNDM7IDgpKSA6ICYjMzQ7ciYjMzQ7KCoodTY0ICopKHNyYyAmIzQzOyA4KSkpOwogCQkJCXJldHVybjsKJiM0MzsJCQkvKgomIzQzOwkJCSAqIFRoZSByZWxldmFudCBmaXhlZC1zaXplIGNvcGllcyBoZXJlIGFyZSB0aGUKJiM0MzsJCQkgKiB4ODZfNjQgc3RydWN0IHBhZ2Ugc2l6ZXM6IDY0LCA4MCwgYW5kIDk2IGJ5dGVzLgomIzQzOwkJCSAqIEtlZXAgMzItYnl0ZSBhbmQgNDgtYnl0ZSBjb3BpZXMgaW5saW5lIGFzIHdlbGwKJiM0MzsJCQkgKiBpbnN0ZWFkIG9mIHNlbmRpbmcgdGhvc2UgbmVhcmJ5IGZpeGVkLXNpemUKJiM0MzsJCQkgKiBjYXNlcyBiYWNrIHRvIF9fbWVtY3B5X2ZsdXNoY2FjaGUoKS4KJiM0MzsJCQkgKi8KJiM0MzsJCQljYXNlIDMyOgomIzQzOwkJCQltb3ZudGlfMzIoZHN0LCBzcmMpOwomIzQzOwkJCQlyZXR1cm47CiYjNDM7CQkJY2FzZSA0ODoKJiM0MzsJCQkJbW92bnRpXzMyKGRzdCwgc3JjKTsKJiM0MzsJCQkJbW92bnRpXzE2KGRzdCAmIzQzOyAzMiwgc3JjICYjNDM7IDMyKTsKJiM0MzsJCQkJcmV0dXJuOwomIzQzOwkJCWNhc2UgNjQ6CiYjNDM7CQkJCW1vdm50aV82NChkc3QsIHNyYyk7CiYjNDM7CQkJCXJldHVybjsKJiM0MzsJCQljYXNlIDgwOgomIzQzOwkJCQltb3ZudGlfNjQoZHN0LCBzcmMpOwomIzQzOwkJCQltb3ZudGlfMTYoZHN0ICYjNDM7IDY0LCBzcmMgJiM0MzsgNjQpOwomIzQzOwkJCQlyZXR1cm47CiYjNDM7CQkJY2FzZSA5NjoKJiM0MzsJCQkJbW92bnRpXzY0KGRzdCwgc3JjKTsKJiM0MzsJCQkJbW92bnRpXzMyKGRzdCAmIzQzOyA2NCwgc3JjICYjNDM7IDY0KTsKJiM0MzsJCQkJcmV0dXJuOwogCQl9CiAJfQomIzQzOwogCV9fbWVtY3B5X2ZsdXNoY2FjaGUoZHN0LCBzcmMsIGNudCk7CiB9CiYjNDM7CiYjNDM7I2RlZmluZSBtZW1jcHlfbm9udGVtcG9yYWwgbWVtY3B5X25vbnRlbXBvcmFsCiYjNDM7LyoKJiM0MzsgKiBSZXVzZSB0aGUgZXhpc3RpbmcgeDg2IGZsdXNoY2FjaGUgYmFja2VuZCBhcyB0aGUgbm9uLXRlbXBvcmFsIGNvcHkKJiM0MzsgKiBwcmltaXRpdmUuCiYjNDM7ICovCiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG1lbWNweV9ub250ZW1wb3JhbCh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYywKJiM0MzsJCXNpemVfdCBjbnQpCiYjNDM7ewomIzQzOwltZW1jcHlfZmx1c2hjYWNoZShkc3QsIHNyYywgY250KTsKJiM0Mzt9CiYjNDM7CiAjZW5kaWYKIAogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW0uaCBiL2luY2x1ZGUvbGludXgvbW0uaAppbmRleCA0ODVkZjljMmRiZGRiLi40MzM0M2JmY2U0OTM2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tbS5oCkBAIC0yNTQxLDExICYjNDM7MjU0MSwyMiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3BhZ2Vfc2VjdGlvbihzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBzZWN0aW9uKQogCXBhZ2UtJmd0O2ZsYWdzLmYgfD0gKHNlY3Rpb24gJmFtcDsgU0VDVElPTlNfTUFTSykgJmx0OyZsdDsgU0VDVElPTlNfUEdTSElGVDsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcGFnZV9zZWN0aW9uX2Zyb21fcGZuKHN0cnVjdCBwYWdlICpwYWdlLAomIzQzOwkJdW5zaWduZWQgbG9uZyBwZm4pCiYjNDM7ewomIzQzOwlzZXRfcGFnZV9zZWN0aW9uKHBhZ2UsIHBmbl90b19zZWN0aW9uX25yKHBmbikpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBtZW1kZXNjX3NlY3Rpb24obWVtZGVzY19mbGFnc190IG1kZikKIHsKIAlyZXR1cm4gKG1kZi5mICZndDsmZ3Q7IFNFQ1RJT05TX1BHU0hJRlQpICZhbXA7IFNFQ1RJT05TX01BU0s7CiB9CiAjZWxzZSAvKiAhU0VDVElPTl9JTl9QQUdFX0ZMQUdTICovCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHNldF9wYWdlX3NlY3Rpb25fZnJvbV9wZm4oc3RydWN0IHBhZ2UgKnBhZ2UsCiYjNDM7CQl1bnNpZ25lZCBsb25nIHBmbikKJiM0Mzt7CiYjNDM7fQomIzQzOwogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG1lbWRlc2Nfc2VjdGlvbihtZW1kZXNjX2ZsYWdzX3QgbWRmKQogewogCXJldHVybiAwOwpAQCAtMjc2OCw5ICYjNDM7Mjc3OSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcGFnZV9saW5rcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgZW51bSB6b25lX3R5cGUgem9uZSwKIHsKIAlzZXRfcGFnZV96b25lKHBhZ2UsIHpvbmUpOwogCXNldF9wYWdlX25vZGUocGFnZSwgbm9kZSk7Ci0jaWZkZWYgU0VDVElPTl9JTl9QQUdFX0ZMQUdTCi0Jc2V0X3BhZ2Vfc2VjdGlvbihwYWdlLCBwZm5fdG9fc2VjdGlvbl9ucihwZm4pKTsKLSNlbmRpZgomIzQzOwlzZXRfcGFnZV9zZWN0aW9uX2Zyb21fcGZuKHBhZ2UsIHBmbik7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zdHJpbmcuaCBiL2luY2x1ZGUvbGludXgvc3RyaW5nLmgKaW5kZXggNTcwMmRhY2E0MzI2Yi4uNmNiNWNkZDAxMTU4YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zdHJpbmcuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3N0cmluZy5oCkBAIC0yNzgsNiAmIzQzOzI3OCwxOSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWVtY3B5X2ZsdXNoY2FjaGUodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBjbnQpCiB9CiAjZW5kaWYKIAomIzQzOyNpZm5kZWYgbWVtY3B5X25vbnRlbXBvcmFsCiYjNDM7LyoKJiM0MzsgKiBtZW1jcHlfbm9udGVtcG9yYWwoKSByZXF1ZXN0cyBhIG5vbi10ZW1wb3JhbCBjb3B5IHdoZW4gdGhlCiYjNDM7ICogYXJjaGl0ZWN0dXJlIGhhcyBhIHN1aXRhYmxlIGJhY2tlbmQuIEFyY2hpdGVjdHVyZXMgd2l0aG91dCBhCiYjNDM7ICogc3BlY2lhbGl6ZWQgYmFja2VuZCBmYWxsIGJhY2sgdG8gbWVtY3B5KCkuIEtlZXAgdGhpcyBhcyBhCiYjNDM7ICogZnVuY3Rpb24tbGlrZSBtYWNybyBzbyB0aGUgY29tcGlsZXIgY2FuIHN0aWxsIHNlZSB0aGUgb3JpZ2luYWwKJiM0MzsgKiBtZW1jcHkoKSBjYWxsIHNpdGUgYW5kIHByZXNlcnZlIHRoZSB1c3VhbCBGT1JUSUZZIGNvdmVyYWdlIHdoZW4KJiM0MzsgKiBvYmplY3Qgc2l6ZXMgcmVtYWluIHZpc2libGUgdGhlcmUsIHdoaWxlIGtlZXBpbmcgdGhlIEFQSSB2b2lkLgomIzQzOyAqLwomIzQzOyNkZWZpbmUgbWVtY3B5X25vbnRlbXBvcmFsKGRzdCwgc3JjLCBsZW4pIFwKJiM0MzsJKCh2b2lkKW1lbWNweShkc3QsIHNyYywgbGVuKSkKJiM0MzsjZW5kaWYKJiM0MzsKIHZvaWQgKm1lbWNocl9pbnYoY29uc3Qgdm9pZCAqcywgaW50IGMsIHNpemVfdCBuKTsKIGNoYXIgKnN0cnJlcGxhY2UoY2hhciAqc3RyLCBjaGFyIG9sZCwgY2hhciBuZXcpOwogCmRpZmYgLS1naXQgYS9tbS9tbV9pbml0LmMgYi9tbS9tbV9pbml0LmMKaW5kZXggMGY2NDkwOWU4ZDIwZS4uYmIyMDA3ODA2YTI4NyAxMDA2NDQKLS0tIGEvbW0vbW1faW5pdC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21tX2luaXQuYwpAQCAtMTAwNSwxMSAmIzQzOzEwMDUsMzcgQEAgc3RhdGljIHZvaWQgX19pbml0IG1lbW1hcF9pbml0KHZvaWQpCiB9CiAKICNpZmRlZiBDT05GSUdfWk9ORV9ERVZJQ0UKLXN0YXRpYyB2b2lkIF9fcmVmIF9faW5pdF96b25lX2RldmljZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIHBmbiwKJiM0MzsvKgomIzQzOyAqIFJldHVybiB0cnVlIHdoZW4gbWVtbWFwX2luaXRfem9uZV9kZXZpY2UoKSBtdXN0IGluaXRpYWxpemUgdGhlIHBhZ2UKJiM0MzsgKiByZWZjb3VudCB0byAwLiBNRU1PUllfREVWSUNFX0dFTkVSSUMgcGFnZXMgcmVnYWluIGEgcmVmY291bnQgb2YgMSBpbgomIzQzOyAqIHRoZSBmcmVlIHBhdGgsIHdoaWxlIHRoZSByZW1haW5pbmcgWk9ORV9ERVZJQ0UgdHlwZXMgc3RhcnQgZnJvbSAwIGhlcmUKJiM0MzsgKiBhbmQgcmFpc2UgdGhlIGNvdW50IGFnYWluIHdoZW4gdGhlIGFsbG9jYXRvciBvciBkcml2ZXIgaGFuZHMgdGhlIHBhZ2UKJiM0MzsgKiBvdXQuCiYjNDM7ICovCiYjNDM7c3RhdGljIGlubGluZSBib29sIHBhZ2VtYXBfcmVxdWlyZXNfcmVmY291bnRfcmVzZXQoY29uc3Qgc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcCkKJiM0Mzt7CiYjNDM7CS8qCiYjNDM7CSAqIE1FTU9SWV9ERVZJQ0VfR0VORVJJQyBwYWdlcyByZWdhaW4gYSByZWZjb3VudCBvZiAxIGluIHRoZSBmcmVlCiYjNDM7CSAqIHBhdGguIFRoZSByZW1haW5pbmcgWk9ORV9ERVZJQ0UgdHlwZXMgc3RhcnQgZnJvbSAwIGhlcmUgYW5kIHJhaXNlCiYjNDM7CSAqIHRoZSBjb3VudCBhZ2FpbiB3aGVuIHRoZSBhbGxvY2F0b3Igb3IgZHJpdmVyIGhhbmRzIHRoZSBwYWdlIG91dC4KJiM0MzsJICovCiYjNDM7CXN3aXRjaCAocGdtYXAtJmd0O3R5cGUpIHsKJiM0MzsJY2FzZSBNRU1PUllfREVWSUNFX0ZTX0RBWDoKJiM0MzsJY2FzZSBNRU1PUllfREVWSUNFX1BSSVZBVEU6CiYjNDM7CWNhc2UgTUVNT1JZX0RFVklDRV9DT0hFUkVOVDoKJiM0MzsJY2FzZSBNRU1PUllfREVWSUNFX1BDSV9QMlBETUE6CiYjNDM7CQlyZXR1cm4gdHJ1ZTsKJiM0MzsJY2FzZSBNRU1PUllfREVWSUNFX0dFTkVSSUM6CiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIGZhbHNlOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBfX3JlZiBfX3pvbmVfZGV2aWNlX3BhZ2VfaW5pdChzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBwZm4sCiAJCQkJCSAgdW5zaWduZWQgbG9uZyB6b25lX2lkeCwgaW50IG5pZCwKIAkJCQkJICBzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwKQogewotCiAJX19pbml0X3NpbmdsZV9wYWdlKHBhZ2UsIHBmbiwgem9uZV9pZHgsIG5pZCk7CiAKIAkvKgpAQCAtMTAyOCwyNyAmIzQzOzEwNTQsNTQgQEAgc3RhdGljIHZvaWQgX19yZWYgX19pbml0X3pvbmVfZGV2aWNlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgcGZuLAogCSAqLwogCXBhZ2VfZm9saW8ocGFnZSktJmd0O3BnbWFwID0gcGdtYXA7CiAJcGFnZS0mZ3Q7em9uZV9kZXZpY2VfZGF0YSA9IE5VTEw7CiYjNDM7fQogCi0JLyoKLQkgKiBaT05FX0RFVklDRSBwYWdlcyBvdGhlciB0aGFuIE1FTU9SWV9UWVBFX0dFTkVSSUMgYXJlIHJlbGVhc2VkCi0JICogZGlyZWN0bHkgdG8gdGhlIGRyaXZlciBwYWdlIGFsbG9jYXRvciB3aGljaCB3aWxsIHNldCB0aGUgcGFnZSBjb3VudAotCSAqIHRvIDEgd2hlbiBhbGxvY2F0aW5nIHRoZSBwYWdlLgotCSAqCi0JICogTUVNT1JZX1RZUEVfR0VORVJJQyBhbmQgTUVNT1JZX1RZUEVfRlNfREFYIHBhZ2VzIGF1dG9tYXRpY2FsbHkgaGF2ZQotCSAqIHRoZWlyIHJlZmNvdW50IHJlc2V0IHRvIG9uZSB3aGVuZXZlciB0aGV5IGFyZSBmcmVlZCAoaWUuIGFmdGVyCi0JICogdGhlaXIgcmVmY291bnQgZHJvcHMgdG8gMCkuCi0JICovCi0Jc3dpdGNoIChwZ21hcC0mZ3Q7dHlwZSkgewotCWNhc2UgTUVNT1JZX0RFVklDRV9GU19EQVg6Ci0JY2FzZSBNRU1PUllfREVWSUNFX1BSSVZBVEU6Ci0JY2FzZSBNRU1PUllfREVWSUNFX0NPSEVSRU5UOgotCWNhc2UgTUVNT1JZX0RFVklDRV9QQ0lfUDJQRE1BOgomIzQzO3N0YXRpYyB2b2lkIF9fcmVmIHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9zbG93KHN0cnVjdCBwYWdlICpwYWdlLAomIzQzOwkJdW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgem9uZV9pZHgsIGludCBuaWQsCiYjNDM7CQlzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwKQomIzQzO3sKJiM0MzsJX196b25lX2RldmljZV9wYWdlX2luaXQocGFnZSwgcGZuLCB6b25lX2lkeCwgbmlkLCBwZ21hcCk7CiYjNDM7CWlmIChwYWdlbWFwX3JlcXVpcmVzX3JlZmNvdW50X3Jlc2V0KHBnbWFwKSkKIAkJc2V0X3BhZ2VfY291bnQocGFnZSwgMCk7Ci0JCWJyZWFrOwomIzQzO30KIAotCWNhc2UgTUVNT1JZX0RFVklDRV9HRU5FUklDOgotCQlicmVhazsKLQl9CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHpvbmVfZGV2aWNlX3RhaWxfcGFnZV9pbml0KHN0cnVjdCBwYWdlICpwYWdlLAomIzQzOwkJdW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgem9uZV9pZHgsIGludCBuaWQsCiYjNDM7CQlzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwLCBjb25zdCBzdHJ1Y3QgcGFnZSAqaGVhZCwKJiM0MzsJCXVuc2lnbmVkIGludCBvcmRlcikKJiM0Mzt7CiYjNDM7CXpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9zbG93KHBhZ2UsIHBmbiwgem9uZV9pZHgsIG5pZCwgcGdtYXApOwomIzQzOwlwcmVwX2NvbXBvdW5kX3RhaWwocGFnZSwgaGVhZCwgb3JkZXIpOwomIzQzOwlzZXRfcGFnZV9jb3VudChwYWdlLCAwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiAmIzM5O3RlbXBsYXRlJiMzOTsgaXMgYSByZXVzYWJsZSBwYWdlIHByb3RvdHlwZSByYXRoZXIgdGhhbiBhIHN0cmljdGx5IGltbXV0YWJsZQomIzQzOyAqIG9iamVjdC4gTW9zdCBaT05FX0RFVklDRSBmaWVsZHMgc3RheSBjb25zdGFudCBhY3Jvc3MgdGhlIHBhZ2VzIGNvdmVyZWQgYnkKJiM0MzsgKiB0aGUgY3VycmVudCB0ZW1wbGF0ZSwgYnV0IHNlY3Rpb24gYml0cyBhbmQgcGFnZS0mZ3Q7dmlydHVhbCBtYXkgc3RpbGwgZGVwZW5kCiYjNDM7ICogb24gdGhlIFBGTi4gUmVmcmVzaCB0aG9zZSBQRk4tZGVwZW5kZW50IGZpZWxkcyBpbiB0aGUgdGVtcGxhdGUgYmVmb3JlCiYjNDM7ICogY29weWluZyBpdCBpbnRvIEBwYWdlLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCB6b25lX2RldmljZV9wYWdlX3VwZGF0ZV90ZW1wbGF0ZShzdHJ1Y3QgcGFnZSAqdGVtcGxhdGUsCiYjNDM7CQl1bnNpZ25lZCBsb25nIHBmbikKJiM0Mzt7CiYjNDM7CXNldF9wYWdlX3NlY3Rpb25fZnJvbV9wZm4odGVtcGxhdGUsIHBmbik7CiYjNDM7I2lmZGVmIFdBTlRfUEFHRV9WSVJUVUFMCiYjNDM7CWlmICghaXNfaGlnaG1lbV9pZHgoWk9ORV9ERVZJQ0UpKQomIzQzOwkJc2V0X3BhZ2VfYWRkcmVzcyh0ZW1wbGF0ZSwgX192YShwZm4gJmx0OyZsdDsgUEFHRV9TSElGVCkpOwomIzQzOyNlbmRpZgomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB6b25lX2RldmljZV9wYWdlX2luaXRfZnJvbV90ZW1wbGF0ZShzdHJ1Y3QgcGFnZSAqcGFnZSwKJiM0MzsJCXVuc2lnbmVkIGxvbmcgcGZuLCBzdHJ1Y3QgcGFnZSAqdGVtcGxhdGUpCiYjNDM7ewomIzQzOwkvKgomIzQzOwkgKiAmIzM5O3RlbXBsYXRlJiMzOTsgY2FycmllcyB0aGUgaW52YXJpYW50IHBvcnRpb24gb2YgYSBaT05FX0RFVklDRSBzdHJ1Y3QKJiM0MzsJICogcGFnZS4gVXBkYXRlIHRoZSBQRk4tZGVwZW5kZW50IGZpZWxkcyBpbiBwbGFjZSBiZWZvcmUgY29weWluZyBpdAomIzQzOwkgKiB0byB0aGUgZGVzdGluYXRpb24gcGFnZS4KJiM0MzsJICovCiYjNDM7CXpvbmVfZGV2aWNlX3BhZ2VfdXBkYXRlX3RlbXBsYXRlKHRlbXBsYXRlLCBwZm4pOwomIzQzOwltZW1jcHlfbm9udGVtcG9yYWwocGFnZSwgdGVtcGxhdGUsIHNpemVvZigqcGFnZSkpOwogfQogCiAvKgpAQCAtMTA4Myw2ICYjNDM7MTEzNiw3IEBAIHN0YXRpYyB2b2lkIF9fcmVmIG1lbW1hcF9pbml0X2NvbXBvdW5kKHN0cnVjdCBwYWdlICpoZWFkLAogewogCXVuc2lnbmVkIGxvbmcgcGZuLCBlbmRfcGZuID0gaGVhZF9wZm4gJiM0MzsgbnJfcGFnZXM7CiAJdW5zaWduZWQgaW50IG9yZGVyID0gcGdtYXAtJmd0O3ZtZW1tYXBfc2hpZnQ7CiYjNDM7CXN0cnVjdCBwYWdlIHRlbXBsYXRlOwogCiAJLyoKIAkgKiBXZSBoYXZlIHRvIGluaXRpYWxpemUgdGhlIHBhZ2VzLCBpbmNsdWRpbmcgc2V0dGluZyB1cCBwYWdlIGxpbmtzLgpAQCAtMTA5MSwxMiAmIzQzOzExNDUsMjYgQEAgc3RhdGljIHZvaWQgX19yZWYgbWVtbWFwX2luaXRfY29tcG91bmQoc3RydWN0IHBhZ2UgKmhlYWQsCiAJICogdGhlIHBhZ2VzIGluIHRoZSBzYW1lIGdvLgogCSAqLwogCV9fU2V0UGFnZUhlYWQoaGVhZCk7CiYjNDM7CiAJZm9yIChwZm4gPSBoZWFkX3BmbiAmIzQzOyAxOyBwZm4gJmx0OyBlbmRfcGZuOyBwZm4mIzQzOyYjNDM7KSB7CiAJCXN0cnVjdCBwYWdlICpwYWdlID0gcGZuX3RvX3BhZ2UocGZuKTsKIAotCQlfX2luaXRfem9uZV9kZXZpY2VfcGFnZShwYWdlLCBwZm4sIHpvbmVfaWR4LCBuaWQsIHBnbWFwKTsKLQkJcHJlcF9jb21wb3VuZF90YWlsKHBhZ2UsIGhlYWQsIG9yZGVyKTsKLQkJc2V0X3BhZ2VfY291bnQocGFnZSwgMCk7CiYjNDM7CQlpZiAocGZuID09IGhlYWRfcGZuICYjNDM7IDEpIHsKJiM0MzsJCQkvKgomIzQzOwkJCSAqIEFsbCB0YWlscyBvZiB0aGUgc2FtZSBjb21wb3VuZCBwYWdlIHNoYXJlIHRoZQomIzQzOwkJCSAqIHN0YXRlIGVzdGFibGlzaGVkIGJ5IHByZXBfY29tcG91bmRfdGFpbCgpLiBSZXVzZQomIzQzOwkJCSAqIG9uZSB0YWlsIHRlbXBsYXRlIGZvciB0aGUgd2hvbGUgcmFuZ2UgYW5kCiYjNDM7CQkJICogcmVmcmVzaCBvbmx5IHRoZSBQRk4tZGVwZW5kZW50IGZpZWxkcyBpbiB0aGF0CiYjNDM7CQkJICogdGVtcGxhdGUgYmVmb3JlIGVhY2ggY29weS4KJiM0MzsJCQkgKi8KJiM0MzsJCQl6b25lX2RldmljZV90YWlsX3BhZ2VfaW5pdChwYWdlLCBwZm4sIHpvbmVfaWR4LCBuaWQsCiYjNDM7CQkJCQkJICAgcGdtYXAsIGhlYWQsIG9yZGVyKTsKJiM0MzsJCQkvKiBpbml0IHRlbXBsYXRlIHBhZ2UgKi8KJiM0MzsJCQltZW1jcHkoJmFtcDt0ZW1wbGF0ZSwgcGFnZSwgc2l6ZW9mKCpwYWdlKSk7CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCXpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9mcm9tX3RlbXBsYXRlKHBhZ2UsIHBmbiwKJiM0MzsJCQkJCQkJICAgICZhbXA7dGVtcGxhdGUpOwomIzQzOwkJfQogCX0KIAlwcmVwX2NvbXBvdW5kX2hlYWQoaGVhZCwgb3JkZXIpOwogfQpAQCAtMTExMyw2ICYjNDM7MTE4MSw3IEBAIHZvaWQgX19yZWYgbWVtbWFwX2luaXRfem9uZV9kZXZpY2Uoc3RydWN0IHpvbmUgKnpvbmUsCiAJdW5zaWduZWQgbG9uZyB6b25lX2lkeCA9IHpvbmVfaWR4KHpvbmUpOwogCXVuc2lnbmVkIGxvbmcgc3RhcnQgPSBqaWZmaWVzOwogCWludCBuaWQgPSBwZ2RhdC0mZ3Q7bm9kZV9pZDsKJiM0MzsJc3RydWN0IHBhZ2UgdGVtcGxhdGU7CiAKIAlpZiAoV0FSTl9PTl9PTkNFKCFwZ21hcCB8fCB6b25lX2lkeCAhPSBaT05FX0RFVklDRSkpCiAJCXJldHVybjsKQEAgLTExMzAsNyAmIzQzOzExOTksMjIgQEAgdm9pZCBfX3JlZiBtZW1tYXBfaW5pdF96b25lX2RldmljZShzdHJ1Y3Qgem9uZSAqem9uZSwKIAlmb3IgKHBmbiA9IHN0YXJ0X3BmbjsgcGZuICZsdDsgZW5kX3BmbjsgcGZuICYjNDM7PSBwZm5zX3Blcl9jb21wb3VuZCkgewogCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHBmbl90b19wYWdlKHBmbik7CiAKLQkJX19pbml0X3pvbmVfZGV2aWNlX3BhZ2UocGFnZSwgcGZuLCB6b25lX2lkeCwgbmlkLCBwZ21hcCk7CiYjNDM7CQlpZiAocGZuID09IHN0YXJ0X3BmbikgewomIzQzOwkJCS8qCiYjNDM7CQkJICogU2VlZCB0aGUgcmV1c2FibGUgaGVhZC1wYWdlIHRlbXBsYXRlIGZyb20gdGhlCiYjNDM7CQkJICogZmlyc3QgcmVhbCBzdHJ1Y3QgcGFnZS4gVGhpcyBpbml0aWFsaXplcyB0aGUKJiM0MzsJCQkgKiBmaXJzdCBwYWdlIHRocm91Z2ggdGhlIGV4aXN0aW5nIHNsb3cgcGF0aCBhbmQKJiM0MzsJCQkgKiB0aGVuIHJldXNlcyB0aGF0IGZpbmFsIHN0YXRlIGFzIHRoZSB0ZW1wbGF0ZQomIzQzOwkJCSAqIGZvciBzdWJzZXF1ZW50IHBhZ2VzLgomIzQzOwkJCSAqLwomIzQzOwkJCXpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9zbG93KHBhZ2UsIHBmbiwgem9uZV9pZHgsCiYjNDM7CQkJCQkJICAgbmlkLCBwZ21hcCk7CiYjNDM7CQkJLyogaW5pdCB0ZW1wbGF0ZSBwYWdlICovCiYjNDM7CQkJbWVtY3B5KCZhbXA7dGVtcGxhdGUsIHBhZ2UsIHNpemVvZigqcGFnZSkpOwomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQl6b25lX2RldmljZV9wYWdlX2luaXRfZnJvbV90ZW1wbGF0ZShwYWdlLCBwZm4sCiYjNDM7CQkJCQkJCSAgICAmYW1wO3RlbXBsYXRlKTsKJiM0MzsJCX0KIAogCQlpZiAoSVNfQUxJR05FRChwZm4sIFBBR0VTX1BFUl9TRUNUSU9OKSkKIAkJCWNvbmRfcmVzY2hlZCgpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAwNzo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1OTI5CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMzY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBhdGNoOiBgc3RydWN0IHBhZ2VgIEluaXRpYWxpemF0aW9uIGZvciBgWk9ORV9ERVZJQ0VgKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIHRoZSBgc3RydWN0IHBhZ2VgIGluaXRpYWxpemF0aW9uIHByb2Nlc3Mgc3BlY2lmaWNhbGx5IGZvciBgWk9ORV9ERVZJQ0VgIG1lbW9yeS4gSXQgc2VlbXMgbGlrZSB0aGUgY29yZSBjaGFuZ2UgaXMgdGhlIGludHJvZHVjdGlvbiBvZiBgbWVtY3B5X25vbnRlbXBvcmFsYCB0byBhY2NlbGVyYXRlIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAgYnkgY29weWluZyBhIHRlbXBsYXRlIGBzdHJ1Y3QgcGFnZWAuIFRoYXQmIzM5O3MgYSBjbGFzc2ljIG9wdGltaXphdGlvbiB0ZWNobmlxdWUsIHRyeWluZyB0byBhdm9pZCBjYWNoZSBwb2xsdXRpb24gZHVyaW5nIG1lbW9yeSBpbml0aWFsaXphdGlvbi4gVGhlIGNoYW5nZXMgYXJlIHNwcmVhZCBhY3Jvc3MgYSBmZXcgZmlsZXM6IHRoZSB4ODYgYXNzZW1ibHkgaGVhZGVyLCBzb21lIGNvcmUgbW0gaGVhZGVycywgYSBzdHJpbmcgaGFuZGxpbmcgaGVhZGVyLCBhbmQgdGhlIG1tIGluaXRpYWxpemF0aW9uIGNvZGUgaXRzZWxmLgoKTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGNhbiB3ZSAqcmVhY2gqIHRoaXMgY29kZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBgWk9ORV9ERVZJQ0VgIGlzIHVzdWFsbHkgYXNzb2NpYXRlZCB3aXRoIERBWCwgcGVyc2lzdGVudCBtZW1vcnksIGFuZCBkZXZpY2VzIHRoYXQgdXNlIFBDSSBwZWVyLXRvLXBlZXIgRE1BLiBXZSBjYW4gcHJvYmFibHkgdHJpZ2dlciB0aGlzIGluIFFFTVUgYmVjYXVzZSBpdCBzdXBwb3J0cyBlbXVsYXRpbmcgTlZESU1NcyAod2hpY2ggdXNlIERBWCkgYW5kIHBvdGVudGlhbGx5IFBNRU0gZGV2aWNlcy4gVGhlIGBaT05FX0RFVklDRWAgaXMgYWxzbyB0b3VjaGVkIGJ5IGBkYXhgIG9yIGBwYWdlbWFwYCB0ZXN0cy4KCklzIGZ1enppbmcgdGhpcyB3b3J0aCB0aGUgZWZmb3J0PyBBYnNvbHV0ZWx5LiBJdOKAmXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBpbml0aWFsaXphdGlvbiwgc3BlY2lmaWNhbGx5IGZvciBtZW1vcnkgaG90cGx1ZyBvciBkZXZpY2UgbWVtb3J5LiBUaGlzIG1lYW5zIGl04oCZcyBoYW5kbGluZyBjcml0aWNhbCBwYXJ0cyBvZiB0aGUgc3lzdGVtIHdoZW4gbmV3IG1lbW9yeSBpcyBhZGRlZCBvciBkZXZpY2VzIGFyZSBpbml0aWFsaXplZC4gVGhhdCYjMzk7cyBhIGp1aWN5IHRhcmdldCBmb3IgZmluZGluZyBzdWJ0bGUgbWVtb3J5IGNvcnJ1cHRpb24gYnVncy4gVGhlIGZ1bmN0aW9uIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAgZ2V0cyBjYWxsZWQgZHVyaW5nIG1lbW9yeSBob3RwbHVnIG9yIGRldmljZSBpbml0aWFsaXphdGlvbiwgdGhpbmsgYGRldm1fbWVtcmVtYXBfcGFnZXNgIGFuZCBzaW1pbGFyIGZ1bmN0aW9ucy4KCkNhbiBzeXprYWxsZXIgdHJpZ2dlciB0aGlzPyBQb3RlbnRpYWxseSwgeWVzLiBTeXprYWxsZXIgY2FuIHByb2JhYmx5IGludGVyYWN0IHdpdGggYC9zeXMvYnVzL25kYCBvciBzb21ldGhpbmcgc2ltaWxhciB0byB0cmlnZ2VyIHRoaXMsIG9yIGl0IG1pZ2h0IGdldCBoaXQgZHVyaW5nIGJvb3QgaWYgd2UgY29uZmlndXJlIE5WRElNTSBpbiBRRU1VLiBTeXprYWxsZXIgbWlnaHQgbm90IGVuYWJsZSBOVkRJTU0gYnkgZGVmYXVsdCwgdW5sZXNzIGl04oCZcyBzcGVjaWZpY2FsbHkgY29uZmlndXJlZC4gQnV0IGhleSwgaXQmIzM5O3Mgb2Z0ZW4gZW5hYmxlZCBiZWNhdXNlIG9mIGBDT05GSUdfWk9ORV9ERVZJQ0VgLiBTbywgdGhlIHBvdGVudGlhbCBhdHRhY2sgc3VyZmFjZSBpcyBiaWdnZXIgdGhhbiBJJiMzOTtkIG9yaWdpbmFsbHkgdGhvdWdodC4KCk9rYXksIG5leHQgc3RlcCBpcyB0byBsb29rIGF0IHRoZSBvdGhlciBjYWxsZXJzIG9mIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAgdG8gc2VlIGhvdyBlbHNlIHRoaXMgZnVuY3Rpb24gaXMgdHJpZ2dlcmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDA3OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbW1hcF9pbml0X3pvbmVfZGV2aWNlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbW16b25lLmg9MTMxMT1zdGF0aWMgaW5saW5lIGJvb2wgem9uZV9kZXZpY2VfcGFnZXNfaGF2ZV9zYW1lX3BnbWFwKGNvbnN0IHN0cnVjdCBwYWdlICphLFxuLS1cbmluY2x1ZGUvbGludXgvbW16b25lLmgtMTMyMC1cbmluY2x1ZGUvbGludXgvbW16b25lLmg6MTMyMTpleHRlcm4gdm9pZCBtZW1tYXBfaW5pdF96b25lX2RldmljZShzdHJ1Y3Qgem9uZSAqLCB1bnNpZ25lZCBsb25nLFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC0xMzIyLVx0XHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcsIHN0cnVjdCBkZXZfcGFnZW1hcCAqKTtcbi0tXG5tbS9tZW1yZW1hcC5jPTE0ND1zdGF0aWMgaW50IHBhZ2VtYXBfcmFuZ2Uoc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcCwgc3RydWN0IG1ocF9wYXJhbXMgKnBhcmFtcyxcbi0tXG5tbS9tZW1yZW1hcC5jLTI0MS1cdCAqL1xubW0vbWVtcmVtYXAuYzoyNDI6XHRtZW1tYXBfaW5pdF96b25lX2RldmljZShcdTAwMjZOT0RFX0RBVEEobmlkKS1cdTAwM2Vub2RlX3pvbmVzW1pPTkVfREVWSUNFXSxcbm1tL21lbXJlbWFwLmMtMjQzLVx0XHRcdFx0UEhZU19QRk4ocmFuZ2UtXHUwMDNlc3RhcnQpLFxuLS1cbm1tL21tX2luaXQuYz05Njg9c3RhdGljIHZvaWQgX19pbml0IG1lbW1hcF9pbml0KHZvaWQpXG4tLVxubW0vbW1faW5pdC5jLTEwMDgtLypcbm1tL21tX2luaXQuYzoxMDA5OiAqIFJldHVybiB0cnVlIHdoZW4gbWVtbWFwX2luaXRfem9uZV9kZXZpY2UoKSBtdXN0IGluaXRpYWxpemUgdGhlIHBhZ2Vcbm1tL21tX2luaXQuYy0xMDEwLSAqIHJlZmNvdW50IHRvIDAuIE1FTU9SWV9ERVZJQ0VfR0VORVJJQyBwYWdlcyByZWdhaW4gYSByZWZjb3VudCBvZiAxIGluXG4tLVxubW0vbW1faW5pdC5jPTExMzE9c3RhdGljIHZvaWQgX19yZWYgbWVtbWFwX2luaXRfY29tcG91bmQoc3RydWN0IHBhZ2UgKmhlYWQsXG4tLVxubW0vbW1faW5pdC5jLTExNzEtXG5tbS9tbV9pbml0LmM6MTE3Mjp2b2lkIF9fcmVmIG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlKHN0cnVjdCB6b25lICp6b25lLFxubW0vbW1faW5pdC5jLTExNzMtXHRcdFx0XHQgICB1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAwNzo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MjQxCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRlY29uc3RydWN0aW5nIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAqKgoKT2theSwgc28gYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYCBpcyBiZWluZyBjYWxsZWQgZnJvbSBgcGFnZW1hcF9yYW5nZWAgd2l0aGluIGBtbS9tZW1yZW1hcC5jYC4gSG1tLCBgbW0vbWVtcmVtYXAuY2AgaXMgdXN1YWxseSBpbnZvbHZlZCBpbiByZW1hcHBpbmcgbWVtb3J5IHJlZ2lvbnMuIFRoYXQmIzM5O3MgaW50ZXJlc3RpbmcsIGFuZCBpdCBzdWdnZXN0cyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGRldmljZSBtZW1vcnkgbWFwcGluZyBpbiBzb21lIGNhcGFjaXR5LiBUbyB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IGJldHRlciwgSSBuZWVkIHRvIHRyYWNlICp3aHkqIGBwYWdlbWFwX3JhbmdlYCBpcyBiZWluZyB1c2VkLiBXaGF0JiMzOTtzIGNhbGxpbmcgKml0Kj8gVGhhdCYjMzk7cyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGZ1bGwgcGljdHVyZSBoZXJlLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgdXBzdHJlYW0gY2FsbGVycyBvZiBgcGFnZW1hcF9yYW5nZWAuIFRoaXMgd2lsbCBpbGx1bWluYXRlIHdoYXQgb3BlcmF0aW9ucyBhcmUgdHJpZ2dlcmluZyB0aGlzIG1lbW9yeSByZW1hcHBpbmcgYmVoYXZpb3IgYW5kIHdoeSB3ZSYjMzk7cmUgc3BlY2lmaWNhbGx5IGluaXRpYWxpemluZyBhIHpvbmUgZGV2aWNlLiBUaGlzIGNvbnRleHQgd2lsbCBiZSBjcnVjaWFsIGZvciBhbnkgZnVydGhlciBkZWJ1Z2dpbmcgb3IgYW5hbHlzaXMuIExldCYjMzk7cyBzZWUuLi4gYmFja3RyYWNlIG9yIGNyb3NzLXJlZmVyZW5jZSwgaXQgaXMhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMDc6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGFnZW1hcF9yYW5nZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1yZW1hcC5jPTEzNz1zdGF0aWMgdm9pZCBkZXZfcGFnZW1hcF9wZXJjcHVfcmVsZWFzZShzdHJ1Y3QgcGVyY3B1X3JlZiAqcmVmKVxuLS1cbm1tL21lbXJlbWFwLmMtMTQzLVxubW0vbWVtcmVtYXAuYzoxNDQ6c3RhdGljIGludCBwYWdlbWFwX3JhbmdlKHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXAsIHN0cnVjdCBtaHBfcGFyYW1zICpwYXJhbXMsXG5tbS9tZW1yZW1hcC5jLTE0NS1cdFx0aW50IHJhbmdlX2lkLCBpbnQgbmlkKVxuLS1cbm1tL21lbXJlbWFwLmM9MjY2PXZvaWQgKm1lbXJlbWFwX3BhZ2VzKHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXAsIGludCBuaWQpXG4tLVxubW0vbWVtcmVtYXAuYy0zMzctXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9yYW5nZTsgaSYjNDM7JiM0MzspIHtcbm1tL21lbXJlbWFwLmM6MzM4Olx0XHRlcnJvciA9IHBhZ2VtYXBfcmFuZ2UocGdtYXAsIFx1MDAyNnBhcmFtcywgaSwgbmlkKTtcbm1tL21lbXJlbWFwLmMtMzM5LVx0XHRpZiAoZXJyb3IpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMDc6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzc1MwoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipUaGlua2luZyBUaHJvdWdoIG1lbXJlbWFwX3BhZ2VzKioKClJpZ2h0LCBzbyBgbWVtcmVtYXBfcGFnZXNgIGlzIGJlaW5nIGNhbGxlZCBieSAqZHJpdmVycyouIFRoYXQmIzM5O3MgdGhlIGtleSBzdGFydGluZyBwb2ludC4gSXQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhpcyBmdW5jdGlvbiBpcyBhIGNyaXRpY2FsIHBpZWNlIG9mIHRoZSBrZXJuZWwmIzM5O3MgbWVtb3J5IG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSBjb25jZXJuaW5nIGhvdyBoYXJkd2FyZSBpbnRlcmFjdHMgd2l0aCB0aGUgc3lzdGVtJiMzOTtzIG1lbW9yeSBzcGFjZS4gRHJpdmVycywgYnkgdGhlaXIgdmVyeSBuYXR1cmUsIGFyZSByZXNwb25zaWJsZSBmb3IgaW50ZXJmYWNpbmcgd2l0aCBwaHlzaWNhbCBkZXZpY2VzLCBhbmQgb2Z0ZW4gbmVlZCB0byBtYXAgcGh5c2ljYWwgbWVtb3J5IHJlZ2lvbnMgaW50byB0aGUgdmlydHVhbCBhZGRyZXNzIHNwYWNlIG9mIHRoZSBrZXJuZWwsIG9yIHBvdGVudGlhbGx5IGV2ZW4gdXNlciBzcGFjZSwgZm9yIERNQSBvcGVyYXRpb25zIG9yIGRpcmVjdCBhY2Nlc3MuCgpNeSBtaW5kIGltbWVkaWF0ZWx5IHN0YXJ0cyB0aWNraW5nIHRocm91Z2ggdGhlIGltcGxpY2F0aW9uczogV2hhdCBraW5kIG9mIGRyaXZlcnM/IEFyZSB3ZSB0YWxraW5nIGFib3V0IG5ldHdvcmsgYWRhcHRlcnMgbWFwcGluZyBidWZmZXJzLCBncmFwaGljcyBjYXJkcyBoYW5kbGluZyBmcmFtZWJ1ZmZlcnMsIG9yIHN0b3JhZ2UgY29udHJvbGxlcnMgZGVhbGluZyB3aXRoIGRpc2sgc2VjdG9ycz8gVGhlIHNwZWNpZmljcyBtYXR0ZXIgZm9yIHBlcmZvcm1hbmNlIGFuZCBzZWN1cml0eS4gSXMgdGhpcyBhIGNvbW1vbiBvcGVyYXRpb24gb3Igc29tZXRoaW5nIHJlbGF0aXZlbHkgcmFyZT8gVGhlIGZyZXF1ZW5jeSBvZiBpdHMgdXNlIHdpbGwgZ2l2ZSBhIGNsdWUgYXMgdG8gaXRzIGNyaXRpY2FsaXR5IGZvciBvcHRpbWl6YXRpb24uCgpJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uc3RyYWludHMuIEhvdyBsYXJnZSBhcmUgdGhlIG1lbW9yeSByZWdpb25zIGJlaW5nIG1hcHBlZD8gQXJlIHdlIHRhbGtpbmcgYWJvdXQgc2luZ2xlIHBhZ2VzLCBvciBwb3RlbnRpYWxseSBodWdlIGJsb2Nrcz8gTGFyZ2VyIHJlZ2lvbnMgaW1wbHkgcG90ZW50aWFsIGZvciBtb3JlIGNvbXBsZXggcGFnZSB0YWJsZSBtYW5pcHVsYXRpb25zIGFuZCByZXNvdXJjZSBjb250ZW50aW9uLiBBbmQgaXMgaXQgYW4gYXJlYSBvZiBtZW1vcnkgdGhhdCBpcyBzaGFyZWQgYmV0d2VlbiB1c2VyIGFuZCBrZXJuZWwsIG9yIGlzIHRoaXMgbWFwcGluZyBwdXJlbHkga2VybmVsIHNwYWNlPyBTaGFyZWQgcmVnaW9ucyBjYW4gb3BlbiB1cCB2dWxuZXJhYmlsaXRpZXMgaWYgbm90IGhhbmRsZWQgY29ycmVjdGx5LgoKSSYjMzk7bSBhbHNvIGNvbnNpZGVyaW5nIHRoZSBwb3RlbnRpYWwgZm9yIGVycm9ycy4gV2hhdCBlcnJvciBoYW5kbGluZyBpcyBpbiBwbGFjZT8gQXJlIHdlIGNoZWNraW5nIGZvciB2YWxpZCBwaHlzaWNhbCBhZGRyZXNzZXM/IFdoYXQgaGFwcGVucyBpZiB0aGUgbWFwcGluZyBmYWlscyDigJMgZG9lcyBpdCBncmFjZWZ1bGx5IGRlZ3JhZGUsIG9yIGNvdWxkIGl0IGxlYWQgdG8gc3lzdGVtIGluc3RhYmlsaXR5PyBTZWN1cml0eSBpbXBsaWNhdGlvbnMgYXJlIGFub3RoZXIgaW1wb3J0YW50IGFzcGVjdCB0byBjb25zaWRlciBoZXJlIC0gYXJlIHRoZXJlIGNoZWNrcyBpbiBwbGFjZSB0byBlbnN1cmUgdGhhdCB0aGUgZHJpdmVyIGNhbiBhY3R1YWxseSBhY2Nlc3MgdGhlIHJlcXVlc3RlZCBtZW1vcnk/IElzIHRoZXJlIGEgcmlzayBvZiBtZW1vcnkgbGVha3MgaWYgbWFwcGluZ3MgYXJlIG5vdCBwcm9wZXJseSB1bm1hcHBlZD8gVGhlIHJldHVybiB2YWx1ZSBvZiB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUgYSBrZXkgcGllY2Ugb2YgaW5mb3JtYXRpb24uCgpFc3NlbnRpYWxseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgKndoeSogb2YgdGhpcyBmdW5jdGlvbiBjYWxsLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoZSBkcml2ZXIgaXMgdHJ5aW5nIHRvICphY2hpZXZlKiB3aXRoIGBtZW1yZW1hcF9wYWdlc2AuIEtub3dpbmcgdGhhdCB3aWxsIGVuYWJsZSBtZSB0byBzZWUgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIGFuZCBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMuIEkmIzM5O20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgdGhlIGZvbGxvdy11cCBxdWVzdGlvbnM6IHdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgZm9yIE5VTUEgc3lzdGVtcywgYW5kIGhvdyBkb2VzIHRoaXMgZnVuY3Rpb24gaGFuZGxlIHBhZ2UgY2FjaGluZyBhbmQgY29oZXJlbmNlPyBUaW1lIHRvIGRpZyBpbnRvIHRoZSBzb3VyY2UgYW5kIHNlZSB3aGF0JiMzOTtzIHJlYWxseSBoYXBwZW5pbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMDc6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVtcmVtYXBfcGFnZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0PTI3ND1UaGVzZSBjYW4gYmUgYWxsb2NhdGVkIGFuZCBmcmVlZCB3aXRoOjpcbi0tXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMjg1LSAgICBwYWdlbWFwLm9wcyA9IFx1MDAyNmRldmljZV9kZXZtZW1fb3BzO1xuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0OjI4NjogICAgbWVtcmVtYXBfcGFnZXMoXHUwMDI2cGFnZW1hcCwgbnVtYV9ub2RlX2lkKCkpO1xuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTI4Ny1cbi0tXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMjkwLVxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0OjI5MTpUaGVyZSBhcmUgYWxzbyBkZXZtX3JlcXVlc3RfZnJlZV9tZW1fcmVnaW9uKCksIGRldm1fbWVtcmVtYXBfcGFnZXMoKSxcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0yOTItZGV2bV9tZW11bm1hcF9wYWdlcygpLCBhbmQgZGV2bV9yZWxlYXNlX21lbV9yZWdpb24oKSB3aGVuIHRoZSByZXNvdXJjZXMgY2FuXG4tLVxuRG9jdW1lbnRhdGlvbi9tbS9tZW1vcnktbW9kZWwucnN0PTE0MT10byBrZWVwIHRoZSBtZW1vcnkgcGlubmVkIGZvciBhY3RpdmUgdXNlLiBgWk9ORV9ERVZJQ0VgLCB2aWFcbkRvY3VtZW50YXRpb24vbW0vbWVtb3J5LW1vZGVsLnJzdDoxNDI6OmM6ZnVuYzpgZGV2bV9tZW1yZW1hcF9wYWdlc2AsIHBlcmZvcm1zIGp1c3QgZW5vdWdoIG1lbW9yeSBob3RwbHVnIHRvXG5Eb2N1bWVudGF0aW9uL21tL21lbW9yeS1tb2RlbC5yc3QtMTQzLXR1cm4gb24gOmM6ZnVuYzpgcGZuX3RvX3BhZ2VgLCA6YzpmdW5jOmBwYWdlX3RvX3BmbmAsIGFuZFxuLS1cbkRvY3VtZW50YXRpb24vbW0vbWVtb3J5LW1vZGVsLnJzdD0xNTc9bWVtb3J5IGhvdHBsdWcuIFN1Yi1zZWN0aW9uIHN1cHBvcnQgYWxsb3dzIGZvciAyTUIgYXMgdGhlIGNyb3NzLWFyY2hcbkRvY3VtZW50YXRpb24vbW0vbWVtb3J5LW1vZGVsLnJzdDoxNTg6Y29tbW9uIGFsaWdubWVudCBncmFudWxhcml0eSBmb3IgOmM6ZnVuYzpgZGV2bV9tZW1yZW1hcF9wYWdlc2AuXG5Eb2N1bWVudGF0aW9uL21tL21lbW9yeS1tb2RlbC5yc3QtMTU5LVxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3Q9MjIwPW1pZ3JhdGVfdm1hX2ZpbmFsaXplKCkg5Ye95pWw5peo5Zyo5L2/6amx5Yqo56iL5bqP5pu05piT5LqO57yW5YaZ5bm26ZuG5Lit6Leo6amx5Yqo56iL5bqP55qE6YCa55So5Luj56CB44CCXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdC0yMzYtICAgIHBhZ2VtYXAub3BzID0gXHUwMDI2ZGV2aWNlX2Rldm1lbV9vcHM7XG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0OjIzNzogICAgbWVtcmVtYXBfcGFnZXMoXHUwMDI2cGFnZW1hcCwgbnVtYV9ub2RlX2lkKCkpO1xuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdC0yMzgtXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdC0yNDEtXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0OjI0Mjrov5jmnIlkZXZtX3JlcXVlc3RfZnJlZV9tZW1fcmVnaW9uKCksIGRldm1fbWVtcmVtYXBfcGFnZXMoKSxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3QtMjQzLWRldm1fbWVtdW5tYXBfcGFnZXMoKSDlkowgZGV2bV9yZWxlYXNlX21lbV9yZWdpb24oKSDlvZPotYTmupDlj6/ku6Xnu5HlrprliLAgYGBzdHJ1Y3QgZGV2aWNlYGAuXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vbWVtb3J5LW1vZGVsLnJzdD0xMDc9Wk9ORV9ERVZJQ0Vcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9tZW1vcnktbW9kZWwucnN0LTExMS3kuovlrp7mnInlhbPvvJrov5nkupvlnLDlnYDojIPlm7TnmoTpobXpnaLlr7nosaHku47mnKrooqvlnKjnur/moIforrDov4fvvIzogIzkuJTlv4Xpobvlr7norr7lpIfov5vooYzlvJXnlKjvvIzogIzkuI3ku4Xku4VcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL21lbW9yeS1tb2RlbC5yc3Q6MTEyOuaYr+mhtemdou+8jOS7peS/neaMgeWGheWtmOiiq+KAnOmUgeWumuKAneS7peS+v+S9v+eUqOOAgiBgWk9ORV9ERVZJQ0VgIO+8jOmAmui/hyA6YzpmdW5jOmBkZXZtX21lbXJlbWFwX3BhZ2VzYCDvvIxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL21lbW9yeS1tb2RlbC5yc3QtMTEzLeS4uue7meWumueahHBmbnPojIPlm7TmiafooYzotrPlpJ/nmoTlhoXlrZjng63mj5Lmi5TmnaXlvIDlkK8gOmM6ZnVuYzpgcGZuX3RvX3BhZ2Vg77yMXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vbWVtb3J5LW1vZGVsLnJzdC0xMjItOmM6ZnVuYzpgYXJjaF9hZGRfbWVtb3J5YCDvvIzljbPlhoXlrZjng63mj5Lmi5TnmoTkuIrljYrpg6jliIbjgILlrZDmrrXmlK/mjIHlhYHorrgyTULkvZzkuLpcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL21lbW9yeS1tb2RlbC5yc3Q6MTIzOjpjOmZ1bmM6YGRldm1fbWVtcmVtYXBfcGFnZXNgIOeahOi3qOaetuaehOmAmueUqOWvuem9kOmil+eykuW6puOAglxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vbWVtb3J5LW1vZGVsLnJzdC0xMjQtXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfdXZtZW0uYz0xMTU4PWludCBrdm1wcGNfdXZtZW1faW5pdCh2b2lkKVxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3V2bWVtLmMtMTE4OS1cdGt2bXBwY191dm1lbV9wZ21hcC5vd25lciA9IFx1MDAyNmt2bXBwY191dm1lbV9wZ21hcDtcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3V2bWVtLmM6MTE5MDpcdGFkZHIgPSBtZW1yZW1hcF9wYWdlcyhcdTAwMjZrdm1wcGNfdXZtZW1fcGdtYXAsIE5VTUFfTk9fTk9ERSk7XG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl91dm1lbS5jLTExOTEtXHRpZiAoSVNfRVJSKGFkZHIpKSB7XG4tLVxuYXJjaC94ODYvbW0vaW5pdF82NC5jPTk2ND1pbnQgYWRkX3BhZ2VzKGludCBuaWQsIHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxuLS1cbmFyY2gveDg2L21tL2luaXRfNjQuYy05NzYtXHQvKlxuYXJjaC94ODYvbW0vaW5pdF82NC5jOjk3NzpcdCAqIFNwZWNpYWwgY2FzZTogYWRkX3BhZ2VzKCkgaXMgY2FsbGVkIGJ5IG1lbXJlbWFwX3BhZ2VzKCkgZm9yIGFkZGluZyBkZXZpY2VcbmFyY2gveDg2L21tL2luaXRfNjQuYy05NzgtXHQgKiBwcml2YXRlIHBhZ2VzLiBEbyBub3QgYnVtcCB1cCBtYXhfcGZuIGluIHRoZSBkZXZpY2UgcHJpdmF0ZSBwYXRoLFxuLS1cbmRyaXZlcnMvZGF4L2RldmljZS5jPTM4MD1zdGF0aWMgaW50IGRldl9kYXhfcHJvYmUoc3RydWN0IGRldl9kYXggKmRldl9kYXgpXG4tLVxuZHJpdmVycy9kYXgvZGV2aWNlLmMtNDM0LVx0XHRcdG9yZGVyX2Jhc2VfMihkZXZfZGF4LVx1MDAzZWFsaWduIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUKTtcbmRyaXZlcnMvZGF4L2RldmljZS5jOjQzNTpcdGFkZHIgPSBkZXZtX21lbXJlbWFwX3BhZ2VzKGRldiwgcGdtYXApO1xuZHJpdmVycy9kYXgvZGV2aWNlLmMtNDM2LVx0aWYgKElTX0VSUihhZGRyKSlcbi0tXG5kcml2ZXJzL2RheC9mc2Rldi5jPTIwNz1zdGF0aWMgaW50IGZzZGV2X2RheF9wcm9iZShzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheClcbi0tXG5kcml2ZXJzL2RheC9mc2Rldi5jLTI3My1cbmRyaXZlcnMvZGF4L2ZzZGV2LmM6Mjc0Olx0YWRkciA9IGRldm1fbWVtcmVtYXBfcGFnZXMoZGV2LCBwZ21hcCk7XG5kcml2ZXJzL2RheC9mc2Rldi5jLTI3NS1cdGlmIChJU19FUlIoYWRkcikpXG4tLVxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX21pZ3JhdGUuYz0xMDI2PWludCBrZ2Qya2ZkX2luaXRfem9uZV9kZXZpY2Uoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpXG4tLVxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX21pZ3JhdGUuYy0xMDY3LVx0ICovXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfbWlncmF0ZS5jOjEwNjg6XHRyID0gZGV2bV9tZW1yZW1hcF9wYWdlcyhhZGV2LVx1MDAzZWRldiwgcGdtYXApO1xuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX21pZ3JhdGUuYy0xMDY5LVx0aWYgKElTX0VSUihyKSkge1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZG1lbS5jPTI5Nj1ub3V2ZWF1X2RtZW1fY2h1bmtfYWxsb2Moc3RydWN0IG5vdXZlYXVfZHJtICpkcm0sIHN0cnVjdCBwYWdlICoqcHBhZ2UsXG4tLVxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWVtLmMtMzMyLVxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWVtLmM6MzMzOlx0cHRyID0gbWVtcmVtYXBfcGFnZXMoXHUwMDI2Y2h1bmstXHUwMDNlcGFnZW1hcCwgbnVtYV9ub2RlX2lkKCkpO1xuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWVtLmMtMzM0LVx0aWYgKElTX0VSUihwdHIpKSB7XG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jPTE3NjA9c3RhdGljIHN0cnVjdCB4ZV9wYWdlbWFwICp4ZV9wYWdlbWFwX2NyZWF0ZShzdHJ1Y3QgeGVfZGV2aWNlICp4ZSwgc3RydWN0IHhlX3ZyYW1fcmVnaW9uICp2cilcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmMtMTgwMS1cdHBhZ2VtYXAtXHUwMDNlb3BzID0gZHJtX3BhZ2VtYXBfcGFnZW1hcF9vcHNfZ2V0KCk7XG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmM6MTgwMjpcdGFkZHIgPSBkZXZtX21lbXJlbWFwX3BhZ2VzKGRldiwgcGFnZW1hcCk7XG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmMtMTgwMy1cdGlmIChJU19FUlIoYWRkcikpIHtcbi0tXG5kcml2ZXJzL2h2L21zaHZfdnRsX21haW4uYz0zODE9c3RhdGljIGludCBtc2h2X3Z0bF9pb2N0bF9hZGRfdnRsMF9tZW0oc3RydWN0IG1zaHZfdnRsICp2dGwsIHZvaWQgX191c2VyICphcmcpXG4tLVxuZHJpdmVycy9odi9tc2h2X3Z0bF9tYWluLmMtNDEwLVx0ICogVGhpcyB3b3JrcyBiZXN0IHdoZW4gdGhlIHJhbmdlIGlzIGFsaWduZWQ7IGkuZS4gYm90aCB0aGUgc3RhcnQgYW5kIHRoZSBsZW5ndGguXG5kcml2ZXJzL2h2L21zaHZfdnRsX21haW4uYzo0MTE6XHQgKiBDbGFtcCB0byBNQVhfRk9MSU9fT1JERVIgdG8gYXZvaWQgYSBXQVJOIGluIG1lbXJlbWFwX3BhZ2VzKCkgd2hlbiB0aGUgcmFuZ2VcbmRyaXZlcnMvaHYvbXNodl92dGxfbWFpbi5jLTQxMi1cdCAqIGFsaWdubWVudCBleGNlZWRzIHRoZSBtYXhpbXVtIHN1cHBvcnRlZCBmb2xpbyBvcmRlciBmb3IgdGhpcyBrZXJuZWwgY29uZmlnLlxuLS1cbmRyaXZlcnMvaHYvbXNodl92dGxfbWFpbi5jLTQxOS1cbmRyaXZlcnMvaHYvbXNodl92dGxfbWFpbi5jOjQyMDpcdGFkZHIgPSBkZXZtX21lbXJlbWFwX3BhZ2VzKG1lbV9kZXYsIHBnbWFwKTtcbmRyaXZlcnMvaHYvbXNodl92dGxfbWFpbi5jLTQyMS1cdGlmIChJU19FUlIoYWRkcikpIHtcbmRyaXZlcnMvaHYvbXNodl92dGxfbWFpbi5jOjQyMjpcdFx0ZGV2X2Vycih2dGwtXHUwMDNlbW9kdWxlX2RldiwgXCYjMzQ7ZGV2bV9tZW1yZW1hcF9wYWdlcyBlcnJvcjogJWxkXFxuXCYjMzQ7LCBQVFJfRVJSKGFkZHIpKTtcbmRyaXZlcnMvaHYvbXNodl92dGxfbWFpbi5jLTQyMy1cdFx0a2ZyZWUocGdtYXApO1xuLS1cbmRyaXZlcnMvbnZkaW1tL0tjb25maWc9MTQzPWNvbmZpZyBOVkRJTU1fVEVTVF9CVUlMRFxuLS1cbmRyaXZlcnMvbnZkaW1tL0tjb25maWctMTUxLVx0ICBvdGhlcndpc2UgaGVscHMgY2F0Y2ggYnVpbGQgZXJyb3JzIGluZHVjZWQgYnkgY2hhbmdlcyB0byB0aGVcbmRyaXZlcnMvbnZkaW1tL0tjb25maWc6MTUyOlx0ICBjb3JlIGRldm1fbWVtcmVtYXBfcGFnZXMoKSBpbXBsZW1lbnRhdGlvbiBhbmQgb3RoZXJcbmRyaXZlcnMvbnZkaW1tL0tjb25maWctMTUzLVx0ICBpbmZyYXN0cnVjdHVyZS5cbi0tXG5kcml2ZXJzL252ZGltbS9wbWVtLmM9NDQ4PXN0YXRpYyBpbnQgcG1lbV9hdHRhY2hfZGlzayhzdHJ1Y3QgZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTUxNy1cdFx0cG1lbS1cdTAwM2VwZ21hcC5vcHMgPSBcdTAwMjZmc2RheF9wYWdlbWFwX29wcztcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYzo1MTg6XHRcdGFkZHIgPSBkZXZtX21lbXJlbWFwX3BhZ2VzKGRldiwgXHUwMDI2cG1lbS1cdTAwM2VwZ21hcCk7XG5kcml2ZXJzL252ZGltbS9wbWVtLmMtNTE5LVx0XHRwZm5fc2IgPSBuZF9wZm4tXHUwMDNlcGZuX3NiO1xuLS1cbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy01MzAtXHRcdHBtZW0tXHUwMDNlcGdtYXAub3BzID0gXHUwMDI2ZnNkYXhfcGFnZW1hcF9vcHM7XG5kcml2ZXJzL252ZGltbS9wbWVtLmM6NTMxOlx0XHRhZGRyID0gZGV2bV9tZW1yZW1hcF9wYWdlcyhkZXYsIFx1MDAyNnBtZW0tXHUwMDNlcGdtYXApO1xuZHJpdmVycy9udmRpbW0vcG1lbS5jLTUzMi1cdFx0YmJfcmFuZ2UgPSBwbWVtLVx1MDAzZXBnbWFwLnJhbmdlO1xuLS1cbmRyaXZlcnMvbnZkaW1tL3JlZ2lvbl9kZXZzLmM9OTM0PUVYUE9SVF9TWU1CT0wobmRfcmVnaW9uX3JlbGVhc2VfbGFuZSk7XG4tLVxuZHJpdmVycy9udmRpbW0vcmVnaW9uX2RldnMuYy05MzYtLypcbmRyaXZlcnMvbnZkaW1tL3JlZ2lvbl9kZXZzLmM6OTM3OiAqIFBvd2VyUEMgcmVxdWlyZXMgdGhpcyBhbGlnbm1lbnQgZm9yIG1lbXJlbWFwX3BhZ2VzKCkuIEFsbCBvdGhlciBhcmNoc1xuZHJpdmVycy9udmRpbW0vcmVnaW9uX2RldnMuYy05MzgtICogc2hvdWxkIGJlIG9rIHdpdGggU1VCU0VDVElPTl9TSVpFIChzZWUgbWVtcmVtYXBfY29tcGF0X2FsaWduKCkpLlxuLS1cbmRyaXZlcnMvcGNpL3AycGRtYS5jPTM4Nz1pbnQgcGNpX3AycGRtYV9hZGRfcmVzb3VyY2Uoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBiYXIsIHNpemVfdCBzaXplLFxuLS1cbmRyaXZlcnMvcGNpL3AycGRtYS5jLTQzNi1cbmRyaXZlcnMvcGNpL3AycGRtYS5jOjQzNzpcdGFkZHIgPSBkZXZtX21lbXJlbWFwX3BhZ2VzKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBwZ21hcCk7XG5kcml2ZXJzL3BjaS9wMnBkbWEuYy00MzgtXHRpZiAoSVNfRVJSKGFkZHIpKSB7XG4tLVxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rjc3NibGsuYz01NTM9ZGNzc2Jsa19hZGRfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXG4tLVxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rjc3NibGsuYy02OTYtXHRcdGRldl9pbmZvLVx1MDAzZXBnbWFwLm5yX3JhbmdlXHQ9IDE7XG5kcml2ZXJzL3MzOTAvYmxvY2svZGNzc2Jsay5jOjY5NzpcdFx0YWRkciA9IGRldm1fbWVtcmVtYXBfcGFnZXMoXHUwMDI2ZGV2X2luZm8tXHUwMDNlZGV2LCBcdTAwMjZkZXZfaW5mby1cdTAwM2VwZ21hcCk7XG5kcml2ZXJzL3MzOTAvYmxvY2svZGNzc2Jsay5jLTY5OC1cdFx0aWYgKElTX0VSUihhZGRyKSkge1xuLS1cbmRyaXZlcnMveGVuL3VucG9wdWxhdGVkLWFsbG9jLmM9Mzc9c3RhdGljIGludCBmaWxsX2xpc3QodW5zaWduZWQgaW50IG5yX3BhZ2VzKVxuLS1cbmRyaXZlcnMveGVuL3VucG9wdWxhdGVkLWFsbG9jLmMtMTIzLVxuZHJpdmVycy94ZW4vdW5wb3B1bGF0ZWQtYWxsb2MuYzoxMjQ6XHR2YWRkciA9IG1lbXJlbWFwX3BhZ2VzKHBnbWFwLCBOVU1BX05PX05PREUpO1xuZHJpdmVycy94ZW4vdW5wb3B1bGF0ZWQtYWxsb2MuYy0xMjUtXHRpZiAoSVNfRVJSKHZhZGRyKSkge1xuLS1cbmZzL2Z1c2UvdmlydGlvX2ZzLmM9MTA3Nj1zdGF0aWMgaW50IHZpcnRpb19mc19zZXR1cF9kYXgoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYsIHN0cnVjdCB2aXJ0aW9fZnMgKmZzKVxuLS1cbmZzL2Z1c2UvdmlydGlvX2ZzLmMtMTExNi1cdC8qIElkZWFsbHkgd2Ugd291bGQgZGlyZWN0bHkgdXNlIHRoZSBQQ0kgQkFSIHJlc291cmNlIGJ1dFxuZnMvZnVzZS92aXJ0aW9fZnMuYzoxMTE3Olx0ICogZGV2bV9tZW1yZW1hcF9wYWdlcygpIHdhbnRzIGl0cyBvd24gY29weSBpbiBwZ21hcC4gIFNvXG5mcy9mdXNlL3ZpcnRpb19mcy5jLTExMTgtXHQgKiBpbml0aWFsaXplIGEgc3RydWN0IHJlc291cmNlIGZyb20gc2NyYXRjaCAob25seSB0aGUgc3RhcnRcbi0tXG5mcy9mdXNlL3ZpcnRpb19mcy5jLTExMjYtXG5mcy9mdXNlL3ZpcnRpb19mcy5jOjExMjc6XHRmcy1cdTAwM2V3aW5kb3dfa2FkZHIgPSBkZXZtX21lbXJlbWFwX3BhZ2VzKFx1MDAyNnZkZXYtXHUwMDNlZGV2LCBwZ21hcCk7XG5mcy9mdXNlL3ZpcnRpb19mcy5jLTExMjgtXHRpZiAoSVNfRVJSKGZzLVx1MDAzZXdpbmRvd19rYWRkcikpXG4tLVxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oPTc3PXN0cnVjdCBkZXZfcGFnZW1hcF9vcHMge1xuLS1cbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaC0xMTUtICogQGFsdG1hcDogcHJlLWFsbG9jYXRlZC9yZXNlcnZlZCBtZW1vcnkgZm9yIHZtZW1tYXAgYWxsb2NhdGlvbnNcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaDoxMTY6ICogQHJlZjogcmVmZXJlbmNlIGNvdW50IHRoYXQgcGlucyB0aGUgZGV2bV9tZW1yZW1hcF9wYWdlcygpIG1hcHBpbmdcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaC0xMTctICogQGRvbmU6IGNvbXBsZXRpb24gZm9yIEByZWZcbi0tXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmg9MjI3PXZvaWQgem9uZV9kZXZpY2VfcGFnZV9pbml0KHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwLFxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oLTIyOC1cdFx0XHQgICB1bnNpZ25lZCBpbnQgb3JkZXIpO1xuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oOjIyOTp2b2lkICptZW1yZW1hcF9wYWdlcyhzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwLCBpbnQgbmlkKTtcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaC0yMzAtdm9pZCBtZW11bm1hcF9wYWdlcyhzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwKTtcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaDoyMzE6dm9pZCAqZGV2bV9tZW1yZW1hcF9wYWdlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXApO1xuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oLTIzMi12b2lkIGRldm1fbWVtdW5tYXBfcGFnZXMoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwKTtcbi0tXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmg9MjQ3PXN0YXRpYyBpbmxpbmUgdm9pZCB6b25lX2RldmljZV9wcml2YXRlX3NwbGl0X2NiKHN0cnVjdCBmb2xpbyAqb3JpZ2luYWxfZm9saW8sXG4tLVxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oLTI2NC0jZWxzZVxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oOjI2NTpzdGF0aWMgaW5saW5lIHZvaWQgKmRldm1fbWVtcmVtYXBfcGFnZXMoc3RydWN0IGRldmljZSAqZGV2LFxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oLTI2Ni1cdFx0c3RydWN0IGRldl9wYWdlbWFwICpwZ21hcClcbi0tXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmgtMjY4LVx0LypcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaDoyNjk6XHQgKiBGYWlsIGF0dGVtcHRzIHRvIGNhbGwgZGV2bV9tZW1yZW1hcF9wYWdlcygpIHdpdGhvdXRcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaC0yNzAtXHQgKiBaT05FX0RFVklDRSBzdXBwb3J0IGVuYWJsZWQsIHRoaXMgcmVxdWlyZXMgY2FsbGVycyB0byBmYWxsXG4tLVxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oPTI4Nz1zdGF0aWMgaW5saW5lIGJvb2wgcGdtYXBfcGZuX3ZhbGlkKHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXAsIHVuc2lnbmVkIGxvbmcgcGZuKVxuLS1cbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaC0yOTEtXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmg6MjkyOi8qIHdoZW4gbWVtcmVtYXBfcGFnZXMoKSBpcyBkaXNhYmxlZCBhbGwgYXJjaHMgY2FuIHJlbWFwIGEgc2luZ2xlIHBhZ2UgKi9cbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaC0yOTMtc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG1lbXJlbWFwX2NvbXBhdF9hbGlnbih2b2lkKVxuLS1cbmxpYi90ZXN0X2htbS5jPTU1OD1zdGF0aWMgaW50IGRtaXJyb3JfYWxsb2NhdGVfY2h1bmsoc3RydWN0IGRtaXJyb3JfZGV2aWNlICptZGV2aWNlLFxuLS1cbmxpYi90ZXN0X2htbS5jLTYxNS1cdH1cbmxpYi90ZXN0X2htbS5jOjYxNjpcdHB0ciA9IG1lbXJlbWFwX3BhZ2VzKFx1MDAyNmRldm1lbS1cdTAwM2VwYWdlbWFwLCBudW1hX25vZGVfaWQoKSk7XG5saWIvdGVzdF9obW0uYy02MTctXHRpZiAoSVNfRVJSX09SX05VTEwocHRyKSkge1xuLS1cbm1tL21lbXJlbWFwLmM9MTc9c3RhdGljIERFRklORV9YQVJSQVkocGdtYXBfYXJyYXkpO1xuLS1cbm1tL21lbXJlbWFwLmMtMTktLypcbm1tL21lbXJlbWFwLmM6MjA6ICogVGhlIG1lbXJlbWFwKCkgYW5kIG1lbXJlbWFwX3BhZ2VzKCkgaW50ZXJmYWNlcyBhcmUgYWx0ZXJuYXRlbHkgdXNlZFxubW0vbWVtcmVtYXAuYy0yMS0gKiB0byBtYXAgcGVyc2lzdGVudCBtZW1vcnkgbmFtZXNwYWNlcy4gVGhlc2UgaW50ZXJmYWNlcyBwbGFjZSBkaWZmZXJlbnRcbm1tL21lbXJlbWFwLmMtMjItICogY29uc3RyYWludHMgb24gdGhlIGFsaWdubWVudCBhbmQgc2l6ZSBvZiB0aGUgbWFwcGluZyAobmFtZXNwYWNlKS5cbm1tL21lbXJlbWFwLmM6MjM6ICogbWVtcmVtYXAoKSBjYW4gbWFwIGluZGl2aWR1YWwgUEFHRV9TSVpFIHBhZ2VzLiBtZW1yZW1hcF9wYWdlcygpIGNhblxubW0vbWVtcmVtYXAuYy0yNC0gKiBvbmx5IG1hcCBzdWJzZWN0aW9ucyAoMk1CKSwgYW5kIGF0IGxlYXN0IG9uZSBhcmNoaXRlY3R1cmUgKFBvd2VyUEMpXG5tbS9tZW1yZW1hcC5jOjI1OiAqIHRoZSBtaW5pbXVtIG1hcHBpbmcgZ3JhbnVsYXJpdHkgb2YgbWVtcmVtYXBfcGFnZXMoKSBpcyAxNk1CLlxubW0vbWVtcmVtYXAuYy0yNi0gKlxuLS1cbm1tL21lbXJlbWFwLmM9MTMwPUVYUE9SVF9TWU1CT0xfR1BMKG1lbXVubWFwX3BhZ2VzKTtcbm1tL21lbXJlbWFwLmMtMTMxLVxubW0vbWVtcmVtYXAuYzoxMzI6c3RhdGljIHZvaWQgZGV2bV9tZW1yZW1hcF9wYWdlc19yZWxlYXNlKHZvaWQgKmRhdGEpXG5tbS9tZW1yZW1hcC5jLTEzMy17XG4tLVxubW0vbWVtcmVtYXAuYz0xNDQ9c3RhdGljIGludCBwYWdlbWFwX3JhbmdlKHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXAsIHN0cnVjdCBtaHBfcGFyYW1zICpwYXJhbXMsXG4tLVxubW0vbWVtcmVtYXAuYy0yNjEtLypcbm1tL21lbXJlbWFwLmM6MjYyOiAqIE5vdCBkZXZpY2UgbWFuYWdlZCB2ZXJzaW9uIG9mIGRldm1fbWVtcmVtYXBfcGFnZXMsIHVuZG9uZSBieVxubW0vbWVtcmVtYXAuYzoyNjM6ICogbWVtdW5tYXBfcGFnZXMoKS4gIFBsZWFzZSB1c2UgZGV2bV9tZW1yZW1hcF9wYWdlcyBpZiB5b3UgaGF2ZSBhIHN0cnVjdFxubW0vbWVtcmVtYXAuYy0yNjQtICogZGV2aWNlIGF2YWlsYWJsZS5cbm1tL21lbXJlbWFwLmMtMjY1LSAqL1xubW0vbWVtcmVtYXAuYzoyNjY6dm9pZCAqbWVtcmVtYXBfcGFnZXMoc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcCwgaW50IG5pZClcbm1tL21lbXJlbWFwLmMtMjY3LXtcbi0tXG5tbS9tZW1yZW1hcC5jLTM1MS19XG5tbS9tZW1yZW1hcC5jOjM1MjpFWFBPUlRfU1lNQk9MX0dQTChtZW1yZW1hcF9wYWdlcyk7XG5tbS9tZW1yZW1hcC5jLTM1My1cbm1tL21lbXJlbWFwLmMtMzU0LS8qKlxubW0vbWVtcmVtYXAuYzozNTU6ICogZGV2bV9tZW1yZW1hcF9wYWdlcyAtIHJlbWFwIGFuZCBwcm92aWRlIG1lbW1hcCBiYWNraW5nIGZvciB0aGUgZ2l2ZW4gcmVzb3VyY2Vcbm1tL21lbXJlbWFwLmMtMzU2LSAqIEBkZXY6IGhvc3RpbmcgZGV2aWNlIGZvciBAcmVzXG4tLVxubW0vbWVtcmVtYXAuYy0zNjctICogICAgJiMzOTtsaXZlJiMzOTsgb24gZW50cnkgYW5kIHdpbGwgYmUga2lsbGVkIGFuZCByZWFwZWQgYXRcbm1tL21lbXJlbWFwLmM6MzY4OiAqICAgIGRldm1fbWVtcmVtYXBfcGFnZXNfcmVsZWFzZSgpIHRpbWUsIG9yIGlmIHRoaXMgcm91dGluZSBmYWlscy5cbm1tL21lbXJlbWFwLmMtMzY5LSAqXG4tLVxubW0vbWVtcmVtYXAuYy0zNzMtICovXG5tbS9tZW1yZW1hcC5jOjM3NDp2b2lkICpkZXZtX21lbXJlbWFwX3BhZ2VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcClcbm1tL21lbXJlbWFwLmMtMzc1LXtcbi0tXG5tbS9tZW1yZW1hcC5jLTM3OC1cbm1tL21lbXJlbWFwLmM6Mzc5Olx0cmV0ID0gbWVtcmVtYXBfcGFnZXMocGdtYXAsIGRldl90b19ub2RlKGRldikpO1xubW0vbWVtcmVtYXAuYy0zODAtXHRpZiAoSVNfRVJSKHJldCkpXG4tLVxubW0vbWVtcmVtYXAuYy0zODItXG5tbS9tZW1yZW1hcC5jOjM4MzpcdGVycm9yID0gZGV2bV9hZGRfYWN0aW9uX29yX3Jlc2V0KGRldiwgZGV2bV9tZW1yZW1hcF9wYWdlc19yZWxlYXNlLFxubW0vbWVtcmVtYXAuYy0zODQtXHRcdFx0cGdtYXApO1xuLS1cbm1tL21lbXJlbWFwLmMtMzg4LX1cbm1tL21lbXJlbWFwLmM6Mzg5OkVYUE9SVF9TWU1CT0xfR1BMKGRldm1fbWVtcmVtYXBfcGFnZXMpO1xubW0vbWVtcmVtYXAuYy0zOTAtXG5tbS9tZW1yZW1hcC5jPTM5MT12b2lkIGRldm1fbWVtdW5tYXBfcGFnZXMoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwKVxubW0vbWVtcmVtYXAuYy0zOTIte1xubW0vbWVtcmVtYXAuYzozOTM6XHRkZXZtX3JlbGVhc2VfYWN0aW9uKGRldiwgZGV2bV9tZW1yZW1hcF9wYWdlc19yZWxlYXNlLCBwZ21hcCk7XG5tbS9tZW1yZW1hcC5jLTM5NC19XG4tLVxubW0vc3BhcnNlLXZtZW1tYXAuYz00MDI9aW50IF9fbWVtaW5pdCB2bWVtbWFwX3BvcHVsYXRlX2h1Z2VwYWdlcyh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbi0tXG5tbS9zcGFyc2Utdm1lbW1hcC5jLTQ1OS0gKlxubW0vc3BhcnNlLXZtZW1tYXAuYzo0NjA6ICogTm90ZSB0aGF0IG1lbXJlbWFwX3BhZ2VzKCkgcmVzZXRzIEBucl9yYW5nZSB2YWx1ZSBhbmQgd2lsbCBpbmNyZW1lbnRcbm1tL3NwYXJzZS12bWVtbWFwLmMtNDYxLSAqIGl0IGFmdGVyIGVhY2ggcmFuZ2Ugc3VjY2Vzc2Z1bCBvbmxpbmluZy4gVGh1cyB0aGUgdmFsdWUgb3IgQG5yX3JhbmdlXG4tLVxudG9vbHMvdGVzdGluZy9udmRpbW0vS2J1aWxkPTEzPWxkZmxhZ3MteSAmIzQzOz0gLS13cmFwPV9fcmVsZWFzZV9yZWdpb25cbnRvb2xzL3Rlc3RpbmcvbnZkaW1tL0tidWlsZDoxNDpsZGZsYWdzLXkgJiM0Mzs9IC0td3JhcD1kZXZtX21lbXJlbWFwX3BhZ2VzXG50b29scy90ZXN0aW5nL252ZGltbS9LYnVpbGQtMTUtbGRmbGFncy15ICYjNDM7PSAtLXdyYXA9aW5zZXJ0X3Jlc291cmNlXG4tLVxudG9vbHMvdGVzdGluZy9udmRpbW0vdGVzdC9pb21hcC5jPTEwOD1zdGF0aWMgdm9pZCBkZXZfcGFnZW1hcF9wZXJjcHVfcmVsZWFzZShzdHJ1Y3QgcGVyY3B1X3JlZiAqcmVmKVxuLS1cbnRvb2xzL3Rlc3RpbmcvbnZkaW1tL3Rlc3QvaW9tYXAuYy0xMTQtXG50b29scy90ZXN0aW5nL252ZGltbS90ZXN0L2lvbWFwLmM6MTE1OnZvaWQgKl9fd3JhcF9kZXZtX21lbXJlbWFwX3BhZ2VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcClcbnRvb2xzL3Rlc3RpbmcvbnZkaW1tL3Rlc3QvaW9tYXAuYy0xMTYte1xuLS1cbnRvb2xzL3Rlc3RpbmcvbnZkaW1tL3Rlc3QvaW9tYXAuYy0xMjEtXHRpZiAoIW5maXRfcmVzKVxudG9vbHMvdGVzdGluZy9udmRpbW0vdGVzdC9pb21hcC5jOjEyMjpcdFx0cmV0dXJuIGRldm1fbWVtcmVtYXBfcGFnZXMoZGV2LCBwZ21hcCk7XG50b29scy90ZXN0aW5nL252ZGltbS90ZXN0L2lvbWFwLmMtMTIzLVxuLS1cbnRvb2xzL3Rlc3RpbmcvbnZkaW1tL3Rlc3QvaW9tYXAuYy0xMzQtfVxudG9vbHMvdGVzdGluZy9udmRpbW0vdGVzdC9pb21hcC5jOjEzNTpFWFBPUlRfU1lNQk9MX0dQTChfX3dyYXBfZGV2bV9tZW1yZW1hcF9wYWdlcyk7XG50b29scy90ZXN0aW5nL252ZGltbS90ZXN0L2lvbWFwLmMtMTM2LVxuLS1cbnRvb2xzL3Rlc3RpbmcvbnZkaW1tL3Rlc3QvbmZpdF90ZXN0Lmg9MjEyPXZvaWQgKl9fd3JhcF9kZXZtX21lbXJlbWFwKHN0cnVjdCBkZXZpY2UgKmRldiwgcmVzb3VyY2Vfc2l6ZV90IG9mZnNldCxcbnRvb2xzL3Rlc3RpbmcvbnZkaW1tL3Rlc3QvbmZpdF90ZXN0LmgtMjEzLVx0XHRzaXplX3Qgc2l6ZSwgdW5zaWduZWQgbG9uZyBmbGFncyk7XG50b29scy90ZXN0aW5nL252ZGltbS90ZXN0L25maXRfdGVzdC5oOjIxNDp2b2lkICpfX3dyYXBfZGV2bV9tZW1yZW1hcF9wYWdlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXApO1xudG9vbHMvdGVzdGluZy9udmRpbW0vdGVzdC9uZml0X3Rlc3QuaC0yMTUtdm9pZCAqX193cmFwX21lbXJlbWFwKHJlc291cmNlX3NpemVfdCBvZmZzZXQsIHNpemVfdCBzaXplLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDA3OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MjAxCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMzA1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgbWVtcmVtYXBfcGFnZXMgUGF0aCBhbmQgT3B0aW1pemF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEl0IGxvb2tzIGxpa2UgYG1lbXJlbWFwX3BhZ2VzYCBpcyBhIGtleSBmdW5jdGlvbiwgY2FsbGVkIGluZGlyZWN0bHkgYnkgYGRldm1fbWVtcmVtYXBfcGFnZXNgLiBJIHNlZSB0aGlzIGlzIHVzZWQgaW4gc2V2ZXJhbCBpbXBvcnRhbnQgYXJlYXM6IHRoZSBEQVggZHJpdmVycyAoYGRldmljZS5jYCwgYGZzZGV2LmNgKSwgcGVyc2lzdGVudCBtZW1vcnkgKGBwbWVtLmNgKSwgdGhlIHZpcnRpby1mcyBpbXBsZW1lbnRhdGlvbiwgYW5kIHAycGRtYS4gU3BlY2lmaWNhbGx5LCB2aXJ0aW8tZnMgc3RhbmRzIG91dCBhcyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBpbiBhIFFFTVUgZW52aXJvbm1lbnQsIHdoaWNoIGlzIHVzZWZ1bCB0byBrbm93LiBQbHVzLCB0aGVyZSYjMzk7cyBgbGliL3Rlc3RfaG1tLmNgLCB3aGljaCB1c2VzIGl0LiBgdGVzdF9obW1gIHN1Z2dlc3RzIHdlIGNhbiBkaXJlY3RseSB0ZXN0IHRoaXMgZnVuY3Rpb25hbGl0eS4gVGhpcyBtZWFucyBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgIGlzIHBvdGVudGlhbGx5IHJlYWNoYWJsZSBpbiBhIFFFTVUgY29udGV4dCBhcyB3ZWxsLgoKTm93LCBsZXQmIzM5O3MgcmVmb2N1cyBvbiB0aGUgcGF0Y2ggaXRzZWxmLiBJdCBtb2RpZmllcyBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgIGFuZCBgbWVtbWFwX2luaXRfY29tcG91bmRgIHdpdGhpbiBgbW0vbW1faW5pdC5jYC4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBsb2dpYyByZXNpZGVzLiBUaGUgcGF0Y2ggYWxzbyBpbnRyb2R1Y2VzIGBtZW1jcHlfbm9udGVtcG9yYWxgLCBhZGRpbmcgaXQgdG8gYm90aCBgYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmhgIGFuZCB0aGUgZ2VuZXJhbCBgaW5jbHVkZS9saW51eC9zdHJpbmcuaGAgaGVhZGVycy4KCk15IGltbWVkaWF0ZSBpbnRlcnByZXRhdGlvbiBpcyB0aGF0IHRoZSBwYXRjaCBpcyBvcHRpbWl6aW5nIGhvdyBgc3RydWN0IHBhZ2VgIGlzIGluaXRpYWxpemVkLCBzcGVjaWZpY2FsbHkgZm9yIGBaT05FX0RFVklDRWAgbWVtb3J5LiBUaGUgc3RyYXRlZ3kgaXMgdG8gY3JlYXRlIGEgdGVtcGxhdGUgcGFnZSBhbmQgdGhlbiBlZmZpY2llbnRseSBjb3B5IGl0IHRvIHRoZSByZW1haW5pbmcgcGFnZXMgdXNpbmcgYG1lbWNweV9ub250ZW1wb3JhbGAuIFRoaXMgaXMgYSBjbGFzc2ljIG9wdGltaXphdGlvbiB0ZWNobmlxdWUgZm9yIG1lbW9yeSBpbml0aWFsaXphdGlvbiwgYXNzdW1pbmcgdGhlIGluaXRpYWwgcGFnZSBjb250YWlucyB0aGUgbmVjZXNzYXJ5IGRlZmF1bHQgdmFsdWVzLiBHaXZlbiB0aGUgY29udGV4dCwgdGhpcyBwcm9iYWJseSBhZGRyZXNzZXMgc29tZSBzcGVjaWZpYyBwZXJmb3JtYW5jZSBib3R0bGVuZWNrIGR1cmluZyBkZXZpY2UgaW5pdGlhbGl6YXRpb24uCgpUaW1lIHRvIGRlbHZlIGludG8gdGhlIGNvZGUgY2hhbmdlcyBpbiBgbW0vbW1faW5pdC5jYCBhbmQgY29uZmlybSB0aGVzZSBhc3N1bXB0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMDc6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7em9uZV9kZXZpY2VfcGFnZV9pbml0X2Zyb21fdGVtcGxhdGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbW1faW5pdC5jPTEwODU9c3RhdGljIGlubGluZSB2b2lkIHpvbmVfZGV2aWNlX3BhZ2VfdXBkYXRlX3RlbXBsYXRlKHN0cnVjdCBwYWdlICp0ZW1wbGF0ZSxcbi0tXG5tbS9tbV9pbml0LmMtMTA5NC1cbm1tL21tX2luaXQuYzoxMDk1OnN0YXRpYyB2b2lkIHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9mcm9tX3RlbXBsYXRlKHN0cnVjdCBwYWdlICpwYWdlLFxubW0vbW1faW5pdC5jLTEwOTYtXHRcdHVuc2lnbmVkIGxvbmcgcGZuLCBzdHJ1Y3QgcGFnZSAqdGVtcGxhdGUpXG4tLVxubW0vbW1faW5pdC5jPTExMzE9c3RhdGljIHZvaWQgX19yZWYgbWVtbWFwX2luaXRfY29tcG91bmQoc3RydWN0IHBhZ2UgKmhlYWQsXG4tLVxubW0vbW1faW5pdC5jLTExNjQtXHRcdH0gZWxzZSB7XG5tbS9tbV9pbml0LmM6MTE2NTpcdFx0XHR6b25lX2RldmljZV9wYWdlX2luaXRfZnJvbV90ZW1wbGF0ZShwYWdlLCBwZm4sXG5tbS9tbV9pbml0LmMtMTE2Ni1cdFx0XHRcdFx0XHRcdCAgICBcdTAwMjZ0ZW1wbGF0ZSk7XG4tLVxubW0vbW1faW5pdC5jPTExNzI9dm9pZCBfX3JlZiBtZW1tYXBfaW5pdF96b25lX2RldmljZShzdHJ1Y3Qgem9uZSAqem9uZSxcbi0tXG5tbS9tbV9pbml0LmMtMTIxNC1cdFx0fSBlbHNlIHtcbm1tL21tX2luaXQuYzoxMjE1Olx0XHRcdHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9mcm9tX3RlbXBsYXRlKHBhZ2UsIHBmbixcbm1tL21tX2luaXQuYy0xMjE2LVx0XHRcdFx0XHRcdFx0ICAgIFx1MDAyNnRlbXBsYXRlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMDc6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUyNDAKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAxMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBab25lIERldmljZSBJbml0aWFsaXphdGlvbiBGdW5jdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGUgem9uZSBkZXZpY2UgaW5pdGlhbGl6YXRpb24gY29kZSwgYW5kIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGtleSBmdW5jdGlvbnMgaGVyZS4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgb25lcyB0aGF0IGltbWVkaWF0ZWx5IGp1bXAgb3V0IGFyZTogYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYCwgYG1lbW1hcF9pbml0X2NvbXBvdW5kYCwgYHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9mcm9tX3RlbXBsYXRlYCwgYHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9zbG93YCwgYHpvbmVfZGV2aWNlX3RhaWxfcGFnZV9pbml0YCwgYW5kIGB6b25lX2RldmljZV9wYWdlX3VwZGF0ZV90ZW1wbGF0ZWAuIFJpZ2h0LCB0aGF0IHNlZW1zIHRvIGJlIHRoZSBjb3JlIHNldCBJIG5lZWQgdG8gdW5kZXJzdGFuZC4KCldhaXQgYSBzZWNvbmQsIGdsYW5jaW5nIGJhY2suLi4gYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYCBsb29rcyBsaWtlIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50LiBUaGF0IG1ha2VzIHNlbnNlLiBOb3csIGxldCYjMzk7cyBmaWd1cmUgb3V0IHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gV2hhdCBmbGFncyBvciBmZWF0dXJlcyBuZWVkIHRvIGJlIGVuYWJsZWQgZm9yIHRoaXMgdG8gZXZlbiBydW4/IEkmIzM5O2xsIGJldCBgQ09ORklHX1pPTkVfREVWSUNFYCBpcyB0aGUga2V5LiBUaW1lIHRvIGNyYWNrIG9wZW4gYG1tL0tjb25maWdgIGFuZCBkb3VibGUtY2hlY2suIEdvdHRhIGNvbmZpcm0gdGhhdCBiZWZvcmUgSSBnbyBhbnkgZnVydGhlciBkb3duIHRoZSByYWJiaXQgaG9sZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMDc6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFpPTkVfREVWSUNFJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9MTIzMT1jb25maWcgWk9ORV9ETUEzMlxuLS1cbm1tL0tjb25maWctMTIzNS1cbm1tL0tjb25maWc6MTIzNjpjb25maWcgWk9ORV9ERVZJQ0Vcbm1tL0tjb25maWctMTIzNy1cdGJvb2wgXCYjMzQ7RGV2aWNlIG1lbW9yeSAocG1lbSwgSE1NLCBldGMuLi4pIGhvdHBsdWcgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAwNzo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTcwNQoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIERlcGVuZGVuY2llcyBmb3IgWk9ORV9ERVZJQ0UqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGFyY2hpdGVjdHVyYWwgaW1wbGljYXRpb25zIG9mIGBaT05FX0RFVklDRWAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O1doYXQgYXJlIHRoZSBkZXBlbmRlbmNpZXMgaGVyZT8mIzM0OyBJIG5lZWQgdG8gZGlnIGRlZXBlciBhbmQgc2VlIHdoYXQgcGllY2VzIG9mIHRoZSBzeXN0ZW0gcmVseSBvbiB0aGlzLiBBcmUgd2UgdGFsa2luZyBoYXJkd2FyZSBhYnN0cmFjdGlvbj8gSXMgaXQgcmVsYXRlZCB0byB0aGUgb3ZlcmFsbCByZXNvdXJjZSBtYW5hZ2VtZW50IHdpdGhpbiB0aGUgem9uZT8gT3IsIGlzIGl0IHBlcmhhcHMgYSBsb2dpY2FsIGNvbnN0cnVjdD8gS25vd2luZyB0aGUgZGVwZW5kZW5jaWVzIGlzIGNydWNpYWwgdG8gYXNzZXNzIHRoZSBwb3RlbnRpYWwgaW1wYWN0IG9mIGFueSBjaGFuZ2VzIG9yIHRvIHRyb3VibGVzaG9vdCB1bmV4cGVjdGVkIGJlaGF2aW9yIGRvd24gdGhlIGxpbmUuIEl0IHJlYWxseSBib2lscyBkb3duIHRvOiAmIzM0O1doYXQgYXJlIHRoZSAqZXh0ZXJuYWwqIHN5c3RlbXMgb3IgZnVuY3Rpb25hbGl0aWVzIHdoaWNoIGhhdmUgYSB0aWdodCBjb3VwbGluZyB3aXRoIGBaT05FX0RFVklDRWA/JiMzNDsgSSBuZWVkIHRvIG1hcCBpdCBhbGwgb3V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAwNzo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZXBlbmRzIG9uLipaT05FX0RFVklDRSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2dwdS9kcm0veGUvS2NvbmZpZz03OT1jb25maWcgRFJNX1hFX0dQVVNWTVxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS9LY29uZmlnLTgyLVx0ZGVwZW5kcyBvbiAhVU1MXG5kcml2ZXJzL2dwdS9kcm0veGUvS2NvbmZpZzo4MzpcdGRlcGVuZHMgb24gWk9ORV9ERVZJQ0VcbmRyaXZlcnMvZ3B1L2RybS94ZS9LY29uZmlnLTg0LVx0ZGVmYXVsdCB5XG4tLVxuZHJpdmVycy9udmRpbW0vS2NvbmZpZz02Mj1jb25maWcgTlZESU1NX1BGTlxuLS1cbmRyaXZlcnMvbnZkaW1tL0tjb25maWctNjQtXHRkZWZhdWx0IExJQk5WRElNTVxuZHJpdmVycy9udmRpbW0vS2NvbmZpZzo2NTpcdGRlcGVuZHMgb24gWk9ORV9ERVZJQ0VcbmRyaXZlcnMvbnZkaW1tL0tjb25maWctNjYtXHRzZWxlY3QgTkRfQ0xBSU1cbi0tXG5kcml2ZXJzL3BjaS9LY29uZmlnPTIwNj1jb25maWcgUENJX1AyUERNQVxuZHJpdmVycy9wY2kvS2NvbmZpZy0yMDctXHRib29sIFwmIzM0O1BDSSBwZWVyLXRvLXBlZXIgdHJhbnNmZXIgc3VwcG9ydFwmIzM0O1xuZHJpdmVycy9wY2kvS2NvbmZpZzoyMDg6XHRkZXBlbmRzIG9uIFpPTkVfREVWSUNFXG5kcml2ZXJzL3BjaS9LY29uZmlnLTIwOS1cdCNcbi0tXG5kcml2ZXJzL3MzOTAvYmxvY2svS2NvbmZpZz01PWNvbmZpZyBEQ1NTQkxLXG4tLVxuZHJpdmVycy9zMzkwL2Jsb2NrL0tjb25maWctNy1cdHByb21wdCBcJiMzNDtEQ1NTQkxLIHN1cHBvcnRcJiMzNDtcbmRyaXZlcnMvczM5MC9ibG9jay9LY29uZmlnOjg6XHRkZXBlbmRzIG9uIFMzOTAgXHUwMDI2XHUwMDI2IEJMT0NLIFx1MDAyNlx1MDAyNiBaT05FX0RFVklDRVxuZHJpdmVycy9zMzkwL2Jsb2NrL0tjb25maWctOS1cdHNlbGVjdCBGU19EQVhcbi0tXG5kcml2ZXJzL3hlbi9LY29uZmlnPTMzNj1jb25maWcgWEVOX1VOUE9QVUxBVEVEX0FMTE9DXG5kcml2ZXJzL3hlbi9LY29uZmlnLTMzNy1cdGJvb2wgXCYjMzQ7VXNlIHVucG9wdWxhdGVkIG1lbW9yeSByYW5nZXMgZm9yIGd1ZXN0IG1hcHBpbmdzXCYjMzQ7XG5kcml2ZXJzL3hlbi9LY29uZmlnOjMzODpcdGRlcGVuZHMgb24gWk9ORV9ERVZJQ0VcbmRyaXZlcnMveGVuL0tjb25maWctMzM5LVx0ZGVmYXVsdCBYRU5fQkFDS0VORCB8fCBYRU5fR05UREVWIHx8IFhFTl9ET00wXG4tLVxuZnMvS2NvbmZpZz01OD1jb25maWcgRlNfREFYXG4tLVxuZnMvS2NvbmZpZy02MC1cdGRlcGVuZHMgb24gTU1VXG5mcy9LY29uZmlnOjYxOlx0ZGVwZW5kcyBvbiBaT05FX0RFVklDRVxuZnMvS2NvbmZpZy02Mi1cdHNlbGVjdCBGU19JT01BUFxuLS1cbmZzL0tjb25maWc9OTA9Y29uZmlnIEZTX0RBWF9QTURcbi0tXG5mcy9LY29uZmlnLTkzLVx0ZGVwZW5kcyBvbiBGU19EQVhcbmZzL0tjb25maWc6OTQ6XHRkZXBlbmRzIG9uIFpPTkVfREVWSUNFXG5mcy9LY29uZmlnLTk1LVx0ZGVwZW5kcyBvbiBUUkFOU1BBUkVOVF9IVUdFUEFHRVxuLS1cbm1tL0tjb25maWc9MTI2Nz1jb25maWcgREVWSUNFX1BSSVZBVEVcbm1tL0tjb25maWctMTI2OC1cdGJvb2wgXCYjMzQ7VW5hZGRyZXNzYWJsZSBkZXZpY2UgbWVtb3J5IChHUFUgbWVtb3J5LCAuLi4pXCYjMzQ7XG5tbS9LY29uZmlnOjEyNjk6XHRkZXBlbmRzIG9uIFpPTkVfREVWSUNFXG5tbS9LY29uZmlnLTEyNzAtXHRzZWxlY3QgR0VUX0ZSRUVfUkVHSU9OXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDA3OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NTU3CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUuIE15IG1pbmQmIzM5O3MgYnV6emluZyDigJMgSSYjMzk7bSBpbiB0aGUgdGhpY2sgb2YgdGhpcyBhbmQgSSBuZWVkIHRvIGVuc3VyZSBteSB1bmRlcnN0YW5kaW5nIGlzIHJvY2sgc29saWQgYmVmb3JlIEkgcHJvY2VlZC4KCioqRGVwZW5kZW5jaWVzIENoZWNrOiBEZWVwIERpdmUqKgoKSG9sZCBvbiwgYmVmb3JlIEkgZGl2ZSBhbnkgZGVlcGVyLCBJIG5lZWQgdG8gdGFrZSBhIHN0ZXAgYmFjayBhbmQgZXhhbWluZSB0aGUgZm91bmRhdGlvbi4gSXQmIzM5O3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgb2YgYFpPTkVfREVWSUNFYC4gV2hhdCYjMzk7cyB0aGlzIHBhcnRpY3VsYXIgcGllY2UgcmVseWluZyBvbiBhdCBpdHMgbW9zdCBiYXNpYyBsZXZlbD8gV2hhdCBhcmUgdGhlIHVuZGVybHlpbmcgY29tcG9uZW50cyBvciBjb25maWd1cmF0aW9ucyB0aGF0ICppdCogcmVxdWlyZXMgdG8gZnVuY3Rpb24gY29ycmVjdGx5PyBJIG5lZWQgdG8gYnVpbGQgdXAgYSBjbGVhciBtZW50YWwgbWFwIG9mIHdoYXQgKnRoaXMqIGRlcGVuZHMgb24uIE5lZWQgdG8gZmluZCB0aGUga2V5IGRlcGVuZGVuY2llcywgbm90IGp1c3Qgd2hlcmUgaXQgdG91Y2hlcyBvdGhlciBjb2RlLCBidXQgd2hhdCB0aGUgYmVkcm9jayBpcywgYW5kIHdoYXQgdGhlIGRlcGVuZGVuY2llcyBvZiBUSEFUIGFyZS4gT25seSBvbmNlIEkgdHJ1bHkga25vdyBpdHMgZGVwZW5kZW5jaWVzIGNhbiBJIGJlIGNvbmZpZGVudCB0aGF0IEkmIzM5O20gbm90IG1ha2luZyBhc3N1bXB0aW9ucyBhbmQgSSBjYW4gYmVnaW4gdG8gdW5yYXZlbCB0aGlzIHBhcnRpY3VsYXIgaXNzdWUuIEdvdHRhIGNoYXNlIGRvd24gYWxsIHRoZSBicmFuY2hlcyBvZiByZWxpYW5jZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMDc6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFpPTkVfREVWSUNFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTEyMzE9Y29uZmlnIFpPTkVfRE1BMzJcbi0tXG5tbS9LY29uZmlnLTEyMzUtXG5tbS9LY29uZmlnOjEyMzY6Y29uZmlnIFpPTkVfREVWSUNFXG5tbS9LY29uZmlnLTEyMzctXHRib29sIFwmIzM0O0RldmljZSBtZW1vcnkgKHBtZW0sIEhNTSwgZXRjLi4uKSBob3RwbHVnIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMDc6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY4ODAKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBNYXplKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSYjMzk7bSBnb2luZyB0byBqdW1wIGludG8gdGhlIGBtbS9LY29uZmlnYCBmaWxlLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gYWltaW5nIGZvciBhcm91bmQgbGluZSAxMjM2LiBHaXZlbiBteSBmYW1pbGlhcml0eSB3aXRoIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0sIEkgc3VzcGVjdCB0aGF0IHNlY3Rpb24gbWlnaHQgaG9sZCBjbHVlcyBhYm91dCBhIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9uIG9yIHJlbGF0ZWQgZGVwZW5kZW5jaWVzIEkmIzM5O3ZlIGJlZW4gY29uc2lkZXJpbmcuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgaW5mb3JtYXRpb24gcGVydGFpbmluZyB0byBzb21lIG1lbW9yeSBtYW5hZ2VtZW50IGZlYXR1cmUgb3IgYSBjb25maWd1cmF0aW9uIGtub2IgdGhhdCBtaWdodCBiZSBjcnVjaWFsIHRvIHNvbWUgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uIEkmIzM5O20gd29ya2luZyB0aHJvdWdoLCBvciBwb3NzaWJseSBldmVuIGRlYnVnZ2luZy4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBLY29uZmlnIGhhcyB0byBzYXkhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDA3OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyMzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTIzMDpcdFxuMTIzMTpcdGNvbmZpZyBaT05FX0RNQTMyXG4xMjMyOlx0XHRib29sIFwmIzM0O1N1cHBvcnQgRE1BMzIgem9uZVwmIzM0OyBpZiBBUkNIX0hBU19aT05FX0RNQV9TRVRcbjEyMzM6XHRcdGRlcGVuZHMgb24gIVg4Nl8zMlxuMTIzNDpcdFx0ZGVmYXVsdCB5IGlmIEFSTTY0XG4xMjM1Olx0XG4xMjM2Olx0Y29uZmlnIFpPTkVfREVWSUNFXG4xMjM3Olx0XHRib29sIFwmIzM0O0RldmljZSBtZW1vcnkgKHBtZW0sIEhNTSwgZXRjLi4uKSBob3RwbHVnIHN1cHBvcnRcJiMzNDtcbjEyMzg6XHRcdGRlcGVuZHMgb24gTUVNT1JZX0hPVFBMVUdcbjEyMzk6XHRcdGRlcGVuZHMgb24gTUVNT1JZX0hPVFJFTU9WRVxuMTI0MDpcdFx0ZGVwZW5kcyBvbiBTUEFSU0VNRU1fVk1FTU1BUFxuMTI0MTpcdFx0c2VsZWN0IFhBUlJBWV9NVUxUSVxuMTI0MjpcdFxuMTI0MzpcdFx0aGVscFxuMTI0NDpcdFx0ICBEZXZpY2UgbWVtb3J5IGhvdHBsdWcgc3VwcG9ydCBhbGxvd3MgZm9yIGVzdGFibGlzaGluZyBwbWVtLFxuMTI0NTpcdFx0ICBvciBvdGhlciBkZXZpY2UgZHJpdmVyIGRpc2NvdmVyZWQgbWVtb3J5IHJlZ2lvbnMsIGluIHRoZVxuMTI0NjpcdFx0ICBtZW1tYXAuIFRoaXMgYWxsb3dzIHBmbl90b19wYWdlKCkgbG9va3VwcyBvZiBvdGhlcndpc2VcbjEyNDc6XHRcdCAgXCYjMzQ7ZGV2aWNlLXBoeXNpY2FsXCYjMzQ7IGFkZHJlc3NlcyB3aGljaCBpcyBuZWVkZWQgZm9yIERBWCwgUENJX1AyUERNQSwgYW5kXG4xMjQ4Olx0XHQgIERFVklDRV9QUklWQVRFIGZlYXR1cmVzIGFtb25nIG90aGVycy5cbjEyNDk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMDc6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTczOTQKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAxMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRW5hYmxpbmcgWm9uZSBEZXZpY2VzIGFuZCBBc3NvY2lhdGVkIERlcGVuZGVuY2llcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYFpPTkVfREVWSUNFYCwgYW5kIGl0JiMzOTtzIGNsZWFyIHRoYXQgaXQmIzM5O3MgcmVsaWFudCBvbiBhIGZldyBrZXkgYnVpbGRpbmcgYmxvY2tzOiBgTUVNT1JZX0hPVFBMVUdgLCBgTUVNT1JZX0hPVFJFTU9WRWAsIGFuZCBgU1BBUlNFTUVNX1ZNRU1NQVBgLiBNYWtlcyBzZW5zZSDigJMgdGhlIHdob2xlIHBvaW50IGlzIG1hbmFnaW5nIGRldmljZSBtZW1vcnkgZHluYW1pY2FsbHkuIEFscmlnaHQsIGxldCYjMzk7cyBlbmFibGUgYFpPTkVfREVWSUNFYC4gTm93LCB0aGUgbmV4dCBsb2dpY2FsIHF1ZXN0aW9uIGlzLCB3aGF0IGNhbiBhY3R1YWxseSAqdXNlKiBpdD8gV2UgbmVlZCBhIGRyaXZlciBvciBmZWF0dXJlIHRoYXQgaW50ZWdyYXRlcyB3aXRoIGl0IHRvIHJlYWxseSB0ZXN0IGl0cyBmdW5jdGlvbmFsaXR5LgoKVGhpbmtpbmcgdGhyb3VnaCBwb3RlbnRpYWwgY2FuZGlkYXRlcy4uLiBgRlNfREFYYCBpcyBhIHN0cm9uZyBjb250ZW5kZXIg4oCTIERpcmVjdCBBY2Nlc3Mgc3RvcmFnZSBzb3VuZHMgbGlrZSBpdCB3b3VsZCBwbGF5IG5pY2VseS4gVGhlbiB0aGVyZSYjMzk7cyBgUENJX1AyUERNQWAsIHRoYXQgY291bGQgYmUgcmVsYXRlZCB0byBtZW1vcnkgbWFwcGVkIGludG8gdGhlIFBDSSBzcGFjZSwgYERFVklDRV9QUklWQVRFYCwgd2hpY2ggaXMgYSBjb21tb24gaG9vaywgb3IgYE5WRElNTV9QRk5gLiBUaG9zZSBhbGwgaGF2ZSBhIGdvb2QgY2hhbmNlIG9mIGJlaW5nIHJlbGV2YW50LiBCZWZvcmUgSSBnZXQgdG9vIGRlZXAgaW50byBhbnkgb2YgdGhvc2UsIGxldCYjMzk7cyBqdXN0IG1ha2Ugc3VyZSB0aGVyZSYjMzk7cyBhbiBlYXN5IHRyaWdnZXIgdG8gdGVzdCB0aGlzIG9uIHRoZSBsb3dlciBsZXZlbCwgYW5kIGZvciB0aGF0IEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgYFRFU1RfSE1NYCBpbiBgbGliL0tjb25maWcuZGVidWdgLiBJdCYjMzk7cyBsaWtlbHkgdGhhdCBhIHNtYWxsIGRlYnVnZ2luZyB0ZXN0IGlzIGF2YWlsYWJsZSB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMDc6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFRFU1RfSE1NJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2xpYi9LY29uZmlnLmRlYnVnPTMzNDY9Y29uZmlnIFRFU1RfTUVNSU5JVFxuLS1cbmxpYi9LY29uZmlnLmRlYnVnLTMzNTMtXG5saWIvS2NvbmZpZy5kZWJ1ZzozMzU0OmNvbmZpZyBURVNUX0hNTVxubGliL0tjb25maWcuZGVidWctMzM1NS1cdHRyaXN0YXRlIFwmIzM0O1Rlc3QgSE1NIChIZXRlcm9nZW5lb3VzIE1lbW9yeSBNYW5hZ2VtZW50KVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAwNzo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzg4MQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byBEZWJ1Z2dpbmcgQ29uZmlndXJhdGlvbioqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgc29tZXRoaW5nIHNwZWNpZmljIGFib3V0IHRoZSBkZWJ1Z2dpbmcgY29uZmlndXJhdGlvbiBmb3IgdGhpcyBwcm9qZWN0LiBNeSBpbnR1aXRpb24gdGVsbHMgbWUgdGhhdCB0aGUgcmVsZXZhbnQgc2V0dGluZ3MgYXJlIGxpa2VseSBsb2NhdGVkIHdpdGhpbiB0aGUgYEtjb25maWcuZGVidWdgIGZpbGUsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAzMzU0LiBJJiMzOTtsbCB0YWtlIGEgbG9vayBhdCB0aGF0IGZpbGUgbG9jYXRpb24gZGlyZWN0bHkuIExldCYjMzk7cyBzZWUgd2hhdCBzZWNyZXRzIGl0IGhvbGRzLiBIb3BlZnVsbHksIHRoaXMgc2VjdGlvbiB3aWxsIHNoZWQgc29tZSBsaWdodCBvbiB0aGUgY29uZmlndXJhdGlvbiBJJiMzOTttIHRyeWluZyB0byBkZWNpcGhlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMDc6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtsaWIvS2NvbmZpZy5kZWJ1ZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMzNTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzM1MDpcdFx0ICBUaGlzIGNhbiBiZSB1c2VmdWwgdG8gdGVzdCBpbml0X29uX2FsbG9jIGFuZCBpbml0X29uX2ZyZWUgZmVhdHVyZXMuXG4zMzUxOlx0XG4zMzUyOlx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4zMzUzOlx0XG4zMzU0Olx0Y29uZmlnIFRFU1RfSE1NXG4zMzU1Olx0XHR0cmlzdGF0ZSBcJiMzNDtUZXN0IEhNTSAoSGV0ZXJvZ2VuZW91cyBNZW1vcnkgTWFuYWdlbWVudClcJiMzNDtcbjMzNTY6XHRcdGRlcGVuZHMgb24gVFJBTlNQQVJFTlRfSFVHRVBBR0VcbjMzNTc6XHRcdGRlcGVuZHMgb24gREVWSUNFX1BSSVZBVEVcbjMzNTg6XHRcdHNlbGVjdCBITU1fTUlSUk9SXG4zMzU5Olx0XHRzZWxlY3QgTU1VX05PVElGSUVSXG4zMzYwOlx0XHRoZWxwXG4zMzYxOlx0XHQgIFRoaXMgaXMgYSBwc2V1ZG8gZGV2aWNlIGRyaXZlciBzb2xlbHkgZm9yIHRlc3RpbmcgSE1NLlxuMzM2MjpcdFx0ICBTYXkgTSBoZXJlIGlmIHlvdSB3YW50IHRvIGJ1aWxkIHRoZSBITU0gdGVzdCBtb2R1bGUuXG4zMzYzOlx0XHQgIERvaW5nIHNvIHdpbGwgYWxsb3cgeW91IHRvIHJ1biB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0L3ZtL2htbS10ZXN0cy5cbjMzNjQ6XHRcbjMzNjU6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbjMzNjY6XHRcbjMzNjc6XHRjb25maWcgVEVTVF9GUkVFX1BBR0VTXG4zMzY4Olx0XHR0cmlzdGF0ZSBcJiMzNDtUZXN0IGZyZWVpbmcgcGFnZXNcJiMzNDtcbjMzNjk6XHRcdGhlbHBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMDc6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgzNDkKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAxMDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgUmVhc29uaW5nIG9uIHRoZSBURVNUX0hNTSBEZXBlbmRlbmN5IENoYWluKioKCk9rYXksIGhlcmUmIzM5O3MgaG93IEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzLiBgVEVTVF9ITU1gIGhhcyBhIGRpcmVjdCBkZXBlbmRlbmN5IG9uIGBERVZJQ0VfUFJJVkFURWAuIGBERVZJQ0VfUFJJVkFURWAsIGluIHR1cm4sIHJlbGllcyBvbiBgWk9ORV9ERVZJQ0VgLiBTbywgd2UgKmNvdWxkKiBqdXN0IGVuYWJsZSBhbGwgdGhyZWU6IGBURVNUX0hNTWAsIGBERVZJQ0VfUFJJVkFURWAsIGFuZCBgWk9ORV9ERVZJQ0VgLiBUaGF0JiMzOTtzIHRoZSBzdHJhaWdodGZvcndhcmQgYXBwcm9hY2guCgpCdXQsIGhvbGQgb24uLi4gdGhlIHJlYWwgcXVlc3Rpb24gaXMgd2hldGhlciBgVEVTVF9ITU1gIGlzIGFjdHVhbGx5ICpleHBsb2l0YWJsZSogdmlhIHN5emthbGxlci4gRG9lcyBzeXprYWxsZXIgaGF2ZSBhIHBhdGggdG8gcmVhY2ggaXQ/IFN5emthbGxlciBjYW4gbG9hZCBtb2R1bGVzIGFuZCBpdCBjYW4gaW50ZXJhY3Qgd2l0aCBgL2Rldi9obW1fZG1pcnJvcipgIGRldmljZXMgaWYgdGhleSYjMzk7cmUgYnVpbHQtaW4uIFRoYXQmIzM5O3MgdGhlIGNydWNpYWwgbGluay4gU28sIEkgbmVlZCB0byBjaGVjayBpZiBgVEVTVF9ITU1gIGFjdHVhbGx5ICpjcmVhdGVzKiBhIGRldmljZSBub2RlLiBUaGF0JiMzOTtzIHRoZSBseW5jaHBpbi4gVGhhdCYjMzk7cyB3aGF0IGRldGVybWluZXMgaWYgc3l6a2FsbGVyIGNhbiByZWFsaXN0aWNhbGx5IGJlIHVzZWQgdG8gdGVzdCBpdC4gSSBuZWVkIHRvIGNvbmZpcm0gaWYgaXQgaGFzIGEgZHJpdmVyIG9yIGRldmljZSBhc3NvY2lhdGVkIHdpdGggaXQsIGJlZm9yZSBzcGVuZGluZyBtb3JlIHRpbWUgb24gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDA3OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2htbV9kbWlycm9yJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2xpYi90ZXN0X2htbS5jPTQyNT1zdGF0aWMgaW50IGRtaXJyb3JfZG9fcmVhZChzdHJ1Y3QgZG1pcnJvciAqZG1pcnJvciwgdW5zaWduZWQgbG9uZyBzdGFydCxcbi0tXG5saWIvdGVzdF9obW0uYy00NTAtXG5saWIvdGVzdF9obW0uYzo0NTE6c3RhdGljIGludCBkbWlycm9yX3JlYWQoc3RydWN0IGRtaXJyb3IgKmRtaXJyb3IsIHN0cnVjdCBobW1fZG1pcnJvcl9jbWQgKmNtZClcbmxpYi90ZXN0X2htbS5jLTQ1Mi17XG4tLVxubGliL3Rlc3RfaG1tLmM9NDkxPXN0YXRpYyBpbnQgZG1pcnJvcl9kb193cml0ZShzdHJ1Y3QgZG1pcnJvciAqZG1pcnJvciwgdW5zaWduZWQgbG9uZyBzdGFydCxcbi0tXG5saWIvdGVzdF9obW0uYy01MTYtXG5saWIvdGVzdF9obW0uYzo1MTc6c3RhdGljIGludCBkbWlycm9yX3dyaXRlKHN0cnVjdCBkbWlycm9yICpkbWlycm9yLCBzdHJ1Y3QgaG1tX2RtaXJyb3JfY21kICpjbWQpXG5saWIvdGVzdF9obW0uYy01MTgte1xuLS1cbmxpYi90ZXN0X2htbS5jPTU1OD1zdGF0aWMgaW50IGRtaXJyb3JfYWxsb2NhdGVfY2h1bmsoc3RydWN0IGRtaXJyb3JfZGV2aWNlICptZGV2aWNlLFxuLS1cbmxpYi90ZXN0X2htbS5jLTU3NS1cdFx0cmVzID0gcmVxdWVzdF9mcmVlX21lbV9yZWdpb24oXHUwMDI2aW9tZW1fcmVzb3VyY2UsIERFVk1FTV9DSFVOS19TSVpFLFxubGliL3Rlc3RfaG1tLmM6NTc2Olx0XHRcdFx0XHQgICAgICBcJiMzNDtobW1fZG1pcnJvclwmIzM0Oyk7XG5saWIvdGVzdF9obW0uYy01NzctXHRcdGlmIChJU19FUlJfT1JfTlVMTChyZXMpKVxuLS1cbmxpYi90ZXN0X2htbS5jPTk0Nz1zdGF0aWMgaW50IGRtaXJyb3JfZXhjbHVzaXZlKHN0cnVjdCBkbWlycm9yICpkbWlycm9yLFxubGliL3Rlc3RfaG1tLmM6OTQ4Olx0XHRcdCAgICAgc3RydWN0IGhtbV9kbWlycm9yX2NtZCAqY21kKVxubGliL3Rlc3RfaG1tLmMtOTQ5LXtcbi0tXG5saWIvdGVzdF9obW0uYz0xMTIwPXN0YXRpYyBpbnQgZG1pcnJvcl9taWdyYXRlX3RvX3N5c3RlbShzdHJ1Y3QgZG1pcnJvciAqZG1pcnJvcixcbmxpYi90ZXN0X2htbS5jOjExMjE6XHRcdFx0XHQgICAgIHN0cnVjdCBobW1fZG1pcnJvcl9jbWQgKmNtZClcbmxpYi90ZXN0X2htbS5jLTExMjIte1xuLS1cbmxpYi90ZXN0X2htbS5jPTExODk9c3RhdGljIGludCBkbWlycm9yX21pZ3JhdGVfdG9fZGV2aWNlKHN0cnVjdCBkbWlycm9yICpkbWlycm9yLFxubGliL3Rlc3RfaG1tLmM6MTE5MDpcdFx0XHRcdHN0cnVjdCBobW1fZG1pcnJvcl9jbWQgKmNtZClcbmxpYi90ZXN0X2htbS5jLTExOTEte1xuLS1cbmxpYi90ZXN0X2htbS5jPTE0MDk9c3RhdGljIGludCBkbWlycm9yX3NuYXBzaG90KHN0cnVjdCBkbWlycm9yICpkbWlycm9yLFxubGliL3Rlc3RfaG1tLmM6MTQxMDpcdFx0XHQgICAgc3RydWN0IGhtbV9kbWlycm9yX2NtZCAqY21kKVxubGliL3Rlc3RfaG1tLmMtMTQxMS17XG4tLVxubGliL3Rlc3RfaG1tLmM9MTUxMz1zdGF0aWMgbG9uZyBkbWlycm9yX2ZvcHNfdW5sb2NrZWRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsXG4tLVxubGliL3Rlc3RfaG1tLmMtMTUxNy1cdHZvaWQgX191c2VyICp1YXJnID0gKHZvaWQgX191c2VyICopYXJnO1xubGliL3Rlc3RfaG1tLmM6MTUxODpcdHN0cnVjdCBobW1fZG1pcnJvcl9jbWQgY21kO1xubGliL3Rlc3RfaG1tLmMtMTUxOS1cdHN0cnVjdCBkbWlycm9yICpkbWlycm9yO1xuLS1cbmxpYi90ZXN0X2htbS5jPTE3Nzk9c3RhdGljIGludCBkbWlycm9yX2RldmljZV9pbml0KHN0cnVjdCBkbWlycm9yX2RldmljZSAqbWRldmljZSwgaW50IGlkKVxuLS1cbmxpYi90ZXN0X2htbS5jLTE3OTQtXG5saWIvdGVzdF9obW0uYzoxNzk1Olx0cmV0ID0gZGV2X3NldF9uYW1lKFx1MDAyNm1kZXZpY2UtXHUwMDNlZGV2aWNlLCBcJiMzNDtobW1fZG1pcnJvciV1XCYjMzQ7LCBpZCk7XG5saWIvdGVzdF9obW0uYy0xNzk2LVx0aWYgKHJldClcbi0tXG5saWIvdGVzdF9obW0uYz0xODE1PXN0YXRpYyB2b2lkIGRtaXJyb3JfZGV2aWNlX3JlbW92ZShzdHJ1Y3QgZG1pcnJvcl9kZXZpY2UgKm1kZXZpY2UpXG4tLVxubGliL3Rlc3RfaG1tLmMtMTgyMC1cbmxpYi90ZXN0X2htbS5jOjE4MjE6c3RhdGljIGludCBfX2luaXQgaG1tX2RtaXJyb3JfaW5pdCh2b2lkKVxubGliL3Rlc3RfaG1tLmMtMTgyMi17XG4tLVxubGliL3Rlc3RfaG1tLmMtMTg1OS1cbmxpYi90ZXN0X2htbS5jOjE4NjA6c3RhdGljIHZvaWQgX19leGl0IGhtbV9kbWlycm9yX2V4aXQodm9pZClcbmxpYi90ZXN0X2htbS5jLTE4NjEte1xuLS1cbmxpYi90ZXN0X2htbS5jLTE4NjktXG5saWIvdGVzdF9obW0uYzoxODcwOm1vZHVsZV9pbml0KGhtbV9kbWlycm9yX2luaXQpO1xubGliL3Rlc3RfaG1tLmM6MTg3MTptb2R1bGVfZXhpdChobW1fZG1pcnJvcl9leGl0KTtcbmxpYi90ZXN0X2htbS5jLTE4NzItTU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O0hNTSAoSGV0ZXJvZ2VuZW91cyBNZW1vcnkgTWFuYWdlbWVudCkgdGVzdCBtb2R1bGVcJiMzNDspO1xuLS1cbmxpYi90ZXN0X2htbV91YXBpLmgtMjItICovXG5saWIvdGVzdF9obW1fdWFwaS5oOjIzOnN0cnVjdCBobW1fZG1pcnJvcl9jbWQge1xubGliL3Rlc3RfaG1tX3VhcGkuaC0yNC1cdF9fdTY0XHRcdGFkZHI7XG4tLVxubGliL3Rlc3RfaG1tX3VhcGkuaC0zMS0vKiBFeHBvc2UgdGhlIGFkZHJlc3Mgc3BhY2Ugb2YgdGhlIGNhbGxpbmcgcHJvY2VzcyB0aHJvdWdoIGhtbSBkZXZpY2UgZmlsZSAqL1xubGliL3Rlc3RfaG1tX3VhcGkuaDozMjojZGVmaW5lIEhNTV9ETUlSUk9SX1JFQURcdFx0X0lPV1IoJiMzOTtIJiMzOTssIDB4MDAsIHN0cnVjdCBobW1fZG1pcnJvcl9jbWQpXG5saWIvdGVzdF9obW1fdWFwaS5oOjMzOiNkZWZpbmUgSE1NX0RNSVJST1JfV1JJVEVcdFx0X0lPV1IoJiMzOTtIJiMzOTssIDB4MDEsIHN0cnVjdCBobW1fZG1pcnJvcl9jbWQpXG5saWIvdGVzdF9obW1fdWFwaS5oOjM0OiNkZWZpbmUgSE1NX0RNSVJST1JfTUlHUkFURV9UT19ERVZcdF9JT1dSKCYjMzk7SCYjMzk7LCAweDAyLCBzdHJ1Y3QgaG1tX2RtaXJyb3JfY21kKVxubGliL3Rlc3RfaG1tX3VhcGkuaDozNTojZGVmaW5lIEhNTV9ETUlSUk9SX01JR1JBVEVfVE9fU1lTXHRfSU9XUigmIzM5O0gmIzM5OywgMHgwMywgc3RydWN0IGhtbV9kbWlycm9yX2NtZClcbmxpYi90ZXN0X2htbV91YXBpLmg6MzY6I2RlZmluZSBITU1fRE1JUlJPUl9TTkFQU0hPVFx0XHRfSU9XUigmIzM5O0gmIzM5OywgMHgwNCwgc3RydWN0IGhtbV9kbWlycm9yX2NtZClcbmxpYi90ZXN0X2htbV91YXBpLmg6Mzc6I2RlZmluZSBITU1fRE1JUlJPUl9FWENMVVNJVkVcdFx0X0lPV1IoJiMzOTtIJiMzOTssIDB4MDUsIHN0cnVjdCBobW1fZG1pcnJvcl9jbWQpXG5saWIvdGVzdF9obW1fdWFwaS5oOjM4OiNkZWZpbmUgSE1NX0RNSVJST1JfQ0hFQ0tfRVhDTFVTSVZFXHRfSU9XUigmIzM5O0gmIzM5OywgMHgwNiwgc3RydWN0IGhtbV9kbWlycm9yX2NtZClcbmxpYi90ZXN0X2htbV91YXBpLmg6Mzk6I2RlZmluZSBITU1fRE1JUlJPUl9SRUxFQVNFXHRcdF9JT1dSKCYjMzk7SCYjMzk7LCAweDA3LCBzdHJ1Y3QgaG1tX2RtaXJyb3JfY21kKVxubGliL3Rlc3RfaG1tX3VhcGkuaDo0MDojZGVmaW5lIEhNTV9ETUlSUk9SX0ZMQUdTXHRcdF9JT1dSKCYjMzk7SCYjMzk7LCAweDA4LCBzdHJ1Y3QgaG1tX2RtaXJyb3JfY21kKVxubGliL3Rlc3RfaG1tX3VhcGkuaC00MS1cbi0tXG5saWIvdGVzdF9obW1fdWFwaS5oLTQ0LS8qXG5saWIvdGVzdF9obW1fdWFwaS5oOjQ1OiAqIFZhbHVlcyByZXR1cm5lZCBpbiBobW1fZG1pcnJvcl9jbWQucHRyIGZvciBITU1fRE1JUlJPUl9TTkFQU0hPVC5cbmxpYi90ZXN0X2htbV91YXBpLmgtNDYtICogSE1NX0RNSVJST1JfUFJPVF9FUlJPUjogbm8gdmFsaWQgbWlycm9yIFBURSBmb3IgdGhpcyBwYWdlXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmM9MTI1PXN0YXRpYyBpbnQgaG1tX29wZW4oaW50IHVuaXQpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMtMTI5LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmM6MTMwOlx0c25wcmludGYocGF0aG5hbWUsIHNpemVvZihwYXRobmFtZSksIFwmIzM0Oy9kZXYvaG1tX2RtaXJyb3IlZFwmIzM0OywgdW5pdCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy0xMzEtXHRmZCA9IG9wZW4ocGF0aG5hbWUsIE9fUkRXUiwgMCk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmM9MTc1PUZJWFRVUkVfVEVBUkRPV04oaG1tMilcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy0xODYtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYzoxODc6c3RhdGljIGludCBobW1fZG1pcnJvcl9jbWQoaW50IGZkLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMtMTg4LVx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgcmVxdWVzdCxcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy0xOTEte1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmM6MTkyOlx0c3RydWN0IGhtbV9kbWlycm9yX2NtZCBjbWQ7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy0xOTMtXHRpbnQgcmV0O1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jPTI3OT1zdGF0aWMgaW50IGhtbV9taWdyYXRlX3N5c190b19kZXYoaW50IGZkLFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jLTI4Mi17XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYzoyODM6XHRyZXR1cm4gaG1tX2RtaXJyb3JfY21kKGZkLCBITU1fRE1JUlJPUl9NSUdSQVRFX1RPX0RFViwgYnVmZmVyLCBucGFnZXMpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMtMjg0LX1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYz0yODY9c3RhdGljIGludCBobW1fbWlncmF0ZV9kZXZfdG9fc3lzKGludCBmZCxcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy0yODkte1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmM6MjkwOlx0cmV0dXJuIGhtbV9kbWlycm9yX2NtZChmZCwgSE1NX0RNSVJST1JfTUlHUkFURV9UT19TWVMsIGJ1ZmZlciwgbnBhZ2VzKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jLTI5MS19XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmM9MzAzPVRFU1RfRihobW0sIGFub25fcmVhZClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy0zNDctXHQvKiBTaW11bGF0ZSBhIGRldmljZSByZWFkaW5nIHN5c3RlbSBtZW1vcnkuICovXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYzozNDg6XHRyZXQgPSBobW1fZG1pcnJvcl9jbWQoc2VsZi1cdTAwM2VmZCwgSE1NX0RNSVJST1JfUkVBRCwgYnVmZmVyLCBucGFnZXMpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMtMzQ5LVx0QVNTRVJUX0VRKHJldCwgMCk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmM9MzY3PVRFU1RfRihobW0sIGFub25fcmVhZF9wcm90KVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jLTQwNi1cdC8qIFNpbXVsYXRlIGEgZGV2aWNlIHJlYWRpbmcgc3lzdGVtIG1lbW9yeS4gKi9cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jOjQwNzpcdHJldCA9IGhtbV9kbWlycm9yX2NtZChzZWxmLVx1MDAzZWZkLCBITU1fRE1JUlJPUl9SRUFELCBidWZmZXIsIG5wYWdlcyk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy00MDgtXHRBU1NFUlRfRVEocmV0LCAtRUZBVUxUKTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYz00MjY9VEVTVF9GKGhtbSwgYW5vbl93cml0ZSlcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy00NTctXHQvKiBTaW11bGF0ZSBhIGRldmljZSB3cml0aW5nIHN5c3RlbSBtZW1vcnkuICovXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYzo0NTg6XHRyZXQgPSBobW1fZG1pcnJvcl9jbWQoc2VsZi1cdTAwM2VmZCwgSE1NX0RNSVJST1JfV1JJVEUsIGJ1ZmZlciwgbnBhZ2VzKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jLTQ1OS1cdEFTU0VSVF9FUShyZXQsIDApO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jPTQ3ND1URVNUX0YoaG1tLCBhbm9uX3dyaXRlX3Byb3QpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMtNTAxLVx0LyogU2ltdWxhdGUgYSBkZXZpY2UgcmVhZGluZyBhIHplcm8gcGFnZSBvZiBtZW1vcnkuICovXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYzo1MDI6XHRyZXQgPSBobW1fZG1pcnJvcl9jbWQoc2VsZi1cdTAwM2VmZCwgSE1NX0RNSVJST1JfUkVBRCwgYnVmZmVyLCAxKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jLTUwMy1cdEFTU0VSVF9FUShyZXQsIDApO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jLTUxMS1cdC8qIFNpbXVsYXRlIGEgZGV2aWNlIHdyaXRpbmcgc3lzdGVtIG1lbW9yeS4gKi9cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jOjUxMjpcdHJldCA9IGhtbV9kbWlycm9yX2NtZChzZWxmLVx1MDAzZWZkLCBITU1fRE1JUlJPUl9XUklURSwgYnVmZmVyLCBucGFnZXMpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMtNTEzLVx0QVNTRVJUX0VRKHJldCwgLUVQRVJNKTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy01MjMtXHQvKiBTaW11bGF0ZSBhIGRldmljZSB3cml0aW5nIHN5c3RlbSBtZW1vcnkuICovXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYzo1MjQ6XHRyZXQgPSBobW1fZG1pcnJvcl9jbWQoc2VsZi1cdTAwM2VmZCwgSE1NX0RNSVJST1JfV1JJVEUsIGJ1ZmZlciwgbnBhZ2VzKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jLTUyNS1cdEFTU0VSVF9FUShyZXQsIDApO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jPTU0Mj1URVNUX0YoaG1tLCBhbm9uX3dyaXRlX2NoaWxkKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jLTYyNy1cdFx0XHQvKiBTaW11bGF0ZSBhIGRldmljZSB3cml0aW5nIHN5c3RlbSBtZW1vcnkuICovXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYzo2Mjg6XHRcdFx0cmV0ID0gaG1tX2RtaXJyb3JfY21kKGNoaWxkX2ZkLCBITU1fRE1JUlJPUl9XUklURSwgYnVmZmVyLCBucGFnZXMpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMtNjI5LVx0XHRcdEFTU0VSVF9FUShyZXQsIDApO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jPTY0OT1URVNUX0YoaG1tLCBhbm9uX3dyaXRlX2NoaWxkX3NoYXJlZClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy03MDktXHQvKiBTaW11bGF0ZSBhIGRldmljZSB3cml0aW5nIHN5c3RlbSBtZW1vcnkuICovXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYzo3MTA6XHRyZXQgPSBobW1fZG1pcnJvcl9jbWQoY2hpbGRfZmQsIEhNTV9ETUlSUk9SX1dSSVRFLCBidWZmZXIsIG5wYWdlcyk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy03MTEtXHRBU1NFUlRfRVEocmV0LCAwKTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYz03MjY9VEVTVF9GKGhtbSwgYW5vbl93cml0ZV9odWdlKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jLTc2NS1cdC8qIFNpbXVsYXRlIGEgZGV2aWNlIHdyaXRpbmcgc3lzdGVtIG1lbW9yeS4gKi9cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jOjc2NjpcdHJldCA9IGhtbV9kbWlycm9yX2NtZChzZWxmLVx1MDAzZWZkLCBITU1fRE1JUlJPUl9XUklURSwgYnVmZmVyLCBucGFnZXMpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMtNzY3LVx0QVNTRVJUX0VRKHJldCwgMCk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmM9NzgyPVRFU1RfRihobW0sIGFub25fd3JpdGVfaHVnZXRsYmZzKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jLTgxOS1cdC8qIFNpbXVsYXRlIGEgZGV2aWNlIHdyaXRpbmcgc3lzdGVtIG1lbW9yeS4gKi9cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jOjgyMDpcdHJldCA9IGhtbV9kbWlycm9yX2NtZChzZWxmLVx1MDAzZWZkLCBITU1fRE1JUlJPUl9XUklURSwgYnVmZmVyLCBucGFnZXMpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMtODIxLVx0QVNTRVJUX0VRKHJldCwgMCk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmM9ODM3PVRFU1RfRihobW0sIGZpbGVfcmVhZClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy04NzYtXHQvKiBTaW11bGF0ZSBhIGRldmljZSByZWFkaW5nIHN5c3RlbSBtZW1vcnkuICovXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYzo4Nzc6XHRyZXQgPSBobW1fZG1pcnJvcl9jbWQoc2VsZi1cdTAwM2VmZCwgSE1NX0RNSVJST1JfUkVBRCwgYnVmZmVyLCBucGFnZXMpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMtODc4LVx0QVNTRVJUX0VRKHJldCwgMCk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmM9ODkyPVRFU1RfRihobW0sIGZpbGVfd3JpdGUpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMtOTI4LVx0LyogU2ltdWxhdGUgYSBkZXZpY2Ugd3JpdGluZyBzeXN0ZW0gbWVtb3J5LiAqL1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmM6OTI5Olx0cmV0ID0gaG1tX2RtaXJyb3JfY21kKHNlbGYtXHUwMDNlZmQsIEhNTV9ETUlSUk9SX1dSSVRFLCBidWZmZXIsIG5wYWdlcyk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy05MzAtXHRBU1NFUlRfRVEocmV0LCAwKTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYz0xMTA0PVRFU1RfRihobW0sIG1pZ3JhdGVfcmVsZWFzZSlcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy0xMTQyLVx0LyogUmVsZWFzZSBkZXZpY2UgbWVtb3J5LiAqL1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmM6MTE0MzpcdHJldCA9IGhtbV9kbWlycm9yX2NtZChzZWxmLVx1MDAzZWZkLCBITU1fRE1JUlJPUl9SRUxFQVNFLCBidWZmZXIsIG5wYWdlcyk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy0xMTQ0LVx0QVNTRVJUX0VRKHJldCwgMCk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmM9MTM0Mj1URVNUX0YoaG1tLCBhbm9uX3JlYWRfbXVsdGlwbGUpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMtMTM3NS1cdFx0LyogU2ltdWxhdGUgYSBkZXZpY2UgcmVhZGluZyBzeXN0ZW0gbWVtb3J5LiAqL1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmM6MTM3NjpcdFx0cmV0ID0gaG1tX2RtaXJyb3JfY21kKHNlbGYtXHUwMDNlZmQsIEhNTV9ETUlSUk9SX1JFQUQsIGJ1ZmZlcixcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jLTEzNzctXHRcdFx0XHQgICAgICBucGFnZXMpO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jPTE0MDU9VEVTVF9GKGhtbSwgYW5vbl90ZWFyZG93bilcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy0xNDQ0LVx0XHQvKiBTaW11bGF0ZSBhIGRldmljZSByZWFkaW5nIHN5c3RlbSBtZW1vcnkuICovXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYzoxNDQ1Olx0XHRyYyA9IGhtbV9kbWlycm9yX2NtZChzZWxmLVx1MDAzZWZkLCBITU1fRE1JUlJPUl9SRUFELCBidWZmZXIsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy0xNDQ2LVx0XHRcdFx0ICAgICBucGFnZXMpO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jPTE0NjY9VEVTVF9GKGhtbSwgbWl4ZWRtYXApXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMtMTQ5My1cdC8qIFNpbXVsYXRlIGEgZGV2aWNlIHNuYXBzaG90dGluZyBDUFUgcGFnZXRhYmxlcy4gKi9cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jOjE0OTQ6XHRyZXQgPSBobW1fZG1pcnJvcl9jbWQoc2VsZi1cdTAwM2VmZCwgSE1NX0RNSVJST1JfU05BUFNIT1QsIGJ1ZmZlciwgbnBhZ2VzKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jLTE0OTUtXHRBU1NFUlRfRVEocmV0LCAwKTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYz0xNTA4PVRFU1RfRihobW0yLCBzbmFwc2hvdClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy0xNTgwLVx0YnVmZmVyLVx1MDAzZXB0ciA9IHA7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYzoxNTgxOlx0cmV0ID0gaG1tX2RtaXJyb3JfY21kKHNlbGYtXHUwMDNlZmQwLCBITU1fRE1JUlJPUl9TTkFQU0hPVCwgYnVmZmVyLCBucGFnZXMpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMtMTU4Mi1cdEFTU0VSVF9FUShyZXQsIDApO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jPTE2MTA9VEVTVF9GKGhtbSwgY29tcG91bmQpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMtMTY0OS1cdC8qIFNpbXVsYXRlIGEgZGV2aWNlIHNuYXBzaG90dGluZyBDUFUgcGFnZXRhYmxlcy4gKi9cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jOjE2NTA6XHRyZXQgPSBobW1fZG1pcnJvcl9jbWQoc2VsZi1cdTAwM2VmZCwgSE1NX0RNSVJST1JfU05BUFNIT1QsIGJ1ZmZlciwgbnBhZ2VzKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jLTE2NTEtXHRBU1NFUlRfRVEocmV0LCAwKTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy0xNjczLVx0LyogU2ltdWxhdGUgYSBkZXZpY2Ugc25hcHNob3R0aW5nIENQVSBwYWdldGFibGVzLiAqL1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmM6MTY3NDpcdHJldCA9IGhtbV9kbWlycm9yX2NtZChzZWxmLVx1MDAzZWZkLCBITU1fRE1JUlJPUl9TTkFQU0hPVCwgYnVmZmVyLCBucGFnZXMpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMtMTY3NS1cdEFTU0VSVF9FUShyZXQsIDApO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jPTE2OTg9VEVTVF9GKGhtbTIsIGRvdWJsZV9tYXApXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMtMTczMy1cdC8qIFNpbXVsYXRlIGRldmljZSAwIHJlYWRpbmcgc3lzdGVtIG1lbW9yeS4gKi9cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jOjE3MzQ6XHRyZXQgPSBobW1fZG1pcnJvcl9jbWQoc2VsZi1cdTAwM2VmZDAsIEhNTV9ETUlSUk9SX1JFQUQsIGJ1ZmZlciwgbnBhZ2VzKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jLTE3MzUtXHRBU1NFUlRfRVEocmV0LCAwKTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy0xNzQzLVx0LyogU2ltdWxhdGUgZGV2aWNlIDEgcmVhZGluZyBzeXN0ZW0gbWVtb3J5LiAqL1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmM6MTc0NDpcdHJldCA9IGhtbV9kbWlycm9yX2NtZChzZWxmLVx1MDAzZWZkMSwgSE1NX0RNSVJST1JfUkVBRCwgYnVmZmVyLCBucGFnZXMpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMtMTc0NS1cdEFTU0VSVF9FUShyZXQsIDApO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jLTE3NTctXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYzoxNzU4Olx0cmV0ID0gaG1tX2RtaXJyb3JfY21kKHNlbGYtXHUwMDNlZmQwLCBITU1fRE1JUlJPUl9SRUFELCBidWZmZXIsIG5wYWdlcyk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy0xNzU5LVx0QVNTRVJUX0VRKHJldCwgMCk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmM9MTc3Mz1URVNUX0YoaG1tLCBleGNsdXNpdmUpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMtMTgwNC1cdC8qIE1hcCBtZW1vcnkgZXhjbHVzaXZlbHkgZm9yIGRldmljZSBhY2Nlc3MuICovXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYzoxODA1Olx0cmV0ID0gaG1tX2RtaXJyb3JfY21kKHNlbGYtXHUwMDNlZmQsIEhNTV9ETUlSUk9SX0VYQ0xVU0lWRSwgYnVmZmVyLCBucGFnZXMpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMtMTgwNi1cdEFTU0VSVF9FUShyZXQsIDApO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jLTE4MjAtXHQvKiBDaGVjayBhdG9taWMgYWNjZXNzIHJldm9rZWQgKi9cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jOjE4MjE6XHRyZXQgPSBobW1fZG1pcnJvcl9jbWQoc2VsZi1cdTAwM2VmZCwgSE1NX0RNSVJST1JfQ0hFQ0tfRVhDTFVTSVZFLCBidWZmZXIsIG5wYWdlcyk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy0xODIyLVx0QVNTRVJUX0VRKHJldCwgMCk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmM9MTgyNz1URVNUX0YoaG1tLCBleGNsdXNpdmVfbXByb3RlY3QpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMtMTg1OC1cdC8qIE1hcCBtZW1vcnkgZXhjbHVzaXZlbHkgZm9yIGRldmljZSBhY2Nlc3MuICovXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYzoxODU5Olx0cmV0ID0gaG1tX2RtaXJyb3JfY21kKHNlbGYtXHUwMDNlZmQsIEhNTV9ETUlSUk9SX0VYQ0xVU0lWRSwgYnVmZmVyLCBucGFnZXMpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMtMTg2MC1cdEFTU0VSVF9FUShyZXQsIDApO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jLTE4NzAtXHQvKiBTaW11bGF0ZSBhIGRldmljZSB3cml0aW5nIHN5c3RlbSBtZW1vcnkuICovXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYzoxODcxOlx0cmV0ID0gaG1tX2RtaXJyb3JfY21kKHNlbGYtXHUwMDNlZmQsIEhNTV9ETUlSUk9SX1dSSVRFLCBidWZmZXIsIG5wYWdlcyk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy0xODcyLVx0QVNTRVJUX0VRKHJldCwgLUVQRVJNKTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYz0xODgwPVRFU1RfRihobW0sIGV4Y2x1c2l2ZV9jb3cpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMtMTkxMy1cdC8qIE1hcCBtZW1vcnkgZXhjbHVzaXZlbHkgZm9yIGRldmljZSBhY2Nlc3MuICovXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYzoxOTE0Olx0cmV0ID0gaG1tX2RtaXJyb3JfY21kKHNlbGYtXHUwMDNlZmQsIEhNTV9ETUlSUk9SX0VYQ0xVU0lWRSwgYnVmZmVyLCBucGFnZXMpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMtMTkxNS1cdEFTU0VSVF9FUShyZXQsIDApO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jPTE5Nzg9VEVTVF9GKGhtbSwgaG1tX2d1cF90ZXN0KVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jLTIwMzUtXHQvKiBUYWtlIHNuYXBzaG90IHRvIENQVSBwYWdldGFibGVzICovXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYzoyMDM2Olx0cmV0ID0gaG1tX2RtaXJyb3JfY21kKHNlbGYtXHUwMDNlZmQsIEhNTV9ETUlSUk9SX1NOQVBTSE9ULCBidWZmZXIsIG5wYWdlcyk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy0yMDM3LVx0QVNTRVJUX0VRKHJldCwgMCk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmM9MjA2Nz1URVNUX0YoaG1tLCBobW1fY293X2luX2RldmljZSlcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy0yMTI4LVx0LyogVGFrZSBzbmFwc2hvdCB0byBDUFUgcGFnZXRhYmxlcyAqL1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmM6MjEyOTpcdHJldCA9IGhtbV9kbWlycm9yX2NtZChzZWxmLVx1MDAzZWZkLCBITU1fRE1JUlJPUl9TTkFQU0hPVCwgYnVmZmVyLCBucGFnZXMpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMtMjEzMC1cdEFTU0VSVF9FUShyZXQsIDApO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jPTIzMTY9VEVTVF9GKGhtbSwgbWlncmF0ZV9hbm9uX2h1Z2VfZmF1bHQpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMtMjM2OC1cdGlmICghaG1tX2lzX2NvaGVyZW50X3R5cGUodmFyaWFudC1cdTAwM2VkZXZpY2VfbnVtYmVyKSkge1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmM6MjM2OTpcdFx0cmV0ID0gaG1tX2RtaXJyb3JfY21kKHNlbGYtXHUwMDNlZmQsIEhNTV9ETUlSUk9SX1NOQVBTSE9ULFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMtMjM3MC1cdFx0XHRcdCAgICAgIGJ1ZmZlciwgbnBhZ2VzKTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYz0yNTgwPVRFU1RfRihobW0sIG1pZ3JhdGVfYW5vbl9odWdlX2Vycilcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy0yNjE2LVx0LyogTWlncmF0ZSBtZW1vcnkgdG8gZGV2aWNlIGJ1dCBmb3JjZSBhIFRIUCBhbGxvY2F0aW9uIGVycm9yLiAqL1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmM6MjYxNzpcdHJldCA9IGhtbV9kbWlycm9yX2NtZChzZWxmLVx1MDAzZWZkLCBITU1fRE1JUlJPUl9GTEFHUywgYnVmZmVyLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMtMjYxOC1cdFx0XHQgICAgICBITU1fRE1JUlJPUl9GTEFHX0ZBSUxfQUxMT0MpO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jLTI2NTgtXHQgKi9cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jOjI2NTk6XHRyZXQgPSBobW1fZG1pcnJvcl9jbWQoc2VsZi1cdTAwM2VmZCwgSE1NX0RNSVJST1JfRkxBR1MsIGJ1ZmZlcixcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jLTI2NjAtXHRcdFx0ICAgICAgSE1NX0RNSVJST1JfRkxBR19GQUlMX0FMTE9DKTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYz0yNjc1PVRFU1RfRihobW0sIG1pZ3JhdGVfYW5vbl9odWdlX3plcm9fZXJyKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jLTI3MDctXHQvKiBNaWdyYXRlIG1lbW9yeSB0byBkZXZpY2UgYnV0IGZvcmNlIGEgVEhQIGFsbG9jYXRpb24gZXJyb3IuICovXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYzoyNzA4Olx0cmV0ID0gaG1tX2RtaXJyb3JfY21kKHNlbGYtXHUwMDNlZmQsIEhNTV9ETUlSUk9SX0ZMQUdTLCBidWZmZXIsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy0yNzA5LVx0XHRcdCAgICAgIEhNTV9ETUlSUk9SX0ZMQUdfRkFJTF9BTExPQyk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMtMjczOC1cdC8qIE1pZ3JhdGUgbWVtb3J5IHRvIGRldmljZSBidXQgZm9yY2UgYSBUSFAgYWxsb2NhdGlvbiBlcnJvci4gKi9cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jOjI3Mzk6XHRyZXQgPSBobW1fZG1pcnJvcl9jbWQoc2VsZi1cdTAwM2VmZCwgSE1NX0RNSVJST1JfRkxBR1MsIGJ1ZmZlcixcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jLTI3NDAtXHRcdFx0ICAgICAgSE1NX0RNSVJST1JfRkxBR19GQUlMX0FMTE9DKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMDc6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU4MDUKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA5NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEhtbSBEbWlycm9yIE1vZHVsZSoqCgpPa2F5LCBzbyBsb29raW5nIGF0IHRoaXMsIGBURVNUX0hNTWAgc2VlbXMgdG8gYmUgcmVzcG9uc2libGUgZm9yIGNyZWF0aW5nIHR3byBkZXZpY2Ugbm9kZXM6IGAvZGV2L2htbV9kbWlycm9yMGAgYW5kIGAvZGV2L2htbV9kbWlycm9yMWAuIFJpZ2h0LCBhbmQgU3l6a2FsbGVyIGlzIHRoZSB0b29sIHRoYXQmIzM5O3MgaW50ZXJhY3Rpbmcgd2l0aCB0aGVzZSBkZXZpY2VzLCB1c2luZyB0aGVtIGFzIGEgdHJpZ2dlciBmb3IgYG1lbXJlbWFwX3BhZ2VzYCBhbmQgYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYC4gVGhhdCYjMzk7cyB0aGUga2V5OiBpdOKAmXMgdXNpbmcgdGhlc2UgY2FsbHMgb24gdGhlIGRldmljZXMuIEJ1dCBoYW5nIG9uLi4uaXNuJiMzOTt0IGBtZW1yZW1hcF9wYWdlc2AgYWxzbyBjYWxsZWQgZHVyaW5nIHRoZSBgZG1pcnJvcl9kZXZpY2VfaW5pdGAgZnVuY3Rpb24/IFRoYXQmIzM5O3Mgd2hlbiB0aGUgbW9kdWxlIGlzIGJlaW5nIGxvYWRlZCEgVGhhdCBzdWdnZXN0cyBhbiBpbnRlcmVzdGluZyBpbml0aWFsIHN0YXRlIGFuZCBpbnRlcmFjdGlvbiBwb2ludC4gSSBuZWVkIHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgZG1pcnJvcl9kZXZpY2VfaW5pdGAgdG8gZmlndXJlIG91dCB3aGF0JiMzOTtzIGdvaW5nIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAwNzo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkbWlycm9yX2RldmljZV9pbml0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2xpYi90ZXN0X2htbS5jPTE3NzI9c3RhdGljIHZvaWQgZG1pcnJvcl9kZXZpY2VfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpXG4tLVxubGliL3Rlc3RfaG1tLmMtMTc3OC1cbmxpYi90ZXN0X2htbS5jOjE3Nzk6c3RhdGljIGludCBkbWlycm9yX2RldmljZV9pbml0KHN0cnVjdCBkbWlycm9yX2RldmljZSAqbWRldmljZSwgaW50IGlkKVxubGliL3Rlc3RfaG1tLmMtMTc4MC17XG4tLVxubGliL3Rlc3RfaG1tLmM9MTgyMT1zdGF0aWMgaW50IF9faW5pdCBobW1fZG1pcnJvcl9pbml0KHZvaWQpXG4tLVxubGliL3Rlc3RfaG1tLmMtMTg0My1cdGZvciAoaWQgPSAwOyBpZCBcdTAwM2MgbmRldmljZXM7IGlkJiM0MzsmIzQzOykge1xubGliL3Rlc3RfaG1tLmM6MTg0NDpcdFx0cmV0ID0gZG1pcnJvcl9kZXZpY2VfaW5pdChkbWlycm9yX2RldmljZXMgJiM0MzsgaWQsIGlkKTtcbmxpYi90ZXN0X2htbS5jLTE4NDUtXHRcdGlmIChyZXQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDA3OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2MzIyCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQsIGdlYXJlZCB0b3dhcmQgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgZnJvbSBhIGZpcnN0LXBlcnNvbiBwZXJzcGVjdGl2ZToKCioqRGl2aW5nIGludG8gYGRtaXJyb3JfZGV2aWNlX2luaXRgKioKCkFscmlnaHQsIGxldCYjMzk7cyBjcmFjayBvcGVuIHRoaXMgYGRtaXJyb3JfZGV2aWNlX2luaXRgIGZ1bmN0aW9uLiBUaGUgbmFtZSBpdHNlbGYgaXMgcHJldHR5IHNlbGYtZXhwbGFuYXRvcnksIGJ1dCBJIHdhbnQgdG8gZ2V0IGEgZ29vZCBoYW5kbGUgb24gd2hhdCYjMzk7cyBnb2luZyBvbiBoZXJlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gbG9vayBmb3IgdGhlIGhpZ2gtbGV2ZWwgY29udHJvbCBmbG93OiBXaGF0JiMzOTtzIHRoZSBlbnRyeSBwb2ludD8gV2hhdCBraW5kIG9mIGRhdGEgc3RydWN0dXJlcyBhcmUgYmVpbmcgaW5pdGlhbGl6ZWQ/IEFueSBleHRlcm5hbCBkZXBlbmRlbmNpZXMgb3Igc3lzdGVtIGNhbGxzIHRoYXQgYXJlIGltbWVkaWF0ZWx5IGFwcGFyZW50PyBJdCYjMzk7cyBsaWtlbHkgaW52b2x2ZWQgaW4gc2V0dGluZyB1cCB0aGUgZGV2aWNlIG1pcnJvciBkcml2ZXIsIHNvIEkmIzM5O20gZXhwZWN0aW5nIHNvbWUga2luZCBvZiByZXNvdXJjZSBhbGxvY2F0aW9uLCByZWdpc3RlciBtYXBwaW5nLCBhbmQgaW50ZXJydXB0IGNvbmZpZ3VyYXRpb24uIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGhhcmR3YXJlLXNwZWNpZmljIHBhcmFtZXRlcnMgaXQmIzM5O3MgdGFraW5nIGFuZCBob3cgaXQgaGFuZGxlcyBwb3RlbnRpYWwgZXJyb3JzIGR1cmluZyBpbml0aWFsaXphdGlvbi4gR2l2ZW4gdGhhdCBpdCYjMzk7cyBhIGRldmljZSBpbml0IGZ1bmN0aW9uLCBJJiMzOTtsbCBiZSBsb29raW5nIHNwZWNpZmljYWxseSBmb3Igd2hhdCByZXNvdXJjZXMgaXQmIzM5O3MgdHJ5aW5nIHRvIG1hbmFnZS4gSSBhbHNvIGV4cGVjdCBhIG51bWJlciBvZiBjaGVja3MuIEFyZSB3ZSBkb2luZyBhIGNoZWNrIHRvIHNlZSBpZiB3ZSYjMzk7dmUgYWxyZWFkeSBkb25lIGFuIGluaXRpYWxpemF0aW9uPyBUaGF0JiMzOTtzIGNvbW1vbiwgc28gaXQmIzM5O3MgcHJvYmFibHkgaGVyZS4gSSYjMzk7bGwgYWxzbyBiZSBzY2FubmluZyBmb3IgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucy4gSSYjMzk7bSBnb2luZyB0byBzY2FuIHRoZSBjb2RlIGxvb2tpbmcgZm9yIHdoZXJlIGl0IGlzIHdyaXRpbmcgYW5kIHJlYWRpbmcgZGF0YSBmcm9tIHJlZ2lzdGVycy4gVGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRldGVybWluZSBob3cgdGhlIGRyaXZlciBoYW5kbGVzIGRpZmZlcmVudCBoYXJkd2FyZSBjb25maWd1cmF0aW9ucyBvciB2ZXJzaW9ucyBvZiB0aGUgdGFyZ2V0IGRldmljZS4gQXJlIHRoZXJlIGNvbmRpdGlvbmFsIGJsb2NrcyBiYXNlZCBvbiBkZXZpY2UgSURzIG9yIGNhcGFiaWxpdGllcz8gQW55IHVzZSBvZiBwbGF0Zm9ybS1zcGVjaWZpYyBtYWNyb3M/IEkgYWxzbyB3YW50IHRvIHBheSBjYXJlZnVsIGF0dGVudGlvbiB0byBhbnkgbG9ja2luZyBtZWNoYW5pc21zIHRvIGVuc3VyZSBjb25jdXJyZW5jeSBpcyBoYW5kbGVkIGNvcnJlY3RseSwgc2luY2UgdGhpcyBpcyBhIGtlcm5lbCBmdW5jdGlvbi4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgcmVmZXJlbmNlcyB0byBtdXRleGVzLCBzZW1hcGhvcmVzLCBvciBvdGhlciBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcy4gQW5kIG9mIGNvdXJzZSwgSSYjMzk7bGwga2VlcCBhbiBleWUgb3V0IGZvciBob3cgdGhpcyBmdW5jdGlvbiBoYW5kbGVzIHBvd2VyIG1hbmFnZW1lbnQuIElzIGl0IHNldHRpbmcgdXAgYW55IGNsb2NrcyBvciBwb3dlciBkb21haW5zPyBBbnkgc2xlZXAgb3Igd2FrZS11cCBjYWxscz8gV2hhdCBpcyB0aGUgcmVnaXN0ZXIgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2U/IFRoZSBvdmVyYWxsIGdvYWwgaXMgdG8gZm9ybSBhIHNvbGlkIG1lbnRhbCBtb2RlbCBvZiBob3cgYGRtaXJyb3JfZGV2aWNlX2luaXRgIGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlIG9mIHRoZSBkcml2ZXImIzM5O3Mgb3BlcmF0aW9uLCBhbmQgaG93IHJvYnVzdCBhbmQgZWZmaWNpZW50IGl0IGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAwNzo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2xpYi90ZXN0X2htbS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTc3OSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNzc5Olx0c3RhdGljIGludCBkbWlycm9yX2RldmljZV9pbml0KHN0cnVjdCBkbWlycm9yX2RldmljZSAqbWRldmljZSwgaW50IGlkKVxuMTc4MDpcdHtcbjE3ODE6XHRcdGRldl90IGRldjtcbjE3ODI6XHRcdGludCByZXQ7XG4xNzgzOlx0XG4xNzg0Olx0XHRkZXYgPSBNS0RFVihNQUpPUihkbWlycm9yX2RldiksIGlkKTtcbjE3ODU6XHRcdG11dGV4X2luaXQoXHUwMDI2bWRldmljZS1cdTAwM2VkZXZtZW1fbG9jayk7XG4xNzg2Olx0XHRzcGluX2xvY2tfaW5pdChcdTAwMjZtZGV2aWNlLVx1MDAzZWxvY2spO1xuMTc4NzpcdFxuMTc4ODpcdFx0Y2Rldl9pbml0KFx1MDAyNm1kZXZpY2UtXHUwMDNlY2RldmljZSwgXHUwMDI2ZG1pcnJvcl9mb3BzKTtcbjE3ODk6XHRcdG1kZXZpY2UtXHUwMDNlY2RldmljZS5vd25lciA9IFRISVNfTU9EVUxFO1xuMTc5MDpcdFx0bWRldmljZS1cdTAwM2VkZXZpY2UucmVsZWFzZSA9IGRtaXJyb3JfZGV2aWNlX3JlbGVhc2U7XG4xNzkxOlx0XG4xNzkyOlx0XHRkZXZpY2VfaW5pdGlhbGl6ZShcdTAwMjZtZGV2aWNlLVx1MDAzZWRldmljZSk7XG4xNzkzOlx0XHRtZGV2aWNlLVx1MDAzZWRldmljZS5kZXZ0ID0gZGV2O1xuMTc5NDpcdFxuMTc5NTpcdFx0cmV0ID0gZGV2X3NldF9uYW1lKFx1MDAyNm1kZXZpY2UtXHUwMDNlZGV2aWNlLCBcJiMzNDtobW1fZG1pcnJvciV1XCYjMzQ7LCBpZCk7XG4xNzk2Olx0XHRpZiAocmV0KVxuMTc5NzpcdFx0XHRnb3RvIHB1dF9kZXZpY2U7XG4xNzk4Olx0XG4xNzk5Olx0XHQvKiBCdWlsZCBhIGxpc3Qgb2YgZnJlZSBaT05FX0RFVklDRSBzdHJ1Y3QgcGFnZXMgKi9cbjE4MDA6XHRcdHJldCA9IGRtaXJyb3JfYWxsb2NhdGVfY2h1bmsobWRldmljZSwgTlVMTCwgZmFsc2UpO1xuMTgwMTpcdFx0aWYgKHJldClcbjE4MDI6XHRcdFx0Z290byBwdXRfZGV2aWNlO1xuMTgwMzpcdFxuMTgwNDpcdFx0cmV0ID0gY2Rldl9kZXZpY2VfYWRkKFx1MDAyNm1kZXZpY2UtXHUwMDNlY2RldmljZSwgXHUwMDI2bWRldmljZS1cdTAwM2VkZXZpY2UpO1xuMTgwNTpcdFx0aWYgKHJldClcbjE4MDY6XHRcdFx0Z290byBwdXRfZGV2aWNlO1xuMTgwNzpcdFxuMTgwODpcdFx0cmV0dXJuIDA7XG4xODA5Olx0XG4xODEwOlx0cHV0X2RldmljZTpcbjE4MTE6XHRcdHB1dF9kZXZpY2UoXHUwMDI2bWRldmljZS1cdTAwM2VkZXZpY2UpO1xuMTgxMjpcdFx0cmV0dXJuIHJldDtcbjE4MTM6XHR9XG4xODE0Olx0XG4xODE1Olx0c3RhdGljIHZvaWQgZG1pcnJvcl9kZXZpY2VfcmVtb3ZlKHN0cnVjdCBkbWlycm9yX2RldmljZSAqbWRldmljZSlcbjE4MTY6XHR7XG4xODE3Olx0XHRjZGV2X2RldmljZV9kZWwoXHUwMDI2bWRldmljZS1cdTAwM2VjZGV2aWNlLCBcdTAwMjZtZGV2aWNlLVx1MDAzZWRldmljZSk7XG4xODE4Olx0XHRwdXRfZGV2aWNlKFx1MDAyNm1kZXZpY2UtXHUwMDNlZGV2aWNlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMDc6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc0MDgKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAzNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJbXBsaWNhdGlvbnMgb2YgYG1lbXJlbWFwX3BhZ2VzYCBhbmQgTW9kdWxlIExvYWRpbmcqKgoKT2theSwgc28gYGRtaXJyb3JfYWxsb2NhdGVfY2h1bmtgIGNhbGxzIGBtZW1yZW1hcF9wYWdlc2AuIFRoYXQmIzM5O3MgdGhlIGtleS4gSnVzdCBsb2FkaW5nIHRoZSBgdGVzdF9obW1gIG1vZHVsZSBpcyBnb2luZyB0byB0cmlnZ2VyIGBtZW1yZW1hcF9wYWdlc2AsIGFuZCB0aGF0IGluIHR1cm4gaGl0cyBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiBgVEVTVF9ITU1gIGlzIGV2ZW4gZW5hYmxlZCBvbiBTeXpib3QsIGJlY2F1c2UgdGhvc2UgYm90cyB1c3VhbGx5IGhhdmUgYSB0b24gb2YgYFRFU1RfKmAgY29uZmlncyBzZXQuIFJpZ2h0LCBsZXQmIzM5O3MganVzdCBnbyBhaGVhZCBhbmQgYWRkIGBURVNUX0hNTWAgdG8gYEVuYWJsZUNvbmZpZ3NgIHRvIG1ha2Ugc3VyZSB3ZSYjMzk7cmUgdGVzdGluZyB0aGlzIHNjZW5hcmlvLgoKSG9sZCBvbiwgSSBzZWUgYSBkZXBlbmRlbmN5IGlzc3VlLiBgVEVTVF9ITU1gIGRlcGVuZHMgb24gYERFVklDRV9QUklWQVRFYCwgd2hpY2ggaW4gdHVybiBkZXBlbmRzIG9uIGBaT05FX0RFVklDRWAuIFNvLCB0byBiZSBjb21wbGV0ZSwgSSBuZWVkIHRvIGFkZCBhbGwgdGhyZWUgdG8gdGhlIGBFbmFibGVDb25maWdzYDogYFRFU1RfSE1NYCwgYERFVklDRV9QUklWQVRFYCwgYW5kIGBaT05FX0RFVklDRWAuIFRoYXQgc2hvdWxkIGVuc3VyZSB0aGUgcmVsZXZhbnQgY29kZSBwYXRocyBhcmUgYWN0aXZlLgoKTm93LCBsZXQmIzM5O3MgcXVpY2tseSB2ZXJpZnkgd2hpY2ggZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBiZWluZyB0b3VjaGVkIGJ5IHRoaXMgcGF0Y2ggc28gSSBjYW4gemVybyBpbiBvbiB0aGVtIGR1cmluZyB0ZXN0aW5nLiBJdCBsb29rcyBsaWtlIHRoZSBwYXRjaCBtb2RpZmllczogYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYCwgYG1lbW1hcF9pbml0X2NvbXBvdW5kYCwgYHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9mcm9tX3RlbXBsYXRlYCwgYHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9zbG93YCwgYHpvbmVfZGV2aWNlX3RhaWxfcGFnZV9pbml0YCwgYHpvbmVfZGV2aWNlX3BhZ2VfdXBkYXRlX3RlbXBsYXRlYCwgYW5kIGBtZW1jcHlfbm9udGVtcG9yYWxgLgoKV2FpdCBhIG1pbnV0ZSwgYG1lbWNweV9ub250ZW1wb3JhbGAgaXMgaW5saW5lLCBzbyBpdCYjMzk7cyBwcm9iYWJseSBub3Qgd2hlcmUgdGhlIHJlYWwgbG9naWMgaXMgaGFwcGVuaW5nLCBhbmQgaXMgYSBtYWNyby4gQW5kIHRoZSBgem9uZV9kZXZpY2VfcGFnZV9pbml0X2Zyb21fdGVtcGxhdGVgLCBgem9uZV9kZXZpY2VfcGFnZV9pbml0X3Nsb3dgLCBgem9uZV9kZXZpY2VfdGFpbF9wYWdlX2luaXRgIGFuZCBgem9uZV9kZXZpY2VfcGFnZV91cGRhdGVfdGVtcGxhdGVgIGFyZSBhbGwgc3RhdGljLiBUaGF0IHNpbXBsaWZpZXMgdGhpbmdzIGEgYml0LiBTbyByZWFsbHksIHRoZSBwcmltYXJ5IGZvY3VzIGZvciBpbnZlc3RpZ2F0aW9uIHNob3VsZCBiZSBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgIGFuZCBgbWVtbWFwX2luaXRfY29tcG91bmRgLiBJIG5lZWQgdG8gY29uZmlybSBpZiB0aG9zZSBhcmUgZXhwb3J0ZWQgb3Igbm90LCBiZWNhdXNlIHN0YXRpYyBmdW5jdGlvbnMgd2l0aGluIHRoZSBtb2R1bGUgYXJlIGxlc3MgY3JpdGljYWwgZm9yIGV4dGVybmFsIGRlcGVuZGVuY2llcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMDc6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dm9pZCBfX3JlZiBtZW1tYXBfaW5pdF96b25lX2RldmljZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tbV9pbml0LmM9MTEzMT1zdGF0aWMgdm9pZCBfX3JlZiBtZW1tYXBfaW5pdF9jb21wb3VuZChzdHJ1Y3QgcGFnZSAqaGVhZCxcbi0tXG5tbS9tbV9pbml0LmMtMTE3MS1cbm1tL21tX2luaXQuYzoxMTcyOnZvaWQgX19yZWYgbWVtbWFwX2luaXRfem9uZV9kZXZpY2Uoc3RydWN0IHpvbmUgKnpvbmUsXG5tbS9tbV9pbml0LmMtMTE3My1cdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAwNzo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODM2MQoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDE1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTWVtb3J5IE1hcHBpbmcgSW5pdGlhbGl6YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaW1tZWRpYXRlbHkgSSBzZWUgdGhhdCBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgIGlzbiYjMzk7dCBzdGF0aWMuIFRoYXQmIzM5O3MgYSBiaXQgb2YgYSBrZXkgb2JzZXJ2YXRpb24sIGlzbiYjMzk7dCBpdD8gT24gdGhlIG90aGVyIGhhbmQsIGBtZW1tYXBfaW5pdF9jb21wb3VuZGAgKmlzKiBzdGF0aWMuIEhtbSwgdGhhdCBzdWdnZXN0cyBpdCBtaWdodCBnZXQgaW5saW5lZCBieSB0aGUgY29tcGlsZXIsIG9yIHBlcmhhcHMgZG9lc24mIzM5O3QgZXZlbiBoYXZlIGEgc2VwYXJhdGUgc3ltYm9sLCBzbyBpdCBtYXkgbm90IGJlIGFzIGNyaXRpY2FsIHRvIGZvY3VzIG9uIGluIGRldGFpbC4gVGltZSB0byB2ZXJpZnkgaWYgdGhhdOKAmXMgdGhlIGNhc2UgYnkgcXVpY2tseSBzY2FubmluZyBmb3IgYW55IG90aGVyIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGluIHRoaXMgYXJlYS4KCmBtZW1tYXBfaW5pdF96b25lX2RldmljZWAgcmVhbGx5IHNlZW1zIHRvIGJlIHRoZSBjZW50cmFsIGZ1bmN0aW9uIGhlcmUuIEJ1dCwgd2hhdCBlbHNlIGlzIGFmZmVjdGVkPyBMZXQgbWUgdGFrZSBhIHF1aWNrIGxvb2sgdG8gY29uZmlybSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGZ1bmN0aW9ucyB0aGF0IGFyZSBjaGFuZ2VkLiBBaGEsIHRoZSBwYXRjaCB0b3VjaGVzIGBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaGAuIEludGVyZXN0aW5nLiBJdCBsb29rcyBsaWtlIHRoZXkmIzM5O3JlIGFkZGluZyBgbW92bnRpXzhgLCBgbW92bnRpXzE2YCwgYG1vdm50aV8zMmAsIGFuZCBgbW92bnRpXzY0YC4gVGhhdCBpbmRpY2F0ZXMgY2hhbmdlcyByZWxhdGVkIHRvIG5vbi10ZW1wb3JhbCBzdG9yZXMsIHdoaWNoIGlzIGEgbG93LWxldmVsIG9wdGltaXphdGlvbi4gSSBzaG91bGQgYWxzbyBjaGVjayBvdXQgdGhlIG1vZGlmaWNhdGlvbiB0byBgbWVtY3B5X2ZsdXNoY2FjaGVgLiBUaGVzZSBjaGFuZ2VzIGFyZSBhbGwgcmVsYXRlZCwgYW5kIHdpbGwgcmVxdWlyZSBhIGRlZXAgZGl2ZSBpbnRvIHRoZSBpbXBsaWNhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDA3OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbWNweV9mbHVzaGNhY2hlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vc3RyaW5nLmg9NDQ9ZXh0ZXJuIHZvaWQgKl9fbWVtc2V0KHZvaWQgKiwgaW50LCBfX2tlcm5lbF9zaXplX3QpO1xuLS1cbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vc3RyaW5nLmgtNDctI2RlZmluZSBfX0hBVkVfQVJDSF9NRU1DUFlfRkxVU0hDQUNIRVxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9zdHJpbmcuaDo0ODp2b2lkIG1lbWNweV9mbHVzaGNhY2hlKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgY250KTtcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vc3RyaW5nLmgtNDktI2VuZGlmXG4tLVxuYXJjaC9hcm02NC9saWIvdWFjY2Vzc19mbHVzaGNhY2hlLmMtOS1cbmFyY2gvYXJtNjQvbGliL3VhY2Nlc3NfZmx1c2hjYWNoZS5jOjEwOnZvaWQgbWVtY3B5X2ZsdXNoY2FjaGUodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBjbnQpXG5hcmNoL2FybTY0L2xpYi91YWNjZXNzX2ZsdXNoY2FjaGUuYy0xMS17XG4tLVxuYXJjaC9hcm02NC9saWIvdWFjY2Vzc19mbHVzaGNhY2hlLmMtMTktfVxuYXJjaC9hcm02NC9saWIvdWFjY2Vzc19mbHVzaGNhY2hlLmM6MjA6RVhQT1JUX1NZTUJPTF9HUEwobWVtY3B5X2ZsdXNoY2FjaGUpO1xuYXJjaC9hcm02NC9saWIvdWFjY2Vzc19mbHVzaGNhY2hlLmMtMjEtXG4tLVxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3N0cmluZy5oPTI4PWV4dGVybiB2b2lkICogbWVtY2hyKGNvbnN0IHZvaWQgKixpbnQsX19rZXJuZWxfc2l6ZV90KTtcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zdHJpbmcuaDoyOTp2b2lkIG1lbWNweV9mbHVzaGNhY2hlKHZvaWQgKmRlc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IHNpemUpO1xuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3N0cmluZy5oLTMwLVxuLS1cbmFyY2gvcG93ZXJwYy9saWIvcG1lbS5jPTY5PXNpemVfdCBjb3B5X2Zyb21fdXNlcl9mbHVzaGNhY2hlKHZvaWQgKmRlc3QsIGNvbnN0IHZvaWQgX191c2VyICpzcmMsXG4tLVxuYXJjaC9wb3dlcnBjL2xpYi9wbWVtLmMtODAtXG5hcmNoL3Bvd2VycGMvbGliL3BtZW0uYzo4MTp2b2lkIG1lbWNweV9mbHVzaGNhY2hlKHZvaWQgKmRlc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IHNpemUpXG5hcmNoL3Bvd2VycGMvbGliL3BtZW0uYy04Mi17XG4tLVxuYXJjaC9wb3dlcnBjL2xpYi9wbWVtLmMtODctfVxuYXJjaC9wb3dlcnBjL2xpYi9wbWVtLmM6ODg6RVhQT1JUX1NZTUJPTChtZW1jcHlfZmx1c2hjYWNoZSk7XG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0Lmg9ODA9aW50IHN0cmNtcChjb25zdCBjaGFyICpjcywgY29uc3QgY2hhciAqY3QpO1xuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oLTgzLSNkZWZpbmUgX19IQVZFX0FSQ0hfTUVNQ1BZX0ZMVVNIQ0FDSEUgMVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0Lmg6ODQ6dm9pZCBfX21lbWNweV9mbHVzaGNhY2hlKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgY250KTtcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oLTg1LVxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oPTEwNj1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbW92bnRpXzY0KHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjKVxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oLTExMS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oOjExMjpzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbWVtY3B5X2ZsdXNoY2FjaGUodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaC0xMTMtXHRcdFx0XHRcdCAgICAgIHNpemVfdCBjbnQpXG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmgtMTMxLVx0XHRcdCAqIGluc3RlYWQgb2Ygc2VuZGluZyB0aG9zZSBuZWFyYnkgZml4ZWQtc2l6ZVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0Lmg6MTMyOlx0XHRcdCAqIGNhc2VzIGJhY2sgdG8gX19tZW1jcHlfZmx1c2hjYWNoZSgpLlxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmgtMTMzLVx0XHRcdCAqL1xuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oLTE1NC1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oOjE1NTpcdF9fbWVtY3B5X2ZsdXNoY2FjaGUoZHN0LCBzcmMsIGNudCk7XG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaC0xNTYtfVxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oPTE2Mz1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbWVtY3B5X25vbnRlbXBvcmFsKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLFxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oLTE2NS17XG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaDoxNjY6XHRtZW1jcHlfZmx1c2hjYWNoZShkc3QsIHNyYywgY250KTtcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oLTE2Ny19XG4tLVxuYXJjaC94ODYva2VybmVsL2NyYXNoLmM9NTE0PXZvaWQgYXJjaF9jcmFzaF9oYW5kbGVfaG90cGx1Z19ldmVudChzdHJ1Y3Qga2ltYWdlICppbWFnZSwgdm9pZCAqYXJnKVxuLS1cbmFyY2gveDg2L2tlcm5lbC9jcmFzaC5jLTU2NS1cdHhjaGcoXHUwMDI2a2V4ZWNfY3Jhc2hfaW1hZ2UsIE5VTEwpO1xuYXJjaC94ODYva2VybmVsL2NyYXNoLmM6NTY2Olx0bWVtY3B5X2ZsdXNoY2FjaGUob2xkX2VsZmNvcmVoZHIsIGVsZmJ1ZiwgZWxmc3opO1xuYXJjaC94ODYva2VybmVsL2NyYXNoLmMtNTY3LVx0eGNoZyhcdTAwMjZrZXhlY19jcmFzaF9pbWFnZSwgaW1hZ2UpO1xuLS1cbmFyY2gveDg2L2xpYi91c2VyY29weV82NC5jPTQ2PXNpemVfdCBjb3B5X3VzZXJfZmx1c2hjYWNoZSh2b2lkICpkc3QsIGNvbnN0IHZvaWQgX191c2VyICpzcmMsIHNpemVfdCBzaXplKVxuLS1cbmFyY2gveDg2L2xpYi91c2VyY29weV82NC5jLTc5LVxuYXJjaC94ODYvbGliL3VzZXJjb3B5XzY0LmM6ODA6dm9pZCBfX21lbWNweV9mbHVzaGNhY2hlKHZvaWQgKl9kc3QsIGNvbnN0IHZvaWQgKl9zcmMsIHNpemVfdCBzaXplKVxuYXJjaC94ODYvbGliL3VzZXJjb3B5XzY0LmMtODEte1xuLS1cbmFyY2gveDg2L2xpYi91c2VyY29weV82NC5jLTE0Mi19XG5hcmNoL3g4Ni9saWIvdXNlcmNvcHlfNjQuYzoxNDM6RVhQT1JUX1NZTUJPTF9HUEwoX19tZW1jcHlfZmx1c2hjYWNoZSk7XG5hcmNoL3g4Ni9saWIvdXNlcmNvcHlfNjQuYy0xNDQtI2VuZGlmXG4tLVxuZHJpdmVycy9kYXgvZnNkZXYuYz0zMT1zdGF0aWMgdm9pZCBmc2Rldl93cml0ZV9kYXgodm9pZCAqYWRkciwgc3RydWN0IHBhZ2UgKnBhZ2UsXG4tLVxuZHJpdmVycy9kYXgvZnNkZXYuYy0zNy1cbmRyaXZlcnMvZGF4L2ZzZGV2LmM6Mzg6XHRcdG1lbWNweV9mbHVzaGNhY2hlKGFkZHIsIG1lbSAmIzQzOyBvZmYsIGNodW5rKTtcbmRyaXZlcnMvZGF4L2ZzZGV2LmMtMzktXHRcdGt1bm1hcF9sb2NhbChtZW0pO1xuLS1cbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlLmM9MTc9c3RhdGljIHZvaWQgY2FjaGVfaW5mb193cml0ZShzdHJ1Y3QgcGNhY2hlX2NhY2hlICpjYWNoZSlcbi0tXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZS5jLTI1LVx0Y2FjaGUtXHUwMDNlaW5mb19pbmRleCA9IChjYWNoZS1cdTAwM2VpbmZvX2luZGV4ICYjNDM7IDEpICUgUENBQ0hFX01FVEFfSU5ERVhfTUFYO1xuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGUuYzoyNjpcdG1lbWNweV9mbHVzaGNhY2hlKGdldF9jYWNoZV9pbmZvX2FkZHIoY2FjaGUpLCBjYWNoZV9pbmZvLFxuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGUuYy0yNy1cdFx0XHRzaXplb2Yoc3RydWN0IHBjYWNoZV9jYWNoZV9pbmZvKSk7XG4tLVxuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGUuYz04Nz12b2lkIGNhY2hlX3Bvc19lbmNvZGUoc3RydWN0IHBjYWNoZV9jYWNoZSAqY2FjaGUsXG4tLVxuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGUuYy0xMDAtXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZS5jOjEwMTpcdG1lbWNweV9mbHVzaGNhY2hlKHBvc19vbm1lZGlhX2FkZHIsIFx1MDAyNnBvc19vbm1lZGlhLCBzaXplb2Yoc3RydWN0IHBjYWNoZV9jYWNoZV9wb3Nfb25tZWRpYSkpO1xuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGUuYy0xMDItXHRwbWVtX3dtYigpO1xuLS1cbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlX2Rldi5jPTE0MD1zdGF0aWMgdm9pZCBzYl93cml0ZShzdHJ1Y3QgcGNhY2hlX2NhY2hlX2RldiAqY2FjaGVfZGV2LCBzdHJ1Y3QgcGNhY2hlX3NiICpzYilcbi0tXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZV9kZXYuYy0xNDMtXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZV9kZXYuYzoxNDQ6XHRtZW1jcHlfZmx1c2hjYWNoZShzYl9hZGRyLCBzYiwgc2l6ZW9mKHN0cnVjdCBwY2FjaGVfc2IpKTtcbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlX2Rldi5jLTE0NS1cdHBtZW1fd21iKCk7XG4tLVxuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGVfa2V5LmM9MTE0PXN0YXRpYyB2b2lkIGFwcGVuZF9sYXN0X2tzZXQoc3RydWN0IHBjYWNoZV9jYWNoZSAqY2FjaGUsIHUzMiBuZXh0X3NlZylcbi0tXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZV9rZXkuYy0xMjItXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZV9rZXkuYzoxMjM6XHRtZW1jcHlfZmx1c2hjYWNoZShnZXRfa2V5X2hlYWRfYWRkcihjYWNoZSksIFx1MDAyNmtzZXRfb25tZWRpYSwgc2l6ZW9mKHN0cnVjdCBwY2FjaGVfY2FjaGVfa3NldF9vbm1lZGlhKSk7XG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZV9rZXkuYy0xMjQtXHRwbWVtX3dtYigpO1xuLS1cbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlX2tleS5jPTEyOD1pbnQgY2FjaGVfa3NldF9jbG9zZShzdHJ1Y3QgcGNhY2hlX2NhY2hlICpjYWNoZSwgc3RydWN0IHBjYWNoZV9jYWNoZV9rc2V0ICprc2V0KVxuLS1cbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlX2tleS5jLTE1My1cdFx0LyogY2xlYXIgb3V0ZGF0ZWQga3NldCBpbiBuZXh0IHNlZyAqL1xuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGVfa2V5LmM6MTU0Olx0XHRtZW1jcHlfZmx1c2hjYWNoZShuZXh0X3NlZy1cdTAwM2VzZWdtZW50LmRhdGEsIFx1MDAyNnBjYWNoZV9lbXB0eV9rc2V0LFxuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGVfa2V5LmMtMTU1LVx0XHRcdFx0XHRzaXplb2Yoc3RydWN0IHBjYWNoZV9jYWNoZV9rc2V0X29ubWVkaWEpKTtcbi0tXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZV9rZXkuYy0xNjUtXHQvKiBjbGVhciBvdXRkYXRlZCBrc2V0IGFmdGVyIGN1cnJlbnQga3NldCAqL1xuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGVfa2V5LmM6MTY2Olx0bWVtY3B5X2ZsdXNoY2FjaGUoZ2V0X2tleV9oZWFkX2FkZHIoY2FjaGUpICYjNDM7IGtzZXRfb25tZWRpYV9zaXplLCBcdTAwMjZwY2FjaGVfZW1wdHlfa3NldCxcbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlX2tleS5jLTE2Ny1cdFx0XHRcdHNpemVvZihzdHJ1Y3QgcGNhY2hlX2NhY2hlX2tzZXRfb25tZWRpYSkpO1xuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGVfa2V5LmMtMTY4LVx0Lyogd3JpdGUgY3VycmVudCBrc2V0IGludG8gc2VnbWVudCAqL1xuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGVfa2V5LmM6MTY5Olx0bWVtY3B5X2ZsdXNoY2FjaGUoZ2V0X2tleV9oZWFkX2FkZHIoY2FjaGUpLCBrc2V0X29ubWVkaWEsIGtzZXRfb25tZWRpYV9zaXplKTtcbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlX2tleS5jLTE3MC1cdHBtZW1fd21iKCk7XG4tLVxuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGVfc2VnbWVudC5jPTIwPXN0YXRpYyB2b2lkIGNhY2hlX3NlZ19pbmZvX3dyaXRlKHN0cnVjdCBwY2FjaGVfY2FjaGVfc2VnbWVudCAqY2FjaGVfc2VnKVxuLS1cbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlX3NlZ21lbnQuYy0zMS1cdHNlZ19pbmZvX2FkZHIgPSBnZXRfc2VnX2luZm9fYWRkcihjYWNoZV9zZWcpO1xuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGVfc2VnbWVudC5jOjMyOlx0bWVtY3B5X2ZsdXNoY2FjaGUoc2VnX2luZm9fYWRkciwgc2VnX2luZm8sIHNpemVvZihzdHJ1Y3QgcGNhY2hlX3NlZ21lbnRfaW5mbykpO1xuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGVfc2VnbWVudC5jLTMzLVx0cG1lbV93bWIoKTtcbi0tXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZV9zZWdtZW50LmM9MTI2PXN0YXRpYyB2b2lkIGNhY2hlX3NlZ19jdHJsX3dyaXRlKHN0cnVjdCBwY2FjaGVfY2FjaGVfc2VnbWVudCAqY2FjaGVfc2VnKVxuLS1cbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlX3NlZ21lbnQuYy0xMzYtXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZV9zZWdtZW50LmM6MTM3Olx0bWVtY3B5X2ZsdXNoY2FjaGUoZ2V0X2NhY2hlX3NlZ19nZW5fYWRkcihjYWNoZV9zZWcpLCBcdTAwMjZjYWNoZV9zZWdfZ2VuLCBzaXplb2Yoc3RydWN0IHBjYWNoZV9jYWNoZV9zZWdfZ2VuKSk7XG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZV9zZWdtZW50LmMtMTM4LVx0cG1lbV93bWIoKTtcbi0tXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZV9zZWdtZW50LmM9MTgyPWludCBjYWNoZV9zZWdfaW5pdChzdHJ1Y3QgcGNhY2hlX2NhY2hlICpjYWNoZSwgdTMyIHNlZ19pZCwgdTMyIGNhY2hlX3NlZ19pZCxcbi0tXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZV9zZWdtZW50LmMtMjE2LVx0XHQvKiBjbGVhciBvdXRkYXRlZCBrc2V0IGluIHNlZ21lbnQgKi9cbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlX3NlZ21lbnQuYzoyMTc6XHRcdG1lbWNweV9mbHVzaGNhY2hlKHNlZ21lbnQtXHUwMDNlZGF0YSwgXHUwMDI2cGNhY2hlX2VtcHR5X2tzZXQsIHNpemVvZihzdHJ1Y3QgcGNhY2hlX2NhY2hlX2tzZXRfb25tZWRpYSkpO1xuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGVfc2VnbWVudC5jLTIxOC1cdFx0cG1lbV93bWIoKTtcbi0tXG5kcml2ZXJzL21kL2RtLXdyaXRlY2FjaGUuYz00Nj1kbyB7XHRcdFx0XHRcdFx0XHRcdFxcXG5kcml2ZXJzL21kL2RtLXdyaXRlY2FjaGUuYy00Ny1cdHR5cGVvZihkZXN0KSB1bmlxID0gKHNyYyk7XHRcdFx0XHRcXFxuZHJpdmVycy9tZC9kbS13cml0ZWNhY2hlLmM6NDg6XHRtZW1jcHlfZmx1c2hjYWNoZShcdTAwMjYoZGVzdCksIFx1MDAyNnVuaXEsIHNpemVvZihkZXN0KSk7XHRcXFxuZHJpdmVycy9tZC9kbS13cml0ZWNhY2hlLmMtNDktfSB3aGlsZSAoMClcbi0tXG5kcml2ZXJzL21kL2RtLXdyaXRlY2FjaGUuYz0xMTkwPXN0YXRpYyBpbnQgd3JpdGVjYWNoZV9tZXNzYWdlKHN0cnVjdCBkbV90YXJnZXQgKnRpLCB1bnNpZ25lZCBpbnQgYXJnYywgY2hhciAqKmFyZ3YsXG4tLVxuZHJpdmVycy9tZC9kbS13cml0ZWNhY2hlLmMtMTIwOS1cbmRyaXZlcnMvbWQvZG0td3JpdGVjYWNoZS5jOjEyMTA6c3RhdGljIHZvaWQgbWVtY3B5X2ZsdXNoY2FjaGVfb3B0aW1pemVkKHZvaWQgKmRlc3QsIHZvaWQgKnNvdXJjZSwgc2l6ZV90IHNpemUpXG5kcml2ZXJzL21kL2RtLXdyaXRlY2FjaGUuYy0xMjExLXtcbi0tXG5kcml2ZXJzL21kL2RtLXdyaXRlY2FjaGUuYy0xMjI0LVx0ICogTk9URTogdGhpcyBoYXBwZW5zIHRvIGJlIHRoZSBjYXNlIG5vdyAod2l0aCBkbS13cml0ZWNhY2hlJiMzOTtzIHNpbmdsZVxuZHJpdmVycy9tZC9kbS13cml0ZWNhY2hlLmM6MTIyNTpcdCAqIHRocmVhZGVkIG1vZGVsKSBidXQgcmUtZXZhbHVhdGUgdGhpcyBvbmNlIG1lbWNweV9mbHVzaGNhY2hlKCkgaXNcbmRyaXZlcnMvbWQvZG0td3JpdGVjYWNoZS5jLTEyMjYtXHQgKiBlbmFibGVkIHRvIHVzZSBtb3ZkaXI2NGIgd2hpY2ggbWlnaHQgaW52YWxpZGF0ZSB0aGlzIHBlcmZvcm1hbmNlXG4tLVxuZHJpdmVycy9tZC9kbS13cml0ZWNhY2hlLmMtMTI0Mi0jZW5kaWZcbmRyaXZlcnMvbWQvZG0td3JpdGVjYWNoZS5jOjEyNDM6XHRtZW1jcHlfZmx1c2hjYWNoZShkZXN0LCBzb3VyY2UsIHNpemUpO1xuZHJpdmVycy9tZC9kbS13cml0ZWNhY2hlLmMtMTI0NC19XG4tLVxuZHJpdmVycy9tZC9kbS13cml0ZWNhY2hlLmM9MTI0Nj1zdGF0aWMgdm9pZCBiaW9fY29weV9ibG9jayhzdHJ1Y3QgZG1fd3JpdGVjYWNoZSAqd2MsIHN0cnVjdCBiaW8gKmJpbywgdm9pZCAqZGF0YSlcbi0tXG5kcml2ZXJzL21kL2RtLXdyaXRlY2FjaGUuYy0xMjcxLVx0XHRcdGZsdXNoX2RjYWNoZV9wYWdlKGJpb19wYWdlKGJpbykpO1xuZHJpdmVycy9tZC9kbS13cml0ZWNhY2hlLmM6MTI3MjpcdFx0XHRtZW1jcHlfZmx1c2hjYWNoZV9vcHRpbWl6ZWQoZGF0YSwgYnVmLCBzaXplKTtcbmRyaXZlcnMvbWQvZG0td3JpdGVjYWNoZS5jLTEyNzMtXHRcdH1cbi0tXG5kcml2ZXJzL252ZGltbS9jbGFpbS5jPTIzMz1zdGF0aWMgaW50IG5zaW9fcndfYnl0ZXMoc3RydWN0IG5kX25hbWVzcGFjZV9jb21tb24gKm5kbnMsXG4tLVxuZHJpdmVycy9udmRpbW0vY2xhaW0uYy0yNzYtXG5kcml2ZXJzL252ZGltbS9jbGFpbS5jOjI3NzpcdG1lbWNweV9mbHVzaGNhY2hlKG5zaW8tXHUwMDNlYWRkciAmIzQzOyBvZmZzZXQsIGJ1Ziwgc2l6ZSk7XG5kcml2ZXJzL252ZGltbS9jbGFpbS5jLTI3OC1cdHJldCA9IG52ZGltbV9mbHVzaCh0b19uZF9yZWdpb24obmRucy1cdTAwM2VkZXYucGFyZW50KSwgTlVMTCk7XG4tLVxuZHJpdmVycy9udmRpbW0vcG1lbS5jPTEyND1zdGF0aWMgdm9pZCB3cml0ZV9wbWVtKHZvaWQgKnBtZW1fYWRkciwgc3RydWN0IHBhZ2UgKnBhZ2UsXG4tLVxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTEzMi1cdFx0Y2h1bmsgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIGxlbiwgUEFHRV9TSVpFIC0gb2ZmKTtcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYzoxMzM6XHRcdG1lbWNweV9mbHVzaGNhY2hlKHBtZW1fYWRkciwgbWVtICYjNDM7IG9mZiwgY2h1bmspO1xuZHJpdmVycy9udmRpbW0vcG1lbS5jLTEzNC1cdFx0a3VubWFwX2xvY2FsKG1lbSk7XG4tLVxuZHJpdmVycy9udmRpbW0vcmVnaW9uX2RldnMuYz0xMTA2PWludCBnZW5lcmljX252ZGltbV9mbHVzaChzdHJ1Y3QgbmRfcmVnaW9uICpuZF9yZWdpb24pXG4tLVxuZHJpdmVycy9udmRpbW0vcmVnaW9uX2RldnMuYy0xMTIxLVx0ICogdGhlIHBsYXRmb3JtIGJ1ZmZlciBmbHVzaC4gTm90ZSB0aGF0IHdlJiMzOTt2ZSBhbHJlYWR5IGFycmFuZ2VkIGZvciBwbWVtXG5kcml2ZXJzL252ZGltbS9yZWdpb25fZGV2cy5jOjExMjI6XHQgKiB3cml0ZXMgdG8gYXZvaWQgdGhlIGNhY2hlIHZpYSBtZW1jcHlfZmx1c2hjYWNoZSgpLiAgVGhlIGZpbmFsXG5kcml2ZXJzL252ZGltbS9yZWdpb25fZGV2cy5jLTExMjMtXHQgKiB3bWIoKSBlbnN1cmVzIG9yZGVyaW5nIGZvciB0aGUgTlZESU1NIGZsdXNoIHdyaXRlLlxuLS1cbmluY2x1ZGUvbGludXgvc3RyaW5nLmg9MjcyPWV4dGVybiB2b2lkICogbWVtY2hyKGNvbnN0IHZvaWQgKixpbnQsX19rZXJuZWxfc2l6ZV90KTtcbi0tXG5pbmNsdWRlL2xpbnV4L3N0cmluZy5oLTI3NC0jaWZuZGVmIF9fSEFWRV9BUkNIX01FTUNQWV9GTFVTSENBQ0hFXG5pbmNsdWRlL2xpbnV4L3N0cmluZy5oOjI3NTpzdGF0aWMgaW5saW5lIHZvaWQgbWVtY3B5X2ZsdXNoY2FjaGUodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBjbnQpXG5pbmNsdWRlL2xpbnV4L3N0cmluZy5oLTI3Ni17XG4tLVxubGliL2lvdl9pdGVyLmM9MzAzPXNpemVfdCBtZW1jcHlfZnJvbV9pdGVyX2ZsdXNoY2FjaGUodm9pZCAqaXRlcl9mcm9tLCBzaXplX3QgcHJvZ3Jlc3MsXG4tLVxubGliL2lvdl9pdGVyLmMtMzA1LXtcbmxpYi9pb3ZfaXRlci5jOjMwNjpcdG1lbWNweV9mbHVzaGNhY2hlKHRvICYjNDM7IHByb2dyZXNzLCBpdGVyX2Zyb20sIGxlbik7XG5saWIvaW92X2l0ZXIuYy0zMDctXHRyZXR1cm4gMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMDc6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzI5MjMKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxMDY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTWVtb3J5IENvcHkgT3B0aW1pemF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgaW50cm9kdWNlcyBgbWVtY3B5X25vbnRlbXBvcmFsYCwgd2hpY2gsIGlmIG5vdCBhbHJlYWR5IGRlZmluZWQsIGp1c3QgZmFsbHMgYmFjayB0byBhIHN0YW5kYXJkIGBtZW1jcHlgLiBCdXQgb24geDg2LCBpdCYjMzk7cyBhY3R1YWxseSB1c2luZyBhIGBtZW1jcHlfZmx1c2hjYWNoZWAgdW5kZXIgdGhlIGhvb2QuIFRoZSBjb3JlIG9mIHRoaXMgaXMgdGhlIG1vZGlmaWNhdGlvbiB0byBgYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmhgIOKAkyBpdCYjMzk7cyBhZGRpbmcgdGhlc2UgYG1vdm50aV8qYCBpbnN0cnVjdGlvbnMgZm9yIGRpZmZlcmVudCBkYXRhIHNpemVzICg4LCAxNiwgMzIsIDY0IGJ5dGVzKSB0aGF0IGFyZSB1dGlsaXplZCB3aXRoaW4gYG1lbWNweV9mbHVzaGNhY2hlYC4KClRoZSBpbnRlcmVzdGluZyBwYXJ0IGlzIHRoYXQgYG1lbWNweV9mbHVzaGNhY2hlYCBpcyBub3cgc3BlY2lmaWNhbGx5IG9wdGltaXplZCBmb3IgZml4ZWQgc2l6ZXM6IDMyLCA0OCwgNjQsIDgwLCBhbmQgOTYgYnl0ZXMuIFRoYXQgaW1tZWRpYXRlbHkganVtcHMgb3V0IGF0IG1lIGJlY2F1c2UgdGhvc2Ugc2l6ZXMgY29ycmVzcG9uZCB0byBjb21tb24gYHN0cnVjdCBwYWdlYCBzaXplcy4gVGhlcmVmb3JlLCB0aGlzIG9wdGltaXphdGlvbiBpcyBjbGVhcmx5IHRhcmdldGluZyBzY2VuYXJpb3Mgd2hlcmUgYHN0cnVjdCBwYWdlYCBkYXRhIGlzIGJlaW5nIGNvcGllZC4KCk5vdywgd2hlcmUgaXMgdGhpcyBhY3R1YWxseSBiZWluZyAqdXNlZCo/IEkgc2VlIHRoYXQgYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYCB1c2VzIGBtZW1jcHlfbm9udGVtcG9yYWxgIHRvIGNvcHkgYSBgc3RydWN0IHBhZ2VgIHRlbXBsYXRlLiBUaGF0JiMzOTtzIGEgZGlyZWN0IGhpdC4gU28gYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYCBpcyB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludCBmb3IgdGhpcyBuZXcgbG9naWMuIEhvd2V2ZXIsIEkgc2hvdWxkIGNoZWNrIGZvciBvdGhlciBjYWxsIHNpdGVzLCBqdXN0IHRvIGJlIHRob3JvdWdoLiBPa2F5LCBzbyBJIHNob3VsZCBhbHNvIGNvbnNpZGVyIGBtZW1yZW1hcF9wYWdlc2AgYW5kIGBkZXZtX21lbXJlbWFwX3BhZ2VzYCBhcyByZWxhdGVkIGZ1bmN0aW9ucy4KCkFmdGVyIGEgcXVpY2sgc2NhbiwgaXQgbG9va3MgbGlrZSBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgIGlzIHRoZSBtYWluIG9uZSB0aGF0ICpleGVjdXRlcyogdGhlIG1vZGlmaWVkIGNvZGUuIEkmIzM5O2xsIGFkZCB0aGF0IHRvIHRoZSBgRm9jdXNTeW1ib2xzYCBsaXN0LCB0byBtYWtlIHN1cmUgSSBhbSBmb2N1c2luZyBvbiB0aGUgcmVsZXZhbnQgcGFydHMuIFRoZSBvdGhlciBmdW5jdGlvbnMsIGxpa2UgYG1lbW1hcF9pbml0X2NvbXBvdW5kYCwgYHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9mcm9tX3RlbXBsYXRlYCwgYHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9zbG93YCwgYHpvbmVfZGV2aWNlX3RhaWxfcGFnZV9pbml0YCwgYHpvbmVfZGV2aWNlX3BhZ2VfdXBkYXRlX3RlbXBsYXRlYCwgYG1lbWNweV9ub250ZW1wb3JhbGAsIGFuZCBgbWVtY3B5X2ZsdXNoY2FjaGVgLCBzZWVtIGxlc3MgZGlyZWN0bHkgcmVsZXZhbnQgZm9yIG5vdywgYXMgdGhleSBhcmUgc3RhdGljIG9yIHN0YXRpYyBpbmxpbmUuCgpMZXQgbWUgdGhpbmsgYSBiaXQgbW9yZSBhYm91dCBob3cgdGhpbmdzIGFyZSB3aXJlZCB0b2dldGhlci4gT2theSwgc28gYGRldm1fbWVtcmVtYXBfcGFnZXNgIGNhbGxzIGBtZW1yZW1hcF9wYWdlc2AsIGFuZCB0aGF0IGluIHR1cm4gY2FsbHMgYHBhZ2VtYXBfcmFuZ2VgIHdoaWNoICp0aGVuKiBjYWxscyBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgLiBTbyBJIHdpbGwgYWRkIGBtZW1yZW1hcF9wYWdlc2AgYW5kIGBkZXZtX21lbXJlbWFwX3BhZ2VzYCB0byB0aGUgYEZvY3VzU3ltYm9sc2AgYXMgd2VsbC4KCkl0IHNlZW1zIGxpa2UgYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYCBpcyB0aGUgbWFpbiB0YXJnZXQuIEFuZCB0aGUgY2hhbmdlcyB0byBgYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmhgIGRpcmVjdGx5IGFmZmVjdCB0aGUgYmVoYXZpb3Igb2YgYG1lbWNweV9mbHVzaGNhY2hlYC4gWWVzLCBgbWVtY3B5X2ZsdXNoY2FjaGVgIGlzIGFsc28gdXNlZCBpbiBvdGhlciBwbGFjZXMgbGlrZSBgZHJpdmVycy9kYXgvZnNkZXYuY2AsIGBkcml2ZXJzL252ZGltbS9wbWVtLmNgLCBhbmQgYGxpYi9pb3ZfaXRlci5jYCwgYnV0IGl0IGlzIGJlaW5nIG9wdGltaXplZCBmb3Igc3BlY2lmaWMgcGFnZSBzaXplcyBpbiAqdGhpcyogcGF0Y2gsIHRodXMgaXQgaXMgbW9zdCByZWxldmFudCB0byAgYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYC4KCkxldCYjMzk7cyB0aGluayBhYm91dCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgd291bGQgYmUgcmVsZXZhbnQgaGVyZS4gSSYjMzk7dmUgZ290IGBaT05FX0RFVklDRWAsIGBERVZJQ0VfUFJJVkFURWAsIGFuZCBgVEVTVF9ITU1gLiBBbmQgYWxzbywgSSBzaG91bGQga2VlcCBhbiBleWUgb24gYEZTX0RBWGAuIExldCYjMzk7cyBjaGVjayBgRlNfREFYYCBkZXBlbmRlbmNpZXMuIEl0IGRlcGVuZHMgb24gYFpPTkVfREVWSUNFYC4gU28sIGBaT05FX0RFVklDRWAgaXMgdGhlIGtleS4KCk5vdywgbGV0JiMzOTtzIHNlZSBpZiBgVEVTVF9ITU1gIGlzIGVub3VnaCB0byB0cmlnZ2VyIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAuIFllcyEgYGhtbV9kbWlycm9yX2luaXRgIGNhbGxzIGBkbWlycm9yX2RldmljZV9pbml0YCwgd2hpY2ggdGhlbiBjYWxscyBgZG1pcnJvcl9hbGxvY2F0ZV9jaHVua2AsIGFuZCBmaW5hbGx5IHRoYXQgdHJpZ2dlcnMgYG1lbXJlbWFwX3BhZ2VzYC4gVGh1cywgaWYgYFRFU1RfSE1NYCBpcyBidWlsdC1pbiBvciBsb2FkZWQgYXMgYSBtb2R1bGUsIGl0JiMzOTtsbCBydW4gdGhlIGNvZGUuIFNwZWNpZmljYWxseSwgaWYgYFRFU1RfSE1NYCBpcyBidWlsdC1pbiwgdGhpcyB3aWxsIHJ1biBkdXJpbmcgdGhlIGJvb3QgcHJvY2Vzcy4gT2theSwgYGhtbV9kbWlycm9yX2luaXRgIGlzIGEgYG1vZHVsZV9pbml0YCwgc28gaWYgYnVpbHQtaW4sIGl0IHJ1bnMgZHVyaW5nIGtlcm5lbCBpbml0aWFsaXphdGlvbi4gTm93LCBJIHNob3VsZCBtYWtlIHN1cmUgdGhhdCB0aGUgYGRtaXJyb3JfYWxsb2NhdGVfY2h1bmtgIGNhbGwgdG8gYG1lbXJlbWFwX3BhZ2VzYCBpcyB1bmNvbmRpdGlvbmFsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAwNzo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkbWlycm9yX2FsbG9jYXRlX2NodW5rJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2xpYi90ZXN0X2htbS5jPTUxNz1zdGF0aWMgaW50IGRtaXJyb3Jfd3JpdGUoc3RydWN0IGRtaXJyb3IgKmRtaXJyb3IsIHN0cnVjdCBobW1fZG1pcnJvcl9jbWQgKmNtZClcbi0tXG5saWIvdGVzdF9obW0uYy01NTctXG5saWIvdGVzdF9obW0uYzo1NTg6c3RhdGljIGludCBkbWlycm9yX2FsbG9jYXRlX2NodW5rKHN0cnVjdCBkbWlycm9yX2RldmljZSAqbWRldmljZSxcbmxpYi90ZXN0X2htbS5jLTU1OS1cdFx0XHRcdCAgc3RydWN0IHBhZ2UgKipwcGFnZSwgYm9vbCBpc19sYXJnZSlcbi0tXG5saWIvdGVzdF9obW0uYz02OTA9c3RhdGljIHN0cnVjdCBwYWdlICpkbWlycm9yX2Rldm1lbV9hbGxvY19wYWdlKHN0cnVjdCBkbWlycm9yICpkbWlycm9yLFxuLS1cbmxpYi90ZXN0X2htbS5jLTcyMi1cdFx0c3Bpbl91bmxvY2soXHUwMDI2bWRldmljZS1cdTAwM2Vsb2NrKTtcbmxpYi90ZXN0X2htbS5jOjcyMzpcdFx0aWYgKGRtaXJyb3JfYWxsb2NhdGVfY2h1bmsobWRldmljZSwgXHUwMDI2ZHBhZ2UsIGlzX2xhcmdlKSlcbmxpYi90ZXN0X2htbS5jLTcyNC1cdFx0XHRnb3RvIGVycm9yO1xuLS1cbmxpYi90ZXN0X2htbS5jPTE3Nzk9c3RhdGljIGludCBkbWlycm9yX2RldmljZV9pbml0KHN0cnVjdCBkbWlycm9yX2RldmljZSAqbWRldmljZSwgaW50IGlkKVxuLS1cbmxpYi90ZXN0X2htbS5jLTE3OTktXHQvKiBCdWlsZCBhIGxpc3Qgb2YgZnJlZSBaT05FX0RFVklDRSBzdHJ1Y3QgcGFnZXMgKi9cbmxpYi90ZXN0X2htbS5jOjE4MDA6XHRyZXQgPSBkbWlycm9yX2FsbG9jYXRlX2NodW5rKG1kZXZpY2UsIE5VTEwsIGZhbHNlKTtcbmxpYi90ZXN0X2htbS5jLTE4MDEtXHRpZiAocmV0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAwNzo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTMwNgoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDI1NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbml0aWFsIFRob3VnaHRzIG9uIGBkbWlycm9yX2RldmljZV9pbml0YCBhbmQgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBgZG1pcnJvcl9kZXZpY2VfaW5pdGAgY2FsbHMgYGRtaXJyb3JfYWxsb2NhdGVfY2h1bmtgIOKAkyBuaWNlLCBzdHJhaWdodGZvcndhcmQuIFRoYXQgZnVuY3Rpb24gaW4gdHVybiBhbGxvY2F0ZXMgYSBjaHVuayBhbmQgdGhlbiBjYWxscyBgbWVtcmVtYXBfcGFnZXNgLiBUaGlzIGlzIGV4YWN0bHkgd2hhdCBJIHdhcyBob3BpbmcgZm9yLCBhcyBpdCBtZWFucyB0aGlzIGNyaXRpY2FsIGFsbG9jYXRpb24gaXMgdW5jb25kaXRpb25hbGx5IHRyaWdnZXJlZCByaWdodCBhdCBtb2R1bGUgbG9hZCBvciBib290LiBFeGNlbGxlbnQuIE5vdywgb250byB0aGUgY29uZmlndXJhdGlvbiBmb3IgYFRFU1RfSE1NYC4KClJpZ2h0LCBsZXQmIzM5O3Mgc2VlLi4uIGBURVNUX0hNTWAgZGVwZW5kcyBvbiBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGFuZCBgREVWSUNFX1BSSVZBVEVgLiBgREVWSUNFX1BSSVZBVEVgIGZ1cnRoZXIgcmVsaWVzIG9uIGBaT05FX0RFVklDRWAsIGFuZCBgWk9ORV9ERVZJQ0VgIHJlcXVpcmVzIGBNRU1PUllfSE9UUExVR2AsIGBNRU1PUllfSE9UUkVNT1ZFYCwgYW5kIGBTUEFSU0VNRU1fVk1FTU1BUGAuIE9rYXksIHNvIHRvIGJlIHN1cmUgdGhpcyBpcyB3b3JraW5nIHJpZ2h0IEkmIzM5O2xsIHdhbnQgdG8gYWRkOgoqICAgYFRFU1RfSE1NYAoqICAgYERFVklDRV9QUklWQVRFYAoqICAgYFpPTkVfREVWSUNFYAoqICAgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYAoqICAgYE1FTU9SWV9IT1RQTFVHYAoqICAgYE1FTU9SWV9IT1RSRU1PVkVgCiogICBgU1BBUlNFTUVNX1ZNRU1NQVBgCgpXYWl0IGEgc2Vjb25kLCBob2xkIG9uLi4uIGlzbiYjMzk7dCBgU1BBUlNFTUVNX1ZNRU1NQVBgIHVzdWFsbHkgZW5hYmxlZCBieSBkZWZhdWx0IG9uIHg4Nl82ND8gSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoYXQuIExldCBtZSBxdWlja2x5IHNjYW4gYG1tL0tjb25maWdgIHRvIGNvbmZpcm0uIEl0JiMzOTtzIGFsd2F5cyBiZXN0IHRvIGJlIHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDA3OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBTUEFSU0VNRU1fVk1FTU1BUCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTQ1MT1jb25maWcgU1BBUlNFTUVNX0VYVFJFTUVcbi0tXG5tbS9LY29uZmlnLTQ1NC1cbm1tL0tjb25maWc6NDU1OmNvbmZpZyBTUEFSU0VNRU1fVk1FTU1BUF9FTkFCTEVcbm1tL0tjb25maWctNDU2LVx0Ym9vbFxubW0vS2NvbmZpZy00NTctXG5tbS9LY29uZmlnOjQ1ODpjb25maWcgU1BBUlNFTUVNX1ZNRU1NQVBcbm1tL0tjb25maWctNDU5LVx0ZGVmX2Jvb2wgeVxuLS1cbm1tL0tjb25maWctNDY1LVxubW0vS2NvbmZpZzo0NjY6Y29uZmlnIFNQQVJTRU1FTV9WTUVNTUFQX1BSRUlOSVRcbm1tL0tjb25maWctNDY3LVx0Ym9vbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAwNzo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjA2NwoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDI4OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgQ29kZSBNb2RpZmljYXRpb24qKgoKT2theSwgc28gaWYgYFNQQVJTRU1FTV9WTUVNTUFQX0VOQUJMRWAgaXMgc2V0LCBgU1BBUlNFTUVNX1ZNRU1NQVBgIGlzIGF1dG9tYXRpY2FsbHkgZGVmaW5lZC4gVGhhdCYjMzk7cyBzdHJhaWdodGZvcndhcmQuIExldCYjMzk7cyBtYWtlIHN1cmUgd2UgaW5jbHVkZSBgVEVTVF9ITU1gLCBgREVWSUNFX1BSSVZBVEVgLCBgWk9ORV9ERVZJQ0VgLCBhbmQgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBpbiBvdXIgY29uc2lkZXJhdGlvbi4gSSByZW1lbWJlciBTeXprYWxsZXImIzM5O3MgY29uZmlndXJhdGlvbnMgdHlwaWNhbGx5IGluY2x1ZGUgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCwgc28gdGhhdCYjMzk7cyBzb21ldGhpbmcgdG8ga2VlcCBpbiBtaW5kLgoKTm93LCBsZXQmIzM5O3MgcmUtZXhhbWluZSB0aGlzIHBhdGNoIGFuZCBwaW5wb2ludCB0aGUga2V5IGZ1bmN0aW9ucyBpbXBhY3RlZC4gSXQgbG9va3MgbGlrZSB0aGUgY2hhbmdlIHRvdWNoZXMgYGFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oYCwgc3BlY2lmaWNhbGx5IHRvIG9wdGltaXplIGBtZW1jcHlfZmx1c2hjYWNoZWAgZm9yIGZpeGVkIHNpemVzLiBJbnRlcmVzdGluZy4gYG1lbWNweV9mbHVzaGNhY2hlYCBpcyB1c2VkIHdpdGhpbiBgbWVtY3B5X25vbnRlbXBvcmFsYCwgd2hpY2ggdGhlbiBnZXRzIGNhbGxlZCBieSBgem9uZV9kZXZpY2VfcGFnZV9pbml0X2Zyb21fdGVtcGxhdGVgLiBJbiB0dXJuLCB0aGF0IGZ1bmN0aW9uIGlzIHVzZWQgYnkgYm90aCBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgIGFuZCBgbWVtbWFwX2luaXRfY29tcG91bmRgLgoKVGhlcmVmb3JlLCBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgIGlzIHRoZSBwcmltYXJ5IGZ1bmN0aW9uIHRvIGZvY3VzIG9uLCBnaXZlbiB0aGUgY2FsbCBjaGFpbi4gQnV0IHdhaXQsIGlzIGBtZW1tYXBfaW5pdF9jb21wb3VuZGAgcmVhY2hhYmxlIHRvbz8gWWVzLCBhIHF1aWNrIGNoZWNrIHJldmVhbHMgdGhhdCBgbWVtbWFwX2luaXRfY29tcG91bmRgIGlzIGNhbGxlZCBieSBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgIGlmIGBwZ21hcC0mZ3Q7dm1lbW1hcF9zaGlmdGAgaXMgYWN0dWFsbHkgc2V0LiBPa2F5LCBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgIGluIGBtbS9tbV9pbml0LmNgIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGltcGFjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMDc6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVtbWFwX2luaXRfY29tcG91bmQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbW1faW5pdC5jPTExMTU9c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGNvbXBvdW5kX25yX3BhZ2VzKHVuc2lnbmVkIGxvbmcgcGZuLFxuLS1cbm1tL21tX2luaXQuYy0xMTMwLVxubW0vbW1faW5pdC5jOjExMzE6c3RhdGljIHZvaWQgX19yZWYgbWVtbWFwX2luaXRfY29tcG91bmQoc3RydWN0IHBhZ2UgKmhlYWQsXG5tbS9tbV9pbml0LmMtMTEzMi1cdFx0XHRcdCAgICAgICB1bnNpZ25lZCBsb25nIGhlYWRfcGZuLFxuLS1cbm1tL21tX2luaXQuYz0xMTcyPXZvaWQgX19yZWYgbWVtbWFwX2luaXRfem9uZV9kZXZpY2Uoc3RydWN0IHpvbmUgKnpvbmUsXG4tLVxubW0vbW1faW5pdC5jLTEyMjQtXG5tbS9tbV9pbml0LmM6MTIyNTpcdFx0bWVtbWFwX2luaXRfY29tcG91bmQocGFnZSwgcGZuLCB6b25lX2lkeCwgbmlkLCBwZ21hcCxcbm1tL21tX2luaXQuYy0xMjI2LVx0XHRcdFx0ICAgICBjb21wb3VuZF9ucl9wYWdlcyhwZm4sIGFsdG1hcCwgcGdtYXApKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMDc6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzY5NTgKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGVjb25zdHJ1Y3RpbmcgdGhlIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAgRnVuY3Rpb24qKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIGNvZGUsIGFuZCBpdCBsb29rcyBsaWtlIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAgaXMgdGhlIGNlbnRyYWwgcG9pbnQgb2YgaW50ZXJlc3QsIHRoZSBtYWluIGVudHJ5IHBvaW50IHRvIHVuZGVyc3RhbmQuIFRoYXQmIzM5O3MgZ29vZDsgaXQgZ2l2ZXMgbWUgYSBkZWZpbmVkIHBsYWNlIHRvIHN0YXJ0LgoKTm93IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYmV0dGVyLiBUbyBnZXQgYSBob2xpc3RpYyB2aWV3LCBJIHdvbmRlciBpZiBvdGhlciBmdW5jdGlvbnMgY2FsbCBgbWVtY3B5X25vbnRlbXBvcmFsYD8gSXQmIzM5O3MgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgaG93IGBtZW1jcHlfbm9udGVtcG9yYWxgIGlzIHVzZWQgZWxzZXdoZXJlIGluIHRoaXMgY29udGV4dCBzbyB0aGF0IEkgY2FuIHNlZSB0aGUgcG90ZW50aWFsIGZvciBjb2RlIHJldXNlIGFuZCB3aGVyZSB0aGUgb3B0aW1pemF0aW9ucyBtaWdodCBhcHBseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMDc6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVtY3B5X25vbnRlbXBvcmFsJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oPTExMj1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbWVtY3B5X2ZsdXNoY2FjaGUodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsXG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmgtMTU3LVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0Lmg6MTU4OiNkZWZpbmUgbWVtY3B5X25vbnRlbXBvcmFsIG1lbWNweV9ub250ZW1wb3JhbFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmgtMTU5LS8qXG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmgtMTYyLSAqL1xuYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0Lmg6MTYzOnN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtZW1jcHlfbm9udGVtcG9yYWwodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaC0xNjQtXHRcdHNpemVfdCBjbnQpXG4tLVxuaW5jbHVkZS9saW51eC9zdHJpbmcuaD0yNzU9c3RhdGljIGlubGluZSB2b2lkIG1lbWNweV9mbHVzaGNhY2hlKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgY250KVxuLS1cbmluY2x1ZGUvbGludXgvc3RyaW5nLmgtMjgwLVxuaW5jbHVkZS9saW51eC9zdHJpbmcuaDoyODE6I2lmbmRlZiBtZW1jcHlfbm9udGVtcG9yYWxcbmluY2x1ZGUvbGludXgvc3RyaW5nLmgtMjgyLS8qXG5pbmNsdWRlL2xpbnV4L3N0cmluZy5oOjI4MzogKiBtZW1jcHlfbm9udGVtcG9yYWwoKSByZXF1ZXN0cyBhIG5vbi10ZW1wb3JhbCBjb3B5IHdoZW4gdGhlXG5pbmNsdWRlL2xpbnV4L3N0cmluZy5oLTI4NC0gKiBhcmNoaXRlY3R1cmUgaGFzIGEgc3VpdGFibGUgYmFja2VuZC4gQXJjaGl0ZWN0dXJlcyB3aXRob3V0IGFcbi0tXG5pbmNsdWRlL2xpbnV4L3N0cmluZy5oLTI4OS0gKi9cbmluY2x1ZGUvbGludXgvc3RyaW5nLmg6MjkwOiNkZWZpbmUgbWVtY3B5X25vbnRlbXBvcmFsKGRzdCwgc3JjLCBsZW4pIFxcXG5pbmNsdWRlL2xpbnV4L3N0cmluZy5oLTI5MS1cdCgodm9pZCltZW1jcHkoZHN0LCBzcmMsIGxlbikpXG4tLVxubW0vbW1faW5pdC5jPTEwOTU9c3RhdGljIHZvaWQgem9uZV9kZXZpY2VfcGFnZV9pbml0X2Zyb21fdGVtcGxhdGUoc3RydWN0IHBhZ2UgKnBhZ2UsXG4tLVxubW0vbW1faW5pdC5jLTExMDMtXHR6b25lX2RldmljZV9wYWdlX3VwZGF0ZV90ZW1wbGF0ZSh0ZW1wbGF0ZSwgcGZuKTtcbm1tL21tX2luaXQuYzoxMTA0Olx0bWVtY3B5X25vbnRlbXBvcmFsKHBhZ2UsIHRlbXBsYXRlLCBzaXplb2YoKnBhZ2UpKTtcbm1tL21tX2luaXQuYy0xMTA1LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMDc6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzc3MDUKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiA5MjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBTdHJhdGVneSBmb3IgWk9ORV9ERVZJQ0UgTWVtb3J5IE9wdGltaXphdGlvbioqCgpPa2F5LCBzbyBoZXJlJiMzOTtzIHRoZSBicmVha2Rvd24gb2Ygd2hhdCBJIG5lZWQgdG8gZm9jdXMgb24uIEl0IGxvb2tzIGxpa2UgYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYCBpcyB0aGUgY2VudHJhbCBmdW5jdGlvbiBmb3IgdGhpcyBwYXRjaCwgYXMgaXQmIzM5O3MgdGhlIGNvcmUgZW50cnkgcG9pbnQgZm9yIHRoZSBvcHRpbWl6ZWQgbWVtb3J5IG1hbmFnZW1lbnQgd2l0aGluIGBaT05FX0RFVklDRWAuICBJIHNob3VsZCBhbHNvIGluY2x1ZGUgYG1lbXJlbWFwX3BhZ2VzYCBhbmQgYGRldm1fbWVtcmVtYXBfcGFnZXNgIGluIG15IGBGb2N1c1N5bWJvbHNgIHRvIGVuc3VyZSB0aGUgZnV6emVyIGdldHMgdG8gdGhhdCBjcml0aWNhbCBwYXRoLiAgYHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9mcm9tX3RlbXBsYXRlYCBkb2VzbiYjMzk7dCBzZWVtIHRvIGJlIGEga2V5IGVudHJ5IHBvaW50LCBqdXN0IGEgaGVscGVyLCBzbyBJJiMzOTtsbCBpZ25vcmUgdGhhdC4KCkxldCYjMzk7cyBjbGFyaWZ5OiBNeSBwcmltYXJ5IGdvYWwgaXMgdG8gZnV6eiB0aGUgYFpPTkVfREVWSUNFYCBtZW1vcnkgb3B0aW1pemF0aW9uLiBUaGlzIG9wdGltaXphdGlvbiByZXZvbHZlcyBhcm91bmQgdXNpbmcgdGVtcGxhdGVzIGFuZCBub24tdGVtcG9yYWwgbWVtb3J5IGNvcGllcyBkdXJpbmcgYHN0cnVjdCBwYWdlYCBpbml0aWFsaXphdGlvbi4gVGhpcyBpcyBhIGNydWNpYWwgYXJlYSB3aXRoaW4gbWVtb3J5IG1hbmFnZW1lbnQsIHdoaWNoIGNhbiBiZSByZWFjaGVkIHRocm91Z2ggaG90cGx1Z2dpbmcgZGV2aWNlIG1lbW9yeSwgc3VjaCBhcyB0aHJvdWdoIGxvYWRpbmcgdGhlIGBURVNUX0hNTWAgbW9kdWxlIG9yIHdpdGggREFYL1BNRU0gZGV2aWNlcy4KClRoZSBwYXRjaCBpbmNsdWRlcyBtb2RpZmljYXRpb25zIHRvIGBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaGAgd2l0aCB0aGUgYWRkaXRpb24gb2YgYG1vdm50aV8qYCBpbnN0cnVjdGlvbnMgYW5kIHRoZWlyIHVzZSBpbiBgbWVtY3B5X2ZsdXNoY2FjaGVgLiAgV2hpbGUgYG1lbWNweV9mbHVzaGNhY2hlYCBpdHNlbGYgaXMgd2lkZWx5IHVzZWQsIHBhcnRpY3VsYXJseSBpbiBjb250ZXh0cyBsaWtlIGBkcml2ZXJzL2RheC9mc2Rldi5jYCwgYGRyaXZlcnMvbnZkaW1tL3BtZW0uY2AsIGBsaWIvaW92X2l0ZXIuY2AsIGFuZCBgZHJpdmVycy9tZC9kbS13cml0ZWNhY2hlLmNgLCB0aGUgb3B0aW1pemF0aW9uIGlzICpzcGVjaWZpY2FsbHkqIHRhaWxvcmVkIGZvciB0aGUgc2l6ZXMgb2YgYHN0cnVjdCBwYWdlYCBvbiB4ODZfNjQsIHdoaWNoIGlzIDY0IGJ5dGVzICh3aXRob3V0IGBDT05GSUdfTUVNQ0dgKSwgb3IgODAgb3IgOTYgYnl0ZXMgKHdpdGggb3RoZXIgY29uZmlncykuIFRoZXJlZm9yZSwgdGhlIGZ1enplciBpcyBiZXN0IGRpcmVjdGVkIHRvd2FyZHMgYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYCBkaXJlY3RseS4KClRoZSBgVEVTVF9ITU1gIG1vZHVsZSBzZWVtcyBsaWtlIGEgZ29vZCBzdGFydGluZyBwb2ludC4gT24gbG9hZGluZywgYFRFU1RfSE1NYCBjYWxscyBgZG1pcnJvcl9kZXZpY2VfaW5pdGAsIHdoaWNoIHRoZW4gY2FsbHMgYGRtaXJyb3JfYWxsb2NhdGVfY2h1bmtgLiBUaGlzIHVsdGltYXRlbHkgbGVhZHMgdG8gYG1lbXJlbWFwX3BhZ2VzYCBhbmQgdGhlbiBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgLiAgSSBzaG91bGQgY2hlY2sgaWYgYFRFU1RfSE1NYCBpcyBlbm91Z2guIFRoZSBgaG1tX2RtaXJyb3JfY21kYCBpb2N0bCBpbiBgVEVTVF9ITU1gIGdpdmVzIG1vcmUgYWxsb2NhdGlvbiBjb250cm9sLCBzbyBpZiBgVEVTVF9ITU1gIGlzIGJ1aWx0LWluIHRoaXMgaGFwcGVucyBhdCBib290LiBPdGhlcndpc2UsIEkgY2FuIHVzZSBhbiBpb2N0bCB0byB0cmlnZ2VyIG1vcmUgYWxsb2NhdGlvbnMuCgpDcnVjaWFsbHksIHVzZXIgc3BhY2UgKmNhbiogZGlyZWN0bHkgdHJpZ2dlciB0aGlzIHRocm91Z2ggcGFnZSBmYXVsdHMuIGBkbWlycm9yX2FsbG9jYXRlX2NodW5rYCBpcyBhbHNvIGNhbGxlZCB0aHJvdWdoIGBkbWlycm9yX2Rldm1lbV9hbGxvY19wYWdlYCwgd2hpY2ggaXMgdXNlZCBkdXJpbmcgcGFnZSBmYXVsdHMgdGhyb3VnaCBgZG1pcnJvcl9kb193cml0ZWAgYW5kIGBkbWlycm9yX2RvX3JlYWRgLiBUaGlzIG1lYW5zIEkgY2FuIG1tYXAgdGhlIGRldmljZSBtZW1vcnkgYW5kIGFjY2VzcyBpdCwgb3IgdXNlIHRoZSBpb2N0bHMsIHRvIHRyaWdnZXIgdGhlIGNvZGUgcGF0aC4gIFRoYXQmIzM5O3MgZ3JlYXQgZm9yIGZ1enppbmcgYmVjYXVzZSBpdCBnaXZlcyBhIGxvdCBtb3JlIGNvbnRyb2wuIEkgY2FuIHVzZSB1c2VyIHNwYWNlIHRvIHNldCBpdCB1cCBuaWNlbHkuCgpTbywgaGVyZSYjMzk7cyB0aGUgcGxhbjoKCiogICAqKldvcnRoRnV6emluZzogVHJ1ZSoqIChBYnNvbHV0ZWx5LCB0aGlzIGlzIGhpZ2gtdmFsdWUpCiogICAqKkZvY3VzU3ltYm9sczoqKiBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgLCBgbWVtcmVtYXBfcGFnZXNgLCBgZGV2bV9tZW1yZW1hcF9wYWdlc2AKKiAgICoqRW5hYmxlQ29uZmlnczoqKiBgWk9ORV9ERVZJQ0VgLCBgREVWSUNFX1BSSVZBVEVgLCBgVEVTVF9ITU1gLCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgCgpUaGlzIGxvb2tzIGxpa2UgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBhIGZ1enplciEgSSYjMzk7bGwgbm93IGV4cGxvcmUgYGRtaXJyb3JfZGV2bWVtX2FsbG9jX3BhZ2VgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAwNzo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkbWlycm9yX2Rldm1lbV9hbGxvY19wYWdlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2xpYi90ZXN0X2htbS5jLTQxLSAqIEZvciBkZXZpY2VfcHJpdmF0ZSBwYWdlcywgZHBhZ2UgaXMganVzdCBhIGR1bW15IHN0cnVjdCBwYWdlXG5saWIvdGVzdF9obW0uYzo0MjogKiByZXByZXNlbnRpbmcgYSBwaWVjZSBvZiBkZXZpY2UgbWVtb3J5LiBkbWlycm9yX2Rldm1lbV9hbGxvY19wYWdlXG5saWIvdGVzdF9obW0uYy00My0gKiBhbGxvY2F0ZXMgYSByZWFsIHN5c3RlbSBtZW1vcnkgcGFnZSBhcyBiYWNraW5nIHN0b3JhZ2UgdG8gZmFrZSBhXG4tLVxubGliL3Rlc3RfaG1tLmM9NTU4PXN0YXRpYyBpbnQgZG1pcnJvcl9hbGxvY2F0ZV9jaHVuayhzdHJ1Y3QgZG1pcnJvcl9kZXZpY2UgKm1kZXZpY2UsXG4tLVxubGliL3Rlc3RfaG1tLmMtNjg5LVxubGliL3Rlc3RfaG1tLmM6NjkwOnN0YXRpYyBzdHJ1Y3QgcGFnZSAqZG1pcnJvcl9kZXZtZW1fYWxsb2NfcGFnZShzdHJ1Y3QgZG1pcnJvciAqZG1pcnJvcixcbmxpYi90ZXN0X2htbS5jLTY5MS1cdFx0XHRcdFx0ICAgICAgYm9vbCBpc19sYXJnZSlcbi0tXG5saWIvdGVzdF9obW0uYz03Mzk9c3RhdGljIHZvaWQgZG1pcnJvcl9taWdyYXRlX2FsbG9jX2FuZF9jb3B5KHN0cnVjdCBtaWdyYXRlX3ZtYSAqYXJncyxcbi0tXG5saWIvdGVzdF9obW0uYy03NzAtXHRcdH0gZWxzZVxubGliL3Rlc3RfaG1tLmM6NzcxOlx0XHRcdGRwYWdlID0gZG1pcnJvcl9kZXZtZW1fYWxsb2NfcGFnZShkbWlycm9yLCBpc19sYXJnZSk7XG5saWIvdGVzdF9obW0uYy03NzItXG4tLVxubGliL3Rlc3RfaG1tLmMtNzg5LVx0XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yIFx1MDAyNlx1MDAyNiBhZGRyIFx1MDAzYyBhcmdzLVx1MDAzZWVuZDsgaSYjNDM7JiM0MzspIHtcbmxpYi90ZXN0X2htbS5jOjc5MDpcdFx0XHRcdGRwYWdlID0gZG1pcnJvcl9kZXZtZW1fYWxsb2NfcGFnZShkbWlycm9yLCBmYWxzZSk7XG5saWIvdGVzdF9obW0uYy03OTEtXHRcdFx0XHRycGFnZSA9IEJBQ0tJTkdfUEFHRShkcGFnZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDA3OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5ODIyCgkJCQkJCQlvdXRwdXQ6IDE4MwoJCQkJCQkJdGhvdWdodHM6IDc4NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBgZG1pcnJvcmAgRnV6emluZyBTdHJhdGVneSoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIHRoaW5raW5nIGFib3V0IGhvdyB0byBlZmZlY3RpdmVseSBmdXp6IHRoaXMgYGRtaXJyb3JgIGZ1bmN0aW9uYWxpdHksIGFuZCBoZXJlJiMzOTtzIG15IGxpbmUgb2YgdGhvdWdodC4gRmlyc3QsIEkgcmVtZW1iZXIgdGhhdCBgZG1pcnJvcl9kZXZtZW1fYWxsb2NfcGFnZWAgY2FsbHMgYGRtaXJyb3JfYWxsb2NhdGVfY2h1bmtgIHdoZW4gaXQgbmVlZHMgbW9yZSBtZW1vcnkuIEFuZCBjcml0aWNhbGx5LCBgZG1pcnJvcl9taWdyYXRlX2FsbG9jX2FuZF9jb3B5YCBpcyB0cmlnZ2VyZWQgZHVyaW5nIG1pZ3JhdGlvbiB0byBkZXZpY2UgbWVtb3J5IHZpYSB0aGF0IGBITU1fRE1JUlJPUl9NSUdSQVRFX1RPX0RFVmAgaW9jdGwuIFNvLCB0aGF0IG1lYW5zIHN5emthbGxlciBjYW4gcmVhZGlseSBleGVyY2lzZSB0aGlzIGNvZGUgcGF0aCBqdXN0IGJ5IG9wZW5pbmcgYC9kZXYvaG1tX2RtaXJyb3IwYCBhbmQgdGhlbiBpc3N1aW5nIHRoZSByZWxldmFudCBpb2N0bHMuCgpOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gdGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzLiBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgYnVpbGQgaGFzOiBgWk9ORV9ERVZJQ0VgLCBgREVWSUNFX1BSSVZBVEVgLCBgVEVTVF9ITU1gLCBhbmQgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBlbmFibGVkLiBMZXQgbWUganVzdCBjb25maXJtIGFueSBvdGhlciBkZXBlbmRlbmNpZXMgZm9yIGBURVNUX0hNTWAgYmVjYXVzZSBJIGtub3cgdGhvc2UgdGhpbmdzIGNhbiBnZXQgdHJpY2t5LiBSaWdodCwgaXQgZGVwZW5kcyBvbiBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGFuZCBgREVWSUNFX1BSSVZBVEVgLiBBbmQgYERFVklDRV9QUklWQVRFYCBuZWVkcyBgWk9ORV9ERVZJQ0VgLCB3aGljaCBpbiB0dXJuIG5lZWRzIGBNRU1PUllfSE9UUExVR2AsIGBNRU1PUllfSE9UUkVNT1ZFYCwgYW5kIGBTUEFSU0VNRU1fVk1FTU1BUGAuIEZ1cnRoZXJtb3JlLCBgTUVNT1JZX0hPVFBMVUdgIGRlcGVuZHMgb24gZWl0aGVyIGBTUEFSU0VNRU1gIG9yIGBYODZfNjRgLCBhbmQgYE1FTU9SWV9IT1RSRU1PVkVgIHJlcXVpcmVzIGBNRU1PUllfSE9UUExVR2AgYW5kIGBBUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFYC4gU28sIHRvIGJlIGNlcnRhaW4sIHdlIHNob3VsZCBoYXZlIHRoZSBmb2xsb3dpbmcgZW5hYmxlZDoKCmBaT05FX0RFVklDRWAKYERFVklDRV9QUklWQVRFYApgVEVTVF9ITU1gCmBUUkFOU1BBUkVOVF9IVUdFUEFHRWAKYE1FTU9SWV9IT1RQTFVHYApgTUVNT1JZX0hPVFJFTU9WRWAKCkFjdHVhbGx5LCB3YWl0IGEgc2Vjb25kLiBgTUVNT1JZX0hPVFBMVUdgIGFuZCBgTUVNT1JZX0hPVFJFTU9WRWAgYXJlIHByZXR0eSBzdGFuZGFyZCBpbiBzeXprYWxsZXIgY29uZmlncywgYnV0IGl04oCZcyBhbHdheXMgc2FmZXIgdG8gbGlzdCB0aGVtIGV4cGxpY2l0bHkgdG8gYmUgY2VydGFpbi4gWWVzLCBJJiMzOTtsbCBnbyB3aXRoIHRoYXQgbW9yZSBjb25zZXJ2YXRpdmUgc2V0LgoKTm93LCBsZXQmIzM5O3MgcmVmaW5lIHRoZSBmdXp6aW5nIHN5bWJvbHMuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBvZiBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgLCBgbWVtcmVtYXBfcGFnZXNgLCBhbmQgYGRldm1fbWVtcmVtYXBfcGFnZXNgLiBMZXQgbWUgY2hlY2sgZXhwb3J0IHN0YXR1czogYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYCBpc24mIzM5O3QgZXhwb3J0ZWQsIGJ1dCBpdCYjMzk7cyBnbG9iYWwgYW5kIHRoZXJlZm9yZSBhY2Nlc3NpYmxlLiBgbWVtcmVtYXBfcGFnZXNgIGlzIGV4cG9ydGVkLCBhbmQgYGRldm1fbWVtcmVtYXBfcGFnZXNgIGlzIGFsc28gZXhwb3J0ZWQuCgpJIHRoaW5rIHRoaXMgbG9va3MgZ29vZC4KCk9rYXksIG9uZSBsYXN0IHBhc3Mgb3ZlciB0aGUgcGF0Y2ggaXRzZWxmIHRvIGVuc3VyZSBJIGhhdmVuJiMzOTt0IG92ZXJsb29rZWQgYW55IGhpZGRlbiBmZWF0dXJlcyBvciByZWxhdGVkIGNvZGUuIEkgc2VlIHRoYXQgdGhlIHBhdGNoIGludHJvZHVjZXMgYHNldF9wYWdlX3NlY3Rpb25fZnJvbV9wZm5gIGluIGBpbmNsdWRlL2xpbnV4L21tLmhgLiBJdCBjaGFuZ2VzIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAgYW5kIGBtZW1tYXBfaW5pdF9jb21wb3VuZGAgdG8gdXNlIGEgdGVtcGxhdGUgcGFnZSBhbmQgYG1lbWNweV9ub250ZW1wb3JhbGAuIEl0IGFkZHMgYG1lbWNweV9ub250ZW1wb3JhbGAgdG8gYGluY2x1ZGUvbGludXgvc3RyaW5nLmhgIGFuZCBgYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmhgLiBBZGRpdGlvbmFsbHksIGl0IGluY2x1ZGVzIGBtb3ZudGlfOGAsIGBtb3ZudGlfMTZgLCBgbW92bnRpXzMyYCwgYW5kIGBtb3ZudGlfNjRgIGluIGBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaGAuIEZpbmFsbHksIHRoZSBwYXRjaCBjaGFuZ2VzIGBtZW1jcHlfZmx1c2hjYWNoZWAgaW4gYGFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oYC4KCkV2ZXJ5dGhpbmcgaGVyZSBpcyBmdW5kYW1lbnRhbGx5IGFib3V0IG9wdGltaXppbmcgYHN0cnVjdCBwYWdlYCBpbml0aWFsaXphdGlvbiBmb3IgYFpPTkVfREVWSUNFYCBtZW1vcnkuIEltcG9ydGFudGx5LCB0aGUgbG9naWMgc2VlbXMgZnVuY3Rpb25hbCwgcmVhY2hhYmxlLCBhbmQgcXVpdGUgc3VzY2VwdGlibGUgdG8gc3VidGxlIG1lbW9yeSBjb3JydXB0aW9uIGlzc3Vlcy4gRnV6emluZyBpdCBpcyBkZWZpbml0ZWx5IHdvcnRoIGl0LiBXZSYjMzk7cmUgZGVhbGluZyB3aXRoIG1lbW9yeSBpbml0aWFsaXphdGlvbiBhbmQgbm9uLXRlbXBvcmFsIGNvcGllcywgYW5kIHRob3NlIG9mdGVuIGhhcmJvciBhbGlnbm1lbnQgaXNzdWVzLCBtaXNzaW5nIGJhcnJpZXJzLCBvciBpbmNvcnJlY3Qgc2l6ZXMuCgpOb3csIEkmIzM5O20gcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAwNzo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Wk9ORV9ERVZJQ0UmIzM0OywKICAgICYjMzQ7REVWSUNFX1BSSVZBVEUmIzM0OywKICAgICYjMzQ7VEVTVF9ITU0mIzM0OywKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OywKICAgICYjMzQ7TUVNT1JZX0hPVFBMVUcmIzM0OywKICAgICYjMzQ7TUVNT1JZX0hPVFJFTU9WRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21lbW1hcF9pbml0X3pvbmVfZGV2aWNlJiMzNDssCiAgICAmIzM0O21lbXJlbWFwX3BhZ2VzJiMzNDssCiAgICAmIzM0O2Rldm1fbWVtcmVtYXBfcGFnZXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb3B0aW1pemVzIHN0cnVjdCBwYWdlIGluaXRpYWxpemF0aW9uIGZvciBaT05FX0RFVklDRSBtZW1vcnkgYnkgdXNpbmcgYSB0ZW1wbGF0ZSBwYWdlIGFuZCBub24tdGVtcG9yYWwgbWVtb3J5IGNvcGllcyAobWVtY3B5X25vbnRlbXBvcmFsKS4gVGhpcyBpcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIHJlYWNoYWJsZSB2aWEgZGV2aWNlIG1lbW9yeSBob3RwbHVnLCBzdWNoIGFzIHdoZW4gbG9hZGluZyB0aGUgVEVTVF9ITU0gbW9kdWxlIG9yIHVzaW5nIERBWC9QTUVNIGRldmljZXMuIEZ1enppbmcgdGhpcyBpcyBpbXBvcnRhbnQgdG8gY2F0Y2ggcG90ZW50aWFsIGFsaWdubWVudCBvciBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZXMgZHVyaW5nIHBhZ2UgaW5pdGlhbGl6YXRpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1pPTkVfREVWSUNFJiMzNDssCiAgICAmIzM0O0RFVklDRV9QUklWQVRFJiMzNDssCiAgICAmIzM0O1RFU1RfSE1NJiMzNDssCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDssCiAgICAmIzM0O01FTU9SWV9IT1RQTFVHJiMzNDssCiAgICAmIzM0O01FTU9SWV9IT1RSRU1PVkUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttZW1tYXBfaW5pdF96b25lX2RldmljZSYjMzQ7LAogICAgJiMzNDttZW1yZW1hcF9wYWdlcyYjMzQ7LAogICAgJiMzNDtkZXZtX21lbXJlbWFwX3BhZ2VzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9wdGltaXplcyBzdHJ1Y3QgcGFnZSBpbml0aWFsaXphdGlvbiBmb3IgWk9ORV9ERVZJQ0UgbWVtb3J5IGJ5IHVzaW5nIGEgdGVtcGxhdGUgcGFnZSBhbmQgbm9uLXRlbXBvcmFsIG1lbW9yeSBjb3BpZXMgKG1lbWNweV9ub250ZW1wb3JhbCkuIFRoaXMgaXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyByZWFjaGFibGUgdmlhIGRldmljZSBtZW1vcnkgaG90cGx1Zywgc3VjaCBhcyB3aGVuIGxvYWRpbmcgdGhlIFRFU1RfSE1NIG1vZHVsZSBvciB1c2luZyBEQVgvUE1FTSBkZXZpY2VzLiBGdXp6aW5nIHRoaXMgaXMgaW1wb3J0YW50IHRvIGNhdGNoIHBvdGVudGlhbCBhbGlnbm1lbnQgb3IgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzIGR1cmluZyBwYWdlIGluaXRpYWxpemF0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDNUMDc6NDA6MTIuNDg1ODcyNDM5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ0MzI0MjY2NDI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlpPTkVfREVWSUNFXCIsXG4gICAgXCJERVZJQ0VfUFJJVkFURVwiLFxuICAgIFwiVEVTVF9ITU1cIixcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCIsXG4gICAgXCJNRU1PUllfSE9UUExVR1wiLFxuICAgIFwiTUVNT1JZX0hPVFJFTU9WRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1lbW1hcF9pbml0X3pvbmVfZGV2aWNlXCIsXG4gICAgXCJtZW1yZW1hcF9wYWdlc1wiLFxuICAgIFwiZGV2bV9tZW1yZW1hcF9wYWdlc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9wdGltaXplcyBzdHJ1Y3QgcGFnZSBpbml0aWFsaXphdGlvbiBmb3IgWk9ORV9ERVZJQ0UgbWVtb3J5IGJ5IHVzaW5nIGEgdGVtcGxhdGUgcGFnZSBhbmQgbm9uLXRlbXBvcmFsIG1lbW9yeSBjb3BpZXMgKG1lbWNweV9ub250ZW1wb3JhbCkuIFRoaXMgaXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyByZWFjaGFibGUgdmlhIGRldmljZSBtZW1vcnkgaG90cGx1Zywgc3VjaCBhcyB3aGVuIGxvYWRpbmcgdGhlIFRFU1RfSE1NIG1vZHVsZSBvciB1c2luZyBEQVgvUE1FTSBkZXZpY2VzLiBGdXp6aW5nIHRoaXMgaXMgaW1wb3J0YW50IHRvIGNhdGNoIHBvdGVudGlhbCBhbGlnbm1lbnQgb3IgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzIGR1cmluZyBwYWdlIGluaXRpYWxpemF0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QwNzo0MDoxMi40ODU4Nzg3MzlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwNzczMzYwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDYxN2FjMTVjOTJmYTkyMzQzNzExYWU2MWQ2NTkzZTBhMWFhMTRlNDRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBBdWcgMyAwNzo0MDoxMSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oXFxuaW5kZXggNDYzNTYxNjg2M2Y1My4uYmM2YTlmMzRiMzQ2YSAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaFxcbisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oXFxuQEAgLTgyLDcgKzgyLDM1IEBAIGludCBzdHJjbXAoY29uc3QgY2hhciAqY3MsIGNvbnN0IGNoYXIgKmN0KTtcXG4gI2lmZGVmIENPTkZJR19BUkNIX0hBU19VQUNDRVNTX0ZMVVNIQ0FDSEVcXG4gI2RlZmluZSBfX0hBVkVfQVJDSF9NRU1DUFlfRkxVU0hDQUNIRSAxXFxuIHZvaWQgX19tZW1jcHlfZmx1c2hjYWNoZSh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IGNudCk7XFxuLXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtZW1jcHlfZmx1c2hjYWNoZSh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IGNudClcXG4rXFxuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtb3ZudGlfOCh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYylcXG4re1xcbitcXHRhc20gdm9sYXRpbGUoXFxcIm1vdm50aXEgJTEsICUwXFxcIlxcbitcXHRcXHQgICAgIDogXFxcIj1tXFxcIigqKHU2NCAqKWRzdClcXG4rXFx0XFx0ICAgICA6IFxcXCJyXFxcIigqKGNvbnN0IHU2NCAqKXNyYylcXG4rXFx0XFx0ICAgICA6IFxcXCJtZW1vcnlcXFwiKTtcXG4rfVxcbitcXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG1vdm50aV8xNih2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYylcXG4re1xcbitcXHRtb3ZudGlfOChkc3QsIHNyYyk7XFxuK1xcdG1vdm50aV84KGRzdCArIDgsIHNyYyArIDgpO1xcbit9XFxuK1xcbitzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbW92bnRpXzMyKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjKVxcbit7XFxuK1xcdG1vdm50aV8xNihkc3QsIHNyYyk7XFxuK1xcdG1vdm50aV8xNihkc3QgKyAxNiwgc3JjICsgMTYpO1xcbit9XFxuK1xcbitzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbW92bnRpXzY0KHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjKVxcbit7XFxuK1xcdG1vdm50aV8zMihkc3QsIHNyYyk7XFxuK1xcdG1vdm50aV8zMihkc3QgKyAzMiwgc3JjICsgMzIpO1xcbit9XFxuK1xcbitzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbWVtY3B5X2ZsdXNoY2FjaGUodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIHNpemVfdCBjbnQpXFxuIHtcXG4gXFx0aWYgKF9fYnVpbHRpbl9jb25zdGFudF9wKGNudCkpIHtcXG4gXFx0XFx0c3dpdGNoIChjbnQpIHtcXG5AQCAtOTYsMTAgKzEyNCw0OCBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbWVtY3B5X2ZsdXNoY2FjaGUodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdFxcbiBcXHRcXHRcXHRcXHRhc20gKFxcXCJtb3ZudGlxICUxLCAlMFxcXCIgOiBcXFwiPW1cXFwiKCoodTY0ICopZHN0KSA6IFxcXCJyXFxcIigqKHU2NCAqKXNyYykpO1xcbiBcXHRcXHRcXHRcXHRhc20gKFxcXCJtb3ZudGlxICUxLCAlMFxcXCIgOiBcXFwiPW1cXFwiKCoodTY0ICopKGRzdCArIDgpKSA6IFxcXCJyXFxcIigqKHU2NCAqKShzcmMgKyA4KSkpO1xcbiBcXHRcXHRcXHRcXHRyZXR1cm47XFxuK1xcdFxcdFxcdC8qXFxuK1xcdFxcdFxcdCAqIFRoZSByZWxldmFudCBmaXhlZC1zaXplIGNvcGllcyBoZXJlIGFyZSB0aGVcXG4rXFx0XFx0XFx0ICogeDg2XzY0IHN0cnVjdCBwYWdlIHNpemVzOiA2NCwgODAsIGFuZCA5NiBieXRlcy5cXG4rXFx0XFx0XFx0ICogS2VlcCAzMi1ieXRlIGFuZCA0OC1ieXRlIGNvcGllcyBpbmxpbmUgYXMgd2VsbFxcbitcXHRcXHRcXHQgKiBpbnN0ZWFkIG9mIHNlbmRpbmcgdGhvc2UgbmVhcmJ5IGZpeGVkLXNpemVcXG4rXFx0XFx0XFx0ICogY2FzZXMgYmFjayB0byBfX21lbWNweV9mbHVzaGNhY2hlKCkuXFxuK1xcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHRjYXNlIDMyOlxcbitcXHRcXHRcXHRcXHRtb3ZudGlfMzIoZHN0LCBzcmMpO1xcbitcXHRcXHRcXHRcXHRyZXR1cm47XFxuK1xcdFxcdFxcdGNhc2UgNDg6XFxuK1xcdFxcdFxcdFxcdG1vdm50aV8zMihkc3QsIHNyYyk7XFxuK1xcdFxcdFxcdFxcdG1vdm50aV8xNihkc3QgKyAzMiwgc3JjICsgMzIpO1xcbitcXHRcXHRcXHRcXHRyZXR1cm47XFxuK1xcdFxcdFxcdGNhc2UgNjQ6XFxuK1xcdFxcdFxcdFxcdG1vdm50aV82NChkc3QsIHNyYyk7XFxuK1xcdFxcdFxcdFxcdHJldHVybjtcXG4rXFx0XFx0XFx0Y2FzZSA4MDpcXG4rXFx0XFx0XFx0XFx0bW92bnRpXzY0KGRzdCwgc3JjKTtcXG4rXFx0XFx0XFx0XFx0bW92bnRpXzE2KGRzdCArIDY0LCBzcmMgKyA2NCk7XFxuK1xcdFxcdFxcdFxcdHJldHVybjtcXG4rXFx0XFx0XFx0Y2FzZSA5NjpcXG4rXFx0XFx0XFx0XFx0bW92bnRpXzY0KGRzdCwgc3JjKTtcXG4rXFx0XFx0XFx0XFx0bW92bnRpXzMyKGRzdCArIDY0LCBzcmMgKyA2NCk7XFxuK1xcdFxcdFxcdFxcdHJldHVybjtcXG4gXFx0XFx0fVxcbiBcXHR9XFxuK1xcbiBcXHRfX21lbWNweV9mbHVzaGNhY2hlKGRzdCwgc3JjLCBjbnQpO1xcbiB9XFxuK1xcbisjZGVmaW5lIG1lbWNweV9ub250ZW1wb3JhbCBtZW1jcHlfbm9udGVtcG9yYWxcXG4rLypcXG4rICogUmV1c2UgdGhlIGV4aXN0aW5nIHg4NiBmbHVzaGNhY2hlIGJhY2tlbmQgYXMgdGhlIG5vbi10ZW1wb3JhbCBjb3B5XFxuKyAqIHByaW1pdGl2ZS5cXG4rICovXFxuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtZW1jcHlfbm9udGVtcG9yYWwodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsXFxuK1xcdFxcdHNpemVfdCBjbnQpXFxuK3tcXG4rXFx0bWVtY3B5X2ZsdXNoY2FjaGUoZHN0LCBzcmMsIGNudCk7XFxuK31cXG4rXFxuICNlbmRpZlxcbiBcXG4gI2VuZGlmIC8qIF9fS0VSTkVMX18gKi9cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbS5oIGIvaW5jbHVkZS9saW51eC9tbS5oXFxuaW5kZXggNDg1ZGY5YzJkYmRkYi4uNDMzNDNiZmNlNDkzNiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L21tLmhcXG5AQCAtMjU0MSwxMSArMjU0MSwyMiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3BhZ2Vfc2VjdGlvbihzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBzZWN0aW9uKVxcbiBcXHRwYWdlLVxcdTAwM2VmbGFncy5mIHw9IChzZWN0aW9uIFxcdTAwMjYgU0VDVElPTlNfTUFTSykgXFx1MDAzY1xcdTAwM2MgU0VDVElPTlNfUEdTSElGVDtcXG4gfVxcbiBcXG4rc3RhdGljIGlubGluZSB2b2lkIHNldF9wYWdlX3NlY3Rpb25fZnJvbV9wZm4oc3RydWN0IHBhZ2UgKnBhZ2UsXFxuK1xcdFxcdHVuc2lnbmVkIGxvbmcgcGZuKVxcbit7XFxuK1xcdHNldF9wYWdlX3NlY3Rpb24ocGFnZSwgcGZuX3RvX3NlY3Rpb25fbnIocGZuKSk7XFxuK31cXG4rXFxuIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBtZW1kZXNjX3NlY3Rpb24obWVtZGVzY19mbGFnc190IG1kZilcXG4ge1xcbiBcXHRyZXR1cm4gKG1kZi5mIFxcdTAwM2VcXHUwMDNlIFNFQ1RJT05TX1BHU0hJRlQpIFxcdTAwMjYgU0VDVElPTlNfTUFTSztcXG4gfVxcbiAjZWxzZSAvKiAhU0VDVElPTl9JTl9QQUdFX0ZMQUdTICovXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcGFnZV9zZWN0aW9uX2Zyb21fcGZuKHN0cnVjdCBwYWdlICpwYWdlLFxcbitcXHRcXHR1bnNpZ25lZCBsb25nIHBmbilcXG4re1xcbit9XFxuK1xcbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbWVtZGVzY19zZWN0aW9uKG1lbWRlc2NfZmxhZ3NfdCBtZGYpXFxuIHtcXG4gXFx0cmV0dXJuIDA7XFxuQEAgLTI3NjgsOSArMjc3OSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcGFnZV9saW5rcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgZW51bSB6b25lX3R5cGUgem9uZSxcXG4ge1xcbiBcXHRzZXRfcGFnZV96b25lKHBhZ2UsIHpvbmUpO1xcbiBcXHRzZXRfcGFnZV9ub2RlKHBhZ2UsIG5vZGUpO1xcbi0jaWZkZWYgU0VDVElPTl9JTl9QQUdFX0ZMQUdTXFxuLVxcdHNldF9wYWdlX3NlY3Rpb24ocGFnZSwgcGZuX3RvX3NlY3Rpb25fbnIocGZuKSk7XFxuLSNlbmRpZlxcbitcXHRzZXRfcGFnZV9zZWN0aW9uX2Zyb21fcGZuKHBhZ2UsIHBmbik7XFxuIH1cXG4gXFxuIC8qKlxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N0cmluZy5oIGIvaW5jbHVkZS9saW51eC9zdHJpbmcuaFxcbmluZGV4IDU3MDJkYWNhNDMyNmIuLjZjYjVjZGQwMTE1OGIgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9zdHJpbmcuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvc3RyaW5nLmhcXG5AQCAtMjc4LDYgKzI3OCwxOSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWVtY3B5X2ZsdXNoY2FjaGUodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBjbnQpXFxuIH1cXG4gI2VuZGlmXFxuIFxcbisjaWZuZGVmIG1lbWNweV9ub250ZW1wb3JhbFxcbisvKlxcbisgKiBtZW1jcHlfbm9udGVtcG9yYWwoKSByZXF1ZXN0cyBhIG5vbi10ZW1wb3JhbCBjb3B5IHdoZW4gdGhlXFxuKyAqIGFyY2hpdGVjdHVyZSBoYXMgYSBzdWl0YWJsZSBiYWNrZW5kLiBBcmNoaXRlY3R1cmVzIHdpdGhvdXQgYVxcbisgKiBzcGVjaWFsaXplZCBiYWNrZW5kIGZhbGwgYmFjayB0byBtZW1jcHkoKS4gS2VlcCB0aGlzIGFzIGFcXG4rICogZnVuY3Rpb24tbGlrZSBtYWNybyBzbyB0aGUgY29tcGlsZXIgY2FuIHN0aWxsIHNlZSB0aGUgb3JpZ2luYWxcXG4rICogbWVtY3B5KCkgY2FsbCBzaXRlIGFuZCBwcmVzZXJ2ZSB0aGUgdXN1YWwgRk9SVElGWSBjb3ZlcmFnZSB3aGVuXFxuKyAqIG9iamVjdCBzaXplcyByZW1haW4gdmlzaWJsZSB0aGVyZSwgd2hpbGUga2VlcGluZyB0aGUgQVBJIHZvaWQuXFxuKyAqL1xcbisjZGVmaW5lIG1lbWNweV9ub250ZW1wb3JhbChkc3QsIHNyYywgbGVuKSBcXFxcXFxuK1xcdCgodm9pZCltZW1jcHkoZHN0LCBzcmMsIGxlbikpXFxuKyNlbmRpZlxcbitcXG4gdm9pZCAqbWVtY2hyX2ludihjb25zdCB2b2lkICpzLCBpbnQgYywgc2l6ZV90IG4pO1xcbiBjaGFyICpzdHJyZXBsYWNlKGNoYXIgKnN0ciwgY2hhciBvbGQsIGNoYXIgbmV3KTtcXG4gXFxuZGlmZiAtLWdpdCBhL21tL21tX2luaXQuYyBiL21tL21tX2luaXQuY1xcbmluZGV4IDBmNjQ5MDllOGQyMGUuLmJiMjAwNzgwNmEyODcgMTAwNjQ0XFxuLS0tIGEvbW0vbW1faW5pdC5jXFxuKysrIGIvbW0vbW1faW5pdC5jXFxuQEAgLTEwMDUsMTEgKzEwMDUsMzcgQEAgc3RhdGljIHZvaWQgX19pbml0IG1lbW1hcF9pbml0KHZvaWQpXFxuIH1cXG4gXFxuICNpZmRlZiBDT05GSUdfWk9ORV9ERVZJQ0VcXG4tc3RhdGljIHZvaWQgX19yZWYgX19pbml0X3pvbmVfZGV2aWNlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgcGZuLFxcbisvKlxcbisgKiBSZXR1cm4gdHJ1ZSB3aGVuIG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlKCkgbXVzdCBpbml0aWFsaXplIHRoZSBwYWdlXFxuKyAqIHJlZmNvdW50IHRvIDAuIE1FTU9SWV9ERVZJQ0VfR0VORVJJQyBwYWdlcyByZWdhaW4gYSByZWZjb3VudCBvZiAxIGluXFxuKyAqIHRoZSBmcmVlIHBhdGgsIHdoaWxlIHRoZSByZW1haW5pbmcgWk9ORV9ERVZJQ0UgdHlwZXMgc3RhcnQgZnJvbSAwIGhlcmVcXG4rICogYW5kIHJhaXNlIHRoZSBjb3VudCBhZ2FpbiB3aGVuIHRoZSBhbGxvY2F0b3Igb3IgZHJpdmVyIGhhbmRzIHRoZSBwYWdlXFxuKyAqIG91dC5cXG4rICovXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBwYWdlbWFwX3JlcXVpcmVzX3JlZmNvdW50X3Jlc2V0KGNvbnN0IHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXApXFxuK3tcXG4rXFx0LypcXG4rXFx0ICogTUVNT1JZX0RFVklDRV9HRU5FUklDIHBhZ2VzIHJlZ2FpbiBhIHJlZmNvdW50IG9mIDEgaW4gdGhlIGZyZWVcXG4rXFx0ICogcGF0aC4gVGhlIHJlbWFpbmluZyBaT05FX0RFVklDRSB0eXBlcyBzdGFydCBmcm9tIDAgaGVyZSBhbmQgcmFpc2VcXG4rXFx0ICogdGhlIGNvdW50IGFnYWluIHdoZW4gdGhlIGFsbG9jYXRvciBvciBkcml2ZXIgaGFuZHMgdGhlIHBhZ2Ugb3V0LlxcbitcXHQgKi9cXG4rXFx0c3dpdGNoIChwZ21hcC1cXHUwMDNldHlwZSkge1xcbitcXHRjYXNlIE1FTU9SWV9ERVZJQ0VfRlNfREFYOlxcbitcXHRjYXNlIE1FTU9SWV9ERVZJQ0VfUFJJVkFURTpcXG4rXFx0Y2FzZSBNRU1PUllfREVWSUNFX0NPSEVSRU5UOlxcbitcXHRjYXNlIE1FTU9SWV9ERVZJQ0VfUENJX1AyUERNQTpcXG4rXFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcdGNhc2UgTUVNT1JZX0RFVklDRV9HRU5FUklDOlxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiBmYWxzZTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgX19yZWYgX196b25lX2RldmljZV9wYWdlX2luaXQoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgcGZuLFxcbiBcXHRcXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGxvbmcgem9uZV9pZHgsIGludCBuaWQsXFxuIFxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcClcXG4ge1xcbi1cXG4gXFx0X19pbml0X3NpbmdsZV9wYWdlKHBhZ2UsIHBmbiwgem9uZV9pZHgsIG5pZCk7XFxuIFxcbiBcXHQvKlxcbkBAIC0xMDI4LDI3ICsxMDU0LDU0IEBAIHN0YXRpYyB2b2lkIF9fcmVmIF9faW5pdF96b25lX2RldmljZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIHBmbixcXG4gXFx0ICovXFxuIFxcdHBhZ2VfZm9saW8ocGFnZSktXFx1MDAzZXBnbWFwID0gcGdtYXA7XFxuIFxcdHBhZ2UtXFx1MDAzZXpvbmVfZGV2aWNlX2RhdGEgPSBOVUxMO1xcbit9XFxuIFxcbi1cXHQvKlxcbi1cXHQgKiBaT05FX0RFVklDRSBwYWdlcyBvdGhlciB0aGFuIE1FTU9SWV9UWVBFX0dFTkVSSUMgYXJlIHJlbGVhc2VkXFxuLVxcdCAqIGRpcmVjdGx5IHRvIHRoZSBkcml2ZXIgcGFnZSBhbGxvY2F0b3Igd2hpY2ggd2lsbCBzZXQgdGhlIHBhZ2UgY291bnRcXG4tXFx0ICogdG8gMSB3aGVuIGFsbG9jYXRpbmcgdGhlIHBhZ2UuXFxuLVxcdCAqXFxuLVxcdCAqIE1FTU9SWV9UWVBFX0dFTkVSSUMgYW5kIE1FTU9SWV9UWVBFX0ZTX0RBWCBwYWdlcyBhdXRvbWF0aWNhbGx5IGhhdmVcXG4tXFx0ICogdGhlaXIgcmVmY291bnQgcmVzZXQgdG8gb25lIHdoZW5ldmVyIHRoZXkgYXJlIGZyZWVkIChpZS4gYWZ0ZXJcXG4tXFx0ICogdGhlaXIgcmVmY291bnQgZHJvcHMgdG8gMCkuXFxuLVxcdCAqL1xcbi1cXHRzd2l0Y2ggKHBnbWFwLVxcdTAwM2V0eXBlKSB7XFxuLVxcdGNhc2UgTUVNT1JZX0RFVklDRV9GU19EQVg6XFxuLVxcdGNhc2UgTUVNT1JZX0RFVklDRV9QUklWQVRFOlxcbi1cXHRjYXNlIE1FTU9SWV9ERVZJQ0VfQ09IRVJFTlQ6XFxuLVxcdGNhc2UgTUVNT1JZX0RFVklDRV9QQ0lfUDJQRE1BOlxcbitzdGF0aWMgdm9pZCBfX3JlZiB6b25lX2RldmljZV9wYWdlX2luaXRfc2xvdyhzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4rXFx0XFx0dW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgem9uZV9pZHgsIGludCBuaWQsXFxuK1xcdFxcdHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXApXFxuK3tcXG4rXFx0X196b25lX2RldmljZV9wYWdlX2luaXQocGFnZSwgcGZuLCB6b25lX2lkeCwgbmlkLCBwZ21hcCk7XFxuK1xcdGlmIChwYWdlbWFwX3JlcXVpcmVzX3JlZmNvdW50X3Jlc2V0KHBnbWFwKSlcXG4gXFx0XFx0c2V0X3BhZ2VfY291bnQocGFnZSwgMCk7XFxuLVxcdFxcdGJyZWFrO1xcbit9XFxuIFxcbi1cXHRjYXNlIE1FTU9SWV9ERVZJQ0VfR0VORVJJQzpcXG4tXFx0XFx0YnJlYWs7XFxuLVxcdH1cXG4rc3RhdGljIGlubGluZSB2b2lkIHpvbmVfZGV2aWNlX3RhaWxfcGFnZV9pbml0KHN0cnVjdCBwYWdlICpwYWdlLFxcbitcXHRcXHR1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyB6b25lX2lkeCwgaW50IG5pZCxcXG4rXFx0XFx0c3RydWN0IGRldl9wYWdlbWFwICpwZ21hcCwgY29uc3Qgc3RydWN0IHBhZ2UgKmhlYWQsXFxuK1xcdFxcdHVuc2lnbmVkIGludCBvcmRlcilcXG4re1xcbitcXHR6b25lX2RldmljZV9wYWdlX2luaXRfc2xvdyhwYWdlLCBwZm4sIHpvbmVfaWR4LCBuaWQsIHBnbWFwKTtcXG4rXFx0cHJlcF9jb21wb3VuZF90YWlsKHBhZ2UsIGhlYWQsIG9yZGVyKTtcXG4rXFx0c2V0X3BhZ2VfY291bnQocGFnZSwgMCk7XFxuK31cXG4rXFxuKy8qXFxuKyAqICd0ZW1wbGF0ZScgaXMgYSByZXVzYWJsZSBwYWdlIHByb3RvdHlwZSByYXRoZXIgdGhhbiBhIHN0cmljdGx5IGltbXV0YWJsZVxcbisgKiBvYmplY3QuIE1vc3QgWk9ORV9ERVZJQ0UgZmllbGRzIHN0YXkgY29uc3RhbnQgYWNyb3NzIHRoZSBwYWdlcyBjb3ZlcmVkIGJ5XFxuKyAqIHRoZSBjdXJyZW50IHRlbXBsYXRlLCBidXQgc2VjdGlvbiBiaXRzIGFuZCBwYWdlLVxcdTAwM2V2aXJ0dWFsIG1heSBzdGlsbCBkZXBlbmRcXG4rICogb24gdGhlIFBGTi4gUmVmcmVzaCB0aG9zZSBQRk4tZGVwZW5kZW50IGZpZWxkcyBpbiB0aGUgdGVtcGxhdGUgYmVmb3JlXFxuKyAqIGNvcHlpbmcgaXQgaW50byBAcGFnZS5cXG4rICovXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCB6b25lX2RldmljZV9wYWdlX3VwZGF0ZV90ZW1wbGF0ZShzdHJ1Y3QgcGFnZSAqdGVtcGxhdGUsXFxuK1xcdFxcdHVuc2lnbmVkIGxvbmcgcGZuKVxcbit7XFxuK1xcdHNldF9wYWdlX3NlY3Rpb25fZnJvbV9wZm4odGVtcGxhdGUsIHBmbik7XFxuKyNpZmRlZiBXQU5UX1BBR0VfVklSVFVBTFxcbitcXHRpZiAoIWlzX2hpZ2htZW1faWR4KFpPTkVfREVWSUNFKSlcXG4rXFx0XFx0c2V0X3BhZ2VfYWRkcmVzcyh0ZW1wbGF0ZSwgX192YShwZm4gXFx1MDAzY1xcdTAwM2MgUEFHRV9TSElGVCkpO1xcbisjZW5kaWZcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgem9uZV9kZXZpY2VfcGFnZV9pbml0X2Zyb21fdGVtcGxhdGUoc3RydWN0IHBhZ2UgKnBhZ2UsXFxuK1xcdFxcdHVuc2lnbmVkIGxvbmcgcGZuLCBzdHJ1Y3QgcGFnZSAqdGVtcGxhdGUpXFxuK3tcXG4rXFx0LypcXG4rXFx0ICogJ3RlbXBsYXRlJyBjYXJyaWVzIHRoZSBpbnZhcmlhbnQgcG9ydGlvbiBvZiBhIFpPTkVfREVWSUNFIHN0cnVjdFxcbitcXHQgKiBwYWdlLiBVcGRhdGUgdGhlIFBGTi1kZXBlbmRlbnQgZmllbGRzIGluIHBsYWNlIGJlZm9yZSBjb3B5aW5nIGl0XFxuK1xcdCAqIHRvIHRoZSBkZXN0aW5hdGlvbiBwYWdlLlxcbitcXHQgKi9cXG4rXFx0em9uZV9kZXZpY2VfcGFnZV91cGRhdGVfdGVtcGxhdGUodGVtcGxhdGUsIHBmbik7XFxuK1xcdG1lbWNweV9ub250ZW1wb3JhbChwYWdlLCB0ZW1wbGF0ZSwgc2l6ZW9mKCpwYWdlKSk7XFxuIH1cXG4gXFxuIC8qXFxuQEAgLTEwODMsNiArMTEzNiw3IEBAIHN0YXRpYyB2b2lkIF9fcmVmIG1lbW1hcF9pbml0X2NvbXBvdW5kKHN0cnVjdCBwYWdlICpoZWFkLFxcbiB7XFxuIFxcdHVuc2lnbmVkIGxvbmcgcGZuLCBlbmRfcGZuID0gaGVhZF9wZm4gKyBucl9wYWdlcztcXG4gXFx0dW5zaWduZWQgaW50IG9yZGVyID0gcGdtYXAtXFx1MDAzZXZtZW1tYXBfc2hpZnQ7XFxuK1xcdHN0cnVjdCBwYWdlIHRlbXBsYXRlO1xcbiBcXG4gXFx0LypcXG4gXFx0ICogV2UgaGF2ZSB0byBpbml0aWFsaXplIHRoZSBwYWdlcywgaW5jbHVkaW5nIHNldHRpbmcgdXAgcGFnZSBsaW5rcy5cXG5AQCAtMTA5MSwxMiArMTE0NSwyNiBAQCBzdGF0aWMgdm9pZCBfX3JlZiBtZW1tYXBfaW5pdF9jb21wb3VuZChzdHJ1Y3QgcGFnZSAqaGVhZCxcXG4gXFx0ICogdGhlIHBhZ2VzIGluIHRoZSBzYW1lIGdvLlxcbiBcXHQgKi9cXG4gXFx0X19TZXRQYWdlSGVhZChoZWFkKTtcXG4rXFxuIFxcdGZvciAocGZuID0gaGVhZF9wZm4gKyAxOyBwZm4gXFx1MDAzYyBlbmRfcGZuOyBwZm4rKykge1xcbiBcXHRcXHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IHBmbl90b19wYWdlKHBmbik7XFxuIFxcbi1cXHRcXHRfX2luaXRfem9uZV9kZXZpY2VfcGFnZShwYWdlLCBwZm4sIHpvbmVfaWR4LCBuaWQsIHBnbWFwKTtcXG4tXFx0XFx0cHJlcF9jb21wb3VuZF90YWlsKHBhZ2UsIGhlYWQsIG9yZGVyKTtcXG4tXFx0XFx0c2V0X3BhZ2VfY291bnQocGFnZSwgMCk7XFxuK1xcdFxcdGlmIChwZm4gPT0gaGVhZF9wZm4gKyAxKSB7XFxuK1xcdFxcdFxcdC8qXFxuK1xcdFxcdFxcdCAqIEFsbCB0YWlscyBvZiB0aGUgc2FtZSBjb21wb3VuZCBwYWdlIHNoYXJlIHRoZVxcbitcXHRcXHRcXHQgKiBzdGF0ZSBlc3RhYmxpc2hlZCBieSBwcmVwX2NvbXBvdW5kX3RhaWwoKS4gUmV1c2VcXG4rXFx0XFx0XFx0ICogb25lIHRhaWwgdGVtcGxhdGUgZm9yIHRoZSB3aG9sZSByYW5nZSBhbmRcXG4rXFx0XFx0XFx0ICogcmVmcmVzaCBvbmx5IHRoZSBQRk4tZGVwZW5kZW50IGZpZWxkcyBpbiB0aGF0XFxuK1xcdFxcdFxcdCAqIHRlbXBsYXRlIGJlZm9yZSBlYWNoIGNvcHkuXFxuK1xcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHR6b25lX2RldmljZV90YWlsX3BhZ2VfaW5pdChwYWdlLCBwZm4sIHpvbmVfaWR4LCBuaWQsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgIHBnbWFwLCBoZWFkLCBvcmRlcik7XFxuK1xcdFxcdFxcdC8qIGluaXQgdGVtcGxhdGUgcGFnZSAqL1xcbitcXHRcXHRcXHRtZW1jcHkoXFx1MDAyNnRlbXBsYXRlLCBwYWdlLCBzaXplb2YoKnBhZ2UpKTtcXG4rXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0em9uZV9kZXZpY2VfcGFnZV9pbml0X2Zyb21fdGVtcGxhdGUocGFnZSwgcGZuLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNnRlbXBsYXRlKTtcXG4rXFx0XFx0fVxcbiBcXHR9XFxuIFxcdHByZXBfY29tcG91bmRfaGVhZChoZWFkLCBvcmRlcik7XFxuIH1cXG5AQCAtMTExMyw2ICsxMTgxLDcgQEAgdm9pZCBfX3JlZiBtZW1tYXBfaW5pdF96b25lX2RldmljZShzdHJ1Y3Qgem9uZSAqem9uZSxcXG4gXFx0dW5zaWduZWQgbG9uZyB6b25lX2lkeCA9IHpvbmVfaWR4KHpvbmUpO1xcbiBcXHR1bnNpZ25lZCBsb25nIHN0YXJ0ID0gamlmZmllcztcXG4gXFx0aW50IG5pZCA9IHBnZGF0LVxcdTAwM2Vub2RlX2lkO1xcbitcXHRzdHJ1Y3QgcGFnZSB0ZW1wbGF0ZTtcXG4gXFxuIFxcdGlmIChXQVJOX09OX09OQ0UoIXBnbWFwIHx8IHpvbmVfaWR4ICE9IFpPTkVfREVWSUNFKSlcXG4gXFx0XFx0cmV0dXJuO1xcbkBAIC0xMTMwLDcgKzExOTksMjIgQEAgdm9pZCBfX3JlZiBtZW1tYXBfaW5pdF96b25lX2RldmljZShzdHJ1Y3Qgem9uZSAqem9uZSxcXG4gXFx0Zm9yIChwZm4gPSBzdGFydF9wZm47IHBmbiBcXHUwMDNjIGVuZF9wZm47IHBmbiArPSBwZm5zX3Blcl9jb21wb3VuZCkge1xcbiBcXHRcXHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IHBmbl90b19wYWdlKHBmbik7XFxuIFxcbi1cXHRcXHRfX2luaXRfem9uZV9kZXZpY2VfcGFnZShwYWdlLCBwZm4sIHpvbmVfaWR4LCBuaWQsIHBnbWFwKTtcXG4rXFx0XFx0aWYgKHBmbiA9PSBzdGFydF9wZm4pIHtcXG4rXFx0XFx0XFx0LypcXG4rXFx0XFx0XFx0ICogU2VlZCB0aGUgcmV1c2FibGUgaGVhZC1wYWdlIHRlbXBsYXRlIGZyb20gdGhlXFxuK1xcdFxcdFxcdCAqIGZpcnN0IHJlYWwgc3RydWN0IHBhZ2UuIFRoaXMgaW5pdGlhbGl6ZXMgdGhlXFxuK1xcdFxcdFxcdCAqIGZpcnN0IHBhZ2UgdGhyb3VnaCB0aGUgZXhpc3Rpbmcgc2xvdyBwYXRoIGFuZFxcbitcXHRcXHRcXHQgKiB0aGVuIHJldXNlcyB0aGF0IGZpbmFsIHN0YXRlIGFzIHRoZSB0ZW1wbGF0ZVxcbitcXHRcXHRcXHQgKiBmb3Igc3Vic2VxdWVudCBwYWdlcy5cXG4rXFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9zbG93KHBhZ2UsIHBmbiwgem9uZV9pZHgsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgIG5pZCwgcGdtYXApO1xcbitcXHRcXHRcXHQvKiBpbml0IHRlbXBsYXRlIHBhZ2UgKi9cXG4rXFx0XFx0XFx0bWVtY3B5KFxcdTAwMjZ0ZW1wbGF0ZSwgcGFnZSwgc2l6ZW9mKCpwYWdlKSk7XFxuK1xcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9mcm9tX3RlbXBsYXRlKHBhZ2UsIHBmbixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZ0ZW1wbGF0ZSk7XFxuK1xcdFxcdH1cXG4gXFxuIFxcdFxcdGlmIChJU19BTElHTkVEKHBmbiwgUEFHRVNfUEVSX1NFQ1RJT04pKVxcbiBcXHRcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMDc6NDA6MTIuNzk0MTk4Nzc1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTQ0MDE1OTI3ODcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlpPTkVfREVWSUNFXCIsXG4gICAgXCJERVZJQ0VfUFJJVkFURVwiLFxuICAgIFwiVEVTVF9ITU1cIixcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCIsXG4gICAgXCJNRU1PUllfSE9UUExVR1wiLFxuICAgIFwiTUVNT1JZX0hPVFJFTU9WRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1lbW1hcF9pbml0X3pvbmVfZGV2aWNlXCIsXG4gICAgXCJtZW1yZW1hcF9wYWdlc1wiLFxuICAgIFwiZGV2bV9tZW1yZW1hcF9wYWdlc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9wdGltaXplcyBzdHJ1Y3QgcGFnZSBpbml0aWFsaXphdGlvbiBmb3IgWk9ORV9ERVZJQ0UgbWVtb3J5IGJ5IHVzaW5nIGEgdGVtcGxhdGUgcGFnZSBhbmQgbm9uLXRlbXBvcmFsIG1lbW9yeSBjb3BpZXMgKG1lbWNweV9ub250ZW1wb3JhbCkuIFRoaXMgaXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyByZWFjaGFibGUgdmlhIGRldmljZSBtZW1vcnkgaG90cGx1Zywgc3VjaCBhcyB3aGVuIGxvYWRpbmcgdGhlIFRFU1RfSE1NIG1vZHVsZSBvciB1c2luZyBEQVgvUE1FTSBkZXZpY2VzLiBGdXp6aW5nIHRoaXMgaXMgaW1wb3J0YW50IHRvIGNhdGNoIHBvdGVudGlhbCBhbGlnbm1lbnQgb3IgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzIGR1cmluZyBwYWdlIGluaXRpYWxpemF0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA2MTdhYzE1YzkyZmE5MjM0MzcxMWFlNjFkNjU5M2UwYTFhYTE0ZTQ0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMyAwNzo0MDoxMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmhcbmluZGV4IDQ2MzU2MTY4NjNmNTMuLmJjNmE5ZjM0YjM0NmEgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmhcbkBAIC04Miw3ICs4MiwzNSBAQCBpbnQgc3RyY21wKGNvbnN0IGNoYXIgKmNzLCBjb25zdCBjaGFyICpjdCk7XG4gI2lmZGVmIENPTkZJR19BUkNIX0hBU19VQUNDRVNTX0ZMVVNIQ0FDSEVcbiAjZGVmaW5lIF9fSEFWRV9BUkNIX01FTUNQWV9GTFVTSENBQ0hFIDFcbiB2b2lkIF9fbWVtY3B5X2ZsdXNoY2FjaGUodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBjbnQpO1xuLXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtZW1jcHlfZmx1c2hjYWNoZSh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IGNudClcbitcbitzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbW92bnRpXzgodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMpXG4re1xuK1x0YXNtIHZvbGF0aWxlKFwibW92bnRpcSAlMSwgJTBcIlxuK1x0XHQgICAgIDogXCI9bVwiKCoodTY0ICopZHN0KVxuK1x0XHQgICAgIDogXCJyXCIoKihjb25zdCB1NjQgKilzcmMpXG4rXHRcdCAgICAgOiBcIm1lbW9yeVwiKTtcbit9XG4rXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG1vdm50aV8xNih2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYylcbit7XG4rXHRtb3ZudGlfOChkc3QsIHNyYyk7XG4rXHRtb3ZudGlfOChkc3QgKyA4LCBzcmMgKyA4KTtcbit9XG4rXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG1vdm50aV8zMih2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYylcbit7XG4rXHRtb3ZudGlfMTYoZHN0LCBzcmMpO1xuK1x0bW92bnRpXzE2KGRzdCArIDE2LCBzcmMgKyAxNik7XG4rfVxuK1xuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtb3ZudGlfNjQodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMpXG4re1xuK1x0bW92bnRpXzMyKGRzdCwgc3JjKTtcbitcdG1vdm50aV8zMihkc3QgKyAzMiwgc3JjICsgMzIpO1xuK31cbitcbitzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbWVtY3B5X2ZsdXNoY2FjaGUodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsXG4rXHRcdFx0XHRcdCAgICAgIHNpemVfdCBjbnQpXG4ge1xuIFx0aWYgKF9fYnVpbHRpbl9jb25zdGFudF9wKGNudCkpIHtcbiBcdFx0c3dpdGNoIChjbnQpIHtcbkBAIC05NiwxMCArMTI0LDQ4IEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtZW1jcHlfZmx1c2hjYWNoZSh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90XG4gXHRcdFx0XHRhc20gKFwibW92bnRpcSAlMSwgJTBcIiA6IFwiPW1cIigqKHU2NCAqKWRzdCkgOiBcInJcIigqKHU2NCAqKXNyYykpO1xuIFx0XHRcdFx0YXNtIChcIm1vdm50aXEgJTEsICUwXCIgOiBcIj1tXCIoKih1NjQgKikoZHN0ICsgOCkpIDogXCJyXCIoKih1NjQgKikoc3JjICsgOCkpKTtcbiBcdFx0XHRcdHJldHVybjtcbitcdFx0XHQvKlxuK1x0XHRcdCAqIFRoZSByZWxldmFudCBmaXhlZC1zaXplIGNvcGllcyBoZXJlIGFyZSB0aGVcbitcdFx0XHQgKiB4ODZfNjQgc3RydWN0IHBhZ2Ugc2l6ZXM6IDY0LCA4MCwgYW5kIDk2IGJ5dGVzLlxuK1x0XHRcdCAqIEtlZXAgMzItYnl0ZSBhbmQgNDgtYnl0ZSBjb3BpZXMgaW5saW5lIGFzIHdlbGxcbitcdFx0XHQgKiBpbnN0ZWFkIG9mIHNlbmRpbmcgdGhvc2UgbmVhcmJ5IGZpeGVkLXNpemVcbitcdFx0XHQgKiBjYXNlcyBiYWNrIHRvIF9fbWVtY3B5X2ZsdXNoY2FjaGUoKS5cbitcdFx0XHQgKi9cbitcdFx0XHRjYXNlIDMyOlxuK1x0XHRcdFx0bW92bnRpXzMyKGRzdCwgc3JjKTtcbitcdFx0XHRcdHJldHVybjtcbitcdFx0XHRjYXNlIDQ4OlxuK1x0XHRcdFx0bW92bnRpXzMyKGRzdCwgc3JjKTtcbitcdFx0XHRcdG1vdm50aV8xNihkc3QgKyAzMiwgc3JjICsgMzIpO1xuK1x0XHRcdFx0cmV0dXJuO1xuK1x0XHRcdGNhc2UgNjQ6XG4rXHRcdFx0XHRtb3ZudGlfNjQoZHN0LCBzcmMpO1xuK1x0XHRcdFx0cmV0dXJuO1xuK1x0XHRcdGNhc2UgODA6XG4rXHRcdFx0XHRtb3ZudGlfNjQoZHN0LCBzcmMpO1xuK1x0XHRcdFx0bW92bnRpXzE2KGRzdCArIDY0LCBzcmMgKyA2NCk7XG4rXHRcdFx0XHRyZXR1cm47XG4rXHRcdFx0Y2FzZSA5NjpcbitcdFx0XHRcdG1vdm50aV82NChkc3QsIHNyYyk7XG4rXHRcdFx0XHRtb3ZudGlfMzIoZHN0ICsgNjQsIHNyYyArIDY0KTtcbitcdFx0XHRcdHJldHVybjtcbiBcdFx0fVxuIFx0fVxuK1xuIFx0X19tZW1jcHlfZmx1c2hjYWNoZShkc3QsIHNyYywgY250KTtcbiB9XG4rXG4rI2RlZmluZSBtZW1jcHlfbm9udGVtcG9yYWwgbWVtY3B5X25vbnRlbXBvcmFsXG4rLypcbisgKiBSZXVzZSB0aGUgZXhpc3RpbmcgeDg2IGZsdXNoY2FjaGUgYmFja2VuZCBhcyB0aGUgbm9uLXRlbXBvcmFsIGNvcHlcbisgKiBwcmltaXRpdmUuXG4rICovXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG1lbWNweV9ub250ZW1wb3JhbCh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYyxcbitcdFx0c2l6ZV90IGNudClcbit7XG4rXHRtZW1jcHlfZmx1c2hjYWNoZShkc3QsIHNyYywgY250KTtcbit9XG4rXG4gI2VuZGlmXG4gXG4gI2VuZGlmIC8qIF9fS0VSTkVMX18gKi9cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tLmggYi9pbmNsdWRlL2xpbnV4L21tLmhcbmluZGV4IDQ4NWRmOWMyZGJkZGIuLjQzMzQzYmZjZTQ5MzYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbW0uaFxuQEAgLTI1NDEsMTEgKzI1NDEsMjIgQEAgc3RhdGljIGlubGluZSB2b2lkIHNldF9wYWdlX3NlY3Rpb24oc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgc2VjdGlvbilcbiBcdHBhZ2UtXHUwMDNlZmxhZ3MuZiB8PSAoc2VjdGlvbiBcdTAwMjYgU0VDVElPTlNfTUFTSykgXHUwMDNjXHUwMDNjIFNFQ1RJT05TX1BHU0hJRlQ7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcGFnZV9zZWN0aW9uX2Zyb21fcGZuKHN0cnVjdCBwYWdlICpwYWdlLFxuK1x0XHR1bnNpZ25lZCBsb25nIHBmbilcbit7XG4rXHRzZXRfcGFnZV9zZWN0aW9uKHBhZ2UsIHBmbl90b19zZWN0aW9uX25yKHBmbikpO1xuK31cbitcbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbWVtZGVzY19zZWN0aW9uKG1lbWRlc2NfZmxhZ3NfdCBtZGYpXG4ge1xuIFx0cmV0dXJuIChtZGYuZiBcdTAwM2VcdTAwM2UgU0VDVElPTlNfUEdTSElGVCkgXHUwMDI2IFNFQ1RJT05TX01BU0s7XG4gfVxuICNlbHNlIC8qICFTRUNUSU9OX0lOX1BBR0VfRkxBR1MgKi9cbitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3BhZ2Vfc2VjdGlvbl9mcm9tX3BmbihzdHJ1Y3QgcGFnZSAqcGFnZSxcbitcdFx0dW5zaWduZWQgbG9uZyBwZm4pXG4re1xuK31cbitcbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbWVtZGVzY19zZWN0aW9uKG1lbWRlc2NfZmxhZ3NfdCBtZGYpXG4ge1xuIFx0cmV0dXJuIDA7XG5AQCAtMjc2OCw5ICsyNzc5LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHNldF9wYWdlX2xpbmtzKHN0cnVjdCBwYWdlICpwYWdlLCBlbnVtIHpvbmVfdHlwZSB6b25lLFxuIHtcbiBcdHNldF9wYWdlX3pvbmUocGFnZSwgem9uZSk7XG4gXHRzZXRfcGFnZV9ub2RlKHBhZ2UsIG5vZGUpO1xuLSNpZmRlZiBTRUNUSU9OX0lOX1BBR0VfRkxBR1Ncbi1cdHNldF9wYWdlX3NlY3Rpb24ocGFnZSwgcGZuX3RvX3NlY3Rpb25fbnIocGZuKSk7XG4tI2VuZGlmXG4rXHRzZXRfcGFnZV9zZWN0aW9uX2Zyb21fcGZuKHBhZ2UsIHBmbik7XG4gfVxuIFxuIC8qKlxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3RyaW5nLmggYi9pbmNsdWRlL2xpbnV4L3N0cmluZy5oXG5pbmRleCA1NzAyZGFjYTQzMjZiLi42Y2I1Y2RkMDExNThiIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9zdHJpbmcuaFxuKysrIGIvaW5jbHVkZS9saW51eC9zdHJpbmcuaFxuQEAgLTI3OCw2ICsyNzgsMTkgQEAgc3RhdGljIGlubGluZSB2b2lkIG1lbWNweV9mbHVzaGNhY2hlKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgY250KVxuIH1cbiAjZW5kaWZcbiBcbisjaWZuZGVmIG1lbWNweV9ub250ZW1wb3JhbFxuKy8qXG4rICogbWVtY3B5X25vbnRlbXBvcmFsKCkgcmVxdWVzdHMgYSBub24tdGVtcG9yYWwgY29weSB3aGVuIHRoZVxuKyAqIGFyY2hpdGVjdHVyZSBoYXMgYSBzdWl0YWJsZSBiYWNrZW5kLiBBcmNoaXRlY3R1cmVzIHdpdGhvdXQgYVxuKyAqIHNwZWNpYWxpemVkIGJhY2tlbmQgZmFsbCBiYWNrIHRvIG1lbWNweSgpLiBLZWVwIHRoaXMgYXMgYVxuKyAqIGZ1bmN0aW9uLWxpa2UgbWFjcm8gc28gdGhlIGNvbXBpbGVyIGNhbiBzdGlsbCBzZWUgdGhlIG9yaWdpbmFsXG4rICogbWVtY3B5KCkgY2FsbCBzaXRlIGFuZCBwcmVzZXJ2ZSB0aGUgdXN1YWwgRk9SVElGWSBjb3ZlcmFnZSB3aGVuXG4rICogb2JqZWN0IHNpemVzIHJlbWFpbiB2aXNpYmxlIHRoZXJlLCB3aGlsZSBrZWVwaW5nIHRoZSBBUEkgdm9pZC5cbisgKi9cbisjZGVmaW5lIG1lbWNweV9ub250ZW1wb3JhbChkc3QsIHNyYywgbGVuKSBcXFxuK1x0KCh2b2lkKW1lbWNweShkc3QsIHNyYywgbGVuKSlcbisjZW5kaWZcbitcbiB2b2lkICptZW1jaHJfaW52KGNvbnN0IHZvaWQgKnMsIGludCBjLCBzaXplX3Qgbik7XG4gY2hhciAqc3RycmVwbGFjZShjaGFyICpzdHIsIGNoYXIgb2xkLCBjaGFyIG5ldyk7XG4gXG5kaWZmIC0tZ2l0IGEvbW0vbW1faW5pdC5jIGIvbW0vbW1faW5pdC5jXG5pbmRleCAwZjY0OTA5ZThkMjBlLi5iYjIwMDc4MDZhMjg3IDEwMDY0NFxuLS0tIGEvbW0vbW1faW5pdC5jXG4rKysgYi9tbS9tbV9pbml0LmNcbkBAIC0xMDA1LDExICsxMDA1LDM3IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBtZW1tYXBfaW5pdCh2b2lkKVxuIH1cbiBcbiAjaWZkZWYgQ09ORklHX1pPTkVfREVWSUNFXG4tc3RhdGljIHZvaWQgX19yZWYgX19pbml0X3pvbmVfZGV2aWNlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgcGZuLFxuKy8qXG4rICogUmV0dXJuIHRydWUgd2hlbiBtZW1tYXBfaW5pdF96b25lX2RldmljZSgpIG11c3QgaW5pdGlhbGl6ZSB0aGUgcGFnZVxuKyAqIHJlZmNvdW50IHRvIDAuIE1FTU9SWV9ERVZJQ0VfR0VORVJJQyBwYWdlcyByZWdhaW4gYSByZWZjb3VudCBvZiAxIGluXG4rICogdGhlIGZyZWUgcGF0aCwgd2hpbGUgdGhlIHJlbWFpbmluZyBaT05FX0RFVklDRSB0eXBlcyBzdGFydCBmcm9tIDAgaGVyZVxuKyAqIGFuZCByYWlzZSB0aGUgY291bnQgYWdhaW4gd2hlbiB0aGUgYWxsb2NhdG9yIG9yIGRyaXZlciBoYW5kcyB0aGUgcGFnZVxuKyAqIG91dC5cbisgKi9cbitzdGF0aWMgaW5saW5lIGJvb2wgcGFnZW1hcF9yZXF1aXJlc19yZWZjb3VudF9yZXNldChjb25zdCBzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwKVxuK3tcbitcdC8qXG4rXHQgKiBNRU1PUllfREVWSUNFX0dFTkVSSUMgcGFnZXMgcmVnYWluIGEgcmVmY291bnQgb2YgMSBpbiB0aGUgZnJlZVxuK1x0ICogcGF0aC4gVGhlIHJlbWFpbmluZyBaT05FX0RFVklDRSB0eXBlcyBzdGFydCBmcm9tIDAgaGVyZSBhbmQgcmFpc2VcbitcdCAqIHRoZSBjb3VudCBhZ2FpbiB3aGVuIHRoZSBhbGxvY2F0b3Igb3IgZHJpdmVyIGhhbmRzIHRoZSBwYWdlIG91dC5cbitcdCAqL1xuK1x0c3dpdGNoIChwZ21hcC1cdTAwM2V0eXBlKSB7XG4rXHRjYXNlIE1FTU9SWV9ERVZJQ0VfRlNfREFYOlxuK1x0Y2FzZSBNRU1PUllfREVWSUNFX1BSSVZBVEU6XG4rXHRjYXNlIE1FTU9SWV9ERVZJQ0VfQ09IRVJFTlQ6XG4rXHRjYXNlIE1FTU9SWV9ERVZJQ0VfUENJX1AyUERNQTpcbitcdFx0cmV0dXJuIHRydWU7XG4rXHRjYXNlIE1FTU9SWV9ERVZJQ0VfR0VORVJJQzpcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1x0fVxuK1xuK1x0cmV0dXJuIGZhbHNlO1xuK31cbitcbitzdGF0aWMgdm9pZCBfX3JlZiBfX3pvbmVfZGV2aWNlX3BhZ2VfaW5pdChzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBwZm4sXG4gXHRcdFx0XHRcdCAgdW5zaWduZWQgbG9uZyB6b25lX2lkeCwgaW50IG5pZCxcbiBcdFx0XHRcdFx0ICBzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwKVxuIHtcbi1cbiBcdF9faW5pdF9zaW5nbGVfcGFnZShwYWdlLCBwZm4sIHpvbmVfaWR4LCBuaWQpO1xuIFxuIFx0LypcbkBAIC0xMDI4LDI3ICsxMDU0LDU0IEBAIHN0YXRpYyB2b2lkIF9fcmVmIF9faW5pdF96b25lX2RldmljZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIHBmbixcbiBcdCAqL1xuIFx0cGFnZV9mb2xpbyhwYWdlKS1cdTAwM2VwZ21hcCA9IHBnbWFwO1xuIFx0cGFnZS1cdTAwM2V6b25lX2RldmljZV9kYXRhID0gTlVMTDtcbit9XG4gXG4tXHQvKlxuLVx0ICogWk9ORV9ERVZJQ0UgcGFnZXMgb3RoZXIgdGhhbiBNRU1PUllfVFlQRV9HRU5FUklDIGFyZSByZWxlYXNlZFxuLVx0ICogZGlyZWN0bHkgdG8gdGhlIGRyaXZlciBwYWdlIGFsbG9jYXRvciB3aGljaCB3aWxsIHNldCB0aGUgcGFnZSBjb3VudFxuLVx0ICogdG8gMSB3aGVuIGFsbG9jYXRpbmcgdGhlIHBhZ2UuXG4tXHQgKlxuLVx0ICogTUVNT1JZX1RZUEVfR0VORVJJQyBhbmQgTUVNT1JZX1RZUEVfRlNfREFYIHBhZ2VzIGF1dG9tYXRpY2FsbHkgaGF2ZVxuLVx0ICogdGhlaXIgcmVmY291bnQgcmVzZXQgdG8gb25lIHdoZW5ldmVyIHRoZXkgYXJlIGZyZWVkIChpZS4gYWZ0ZXJcbi1cdCAqIHRoZWlyIHJlZmNvdW50IGRyb3BzIHRvIDApLlxuLVx0ICovXG4tXHRzd2l0Y2ggKHBnbWFwLVx1MDAzZXR5cGUpIHtcbi1cdGNhc2UgTUVNT1JZX0RFVklDRV9GU19EQVg6XG4tXHRjYXNlIE1FTU9SWV9ERVZJQ0VfUFJJVkFURTpcbi1cdGNhc2UgTUVNT1JZX0RFVklDRV9DT0hFUkVOVDpcbi1cdGNhc2UgTUVNT1JZX0RFVklDRV9QQ0lfUDJQRE1BOlxuK3N0YXRpYyB2b2lkIF9fcmVmIHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9zbG93KHN0cnVjdCBwYWdlICpwYWdlLFxuK1x0XHR1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyB6b25lX2lkeCwgaW50IG5pZCxcbitcdFx0c3RydWN0IGRldl9wYWdlbWFwICpwZ21hcClcbit7XG4rXHRfX3pvbmVfZGV2aWNlX3BhZ2VfaW5pdChwYWdlLCBwZm4sIHpvbmVfaWR4LCBuaWQsIHBnbWFwKTtcbitcdGlmIChwYWdlbWFwX3JlcXVpcmVzX3JlZmNvdW50X3Jlc2V0KHBnbWFwKSlcbiBcdFx0c2V0X3BhZ2VfY291bnQocGFnZSwgMCk7XG4tXHRcdGJyZWFrO1xuK31cbiBcbi1cdGNhc2UgTUVNT1JZX0RFVklDRV9HRU5FUklDOlxuLVx0XHRicmVhaztcbi1cdH1cbitzdGF0aWMgaW5saW5lIHZvaWQgem9uZV9kZXZpY2VfdGFpbF9wYWdlX2luaXQoc3RydWN0IHBhZ2UgKnBhZ2UsXG4rXHRcdHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIHpvbmVfaWR4LCBpbnQgbmlkLFxuK1x0XHRzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwLCBjb25zdCBzdHJ1Y3QgcGFnZSAqaGVhZCxcbitcdFx0dW5zaWduZWQgaW50IG9yZGVyKVxuK3tcbitcdHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9zbG93KHBhZ2UsIHBmbiwgem9uZV9pZHgsIG5pZCwgcGdtYXApO1xuK1x0cHJlcF9jb21wb3VuZF90YWlsKHBhZ2UsIGhlYWQsIG9yZGVyKTtcbitcdHNldF9wYWdlX2NvdW50KHBhZ2UsIDApO1xuK31cbitcbisvKlxuKyAqICd0ZW1wbGF0ZScgaXMgYSByZXVzYWJsZSBwYWdlIHByb3RvdHlwZSByYXRoZXIgdGhhbiBhIHN0cmljdGx5IGltbXV0YWJsZVxuKyAqIG9iamVjdC4gTW9zdCBaT05FX0RFVklDRSBmaWVsZHMgc3RheSBjb25zdGFudCBhY3Jvc3MgdGhlIHBhZ2VzIGNvdmVyZWQgYnlcbisgKiB0aGUgY3VycmVudCB0ZW1wbGF0ZSwgYnV0IHNlY3Rpb24gYml0cyBhbmQgcGFnZS1cdTAwM2V2aXJ0dWFsIG1heSBzdGlsbCBkZXBlbmRcbisgKiBvbiB0aGUgUEZOLiBSZWZyZXNoIHRob3NlIFBGTi1kZXBlbmRlbnQgZmllbGRzIGluIHRoZSB0ZW1wbGF0ZSBiZWZvcmVcbisgKiBjb3B5aW5nIGl0IGludG8gQHBhZ2UuXG4rICovXG4rc3RhdGljIGlubGluZSB2b2lkIHpvbmVfZGV2aWNlX3BhZ2VfdXBkYXRlX3RlbXBsYXRlKHN0cnVjdCBwYWdlICp0ZW1wbGF0ZSxcbitcdFx0dW5zaWduZWQgbG9uZyBwZm4pXG4re1xuK1x0c2V0X3BhZ2Vfc2VjdGlvbl9mcm9tX3Bmbih0ZW1wbGF0ZSwgcGZuKTtcbisjaWZkZWYgV0FOVF9QQUdFX1ZJUlRVQUxcbitcdGlmICghaXNfaGlnaG1lbV9pZHgoWk9ORV9ERVZJQ0UpKVxuK1x0XHRzZXRfcGFnZV9hZGRyZXNzKHRlbXBsYXRlLCBfX3ZhKHBmbiBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCkpO1xuKyNlbmRpZlxuK31cbitcbitzdGF0aWMgdm9pZCB6b25lX2RldmljZV9wYWdlX2luaXRfZnJvbV90ZW1wbGF0ZShzdHJ1Y3QgcGFnZSAqcGFnZSxcbitcdFx0dW5zaWduZWQgbG9uZyBwZm4sIHN0cnVjdCBwYWdlICp0ZW1wbGF0ZSlcbit7XG4rXHQvKlxuK1x0ICogJ3RlbXBsYXRlJyBjYXJyaWVzIHRoZSBpbnZhcmlhbnQgcG9ydGlvbiBvZiBhIFpPTkVfREVWSUNFIHN0cnVjdFxuK1x0ICogcGFnZS4gVXBkYXRlIHRoZSBQRk4tZGVwZW5kZW50IGZpZWxkcyBpbiBwbGFjZSBiZWZvcmUgY29weWluZyBpdFxuK1x0ICogdG8gdGhlIGRlc3RpbmF0aW9uIHBhZ2UuXG4rXHQgKi9cbitcdHpvbmVfZGV2aWNlX3BhZ2VfdXBkYXRlX3RlbXBsYXRlKHRlbXBsYXRlLCBwZm4pO1xuK1x0bWVtY3B5X25vbnRlbXBvcmFsKHBhZ2UsIHRlbXBsYXRlLCBzaXplb2YoKnBhZ2UpKTtcbiB9XG4gXG4gLypcbkBAIC0xMDgzLDYgKzExMzYsNyBAQCBzdGF0aWMgdm9pZCBfX3JlZiBtZW1tYXBfaW5pdF9jb21wb3VuZChzdHJ1Y3QgcGFnZSAqaGVhZCxcbiB7XG4gXHR1bnNpZ25lZCBsb25nIHBmbiwgZW5kX3BmbiA9IGhlYWRfcGZuICsgbnJfcGFnZXM7XG4gXHR1bnNpZ25lZCBpbnQgb3JkZXIgPSBwZ21hcC1cdTAwM2V2bWVtbWFwX3NoaWZ0O1xuK1x0c3RydWN0IHBhZ2UgdGVtcGxhdGU7XG4gXG4gXHQvKlxuIFx0ICogV2UgaGF2ZSB0byBpbml0aWFsaXplIHRoZSBwYWdlcywgaW5jbHVkaW5nIHNldHRpbmcgdXAgcGFnZSBsaW5rcy5cbkBAIC0xMDkxLDEyICsxMTQ1LDI2IEBAIHN0YXRpYyB2b2lkIF9fcmVmIG1lbW1hcF9pbml0X2NvbXBvdW5kKHN0cnVjdCBwYWdlICpoZWFkLFxuIFx0ICogdGhlIHBhZ2VzIGluIHRoZSBzYW1lIGdvLlxuIFx0ICovXG4gXHRfX1NldFBhZ2VIZWFkKGhlYWQpO1xuK1xuIFx0Zm9yIChwZm4gPSBoZWFkX3BmbiArIDE7IHBmbiBcdTAwM2MgZW5kX3BmbjsgcGZuKyspIHtcbiBcdFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pO1xuIFxuLVx0XHRfX2luaXRfem9uZV9kZXZpY2VfcGFnZShwYWdlLCBwZm4sIHpvbmVfaWR4LCBuaWQsIHBnbWFwKTtcbi1cdFx0cHJlcF9jb21wb3VuZF90YWlsKHBhZ2UsIGhlYWQsIG9yZGVyKTtcbi1cdFx0c2V0X3BhZ2VfY291bnQocGFnZSwgMCk7XG4rXHRcdGlmIChwZm4gPT0gaGVhZF9wZm4gKyAxKSB7XG4rXHRcdFx0LypcbitcdFx0XHQgKiBBbGwgdGFpbHMgb2YgdGhlIHNhbWUgY29tcG91bmQgcGFnZSBzaGFyZSB0aGVcbitcdFx0XHQgKiBzdGF0ZSBlc3RhYmxpc2hlZCBieSBwcmVwX2NvbXBvdW5kX3RhaWwoKS4gUmV1c2VcbitcdFx0XHQgKiBvbmUgdGFpbCB0ZW1wbGF0ZSBmb3IgdGhlIHdob2xlIHJhbmdlIGFuZFxuK1x0XHRcdCAqIHJlZnJlc2ggb25seSB0aGUgUEZOLWRlcGVuZGVudCBmaWVsZHMgaW4gdGhhdFxuK1x0XHRcdCAqIHRlbXBsYXRlIGJlZm9yZSBlYWNoIGNvcHkuXG4rXHRcdFx0ICovXG4rXHRcdFx0em9uZV9kZXZpY2VfdGFpbF9wYWdlX2luaXQocGFnZSwgcGZuLCB6b25lX2lkeCwgbmlkLFxuK1x0XHRcdFx0XHRcdCAgIHBnbWFwLCBoZWFkLCBvcmRlcik7XG4rXHRcdFx0LyogaW5pdCB0ZW1wbGF0ZSBwYWdlICovXG4rXHRcdFx0bWVtY3B5KFx1MDAyNnRlbXBsYXRlLCBwYWdlLCBzaXplb2YoKnBhZ2UpKTtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHR6b25lX2RldmljZV9wYWdlX2luaXRfZnJvbV90ZW1wbGF0ZShwYWdlLCBwZm4sXG4rXHRcdFx0XHRcdFx0XHQgICAgXHUwMDI2dGVtcGxhdGUpO1xuK1x0XHR9XG4gXHR9XG4gXHRwcmVwX2NvbXBvdW5kX2hlYWQoaGVhZCwgb3JkZXIpO1xuIH1cbkBAIC0xMTEzLDYgKzExODEsNyBAQCB2b2lkIF9fcmVmIG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlKHN0cnVjdCB6b25lICp6b25lLFxuIFx0dW5zaWduZWQgbG9uZyB6b25lX2lkeCA9IHpvbmVfaWR4KHpvbmUpO1xuIFx0dW5zaWduZWQgbG9uZyBzdGFydCA9IGppZmZpZXM7XG4gXHRpbnQgbmlkID0gcGdkYXQtXHUwMDNlbm9kZV9pZDtcbitcdHN0cnVjdCBwYWdlIHRlbXBsYXRlO1xuIFxuIFx0aWYgKFdBUk5fT05fT05DRSghcGdtYXAgfHwgem9uZV9pZHggIT0gWk9ORV9ERVZJQ0UpKVxuIFx0XHRyZXR1cm47XG5AQCAtMTEzMCw3ICsxMTk5LDIyIEBAIHZvaWQgX19yZWYgbWVtbWFwX2luaXRfem9uZV9kZXZpY2Uoc3RydWN0IHpvbmUgKnpvbmUsXG4gXHRmb3IgKHBmbiA9IHN0YXJ0X3BmbjsgcGZuIFx1MDAzYyBlbmRfcGZuOyBwZm4gKz0gcGZuc19wZXJfY29tcG91bmQpIHtcbiBcdFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pO1xuIFxuLVx0XHRfX2luaXRfem9uZV9kZXZpY2VfcGFnZShwYWdlLCBwZm4sIHpvbmVfaWR4LCBuaWQsIHBnbWFwKTtcbitcdFx0aWYgKHBmbiA9PSBzdGFydF9wZm4pIHtcbitcdFx0XHQvKlxuK1x0XHRcdCAqIFNlZWQgdGhlIHJldXNhYmxlIGhlYWQtcGFnZSB0ZW1wbGF0ZSBmcm9tIHRoZVxuK1x0XHRcdCAqIGZpcnN0IHJlYWwgc3RydWN0IHBhZ2UuIFRoaXMgaW5pdGlhbGl6ZXMgdGhlXG4rXHRcdFx0ICogZmlyc3QgcGFnZSB0aHJvdWdoIHRoZSBleGlzdGluZyBzbG93IHBhdGggYW5kXG4rXHRcdFx0ICogdGhlbiByZXVzZXMgdGhhdCBmaW5hbCBzdGF0ZSBhcyB0aGUgdGVtcGxhdGVcbitcdFx0XHQgKiBmb3Igc3Vic2VxdWVudCBwYWdlcy5cbitcdFx0XHQgKi9cbitcdFx0XHR6b25lX2RldmljZV9wYWdlX2luaXRfc2xvdyhwYWdlLCBwZm4sIHpvbmVfaWR4LFxuK1x0XHRcdFx0XHRcdCAgIG5pZCwgcGdtYXApO1xuK1x0XHRcdC8qIGluaXQgdGVtcGxhdGUgcGFnZSAqL1xuK1x0XHRcdG1lbWNweShcdTAwMjZ0ZW1wbGF0ZSwgcGFnZSwgc2l6ZW9mKCpwYWdlKSk7XG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0em9uZV9kZXZpY2VfcGFnZV9pbml0X2Zyb21fdGVtcGxhdGUocGFnZSwgcGZuLFxuK1x0XHRcdFx0XHRcdFx0ICAgIFx1MDAyNnRlbXBsYXRlKTtcbitcdFx0fVxuIFxuIFx0XHRpZiAoSVNfQUxJR05FRChwZm4sIFBBR0VTX1BFUl9TRUNUSU9OKSlcbiBcdFx0XHRjb25kX3Jlc2NoZWQoKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDA3OjQwOjEyLjc5NDIwMDAxNVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcxODIzNzQ4OTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUGF0Y2g6IGBzdHJ1Y3QgcGFnZWAgSW5pdGlhbGl6YXRpb24gZm9yIGBaT05FX0RFVklDRWAqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIHRoZSBgc3RydWN0IHBhZ2VgIGluaXRpYWxpemF0aW9uIHByb2Nlc3Mgc3BlY2lmaWNhbGx5IGZvciBgWk9ORV9ERVZJQ0VgIG1lbW9yeS4gSXQgc2VlbXMgbGlrZSB0aGUgY29yZSBjaGFuZ2UgaXMgdGhlIGludHJvZHVjdGlvbiBvZiBgbWVtY3B5X25vbnRlbXBvcmFsYCB0byBhY2NlbGVyYXRlIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAgYnkgY29weWluZyBhIHRlbXBsYXRlIGBzdHJ1Y3QgcGFnZWAuIFRoYXQncyBhIGNsYXNzaWMgb3B0aW1pemF0aW9uIHRlY2huaXF1ZSwgdHJ5aW5nIHRvIGF2b2lkIGNhY2hlIHBvbGx1dGlvbiBkdXJpbmcgbWVtb3J5IGluaXRpYWxpemF0aW9uLiBUaGUgY2hhbmdlcyBhcmUgc3ByZWFkIGFjcm9zcyBhIGZldyBmaWxlczogdGhlIHg4NiBhc3NlbWJseSBoZWFkZXIsIHNvbWUgY29yZSBtbSBoZWFkZXJzLCBhIHN0cmluZyBoYW5kbGluZyBoZWFkZXIsIGFuZCB0aGUgbW0gaW5pdGlhbGl6YXRpb24gY29kZSBpdHNlbGYuXG5cbk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBjYW4gd2UgKnJlYWNoKiB0aGlzIGNvZGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gYFpPTkVfREVWSUNFYCBpcyB1c3VhbGx5IGFzc29jaWF0ZWQgd2l0aCBEQVgsIHBlcnNpc3RlbnQgbWVtb3J5LCBhbmQgZGV2aWNlcyB0aGF0IHVzZSBQQ0kgcGVlci10by1wZWVyIERNQS4gV2UgY2FuIHByb2JhYmx5IHRyaWdnZXIgdGhpcyBpbiBRRU1VIGJlY2F1c2UgaXQgc3VwcG9ydHMgZW11bGF0aW5nIE5WRElNTXMgKHdoaWNoIHVzZSBEQVgpIGFuZCBwb3RlbnRpYWxseSBQTUVNIGRldmljZXMuIFRoZSBgWk9ORV9ERVZJQ0VgIGlzIGFsc28gdG91Y2hlZCBieSBgZGF4YCBvciBgcGFnZW1hcGAgdGVzdHMuXG5cbklzIGZ1enppbmcgdGhpcyB3b3J0aCB0aGUgZWZmb3J0PyBBYnNvbHV0ZWx5LiBJdOKAmXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBpbml0aWFsaXphdGlvbiwgc3BlY2lmaWNhbGx5IGZvciBtZW1vcnkgaG90cGx1ZyBvciBkZXZpY2UgbWVtb3J5LiBUaGlzIG1lYW5zIGl04oCZcyBoYW5kbGluZyBjcml0aWNhbCBwYXJ0cyBvZiB0aGUgc3lzdGVtIHdoZW4gbmV3IG1lbW9yeSBpcyBhZGRlZCBvciBkZXZpY2VzIGFyZSBpbml0aWFsaXplZC4gVGhhdCdzIGEganVpY3kgdGFyZ2V0IGZvciBmaW5kaW5nIHN1YnRsZSBtZW1vcnkgY29ycnVwdGlvbiBidWdzLiBUaGUgZnVuY3Rpb24gYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYCBnZXRzIGNhbGxlZCBkdXJpbmcgbWVtb3J5IGhvdHBsdWcgb3IgZGV2aWNlIGluaXRpYWxpemF0aW9uLCB0aGluayBgZGV2bV9tZW1yZW1hcF9wYWdlc2AgYW5kIHNpbWlsYXIgZnVuY3Rpb25zLlxuXG5DYW4gc3l6a2FsbGVyIHRyaWdnZXIgdGhpcz8gUG90ZW50aWFsbHksIHllcy4gU3l6a2FsbGVyIGNhbiBwcm9iYWJseSBpbnRlcmFjdCB3aXRoIGAvc3lzL2J1cy9uZGAgb3Igc29tZXRoaW5nIHNpbWlsYXIgdG8gdHJpZ2dlciB0aGlzLCBvciBpdCBtaWdodCBnZXQgaGl0IGR1cmluZyBib290IGlmIHdlIGNvbmZpZ3VyZSBOVkRJTU0gaW4gUUVNVS4gU3l6a2FsbGVyIG1pZ2h0IG5vdCBlbmFibGUgTlZESU1NIGJ5IGRlZmF1bHQsIHVubGVzcyBpdOKAmXMgc3BlY2lmaWNhbGx5IGNvbmZpZ3VyZWQuIEJ1dCBoZXksIGl0J3Mgb2Z0ZW4gZW5hYmxlZCBiZWNhdXNlIG9mIGBDT05GSUdfWk9ORV9ERVZJQ0VgLiBTbywgdGhlIHBvdGVudGlhbCBhdHRhY2sgc3VyZmFjZSBpcyBiaWdnZXIgdGhhbiBJJ2Qgb3JpZ2luYWxseSB0aG91Z2h0LlxuXG5Pa2F5LCBuZXh0IHN0ZXAgaXMgdG8gbG9vayBhdCB0aGUgb3RoZXIgY2FsbGVycyBvZiBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgIHRvIHNlZSBob3cgZWxzZSB0aGlzIGZ1bmN0aW9uIGlzIHRyaWdnZXJlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTkyOSwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2OSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDA3OjQwOjE5Ljk3NjU3ODI2OFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODEyNTg4Njk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbW1hcF9pbml0X3pvbmVfZGV2aWNlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbW16b25lLmg9MTMxMT1zdGF0aWMgaW5saW5lIGJvb2wgem9uZV9kZXZpY2VfcGFnZXNfaGF2ZV9zYW1lX3BnbWFwKGNvbnN0IHN0cnVjdCBwYWdlICphLFxcbi0tXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC0xMzIwLVxcbmluY2x1ZGUvbGludXgvbW16b25lLmg6MTMyMTpleHRlcm4gdm9pZCBtZW1tYXBfaW5pdF96b25lX2RldmljZShzdHJ1Y3Qgem9uZSAqLCB1bnNpZ25lZCBsb25nLFxcbmluY2x1ZGUvbGludXgvbW16b25lLmgtMTMyMi1cXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgbG9uZywgc3RydWN0IGRldl9wYWdlbWFwICopO1xcbi0tXFxubW0vbWVtcmVtYXAuYz0xNDQ9c3RhdGljIGludCBwYWdlbWFwX3JhbmdlKHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXAsIHN0cnVjdCBtaHBfcGFyYW1zICpwYXJhbXMsXFxuLS1cXG5tbS9tZW1yZW1hcC5jLTI0MS1cXHQgKi9cXG5tbS9tZW1yZW1hcC5jOjI0MjpcXHRtZW1tYXBfaW5pdF96b25lX2RldmljZShcXHUwMDI2Tk9ERV9EQVRBKG5pZCktXFx1MDAzZW5vZGVfem9uZXNbWk9ORV9ERVZJQ0VdLFxcbm1tL21lbXJlbWFwLmMtMjQzLVxcdFxcdFxcdFxcdFBIWVNfUEZOKHJhbmdlLVxcdTAwM2VzdGFydCksXFxuLS1cXG5tbS9tbV9pbml0LmM9OTY4PXN0YXRpYyB2b2lkIF9faW5pdCBtZW1tYXBfaW5pdCh2b2lkKVxcbi0tXFxubW0vbW1faW5pdC5jLTEwMDgtLypcXG5tbS9tbV9pbml0LmM6MTAwOTogKiBSZXR1cm4gdHJ1ZSB3aGVuIG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlKCkgbXVzdCBpbml0aWFsaXplIHRoZSBwYWdlXFxubW0vbW1faW5pdC5jLTEwMTAtICogcmVmY291bnQgdG8gMC4gTUVNT1JZX0RFVklDRV9HRU5FUklDIHBhZ2VzIHJlZ2FpbiBhIHJlZmNvdW50IG9mIDEgaW5cXG4tLVxcbm1tL21tX2luaXQuYz0xMTMxPXN0YXRpYyB2b2lkIF9fcmVmIG1lbW1hcF9pbml0X2NvbXBvdW5kKHN0cnVjdCBwYWdlICpoZWFkLFxcbi0tXFxubW0vbW1faW5pdC5jLTExNzEtXFxubW0vbW1faW5pdC5jOjExNzI6dm9pZCBfX3JlZiBtZW1tYXBfaW5pdF96b25lX2RldmljZShzdHJ1Y3Qgem9uZSAqem9uZSxcXG5tbS9tbV9pbml0LmMtMTE3My1cXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMDc6NDA6MjEuNzg5MTc1NjE0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzcxNzAyNTgwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRlY29uc3RydWN0aW5nIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAqKlxuXG5Pa2F5LCBzbyBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgIGlzIGJlaW5nIGNhbGxlZCBmcm9tIGBwYWdlbWFwX3JhbmdlYCB3aXRoaW4gYG1tL21lbXJlbWFwLmNgLiBIbW0sIGBtbS9tZW1yZW1hcC5jYCBpcyB1c3VhbGx5IGludm9sdmVkIGluIHJlbWFwcGluZyBtZW1vcnkgcmVnaW9ucy4gVGhhdCdzIGludGVyZXN0aW5nLCBhbmQgaXQgc3VnZ2VzdHMgd2UncmUgZGVhbGluZyB3aXRoIGRldmljZSBtZW1vcnkgbWFwcGluZyBpbiBzb21lIGNhcGFjaXR5LiBUbyB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IGJldHRlciwgSSBuZWVkIHRvIHRyYWNlICp3aHkqIGBwYWdlbWFwX3JhbmdlYCBpcyBiZWluZyB1c2VkLiBXaGF0J3MgY2FsbGluZyAqaXQqPyBUaGF0J3MgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBmdWxsIHBpY3R1cmUgaGVyZS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHVwc3RyZWFtIGNhbGxlcnMgb2YgYHBhZ2VtYXBfcmFuZ2VgLiBUaGlzIHdpbGwgaWxsdW1pbmF0ZSB3aGF0IG9wZXJhdGlvbnMgYXJlIHRyaWdnZXJpbmcgdGhpcyBtZW1vcnkgcmVtYXBwaW5nIGJlaGF2aW9yIGFuZCB3aHkgd2UncmUgc3BlY2lmaWNhbGx5IGluaXRpYWxpemluZyBhIHpvbmUgZGV2aWNlLiBUaGlzIGNvbnRleHQgd2lsbCBiZSBjcnVjaWFsIGZvciBhbnkgZnVydGhlciBkZWJ1Z2dpbmcgb3IgYW5hbHlzaXMuIExldCdzIHNlZS4uLiBiYWNrdHJhY2Ugb3IgY3Jvc3MtcmVmZXJlbmNlLCBpdCBpcyFcblxuXG4iLCJJbnB1dFRva2VucyI6NzI0MSwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDA3OjQwOjI1LjUwNjIwMzY3NFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODIwOTk3ODc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBhZ2VtYXBfcmFuZ2VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtcmVtYXAuYz0xMzc9c3RhdGljIHZvaWQgZGV2X3BhZ2VtYXBfcGVyY3B1X3JlbGVhc2Uoc3RydWN0IHBlcmNwdV9yZWYgKnJlZilcXG4tLVxcbm1tL21lbXJlbWFwLmMtMTQzLVxcbm1tL21lbXJlbWFwLmM6MTQ0OnN0YXRpYyBpbnQgcGFnZW1hcF9yYW5nZShzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwLCBzdHJ1Y3QgbWhwX3BhcmFtcyAqcGFyYW1zLFxcbm1tL21lbXJlbWFwLmMtMTQ1LVxcdFxcdGludCByYW5nZV9pZCwgaW50IG5pZClcXG4tLVxcbm1tL21lbXJlbWFwLmM9MjY2PXZvaWQgKm1lbXJlbWFwX3BhZ2VzKHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXAsIGludCBuaWQpXFxuLS1cXG5tbS9tZW1yZW1hcC5jLTMzNy1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnJfcmFuZ2U7IGkrKykge1xcbm1tL21lbXJlbWFwLmM6MzM4OlxcdFxcdGVycm9yID0gcGFnZW1hcF9yYW5nZShwZ21hcCwgXFx1MDAyNnBhcmFtcywgaSwgbmlkKTtcXG5tbS9tZW1yZW1hcC5jLTMzOS1cXHRcXHRpZiAoZXJyb3IpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDA3OjQwOjI3LjMyNzIwODkxOVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2MDg1NjM2NzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKlRoaW5raW5nIFRocm91Z2ggbWVtcmVtYXBfcGFnZXMqKlxuXG5SaWdodCwgc28gYG1lbXJlbWFwX3BhZ2VzYCBpcyBiZWluZyBjYWxsZWQgYnkgKmRyaXZlcnMqLiBUaGF0J3MgdGhlIGtleSBzdGFydGluZyBwb2ludC4gSXQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhpcyBmdW5jdGlvbiBpcyBhIGNyaXRpY2FsIHBpZWNlIG9mIHRoZSBrZXJuZWwncyBtZW1vcnkgbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgaG93IGhhcmR3YXJlIGludGVyYWN0cyB3aXRoIHRoZSBzeXN0ZW0ncyBtZW1vcnkgc3BhY2UuIERyaXZlcnMsIGJ5IHRoZWlyIHZlcnkgbmF0dXJlLCBhcmUgcmVzcG9uc2libGUgZm9yIGludGVyZmFjaW5nIHdpdGggcGh5c2ljYWwgZGV2aWNlcywgYW5kIG9mdGVuIG5lZWQgdG8gbWFwIHBoeXNpY2FsIG1lbW9yeSByZWdpb25zIGludG8gdGhlIHZpcnR1YWwgYWRkcmVzcyBzcGFjZSBvZiB0aGUga2VybmVsLCBvciBwb3RlbnRpYWxseSBldmVuIHVzZXIgc3BhY2UsIGZvciBETUEgb3BlcmF0aW9ucyBvciBkaXJlY3QgYWNjZXNzLlxuXG5NeSBtaW5kIGltbWVkaWF0ZWx5IHN0YXJ0cyB0aWNraW5nIHRocm91Z2ggdGhlIGltcGxpY2F0aW9uczogV2hhdCBraW5kIG9mIGRyaXZlcnM/IEFyZSB3ZSB0YWxraW5nIGFib3V0IG5ldHdvcmsgYWRhcHRlcnMgbWFwcGluZyBidWZmZXJzLCBncmFwaGljcyBjYXJkcyBoYW5kbGluZyBmcmFtZWJ1ZmZlcnMsIG9yIHN0b3JhZ2UgY29udHJvbGxlcnMgZGVhbGluZyB3aXRoIGRpc2sgc2VjdG9ycz8gVGhlIHNwZWNpZmljcyBtYXR0ZXIgZm9yIHBlcmZvcm1hbmNlIGFuZCBzZWN1cml0eS4gSXMgdGhpcyBhIGNvbW1vbiBvcGVyYXRpb24gb3Igc29tZXRoaW5nIHJlbGF0aXZlbHkgcmFyZT8gVGhlIGZyZXF1ZW5jeSBvZiBpdHMgdXNlIHdpbGwgZ2l2ZSBhIGNsdWUgYXMgdG8gaXRzIGNyaXRpY2FsaXR5IGZvciBvcHRpbWl6YXRpb24uXG5cbkkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25zdHJhaW50cy4gSG93IGxhcmdlIGFyZSB0aGUgbWVtb3J5IHJlZ2lvbnMgYmVpbmcgbWFwcGVkPyBBcmUgd2UgdGFsa2luZyBhYm91dCBzaW5nbGUgcGFnZXMsIG9yIHBvdGVudGlhbGx5IGh1Z2UgYmxvY2tzPyBMYXJnZXIgcmVnaW9ucyBpbXBseSBwb3RlbnRpYWwgZm9yIG1vcmUgY29tcGxleCBwYWdlIHRhYmxlIG1hbmlwdWxhdGlvbnMgYW5kIHJlc291cmNlIGNvbnRlbnRpb24uIEFuZCBpcyBpdCBhbiBhcmVhIG9mIG1lbW9yeSB0aGF0IGlzIHNoYXJlZCBiZXR3ZWVuIHVzZXIgYW5kIGtlcm5lbCwgb3IgaXMgdGhpcyBtYXBwaW5nIHB1cmVseSBrZXJuZWwgc3BhY2U/IFNoYXJlZCByZWdpb25zIGNhbiBvcGVuIHVwIHZ1bG5lcmFiaWxpdGllcyBpZiBub3QgaGFuZGxlZCBjb3JyZWN0bHkuXG5cbkknbSBhbHNvIGNvbnNpZGVyaW5nIHRoZSBwb3RlbnRpYWwgZm9yIGVycm9ycy4gV2hhdCBlcnJvciBoYW5kbGluZyBpcyBpbiBwbGFjZT8gQXJlIHdlIGNoZWNraW5nIGZvciB2YWxpZCBwaHlzaWNhbCBhZGRyZXNzZXM/IFdoYXQgaGFwcGVucyBpZiB0aGUgbWFwcGluZyBmYWlscyDigJMgZG9lcyBpdCBncmFjZWZ1bGx5IGRlZ3JhZGUsIG9yIGNvdWxkIGl0IGxlYWQgdG8gc3lzdGVtIGluc3RhYmlsaXR5PyBTZWN1cml0eSBpbXBsaWNhdGlvbnMgYXJlIGFub3RoZXIgaW1wb3J0YW50IGFzcGVjdCB0byBjb25zaWRlciBoZXJlIC0gYXJlIHRoZXJlIGNoZWNrcyBpbiBwbGFjZSB0byBlbnN1cmUgdGhhdCB0aGUgZHJpdmVyIGNhbiBhY3R1YWxseSBhY2Nlc3MgdGhlIHJlcXVlc3RlZCBtZW1vcnk/IElzIHRoZXJlIGEgcmlzayBvZiBtZW1vcnkgbGVha3MgaWYgbWFwcGluZ3MgYXJlIG5vdCBwcm9wZXJseSB1bm1hcHBlZD8gVGhlIHJldHVybiB2YWx1ZSBvZiB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUgYSBrZXkgcGllY2Ugb2YgaW5mb3JtYXRpb24uXG5cbkVzc2VudGlhbGx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlICp3aHkqIG9mIHRoaXMgZnVuY3Rpb24gY2FsbC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGUgZHJpdmVyIGlzIHRyeWluZyB0byAqYWNoaWV2ZSogd2l0aCBgbWVtcmVtYXBfcGFnZXNgLiBLbm93aW5nIHRoYXQgd2lsbCBlbmFibGUgbWUgdG8gc2VlIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyBhbmQgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzLiBJJ20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgdGhlIGZvbGxvdy11cCBxdWVzdGlvbnM6IHdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgZm9yIE5VTUEgc3lzdGVtcywgYW5kIGhvdyBkb2VzIHRoaXMgZnVuY3Rpb24gaGFuZGxlIHBhZ2UgY2FjaGluZyBhbmQgY29oZXJlbmNlPyBUaW1lIHRvIGRpZyBpbnRvIHRoZSBzb3VyY2UgYW5kIHNlZSB3aGF0J3MgcmVhbGx5IGhhcHBlbmluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzc1MywiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDA3OjQwOjMxLjkzNTc3NTI5N1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjQzNzM3MzE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbXJlbWFwX3BhZ2VzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdD0yNzQ9VGhlc2UgY2FuIGJlIGFsbG9jYXRlZCBhbmQgZnJlZWQgd2l0aDo6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMjg1LSAgICBwYWdlbWFwLm9wcyA9IFxcdTAwMjZkZXZpY2VfZGV2bWVtX29wcztcXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3Q6Mjg2OiAgICBtZW1yZW1hcF9wYWdlcyhcXHUwMDI2cGFnZW1hcCwgbnVtYV9ub2RlX2lkKCkpO1xcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0yODctXFxuLS1cXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMjkwLVxcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdDoyOTE6VGhlcmUgYXJlIGFsc28gZGV2bV9yZXF1ZXN0X2ZyZWVfbWVtX3JlZ2lvbigpLCBkZXZtX21lbXJlbWFwX3BhZ2VzKCksXFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTI5Mi1kZXZtX21lbXVubWFwX3BhZ2VzKCksIGFuZCBkZXZtX3JlbGVhc2VfbWVtX3JlZ2lvbigpIHdoZW4gdGhlIHJlc291cmNlcyBjYW5cXG4tLVxcbkRvY3VtZW50YXRpb24vbW0vbWVtb3J5LW1vZGVsLnJzdD0xNDE9dG8ga2VlcCB0aGUgbWVtb3J5IHBpbm5lZCBmb3IgYWN0aXZlIHVzZS4gYFpPTkVfREVWSUNFYCwgdmlhXFxuRG9jdW1lbnRhdGlvbi9tbS9tZW1vcnktbW9kZWwucnN0OjE0Mjo6YzpmdW5jOmBkZXZtX21lbXJlbWFwX3BhZ2VzYCwgcGVyZm9ybXMganVzdCBlbm91Z2ggbWVtb3J5IGhvdHBsdWcgdG9cXG5Eb2N1bWVudGF0aW9uL21tL21lbW9yeS1tb2RlbC5yc3QtMTQzLXR1cm4gb24gOmM6ZnVuYzpgcGZuX3RvX3BhZ2VgLCA6YzpmdW5jOmBwYWdlX3RvX3BmbmAsIGFuZFxcbi0tXFxuRG9jdW1lbnRhdGlvbi9tbS9tZW1vcnktbW9kZWwucnN0PTE1Nz1tZW1vcnkgaG90cGx1Zy4gU3ViLXNlY3Rpb24gc3VwcG9ydCBhbGxvd3MgZm9yIDJNQiBhcyB0aGUgY3Jvc3MtYXJjaFxcbkRvY3VtZW50YXRpb24vbW0vbWVtb3J5LW1vZGVsLnJzdDoxNTg6Y29tbW9uIGFsaWdubWVudCBncmFudWxhcml0eSBmb3IgOmM6ZnVuYzpgZGV2bV9tZW1yZW1hcF9wYWdlc2AuXFxuRG9jdW1lbnRhdGlvbi9tbS9tZW1vcnktbW9kZWwucnN0LTE1OS1cXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3Q9MjIwPW1pZ3JhdGVfdm1hX2ZpbmFsaXplKCkg5Ye95pWw5peo5Zyo5L2/6amx5Yqo56iL5bqP5pu05piT5LqO57yW5YaZ5bm26ZuG5Lit6Leo6amx5Yqo56iL5bqP55qE6YCa55So5Luj56CB44CCXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0LTIzNi0gICAgcGFnZW1hcC5vcHMgPSBcXHUwMDI2ZGV2aWNlX2Rldm1lbV9vcHM7XFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdDoyMzc6ICAgIG1lbXJlbWFwX3BhZ2VzKFxcdTAwMjZwYWdlbWFwLCBudW1hX25vZGVfaWQoKSk7XFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdC0yMzgtXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0LTI0MS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0OjI0Mjrov5jmnIlkZXZtX3JlcXVlc3RfZnJlZV9tZW1fcmVnaW9uKCksIGRldm1fbWVtcmVtYXBfcGFnZXMoKSxcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0LTI0My1kZXZtX21lbXVubWFwX3BhZ2VzKCkg5ZKMIGRldm1fcmVsZWFzZV9tZW1fcmVnaW9uKCkg5b2T6LWE5rqQ5Y+v5Lul57uR5a6a5YiwIGBgc3RydWN0IGRldmljZWBgLlxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vbWVtb3J5LW1vZGVsLnJzdD0xMDc9Wk9ORV9ERVZJQ0VcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL21lbW9yeS1tb2RlbC5yc3QtMTExLeS6i+WunuacieWFs++8mui/meS6m+WcsOWdgOiMg+WbtOeahOmhtemdouWvueixoeS7juacquiiq+WcqOe6v+agh+iusOi/h++8jOiAjOS4lOW/hemhu+WvueiuvuWkh+i/m+ihjOW8leeUqO+8jOiAjOS4jeS7heS7hVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL21lbW9yeS1tb2RlbC5yc3Q6MTEyOuaYr+mhtemdou+8jOS7peS/neaMgeWGheWtmOiiq+KAnOmUgeWumuKAneS7peS+v+S9v+eUqOOAgiBgWk9ORV9ERVZJQ0VgIO+8jOmAmui/hyA6YzpmdW5jOmBkZXZtX21lbXJlbWFwX3BhZ2VzYCDvvIxcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9tZW1vcnktbW9kZWwucnN0LTExMy3kuLrnu5nlrprnmoRwZm5z6IyD5Zu05omn6KGM6Laz5aSf55qE5YaF5a2Y54Ot5o+S5ouU5p2l5byA5ZCvIDpjOmZ1bmM6YHBmbl90b19wYWdlYO+8jFxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vbWVtb3J5LW1vZGVsLnJzdC0xMjItOmM6ZnVuYzpgYXJjaF9hZGRfbWVtb3J5YCDvvIzljbPlhoXlrZjng63mj5Lmi5TnmoTkuIrljYrpg6jliIbjgILlrZDmrrXmlK/mjIHlhYHorrgyTULkvZzkuLpcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9tZW1vcnktbW9kZWwucnN0OjEyMzo6YzpmdW5jOmBkZXZtX21lbXJlbWFwX3BhZ2VzYCDnmoTot6jmnrbmnoTpgJrnlKjlr7npvZDpopfnspLluqbjgIJcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9tZW1vcnktbW9kZWwucnN0LTEyNC1cXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3V2bWVtLmM9MTE1OD1pbnQga3ZtcHBjX3V2bWVtX2luaXQodm9pZClcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3V2bWVtLmMtMTE4OS1cXHRrdm1wcGNfdXZtZW1fcGdtYXAub3duZXIgPSBcXHUwMDI2a3ZtcHBjX3V2bWVtX3BnbWFwO1xcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3V2bWVtLmM6MTE5MDpcXHRhZGRyID0gbWVtcmVtYXBfcGFnZXMoXFx1MDAyNmt2bXBwY191dm1lbV9wZ21hcCwgTlVNQV9OT19OT0RFKTtcXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl91dm1lbS5jLTExOTEtXFx0aWYgKElTX0VSUihhZGRyKSkge1xcbi0tXFxuYXJjaC94ODYvbW0vaW5pdF82NC5jPTk2ND1pbnQgYWRkX3BhZ2VzKGludCBuaWQsIHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbi0tXFxuYXJjaC94ODYvbW0vaW5pdF82NC5jLTk3Ni1cXHQvKlxcbmFyY2gveDg2L21tL2luaXRfNjQuYzo5Nzc6XFx0ICogU3BlY2lhbCBjYXNlOiBhZGRfcGFnZXMoKSBpcyBjYWxsZWQgYnkgbWVtcmVtYXBfcGFnZXMoKSBmb3IgYWRkaW5nIGRldmljZVxcbmFyY2gveDg2L21tL2luaXRfNjQuYy05NzgtXFx0ICogcHJpdmF0ZSBwYWdlcy4gRG8gbm90IGJ1bXAgdXAgbWF4X3BmbiBpbiB0aGUgZGV2aWNlIHByaXZhdGUgcGF0aCxcXG4tLVxcbmRyaXZlcnMvZGF4L2RldmljZS5jPTM4MD1zdGF0aWMgaW50IGRldl9kYXhfcHJvYmUoc3RydWN0IGRldl9kYXggKmRldl9kYXgpXFxuLS1cXG5kcml2ZXJzL2RheC9kZXZpY2UuYy00MzQtXFx0XFx0XFx0b3JkZXJfYmFzZV8yKGRldl9kYXgtXFx1MDAzZWFsaWduIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQpO1xcbmRyaXZlcnMvZGF4L2RldmljZS5jOjQzNTpcXHRhZGRyID0gZGV2bV9tZW1yZW1hcF9wYWdlcyhkZXYsIHBnbWFwKTtcXG5kcml2ZXJzL2RheC9kZXZpY2UuYy00MzYtXFx0aWYgKElTX0VSUihhZGRyKSlcXG4tLVxcbmRyaXZlcnMvZGF4L2ZzZGV2LmM9MjA3PXN0YXRpYyBpbnQgZnNkZXZfZGF4X3Byb2JlKHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4KVxcbi0tXFxuZHJpdmVycy9kYXgvZnNkZXYuYy0yNzMtXFxuZHJpdmVycy9kYXgvZnNkZXYuYzoyNzQ6XFx0YWRkciA9IGRldm1fbWVtcmVtYXBfcGFnZXMoZGV2LCBwZ21hcCk7XFxuZHJpdmVycy9kYXgvZnNkZXYuYy0yNzUtXFx0aWYgKElTX0VSUihhZGRyKSlcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9taWdyYXRlLmM9MTAyNj1pbnQga2dkMmtmZF9pbml0X3pvbmVfZGV2aWNlKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX21pZ3JhdGUuYy0xMDY3LVxcdCAqL1xcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9taWdyYXRlLmM6MTA2ODpcXHRyID0gZGV2bV9tZW1yZW1hcF9wYWdlcyhhZGV2LVxcdTAwM2VkZXYsIHBnbWFwKTtcXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfbWlncmF0ZS5jLTEwNjktXFx0aWYgKElTX0VSUihyKSkge1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWVtLmM9Mjk2PW5vdXZlYXVfZG1lbV9jaHVua19hbGxvYyhzdHJ1Y3Qgbm91dmVhdV9kcm0gKmRybSwgc3RydWN0IHBhZ2UgKipwcGFnZSxcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZG1lbS5jLTMzMi1cXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtZW0uYzozMzM6XFx0cHRyID0gbWVtcmVtYXBfcGFnZXMoXFx1MDAyNmNodW5rLVxcdTAwM2VwYWdlbWFwLCBudW1hX25vZGVfaWQoKSk7XFxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWVtLmMtMzM0LVxcdGlmIChJU19FUlIocHRyKSkge1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jPTE3NjA9c3RhdGljIHN0cnVjdCB4ZV9wYWdlbWFwICp4ZV9wYWdlbWFwX2NyZWF0ZShzdHJ1Y3QgeGVfZGV2aWNlICp4ZSwgc3RydWN0IHhlX3ZyYW1fcmVnaW9uICp2cilcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYy0xODAxLVxcdHBhZ2VtYXAtXFx1MDAzZW9wcyA9IGRybV9wYWdlbWFwX3BhZ2VtYXBfb3BzX2dldCgpO1xcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYzoxODAyOlxcdGFkZHIgPSBkZXZtX21lbXJlbWFwX3BhZ2VzKGRldiwgcGFnZW1hcCk7XFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jLTE4MDMtXFx0aWYgKElTX0VSUihhZGRyKSkge1xcbi0tXFxuZHJpdmVycy9odi9tc2h2X3Z0bF9tYWluLmM9MzgxPXN0YXRpYyBpbnQgbXNodl92dGxfaW9jdGxfYWRkX3Z0bDBfbWVtKHN0cnVjdCBtc2h2X3Z0bCAqdnRsLCB2b2lkIF9fdXNlciAqYXJnKVxcbi0tXFxuZHJpdmVycy9odi9tc2h2X3Z0bF9tYWluLmMtNDEwLVxcdCAqIFRoaXMgd29ya3MgYmVzdCB3aGVuIHRoZSByYW5nZSBpcyBhbGlnbmVkOyBpLmUuIGJvdGggdGhlIHN0YXJ0IGFuZCB0aGUgbGVuZ3RoLlxcbmRyaXZlcnMvaHYvbXNodl92dGxfbWFpbi5jOjQxMTpcXHQgKiBDbGFtcCB0byBNQVhfRk9MSU9fT1JERVIgdG8gYXZvaWQgYSBXQVJOIGluIG1lbXJlbWFwX3BhZ2VzKCkgd2hlbiB0aGUgcmFuZ2VcXG5kcml2ZXJzL2h2L21zaHZfdnRsX21haW4uYy00MTItXFx0ICogYWxpZ25tZW50IGV4Y2VlZHMgdGhlIG1heGltdW0gc3VwcG9ydGVkIGZvbGlvIG9yZGVyIGZvciB0aGlzIGtlcm5lbCBjb25maWcuXFxuLS1cXG5kcml2ZXJzL2h2L21zaHZfdnRsX21haW4uYy00MTktXFxuZHJpdmVycy9odi9tc2h2X3Z0bF9tYWluLmM6NDIwOlxcdGFkZHIgPSBkZXZtX21lbXJlbWFwX3BhZ2VzKG1lbV9kZXYsIHBnbWFwKTtcXG5kcml2ZXJzL2h2L21zaHZfdnRsX21haW4uYy00MjEtXFx0aWYgKElTX0VSUihhZGRyKSkge1xcbmRyaXZlcnMvaHYvbXNodl92dGxfbWFpbi5jOjQyMjpcXHRcXHRkZXZfZXJyKHZ0bC1cXHUwMDNlbW9kdWxlX2RldiwgXFxcImRldm1fbWVtcmVtYXBfcGFnZXMgZXJyb3I6ICVsZFxcXFxuXFxcIiwgUFRSX0VSUihhZGRyKSk7XFxuZHJpdmVycy9odi9tc2h2X3Z0bF9tYWluLmMtNDIzLVxcdFxcdGtmcmVlKHBnbWFwKTtcXG4tLVxcbmRyaXZlcnMvbnZkaW1tL0tjb25maWc9MTQzPWNvbmZpZyBOVkRJTU1fVEVTVF9CVUlMRFxcbi0tXFxuZHJpdmVycy9udmRpbW0vS2NvbmZpZy0xNTEtXFx0ICBvdGhlcndpc2UgaGVscHMgY2F0Y2ggYnVpbGQgZXJyb3JzIGluZHVjZWQgYnkgY2hhbmdlcyB0byB0aGVcXG5kcml2ZXJzL252ZGltbS9LY29uZmlnOjE1MjpcXHQgIGNvcmUgZGV2bV9tZW1yZW1hcF9wYWdlcygpIGltcGxlbWVudGF0aW9uIGFuZCBvdGhlclxcbmRyaXZlcnMvbnZkaW1tL0tjb25maWctMTUzLVxcdCAgaW5mcmFzdHJ1Y3R1cmUuXFxuLS1cXG5kcml2ZXJzL252ZGltbS9wbWVtLmM9NDQ4PXN0YXRpYyBpbnQgcG1lbV9hdHRhY2hfZGlzayhzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtNTE3LVxcdFxcdHBtZW0tXFx1MDAzZXBnbWFwLm9wcyA9IFxcdTAwMjZmc2RheF9wYWdlbWFwX29wcztcXG5kcml2ZXJzL252ZGltbS9wbWVtLmM6NTE4OlxcdFxcdGFkZHIgPSBkZXZtX21lbXJlbWFwX3BhZ2VzKGRldiwgXFx1MDAyNnBtZW0tXFx1MDAzZXBnbWFwKTtcXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtNTE5LVxcdFxcdHBmbl9zYiA9IG5kX3Bmbi1cXHUwMDNlcGZuX3NiO1xcbi0tXFxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTUzMC1cXHRcXHRwbWVtLVxcdTAwM2VwZ21hcC5vcHMgPSBcXHUwMDI2ZnNkYXhfcGFnZW1hcF9vcHM7XFxuZHJpdmVycy9udmRpbW0vcG1lbS5jOjUzMTpcXHRcXHRhZGRyID0gZGV2bV9tZW1yZW1hcF9wYWdlcyhkZXYsIFxcdTAwMjZwbWVtLVxcdTAwM2VwZ21hcCk7XFxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTUzMi1cXHRcXHRiYl9yYW5nZSA9IHBtZW0tXFx1MDAzZXBnbWFwLnJhbmdlO1xcbi0tXFxuZHJpdmVycy9udmRpbW0vcmVnaW9uX2RldnMuYz05MzQ9RVhQT1JUX1NZTUJPTChuZF9yZWdpb25fcmVsZWFzZV9sYW5lKTtcXG4tLVxcbmRyaXZlcnMvbnZkaW1tL3JlZ2lvbl9kZXZzLmMtOTM2LS8qXFxuZHJpdmVycy9udmRpbW0vcmVnaW9uX2RldnMuYzo5Mzc6ICogUG93ZXJQQyByZXF1aXJlcyB0aGlzIGFsaWdubWVudCBmb3IgbWVtcmVtYXBfcGFnZXMoKS4gQWxsIG90aGVyIGFyY2hzXFxuZHJpdmVycy9udmRpbW0vcmVnaW9uX2RldnMuYy05MzgtICogc2hvdWxkIGJlIG9rIHdpdGggU1VCU0VDVElPTl9TSVpFIChzZWUgbWVtcmVtYXBfY29tcGF0X2FsaWduKCkpLlxcbi0tXFxuZHJpdmVycy9wY2kvcDJwZG1hLmM9Mzg3PWludCBwY2lfcDJwZG1hX2FkZF9yZXNvdXJjZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IGJhciwgc2l6ZV90IHNpemUsXFxuLS1cXG5kcml2ZXJzL3BjaS9wMnBkbWEuYy00MzYtXFxuZHJpdmVycy9wY2kvcDJwZG1hLmM6NDM3OlxcdGFkZHIgPSBkZXZtX21lbXJlbWFwX3BhZ2VzKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIHBnbWFwKTtcXG5kcml2ZXJzL3BjaS9wMnBkbWEuYy00MzgtXFx0aWYgKElTX0VSUihhZGRyKSkge1xcbi0tXFxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rjc3NibGsuYz01NTM9ZGNzc2Jsa19hZGRfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXFxuLS1cXG5kcml2ZXJzL3MzOTAvYmxvY2svZGNzc2Jsay5jLTY5Ni1cXHRcXHRkZXZfaW5mby1cXHUwMDNlcGdtYXAubnJfcmFuZ2VcXHQ9IDE7XFxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rjc3NibGsuYzo2OTc6XFx0XFx0YWRkciA9IGRldm1fbWVtcmVtYXBfcGFnZXMoXFx1MDAyNmRldl9pbmZvLVxcdTAwM2VkZXYsIFxcdTAwMjZkZXZfaW5mby1cXHUwMDNlcGdtYXApO1xcbmRyaXZlcnMvczM5MC9ibG9jay9kY3NzYmxrLmMtNjk4LVxcdFxcdGlmIChJU19FUlIoYWRkcikpIHtcXG4tLVxcbmRyaXZlcnMveGVuL3VucG9wdWxhdGVkLWFsbG9jLmM9Mzc9c3RhdGljIGludCBmaWxsX2xpc3QodW5zaWduZWQgaW50IG5yX3BhZ2VzKVxcbi0tXFxuZHJpdmVycy94ZW4vdW5wb3B1bGF0ZWQtYWxsb2MuYy0xMjMtXFxuZHJpdmVycy94ZW4vdW5wb3B1bGF0ZWQtYWxsb2MuYzoxMjQ6XFx0dmFkZHIgPSBtZW1yZW1hcF9wYWdlcyhwZ21hcCwgTlVNQV9OT19OT0RFKTtcXG5kcml2ZXJzL3hlbi91bnBvcHVsYXRlZC1hbGxvYy5jLTEyNS1cXHRpZiAoSVNfRVJSKHZhZGRyKSkge1xcbi0tXFxuZnMvZnVzZS92aXJ0aW9fZnMuYz0xMDc2PXN0YXRpYyBpbnQgdmlydGlvX2ZzX3NldHVwX2RheChzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldiwgc3RydWN0IHZpcnRpb19mcyAqZnMpXFxuLS1cXG5mcy9mdXNlL3ZpcnRpb19mcy5jLTExMTYtXFx0LyogSWRlYWxseSB3ZSB3b3VsZCBkaXJlY3RseSB1c2UgdGhlIFBDSSBCQVIgcmVzb3VyY2UgYnV0XFxuZnMvZnVzZS92aXJ0aW9fZnMuYzoxMTE3OlxcdCAqIGRldm1fbWVtcmVtYXBfcGFnZXMoKSB3YW50cyBpdHMgb3duIGNvcHkgaW4gcGdtYXAuICBTb1xcbmZzL2Z1c2UvdmlydGlvX2ZzLmMtMTExOC1cXHQgKiBpbml0aWFsaXplIGEgc3RydWN0IHJlc291cmNlIGZyb20gc2NyYXRjaCAob25seSB0aGUgc3RhcnRcXG4tLVxcbmZzL2Z1c2UvdmlydGlvX2ZzLmMtMTEyNi1cXG5mcy9mdXNlL3ZpcnRpb19mcy5jOjExMjc6XFx0ZnMtXFx1MDAzZXdpbmRvd19rYWRkciA9IGRldm1fbWVtcmVtYXBfcGFnZXMoXFx1MDAyNnZkZXYtXFx1MDAzZWRldiwgcGdtYXApO1xcbmZzL2Z1c2UvdmlydGlvX2ZzLmMtMTEyOC1cXHRpZiAoSVNfRVJSKGZzLVxcdTAwM2V3aW5kb3dfa2FkZHIpKVxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oPTc3PXN0cnVjdCBkZXZfcGFnZW1hcF9vcHMge1xcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oLTExNS0gKiBAYWx0bWFwOiBwcmUtYWxsb2NhdGVkL3Jlc2VydmVkIG1lbW9yeSBmb3Igdm1lbW1hcCBhbGxvY2F0aW9uc1xcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaDoxMTY6ICogQHJlZjogcmVmZXJlbmNlIGNvdW50IHRoYXQgcGlucyB0aGUgZGV2bV9tZW1yZW1hcF9wYWdlcygpIG1hcHBpbmdcXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmgtMTE3LSAqIEBkb25lOiBjb21wbGV0aW9uIGZvciBAcmVmXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmg9MjI3PXZvaWQgem9uZV9kZXZpY2VfcGFnZV9pbml0KHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwLFxcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaC0yMjgtXFx0XFx0XFx0ICAgdW5zaWduZWQgaW50IG9yZGVyKTtcXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmg6MjI5OnZvaWQgKm1lbXJlbWFwX3BhZ2VzKHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXAsIGludCBuaWQpO1xcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaC0yMzAtdm9pZCBtZW11bm1hcF9wYWdlcyhzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwKTtcXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmg6MjMxOnZvaWQgKmRldm1fbWVtcmVtYXBfcGFnZXMoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwKTtcXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmgtMjMyLXZvaWQgZGV2bV9tZW11bm1hcF9wYWdlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXApO1xcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oPTI0Nz1zdGF0aWMgaW5saW5lIHZvaWQgem9uZV9kZXZpY2VfcHJpdmF0ZV9zcGxpdF9jYihzdHJ1Y3QgZm9saW8gKm9yaWdpbmFsX2ZvbGlvLFxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oLTI2NC0jZWxzZVxcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaDoyNjU6c3RhdGljIGlubGluZSB2b2lkICpkZXZtX21lbXJlbWFwX3BhZ2VzKHN0cnVjdCBkZXZpY2UgKmRldixcXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmgtMjY2LVxcdFxcdHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXApXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmgtMjY4LVxcdC8qXFxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oOjI2OTpcXHQgKiBGYWlsIGF0dGVtcHRzIHRvIGNhbGwgZGV2bV9tZW1yZW1hcF9wYWdlcygpIHdpdGhvdXRcXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmgtMjcwLVxcdCAqIFpPTkVfREVWSUNFIHN1cHBvcnQgZW5hYmxlZCwgdGhpcyByZXF1aXJlcyBjYWxsZXJzIHRvIGZhbGxcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaD0yODc9c3RhdGljIGlubGluZSBib29sIHBnbWFwX3Bmbl92YWxpZChzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwLCB1bnNpZ25lZCBsb25nIHBmbilcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaC0yOTEtXFxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oOjI5MjovKiB3aGVuIG1lbXJlbWFwX3BhZ2VzKCkgaXMgZGlzYWJsZWQgYWxsIGFyY2hzIGNhbiByZW1hcCBhIHNpbmdsZSBwYWdlICovXFxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oLTI5My1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbWVtcmVtYXBfY29tcGF0X2FsaWduKHZvaWQpXFxuLS1cXG5saWIvdGVzdF9obW0uYz01NTg9c3RhdGljIGludCBkbWlycm9yX2FsbG9jYXRlX2NodW5rKHN0cnVjdCBkbWlycm9yX2RldmljZSAqbWRldmljZSxcXG4tLVxcbmxpYi90ZXN0X2htbS5jLTYxNS1cXHR9XFxubGliL3Rlc3RfaG1tLmM6NjE2OlxcdHB0ciA9IG1lbXJlbWFwX3BhZ2VzKFxcdTAwMjZkZXZtZW0tXFx1MDAzZXBhZ2VtYXAsIG51bWFfbm9kZV9pZCgpKTtcXG5saWIvdGVzdF9obW0uYy02MTctXFx0aWYgKElTX0VSUl9PUl9OVUxMKHB0cikpIHtcXG4tLVxcbm1tL21lbXJlbWFwLmM9MTc9c3RhdGljIERFRklORV9YQVJSQVkocGdtYXBfYXJyYXkpO1xcbi0tXFxubW0vbWVtcmVtYXAuYy0xOS0vKlxcbm1tL21lbXJlbWFwLmM6MjA6ICogVGhlIG1lbXJlbWFwKCkgYW5kIG1lbXJlbWFwX3BhZ2VzKCkgaW50ZXJmYWNlcyBhcmUgYWx0ZXJuYXRlbHkgdXNlZFxcbm1tL21lbXJlbWFwLmMtMjEtICogdG8gbWFwIHBlcnNpc3RlbnQgbWVtb3J5IG5hbWVzcGFjZXMuIFRoZXNlIGludGVyZmFjZXMgcGxhY2UgZGlmZmVyZW50XFxubW0vbWVtcmVtYXAuYy0yMi0gKiBjb25zdHJhaW50cyBvbiB0aGUgYWxpZ25tZW50IGFuZCBzaXplIG9mIHRoZSBtYXBwaW5nIChuYW1lc3BhY2UpLlxcbm1tL21lbXJlbWFwLmM6MjM6ICogbWVtcmVtYXAoKSBjYW4gbWFwIGluZGl2aWR1YWwgUEFHRV9TSVpFIHBhZ2VzLiBtZW1yZW1hcF9wYWdlcygpIGNhblxcbm1tL21lbXJlbWFwLmMtMjQtICogb25seSBtYXAgc3Vic2VjdGlvbnMgKDJNQiksIGFuZCBhdCBsZWFzdCBvbmUgYXJjaGl0ZWN0dXJlIChQb3dlclBDKVxcbm1tL21lbXJlbWFwLmM6MjU6ICogdGhlIG1pbmltdW0gbWFwcGluZyBncmFudWxhcml0eSBvZiBtZW1yZW1hcF9wYWdlcygpIGlzIDE2TUIuXFxubW0vbWVtcmVtYXAuYy0yNi0gKlxcbi0tXFxubW0vbWVtcmVtYXAuYz0xMzA9RVhQT1JUX1NZTUJPTF9HUEwobWVtdW5tYXBfcGFnZXMpO1xcbm1tL21lbXJlbWFwLmMtMTMxLVxcbm1tL21lbXJlbWFwLmM6MTMyOnN0YXRpYyB2b2lkIGRldm1fbWVtcmVtYXBfcGFnZXNfcmVsZWFzZSh2b2lkICpkYXRhKVxcbm1tL21lbXJlbWFwLmMtMTMzLXtcXG4tLVxcbm1tL21lbXJlbWFwLmM9MTQ0PXN0YXRpYyBpbnQgcGFnZW1hcF9yYW5nZShzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwLCBzdHJ1Y3QgbWhwX3BhcmFtcyAqcGFyYW1zLFxcbi0tXFxubW0vbWVtcmVtYXAuYy0yNjEtLypcXG5tbS9tZW1yZW1hcC5jOjI2MjogKiBOb3QgZGV2aWNlIG1hbmFnZWQgdmVyc2lvbiBvZiBkZXZtX21lbXJlbWFwX3BhZ2VzLCB1bmRvbmUgYnlcXG5tbS9tZW1yZW1hcC5jOjI2MzogKiBtZW11bm1hcF9wYWdlcygpLiAgUGxlYXNlIHVzZSBkZXZtX21lbXJlbWFwX3BhZ2VzIGlmIHlvdSBoYXZlIGEgc3RydWN0XFxubW0vbWVtcmVtYXAuYy0yNjQtICogZGV2aWNlIGF2YWlsYWJsZS5cXG5tbS9tZW1yZW1hcC5jLTI2NS0gKi9cXG5tbS9tZW1yZW1hcC5jOjI2Njp2b2lkICptZW1yZW1hcF9wYWdlcyhzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwLCBpbnQgbmlkKVxcbm1tL21lbXJlbWFwLmMtMjY3LXtcXG4tLVxcbm1tL21lbXJlbWFwLmMtMzUxLX1cXG5tbS9tZW1yZW1hcC5jOjM1MjpFWFBPUlRfU1lNQk9MX0dQTChtZW1yZW1hcF9wYWdlcyk7XFxubW0vbWVtcmVtYXAuYy0zNTMtXFxubW0vbWVtcmVtYXAuYy0zNTQtLyoqXFxubW0vbWVtcmVtYXAuYzozNTU6ICogZGV2bV9tZW1yZW1hcF9wYWdlcyAtIHJlbWFwIGFuZCBwcm92aWRlIG1lbW1hcCBiYWNraW5nIGZvciB0aGUgZ2l2ZW4gcmVzb3VyY2VcXG5tbS9tZW1yZW1hcC5jLTM1Ni0gKiBAZGV2OiBob3N0aW5nIGRldmljZSBmb3IgQHJlc1xcbi0tXFxubW0vbWVtcmVtYXAuYy0zNjctICogICAgJ2xpdmUnIG9uIGVudHJ5IGFuZCB3aWxsIGJlIGtpbGxlZCBhbmQgcmVhcGVkIGF0XFxubW0vbWVtcmVtYXAuYzozNjg6ICogICAgZGV2bV9tZW1yZW1hcF9wYWdlc19yZWxlYXNlKCkgdGltZSwgb3IgaWYgdGhpcyByb3V0aW5lIGZhaWxzLlxcbm1tL21lbXJlbWFwLmMtMzY5LSAqXFxuLS1cXG5tbS9tZW1yZW1hcC5jLTM3My0gKi9cXG5tbS9tZW1yZW1hcC5jOjM3NDp2b2lkICpkZXZtX21lbXJlbWFwX3BhZ2VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcClcXG5tbS9tZW1yZW1hcC5jLTM3NS17XFxuLS1cXG5tbS9tZW1yZW1hcC5jLTM3OC1cXG5tbS9tZW1yZW1hcC5jOjM3OTpcXHRyZXQgPSBtZW1yZW1hcF9wYWdlcyhwZ21hcCwgZGV2X3RvX25vZGUoZGV2KSk7XFxubW0vbWVtcmVtYXAuYy0zODAtXFx0aWYgKElTX0VSUihyZXQpKVxcbi0tXFxubW0vbWVtcmVtYXAuYy0zODItXFxubW0vbWVtcmVtYXAuYzozODM6XFx0ZXJyb3IgPSBkZXZtX2FkZF9hY3Rpb25fb3JfcmVzZXQoZGV2LCBkZXZtX21lbXJlbWFwX3BhZ2VzX3JlbGVhc2UsXFxubW0vbWVtcmVtYXAuYy0zODQtXFx0XFx0XFx0cGdtYXApO1xcbi0tXFxubW0vbWVtcmVtYXAuYy0zODgtfVxcbm1tL21lbXJlbWFwLmM6Mzg5OkVYUE9SVF9TWU1CT0xfR1BMKGRldm1fbWVtcmVtYXBfcGFnZXMpO1xcbm1tL21lbXJlbWFwLmMtMzkwLVxcbm1tL21lbXJlbWFwLmM9MzkxPXZvaWQgZGV2bV9tZW11bm1hcF9wYWdlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXApXFxubW0vbWVtcmVtYXAuYy0zOTIte1xcbm1tL21lbXJlbWFwLmM6MzkzOlxcdGRldm1fcmVsZWFzZV9hY3Rpb24oZGV2LCBkZXZtX21lbXJlbWFwX3BhZ2VzX3JlbGVhc2UsIHBnbWFwKTtcXG5tbS9tZW1yZW1hcC5jLTM5NC19XFxuLS1cXG5tbS9zcGFyc2Utdm1lbW1hcC5jPTQwMj1pbnQgX19tZW1pbml0IHZtZW1tYXBfcG9wdWxhdGVfaHVnZXBhZ2VzKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbi0tXFxubW0vc3BhcnNlLXZtZW1tYXAuYy00NTktICpcXG5tbS9zcGFyc2Utdm1lbW1hcC5jOjQ2MDogKiBOb3RlIHRoYXQgbWVtcmVtYXBfcGFnZXMoKSByZXNldHMgQG5yX3JhbmdlIHZhbHVlIGFuZCB3aWxsIGluY3JlbWVudFxcbm1tL3NwYXJzZS12bWVtbWFwLmMtNDYxLSAqIGl0IGFmdGVyIGVhY2ggcmFuZ2Ugc3VjY2Vzc2Z1bCBvbmxpbmluZy4gVGh1cyB0aGUgdmFsdWUgb3IgQG5yX3JhbmdlXFxuLS1cXG50b29scy90ZXN0aW5nL252ZGltbS9LYnVpbGQ9MTM9bGRmbGFncy15ICs9IC0td3JhcD1fX3JlbGVhc2VfcmVnaW9uXFxudG9vbHMvdGVzdGluZy9udmRpbW0vS2J1aWxkOjE0OmxkZmxhZ3MteSArPSAtLXdyYXA9ZGV2bV9tZW1yZW1hcF9wYWdlc1xcbnRvb2xzL3Rlc3RpbmcvbnZkaW1tL0tidWlsZC0xNS1sZGZsYWdzLXkgKz0gLS13cmFwPWluc2VydF9yZXNvdXJjZVxcbi0tXFxudG9vbHMvdGVzdGluZy9udmRpbW0vdGVzdC9pb21hcC5jPTEwOD1zdGF0aWMgdm9pZCBkZXZfcGFnZW1hcF9wZXJjcHVfcmVsZWFzZShzdHJ1Y3QgcGVyY3B1X3JlZiAqcmVmKVxcbi0tXFxudG9vbHMvdGVzdGluZy9udmRpbW0vdGVzdC9pb21hcC5jLTExNC1cXG50b29scy90ZXN0aW5nL252ZGltbS90ZXN0L2lvbWFwLmM6MTE1OnZvaWQgKl9fd3JhcF9kZXZtX21lbXJlbWFwX3BhZ2VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcClcXG50b29scy90ZXN0aW5nL252ZGltbS90ZXN0L2lvbWFwLmMtMTE2LXtcXG4tLVxcbnRvb2xzL3Rlc3RpbmcvbnZkaW1tL3Rlc3QvaW9tYXAuYy0xMjEtXFx0aWYgKCFuZml0X3JlcylcXG50b29scy90ZXN0aW5nL252ZGltbS90ZXN0L2lvbWFwLmM6MTIyOlxcdFxcdHJldHVybiBkZXZtX21lbXJlbWFwX3BhZ2VzKGRldiwgcGdtYXApO1xcbnRvb2xzL3Rlc3RpbmcvbnZkaW1tL3Rlc3QvaW9tYXAuYy0xMjMtXFxuLS1cXG50b29scy90ZXN0aW5nL252ZGltbS90ZXN0L2lvbWFwLmMtMTM0LX1cXG50b29scy90ZXN0aW5nL252ZGltbS90ZXN0L2lvbWFwLmM6MTM1OkVYUE9SVF9TWU1CT0xfR1BMKF9fd3JhcF9kZXZtX21lbXJlbWFwX3BhZ2VzKTtcXG50b29scy90ZXN0aW5nL252ZGltbS90ZXN0L2lvbWFwLmMtMTM2LVxcbi0tXFxudG9vbHMvdGVzdGluZy9udmRpbW0vdGVzdC9uZml0X3Rlc3QuaD0yMTI9dm9pZCAqX193cmFwX2Rldm1fbWVtcmVtYXAoc3RydWN0IGRldmljZSAqZGV2LCByZXNvdXJjZV9zaXplX3Qgb2Zmc2V0LFxcbnRvb2xzL3Rlc3RpbmcvbnZkaW1tL3Rlc3QvbmZpdF90ZXN0LmgtMjEzLVxcdFxcdHNpemVfdCBzaXplLCB1bnNpZ25lZCBsb25nIGZsYWdzKTtcXG50b29scy90ZXN0aW5nL252ZGltbS90ZXN0L25maXRfdGVzdC5oOjIxNDp2b2lkICpfX3dyYXBfZGV2bV9tZW1yZW1hcF9wYWdlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXApO1xcbnRvb2xzL3Rlc3RpbmcvbnZkaW1tL3Rlc3QvbmZpdF90ZXN0LmgtMjE1LXZvaWQgKl9fd3JhcF9tZW1yZW1hcChyZXNvdXJjZV9zaXplX3Qgb2Zmc2V0LCBzaXplX3Qgc2l6ZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMDc6NDA6MzMuNTc5NTE4MTg1WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTYzMzczNjk2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIG1lbXJlbWFwX3BhZ2VzIFBhdGggYW5kIE9wdGltaXphdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSXQgbG9va3MgbGlrZSBgbWVtcmVtYXBfcGFnZXNgIGlzIGEga2V5IGZ1bmN0aW9uLCBjYWxsZWQgaW5kaXJlY3RseSBieSBgZGV2bV9tZW1yZW1hcF9wYWdlc2AuIEkgc2VlIHRoaXMgaXMgdXNlZCBpbiBzZXZlcmFsIGltcG9ydGFudCBhcmVhczogdGhlIERBWCBkcml2ZXJzIChgZGV2aWNlLmNgLCBgZnNkZXYuY2ApLCBwZXJzaXN0ZW50IG1lbW9yeSAoYHBtZW0uY2ApLCB0aGUgdmlydGlvLWZzIGltcGxlbWVudGF0aW9uLCBhbmQgcDJwZG1hLiBTcGVjaWZpY2FsbHksIHZpcnRpby1mcyBzdGFuZHMgb3V0IGFzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGluIGEgUUVNVSBlbnZpcm9ubWVudCwgd2hpY2ggaXMgdXNlZnVsIHRvIGtub3cuIFBsdXMsIHRoZXJlJ3MgYGxpYi90ZXN0X2htbS5jYCwgd2hpY2ggdXNlcyBpdC4gYHRlc3RfaG1tYCBzdWdnZXN0cyB3ZSBjYW4gZGlyZWN0bHkgdGVzdCB0aGlzIGZ1bmN0aW9uYWxpdHkuIFRoaXMgbWVhbnMgYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYCBpcyBwb3RlbnRpYWxseSByZWFjaGFibGUgaW4gYSBRRU1VIGNvbnRleHQgYXMgd2VsbC5cblxuTm93LCBsZXQncyByZWZvY3VzIG9uIHRoZSBwYXRjaCBpdHNlbGYuIEl0IG1vZGlmaWVzIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAgYW5kIGBtZW1tYXBfaW5pdF9jb21wb3VuZGAgd2l0aGluIGBtbS9tbV9pbml0LmNgLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIGxvZ2ljIHJlc2lkZXMuIFRoZSBwYXRjaCBhbHNvIGludHJvZHVjZXMgYG1lbWNweV9ub250ZW1wb3JhbGAsIGFkZGluZyBpdCB0byBib3RoIGBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaGAgYW5kIHRoZSBnZW5lcmFsIGBpbmNsdWRlL2xpbnV4L3N0cmluZy5oYCBoZWFkZXJzLlxuXG5NeSBpbW1lZGlhdGUgaW50ZXJwcmV0YXRpb24gaXMgdGhhdCB0aGUgcGF0Y2ggaXMgb3B0aW1pemluZyBob3cgYHN0cnVjdCBwYWdlYCBpcyBpbml0aWFsaXplZCwgc3BlY2lmaWNhbGx5IGZvciBgWk9ORV9ERVZJQ0VgIG1lbW9yeS4gVGhlIHN0cmF0ZWd5IGlzIHRvIGNyZWF0ZSBhIHRlbXBsYXRlIHBhZ2UgYW5kIHRoZW4gZWZmaWNpZW50bHkgY29weSBpdCB0byB0aGUgcmVtYWluaW5nIHBhZ2VzIHVzaW5nIGBtZW1jcHlfbm9udGVtcG9yYWxgLiBUaGlzIGlzIGEgY2xhc3NpYyBvcHRpbWl6YXRpb24gdGVjaG5pcXVlIGZvciBtZW1vcnkgaW5pdGlhbGl6YXRpb24sIGFzc3VtaW5nIHRoZSBpbml0aWFsIHBhZ2UgY29udGFpbnMgdGhlIG5lY2Vzc2FyeSBkZWZhdWx0IHZhbHVlcy4gR2l2ZW4gdGhlIGNvbnRleHQsIHRoaXMgcHJvYmFibHkgYWRkcmVzc2VzIHNvbWUgc3BlY2lmaWMgcGVyZm9ybWFuY2UgYm90dGxlbmVjayBkdXJpbmcgZGV2aWNlIGluaXRpYWxpemF0aW9uLlxuXG5UaW1lIHRvIGRlbHZlIGludG8gdGhlIGNvZGUgY2hhbmdlcyBpbiBgbW0vbW1faW5pdC5jYCBhbmQgY29uZmlybSB0aGVzZSBhc3N1bXB0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQyMDEsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMDc6NDA6MzkuMjEzMjU5MDQ5WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjc5MjkxMzY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9mcm9tX3RlbXBsYXRlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21tX2luaXQuYz0xMDg1PXN0YXRpYyBpbmxpbmUgdm9pZCB6b25lX2RldmljZV9wYWdlX3VwZGF0ZV90ZW1wbGF0ZShzdHJ1Y3QgcGFnZSAqdGVtcGxhdGUsXFxuLS1cXG5tbS9tbV9pbml0LmMtMTA5NC1cXG5tbS9tbV9pbml0LmM6MTA5NTpzdGF0aWMgdm9pZCB6b25lX2RldmljZV9wYWdlX2luaXRfZnJvbV90ZW1wbGF0ZShzdHJ1Y3QgcGFnZSAqcGFnZSxcXG5tbS9tbV9pbml0LmMtMTA5Ni1cXHRcXHR1bnNpZ25lZCBsb25nIHBmbiwgc3RydWN0IHBhZ2UgKnRlbXBsYXRlKVxcbi0tXFxubW0vbW1faW5pdC5jPTExMzE9c3RhdGljIHZvaWQgX19yZWYgbWVtbWFwX2luaXRfY29tcG91bmQoc3RydWN0IHBhZ2UgKmhlYWQsXFxuLS1cXG5tbS9tbV9pbml0LmMtMTE2NC1cXHRcXHR9IGVsc2Uge1xcbm1tL21tX2luaXQuYzoxMTY1OlxcdFxcdFxcdHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9mcm9tX3RlbXBsYXRlKHBhZ2UsIHBmbixcXG5tbS9tbV9pbml0LmMtMTE2Ni1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNnRlbXBsYXRlKTtcXG4tLVxcbm1tL21tX2luaXQuYz0xMTcyPXZvaWQgX19yZWYgbWVtbWFwX2luaXRfem9uZV9kZXZpY2Uoc3RydWN0IHpvbmUgKnpvbmUsXFxuLS1cXG5tbS9tbV9pbml0LmMtMTIxNC1cXHRcXHR9IGVsc2Uge1xcbm1tL21tX2luaXQuYzoxMjE1OlxcdFxcdFxcdHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9mcm9tX3RlbXBsYXRlKHBhZ2UsIHBmbixcXG5tbS9tbV9pbml0LmMtMTIxNi1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNnRlbXBsYXRlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMDc6NDA6NDAuODkyNTU2Njc3WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyMjEwNjAxOTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBab25lIERldmljZSBJbml0aWFsaXphdGlvbiBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhlIHpvbmUgZGV2aWNlIGluaXRpYWxpemF0aW9uIGNvZGUsIGFuZCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBrZXkgZnVuY3Rpb25zIGhlcmUuIExldCdzIHNlZS4uLiB0aGUgb25lcyB0aGF0IGltbWVkaWF0ZWx5IGp1bXAgb3V0IGFyZTogYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYCwgYG1lbW1hcF9pbml0X2NvbXBvdW5kYCwgYHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9mcm9tX3RlbXBsYXRlYCwgYHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9zbG93YCwgYHpvbmVfZGV2aWNlX3RhaWxfcGFnZV9pbml0YCwgYW5kIGB6b25lX2RldmljZV9wYWdlX3VwZGF0ZV90ZW1wbGF0ZWAuIFJpZ2h0LCB0aGF0IHNlZW1zIHRvIGJlIHRoZSBjb3JlIHNldCBJIG5lZWQgdG8gdW5kZXJzdGFuZC5cblxuV2FpdCBhIHNlY29uZCwgZ2xhbmNpbmcgYmFjay4uLiBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgIGxvb2tzIGxpa2UgdGhlIHByaW1hcnkgZW50cnkgcG9pbnQuIFRoYXQgbWFrZXMgc2Vuc2UuIE5vdywgbGV0J3MgZmlndXJlIG91dCB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIFdoYXQgZmxhZ3Mgb3IgZmVhdHVyZXMgbmVlZCB0byBiZSBlbmFibGVkIGZvciB0aGlzIHRvIGV2ZW4gcnVuPyBJJ2xsIGJldCBgQ09ORklHX1pPTkVfREVWSUNFYCBpcyB0aGUga2V5LiBUaW1lIHRvIGNyYWNrIG9wZW4gYG1tL0tjb25maWdgIGFuZCBkb3VibGUtY2hlY2suIEdvdHRhIGNvbmZpcm0gdGhhdCBiZWZvcmUgSSBnbyBhbnkgZnVydGhlciBkb3duIHRoZSByYWJiaXQgaG9sZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUyNDAsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMDc6NDA6NDUuMTEzNjIwMzRaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MDc4OTY0NDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFpPTkVfREVWSUNFXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9MTIzMT1jb25maWcgWk9ORV9ETUEzMlxcbi0tXFxubW0vS2NvbmZpZy0xMjM1LVxcbm1tL0tjb25maWc6MTIzNjpjb25maWcgWk9ORV9ERVZJQ0VcXG5tbS9LY29uZmlnLTEyMzctXFx0Ym9vbCBcXFwiRGV2aWNlIG1lbW9yeSAocG1lbSwgSE1NLCBldGMuLi4pIGhvdHBsdWcgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMDc6NDA6NDYuNzIxNTIxNjE4WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwNTAzOTIzNDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIERlcGVuZGVuY2llcyBmb3IgWk9ORV9ERVZJQ0UqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYXJjaGl0ZWN0dXJhbCBpbXBsaWNhdGlvbnMgb2YgYFpPTkVfREVWSUNFYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiV2hhdCBhcmUgdGhlIGRlcGVuZGVuY2llcyBoZXJlP1wiIEkgbmVlZCB0byBkaWcgZGVlcGVyIGFuZCBzZWUgd2hhdCBwaWVjZXMgb2YgdGhlIHN5c3RlbSByZWx5IG9uIHRoaXMuIEFyZSB3ZSB0YWxraW5nIGhhcmR3YXJlIGFic3RyYWN0aW9uPyBJcyBpdCByZWxhdGVkIHRvIHRoZSBvdmVyYWxsIHJlc291cmNlIG1hbmFnZW1lbnQgd2l0aGluIHRoZSB6b25lPyBPciwgaXMgaXQgcGVyaGFwcyBhIGxvZ2ljYWwgY29uc3RydWN0PyBLbm93aW5nIHRoZSBkZXBlbmRlbmNpZXMgaXMgY3J1Y2lhbCB0byBhc3Nlc3MgdGhlIHBvdGVudGlhbCBpbXBhY3Qgb2YgYW55IGNoYW5nZXMgb3IgdG8gdHJvdWJsZXNob290IHVuZXhwZWN0ZWQgYmVoYXZpb3IgZG93biB0aGUgbGluZS4gSXQgcmVhbGx5IGJvaWxzIGRvd24gdG86IFwiV2hhdCBhcmUgdGhlICpleHRlcm5hbCogc3lzdGVtcyBvciBmdW5jdGlvbmFsaXRpZXMgd2hpY2ggaGF2ZSBhIHRpZ2h0IGNvdXBsaW5nIHdpdGggYFpPTkVfREVWSUNFYD9cIiBJIG5lZWQgdG8gbWFwIGl0IGFsbCBvdXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NzA1LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMDc6NDA6NDkuNzcxOTE2NzQ3WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjA0MDYwMjkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlcGVuZHMgb24uKlpPTkVfREVWSUNFXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvZ3B1L2RybS94ZS9LY29uZmlnPTc5PWNvbmZpZyBEUk1fWEVfR1BVU1ZNXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUvS2NvbmZpZy04Mi1cXHRkZXBlbmRzIG9uICFVTUxcXG5kcml2ZXJzL2dwdS9kcm0veGUvS2NvbmZpZzo4MzpcXHRkZXBlbmRzIG9uIFpPTkVfREVWSUNFXFxuZHJpdmVycy9ncHUvZHJtL3hlL0tjb25maWctODQtXFx0ZGVmYXVsdCB5XFxuLS1cXG5kcml2ZXJzL252ZGltbS9LY29uZmlnPTYyPWNvbmZpZyBOVkRJTU1fUEZOXFxuLS1cXG5kcml2ZXJzL252ZGltbS9LY29uZmlnLTY0LVxcdGRlZmF1bHQgTElCTlZESU1NXFxuZHJpdmVycy9udmRpbW0vS2NvbmZpZzo2NTpcXHRkZXBlbmRzIG9uIFpPTkVfREVWSUNFXFxuZHJpdmVycy9udmRpbW0vS2NvbmZpZy02Ni1cXHRzZWxlY3QgTkRfQ0xBSU1cXG4tLVxcbmRyaXZlcnMvcGNpL0tjb25maWc9MjA2PWNvbmZpZyBQQ0lfUDJQRE1BXFxuZHJpdmVycy9wY2kvS2NvbmZpZy0yMDctXFx0Ym9vbCBcXFwiUENJIHBlZXItdG8tcGVlciB0cmFuc2ZlciBzdXBwb3J0XFxcIlxcbmRyaXZlcnMvcGNpL0tjb25maWc6MjA4OlxcdGRlcGVuZHMgb24gWk9ORV9ERVZJQ0VcXG5kcml2ZXJzL3BjaS9LY29uZmlnLTIwOS1cXHQjXFxuLS1cXG5kcml2ZXJzL3MzOTAvYmxvY2svS2NvbmZpZz01PWNvbmZpZyBEQ1NTQkxLXFxuLS1cXG5kcml2ZXJzL3MzOTAvYmxvY2svS2NvbmZpZy03LVxcdHByb21wdCBcXFwiRENTU0JMSyBzdXBwb3J0XFxcIlxcbmRyaXZlcnMvczM5MC9ibG9jay9LY29uZmlnOjg6XFx0ZGVwZW5kcyBvbiBTMzkwIFxcdTAwMjZcXHUwMDI2IEJMT0NLIFxcdTAwMjZcXHUwMDI2IFpPTkVfREVWSUNFXFxuZHJpdmVycy9zMzkwL2Jsb2NrL0tjb25maWctOS1cXHRzZWxlY3QgRlNfREFYXFxuLS1cXG5kcml2ZXJzL3hlbi9LY29uZmlnPTMzNj1jb25maWcgWEVOX1VOUE9QVUxBVEVEX0FMTE9DXFxuZHJpdmVycy94ZW4vS2NvbmZpZy0zMzctXFx0Ym9vbCBcXFwiVXNlIHVucG9wdWxhdGVkIG1lbW9yeSByYW5nZXMgZm9yIGd1ZXN0IG1hcHBpbmdzXFxcIlxcbmRyaXZlcnMveGVuL0tjb25maWc6MzM4OlxcdGRlcGVuZHMgb24gWk9ORV9ERVZJQ0VcXG5kcml2ZXJzL3hlbi9LY29uZmlnLTMzOS1cXHRkZWZhdWx0IFhFTl9CQUNLRU5EIHx8IFhFTl9HTlRERVYgfHwgWEVOX0RPTTBcXG4tLVxcbmZzL0tjb25maWc9NTg9Y29uZmlnIEZTX0RBWFxcbi0tXFxuZnMvS2NvbmZpZy02MC1cXHRkZXBlbmRzIG9uIE1NVVxcbmZzL0tjb25maWc6NjE6XFx0ZGVwZW5kcyBvbiBaT05FX0RFVklDRVxcbmZzL0tjb25maWctNjItXFx0c2VsZWN0IEZTX0lPTUFQXFxuLS1cXG5mcy9LY29uZmlnPTkwPWNvbmZpZyBGU19EQVhfUE1EXFxuLS1cXG5mcy9LY29uZmlnLTkzLVxcdGRlcGVuZHMgb24gRlNfREFYXFxuZnMvS2NvbmZpZzo5NDpcXHRkZXBlbmRzIG9uIFpPTkVfREVWSUNFXFxuZnMvS2NvbmZpZy05NS1cXHRkZXBlbmRzIG9uIFRSQU5TUEFSRU5UX0hVR0VQQUdFXFxuLS1cXG5tbS9LY29uZmlnPTEyNjc9Y29uZmlnIERFVklDRV9QUklWQVRFXFxubW0vS2NvbmZpZy0xMjY4LVxcdGJvb2wgXFxcIlVuYWRkcmVzc2FibGUgZGV2aWNlIG1lbW9yeSAoR1BVIG1lbW9yeSwgLi4uKVxcXCJcXG5tbS9LY29uZmlnOjEyNjk6XFx0ZGVwZW5kcyBvbiBaT05FX0RFVklDRVxcbm1tL0tjb25maWctMTI3MC1cXHRzZWxlY3QgR0VUX0ZSRUVfUkVHSU9OXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDA3OjQwOjUxLjk3NTk4NjQ3N1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjcxODIzNDU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUuIE15IG1pbmQncyBidXp6aW5nIOKAkyBJJ20gaW4gdGhlIHRoaWNrIG9mIHRoaXMgYW5kIEkgbmVlZCB0byBlbnN1cmUgbXkgdW5kZXJzdGFuZGluZyBpcyByb2NrIHNvbGlkIGJlZm9yZSBJIHByb2NlZWQuXG5cbioqRGVwZW5kZW5jaWVzIENoZWNrOiBEZWVwIERpdmUqKlxuXG5Ib2xkIG9uLCBiZWZvcmUgSSBkaXZlIGFueSBkZWVwZXIsIEkgbmVlZCB0byB0YWtlIGEgc3RlcCBiYWNrIGFuZCBleGFtaW5lIHRoZSBmb3VuZGF0aW9uLiBJdCdzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIG9mIGBaT05FX0RFVklDRWAuIFdoYXQncyB0aGlzIHBhcnRpY3VsYXIgcGllY2UgcmVseWluZyBvbiBhdCBpdHMgbW9zdCBiYXNpYyBsZXZlbD8gV2hhdCBhcmUgdGhlIHVuZGVybHlpbmcgY29tcG9uZW50cyBvciBjb25maWd1cmF0aW9ucyB0aGF0ICppdCogcmVxdWlyZXMgdG8gZnVuY3Rpb24gY29ycmVjdGx5PyBJIG5lZWQgdG8gYnVpbGQgdXAgYSBjbGVhciBtZW50YWwgbWFwIG9mIHdoYXQgKnRoaXMqIGRlcGVuZHMgb24uIE5lZWQgdG8gZmluZCB0aGUga2V5IGRlcGVuZGVuY2llcywgbm90IGp1c3Qgd2hlcmUgaXQgdG91Y2hlcyBvdGhlciBjb2RlLCBidXQgd2hhdCB0aGUgYmVkcm9jayBpcywgYW5kIHdoYXQgdGhlIGRlcGVuZGVuY2llcyBvZiBUSEFUIGFyZS4gT25seSBvbmNlIEkgdHJ1bHkga25vdyBpdHMgZGVwZW5kZW5jaWVzIGNhbiBJIGJlIGNvbmZpZGVudCB0aGF0IEknbSBub3QgbWFraW5nIGFzc3VtcHRpb25zIGFuZCBJIGNhbiBiZWdpbiB0byB1bnJhdmVsIHRoaXMgcGFydGljdWxhciBpc3N1ZS4gR290dGEgY2hhc2UgZG93biBhbGwgdGhlIGJyYW5jaGVzIG9mIHJlbGlhbmNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjU1NywiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDA3OjQwOjU1LjI0NzgxMjcyNFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQyOTM1MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFpPTkVfREVWSUNFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz0xMjMxPWNvbmZpZyBaT05FX0RNQTMyXFxuLS1cXG5tbS9LY29uZmlnLTEyMzUtXFxubW0vS2NvbmZpZzoxMjM2OmNvbmZpZyBaT05FX0RFVklDRVxcbm1tL0tjb25maWctMTIzNy1cXHRib29sIFxcXCJEZXZpY2UgbWVtb3J5IChwbWVtLCBITU0sIGV0Yy4uLikgaG90cGx1ZyBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QwNzo0MDo1NS4yOTIxMTQ3ODNaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE3NDg1Mzc4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTWF6ZSoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJ20gZ29pbmcgdG8ganVtcCBpbnRvIHRoZSBgbW0vS2NvbmZpZ2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJJ20gYWltaW5nIGZvciBhcm91bmQgbGluZSAxMjM2LiBHaXZlbiBteSBmYW1pbGlhcml0eSB3aXRoIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0sIEkgc3VzcGVjdCB0aGF0IHNlY3Rpb24gbWlnaHQgaG9sZCBjbHVlcyBhYm91dCBhIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9uIG9yIHJlbGF0ZWQgZGVwZW5kZW5jaWVzIEkndmUgYmVlbiBjb25zaWRlcmluZy4gSSdtIGV4cGVjdGluZyB0byBmaW5kIGluZm9ybWF0aW9uIHBlcnRhaW5pbmcgdG8gc29tZSBtZW1vcnkgbWFuYWdlbWVudCBmZWF0dXJlIG9yIGEgY29uZmlndXJhdGlvbiBrbm9iIHRoYXQgbWlnaHQgYmUgY3J1Y2lhbCB0byBzb21lIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiBJJ20gd29ya2luZyB0aHJvdWdoLCBvciBwb3NzaWJseSBldmVuIGRlYnVnZ2luZy4gTGV0J3Mgc2VlIHdoYXQgdGhlIEtjb25maWcgaGFzIHRvIHNheSFcblxuXG4iLCJJbnB1dFRva2VucyI6MTY4ODAsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QwNzo0MDo1OC40NjY5NzA2M1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzQ1MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMjMwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMjMwOlxcdFxcbjEyMzE6XFx0Y29uZmlnIFpPTkVfRE1BMzJcXG4xMjMyOlxcdFxcdGJvb2wgXFxcIlN1cHBvcnQgRE1BMzIgem9uZVxcXCIgaWYgQVJDSF9IQVNfWk9ORV9ETUFfU0VUXFxuMTIzMzpcXHRcXHRkZXBlbmRzIG9uICFYODZfMzJcXG4xMjM0OlxcdFxcdGRlZmF1bHQgeSBpZiBBUk02NFxcbjEyMzU6XFx0XFxuMTIzNjpcXHRjb25maWcgWk9ORV9ERVZJQ0VcXG4xMjM3OlxcdFxcdGJvb2wgXFxcIkRldmljZSBtZW1vcnkgKHBtZW0sIEhNTSwgZXRjLi4uKSBob3RwbHVnIHN1cHBvcnRcXFwiXFxuMTIzODpcXHRcXHRkZXBlbmRzIG9uIE1FTU9SWV9IT1RQTFVHXFxuMTIzOTpcXHRcXHRkZXBlbmRzIG9uIE1FTU9SWV9IT1RSRU1PVkVcXG4xMjQwOlxcdFxcdGRlcGVuZHMgb24gU1BBUlNFTUVNX1ZNRU1NQVBcXG4xMjQxOlxcdFxcdHNlbGVjdCBYQVJSQVlfTVVMVElcXG4xMjQyOlxcdFxcbjEyNDM6XFx0XFx0aGVscFxcbjEyNDQ6XFx0XFx0ICBEZXZpY2UgbWVtb3J5IGhvdHBsdWcgc3VwcG9ydCBhbGxvd3MgZm9yIGVzdGFibGlzaGluZyBwbWVtLFxcbjEyNDU6XFx0XFx0ICBvciBvdGhlciBkZXZpY2UgZHJpdmVyIGRpc2NvdmVyZWQgbWVtb3J5IHJlZ2lvbnMsIGluIHRoZVxcbjEyNDY6XFx0XFx0ICBtZW1tYXAuIFRoaXMgYWxsb3dzIHBmbl90b19wYWdlKCkgbG9va3VwcyBvZiBvdGhlcndpc2VcXG4xMjQ3OlxcdFxcdCAgXFxcImRldmljZS1waHlzaWNhbFxcXCIgYWRkcmVzc2VzIHdoaWNoIGlzIG5lZWRlZCBmb3IgREFYLCBQQ0lfUDJQRE1BLCBhbmRcXG4xMjQ4OlxcdFxcdCAgREVWSUNFX1BSSVZBVEUgZmVhdHVyZXMgYW1vbmcgb3RoZXJzLlxcbjEyNDk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDA3OjQwOjU4LjQ2NzE0ODAyWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxMDAyNDIzMjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRW5hYmxpbmcgWm9uZSBEZXZpY2VzIGFuZCBBc3NvY2lhdGVkIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBaT05FX0RFVklDRWAsIGFuZCBpdCdzIGNsZWFyIHRoYXQgaXQncyByZWxpYW50IG9uIGEgZmV3IGtleSBidWlsZGluZyBibG9ja3M6IGBNRU1PUllfSE9UUExVR2AsIGBNRU1PUllfSE9UUkVNT1ZFYCwgYW5kIGBTUEFSU0VNRU1fVk1FTU1BUGAuIE1ha2VzIHNlbnNlIOKAkyB0aGUgd2hvbGUgcG9pbnQgaXMgbWFuYWdpbmcgZGV2aWNlIG1lbW9yeSBkeW5hbWljYWxseS4gQWxyaWdodCwgbGV0J3MgZW5hYmxlIGBaT05FX0RFVklDRWAuIE5vdywgdGhlIG5leHQgbG9naWNhbCBxdWVzdGlvbiBpcywgd2hhdCBjYW4gYWN0dWFsbHkgKnVzZSogaXQ/IFdlIG5lZWQgYSBkcml2ZXIgb3IgZmVhdHVyZSB0aGF0IGludGVncmF0ZXMgd2l0aCBpdCB0byByZWFsbHkgdGVzdCBpdHMgZnVuY3Rpb25hbGl0eS5cblxuVGhpbmtpbmcgdGhyb3VnaCBwb3RlbnRpYWwgY2FuZGlkYXRlcy4uLiBgRlNfREFYYCBpcyBhIHN0cm9uZyBjb250ZW5kZXIg4oCTIERpcmVjdCBBY2Nlc3Mgc3RvcmFnZSBzb3VuZHMgbGlrZSBpdCB3b3VsZCBwbGF5IG5pY2VseS4gVGhlbiB0aGVyZSdzIGBQQ0lfUDJQRE1BYCwgdGhhdCBjb3VsZCBiZSByZWxhdGVkIHRvIG1lbW9yeSBtYXBwZWQgaW50byB0aGUgUENJIHNwYWNlLCBgREVWSUNFX1BSSVZBVEVgLCB3aGljaCBpcyBhIGNvbW1vbiBob29rLCBvciBgTlZESU1NX1BGTmAuIFRob3NlIGFsbCBoYXZlIGEgZ29vZCBjaGFuY2Ugb2YgYmVpbmcgcmVsZXZhbnQuIEJlZm9yZSBJIGdldCB0b28gZGVlcCBpbnRvIGFueSBvZiB0aG9zZSwgbGV0J3MganVzdCBtYWtlIHN1cmUgdGhlcmUncyBhbiBlYXN5IHRyaWdnZXIgdG8gdGVzdCB0aGlzIG9uIHRoZSBsb3dlciBsZXZlbCwgYW5kIGZvciB0aGF0IEknbGwgbmVlZCB0byBjaGVjayBgVEVTVF9ITU1gIGluIGBsaWIvS2NvbmZpZy5kZWJ1Z2AuIEl0J3MgbGlrZWx5IHRoYXQgYSBzbWFsbCBkZWJ1Z2dpbmcgdGVzdCBpcyBhdmFpbGFibGUgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3Mzk0LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMDc6NDE6MDIuNTY3Mzk0ODQ1WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjQxNDA5MTE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBURVNUX0hNTVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJsaWIvS2NvbmZpZy5kZWJ1Zz0zMzQ2PWNvbmZpZyBURVNUX01FTUlOSVRcXG4tLVxcbmxpYi9LY29uZmlnLmRlYnVnLTMzNTMtXFxubGliL0tjb25maWcuZGVidWc6MzM1NDpjb25maWcgVEVTVF9ITU1cXG5saWIvS2NvbmZpZy5kZWJ1Zy0zMzU1LVxcdHRyaXN0YXRlIFxcXCJUZXN0IEhNTSAoSGV0ZXJvZ2VuZW91cyBNZW1vcnkgTWFuYWdlbWVudClcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDA3OjQxOjA0LjIwODgxMDA2M1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNzcxMzU5NDQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gRGVidWdnaW5nIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgc29tZXRoaW5nIHNwZWNpZmljIGFib3V0IHRoZSBkZWJ1Z2dpbmcgY29uZmlndXJhdGlvbiBmb3IgdGhpcyBwcm9qZWN0LiBNeSBpbnR1aXRpb24gdGVsbHMgbWUgdGhhdCB0aGUgcmVsZXZhbnQgc2V0dGluZ3MgYXJlIGxpa2VseSBsb2NhdGVkIHdpdGhpbiB0aGUgYEtjb25maWcuZGVidWdgIGZpbGUsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAzMzU0LiBJJ2xsIHRha2UgYSBsb29rIGF0IHRoYXQgZmlsZSBsb2NhdGlvbiBkaXJlY3RseS4gTGV0J3Mgc2VlIHdoYXQgc2VjcmV0cyBpdCBob2xkcy4gSG9wZWZ1bGx5LCB0aGlzIHNlY3Rpb24gd2lsbCBzaGVkIHNvbWUgbGlnaHQgb24gdGhlIGNvbmZpZ3VyYXRpb24gSSdtIHRyeWluZyB0byBkZWNpcGhlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc4ODEsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QwNzo0MTowNi45ODAxNzM4MTVaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA0NjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImxpYi9LY29uZmlnLmRlYnVnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMzNTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjMzNTA6XFx0XFx0ICBUaGlzIGNhbiBiZSB1c2VmdWwgdG8gdGVzdCBpbml0X29uX2FsbG9jIGFuZCBpbml0X29uX2ZyZWUgZmVhdHVyZXMuXFxuMzM1MTpcXHRcXG4zMzUyOlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4zMzUzOlxcdFxcbjMzNTQ6XFx0Y29uZmlnIFRFU1RfSE1NXFxuMzM1NTpcXHRcXHR0cmlzdGF0ZSBcXFwiVGVzdCBITU0gKEhldGVyb2dlbmVvdXMgTWVtb3J5IE1hbmFnZW1lbnQpXFxcIlxcbjMzNTY6XFx0XFx0ZGVwZW5kcyBvbiBUUkFOU1BBUkVOVF9IVUdFUEFHRVxcbjMzNTc6XFx0XFx0ZGVwZW5kcyBvbiBERVZJQ0VfUFJJVkFURVxcbjMzNTg6XFx0XFx0c2VsZWN0IEhNTV9NSVJST1JcXG4zMzU5OlxcdFxcdHNlbGVjdCBNTVVfTk9USUZJRVJcXG4zMzYwOlxcdFxcdGhlbHBcXG4zMzYxOlxcdFxcdCAgVGhpcyBpcyBhIHBzZXVkbyBkZXZpY2UgZHJpdmVyIHNvbGVseSBmb3IgdGVzdGluZyBITU0uXFxuMzM2MjpcXHRcXHQgIFNheSBNIGhlcmUgaWYgeW91IHdhbnQgdG8gYnVpbGQgdGhlIEhNTSB0ZXN0IG1vZHVsZS5cXG4zMzYzOlxcdFxcdCAgRG9pbmcgc28gd2lsbCBhbGxvdyB5b3UgdG8gcnVuIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3Qvdm0vaG1tLXRlc3RzLlxcbjMzNjQ6XFx0XFxuMzM2NTpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuMzM2NjpcXHRcXG4zMzY3OlxcdGNvbmZpZyBURVNUX0ZSRUVfUEFHRVNcXG4zMzY4OlxcdFxcdHRyaXN0YXRlIFxcXCJUZXN0IGZyZWVpbmcgcGFnZXNcXFwiXFxuMzM2OTpcXHRcXHRoZWxwXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDA3OjQxOjA2Ljk4MDM4MDU4NloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDgxNjcwMTM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IFJlYXNvbmluZyBvbiB0aGUgVEVTVF9ITU0gRGVwZW5kZW5jeSBDaGFpbioqXG5cbk9rYXksIGhlcmUncyBob3cgSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcy4gYFRFU1RfSE1NYCBoYXMgYSBkaXJlY3QgZGVwZW5kZW5jeSBvbiBgREVWSUNFX1BSSVZBVEVgLiBgREVWSUNFX1BSSVZBVEVgLCBpbiB0dXJuLCByZWxpZXMgb24gYFpPTkVfREVWSUNFYC4gU28sIHdlICpjb3VsZCoganVzdCBlbmFibGUgYWxsIHRocmVlOiBgVEVTVF9ITU1gLCBgREVWSUNFX1BSSVZBVEVgLCBhbmQgYFpPTkVfREVWSUNFYC4gVGhhdCdzIHRoZSBzdHJhaWdodGZvcndhcmQgYXBwcm9hY2guXG5cbkJ1dCwgaG9sZCBvbi4uLiB0aGUgcmVhbCBxdWVzdGlvbiBpcyB3aGV0aGVyIGBURVNUX0hNTWAgaXMgYWN0dWFsbHkgKmV4cGxvaXRhYmxlKiB2aWEgc3l6a2FsbGVyLiBEb2VzIHN5emthbGxlciBoYXZlIGEgcGF0aCB0byByZWFjaCBpdD8gU3l6a2FsbGVyIGNhbiBsb2FkIG1vZHVsZXMgYW5kIGl0IGNhbiBpbnRlcmFjdCB3aXRoIGAvZGV2L2htbV9kbWlycm9yKmAgZGV2aWNlcyBpZiB0aGV5J3JlIGJ1aWx0LWluLiBUaGF0J3MgdGhlIGNydWNpYWwgbGluay4gU28sIEkgbmVlZCB0byBjaGVjayBpZiBgVEVTVF9ITU1gIGFjdHVhbGx5ICpjcmVhdGVzKiBhIGRldmljZSBub2RlLiBUaGF0J3MgdGhlIGx5bmNocGluLiBUaGF0J3Mgd2hhdCBkZXRlcm1pbmVzIGlmIHN5emthbGxlciBjYW4gcmVhbGlzdGljYWxseSBiZSB1c2VkIHRvIHRlc3QgaXQuIEkgbmVlZCB0byBjb25maXJtIGlmIGl0IGhhcyBhIGRyaXZlciBvciBkZXZpY2UgYXNzb2NpYXRlZCB3aXRoIGl0LCBiZWZvcmUgc3BlbmRpbmcgbW9yZSB0aW1lIG9uIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODM0OSwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDA3OjQxOjExLjA2MjA1NDIzMVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU2MDM0NjM2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJobW1fZG1pcnJvclwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJsaWIvdGVzdF9obW0uYz00MjU9c3RhdGljIGludCBkbWlycm9yX2RvX3JlYWQoc3RydWN0IGRtaXJyb3IgKmRtaXJyb3IsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXFxuLS1cXG5saWIvdGVzdF9obW0uYy00NTAtXFxubGliL3Rlc3RfaG1tLmM6NDUxOnN0YXRpYyBpbnQgZG1pcnJvcl9yZWFkKHN0cnVjdCBkbWlycm9yICpkbWlycm9yLCBzdHJ1Y3QgaG1tX2RtaXJyb3JfY21kICpjbWQpXFxubGliL3Rlc3RfaG1tLmMtNDUyLXtcXG4tLVxcbmxpYi90ZXN0X2htbS5jPTQ5MT1zdGF0aWMgaW50IGRtaXJyb3JfZG9fd3JpdGUoc3RydWN0IGRtaXJyb3IgKmRtaXJyb3IsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXFxuLS1cXG5saWIvdGVzdF9obW0uYy01MTYtXFxubGliL3Rlc3RfaG1tLmM6NTE3OnN0YXRpYyBpbnQgZG1pcnJvcl93cml0ZShzdHJ1Y3QgZG1pcnJvciAqZG1pcnJvciwgc3RydWN0IGhtbV9kbWlycm9yX2NtZCAqY21kKVxcbmxpYi90ZXN0X2htbS5jLTUxOC17XFxuLS1cXG5saWIvdGVzdF9obW0uYz01NTg9c3RhdGljIGludCBkbWlycm9yX2FsbG9jYXRlX2NodW5rKHN0cnVjdCBkbWlycm9yX2RldmljZSAqbWRldmljZSxcXG4tLVxcbmxpYi90ZXN0X2htbS5jLTU3NS1cXHRcXHRyZXMgPSByZXF1ZXN0X2ZyZWVfbWVtX3JlZ2lvbihcXHUwMDI2aW9tZW1fcmVzb3VyY2UsIERFVk1FTV9DSFVOS19TSVpFLFxcbmxpYi90ZXN0X2htbS5jOjU3NjpcXHRcXHRcXHRcXHRcXHQgICAgICBcXFwiaG1tX2RtaXJyb3JcXFwiKTtcXG5saWIvdGVzdF9obW0uYy01NzctXFx0XFx0aWYgKElTX0VSUl9PUl9OVUxMKHJlcykpXFxuLS1cXG5saWIvdGVzdF9obW0uYz05NDc9c3RhdGljIGludCBkbWlycm9yX2V4Y2x1c2l2ZShzdHJ1Y3QgZG1pcnJvciAqZG1pcnJvcixcXG5saWIvdGVzdF9obW0uYzo5NDg6XFx0XFx0XFx0ICAgICBzdHJ1Y3QgaG1tX2RtaXJyb3JfY21kICpjbWQpXFxubGliL3Rlc3RfaG1tLmMtOTQ5LXtcXG4tLVxcbmxpYi90ZXN0X2htbS5jPTExMjA9c3RhdGljIGludCBkbWlycm9yX21pZ3JhdGVfdG9fc3lzdGVtKHN0cnVjdCBkbWlycm9yICpkbWlycm9yLFxcbmxpYi90ZXN0X2htbS5jOjExMjE6XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgaG1tX2RtaXJyb3JfY21kICpjbWQpXFxubGliL3Rlc3RfaG1tLmMtMTEyMi17XFxuLS1cXG5saWIvdGVzdF9obW0uYz0xMTg5PXN0YXRpYyBpbnQgZG1pcnJvcl9taWdyYXRlX3RvX2RldmljZShzdHJ1Y3QgZG1pcnJvciAqZG1pcnJvcixcXG5saWIvdGVzdF9obW0uYzoxMTkwOlxcdFxcdFxcdFxcdHN0cnVjdCBobW1fZG1pcnJvcl9jbWQgKmNtZClcXG5saWIvdGVzdF9obW0uYy0xMTkxLXtcXG4tLVxcbmxpYi90ZXN0X2htbS5jPTE0MDk9c3RhdGljIGludCBkbWlycm9yX3NuYXBzaG90KHN0cnVjdCBkbWlycm9yICpkbWlycm9yLFxcbmxpYi90ZXN0X2htbS5jOjE0MTA6XFx0XFx0XFx0ICAgIHN0cnVjdCBobW1fZG1pcnJvcl9jbWQgKmNtZClcXG5saWIvdGVzdF9obW0uYy0xNDExLXtcXG4tLVxcbmxpYi90ZXN0X2htbS5jPTE1MTM9c3RhdGljIGxvbmcgZG1pcnJvcl9mb3BzX3VubG9ja2VkX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLFxcbi0tXFxubGliL3Rlc3RfaG1tLmMtMTUxNy1cXHR2b2lkIF9fdXNlciAqdWFyZyA9ICh2b2lkIF9fdXNlciAqKWFyZztcXG5saWIvdGVzdF9obW0uYzoxNTE4OlxcdHN0cnVjdCBobW1fZG1pcnJvcl9jbWQgY21kO1xcbmxpYi90ZXN0X2htbS5jLTE1MTktXFx0c3RydWN0IGRtaXJyb3IgKmRtaXJyb3I7XFxuLS1cXG5saWIvdGVzdF9obW0uYz0xNzc5PXN0YXRpYyBpbnQgZG1pcnJvcl9kZXZpY2VfaW5pdChzdHJ1Y3QgZG1pcnJvcl9kZXZpY2UgKm1kZXZpY2UsIGludCBpZClcXG4tLVxcbmxpYi90ZXN0X2htbS5jLTE3OTQtXFxubGliL3Rlc3RfaG1tLmM6MTc5NTpcXHRyZXQgPSBkZXZfc2V0X25hbWUoXFx1MDAyNm1kZXZpY2UtXFx1MDAzZWRldmljZSwgXFxcImhtbV9kbWlycm9yJXVcXFwiLCBpZCk7XFxubGliL3Rlc3RfaG1tLmMtMTc5Ni1cXHRpZiAocmV0KVxcbi0tXFxubGliL3Rlc3RfaG1tLmM9MTgxNT1zdGF0aWMgdm9pZCBkbWlycm9yX2RldmljZV9yZW1vdmUoc3RydWN0IGRtaXJyb3JfZGV2aWNlICptZGV2aWNlKVxcbi0tXFxubGliL3Rlc3RfaG1tLmMtMTgyMC1cXG5saWIvdGVzdF9obW0uYzoxODIxOnN0YXRpYyBpbnQgX19pbml0IGhtbV9kbWlycm9yX2luaXQodm9pZClcXG5saWIvdGVzdF9obW0uYy0xODIyLXtcXG4tLVxcbmxpYi90ZXN0X2htbS5jLTE4NTktXFxubGliL3Rlc3RfaG1tLmM6MTg2MDpzdGF0aWMgdm9pZCBfX2V4aXQgaG1tX2RtaXJyb3JfZXhpdCh2b2lkKVxcbmxpYi90ZXN0X2htbS5jLTE4NjEte1xcbi0tXFxubGliL3Rlc3RfaG1tLmMtMTg2OS1cXG5saWIvdGVzdF9obW0uYzoxODcwOm1vZHVsZV9pbml0KGhtbV9kbWlycm9yX2luaXQpO1xcbmxpYi90ZXN0X2htbS5jOjE4NzE6bW9kdWxlX2V4aXQoaG1tX2RtaXJyb3JfZXhpdCk7XFxubGliL3Rlc3RfaG1tLmMtMTg3Mi1NT0RVTEVfREVTQ1JJUFRJT04oXFxcIkhNTSAoSGV0ZXJvZ2VuZW91cyBNZW1vcnkgTWFuYWdlbWVudCkgdGVzdCBtb2R1bGVcXFwiKTtcXG4tLVxcbmxpYi90ZXN0X2htbV91YXBpLmgtMjItICovXFxubGliL3Rlc3RfaG1tX3VhcGkuaDoyMzpzdHJ1Y3QgaG1tX2RtaXJyb3JfY21kIHtcXG5saWIvdGVzdF9obW1fdWFwaS5oLTI0LVxcdF9fdTY0XFx0XFx0YWRkcjtcXG4tLVxcbmxpYi90ZXN0X2htbV91YXBpLmgtMzEtLyogRXhwb3NlIHRoZSBhZGRyZXNzIHNwYWNlIG9mIHRoZSBjYWxsaW5nIHByb2Nlc3MgdGhyb3VnaCBobW0gZGV2aWNlIGZpbGUgKi9cXG5saWIvdGVzdF9obW1fdWFwaS5oOjMyOiNkZWZpbmUgSE1NX0RNSVJST1JfUkVBRFxcdFxcdF9JT1dSKCdIJywgMHgwMCwgc3RydWN0IGhtbV9kbWlycm9yX2NtZClcXG5saWIvdGVzdF9obW1fdWFwaS5oOjMzOiNkZWZpbmUgSE1NX0RNSVJST1JfV1JJVEVcXHRcXHRfSU9XUignSCcsIDB4MDEsIHN0cnVjdCBobW1fZG1pcnJvcl9jbWQpXFxubGliL3Rlc3RfaG1tX3VhcGkuaDozNDojZGVmaW5lIEhNTV9ETUlSUk9SX01JR1JBVEVfVE9fREVWXFx0X0lPV1IoJ0gnLCAweDAyLCBzdHJ1Y3QgaG1tX2RtaXJyb3JfY21kKVxcbmxpYi90ZXN0X2htbV91YXBpLmg6MzU6I2RlZmluZSBITU1fRE1JUlJPUl9NSUdSQVRFX1RPX1NZU1xcdF9JT1dSKCdIJywgMHgwMywgc3RydWN0IGhtbV9kbWlycm9yX2NtZClcXG5saWIvdGVzdF9obW1fdWFwaS5oOjM2OiNkZWZpbmUgSE1NX0RNSVJST1JfU05BUFNIT1RcXHRcXHRfSU9XUignSCcsIDB4MDQsIHN0cnVjdCBobW1fZG1pcnJvcl9jbWQpXFxubGliL3Rlc3RfaG1tX3VhcGkuaDozNzojZGVmaW5lIEhNTV9ETUlSUk9SX0VYQ0xVU0lWRVxcdFxcdF9JT1dSKCdIJywgMHgwNSwgc3RydWN0IGhtbV9kbWlycm9yX2NtZClcXG5saWIvdGVzdF9obW1fdWFwaS5oOjM4OiNkZWZpbmUgSE1NX0RNSVJST1JfQ0hFQ0tfRVhDTFVTSVZFXFx0X0lPV1IoJ0gnLCAweDA2LCBzdHJ1Y3QgaG1tX2RtaXJyb3JfY21kKVxcbmxpYi90ZXN0X2htbV91YXBpLmg6Mzk6I2RlZmluZSBITU1fRE1JUlJPUl9SRUxFQVNFXFx0XFx0X0lPV1IoJ0gnLCAweDA3LCBzdHJ1Y3QgaG1tX2RtaXJyb3JfY21kKVxcbmxpYi90ZXN0X2htbV91YXBpLmg6NDA6I2RlZmluZSBITU1fRE1JUlJPUl9GTEFHU1xcdFxcdF9JT1dSKCdIJywgMHgwOCwgc3RydWN0IGhtbV9kbWlycm9yX2NtZClcXG5saWIvdGVzdF9obW1fdWFwaS5oLTQxLVxcbi0tXFxubGliL3Rlc3RfaG1tX3VhcGkuaC00NC0vKlxcbmxpYi90ZXN0X2htbV91YXBpLmg6NDU6ICogVmFsdWVzIHJldHVybmVkIGluIGhtbV9kbWlycm9yX2NtZC5wdHIgZm9yIEhNTV9ETUlSUk9SX1NOQVBTSE9ULlxcbmxpYi90ZXN0X2htbV91YXBpLmgtNDYtICogSE1NX0RNSVJST1JfUFJPVF9FUlJPUjogbm8gdmFsaWQgbWlycm9yIFBURSBmb3IgdGhpcyBwYWdlXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYz0xMjU9c3RhdGljIGludCBobW1fb3BlbihpbnQgdW5pdClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jLTEyOS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYzoxMzA6XFx0c25wcmludGYocGF0aG5hbWUsIHNpemVvZihwYXRobmFtZSksIFxcXCIvZGV2L2htbV9kbWlycm9yJWRcXFwiLCB1bml0KTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy0xMzEtXFx0ZmQgPSBvcGVuKHBhdGhuYW1lLCBPX1JEV1IsIDApO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmM9MTc1PUZJWFRVUkVfVEVBUkRPV04oaG1tMilcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jLTE4Ni1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYzoxODc6c3RhdGljIGludCBobW1fZG1pcnJvcl9jbWQoaW50IGZkLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jLTE4OC1cXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nIHJlcXVlc3QsXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy0xOTEte1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jOjE5MjpcXHRzdHJ1Y3QgaG1tX2RtaXJyb3JfY21kIGNtZDtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy0xOTMtXFx0aW50IHJldDtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jPTI3OT1zdGF0aWMgaW50IGhtbV9taWdyYXRlX3N5c190b19kZXYoaW50IGZkLFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMtMjgyLXtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYzoyODM6XFx0cmV0dXJuIGhtbV9kbWlycm9yX2NtZChmZCwgSE1NX0RNSVJST1JfTUlHUkFURV9UT19ERVYsIGJ1ZmZlciwgbnBhZ2VzKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy0yODQtfVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmM9Mjg2PXN0YXRpYyBpbnQgaG1tX21pZ3JhdGVfZGV2X3RvX3N5cyhpbnQgZmQsXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy0yODkte1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jOjI5MDpcXHRyZXR1cm4gaG1tX2RtaXJyb3JfY21kKGZkLCBITU1fRE1JUlJPUl9NSUdSQVRFX1RPX1NZUywgYnVmZmVyLCBucGFnZXMpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jLTI5MS19XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYz0zMDM9VEVTVF9GKGhtbSwgYW5vbl9yZWFkKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMtMzQ3LVxcdC8qIFNpbXVsYXRlIGEgZGV2aWNlIHJlYWRpbmcgc3lzdGVtIG1lbW9yeS4gKi9cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYzozNDg6XFx0cmV0ID0gaG1tX2RtaXJyb3JfY21kKHNlbGYtXFx1MDAzZWZkLCBITU1fRE1JUlJPUl9SRUFELCBidWZmZXIsIG5wYWdlcyk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMtMzQ5LVxcdEFTU0VSVF9FUShyZXQsIDApO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmM9MzY3PVRFU1RfRihobW0sIGFub25fcmVhZF9wcm90KVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMtNDA2LVxcdC8qIFNpbXVsYXRlIGEgZGV2aWNlIHJlYWRpbmcgc3lzdGVtIG1lbW9yeS4gKi9cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYzo0MDc6XFx0cmV0ID0gaG1tX2RtaXJyb3JfY21kKHNlbGYtXFx1MDAzZWZkLCBITU1fRE1JUlJPUl9SRUFELCBidWZmZXIsIG5wYWdlcyk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMtNDA4LVxcdEFTU0VSVF9FUShyZXQsIC1FRkFVTFQpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmM9NDI2PVRFU1RfRihobW0sIGFub25fd3JpdGUpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy00NTctXFx0LyogU2ltdWxhdGUgYSBkZXZpY2Ugd3JpdGluZyBzeXN0ZW0gbWVtb3J5LiAqL1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jOjQ1ODpcXHRyZXQgPSBobW1fZG1pcnJvcl9jbWQoc2VsZi1cXHUwMDNlZmQsIEhNTV9ETUlSUk9SX1dSSVRFLCBidWZmZXIsIG5wYWdlcyk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMtNDU5LVxcdEFTU0VSVF9FUShyZXQsIDApO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmM9NDc0PVRFU1RfRihobW0sIGFub25fd3JpdGVfcHJvdClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jLTUwMS1cXHQvKiBTaW11bGF0ZSBhIGRldmljZSByZWFkaW5nIGEgemVybyBwYWdlIG9mIG1lbW9yeS4gKi9cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYzo1MDI6XFx0cmV0ID0gaG1tX2RtaXJyb3JfY21kKHNlbGYtXFx1MDAzZWZkLCBITU1fRE1JUlJPUl9SRUFELCBidWZmZXIsIDEpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jLTUwMy1cXHRBU1NFUlRfRVEocmV0LCAwKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jLTUxMS1cXHQvKiBTaW11bGF0ZSBhIGRldmljZSB3cml0aW5nIHN5c3RlbSBtZW1vcnkuICovXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmM6NTEyOlxcdHJldCA9IGhtbV9kbWlycm9yX2NtZChzZWxmLVxcdTAwM2VmZCwgSE1NX0RNSVJST1JfV1JJVEUsIGJ1ZmZlciwgbnBhZ2VzKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy01MTMtXFx0QVNTRVJUX0VRKHJldCwgLUVQRVJNKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jLTUyMy1cXHQvKiBTaW11bGF0ZSBhIGRldmljZSB3cml0aW5nIHN5c3RlbSBtZW1vcnkuICovXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmM6NTI0OlxcdHJldCA9IGhtbV9kbWlycm9yX2NtZChzZWxmLVxcdTAwM2VmZCwgSE1NX0RNSVJST1JfV1JJVEUsIGJ1ZmZlciwgbnBhZ2VzKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy01MjUtXFx0QVNTRVJUX0VRKHJldCwgMCk7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYz01NDI9VEVTVF9GKGhtbSwgYW5vbl93cml0ZV9jaGlsZClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jLTYyNy1cXHRcXHRcXHQvKiBTaW11bGF0ZSBhIGRldmljZSB3cml0aW5nIHN5c3RlbSBtZW1vcnkuICovXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmM6NjI4OlxcdFxcdFxcdHJldCA9IGhtbV9kbWlycm9yX2NtZChjaGlsZF9mZCwgSE1NX0RNSVJST1JfV1JJVEUsIGJ1ZmZlciwgbnBhZ2VzKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy02MjktXFx0XFx0XFx0QVNTRVJUX0VRKHJldCwgMCk7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYz02NDk9VEVTVF9GKGhtbSwgYW5vbl93cml0ZV9jaGlsZF9zaGFyZWQpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy03MDktXFx0LyogU2ltdWxhdGUgYSBkZXZpY2Ugd3JpdGluZyBzeXN0ZW0gbWVtb3J5LiAqL1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jOjcxMDpcXHRyZXQgPSBobW1fZG1pcnJvcl9jbWQoY2hpbGRfZmQsIEhNTV9ETUlSUk9SX1dSSVRFLCBidWZmZXIsIG5wYWdlcyk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMtNzExLVxcdEFTU0VSVF9FUShyZXQsIDApO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmM9NzI2PVRFU1RfRihobW0sIGFub25fd3JpdGVfaHVnZSlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jLTc2NS1cXHQvKiBTaW11bGF0ZSBhIGRldmljZSB3cml0aW5nIHN5c3RlbSBtZW1vcnkuICovXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmM6NzY2OlxcdHJldCA9IGhtbV9kbWlycm9yX2NtZChzZWxmLVxcdTAwM2VmZCwgSE1NX0RNSVJST1JfV1JJVEUsIGJ1ZmZlciwgbnBhZ2VzKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy03NjctXFx0QVNTRVJUX0VRKHJldCwgMCk7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYz03ODI9VEVTVF9GKGhtbSwgYW5vbl93cml0ZV9odWdldGxiZnMpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy04MTktXFx0LyogU2ltdWxhdGUgYSBkZXZpY2Ugd3JpdGluZyBzeXN0ZW0gbWVtb3J5LiAqL1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jOjgyMDpcXHRyZXQgPSBobW1fZG1pcnJvcl9jbWQoc2VsZi1cXHUwMDNlZmQsIEhNTV9ETUlSUk9SX1dSSVRFLCBidWZmZXIsIG5wYWdlcyk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMtODIxLVxcdEFTU0VSVF9FUShyZXQsIDApO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmM9ODM3PVRFU1RfRihobW0sIGZpbGVfcmVhZClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jLTg3Ni1cXHQvKiBTaW11bGF0ZSBhIGRldmljZSByZWFkaW5nIHN5c3RlbSBtZW1vcnkuICovXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmM6ODc3OlxcdHJldCA9IGhtbV9kbWlycm9yX2NtZChzZWxmLVxcdTAwM2VmZCwgSE1NX0RNSVJST1JfUkVBRCwgYnVmZmVyLCBucGFnZXMpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jLTg3OC1cXHRBU1NFUlRfRVEocmV0LCAwKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jPTg5Mj1URVNUX0YoaG1tLCBmaWxlX3dyaXRlKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMtOTI4LVxcdC8qIFNpbXVsYXRlIGEgZGV2aWNlIHdyaXRpbmcgc3lzdGVtIG1lbW9yeS4gKi9cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYzo5Mjk6XFx0cmV0ID0gaG1tX2RtaXJyb3JfY21kKHNlbGYtXFx1MDAzZWZkLCBITU1fRE1JUlJPUl9XUklURSwgYnVmZmVyLCBucGFnZXMpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jLTkzMC1cXHRBU1NFUlRfRVEocmV0LCAwKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jPTExMDQ9VEVTVF9GKGhtbSwgbWlncmF0ZV9yZWxlYXNlKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMtMTE0Mi1cXHQvKiBSZWxlYXNlIGRldmljZSBtZW1vcnkuICovXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmM6MTE0MzpcXHRyZXQgPSBobW1fZG1pcnJvcl9jbWQoc2VsZi1cXHUwMDNlZmQsIEhNTV9ETUlSUk9SX1JFTEVBU0UsIGJ1ZmZlciwgbnBhZ2VzKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy0xMTQ0LVxcdEFTU0VSVF9FUShyZXQsIDApO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmM9MTM0Mj1URVNUX0YoaG1tLCBhbm9uX3JlYWRfbXVsdGlwbGUpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy0xMzc1LVxcdFxcdC8qIFNpbXVsYXRlIGEgZGV2aWNlIHJlYWRpbmcgc3lzdGVtIG1lbW9yeS4gKi9cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYzoxMzc2OlxcdFxcdHJldCA9IGhtbV9kbWlycm9yX2NtZChzZWxmLVxcdTAwM2VmZCwgSE1NX0RNSVJST1JfUkVBRCwgYnVmZmVyLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jLTEzNzctXFx0XFx0XFx0XFx0ICAgICAgbnBhZ2VzKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jPTE0MDU9VEVTVF9GKGhtbSwgYW5vbl90ZWFyZG93bilcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jLTE0NDQtXFx0XFx0LyogU2ltdWxhdGUgYSBkZXZpY2UgcmVhZGluZyBzeXN0ZW0gbWVtb3J5LiAqL1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jOjE0NDU6XFx0XFx0cmMgPSBobW1fZG1pcnJvcl9jbWQoc2VsZi1cXHUwMDNlZmQsIEhNTV9ETUlSUk9SX1JFQUQsIGJ1ZmZlcixcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy0xNDQ2LVxcdFxcdFxcdFxcdCAgICAgbnBhZ2VzKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jPTE0NjY9VEVTVF9GKGhtbSwgbWl4ZWRtYXApXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy0xNDkzLVxcdC8qIFNpbXVsYXRlIGEgZGV2aWNlIHNuYXBzaG90dGluZyBDUFUgcGFnZXRhYmxlcy4gKi9cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYzoxNDk0OlxcdHJldCA9IGhtbV9kbWlycm9yX2NtZChzZWxmLVxcdTAwM2VmZCwgSE1NX0RNSVJST1JfU05BUFNIT1QsIGJ1ZmZlciwgbnBhZ2VzKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy0xNDk1LVxcdEFTU0VSVF9FUShyZXQsIDApO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmM9MTUwOD1URVNUX0YoaG1tMiwgc25hcHNob3QpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy0xNTgwLVxcdGJ1ZmZlci1cXHUwMDNlcHRyID0gcDtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYzoxNTgxOlxcdHJldCA9IGhtbV9kbWlycm9yX2NtZChzZWxmLVxcdTAwM2VmZDAsIEhNTV9ETUlSUk9SX1NOQVBTSE9ULCBidWZmZXIsIG5wYWdlcyk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMtMTU4Mi1cXHRBU1NFUlRfRVEocmV0LCAwKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jPTE2MTA9VEVTVF9GKGhtbSwgY29tcG91bmQpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy0xNjQ5LVxcdC8qIFNpbXVsYXRlIGEgZGV2aWNlIHNuYXBzaG90dGluZyBDUFUgcGFnZXRhYmxlcy4gKi9cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYzoxNjUwOlxcdHJldCA9IGhtbV9kbWlycm9yX2NtZChzZWxmLVxcdTAwM2VmZCwgSE1NX0RNSVJST1JfU05BUFNIT1QsIGJ1ZmZlciwgbnBhZ2VzKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy0xNjUxLVxcdEFTU0VSVF9FUShyZXQsIDApO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMtMTY3My1cXHQvKiBTaW11bGF0ZSBhIGRldmljZSBzbmFwc2hvdHRpbmcgQ1BVIHBhZ2V0YWJsZXMuICovXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmM6MTY3NDpcXHRyZXQgPSBobW1fZG1pcnJvcl9jbWQoc2VsZi1cXHUwMDNlZmQsIEhNTV9ETUlSUk9SX1NOQVBTSE9ULCBidWZmZXIsIG5wYWdlcyk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMtMTY3NS1cXHRBU1NFUlRfRVEocmV0LCAwKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jPTE2OTg9VEVTVF9GKGhtbTIsIGRvdWJsZV9tYXApXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy0xNzMzLVxcdC8qIFNpbXVsYXRlIGRldmljZSAwIHJlYWRpbmcgc3lzdGVtIG1lbW9yeS4gKi9cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYzoxNzM0OlxcdHJldCA9IGhtbV9kbWlycm9yX2NtZChzZWxmLVxcdTAwM2VmZDAsIEhNTV9ETUlSUk9SX1JFQUQsIGJ1ZmZlciwgbnBhZ2VzKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy0xNzM1LVxcdEFTU0VSVF9FUShyZXQsIDApO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMtMTc0My1cXHQvKiBTaW11bGF0ZSBkZXZpY2UgMSByZWFkaW5nIHN5c3RlbSBtZW1vcnkuICovXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmM6MTc0NDpcXHRyZXQgPSBobW1fZG1pcnJvcl9jbWQoc2VsZi1cXHUwMDNlZmQxLCBITU1fRE1JUlJPUl9SRUFELCBidWZmZXIsIG5wYWdlcyk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMtMTc0NS1cXHRBU1NFUlRfRVEocmV0LCAwKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jLTE3NTctXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmM6MTc1ODpcXHRyZXQgPSBobW1fZG1pcnJvcl9jbWQoc2VsZi1cXHUwMDNlZmQwLCBITU1fRE1JUlJPUl9SRUFELCBidWZmZXIsIG5wYWdlcyk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMtMTc1OS1cXHRBU1NFUlRfRVEocmV0LCAwKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jPTE3NzM9VEVTVF9GKGhtbSwgZXhjbHVzaXZlKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMtMTgwNC1cXHQvKiBNYXAgbWVtb3J5IGV4Y2x1c2l2ZWx5IGZvciBkZXZpY2UgYWNjZXNzLiAqL1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jOjE4MDU6XFx0cmV0ID0gaG1tX2RtaXJyb3JfY21kKHNlbGYtXFx1MDAzZWZkLCBITU1fRE1JUlJPUl9FWENMVVNJVkUsIGJ1ZmZlciwgbnBhZ2VzKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy0xODA2LVxcdEFTU0VSVF9FUShyZXQsIDApO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMtMTgyMC1cXHQvKiBDaGVjayBhdG9taWMgYWNjZXNzIHJldm9rZWQgKi9cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYzoxODIxOlxcdHJldCA9IGhtbV9kbWlycm9yX2NtZChzZWxmLVxcdTAwM2VmZCwgSE1NX0RNSVJST1JfQ0hFQ0tfRVhDTFVTSVZFLCBidWZmZXIsIG5wYWdlcyk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMtMTgyMi1cXHRBU1NFUlRfRVEocmV0LCAwKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jPTE4Mjc9VEVTVF9GKGhtbSwgZXhjbHVzaXZlX21wcm90ZWN0KVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMtMTg1OC1cXHQvKiBNYXAgbWVtb3J5IGV4Y2x1c2l2ZWx5IGZvciBkZXZpY2UgYWNjZXNzLiAqL1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jOjE4NTk6XFx0cmV0ID0gaG1tX2RtaXJyb3JfY21kKHNlbGYtXFx1MDAzZWZkLCBITU1fRE1JUlJPUl9FWENMVVNJVkUsIGJ1ZmZlciwgbnBhZ2VzKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy0xODYwLVxcdEFTU0VSVF9FUShyZXQsIDApO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMtMTg3MC1cXHQvKiBTaW11bGF0ZSBhIGRldmljZSB3cml0aW5nIHN5c3RlbSBtZW1vcnkuICovXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmM6MTg3MTpcXHRyZXQgPSBobW1fZG1pcnJvcl9jbWQoc2VsZi1cXHUwMDNlZmQsIEhNTV9ETUlSUk9SX1dSSVRFLCBidWZmZXIsIG5wYWdlcyk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMtMTg3Mi1cXHRBU1NFUlRfRVEocmV0LCAtRVBFUk0pO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmM9MTg4MD1URVNUX0YoaG1tLCBleGNsdXNpdmVfY293KVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMtMTkxMy1cXHQvKiBNYXAgbWVtb3J5IGV4Y2x1c2l2ZWx5IGZvciBkZXZpY2UgYWNjZXNzLiAqL1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jOjE5MTQ6XFx0cmV0ID0gaG1tX2RtaXJyb3JfY21kKHNlbGYtXFx1MDAzZWZkLCBITU1fRE1JUlJPUl9FWENMVVNJVkUsIGJ1ZmZlciwgbnBhZ2VzKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy0xOTE1LVxcdEFTU0VSVF9FUShyZXQsIDApO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmM9MTk3OD1URVNUX0YoaG1tLCBobW1fZ3VwX3Rlc3QpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy0yMDM1LVxcdC8qIFRha2Ugc25hcHNob3QgdG8gQ1BVIHBhZ2V0YWJsZXMgKi9cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYzoyMDM2OlxcdHJldCA9IGhtbV9kbWlycm9yX2NtZChzZWxmLVxcdTAwM2VmZCwgSE1NX0RNSVJST1JfU05BUFNIT1QsIGJ1ZmZlciwgbnBhZ2VzKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy0yMDM3LVxcdEFTU0VSVF9FUShyZXQsIDApO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmM9MjA2Nz1URVNUX0YoaG1tLCBobW1fY293X2luX2RldmljZSlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jLTIxMjgtXFx0LyogVGFrZSBzbmFwc2hvdCB0byBDUFUgcGFnZXRhYmxlcyAqL1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jOjIxMjk6XFx0cmV0ID0gaG1tX2RtaXJyb3JfY21kKHNlbGYtXFx1MDAzZWZkLCBITU1fRE1JUlJPUl9TTkFQU0hPVCwgYnVmZmVyLCBucGFnZXMpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jLTIxMzAtXFx0QVNTRVJUX0VRKHJldCwgMCk7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYz0yMzE2PVRFU1RfRihobW0sIG1pZ3JhdGVfYW5vbl9odWdlX2ZhdWx0KVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMtMjM2OC1cXHRpZiAoIWhtbV9pc19jb2hlcmVudF90eXBlKHZhcmlhbnQtXFx1MDAzZWRldmljZV9udW1iZXIpKSB7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmM6MjM2OTpcXHRcXHRyZXQgPSBobW1fZG1pcnJvcl9jbWQoc2VsZi1cXHUwMDNlZmQsIEhNTV9ETUlSUk9SX1NOQVBTSE9ULFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jLTIzNzAtXFx0XFx0XFx0XFx0ICAgICAgYnVmZmVyLCBucGFnZXMpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmM9MjU4MD1URVNUX0YoaG1tLCBtaWdyYXRlX2Fub25faHVnZV9lcnIpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy0yNjE2LVxcdC8qIE1pZ3JhdGUgbWVtb3J5IHRvIGRldmljZSBidXQgZm9yY2UgYSBUSFAgYWxsb2NhdGlvbiBlcnJvci4gKi9cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYzoyNjE3OlxcdHJldCA9IGhtbV9kbWlycm9yX2NtZChzZWxmLVxcdTAwM2VmZCwgSE1NX0RNSVJST1JfRkxBR1MsIGJ1ZmZlcixcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy0yNjE4LVxcdFxcdFxcdCAgICAgIEhNTV9ETUlSUk9SX0ZMQUdfRkFJTF9BTExPQyk7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy0yNjU4LVxcdCAqL1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jOjI2NTk6XFx0cmV0ID0gaG1tX2RtaXJyb3JfY21kKHNlbGYtXFx1MDAzZWZkLCBITU1fRE1JUlJPUl9GTEFHUywgYnVmZmVyLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jLTI2NjAtXFx0XFx0XFx0ICAgICAgSE1NX0RNSVJST1JfRkxBR19GQUlMX0FMTE9DKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jPTI2NzU9VEVTVF9GKGhtbSwgbWlncmF0ZV9hbm9uX2h1Z2VfemVyb19lcnIpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy0yNzA3LVxcdC8qIE1pZ3JhdGUgbWVtb3J5IHRvIGRldmljZSBidXQgZm9yY2UgYSBUSFAgYWxsb2NhdGlvbiBlcnJvci4gKi9cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYzoyNzA4OlxcdHJldCA9IGhtbV9kbWlycm9yX2NtZChzZWxmLVxcdTAwM2VmZCwgSE1NX0RNSVJST1JfRkxBR1MsIGJ1ZmZlcixcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy0yNzA5LVxcdFxcdFxcdCAgICAgIEhNTV9ETUlSUk9SX0ZMQUdfRkFJTF9BTExPQyk7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy0yNzM4LVxcdC8qIE1pZ3JhdGUgbWVtb3J5IHRvIGRldmljZSBidXQgZm9yY2UgYSBUSFAgYWxsb2NhdGlvbiBlcnJvci4gKi9cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYzoyNzM5OlxcdHJldCA9IGhtbV9kbWlycm9yX2NtZChzZWxmLVxcdTAwM2VmZCwgSE1NX0RNSVJST1JfRkxBR1MsIGJ1ZmZlcixcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy0yNzQwLVxcdFxcdFxcdCAgICAgIEhNTV9ETUlSUk9SX0ZMQUdfRkFJTF9BTExPQyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDA3OjQxOjEyLjYyMjQwNloiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDc0MDU5NjgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSG1tIERtaXJyb3IgTW9kdWxlKipcblxuT2theSwgc28gbG9va2luZyBhdCB0aGlzLCBgVEVTVF9ITU1gIHNlZW1zIHRvIGJlIHJlc3BvbnNpYmxlIGZvciBjcmVhdGluZyB0d28gZGV2aWNlIG5vZGVzOiBgL2Rldi9obW1fZG1pcnJvcjBgIGFuZCBgL2Rldi9obW1fZG1pcnJvcjFgLiBSaWdodCwgYW5kIFN5emthbGxlciBpcyB0aGUgdG9vbCB0aGF0J3MgaW50ZXJhY3Rpbmcgd2l0aCB0aGVzZSBkZXZpY2VzLCB1c2luZyB0aGVtIGFzIGEgdHJpZ2dlciBmb3IgYG1lbXJlbWFwX3BhZ2VzYCBhbmQgYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYC4gVGhhdCdzIHRoZSBrZXk6IGl04oCZcyB1c2luZyB0aGVzZSBjYWxscyBvbiB0aGUgZGV2aWNlcy4gQnV0IGhhbmcgb24uLi5pc24ndCBgbWVtcmVtYXBfcGFnZXNgIGFsc28gY2FsbGVkIGR1cmluZyB0aGUgYGRtaXJyb3JfZGV2aWNlX2luaXRgIGZ1bmN0aW9uPyBUaGF0J3Mgd2hlbiB0aGUgbW9kdWxlIGlzIGJlaW5nIGxvYWRlZCEgVGhhdCBzdWdnZXN0cyBhbiBpbnRlcmVzdGluZyBpbml0aWFsIHN0YXRlIGFuZCBpbnRlcmFjdGlvbiBwb2ludC4gSSBuZWVkIHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgZG1pcnJvcl9kZXZpY2VfaW5pdGAgdG8gZmlndXJlIG91dCB3aGF0J3MgZ29pbmcgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1ODA1LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMDc6NDE6MTYuMDk2NDY5MDAzWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjA2MjE1MzI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRtaXJyb3JfZGV2aWNlX2luaXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibGliL3Rlc3RfaG1tLmM9MTc3Mj1zdGF0aWMgdm9pZCBkbWlycm9yX2RldmljZV9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldilcXG4tLVxcbmxpYi90ZXN0X2htbS5jLTE3NzgtXFxubGliL3Rlc3RfaG1tLmM6MTc3OTpzdGF0aWMgaW50IGRtaXJyb3JfZGV2aWNlX2luaXQoc3RydWN0IGRtaXJyb3JfZGV2aWNlICptZGV2aWNlLCBpbnQgaWQpXFxubGliL3Rlc3RfaG1tLmMtMTc4MC17XFxuLS1cXG5saWIvdGVzdF9obW0uYz0xODIxPXN0YXRpYyBpbnQgX19pbml0IGhtbV9kbWlycm9yX2luaXQodm9pZClcXG4tLVxcbmxpYi90ZXN0X2htbS5jLTE4NDMtXFx0Zm9yIChpZCA9IDA7IGlkIFxcdTAwM2MgbmRldmljZXM7IGlkKyspIHtcXG5saWIvdGVzdF9obW0uYzoxODQ0OlxcdFxcdHJldCA9IGRtaXJyb3JfZGV2aWNlX2luaXQoZG1pcnJvcl9kZXZpY2VzICsgaWQsIGlkKTtcXG5saWIvdGVzdF9obW0uYy0xODQ1LVxcdFxcdGlmIChyZXQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDA3OjQxOjE3LjcwMjY5MDQxMVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDQyNTc0MjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQsIGdlYXJlZCB0b3dhcmQgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgZnJvbSBhIGZpcnN0LXBlcnNvbiBwZXJzcGVjdGl2ZTpcblxuKipEaXZpbmcgaW50byBgZG1pcnJvcl9kZXZpY2VfaW5pdGAqKlxuXG5BbHJpZ2h0LCBsZXQncyBjcmFjayBvcGVuIHRoaXMgYGRtaXJyb3JfZGV2aWNlX2luaXRgIGZ1bmN0aW9uLiBUaGUgbmFtZSBpdHNlbGYgaXMgcHJldHR5IHNlbGYtZXhwbGFuYXRvcnksIGJ1dCBJIHdhbnQgdG8gZ2V0IGEgZ29vZCBoYW5kbGUgb24gd2hhdCdzIGdvaW5nIG9uIGhlcmUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBsb29rIGZvciB0aGUgaGlnaC1sZXZlbCBjb250cm9sIGZsb3c6IFdoYXQncyB0aGUgZW50cnkgcG9pbnQ/IFdoYXQga2luZCBvZiBkYXRhIHN0cnVjdHVyZXMgYXJlIGJlaW5nIGluaXRpYWxpemVkPyBBbnkgZXh0ZXJuYWwgZGVwZW5kZW5jaWVzIG9yIHN5c3RlbSBjYWxscyB0aGF0IGFyZSBpbW1lZGlhdGVseSBhcHBhcmVudD8gSXQncyBsaWtlbHkgaW52b2x2ZWQgaW4gc2V0dGluZyB1cCB0aGUgZGV2aWNlIG1pcnJvciBkcml2ZXIsIHNvIEknbSBleHBlY3Rpbmcgc29tZSBraW5kIG9mIHJlc291cmNlIGFsbG9jYXRpb24sIHJlZ2lzdGVyIG1hcHBpbmcsIGFuZCBpbnRlcnJ1cHQgY29uZmlndXJhdGlvbi4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBoYXJkd2FyZS1zcGVjaWZpYyBwYXJhbWV0ZXJzIGl0J3MgdGFraW5nIGFuZCBob3cgaXQgaGFuZGxlcyBwb3RlbnRpYWwgZXJyb3JzIGR1cmluZyBpbml0aWFsaXphdGlvbi4gR2l2ZW4gdGhhdCBpdCdzIGEgZGV2aWNlIGluaXQgZnVuY3Rpb24sIEknbGwgYmUgbG9va2luZyBzcGVjaWZpY2FsbHkgZm9yIHdoYXQgcmVzb3VyY2VzIGl0J3MgdHJ5aW5nIHRvIG1hbmFnZS4gSSBhbHNvIGV4cGVjdCBhIG51bWJlciBvZiBjaGVja3MuIEFyZSB3ZSBkb2luZyBhIGNoZWNrIHRvIHNlZSBpZiB3ZSd2ZSBhbHJlYWR5IGRvbmUgYW4gaW5pdGlhbGl6YXRpb24/IFRoYXQncyBjb21tb24sIHNvIGl0J3MgcHJvYmFibHkgaGVyZS4gSSdsbCBhbHNvIGJlIHNjYW5uaW5nIGZvciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLiBJJ20gZ29pbmcgdG8gc2NhbiB0aGUgY29kZSBsb29raW5nIGZvciB3aGVyZSBpdCBpcyB3cml0aW5nIGFuZCByZWFkaW5nIGRhdGEgZnJvbSByZWdpc3RlcnMuIFRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkZXRlcm1pbmUgaG93IHRoZSBkcml2ZXIgaGFuZGxlcyBkaWZmZXJlbnQgaGFyZHdhcmUgY29uZmlndXJhdGlvbnMgb3IgdmVyc2lvbnMgb2YgdGhlIHRhcmdldCBkZXZpY2UuIEFyZSB0aGVyZSBjb25kaXRpb25hbCBibG9ja3MgYmFzZWQgb24gZGV2aWNlIElEcyBvciBjYXBhYmlsaXRpZXM/IEFueSB1c2Ugb2YgcGxhdGZvcm0tc3BlY2lmaWMgbWFjcm9zPyBJIGFsc28gd2FudCB0byBwYXkgY2FyZWZ1bCBhdHRlbnRpb24gdG8gYW55IGxvY2tpbmcgbWVjaGFuaXNtcyB0byBlbnN1cmUgY29uY3VycmVuY3kgaXMgaGFuZGxlZCBjb3JyZWN0bHksIHNpbmNlIHRoaXMgaXMgYSBrZXJuZWwgZnVuY3Rpb24uIEknbGwgYmUgbG9va2luZyBmb3IgcmVmZXJlbmNlcyB0byBtdXRleGVzLCBzZW1hcGhvcmVzLCBvciBvdGhlciBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcy4gQW5kIG9mIGNvdXJzZSwgSSdsbCBrZWVwIGFuIGV5ZSBvdXQgZm9yIGhvdyB0aGlzIGZ1bmN0aW9uIGhhbmRsZXMgcG93ZXIgbWFuYWdlbWVudC4gSXMgaXQgc2V0dGluZyB1cCBhbnkgY2xvY2tzIG9yIHBvd2VyIGRvbWFpbnM/IEFueSBzbGVlcCBvciB3YWtlLXVwIGNhbGxzPyBXaGF0IGlzIHRoZSByZWdpc3RlciBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZT8gVGhlIG92ZXJhbGwgZ29hbCBpcyB0byBmb3JtIGEgc29saWQgbWVudGFsIG1vZGVsIG9mIGhvdyBgZG1pcnJvcl9kZXZpY2VfaW5pdGAgZml0cyBpbnRvIHRoZSBicm9hZGVyIHBpY3R1cmUgb2YgdGhlIGRyaXZlcidzIG9wZXJhdGlvbiwgYW5kIGhvdyByb2J1c3QgYW5kIGVmZmljaWVudCBpdCBpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjYzMjIsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QwNzo0MToyMi4xNDUyNjY4NjFaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM1NjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImxpYi90ZXN0X2htbS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE3NzksXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE3Nzk6XFx0c3RhdGljIGludCBkbWlycm9yX2RldmljZV9pbml0KHN0cnVjdCBkbWlycm9yX2RldmljZSAqbWRldmljZSwgaW50IGlkKVxcbjE3ODA6XFx0e1xcbjE3ODE6XFx0XFx0ZGV2X3QgZGV2O1xcbjE3ODI6XFx0XFx0aW50IHJldDtcXG4xNzgzOlxcdFxcbjE3ODQ6XFx0XFx0ZGV2ID0gTUtERVYoTUFKT1IoZG1pcnJvcl9kZXYpLCBpZCk7XFxuMTc4NTpcXHRcXHRtdXRleF9pbml0KFxcdTAwMjZtZGV2aWNlLVxcdTAwM2VkZXZtZW1fbG9jayk7XFxuMTc4NjpcXHRcXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2bWRldmljZS1cXHUwMDNlbG9jayk7XFxuMTc4NzpcXHRcXG4xNzg4OlxcdFxcdGNkZXZfaW5pdChcXHUwMDI2bWRldmljZS1cXHUwMDNlY2RldmljZSwgXFx1MDAyNmRtaXJyb3JfZm9wcyk7XFxuMTc4OTpcXHRcXHRtZGV2aWNlLVxcdTAwM2VjZGV2aWNlLm93bmVyID0gVEhJU19NT0RVTEU7XFxuMTc5MDpcXHRcXHRtZGV2aWNlLVxcdTAwM2VkZXZpY2UucmVsZWFzZSA9IGRtaXJyb3JfZGV2aWNlX3JlbGVhc2U7XFxuMTc5MTpcXHRcXG4xNzkyOlxcdFxcdGRldmljZV9pbml0aWFsaXplKFxcdTAwMjZtZGV2aWNlLVxcdTAwM2VkZXZpY2UpO1xcbjE3OTM6XFx0XFx0bWRldmljZS1cXHUwMDNlZGV2aWNlLmRldnQgPSBkZXY7XFxuMTc5NDpcXHRcXG4xNzk1OlxcdFxcdHJldCA9IGRldl9zZXRfbmFtZShcXHUwMDI2bWRldmljZS1cXHUwMDNlZGV2aWNlLCBcXFwiaG1tX2RtaXJyb3IldVxcXCIsIGlkKTtcXG4xNzk2OlxcdFxcdGlmIChyZXQpXFxuMTc5NzpcXHRcXHRcXHRnb3RvIHB1dF9kZXZpY2U7XFxuMTc5ODpcXHRcXG4xNzk5OlxcdFxcdC8qIEJ1aWxkIGEgbGlzdCBvZiBmcmVlIFpPTkVfREVWSUNFIHN0cnVjdCBwYWdlcyAqL1xcbjE4MDA6XFx0XFx0cmV0ID0gZG1pcnJvcl9hbGxvY2F0ZV9jaHVuayhtZGV2aWNlLCBOVUxMLCBmYWxzZSk7XFxuMTgwMTpcXHRcXHRpZiAocmV0KVxcbjE4MDI6XFx0XFx0XFx0Z290byBwdXRfZGV2aWNlO1xcbjE4MDM6XFx0XFxuMTgwNDpcXHRcXHRyZXQgPSBjZGV2X2RldmljZV9hZGQoXFx1MDAyNm1kZXZpY2UtXFx1MDAzZWNkZXZpY2UsIFxcdTAwMjZtZGV2aWNlLVxcdTAwM2VkZXZpY2UpO1xcbjE4MDU6XFx0XFx0aWYgKHJldClcXG4xODA2OlxcdFxcdFxcdGdvdG8gcHV0X2RldmljZTtcXG4xODA3OlxcdFxcbjE4MDg6XFx0XFx0cmV0dXJuIDA7XFxuMTgwOTpcXHRcXG4xODEwOlxcdHB1dF9kZXZpY2U6XFxuMTgxMTpcXHRcXHRwdXRfZGV2aWNlKFxcdTAwMjZtZGV2aWNlLVxcdTAwM2VkZXZpY2UpO1xcbjE4MTI6XFx0XFx0cmV0dXJuIHJldDtcXG4xODEzOlxcdH1cXG4xODE0OlxcdFxcbjE4MTU6XFx0c3RhdGljIHZvaWQgZG1pcnJvcl9kZXZpY2VfcmVtb3ZlKHN0cnVjdCBkbWlycm9yX2RldmljZSAqbWRldmljZSlcXG4xODE2OlxcdHtcXG4xODE3OlxcdFxcdGNkZXZfZGV2aWNlX2RlbChcXHUwMDI2bWRldmljZS1cXHUwMDNlY2RldmljZSwgXFx1MDAyNm1kZXZpY2UtXFx1MDAzZWRldmljZSk7XFxuMTgxODpcXHRcXHRwdXRfZGV2aWNlKFxcdTAwMjZtZGV2aWNlLVxcdTAwM2VkZXZpY2UpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QwNzo0MToyMi4xNDU0MDM4MzFaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjI3NDY1Mzg4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEltcGxpY2F0aW9ucyBvZiBgbWVtcmVtYXBfcGFnZXNgIGFuZCBNb2R1bGUgTG9hZGluZyoqXG5cbk9rYXksIHNvIGBkbWlycm9yX2FsbG9jYXRlX2NodW5rYCBjYWxscyBgbWVtcmVtYXBfcGFnZXNgLiBUaGF0J3MgdGhlIGtleS4gSnVzdCBsb2FkaW5nIHRoZSBgdGVzdF9obW1gIG1vZHVsZSBpcyBnb2luZyB0byB0cmlnZ2VyIGBtZW1yZW1hcF9wYWdlc2AsIGFuZCB0aGF0IGluIHR1cm4gaGl0cyBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiBgVEVTVF9ITU1gIGlzIGV2ZW4gZW5hYmxlZCBvbiBTeXpib3QsIGJlY2F1c2UgdGhvc2UgYm90cyB1c3VhbGx5IGhhdmUgYSB0b24gb2YgYFRFU1RfKmAgY29uZmlncyBzZXQuIFJpZ2h0LCBsZXQncyBqdXN0IGdvIGFoZWFkIGFuZCBhZGQgYFRFU1RfSE1NYCB0byBgRW5hYmxlQ29uZmlnc2AgdG8gbWFrZSBzdXJlIHdlJ3JlIHRlc3RpbmcgdGhpcyBzY2VuYXJpby5cblxuSG9sZCBvbiwgSSBzZWUgYSBkZXBlbmRlbmN5IGlzc3VlLiBgVEVTVF9ITU1gIGRlcGVuZHMgb24gYERFVklDRV9QUklWQVRFYCwgd2hpY2ggaW4gdHVybiBkZXBlbmRzIG9uIGBaT05FX0RFVklDRWAuIFNvLCB0byBiZSBjb21wbGV0ZSwgSSBuZWVkIHRvIGFkZCBhbGwgdGhyZWUgdG8gdGhlIGBFbmFibGVDb25maWdzYDogYFRFU1RfSE1NYCwgYERFVklDRV9QUklWQVRFYCwgYW5kIGBaT05FX0RFVklDRWAuIFRoYXQgc2hvdWxkIGVuc3VyZSB0aGUgcmVsZXZhbnQgY29kZSBwYXRocyBhcmUgYWN0aXZlLlxuXG5Ob3csIGxldCdzIHF1aWNrbHkgdmVyaWZ5IHdoaWNoIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgYmVpbmcgdG91Y2hlZCBieSB0aGlzIHBhdGNoIHNvIEkgY2FuIHplcm8gaW4gb24gdGhlbSBkdXJpbmcgdGVzdGluZy4gSXQgbG9va3MgbGlrZSB0aGUgcGF0Y2ggbW9kaWZpZXM6IGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAsIGBtZW1tYXBfaW5pdF9jb21wb3VuZGAsIGB6b25lX2RldmljZV9wYWdlX2luaXRfZnJvbV90ZW1wbGF0ZWAsIGB6b25lX2RldmljZV9wYWdlX2luaXRfc2xvd2AsIGB6b25lX2RldmljZV90YWlsX3BhZ2VfaW5pdGAsIGB6b25lX2RldmljZV9wYWdlX3VwZGF0ZV90ZW1wbGF0ZWAsIGFuZCBgbWVtY3B5X25vbnRlbXBvcmFsYC5cblxuV2FpdCBhIG1pbnV0ZSwgYG1lbWNweV9ub250ZW1wb3JhbGAgaXMgaW5saW5lLCBzbyBpdCdzIHByb2JhYmx5IG5vdCB3aGVyZSB0aGUgcmVhbCBsb2dpYyBpcyBoYXBwZW5pbmcsIGFuZCBpcyBhIG1hY3JvLiBBbmQgdGhlIGB6b25lX2RldmljZV9wYWdlX2luaXRfZnJvbV90ZW1wbGF0ZWAsIGB6b25lX2RldmljZV9wYWdlX2luaXRfc2xvd2AsIGB6b25lX2RldmljZV90YWlsX3BhZ2VfaW5pdGAgYW5kIGB6b25lX2RldmljZV9wYWdlX3VwZGF0ZV90ZW1wbGF0ZWAgYXJlIGFsbCBzdGF0aWMuIFRoYXQgc2ltcGxpZmllcyB0aGluZ3MgYSBiaXQuIFNvIHJlYWxseSwgdGhlIHByaW1hcnkgZm9jdXMgZm9yIGludmVzdGlnYXRpb24gc2hvdWxkIGJlIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAgYW5kIGBtZW1tYXBfaW5pdF9jb21wb3VuZGAuIEkgbmVlZCB0byBjb25maXJtIGlmIHRob3NlIGFyZSBleHBvcnRlZCBvciBub3QsIGJlY2F1c2Ugc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIG1vZHVsZSBhcmUgbGVzcyBjcml0aWNhbCBmb3IgZXh0ZXJuYWwgZGVwZW5kZW5jaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzQwOCwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDA3OjQxOjI4LjQyMDA2MTIyN1oiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY1NzYzNzU0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2b2lkIF9fcmVmIG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21tX2luaXQuYz0xMTMxPXN0YXRpYyB2b2lkIF9fcmVmIG1lbW1hcF9pbml0X2NvbXBvdW5kKHN0cnVjdCBwYWdlICpoZWFkLFxcbi0tXFxubW0vbW1faW5pdC5jLTExNzEtXFxubW0vbW1faW5pdC5jOjExNzI6dm9pZCBfX3JlZiBtZW1tYXBfaW5pdF96b25lX2RldmljZShzdHJ1Y3Qgem9uZSAqem9uZSxcXG5tbS9tbV9pbml0LmMtMTE3My1cXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMDc6NDE6MzAuMDc3NzAzNzA0WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0MjQ3ODQ3ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE1lbW9yeSBNYXBwaW5nIEluaXRpYWxpemF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpbW1lZGlhdGVseSBJIHNlZSB0aGF0IGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAgaXNuJ3Qgc3RhdGljLiBUaGF0J3MgYSBiaXQgb2YgYSBrZXkgb2JzZXJ2YXRpb24sIGlzbid0IGl0PyBPbiB0aGUgb3RoZXIgaGFuZCwgYG1lbW1hcF9pbml0X2NvbXBvdW5kYCAqaXMqIHN0YXRpYy4gSG1tLCB0aGF0IHN1Z2dlc3RzIGl0IG1pZ2h0IGdldCBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciwgb3IgcGVyaGFwcyBkb2Vzbid0IGV2ZW4gaGF2ZSBhIHNlcGFyYXRlIHN5bWJvbCwgc28gaXQgbWF5IG5vdCBiZSBhcyBjcml0aWNhbCB0byBmb2N1cyBvbiBpbiBkZXRhaWwuIFRpbWUgdG8gdmVyaWZ5IGlmIHRoYXTigJlzIHRoZSBjYXNlIGJ5IHF1aWNrbHkgc2Nhbm5pbmcgZm9yIGFueSBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9ucyBpbiB0aGlzIGFyZWEuXG5cbmBtZW1tYXBfaW5pdF96b25lX2RldmljZWAgcmVhbGx5IHNlZW1zIHRvIGJlIHRoZSBjZW50cmFsIGZ1bmN0aW9uIGhlcmUuIEJ1dCwgd2hhdCBlbHNlIGlzIGFmZmVjdGVkPyBMZXQgbWUgdGFrZSBhIHF1aWNrIGxvb2sgdG8gY29uZmlybSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGZ1bmN0aW9ucyB0aGF0IGFyZSBjaGFuZ2VkLiBBaGEsIHRoZSBwYXRjaCB0b3VjaGVzIGBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaGAuIEludGVyZXN0aW5nLiBJdCBsb29rcyBsaWtlIHRoZXkncmUgYWRkaW5nIGBtb3ZudGlfOGAsIGBtb3ZudGlfMTZgLCBgbW92bnRpXzMyYCwgYW5kIGBtb3ZudGlfNjRgLiBUaGF0IGluZGljYXRlcyBjaGFuZ2VzIHJlbGF0ZWQgdG8gbm9uLXRlbXBvcmFsIHN0b3Jlcywgd2hpY2ggaXMgYSBsb3ctbGV2ZWwgb3B0aW1pemF0aW9uLiBJIHNob3VsZCBhbHNvIGNoZWNrIG91dCB0aGUgbW9kaWZpY2F0aW9uIHRvIGBtZW1jcHlfZmx1c2hjYWNoZWAuIFRoZXNlIGNoYW5nZXMgYXJlIGFsbCByZWxhdGVkLCBhbmQgd2lsbCByZXF1aXJlIGEgZGVlcCBkaXZlIGludG8gdGhlIGltcGxpY2F0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjgzNjEsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMDc6NDE6MzQuNTAyNDkyMzM1WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTA4NjA4Mjk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbWNweV9mbHVzaGNhY2hlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtNjQvaW5jbHVkZS9hc20vc3RyaW5nLmg9NDQ9ZXh0ZXJuIHZvaWQgKl9fbWVtc2V0KHZvaWQgKiwgaW50LCBfX2tlcm5lbF9zaXplX3QpO1xcbi0tXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9zdHJpbmcuaC00Ny0jZGVmaW5lIF9fSEFWRV9BUkNIX01FTUNQWV9GTFVTSENBQ0hFXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9zdHJpbmcuaDo0ODp2b2lkIG1lbWNweV9mbHVzaGNhY2hlKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgY250KTtcXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3N0cmluZy5oLTQ5LSNlbmRpZlxcbi0tXFxuYXJjaC9hcm02NC9saWIvdWFjY2Vzc19mbHVzaGNhY2hlLmMtOS1cXG5hcmNoL2FybTY0L2xpYi91YWNjZXNzX2ZsdXNoY2FjaGUuYzoxMDp2b2lkIG1lbWNweV9mbHVzaGNhY2hlKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgY250KVxcbmFyY2gvYXJtNjQvbGliL3VhY2Nlc3NfZmx1c2hjYWNoZS5jLTExLXtcXG4tLVxcbmFyY2gvYXJtNjQvbGliL3VhY2Nlc3NfZmx1c2hjYWNoZS5jLTE5LX1cXG5hcmNoL2FybTY0L2xpYi91YWNjZXNzX2ZsdXNoY2FjaGUuYzoyMDpFWFBPUlRfU1lNQk9MX0dQTChtZW1jcHlfZmx1c2hjYWNoZSk7XFxuYXJjaC9hcm02NC9saWIvdWFjY2Vzc19mbHVzaGNhY2hlLmMtMjEtXFxuLS1cXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc3RyaW5nLmg9Mjg9ZXh0ZXJuIHZvaWQgKiBtZW1jaHIoY29uc3Qgdm9pZCAqLGludCxfX2tlcm5lbF9zaXplX3QpO1xcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zdHJpbmcuaDoyOTp2b2lkIG1lbWNweV9mbHVzaGNhY2hlKHZvaWQgKmRlc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IHNpemUpO1xcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zdHJpbmcuaC0zMC1cXG4tLVxcbmFyY2gvcG93ZXJwYy9saWIvcG1lbS5jPTY5PXNpemVfdCBjb3B5X2Zyb21fdXNlcl9mbHVzaGNhY2hlKHZvaWQgKmRlc3QsIGNvbnN0IHZvaWQgX191c2VyICpzcmMsXFxuLS1cXG5hcmNoL3Bvd2VycGMvbGliL3BtZW0uYy04MC1cXG5hcmNoL3Bvd2VycGMvbGliL3BtZW0uYzo4MTp2b2lkIG1lbWNweV9mbHVzaGNhY2hlKHZvaWQgKmRlc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IHNpemUpXFxuYXJjaC9wb3dlcnBjL2xpYi9wbWVtLmMtODIte1xcbi0tXFxuYXJjaC9wb3dlcnBjL2xpYi9wbWVtLmMtODctfVxcbmFyY2gvcG93ZXJwYy9saWIvcG1lbS5jOjg4OkVYUE9SVF9TWU1CT0wobWVtY3B5X2ZsdXNoY2FjaGUpO1xcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0Lmg9ODA9aW50IHN0cmNtcChjb25zdCBjaGFyICpjcywgY29uc3QgY2hhciAqY3QpO1xcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmgtODMtI2RlZmluZSBfX0hBVkVfQVJDSF9NRU1DUFlfRkxVU0hDQUNIRSAxXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0Lmg6ODQ6dm9pZCBfX21lbWNweV9mbHVzaGNhY2hlKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgY250KTtcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaC04NS1cXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oPTEwNj1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbW92bnRpXzY0KHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjKVxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmgtMTExLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oOjExMjpzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbWVtY3B5X2ZsdXNoY2FjaGUodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmgtMTEzLVxcdFxcdFxcdFxcdFxcdCAgICAgIHNpemVfdCBjbnQpXFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaC0xMzEtXFx0XFx0XFx0ICogaW5zdGVhZCBvZiBzZW5kaW5nIHRob3NlIG5lYXJieSBmaXhlZC1zaXplXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0Lmg6MTMyOlxcdFxcdFxcdCAqIGNhc2VzIGJhY2sgdG8gX19tZW1jcHlfZmx1c2hjYWNoZSgpLlxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oLTEzMy1cXHRcXHRcXHQgKi9cXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oLTE1NC1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaDoxNTU6XFx0X19tZW1jcHlfZmx1c2hjYWNoZShkc3QsIHNyYywgY250KTtcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaC0xNTYtfVxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0Lmg9MTYzPXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtZW1jcHlfbm9udGVtcG9yYWwodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsXFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaC0xNjUte1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oOjE2NjpcXHRtZW1jcHlfZmx1c2hjYWNoZShkc3QsIHNyYywgY250KTtcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaC0xNjctfVxcbi0tXFxuYXJjaC94ODYva2VybmVsL2NyYXNoLmM9NTE0PXZvaWQgYXJjaF9jcmFzaF9oYW5kbGVfaG90cGx1Z19ldmVudChzdHJ1Y3Qga2ltYWdlICppbWFnZSwgdm9pZCAqYXJnKVxcbi0tXFxuYXJjaC94ODYva2VybmVsL2NyYXNoLmMtNTY1LVxcdHhjaGcoXFx1MDAyNmtleGVjX2NyYXNoX2ltYWdlLCBOVUxMKTtcXG5hcmNoL3g4Ni9rZXJuZWwvY3Jhc2guYzo1NjY6XFx0bWVtY3B5X2ZsdXNoY2FjaGUob2xkX2VsZmNvcmVoZHIsIGVsZmJ1ZiwgZWxmc3opO1xcbmFyY2gveDg2L2tlcm5lbC9jcmFzaC5jLTU2Ny1cXHR4Y2hnKFxcdTAwMjZrZXhlY19jcmFzaF9pbWFnZSwgaW1hZ2UpO1xcbi0tXFxuYXJjaC94ODYvbGliL3VzZXJjb3B5XzY0LmM9NDY9c2l6ZV90IGNvcHlfdXNlcl9mbHVzaGNhY2hlKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCBfX3VzZXIgKnNyYywgc2l6ZV90IHNpemUpXFxuLS1cXG5hcmNoL3g4Ni9saWIvdXNlcmNvcHlfNjQuYy03OS1cXG5hcmNoL3g4Ni9saWIvdXNlcmNvcHlfNjQuYzo4MDp2b2lkIF9fbWVtY3B5X2ZsdXNoY2FjaGUodm9pZCAqX2RzdCwgY29uc3Qgdm9pZCAqX3NyYywgc2l6ZV90IHNpemUpXFxuYXJjaC94ODYvbGliL3VzZXJjb3B5XzY0LmMtODEte1xcbi0tXFxuYXJjaC94ODYvbGliL3VzZXJjb3B5XzY0LmMtMTQyLX1cXG5hcmNoL3g4Ni9saWIvdXNlcmNvcHlfNjQuYzoxNDM6RVhQT1JUX1NZTUJPTF9HUEwoX19tZW1jcHlfZmx1c2hjYWNoZSk7XFxuYXJjaC94ODYvbGliL3VzZXJjb3B5XzY0LmMtMTQ0LSNlbmRpZlxcbi0tXFxuZHJpdmVycy9kYXgvZnNkZXYuYz0zMT1zdGF0aWMgdm9pZCBmc2Rldl93cml0ZV9kYXgodm9pZCAqYWRkciwgc3RydWN0IHBhZ2UgKnBhZ2UsXFxuLS1cXG5kcml2ZXJzL2RheC9mc2Rldi5jLTM3LVxcbmRyaXZlcnMvZGF4L2ZzZGV2LmM6Mzg6XFx0XFx0bWVtY3B5X2ZsdXNoY2FjaGUoYWRkciwgbWVtICsgb2ZmLCBjaHVuayk7XFxuZHJpdmVycy9kYXgvZnNkZXYuYy0zOS1cXHRcXHRrdW5tYXBfbG9jYWwobWVtKTtcXG4tLVxcbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlLmM9MTc9c3RhdGljIHZvaWQgY2FjaGVfaW5mb193cml0ZShzdHJ1Y3QgcGNhY2hlX2NhY2hlICpjYWNoZSlcXG4tLVxcbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlLmMtMjUtXFx0Y2FjaGUtXFx1MDAzZWluZm9faW5kZXggPSAoY2FjaGUtXFx1MDAzZWluZm9faW5kZXggKyAxKSAlIFBDQUNIRV9NRVRBX0lOREVYX01BWDtcXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZS5jOjI2OlxcdG1lbWNweV9mbHVzaGNhY2hlKGdldF9jYWNoZV9pbmZvX2FkZHIoY2FjaGUpLCBjYWNoZV9pbmZvLFxcbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlLmMtMjctXFx0XFx0XFx0c2l6ZW9mKHN0cnVjdCBwY2FjaGVfY2FjaGVfaW5mbykpO1xcbi0tXFxuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGUuYz04Nz12b2lkIGNhY2hlX3Bvc19lbmNvZGUoc3RydWN0IHBjYWNoZV9jYWNoZSAqY2FjaGUsXFxuLS1cXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZS5jLTEwMC1cXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZS5jOjEwMTpcXHRtZW1jcHlfZmx1c2hjYWNoZShwb3Nfb25tZWRpYV9hZGRyLCBcXHUwMDI2cG9zX29ubWVkaWEsIHNpemVvZihzdHJ1Y3QgcGNhY2hlX2NhY2hlX3Bvc19vbm1lZGlhKSk7XFxuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGUuYy0xMDItXFx0cG1lbV93bWIoKTtcXG4tLVxcbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlX2Rldi5jPTE0MD1zdGF0aWMgdm9pZCBzYl93cml0ZShzdHJ1Y3QgcGNhY2hlX2NhY2hlX2RldiAqY2FjaGVfZGV2LCBzdHJ1Y3QgcGNhY2hlX3NiICpzYilcXG4tLVxcbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlX2Rldi5jLTE0My1cXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZV9kZXYuYzoxNDQ6XFx0bWVtY3B5X2ZsdXNoY2FjaGUoc2JfYWRkciwgc2IsIHNpemVvZihzdHJ1Y3QgcGNhY2hlX3NiKSk7XFxuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGVfZGV2LmMtMTQ1LVxcdHBtZW1fd21iKCk7XFxuLS1cXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZV9rZXkuYz0xMTQ9c3RhdGljIHZvaWQgYXBwZW5kX2xhc3Rfa3NldChzdHJ1Y3QgcGNhY2hlX2NhY2hlICpjYWNoZSwgdTMyIG5leHRfc2VnKVxcbi0tXFxuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGVfa2V5LmMtMTIyLVxcbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlX2tleS5jOjEyMzpcXHRtZW1jcHlfZmx1c2hjYWNoZShnZXRfa2V5X2hlYWRfYWRkcihjYWNoZSksIFxcdTAwMjZrc2V0X29ubWVkaWEsIHNpemVvZihzdHJ1Y3QgcGNhY2hlX2NhY2hlX2tzZXRfb25tZWRpYSkpO1xcbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlX2tleS5jLTEyNC1cXHRwbWVtX3dtYigpO1xcbi0tXFxuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGVfa2V5LmM9MTI4PWludCBjYWNoZV9rc2V0X2Nsb3NlKHN0cnVjdCBwY2FjaGVfY2FjaGUgKmNhY2hlLCBzdHJ1Y3QgcGNhY2hlX2NhY2hlX2tzZXQgKmtzZXQpXFxuLS1cXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZV9rZXkuYy0xNTMtXFx0XFx0LyogY2xlYXIgb3V0ZGF0ZWQga3NldCBpbiBuZXh0IHNlZyAqL1xcbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlX2tleS5jOjE1NDpcXHRcXHRtZW1jcHlfZmx1c2hjYWNoZShuZXh0X3NlZy1cXHUwMDNlc2VnbWVudC5kYXRhLCBcXHUwMDI2cGNhY2hlX2VtcHR5X2tzZXQsXFxuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGVfa2V5LmMtMTU1LVxcdFxcdFxcdFxcdFxcdHNpemVvZihzdHJ1Y3QgcGNhY2hlX2NhY2hlX2tzZXRfb25tZWRpYSkpO1xcbi0tXFxuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGVfa2V5LmMtMTY1LVxcdC8qIGNsZWFyIG91dGRhdGVkIGtzZXQgYWZ0ZXIgY3VycmVudCBrc2V0ICovXFxuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGVfa2V5LmM6MTY2OlxcdG1lbWNweV9mbHVzaGNhY2hlKGdldF9rZXlfaGVhZF9hZGRyKGNhY2hlKSArIGtzZXRfb25tZWRpYV9zaXplLCBcXHUwMDI2cGNhY2hlX2VtcHR5X2tzZXQsXFxuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGVfa2V5LmMtMTY3LVxcdFxcdFxcdFxcdHNpemVvZihzdHJ1Y3QgcGNhY2hlX2NhY2hlX2tzZXRfb25tZWRpYSkpO1xcbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlX2tleS5jLTE2OC1cXHQvKiB3cml0ZSBjdXJyZW50IGtzZXQgaW50byBzZWdtZW50ICovXFxuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGVfa2V5LmM6MTY5OlxcdG1lbWNweV9mbHVzaGNhY2hlKGdldF9rZXlfaGVhZF9hZGRyKGNhY2hlKSwga3NldF9vbm1lZGlhLCBrc2V0X29ubWVkaWFfc2l6ZSk7XFxuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGVfa2V5LmMtMTcwLVxcdHBtZW1fd21iKCk7XFxuLS1cXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZV9zZWdtZW50LmM9MjA9c3RhdGljIHZvaWQgY2FjaGVfc2VnX2luZm9fd3JpdGUoc3RydWN0IHBjYWNoZV9jYWNoZV9zZWdtZW50ICpjYWNoZV9zZWcpXFxuLS1cXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZV9zZWdtZW50LmMtMzEtXFx0c2VnX2luZm9fYWRkciA9IGdldF9zZWdfaW5mb19hZGRyKGNhY2hlX3NlZyk7XFxuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGVfc2VnbWVudC5jOjMyOlxcdG1lbWNweV9mbHVzaGNhY2hlKHNlZ19pbmZvX2FkZHIsIHNlZ19pbmZvLCBzaXplb2Yoc3RydWN0IHBjYWNoZV9zZWdtZW50X2luZm8pKTtcXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZV9zZWdtZW50LmMtMzMtXFx0cG1lbV93bWIoKTtcXG4tLVxcbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlX3NlZ21lbnQuYz0xMjY9c3RhdGljIHZvaWQgY2FjaGVfc2VnX2N0cmxfd3JpdGUoc3RydWN0IHBjYWNoZV9jYWNoZV9zZWdtZW50ICpjYWNoZV9zZWcpXFxuLS1cXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZV9zZWdtZW50LmMtMTM2LVxcbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlX3NlZ21lbnQuYzoxMzc6XFx0bWVtY3B5X2ZsdXNoY2FjaGUoZ2V0X2NhY2hlX3NlZ19nZW5fYWRkcihjYWNoZV9zZWcpLCBcXHUwMDI2Y2FjaGVfc2VnX2dlbiwgc2l6ZW9mKHN0cnVjdCBwY2FjaGVfY2FjaGVfc2VnX2dlbikpO1xcbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlX3NlZ21lbnQuYy0xMzgtXFx0cG1lbV93bWIoKTtcXG4tLVxcbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlX3NlZ21lbnQuYz0xODI9aW50IGNhY2hlX3NlZ19pbml0KHN0cnVjdCBwY2FjaGVfY2FjaGUgKmNhY2hlLCB1MzIgc2VnX2lkLCB1MzIgY2FjaGVfc2VnX2lkLFxcbi0tXFxuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGVfc2VnbWVudC5jLTIxNi1cXHRcXHQvKiBjbGVhciBvdXRkYXRlZCBrc2V0IGluIHNlZ21lbnQgKi9cXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZV9zZWdtZW50LmM6MjE3OlxcdFxcdG1lbWNweV9mbHVzaGNhY2hlKHNlZ21lbnQtXFx1MDAzZWRhdGEsIFxcdTAwMjZwY2FjaGVfZW1wdHlfa3NldCwgc2l6ZW9mKHN0cnVjdCBwY2FjaGVfY2FjaGVfa3NldF9vbm1lZGlhKSk7XFxuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGVfc2VnbWVudC5jLTIxOC1cXHRcXHRwbWVtX3dtYigpO1xcbi0tXFxuZHJpdmVycy9tZC9kbS13cml0ZWNhY2hlLmM9NDY9ZG8ge1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG5kcml2ZXJzL21kL2RtLXdyaXRlY2FjaGUuYy00Ny1cXHR0eXBlb2YoZGVzdCkgdW5pcSA9IChzcmMpO1xcdFxcdFxcdFxcdFxcXFxcXG5kcml2ZXJzL21kL2RtLXdyaXRlY2FjaGUuYzo0ODpcXHRtZW1jcHlfZmx1c2hjYWNoZShcXHUwMDI2KGRlc3QpLCBcXHUwMDI2dW5pcSwgc2l6ZW9mKGRlc3QpKTtcXHRcXFxcXFxuZHJpdmVycy9tZC9kbS13cml0ZWNhY2hlLmMtNDktfSB3aGlsZSAoMClcXG4tLVxcbmRyaXZlcnMvbWQvZG0td3JpdGVjYWNoZS5jPTExOTA9c3RhdGljIGludCB3cml0ZWNhY2hlX21lc3NhZ2Uoc3RydWN0IGRtX3RhcmdldCAqdGksIHVuc2lnbmVkIGludCBhcmdjLCBjaGFyICoqYXJndixcXG4tLVxcbmRyaXZlcnMvbWQvZG0td3JpdGVjYWNoZS5jLTEyMDktXFxuZHJpdmVycy9tZC9kbS13cml0ZWNhY2hlLmM6MTIxMDpzdGF0aWMgdm9pZCBtZW1jcHlfZmx1c2hjYWNoZV9vcHRpbWl6ZWQodm9pZCAqZGVzdCwgdm9pZCAqc291cmNlLCBzaXplX3Qgc2l6ZSlcXG5kcml2ZXJzL21kL2RtLXdyaXRlY2FjaGUuYy0xMjExLXtcXG4tLVxcbmRyaXZlcnMvbWQvZG0td3JpdGVjYWNoZS5jLTEyMjQtXFx0ICogTk9URTogdGhpcyBoYXBwZW5zIHRvIGJlIHRoZSBjYXNlIG5vdyAod2l0aCBkbS13cml0ZWNhY2hlJ3Mgc2luZ2xlXFxuZHJpdmVycy9tZC9kbS13cml0ZWNhY2hlLmM6MTIyNTpcXHQgKiB0aHJlYWRlZCBtb2RlbCkgYnV0IHJlLWV2YWx1YXRlIHRoaXMgb25jZSBtZW1jcHlfZmx1c2hjYWNoZSgpIGlzXFxuZHJpdmVycy9tZC9kbS13cml0ZWNhY2hlLmMtMTIyNi1cXHQgKiBlbmFibGVkIHRvIHVzZSBtb3ZkaXI2NGIgd2hpY2ggbWlnaHQgaW52YWxpZGF0ZSB0aGlzIHBlcmZvcm1hbmNlXFxuLS1cXG5kcml2ZXJzL21kL2RtLXdyaXRlY2FjaGUuYy0xMjQyLSNlbmRpZlxcbmRyaXZlcnMvbWQvZG0td3JpdGVjYWNoZS5jOjEyNDM6XFx0bWVtY3B5X2ZsdXNoY2FjaGUoZGVzdCwgc291cmNlLCBzaXplKTtcXG5kcml2ZXJzL21kL2RtLXdyaXRlY2FjaGUuYy0xMjQ0LX1cXG4tLVxcbmRyaXZlcnMvbWQvZG0td3JpdGVjYWNoZS5jPTEyNDY9c3RhdGljIHZvaWQgYmlvX2NvcHlfYmxvY2soc3RydWN0IGRtX3dyaXRlY2FjaGUgKndjLCBzdHJ1Y3QgYmlvICpiaW8sIHZvaWQgKmRhdGEpXFxuLS1cXG5kcml2ZXJzL21kL2RtLXdyaXRlY2FjaGUuYy0xMjcxLVxcdFxcdFxcdGZsdXNoX2RjYWNoZV9wYWdlKGJpb19wYWdlKGJpbykpO1xcbmRyaXZlcnMvbWQvZG0td3JpdGVjYWNoZS5jOjEyNzI6XFx0XFx0XFx0bWVtY3B5X2ZsdXNoY2FjaGVfb3B0aW1pemVkKGRhdGEsIGJ1Ziwgc2l6ZSk7XFxuZHJpdmVycy9tZC9kbS13cml0ZWNhY2hlLmMtMTI3My1cXHRcXHR9XFxuLS1cXG5kcml2ZXJzL252ZGltbS9jbGFpbS5jPTIzMz1zdGF0aWMgaW50IG5zaW9fcndfYnl0ZXMoc3RydWN0IG5kX25hbWVzcGFjZV9jb21tb24gKm5kbnMsXFxuLS1cXG5kcml2ZXJzL252ZGltbS9jbGFpbS5jLTI3Ni1cXG5kcml2ZXJzL252ZGltbS9jbGFpbS5jOjI3NzpcXHRtZW1jcHlfZmx1c2hjYWNoZShuc2lvLVxcdTAwM2VhZGRyICsgb2Zmc2V0LCBidWYsIHNpemUpO1xcbmRyaXZlcnMvbnZkaW1tL2NsYWltLmMtMjc4LVxcdHJldCA9IG52ZGltbV9mbHVzaCh0b19uZF9yZWdpb24obmRucy1cXHUwMDNlZGV2LnBhcmVudCksIE5VTEwpO1xcbi0tXFxuZHJpdmVycy9udmRpbW0vcG1lbS5jPTEyND1zdGF0aWMgdm9pZCB3cml0ZV9wbWVtKHZvaWQgKnBtZW1fYWRkciwgc3RydWN0IHBhZ2UgKnBhZ2UsXFxuLS1cXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtMTMyLVxcdFxcdGNodW5rID0gbWluX3QodW5zaWduZWQgaW50LCBsZW4sIFBBR0VfU0laRSAtIG9mZik7XFxuZHJpdmVycy9udmRpbW0vcG1lbS5jOjEzMzpcXHRcXHRtZW1jcHlfZmx1c2hjYWNoZShwbWVtX2FkZHIsIG1lbSArIG9mZiwgY2h1bmspO1xcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy0xMzQtXFx0XFx0a3VubWFwX2xvY2FsKG1lbSk7XFxuLS1cXG5kcml2ZXJzL252ZGltbS9yZWdpb25fZGV2cy5jPTExMDY9aW50IGdlbmVyaWNfbnZkaW1tX2ZsdXNoKHN0cnVjdCBuZF9yZWdpb24gKm5kX3JlZ2lvbilcXG4tLVxcbmRyaXZlcnMvbnZkaW1tL3JlZ2lvbl9kZXZzLmMtMTEyMS1cXHQgKiB0aGUgcGxhdGZvcm0gYnVmZmVyIGZsdXNoLiBOb3RlIHRoYXQgd2UndmUgYWxyZWFkeSBhcnJhbmdlZCBmb3IgcG1lbVxcbmRyaXZlcnMvbnZkaW1tL3JlZ2lvbl9kZXZzLmM6MTEyMjpcXHQgKiB3cml0ZXMgdG8gYXZvaWQgdGhlIGNhY2hlIHZpYSBtZW1jcHlfZmx1c2hjYWNoZSgpLiAgVGhlIGZpbmFsXFxuZHJpdmVycy9udmRpbW0vcmVnaW9uX2RldnMuYy0xMTIzLVxcdCAqIHdtYigpIGVuc3VyZXMgb3JkZXJpbmcgZm9yIHRoZSBOVkRJTU0gZmx1c2ggd3JpdGUuXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3N0cmluZy5oPTI3Mj1leHRlcm4gdm9pZCAqIG1lbWNocihjb25zdCB2b2lkICosaW50LF9fa2VybmVsX3NpemVfdCk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3N0cmluZy5oLTI3NC0jaWZuZGVmIF9fSEFWRV9BUkNIX01FTUNQWV9GTFVTSENBQ0hFXFxuaW5jbHVkZS9saW51eC9zdHJpbmcuaDoyNzU6c3RhdGljIGlubGluZSB2b2lkIG1lbWNweV9mbHVzaGNhY2hlKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgY250KVxcbmluY2x1ZGUvbGludXgvc3RyaW5nLmgtMjc2LXtcXG4tLVxcbmxpYi9pb3ZfaXRlci5jPTMwMz1zaXplX3QgbWVtY3B5X2Zyb21faXRlcl9mbHVzaGNhY2hlKHZvaWQgKml0ZXJfZnJvbSwgc2l6ZV90IHByb2dyZXNzLFxcbi0tXFxubGliL2lvdl9pdGVyLmMtMzA1LXtcXG5saWIvaW92X2l0ZXIuYzozMDY6XFx0bWVtY3B5X2ZsdXNoY2FjaGUodG8gKyBwcm9ncmVzcywgaXRlcl9mcm9tLCBsZW4pO1xcbmxpYi9pb3ZfaXRlci5jLTMwNy1cXHRyZXR1cm4gMDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMDc6NDE6MzYuMDExMTA2MTE1WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE1MDk3MTkxMjc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTWVtb3J5IENvcHkgT3B0aW1pemF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IGludHJvZHVjZXMgYG1lbWNweV9ub250ZW1wb3JhbGAsIHdoaWNoLCBpZiBub3QgYWxyZWFkeSBkZWZpbmVkLCBqdXN0IGZhbGxzIGJhY2sgdG8gYSBzdGFuZGFyZCBgbWVtY3B5YC4gQnV0IG9uIHg4NiwgaXQncyBhY3R1YWxseSB1c2luZyBhIGBtZW1jcHlfZmx1c2hjYWNoZWAgdW5kZXIgdGhlIGhvb2QuIFRoZSBjb3JlIG9mIHRoaXMgaXMgdGhlIG1vZGlmaWNhdGlvbiB0byBgYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmhgIOKAkyBpdCdzIGFkZGluZyB0aGVzZSBgbW92bnRpXypgIGluc3RydWN0aW9ucyBmb3IgZGlmZmVyZW50IGRhdGEgc2l6ZXMgKDgsIDE2LCAzMiwgNjQgYnl0ZXMpIHRoYXQgYXJlIHV0aWxpemVkIHdpdGhpbiBgbWVtY3B5X2ZsdXNoY2FjaGVgLlxuXG5UaGUgaW50ZXJlc3RpbmcgcGFydCBpcyB0aGF0IGBtZW1jcHlfZmx1c2hjYWNoZWAgaXMgbm93IHNwZWNpZmljYWxseSBvcHRpbWl6ZWQgZm9yIGZpeGVkIHNpemVzOiAzMiwgNDgsIDY0LCA4MCwgYW5kIDk2IGJ5dGVzLiBUaGF0IGltbWVkaWF0ZWx5IGp1bXBzIG91dCBhdCBtZSBiZWNhdXNlIHRob3NlIHNpemVzIGNvcnJlc3BvbmQgdG8gY29tbW9uIGBzdHJ1Y3QgcGFnZWAgc2l6ZXMuIFRoZXJlZm9yZSwgdGhpcyBvcHRpbWl6YXRpb24gaXMgY2xlYXJseSB0YXJnZXRpbmcgc2NlbmFyaW9zIHdoZXJlIGBzdHJ1Y3QgcGFnZWAgZGF0YSBpcyBiZWluZyBjb3BpZWQuXG5cbk5vdywgd2hlcmUgaXMgdGhpcyBhY3R1YWxseSBiZWluZyAqdXNlZCo/IEkgc2VlIHRoYXQgYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYCB1c2VzIGBtZW1jcHlfbm9udGVtcG9yYWxgIHRvIGNvcHkgYSBgc3RydWN0IHBhZ2VgIHRlbXBsYXRlLiBUaGF0J3MgYSBkaXJlY3QgaGl0LiBTbyBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgIGlzIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50IGZvciB0aGlzIG5ldyBsb2dpYy4gSG93ZXZlciwgSSBzaG91bGQgY2hlY2sgZm9yIG90aGVyIGNhbGwgc2l0ZXMsIGp1c3QgdG8gYmUgdGhvcm91Z2guIE9rYXksIHNvIEkgc2hvdWxkIGFsc28gY29uc2lkZXIgYG1lbXJlbWFwX3BhZ2VzYCBhbmQgYGRldm1fbWVtcmVtYXBfcGFnZXNgIGFzIHJlbGF0ZWQgZnVuY3Rpb25zLlxuXG5BZnRlciBhIHF1aWNrIHNjYW4sIGl0IGxvb2tzIGxpa2UgYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYCBpcyB0aGUgbWFpbiBvbmUgdGhhdCAqZXhlY3V0ZXMqIHRoZSBtb2RpZmllZCBjb2RlLiBJJ2xsIGFkZCB0aGF0IHRvIHRoZSBgRm9jdXNTeW1ib2xzYCBsaXN0LCB0byBtYWtlIHN1cmUgSSBhbSBmb2N1c2luZyBvbiB0aGUgcmVsZXZhbnQgcGFydHMuIFRoZSBvdGhlciBmdW5jdGlvbnMsIGxpa2UgYG1lbW1hcF9pbml0X2NvbXBvdW5kYCwgYHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9mcm9tX3RlbXBsYXRlYCwgYHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9zbG93YCwgYHpvbmVfZGV2aWNlX3RhaWxfcGFnZV9pbml0YCwgYHpvbmVfZGV2aWNlX3BhZ2VfdXBkYXRlX3RlbXBsYXRlYCwgYG1lbWNweV9ub250ZW1wb3JhbGAsIGFuZCBgbWVtY3B5X2ZsdXNoY2FjaGVgLCBzZWVtIGxlc3MgZGlyZWN0bHkgcmVsZXZhbnQgZm9yIG5vdywgYXMgdGhleSBhcmUgc3RhdGljIG9yIHN0YXRpYyBpbmxpbmUuXG5cbkxldCBtZSB0aGluayBhIGJpdCBtb3JlIGFib3V0IGhvdyB0aGluZ3MgYXJlIHdpcmVkIHRvZ2V0aGVyLiBPa2F5LCBzbyBgZGV2bV9tZW1yZW1hcF9wYWdlc2AgY2FsbHMgYG1lbXJlbWFwX3BhZ2VzYCwgYW5kIHRoYXQgaW4gdHVybiBjYWxscyBgcGFnZW1hcF9yYW5nZWAgd2hpY2ggKnRoZW4qIGNhbGxzIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAuIFNvIEkgd2lsbCBhZGQgYG1lbXJlbWFwX3BhZ2VzYCBhbmQgYGRldm1fbWVtcmVtYXBfcGFnZXNgIHRvIHRoZSBgRm9jdXNTeW1ib2xzYCBhcyB3ZWxsLlxuXG5JdCBzZWVtcyBsaWtlIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAgaXMgdGhlIG1haW4gdGFyZ2V0LiBBbmQgdGhlIGNoYW5nZXMgdG8gYGFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oYCBkaXJlY3RseSBhZmZlY3QgdGhlIGJlaGF2aW9yIG9mIGBtZW1jcHlfZmx1c2hjYWNoZWAuIFllcywgYG1lbWNweV9mbHVzaGNhY2hlYCBpcyBhbHNvIHVzZWQgaW4gb3RoZXIgcGxhY2VzIGxpa2UgYGRyaXZlcnMvZGF4L2ZzZGV2LmNgLCBgZHJpdmVycy9udmRpbW0vcG1lbS5jYCwgYW5kIGBsaWIvaW92X2l0ZXIuY2AsIGJ1dCBpdCBpcyBiZWluZyBvcHRpbWl6ZWQgZm9yIHNwZWNpZmljIHBhZ2Ugc2l6ZXMgaW4gKnRoaXMqIHBhdGNoLCB0aHVzIGl0IGlzIG1vc3QgcmVsZXZhbnQgdG8gIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAuXG5cbkxldCdzIHRoaW5rIGFib3V0IHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCB3b3VsZCBiZSByZWxldmFudCBoZXJlLiBJJ3ZlIGdvdCBgWk9ORV9ERVZJQ0VgLCBgREVWSUNFX1BSSVZBVEVgLCBhbmQgYFRFU1RfSE1NYC4gQW5kIGFsc28sIEkgc2hvdWxkIGtlZXAgYW4gZXllIG9uIGBGU19EQVhgLiBMZXQncyBjaGVjayBgRlNfREFYYCBkZXBlbmRlbmNpZXMuIEl0IGRlcGVuZHMgb24gYFpPTkVfREVWSUNFYC4gU28sIGBaT05FX0RFVklDRWAgaXMgdGhlIGtleS5cblxuTm93LCBsZXQncyBzZWUgaWYgYFRFU1RfSE1NYCBpcyBlbm91Z2ggdG8gdHJpZ2dlciBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgLiBZZXMhIGBobW1fZG1pcnJvcl9pbml0YCBjYWxscyBgZG1pcnJvcl9kZXZpY2VfaW5pdGAsIHdoaWNoIHRoZW4gY2FsbHMgYGRtaXJyb3JfYWxsb2NhdGVfY2h1bmtgLCBhbmQgZmluYWxseSB0aGF0IHRyaWdnZXJzIGBtZW1yZW1hcF9wYWdlc2AuIFRodXMsIGlmIGBURVNUX0hNTWAgaXMgYnVpbHQtaW4gb3IgbG9hZGVkIGFzIGEgbW9kdWxlLCBpdCdsbCBydW4gdGhlIGNvZGUuIFNwZWNpZmljYWxseSwgaWYgYFRFU1RfSE1NYCBpcyBidWlsdC1pbiwgdGhpcyB3aWxsIHJ1biBkdXJpbmcgdGhlIGJvb3QgcHJvY2Vzcy4gT2theSwgYGhtbV9kbWlycm9yX2luaXRgIGlzIGEgYG1vZHVsZV9pbml0YCwgc28gaWYgYnVpbHQtaW4sIGl0IHJ1bnMgZHVyaW5nIGtlcm5lbCBpbml0aWFsaXphdGlvbi4gTm93LCBJIHNob3VsZCBtYWtlIHN1cmUgdGhhdCB0aGUgYGRtaXJyb3JfYWxsb2NhdGVfY2h1bmtgIGNhbGwgdG8gYG1lbXJlbWFwX3BhZ2VzYCBpcyB1bmNvbmRpdGlvbmFsLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjkyMywiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMDc6NDE6NTEuMTA4MzAwODMxWiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTc5ODk2MjI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRtaXJyb3JfYWxsb2NhdGVfY2h1bmtcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibGliL3Rlc3RfaG1tLmM9NTE3PXN0YXRpYyBpbnQgZG1pcnJvcl93cml0ZShzdHJ1Y3QgZG1pcnJvciAqZG1pcnJvciwgc3RydWN0IGhtbV9kbWlycm9yX2NtZCAqY21kKVxcbi0tXFxubGliL3Rlc3RfaG1tLmMtNTU3LVxcbmxpYi90ZXN0X2htbS5jOjU1ODpzdGF0aWMgaW50IGRtaXJyb3JfYWxsb2NhdGVfY2h1bmsoc3RydWN0IGRtaXJyb3JfZGV2aWNlICptZGV2aWNlLFxcbmxpYi90ZXN0X2htbS5jLTU1OS1cXHRcXHRcXHRcXHQgIHN0cnVjdCBwYWdlICoqcHBhZ2UsIGJvb2wgaXNfbGFyZ2UpXFxuLS1cXG5saWIvdGVzdF9obW0uYz02OTA9c3RhdGljIHN0cnVjdCBwYWdlICpkbWlycm9yX2Rldm1lbV9hbGxvY19wYWdlKHN0cnVjdCBkbWlycm9yICpkbWlycm9yLFxcbi0tXFxubGliL3Rlc3RfaG1tLmMtNzIyLVxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZtZGV2aWNlLVxcdTAwM2Vsb2NrKTtcXG5saWIvdGVzdF9obW0uYzo3MjM6XFx0XFx0aWYgKGRtaXJyb3JfYWxsb2NhdGVfY2h1bmsobWRldmljZSwgXFx1MDAyNmRwYWdlLCBpc19sYXJnZSkpXFxubGliL3Rlc3RfaG1tLmMtNzI0LVxcdFxcdFxcdGdvdG8gZXJyb3I7XFxuLS1cXG5saWIvdGVzdF9obW0uYz0xNzc5PXN0YXRpYyBpbnQgZG1pcnJvcl9kZXZpY2VfaW5pdChzdHJ1Y3QgZG1pcnJvcl9kZXZpY2UgKm1kZXZpY2UsIGludCBpZClcXG4tLVxcbmxpYi90ZXN0X2htbS5jLTE3OTktXFx0LyogQnVpbGQgYSBsaXN0IG9mIGZyZWUgWk9ORV9ERVZJQ0Ugc3RydWN0IHBhZ2VzICovXFxubGliL3Rlc3RfaG1tLmM6MTgwMDpcXHRyZXQgPSBkbWlycm9yX2FsbG9jYXRlX2NodW5rKG1kZXZpY2UsIE5VTEwsIGZhbHNlKTtcXG5saWIvdGVzdF9obW0uYy0xODAxLVxcdGlmIChyZXQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDA3OjQxOjUyLjY4ODIxNzVaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTY5MzY3MzAzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbml0aWFsIFRob3VnaHRzIG9uIGBkbWlycm9yX2RldmljZV9pbml0YCBhbmQgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIGBkbWlycm9yX2RldmljZV9pbml0YCBjYWxscyBgZG1pcnJvcl9hbGxvY2F0ZV9jaHVua2Ag4oCTIG5pY2UsIHN0cmFpZ2h0Zm9yd2FyZC4gVGhhdCBmdW5jdGlvbiBpbiB0dXJuIGFsbG9jYXRlcyBhIGNodW5rIGFuZCB0aGVuIGNhbGxzIGBtZW1yZW1hcF9wYWdlc2AuIFRoaXMgaXMgZXhhY3RseSB3aGF0IEkgd2FzIGhvcGluZyBmb3IsIGFzIGl0IG1lYW5zIHRoaXMgY3JpdGljYWwgYWxsb2NhdGlvbiBpcyB1bmNvbmRpdGlvbmFsbHkgdHJpZ2dlcmVkIHJpZ2h0IGF0IG1vZHVsZSBsb2FkIG9yIGJvb3QuIEV4Y2VsbGVudC4gTm93LCBvbnRvIHRoZSBjb25maWd1cmF0aW9uIGZvciBgVEVTVF9ITU1gLlxuXG5SaWdodCwgbGV0J3Mgc2VlLi4uIGBURVNUX0hNTWAgZGVwZW5kcyBvbiBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGFuZCBgREVWSUNFX1BSSVZBVEVgLiBgREVWSUNFX1BSSVZBVEVgIGZ1cnRoZXIgcmVsaWVzIG9uIGBaT05FX0RFVklDRWAsIGFuZCBgWk9ORV9ERVZJQ0VgIHJlcXVpcmVzIGBNRU1PUllfSE9UUExVR2AsIGBNRU1PUllfSE9UUkVNT1ZFYCwgYW5kIGBTUEFSU0VNRU1fVk1FTU1BUGAuIE9rYXksIHNvIHRvIGJlIHN1cmUgdGhpcyBpcyB3b3JraW5nIHJpZ2h0IEknbGwgd2FudCB0byBhZGQ6XG4qICAgYFRFU1RfSE1NYFxuKiAgIGBERVZJQ0VfUFJJVkFURWBcbiogICBgWk9ORV9ERVZJQ0VgXG4qICAgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYFxuKiAgIGBNRU1PUllfSE9UUExVR2BcbiogICBgTUVNT1JZX0hPVFJFTU9WRWBcbiogICBgU1BBUlNFTUVNX1ZNRU1NQVBgXG5cbldhaXQgYSBzZWNvbmQsIGhvbGQgb24uLi4gaXNuJ3QgYFNQQVJTRU1FTV9WTUVNTUFQYCB1c3VhbGx5IGVuYWJsZWQgYnkgZGVmYXVsdCBvbiB4ODZfNjQ/IEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGF0LiBMZXQgbWUgcXVpY2tseSBzY2FuIGBtbS9LY29uZmlnYCB0byBjb25maXJtLiBJdCdzIGFsd2F5cyBiZXN0IHRvIGJlIHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1MzA2LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjU1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDA3OjQxOjU4LjM4MTg5MzU2M1oiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY5NTEwNzEyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgU1BBUlNFTUVNX1ZNRU1NQVBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz00NTE9Y29uZmlnIFNQQVJTRU1FTV9FWFRSRU1FXFxuLS1cXG5tbS9LY29uZmlnLTQ1NC1cXG5tbS9LY29uZmlnOjQ1NTpjb25maWcgU1BBUlNFTUVNX1ZNRU1NQVBfRU5BQkxFXFxubW0vS2NvbmZpZy00NTYtXFx0Ym9vbFxcbm1tL0tjb25maWctNDU3LVxcbm1tL0tjb25maWc6NDU4OmNvbmZpZyBTUEFSU0VNRU1fVk1FTU1BUFxcbm1tL0tjb25maWctNDU5LVxcdGRlZl9ib29sIHlcXG4tLVxcbm1tL0tjb25maWctNDY1LVxcbm1tL0tjb25maWc6NDY2OmNvbmZpZyBTUEFSU0VNRU1fVk1FTU1BUF9QUkVJTklUXFxubW0vS2NvbmZpZy00NjctXFx0Ym9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QwNzo0MjowMC4wNzcwMTIyNloiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NjAxMTQ2NTY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBDb2RlIE1vZGlmaWNhdGlvbioqXG5cbk9rYXksIHNvIGlmIGBTUEFSU0VNRU1fVk1FTU1BUF9FTkFCTEVgIGlzIHNldCwgYFNQQVJTRU1FTV9WTUVNTUFQYCBpcyBhdXRvbWF0aWNhbGx5IGRlZmluZWQuIFRoYXQncyBzdHJhaWdodGZvcndhcmQuIExldCdzIG1ha2Ugc3VyZSB3ZSBpbmNsdWRlIGBURVNUX0hNTWAsIGBERVZJQ0VfUFJJVkFURWAsIGBaT05FX0RFVklDRWAsIGFuZCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGluIG91ciBjb25zaWRlcmF0aW9uLiBJIHJlbWVtYmVyIFN5emthbGxlcidzIGNvbmZpZ3VyYXRpb25zIHR5cGljYWxseSBpbmNsdWRlIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAsIHNvIHRoYXQncyBzb21ldGhpbmcgdG8ga2VlcCBpbiBtaW5kLlxuXG5Ob3csIGxldCdzIHJlLWV4YW1pbmUgdGhpcyBwYXRjaCBhbmQgcGlucG9pbnQgdGhlIGtleSBmdW5jdGlvbnMgaW1wYWN0ZWQuIEl0IGxvb2tzIGxpa2UgdGhlIGNoYW5nZSB0b3VjaGVzIGBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaGAsIHNwZWNpZmljYWxseSB0byBvcHRpbWl6ZSBgbWVtY3B5X2ZsdXNoY2FjaGVgIGZvciBmaXhlZCBzaXplcy4gSW50ZXJlc3RpbmcuIGBtZW1jcHlfZmx1c2hjYWNoZWAgaXMgdXNlZCB3aXRoaW4gYG1lbWNweV9ub250ZW1wb3JhbGAsIHdoaWNoIHRoZW4gZ2V0cyBjYWxsZWQgYnkgYHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9mcm9tX3RlbXBsYXRlYC4gSW4gdHVybiwgdGhhdCBmdW5jdGlvbiBpcyB1c2VkIGJ5IGJvdGggYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYCBhbmQgYG1lbW1hcF9pbml0X2NvbXBvdW5kYC5cblxuVGhlcmVmb3JlLCBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgIGlzIHRoZSBwcmltYXJ5IGZ1bmN0aW9uIHRvIGZvY3VzIG9uLCBnaXZlbiB0aGUgY2FsbCBjaGFpbi4gQnV0IHdhaXQsIGlzIGBtZW1tYXBfaW5pdF9jb21wb3VuZGAgcmVhY2hhYmxlIHRvbz8gWWVzLCBhIHF1aWNrIGNoZWNrIHJldmVhbHMgdGhhdCBgbWVtbWFwX2luaXRfY29tcG91bmRgIGlzIGNhbGxlZCBieSBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgIGlmIGBwZ21hcC1cdTAwM2V2bWVtbWFwX3NoaWZ0YCBpcyBhY3R1YWxseSBzZXQuIE9rYXksIEknbGwgbmVlZCB0byBjaGVjayB0aGUgaW1wbGVtZW50YXRpb24gb2YgYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYCBpbiBgbW0vbW1faW5pdC5jYCB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBpbXBhY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2MDY3LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjg5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDA3OjQyOjA1LjY3ODE2MjcxNVoiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYwMzcxMzA3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1tYXBfaW5pdF9jb21wb3VuZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tbV9pbml0LmM9MTExNT1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgY29tcG91bmRfbnJfcGFnZXModW5zaWduZWQgbG9uZyBwZm4sXFxuLS1cXG5tbS9tbV9pbml0LmMtMTEzMC1cXG5tbS9tbV9pbml0LmM6MTEzMTpzdGF0aWMgdm9pZCBfX3JlZiBtZW1tYXBfaW5pdF9jb21wb3VuZChzdHJ1Y3QgcGFnZSAqaGVhZCxcXG5tbS9tbV9pbml0LmMtMTEzMi1cXHRcXHRcXHRcXHQgICAgICAgdW5zaWduZWQgbG9uZyBoZWFkX3BmbixcXG4tLVxcbm1tL21tX2luaXQuYz0xMTcyPXZvaWQgX19yZWYgbWVtbWFwX2luaXRfem9uZV9kZXZpY2Uoc3RydWN0IHpvbmUgKnpvbmUsXFxuLS1cXG5tbS9tbV9pbml0LmMtMTIyNC1cXG5tbS9tbV9pbml0LmM6MTIyNTpcXHRcXHRtZW1tYXBfaW5pdF9jb21wb3VuZChwYWdlLCBwZm4sIHpvbmVfaWR4LCBuaWQsIHBnbWFwLFxcbm1tL21tX2luaXQuYy0xMjI2LVxcdFxcdFxcdFxcdCAgICAgY29tcG91bmRfbnJfcGFnZXMocGZuLCBhbHRtYXAsIHBnbWFwKSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDA3OjQyOjA3LjI4MTg4MjI4M1oiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTQ0NTUyMjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGVjb25zdHJ1Y3RpbmcgdGhlIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAgRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBjb2RlLCBhbmQgaXQgbG9va3MgbGlrZSBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgIGlzIHRoZSBjZW50cmFsIHBvaW50IG9mIGludGVyZXN0LCB0aGUgbWFpbiBlbnRyeSBwb2ludCB0byB1bmRlcnN0YW5kLiBUaGF0J3MgZ29vZDsgaXQgZ2l2ZXMgbWUgYSBkZWZpbmVkIHBsYWNlIHRvIHN0YXJ0LlxuXG5Ob3cgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBiZXR0ZXIuIFRvIGdldCBhIGhvbGlzdGljIHZpZXcsIEkgd29uZGVyIGlmIG90aGVyIGZ1bmN0aW9ucyBjYWxsIGBtZW1jcHlfbm9udGVtcG9yYWxgPyBJdCdzIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIGhvdyBgbWVtY3B5X25vbnRlbXBvcmFsYCBpcyB1c2VkIGVsc2V3aGVyZSBpbiB0aGlzIGNvbnRleHQgc28gdGhhdCBJIGNhbiBzZWUgdGhlIHBvdGVudGlhbCBmb3IgY29kZSByZXVzZSBhbmQgd2hlcmUgdGhlIG9wdGltaXphdGlvbnMgbWlnaHQgYXBwbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2OTU4LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMDc6NDI6MTAuMjI2NDM3NDE0WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjQ5NDY0OTc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbWNweV9ub250ZW1wb3JhbFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaD0xMTI9c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG1lbWNweV9mbHVzaGNhY2hlKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLFxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmgtMTU3LVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oOjE1ODojZGVmaW5lIG1lbWNweV9ub250ZW1wb3JhbCBtZW1jcHlfbm9udGVtcG9yYWxcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaC0xNTktLypcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oLTE2Mi0gKi9cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaDoxNjM6c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG1lbWNweV9ub250ZW1wb3JhbCh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYyxcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaC0xNjQtXFx0XFx0c2l6ZV90IGNudClcXG4tLVxcbmluY2x1ZGUvbGludXgvc3RyaW5nLmg9Mjc1PXN0YXRpYyBpbmxpbmUgdm9pZCBtZW1jcHlfZmx1c2hjYWNoZSh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IGNudClcXG4tLVxcbmluY2x1ZGUvbGludXgvc3RyaW5nLmgtMjgwLVxcbmluY2x1ZGUvbGludXgvc3RyaW5nLmg6MjgxOiNpZm5kZWYgbWVtY3B5X25vbnRlbXBvcmFsXFxuaW5jbHVkZS9saW51eC9zdHJpbmcuaC0yODItLypcXG5pbmNsdWRlL2xpbnV4L3N0cmluZy5oOjI4MzogKiBtZW1jcHlfbm9udGVtcG9yYWwoKSByZXF1ZXN0cyBhIG5vbi10ZW1wb3JhbCBjb3B5IHdoZW4gdGhlXFxuaW5jbHVkZS9saW51eC9zdHJpbmcuaC0yODQtICogYXJjaGl0ZWN0dXJlIGhhcyBhIHN1aXRhYmxlIGJhY2tlbmQuIEFyY2hpdGVjdHVyZXMgd2l0aG91dCBhXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3N0cmluZy5oLTI4OS0gKi9cXG5pbmNsdWRlL2xpbnV4L3N0cmluZy5oOjI5MDojZGVmaW5lIG1lbWNweV9ub250ZW1wb3JhbChkc3QsIHNyYywgbGVuKSBcXFxcXFxuaW5jbHVkZS9saW51eC9zdHJpbmcuaC0yOTEtXFx0KCh2b2lkKW1lbWNweShkc3QsIHNyYywgbGVuKSlcXG4tLVxcbm1tL21tX2luaXQuYz0xMDk1PXN0YXRpYyB2b2lkIHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9mcm9tX3RlbXBsYXRlKHN0cnVjdCBwYWdlICpwYWdlLFxcbi0tXFxubW0vbW1faW5pdC5jLTExMDMtXFx0em9uZV9kZXZpY2VfcGFnZV91cGRhdGVfdGVtcGxhdGUodGVtcGxhdGUsIHBmbik7XFxubW0vbW1faW5pdC5jOjExMDQ6XFx0bWVtY3B5X25vbnRlbXBvcmFsKHBhZ2UsIHRlbXBsYXRlLCBzaXplb2YoKnBhZ2UpKTtcXG5tbS9tbV9pbml0LmMtMTEwNS19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDA3OjQyOjExLjg3NTkwODI0MloiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTU0MTM1OTE3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFN0cmF0ZWd5IGZvciBaT05FX0RFVklDRSBNZW1vcnkgT3B0aW1pemF0aW9uKipcblxuT2theSwgc28gaGVyZSdzIHRoZSBicmVha2Rvd24gb2Ygd2hhdCBJIG5lZWQgdG8gZm9jdXMgb24uIEl0IGxvb2tzIGxpa2UgYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYCBpcyB0aGUgY2VudHJhbCBmdW5jdGlvbiBmb3IgdGhpcyBwYXRjaCwgYXMgaXQncyB0aGUgY29yZSBlbnRyeSBwb2ludCBmb3IgdGhlIG9wdGltaXplZCBtZW1vcnkgbWFuYWdlbWVudCB3aXRoaW4gYFpPTkVfREVWSUNFYC4gIEkgc2hvdWxkIGFsc28gaW5jbHVkZSBgbWVtcmVtYXBfcGFnZXNgIGFuZCBgZGV2bV9tZW1yZW1hcF9wYWdlc2AgaW4gbXkgYEZvY3VzU3ltYm9sc2AgdG8gZW5zdXJlIHRoZSBmdXp6ZXIgZ2V0cyB0byB0aGF0IGNyaXRpY2FsIHBhdGguICBgem9uZV9kZXZpY2VfcGFnZV9pbml0X2Zyb21fdGVtcGxhdGVgIGRvZXNuJ3Qgc2VlbSB0byBiZSBhIGtleSBlbnRyeSBwb2ludCwganVzdCBhIGhlbHBlciwgc28gSSdsbCBpZ25vcmUgdGhhdC5cblxuTGV0J3MgY2xhcmlmeTogTXkgcHJpbWFyeSBnb2FsIGlzIHRvIGZ1enogdGhlIGBaT05FX0RFVklDRWAgbWVtb3J5IG9wdGltaXphdGlvbi4gVGhpcyBvcHRpbWl6YXRpb24gcmV2b2x2ZXMgYXJvdW5kIHVzaW5nIHRlbXBsYXRlcyBhbmQgbm9uLXRlbXBvcmFsIG1lbW9yeSBjb3BpZXMgZHVyaW5nIGBzdHJ1Y3QgcGFnZWAgaW5pdGlhbGl6YXRpb24uIFRoaXMgaXMgYSBjcnVjaWFsIGFyZWEgd2l0aGluIG1lbW9yeSBtYW5hZ2VtZW50LCB3aGljaCBjYW4gYmUgcmVhY2hlZCB0aHJvdWdoIGhvdHBsdWdnaW5nIGRldmljZSBtZW1vcnksIHN1Y2ggYXMgdGhyb3VnaCBsb2FkaW5nIHRoZSBgVEVTVF9ITU1gIG1vZHVsZSBvciB3aXRoIERBWC9QTUVNIGRldmljZXMuXG5cblRoZSBwYXRjaCBpbmNsdWRlcyBtb2RpZmljYXRpb25zIHRvIGBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaGAgd2l0aCB0aGUgYWRkaXRpb24gb2YgYG1vdm50aV8qYCBpbnN0cnVjdGlvbnMgYW5kIHRoZWlyIHVzZSBpbiBgbWVtY3B5X2ZsdXNoY2FjaGVgLiAgV2hpbGUgYG1lbWNweV9mbHVzaGNhY2hlYCBpdHNlbGYgaXMgd2lkZWx5IHVzZWQsIHBhcnRpY3VsYXJseSBpbiBjb250ZXh0cyBsaWtlIGBkcml2ZXJzL2RheC9mc2Rldi5jYCwgYGRyaXZlcnMvbnZkaW1tL3BtZW0uY2AsIGBsaWIvaW92X2l0ZXIuY2AsIGFuZCBgZHJpdmVycy9tZC9kbS13cml0ZWNhY2hlLmNgLCB0aGUgb3B0aW1pemF0aW9uIGlzICpzcGVjaWZpY2FsbHkqIHRhaWxvcmVkIGZvciB0aGUgc2l6ZXMgb2YgYHN0cnVjdCBwYWdlYCBvbiB4ODZfNjQsIHdoaWNoIGlzIDY0IGJ5dGVzICh3aXRob3V0IGBDT05GSUdfTUVNQ0dgKSwgb3IgODAgb3IgOTYgYnl0ZXMgKHdpdGggb3RoZXIgY29uZmlncykuIFRoZXJlZm9yZSwgdGhlIGZ1enplciBpcyBiZXN0IGRpcmVjdGVkIHRvd2FyZHMgYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYCBkaXJlY3RseS5cblxuVGhlIGBURVNUX0hNTWAgbW9kdWxlIHNlZW1zIGxpa2UgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBPbiBsb2FkaW5nLCBgVEVTVF9ITU1gIGNhbGxzIGBkbWlycm9yX2RldmljZV9pbml0YCwgd2hpY2ggdGhlbiBjYWxscyBgZG1pcnJvcl9hbGxvY2F0ZV9jaHVua2AuIFRoaXMgdWx0aW1hdGVseSBsZWFkcyB0byBgbWVtcmVtYXBfcGFnZXNgIGFuZCB0aGVuIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAuICBJIHNob3VsZCBjaGVjayBpZiBgVEVTVF9ITU1gIGlzIGVub3VnaC4gVGhlIGBobW1fZG1pcnJvcl9jbWRgIGlvY3RsIGluIGBURVNUX0hNTWAgZ2l2ZXMgbW9yZSBhbGxvY2F0aW9uIGNvbnRyb2wsIHNvIGlmIGBURVNUX0hNTWAgaXMgYnVpbHQtaW4gdGhpcyBoYXBwZW5zIGF0IGJvb3QuIE90aGVyd2lzZSwgSSBjYW4gdXNlIGFuIGlvY3RsIHRvIHRyaWdnZXIgbW9yZSBhbGxvY2F0aW9ucy5cblxuQ3J1Y2lhbGx5LCB1c2VyIHNwYWNlICpjYW4qIGRpcmVjdGx5IHRyaWdnZXIgdGhpcyB0aHJvdWdoIHBhZ2UgZmF1bHRzLiBgZG1pcnJvcl9hbGxvY2F0ZV9jaHVua2AgaXMgYWxzbyBjYWxsZWQgdGhyb3VnaCBgZG1pcnJvcl9kZXZtZW1fYWxsb2NfcGFnZWAsIHdoaWNoIGlzIHVzZWQgZHVyaW5nIHBhZ2UgZmF1bHRzIHRocm91Z2ggYGRtaXJyb3JfZG9fd3JpdGVgIGFuZCBgZG1pcnJvcl9kb19yZWFkYC4gVGhpcyBtZWFucyBJIGNhbiBtbWFwIHRoZSBkZXZpY2UgbWVtb3J5IGFuZCBhY2Nlc3MgaXQsIG9yIHVzZSB0aGUgaW9jdGxzLCB0byB0cmlnZ2VyIHRoZSBjb2RlIHBhdGguICBUaGF0J3MgZ3JlYXQgZm9yIGZ1enppbmcgYmVjYXVzZSBpdCBnaXZlcyBhIGxvdCBtb3JlIGNvbnRyb2wuIEkgY2FuIHVzZSB1c2VyIHNwYWNlIHRvIHNldCBpdCB1cCBuaWNlbHkuXG5cblNvLCBoZXJlJ3MgdGhlIHBsYW46XG5cbiogICAqKldvcnRoRnV6emluZzogVHJ1ZSoqIChBYnNvbHV0ZWx5LCB0aGlzIGlzIGhpZ2gtdmFsdWUpXG4qICAgKipGb2N1c1N5bWJvbHM6KiogYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYCwgYG1lbXJlbWFwX3BhZ2VzYCwgYGRldm1fbWVtcmVtYXBfcGFnZXNgXG4qICAgKipFbmFibGVDb25maWdzOioqIGBaT05FX0RFVklDRWAsIGBERVZJQ0VfUFJJVkFURWAsIGBURVNUX0hNTWAsIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWBcblxuVGhpcyBsb29rcyBsaWtlIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgYSBmdXp6ZXIhIEknbGwgbm93IGV4cGxvcmUgYGRtaXJyb3JfZGV2bWVtX2FsbG9jX3BhZ2VgLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNzcwNSwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QwNzo0MjoyMy40MTcyNzExOTZaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MTMxNjExNTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZG1pcnJvcl9kZXZtZW1fYWxsb2NfcGFnZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJsaWIvdGVzdF9obW0uYy00MS0gKiBGb3IgZGV2aWNlX3ByaXZhdGUgcGFnZXMsIGRwYWdlIGlzIGp1c3QgYSBkdW1teSBzdHJ1Y3QgcGFnZVxcbmxpYi90ZXN0X2htbS5jOjQyOiAqIHJlcHJlc2VudGluZyBhIHBpZWNlIG9mIGRldmljZSBtZW1vcnkuIGRtaXJyb3JfZGV2bWVtX2FsbG9jX3BhZ2VcXG5saWIvdGVzdF9obW0uYy00My0gKiBhbGxvY2F0ZXMgYSByZWFsIHN5c3RlbSBtZW1vcnkgcGFnZSBhcyBiYWNraW5nIHN0b3JhZ2UgdG8gZmFrZSBhXFxuLS1cXG5saWIvdGVzdF9obW0uYz01NTg9c3RhdGljIGludCBkbWlycm9yX2FsbG9jYXRlX2NodW5rKHN0cnVjdCBkbWlycm9yX2RldmljZSAqbWRldmljZSxcXG4tLVxcbmxpYi90ZXN0X2htbS5jLTY4OS1cXG5saWIvdGVzdF9obW0uYzo2OTA6c3RhdGljIHN0cnVjdCBwYWdlICpkbWlycm9yX2Rldm1lbV9hbGxvY19wYWdlKHN0cnVjdCBkbWlycm9yICpkbWlycm9yLFxcbmxpYi90ZXN0X2htbS5jLTY5MS1cXHRcXHRcXHRcXHRcXHQgICAgICBib29sIGlzX2xhcmdlKVxcbi0tXFxubGliL3Rlc3RfaG1tLmM9NzM5PXN0YXRpYyB2b2lkIGRtaXJyb3JfbWlncmF0ZV9hbGxvY19hbmRfY29weShzdHJ1Y3QgbWlncmF0ZV92bWEgKmFyZ3MsXFxuLS1cXG5saWIvdGVzdF9obW0uYy03NzAtXFx0XFx0fSBlbHNlXFxubGliL3Rlc3RfaG1tLmM6NzcxOlxcdFxcdFxcdGRwYWdlID0gZG1pcnJvcl9kZXZtZW1fYWxsb2NfcGFnZShkbWlycm9yLCBpc19sYXJnZSk7XFxubGliL3Rlc3RfaG1tLmMtNzcyLVxcbi0tXFxubGliL3Rlc3RfaG1tLmMtNzg5LVxcdFxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBuciBcXHUwMDI2XFx1MDAyNiBhZGRyIFxcdTAwM2MgYXJncy1cXHUwMDNlZW5kOyBpKyspIHtcXG5saWIvdGVzdF9obW0uYzo3OTA6XFx0XFx0XFx0XFx0ZHBhZ2UgPSBkbWlycm9yX2Rldm1lbV9hbGxvY19wYWdlKGRtaXJyb3IsIGZhbHNlKTtcXG5saWIvdGVzdF9obW0uYy03OTEtXFx0XFx0XFx0XFx0cnBhZ2UgPSBCQUNLSU5HX1BBR0UoZHBhZ2UpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QwNzo0MjoyNS4wMzA0MzkwOTVaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTE3MDYwMDYwNTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgYGRtaXJyb3JgIEZ1enppbmcgU3RyYXRlZ3kqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gdGhpbmtpbmcgYWJvdXQgaG93IHRvIGVmZmVjdGl2ZWx5IGZ1enogdGhpcyBgZG1pcnJvcmAgZnVuY3Rpb25hbGl0eSwgYW5kIGhlcmUncyBteSBsaW5lIG9mIHRob3VnaHQuIEZpcnN0LCBJIHJlbWVtYmVyIHRoYXQgYGRtaXJyb3JfZGV2bWVtX2FsbG9jX3BhZ2VgIGNhbGxzIGBkbWlycm9yX2FsbG9jYXRlX2NodW5rYCB3aGVuIGl0IG5lZWRzIG1vcmUgbWVtb3J5LiBBbmQgY3JpdGljYWxseSwgYGRtaXJyb3JfbWlncmF0ZV9hbGxvY19hbmRfY29weWAgaXMgdHJpZ2dlcmVkIGR1cmluZyBtaWdyYXRpb24gdG8gZGV2aWNlIG1lbW9yeSB2aWEgdGhhdCBgSE1NX0RNSVJST1JfTUlHUkFURV9UT19ERVZgIGlvY3RsLiBTbywgdGhhdCBtZWFucyBzeXprYWxsZXIgY2FuIHJlYWRpbHkgZXhlcmNpc2UgdGhpcyBjb2RlIHBhdGgganVzdCBieSBvcGVuaW5nIGAvZGV2L2htbV9kbWlycm9yMGAgYW5kIHRoZW4gaXNzdWluZyB0aGUgcmVsZXZhbnQgaW9jdGxzLlxuXG5Ob3csIGxldCdzIG5haWwgZG93biB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMuIFdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBidWlsZCBoYXM6IGBaT05FX0RFVklDRWAsIGBERVZJQ0VfUFJJVkFURWAsIGBURVNUX0hNTWAsIGFuZCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGVuYWJsZWQuIExldCBtZSBqdXN0IGNvbmZpcm0gYW55IG90aGVyIGRlcGVuZGVuY2llcyBmb3IgYFRFU1RfSE1NYCBiZWNhdXNlIEkga25vdyB0aG9zZSB0aGluZ3MgY2FuIGdldCB0cmlja3kuIFJpZ2h0LCBpdCBkZXBlbmRzIG9uIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgYW5kIGBERVZJQ0VfUFJJVkFURWAuIEFuZCBgREVWSUNFX1BSSVZBVEVgIG5lZWRzIGBaT05FX0RFVklDRWAsIHdoaWNoIGluIHR1cm4gbmVlZHMgYE1FTU9SWV9IT1RQTFVHYCwgYE1FTU9SWV9IT1RSRU1PVkVgLCBhbmQgYFNQQVJTRU1FTV9WTUVNTUFQYC4gRnVydGhlcm1vcmUsIGBNRU1PUllfSE9UUExVR2AgZGVwZW5kcyBvbiBlaXRoZXIgYFNQQVJTRU1FTWAgb3IgYFg4Nl82NGAsIGFuZCBgTUVNT1JZX0hPVFJFTU9WRWAgcmVxdWlyZXMgYE1FTU9SWV9IT1RQTFVHYCBhbmQgYEFSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkVgLiBTbywgdG8gYmUgY2VydGFpbiwgd2Ugc2hvdWxkIGhhdmUgdGhlIGZvbGxvd2luZyBlbmFibGVkOlxuXG5gWk9ORV9ERVZJQ0VgXG5gREVWSUNFX1BSSVZBVEVgXG5gVEVTVF9ITU1gXG5gVFJBTlNQQVJFTlRfSFVHRVBBR0VgXG5gTUVNT1JZX0hPVFBMVUdgXG5gTUVNT1JZX0hPVFJFTU9WRWBcblxuQWN0dWFsbHksIHdhaXQgYSBzZWNvbmQuIGBNRU1PUllfSE9UUExVR2AgYW5kIGBNRU1PUllfSE9UUkVNT1ZFYCBhcmUgcHJldHR5IHN0YW5kYXJkIGluIHN5emthbGxlciBjb25maWdzLCBidXQgaXTigJlzIGFsd2F5cyBzYWZlciB0byBsaXN0IHRoZW0gZXhwbGljaXRseSB0byBiZSBjZXJ0YWluLiBZZXMsIEknbGwgZ28gd2l0aCB0aGF0IG1vcmUgY29uc2VydmF0aXZlIHNldC5cblxuTm93LCBsZXQncyByZWZpbmUgdGhlIGZ1enppbmcgc3ltYm9scy4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgb2YgYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYCwgYG1lbXJlbWFwX3BhZ2VzYCwgYW5kIGBkZXZtX21lbXJlbWFwX3BhZ2VzYC4gTGV0IG1lIGNoZWNrIGV4cG9ydCBzdGF0dXM6IGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAgaXNuJ3QgZXhwb3J0ZWQsIGJ1dCBpdCdzIGdsb2JhbCBhbmQgdGhlcmVmb3JlIGFjY2Vzc2libGUuIGBtZW1yZW1hcF9wYWdlc2AgaXMgZXhwb3J0ZWQsIGFuZCBgZGV2bV9tZW1yZW1hcF9wYWdlc2AgaXMgYWxzbyBleHBvcnRlZC5cblxuSSB0aGluayB0aGlzIGxvb2tzIGdvb2QuXG5cbk9rYXksIG9uZSBsYXN0IHBhc3Mgb3ZlciB0aGUgcGF0Y2ggaXRzZWxmIHRvIGVuc3VyZSBJIGhhdmVuJ3Qgb3Zlcmxvb2tlZCBhbnkgaGlkZGVuIGZlYXR1cmVzIG9yIHJlbGF0ZWQgY29kZS4gSSBzZWUgdGhhdCB0aGUgcGF0Y2ggaW50cm9kdWNlcyBgc2V0X3BhZ2Vfc2VjdGlvbl9mcm9tX3BmbmAgaW4gYGluY2x1ZGUvbGludXgvbW0uaGAuIEl0IGNoYW5nZXMgYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYCBhbmQgYG1lbW1hcF9pbml0X2NvbXBvdW5kYCB0byB1c2UgYSB0ZW1wbGF0ZSBwYWdlIGFuZCBgbWVtY3B5X25vbnRlbXBvcmFsYC4gSXQgYWRkcyBgbWVtY3B5X25vbnRlbXBvcmFsYCB0byBgaW5jbHVkZS9saW51eC9zdHJpbmcuaGAgYW5kIGBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaGAuIEFkZGl0aW9uYWxseSwgaXQgaW5jbHVkZXMgYG1vdm50aV84YCwgYG1vdm50aV8xNmAsIGBtb3ZudGlfMzJgLCBhbmQgYG1vdm50aV82NGAgaW4gYGFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oYC4gRmluYWxseSwgdGhlIHBhdGNoIGNoYW5nZXMgYG1lbWNweV9mbHVzaGNhY2hlYCBpbiBgYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmhgLlxuXG5FdmVyeXRoaW5nIGhlcmUgaXMgZnVuZGFtZW50YWxseSBhYm91dCBvcHRpbWl6aW5nIGBzdHJ1Y3QgcGFnZWAgaW5pdGlhbGl6YXRpb24gZm9yIGBaT05FX0RFVklDRWAgbWVtb3J5LiBJbXBvcnRhbnRseSwgdGhlIGxvZ2ljIHNlZW1zIGZ1bmN0aW9uYWwsIHJlYWNoYWJsZSwgYW5kIHF1aXRlIHN1c2NlcHRpYmxlIHRvIHN1YnRsZSBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZXMuIEZ1enppbmcgaXQgaXMgZGVmaW5pdGVseSB3b3J0aCBpdC4gV2UncmUgZGVhbGluZyB3aXRoIG1lbW9yeSBpbml0aWFsaXphdGlvbiBhbmQgbm9uLXRlbXBvcmFsIGNvcGllcywgYW5kIHRob3NlIG9mdGVuIGhhcmJvciBhbGlnbm1lbnQgaXNzdWVzLCBtaXNzaW5nIGJhcnJpZXJzLCBvciBpbmNvcnJlY3Qgc2l6ZXMuXG5cbk5vdywgSSdtIHJlYWR5IHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzk4MjIsIk91dHB1dFRva2VucyI6MTgzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Nzg1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDA3OjQyOjM2LjczNjQ0ODA3N1oiLCJTZXEiOjQ0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczNjc1MzY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJaT05FX0RFVklDRVwiLFxuICAgIFwiREVWSUNFX1BSSVZBVEVcIixcbiAgICBcIlRFU1RfSE1NXCIsXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiLFxuICAgIFwiTUVNT1JZX0hPVFBMVUdcIixcbiAgICBcIk1FTU9SWV9IT1RSRU1PVkVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtZW1tYXBfaW5pdF96b25lX2RldmljZVwiLFxuICAgIFwibWVtcmVtYXBfcGFnZXNcIixcbiAgICBcImRldm1fbWVtcmVtYXBfcGFnZXNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvcHRpbWl6ZXMgc3RydWN0IHBhZ2UgaW5pdGlhbGl6YXRpb24gZm9yIFpPTkVfREVWSUNFIG1lbW9yeSBieSB1c2luZyBhIHRlbXBsYXRlIHBhZ2UgYW5kIG5vbi10ZW1wb3JhbCBtZW1vcnkgY29waWVzIChtZW1jcHlfbm9udGVtcG9yYWwpLiBUaGlzIGlzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgcmVhY2hhYmxlIHZpYSBkZXZpY2UgbWVtb3J5IGhvdHBsdWcsIHN1Y2ggYXMgd2hlbiBsb2FkaW5nIHRoZSBURVNUX0hNTSBtb2R1bGUgb3IgdXNpbmcgREFYL1BNRU0gZGV2aWNlcy4gRnV6emluZyB0aGlzIGlzIGltcG9ydGFudCB0byBjYXRjaCBwb3RlbnRpYWwgYWxpZ25tZW50IG9yIG1lbW9yeSBjb3JydXB0aW9uIGlzc3VlcyBkdXJpbmcgcGFnZSBpbml0aWFsaXphdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJaT05FX0RFVklDRVwiLFxuICAgIFwiREVWSUNFX1BSSVZBVEVcIixcbiAgICBcIlRFU1RfSE1NXCIsXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiLFxuICAgIFwiTUVNT1JZX0hPVFBMVUdcIixcbiAgICBcIk1FTU9SWV9IT1RSRU1PVkVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtZW1tYXBfaW5pdF96b25lX2RldmljZVwiLFxuICAgIFwibWVtcmVtYXBfcGFnZXNcIixcbiAgICBcImRldm1fbWVtcmVtYXBfcGFnZXNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvcHRpbWl6ZXMgc3RydWN0IHBhZ2UgaW5pdGlhbGl6YXRpb24gZm9yIFpPTkVfREVWSUNFIG1lbW9yeSBieSB1c2luZyBhIHRlbXBsYXRlIHBhZ2UgYW5kIG5vbi10ZW1wb3JhbCBtZW1vcnkgY29waWVzIChtZW1jcHlfbm9udGVtcG9yYWwpLiBUaGlzIGlzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgcmVhY2hhYmxlIHZpYSBkZXZpY2UgbWVtb3J5IGhvdHBsdWcsIHN1Y2ggYXMgd2hlbiBsb2FkaW5nIHRoZSBURVNUX0hNTSBtb2R1bGUgb3IgdXNpbmcgREFYL1BNRU0gZGV2aWNlcy4gRnV6emluZyB0aGlzIGlzIGltcG9ydGFudCB0byBjYXRjaCBwb3RlbnRpYWwgYWxpZ25tZW50IG9yIG1lbW9yeSBjb3JydXB0aW9uIGlzc3VlcyBkdXJpbmcgcGFnZSBpbml0aWFsaXphdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowjhv67[1] Phase: Succeeded StartedAt: 2026-08-03 07:42:47 +0000 UTC FinishedAt: 2026-08-03 07:42:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjhv67[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-03 07:42:47 +0000 UTC FinishedAt: 2026-08-03 07:42:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjhv67[2] Phase: Succeeded StartedAt: 2026-08-03 07:42:47 +0000 UTC FinishedAt: 2026-08-03 11:31:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjhv67[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM","TRANSPARENT_HUGEPAGE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memmap_init_zone_device","memremap_pages","devm_memremap_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM","TRANSPARENT_HUGEPAGE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"31bdad63-31c2-4e82-89db-41b7bdcb73e6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-03 07:42:47 +0000 UTC FinishedAt: 2026-08-03 11:31:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM","TRANSPARENT_HUGEPAGE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memmap_init_zone_device","memremap_pages","devm_memremap_pages"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM","TRANSPARENT_HUGEPAGE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"31bdad63-31c2-4e82-89db-41b7bdcb73e6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowjhv67[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM","TRANSPARENT_HUGEPAGE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memmap_init_zone_device","memremap_pages","devm_memremap_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM","TRANSPARENT_HUGEPAGE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"31bdad63-31c2-4e82-89db-41b7bdcb73e6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-03 07:42:47 +0000 UTC FinishedAt: 2026-08-03 07:42:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjhv67[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM","TRANSPARENT_HUGEPAGE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memmap_init_zone_device","memremap_pages","devm_memremap_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM","TRANSPARENT_HUGEPAGE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"31bdad63-31c2-4e82-89db-41b7bdcb73e6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-03 07:42:47 +0000 UTC FinishedAt: 2026-08-03 07:42:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM","TRANSPARENT_HUGEPAGE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjhv67/series-workflowjhv67-convert-artifact-3384473530/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjhv67[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM","TRANSPARENT_HUGEPAGE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memmap_init_zone_device","memremap_pages","devm_memremap_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM","TRANSPARENT_HUGEPAGE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"31bdad63-31c2-4e82-89db-41b7bdcb73e6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-03 07:42:58 +0000 UTC FinishedAt: 2026-08-03 08:01:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjhv67[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM","TRANSPARENT_HUGEPAGE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memmap_init_zone_device","memremap_pages","devm_memremap_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM","TRANSPARENT_HUGEPAGE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"31bdad63-31c2-4e82-89db-41b7bdcb73e6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-03 07:42:58 +0000 UTC FinishedAt: 2026-08-03 08:01:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*bd937b21-20f2-40e7-b1b7-16d6e7a7dbf7,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjhv67/series-workflowjhv67-convert-artifact-3384473530/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "e3643ef3-be8e-407f-ac97-94f1c2e66a8a", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjhv67/series-workflowjhv67-build-action-66596200/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjhv67[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM","TRANSPARENT_HUGEPAGE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memmap_init_zone_device","memremap_pages","devm_memremap_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM","TRANSPARENT_HUGEPAGE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"31bdad63-31c2-4e82-89db-41b7bdcb73e6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-03 07:42:58 +0000 UTC FinishedAt: 2026-08-03 08:01:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*bd937b21-20f2-40e7-b1b7-16d6e7a7dbf7,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjhv67/series-workflowjhv67-convert-artifact-3384473530/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "e3643ef3-be8e-407f-ac97-94f1c2e66a8a", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjhv67/series-workflowjhv67-build-action-66596200/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjhv67[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM","TRANSPARENT_HUGEPAGE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memmap_init_zone_device","memremap_pages","devm_memremap_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM","TRANSPARENT_HUGEPAGE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"31bdad63-31c2-4e82-89db-41b7bdcb73e6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-03 08:01:20 +0000 UTC FinishedAt: 2026-08-03 08:01:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjhv67[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM","TRANSPARENT_HUGEPAGE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memmap_init_zone_device","memremap_pages","devm_memremap_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM","TRANSPARENT_HUGEPAGE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"31bdad63-31c2-4e82-89db-41b7bdcb73e6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-03 08:01:20 +0000 UTC FinishedAt: 2026-08-03 08:01:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjhv67[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM","TRANSPARENT_HUGEPAGE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memmap_init_zone_device","memremap_pages","devm_memremap_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM","TRANSPARENT_HUGEPAGE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"31bdad63-31c2-4e82-89db-41b7bdcb73e6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-03 08:01:20 +0000 UTC FinishedAt: 2026-08-03 08:01:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjhv67[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM","TRANSPARENT_HUGEPAGE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memmap_init_zone_device","memremap_pages","devm_memremap_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM","TRANSPARENT_HUGEPAGE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"31bdad63-31c2-4e82-89db-41b7bdcb73e6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-03 08:01:20 +0000 UTC FinishedAt: 2026-08-03 08:01:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM","TRANSPARENT_HUGEPAGE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"31bdad63-31c2-4e82-89db-41b7bdcb73e6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjhv67/series-workflowjhv67-convert-artifact-656323861/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjhv67[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM","TRANSPARENT_HUGEPAGE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memmap_init_zone_device","memremap_pages","devm_memremap_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM","TRANSPARENT_HUGEPAGE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"31bdad63-31c2-4e82-89db-41b7bdcb73e6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-03 08:01:30 +0000 UTC FinishedAt: 2026-08-03 08:03:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjhv67[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM","TRANSPARENT_HUGEPAGE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memmap_init_zone_device","memremap_pages","devm_memremap_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM","TRANSPARENT_HUGEPAGE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"31bdad63-31c2-4e82-89db-41b7bdcb73e6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-03 08:01:30 +0000 UTC FinishedAt: 2026-08-03 08:03:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*e3643ef3-be8e-407f-ac97-94f1c2e66a8a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjhv67/series-workflowjhv67-build-action-66596200/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowjhv67[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM","TRANSPARENT_HUGEPAGE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memmap_init_zone_device","memremap_pages","devm_memremap_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM","TRANSPARENT_HUGEPAGE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"31bdad63-31c2-4e82-89db-41b7bdcb73e6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-03 08:03:55 +0000 UTC FinishedAt: 2026-08-03 08:03:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjhv67[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM","TRANSPARENT_HUGEPAGE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memmap_init_zone_device","memremap_pages","devm_memremap_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM","TRANSPARENT_HUGEPAGE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"31bdad63-31c2-4e82-89db-41b7bdcb73e6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-03 08:03:55 +0000 UTC FinishedAt: 2026-08-03 08:03:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjhv67[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM","TRANSPARENT_HUGEPAGE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memmap_init_zone_device","memremap_pages","devm_memremap_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM","TRANSPARENT_HUGEPAGE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"31bdad63-31c2-4e82-89db-41b7bdcb73e6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-03 08:03:55 +0000 UTC FinishedAt: 2026-08-03 08:25:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjhv67[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM","TRANSPARENT_HUGEPAGE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memmap_init_zone_device","memremap_pages","devm_memremap_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM","TRANSPARENT_HUGEPAGE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"31bdad63-31c2-4e82-89db-41b7bdcb73e6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-03 08:03:55 +0000 UTC FinishedAt: 2026-08-03 08:25:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*bd937b21-20f2-40e7-b1b7-16d6e7a7dbf7,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjhv67/series-workflowjhv67-convert-artifact-656323861/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "cc42813d-c122-49d4-92d6-8c68c01cf42b", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjhv67/series-workflowjhv67-build-action-770530209/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjhv67[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM","TRANSPARENT_HUGEPAGE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memmap_init_zone_device","memremap_pages","devm_memremap_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM","TRANSPARENT_HUGEPAGE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"31bdad63-31c2-4e82-89db-41b7bdcb73e6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-03 08:03:55 +0000 UTC FinishedAt: 2026-08-03 08:24:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*bd937b21-20f2-40e7-b1b7-16d6e7a7dbf7,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjhv67/series-workflowjhv67-convert-artifact-656323861/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "cc42813d-c122-49d4-92d6-8c68c01cf42b", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjhv67/series-workflowjhv67-build-action-770530209/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjhv67[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM","TRANSPARENT_HUGEPAGE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memmap_init_zone_device","memremap_pages","devm_memremap_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM","TRANSPARENT_HUGEPAGE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"31bdad63-31c2-4e82-89db-41b7bdcb73e6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-03 08:25:00 +0000 UTC FinishedAt: 2026-08-03 08:25:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjhv67[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM","TRANSPARENT_HUGEPAGE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memmap_init_zone_device","memremap_pages","devm_memremap_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM","TRANSPARENT_HUGEPAGE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"31bdad63-31c2-4e82-89db-41b7bdcb73e6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-03 08:25:00 +0000 UTC FinishedAt: 2026-08-03 08:25:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjhv67[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM","TRANSPARENT_HUGEPAGE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memmap_init_zone_device","memremap_pages","devm_memremap_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM","TRANSPARENT_HUGEPAGE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"31bdad63-31c2-4e82-89db-41b7bdcb73e6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-03 08:25:00 +0000 UTC FinishedAt: 2026-08-03 08:27:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjhv67[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM","TRANSPARENT_HUGEPAGE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memmap_init_zone_device","memremap_pages","devm_memremap_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM","TRANSPARENT_HUGEPAGE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"31bdad63-31c2-4e82-89db-41b7bdcb73e6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-03 08:25:00 +0000 UTC FinishedAt: 2026-08-03 08:27:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*cc42813d-c122-49d4-92d6-8c68c01cf42b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjhv67/series-workflowjhv67-build-action-770530209/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowjhv67[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM","TRANSPARENT_HUGEPAGE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memmap_init_zone_device","memremap_pages","devm_memremap_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM","TRANSPARENT_HUGEPAGE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"31bdad63-31c2-4e82-89db-41b7bdcb73e6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-03 08:27:09 +0000 UTC FinishedAt: 2026-08-03 11:31:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjhv67[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM","TRANSPARENT_HUGEPAGE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memmap_init_zone_device","memremap_pages","devm_memremap_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM","TRANSPARENT_HUGEPAGE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"31bdad63-31c2-4e82-89db-41b7bdcb73e6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-03 08:27:09 +0000 UTC FinishedAt: 2026-08-03 11:31:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memmap_init_zone_device","memremap_pages","devm_memremap_pages"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*e3643ef3-be8e-407f-ac97-94f1c2e66a8a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*cc42813d-c122-49d4-92d6-8c68c01cf42b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjhv67/series-workflowjhv67-build-action-66596200/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjhv67/series-workflowjhv67-build-action-770530209/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowjhv67[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM","TRANSPARENT_HUGEPAGE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memmap_init_zone_device","memremap_pages","devm_memremap_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM","TRANSPARENT_HUGEPAGE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"31bdad63-31c2-4e82-89db-41b7bdcb73e6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-03 08:27:09 +0000 UTC FinishedAt: 2026-08-03 08:27:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjhv67[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM","TRANSPARENT_HUGEPAGE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memmap_init_zone_device","memremap_pages","devm_memremap_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM","TRANSPARENT_HUGEPAGE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"31bdad63-31c2-4e82-89db-41b7bdcb73e6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-03 08:27:09 +0000 UTC FinishedAt: 2026-08-03 08:27:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memmap_init_zone_device","memremap_pages","devm_memremap_pages"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjhv67/series-workflowjhv67-convert-artifact-173539578/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjhv67[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM","TRANSPARENT_HUGEPAGE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memmap_init_zone_device","memremap_pages","devm_memremap_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM","TRANSPARENT_HUGEPAGE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"31bdad63-31c2-4e82-89db-41b7bdcb73e6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-03 08:27:09 +0000 UTC FinishedAt: 2026-08-03 08:27:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjhv67[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM","TRANSPARENT_HUGEPAGE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memmap_init_zone_device","memremap_pages","devm_memremap_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM","TRANSPARENT_HUGEPAGE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"31bdad63-31c2-4e82-89db-41b7bdcb73e6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-03 08:27:09 +0000 UTC FinishedAt: 2026-08-03 08:27:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjhv67[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM","TRANSPARENT_HUGEPAGE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memmap_init_zone_device","memremap_pages","devm_memremap_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM","TRANSPARENT_HUGEPAGE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"31bdad63-31c2-4e82-89db-41b7bdcb73e6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-03 08:27:09 +0000 UTC FinishedAt: 2026-08-03 08:27:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjhv67[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM","TRANSPARENT_HUGEPAGE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memmap_init_zone_device","memremap_pages","devm_memremap_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM","TRANSPARENT_HUGEPAGE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"31bdad63-31c2-4e82-89db-41b7bdcb73e6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-03 08:27:19 +0000 UTC FinishedAt: 2026-08-03 11:31:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjhv67[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM","TRANSPARENT_HUGEPAGE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memmap_init_zone_device","memremap_pages","devm_memremap_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM","TRANSPARENT_HUGEPAGE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"31bdad63-31c2-4e82-89db-41b7bdcb73e6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-03 08:27:19 +0000 UTC FinishedAt: 2026-08-03 11:31:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*e3643ef3-be8e-407f-ac97-94f1c2e66a8a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*cc42813d-c122-49d4-92d6-8c68c01cf42b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjhv67/series-workflowjhv67-build-action-66596200/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjhv67/series-workflowjhv67-build-action-770530209/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjhv67/series-workflowjhv67-convert-artifact-173539578/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}