Name: series-workflowktbsv Phase: Succeeded StartedAt: 2026-07-23 21:10:55 +0000 UTC FinishedAt: 2026-07-24 02:03:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowktbsv[0] Phase: Succeeded StartedAt: 2026-07-23 21:10:55 +0000 UTC FinishedAt: 2026-07-23 21:35:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowktbsv[0].run-triage Phase: Succeeded StartedAt: 2026-07-23 21:10:55 +0000 UTC FinishedAt: 2026-07-23 21:35:01 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "1590cf0329716306e948a8fc29f1d3ee87d3989f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MD_RAID1", "MD_RAID10", "NVME_RDMA", "PCI_P2PDMA", "NVME_TARGET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "1590cf0329716306e948a8fc29f1d3ee87d3989f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MD_RAID1", "MD_RAID10", "NVME_RDMA", "PCI_P2PDMA", "NVME_TARGET" ], "series_id": "531bba9c-ba5a-4a05-a910-9872ad059f4c" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "raid1_write_error", "narrow_write_error", "handle_write_finished", "handle_write_completed", "handle_read_error", "nvme_rdma_dma_map_req", "nvme_rdma_queue_rq" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDIxOjMzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01EX1JBSUQxJiMzNDssCiAgICAmIzM0O01EX1JBSUQxMCYjMzQ7LAogICAgJiMzNDtOVk1FX1JETUEmIzM0OywKICAgICYjMzQ7UENJX1AyUERNQSYjMzQ7LAogICAgJiMzNDtOVk1FX1RBUkdFVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3JhaWQxX3dyaXRlX2Vycm9yJiMzNDssCiAgICAmIzM0O25hcnJvd193cml0ZV9lcnJvciYjMzQ7LAogICAgJiMzNDtoYW5kbGVfd3JpdGVfZmluaXNoZWQmIzM0OywKICAgICYjMzQ7aGFuZGxlX3dyaXRlX2NvbXBsZXRlZCYjMzQ7LAogICAgJiMzNDtoYW5kbGVfcmVhZF9lcnJvciYjMzQ7LAogICAgJiMzNDtudm1lX3JkbWFfZG1hX21hcF9yZXEmIzM0OywKICAgICYjMzQ7bnZtZV9yZG1hX3F1ZXVlX3JxJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgaGFuZGxpbmcgZm9yIEJMS19TVFNfUDJQRE1BIGVycm9ycyBpbiB0aGUgYmxvY2sgbGF5ZXIsIE1EIFJBSUQgKFJBSUQxL1JBSUQxMCksIGFuZCBOVk1lIFJETUEuIEl0IG1vZGlmaWVzIGVycm9yIGhhbmRsaW5nIHBhdGhzIGluIE1EIFJBSUQgdG8gcHJvcGVybHkgaGFuZGxlIFAyUERNQSBtYXBwaW5nIGZhaWx1cmVzIGJ5IHNldHRpbmcgYmFkYmxvY2tzIG9yIGJsb2NraW5nIHJlYWRzIGluc3RlYWQgb2YgZmFpbGluZyB0aGUgdW5kZXJseWluZyBkZXZpY2UuIEl0IGFsc28gbW9kaWZpZXMgTlZNZSBSRE1BIHRvIHVzZSBpYl9kbWFfbWFwX3NndGFibGVfYXR0cnMgYW5kIHJldHVybiBCTEtfU1RTX1AyUERNQSBvbiBtYXBwaW5nIGZhaWx1cmVzLiBUaGVzZSBjaGFuZ2VzIGFyZSBmdW5jdGlvbmFsbHkgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBieSBjb25maWd1cmluZyBOVk1lIHRhcmdldHMgd2l0aCBQMlAgbWVtb3J5IGJhY2tlZCBieSBNRCBhcnJheXMsIG9yIGJ5IHVzaW5nIE5WTWUgUkRNQSBvdmVyIHNvZnR3YXJlIFJETUEgZGV2aWNlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAyMTozMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDM3MWVkNjAzZWJkN2E2ODM3NmJiODIwZWY4ZGUwN2FjYmY3MzU1ZGVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCAyMyAyMTozMzowNyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9ibG9jay9ibGstY29yZS5jIGIvYmxvY2svYmxrLWNvcmUuY1xuaW5kZXggMzY1NjQxMjY2YzllODIuLjgzY2I1NDY0MjY1ZmI2IDEwMDY0NFxuLS0tIGEvYmxvY2svYmxrLWNvcmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYmxvY2svYmxrLWNvcmUuY1xuQEAgLTE3Nyw2ICYjNDM7MTc3LDkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCB7XG4gXG4gXHQvKiBDb21tYW5kIGR1cmF0aW9uIGxpbWl0IGRldmljZS1zaWRlIHRpbWVvdXQgKi9cbiBcdEVOVChEVVJBVElPTl9MSU1JVCxcdC1FVElNRSxcdFx0XCYjMzQ7ZHVyYXRpb24gbGltaXQgZXhjZWVkZWRcJiMzNDspLFxuJiM0MztcbiYjNDM7XHQvKiBubyBQQ0llIFAyUERNQSByb3V0ZSBiZXR3ZWVuIGluaXRpYXRvciBhbmQgdGFyZ2V0ICovXG4mIzQzO1x0RU5UKFAyUERNQSxcdFx0LUVSRU1PVEVJTyxcdFwmIzM0O3BlZXItdG8tcGVlciB0cmFuc2ZlciB1bnJvdXRhYmxlXCYjMzQ7KSxcbiBcdEVOVChJTlZBTCxcdFx0LUVJTlZBTCxcdFwmIzM0O2ludmFsaWRcJiMzNDspLFxuIFxuIFx0LyogZXZlcnl0aGluZyBlbHNlIG5vdCBjb3ZlcmVkIGFib3ZlOiAqL1xuZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1tcS1kbWEuYyBiL2Jsb2NrL2Jsay1tcS1kbWEuY1xuaW5kZXggYmZkYjllZDcwNzQxMTYuLmU4OGQ2YjM1MjRlNmFkIDEwMDY0NFxuLS0tIGEvYmxvY2svYmxrLW1xLWRtYS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9ibG9jay9ibGstbXEtZG1hLmNcbkBAIC0xODksOCAmIzQzOzE4OSw5IEBAIHN0YXRpYyBib29sIGJsa19kbWFfbWFwX2l0ZXJfc3RhcnQoc3RydWN0IHJlcXVlc3QgKnJlcSwgc3RydWN0IGRldmljZSAqZG1hX2RldixcbiBcdFx0ICovXG4gXHRjYXNlIFBDSV9QMlBETUFfTUFQX05PTkU6XG4gXHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgUENJX1AyUERNQV9NQVBfTk9UX1NVUFBPUlRFRDpcbiBcdGRlZmF1bHQ6XG4tXHRcdGl0ZXItXHUwMDNlc3RhdHVzID0gQkxLX1NUU19JTlZBTDtcbiYjNDM7XHRcdGl0ZXItXHUwMDNlc3RhdHVzID0gQkxLX1NUU19QMlBETUE7XG4gXHRcdHJldHVybiBmYWxzZTtcbiBcdH1cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL21kLmMgYi9kcml2ZXJzL21kL21kLmNcbmluZGV4IGQxNDY1YmNkODZjODEyLi4zNzcwYmRiNGQ0YjI4YiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbWQvbWQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9tZC9tZC5jXG5AQCAtNDUxLDggJiM0Mzs0NTEsMTQgQEAgc3RhdGljIHZvaWQgbWRfc3VibWl0X2JpbyhzdHJ1Y3QgYmlvICpiaW8pXG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbi1cdC8qIGJpbyBjb3VsZCBiZSBtZXJnZWFibGUgYWZ0ZXIgcGFzc2luZyB0byB1bmRlcmxheWVyICovXG4tXHRiaW8tXHUwMDNlYmlfb3BmIFx1MDAyNj0gflJFUV9OT01FUkdFO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogQSBiaW8gbWQgc3BsaXQgbWF5IG1lcmdlIGFnYWluIGJlbG93IG1kIC0tIGV4Y2VwdCBQMlBETUEgYmlvcyxcbiYjNDM7XHQgKiB3aGljaCBtdXN0IHN0YXkgc2luZ2xlLXByb3ZpZGVyIChzZWUgX19iaW9fYWRkX3BhZ2UoKSkuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKG1kX2Jpb19pc19wMnBkbWEoYmlvKSlcbiYjNDM7XHRcdGJpby1cdTAwM2ViaV9vcGYgfD0gUkVRX05PTUVSR0U7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0YmlvLVx1MDAzZWJpX29wZiBcdTAwMjY9IH5SRVFfTk9NRVJHRTtcbiBcbiBcdG1kX2hhbmRsZV9yZXF1ZXN0KG1kZGV2LCBiaW8pO1xuIH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL21kLmggYi9kcml2ZXJzL21kL21kLmhcbmluZGV4IGQ4ZGFmMGY3NWNiYmU4Li43M2RmMWE2ZWNjZDg1MCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbWQvbWQuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9tZC9tZC5oXG5AQCAtMTEsOCAmIzQzOzExLDEwIEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYmxrZGV2LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9iYWNraW5nLWRldi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYmFkYmxvY2tzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvYmlvLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rb2JqZWN0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9saXN0LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbWVtcmVtYXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21tLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tdXRleC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdGltZXIuaFx1MDAzZVxuQEAgLTIyLDYgJiM0MzsyNCwxOSBAQFxuICNpbmNsdWRlIFx1MDAzY3RyYWNlL2V2ZW50cy9ibG9jay5oXHUwMDNlXG4gXG4gI2RlZmluZSBNYXhTZWN0b3IgKH4oc2VjdG9yX3QpMClcbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFAyUCBhbmQgaG9zdCBwYWdlcyBuZXZlciBtaXggd2l0aGluIGEgYmlvLCBzbyB0aGUgZmlyc3QgYnZlYyBpc1xuJiM0MzsgKiByZXByZXNlbnRhdGl2ZS4gIFJlYWQgYmlfaW9fdmVjIGRpcmVjdGx5OiBiaW9fZmlyc3RfYnZlY19hbGwoKVxuJiM0MzsgKiBXQVJOcyBvbiB0aGUgc3BsaXQgY2xvbmVzIG1kIGhhbmRsZXMsIGFuZCBkYXRhLWxlc3MgYmlvcyBoYXZlIG5vXG4mIzQzOyAqIGJpX2lvX3ZlYy4gIE5vdCB2YWxpZCBhZnRlciB0aGUgYmlvJiMzOTtzIGl0ZXJhdG9yIGlzIGNvbnN1bWVkLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGlubGluZSBib29sIG1kX2Jpb19pc19wMnBkbWEoc3RydWN0IGJpbyAqYmlvKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGJpb19oYXNfZGF0YShiaW8pIFx1MDAyNlx1MDAyNiBiaW8tXHUwMDNlYmlfaW9fdmVjIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAgICBpc19wY2lfcDJwZG1hX3BhZ2UoYmlvLVx1MDAzZWJpX2lvX3ZlYy1cdTAwM2Vidl9wYWdlKTtcbiYjNDM7fVxuJiM0MztcbiAvKlxuICAqIE51bWJlciBvZiBndWFyYW50ZWVkIHJhaWQgYmlvcyBpbiBjYXNlIG9mIGV4dHJlbWUgVk0gbG9hZDpcbiAgKi9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3JhaWQxLTEwLmMgYi9kcml2ZXJzL21kL3JhaWQxLTEwLmNcbmluZGV4IDU2YTU2YTRkYTRmODNmLi44OWRhZjg1NTgyNTFmYSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbWQvcmFpZDEtMTAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9tZC9yYWlkMS0xMC5jXG5AQCAtMzAzLDMgJiM0MzszMDMsMTkgQEAgc3RhdGljIGlubGluZSBib29sIHJhaWQxX3Nob3VsZF9oYW5kbGVfZXJyb3Ioc3RydWN0IGJpbyAqYmlvKVxuIFx0cmV0dXJuICEoYmlvLVx1MDAzZWJpX29wZiBcdTAwMjYgKFJFUV9SQUhFQUQgfCBSRVFfTk9XQUlUKSkgXHUwMDI2XHUwMDI2XG4gXHRcdGJpby1cdTAwM2ViaV9zdGF0dXMgIT0gQkxLX1NUU19JTlZBTDtcbiB9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgcmFpZDFfd3JpdGVfZXJyb3Ioc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kX3JkZXYgKnJkZXYsXG4mIzQzO1x0XHRcdFx0ICAgICBzdHJ1Y3QgYmlvICpiaW8sIGJvb2wgYWxsb3dfZmFpbGZhc3QpXG4mIzQzO3tcbiYjNDM7XHRzZXRfYml0KFdyaXRlRXJyb3JTZWVuLCBcdTAwMjZyZGV2LVx1MDAzZWZsYWdzKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGJpby1cdTAwM2ViaV9zdGF0dXMgPT0gQkxLX1NUU19QMlBETUEpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGlmICghdGVzdF9hbmRfc2V0X2JpdChXYW50UmVwbGFjZW1lbnQsIFx1MDAyNnJkZXYtXHUwMDNlZmxhZ3MpKVxuJiM0MztcdFx0c2V0X2JpdChNRF9SRUNPVkVSWV9ORUVERUQsIFx1MDAyNm1kZGV2LVx1MDAzZXJlY292ZXJ5KTtcbiYjNDM7XG4mIzQzO1x0aWYgKGFsbG93X2ZhaWxmYXN0IFx1MDAyNlx1MDAyNiB0ZXN0X2JpdChGYWlsRmFzdCwgXHUwMDI2cmRldi1cdTAwM2VmbGFncykgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIChiaW8tXHUwMDNlYmlfb3BmIFx1MDAyNiBNRF9GQUlMRkFTVCkpXG4mIzQzO1x0XHRtZF9lcnJvcihtZGRldiwgcmRldik7XG4mIzQzO31cbmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3JhaWQxLmMgYi9kcml2ZXJzL21kL3JhaWQxLmNcbmluZGV4IGFmZTJjYTk2YWQ4YzIyLi43NmExNDI2ZTY0ZjAyZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbWQvcmFpZDEuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9tZC9yYWlkMS5jXG5AQCAtNDgzLDE3ICYjNDM7NDgzLDggQEAgc3RhdGljIHZvaWQgcmFpZDFfZW5kX3dyaXRlX3JlcXVlc3Qoc3RydWN0IGJpbyAqYmlvKVxuIFx0ICogJiMzOTtvbmUgbWlycm9yIElPIGhhcyBmaW5pc2hlZCYjMzk7IGV2ZW50IGhhbmRsZXI6XG4gXHQgKi9cbiBcdGlmIChiaW8tXHUwMDNlYmlfc3RhdHVzIFx1MDAyNlx1MDAyNiAhaWdub3JlX2Vycm9yKSB7XG4tXHRcdHNldF9iaXQoV3JpdGVFcnJvclNlZW4sXHRcdTAwMjZyZGV2LVx1MDAzZWZsYWdzKTtcbi1cdFx0aWYgKCF0ZXN0X2FuZF9zZXRfYml0KFdhbnRSZXBsYWNlbWVudCwgXHUwMDI2cmRldi1cdTAwM2VmbGFncykpXG4tXHRcdFx0c2V0X2JpdChNRF9SRUNPVkVSWV9ORUVERUQsIFx1MDAyNlxuLVx0XHRcdFx0Y29uZi1cdTAwM2VtZGRldi1cdTAwM2VyZWNvdmVyeSk7XG4tXG4tXHRcdGlmICh0ZXN0X2JpdChGYWlsRmFzdCwgXHUwMDI2cmRldi1cdTAwM2VmbGFncykgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICAoYmlvLVx1MDAzZWJpX29wZiBcdTAwMjYgTURfRkFJTEZBU1QpIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgLyogV2UgbmV2ZXIgdHJ5IEZhaWxGYXN0IHRvIFdyaXRlTW9zdGx5IGRldmljZXMgKi9cbi1cdFx0ICAgICF0ZXN0X2JpdChXcml0ZU1vc3RseSwgXHUwMDI2cmRldi1cdTAwM2VmbGFncykpIHtcbi1cdFx0XHRtZF9lcnJvcihyMV9iaW8tXHUwMDNlbWRkZXYsIHJkZXYpO1xuLVx0XHR9XG4mIzQzO1x0XHRyYWlkMV93cml0ZV9lcnJvcihjb25mLVx1MDAzZW1kZGV2LCByZGV2LCBiaW8sXG4mIzQzO1x0XHRcdFx0ICAhdGVzdF9iaXQoV3JpdGVNb3N0bHksIFx1MDAyNnJkZXYtXHUwMDNlZmxhZ3MpKTtcbiBcbiBcdFx0LypcbiBcdFx0ICogV2hlbiB0aGUgZGV2aWNlIGlzIGZhdWx0eSwgaXQgaXMgbm90IG5lY2Vzc2FyeSB0b1xuQEAgLTU2NCw3ICYjNDM7NTU1LDcgQEAgc3RhdGljIHZvaWQgcmFpZDFfZW5kX3dyaXRlX3JlcXVlc3Qoc3RydWN0IGJpbyAqYmlvKVxuIFx0XHRcdFx0Y2FsbF9iaW9fZW5kaW8ocjFfYmlvKTtcbiBcdFx0XHR9XG4gXHRcdH1cbi1cdH0gZWxzZSBpZiAodGVzdF9iaXQoTURfU0VSSUFMSVpFX1BPTElDWSwgXHUwMDI2cmRldi1cdTAwM2VtZGRldi1cdTAwM2VmbGFncykpXG4mIzQzO1x0fSBlbHNlIGlmICh0ZXN0X2JpdChDb2xsaXNpb25DaGVjaywgXHUwMDI2cmRldi1cdTAwM2VmbGFncykpXG4gXHRcdHJlbW92ZV9zZXJpYWwocmRldiwgbG8sIGhpKTtcbiBcdGlmIChyMV9iaW8tXHUwMDNlYmlvc1ttaXJyb3JdID09IE5VTEwpXG4gXHRcdHJkZXZfZGVjX3BlbmRpbmcocmRldiwgY29uZi1cdTAwM2VtZGRldik7XG5AQCAtMTUyMyw2ICYjNDM7MTUxNCw3IEBAIHN0YXRpYyBib29sIHJhaWQxX3dyaXRlX3JlcXVlc3Qoc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IGJpbyAqYmlvLFxuIFx0Ym9vbCB3cml0ZV9iZWhpbmQgPSBmYWxzZTtcbiBcdGJvb2wgbm93YWl0ID0gYmlvLVx1MDAzZWJpX29wZiBcdTAwMjYgUkVRX05PV0FJVDtcbiBcdGJvb2wgaXNfZGlzY2FyZCA9IG9wX2lzX2Rpc2NhcmQoYmlvLVx1MDAzZWJpX29wZik7XG4mIzQzO1x0Ym9vbCBpc19wMnBkbWEgPSBtZF9iaW9faXNfcDJwZG1hKGJpbyk7XG4gXHRzZWN0b3JfdCBzZWN0b3IgPSBiaW8tXHUwMDNlYmlfaXRlci5iaV9zZWN0b3I7XG4gXG4gXHRpZiAobWRkZXZfaXNfY2x1c3RlcmVkKG1kZGV2KSBcdTAwMjZcdTAwMjZcbkBAIC0xNTc1LDkgJiM0MzsxNTY3LDEyIEBAIHN0YXRpYyBib29sIHJhaWQxX3dyaXRlX3JlcXVlc3Qoc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IGJpbyAqYmlvLFxuIFx0XHQvKlxuIFx0XHQgKiBUaGUgd3JpdGUtYmVoaW5kIGlvIGlzIG9ubHkgYXR0ZW1wdGVkIG9uIGRyaXZlcyBtYXJrZWQgYXNcbiBcdFx0ICogd3JpdGUtbW9zdGx5LCB3aGljaCBtZWFucyB3ZSBjb3VsZCBhbGxvY2F0ZSB3cml0ZSBiZWhpbmRcbi1cdFx0ICogYmlvIGxhdGVyLlxuJiM0MztcdFx0ICogYmlvIGxhdGVyLiBQMlBETUEgYmlvcyBhcmUgZXhjbHVkZWQ6IHdyaXRlLWJlaGluZCBjb3BpZXNcbiYjNDM7XHRcdCAqIHRoZSBkYXRhIHdpdGggYmlvX2NvcHlfZGF0YSgpLCBhIENQVSBjb3B5IHRoYXQgY2Fubm90IGJlXG4mIzQzO1x0XHQgKiBhc3N1bWVkIHNhZmUgb3IgZmFzdCBvbiBQMlBETUEgKGRldmljZSBCQVIpIHBhZ2VzLlxuIFx0XHQgKi9cbi1cdFx0aWYgKCFpc19kaXNjYXJkIFx1MDAyNlx1MDAyNiByZGV2IFx1MDAyNlx1MDAyNiB0ZXN0X2JpdChXcml0ZU1vc3RseSwgXHUwMDI2cmRldi1cdTAwM2VmbGFncykpXG4mIzQzO1x0XHRpZiAoIWlzX2Rpc2NhcmQgXHUwMDI2XHUwMDI2ICFpc19wMnBkbWEgXHUwMDI2XHUwMDI2IHJkZXYgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgdGVzdF9iaXQoV3JpdGVNb3N0bHksIFx1MDAyNnJkZXYtXHUwMDNlZmxhZ3MpKVxuIFx0XHRcdHdyaXRlX2JlaGluZCA9IHRydWU7XG4gXG4gXHRcdHIxX2Jpby1cdTAwM2ViaW9zW2ldID0gTlVMTDtcbkBAIC0xNjc3LDcgJiM0MzsxNjcyLDExIEBAIHN0YXRpYyBib29sIHJhaWQxX3dyaXRlX3JlcXVlc3Qoc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IGJpbyAqYmlvLFxuIFx0XHRcdG1iaW8gPSBiaW9fYWxsb2NfY2xvbmUocmRldi1cdTAwM2ViZGV2LCBiaW8sIEdGUF9OT0lPLFxuIFx0XHRcdFx0XHQgICAgICAgXHUwMDI2bWRkZXYtXHUwMDNlYmlvX3NldCk7XG4gXG4tXHRcdFx0aWYgKHRlc3RfYml0KE1EX1NFUklBTElaRV9QT0xJQ1ksIFx1MDAyNm1kZGV2LVx1MDAzZWZsYWdzKSlcbiYjNDM7XHRcdFx0LypcbiYjNDM7XHRcdFx0ICogQ29sbGlzaW9uQ2hlY2sgbWFya3MgZXZlcnkgcmRldiB3aXRoIGEgc2VyaWFsXG4mIzQzO1x0XHRcdCAqIHRyZWU7IG9yZGVyIGFnYWluc3QgaW4tZmxpZ2h0IHdyaXRlLWJlaGluZCBJL08uXG4mIzQzO1x0XHRcdCAqL1xuJiM0MztcdFx0XHRpZiAodGVzdF9iaXQoQ29sbGlzaW9uQ2hlY2ssIFx1MDAyNnJkZXYtXHUwMDNlZmxhZ3MpKVxuIFx0XHRcdFx0d2FpdF9mb3Jfc2VyaWFsaXphdGlvbihyZGV2LCByMV9iaW8pO1xuIFx0XHR9XG4gXG5AQCAtMjU2Miw2ICYjNDM7MjU2MSw5IEBAIHN0YXRpYyB2b2lkIG5hcnJvd193cml0ZV9lcnJvcihzdHJ1Y3QgcjFiaW8gKnIxX2JpbywgaW50IGkpXG4gXHRcdH1cbiBcbiBcdFx0d2Jpby1cdTAwM2ViaV9vcGYgPSBSRVFfT1BfV1JJVEU7XG4mIzQzO1x0XHQvKiBLZWVwIFAyUERNQSByZXRyeSBiaW9zIHVubWVyZ2VhYmxlLCBsaWtlIHRoZSBvcmlnaW5hbCAqL1xuJiM0MztcdFx0aWYgKG1kX2Jpb19pc19wMnBkbWEod2JpbykpXG4mIzQzO1x0XHRcdHdiaW8tXHUwMDNlYmlfb3BmIHw9IFJFUV9OT01FUkdFO1xuIFx0XHR3YmlvLVx1MDAzZWJpX2l0ZXIuYmlfc2VjdG9yID0gcjFfYmlvLVx1MDAzZXNlY3RvcjtcbiBcdFx0d2Jpby1cdTAwM2ViaV9pdGVyLmJpX3NpemUgPSByMV9iaW8tXHUwMDNlc2VjdG9ycyBcdTAwM2NcdTAwM2MgOTtcbiBcbkBAIC0yNjIyLDEwICYjNDM7MjYyNCwxNiBAQCBzdGF0aWMgdm9pZCBoYW5kbGVfd3JpdGVfZmluaXNoZWQoc3RydWN0IHIxY29uZiAqY29uZiwgc3RydWN0IHIxYmlvICpyMV9iaW8pXG4gXHRcdFx0ICogbmFycm93IGRvd24gYW5kIHJlY29yZCBwcmVjaXNlIHdyaXRlXG4gXHRcdFx0ICogZXJyb3JzLlxuIFx0XHRcdCAqL1xuJiM0MztcdFx0XHRzdHJ1Y3QgbWRfcmRldiAqcmRldiA9IGNvbmYtXHUwMDNlbWlycm9yc1ttXS5yZGV2O1xuJiM0MztcbiBcdFx0XHRmYWlsID0gdHJ1ZTtcbi1cdFx0XHRuYXJyb3dfd3JpdGVfZXJyb3IocjFfYmlvLCBtKTtcbi1cdFx0XHRyZGV2X2RlY19wZW5kaW5nKGNvbmYtXHUwMDNlbWlycm9yc1ttXS5yZGV2LFxuLVx0XHRcdFx0XHQgY29uZi1cdTAwM2VtZGRldik7XG4mIzQzO1x0XHRcdC8qIE1hcHBpbmcgZmFpbHVyZXMgYXJlIHdob2xlLXJhbmdlIGFuZCBkZXRlcm1pbmlzdGljICovXG4mIzQzO1x0XHRcdGlmIChyMV9iaW8tXHUwMDNlYmlvc1ttXS1cdTAwM2ViaV9zdGF0dXMgPT0gQkxLX1NUU19QMlBETUEpXG4mIzQzO1x0XHRcdFx0cmRldl9zZXRfYmFkYmxvY2tzKHJkZXYsIHIxX2Jpby1cdTAwM2VzZWN0b3IsXG4mIzQzO1x0XHRcdFx0XHRcdCAgIHIxX2Jpby1cdTAwM2VzZWN0b3JzLCAwKTtcbiYjNDM7XHRcdFx0ZWxzZVxuJiM0MztcdFx0XHRcdG5hcnJvd193cml0ZV9lcnJvcihyMV9iaW8sIG0pO1xuJiM0MztcdFx0XHRyZGV2X2RlY19wZW5kaW5nKHJkZXYsIGNvbmYtXHUwMDNlbWRkZXYpO1xuIFx0XHR9XG4gXHRpZiAoZmFpbCkge1xuIFx0XHRzcGluX2xvY2tfaXJxKFx1MDAyNmNvbmYtXHUwMDNlZGV2aWNlX2xvY2spO1xuQEAgLTI2NTAsNiAmIzQzOzI2NTgsOCBAQCBzdGF0aWMgdm9pZCBoYW5kbGVfcmVhZF9lcnJvcihzdHJ1Y3QgcjFjb25mICpjb25mLCBzdHJ1Y3QgcjFiaW8gKnIxX2JpbylcbiB7XG4gXHRzdHJ1Y3QgbWRfcmRldiAqcmRldiA9IGNvbmYtXHUwMDNlbWlycm9yc1tyMV9iaW8tXHUwMDNlcmVhZF9kaXNrXS5yZGV2O1xuIFx0c3RydWN0IGJpbyAqYmlvID0gcjFfYmlvLVx1MDAzZWJpb3NbcjFfYmlvLVx1MDAzZXJlYWRfZGlza107XG4mIzQzO1x0LyogZXZhbHVhdGUgYmVmb3JlIHRoZSBiaW9fcHV0KCkgYmVsb3cgKi9cbiYjNDM7XHRib29sIHAycGRtYV9lcnJvciA9IGJpby1cdTAwM2ViaV9zdGF0dXMgPT0gQkxLX1NUU19QMlBETUE7XG4gXHRzdHJ1Y3QgbWRkZXYgKm1kZGV2ID0gY29uZi1cdTAwM2VtZGRldjtcbiBcdHNlY3Rvcl90IHNlY3RvcjtcbiBcbkBAIC0yNjY3LDcgJiM0MzsyNjc3LDcgQEAgc3RhdGljIHZvaWQgaGFuZGxlX3JlYWRfZXJyb3Ioc3RydWN0IHIxY29uZiAqY29uZiwgc3RydWN0IHIxYmlvICpyMV9iaW8pXG4gXHQgKiByZWFkIGVycm9yLiAgVGhpcyBpcyBhbGwgZG9uZSBzeW5jaHJvbm91c2x5IHdoaWxlIHRoZSBhcnJheSBpc1xuIFx0ICogZnJvemVuLlxuIFx0ICovXG4tXHRpZiAobWRkZXYtXHUwMDNlcm8pIHtcbiYjNDM7XHRpZiAobWRkZXYtXHUwMDNlcm8gfHwgcDJwZG1hX2Vycm9yKSB7XG4gXHRcdHIxX2Jpby1cdTAwM2ViaW9zW3IxX2Jpby1cdTAwM2VyZWFkX2Rpc2tdID0gSU9fQkxPQ0tFRDtcbiBcdH0gZWxzZSBpZiAodGVzdF9iaXQoRmFpbEZhc3QsIFx1MDAyNnJkZXYtXHUwMDNlZmxhZ3MpKSB7XG4gXHRcdG1kX2Vycm9yKG1kZGV2LCByZGV2KTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3JhaWQxMC5jIGIvZHJpdmVycy9tZC9yYWlkMTAuY1xuaW5kZXggMGEzY2ZkZDNmNWRmODAuLmUzNWFlYWMyOWYwNjQyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9tZC9yYWlkMTAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9tZC9yYWlkMTAuY1xuQEAgLTQ4MiwxNiAmIzQzOzQ4Miw4IEBAIHN0YXRpYyB2b2lkIHJhaWQxMF9lbmRfd3JpdGVfcmVxdWVzdChzdHJ1Y3QgYmlvICpiaW8pXG4gXHRcdFx0ICovXG4gXHRcdFx0bWRfZXJyb3IocmRldi1cdTAwM2VtZGRldiwgcmRldik7XG4gXHRcdGVsc2Uge1xuLVx0XHRcdHNldF9iaXQoV3JpdGVFcnJvclNlZW4sXHRcdTAwMjZyZGV2LVx1MDAzZWZsYWdzKTtcbi1cdFx0XHRpZiAoIXRlc3RfYW5kX3NldF9iaXQoV2FudFJlcGxhY2VtZW50LCBcdTAwMjZyZGV2LVx1MDAzZWZsYWdzKSlcbi1cdFx0XHRcdHNldF9iaXQoTURfUkVDT1ZFUllfTkVFREVELFxuLVx0XHRcdFx0XHRcdTAwMjZyZGV2LVx1MDAzZW1kZGV2LVx1MDAzZXJlY292ZXJ5KTtcbi1cbiBcdFx0XHRkZWNfcmRldiA9IDA7XG4tXHRcdFx0aWYgKHRlc3RfYml0KEZhaWxGYXN0LCBcdTAwMjZyZGV2LVx1MDAzZWZsYWdzKSBcdTAwMjZcdTAwMjZcbi1cdFx0XHQgICAgKGJpby1cdTAwM2ViaV9vcGYgXHUwMDI2IE1EX0ZBSUxGQVNUKSkge1xuLVx0XHRcdFx0bWRfZXJyb3IocmRldi1cdTAwM2VtZGRldiwgcmRldik7XG4tXHRcdFx0fVxuJiM0MztcdFx0XHRyYWlkMV93cml0ZV9lcnJvcihyZGV2LVx1MDAzZW1kZGV2LCByZGV2LCBiaW8sIHRydWUpO1xuIFxuIFx0XHRcdC8qXG4gXHRcdFx0ICogV2hlbiB0aGUgZGV2aWNlIGlzIGZhdWx0eSwgaXQgaXMgbm90IG5lY2Vzc2FyeSB0b1xuQEAgLTI4MzEsNiAmIzQzOzI4MjMsOSBAQCBzdGF0aWMgdm9pZCBuYXJyb3dfd3JpdGVfZXJyb3Ioc3RydWN0IHIxMGJpbyAqcjEwX2JpbywgaW50IGkpXG4gXHRcdHdiaW8tXHUwMDNlYmlfaXRlci5iaV9zZWN0b3IgPSB3c2VjdG9yICYjNDM7XG4gXHRcdFx0XHQgICBjaG9vc2VfZGF0YV9vZmZzZXQocjEwX2JpbywgcmRldik7XG4gXHRcdHdiaW8tXHUwMDNlYmlfb3BmID0gUkVRX09QX1dSSVRFO1xuJiM0MztcdFx0LyogS2VlcCBQMlBETUEgcmV0cnkgYmlvcyB1bm1lcmdlYWJsZSwgbGlrZSB0aGUgb3JpZ2luYWwgKi9cbiYjNDM7XHRcdGlmIChtZF9iaW9faXNfcDJwZG1hKHdiaW8pKVxuJiM0MztcdFx0XHR3YmlvLVx1MDAzZWJpX29wZiB8PSBSRVFfTk9NRVJHRTtcbiBcbiBcdFx0aWYgKHN1Ym1pdF9iaW9fd2FpdCh3YmlvKSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgICFyZGV2X3NldF9iYWRibG9ja3MocmRldiwgd3NlY3Rvciwgc2VjdG9ycywgMCkpIHtcbkBAIC0yODUzLDYgJiM0MzsyODQ4LDcgQEAgc3RhdGljIHZvaWQgaGFuZGxlX3JlYWRfZXJyb3Ioc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IHIxMGJpbyAqcjEwX2JpbylcbiB7XG4gXHRpbnQgc2xvdCA9IHIxMF9iaW8tXHUwMDNlcmVhZF9zbG90O1xuIFx0c3RydWN0IGJpbyAqYmlvO1xuJiM0MztcdGJvb2wgcDJwZG1hX2Vycm9yO1xuIFx0c3RydWN0IHIxMGNvbmYgKmNvbmYgPSBtZGRldi1cdTAwM2Vwcml2YXRlO1xuIFx0c3RydWN0IG1kX3JkZXYgKnJkZXYgPSByMTBfYmlvLVx1MDAzZWRldnNbc2xvdF0ucmRldjtcbiBcbkBAIC0yODY1LDEwICYjNDM7Mjg2MSwxMiBAQCBzdGF0aWMgdm9pZCBoYW5kbGVfcmVhZF9lcnJvcihzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgcjEwYmlvICpyMTBfYmlvKVxuIFx0ICogZnJvemVuLlxuIFx0ICovXG4gXHRiaW8gPSByMTBfYmlvLVx1MDAzZWRldnNbc2xvdF0uYmlvO1xuJiM0MztcdC8qIGV2YWx1YXRlIGJlZm9yZSB0aGUgYmlvX3B1dCgpIGJlbG93ICovXG4mIzQzO1x0cDJwZG1hX2Vycm9yID0gYmlvLVx1MDAzZWJpX3N0YXR1cyA9PSBCTEtfU1RTX1AyUERNQTtcbiBcdGJpb19wdXQoYmlvKTtcbiBcdHIxMF9iaW8tXHUwMDNlZGV2c1tzbG90XS5iaW8gPSBOVUxMO1xuIFxuLVx0aWYgKG1kZGV2LVx1MDAzZXJvKVxuJiM0MztcdGlmIChtZGRldi1cdTAwM2VybyB8fCBwMnBkbWFfZXJyb3IpXG4gXHRcdHIxMF9iaW8tXHUwMDNlZGV2c1tzbG90XS5iaW8gPSBJT19CTE9DS0VEO1xuIFx0ZWxzZSBpZiAoIXRlc3RfYml0KEZhaWxGYXN0LCBcdTAwMjZyZGV2LVx1MDAzZWZsYWdzKSkge1xuIFx0XHRmcmVlemVfYXJyYXkoY29uZiwgMSk7XG5AQCAtMjk0NSw3ICYjNDM7Mjk0MywxMyBAQCBzdGF0aWMgdm9pZCBoYW5kbGVfd3JpdGVfY29tcGxldGVkKHN0cnVjdCByMTBjb25mICpjb25mLCBzdHJ1Y3QgcjEwYmlvICpyMTBfYmlvKVxuIFx0XHRcdFx0cmRldl9kZWNfcGVuZGluZyhyZGV2LCBjb25mLVx1MDAzZW1kZGV2KTtcbiBcdFx0XHR9IGVsc2UgaWYgKGJpbyAhPSBOVUxMIFx1MDAyNlx1MDAyNiBiaW8tXHUwMDNlYmlfc3RhdHVzKSB7XG4gXHRcdFx0XHRmYWlsID0gdHJ1ZTtcbi1cdFx0XHRcdG5hcnJvd193cml0ZV9lcnJvcihyMTBfYmlvLCBtKTtcbiYjNDM7XHRcdFx0XHQvKiBNYXBwaW5nIGZhaWx1cmVzIGFyZSB3aG9sZS1yYW5nZSBhbmQgZGV0ZXJtaW5pc3RpYyAqL1xuJiM0MztcdFx0XHRcdGlmIChiaW8tXHUwMDNlYmlfc3RhdHVzID09IEJMS19TVFNfUDJQRE1BKVxuJiM0MztcdFx0XHRcdFx0cmRldl9zZXRfYmFkYmxvY2tzKHJkZXYsXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgcjEwX2Jpby1cdTAwM2VkZXZzW21dLmFkZHIsXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgcjEwX2Jpby1cdTAwM2VzZWN0b3JzLCAwKTtcbiYjNDM7XHRcdFx0XHRlbHNlXG4mIzQzO1x0XHRcdFx0XHRuYXJyb3dfd3JpdGVfZXJyb3IocjEwX2JpbywgbSk7XG4gXHRcdFx0XHRyZGV2X2RlY19wZW5kaW5nKHJkZXYsIGNvbmYtXHUwMDNlbWRkZXYpO1xuIFx0XHRcdH1cbiBcdFx0XHRiaW8gPSByMTBfYmlvLVx1MDAzZWRldnNbbV0ucmVwbF9iaW87XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9udm1lL2hvc3QvcmRtYS5jIGIvZHJpdmVycy9udm1lL2hvc3QvcmRtYS5jXG5pbmRleCA2OTA5ZTM1NDI3OTQyNy4uMmY1MDUwOWE3YTYxNjAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL252bWUvaG9zdC9yZG1hLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbnZtZS9ob3N0L3JkbWEuY1xuQEAgLTE0NjksNiAmIzQzOzE0NjksNyBAQCBzdGF0aWMgaW50IG52bWVfcmRtYV9kbWFfbWFwX3JlcShzdHJ1Y3QgaWJfZGV2aWNlICppYmRldiwgc3RydWN0IHJlcXVlc3QgKnJxLFxuIFx0XHRpbnQgKmNvdW50LCBpbnQgKnBpX2NvdW50KVxuIHtcbiBcdHN0cnVjdCBudm1lX3JkbWFfcmVxdWVzdCAqcmVxID0gYmxrX21xX3JxX3RvX3BkdShycSk7XG4mIzQzO1x0c3RydWN0IHNnX3RhYmxlIHNndDtcbiBcdGludCByZXQ7XG4gXG4gXHRyZXEtXHUwMDNlZGF0YV9zZ2wuc2dfdGFibGUuc2dsID0gKHN0cnVjdCBzY2F0dGVybGlzdCAqKShyZXEgJiM0MzsgMSk7XG5AQCAtMTQ4MCwxMiAmIzQzOzE0ODEsMTQgQEAgc3RhdGljIGludCBudm1lX3JkbWFfZG1hX21hcF9yZXEoc3RydWN0IGliX2RldmljZSAqaWJkZXYsIHN0cnVjdCByZXF1ZXN0ICpycSxcbiBcbiBcdHJlcS1cdTAwM2VkYXRhX3NnbC5uZW50cyA9IGJsa19ycV9tYXBfc2cocnEsIHJlcS1cdTAwM2VkYXRhX3NnbC5zZ190YWJsZS5zZ2wpO1xuIFxuLVx0KmNvdW50ID0gaWJfZG1hX21hcF9zZyhpYmRldiwgcmVxLVx1MDAzZWRhdGFfc2dsLnNnX3RhYmxlLnNnbCxcbi1cdFx0XHQgICAgICAgcmVxLVx1MDAzZWRhdGFfc2dsLm5lbnRzLCBycV9kbWFfZGlyKHJxKSk7XG4tXHRpZiAodW5saWtlbHkoKmNvdW50IFx1MDAzYz0gMCkpIHtcbi1cdFx0cmV0ID0gLUVJTztcbiYjNDM7XHRzZ3QgPSAoc3RydWN0IHNnX3RhYmxlKSB7XG4mIzQzO1x0XHQuc2dsXHRcdD0gcmVxLVx1MDAzZWRhdGFfc2dsLnNnX3RhYmxlLnNnbCxcbiYjNDM7XHRcdC5vcmlnX25lbnRzXHQ9IHJlcS1cdTAwM2VkYXRhX3NnbC5uZW50cyxcbiYjNDM7XHR9O1xuJiM0MztcdHJldCA9IGliX2RtYV9tYXBfc2d0YWJsZV9hdHRycyhpYmRldiwgXHUwMDI2c2d0LCBycV9kbWFfZGlyKHJxKSwgMCk7XG4mIzQzO1x0aWYgKHVubGlrZWx5KHJldCkpXG4gXHRcdGdvdG8gb3V0X2ZyZWVfdGFibGU7XG4tXHR9XG4mIzQzO1x0KmNvdW50ID0gc2d0Lm5lbnRzO1xuIFxuIFx0aWYgKGJsa19pbnRlZ3JpdHlfcnEocnEpKSB7XG4gXHRcdHJlcS1cdTAwM2VtZXRhZGF0YV9zZ2wtXHUwMDNlc2dfdGFibGUuc2dsID1cbkBAIC0xNTAxLDE0ICYjNDM7MTUwNCwxNCBAQCBzdGF0aWMgaW50IG52bWVfcmRtYV9kbWFfbWFwX3JlcShzdHJ1Y3QgaWJfZGV2aWNlICppYmRldiwgc3RydWN0IHJlcXVlc3QgKnJxLFxuIFxuIFx0XHRyZXEtXHUwMDNlbWV0YWRhdGFfc2dsLVx1MDAzZW5lbnRzID0gYmxrX3JxX21hcF9pbnRlZ3JpdHlfc2cocnEsXG4gXHRcdFx0XHRyZXEtXHUwMDNlbWV0YWRhdGFfc2dsLVx1MDAzZXNnX3RhYmxlLnNnbCk7XG4tXHRcdCpwaV9jb3VudCA9IGliX2RtYV9tYXBfc2coaWJkZXYsXG4tXHRcdFx0XHRcdCAgcmVxLVx1MDAzZW1ldGFkYXRhX3NnbC1cdTAwM2VzZ190YWJsZS5zZ2wsXG4tXHRcdFx0XHRcdCAgcmVxLVx1MDAzZW1ldGFkYXRhX3NnbC1cdTAwM2VuZW50cyxcbi1cdFx0XHRcdFx0ICBycV9kbWFfZGlyKHJxKSk7XG4tXHRcdGlmICh1bmxpa2VseSgqcGlfY291bnQgXHUwMDNjPSAwKSkge1xuLVx0XHRcdHJldCA9IC1FSU87XG4mIzQzO1x0XHRzZ3QgPSAoc3RydWN0IHNnX3RhYmxlKSB7XG4mIzQzO1x0XHRcdC5zZ2xcdFx0PSByZXEtXHUwMDNlbWV0YWRhdGFfc2dsLVx1MDAzZXNnX3RhYmxlLnNnbCxcbiYjNDM7XHRcdFx0Lm9yaWdfbmVudHNcdD0gcmVxLVx1MDAzZW1ldGFkYXRhX3NnbC1cdTAwM2VuZW50cyxcbiYjNDM7XHRcdH07XG4mIzQzO1x0XHRyZXQgPSBpYl9kbWFfbWFwX3NndGFibGVfYXR0cnMoaWJkZXYsIFx1MDAyNnNndCwgcnFfZG1hX2RpcihycSksIDApO1xuJiM0MztcdFx0aWYgKHVubGlrZWx5KHJldCkpXG4gXHRcdFx0Z290byBvdXRfZnJlZV9waV90YWJsZTtcbi1cdFx0fVxuJiM0MztcdFx0KnBpX2NvdW50ID0gc2d0Lm5lbnRzO1xuIFx0fVxuIFxuIFx0cmV0dXJuIDA7XG5AQCAtMjAyNiw4ICYjNDM7MjAyOSw2IEBAIHN0YXRpYyBibGtfc3RhdHVzX3QgbnZtZV9yZG1hX3F1ZXVlX3JxKHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4LFxuIFx0aWYgKHJldClcbiBcdFx0Z290byB1bm1hcF9xZTtcbiBcbi1cdG52bWVfc3RhcnRfcmVxdWVzdChycSk7XG4tXG4gXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkpIFx1MDAyNlx1MDAyNlxuIFx0ICAgIHF1ZXVlLVx1MDAzZXBpX3N1cHBvcnQgXHUwMDI2XHUwMDI2XG4gXHQgICAgKGMtXHUwMDNlY29tbW9uLm9wY29kZSA9PSBudm1lX2NtZF93cml0ZSB8fFxuQEAgLTIwMzksMTEgJiM0MzsyMDQwLDEzIEBAIHN0YXRpYyBibGtfc3RhdHVzX3QgbnZtZV9yZG1hX3F1ZXVlX3JxKHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4LFxuIFxuIFx0ZXJyID0gbnZtZV9yZG1hX21hcF9kYXRhKHF1ZXVlLCBycSwgYyk7XG4gXHRpZiAodW5saWtlbHkoZXJyIFx1MDAzYyAwKSkge1xuLVx0XHRkZXZfZXJyKHF1ZXVlLVx1MDAzZWN0cmwtXHUwMDNlY3RybC5kZXZpY2UsXG4tXHRcdFx0ICAgICBcJiMzNDtGYWlsZWQgdG8gbWFwIGRhdGEgKCVkKVxcblwmIzM0OywgZXJyKTtcbiYjNDM7XHRcdGRldl9lcnJfcmF0ZWxpbWl0ZWQocXVldWUtXHUwMDNlY3RybC1cdTAwM2VjdHJsLmRldmljZSxcbiYjNDM7XHRcdFx0XHQgICAgXCYjMzQ7RmFpbGVkIHRvIG1hcCBkYXRhICglZClcXG5cJiMzNDssIGVycik7XG4gXHRcdGdvdG8gZXJyO1xuIFx0fVxuIFxuJiM0MztcdG52bWVfc3RhcnRfcmVxdWVzdChycSk7XG4mIzQzO1xuIFx0c3FlLVx1MDAzZWNxZS5kb25lID0gbnZtZV9yZG1hX3NlbmRfZG9uZTtcbiBcbiBcdGliX2RtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKGRldiwgc3FlLVx1MDAzZWRtYSxcbkBAIC0yMDYzLDYgJiM0MzsyMDY2LDkgQEAgc3RhdGljIGJsa19zdGF0dXNfdCBudm1lX3JkbWFfcXVldWVfcnEoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsXG4gXHRcdHJldCA9IG52bWVfaG9zdF9wYXRoX2Vycm9yKHJxKTtcbiBcdGVsc2UgaWYgKGVyciA9PSAtRU5PTUVNIHx8IGVyciA9PSAtRUFHQUlOKVxuIFx0XHRyZXQgPSBCTEtfU1RTX1JFU09VUkNFO1xuJiM0MztcdC8qIFBlZXIgbWVtb3J5IHVucmVhY2hhYmxlIGZyb20gdGhpcyBkZXZpY2U6IGRvbiYjMzk7dCByZXRyeS4gKi9cbiYjNDM7XHRlbHNlIGlmIChlcnIgPT0gLUVSRU1PVEVJTylcbiYjNDM7XHRcdHJldCA9IEJMS19TVFNfUDJQRE1BO1xuIFx0ZWxzZVxuIFx0XHRyZXQgPSBCTEtfU1RTX0lPRVJSO1xuIFx0bnZtZV9jbGVhbnVwX2NtZChycSk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ibGtfdHlwZXMuaCBiL2luY2x1ZGUvbGludXgvYmxrX3R5cGVzLmhcbmluZGV4IDg4MDhlZTc2ZTczYzA5Li5jOGRlNzgwOTMyMGFkNCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvYmxrX3R5cGVzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYmxrX3R5cGVzLmhcbkBAIC0xNjUsNiAmIzQzOzE2NSwxNSBAQCB0eXBlZGVmIHUxNiBibGtfc2hvcnRfdDtcbiAgKi9cbiAjZGVmaW5lIEJMS19TVFNfRFVSQVRJT05fTElNSVRcdCgoX19mb3JjZSBibGtfc3RhdHVzX3QpMTcpXG4gXG4mIzQzOy8qXG4mIzQzOyAqIEJMS19TVFNfUDJQRE1BIGlzIHJldHVybmVkIHdoZW4gYSBwZWVyLXRvLXBlZXIgRE1BIHRyYW5zZmVyIGNhbm5vdCBiZVxuJiM0MzsgKiBtYXBwZWQgKHR5cGljYWxseSBiZWNhdXNlIHRoZXJlIGlzIG5vIHJvdXRlIGJldHdlZW4gdGhlIGluaXRpYXRvciBhbmQgdGhlXG4mIzQzOyAqIHRhcmdldCB0aGF0IHRoZSBwbGF0Zm9ybSYjMzk7cyBQQ0llIHRvcG9sb2d5IGFuZCBBQ1Mgc2V0dGluZ3MgYWxsb3cpLiBUaGlzXG4mIzQzOyAqIGlzIGEgcHJvcGVydHkgb2YgdGhlIGluaXRpYXRvci90YXJnZXQgcGFpciwgbm90IG9mIHRoZSB0YXJnZXQgZGV2aWNlJiMzOTtzXG4mIzQzOyAqIGhlYWx0aC4gVGhpcyBlcnJvciBzaG91bGQgbmV2ZXIgYmUgcmV0cmllZC5cbiYjNDM7ICovXG4mIzQzOyNkZWZpbmUgQkxLX1NUU19QMlBETUFcdCgoX19mb3JjZSBibGtfc3RhdHVzX3QpMTgpXG4mIzQzO1xuIC8qXG4gICogSW52YWxpZCBzaXplIG9yIGFsaWdubWVudC5cbiAgKi9cbkBAIC0xODgsNiAmIzQzOzE5Nyw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBibGtfcGF0aF9lcnJvcihibGtfc3RhdHVzX3QgZXJyb3IpXG4gXHRjYXNlIEJMS19TVFNfTk9UU1VQUDpcbiBcdGNhc2UgQkxLX1NUU19OT1NQQzpcbiBcdGNhc2UgQkxLX1NUU19UQVJHRVQ6XG4mIzQzO1x0Y2FzZSBCTEtfU1RTX1AyUERNQTpcbiBcdGNhc2UgQkxLX1NUU19SRVNWX0NPTkZMSUNUOlxuIFx0Y2FzZSBCTEtfU1RTX01FRElVTTpcbiBcdGNhc2UgQkxLX1NUU19QUk9URUNUSU9OOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDIxOjMzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNRF9SQUlEMSYjMzQ7LAogICAgJiMzNDtNRF9SQUlEMTAmIzM0OywKICAgICYjMzQ7TlZNRV9SRE1BJiMzNDssCiAgICAmIzM0O1BDSV9QMlBETUEmIzM0OywKICAgICYjMzQ7TlZNRV9UQVJHRVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyYWlkMV93cml0ZV9lcnJvciYjMzQ7LAogICAgJiMzNDtuYXJyb3dfd3JpdGVfZXJyb3ImIzM0OywKICAgICYjMzQ7aGFuZGxlX3dyaXRlX2ZpbmlzaGVkJiMzNDssCiAgICAmIzM0O2hhbmRsZV93cml0ZV9jb21wbGV0ZWQmIzM0OywKICAgICYjMzQ7aGFuZGxlX3JlYWRfZXJyb3ImIzM0OywKICAgICYjMzQ7bnZtZV9yZG1hX2RtYV9tYXBfcmVxJiMzNDssCiAgICAmIzM0O252bWVfcmRtYV9xdWV1ZV9ycSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGhhbmRsaW5nIGZvciBCTEtfU1RTX1AyUERNQSBlcnJvcnMgaW4gdGhlIGJsb2NrIGxheWVyLCBNRCBSQUlEIChSQUlEMS9SQUlEMTApLCBhbmQgTlZNZSBSRE1BLiBJdCBtb2RpZmllcyBlcnJvciBoYW5kbGluZyBwYXRocyBpbiBNRCBSQUlEIHRvIHByb3Blcmx5IGhhbmRsZSBQMlBETUEgbWFwcGluZyBmYWlsdXJlcyBieSBzZXR0aW5nIGJhZGJsb2NrcyBvciBibG9ja2luZyByZWFkcyBpbnN0ZWFkIG9mIGZhaWxpbmcgdGhlIHVuZGVybHlpbmcgZGV2aWNlLiBJdCBhbHNvIG1vZGlmaWVzIE5WTWUgUkRNQSB0byB1c2UgaWJfZG1hX21hcF9zZ3RhYmxlX2F0dHJzIGFuZCByZXR1cm4gQkxLX1NUU19QMlBETUEgb24gbWFwcGluZyBmYWlsdXJlcy4gVGhlc2UgY2hhbmdlcyBhcmUgZnVuY3Rpb25hbGx5IHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYnkgY29uZmlndXJpbmcgTlZNZSB0YXJnZXRzIHdpdGggUDJQIG1lbW9yeSBiYWNrZWQgYnkgTUQgYXJyYXlzLCBvciBieSB1c2luZyBOVk1lIFJETUEgb3ZlciBzb2Z0d2FyZSBSRE1BIGRldmljZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDM3MWVkNjAzZWJkN2E2ODM3NmJiODIwZWY4ZGUwN2FjYmY3MzU1ZGUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEp1bCAyMyAyMTozMzowNyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1jb3JlLmMgYi9ibG9jay9ibGstY29yZS5jCmluZGV4IDM2NTY0MTI2NmM5ZTgyLi44M2NiNTQ2NDI2NWZiNiAxMDA2NDQKLS0tIGEvYmxvY2svYmxrLWNvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9ibG9jay9ibGstY29yZS5jCkBAIC0xNzcsNiAmIzQzOzE3Nyw5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgewogCiAJLyogQ29tbWFuZCBkdXJhdGlvbiBsaW1pdCBkZXZpY2Utc2lkZSB0aW1lb3V0ICovCiAJRU5UKERVUkFUSU9OX0xJTUlULAktRVRJTUUsCQkmIzM0O2R1cmF0aW9uIGxpbWl0IGV4Y2VlZGVkJiMzNDspLAomIzQzOwomIzQzOwkvKiBubyBQQ0llIFAyUERNQSByb3V0ZSBiZXR3ZWVuIGluaXRpYXRvciBhbmQgdGFyZ2V0ICovCiYjNDM7CUVOVChQMlBETUEsCQktRVJFTU9URUlPLAkmIzM0O3BlZXItdG8tcGVlciB0cmFuc2ZlciB1bnJvdXRhYmxlJiMzNDspLAogCUVOVChJTlZBTCwJCS1FSU5WQUwsCSYjMzQ7aW52YWxpZCYjMzQ7KSwKIAogCS8qIGV2ZXJ5dGhpbmcgZWxzZSBub3QgY292ZXJlZCBhYm92ZTogKi8KZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1tcS1kbWEuYyBiL2Jsb2NrL2Jsay1tcS1kbWEuYwppbmRleCBiZmRiOWVkNzA3NDExNi4uZTg4ZDZiMzUyNGU2YWQgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2Jsay1tcS1kbWEuYwomIzQzOyYjNDM7JiM0MzsgYi9ibG9jay9ibGstbXEtZG1hLmMKQEAgLTE4OSw4ICYjNDM7MTg5LDkgQEAgc3RhdGljIGJvb2wgYmxrX2RtYV9tYXBfaXRlcl9zdGFydChzdHJ1Y3QgcmVxdWVzdCAqcmVxLCBzdHJ1Y3QgZGV2aWNlICpkbWFfZGV2LAogCQkgKi8KIAljYXNlIFBDSV9QMlBETUFfTUFQX05PTkU6CiAJCWJyZWFrOwomIzQzOwljYXNlIFBDSV9QMlBETUFfTUFQX05PVF9TVVBQT1JURUQ6CiAJZGVmYXVsdDoKLQkJaXRlci0mZ3Q7c3RhdHVzID0gQkxLX1NUU19JTlZBTDsKJiM0MzsJCWl0ZXItJmd0O3N0YXR1cyA9IEJMS19TVFNfUDJQRE1BOwogCQlyZXR1cm4gZmFsc2U7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL21kLmMgYi9kcml2ZXJzL21kL21kLmMKaW5kZXggZDE0NjViY2Q4NmM4MTIuLjM3NzBiZGI0ZDRiMjhiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL21kLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9tZC9tZC5jCkBAIC00NTEsOCAmIzQzOzQ1MSwxNCBAQCBzdGF0aWMgdm9pZCBtZF9zdWJtaXRfYmlvKHN0cnVjdCBiaW8gKmJpbykKIAkJcmV0dXJuOwogCX0KIAotCS8qIGJpbyBjb3VsZCBiZSBtZXJnZWFibGUgYWZ0ZXIgcGFzc2luZyB0byB1bmRlcmxheWVyICovCi0JYmlvLSZndDtiaV9vcGYgJmFtcDs9IH5SRVFfTk9NRVJHRTsKJiM0MzsJLyoKJiM0MzsJICogQSBiaW8gbWQgc3BsaXQgbWF5IG1lcmdlIGFnYWluIGJlbG93IG1kIC0tIGV4Y2VwdCBQMlBETUEgYmlvcywKJiM0MzsJICogd2hpY2ggbXVzdCBzdGF5IHNpbmdsZS1wcm92aWRlciAoc2VlIF9fYmlvX2FkZF9wYWdlKCkpLgomIzQzOwkgKi8KJiM0MzsJaWYgKG1kX2Jpb19pc19wMnBkbWEoYmlvKSkKJiM0MzsJCWJpby0mZ3Q7Ymlfb3BmIHw9IFJFUV9OT01FUkdFOwomIzQzOwllbHNlCiYjNDM7CQliaW8tJmd0O2JpX29wZiAmYW1wOz0gflJFUV9OT01FUkdFOwogCiAJbWRfaGFuZGxlX3JlcXVlc3QobWRkZXYsIGJpbyk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL21kLmggYi9kcml2ZXJzL21kL21kLmgKaW5kZXggZDhkYWYwZjc1Y2JiZTguLjczZGYxYTZlY2NkODUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL21kLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9tZC9tZC5oCkBAIC0xMSw4ICYjNDM7MTEsMTAgQEAKICNpbmNsdWRlICZsdDtsaW51eC9ibGtkZXYuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9iYWNraW5nLWRldi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2JhZGJsb2Nrcy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9iaW8uaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9rb2JqZWN0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbGlzdC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9tZW1yZW1hcC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L21tLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbXV0ZXguaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC90aW1lci5oJmd0OwpAQCAtMjIsNiAmIzQzOzI0LDE5IEBACiAjaW5jbHVkZSAmbHQ7dHJhY2UvZXZlbnRzL2Jsb2NrLmgmZ3Q7CiAKICNkZWZpbmUgTWF4U2VjdG9yICh+KHNlY3Rvcl90KTApCiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBQMlAgYW5kIGhvc3QgcGFnZXMgbmV2ZXIgbWl4IHdpdGhpbiBhIGJpbywgc28gdGhlIGZpcnN0IGJ2ZWMgaXMKJiM0MzsgKiByZXByZXNlbnRhdGl2ZS4gIFJlYWQgYmlfaW9fdmVjIGRpcmVjdGx5OiBiaW9fZmlyc3RfYnZlY19hbGwoKQomIzQzOyAqIFdBUk5zIG9uIHRoZSBzcGxpdCBjbG9uZXMgbWQgaGFuZGxlcywgYW5kIGRhdGEtbGVzcyBiaW9zIGhhdmUgbm8KJiM0MzsgKiBiaV9pb192ZWMuICBOb3QgdmFsaWQgYWZ0ZXIgdGhlIGJpbyYjMzk7cyBpdGVyYXRvciBpcyBjb25zdW1lZC4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgbWRfYmlvX2lzX3AycGRtYShzdHJ1Y3QgYmlvICpiaW8pCiYjNDM7ewomIzQzOwlyZXR1cm4gYmlvX2hhc19kYXRhKGJpbykgJmFtcDsmYW1wOyBiaW8tJmd0O2JpX2lvX3ZlYyAmYW1wOyZhbXA7CiYjNDM7CSAgICAgICBpc19wY2lfcDJwZG1hX3BhZ2UoYmlvLSZndDtiaV9pb192ZWMtJmd0O2J2X3BhZ2UpOwomIzQzO30KJiM0MzsKIC8qCiAgKiBOdW1iZXIgb2YgZ3VhcmFudGVlZCByYWlkIGJpb3MgaW4gY2FzZSBvZiBleHRyZW1lIFZNIGxvYWQ6CiAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvcmFpZDEtMTAuYyBiL2RyaXZlcnMvbWQvcmFpZDEtMTAuYwppbmRleCA1NmE1NmE0ZGE0ZjgzZi4uODlkYWY4NTU4MjUxZmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvcmFpZDEtMTAuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL21kL3JhaWQxLTEwLmMKQEAgLTMwMywzICYjNDM7MzAzLDE5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCByYWlkMV9zaG91bGRfaGFuZGxlX2Vycm9yKHN0cnVjdCBiaW8gKmJpbykKIAlyZXR1cm4gIShiaW8tJmd0O2JpX29wZiAmYW1wOyAoUkVRX1JBSEVBRCB8IFJFUV9OT1dBSVQpKSAmYW1wOyZhbXA7CiAJCWJpby0mZ3Q7Ymlfc3RhdHVzICE9IEJMS19TVFNfSU5WQUw7CiB9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHJhaWQxX3dyaXRlX2Vycm9yKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZF9yZGV2ICpyZGV2LAomIzQzOwkJCQkgICAgIHN0cnVjdCBiaW8gKmJpbywgYm9vbCBhbGxvd19mYWlsZmFzdCkKJiM0Mzt7CiYjNDM7CXNldF9iaXQoV3JpdGVFcnJvclNlZW4sICZhbXA7cmRldi0mZ3Q7ZmxhZ3MpOwomIzQzOwomIzQzOwlpZiAoYmlvLSZndDtiaV9zdGF0dXMgPT0gQkxLX1NUU19QMlBETUEpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWlmICghdGVzdF9hbmRfc2V0X2JpdChXYW50UmVwbGFjZW1lbnQsICZhbXA7cmRldi0mZ3Q7ZmxhZ3MpKQomIzQzOwkJc2V0X2JpdChNRF9SRUNPVkVSWV9ORUVERUQsICZhbXA7bWRkZXYtJmd0O3JlY292ZXJ5KTsKJiM0MzsKJiM0MzsJaWYgKGFsbG93X2ZhaWxmYXN0ICZhbXA7JmFtcDsgdGVzdF9iaXQoRmFpbEZhc3QsICZhbXA7cmRldi0mZ3Q7ZmxhZ3MpICZhbXA7JmFtcDsKJiM0MzsJICAgIChiaW8tJmd0O2JpX29wZiAmYW1wOyBNRF9GQUlMRkFTVCkpCiYjNDM7CQltZF9lcnJvcihtZGRldiwgcmRldik7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9yYWlkMS5jIGIvZHJpdmVycy9tZC9yYWlkMS5jCmluZGV4IGFmZTJjYTk2YWQ4YzIyLi43NmExNDI2ZTY0ZjAyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9yYWlkMS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbWQvcmFpZDEuYwpAQCAtNDgzLDE3ICYjNDM7NDgzLDggQEAgc3RhdGljIHZvaWQgcmFpZDFfZW5kX3dyaXRlX3JlcXVlc3Qoc3RydWN0IGJpbyAqYmlvKQogCSAqICYjMzk7b25lIG1pcnJvciBJTyBoYXMgZmluaXNoZWQmIzM5OyBldmVudCBoYW5kbGVyOgogCSAqLwogCWlmIChiaW8tJmd0O2JpX3N0YXR1cyAmYW1wOyZhbXA7ICFpZ25vcmVfZXJyb3IpIHsKLQkJc2V0X2JpdChXcml0ZUVycm9yU2VlbiwJJmFtcDtyZGV2LSZndDtmbGFncyk7Ci0JCWlmICghdGVzdF9hbmRfc2V0X2JpdChXYW50UmVwbGFjZW1lbnQsICZhbXA7cmRldi0mZ3Q7ZmxhZ3MpKQotCQkJc2V0X2JpdChNRF9SRUNPVkVSWV9ORUVERUQsICZhbXA7Ci0JCQkJY29uZi0mZ3Q7bWRkZXYtJmd0O3JlY292ZXJ5KTsKLQotCQlpZiAodGVzdF9iaXQoRmFpbEZhc3QsICZhbXA7cmRldi0mZ3Q7ZmxhZ3MpICZhbXA7JmFtcDsKLQkJICAgIChiaW8tJmd0O2JpX29wZiAmYW1wOyBNRF9GQUlMRkFTVCkgJmFtcDsmYW1wOwotCQkgICAgLyogV2UgbmV2ZXIgdHJ5IEZhaWxGYXN0IHRvIFdyaXRlTW9zdGx5IGRldmljZXMgKi8KLQkJICAgICF0ZXN0X2JpdChXcml0ZU1vc3RseSwgJmFtcDtyZGV2LSZndDtmbGFncykpIHsKLQkJCW1kX2Vycm9yKHIxX2Jpby0mZ3Q7bWRkZXYsIHJkZXYpOwotCQl9CiYjNDM7CQlyYWlkMV93cml0ZV9lcnJvcihjb25mLSZndDttZGRldiwgcmRldiwgYmlvLAomIzQzOwkJCQkgICF0ZXN0X2JpdChXcml0ZU1vc3RseSwgJmFtcDtyZGV2LSZndDtmbGFncykpOwogCiAJCS8qCiAJCSAqIFdoZW4gdGhlIGRldmljZSBpcyBmYXVsdHksIGl0IGlzIG5vdCBuZWNlc3NhcnkgdG8KQEAgLTU2NCw3ICYjNDM7NTU1LDcgQEAgc3RhdGljIHZvaWQgcmFpZDFfZW5kX3dyaXRlX3JlcXVlc3Qoc3RydWN0IGJpbyAqYmlvKQogCQkJCWNhbGxfYmlvX2VuZGlvKHIxX2Jpbyk7CiAJCQl9CiAJCX0KLQl9IGVsc2UgaWYgKHRlc3RfYml0KE1EX1NFUklBTElaRV9QT0xJQ1ksICZhbXA7cmRldi0mZ3Q7bWRkZXYtJmd0O2ZsYWdzKSkKJiM0MzsJfSBlbHNlIGlmICh0ZXN0X2JpdChDb2xsaXNpb25DaGVjaywgJmFtcDtyZGV2LSZndDtmbGFncykpCiAJCXJlbW92ZV9zZXJpYWwocmRldiwgbG8sIGhpKTsKIAlpZiAocjFfYmlvLSZndDtiaW9zW21pcnJvcl0gPT0gTlVMTCkKIAkJcmRldl9kZWNfcGVuZGluZyhyZGV2LCBjb25mLSZndDttZGRldik7CkBAIC0xNTIzLDYgJiM0MzsxNTE0LDcgQEAgc3RhdGljIGJvb2wgcmFpZDFfd3JpdGVfcmVxdWVzdChzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgYmlvICpiaW8sCiAJYm9vbCB3cml0ZV9iZWhpbmQgPSBmYWxzZTsKIAlib29sIG5vd2FpdCA9IGJpby0mZ3Q7Ymlfb3BmICZhbXA7IFJFUV9OT1dBSVQ7CiAJYm9vbCBpc19kaXNjYXJkID0gb3BfaXNfZGlzY2FyZChiaW8tJmd0O2JpX29wZik7CiYjNDM7CWJvb2wgaXNfcDJwZG1hID0gbWRfYmlvX2lzX3AycGRtYShiaW8pOwogCXNlY3Rvcl90IHNlY3RvciA9IGJpby0mZ3Q7YmlfaXRlci5iaV9zZWN0b3I7CiAKIAlpZiAobWRkZXZfaXNfY2x1c3RlcmVkKG1kZGV2KSAmYW1wOyZhbXA7CkBAIC0xNTc1LDkgJiM0MzsxNTY3LDEyIEBAIHN0YXRpYyBib29sIHJhaWQxX3dyaXRlX3JlcXVlc3Qoc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IGJpbyAqYmlvLAogCQkvKgogCQkgKiBUaGUgd3JpdGUtYmVoaW5kIGlvIGlzIG9ubHkgYXR0ZW1wdGVkIG9uIGRyaXZlcyBtYXJrZWQgYXMKIAkJICogd3JpdGUtbW9zdGx5LCB3aGljaCBtZWFucyB3ZSBjb3VsZCBhbGxvY2F0ZSB3cml0ZSBiZWhpbmQKLQkJICogYmlvIGxhdGVyLgomIzQzOwkJICogYmlvIGxhdGVyLiBQMlBETUEgYmlvcyBhcmUgZXhjbHVkZWQ6IHdyaXRlLWJlaGluZCBjb3BpZXMKJiM0MzsJCSAqIHRoZSBkYXRhIHdpdGggYmlvX2NvcHlfZGF0YSgpLCBhIENQVSBjb3B5IHRoYXQgY2Fubm90IGJlCiYjNDM7CQkgKiBhc3N1bWVkIHNhZmUgb3IgZmFzdCBvbiBQMlBETUEgKGRldmljZSBCQVIpIHBhZ2VzLgogCQkgKi8KLQkJaWYgKCFpc19kaXNjYXJkICZhbXA7JmFtcDsgcmRldiAmYW1wOyZhbXA7IHRlc3RfYml0KFdyaXRlTW9zdGx5LCAmYW1wO3JkZXYtJmd0O2ZsYWdzKSkKJiM0MzsJCWlmICghaXNfZGlzY2FyZCAmYW1wOyZhbXA7ICFpc19wMnBkbWEgJmFtcDsmYW1wOyByZGV2ICZhbXA7JmFtcDsKJiM0MzsJCSAgICB0ZXN0X2JpdChXcml0ZU1vc3RseSwgJmFtcDtyZGV2LSZndDtmbGFncykpCiAJCQl3cml0ZV9iZWhpbmQgPSB0cnVlOwogCiAJCXIxX2Jpby0mZ3Q7Ymlvc1tpXSA9IE5VTEw7CkBAIC0xNjc3LDcgJiM0MzsxNjcyLDExIEBAIHN0YXRpYyBib29sIHJhaWQxX3dyaXRlX3JlcXVlc3Qoc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IGJpbyAqYmlvLAogCQkJbWJpbyA9IGJpb19hbGxvY19jbG9uZShyZGV2LSZndDtiZGV2LCBiaW8sIEdGUF9OT0lPLAogCQkJCQkgICAgICAgJmFtcDttZGRldi0mZ3Q7YmlvX3NldCk7CiAKLQkJCWlmICh0ZXN0X2JpdChNRF9TRVJJQUxJWkVfUE9MSUNZLCAmYW1wO21kZGV2LSZndDtmbGFncykpCiYjNDM7CQkJLyoKJiM0MzsJCQkgKiBDb2xsaXNpb25DaGVjayBtYXJrcyBldmVyeSByZGV2IHdpdGggYSBzZXJpYWwKJiM0MzsJCQkgKiB0cmVlOyBvcmRlciBhZ2FpbnN0IGluLWZsaWdodCB3cml0ZS1iZWhpbmQgSS9PLgomIzQzOwkJCSAqLwomIzQzOwkJCWlmICh0ZXN0X2JpdChDb2xsaXNpb25DaGVjaywgJmFtcDtyZGV2LSZndDtmbGFncykpCiAJCQkJd2FpdF9mb3Jfc2VyaWFsaXphdGlvbihyZGV2LCByMV9iaW8pOwogCQl9CiAKQEAgLTI1NjIsNiAmIzQzOzI1NjEsOSBAQCBzdGF0aWMgdm9pZCBuYXJyb3dfd3JpdGVfZXJyb3Ioc3RydWN0IHIxYmlvICpyMV9iaW8sIGludCBpKQogCQl9CiAKIAkJd2Jpby0mZ3Q7Ymlfb3BmID0gUkVRX09QX1dSSVRFOwomIzQzOwkJLyogS2VlcCBQMlBETUEgcmV0cnkgYmlvcyB1bm1lcmdlYWJsZSwgbGlrZSB0aGUgb3JpZ2luYWwgKi8KJiM0MzsJCWlmIChtZF9iaW9faXNfcDJwZG1hKHdiaW8pKQomIzQzOwkJCXdiaW8tJmd0O2JpX29wZiB8PSBSRVFfTk9NRVJHRTsKIAkJd2Jpby0mZ3Q7YmlfaXRlci5iaV9zZWN0b3IgPSByMV9iaW8tJmd0O3NlY3RvcjsKIAkJd2Jpby0mZ3Q7YmlfaXRlci5iaV9zaXplID0gcjFfYmlvLSZndDtzZWN0b3JzICZsdDsmbHQ7IDk7CiAKQEAgLTI2MjIsMTAgJiM0MzsyNjI0LDE2IEBAIHN0YXRpYyB2b2lkIGhhbmRsZV93cml0ZV9maW5pc2hlZChzdHJ1Y3QgcjFjb25mICpjb25mLCBzdHJ1Y3QgcjFiaW8gKnIxX2JpbykKIAkJCSAqIG5hcnJvdyBkb3duIGFuZCByZWNvcmQgcHJlY2lzZSB3cml0ZQogCQkJICogZXJyb3JzLgogCQkJICovCiYjNDM7CQkJc3RydWN0IG1kX3JkZXYgKnJkZXYgPSBjb25mLSZndDttaXJyb3JzW21dLnJkZXY7CiYjNDM7CiAJCQlmYWlsID0gdHJ1ZTsKLQkJCW5hcnJvd193cml0ZV9lcnJvcihyMV9iaW8sIG0pOwotCQkJcmRldl9kZWNfcGVuZGluZyhjb25mLSZndDttaXJyb3JzW21dLnJkZXYsCi0JCQkJCSBjb25mLSZndDttZGRldik7CiYjNDM7CQkJLyogTWFwcGluZyBmYWlsdXJlcyBhcmUgd2hvbGUtcmFuZ2UgYW5kIGRldGVybWluaXN0aWMgKi8KJiM0MzsJCQlpZiAocjFfYmlvLSZndDtiaW9zW21dLSZndDtiaV9zdGF0dXMgPT0gQkxLX1NUU19QMlBETUEpCiYjNDM7CQkJCXJkZXZfc2V0X2JhZGJsb2NrcyhyZGV2LCByMV9iaW8tJmd0O3NlY3RvciwKJiM0MzsJCQkJCQkgICByMV9iaW8tJmd0O3NlY3RvcnMsIDApOwomIzQzOwkJCWVsc2UKJiM0MzsJCQkJbmFycm93X3dyaXRlX2Vycm9yKHIxX2JpbywgbSk7CiYjNDM7CQkJcmRldl9kZWNfcGVuZGluZyhyZGV2LCBjb25mLSZndDttZGRldik7CiAJCX0KIAlpZiAoZmFpbCkgewogCQlzcGluX2xvY2tfaXJxKCZhbXA7Y29uZi0mZ3Q7ZGV2aWNlX2xvY2spOwpAQCAtMjY1MCw2ICYjNDM7MjY1OCw4IEBAIHN0YXRpYyB2b2lkIGhhbmRsZV9yZWFkX2Vycm9yKHN0cnVjdCByMWNvbmYgKmNvbmYsIHN0cnVjdCByMWJpbyAqcjFfYmlvKQogewogCXN0cnVjdCBtZF9yZGV2ICpyZGV2ID0gY29uZi0mZ3Q7bWlycm9yc1tyMV9iaW8tJmd0O3JlYWRfZGlza10ucmRldjsKIAlzdHJ1Y3QgYmlvICpiaW8gPSByMV9iaW8tJmd0O2Jpb3NbcjFfYmlvLSZndDtyZWFkX2Rpc2tdOwomIzQzOwkvKiBldmFsdWF0ZSBiZWZvcmUgdGhlIGJpb19wdXQoKSBiZWxvdyAqLwomIzQzOwlib29sIHAycGRtYV9lcnJvciA9IGJpby0mZ3Q7Ymlfc3RhdHVzID09IEJMS19TVFNfUDJQRE1BOwogCXN0cnVjdCBtZGRldiAqbWRkZXYgPSBjb25mLSZndDttZGRldjsKIAlzZWN0b3JfdCBzZWN0b3I7CiAKQEAgLTI2NjcsNyAmIzQzOzI2NzcsNyBAQCBzdGF0aWMgdm9pZCBoYW5kbGVfcmVhZF9lcnJvcihzdHJ1Y3QgcjFjb25mICpjb25mLCBzdHJ1Y3QgcjFiaW8gKnIxX2JpbykKIAkgKiByZWFkIGVycm9yLiAgVGhpcyBpcyBhbGwgZG9uZSBzeW5jaHJvbm91c2x5IHdoaWxlIHRoZSBhcnJheSBpcwogCSAqIGZyb3plbi4KIAkgKi8KLQlpZiAobWRkZXYtJmd0O3JvKSB7CiYjNDM7CWlmIChtZGRldi0mZ3Q7cm8gfHwgcDJwZG1hX2Vycm9yKSB7CiAJCXIxX2Jpby0mZ3Q7Ymlvc1tyMV9iaW8tJmd0O3JlYWRfZGlza10gPSBJT19CTE9DS0VEOwogCX0gZWxzZSBpZiAodGVzdF9iaXQoRmFpbEZhc3QsICZhbXA7cmRldi0mZ3Q7ZmxhZ3MpKSB7CiAJCW1kX2Vycm9yKG1kZGV2LCByZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvcmFpZDEwLmMgYi9kcml2ZXJzL21kL3JhaWQxMC5jCmluZGV4IDBhM2NmZGQzZjVkZjgwLi5lMzVhZWFjMjlmMDY0MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9yYWlkMTAuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL21kL3JhaWQxMC5jCkBAIC00ODIsMTYgJiM0Mzs0ODIsOCBAQCBzdGF0aWMgdm9pZCByYWlkMTBfZW5kX3dyaXRlX3JlcXVlc3Qoc3RydWN0IGJpbyAqYmlvKQogCQkJICovCiAJCQltZF9lcnJvcihyZGV2LSZndDttZGRldiwgcmRldik7CiAJCWVsc2UgewotCQkJc2V0X2JpdChXcml0ZUVycm9yU2VlbiwJJmFtcDtyZGV2LSZndDtmbGFncyk7Ci0JCQlpZiAoIXRlc3RfYW5kX3NldF9iaXQoV2FudFJlcGxhY2VtZW50LCAmYW1wO3JkZXYtJmd0O2ZsYWdzKSkKLQkJCQlzZXRfYml0KE1EX1JFQ09WRVJZX05FRURFRCwKLQkJCQkJJmFtcDtyZGV2LSZndDttZGRldi0mZ3Q7cmVjb3ZlcnkpOwotCiAJCQlkZWNfcmRldiA9IDA7Ci0JCQlpZiAodGVzdF9iaXQoRmFpbEZhc3QsICZhbXA7cmRldi0mZ3Q7ZmxhZ3MpICZhbXA7JmFtcDsKLQkJCSAgICAoYmlvLSZndDtiaV9vcGYgJmFtcDsgTURfRkFJTEZBU1QpKSB7Ci0JCQkJbWRfZXJyb3IocmRldi0mZ3Q7bWRkZXYsIHJkZXYpOwotCQkJfQomIzQzOwkJCXJhaWQxX3dyaXRlX2Vycm9yKHJkZXYtJmd0O21kZGV2LCByZGV2LCBiaW8sIHRydWUpOwogCiAJCQkvKgogCQkJICogV2hlbiB0aGUgZGV2aWNlIGlzIGZhdWx0eSwgaXQgaXMgbm90IG5lY2Vzc2FyeSB0bwpAQCAtMjgzMSw2ICYjNDM7MjgyMyw5IEBAIHN0YXRpYyB2b2lkIG5hcnJvd193cml0ZV9lcnJvcihzdHJ1Y3QgcjEwYmlvICpyMTBfYmlvLCBpbnQgaSkKIAkJd2Jpby0mZ3Q7YmlfaXRlci5iaV9zZWN0b3IgPSB3c2VjdG9yICYjNDM7CiAJCQkJICAgY2hvb3NlX2RhdGFfb2Zmc2V0KHIxMF9iaW8sIHJkZXYpOwogCQl3YmlvLSZndDtiaV9vcGYgPSBSRVFfT1BfV1JJVEU7CiYjNDM7CQkvKiBLZWVwIFAyUERNQSByZXRyeSBiaW9zIHVubWVyZ2VhYmxlLCBsaWtlIHRoZSBvcmlnaW5hbCAqLwomIzQzOwkJaWYgKG1kX2Jpb19pc19wMnBkbWEod2JpbykpCiYjNDM7CQkJd2Jpby0mZ3Q7Ymlfb3BmIHw9IFJFUV9OT01FUkdFOwogCiAJCWlmIChzdWJtaXRfYmlvX3dhaXQod2JpbykgJmFtcDsmYW1wOwogCQkgICAgIXJkZXZfc2V0X2JhZGJsb2NrcyhyZGV2LCB3c2VjdG9yLCBzZWN0b3JzLCAwKSkgewpAQCAtMjg1Myw2ICYjNDM7Mjg0OCw3IEBAIHN0YXRpYyB2b2lkIGhhbmRsZV9yZWFkX2Vycm9yKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCByMTBiaW8gKnIxMF9iaW8pCiB7CiAJaW50IHNsb3QgPSByMTBfYmlvLSZndDtyZWFkX3Nsb3Q7CiAJc3RydWN0IGJpbyAqYmlvOwomIzQzOwlib29sIHAycGRtYV9lcnJvcjsKIAlzdHJ1Y3QgcjEwY29uZiAqY29uZiA9IG1kZGV2LSZndDtwcml2YXRlOwogCXN0cnVjdCBtZF9yZGV2ICpyZGV2ID0gcjEwX2Jpby0mZ3Q7ZGV2c1tzbG90XS5yZGV2OwogCkBAIC0yODY1LDEwICYjNDM7Mjg2MSwxMiBAQCBzdGF0aWMgdm9pZCBoYW5kbGVfcmVhZF9lcnJvcihzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgcjEwYmlvICpyMTBfYmlvKQogCSAqIGZyb3plbi4KIAkgKi8KIAliaW8gPSByMTBfYmlvLSZndDtkZXZzW3Nsb3RdLmJpbzsKJiM0MzsJLyogZXZhbHVhdGUgYmVmb3JlIHRoZSBiaW9fcHV0KCkgYmVsb3cgKi8KJiM0MzsJcDJwZG1hX2Vycm9yID0gYmlvLSZndDtiaV9zdGF0dXMgPT0gQkxLX1NUU19QMlBETUE7CiAJYmlvX3B1dChiaW8pOwogCXIxMF9iaW8tJmd0O2RldnNbc2xvdF0uYmlvID0gTlVMTDsKIAotCWlmIChtZGRldi0mZ3Q7cm8pCiYjNDM7CWlmIChtZGRldi0mZ3Q7cm8gfHwgcDJwZG1hX2Vycm9yKQogCQlyMTBfYmlvLSZndDtkZXZzW3Nsb3RdLmJpbyA9IElPX0JMT0NLRUQ7CiAJZWxzZSBpZiAoIXRlc3RfYml0KEZhaWxGYXN0LCAmYW1wO3JkZXYtJmd0O2ZsYWdzKSkgewogCQlmcmVlemVfYXJyYXkoY29uZiwgMSk7CkBAIC0yOTQ1LDcgJiM0MzsyOTQzLDEzIEBAIHN0YXRpYyB2b2lkIGhhbmRsZV93cml0ZV9jb21wbGV0ZWQoc3RydWN0IHIxMGNvbmYgKmNvbmYsIHN0cnVjdCByMTBiaW8gKnIxMF9iaW8pCiAJCQkJcmRldl9kZWNfcGVuZGluZyhyZGV2LCBjb25mLSZndDttZGRldik7CiAJCQl9IGVsc2UgaWYgKGJpbyAhPSBOVUxMICZhbXA7JmFtcDsgYmlvLSZndDtiaV9zdGF0dXMpIHsKIAkJCQlmYWlsID0gdHJ1ZTsKLQkJCQluYXJyb3dfd3JpdGVfZXJyb3IocjEwX2JpbywgbSk7CiYjNDM7CQkJCS8qIE1hcHBpbmcgZmFpbHVyZXMgYXJlIHdob2xlLXJhbmdlIGFuZCBkZXRlcm1pbmlzdGljICovCiYjNDM7CQkJCWlmIChiaW8tJmd0O2JpX3N0YXR1cyA9PSBCTEtfU1RTX1AyUERNQSkKJiM0MzsJCQkJCXJkZXZfc2V0X2JhZGJsb2NrcyhyZGV2LAomIzQzOwkJCQkJCQkgICByMTBfYmlvLSZndDtkZXZzW21dLmFkZHIsCiYjNDM7CQkJCQkJCSAgIHIxMF9iaW8tJmd0O3NlY3RvcnMsIDApOwomIzQzOwkJCQllbHNlCiYjNDM7CQkJCQluYXJyb3dfd3JpdGVfZXJyb3IocjEwX2JpbywgbSk7CiAJCQkJcmRldl9kZWNfcGVuZGluZyhyZGV2LCBjb25mLSZndDttZGRldik7CiAJCQl9CiAJCQliaW8gPSByMTBfYmlvLSZndDtkZXZzW21dLnJlcGxfYmlvOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9udm1lL2hvc3QvcmRtYS5jIGIvZHJpdmVycy9udm1lL2hvc3QvcmRtYS5jCmluZGV4IDY5MDllMzU0Mjc5NDI3Li4yZjUwNTA5YTdhNjE2MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9udm1lL2hvc3QvcmRtYS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbnZtZS9ob3N0L3JkbWEuYwpAQCAtMTQ2OSw2ICYjNDM7MTQ2OSw3IEBAIHN0YXRpYyBpbnQgbnZtZV9yZG1hX2RtYV9tYXBfcmVxKHN0cnVjdCBpYl9kZXZpY2UgKmliZGV2LCBzdHJ1Y3QgcmVxdWVzdCAqcnEsCiAJCWludCAqY291bnQsIGludCAqcGlfY291bnQpCiB7CiAJc3RydWN0IG52bWVfcmRtYV9yZXF1ZXN0ICpyZXEgPSBibGtfbXFfcnFfdG9fcGR1KHJxKTsKJiM0MzsJc3RydWN0IHNnX3RhYmxlIHNndDsKIAlpbnQgcmV0OwogCiAJcmVxLSZndDtkYXRhX3NnbC5zZ190YWJsZS5zZ2wgPSAoc3RydWN0IHNjYXR0ZXJsaXN0ICopKHJlcSAmIzQzOyAxKTsKQEAgLTE0ODAsMTIgJiM0MzsxNDgxLDE0IEBAIHN0YXRpYyBpbnQgbnZtZV9yZG1hX2RtYV9tYXBfcmVxKHN0cnVjdCBpYl9kZXZpY2UgKmliZGV2LCBzdHJ1Y3QgcmVxdWVzdCAqcnEsCiAKIAlyZXEtJmd0O2RhdGFfc2dsLm5lbnRzID0gYmxrX3JxX21hcF9zZyhycSwgcmVxLSZndDtkYXRhX3NnbC5zZ190YWJsZS5zZ2wpOwogCi0JKmNvdW50ID0gaWJfZG1hX21hcF9zZyhpYmRldiwgcmVxLSZndDtkYXRhX3NnbC5zZ190YWJsZS5zZ2wsCi0JCQkgICAgICAgcmVxLSZndDtkYXRhX3NnbC5uZW50cywgcnFfZG1hX2RpcihycSkpOwotCWlmICh1bmxpa2VseSgqY291bnQgJmx0Oz0gMCkpIHsKLQkJcmV0ID0gLUVJTzsKJiM0MzsJc2d0ID0gKHN0cnVjdCBzZ190YWJsZSkgewomIzQzOwkJLnNnbAkJPSByZXEtJmd0O2RhdGFfc2dsLnNnX3RhYmxlLnNnbCwKJiM0MzsJCS5vcmlnX25lbnRzCT0gcmVxLSZndDtkYXRhX3NnbC5uZW50cywKJiM0MzsJfTsKJiM0MzsJcmV0ID0gaWJfZG1hX21hcF9zZ3RhYmxlX2F0dHJzKGliZGV2LCAmYW1wO3NndCwgcnFfZG1hX2RpcihycSksIDApOwomIzQzOwlpZiAodW5saWtlbHkocmV0KSkKIAkJZ290byBvdXRfZnJlZV90YWJsZTsKLQl9CiYjNDM7CSpjb3VudCA9IHNndC5uZW50czsKIAogCWlmIChibGtfaW50ZWdyaXR5X3JxKHJxKSkgewogCQlyZXEtJmd0O21ldGFkYXRhX3NnbC0mZ3Q7c2dfdGFibGUuc2dsID0KQEAgLTE1MDEsMTQgJiM0MzsxNTA0LDE0IEBAIHN0YXRpYyBpbnQgbnZtZV9yZG1hX2RtYV9tYXBfcmVxKHN0cnVjdCBpYl9kZXZpY2UgKmliZGV2LCBzdHJ1Y3QgcmVxdWVzdCAqcnEsCiAKIAkJcmVxLSZndDttZXRhZGF0YV9zZ2wtJmd0O25lbnRzID0gYmxrX3JxX21hcF9pbnRlZ3JpdHlfc2cocnEsCiAJCQkJcmVxLSZndDttZXRhZGF0YV9zZ2wtJmd0O3NnX3RhYmxlLnNnbCk7Ci0JCSpwaV9jb3VudCA9IGliX2RtYV9tYXBfc2coaWJkZXYsCi0JCQkJCSAgcmVxLSZndDttZXRhZGF0YV9zZ2wtJmd0O3NnX3RhYmxlLnNnbCwKLQkJCQkJICByZXEtJmd0O21ldGFkYXRhX3NnbC0mZ3Q7bmVudHMsCi0JCQkJCSAgcnFfZG1hX2RpcihycSkpOwotCQlpZiAodW5saWtlbHkoKnBpX2NvdW50ICZsdDs9IDApKSB7Ci0JCQlyZXQgPSAtRUlPOwomIzQzOwkJc2d0ID0gKHN0cnVjdCBzZ190YWJsZSkgewomIzQzOwkJCS5zZ2wJCT0gcmVxLSZndDttZXRhZGF0YV9zZ2wtJmd0O3NnX3RhYmxlLnNnbCwKJiM0MzsJCQkub3JpZ19uZW50cwk9IHJlcS0mZ3Q7bWV0YWRhdGFfc2dsLSZndDtuZW50cywKJiM0MzsJCX07CiYjNDM7CQlyZXQgPSBpYl9kbWFfbWFwX3NndGFibGVfYXR0cnMoaWJkZXYsICZhbXA7c2d0LCBycV9kbWFfZGlyKHJxKSwgMCk7CiYjNDM7CQlpZiAodW5saWtlbHkocmV0KSkKIAkJCWdvdG8gb3V0X2ZyZWVfcGlfdGFibGU7Ci0JCX0KJiM0MzsJCSpwaV9jb3VudCA9IHNndC5uZW50czsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTIwMjYsOCAmIzQzOzIwMjksNiBAQCBzdGF0aWMgYmxrX3N0YXR1c190IG52bWVfcmRtYV9xdWV1ZV9ycShzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eCwKIAlpZiAocmV0KQogCQlnb3RvIHVubWFwX3FlOwogCi0JbnZtZV9zdGFydF9yZXF1ZXN0KHJxKTsKLQogCWlmIChJU19FTkFCTEVEKENPTkZJR19CTEtfREVWX0lOVEVHUklUWSkgJmFtcDsmYW1wOwogCSAgICBxdWV1ZS0mZ3Q7cGlfc3VwcG9ydCAmYW1wOyZhbXA7CiAJICAgIChjLSZndDtjb21tb24ub3Bjb2RlID09IG52bWVfY21kX3dyaXRlIHx8CkBAIC0yMDM5LDExICYjNDM7MjA0MCwxMyBAQCBzdGF0aWMgYmxrX3N0YXR1c190IG52bWVfcmRtYV9xdWV1ZV9ycShzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eCwKIAogCWVyciA9IG52bWVfcmRtYV9tYXBfZGF0YShxdWV1ZSwgcnEsIGMpOwogCWlmICh1bmxpa2VseShlcnIgJmx0OyAwKSkgewotCQlkZXZfZXJyKHF1ZXVlLSZndDtjdHJsLSZndDtjdHJsLmRldmljZSwKLQkJCSAgICAgJiMzNDtGYWlsZWQgdG8gbWFwIGRhdGEgKCVkKVxuJiMzNDssIGVycik7CiYjNDM7CQlkZXZfZXJyX3JhdGVsaW1pdGVkKHF1ZXVlLSZndDtjdHJsLSZndDtjdHJsLmRldmljZSwKJiM0MzsJCQkJICAgICYjMzQ7RmFpbGVkIHRvIG1hcCBkYXRhICglZClcbiYjMzQ7LCBlcnIpOwogCQlnb3RvIGVycjsKIAl9CiAKJiM0MzsJbnZtZV9zdGFydF9yZXF1ZXN0KHJxKTsKJiM0MzsKIAlzcWUtJmd0O2NxZS5kb25lID0gbnZtZV9yZG1hX3NlbmRfZG9uZTsKIAogCWliX2RtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKGRldiwgc3FlLSZndDtkbWEsCkBAIC0yMDYzLDYgJiM0MzsyMDY2LDkgQEAgc3RhdGljIGJsa19zdGF0dXNfdCBudm1lX3JkbWFfcXVldWVfcnEoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsCiAJCXJldCA9IG52bWVfaG9zdF9wYXRoX2Vycm9yKHJxKTsKIAllbHNlIGlmIChlcnIgPT0gLUVOT01FTSB8fCBlcnIgPT0gLUVBR0FJTikKIAkJcmV0ID0gQkxLX1NUU19SRVNPVVJDRTsKJiM0MzsJLyogUGVlciBtZW1vcnkgdW5yZWFjaGFibGUgZnJvbSB0aGlzIGRldmljZTogZG9uJiMzOTt0IHJldHJ5LiAqLwomIzQzOwllbHNlIGlmIChlcnIgPT0gLUVSRU1PVEVJTykKJiM0MzsJCXJldCA9IEJMS19TVFNfUDJQRE1BOwogCWVsc2UKIAkJcmV0ID0gQkxLX1NUU19JT0VSUjsKIAludm1lX2NsZWFudXBfY21kKHJxKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmxrX3R5cGVzLmggYi9pbmNsdWRlL2xpbnV4L2Jsa190eXBlcy5oCmluZGV4IDg4MDhlZTc2ZTczYzA5Li5jOGRlNzgwOTMyMGFkNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ibGtfdHlwZXMuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2Jsa190eXBlcy5oCkBAIC0xNjUsNiAmIzQzOzE2NSwxNSBAQCB0eXBlZGVmIHUxNiBibGtfc2hvcnRfdDsKICAqLwogI2RlZmluZSBCTEtfU1RTX0RVUkFUSU9OX0xJTUlUCSgoX19mb3JjZSBibGtfc3RhdHVzX3QpMTcpCiAKJiM0MzsvKgomIzQzOyAqIEJMS19TVFNfUDJQRE1BIGlzIHJldHVybmVkIHdoZW4gYSBwZWVyLXRvLXBlZXIgRE1BIHRyYW5zZmVyIGNhbm5vdCBiZQomIzQzOyAqIG1hcHBlZCAodHlwaWNhbGx5IGJlY2F1c2UgdGhlcmUgaXMgbm8gcm91dGUgYmV0d2VlbiB0aGUgaW5pdGlhdG9yIGFuZCB0aGUKJiM0MzsgKiB0YXJnZXQgdGhhdCB0aGUgcGxhdGZvcm0mIzM5O3MgUENJZSB0b3BvbG9neSBhbmQgQUNTIHNldHRpbmdzIGFsbG93KS4gVGhpcwomIzQzOyAqIGlzIGEgcHJvcGVydHkgb2YgdGhlIGluaXRpYXRvci90YXJnZXQgcGFpciwgbm90IG9mIHRoZSB0YXJnZXQgZGV2aWNlJiMzOTtzCiYjNDM7ICogaGVhbHRoLiBUaGlzIGVycm9yIHNob3VsZCBuZXZlciBiZSByZXRyaWVkLgomIzQzOyAqLwomIzQzOyNkZWZpbmUgQkxLX1NUU19QMlBETUEJKChfX2ZvcmNlIGJsa19zdGF0dXNfdCkxOCkKJiM0MzsKIC8qCiAgKiBJbnZhbGlkIHNpemUgb3IgYWxpZ25tZW50LgogICovCkBAIC0xODgsNiAmIzQzOzE5Nyw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBibGtfcGF0aF9lcnJvcihibGtfc3RhdHVzX3QgZXJyb3IpCiAJY2FzZSBCTEtfU1RTX05PVFNVUFA6CiAJY2FzZSBCTEtfU1RTX05PU1BDOgogCWNhc2UgQkxLX1NUU19UQVJHRVQ6CiYjNDM7CWNhc2UgQkxLX1NUU19QMlBETUE6CiAJY2FzZSBCTEtfU1RTX1JFU1ZfQ09ORkxJQ1Q6CiAJY2FzZSBCTEtfU1RTX01FRElVTToKIAljYXNlIEJMS19TVFNfUFJPVEVDVElPTjoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMjE6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzkzNQoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDQ5OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFAyUERNQSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBpbnRyb2R1Y2luZyBgQkxLX1NUU19QMlBETUFgLiBJdCBzZWVtcyBmb2N1c2VkIG9uIGhhbmRsaW5nIFBlZXItdG8tUGVlciBETUEgZXJyb3JzLCBzcGVjaWZpY2FsbHkgd2hlbiBhIFAyUERNQSB0cmFuc2ZlciBjYW4mIzM5O3QgYmUgbWFwcGVkLiBUaGUgY2hhbmdlcyB0b3VjaCBhIHByZXR0eSB3aWRlIHJhbmdlIG9mIGNvZGU6IGBibGstY29yZS5jYCwgYGJsay1tcS1kbWEuY2AsIHZhcmlvdXMgUkFJRCBjb21wb25lbnRzIChgbWQuY2AsIGByYWlkMS0xMC5jYCwgZXRjLiksIGBudm1lL2hvc3QvcmRtYS5jYCwgYW5kIGBibGtfdHlwZXMuaGAuIFRoYXQmIzM5O3MgYSBkZWNlbnQgc3ByZWFkLiBUaGUgY29yZSBvZiBpdCBzZWVtcyB0byBiZSByZXR1cm5pbmcgdGhpcyBuZXcgYEJMS19TVFNfUDJQRE1BYCBzdGF0dXMuIFRoZSBwYXRjaCBhbHNvIG1vZGlmaWVzIGhvdyBNRCAoc29mdHdhcmUgUkFJRCkgaGFuZGxlcyBQMlBETUEgYmlvcywgZW5zdXJpbmcgY29ycmVjdCBlcnJvciBoYW5kbGluZyB3aXRob3V0IGNhc2NhZGluZyBmYWlsdXJlcyBhbmQgaG93IE5WTWUgUkRNQSBoYW5kbGVzIG1hcHBpbmcgZmFpbHVyZXMgd2l0aCBgLUVSRU1PVEVJT2AuCgpNeSBwcmltYXJ5IGNvbmNlcm4sIG9mIGNvdXJzZSwgaXMgYWJvdXQgcmVhY2hhYmlsaXR5LiBJcyB0aGlzIGNvZGUgcGF0aCBldmVuICpyZWFjaGFibGUqIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBHQ0Ugb3IgUUVNVT8gUDJQRE1BLCBieSBpdHMgdmVyeSBuYXR1cmUsIHJlbGllcyBvbiBQQ0kgZGV2aWNlcyB3aXRoIFAyUERNQSBzdXBwb3J0LiBUaGUgcmVhbCBxdWVzdGlvbiBpczogY2FuIHdlIGVtdWxhdGUgdGhhdCBpbiBRRU1VPyBXZSYjMzk7ZCBuZWVkIHRvIGJlIGFibGUgdG8gdHJpZ2dlciB0aGUgUDJQRE1BIGxvZ2ljLCB3aGljaCBsZWFkcyBtZSB0byBteSBuZXh0IHF1ZXN0aW9uLCBpcyB0aGVyZSBhbnkgc29mdHdhcmUgZW11bGF0ZWQgUDJQRE1BIGRldmljZSB0aGF0IHdlIGNvdWxkIHBvc3NpYmx5IHVzZSwgb3IgYW5vdGhlciB3YXkgdGhhdCB0aGlzIHBhdGggY2FuIGJlIHRyaWdnZXJlZD8KClNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBNRCBhbmQgTlZNZSBjaGFuZ2VzIGNvbWUgaW50byBwbGF5LiBJbiBNRCwgdGhlIGZ1bmN0aW9uIGBtZF9iaW9faXNfcDJwZG1hKGJpbylgIGlzIGNydWNpYWwuIEl0IGNhbGxzIGBpc19wY2lfcDJwZG1hX3BhZ2UoYmlvLSZndDtiaV9pb192ZWMtJmd0O2J2X3BhZ2UpYC4gQ2FuIHdlIGNyZWF0ZSBhIFAyUERNQSBwYWdlICp3aXRoaW4qIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQ/IFAyUERNQSBwYWdlcyBhcmUgdHlwaWNhbGx5IGNyZWF0ZWQgYnkgUENJIGRyaXZlcnMgdXNpbmcgYHBjaV9wMnBkbWFfYWRkX3Jlc291cmNlKClgLiBNeSBndWVzcyBpcyB0aGF0LCB3aXRob3V0IHJlYWwgaGFyZHdhcmUsIHRoaXMgaXMgZ29pbmcgdG8gYmUgdGhlIHRvdWdoIHBhcnQuCgpTbywgSSYjMzk7bSB0aGlua2luZywgaXMgdGhlcmUgKmFueSogd2F5IHRvIHRyaWdnZXIgdGhpcyB3aXRob3V0IHBoeXNpY2FsIGhhcmR3YXJlPyBNYXliZSBhIHNpbXVsYXRlZCBlbnZpcm9ubWVudCwgcGVyaGFwcyBzb21ldGhpbmcgaW4gYGRyaXZlcnMvbnZtZS90YXJnZXQvcDJwbWVtLmNgLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseS4gSSYjMzk7bSBnb2luZyB0byBzZWFyY2ggdGhlIGNvZGViYXNlIGZvciB1c2VzIG9mIGBwY2lfcDJwZG1hX2FkZF9yZXNvdXJjZWAgYW5kIGBpc19wY2lfcDJwZG1hX3BhZ2VgLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgY29uZGl0aW9ucyBuZWVkZWQgdG8gcmVhY2ggdGhpcyBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDIxOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BjaV9wMnBkbWFfYWRkX3Jlc291cmNlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9wY2kvcDJwZG1hLnJzdD05NT1BIHByb3ZpZGVyIHNpbXBseSBuZWVkcyB0byByZWdpc3RlciBhIEJBUiAob3IgYSBwb3J0aW9uIG9mIGEgQkFSKVxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL3BjaS9wMnBkbWEucnN0Ojk2OmFzIGEgUDJQIERNQSByZXNvdXJjZSB1c2luZyA6YzpmdW5jOmBwY2lfcDJwZG1hX2FkZF9yZXNvdXJjZSgpYC5cbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9wY2kvcDJwZG1hLnJzdC05Ny1UaGlzIHdpbGwgcmVnaXN0ZXIgc3RydWN0IHBhZ2VzIGZvciBhbGwgdGhlIHNwZWNpZmllZCBtZW1vcnkuXG4tLVxuZHJpdmVycy9hY2NlbC9oYWJhbmFsYWJzL2NvbW1vbi9obGRpby5jPTM2OT1pbnQgaGxfcDJwX3JlZ2lvbl9pbml0KHN0cnVjdCBobF9kZXZpY2UgKmhkZXYsIHN0cnVjdCBobF9wMnBfcmVnaW9uICpwMnByKVxuLS1cbmRyaXZlcnMvYWNjZWwvaGFiYW5hbGFicy9jb21tb24vaGxkaW8uYy0zNzQtXHQvKiBTdGFydCBieSBwdWJsaXNoaW5nIG91ciBwMnAgbWVtb3J5ICovXG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvY29tbW9uL2hsZGlvLmM6Mzc1Olx0cmMgPSBwY2lfcDJwZG1hX2FkZF9yZXNvdXJjZShoZGV2LVx1MDAzZXBkZXYsIHAycHItXHUwMDNlYmFyLCBwMnByLVx1MDAzZXNpemUsIHAycHItXHUwMDNlYmFyX29mZnNldCk7XG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvY29tbW9uL2hsZGlvLmMtMzc2LVx0aWYgKHJjKSB7XG4tLVxuZHJpdmVycy9udm1lL2hvc3QvcGNpLmM9MjQ1OT1zdGF0aWMgdm9pZCBudm1lX21hcF9jbWIoc3RydWN0IG52bWVfZGV2ICpkZXYpXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvcGNpLmMtMjUwNi1cbmRyaXZlcnMvbnZtZS9ob3N0L3BjaS5jOjI1MDc6XHRpZiAocGNpX3AycGRtYV9hZGRfcmVzb3VyY2UocGRldiwgYmFyLCBzaXplLCBvZmZzZXQpKSB7XG5kcml2ZXJzL252bWUvaG9zdC9wY2kuYy0yNTA4LVx0XHRkZXZfd2FybihkZXYtXHUwMDNlY3RybC5kZXZpY2UsXG4tLVxuZHJpdmVycy9wY2kvcDJwZG1hLmM9MzYzPXN0YXRpYyB2b2lkIHBjaV9wMnBkbWFfdW5tYXBfbWFwcGluZ3Modm9pZCAqZGF0YSlcbi0tXG5kcml2ZXJzL3BjaS9wMnBkbWEuYy0zNzctLyoqXG5kcml2ZXJzL3BjaS9wMnBkbWEuYzozNzg6ICogcGNpX3AycGRtYV9hZGRfcmVzb3VyY2UgLSBhZGQgbWVtb3J5IGZvciB1c2UgYXMgcDJwIG1lbW9yeVxuZHJpdmVycy9wY2kvcDJwZG1hLmMtMzc5LSAqIEBwZGV2OiB0aGUgZGV2aWNlIHRvIGFkZCB0aGUgbWVtb3J5IHRvXG4tLVxuZHJpdmVycy9wY2kvcDJwZG1hLmMtMzg2LSAqL1xuZHJpdmVycy9wY2kvcDJwZG1hLmM6Mzg3OmludCBwY2lfcDJwZG1hX2FkZF9yZXNvdXJjZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IGJhciwgc2l6ZV90IHNpemUsXG5kcml2ZXJzL3BjaS9wMnBkbWEuYy0zODgtXHRcdFx0ICAgIHU2NCBvZmZzZXQpXG4tLVxuZHJpdmVycy9wY2kvcDJwZG1hLmMtNDY2LX1cbmRyaXZlcnMvcGNpL3AycGRtYS5jOjQ2NzpFWFBPUlRfU1lNQk9MX0dQTChwY2lfcDJwZG1hX2FkZF9yZXNvdXJjZSk7XG5kcml2ZXJzL3BjaS9wMnBkbWEuYy00NjgtXG4tLVxuaW5jbHVkZS9saW51eC9wY2ktcDJwZG1hLmg9NzI9c3RydWN0IHAycGRtYV9wcm92aWRlciAqcGNpbV9wMnBkbWFfcHJvdmlkZXIoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBiYXIpO1xuaW5jbHVkZS9saW51eC9wY2ktcDJwZG1hLmg6NzM6aW50IHBjaV9wMnBkbWFfYWRkX3Jlc291cmNlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgYmFyLCBzaXplX3Qgc2l6ZSxcbmluY2x1ZGUvbGludXgvcGNpLXAycGRtYS5oLTc0LVx0XHR1NjQgb2Zmc2V0KTtcbi0tXG5pbmNsdWRlL2xpbnV4L3BjaS1wMnBkbWEuaD05Nj1zdGF0aWMgaW5saW5lIHN0cnVjdCBwMnBkbWFfcHJvdmlkZXIgKnBjaW1fcDJwZG1hX3Byb3ZpZGVyKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuLS1cbmluY2x1ZGUvbGludXgvcGNpLXAycGRtYS5oLTEwMC19XG5pbmNsdWRlL2xpbnV4L3BjaS1wMnBkbWEuaDoxMDE6c3RhdGljIGlubGluZSBpbnQgcGNpX3AycGRtYV9hZGRfcmVzb3VyY2Uoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBiYXIsXG5pbmNsdWRlL2xpbnV4L3BjaS1wMnBkbWEuaC0xMDItXHRcdHNpemVfdCBzaXplLCB1NjQgb2Zmc2V0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDIxOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk5OTYKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAzMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhwbG9yaW5nIFAyUERNQSBhbmQgaXRzIEludGVyYWN0aW9uIHdpdGggTUQgUkFJRCoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBob3cgUDJQRE1BIHdvcmtzLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBOVk1lIGNvbnRleHQgYW5kIHdvbmRlcmluZyBhYm91dCBpdHMgaW50ZWdyYXRpb24gd2l0aCBNRCBSQUlELiBJIHNlZSB0aGF0IGBwY2lfcDJwZG1hX2FkZF9yZXNvdXJjZWAgaW4gYGRyaXZlcnMvbnZtZS9ob3N0L3BjaS5jYCBpcyBrZXksIHBhcnRpY3VsYXJseSBmb3IgQ29udHJvbGxlciBNZW1vcnkgQnVmZmVyIChDTUIpLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIGNhbiB0aGlzIGJlIGVtdWxhdGVkIHdpdGhpbiBhIFFFTVUgZW52aXJvbm1lbnQ/IEx1Y2tpbHksIFFFTVUmIzM5O3MgTlZNZSBkZXZpY2UgKmRvZXMqIHN1cHBvcnQgQ01CLCBzbyB0aGF0JiMzOTtzIHByb21pc2luZyDigJMgd2UgY2FuIHNpbXVsYXRlIFAyUERNQSBwYWdlcyBpbiBhIHZpcnR1YWxpemVkIHNldHVwLgoKTm93LCB0aGUgaW50ZXJlc3RpbmcgcXVlc3Rpb24gaXM6IGNhbiB3ZSBhY3R1YWxseSB0cmlnZ2VyIHRoZSBNRCBSQUlEIGNvZGUgdXNpbmcgdGhlc2UgUDJQRE1BIHBhZ2VzPyBJZiB3ZSBoYXZlIGFuIE5WTWUgZGV2aWNlIGNvbmZpZ3VyZWQgd2l0aCBDTUIsIHdlIHNob3VsZCBiZSBhYmxlIHRvIHRyZWF0IGl0IGFzIGEgUDJQRE1BIHByb3ZpZGVyLiBUaGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMsIGNhbiB3ZSB0aGVuIHVzZSB0aGlzIFAyUERNQSBzZXR1cCB0byB0cmFuc2ZlciBkYXRhIHRvICphbm90aGVyKiBOVk1lIGRldmljZSBvciBldmVuIGFuIE1EIGRldmljZT8KCkkgZm91bmQgdGhhdCB0aGUgcGF0Y2ggbW9kaWZpZXMgTUQgdG8gaGFuZGxlIHRoZXNlIFAyUERNQSBiaW9zLiBXYWl0LCBgbWRfYmlvX2lzX3AycGRtYWAhIEl0IGNoZWNrcyBpZiB0aGUgYmlvIGhhcyBhIFAyUERNQSBwYWdlLiBTbywgaWYgd2UgY3JlYXRlIGFuIE1EIGFycmF5IHV0aWxpemluZyBOVk1lIGRldmljZXMsIGFuZCB3ZSBpc3N1ZSBhIFAyUERNQSBJL08gKnRvKiB0aGF0IE1EIGFycmF5LCBpdCBzaG91bGQgcGFzcyB0aGUgYmlvIGRvd24gdG8gdGhlIHVuZGVybHlpbmcgZGV2aWNlcywgcmlnaHQ/CgpCdXQsIGNhbiB0aGlzIGV2ZW4gYmUgdHJpZ2dlcmVkIGZyb20gdXNlcnNwYWNlPyBVc3VhbGx5LCBQMlBETUEgaXMgdGhlIGRvbWFpbiBvZiBrZXJuZWwgZHJpdmVycy4gVGhpbmsgTlZNZS1vRiB0YXJnZXQgb3IgUkRNQS4gT2gsIHdhaXQsIGBPX0RJUkVDVGAgY291cGxlZCB3aXRoIFAyUERNQSBwYWdlcz8gTm8sIHRoYXQgd29uJiMzOTt0IHdvcmsuIFVzZXJzcGFjZSBjYW4mIzM5O3QgZGlyZWN0bHkgYWxsb2NhdGUgUDJQRE1BIHBhZ2VzLiBUaGF0IGNsb3NlcyB0aGF0IGRvb3IuCgpBbHJpZ2h0LCBzbyBob3cgKmFyZSogUDJQRE1BIHBhZ2VzIGNyZWF0ZWQgYW5kIHVzZWQ/IEkgbmVlZCB0byBkaWcgZGVlcGVyLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSB1c2FnZSBvZiBgaXNfcGNpX3AycGRtYV9wYWdlYCBvciBzcGVjaWZpY2FsbHkgaG93IFAyUERNQSBiaW9zIGFyZSBjcmVhdGVkLiBUaGF0JiMzOTtzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDIxOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lzX3BjaV9wMnBkbWFfcGFnZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9iaW8taW50ZWdyaXR5LmM9MzMzPXN0YXRpYyB1bnNpZ25lZCBpbnQgYnZlY19mcm9tX3BhZ2VzKHN0cnVjdCBiaW9fdmVjICpidmVjLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLFxuLS1cbmJsb2NrL2Jpby1pbnRlZ3JpdHkuYy0zNTUtXG5ibG9jay9iaW8taW50ZWdyaXR5LmM6MzU2Olx0XHRpZiAoaXNfcGNpX3AycGRtYV9wYWdlKHBhZ2VzW2ldKSlcbmJsb2NrL2Jpby1pbnRlZ3JpdHkuYy0zNTctXHRcdFx0KmlzX3AycCA9IHRydWU7XG4tLVxuYmxvY2svYmlvLmM9MTAwNj12b2lkIF9fYmlvX2FkZF9wYWdlKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IHBhZ2UgKnBhZ2UsXG4tLVxuYmxvY2svYmlvLmMtMTAxMS1cbmJsb2NrL2Jpby5jOjEwMTI6XHRpZiAoaXNfcGNpX3AycGRtYV9wYWdlKHBhZ2UpKVxuYmxvY2svYmlvLmMtMTAxMy1cdFx0YmlvLVx1MDAzZWJpX29wZiB8PSBSRVFfTk9NRVJHRTtcbi0tXG5ibG9jay9iaW8uYz0xMjQ1PWludCBiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuLS1cbmJsb2NrL2Jpby5jLTEyNzctXG5ibG9jay9iaW8uYzoxMjc4Olx0aWYgKGlzX3BjaV9wMnBkbWFfcGFnZShiaW8tXHUwMDNlYmlfaW9fdmVjLVx1MDAzZWJ2X3BhZ2UpKVxuYmxvY2svYmlvLmMtMTI3OS1cdFx0YmlvLVx1MDAzZWJpX29wZiB8PSBSRVFfTk9NRVJHRTtcbi0tXG5ibG9jay9ibGsuaD0xNTY9c3RhdGljIGlubGluZSBib29sIHpvbmVfZGV2aWNlX3BhZ2VzX2NvbXBhdGlibGUoY29uc3Qgc3RydWN0IHBhZ2UgKmEsXG4tLVxuYmxvY2svYmxrLmgtMTU4LXtcbmJsb2NrL2Jsay5oOjE1OTpcdGlmIChpc19wY2lfcDJwZG1hX3BhZ2UoYSkgfHwgaXNfcGNpX3AycGRtYV9wYWdlKGIpKVxuYmxvY2svYmxrLmgtMTYwLVx0XHRyZXR1cm4gem9uZV9kZXZpY2VfcGFnZXNfaGF2ZV9zYW1lX3BnbWFwKGEsIGIpO1xuLS1cbmRyaXZlcnMvbWQvbWQuaD0zND1zdGF0aWMgaW5saW5lIGJvb2wgbWRfYmlvX2lzX3AycGRtYShzdHJ1Y3QgYmlvICpiaW8pXG4tLVxuZHJpdmVycy9tZC9tZC5oLTM2LVx0cmV0dXJuIGJpb19oYXNfZGF0YShiaW8pIFx1MDAyNlx1MDAyNiBiaW8tXHUwMDNlYmlfaW9fdmVjIFx1MDAyNlx1MDAyNlxuZHJpdmVycy9tZC9tZC5oOjM3Olx0ICAgICAgIGlzX3BjaV9wMnBkbWFfcGFnZShiaW8tXHUwMDNlYmlfaW9fdmVjLVx1MDAzZWJ2X3BhZ2UpO1xuZHJpdmVycy9tZC9tZC5oLTM4LX1cbi0tXG5kcml2ZXJzL252bWUvaG9zdC9wY2kuYz0xMjA2PXN0YXRpYyBibGtfc3RhdHVzX3QgbnZtZV9wY2lfc2V0dXBfZGF0YV9zaW1wbGUoc3RydWN0IHJlcXVlc3QgKnJlcSxcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9wY2kuYy0xMjE3LVx0XHRyZXR1cm4gQkxLX1NUU19BR0FJTjtcbmRyaXZlcnMvbnZtZS9ob3N0L3BjaS5jOjEyMTg6XHRpZiAoaXNfcGNpX3AycGRtYV9wYWdlKGJ2LmJ2X3BhZ2UpKVxuZHJpdmVycy9udm1lL2hvc3QvcGNpLmMtMTIxOS1cdFx0cmV0dXJuIEJMS19TVFNfQUdBSU47XG4tLVxuZHJpdmVycy9udm1lL2hvc3QvcGNpLmM9MTM3Mj1zdGF0aWMgYmxrX3N0YXR1c190IG52bWVfcGNpX3NldHVwX21ldGFfbXB0cihzdHJ1Y3QgcmVxdWVzdCAqcmVxKVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L3BjaS5jLTEzNzctXG5kcml2ZXJzL252bWUvaG9zdC9wY2kuYzoxMzc4Olx0aWYgKGlzX3BjaV9wMnBkbWFfcGFnZShidi5idl9wYWdlKSlcbmRyaXZlcnMvbnZtZS9ob3N0L3BjaS5jLTEzNzktXHRcdHJldHVybiBudm1lX3BjaV9zZXR1cF9tZXRhX2l0ZXIocmVxKTtcbi0tXG5kcml2ZXJzL252bWUvdGFyZ2V0L2lvLWNtZC1iZGV2LmM9MjUzPXN0YXRpYyB2b2lkIG52bWV0X2JkZXZfZXhlY3V0ZV9ydyhzdHJ1Y3QgbnZtZXRfcmVxICpyZXEpXG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC9pby1jbWQtYmRldi5jLTI4Ni1cbmRyaXZlcnMvbnZtZS90YXJnZXQvaW8tY21kLWJkZXYuYzoyODc6XHRpZiAoaXNfcGNpX3AycGRtYV9wYWdlKHNnX3BhZ2UocmVxLVx1MDAzZXNnKSkpXG5kcml2ZXJzL252bWUvdGFyZ2V0L2lvLWNtZC1iZGV2LmMtMjg4LVx0XHRvcGYgfD0gUkVRX05PTUVSR0U7XG4tLVxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oPTE5Mj1zdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fc2V0X3pvbmVfZGV2aWNlX2RhdGEoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqZGF0YSlcbi0tXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmgtMTk3LVxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oOjE5ODpzdGF0aWMgaW5saW5lIGJvb2wgaXNfcGNpX3AycGRtYV9wYWdlKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oLTE5OS17XG4tLVxuaW5jbHVkZS9saW51eC9wY2ktcDJwZG1hLmg9MTkxPXBjaV9wMnBkbWFfc3RhdGUoc3RydWN0IHBjaV9wMnBkbWFfbWFwX3N0YXRlICpzdGF0ZSwgc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmluY2x1ZGUvbGludXgvcGNpLXAycGRtYS5oLTE5My17XG5pbmNsdWRlL2xpbnV4L3BjaS1wMnBkbWEuaDoxOTQ6XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfUENJX1AyUERNQSkgXHUwMDI2XHUwMDI2IGlzX3BjaV9wMnBkbWFfcGFnZShwYWdlKSkge1xuaW5jbHVkZS9saW51eC9wY2ktcDJwZG1hLmgtMTk1LVx0XHRfX3BjaV9wMnBkbWFfdXBkYXRlX3N0YXRlKHN0YXRlLCBkZXYsIHBhZ2UpO1xuLS1cbm1tL2d1cC5jPTUxNz1zdGF0aWMgc3RydWN0IGZvbGlvICp0cnlfZ3JhYl9mb2xpb19mYXN0KHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgcmVmcyxcbi0tXG5tbS9ndXAuYy01MjctXG5tbS9ndXAuYzo1Mjg6XHRpZiAodW5saWtlbHkoIShmbGFncyBcdTAwMjYgRk9MTF9QQ0lfUDJQRE1BKSBcdTAwMjZcdTAwMjYgaXNfcGNpX3AycGRtYV9wYWdlKHBhZ2UpKSlcbm1tL2d1cC5jLTUyOS1cdFx0cmV0dXJuIE5VTEw7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMjE6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIxNzcKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAxNzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBQMlBETUEgUGFnZSBVc2FnZSBpbiBEaXJlY3QgSS9PKioKCk9rYXksIHNvIEkgc2VlIGBpc19wY2lfcDJwZG1hX3BhZ2VgIGJlaW5nIGNhbGxlZCB3aXRoaW4gYGJpb19pb3ZfaXRlcl9nZXRfcGFnZXNgLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCBiZWNhdXNlIGBiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzYCBpcyBlc3NlbnRpYWwgZm9yIGRpcmVjdCBJL08gYW5kIE5WTWUgdGFyZ2V0IG9wZXJhdGlvbnMuIEEgbGlnaHRidWxiIHdlbnQgb2ZmOiBJIHJlY2FsbCBgRk9MTF9QQ0lfUDJQRE1BYCBpcyBhIGZsYWcgdXRpbGl6ZWQgYnkgYGdldF91c2VyX3BhZ2VzYC4gVGhpcyB0cmlnZ2VycyB0aGUgcXVlc3Rpb24g4oCTIGNhbiB1c2Vyc3BhY2UgYWN0dWFsbHkgbWFwIFAyUERNQSBwYWdlcyBhbmQgY29uc2VxdWVudGx5IHBlcmZvcm0gZGlyZWN0IEkvTyB1c2luZyB0aGVtPwoKVGhlIGFuc3dlciBzZWVtcyB0byBiZSB5ZXMsIGBPX0RJUkVDVGAgKmNhbiogYmUgdXNlZCB3aXRoIHRoZXNlIFAyUERNQSBwYWdlcywgcHJvdmlkZWQgdGhleSYjMzk7cmUgYXBwcm9wcmlhdGVseSBtYXBwZWQgaW50byB1c2Vyc3BhY2UuIE5vdywgdGhlIG5leHQgcXVlc3Rpb24gaXMgaG93IHRoaXMgbWFwcGluZyBhY3R1YWxseSBvY2N1cnMuIEFyZSB3ZSBsb29raW5nIGF0IHNvbWV0aGluZyBsaWtlIGAvZGV2L3AycG1lbSpgIGRldmljZXMsIG9yIGEgc2ltaWxhciBpbnRlcmZhY2U/IFRpbWUgdG8gZGlnIGludG8gYGRyaXZlcnMvcGNpL3AycGRtYS5jYCBhbmQgc2VlIGlmIHRoZXJlJiMzOTtzIGEgY2hhcmFjdGVyIGRldmljZSBvciBhbnkgc2ltaWxhciBtZWNoYW5pc21zIGV4cG9zZWQgdGhhdCBhbGxvdyB1c2VybGFuZCBhY2Nlc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMjE6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwY2lfcDJwZG1hX2FkZF9jbGllbnQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDIxOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNjMzCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKkludmVzdGlnYXRpbmcgVXNlcnNwYWNlIE1hcHBpbmcgaW4gUENJIERpcmVjdCBNZW1vcnkgQWNjZXNzKioKCkFscmlnaHQsIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgdXNlcnNwYWNlIG1hcHBpbmcgaXMgaGFuZGxlZCBpbiB0aGUgUENJIERpcmVjdCBNZW1vcnkgQWNjZXNzIChETUEpIGNvbnRleHQgd2l0aGluIHRoZSBrZXJuZWwuIFRoZSBsaWtlbHkgcGxhY2UgdG8gc3RhcnQgbG9va2luZyBpcyB0aGUgYGRyaXZlcnMvcGNpL3AycGRtYS5jYCBmaWxlLiBUaGF0IHNlZW1zIHRoZSBtb3N0IGxvZ2ljYWwgc3BvdCB0byBmaW5kIHRoZSBjb3JlIGltcGxlbWVudGF0aW9uIGFuZCBhbnkgcmVsYXRlZCBpbnRlcmFjdGlvbnMgd2l0aCB1c2Vyc3BhY2UuIEkmIzM5O2xsIGZvY3VzIG15IGludmVzdGlnYXRpb24gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDIxOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZmlsZV9vcGVyYXRpb25zJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9wY2kvcDJwZG1hLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAyMTozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjgwOQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk5WTWUgQ01CIGFuZCBVc2VycGFjZSBNYXBwaW5nIC0gQSBRdWljayBTY2FuKioKCk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIERpZCBJIGp1c3QgcmVhZCBzb21ldGhpbmcgYWJvdXQgTlZNZSBDTUIgYmVpbmcgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZT8gVGhhdCBkb2VzbiYjMzk7dCBzb3VuZCByaWdodC4uLiB0eXBpY2FsbHksIHlvdSB3b3VsZG4mIzM5O3QgZXhwZWN0IHRoYXQuIExldCBtZSByZS10aGluayB0aGF0IOKAkyBubywgdXN1YWxseSBpdCYjMzk7cyBub3QgYSBkaXJlY3QgbWFwcGluZy4gQnV04oCmIGNvdWxkIHRoZXJlIGJlIHNvbWV0aGluZyBJ4oCZbSBtaXNzaW5nPwoKQWxyaWdodCwgbGV0JiMzOTtzIHJlZm9jdXMuIFBlcmhhcHMgdGhlIGtlcm5lbCYjMzk7cyBOVk1lIHRhcmdldCBjb2RlIG1pZ2h0IGhvbGQgYSBjbHVlLiBMZXQgbWUgcXVpY2tseSB6ZXJvIGluIG9uIGBkcml2ZXJzL252bWUvdGFyZ2V0L3AycG1lbS5jYC4gSSBoYXZlIGEgZmVlbGluZyB0aGF0IGZpbGUgbWlnaHQgYmUgcmVsZXZhbnQgdG8gdW5kZXJzdGFuZGluZyBhbnkgcG90ZW50aWFsIG51YW5jZXMgb3Igd29ya2Fyb3VuZHMgcmVsYXRlZCB0byB0aGlzIHRvcGljLiBUaW1lIHRvIHRha2UgYSBjbG9zZXIgbG9vayEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMjE6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cDJwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9udm1lL3RhcmdldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9udm1lL3RhcmdldC9jb25maWdmcy5jLTE0LSNpbmNsdWRlIFx1MDAzY2xpbnV4L3BjaS5oXHUwMDNlXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvbmZpZ2ZzLmM6MTU6I2luY2x1ZGUgXHUwMDNjbGludXgvcGNpLXAycGRtYS5oXHUwMDNlXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvbmZpZ2ZzLmMtMTYtI2lmZGVmIENPTkZJR19OVk1FX1RBUkdFVF9BVVRIXG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC9jb25maWdmcy5jPTU2MD1DT05GSUdGU19BVFRSKG52bWV0X25zXywgZGV2aWNlX3BhdGgpO1xuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvY29uZmlnZnMuYy01NjItI2lmZGVmIENPTkZJR19QQ0lfUDJQRE1BXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvbmZpZ2ZzLmM6NTYzOnN0YXRpYyBzc2l6ZV90IG52bWV0X25zX3AycG1lbV9zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hhciAqcGFnZSlcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29uZmlnZnMuYy01NjQte1xuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvY29uZmlnZnMuYy01NjYtXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvbmZpZ2ZzLmM6NTY3Olx0cmV0dXJuIHBjaV9wMnBkbWFfZW5hYmxlX3Nob3cocGFnZSwgbnMtXHUwMDNlcDJwX2RldiwgbnMtXHUwMDNldXNlX3AycG1lbSk7XG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvbmZpZ2ZzLmMtNTY4LX1cbmRyaXZlcnMvbnZtZS90YXJnZXQvY29uZmlnZnMuYy01NjktXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvbmZpZ2ZzLmM6NTcwOnN0YXRpYyBzc2l6ZV90IG52bWV0X25zX3AycG1lbV9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvbmZpZ2ZzLmMtNTcxLVx0XHRjb25zdCBjaGFyICpwYWdlLCBzaXplX3QgY291bnQpXG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC9jb25maWdmcy5jLTU3My1cdHN0cnVjdCBudm1ldF9ucyAqbnMgPSB0b19udm1ldF9ucyhpdGVtKTtcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29uZmlnZnMuYzo1NzQ6XHRzdHJ1Y3QgcGNpX2RldiAqcDJwX2RldiA9IE5VTEw7XG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvbmZpZ2ZzLmM6NTc1Olx0Ym9vbCB1c2VfcDJwbWVtO1xuZHJpdmVycy9udm1lL3RhcmdldC9jb25maWdmcy5jLTU3Ni1cdGludCByZXQgPSBjb3VudDtcbi0tXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvbmZpZ2ZzLmMtNTg0LVxuZHJpdmVycy9udm1lL3RhcmdldC9jb25maWdmcy5jOjU4NTpcdGVycm9yID0gcGNpX3AycGRtYV9lbmFibGVfc3RvcmUocGFnZSwgXHUwMDI2cDJwX2RldiwgXHUwMDI2dXNlX3AycG1lbSk7XG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvbmZpZ2ZzLmMtNTg2LVx0aWYgKGVycm9yKSB7XG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC9jb25maWdmcy5jLTU5MC1cbmRyaXZlcnMvbnZtZS90YXJnZXQvY29uZmlnZnMuYzo1OTE6XHRucy1cdTAwM2V1c2VfcDJwbWVtID0gdXNlX3AycG1lbTtcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29uZmlnZnMuYzo1OTI6XHRwY2lfZGV2X3B1dChucy1cdTAwM2VwMnBfZGV2KTtcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29uZmlnZnMuYzo1OTM6XHRucy1cdTAwM2VwMnBfZGV2ID0gcDJwX2RldjtcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29uZmlnZnMuYy01OTQtXG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC9jb25maWdmcy5jLTYwMC1cbmRyaXZlcnMvbnZtZS90YXJnZXQvY29uZmlnZnMuYzo2MDE6Q09ORklHRlNfQVRUUihudm1ldF9uc18sIHAycG1lbSk7XG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvbmZpZ2ZzLmMtNjAyLSNlbmRpZiAvKiBDT05GSUdfUENJX1AyUERNQSAqL1xuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvY29uZmlnZnMuYz04MjU9c3RhdGljIHN0cnVjdCBjb25maWdmc19hdHRyaWJ1dGUgKm52bWV0X25zX2F0dHJzW10gPSB7XG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC9jb25maWdmcy5jLTgzNC0jaWZkZWYgQ09ORklHX1BDSV9QMlBETUFcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29uZmlnZnMuYzo4MzU6XHRcdTAwMjZudm1ldF9uc19hdHRyX3AycG1lbSxcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29uZmlnZnMuYy04MzYtI2VuZGlmXG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtMTAtI2luY2x1ZGUgXHUwMDNjbGludXgvcmN1bGlzdC5oXHUwMDNlXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYzoxMTojaW5jbHVkZSBcdTAwM2NsaW51eC9wY2ktcDJwZG1hLmhcdTAwM2VcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jLTEyLSNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjYXR0ZXJsaXN0LmhcdTAwM2Vcbi0tXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYz00Nzc9c3RhdGljIHZvaWQgbnZtZXRfbnNfZGV2X2Rpc2FibGUoc3RydWN0IG52bWV0X25zICpucylcbi0tXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYy00ODItXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYzo0ODM6c3RhdGljIGludCBudm1ldF9wMnBtZW1fbnNfZW5hYmxlKHN0cnVjdCBudm1ldF9ucyAqbnMpXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYy00ODQte1xuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtNDg1LVx0aW50IHJldDtcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jOjQ4NjpcdHN0cnVjdCBwY2lfZGV2ICpwMnBfZGV2O1xuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtNDg3LVxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmM6NDg4Olx0aWYgKCFucy1cdTAwM2V1c2VfcDJwbWVtKVxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtNDg5LVx0XHRyZXR1cm4gMDtcbi0tXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYy00OTUtXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYzo0OTY6XHRpZiAoIWJsa19xdWV1ZV9wY2lfcDJwZG1hKG5zLVx1MDAzZWJkZXYtXHUwMDNlYmRfZGlzay1cdTAwM2VxdWV1ZSkpIHtcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jLTQ5Ny1cdFx0cHJfZXJyKFwmIzM0O3BlZXItdG8tcGVlciBETUEgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgZHJpdmVyIG9mICVzXFxuXCYjMzQ7LFxuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jLTUwMS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jOjUwMjpcdGlmIChucy1cdTAwM2VwMnBfZGV2KSB7XG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYzo1MDM6XHRcdHJldCA9IHBjaV9wMnBkbWFfZGlzdGFuY2UobnMtXHUwMDNlcDJwX2RldiwgbnZtZXRfbnNfZGV2KG5zKSwgdHJ1ZSk7XG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYy01MDQtXHRcdGlmIChyZXQgXHUwMDNjIDApXG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtNTA3LVx0XHQvKlxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmM6NTA4Olx0XHQgKiBSaWdodCBub3cgd2UganVzdCBjaGVjayB0aGF0IHRoZXJlIGlzIHAycG1lbSBhdmFpbGFibGUgc29cbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jLTUwOS1cdFx0ICogd2UgY2FuIHJlcG9ydCBhbiBlcnJvciB0byB0aGUgdXNlciByaWdodCBhd2F5IGlmIHRoZXJlXG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtNTEzLVxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmM6NTE0Olx0XHRwMnBfZGV2ID0gcGNpX3AycG1lbV9maW5kKG52bWV0X25zX2RldihucykpO1xuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmM6NTE1Olx0XHRpZiAoIXAycF9kZXYpIHtcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jLTUxNi1cdFx0XHRwcl9lcnIoXCYjMzQ7bm8gcGVlci10by1wZWVyIG1lbW9yeSBpcyBhdmFpbGFibGUgZm9yICVzXFxuXCYjMzQ7LFxuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jLTUyMC1cbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jOjUyMTpcdFx0cGNpX2Rldl9wdXQocDJwX2Rldik7XG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYy01MjItXHR9XG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtNTI2LVxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmM6NTI3OnN0YXRpYyB2b2lkIG52bWV0X3AycG1lbV9uc19hZGRfcDJwKHN0cnVjdCBudm1ldF9jdHJsICpjdHJsLFxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtNTI4LVx0XHRcdFx0ICAgIHN0cnVjdCBudm1ldF9ucyAqbnMpXG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtNTMwLVx0c3RydWN0IGRldmljZSAqY2xpZW50c1syXTtcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jOjUzMTpcdHN0cnVjdCBwY2lfZGV2ICpwMnBfZGV2O1xuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtNTMyLVx0aW50IHJldDtcbi0tXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYy01MzUtXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYzo1MzY6XHRpZiAoIWN0cmwtXHUwMDNlcDJwX2NsaWVudCB8fCAhbnMtXHUwMDNldXNlX3AycG1lbSlcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jLTUzNy1cdFx0cmV0dXJuO1xuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtNTM4LVxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmM6NTM5Olx0aWYgKG5zLVx1MDAzZXAycF9kZXYpIHtcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jOjU0MDpcdFx0cmV0ID0gcGNpX3AycGRtYV9kaXN0YW5jZShucy1cdTAwM2VwMnBfZGV2LCBjdHJsLVx1MDAzZXAycF9jbGllbnQsIHRydWUpO1xuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtNTQxLVx0XHRpZiAocmV0IFx1MDAzYyAwKVxuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jLTU0My1cbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jOjU0NDpcdFx0cDJwX2RldiA9IHBjaV9kZXZfZ2V0KG5zLVx1MDAzZXAycF9kZXYpO1xuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtNTQ1LVx0fSBlbHNlIHtcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jOjU0NjpcdFx0Y2xpZW50c1swXSA9IGN0cmwtXHUwMDNlcDJwX2NsaWVudDtcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jLTU0Ny1cdFx0Y2xpZW50c1sxXSA9IG52bWV0X25zX2Rldihucyk7XG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYy01NDgtXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYzo1NDk6XHRcdHAycF9kZXYgPSBwY2lfcDJwbWVtX2ZpbmRfbWFueShjbGllbnRzLCBBUlJBWV9TSVpFKGNsaWVudHMpKTtcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jOjU1MDpcdFx0aWYgKCFwMnBfZGV2KSB7XG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYy01NTEtXHRcdFx0cHJfZXJyKFwmIzM0O25vIHBlZXItdG8tcGVlciBtZW1vcnkgaXMgYXZhaWxhYmxlIHRoYXQmIzM5O3Mgc3VwcG9ydGVkIGJ5ICVzIGFuZCAlc1xcblwmIzM0OyxcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jOjU1MjpcdFx0XHQgICAgICAgZGV2X25hbWUoY3RybC1cdTAwM2VwMnBfY2xpZW50KSwgbnMtXHUwMDNlZGV2aWNlX3BhdGgpO1xuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtNTUzLVx0XHRcdHJldHVybjtcbi0tXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYy01NTYtXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYzo1NTc6XHRyZXQgPSByYWRpeF90cmVlX2luc2VydChcdTAwMjZjdHJsLVx1MDAzZXAycF9uc19tYXAsIG5zLVx1MDAzZW5zaWQsIHAycF9kZXYpO1xuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtNTU4LVx0aWYgKHJldCBcdTAwM2MgMClcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jOjU1OTpcdFx0cGNpX2Rldl9wdXQocDJwX2Rldik7XG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYy01NjAtXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYzo1NjE6XHRwcl9pbmZvKFwmIzM0O3VzaW5nIHAycG1lbSBvbiAlcyBmb3IgbnNpZCAlZFxcblwmIzM0OywgcGNpX25hbWUocDJwX2RldiksXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYy01NjItXHRcdG5zLVx1MDAzZW5zaWQpO1xuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jPTU3Nz1pbnQgbnZtZXRfbnNfZW5hYmxlKHN0cnVjdCBudm1ldF9ucyAqbnMpXG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtNTk5LVxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmM6NjAwOlx0cmV0ID0gbnZtZXRfcDJwbWVtX25zX2VuYWJsZShucyk7XG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYy02MDEtXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jLTYwNC1cdGxpc3RfZm9yX2VhY2hfZW50cnkoY3RybCwgXHUwMDI2c3Vic3lzLVx1MDAzZWN0cmxzLCBzdWJzeXNfZW50cnkpXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYzo2MDU6XHRcdG52bWV0X3AycG1lbV9uc19hZGRfcDJwKGN0cmwsIG5zKTtcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jLTYwNi1cbi0tXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYy02MjctXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGN0cmwsIFx1MDAyNnN1YnN5cy1cdTAwM2VjdHJscywgc3Vic3lzX2VudHJ5KVxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmM6NjI4Olx0XHRwY2lfZGV2X3B1dChyYWRpeF90cmVlX2RlbGV0ZShcdTAwMjZjdHJsLVx1MDAzZXAycF9uc19tYXAsIG5zLVx1MDAzZW5zaWQpKTtcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jLTYyOS1vdXRfZGV2X2Rpc2FibGU6XG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmM9NjM0PXZvaWQgbnZtZXRfbnNfZGlzYWJsZShzdHJ1Y3QgbnZtZXRfbnMgKm5zKVxuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jLTY0Ni1cdGxpc3RfZm9yX2VhY2hfZW50cnkoY3RybCwgXHUwMDI2c3Vic3lzLVx1MDAzZWN0cmxzLCBzdWJzeXNfZW50cnkpXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYzo2NDc6XHRcdHBjaV9kZXZfcHV0KHJhZGl4X3RyZWVfZGVsZXRlKFx1MDAyNmN0cmwtXHUwMDNlcDJwX25zX21hcCwgbnMtXHUwMDNlbnNpZCkpO1xuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtNjQ4LVxuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jPTEyODg9c3RhdGljIHVuc2lnbmVkIGludCBudm1ldF9kYXRhX3RyYW5zZmVyX2xlbihzdHJ1Y3QgbnZtZXRfcmVxICpyZXEpXG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtMTI5Mi1cbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jOjEyOTM6c3RhdGljIGludCBudm1ldF9yZXFfYWxsb2NfcDJwbWVtX3NnbHMoc3RydWN0IHBjaV9kZXYgKnAycF9kZXYsXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYy0xMjk0LVx0XHRzdHJ1Y3QgbnZtZXRfcmVxICpyZXEpXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYy0xMjk1LXtcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jOjEyOTY6XHRyZXEtXHUwMDNlc2cgPSBwY2lfcDJwbWVtX2FsbG9jX3NnbChwMnBfZGV2LCBcdTAwMjZyZXEtXHUwMDNlc2dfY250LFxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtMTI5Ny1cdFx0XHRudm1ldF9kYXRhX3RyYW5zZmVyX2xlbihyZXEpKTtcbi0tXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYy0xMzAxLVx0aWYgKHJlcS1cdTAwM2VtZXRhZGF0YV9sZW4pIHtcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jOjEzMDI6XHRcdHJlcS1cdTAwM2VtZXRhZGF0YV9zZyA9IHBjaV9wMnBtZW1fYWxsb2Nfc2dsKHAycF9kZXYsXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYy0xMzAzLVx0XHRcdFx0XHUwMDI2cmVxLVx1MDAzZW1ldGFkYXRhX3NnX2NudCwgcmVxLVx1MDAzZW1ldGFkYXRhX2xlbik7XG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtMTMwNy1cbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jOjEzMDg6XHRyZXEtXHUwMDNlcDJwX2RldiA9IHAycF9kZXY7XG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYy0xMzA5LVxuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jLTEzMTEtb3V0X2ZyZWVfc2c6XG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYzoxMzEyOlx0cGNpX3AycG1lbV9mcmVlX3NnbChyZXEtXHUwMDNlcDJwX2RldiwgcmVxLVx1MDAzZXNnKTtcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jLTEzMTMtb3V0X2Vycjpcbi0tXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYy0xMzE2LVxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmM6MTMxNzpzdGF0aWMgc3RydWN0IHBjaV9kZXYgKm52bWV0X3JlcV9maW5kX3AycF9kZXYoc3RydWN0IG52bWV0X3JlcSAqcmVxKVxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtMTMxOC17XG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtMTMyMS1cdFx0cmV0dXJuIE5VTEw7XG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYzoxMzIyOlx0cmV0dXJuIHJhZGl4X3RyZWVfbG9va3VwKFx1MDAyNnJlcS1cdTAwM2VzcS1cdTAwM2VjdHJsLVx1MDAzZXAycF9uc19tYXAsIHJlcS1cdTAwM2Vucy1cdTAwM2Vuc2lkKTtcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jLTEzMjMtfVxuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jPTEzMjU9aW50IG52bWV0X3JlcV9hbGxvY19zZ2xzKHN0cnVjdCBudm1ldF9yZXEgKnJlcSlcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jLTEzMjYte1xuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmM6MTMyNzpcdHN0cnVjdCBwY2lfZGV2ICpwMnBfZGV2ID0gbnZtZXRfcmVxX2ZpbmRfcDJwX2RldihyZXEpO1xuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtMTMyOC1cbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jOjEzMjk6XHRpZiAocDJwX2RldiBcdTAwMjZcdTAwMjYgIW52bWV0X3JlcV9hbGxvY19wMnBtZW1fc2dscyhwMnBfZGV2LCByZXEpKVxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtMTMzMC1cdFx0cmV0dXJuIDA7XG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmM9MTM1Mj12b2lkIG52bWV0X3JlcV9mcmVlX3NnbHMoc3RydWN0IG52bWV0X3JlcSAqcmVxKVxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtMTM1My17XG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYzoxMzU0Olx0aWYgKHJlcS1cdTAwM2VwMnBfZGV2KSB7XG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYzoxMzU1Olx0XHRwY2lfcDJwbWVtX2ZyZWVfc2dsKHJlcS1cdTAwM2VwMnBfZGV2LCByZXEtXHUwMDNlc2cpO1xuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtMTM1Ni1cdFx0aWYgKHJlcS1cdTAwM2VtZXRhZGF0YV9zZylcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jOjEzNTc6XHRcdFx0cGNpX3AycG1lbV9mcmVlX3NnbChyZXEtXHUwMDNlcDJwX2RldiwgcmVxLVx1MDAzZW1ldGFkYXRhX3NnKTtcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jOjEzNTg6XHRcdHJlcS1cdTAwM2VwMnBfZGV2ID0gTlVMTDtcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jLTEzNTktXHR9IGVsc2Uge1xuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jPTE1MzI9Ym9vbCBudm1ldF9ob3N0X2FsbG93ZWQoc3RydWN0IG52bWV0X3N1YnN5cyAqc3Vic3lzLCBjb25zdCBjaGFyICpob3N0bnFuKVxuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jLTE1NTEtXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYzoxNTUyOnN0YXRpYyB2b2lkIG52bWV0X3NldHVwX3AycF9uc19tYXAoc3RydWN0IG52bWV0X2N0cmwgKmN0cmwsXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYzoxNTUzOlx0XHRzdHJ1Y3QgZGV2aWNlICpwMnBfY2xpZW50KVxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtMTU1NC17XG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtMTU1OS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jOjE1NjA6XHRpZiAoIXAycF9jbGllbnQpXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYy0xNTYxLVx0XHRyZXR1cm47XG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYy0xNTYyLVxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmM6MTU2MzpcdGN0cmwtXHUwMDNlcDJwX2NsaWVudCA9IGdldF9kZXZpY2UocDJwX2NsaWVudCk7XG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYy0xNTY0LVxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtMTU2NS1cdG52bWV0X2Zvcl9lYWNoX2VuYWJsZWRfbnMoXHUwMDI2Y3RybC1cdTAwM2VzdWJzeXMtXHUwMDNlbmFtZXNwYWNlcywgaWR4LCBucylcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jOjE1NjY6XHRcdG52bWV0X3AycG1lbV9uc19hZGRfcDJwKGN0cmwsIG5zKTtcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jLTE1NjctfVxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtMTU2OC1cbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jOjE1Njk6c3RhdGljIHZvaWQgbnZtZXRfcmVsZWFzZV9wMnBfbnNfbWFwKHN0cnVjdCBudm1ldF9jdHJsICpjdHJsKVxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtMTU3MC17XG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtMTU3NS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jOjE1NzY6XHRyYWRpeF90cmVlX2Zvcl9lYWNoX3Nsb3Qoc2xvdCwgXHUwMDI2Y3RybC1cdTAwM2VwMnBfbnNfbWFwLCBcdTAwMjZpdGVyLCAwKVxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtMTU3Ny1cdFx0cGNpX2Rldl9wdXQocmFkaXhfdHJlZV9kZXJlZl9zbG90KHNsb3QpKTtcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jLTE1NzgtXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYzoxNTc5Olx0cHV0X2RldmljZShjdHJsLVx1MDAzZXAycF9jbGllbnQpO1xuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtMTU4MC19XG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmM9MTU5MT1zdHJ1Y3QgbnZtZXRfY3RybCAqbnZtZXRfYWxsb2NfY3RybChzdHJ1Y3QgbnZtZXRfYWxsb2NfY3RybF9hcmdzICphcmdzKVxuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jLTE2MzctXHRJTklUX0xJU1RfSEVBRChcdTAwMjZjdHJsLVx1MDAzZWFzeW5jX2V2ZW50cyk7XG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYzoxNjM4Olx0SU5JVF9SQURJWF9UUkVFKFx1MDAyNmN0cmwtXHUwMDNlcDJwX25zX21hcCwgR0ZQX0tFUk5FTCk7XG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYy0xNjM5LVx0SU5JVF9XT1JLKFx1MDAyNmN0cmwtXHUwMDNlZmF0YWxfZXJyX3dvcmssIG52bWV0X2ZhdGFsX2Vycm9yX2hhbmRsZXIpO1xuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jLTE2OTEtXHRsaXN0X2FkZF90YWlsKFx1MDAyNmN0cmwtXHUwMDNlc3Vic3lzX2VudHJ5LCBcdTAwMjZzdWJzeXMtXHUwMDNlY3RybHMpO1xuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmM6MTY5MjpcdG52bWV0X3NldHVwX3AycF9uc19tYXAoY3RybCwgYXJncy1cdTAwM2VwMnBfY2xpZW50KTtcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jLTE2OTMtXHRudm1ldF9kZWJ1Z2ZzX2N0cmxfc2V0dXAoY3RybCk7XG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmM9MTc0MT1zdGF0aWMgdm9pZCBudm1ldF9jdHJsX2ZyZWUoc3RydWN0IGtyZWYgKnJlZilcbi0tXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYy0xNzQ3LVx0bnZtZXRfY3RybF9kZXN0cm95X3ByKGN0cmwpO1xuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmM6MTc0ODpcdG52bWV0X3JlbGVhc2VfcDJwX25zX21hcChjdHJsKTtcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jLTE3NDktXHRsaXN0X2RlbChcdTAwMjZjdHJsLVx1MDAzZXN1YnN5c19lbnRyeSk7XG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC9mYWJyaWNzLWNtZC5jPTI2Nz1zdGF0aWMgdm9pZCBudm1ldF9leGVjdXRlX2FkbWluX2Nvbm5lY3Qoc3RydWN0IG52bWV0X3JlcSAqcmVxKVxuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvZmFicmljcy1jbWQuYy0yNzUtXHRcdC5vcHMgPSByZXEtXHUwMDNlb3BzLFxuZHJpdmVycy9udm1lL3RhcmdldC9mYWJyaWNzLWNtZC5jOjI3NjpcdFx0LnAycF9jbGllbnQgPSByZXEtXHUwMDNlcDJwX2NsaWVudCxcbmRyaXZlcnMvbnZtZS90YXJnZXQvZmFicmljcy1jbWQuYy0yNzctXHRcdC5rYXRvID0gbGUzMl90b19jcHUoYy1cdTAwM2VrYXRvKSxcbi0tXG5kcml2ZXJzL252bWUvdGFyZ2V0L2lvLWNtZC1iZGV2LmM9MjUzPXN0YXRpYyB2b2lkIG52bWV0X2JkZXZfZXhlY3V0ZV9ydyhzdHJ1Y3QgbnZtZXRfcmVxICpyZXEpXG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC9pby1jbWQtYmRldi5jLTI4Ni1cbmRyaXZlcnMvbnZtZS90YXJnZXQvaW8tY21kLWJkZXYuYzoyODc6XHRpZiAoaXNfcGNpX3AycGRtYV9wYWdlKHNnX3BhZ2UocmVxLVx1MDAzZXNnKSkpXG5kcml2ZXJzL252bWUvdGFyZ2V0L2lvLWNtZC1iZGV2LmMtMjg4LVx0XHRvcGYgfD0gUkVRX05PTUVSR0U7XG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC9udm1ldC5oPTEwMD1zdHJ1Y3QgbnZtZXRfbnMge1xuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvbnZtZXQuaC0xMjMtXG5kcml2ZXJzL252bWUvdGFyZ2V0L252bWV0Lmg6MTI0Olx0c3RydWN0IHBjaV9kZXZcdFx0KnAycF9kZXY7XG5kcml2ZXJzL252bWUvdGFyZ2V0L252bWV0Lmg6MTI1Olx0aW50XHRcdFx0dXNlX3AycG1lbTtcbmRyaXZlcnMvbnZtZS90YXJnZXQvbnZtZXQuaC0xMjYtXHRpbnRcdFx0XHRwaV90eXBlO1xuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvbnZtZXQuaD0yNTI9c3RydWN0IG52bWV0X2N0cmwge1xuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvbnZtZXQuaC0yOTAtXG5kcml2ZXJzL252bWUvdGFyZ2V0L252bWV0Lmg6MjkxOlx0c3RydWN0IGRldmljZVx0XHQqcDJwX2NsaWVudDtcbmRyaXZlcnMvbnZtZS90YXJnZXQvbnZtZXQuaDoyOTI6XHRzdHJ1Y3QgcmFkaXhfdHJlZV9yb290XHRwMnBfbnNfbWFwO1xuZHJpdmVycy9udm1lL3RhcmdldC9udm1ldC5oLTI5My0jaWZkZWYgQ09ORklHX05WTUVfVEFSR0VUX0RFQlVHRlNcbi0tXG5kcml2ZXJzL252bWUvdGFyZ2V0L252bWV0Lmg9NDQ3PXN0cnVjdCBudm1ldF9yZXEge1xuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvbnZtZXQuaC00OTItXG5kcml2ZXJzL252bWUvdGFyZ2V0L252bWV0Lmg6NDkzOlx0c3RydWN0IHBjaV9kZXZcdFx0KnAycF9kZXY7XG5kcml2ZXJzL252bWUvdGFyZ2V0L252bWV0Lmg6NDk0Olx0c3RydWN0IGRldmljZVx0XHQqcDJwX2NsaWVudDtcbmRyaXZlcnMvbnZtZS90YXJnZXQvbnZtZXQuaC00OTUtXHR1MTZcdFx0XHRlcnJvcl9sb2M7XG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC9udm1ldC5oPTYwNT1zdHJ1Y3QgbnZtZXRfYWxsb2NfY3RybF9hcmdzIHtcbi0tXG5kcml2ZXJzL252bWUvdGFyZ2V0L252bWV0LmgtNjExLVx0Y29uc3Qgc3RydWN0IG52bWV0X2ZhYnJpY3Nfb3BzICpvcHM7XG5kcml2ZXJzL252bWUvdGFyZ2V0L252bWV0Lmg6NjEyOlx0c3RydWN0IGRldmljZVx0XHQqcDJwX2NsaWVudDtcbmRyaXZlcnMvbnZtZS90YXJnZXQvbnZtZXQuaC02MTMtXHR1MzJcdFx0XHRrYXRvO1xuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvcmRtYS5jPTQwMD1zdGF0aWMgaW50IG52bWV0X3JkbWFfYWxsb2NfcnNwKHN0cnVjdCBudm1ldF9yZG1hX2RldmljZSAqbmRldixcbi0tXG5kcml2ZXJzL252bWUvdGFyZ2V0L3JkbWEuYy00MTItXG5kcml2ZXJzL252bWUvdGFyZ2V0L3JkbWEuYzo0MTM6XHRpZiAoaWJfZG1hX3BjaV9wMnBfZG1hX3N1cHBvcnRlZChuZGV2LVx1MDAzZWRldmljZSkpXG5kcml2ZXJzL252bWUvdGFyZ2V0L3JkbWEuYzo0MTQ6XHRcdHItXHUwMDNlcmVxLnAycF9jbGllbnQgPSBcdTAwMjZuZGV2LVx1MDAzZWRldmljZS1cdTAwM2VkZXY7XG5kcml2ZXJzL252bWUvdGFyZ2V0L3JkbWEuYy00MTUtXHRyLVx1MDAzZXNlbmRfc2dlLmxlbmd0aCA9IHNpemVvZigqci1cdTAwM2VyZXEuY3FlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMjE6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkxMzYKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiA1NjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUmVhY2hpbmcgdGhlIFRhcmdldDogQSBGdXp6aW5nIFN0cmF0ZWd5KioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gZGlnZ2luZyBpbnRvIHRoaXMsIGFuZCBpdCBsb29rcyBsaWtlIGBkcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuY2AgaGFzIFAyUCBzdXBwb3J0IGJ1aWx0IGluLiAgVGhhdCYjMzk7cyBrZXkuICBJdCB1c2VzIGBwY2lfcDJwbWVtX2FsbG9jX3NnbGAsIHdoaWNoIGlzIHByZWNpc2VseSB3aGF0IHdlIHdhbnQsIGFuZCBpbXBvcnRhbnRseSwgaXQmIzM5O3MgY29udHJvbGxhYmxlIHZpYSBjb25maWdmcyB1c2luZyB0aGUgYHAycG1lbWAgb3B0aW9uLiBCaW5nby4KCk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBpZiB3ZSBzZXQgdXAgYW4gTlZNZSB0YXJnZXQgdXNpbmcgYW4gTUQgYXJyYXkgYXMgYSBiYWNrZW5kIOKAkyBhIGBudm1ldF9uc2AgYmFja2VkIGJ5IGEgYmxvY2sgZGV2aWNlIHdoaWNoIGl0c2VsZiBpcyBhbiBNRCBhcnJheSDigJMgYW5kIHRoZW4gZW5hYmxlIGBwMnBtZW1gIG9uIHRoYXQgbmFtZXNwYWNlLi4uIGJvb20uIFRoZSBOVk1lIHRhcmdldCAqc2hvdWxkKiBzdGFydCBhbGxvY2F0aW5nIFAyUCBtZW1vcnkgYW5kIHRoZW4gaXNzdWluZyBJL08gZGlyZWN0bHkgdG8gdGhlIE1EIGFycmF5LCB1c2luZyB0aG9zZSBwYWdlcy4gVGhhdCB0cmlnZ2VycyB0aGUgTUQgUkFJRCBjb2RlIHdlIGFyZSBpbnRlcmVzdGVkIGluLiBUaGlzIGlzIGRlZmluaXRlbHkgYSBzb2xpZCBhdHRhY2sgc3VyZmFjZS4KCkFuZCBoZXJlJiMzOTtzIHRoZSBraWNrZXI6IHRoaXMgaXMgYWxsIGFjaGlldmFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCB3aXRoIFFFTVUuICBXZSBjYW4gcHJvdmlzaW9uIGEgdmlydHVhbCBOVk1lIGRldmljZSB3aXRoIGEgQ01CIChDb250cm9sbGVyIE1lbW9yeSBCdWZmZXIpIGFjdGluZyBhcyBhIFAyUCBtZW1vcnkgcHJvdmlkZXIuIEFuZCB5ZXMsIFFFTVUmIzM5O3MgTlZNZSBkZXZpY2UgKmRvZXMqIHN1cHBvcnQgQ01CLCB0aGFua3MgdG8gdGhlIGBjbWJfc2l6ZV9tYmAgcGFyYW1ldGVyLgoKTm93LCBkb2VzIHN5emthbGxlciBwbGF5IG5pY2VseT8gIFllcyEgSXQgaGFzIGRlc2NyaXB0aW9ucyBmb3IgTlZNZSB0YXJnZXQgY29uZmlnZnMsIHNvIHRoYXQmIzM5O3MgY292ZXJlZC4gQWxzbywgaXQgaGFzIGRlc2NyaXB0aW9ucyBmb3IgTUQgaW9jdGxzLCBzbyB3ZSBjYW4gZGVmaW5lIHRoZSBNRCBhcnJheXMuICBUaGlzIGlzIGFsbCBkZWZpbml0ZWx5IHJlYWNoYWJsZSBhbmQgcmlwZSBmb3IgZnV6emluZy4KCk1vdmluZyBvbiwgSSBuZWVkIHRvIGNoZWNrIG91dCB0aGUgTlZNZSBSRE1BIG1vZGlmaWNhdGlvbnMgaW4gYGRyaXZlcnMvbnZtZS9ob3N0L3JkbWEuY2AuIEl0IGxvb2tzIGxpa2UgdGhlIHBhdGNoIGNoYW5nZXMgYG52bWVfcmRtYV9kbWFfbWFwX3JlcWAgdG8gdXNlIGBpYl9kbWFfbWFwX3NndGFibGVfYXR0cnNgIGluc3RlYWQgb2YgdGhlIG9sZCBgaWJfZG1hX21hcF9zZ2AuICBXZSYjMzk7cmUgbWFwcGluZyB0aGUgc2NhdHRlcmxpc3QuCgpBbHNvLCBpbiBgbnZtZV9yZG1hX3F1ZXVlX3JxYCwgaXQgaGFuZGxlcyBgLUVSRU1PVEVJT2AgYnkgcmV0dXJuaW5nIGBCTEtfU1RTX1AyUERNQWAuIFRoaXMgaXMgYWxzbyBhIHZhbGlkIHBhdGh3YXkgaWYgd2UmIzM5O3JlIHVzaW5nIE5WTWUgb3ZlciBSRE1BLCB3aGljaCBzeXprYWxsZXIgc3VwcG9ydHMgd2l0aCBpdHMgYHNpd2Agb3IgYHJ4ZWAgc29mdHdhcmUgUkRNQSBkcml2ZXJzLgoKTm93IEkmIzM5O20gdGhpbmtpbmcsIGRvZXMgc29mdHdhcmUgUkRNQSBzdXBwb3J0IFAyUERNQT8gIGBpYl9kbWFfcGNpX3AycF9kbWFfc3VwcG9ydGVkYCBpcyBjaGVja2VkIGluIGBudm1ldF9yZG1hX2FsbG9jX3JzcGAsIGJ1dCB0aGUgY29kZSBpbiBgbnZtZV9yZG1hX2RtYV9tYXBfcmVxYCBzZWVtcyB0byBleGVjdXRlIGZvciAqYWxsKiBOVk1lIFJETUEgcmVxdWVzdHMsIG5vdCBqdXN0IFAyUERNQSBvbmVzISAgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBsYXN0IHBvaW50Li4uIEkmIzM5O2xsIHZlcmlmeSB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAyMTozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpYl9kbWFfbWFwX3NndGFibGVfYXR0cnMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL252bWUvaG9zdC9yZG1hLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9udm1lL2hvc3QvcmRtYS5jPTE0Njg9c3RhdGljIGludCBudm1lX3JkbWFfZG1hX21hcF9yZXEoc3RydWN0IGliX2RldmljZSAqaWJkZXYsIHN0cnVjdCByZXF1ZXN0ICpycSxcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9yZG1hLmMtMTQ4Ny1cdH07XG5kcml2ZXJzL252bWUvaG9zdC9yZG1hLmM6MTQ4ODpcdHJldCA9IGliX2RtYV9tYXBfc2d0YWJsZV9hdHRycyhpYmRldiwgXHUwMDI2c2d0LCBycV9kbWFfZGlyKHJxKSwgMCk7XG5kcml2ZXJzL252bWUvaG9zdC9yZG1hLmMtMTQ4OS1cdGlmICh1bmxpa2VseShyZXQpKVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L3JkbWEuYy0xNTEwLVx0XHR9O1xuZHJpdmVycy9udm1lL2hvc3QvcmRtYS5jOjE1MTE6XHRcdHJldCA9IGliX2RtYV9tYXBfc2d0YWJsZV9hdHRycyhpYmRldiwgXHUwMDI2c2d0LCBycV9kbWFfZGlyKHJxKSwgMCk7XG5kcml2ZXJzL252bWUvaG9zdC9yZG1hLmMtMTUxMi1cdFx0aWYgKHVubGlrZWx5KHJldCkpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDIxOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNjA4CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogNDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTlZNZSBSRE1BIGFuZCBNRCBSQUlEIE1vZGlmaWNhdGlvbnMqKgoKT2theSwgc28gbG9va2luZyBhdCB0aGlzIHBhdGNoLCB0aGUgY29yZSBjaGFuZ2UgZm9yIE5WTWUgUkRNQSwgc3BlY2lmaWNhbGx5IHRoZSBzd2l0Y2ggaW4gYG52bWVfcmRtYV9kbWFfbWFwX3JlcWAgdG8gYGliX2RtYV9tYXBfc2d0YWJsZV9hdHRyc2AsIHNlZW1zIGxpa2UgYSBzb2xpZCBmdW5jdGlvbmFsIGNoYW5nZSBhZmZlY3RpbmcgYWxsIE5WTWUgUkRNQSBJL08uIFRoZSBOVk1lIFJETUEgY29tcG9uZW50IGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGFuZCB0ZXN0YWJsZSwgd2hpY2ggaXMgZ29vZC4gV2UgZG9uJiMzOTt0IG5lY2Vzc2FyaWx5IG5lZWQgUDJQRE1BIHRvIHZhbGlkYXRlIHRoZSBmdW5kYW1lbnRhbCBSRE1BIHBhcnQuCgpOb3csIHRoZSBtb3JlIGludGVyZXN0aW5nIHBhcnQgaXMgdGhlIG1vZGlmaWNhdGlvbnMgdG8gdGhlIE1EIFJBSUQgY29kZS4gSXQmIzM5O3MgdG91Y2hpbmcgYSBudW1iZXIgb2YgZnVuY3Rpb25zLCBwcmltYXJpbHkgYXJvdW5kIGhvdyBQMlBETUEgYmlvcyBhcmUgaGFuZGxlZDogYG1kX3N1Ym1pdF9iaW9gIG5vdyBzZXRzIGBSRVFfTk9NRVJHRWAsIGByYWlkMV93cml0ZV9lcnJvcmAgaXMgbW9kaWZpZWQgdG8gYXZvaWQgZGlzayBmYWlsdXJlcyB1bmRlciBzcGVjaWZpYyBQMlBETUEgY29uZGl0aW9ucywgYW5kIGNoYW5nZXMgZXh0ZW5kIHRvIGByYWlkMV9lbmRfd3JpdGVfcmVxdWVzdGAsIGByYWlkMV93cml0ZV9yZXF1ZXN0YCwgYGhhbmRsZV93cml0ZV9maW5pc2hlZGAsIGFuZCBgaGFuZGxlX3JlYWRfZXJyb3JgIHRvIGhhbmRsZSBQMlBETUEgZXJyb3JzLCBsaWtlIGJsb2NraW5nIHRoZSBiaW8gaWYgd2UgZ2V0IGEgYHAycGRtYV9lcnJvcmAuIFRoZXJlIGFyZSBzaW1pbGFyIGNoYW5nZXMgZm9yIFJBSUQxMCwgdG9vLgoKVG8gdGVzdCB0aGVzZSBNRCBSQUlEIG1vZGlmaWNhdGlvbnMgdGhvcm91Z2hseSwgdGhvdWdoLCB3ZSBhYnNvbHV0ZWx5IG5lZWQgdG8gZ2VuZXJhdGUgUDJQRE1BIGJpb3MuIENhbiBTeXprYWxsZXIgZG8gdGhhdD8gQWgsIHllcyEgSWYgU3l6a2FsbGVyIGNvbmZpZ3VyZXMgYW4gTlZNZSB0YXJnZXQgd2l0aCBgcDJwbWVtYCBhbmQgcG9pbnRzIGl0IHRvIGFuIE1EIGFycmF5LCB0aGVuIGFsbCBJL08gdG8gdGhhdCBOVk1lIHRhcmdldCBzaG91bGQgZ2VuZXJhdGUgdGhlIGFwcHJvcHJpYXRlIFAyUERNQSBiaW9zIHRvIHRoZSBNRCBhcnJheSwgd2hpY2ggaXMgYSBuaWNlIHNwZWNpZmljIHdheSB0byB2YWxpZGF0ZSB0aGVzZS4gVGhpcyBpcyBhIHZlcnkgc3BlY2lmaWMgc2V0dXAsIGJ1dCBmdW5jdGlvbmFsbHkgcmVhY2hhYmxlLCB3aGljaCBpcyBrZXkuCgpFdmVuIGlmIHN5emthbGxlciBkb2VzbiYjMzk7dCBtYWtlIGl0ICplYXN5KiB0byBnZW5lcmF0ZSBQMlBETUEgYmlvcyBkaXJlY3RseSwgSSBzaG91bGQgcmVtZW1iZXIgdGhhdCB0aGUgTUQgUkFJRCBjaGFuZ2VzIGFyZW4mIzM5O3QgKmV4Y2x1c2l2ZWx5KiBQMlBETUEtZm9jdXNlZC4gU29tZSBvZiB0aGUgY2hhbmdlcywgbGlrZSB0aGUgcmVmYWN0b3Jpbmcgb2YgYHJhaWQxX3dyaXRlX2Vycm9yYCBhcyBhIGhlbHBlciBmdW5jdGlvbiwgYW5kIHRoZSBgQ29sbGlzaW9uQ2hlY2tgIGNoYW5nZSBpbXBhY3QgKm5vcm1hbCogYmlvcywgdG9vLiBXYWl0LCB3aGF0IHdhcyB0aGF0IGBDb2xsaXNpb25DaGVja2AgY2hhbmdlIGFsbCBhYm91dD8gSSBzaG91bGQgcHJvYmFibHkgZ2l2ZSB0aGF0IGFub3RoZXIgbG9vay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMjE6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q29sbGlzaW9uQ2hlY2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL21kLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL21kL21kLmM9MTU0PXN0YXRpYyB2b2lkIHJkZXZfdW5pbml0X3NlcmlhbChzdHJ1Y3QgbWRfcmRldiAqcmRldilcbmRyaXZlcnMvbWQvbWQuYy0xNTUte1xuZHJpdmVycy9tZC9tZC5jOjE1NjpcdGlmICghdGVzdF9hbmRfY2xlYXJfYml0KENvbGxpc2lvbkNoZWNrLCBcdTAwMjZyZGV2LVx1MDAzZWZsYWdzKSlcbmRyaXZlcnMvbWQvbWQuYy0xNTctXHRcdHJldHVybjtcbi0tXG5kcml2ZXJzL21kL21kLmM9MTcxPXN0YXRpYyBpbnQgcmRldl9pbml0X3NlcmlhbChzdHJ1Y3QgbWRfcmRldiAqcmRldilcbi0tXG5kcml2ZXJzL21kL21kLmMtMTc2LVxuZHJpdmVycy9tZC9tZC5jOjE3NzpcdGlmICh0ZXN0X2JpdChDb2xsaXNpb25DaGVjaywgXHUwMDI2cmRldi1cdTAwM2VmbGFncykpXG5kcml2ZXJzL21kL21kLmMtMTc4LVx0XHRyZXR1cm4gMDtcbi0tXG5kcml2ZXJzL21kL21kLmMtMTkyLVx0cmRldi1cdTAwM2VzZXJpYWwgPSBzZXJpYWw7XG5kcml2ZXJzL21kL21kLmM6MTkzOlx0c2V0X2JpdChDb2xsaXNpb25DaGVjaywgXHUwMDI2cmRldi1cdTAwM2VmbGFncyk7XG5kcml2ZXJzL21kL21kLmMtMTk0LVxuLS1cbmRyaXZlcnMvbWQvbWQuYz0yMzM9dm9pZCBtZGRldl9jcmVhdGVfc2VyaWFsX3Bvb2woc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kX3JkZXYgKnJkZXYpXG4tLVxuZHJpdmVycy9tZC9tZC5jLTIzNy1cdGlmIChyZGV2IFx1MDAyNlx1MDAyNiAhcmRldl9uZWVkX3NlcmlhbChyZGV2KSBcdTAwMjZcdTAwMjZcbmRyaXZlcnMvbWQvbWQuYzoyMzg6XHQgICAgIXRlc3RfYml0KENvbGxpc2lvbkNoZWNrLCBcdTAwMjZyZGV2LVx1MDAzZWZsYWdzKSlcbmRyaXZlcnMvbWQvbWQuYy0yMzktXHRcdHJldHVybjtcbi0tXG5kcml2ZXJzL21kL21kLmMtMjY0LSAqIEZyZWUgcmVzb3VyY2UgZnJvbSByZGV2KHMpLCBhbmQgZGVzdHJveSBzZXJpYWxfaW5mb19wb29sIHVuZGVyIGNvbmRpdGlvbnM6XG5kcml2ZXJzL21kL21kLmM6MjY1OiAqIDEuIHJkZXYgaXMgdGhlIGxhc3QgZGV2aWNlIGZsYWdlZCB3aXRoIENvbGxpc2lvbkNoZWNrLlxuZHJpdmVycy9tZC9tZC5jLTI2Ni0gKiAyLiB3aGVuIGJpdG1hcCBpcyBkZXN0cm95ZWQgd2hpbGUgcG9saWN5IGlzIG5vdCBlbmFibGVkLlxuLS1cbmRyaXZlcnMvbWQvbWQuYz0yNjk9dm9pZCBtZGRldl9kZXN0cm95X3NlcmlhbF9wb29sKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZF9yZGV2ICpyZGV2KVxuZHJpdmVycy9tZC9tZC5jLTI3MC17XG5kcml2ZXJzL21kL21kLmM6MjcxOlx0aWYgKHJkZXYgXHUwMDI2XHUwMDI2ICF0ZXN0X2JpdChDb2xsaXNpb25DaGVjaywgXHUwMDI2cmRldi1cdTAwM2VmbGFncykpXG5kcml2ZXJzL21kL21kLmMtMjcyLVx0XHRyZXR1cm47XG4tLVxuZHJpdmVycy9tZC9tZC5jLTI4Ni1cdFx0XHR9IGVsc2UgaWYgKHRlbXAgIT0gcmRldiBcdTAwMjZcdTAwMjZcbmRyaXZlcnMvbWQvbWQuYzoyODc6XHRcdFx0XHQgICB0ZXN0X2JpdChDb2xsaXNpb25DaGVjaywgXHUwMDI2dGVtcC1cdTAwM2VmbGFncykpXG5kcml2ZXJzL21kL21kLmMtMjg4LVx0XHRcdFx0bnVtJiM0MzsmIzQzOztcbi0tXG5kcml2ZXJzL21kL21kLmg9MjQyPWVudW0gZmxhZ19iaXRzIHtcbi0tXG5kcml2ZXJzL21kL21kLmgtMzA2LVx0XHRcdFx0ICovXG5kcml2ZXJzL21kL21kLmg6MzA3Olx0Q29sbGlzaW9uQ2hlY2ssXHRcdC8qXG5kcml2ZXJzL21kL21kLmgtMzA4LVx0XHRcdFx0ICogY2hlY2sgaWYgdGhlcmUgaXMgY29sbGlzaW9uIGJldHdlZW4gcmFpZDFcbi0tXG5kcml2ZXJzL21kL3JhaWQxLmM9NDY5PXN0YXRpYyB2b2lkIHJhaWQxX2VuZF93cml0ZV9yZXF1ZXN0KHN0cnVjdCBiaW8gKmJpbylcbi0tXG5kcml2ZXJzL21kL3JhaWQxLmMtNTMzLVx0aWYgKGJlaGluZCkge1xuZHJpdmVycy9tZC9yYWlkMS5jOjUzNDpcdFx0aWYgKHRlc3RfYml0KENvbGxpc2lvbkNoZWNrLCBcdTAwMjZyZGV2LVx1MDAzZWZsYWdzKSlcbmRyaXZlcnMvbWQvcmFpZDEuYy01MzUtXHRcdFx0cmVtb3ZlX3NlcmlhbChyZGV2LCBsbywgaGkpO1xuLS1cbmRyaXZlcnMvbWQvcmFpZDEuYy01NTctXHRcdH1cbmRyaXZlcnMvbWQvcmFpZDEuYzo1NTg6XHR9IGVsc2UgaWYgKHRlc3RfYml0KENvbGxpc2lvbkNoZWNrLCBcdTAwMjZyZGV2LVx1MDAzZWZsYWdzKSlcbmRyaXZlcnMvbWQvcmFpZDEuYy01NTktXHRcdHJlbW92ZV9zZXJpYWwocmRldiwgbG8sIGhpKTtcbi0tXG5kcml2ZXJzL21kL3JhaWQxLmM9MTUwNj1zdGF0aWMgYm9vbCByYWlkMV93cml0ZV9yZXF1ZXN0KHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBiaW8gKmJpbyxcbi0tXG5kcml2ZXJzL21kL3JhaWQxLmMtMTY2Ni1cdFx0XHRcdFx0ICAgICAgIEdGUF9OT0lPLCBcdTAwMjZtZGRldi1cdTAwM2ViaW9fc2V0KTtcbmRyaXZlcnMvbWQvcmFpZDEuYzoxNjY3Olx0XHRcdGlmICh0ZXN0X2JpdChDb2xsaXNpb25DaGVjaywgXHUwMDI2cmRldi1cdTAwM2VmbGFncykpXG5kcml2ZXJzL21kL3JhaWQxLmMtMTY2OC1cdFx0XHRcdHdhaXRfZm9yX3NlcmlhbGl6YXRpb24ocmRldiwgcjFfYmlvKTtcbi0tXG5kcml2ZXJzL21kL3JhaWQxLmMtMTY3NS1cdFx0XHQvKlxuZHJpdmVycy9tZC9yYWlkMS5jOjE2NzY6XHRcdFx0ICogQ29sbGlzaW9uQ2hlY2sgbWFya3MgZXZlcnkgcmRldiB3aXRoIGEgc2VyaWFsXG5kcml2ZXJzL21kL3JhaWQxLmMtMTY3Ny1cdFx0XHQgKiB0cmVlOyBvcmRlciBhZ2FpbnN0IGluLWZsaWdodCB3cml0ZS1iZWhpbmQgSS9PLlxuZHJpdmVycy9tZC9yYWlkMS5jLTE2NzgtXHRcdFx0ICovXG5kcml2ZXJzL21kL3JhaWQxLmM6MTY3OTpcdFx0XHRpZiAodGVzdF9iaXQoQ29sbGlzaW9uQ2hlY2ssIFx1MDAyNnJkZXYtXHUwMDNlZmxhZ3MpKVxuZHJpdmVycy9tZC9yYWlkMS5jLTE2ODAtXHRcdFx0XHR3YWl0X2Zvcl9zZXJpYWxpemF0aW9uKHJkZXYsIHIxX2Jpbyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDIxOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNzMwCgkJCQkJCQlvdXRwdXQ6IDUzCgkJCQkJCQl0aG91Z2h0czogOTA4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgVGFyZ2V0IFJlZmluZW1lbnQ6IEJsb2NrIExheWVyLCBNRCBSQUlELCBhbmQgTlZNZSBSRE1BIEludGVncmF0aW9uKioKCk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCwgaXQgc2VlbXMgbGlrZSBhIGJ1bmNoIG9mIGludGVyY29ubmVjdGVkIGNoYW5nZXMuIEZpcnN0LCBpdCBsb29rcyBsaWtlIGBDb2xsaXNpb25DaGVja2AgaXMgbm93IHRoZSBzZXJpYWxpemF0aW9uIGZsYWcgYmVpbmcgdXNlZCBpbiBgcmFpZDFfZW5kX3dyaXRlX3JlcXVlc3RgIGFuZCBgcmFpZDFfd3JpdGVfcmVxdWVzdGAsIHJlcGxhY2luZyB0aGUgcHJldmlvdXMgYE1EX1NFUklBTElaRV9QT0xJQ1lgIG9uIGBtZGRldmAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBhZmZlY3RpbmcgdGhlIFJBSUQxIHdyaXRlIHBhdGgsIGV2ZW4gaW5kZXBlbmRlbnQgb2YgUDJQRE1BLgoKTGV0IG1lIGJyZWFrIGRvd24gd2hhdCB0aGlzIHBhdGNoIGlzIGRvaW5nIG1vcmUgYnJvYWRseToKCjEuICAqKkJsb2NrIExheWVyIFVwZGF0ZXM6KiogVGhlIHBhdGNoIGludHJvZHVjZXMgYEJMS19TVFNfUDJQRE1BYCBzdGF0dXMgY29kZS4gYGJsay1tcS1kbWEuY2AgaXMgdXBkYXRlZCB0byByZXR1cm4gdGhpcyBuZXcgY29kZSBpbiB0aGUgYXBwcm9wcmlhdGUgc2l0dWF0aW9ucywgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gUENJIFAyUERNQSBtYXBwaW5nIGlzc3Vlcy4KMi4gICoqTUQgUkFJRCBJbnRlZ3JhdGlvbjoqKiBTZXZlcmFsIE1EIFJBSUQgZmlsZXMgKGBtZC5jYCwgYHJhaWQxLmNgLCBgcmFpZDEwLmNgKSBzZWUgY2hhbmdlcy4gVGhlcmUmIzM5O3MgYSBuZXcgYG1kX2Jpb19pc19wMnBkbWFgIGNoZWNrIGFuZCBgUkVRX05PTUVSR0VgIGlzIHNldCBmb3IgUDJQRE1BIGJpb3MuIE1vcmUgaW1wb3J0YW50bHksIGVycm9yIGhhbmRsaW5nIGlzIGFsdGVyZWQgdG8gaGFuZGxlIHRoZSBuZXcgYEJMS19TVFNfUDJQRE1BYCBzdGF0dXMsIGhhbmRsaW5nIGJhZGJsb2Nrcy4gQW5kIHRoZSBzZXJpYWxpemF0aW9uIGNoZWNrIGhhcyBjaGFuZ2VkIGFzIG1lbnRpb25lZCBhYm92ZS4KMy4gICoqTlZNZSBSRE1BIERNQSBNYXBwaW5nOioqIGByZG1hLmNgIHVzZXMgYSBkaWZmZXJlbnQgRE1BIG1hcHBpbmcgQVBJIChgaWJfZG1hX21hcF9zZ3RhYmxlX2F0dHJzYCBpbnN0ZWFkIG9mIGBpYl9kbWFfbWFwX3NnYCkgYW5kIHJldHVybnMgYEJMS19TVFNfUDJQRE1BYCBpbiB0aGUgY2FzZSBvZiBgLUVSRU1PVEVJT2AuCgpHaXZlbiB0aGVzZSBjaGFuZ2VzLCB0aGlzIGlzICpkZWZpbml0ZWx5KiB3b3J0aCBmdXp6aW5nLiBUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBibG9jayBsYXllciBlcnJvciBjb2RlcywgTUQgUkFJRCBlcnJvciBoYW5kbGluZyBhbmQgc2VyaWFsaXphdGlvbiBsb2dpYywgYW5kIE5WTWUgUkRNQSBETUEgbWFwcGluZywgc28gaXQgdG91Y2hlcyBjcml0aWNhbCBwYXRocy4KCk5vdywgbGV0JiMzOTtzIHJlZmluZSB0aGUgbGlzdCBvZiBzcGVjaWZpYyBzeW1ib2xzIHRvIGZvY3VzIG9uOgoKSSB0aGluayBgcmFpZDFfd3JpdGVfZXJyb3JgLCBgaGFuZGxlX3dyaXRlX2ZpbmlzaGVkYCwgYGhhbmRsZV9yZWFkX2Vycm9yYCBhbmQgYG5hcnJvd193cml0ZV9lcnJvcmAgKGluIHJhaWQxIGFuZCByYWlkMTApIGFyZSBnb29kLCBzaW5jZSB0aGV5IGRlYWwgd2l0aCB0aGUgZXJyb3IgcGF0aHMuIGBudm1lX3JkbWFfZG1hX21hcF9yZXFgIGFuZCBgbnZtZV9yZG1hX3F1ZXVlX3JxYCBhcmUgYWxzbyBpbXBvcnRhbnQgYmVjYXVzZSB0aGUgRE1BIG1hcHBpbmcgQVBJIHdhcyBtb2RpZmllZC4gYHJhaWQxX3dyaXRlX3JlcXVlc3RgIGlzIGEgaG90IHBhdGggYnV0IHNwZWNpZmljIHRvIFJBSUQxIGFuZCBJIHdpbGwgZHJvcCBpdCBmb3IgdGhlIG1vbWVudC4KClNvLCBoZXJlJiMzOTtzIG15IG5hcnJvd2VkLWRvd24gbGlzdDoKCiogICBgcmFpZDFfd3JpdGVfZXJyb3JgIChzdGF0aWMpCiogICBgaGFuZGxlX3dyaXRlX2ZpbmlzaGVkYCAocmFpZDEgYW5kIHJhaWQxMCkKKiAgIGBoYW5kbGVfcmVhZF9lcnJvcmAgKHJhaWQxIGFuZCByYWlkMTApCiogICBgbmFycm93X3dyaXRlX2Vycm9yYCAocmFpZDEgYW5kIHJhaWQxMCkKKiAgIGBudm1lX3JkbWFfZG1hX21hcF9yZXFgIChzdGF0aWMpCiogICBgbnZtZV9yZG1hX3F1ZXVlX3JxYAoKSSYjMzk7bGwgZG91YmxlLWNoZWNrIHRob3NlIG5hbWVzIHdpdGhpbiB0aGUgUkFJRDEgYW5kIFJBSUQxMCBkcml2ZXIgZmlsZXMgdG8gYmUgZXh0cmEgc3VyZSwgYnV0IEkgZmVlbCBnb29kIGFib3V0IHRoaXMgbGlzdCB0byBzdGFydC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMjE6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XihzdGF0aWMgKT8odm9pZHxpbnR8Ym9vbCkgKGhhbmRsZV93cml0ZV9maW5pc2hlZHxoYW5kbGVfcmVhZF9lcnJvcnxuYXJyb3dfd3JpdGVfZXJyb3IpJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9tZC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9tZC9yYWlkMS5jPTI0MzE9c3RhdGljIHZvaWQgZml4X3JlYWRfZXJyb3Ioc3RydWN0IHIxY29uZiAqY29uZiwgc3RydWN0IHIxYmlvICpyMV9iaW8pXG4tLVxuZHJpdmVycy9tZC9yYWlkMS5jLTI1MTUtXG5kcml2ZXJzL21kL3JhaWQxLmM6MjUxNjpzdGF0aWMgdm9pZCBuYXJyb3dfd3JpdGVfZXJyb3Ioc3RydWN0IHIxYmlvICpyMV9iaW8sIGludCBpKVxuZHJpdmVycy9tZC9yYWlkMS5jLTI1MTcte1xuLS1cbmRyaXZlcnMvbWQvcmFpZDEuYz0yNTkwPXN0YXRpYyB2b2lkIGhhbmRsZV9zeW5jX3dyaXRlX2ZpbmlzaGVkKHN0cnVjdCByMWNvbmYgKmNvbmYsIHN0cnVjdCByMWJpbyAqcjFfYmlvKVxuLS1cbmRyaXZlcnMvbWQvcmFpZDEuYy0yNjA5LVxuZHJpdmVycy9tZC9yYWlkMS5jOjI2MTA6c3RhdGljIHZvaWQgaGFuZGxlX3dyaXRlX2ZpbmlzaGVkKHN0cnVjdCByMWNvbmYgKmNvbmYsIHN0cnVjdCByMWJpbyAqcjFfYmlvKVxuZHJpdmVycy9tZC9yYWlkMS5jLTI2MTEte1xuLS1cbmRyaXZlcnMvbWQvcmFpZDEuYy0yNjU2LVxuZHJpdmVycy9tZC9yYWlkMS5jOjI2NTc6c3RhdGljIHZvaWQgaGFuZGxlX3JlYWRfZXJyb3Ioc3RydWN0IHIxY29uZiAqY29uZiwgc3RydWN0IHIxYmlvICpyMV9iaW8pXG5kcml2ZXJzL21kL3JhaWQxLmMtMjY1OC17XG4tLVxuZHJpdmVycy9tZC9yYWlkMTAuYz0yNjI2PXN0YXRpYyB2b2lkIGZpeF9yZWFkX2Vycm9yKHN0cnVjdCByMTBjb25mICpjb25mLCBzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgcjEwYmlvICpyMTBfYmlvKVxuLS1cbmRyaXZlcnMvbWQvcmFpZDEwLmMtMjc4MC1cbmRyaXZlcnMvbWQvcmFpZDEwLmM6Mjc4MTpzdGF0aWMgdm9pZCBuYXJyb3dfd3JpdGVfZXJyb3Ioc3RydWN0IHIxMGJpbyAqcjEwX2JpbywgaW50IGkpXG5kcml2ZXJzL21kL3JhaWQxMC5jLTI3ODIte1xuLS1cbmRyaXZlcnMvbWQvcmFpZDEwLmMtMjg0Ni1cbmRyaXZlcnMvbWQvcmFpZDEwLmM6Mjg0NzpzdGF0aWMgdm9pZCBoYW5kbGVfcmVhZF9lcnJvcihzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgcjEwYmlvICpyMTBfYmlvKVxuZHJpdmVycy9tZC9yYWlkMTAuYy0yODQ4LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMjE6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ4ODgKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZS4uLiBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBzb21ldGhpbmcmIzM5O3MgaW1tZWRpYXRlbHkgb2ZmLiBIYW5nIG9uIGEgc2Vjb25kLCB3aHkgYXJlIHRoZXkgdXNpbmcgYGhhbmRsZV93cml0ZV9jb21wbGV0ZWRgIGluIGByYWlkMTAuY2A/IE15IG1lbnRhbCBtb2RlbCBkZWZpbml0ZWx5IGhhcyBtZSBleHBlY3RpbmcgYGhhbmRsZV93cml0ZV9maW5pc2hlZGAgaW4gdGhhdCBjb250ZXh0LiBUaGF0IGZlZWxzIGxpa2UgYSBzdWJ0bGUgYnV0IHBvdGVudGlhbGx5IGNyaXRpY2FsIG1pc21hdGNoLCBlc3BlY2lhbGx5IHdpdGggUkFJRDEwJiMzOTtzIGNvbXBsZXhpdGllcy4gUmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhlIHBhdGNoIGhpc3RvcnkgZm9yIGByYWlkMTAuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB0aGlzIGNob2ljZSB3YXMgbWFkZS4gSXQmIzM5O3MgcG9zc2libGUgdGhlcmUmIzM5O3MgYSBnb29kIHJlYXNvbiB0aGF04oCZcyBub3QgaW1tZWRpYXRlbHkgYXBwYXJlbnQsIG9yIHdvcnNlLCBpdOKAmXMgYSBidWcuIEVpdGhlciB3YXksIHVuZGVyc3RhbmRpbmcgdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhpcyBpcyBjcnVjaWFsIGJlZm9yZSBJIGNhbiBzaWduIG9mZiBvbiB0aGlzLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGNoYW5nZSBsb2cgaGFzIHRvIHNheS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAyMTozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtoYW5kbGVfd3JpdGVfJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9tZC9yYWlkMTAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL21kL3JhaWQxMC5jPTI4NDc9c3RhdGljIHZvaWQgaGFuZGxlX3JlYWRfZXJyb3Ioc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IHIxMGJpbyAqcjEwX2Jpbylcbi0tXG5kcml2ZXJzL21kL3JhaWQxMC5jLTI4ODctXG5kcml2ZXJzL21kL3JhaWQxMC5jOjI4ODg6c3RhdGljIHZvaWQgaGFuZGxlX3dyaXRlX2NvbXBsZXRlZChzdHJ1Y3QgcjEwY29uZiAqY29uZiwgc3RydWN0IHIxMGJpbyAqcjEwX2JpbylcbmRyaXZlcnMvbWQvcmFpZDEwLmMtMjg4OS17XG4tLVxuZHJpdmVycy9tZC9yYWlkMTAuYz0yOTg1PXN0YXRpYyB2b2lkIHJhaWQxMGQoc3RydWN0IG1kX3RocmVhZCAqdGhyZWFkKVxuLS1cbmRyaXZlcnMvbWQvcmFpZDEwLmMtMzAzNy1cdFx0ICAgIHRlc3RfYml0KFIxMEJJT19Xcml0ZUVycm9yLCBcdTAwMjZyMTBfYmlvLVx1MDAzZXN0YXRlKSlcbmRyaXZlcnMvbWQvcmFpZDEwLmM6MzAzODpcdFx0XHRoYW5kbGVfd3JpdGVfY29tcGxldGVkKGNvbmYsIHIxMF9iaW8pO1xuZHJpdmVycy9tZC9yYWlkMTAuYy0zMDM5LVx0XHRlbHNlIGlmICh0ZXN0X2JpdChSMTBCSU9fSXNSZXNoYXBlLCBcdTAwMjZyMTBfYmlvLVx1MDAzZXN0YXRlKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMjE6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU0MTAKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAyMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ3VycmVudCBBc3Nlc3NtZW50IG9mIHRoZSBSQUlEMTAgV3JpdGUgQ29tcGxldGlvbiBIYW5kbGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIHplcm9pbmcgaW4gb24gYGhhbmRsZV93cml0ZV9jb21wbGV0ZWRgIHdpdGhpbiBgcmFpZDEwLmNgLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIGxvZ2ljIHJlc2lkZXMsIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdCBjb21wbGV0ZWx5LiBNeSBtYWluIGZvY3VzIGlzIG9uIHRoZSByZWxldmFudCBlcnJvciBoYW5kbGluZyBhbmQgY29tcGxldGlvbiBwYXRod2F5cy4KCkkmIzM5O3ZlIGlkZW50aWZpZWQgdGhlIGtleSBzeW1ib2xzIHRoYXQgSSBuZWVkIHRvIGtlZXAgaW4gbWluZCB0aHJvdWdob3V0IHRoZSBhbmFseXNpczogYHJhaWQxX3dyaXRlX2Vycm9yYCwgYG5hcnJvd193cml0ZV9lcnJvcmAsIGBoYW5kbGVfd3JpdGVfZmluaXNoZWRgLCBuYXR1cmFsbHkgYGhhbmRsZV93cml0ZV9jb21wbGV0ZWRgIGl0c2VsZiwgYGhhbmRsZV9yZWFkX2Vycm9yYCwgYW5kIGFsc28gdGhlIFJETUEgcmVsYXRlZCBmdW5jdGlvbnMgYG52bWVfcmRtYV9kbWFfbWFwX3JlcWAgYW5kIGBudm1lX3JkbWFfcXVldWVfcnFgLiBVbmRlcnN0YW5kaW5nIGhvdyB0aGVzZSBpbnRlcmFjdCB3aWxsIHByb3ZpZGUgYSBwaWN0dXJlIG9mIHRoZSBlcnJvciBoYW5kbGluZyBhbmQgUDJQRE1BIGludGVncmF0aW9uLgoKTmV4dCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIG5lY2Vzc2FyeSBidWlsZCBjb25maWd1cmF0aW9ucy4gQmFzZWQgb24gbXkgY3VycmVudCBrbm93bGVkZ2UsIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSB0aGVzZSBhY3RpdmF0ZWQ6IGBDT05GSUdfTURfUkFJRDFgLCBgQ09ORklHX01EX1JBSUQxMGAsIGBDT05GSUdfTlZNRV9SRE1BYCwgYW5kIGNydWNpYWxseSwgYENPTkZJR19QQ0lfUDJQRE1BYCBiZWNhdXNlIHRoYXQmIzM5O3Mgd2hhdCYjMzk7cyBkcml2aW5nIHRoaXMgUDJQRE1BIHN1cHBvcnQuIEkgc2hvdWxkIGFsc28gc2VlIGBDT05GSUdfTlZNRV9UQVJHRVRgIGFuZCBgQ09ORklHX05WTUVfVEFSR0VUX0NPTkZJR0ZTYCB3aGljaCBhbGxvdyB0aGUgTlZNZSB0YXJnZXQgdG8gYmUgc2V0IHVwIGFuZCBjb25maWd1cmVkIHdpdGggcDJwbWVtLiBJIHNob3VsZCByZWFsbHkgY29uZmlybSB0aGF0IGBDT05GSUdfUENJX1AyUERNQWAgaXMgYWN0dWFsbHkgdGhlIGNvcnJlY3QgbmFtZSBmb3IgdGhlIGZlYXR1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDIxOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBQQ0lfUDJQRE1BJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvcGNpL0tjb25maWc9MTk3PWNvbmZpZyBQQ0lFX1RQSFxuLS1cbmRyaXZlcnMvcGNpL0tjb25maWctMjA1LVxuZHJpdmVycy9wY2kvS2NvbmZpZzoyMDY6Y29uZmlnIFBDSV9QMlBETUFcbmRyaXZlcnMvcGNpL0tjb25maWctMjA3LVx0Ym9vbCBcJiMzNDtQQ0kgcGVlci10by1wZWVyIHRyYW5zZmVyIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMjE6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjYwODgKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqQ2hlY2tpbmcgdGhlIFBDSWUgSW50ZXJjb25uZWN0IGFuZCBOVk1lIFJETUEgQ29uZmlndXJhdGlvbioqCgpSaWdodCwgYFBDSV9QMlBETUFgLiBBZmZpcm1hdGl2ZSwgdGhhdCYjMzk7cyB3aGF0IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGguIE5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQgYXMgd2UgcHJvY2VlZC4gTm93LCBnaXZlbiB0aGUgZGlyZWN0aW9uIHdlIGFyZSBoZWFkZWQsIGxldCYjMzk7cyB2ZXJpZnkgdGhhdCB0aGUgYENPTkZJR19OVk1FX1JETUFgIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIHNldCBjb3JyZWN0bHkuIFdlIHNob3VsZCBjb25maXJtIHRoYXQgUmVtb3RlIERpcmVjdCBNZW1vcnkgQWNjZXNzIGlzIGVuYWJsZWQgZm9yIE5WTWUuIFRoYXQgc2V0dGluZyB3aWxsIGJlIGNyaXRpY2FsIGZvciBvdXIgb3ZlcmFsbCBwZXJmb3JtYW5jZSBwcm9maWxlLCBlc3BlY2lhbGx5IGdpdmVuIHRoZSBjb250ZXh0IG9mIFAyUERNQS4gQmVzdCB0byBkb3VibGUtY2hlY2sgbm93IGFuZCBhdm9pZCBhbnkgcG90ZW50aWFsIGhpY2N1cHMgZnVydGhlciBkb3duIHRoZSBsaW5lLiBJdCYjMzk7cyBlYXN5IGVub3VnaCB0byBjb25maXJtLCBhbmQgdml0YWwgdG8gY29uZmlybSBvdXIgYXJjaGl0ZWN0dXJlIGlzIGNvbmZpZ3VyZWQgY29ycmVjdGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAyMTozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTlZNRV9SRE1BJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbnZtZS9ob3N0L0tjb25maWc9NDc9Y29uZmlnIE5WTUVfRkFCUklDU1xuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L0tjb25maWctNTEtXG5kcml2ZXJzL252bWUvaG9zdC9LY29uZmlnOjUyOmNvbmZpZyBOVk1FX1JETUFcbmRyaXZlcnMvbnZtZS9ob3N0L0tjb25maWctNTMtXHR0cmlzdGF0ZSBcJiMzNDtOVk0gRXhwcmVzcyBvdmVyIEZhYnJpY3MgUkRNQSBob3N0IGRyaXZlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAyMTozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjM5NwoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqS2VybmVsIENvbmZpZ3VyYXRpb24gVmVyaWZpY2F0aW9uKioKCkFscmlnaHQsIHllcCwgbG9va3MgbGlrZSB3ZSYjMzk7cmUgbG9va2luZyBhdCBgTlZNRV9SRE1BYC4gR29vZCwgdGhhdCYjMzk7cyB3aGF0IEkgZXhwZWN0ZWQgdG8gc2VlLgoKTm93LCBsZXQmIzM5O3MganVzdCBxdWlja2x5IGNvbmZpcm0gYSBmZXcgcmVsYXRlZCBjb25maWd1cmF0aW9ucy4gSSB3YW50IHRvIGRvdWJsZS1jaGVjayB0aGF0IGBDT05GSUdfTURfUkFJRDFgIGFuZCBgQ09ORklHX01EX1JBSUQxMGAgYXJlIHByb3Blcmx5IHNldC4gSXQmIzM5O3MgYWx3YXlzIGEgZ29vZCBwcmFjdGljZSB0byBlbnN1cmUgdGhvc2UgYXJlIGVuYWJsZWQsIGVzcGVjaWFsbHkgd2hlbiB3b3JraW5nIHdpdGggbW9kZXJuIHN0b3JhZ2Ugc3RhY2tzIGFuZCBwb3RlbnRpYWwgUkRNQSBpbnRlZ3JhdGlvbi4gVGhlc2UgUkFJRCBsZXZlbHMsIHdoaWxlIHNlZW1pbmdseSBzdHJhaWdodGZvcndhcmQsIGNhbiBpbnRlcmFjdCBpbiBudWFuY2VkIHdheXMgd2l0aCBOVk1lIGFuZCBSRE1BLCBzbyBhIHF1aWNrIHZlcmlmaWNhdGlvbiBpcyB3YXJyYW50ZWQuIE5vIHN1cnByaXNlcywganVzdCBhIHNhbml0eSBjaGVjayBiZWZvcmUgd2UgZGlnIGRlZXBlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMjE6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1EX1JBSUQxJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbWQvS2NvbmZpZz0xMDQ9Y29uZmlnIE1EX1JBSUQwXG4tLVxuZHJpdmVycy9tZC9LY29uZmlnLTEyMy1cbmRyaXZlcnMvbWQvS2NvbmZpZzoxMjQ6Y29uZmlnIE1EX1JBSUQxXG5kcml2ZXJzL21kL0tjb25maWctMTI1LVx0dHJpc3RhdGUgXCYjMzQ7UkFJRC0xIChtaXJyb3JpbmcpIG1vZGVcJiMzNDtcbi0tXG5kcml2ZXJzL21kL0tjb25maWctMTQ1LVxuZHJpdmVycy9tZC9LY29uZmlnOjE0Njpjb25maWcgTURfUkFJRDEwXG5kcml2ZXJzL21kL0tjb25maWctMTQ3LVx0dHJpc3RhdGUgXCYjMzQ7UkFJRC0xMCAobWlycm9yZWQgc3RyaXBpbmcpIG1vZGVcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMjE6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY3NzMKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBzdHJlYW0gb2YgdGhvdWdodDoKCioqQ2hlY2tpbmcgU3RvcmFnZSBDb25maWd1cmF0aW9uKioKClJpZ2h0LCBzbyB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBzdG9yYWdlIGNvbmZpZ3VyYXRpb25zLiBJbW1lZGlhdGVseSwgbXkgbWluZCBqdW1wcyB0byB0aGUgc3BlY2lmaWNzIOKAkyB5ZXMsIGFic29sdXRlbHksIHdlIG5lZWQgdG8gY29uc2lkZXIgYm90aCBgTURfUkFJRDFgIGFuZCBgTURfUkFJRDEwYC4gVGhvc2UgYXJlIGNyaXRpY2FsLiBOb3csIGJlZm9yZSBnb2luZyBmdXJ0aGVyLCBsZXQmIzM5O3MgdmVyaWZ5IHRoYXQgdGhlIGtlcm5lbCBzdXBwb3J0cyBOVk1lIHRhcmdldCBmdW5jdGlvbmFsaXR5LCB3aGljaCBpcyBjcml0aWNhbCBmb3Igc29tZSBvZiB0aGUgaGlnaGVyLXBlcmZvcm1hbmNlIHNvbHV0aW9ucyB0aGF0IHdlIHdvdWxkIHJlY29tbWVuZC4gTGV0JiMzOTtzIHZlcmlmeSBgQ09ORklHX05WTUVfVEFSR0VUYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMjE6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5WTUVfVEFSR0VUJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy0yLVxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnOjM6Y29uZmlnIE5WTUVfVEFSR0VUXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctNC1cdHRyaXN0YXRlIFwmIzM0O05WTWUgVGFyZ2V0IHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctMTktXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWc6MjA6Y29uZmlnIE5WTUVfVEFSR0VUX0RFQlVHRlNcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy0yMS0gICAgICAgIGJvb2wgXCYjMzQ7TlZNZSBUYXJnZXQgZGVidWdmcyBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnLTI4LVxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnOjI5OmNvbmZpZyBOVk1FX1RBUkdFVF9QQVNTVEhSVVxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnLTMwLVx0Ym9vbCBcJiMzNDtOVk1lIFRhcmdldCBQYXNzdGhyb3VnaCBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnLTQwLVxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnOjQxOmNvbmZpZyBOVk1FX1RBUkdFVF9MT09QXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctNDItXHR0cmlzdGF0ZSBcJiMzNDtOVk1lIGxvb3BiYWNrIGRldmljZSBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnLTUxLVxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnOjUyOmNvbmZpZyBOVk1FX1RBUkdFVF9SRE1BXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctNTMtXHR0cmlzdGF0ZSBcJiMzNDtOVk1lIG92ZXIgRmFicmljcyBSRE1BIHRhcmdldCBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnLTYyLVxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnOjYzOmNvbmZpZyBOVk1FX1RBUkdFVF9GQ1xuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnLTY0LVx0dHJpc3RhdGUgXCYjMzQ7TlZNZSBvdmVyIEZhYnJpY3MgRkMgdGFyZ2V0IGRyaXZlclwmIzM0O1xuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy03My1cbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZzo3NDpjb25maWcgTlZNRV9UQVJHRVRfRkNMT09QXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctNzUtXHR0cmlzdGF0ZSBcJiMzNDtOVk1lIG92ZXIgRmFicmljcyBGQyBUcmFuc3BvcnQgTG9vcGJhY2sgVGVzdCBkcml2ZXJcJiMzNDtcbi0tXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctODYtXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWc6ODc6Y29uZmlnIE5WTUVfVEFSR0VUX1RDUFxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnLTg4LVx0dHJpc3RhdGUgXCYjMzQ7TlZNZSBvdmVyIEZhYnJpY3MgVENQIHRhcmdldCBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnLTk2LVxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnOjk3OmNvbmZpZyBOVk1FX1RBUkdFVF9UQ1BfVExTXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctOTgtXHRib29sIFwmIzM0O05WTWUgb3ZlciBGYWJyaWNzIFRDUCB0YXJnZXQgVExTIGVuY3J5cHRpb24gc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy0xMDktXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWc6MTEwOmNvbmZpZyBOVk1FX1RBUkdFVF9BVVRIXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctMTExLVx0Ym9vbCBcJiMzNDtOVk1lIG92ZXIgRmFicmljcyBJbi1iYW5kIEF1dGhlbnRpY2F0aW9uIGluIHRhcmdldCBzaWRlXCYjMzQ7XG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnLTExOS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZzoxMjA6Y29uZmlnIE5WTUVfVEFSR0VUX0FVVEhfREVCVUdcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy0xMjEtXHRib29sIFwmIzM0O05WTWUgb3ZlciBGYWJyaWNzIEluLWJhbmQgQXV0aGVudGljYXRpb24gZGVidWcgbWVzc2FnZXNcJiMzNDtcbi0tXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctMTI4LVxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnOjEyOTpjb25maWcgTlZNRV9UQVJHRVRfUENJX0VQRlxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnLTEzMC1cdHRyaXN0YXRlIFwmIzM0O05WTWUgUENJIEVuZHBvaW50IEZ1bmN0aW9uIHRhcmdldCBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDIxOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3NzM0CgkJCQkJCQlvdXRwdXQ6IDI3OQoJCQkJCQkJdGhvdWdodHM6IDQ1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCYjMzk7cyBDb3ZlcmFnZSoqCgpBbHJpZ2h0LCBgTlZNRV9UQVJHRVRgIGFsb25lIHNlZW1zIGxpa2UgaXQgc2hvdWxkIGJlIGVub3VnaCB0byBjYXB0dXJlIHRoZSBjb3JlIGNoYW5nZXMgaW50cm9kdWNlZCBoZXJlLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpcyBmb2N1c2luZyBvbiB0aGUgY29uZmlndXJhdGlvbnMgdGhpcyBwYXRjaCBpbXBhY3RzOiBgTURfUkFJRDFgLCBgTURfUkFJRDEwYCwgYE5WTUVfUkRNQWAsIGBQQ0lfUDJQRE1BYCwgYW5kIGBOVk1FX1RBUkdFVGAuIAoKSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnkgY3J1Y2lhbCBmdW5jdGlvbnMuIEFmdGVyIHJldmlld2luZywgYG1kX3N1Ym1pdF9iaW9gIGhhcyBiZWVuIHRvdWNoZWQsIGJ1dCB0aGUgY2hhbmdlIHNldHMgYFJFUV9OT01FUkdFYCBmb3IgUDJQRE1BIGJpb3MuIFNpbmNlIGl0IGlzIGluIGEgaG90IHBhdGgsIEkgdGhpbmsgSSYjMzk7bGwgc2tpcCBpdCB0byBhdm9pZCBhbnkgZnV6emluZyBza2V3LiBgcmFpZDFfd3JpdGVfZXJyb3JgIGlzIG5ldywgZGVmaW5pdGVseSBpbmNsdWRlIGl0LiBgbmFycm93X3dyaXRlX2Vycm9yYCBpcyBtb2RpZmllZCB0byBlbnN1cmUgUDJQRE1BIHJldHJ5IGJpb3MgcmVtYWluIHVubWVyZ2VhYmxlLCB0aGlzIGlzIGltcG9ydGFudCBmb3IgY292ZXJhZ2UuIGBoYW5kbGVfd3JpdGVfZmluaXNoZWRgIGFuZCBgaGFuZGxlX3dyaXRlX2NvbXBsZXRlZGAgYXJlIG1vZGlmaWVkIHRvIGFkZHJlc3MgYEJMS19TVFNfUDJQRE1BYCBieSBzZXR0aW5nIGJhZGJsb2Nrcywgd2hpY2ggaXMgZGlzdGluY3QgZnJvbSBhIG5hcnJvdyB3cml0ZSBlcnJvciwgc28gdGhlc2UgYXJlIGtleSBmdW5jdGlvbnMuIGBoYW5kbGVfcmVhZF9lcnJvcmAgaGFzIGJlZW4gbW9kaWZpZWQgdG8gYmxvY2sgYmlvcyBpZiBgQkxLX1NUU19QMlBETUFgLiBgbnZtZV9yZG1hX2RtYV9tYXBfcmVxYCB1c2VzIGBpYl9kbWFfbWFwX3NndGFibGVfYXR0cnNgIHNvIGl0IGlzIGltcG9ydGFudCB0byBpbmNsdWRlLiBGaW5hbGx5LCBgbnZtZV9yZG1hX3F1ZXVlX3JxYCBpcyBtb2RpZmllZCB0byBoYW5kbGUgYC1FUkVNT1RFSU9gIGJ5IHJldHVybmluZyBgQkxLX1NUU19QMlBETUFgLgoKVGhlIG92ZXJhbGwgbG9naWMgb2YgdGhlIHBhdGNoIGludm9sdmVzIGhhbmRsaW5nIGBCTEtfU1RTX1AyUERNQWAgZXJyb3JzIHRoYXQgc3VyZmFjZSBpbiB0aGUgYmxvY2sgbGF5ZXIsIE1EIFJBSUQsIGFuZCBOVk1lIFJETUEuIEluIE1EIFJBSUQsIHRoZXNlIGNoYW5nZXMgY29ycmVjdCB0aGUgaGFuZGxpbmcgb2YgUDJQRE1BIG1hcHBpbmcgZmFpbHVyZXMgYnkgc2V0dGluZyBiYWRibG9ja3Mgb3IgYmxvY2tpbmcgcmVhZCByZXF1ZXN0cyBpbnN0ZWFkIG9mIGZsYWdnaW5nIHRoZSB1bmRlcmx5aW5nIGRldmljZSBhcyBmYXVsdHkuIE5WTWUgUkRNQSBtb2RpZmljYXRpb25zIGludm9sdmUgdXNpbmcgYGliX2RtYV9tYXBfc2d0YWJsZV9hdHRyc2AgYW5kIHJldHVybmluZyBgQkxLX1NUU19QMlBETUFgIG9uIG1hcHBpbmcgZmFpbHVyZXMuIEZ1bmN0aW9uYWxseSwgdGhlc2UgY2hhbmdlcyBhcmUgcmVsZXZhbnQgdG8gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCB3aGVyZSBOVk1lIHRhcmdldHMgY2FuIGJlIGNvbmZpZ3VyZWQgd2l0aCBQMlAgbWVtb3J5IGJhY2tlZCBieSBNRCBhcnJheXMsIG9yIE5WTWUgUkRNQSB1c2VkIG92ZXIgc29mdHdhcmUgUkRNQSBkZXZpY2VzLgoKSSB0aGluayBJJiMzOTt2ZSBnb3QgYSBnb29kIGhhbmRsZSBvbiB0aGluZ3MuIFRpbWUgdG8gY2FsbCB0aGUgYHNldC1yZXN1bHRzYCB0b29sLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAyMTozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TURfUkFJRDEmIzM0OywKICAgICYjMzQ7TURfUkFJRDEwJiMzNDssCiAgICAmIzM0O05WTUVfUkRNQSYjMzQ7LAogICAgJiMzNDtQQ0lfUDJQRE1BJiMzNDssCiAgICAmIzM0O05WTUVfVEFSR0VUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cmFpZDFfd3JpdGVfZXJyb3ImIzM0OywKICAgICYjMzQ7bmFycm93X3dyaXRlX2Vycm9yJiMzNDssCiAgICAmIzM0O2hhbmRsZV93cml0ZV9maW5pc2hlZCYjMzQ7LAogICAgJiMzNDtoYW5kbGVfd3JpdGVfY29tcGxldGVkJiMzNDssCiAgICAmIzM0O2hhbmRsZV9yZWFkX2Vycm9yJiMzNDssCiAgICAmIzM0O252bWVfcmRtYV9kbWFfbWFwX3JlcSYjMzQ7LAogICAgJiMzNDtudm1lX3JkbWFfcXVldWVfcnEmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBoYW5kbGluZyBmb3IgQkxLX1NUU19QMlBETUEgZXJyb3JzIGluIHRoZSBibG9jayBsYXllciwgTUQgUkFJRCAoUkFJRDEvUkFJRDEwKSwgYW5kIE5WTWUgUkRNQS4gSXQgbW9kaWZpZXMgZXJyb3IgaGFuZGxpbmcgcGF0aHMgaW4gTUQgUkFJRCB0byBwcm9wZXJseSBoYW5kbGUgUDJQRE1BIG1hcHBpbmcgZmFpbHVyZXMgYnkgc2V0dGluZyBiYWRibG9ja3Mgb3IgYmxvY2tpbmcgcmVhZHMgaW5zdGVhZCBvZiBmYWlsaW5nIHRoZSB1bmRlcmx5aW5nIGRldmljZS4gSXQgYWxzbyBtb2RpZmllcyBOVk1lIFJETUEgdG8gdXNlIGliX2RtYV9tYXBfc2d0YWJsZV9hdHRycyBhbmQgcmV0dXJuIEJMS19TVFNfUDJQRE1BIG9uIG1hcHBpbmcgZmFpbHVyZXMuIFRoZXNlIGNoYW5nZXMgYXJlIGZ1bmN0aW9uYWxseSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGJ5IGNvbmZpZ3VyaW5nIE5WTWUgdGFyZ2V0cyB3aXRoIFAyUCBtZW1vcnkgYmFja2VkIGJ5IE1EIGFycmF5cywgb3IgYnkgdXNpbmcgTlZNZSBSRE1BIG92ZXIgc29mdHdhcmUgUkRNQSBkZXZpY2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNRF9SQUlEMSYjMzQ7LAogICAgJiMzNDtNRF9SQUlEMTAmIzM0OywKICAgICYjMzQ7TlZNRV9SRE1BJiMzNDssCiAgICAmIzM0O1BDSV9QMlBETUEmIzM0OywKICAgICYjMzQ7TlZNRV9UQVJHRVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyYWlkMV93cml0ZV9lcnJvciYjMzQ7LAogICAgJiMzNDtuYXJyb3dfd3JpdGVfZXJyb3ImIzM0OywKICAgICYjMzQ7aGFuZGxlX3dyaXRlX2ZpbmlzaGVkJiMzNDssCiAgICAmIzM0O2hhbmRsZV93cml0ZV9jb21wbGV0ZWQmIzM0OywKICAgICYjMzQ7aGFuZGxlX3JlYWRfZXJyb3ImIzM0OywKICAgICYjMzQ7bnZtZV9yZG1hX2RtYV9tYXBfcmVxJiMzNDssCiAgICAmIzM0O252bWVfcmRtYV9xdWV1ZV9ycSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGhhbmRsaW5nIGZvciBCTEtfU1RTX1AyUERNQSBlcnJvcnMgaW4gdGhlIGJsb2NrIGxheWVyLCBNRCBSQUlEIChSQUlEMS9SQUlEMTApLCBhbmQgTlZNZSBSRE1BLiBJdCBtb2RpZmllcyBlcnJvciBoYW5kbGluZyBwYXRocyBpbiBNRCBSQUlEIHRvIHByb3Blcmx5IGhhbmRsZSBQMlBETUEgbWFwcGluZyBmYWlsdXJlcyBieSBzZXR0aW5nIGJhZGJsb2NrcyBvciBibG9ja2luZyByZWFkcyBpbnN0ZWFkIG9mIGZhaWxpbmcgdGhlIHVuZGVybHlpbmcgZGV2aWNlLiBJdCBhbHNvIG1vZGlmaWVzIE5WTWUgUkRNQSB0byB1c2UgaWJfZG1hX21hcF9zZ3RhYmxlX2F0dHJzIGFuZCByZXR1cm4gQkxLX1NUU19QMlBETUEgb24gbWFwcGluZyBmYWlsdXJlcy4gVGhlc2UgY2hhbmdlcyBhcmUgZnVuY3Rpb25hbGx5IHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYnkgY29uZmlndXJpbmcgTlZNZSB0YXJnZXRzIHdpdGggUDJQIG1lbW9yeSBiYWNrZWQgYnkgTUQgYXJyYXlzLCBvciBieSB1c2luZyBOVk1lIFJETUEgb3ZlciBzb2Z0d2FyZSBSRE1BIGRldmljZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yM1QyMTozMzowOC43ODQ2ODU2NjZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDA1MTkxOTA4NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTURfUkFJRDFcIixcbiAgICBcIk1EX1JBSUQxMFwiLFxuICAgIFwiTlZNRV9SRE1BXCIsXG4gICAgXCJQQ0lfUDJQRE1BXCIsXG4gICAgXCJOVk1FX1RBUkdFVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJhaWQxX3dyaXRlX2Vycm9yXCIsXG4gICAgXCJuYXJyb3dfd3JpdGVfZXJyb3JcIixcbiAgICBcImhhbmRsZV93cml0ZV9maW5pc2hlZFwiLFxuICAgIFwiaGFuZGxlX3dyaXRlX2NvbXBsZXRlZFwiLFxuICAgIFwiaGFuZGxlX3JlYWRfZXJyb3JcIixcbiAgICBcIm52bWVfcmRtYV9kbWFfbWFwX3JlcVwiLFxuICAgIFwibnZtZV9yZG1hX3F1ZXVlX3JxXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBoYW5kbGluZyBmb3IgQkxLX1NUU19QMlBETUEgZXJyb3JzIGluIHRoZSBibG9jayBsYXllciwgTUQgUkFJRCAoUkFJRDEvUkFJRDEwKSwgYW5kIE5WTWUgUkRNQS4gSXQgbW9kaWZpZXMgZXJyb3IgaGFuZGxpbmcgcGF0aHMgaW4gTUQgUkFJRCB0byBwcm9wZXJseSBoYW5kbGUgUDJQRE1BIG1hcHBpbmcgZmFpbHVyZXMgYnkgc2V0dGluZyBiYWRibG9ja3Mgb3IgYmxvY2tpbmcgcmVhZHMgaW5zdGVhZCBvZiBmYWlsaW5nIHRoZSB1bmRlcmx5aW5nIGRldmljZS4gSXQgYWxzbyBtb2RpZmllcyBOVk1lIFJETUEgdG8gdXNlIGliX2RtYV9tYXBfc2d0YWJsZV9hdHRycyBhbmQgcmV0dXJuIEJMS19TVFNfUDJQRE1BIG9uIG1hcHBpbmcgZmFpbHVyZXMuIFRoZXNlIGNoYW5nZXMgYXJlIGZ1bmN0aW9uYWxseSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGJ5IGNvbmZpZ3VyaW5nIE5WTWUgdGFyZ2V0cyB3aXRoIFAyUCBtZW1vcnkgYmFja2VkIGJ5IE1EIGFycmF5cywgb3IgYnkgdXNpbmcgTlZNZSBSRE1BIG92ZXIgc29mdHdhcmUgUkRNQSBkZXZpY2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QyMTozMzowOC43ODQ2OTExNTdaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MTE1NTQwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDM3MWVkNjAzZWJkN2E2ODM3NmJiODIwZWY4ZGUwN2FjYmY3MzU1ZGVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBKdWwgMjMgMjE6MzM6MDcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYmxvY2svYmxrLWNvcmUuYyBiL2Jsb2NrL2Jsay1jb3JlLmNcXG5pbmRleCAzNjU2NDEyNjZjOWU4Mi4uODNjYjU0NjQyNjVmYjYgMTAwNjQ0XFxuLS0tIGEvYmxvY2svYmxrLWNvcmUuY1xcbisrKyBiL2Jsb2NrL2Jsay1jb3JlLmNcXG5AQCAtMTc3LDYgKzE3Nyw5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qge1xcbiBcXG4gXFx0LyogQ29tbWFuZCBkdXJhdGlvbiBsaW1pdCBkZXZpY2Utc2lkZSB0aW1lb3V0ICovXFxuIFxcdEVOVChEVVJBVElPTl9MSU1JVCxcXHQtRVRJTUUsXFx0XFx0XFxcImR1cmF0aW9uIGxpbWl0IGV4Y2VlZGVkXFxcIiksXFxuK1xcbitcXHQvKiBubyBQQ0llIFAyUERNQSByb3V0ZSBiZXR3ZWVuIGluaXRpYXRvciBhbmQgdGFyZ2V0ICovXFxuK1xcdEVOVChQMlBETUEsXFx0XFx0LUVSRU1PVEVJTyxcXHRcXFwicGVlci10by1wZWVyIHRyYW5zZmVyIHVucm91dGFibGVcXFwiKSxcXG4gXFx0RU5UKElOVkFMLFxcdFxcdC1FSU5WQUwsXFx0XFxcImludmFsaWRcXFwiKSxcXG4gXFxuIFxcdC8qIGV2ZXJ5dGhpbmcgZWxzZSBub3QgY292ZXJlZCBhYm92ZTogKi9cXG5kaWZmIC0tZ2l0IGEvYmxvY2svYmxrLW1xLWRtYS5jIGIvYmxvY2svYmxrLW1xLWRtYS5jXFxuaW5kZXggYmZkYjllZDcwNzQxMTYuLmU4OGQ2YjM1MjRlNmFkIDEwMDY0NFxcbi0tLSBhL2Jsb2NrL2Jsay1tcS1kbWEuY1xcbisrKyBiL2Jsb2NrL2Jsay1tcS1kbWEuY1xcbkBAIC0xODksOCArMTg5LDkgQEAgc3RhdGljIGJvb2wgYmxrX2RtYV9tYXBfaXRlcl9zdGFydChzdHJ1Y3QgcmVxdWVzdCAqcmVxLCBzdHJ1Y3QgZGV2aWNlICpkbWFfZGV2LFxcbiBcXHRcXHQgKi9cXG4gXFx0Y2FzZSBQQ0lfUDJQRE1BX01BUF9OT05FOlxcbiBcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBQQ0lfUDJQRE1BX01BUF9OT1RfU1VQUE9SVEVEOlxcbiBcXHRkZWZhdWx0Olxcbi1cXHRcXHRpdGVyLVxcdTAwM2VzdGF0dXMgPSBCTEtfU1RTX0lOVkFMO1xcbitcXHRcXHRpdGVyLVxcdTAwM2VzdGF0dXMgPSBCTEtfU1RTX1AyUERNQTtcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXHR9XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL21kLmMgYi9kcml2ZXJzL21kL21kLmNcXG5pbmRleCBkMTQ2NWJjZDg2YzgxMi4uMzc3MGJkYjRkNGIyOGIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9tZC9tZC5jXFxuKysrIGIvZHJpdmVycy9tZC9tZC5jXFxuQEAgLTQ1MSw4ICs0NTEsMTQgQEAgc3RhdGljIHZvaWQgbWRfc3VibWl0X2JpbyhzdHJ1Y3QgYmlvICpiaW8pXFxuIFxcdFxcdHJldHVybjtcXG4gXFx0fVxcbiBcXG4tXFx0LyogYmlvIGNvdWxkIGJlIG1lcmdlYWJsZSBhZnRlciBwYXNzaW5nIHRvIHVuZGVybGF5ZXIgKi9cXG4tXFx0YmlvLVxcdTAwM2ViaV9vcGYgXFx1MDAyNj0gflJFUV9OT01FUkdFO1xcbitcXHQvKlxcbitcXHQgKiBBIGJpbyBtZCBzcGxpdCBtYXkgbWVyZ2UgYWdhaW4gYmVsb3cgbWQgLS0gZXhjZXB0IFAyUERNQSBiaW9zLFxcbitcXHQgKiB3aGljaCBtdXN0IHN0YXkgc2luZ2xlLXByb3ZpZGVyIChzZWUgX19iaW9fYWRkX3BhZ2UoKSkuXFxuK1xcdCAqL1xcbitcXHRpZiAobWRfYmlvX2lzX3AycGRtYShiaW8pKVxcbitcXHRcXHRiaW8tXFx1MDAzZWJpX29wZiB8PSBSRVFfTk9NRVJHRTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRiaW8tXFx1MDAzZWJpX29wZiBcXHUwMDI2PSB+UkVRX05PTUVSR0U7XFxuIFxcbiBcXHRtZF9oYW5kbGVfcmVxdWVzdChtZGRldiwgYmlvKTtcXG4gfVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL21kLmggYi9kcml2ZXJzL21kL21kLmhcXG5pbmRleCBkOGRhZjBmNzVjYmJlOC4uNzNkZjFhNmVjY2Q4NTAgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9tZC9tZC5oXFxuKysrIGIvZHJpdmVycy9tZC9tZC5oXFxuQEAgLTExLDggKzExLDEwIEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9ibGtkZXYuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JhY2tpbmctZGV2LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9iYWRibG9ja3MuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Jpby5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgva29iamVjdC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbGlzdC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbWVtcmVtYXAuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21tLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9tdXRleC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvdGltZXIuaFxcdTAwM2VcXG5AQCAtMjIsNiArMjQsMTkgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY3RyYWNlL2V2ZW50cy9ibG9jay5oXFx1MDAzZVxcbiBcXG4gI2RlZmluZSBNYXhTZWN0b3IgKH4oc2VjdG9yX3QpMClcXG4rXFxuKy8qXFxuKyAqIFAyUCBhbmQgaG9zdCBwYWdlcyBuZXZlciBtaXggd2l0aGluIGEgYmlvLCBzbyB0aGUgZmlyc3QgYnZlYyBpc1xcbisgKiByZXByZXNlbnRhdGl2ZS4gIFJlYWQgYmlfaW9fdmVjIGRpcmVjdGx5OiBiaW9fZmlyc3RfYnZlY19hbGwoKVxcbisgKiBXQVJOcyBvbiB0aGUgc3BsaXQgY2xvbmVzIG1kIGhhbmRsZXMsIGFuZCBkYXRhLWxlc3MgYmlvcyBoYXZlIG5vXFxuKyAqIGJpX2lvX3ZlYy4gIE5vdCB2YWxpZCBhZnRlciB0aGUgYmlvJ3MgaXRlcmF0b3IgaXMgY29uc3VtZWQuXFxuKyAqL1xcbitzdGF0aWMgaW5saW5lIGJvb2wgbWRfYmlvX2lzX3AycGRtYShzdHJ1Y3QgYmlvICpiaW8pXFxuK3tcXG4rXFx0cmV0dXJuIGJpb19oYXNfZGF0YShiaW8pIFxcdTAwMjZcXHUwMDI2IGJpby1cXHUwMDNlYmlfaW9fdmVjIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAgICBpc19wY2lfcDJwZG1hX3BhZ2UoYmlvLVxcdTAwM2ViaV9pb192ZWMtXFx1MDAzZWJ2X3BhZ2UpO1xcbit9XFxuK1xcbiAvKlxcbiAgKiBOdW1iZXIgb2YgZ3VhcmFudGVlZCByYWlkIGJpb3MgaW4gY2FzZSBvZiBleHRyZW1lIFZNIGxvYWQ6XFxuICAqL1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3JhaWQxLTEwLmMgYi9kcml2ZXJzL21kL3JhaWQxLTEwLmNcXG5pbmRleCA1NmE1NmE0ZGE0ZjgzZi4uODlkYWY4NTU4MjUxZmEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9tZC9yYWlkMS0xMC5jXFxuKysrIGIvZHJpdmVycy9tZC9yYWlkMS0xMC5jXFxuQEAgLTMwMywzICszMDMsMTkgQEAgc3RhdGljIGlubGluZSBib29sIHJhaWQxX3Nob3VsZF9oYW5kbGVfZXJyb3Ioc3RydWN0IGJpbyAqYmlvKVxcbiBcXHRyZXR1cm4gIShiaW8tXFx1MDAzZWJpX29wZiBcXHUwMDI2IChSRVFfUkFIRUFEIHwgUkVRX05PV0FJVCkpIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdGJpby1cXHUwMDNlYmlfc3RhdHVzICE9IEJMS19TVFNfSU5WQUw7XFxuIH1cXG4rXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCByYWlkMV93cml0ZV9lcnJvcihzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWRfcmRldiAqcmRldixcXG4rXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgYmlvICpiaW8sIGJvb2wgYWxsb3dfZmFpbGZhc3QpXFxuK3tcXG4rXFx0c2V0X2JpdChXcml0ZUVycm9yU2VlbiwgXFx1MDAyNnJkZXYtXFx1MDAzZWZsYWdzKTtcXG4rXFxuK1xcdGlmIChiaW8tXFx1MDAzZWJpX3N0YXR1cyA9PSBCTEtfU1RTX1AyUERNQSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0aWYgKCF0ZXN0X2FuZF9zZXRfYml0KFdhbnRSZXBsYWNlbWVudCwgXFx1MDAyNnJkZXYtXFx1MDAzZWZsYWdzKSlcXG4rXFx0XFx0c2V0X2JpdChNRF9SRUNPVkVSWV9ORUVERUQsIFxcdTAwMjZtZGRldi1cXHUwMDNlcmVjb3ZlcnkpO1xcbitcXG4rXFx0aWYgKGFsbG93X2ZhaWxmYXN0IFxcdTAwMjZcXHUwMDI2IHRlc3RfYml0KEZhaWxGYXN0LCBcXHUwMDI2cmRldi1cXHUwMDNlZmxhZ3MpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAoYmlvLVxcdTAwM2ViaV9vcGYgXFx1MDAyNiBNRF9GQUlMRkFTVCkpXFxuK1xcdFxcdG1kX2Vycm9yKG1kZGV2LCByZGV2KTtcXG4rfVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3JhaWQxLmMgYi9kcml2ZXJzL21kL3JhaWQxLmNcXG5pbmRleCBhZmUyY2E5NmFkOGMyMi4uNzZhMTQyNmU2NGYwMmQgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9tZC9yYWlkMS5jXFxuKysrIGIvZHJpdmVycy9tZC9yYWlkMS5jXFxuQEAgLTQ4MywxNyArNDgzLDggQEAgc3RhdGljIHZvaWQgcmFpZDFfZW5kX3dyaXRlX3JlcXVlc3Qoc3RydWN0IGJpbyAqYmlvKVxcbiBcXHQgKiAnb25lIG1pcnJvciBJTyBoYXMgZmluaXNoZWQnIGV2ZW50IGhhbmRsZXI6XFxuIFxcdCAqL1xcbiBcXHRpZiAoYmlvLVxcdTAwM2ViaV9zdGF0dXMgXFx1MDAyNlxcdTAwMjYgIWlnbm9yZV9lcnJvcikge1xcbi1cXHRcXHRzZXRfYml0KFdyaXRlRXJyb3JTZWVuLFxcdFxcdTAwMjZyZGV2LVxcdTAwM2VmbGFncyk7XFxuLVxcdFxcdGlmICghdGVzdF9hbmRfc2V0X2JpdChXYW50UmVwbGFjZW1lbnQsIFxcdTAwMjZyZGV2LVxcdTAwM2VmbGFncykpXFxuLVxcdFxcdFxcdHNldF9iaXQoTURfUkVDT1ZFUllfTkVFREVELCBcXHUwMDI2XFxuLVxcdFxcdFxcdFxcdGNvbmYtXFx1MDAzZW1kZGV2LVxcdTAwM2VyZWNvdmVyeSk7XFxuLVxcbi1cXHRcXHRpZiAodGVzdF9iaXQoRmFpbEZhc3QsIFxcdTAwMjZyZGV2LVxcdTAwM2VmbGFncykgXFx1MDAyNlxcdTAwMjZcXG4tXFx0XFx0ICAgIChiaW8tXFx1MDAzZWJpX29wZiBcXHUwMDI2IE1EX0ZBSUxGQVNUKSBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHQgICAgLyogV2UgbmV2ZXIgdHJ5IEZhaWxGYXN0IHRvIFdyaXRlTW9zdGx5IGRldmljZXMgKi9cXG4tXFx0XFx0ICAgICF0ZXN0X2JpdChXcml0ZU1vc3RseSwgXFx1MDAyNnJkZXYtXFx1MDAzZWZsYWdzKSkge1xcbi1cXHRcXHRcXHRtZF9lcnJvcihyMV9iaW8tXFx1MDAzZW1kZGV2LCByZGV2KTtcXG4tXFx0XFx0fVxcbitcXHRcXHRyYWlkMV93cml0ZV9lcnJvcihjb25mLVxcdTAwM2VtZGRldiwgcmRldiwgYmlvLFxcbitcXHRcXHRcXHRcXHQgICF0ZXN0X2JpdChXcml0ZU1vc3RseSwgXFx1MDAyNnJkZXYtXFx1MDAzZWZsYWdzKSk7XFxuIFxcbiBcXHRcXHQvKlxcbiBcXHRcXHQgKiBXaGVuIHRoZSBkZXZpY2UgaXMgZmF1bHR5LCBpdCBpcyBub3QgbmVjZXNzYXJ5IHRvXFxuQEAgLTU2NCw3ICs1NTUsNyBAQCBzdGF0aWMgdm9pZCByYWlkMV9lbmRfd3JpdGVfcmVxdWVzdChzdHJ1Y3QgYmlvICpiaW8pXFxuIFxcdFxcdFxcdFxcdGNhbGxfYmlvX2VuZGlvKHIxX2Jpbyk7XFxuIFxcdFxcdFxcdH1cXG4gXFx0XFx0fVxcbi1cXHR9IGVsc2UgaWYgKHRlc3RfYml0KE1EX1NFUklBTElaRV9QT0xJQ1ksIFxcdTAwMjZyZGV2LVxcdTAwM2VtZGRldi1cXHUwMDNlZmxhZ3MpKVxcbitcXHR9IGVsc2UgaWYgKHRlc3RfYml0KENvbGxpc2lvbkNoZWNrLCBcXHUwMDI2cmRldi1cXHUwMDNlZmxhZ3MpKVxcbiBcXHRcXHRyZW1vdmVfc2VyaWFsKHJkZXYsIGxvLCBoaSk7XFxuIFxcdGlmIChyMV9iaW8tXFx1MDAzZWJpb3NbbWlycm9yXSA9PSBOVUxMKVxcbiBcXHRcXHRyZGV2X2RlY19wZW5kaW5nKHJkZXYsIGNvbmYtXFx1MDAzZW1kZGV2KTtcXG5AQCAtMTUyMyw2ICsxNTE0LDcgQEAgc3RhdGljIGJvb2wgcmFpZDFfd3JpdGVfcmVxdWVzdChzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgYmlvICpiaW8sXFxuIFxcdGJvb2wgd3JpdGVfYmVoaW5kID0gZmFsc2U7XFxuIFxcdGJvb2wgbm93YWl0ID0gYmlvLVxcdTAwM2ViaV9vcGYgXFx1MDAyNiBSRVFfTk9XQUlUO1xcbiBcXHRib29sIGlzX2Rpc2NhcmQgPSBvcF9pc19kaXNjYXJkKGJpby1cXHUwMDNlYmlfb3BmKTtcXG4rXFx0Ym9vbCBpc19wMnBkbWEgPSBtZF9iaW9faXNfcDJwZG1hKGJpbyk7XFxuIFxcdHNlY3Rvcl90IHNlY3RvciA9IGJpby1cXHUwMDNlYmlfaXRlci5iaV9zZWN0b3I7XFxuIFxcbiBcXHRpZiAobWRkZXZfaXNfY2x1c3RlcmVkKG1kZGV2KSBcXHUwMDI2XFx1MDAyNlxcbkBAIC0xNTc1LDkgKzE1NjcsMTIgQEAgc3RhdGljIGJvb2wgcmFpZDFfd3JpdGVfcmVxdWVzdChzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgYmlvICpiaW8sXFxuIFxcdFxcdC8qXFxuIFxcdFxcdCAqIFRoZSB3cml0ZS1iZWhpbmQgaW8gaXMgb25seSBhdHRlbXB0ZWQgb24gZHJpdmVzIG1hcmtlZCBhc1xcbiBcXHRcXHQgKiB3cml0ZS1tb3N0bHksIHdoaWNoIG1lYW5zIHdlIGNvdWxkIGFsbG9jYXRlIHdyaXRlIGJlaGluZFxcbi1cXHRcXHQgKiBiaW8gbGF0ZXIuXFxuK1xcdFxcdCAqIGJpbyBsYXRlci4gUDJQRE1BIGJpb3MgYXJlIGV4Y2x1ZGVkOiB3cml0ZS1iZWhpbmQgY29waWVzXFxuK1xcdFxcdCAqIHRoZSBkYXRhIHdpdGggYmlvX2NvcHlfZGF0YSgpLCBhIENQVSBjb3B5IHRoYXQgY2Fubm90IGJlXFxuK1xcdFxcdCAqIGFzc3VtZWQgc2FmZSBvciBmYXN0IG9uIFAyUERNQSAoZGV2aWNlIEJBUikgcGFnZXMuXFxuIFxcdFxcdCAqL1xcbi1cXHRcXHRpZiAoIWlzX2Rpc2NhcmQgXFx1MDAyNlxcdTAwMjYgcmRldiBcXHUwMDI2XFx1MDAyNiB0ZXN0X2JpdChXcml0ZU1vc3RseSwgXFx1MDAyNnJkZXYtXFx1MDAzZWZsYWdzKSlcXG4rXFx0XFx0aWYgKCFpc19kaXNjYXJkIFxcdTAwMjZcXHUwMDI2ICFpc19wMnBkbWEgXFx1MDAyNlxcdTAwMjYgcmRldiBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgdGVzdF9iaXQoV3JpdGVNb3N0bHksIFxcdTAwMjZyZGV2LVxcdTAwM2VmbGFncykpXFxuIFxcdFxcdFxcdHdyaXRlX2JlaGluZCA9IHRydWU7XFxuIFxcbiBcXHRcXHRyMV9iaW8tXFx1MDAzZWJpb3NbaV0gPSBOVUxMO1xcbkBAIC0xNjc3LDcgKzE2NzIsMTEgQEAgc3RhdGljIGJvb2wgcmFpZDFfd3JpdGVfcmVxdWVzdChzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgYmlvICpiaW8sXFxuIFxcdFxcdFxcdG1iaW8gPSBiaW9fYWxsb2NfY2xvbmUocmRldi1cXHUwMDNlYmRldiwgYmlvLCBHRlBfTk9JTyxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcdTAwMjZtZGRldi1cXHUwMDNlYmlvX3NldCk7XFxuIFxcbi1cXHRcXHRcXHRpZiAodGVzdF9iaXQoTURfU0VSSUFMSVpFX1BPTElDWSwgXFx1MDAyNm1kZGV2LVxcdTAwM2VmbGFncykpXFxuK1xcdFxcdFxcdC8qXFxuK1xcdFxcdFxcdCAqIENvbGxpc2lvbkNoZWNrIG1hcmtzIGV2ZXJ5IHJkZXYgd2l0aCBhIHNlcmlhbFxcbitcXHRcXHRcXHQgKiB0cmVlOyBvcmRlciBhZ2FpbnN0IGluLWZsaWdodCB3cml0ZS1iZWhpbmQgSS9PLlxcbitcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0aWYgKHRlc3RfYml0KENvbGxpc2lvbkNoZWNrLCBcXHUwMDI2cmRldi1cXHUwMDNlZmxhZ3MpKVxcbiBcXHRcXHRcXHRcXHR3YWl0X2Zvcl9zZXJpYWxpemF0aW9uKHJkZXYsIHIxX2Jpbyk7XFxuIFxcdFxcdH1cXG4gXFxuQEAgLTI1NjIsNiArMjU2MSw5IEBAIHN0YXRpYyB2b2lkIG5hcnJvd193cml0ZV9lcnJvcihzdHJ1Y3QgcjFiaW8gKnIxX2JpbywgaW50IGkpXFxuIFxcdFxcdH1cXG4gXFxuIFxcdFxcdHdiaW8tXFx1MDAzZWJpX29wZiA9IFJFUV9PUF9XUklURTtcXG4rXFx0XFx0LyogS2VlcCBQMlBETUEgcmV0cnkgYmlvcyB1bm1lcmdlYWJsZSwgbGlrZSB0aGUgb3JpZ2luYWwgKi9cXG4rXFx0XFx0aWYgKG1kX2Jpb19pc19wMnBkbWEod2JpbykpXFxuK1xcdFxcdFxcdHdiaW8tXFx1MDAzZWJpX29wZiB8PSBSRVFfTk9NRVJHRTtcXG4gXFx0XFx0d2Jpby1cXHUwMDNlYmlfaXRlci5iaV9zZWN0b3IgPSByMV9iaW8tXFx1MDAzZXNlY3RvcjtcXG4gXFx0XFx0d2Jpby1cXHUwMDNlYmlfaXRlci5iaV9zaXplID0gcjFfYmlvLVxcdTAwM2VzZWN0b3JzIFxcdTAwM2NcXHUwMDNjIDk7XFxuIFxcbkBAIC0yNjIyLDEwICsyNjI0LDE2IEBAIHN0YXRpYyB2b2lkIGhhbmRsZV93cml0ZV9maW5pc2hlZChzdHJ1Y3QgcjFjb25mICpjb25mLCBzdHJ1Y3QgcjFiaW8gKnIxX2JpbylcXG4gXFx0XFx0XFx0ICogbmFycm93IGRvd24gYW5kIHJlY29yZCBwcmVjaXNlIHdyaXRlXFxuIFxcdFxcdFxcdCAqIGVycm9ycy5cXG4gXFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdHN0cnVjdCBtZF9yZGV2ICpyZGV2ID0gY29uZi1cXHUwMDNlbWlycm9yc1ttXS5yZGV2O1xcbitcXG4gXFx0XFx0XFx0ZmFpbCA9IHRydWU7XFxuLVxcdFxcdFxcdG5hcnJvd193cml0ZV9lcnJvcihyMV9iaW8sIG0pO1xcbi1cXHRcXHRcXHRyZGV2X2RlY19wZW5kaW5nKGNvbmYtXFx1MDAzZW1pcnJvcnNbbV0ucmRldixcXG4tXFx0XFx0XFx0XFx0XFx0IGNvbmYtXFx1MDAzZW1kZGV2KTtcXG4rXFx0XFx0XFx0LyogTWFwcGluZyBmYWlsdXJlcyBhcmUgd2hvbGUtcmFuZ2UgYW5kIGRldGVybWluaXN0aWMgKi9cXG4rXFx0XFx0XFx0aWYgKHIxX2Jpby1cXHUwMDNlYmlvc1ttXS1cXHUwMDNlYmlfc3RhdHVzID09IEJMS19TVFNfUDJQRE1BKVxcbitcXHRcXHRcXHRcXHRyZGV2X3NldF9iYWRibG9ja3MocmRldiwgcjFfYmlvLVxcdTAwM2VzZWN0b3IsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgIHIxX2Jpby1cXHUwMDNlc2VjdG9ycywgMCk7XFxuK1xcdFxcdFxcdGVsc2VcXG4rXFx0XFx0XFx0XFx0bmFycm93X3dyaXRlX2Vycm9yKHIxX2JpbywgbSk7XFxuK1xcdFxcdFxcdHJkZXZfZGVjX3BlbmRpbmcocmRldiwgY29uZi1cXHUwMDNlbWRkZXYpO1xcbiBcXHRcXHR9XFxuIFxcdGlmIChmYWlsKSB7XFxuIFxcdFxcdHNwaW5fbG9ja19pcnEoXFx1MDAyNmNvbmYtXFx1MDAzZWRldmljZV9sb2NrKTtcXG5AQCAtMjY1MCw2ICsyNjU4LDggQEAgc3RhdGljIHZvaWQgaGFuZGxlX3JlYWRfZXJyb3Ioc3RydWN0IHIxY29uZiAqY29uZiwgc3RydWN0IHIxYmlvICpyMV9iaW8pXFxuIHtcXG4gXFx0c3RydWN0IG1kX3JkZXYgKnJkZXYgPSBjb25mLVxcdTAwM2VtaXJyb3JzW3IxX2Jpby1cXHUwMDNlcmVhZF9kaXNrXS5yZGV2O1xcbiBcXHRzdHJ1Y3QgYmlvICpiaW8gPSByMV9iaW8tXFx1MDAzZWJpb3NbcjFfYmlvLVxcdTAwM2VyZWFkX2Rpc2tdO1xcbitcXHQvKiBldmFsdWF0ZSBiZWZvcmUgdGhlIGJpb19wdXQoKSBiZWxvdyAqL1xcbitcXHRib29sIHAycGRtYV9lcnJvciA9IGJpby1cXHUwMDNlYmlfc3RhdHVzID09IEJMS19TVFNfUDJQRE1BO1xcbiBcXHRzdHJ1Y3QgbWRkZXYgKm1kZGV2ID0gY29uZi1cXHUwMDNlbWRkZXY7XFxuIFxcdHNlY3Rvcl90IHNlY3RvcjtcXG4gXFxuQEAgLTI2NjcsNyArMjY3Nyw3IEBAIHN0YXRpYyB2b2lkIGhhbmRsZV9yZWFkX2Vycm9yKHN0cnVjdCByMWNvbmYgKmNvbmYsIHN0cnVjdCByMWJpbyAqcjFfYmlvKVxcbiBcXHQgKiByZWFkIGVycm9yLiAgVGhpcyBpcyBhbGwgZG9uZSBzeW5jaHJvbm91c2x5IHdoaWxlIHRoZSBhcnJheSBpc1xcbiBcXHQgKiBmcm96ZW4uXFxuIFxcdCAqL1xcbi1cXHRpZiAobWRkZXYtXFx1MDAzZXJvKSB7XFxuK1xcdGlmIChtZGRldi1cXHUwMDNlcm8gfHwgcDJwZG1hX2Vycm9yKSB7XFxuIFxcdFxcdHIxX2Jpby1cXHUwMDNlYmlvc1tyMV9iaW8tXFx1MDAzZXJlYWRfZGlza10gPSBJT19CTE9DS0VEO1xcbiBcXHR9IGVsc2UgaWYgKHRlc3RfYml0KEZhaWxGYXN0LCBcXHUwMDI2cmRldi1cXHUwMDNlZmxhZ3MpKSB7XFxuIFxcdFxcdG1kX2Vycm9yKG1kZGV2LCByZGV2KTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9yYWlkMTAuYyBiL2RyaXZlcnMvbWQvcmFpZDEwLmNcXG5pbmRleCAwYTNjZmRkM2Y1ZGY4MC4uZTM1YWVhYzI5ZjA2NDIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9tZC9yYWlkMTAuY1xcbisrKyBiL2RyaXZlcnMvbWQvcmFpZDEwLmNcXG5AQCAtNDgyLDE2ICs0ODIsOCBAQCBzdGF0aWMgdm9pZCByYWlkMTBfZW5kX3dyaXRlX3JlcXVlc3Qoc3RydWN0IGJpbyAqYmlvKVxcbiBcXHRcXHRcXHQgKi9cXG4gXFx0XFx0XFx0bWRfZXJyb3IocmRldi1cXHUwMDNlbWRkZXYsIHJkZXYpO1xcbiBcXHRcXHRlbHNlIHtcXG4tXFx0XFx0XFx0c2V0X2JpdChXcml0ZUVycm9yU2VlbixcXHRcXHUwMDI2cmRldi1cXHUwMDNlZmxhZ3MpO1xcbi1cXHRcXHRcXHRpZiAoIXRlc3RfYW5kX3NldF9iaXQoV2FudFJlcGxhY2VtZW50LCBcXHUwMDI2cmRldi1cXHUwMDNlZmxhZ3MpKVxcbi1cXHRcXHRcXHRcXHRzZXRfYml0KE1EX1JFQ09WRVJZX05FRURFRCxcXG4tXFx0XFx0XFx0XFx0XFx0XFx1MDAyNnJkZXYtXFx1MDAzZW1kZGV2LVxcdTAwM2VyZWNvdmVyeSk7XFxuLVxcbiBcXHRcXHRcXHRkZWNfcmRldiA9IDA7XFxuLVxcdFxcdFxcdGlmICh0ZXN0X2JpdChGYWlsRmFzdCwgXFx1MDAyNnJkZXYtXFx1MDAzZWZsYWdzKSBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHRcXHQgICAgKGJpby1cXHUwMDNlYmlfb3BmIFxcdTAwMjYgTURfRkFJTEZBU1QpKSB7XFxuLVxcdFxcdFxcdFxcdG1kX2Vycm9yKHJkZXYtXFx1MDAzZW1kZGV2LCByZGV2KTtcXG4tXFx0XFx0XFx0fVxcbitcXHRcXHRcXHRyYWlkMV93cml0ZV9lcnJvcihyZGV2LVxcdTAwM2VtZGRldiwgcmRldiwgYmlvLCB0cnVlKTtcXG4gXFxuIFxcdFxcdFxcdC8qXFxuIFxcdFxcdFxcdCAqIFdoZW4gdGhlIGRldmljZSBpcyBmYXVsdHksIGl0IGlzIG5vdCBuZWNlc3NhcnkgdG9cXG5AQCAtMjgzMSw2ICsyODIzLDkgQEAgc3RhdGljIHZvaWQgbmFycm93X3dyaXRlX2Vycm9yKHN0cnVjdCByMTBiaW8gKnIxMF9iaW8sIGludCBpKVxcbiBcXHRcXHR3YmlvLVxcdTAwM2ViaV9pdGVyLmJpX3NlY3RvciA9IHdzZWN0b3IgK1xcbiBcXHRcXHRcXHRcXHQgICBjaG9vc2VfZGF0YV9vZmZzZXQocjEwX2JpbywgcmRldik7XFxuIFxcdFxcdHdiaW8tXFx1MDAzZWJpX29wZiA9IFJFUV9PUF9XUklURTtcXG4rXFx0XFx0LyogS2VlcCBQMlBETUEgcmV0cnkgYmlvcyB1bm1lcmdlYWJsZSwgbGlrZSB0aGUgb3JpZ2luYWwgKi9cXG4rXFx0XFx0aWYgKG1kX2Jpb19pc19wMnBkbWEod2JpbykpXFxuK1xcdFxcdFxcdHdiaW8tXFx1MDAzZWJpX29wZiB8PSBSRVFfTk9NRVJHRTtcXG4gXFxuIFxcdFxcdGlmIChzdWJtaXRfYmlvX3dhaXQod2JpbykgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0ICAgICFyZGV2X3NldF9iYWRibG9ja3MocmRldiwgd3NlY3Rvciwgc2VjdG9ycywgMCkpIHtcXG5AQCAtMjg1Myw2ICsyODQ4LDcgQEAgc3RhdGljIHZvaWQgaGFuZGxlX3JlYWRfZXJyb3Ioc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IHIxMGJpbyAqcjEwX2JpbylcXG4ge1xcbiBcXHRpbnQgc2xvdCA9IHIxMF9iaW8tXFx1MDAzZXJlYWRfc2xvdDtcXG4gXFx0c3RydWN0IGJpbyAqYmlvO1xcbitcXHRib29sIHAycGRtYV9lcnJvcjtcXG4gXFx0c3RydWN0IHIxMGNvbmYgKmNvbmYgPSBtZGRldi1cXHUwMDNlcHJpdmF0ZTtcXG4gXFx0c3RydWN0IG1kX3JkZXYgKnJkZXYgPSByMTBfYmlvLVxcdTAwM2VkZXZzW3Nsb3RdLnJkZXY7XFxuIFxcbkBAIC0yODY1LDEwICsyODYxLDEyIEBAIHN0YXRpYyB2b2lkIGhhbmRsZV9yZWFkX2Vycm9yKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCByMTBiaW8gKnIxMF9iaW8pXFxuIFxcdCAqIGZyb3plbi5cXG4gXFx0ICovXFxuIFxcdGJpbyA9IHIxMF9iaW8tXFx1MDAzZWRldnNbc2xvdF0uYmlvO1xcbitcXHQvKiBldmFsdWF0ZSBiZWZvcmUgdGhlIGJpb19wdXQoKSBiZWxvdyAqL1xcbitcXHRwMnBkbWFfZXJyb3IgPSBiaW8tXFx1MDAzZWJpX3N0YXR1cyA9PSBCTEtfU1RTX1AyUERNQTtcXG4gXFx0YmlvX3B1dChiaW8pO1xcbiBcXHRyMTBfYmlvLVxcdTAwM2VkZXZzW3Nsb3RdLmJpbyA9IE5VTEw7XFxuIFxcbi1cXHRpZiAobWRkZXYtXFx1MDAzZXJvKVxcbitcXHRpZiAobWRkZXYtXFx1MDAzZXJvIHx8IHAycGRtYV9lcnJvcilcXG4gXFx0XFx0cjEwX2Jpby1cXHUwMDNlZGV2c1tzbG90XS5iaW8gPSBJT19CTE9DS0VEO1xcbiBcXHRlbHNlIGlmICghdGVzdF9iaXQoRmFpbEZhc3QsIFxcdTAwMjZyZGV2LVxcdTAwM2VmbGFncykpIHtcXG4gXFx0XFx0ZnJlZXplX2FycmF5KGNvbmYsIDEpO1xcbkBAIC0yOTQ1LDcgKzI5NDMsMTMgQEAgc3RhdGljIHZvaWQgaGFuZGxlX3dyaXRlX2NvbXBsZXRlZChzdHJ1Y3QgcjEwY29uZiAqY29uZiwgc3RydWN0IHIxMGJpbyAqcjEwX2JpbylcXG4gXFx0XFx0XFx0XFx0cmRldl9kZWNfcGVuZGluZyhyZGV2LCBjb25mLVxcdTAwM2VtZGRldik7XFxuIFxcdFxcdFxcdH0gZWxzZSBpZiAoYmlvICE9IE5VTEwgXFx1MDAyNlxcdTAwMjYgYmlvLVxcdTAwM2ViaV9zdGF0dXMpIHtcXG4gXFx0XFx0XFx0XFx0ZmFpbCA9IHRydWU7XFxuLVxcdFxcdFxcdFxcdG5hcnJvd193cml0ZV9lcnJvcihyMTBfYmlvLCBtKTtcXG4rXFx0XFx0XFx0XFx0LyogTWFwcGluZyBmYWlsdXJlcyBhcmUgd2hvbGUtcmFuZ2UgYW5kIGRldGVybWluaXN0aWMgKi9cXG4rXFx0XFx0XFx0XFx0aWYgKGJpby1cXHUwMDNlYmlfc3RhdHVzID09IEJMS19TVFNfUDJQRE1BKVxcbitcXHRcXHRcXHRcXHRcXHRyZGV2X3NldF9iYWRibG9ja3MocmRldixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgcjEwX2Jpby1cXHUwMDNlZGV2c1ttXS5hZGRyLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICByMTBfYmlvLVxcdTAwM2VzZWN0b3JzLCAwKTtcXG4rXFx0XFx0XFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRcXHRcXHRuYXJyb3dfd3JpdGVfZXJyb3IocjEwX2JpbywgbSk7XFxuIFxcdFxcdFxcdFxcdHJkZXZfZGVjX3BlbmRpbmcocmRldiwgY29uZi1cXHUwMDNlbWRkZXYpO1xcbiBcXHRcXHRcXHR9XFxuIFxcdFxcdFxcdGJpbyA9IHIxMF9iaW8tXFx1MDAzZWRldnNbbV0ucmVwbF9iaW87XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbnZtZS9ob3N0L3JkbWEuYyBiL2RyaXZlcnMvbnZtZS9ob3N0L3JkbWEuY1xcbmluZGV4IDY5MDllMzU0Mjc5NDI3Li4yZjUwNTA5YTdhNjE2MCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL252bWUvaG9zdC9yZG1hLmNcXG4rKysgYi9kcml2ZXJzL252bWUvaG9zdC9yZG1hLmNcXG5AQCAtMTQ2OSw2ICsxNDY5LDcgQEAgc3RhdGljIGludCBudm1lX3JkbWFfZG1hX21hcF9yZXEoc3RydWN0IGliX2RldmljZSAqaWJkZXYsIHN0cnVjdCByZXF1ZXN0ICpycSxcXG4gXFx0XFx0aW50ICpjb3VudCwgaW50ICpwaV9jb3VudClcXG4ge1xcbiBcXHRzdHJ1Y3QgbnZtZV9yZG1hX3JlcXVlc3QgKnJlcSA9IGJsa19tcV9ycV90b19wZHUocnEpO1xcbitcXHRzdHJ1Y3Qgc2dfdGFibGUgc2d0O1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4gXFx0cmVxLVxcdTAwM2VkYXRhX3NnbC5zZ190YWJsZS5zZ2wgPSAoc3RydWN0IHNjYXR0ZXJsaXN0ICopKHJlcSArIDEpO1xcbkBAIC0xNDgwLDEyICsxNDgxLDE0IEBAIHN0YXRpYyBpbnQgbnZtZV9yZG1hX2RtYV9tYXBfcmVxKHN0cnVjdCBpYl9kZXZpY2UgKmliZGV2LCBzdHJ1Y3QgcmVxdWVzdCAqcnEsXFxuIFxcbiBcXHRyZXEtXFx1MDAzZWRhdGFfc2dsLm5lbnRzID0gYmxrX3JxX21hcF9zZyhycSwgcmVxLVxcdTAwM2VkYXRhX3NnbC5zZ190YWJsZS5zZ2wpO1xcbiBcXG4tXFx0KmNvdW50ID0gaWJfZG1hX21hcF9zZyhpYmRldiwgcmVxLVxcdTAwM2VkYXRhX3NnbC5zZ190YWJsZS5zZ2wsXFxuLVxcdFxcdFxcdCAgICAgICByZXEtXFx1MDAzZWRhdGFfc2dsLm5lbnRzLCBycV9kbWFfZGlyKHJxKSk7XFxuLVxcdGlmICh1bmxpa2VseSgqY291bnQgXFx1MDAzYz0gMCkpIHtcXG4tXFx0XFx0cmV0ID0gLUVJTztcXG4rXFx0c2d0ID0gKHN0cnVjdCBzZ190YWJsZSkge1xcbitcXHRcXHQuc2dsXFx0XFx0PSByZXEtXFx1MDAzZWRhdGFfc2dsLnNnX3RhYmxlLnNnbCxcXG4rXFx0XFx0Lm9yaWdfbmVudHNcXHQ9IHJlcS1cXHUwMDNlZGF0YV9zZ2wubmVudHMsXFxuK1xcdH07XFxuK1xcdHJldCA9IGliX2RtYV9tYXBfc2d0YWJsZV9hdHRycyhpYmRldiwgXFx1MDAyNnNndCwgcnFfZG1hX2RpcihycSksIDApO1xcbitcXHRpZiAodW5saWtlbHkocmV0KSlcXG4gXFx0XFx0Z290byBvdXRfZnJlZV90YWJsZTtcXG4tXFx0fVxcbitcXHQqY291bnQgPSBzZ3QubmVudHM7XFxuIFxcbiBcXHRpZiAoYmxrX2ludGVncml0eV9ycShycSkpIHtcXG4gXFx0XFx0cmVxLVxcdTAwM2VtZXRhZGF0YV9zZ2wtXFx1MDAzZXNnX3RhYmxlLnNnbCA9XFxuQEAgLTE1MDEsMTQgKzE1MDQsMTQgQEAgc3RhdGljIGludCBudm1lX3JkbWFfZG1hX21hcF9yZXEoc3RydWN0IGliX2RldmljZSAqaWJkZXYsIHN0cnVjdCByZXF1ZXN0ICpycSxcXG4gXFxuIFxcdFxcdHJlcS1cXHUwMDNlbWV0YWRhdGFfc2dsLVxcdTAwM2VuZW50cyA9IGJsa19ycV9tYXBfaW50ZWdyaXR5X3NnKHJxLFxcbiBcXHRcXHRcXHRcXHRyZXEtXFx1MDAzZW1ldGFkYXRhX3NnbC1cXHUwMDNlc2dfdGFibGUuc2dsKTtcXG4tXFx0XFx0KnBpX2NvdW50ID0gaWJfZG1hX21hcF9zZyhpYmRldixcXG4tXFx0XFx0XFx0XFx0XFx0ICByZXEtXFx1MDAzZW1ldGFkYXRhX3NnbC1cXHUwMDNlc2dfdGFibGUuc2dsLFxcbi1cXHRcXHRcXHRcXHRcXHQgIHJlcS1cXHUwMDNlbWV0YWRhdGFfc2dsLVxcdTAwM2VuZW50cyxcXG4tXFx0XFx0XFx0XFx0XFx0ICBycV9kbWFfZGlyKHJxKSk7XFxuLVxcdFxcdGlmICh1bmxpa2VseSgqcGlfY291bnQgXFx1MDAzYz0gMCkpIHtcXG4tXFx0XFx0XFx0cmV0ID0gLUVJTztcXG4rXFx0XFx0c2d0ID0gKHN0cnVjdCBzZ190YWJsZSkge1xcbitcXHRcXHRcXHQuc2dsXFx0XFx0PSByZXEtXFx1MDAzZW1ldGFkYXRhX3NnbC1cXHUwMDNlc2dfdGFibGUuc2dsLFxcbitcXHRcXHRcXHQub3JpZ19uZW50c1xcdD0gcmVxLVxcdTAwM2VtZXRhZGF0YV9zZ2wtXFx1MDAzZW5lbnRzLFxcbitcXHRcXHR9O1xcbitcXHRcXHRyZXQgPSBpYl9kbWFfbWFwX3NndGFibGVfYXR0cnMoaWJkZXYsIFxcdTAwMjZzZ3QsIHJxX2RtYV9kaXIocnEpLCAwKTtcXG4rXFx0XFx0aWYgKHVubGlrZWx5KHJldCkpXFxuIFxcdFxcdFxcdGdvdG8gb3V0X2ZyZWVfcGlfdGFibGU7XFxuLVxcdFxcdH1cXG4rXFx0XFx0KnBpX2NvdW50ID0gc2d0Lm5lbnRzO1xcbiBcXHR9XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG5AQCAtMjAyNiw4ICsyMDI5LDYgQEAgc3RhdGljIGJsa19zdGF0dXNfdCBudm1lX3JkbWFfcXVldWVfcnEoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsXFxuIFxcdGlmIChyZXQpXFxuIFxcdFxcdGdvdG8gdW5tYXBfcWU7XFxuIFxcbi1cXHRudm1lX3N0YXJ0X3JlcXVlc3QocnEpO1xcbi1cXG4gXFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0JMS19ERVZfSU5URUdSSVRZKSBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAgcXVldWUtXFx1MDAzZXBpX3N1cHBvcnQgXFx1MDAyNlxcdTAwMjZcXG4gXFx0ICAgIChjLVxcdTAwM2Vjb21tb24ub3Bjb2RlID09IG52bWVfY21kX3dyaXRlIHx8XFxuQEAgLTIwMzksMTEgKzIwNDAsMTMgQEAgc3RhdGljIGJsa19zdGF0dXNfdCBudm1lX3JkbWFfcXVldWVfcnEoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsXFxuIFxcbiBcXHRlcnIgPSBudm1lX3JkbWFfbWFwX2RhdGEocXVldWUsIHJxLCBjKTtcXG4gXFx0aWYgKHVubGlrZWx5KGVyciBcXHUwMDNjIDApKSB7XFxuLVxcdFxcdGRldl9lcnIocXVldWUtXFx1MDAzZWN0cmwtXFx1MDAzZWN0cmwuZGV2aWNlLFxcbi1cXHRcXHRcXHQgICAgIFxcXCJGYWlsZWQgdG8gbWFwIGRhdGEgKCVkKVxcXFxuXFxcIiwgZXJyKTtcXG4rXFx0XFx0ZGV2X2Vycl9yYXRlbGltaXRlZChxdWV1ZS1cXHUwMDNlY3RybC1cXHUwMDNlY3RybC5kZXZpY2UsXFxuK1xcdFxcdFxcdFxcdCAgICBcXFwiRmFpbGVkIHRvIG1hcCBkYXRhICglZClcXFxcblxcXCIsIGVycik7XFxuIFxcdFxcdGdvdG8gZXJyO1xcbiBcXHR9XFxuIFxcbitcXHRudm1lX3N0YXJ0X3JlcXVlc3QocnEpO1xcbitcXG4gXFx0c3FlLVxcdTAwM2VjcWUuZG9uZSA9IG52bWVfcmRtYV9zZW5kX2RvbmU7XFxuIFxcbiBcXHRpYl9kbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShkZXYsIHNxZS1cXHUwMDNlZG1hLFxcbkBAIC0yMDYzLDYgKzIwNjYsOSBAQCBzdGF0aWMgYmxrX3N0YXR1c190IG52bWVfcmRtYV9xdWV1ZV9ycShzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eCxcXG4gXFx0XFx0cmV0ID0gbnZtZV9ob3N0X3BhdGhfZXJyb3IocnEpO1xcbiBcXHRlbHNlIGlmIChlcnIgPT0gLUVOT01FTSB8fCBlcnIgPT0gLUVBR0FJTilcXG4gXFx0XFx0cmV0ID0gQkxLX1NUU19SRVNPVVJDRTtcXG4rXFx0LyogUGVlciBtZW1vcnkgdW5yZWFjaGFibGUgZnJvbSB0aGlzIGRldmljZTogZG9uJ3QgcmV0cnkuICovXFxuK1xcdGVsc2UgaWYgKGVyciA9PSAtRVJFTU9URUlPKVxcbitcXHRcXHRyZXQgPSBCTEtfU1RTX1AyUERNQTtcXG4gXFx0ZWxzZVxcbiBcXHRcXHRyZXQgPSBCTEtfU1RTX0lPRVJSO1xcbiBcXHRudm1lX2NsZWFudXBfY21kKHJxKTtcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ibGtfdHlwZXMuaCBiL2luY2x1ZGUvbGludXgvYmxrX3R5cGVzLmhcXG5pbmRleCA4ODA4ZWU3NmU3M2MwOS4uYzhkZTc4MDkzMjBhZDQgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9ibGtfdHlwZXMuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvYmxrX3R5cGVzLmhcXG5AQCAtMTY1LDYgKzE2NSwxNSBAQCB0eXBlZGVmIHUxNiBibGtfc2hvcnRfdDtcXG4gICovXFxuICNkZWZpbmUgQkxLX1NUU19EVVJBVElPTl9MSU1JVFxcdCgoX19mb3JjZSBibGtfc3RhdHVzX3QpMTcpXFxuIFxcbisvKlxcbisgKiBCTEtfU1RTX1AyUERNQSBpcyByZXR1cm5lZCB3aGVuIGEgcGVlci10by1wZWVyIERNQSB0cmFuc2ZlciBjYW5ub3QgYmVcXG4rICogbWFwcGVkICh0eXBpY2FsbHkgYmVjYXVzZSB0aGVyZSBpcyBubyByb3V0ZSBiZXR3ZWVuIHRoZSBpbml0aWF0b3IgYW5kIHRoZVxcbisgKiB0YXJnZXQgdGhhdCB0aGUgcGxhdGZvcm0ncyBQQ0llIHRvcG9sb2d5IGFuZCBBQ1Mgc2V0dGluZ3MgYWxsb3cpLiBUaGlzXFxuKyAqIGlzIGEgcHJvcGVydHkgb2YgdGhlIGluaXRpYXRvci90YXJnZXQgcGFpciwgbm90IG9mIHRoZSB0YXJnZXQgZGV2aWNlJ3NcXG4rICogaGVhbHRoLiBUaGlzIGVycm9yIHNob3VsZCBuZXZlciBiZSByZXRyaWVkLlxcbisgKi9cXG4rI2RlZmluZSBCTEtfU1RTX1AyUERNQVxcdCgoX19mb3JjZSBibGtfc3RhdHVzX3QpMTgpXFxuK1xcbiAvKlxcbiAgKiBJbnZhbGlkIHNpemUgb3IgYWxpZ25tZW50LlxcbiAgKi9cXG5AQCAtMTg4LDYgKzE5Nyw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBibGtfcGF0aF9lcnJvcihibGtfc3RhdHVzX3QgZXJyb3IpXFxuIFxcdGNhc2UgQkxLX1NUU19OT1RTVVBQOlxcbiBcXHRjYXNlIEJMS19TVFNfTk9TUEM6XFxuIFxcdGNhc2UgQkxLX1NUU19UQVJHRVQ6XFxuK1xcdGNhc2UgQkxLX1NUU19QMlBETUE6XFxuIFxcdGNhc2UgQkxLX1NUU19SRVNWX0NPTkZMSUNUOlxcbiBcXHRjYXNlIEJMS19TVFNfTUVESVVNOlxcbiBcXHRjYXNlIEJMS19TVFNfUFJPVEVDVElPTjpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMjE6MzM6MDkuMjI2NTE1Nzc2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTAwMDc3MzUxOTE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1EX1JBSUQxXCIsXG4gICAgXCJNRF9SQUlEMTBcIixcbiAgICBcIk5WTUVfUkRNQVwiLFxuICAgIFwiUENJX1AyUERNQVwiLFxuICAgIFwiTlZNRV9UQVJHRVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyYWlkMV93cml0ZV9lcnJvclwiLFxuICAgIFwibmFycm93X3dyaXRlX2Vycm9yXCIsXG4gICAgXCJoYW5kbGVfd3JpdGVfZmluaXNoZWRcIixcbiAgICBcImhhbmRsZV93cml0ZV9jb21wbGV0ZWRcIixcbiAgICBcImhhbmRsZV9yZWFkX2Vycm9yXCIsXG4gICAgXCJudm1lX3JkbWFfZG1hX21hcF9yZXFcIixcbiAgICBcIm52bWVfcmRtYV9xdWV1ZV9ycVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgaGFuZGxpbmcgZm9yIEJMS19TVFNfUDJQRE1BIGVycm9ycyBpbiB0aGUgYmxvY2sgbGF5ZXIsIE1EIFJBSUQgKFJBSUQxL1JBSUQxMCksIGFuZCBOVk1lIFJETUEuIEl0IG1vZGlmaWVzIGVycm9yIGhhbmRsaW5nIHBhdGhzIGluIE1EIFJBSUQgdG8gcHJvcGVybHkgaGFuZGxlIFAyUERNQSBtYXBwaW5nIGZhaWx1cmVzIGJ5IHNldHRpbmcgYmFkYmxvY2tzIG9yIGJsb2NraW5nIHJlYWRzIGluc3RlYWQgb2YgZmFpbGluZyB0aGUgdW5kZXJseWluZyBkZXZpY2UuIEl0IGFsc28gbW9kaWZpZXMgTlZNZSBSRE1BIHRvIHVzZSBpYl9kbWFfbWFwX3NndGFibGVfYXR0cnMgYW5kIHJldHVybiBCTEtfU1RTX1AyUERNQSBvbiBtYXBwaW5nIGZhaWx1cmVzLiBUaGVzZSBjaGFuZ2VzIGFyZSBmdW5jdGlvbmFsbHkgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBieSBjb25maWd1cmluZyBOVk1lIHRhcmdldHMgd2l0aCBQMlAgbWVtb3J5IGJhY2tlZCBieSBNRCBhcnJheXMsIG9yIGJ5IHVzaW5nIE5WTWUgUkRNQSBvdmVyIHNvZnR3YXJlIFJETUEgZGV2aWNlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzNzFlZDYwM2ViZDdhNjgzNzZiYjgyMGVmOGRlMDdhY2JmNzM1NWRlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgMjMgMjE6MzM6MDcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9ibG9jay9ibGstY29yZS5jIGIvYmxvY2svYmxrLWNvcmUuY1xuaW5kZXggMzY1NjQxMjY2YzllODIuLjgzY2I1NDY0MjY1ZmI2IDEwMDY0NFxuLS0tIGEvYmxvY2svYmxrLWNvcmUuY1xuKysrIGIvYmxvY2svYmxrLWNvcmUuY1xuQEAgLTE3Nyw2ICsxNzcsOSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHtcbiBcbiBcdC8qIENvbW1hbmQgZHVyYXRpb24gbGltaXQgZGV2aWNlLXNpZGUgdGltZW91dCAqL1xuIFx0RU5UKERVUkFUSU9OX0xJTUlULFx0LUVUSU1FLFx0XHRcImR1cmF0aW9uIGxpbWl0IGV4Y2VlZGVkXCIpLFxuK1xuK1x0Lyogbm8gUENJZSBQMlBETUEgcm91dGUgYmV0d2VlbiBpbml0aWF0b3IgYW5kIHRhcmdldCAqL1xuK1x0RU5UKFAyUERNQSxcdFx0LUVSRU1PVEVJTyxcdFwicGVlci10by1wZWVyIHRyYW5zZmVyIHVucm91dGFibGVcIiksXG4gXHRFTlQoSU5WQUwsXHRcdC1FSU5WQUwsXHRcImludmFsaWRcIiksXG4gXG4gXHQvKiBldmVyeXRoaW5nIGVsc2Ugbm90IGNvdmVyZWQgYWJvdmU6ICovXG5kaWZmIC0tZ2l0IGEvYmxvY2svYmxrLW1xLWRtYS5jIGIvYmxvY2svYmxrLW1xLWRtYS5jXG5pbmRleCBiZmRiOWVkNzA3NDExNi4uZTg4ZDZiMzUyNGU2YWQgMTAwNjQ0XG4tLS0gYS9ibG9jay9ibGstbXEtZG1hLmNcbisrKyBiL2Jsb2NrL2Jsay1tcS1kbWEuY1xuQEAgLTE4OSw4ICsxODksOSBAQCBzdGF0aWMgYm9vbCBibGtfZG1hX21hcF9pdGVyX3N0YXJ0KHN0cnVjdCByZXF1ZXN0ICpyZXEsIHN0cnVjdCBkZXZpY2UgKmRtYV9kZXYsXG4gXHRcdCAqL1xuIFx0Y2FzZSBQQ0lfUDJQRE1BX01BUF9OT05FOlxuIFx0XHRicmVhaztcbitcdGNhc2UgUENJX1AyUERNQV9NQVBfTk9UX1NVUFBPUlRFRDpcbiBcdGRlZmF1bHQ6XG4tXHRcdGl0ZXItXHUwMDNlc3RhdHVzID0gQkxLX1NUU19JTlZBTDtcbitcdFx0aXRlci1cdTAwM2VzdGF0dXMgPSBCTEtfU1RTX1AyUERNQTtcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFx0fVxuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvbWQuYyBiL2RyaXZlcnMvbWQvbWQuY1xuaW5kZXggZDE0NjViY2Q4NmM4MTIuLjM3NzBiZGI0ZDRiMjhiIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9tZC9tZC5jXG4rKysgYi9kcml2ZXJzL21kL21kLmNcbkBAIC00NTEsOCArNDUxLDE0IEBAIHN0YXRpYyB2b2lkIG1kX3N1Ym1pdF9iaW8oc3RydWN0IGJpbyAqYmlvKVxuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG4tXHQvKiBiaW8gY291bGQgYmUgbWVyZ2VhYmxlIGFmdGVyIHBhc3NpbmcgdG8gdW5kZXJsYXllciAqL1xuLVx0YmlvLVx1MDAzZWJpX29wZiBcdTAwMjY9IH5SRVFfTk9NRVJHRTtcbitcdC8qXG4rXHQgKiBBIGJpbyBtZCBzcGxpdCBtYXkgbWVyZ2UgYWdhaW4gYmVsb3cgbWQgLS0gZXhjZXB0IFAyUERNQSBiaW9zLFxuK1x0ICogd2hpY2ggbXVzdCBzdGF5IHNpbmdsZS1wcm92aWRlciAoc2VlIF9fYmlvX2FkZF9wYWdlKCkpLlxuK1x0ICovXG4rXHRpZiAobWRfYmlvX2lzX3AycGRtYShiaW8pKVxuK1x0XHRiaW8tXHUwMDNlYmlfb3BmIHw9IFJFUV9OT01FUkdFO1xuK1x0ZWxzZVxuK1x0XHRiaW8tXHUwMDNlYmlfb3BmIFx1MDAyNj0gflJFUV9OT01FUkdFO1xuIFxuIFx0bWRfaGFuZGxlX3JlcXVlc3QobWRkZXYsIGJpbyk7XG4gfVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvbWQuaCBiL2RyaXZlcnMvbWQvbWQuaFxuaW5kZXggZDhkYWYwZjc1Y2JiZTguLjczZGYxYTZlY2NkODUwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9tZC9tZC5oXG4rKysgYi9kcml2ZXJzL21kL21kLmhcbkBAIC0xMSw4ICsxMSwxMCBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Jsa2Rldi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYmFja2luZy1kZXYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JhZGJsb2Nrcy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvYmlvLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rb2JqZWN0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9saXN0LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1yZW1hcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbW0uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L211dGV4LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC90aW1lci5oXHUwMDNlXG5AQCAtMjIsNiArMjQsMTkgQEBcbiAjaW5jbHVkZSBcdTAwM2N0cmFjZS9ldmVudHMvYmxvY2suaFx1MDAzZVxuIFxuICNkZWZpbmUgTWF4U2VjdG9yICh+KHNlY3Rvcl90KTApXG4rXG4rLypcbisgKiBQMlAgYW5kIGhvc3QgcGFnZXMgbmV2ZXIgbWl4IHdpdGhpbiBhIGJpbywgc28gdGhlIGZpcnN0IGJ2ZWMgaXNcbisgKiByZXByZXNlbnRhdGl2ZS4gIFJlYWQgYmlfaW9fdmVjIGRpcmVjdGx5OiBiaW9fZmlyc3RfYnZlY19hbGwoKVxuKyAqIFdBUk5zIG9uIHRoZSBzcGxpdCBjbG9uZXMgbWQgaGFuZGxlcywgYW5kIGRhdGEtbGVzcyBiaW9zIGhhdmUgbm9cbisgKiBiaV9pb192ZWMuICBOb3QgdmFsaWQgYWZ0ZXIgdGhlIGJpbydzIGl0ZXJhdG9yIGlzIGNvbnN1bWVkLlxuKyAqL1xuK3N0YXRpYyBpbmxpbmUgYm9vbCBtZF9iaW9faXNfcDJwZG1hKHN0cnVjdCBiaW8gKmJpbylcbit7XG4rXHRyZXR1cm4gYmlvX2hhc19kYXRhKGJpbykgXHUwMDI2XHUwMDI2IGJpby1cdTAwM2ViaV9pb192ZWMgXHUwMDI2XHUwMDI2XG4rXHQgICAgICAgaXNfcGNpX3AycGRtYV9wYWdlKGJpby1cdTAwM2ViaV9pb192ZWMtXHUwMDNlYnZfcGFnZSk7XG4rfVxuK1xuIC8qXG4gICogTnVtYmVyIG9mIGd1YXJhbnRlZWQgcmFpZCBiaW9zIGluIGNhc2Ugb2YgZXh0cmVtZSBWTSBsb2FkOlxuICAqL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvcmFpZDEtMTAuYyBiL2RyaXZlcnMvbWQvcmFpZDEtMTAuY1xuaW5kZXggNTZhNTZhNGRhNGY4M2YuLjg5ZGFmODU1ODI1MWZhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9tZC9yYWlkMS0xMC5jXG4rKysgYi9kcml2ZXJzL21kL3JhaWQxLTEwLmNcbkBAIC0zMDMsMyArMzAzLDE5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCByYWlkMV9zaG91bGRfaGFuZGxlX2Vycm9yKHN0cnVjdCBiaW8gKmJpbylcbiBcdHJldHVybiAhKGJpby1cdTAwM2ViaV9vcGYgXHUwMDI2IChSRVFfUkFIRUFEIHwgUkVRX05PV0FJVCkpIFx1MDAyNlx1MDAyNlxuIFx0XHRiaW8tXHUwMDNlYmlfc3RhdHVzICE9IEJMS19TVFNfSU5WQUw7XG4gfVxuK1xuK3N0YXRpYyBpbmxpbmUgdm9pZCByYWlkMV93cml0ZV9lcnJvcihzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWRfcmRldiAqcmRldixcbitcdFx0XHRcdCAgICAgc3RydWN0IGJpbyAqYmlvLCBib29sIGFsbG93X2ZhaWxmYXN0KVxuK3tcbitcdHNldF9iaXQoV3JpdGVFcnJvclNlZW4sIFx1MDAyNnJkZXYtXHUwMDNlZmxhZ3MpO1xuK1xuK1x0aWYgKGJpby1cdTAwM2ViaV9zdGF0dXMgPT0gQkxLX1NUU19QMlBETUEpXG4rXHRcdHJldHVybjtcbitcbitcdGlmICghdGVzdF9hbmRfc2V0X2JpdChXYW50UmVwbGFjZW1lbnQsIFx1MDAyNnJkZXYtXHUwMDNlZmxhZ3MpKVxuK1x0XHRzZXRfYml0KE1EX1JFQ09WRVJZX05FRURFRCwgXHUwMDI2bWRkZXYtXHUwMDNlcmVjb3ZlcnkpO1xuK1xuK1x0aWYgKGFsbG93X2ZhaWxmYXN0IFx1MDAyNlx1MDAyNiB0ZXN0X2JpdChGYWlsRmFzdCwgXHUwMDI2cmRldi1cdTAwM2VmbGFncykgXHUwMDI2XHUwMDI2XG4rXHQgICAgKGJpby1cdTAwM2ViaV9vcGYgXHUwMDI2IE1EX0ZBSUxGQVNUKSlcbitcdFx0bWRfZXJyb3IobWRkZXYsIHJkZXYpO1xuK31cbmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3JhaWQxLmMgYi9kcml2ZXJzL21kL3JhaWQxLmNcbmluZGV4IGFmZTJjYTk2YWQ4YzIyLi43NmExNDI2ZTY0ZjAyZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbWQvcmFpZDEuY1xuKysrIGIvZHJpdmVycy9tZC9yYWlkMS5jXG5AQCAtNDgzLDE3ICs0ODMsOCBAQCBzdGF0aWMgdm9pZCByYWlkMV9lbmRfd3JpdGVfcmVxdWVzdChzdHJ1Y3QgYmlvICpiaW8pXG4gXHQgKiAnb25lIG1pcnJvciBJTyBoYXMgZmluaXNoZWQnIGV2ZW50IGhhbmRsZXI6XG4gXHQgKi9cbiBcdGlmIChiaW8tXHUwMDNlYmlfc3RhdHVzIFx1MDAyNlx1MDAyNiAhaWdub3JlX2Vycm9yKSB7XG4tXHRcdHNldF9iaXQoV3JpdGVFcnJvclNlZW4sXHRcdTAwMjZyZGV2LVx1MDAzZWZsYWdzKTtcbi1cdFx0aWYgKCF0ZXN0X2FuZF9zZXRfYml0KFdhbnRSZXBsYWNlbWVudCwgXHUwMDI2cmRldi1cdTAwM2VmbGFncykpXG4tXHRcdFx0c2V0X2JpdChNRF9SRUNPVkVSWV9ORUVERUQsIFx1MDAyNlxuLVx0XHRcdFx0Y29uZi1cdTAwM2VtZGRldi1cdTAwM2VyZWNvdmVyeSk7XG4tXG4tXHRcdGlmICh0ZXN0X2JpdChGYWlsRmFzdCwgXHUwMDI2cmRldi1cdTAwM2VmbGFncykgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICAoYmlvLVx1MDAzZWJpX29wZiBcdTAwMjYgTURfRkFJTEZBU1QpIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgLyogV2UgbmV2ZXIgdHJ5IEZhaWxGYXN0IHRvIFdyaXRlTW9zdGx5IGRldmljZXMgKi9cbi1cdFx0ICAgICF0ZXN0X2JpdChXcml0ZU1vc3RseSwgXHUwMDI2cmRldi1cdTAwM2VmbGFncykpIHtcbi1cdFx0XHRtZF9lcnJvcihyMV9iaW8tXHUwMDNlbWRkZXYsIHJkZXYpO1xuLVx0XHR9XG4rXHRcdHJhaWQxX3dyaXRlX2Vycm9yKGNvbmYtXHUwMDNlbWRkZXYsIHJkZXYsIGJpbyxcbitcdFx0XHRcdCAgIXRlc3RfYml0KFdyaXRlTW9zdGx5LCBcdTAwMjZyZGV2LVx1MDAzZWZsYWdzKSk7XG4gXG4gXHRcdC8qXG4gXHRcdCAqIFdoZW4gdGhlIGRldmljZSBpcyBmYXVsdHksIGl0IGlzIG5vdCBuZWNlc3NhcnkgdG9cbkBAIC01NjQsNyArNTU1LDcgQEAgc3RhdGljIHZvaWQgcmFpZDFfZW5kX3dyaXRlX3JlcXVlc3Qoc3RydWN0IGJpbyAqYmlvKVxuIFx0XHRcdFx0Y2FsbF9iaW9fZW5kaW8ocjFfYmlvKTtcbiBcdFx0XHR9XG4gXHRcdH1cbi1cdH0gZWxzZSBpZiAodGVzdF9iaXQoTURfU0VSSUFMSVpFX1BPTElDWSwgXHUwMDI2cmRldi1cdTAwM2VtZGRldi1cdTAwM2VmbGFncykpXG4rXHR9IGVsc2UgaWYgKHRlc3RfYml0KENvbGxpc2lvbkNoZWNrLCBcdTAwMjZyZGV2LVx1MDAzZWZsYWdzKSlcbiBcdFx0cmVtb3ZlX3NlcmlhbChyZGV2LCBsbywgaGkpO1xuIFx0aWYgKHIxX2Jpby1cdTAwM2ViaW9zW21pcnJvcl0gPT0gTlVMTClcbiBcdFx0cmRldl9kZWNfcGVuZGluZyhyZGV2LCBjb25mLVx1MDAzZW1kZGV2KTtcbkBAIC0xNTIzLDYgKzE1MTQsNyBAQCBzdGF0aWMgYm9vbCByYWlkMV93cml0ZV9yZXF1ZXN0KHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBiaW8gKmJpbyxcbiBcdGJvb2wgd3JpdGVfYmVoaW5kID0gZmFsc2U7XG4gXHRib29sIG5vd2FpdCA9IGJpby1cdTAwM2ViaV9vcGYgXHUwMDI2IFJFUV9OT1dBSVQ7XG4gXHRib29sIGlzX2Rpc2NhcmQgPSBvcF9pc19kaXNjYXJkKGJpby1cdTAwM2ViaV9vcGYpO1xuK1x0Ym9vbCBpc19wMnBkbWEgPSBtZF9iaW9faXNfcDJwZG1hKGJpbyk7XG4gXHRzZWN0b3JfdCBzZWN0b3IgPSBiaW8tXHUwMDNlYmlfaXRlci5iaV9zZWN0b3I7XG4gXG4gXHRpZiAobWRkZXZfaXNfY2x1c3RlcmVkKG1kZGV2KSBcdTAwMjZcdTAwMjZcbkBAIC0xNTc1LDkgKzE1NjcsMTIgQEAgc3RhdGljIGJvb2wgcmFpZDFfd3JpdGVfcmVxdWVzdChzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgYmlvICpiaW8sXG4gXHRcdC8qXG4gXHRcdCAqIFRoZSB3cml0ZS1iZWhpbmQgaW8gaXMgb25seSBhdHRlbXB0ZWQgb24gZHJpdmVzIG1hcmtlZCBhc1xuIFx0XHQgKiB3cml0ZS1tb3N0bHksIHdoaWNoIG1lYW5zIHdlIGNvdWxkIGFsbG9jYXRlIHdyaXRlIGJlaGluZFxuLVx0XHQgKiBiaW8gbGF0ZXIuXG4rXHRcdCAqIGJpbyBsYXRlci4gUDJQRE1BIGJpb3MgYXJlIGV4Y2x1ZGVkOiB3cml0ZS1iZWhpbmQgY29waWVzXG4rXHRcdCAqIHRoZSBkYXRhIHdpdGggYmlvX2NvcHlfZGF0YSgpLCBhIENQVSBjb3B5IHRoYXQgY2Fubm90IGJlXG4rXHRcdCAqIGFzc3VtZWQgc2FmZSBvciBmYXN0IG9uIFAyUERNQSAoZGV2aWNlIEJBUikgcGFnZXMuXG4gXHRcdCAqL1xuLVx0XHRpZiAoIWlzX2Rpc2NhcmQgXHUwMDI2XHUwMDI2IHJkZXYgXHUwMDI2XHUwMDI2IHRlc3RfYml0KFdyaXRlTW9zdGx5LCBcdTAwMjZyZGV2LVx1MDAzZWZsYWdzKSlcbitcdFx0aWYgKCFpc19kaXNjYXJkIFx1MDAyNlx1MDAyNiAhaXNfcDJwZG1hIFx1MDAyNlx1MDAyNiByZGV2IFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgdGVzdF9iaXQoV3JpdGVNb3N0bHksIFx1MDAyNnJkZXYtXHUwMDNlZmxhZ3MpKVxuIFx0XHRcdHdyaXRlX2JlaGluZCA9IHRydWU7XG4gXG4gXHRcdHIxX2Jpby1cdTAwM2ViaW9zW2ldID0gTlVMTDtcbkBAIC0xNjc3LDcgKzE2NzIsMTEgQEAgc3RhdGljIGJvb2wgcmFpZDFfd3JpdGVfcmVxdWVzdChzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgYmlvICpiaW8sXG4gXHRcdFx0bWJpbyA9IGJpb19hbGxvY19jbG9uZShyZGV2LVx1MDAzZWJkZXYsIGJpbywgR0ZQX05PSU8sXG4gXHRcdFx0XHRcdCAgICAgICBcdTAwMjZtZGRldi1cdTAwM2ViaW9fc2V0KTtcbiBcbi1cdFx0XHRpZiAodGVzdF9iaXQoTURfU0VSSUFMSVpFX1BPTElDWSwgXHUwMDI2bWRkZXYtXHUwMDNlZmxhZ3MpKVxuK1x0XHRcdC8qXG4rXHRcdFx0ICogQ29sbGlzaW9uQ2hlY2sgbWFya3MgZXZlcnkgcmRldiB3aXRoIGEgc2VyaWFsXG4rXHRcdFx0ICogdHJlZTsgb3JkZXIgYWdhaW5zdCBpbi1mbGlnaHQgd3JpdGUtYmVoaW5kIEkvTy5cbitcdFx0XHQgKi9cbitcdFx0XHRpZiAodGVzdF9iaXQoQ29sbGlzaW9uQ2hlY2ssIFx1MDAyNnJkZXYtXHUwMDNlZmxhZ3MpKVxuIFx0XHRcdFx0d2FpdF9mb3Jfc2VyaWFsaXphdGlvbihyZGV2LCByMV9iaW8pO1xuIFx0XHR9XG4gXG5AQCAtMjU2Miw2ICsyNTYxLDkgQEAgc3RhdGljIHZvaWQgbmFycm93X3dyaXRlX2Vycm9yKHN0cnVjdCByMWJpbyAqcjFfYmlvLCBpbnQgaSlcbiBcdFx0fVxuIFxuIFx0XHR3YmlvLVx1MDAzZWJpX29wZiA9IFJFUV9PUF9XUklURTtcbitcdFx0LyogS2VlcCBQMlBETUEgcmV0cnkgYmlvcyB1bm1lcmdlYWJsZSwgbGlrZSB0aGUgb3JpZ2luYWwgKi9cbitcdFx0aWYgKG1kX2Jpb19pc19wMnBkbWEod2JpbykpXG4rXHRcdFx0d2Jpby1cdTAwM2ViaV9vcGYgfD0gUkVRX05PTUVSR0U7XG4gXHRcdHdiaW8tXHUwMDNlYmlfaXRlci5iaV9zZWN0b3IgPSByMV9iaW8tXHUwMDNlc2VjdG9yO1xuIFx0XHR3YmlvLVx1MDAzZWJpX2l0ZXIuYmlfc2l6ZSA9IHIxX2Jpby1cdTAwM2VzZWN0b3JzIFx1MDAzY1x1MDAzYyA5O1xuIFxuQEAgLTI2MjIsMTAgKzI2MjQsMTYgQEAgc3RhdGljIHZvaWQgaGFuZGxlX3dyaXRlX2ZpbmlzaGVkKHN0cnVjdCByMWNvbmYgKmNvbmYsIHN0cnVjdCByMWJpbyAqcjFfYmlvKVxuIFx0XHRcdCAqIG5hcnJvdyBkb3duIGFuZCByZWNvcmQgcHJlY2lzZSB3cml0ZVxuIFx0XHRcdCAqIGVycm9ycy5cbiBcdFx0XHQgKi9cbitcdFx0XHRzdHJ1Y3QgbWRfcmRldiAqcmRldiA9IGNvbmYtXHUwMDNlbWlycm9yc1ttXS5yZGV2O1xuK1xuIFx0XHRcdGZhaWwgPSB0cnVlO1xuLVx0XHRcdG5hcnJvd193cml0ZV9lcnJvcihyMV9iaW8sIG0pO1xuLVx0XHRcdHJkZXZfZGVjX3BlbmRpbmcoY29uZi1cdTAwM2VtaXJyb3JzW21dLnJkZXYsXG4tXHRcdFx0XHRcdCBjb25mLVx1MDAzZW1kZGV2KTtcbitcdFx0XHQvKiBNYXBwaW5nIGZhaWx1cmVzIGFyZSB3aG9sZS1yYW5nZSBhbmQgZGV0ZXJtaW5pc3RpYyAqL1xuK1x0XHRcdGlmIChyMV9iaW8tXHUwMDNlYmlvc1ttXS1cdTAwM2ViaV9zdGF0dXMgPT0gQkxLX1NUU19QMlBETUEpXG4rXHRcdFx0XHRyZGV2X3NldF9iYWRibG9ja3MocmRldiwgcjFfYmlvLVx1MDAzZXNlY3RvcixcbitcdFx0XHRcdFx0XHQgICByMV9iaW8tXHUwMDNlc2VjdG9ycywgMCk7XG4rXHRcdFx0ZWxzZVxuK1x0XHRcdFx0bmFycm93X3dyaXRlX2Vycm9yKHIxX2JpbywgbSk7XG4rXHRcdFx0cmRldl9kZWNfcGVuZGluZyhyZGV2LCBjb25mLVx1MDAzZW1kZGV2KTtcbiBcdFx0fVxuIFx0aWYgKGZhaWwpIHtcbiBcdFx0c3Bpbl9sb2NrX2lycShcdTAwMjZjb25mLVx1MDAzZWRldmljZV9sb2NrKTtcbkBAIC0yNjUwLDYgKzI2NTgsOCBAQCBzdGF0aWMgdm9pZCBoYW5kbGVfcmVhZF9lcnJvcihzdHJ1Y3QgcjFjb25mICpjb25mLCBzdHJ1Y3QgcjFiaW8gKnIxX2JpbylcbiB7XG4gXHRzdHJ1Y3QgbWRfcmRldiAqcmRldiA9IGNvbmYtXHUwMDNlbWlycm9yc1tyMV9iaW8tXHUwMDNlcmVhZF9kaXNrXS5yZGV2O1xuIFx0c3RydWN0IGJpbyAqYmlvID0gcjFfYmlvLVx1MDAzZWJpb3NbcjFfYmlvLVx1MDAzZXJlYWRfZGlza107XG4rXHQvKiBldmFsdWF0ZSBiZWZvcmUgdGhlIGJpb19wdXQoKSBiZWxvdyAqL1xuK1x0Ym9vbCBwMnBkbWFfZXJyb3IgPSBiaW8tXHUwMDNlYmlfc3RhdHVzID09IEJMS19TVFNfUDJQRE1BO1xuIFx0c3RydWN0IG1kZGV2ICptZGRldiA9IGNvbmYtXHUwMDNlbWRkZXY7XG4gXHRzZWN0b3JfdCBzZWN0b3I7XG4gXG5AQCAtMjY2Nyw3ICsyNjc3LDcgQEAgc3RhdGljIHZvaWQgaGFuZGxlX3JlYWRfZXJyb3Ioc3RydWN0IHIxY29uZiAqY29uZiwgc3RydWN0IHIxYmlvICpyMV9iaW8pXG4gXHQgKiByZWFkIGVycm9yLiAgVGhpcyBpcyBhbGwgZG9uZSBzeW5jaHJvbm91c2x5IHdoaWxlIHRoZSBhcnJheSBpc1xuIFx0ICogZnJvemVuLlxuIFx0ICovXG4tXHRpZiAobWRkZXYtXHUwMDNlcm8pIHtcbitcdGlmIChtZGRldi1cdTAwM2VybyB8fCBwMnBkbWFfZXJyb3IpIHtcbiBcdFx0cjFfYmlvLVx1MDAzZWJpb3NbcjFfYmlvLVx1MDAzZXJlYWRfZGlza10gPSBJT19CTE9DS0VEO1xuIFx0fSBlbHNlIGlmICh0ZXN0X2JpdChGYWlsRmFzdCwgXHUwMDI2cmRldi1cdTAwM2VmbGFncykpIHtcbiBcdFx0bWRfZXJyb3IobWRkZXYsIHJkZXYpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvcmFpZDEwLmMgYi9kcml2ZXJzL21kL3JhaWQxMC5jXG5pbmRleCAwYTNjZmRkM2Y1ZGY4MC4uZTM1YWVhYzI5ZjA2NDIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL21kL3JhaWQxMC5jXG4rKysgYi9kcml2ZXJzL21kL3JhaWQxMC5jXG5AQCAtNDgyLDE2ICs0ODIsOCBAQCBzdGF0aWMgdm9pZCByYWlkMTBfZW5kX3dyaXRlX3JlcXVlc3Qoc3RydWN0IGJpbyAqYmlvKVxuIFx0XHRcdCAqL1xuIFx0XHRcdG1kX2Vycm9yKHJkZXYtXHUwMDNlbWRkZXYsIHJkZXYpO1xuIFx0XHRlbHNlIHtcbi1cdFx0XHRzZXRfYml0KFdyaXRlRXJyb3JTZWVuLFx0XHUwMDI2cmRldi1cdTAwM2VmbGFncyk7XG4tXHRcdFx0aWYgKCF0ZXN0X2FuZF9zZXRfYml0KFdhbnRSZXBsYWNlbWVudCwgXHUwMDI2cmRldi1cdTAwM2VmbGFncykpXG4tXHRcdFx0XHRzZXRfYml0KE1EX1JFQ09WRVJZX05FRURFRCxcbi1cdFx0XHRcdFx0XHUwMDI2cmRldi1cdTAwM2VtZGRldi1cdTAwM2VyZWNvdmVyeSk7XG4tXG4gXHRcdFx0ZGVjX3JkZXYgPSAwO1xuLVx0XHRcdGlmICh0ZXN0X2JpdChGYWlsRmFzdCwgXHUwMDI2cmRldi1cdTAwM2VmbGFncykgXHUwMDI2XHUwMDI2XG4tXHRcdFx0ICAgIChiaW8tXHUwMDNlYmlfb3BmIFx1MDAyNiBNRF9GQUlMRkFTVCkpIHtcbi1cdFx0XHRcdG1kX2Vycm9yKHJkZXYtXHUwMDNlbWRkZXYsIHJkZXYpO1xuLVx0XHRcdH1cbitcdFx0XHRyYWlkMV93cml0ZV9lcnJvcihyZGV2LVx1MDAzZW1kZGV2LCByZGV2LCBiaW8sIHRydWUpO1xuIFxuIFx0XHRcdC8qXG4gXHRcdFx0ICogV2hlbiB0aGUgZGV2aWNlIGlzIGZhdWx0eSwgaXQgaXMgbm90IG5lY2Vzc2FyeSB0b1xuQEAgLTI4MzEsNiArMjgyMyw5IEBAIHN0YXRpYyB2b2lkIG5hcnJvd193cml0ZV9lcnJvcihzdHJ1Y3QgcjEwYmlvICpyMTBfYmlvLCBpbnQgaSlcbiBcdFx0d2Jpby1cdTAwM2ViaV9pdGVyLmJpX3NlY3RvciA9IHdzZWN0b3IgK1xuIFx0XHRcdFx0ICAgY2hvb3NlX2RhdGFfb2Zmc2V0KHIxMF9iaW8sIHJkZXYpO1xuIFx0XHR3YmlvLVx1MDAzZWJpX29wZiA9IFJFUV9PUF9XUklURTtcbitcdFx0LyogS2VlcCBQMlBETUEgcmV0cnkgYmlvcyB1bm1lcmdlYWJsZSwgbGlrZSB0aGUgb3JpZ2luYWwgKi9cbitcdFx0aWYgKG1kX2Jpb19pc19wMnBkbWEod2JpbykpXG4rXHRcdFx0d2Jpby1cdTAwM2ViaV9vcGYgfD0gUkVRX05PTUVSR0U7XG4gXG4gXHRcdGlmIChzdWJtaXRfYmlvX3dhaXQod2JpbykgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICAhcmRldl9zZXRfYmFkYmxvY2tzKHJkZXYsIHdzZWN0b3IsIHNlY3RvcnMsIDApKSB7XG5AQCAtMjg1Myw2ICsyODQ4LDcgQEAgc3RhdGljIHZvaWQgaGFuZGxlX3JlYWRfZXJyb3Ioc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IHIxMGJpbyAqcjEwX2JpbylcbiB7XG4gXHRpbnQgc2xvdCA9IHIxMF9iaW8tXHUwMDNlcmVhZF9zbG90O1xuIFx0c3RydWN0IGJpbyAqYmlvO1xuK1x0Ym9vbCBwMnBkbWFfZXJyb3I7XG4gXHRzdHJ1Y3QgcjEwY29uZiAqY29uZiA9IG1kZGV2LVx1MDAzZXByaXZhdGU7XG4gXHRzdHJ1Y3QgbWRfcmRldiAqcmRldiA9IHIxMF9iaW8tXHUwMDNlZGV2c1tzbG90XS5yZGV2O1xuIFxuQEAgLTI4NjUsMTAgKzI4NjEsMTIgQEAgc3RhdGljIHZvaWQgaGFuZGxlX3JlYWRfZXJyb3Ioc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IHIxMGJpbyAqcjEwX2JpbylcbiBcdCAqIGZyb3plbi5cbiBcdCAqL1xuIFx0YmlvID0gcjEwX2Jpby1cdTAwM2VkZXZzW3Nsb3RdLmJpbztcbitcdC8qIGV2YWx1YXRlIGJlZm9yZSB0aGUgYmlvX3B1dCgpIGJlbG93ICovXG4rXHRwMnBkbWFfZXJyb3IgPSBiaW8tXHUwMDNlYmlfc3RhdHVzID09IEJMS19TVFNfUDJQRE1BO1xuIFx0YmlvX3B1dChiaW8pO1xuIFx0cjEwX2Jpby1cdTAwM2VkZXZzW3Nsb3RdLmJpbyA9IE5VTEw7XG4gXG4tXHRpZiAobWRkZXYtXHUwMDNlcm8pXG4rXHRpZiAobWRkZXYtXHUwMDNlcm8gfHwgcDJwZG1hX2Vycm9yKVxuIFx0XHRyMTBfYmlvLVx1MDAzZWRldnNbc2xvdF0uYmlvID0gSU9fQkxPQ0tFRDtcbiBcdGVsc2UgaWYgKCF0ZXN0X2JpdChGYWlsRmFzdCwgXHUwMDI2cmRldi1cdTAwM2VmbGFncykpIHtcbiBcdFx0ZnJlZXplX2FycmF5KGNvbmYsIDEpO1xuQEAgLTI5NDUsNyArMjk0MywxMyBAQCBzdGF0aWMgdm9pZCBoYW5kbGVfd3JpdGVfY29tcGxldGVkKHN0cnVjdCByMTBjb25mICpjb25mLCBzdHJ1Y3QgcjEwYmlvICpyMTBfYmlvKVxuIFx0XHRcdFx0cmRldl9kZWNfcGVuZGluZyhyZGV2LCBjb25mLVx1MDAzZW1kZGV2KTtcbiBcdFx0XHR9IGVsc2UgaWYgKGJpbyAhPSBOVUxMIFx1MDAyNlx1MDAyNiBiaW8tXHUwMDNlYmlfc3RhdHVzKSB7XG4gXHRcdFx0XHRmYWlsID0gdHJ1ZTtcbi1cdFx0XHRcdG5hcnJvd193cml0ZV9lcnJvcihyMTBfYmlvLCBtKTtcbitcdFx0XHRcdC8qIE1hcHBpbmcgZmFpbHVyZXMgYXJlIHdob2xlLXJhbmdlIGFuZCBkZXRlcm1pbmlzdGljICovXG4rXHRcdFx0XHRpZiAoYmlvLVx1MDAzZWJpX3N0YXR1cyA9PSBCTEtfU1RTX1AyUERNQSlcbitcdFx0XHRcdFx0cmRldl9zZXRfYmFkYmxvY2tzKHJkZXYsXG4rXHRcdFx0XHRcdFx0XHQgICByMTBfYmlvLVx1MDAzZWRldnNbbV0uYWRkcixcbitcdFx0XHRcdFx0XHRcdCAgIHIxMF9iaW8tXHUwMDNlc2VjdG9ycywgMCk7XG4rXHRcdFx0XHRlbHNlXG4rXHRcdFx0XHRcdG5hcnJvd193cml0ZV9lcnJvcihyMTBfYmlvLCBtKTtcbiBcdFx0XHRcdHJkZXZfZGVjX3BlbmRpbmcocmRldiwgY29uZi1cdTAwM2VtZGRldik7XG4gXHRcdFx0fVxuIFx0XHRcdGJpbyA9IHIxMF9iaW8tXHUwMDNlZGV2c1ttXS5yZXBsX2JpbztcbmRpZmYgLS1naXQgYS9kcml2ZXJzL252bWUvaG9zdC9yZG1hLmMgYi9kcml2ZXJzL252bWUvaG9zdC9yZG1hLmNcbmluZGV4IDY5MDllMzU0Mjc5NDI3Li4yZjUwNTA5YTdhNjE2MCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbnZtZS9ob3N0L3JkbWEuY1xuKysrIGIvZHJpdmVycy9udm1lL2hvc3QvcmRtYS5jXG5AQCAtMTQ2OSw2ICsxNDY5LDcgQEAgc3RhdGljIGludCBudm1lX3JkbWFfZG1hX21hcF9yZXEoc3RydWN0IGliX2RldmljZSAqaWJkZXYsIHN0cnVjdCByZXF1ZXN0ICpycSxcbiBcdFx0aW50ICpjb3VudCwgaW50ICpwaV9jb3VudClcbiB7XG4gXHRzdHJ1Y3QgbnZtZV9yZG1hX3JlcXVlc3QgKnJlcSA9IGJsa19tcV9ycV90b19wZHUocnEpO1xuK1x0c3RydWN0IHNnX3RhYmxlIHNndDtcbiBcdGludCByZXQ7XG4gXG4gXHRyZXEtXHUwMDNlZGF0YV9zZ2wuc2dfdGFibGUuc2dsID0gKHN0cnVjdCBzY2F0dGVybGlzdCAqKShyZXEgKyAxKTtcbkBAIC0xNDgwLDEyICsxNDgxLDE0IEBAIHN0YXRpYyBpbnQgbnZtZV9yZG1hX2RtYV9tYXBfcmVxKHN0cnVjdCBpYl9kZXZpY2UgKmliZGV2LCBzdHJ1Y3QgcmVxdWVzdCAqcnEsXG4gXG4gXHRyZXEtXHUwMDNlZGF0YV9zZ2wubmVudHMgPSBibGtfcnFfbWFwX3NnKHJxLCByZXEtXHUwMDNlZGF0YV9zZ2wuc2dfdGFibGUuc2dsKTtcbiBcbi1cdCpjb3VudCA9IGliX2RtYV9tYXBfc2coaWJkZXYsIHJlcS1cdTAwM2VkYXRhX3NnbC5zZ190YWJsZS5zZ2wsXG4tXHRcdFx0ICAgICAgIHJlcS1cdTAwM2VkYXRhX3NnbC5uZW50cywgcnFfZG1hX2RpcihycSkpO1xuLVx0aWYgKHVubGlrZWx5KCpjb3VudCBcdTAwM2M9IDApKSB7XG4tXHRcdHJldCA9IC1FSU87XG4rXHRzZ3QgPSAoc3RydWN0IHNnX3RhYmxlKSB7XG4rXHRcdC5zZ2xcdFx0PSByZXEtXHUwMDNlZGF0YV9zZ2wuc2dfdGFibGUuc2dsLFxuK1x0XHQub3JpZ19uZW50c1x0PSByZXEtXHUwMDNlZGF0YV9zZ2wubmVudHMsXG4rXHR9O1xuK1x0cmV0ID0gaWJfZG1hX21hcF9zZ3RhYmxlX2F0dHJzKGliZGV2LCBcdTAwMjZzZ3QsIHJxX2RtYV9kaXIocnEpLCAwKTtcbitcdGlmICh1bmxpa2VseShyZXQpKVxuIFx0XHRnb3RvIG91dF9mcmVlX3RhYmxlO1xuLVx0fVxuK1x0KmNvdW50ID0gc2d0Lm5lbnRzO1xuIFxuIFx0aWYgKGJsa19pbnRlZ3JpdHlfcnEocnEpKSB7XG4gXHRcdHJlcS1cdTAwM2VtZXRhZGF0YV9zZ2wtXHUwMDNlc2dfdGFibGUuc2dsID1cbkBAIC0xNTAxLDE0ICsxNTA0LDE0IEBAIHN0YXRpYyBpbnQgbnZtZV9yZG1hX2RtYV9tYXBfcmVxKHN0cnVjdCBpYl9kZXZpY2UgKmliZGV2LCBzdHJ1Y3QgcmVxdWVzdCAqcnEsXG4gXG4gXHRcdHJlcS1cdTAwM2VtZXRhZGF0YV9zZ2wtXHUwMDNlbmVudHMgPSBibGtfcnFfbWFwX2ludGVncml0eV9zZyhycSxcbiBcdFx0XHRcdHJlcS1cdTAwM2VtZXRhZGF0YV9zZ2wtXHUwMDNlc2dfdGFibGUuc2dsKTtcbi1cdFx0KnBpX2NvdW50ID0gaWJfZG1hX21hcF9zZyhpYmRldixcbi1cdFx0XHRcdFx0ICByZXEtXHUwMDNlbWV0YWRhdGFfc2dsLVx1MDAzZXNnX3RhYmxlLnNnbCxcbi1cdFx0XHRcdFx0ICByZXEtXHUwMDNlbWV0YWRhdGFfc2dsLVx1MDAzZW5lbnRzLFxuLVx0XHRcdFx0XHQgIHJxX2RtYV9kaXIocnEpKTtcbi1cdFx0aWYgKHVubGlrZWx5KCpwaV9jb3VudCBcdTAwM2M9IDApKSB7XG4tXHRcdFx0cmV0ID0gLUVJTztcbitcdFx0c2d0ID0gKHN0cnVjdCBzZ190YWJsZSkge1xuK1x0XHRcdC5zZ2xcdFx0PSByZXEtXHUwMDNlbWV0YWRhdGFfc2dsLVx1MDAzZXNnX3RhYmxlLnNnbCxcbitcdFx0XHQub3JpZ19uZW50c1x0PSByZXEtXHUwMDNlbWV0YWRhdGFfc2dsLVx1MDAzZW5lbnRzLFxuK1x0XHR9O1xuK1x0XHRyZXQgPSBpYl9kbWFfbWFwX3NndGFibGVfYXR0cnMoaWJkZXYsIFx1MDAyNnNndCwgcnFfZG1hX2RpcihycSksIDApO1xuK1x0XHRpZiAodW5saWtlbHkocmV0KSlcbiBcdFx0XHRnb3RvIG91dF9mcmVlX3BpX3RhYmxlO1xuLVx0XHR9XG4rXHRcdCpwaV9jb3VudCA9IHNndC5uZW50cztcbiBcdH1cbiBcbiBcdHJldHVybiAwO1xuQEAgLTIwMjYsOCArMjAyOSw2IEBAIHN0YXRpYyBibGtfc3RhdHVzX3QgbnZtZV9yZG1hX3F1ZXVlX3JxKHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4LFxuIFx0aWYgKHJldClcbiBcdFx0Z290byB1bm1hcF9xZTtcbiBcbi1cdG52bWVfc3RhcnRfcmVxdWVzdChycSk7XG4tXG4gXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkpIFx1MDAyNlx1MDAyNlxuIFx0ICAgIHF1ZXVlLVx1MDAzZXBpX3N1cHBvcnQgXHUwMDI2XHUwMDI2XG4gXHQgICAgKGMtXHUwMDNlY29tbW9uLm9wY29kZSA9PSBudm1lX2NtZF93cml0ZSB8fFxuQEAgLTIwMzksMTEgKzIwNDAsMTMgQEAgc3RhdGljIGJsa19zdGF0dXNfdCBudm1lX3JkbWFfcXVldWVfcnEoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsXG4gXG4gXHRlcnIgPSBudm1lX3JkbWFfbWFwX2RhdGEocXVldWUsIHJxLCBjKTtcbiBcdGlmICh1bmxpa2VseShlcnIgXHUwMDNjIDApKSB7XG4tXHRcdGRldl9lcnIocXVldWUtXHUwMDNlY3RybC1cdTAwM2VjdHJsLmRldmljZSxcbi1cdFx0XHQgICAgIFwiRmFpbGVkIHRvIG1hcCBkYXRhICglZClcXG5cIiwgZXJyKTtcbitcdFx0ZGV2X2Vycl9yYXRlbGltaXRlZChxdWV1ZS1cdTAwM2VjdHJsLVx1MDAzZWN0cmwuZGV2aWNlLFxuK1x0XHRcdFx0ICAgIFwiRmFpbGVkIHRvIG1hcCBkYXRhICglZClcXG5cIiwgZXJyKTtcbiBcdFx0Z290byBlcnI7XG4gXHR9XG4gXG4rXHRudm1lX3N0YXJ0X3JlcXVlc3QocnEpO1xuK1xuIFx0c3FlLVx1MDAzZWNxZS5kb25lID0gbnZtZV9yZG1hX3NlbmRfZG9uZTtcbiBcbiBcdGliX2RtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKGRldiwgc3FlLVx1MDAzZWRtYSxcbkBAIC0yMDYzLDYgKzIwNjYsOSBAQCBzdGF0aWMgYmxrX3N0YXR1c190IG52bWVfcmRtYV9xdWV1ZV9ycShzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eCxcbiBcdFx0cmV0ID0gbnZtZV9ob3N0X3BhdGhfZXJyb3IocnEpO1xuIFx0ZWxzZSBpZiAoZXJyID09IC1FTk9NRU0gfHwgZXJyID09IC1FQUdBSU4pXG4gXHRcdHJldCA9IEJMS19TVFNfUkVTT1VSQ0U7XG4rXHQvKiBQZWVyIG1lbW9yeSB1bnJlYWNoYWJsZSBmcm9tIHRoaXMgZGV2aWNlOiBkb24ndCByZXRyeS4gKi9cbitcdGVsc2UgaWYgKGVyciA9PSAtRVJFTU9URUlPKVxuK1x0XHRyZXQgPSBCTEtfU1RTX1AyUERNQTtcbiBcdGVsc2VcbiBcdFx0cmV0ID0gQkxLX1NUU19JT0VSUjtcbiBcdG52bWVfY2xlYW51cF9jbWQocnEpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmxrX3R5cGVzLmggYi9pbmNsdWRlL2xpbnV4L2Jsa190eXBlcy5oXG5pbmRleCA4ODA4ZWU3NmU3M2MwOS4uYzhkZTc4MDkzMjBhZDQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2Jsa190eXBlcy5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2Jsa190eXBlcy5oXG5AQCAtMTY1LDYgKzE2NSwxNSBAQCB0eXBlZGVmIHUxNiBibGtfc2hvcnRfdDtcbiAgKi9cbiAjZGVmaW5lIEJMS19TVFNfRFVSQVRJT05fTElNSVRcdCgoX19mb3JjZSBibGtfc3RhdHVzX3QpMTcpXG4gXG4rLypcbisgKiBCTEtfU1RTX1AyUERNQSBpcyByZXR1cm5lZCB3aGVuIGEgcGVlci10by1wZWVyIERNQSB0cmFuc2ZlciBjYW5ub3QgYmVcbisgKiBtYXBwZWQgKHR5cGljYWxseSBiZWNhdXNlIHRoZXJlIGlzIG5vIHJvdXRlIGJldHdlZW4gdGhlIGluaXRpYXRvciBhbmQgdGhlXG4rICogdGFyZ2V0IHRoYXQgdGhlIHBsYXRmb3JtJ3MgUENJZSB0b3BvbG9neSBhbmQgQUNTIHNldHRpbmdzIGFsbG93KS4gVGhpc1xuKyAqIGlzIGEgcHJvcGVydHkgb2YgdGhlIGluaXRpYXRvci90YXJnZXQgcGFpciwgbm90IG9mIHRoZSB0YXJnZXQgZGV2aWNlJ3NcbisgKiBoZWFsdGguIFRoaXMgZXJyb3Igc2hvdWxkIG5ldmVyIGJlIHJldHJpZWQuXG4rICovXG4rI2RlZmluZSBCTEtfU1RTX1AyUERNQVx0KChfX2ZvcmNlIGJsa19zdGF0dXNfdCkxOClcbitcbiAvKlxuICAqIEludmFsaWQgc2l6ZSBvciBhbGlnbm1lbnQuXG4gICovXG5AQCAtMTg4LDYgKzE5Nyw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBibGtfcGF0aF9lcnJvcihibGtfc3RhdHVzX3QgZXJyb3IpXG4gXHRjYXNlIEJMS19TVFNfTk9UU1VQUDpcbiBcdGNhc2UgQkxLX1NUU19OT1NQQzpcbiBcdGNhc2UgQkxLX1NUU19UQVJHRVQ6XG4rXHRjYXNlIEJMS19TVFNfUDJQRE1BOlxuIFx0Y2FzZSBCTEtfU1RTX1JFU1ZfQ09ORkxJQ1Q6XG4gXHRjYXNlIEJMS19TVFNfTUVESVVNOlxuIFx0Y2FzZSBCTEtfU1RTX1BST1RFQ1RJT046XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QyMTozMzowOS4yMjY1MTczMTZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NjI3MDEyNTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUDJQRE1BIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBpbnRyb2R1Y2luZyBgQkxLX1NUU19QMlBETUFgLiBJdCBzZWVtcyBmb2N1c2VkIG9uIGhhbmRsaW5nIFBlZXItdG8tUGVlciBETUEgZXJyb3JzLCBzcGVjaWZpY2FsbHkgd2hlbiBhIFAyUERNQSB0cmFuc2ZlciBjYW4ndCBiZSBtYXBwZWQuIFRoZSBjaGFuZ2VzIHRvdWNoIGEgcHJldHR5IHdpZGUgcmFuZ2Ugb2YgY29kZTogYGJsay1jb3JlLmNgLCBgYmxrLW1xLWRtYS5jYCwgdmFyaW91cyBSQUlEIGNvbXBvbmVudHMgKGBtZC5jYCwgYHJhaWQxLTEwLmNgLCBldGMuKSwgYG52bWUvaG9zdC9yZG1hLmNgLCBhbmQgYGJsa190eXBlcy5oYC4gVGhhdCdzIGEgZGVjZW50IHNwcmVhZC4gVGhlIGNvcmUgb2YgaXQgc2VlbXMgdG8gYmUgcmV0dXJuaW5nIHRoaXMgbmV3IGBCTEtfU1RTX1AyUERNQWAgc3RhdHVzLiBUaGUgcGF0Y2ggYWxzbyBtb2RpZmllcyBob3cgTUQgKHNvZnR3YXJlIFJBSUQpIGhhbmRsZXMgUDJQRE1BIGJpb3MsIGVuc3VyaW5nIGNvcnJlY3QgZXJyb3IgaGFuZGxpbmcgd2l0aG91dCBjYXNjYWRpbmcgZmFpbHVyZXMgYW5kIGhvdyBOVk1lIFJETUEgaGFuZGxlcyBtYXBwaW5nIGZhaWx1cmVzIHdpdGggYC1FUkVNT1RFSU9gLlxuXG5NeSBwcmltYXJ5IGNvbmNlcm4sIG9mIGNvdXJzZSwgaXMgYWJvdXQgcmVhY2hhYmlsaXR5LiBJcyB0aGlzIGNvZGUgcGF0aCBldmVuICpyZWFjaGFibGUqIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBHQ0Ugb3IgUUVNVT8gUDJQRE1BLCBieSBpdHMgdmVyeSBuYXR1cmUsIHJlbGllcyBvbiBQQ0kgZGV2aWNlcyB3aXRoIFAyUERNQSBzdXBwb3J0LiBUaGUgcmVhbCBxdWVzdGlvbiBpczogY2FuIHdlIGVtdWxhdGUgdGhhdCBpbiBRRU1VPyBXZSdkIG5lZWQgdG8gYmUgYWJsZSB0byB0cmlnZ2VyIHRoZSBQMlBETUEgbG9naWMsIHdoaWNoIGxlYWRzIG1lIHRvIG15IG5leHQgcXVlc3Rpb24sIGlzIHRoZXJlIGFueSBzb2Z0d2FyZSBlbXVsYXRlZCBQMlBETUEgZGV2aWNlIHRoYXQgd2UgY291bGQgcG9zc2libHkgdXNlLCBvciBhbm90aGVyIHdheSB0aGF0IHRoaXMgcGF0aCBjYW4gYmUgdHJpZ2dlcmVkP1xuXG5TcGVjaWZpY2FsbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgTUQgYW5kIE5WTWUgY2hhbmdlcyBjb21lIGludG8gcGxheS4gSW4gTUQsIHRoZSBmdW5jdGlvbiBgbWRfYmlvX2lzX3AycGRtYShiaW8pYCBpcyBjcnVjaWFsLiBJdCBjYWxscyBgaXNfcGNpX3AycGRtYV9wYWdlKGJpby1cdTAwM2ViaV9pb192ZWMtXHUwMDNlYnZfcGFnZSlgLiBDYW4gd2UgY3JlYXRlIGEgUDJQRE1BIHBhZ2UgKndpdGhpbiogYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gUDJQRE1BIHBhZ2VzIGFyZSB0eXBpY2FsbHkgY3JlYXRlZCBieSBQQ0kgZHJpdmVycyB1c2luZyBgcGNpX3AycGRtYV9hZGRfcmVzb3VyY2UoKWAuIE15IGd1ZXNzIGlzIHRoYXQsIHdpdGhvdXQgcmVhbCBoYXJkd2FyZSwgdGhpcyBpcyBnb2luZyB0byBiZSB0aGUgdG91Z2ggcGFydC5cblxuU28sIEknbSB0aGlua2luZywgaXMgdGhlcmUgKmFueSogd2F5IHRvIHRyaWdnZXIgdGhpcyB3aXRob3V0IHBoeXNpY2FsIGhhcmR3YXJlPyBNYXliZSBhIHNpbXVsYXRlZCBlbnZpcm9ubWVudCwgcGVyaGFwcyBzb21ldGhpbmcgaW4gYGRyaXZlcnMvbnZtZS90YXJnZXQvcDJwbWVtLmNgLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseS4gSSdtIGdvaW5nIHRvIHNlYXJjaCB0aGUgY29kZWJhc2UgZm9yIHVzZXMgb2YgYHBjaV9wMnBkbWFfYWRkX3Jlc291cmNlYCBhbmQgYGlzX3BjaV9wMnBkbWFfcGFnZWAuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBjb25kaXRpb25zIG5lZWRlZCB0byByZWFjaCB0aGlzIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc5MzUsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OTksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QyMTozMzoxNy44NTM1MzIzMzRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzAxNzYzMTkyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwY2lfcDJwZG1hX2FkZF9yZXNvdXJjZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvcGNpL3AycGRtYS5yc3Q9OTU9QSBwcm92aWRlciBzaW1wbHkgbmVlZHMgdG8gcmVnaXN0ZXIgYSBCQVIgKG9yIGEgcG9ydGlvbiBvZiBhIEJBUilcXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvcGNpL3AycGRtYS5yc3Q6OTY6YXMgYSBQMlAgRE1BIHJlc291cmNlIHVzaW5nIDpjOmZ1bmM6YHBjaV9wMnBkbWFfYWRkX3Jlc291cmNlKClgLlxcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9wY2kvcDJwZG1hLnJzdC05Ny1UaGlzIHdpbGwgcmVnaXN0ZXIgc3RydWN0IHBhZ2VzIGZvciBhbGwgdGhlIHNwZWNpZmllZCBtZW1vcnkuXFxuLS1cXG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvY29tbW9uL2hsZGlvLmM9MzY5PWludCBobF9wMnBfcmVnaW9uX2luaXQoc3RydWN0IGhsX2RldmljZSAqaGRldiwgc3RydWN0IGhsX3AycF9yZWdpb24gKnAycHIpXFxuLS1cXG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvY29tbW9uL2hsZGlvLmMtMzc0LVxcdC8qIFN0YXJ0IGJ5IHB1Ymxpc2hpbmcgb3VyIHAycCBtZW1vcnkgKi9cXG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvY29tbW9uL2hsZGlvLmM6Mzc1OlxcdHJjID0gcGNpX3AycGRtYV9hZGRfcmVzb3VyY2UoaGRldi1cXHUwMDNlcGRldiwgcDJwci1cXHUwMDNlYmFyLCBwMnByLVxcdTAwM2VzaXplLCBwMnByLVxcdTAwM2ViYXJfb2Zmc2V0KTtcXG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvY29tbW9uL2hsZGlvLmMtMzc2LVxcdGlmIChyYykge1xcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvcGNpLmM9MjQ1OT1zdGF0aWMgdm9pZCBudm1lX21hcF9jbWIoc3RydWN0IG52bWVfZGV2ICpkZXYpXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9wY2kuYy0yNTA2LVxcbmRyaXZlcnMvbnZtZS9ob3N0L3BjaS5jOjI1MDc6XFx0aWYgKHBjaV9wMnBkbWFfYWRkX3Jlc291cmNlKHBkZXYsIGJhciwgc2l6ZSwgb2Zmc2V0KSkge1xcbmRyaXZlcnMvbnZtZS9ob3N0L3BjaS5jLTI1MDgtXFx0XFx0ZGV2X3dhcm4oZGV2LVxcdTAwM2VjdHJsLmRldmljZSxcXG4tLVxcbmRyaXZlcnMvcGNpL3AycGRtYS5jPTM2Mz1zdGF0aWMgdm9pZCBwY2lfcDJwZG1hX3VubWFwX21hcHBpbmdzKHZvaWQgKmRhdGEpXFxuLS1cXG5kcml2ZXJzL3BjaS9wMnBkbWEuYy0zNzctLyoqXFxuZHJpdmVycy9wY2kvcDJwZG1hLmM6Mzc4OiAqIHBjaV9wMnBkbWFfYWRkX3Jlc291cmNlIC0gYWRkIG1lbW9yeSBmb3IgdXNlIGFzIHAycCBtZW1vcnlcXG5kcml2ZXJzL3BjaS9wMnBkbWEuYy0zNzktICogQHBkZXY6IHRoZSBkZXZpY2UgdG8gYWRkIHRoZSBtZW1vcnkgdG9cXG4tLVxcbmRyaXZlcnMvcGNpL3AycGRtYS5jLTM4Ni0gKi9cXG5kcml2ZXJzL3BjaS9wMnBkbWEuYzozODc6aW50IHBjaV9wMnBkbWFfYWRkX3Jlc291cmNlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgYmFyLCBzaXplX3Qgc2l6ZSxcXG5kcml2ZXJzL3BjaS9wMnBkbWEuYy0zODgtXFx0XFx0XFx0ICAgIHU2NCBvZmZzZXQpXFxuLS1cXG5kcml2ZXJzL3BjaS9wMnBkbWEuYy00NjYtfVxcbmRyaXZlcnMvcGNpL3AycGRtYS5jOjQ2NzpFWFBPUlRfU1lNQk9MX0dQTChwY2lfcDJwZG1hX2FkZF9yZXNvdXJjZSk7XFxuZHJpdmVycy9wY2kvcDJwZG1hLmMtNDY4LVxcbi0tXFxuaW5jbHVkZS9saW51eC9wY2ktcDJwZG1hLmg9NzI9c3RydWN0IHAycGRtYV9wcm92aWRlciAqcGNpbV9wMnBkbWFfcHJvdmlkZXIoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBiYXIpO1xcbmluY2x1ZGUvbGludXgvcGNpLXAycGRtYS5oOjczOmludCBwY2lfcDJwZG1hX2FkZF9yZXNvdXJjZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IGJhciwgc2l6ZV90IHNpemUsXFxuaW5jbHVkZS9saW51eC9wY2ktcDJwZG1hLmgtNzQtXFx0XFx0dTY0IG9mZnNldCk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BjaS1wMnBkbWEuaD05Nj1zdGF0aWMgaW5saW5lIHN0cnVjdCBwMnBkbWFfcHJvdmlkZXIgKnBjaW1fcDJwZG1hX3Byb3ZpZGVyKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbi0tXFxuaW5jbHVkZS9saW51eC9wY2ktcDJwZG1hLmgtMTAwLX1cXG5pbmNsdWRlL2xpbnV4L3BjaS1wMnBkbWEuaDoxMDE6c3RhdGljIGlubGluZSBpbnQgcGNpX3AycGRtYV9hZGRfcmVzb3VyY2Uoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBiYXIsXFxuaW5jbHVkZS9saW51eC9wY2ktcDJwZG1hLmgtMTAyLVxcdFxcdHNpemVfdCBzaXplLCB1NjQgb2Zmc2V0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QyMTozMzoyMC44NzExNzE0NDRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NDcwNzM3NTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4cGxvcmluZyBQMlBETUEgYW5kIGl0cyBJbnRlcmFjdGlvbiB3aXRoIE1EIFJBSUQqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGhvdyBQMlBETUEgd29ya3MsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIE5WTWUgY29udGV4dCBhbmQgd29uZGVyaW5nIGFib3V0IGl0cyBpbnRlZ3JhdGlvbiB3aXRoIE1EIFJBSUQuIEkgc2VlIHRoYXQgYHBjaV9wMnBkbWFfYWRkX3Jlc291cmNlYCBpbiBgZHJpdmVycy9udm1lL2hvc3QvcGNpLmNgIGlzIGtleSwgcGFydGljdWxhcmx5IGZvciBDb250cm9sbGVyIE1lbW9yeSBCdWZmZXIgKENNQikuIE15IGluaXRpYWwgdGhvdWdodCBpcywgY2FuIHRoaXMgYmUgZW11bGF0ZWQgd2l0aGluIGEgUUVNVSBlbnZpcm9ubWVudD8gTHVja2lseSwgUUVNVSdzIE5WTWUgZGV2aWNlICpkb2VzKiBzdXBwb3J0IENNQiwgc28gdGhhdCdzIHByb21pc2luZyDigJMgd2UgY2FuIHNpbXVsYXRlIFAyUERNQSBwYWdlcyBpbiBhIHZpcnR1YWxpemVkIHNldHVwLlxuXG5Ob3csIHRoZSBpbnRlcmVzdGluZyBxdWVzdGlvbiBpczogY2FuIHdlIGFjdHVhbGx5IHRyaWdnZXIgdGhlIE1EIFJBSUQgY29kZSB1c2luZyB0aGVzZSBQMlBETUEgcGFnZXM/IElmIHdlIGhhdmUgYW4gTlZNZSBkZXZpY2UgY29uZmlndXJlZCB3aXRoIENNQiwgd2Ugc2hvdWxkIGJlIGFibGUgdG8gdHJlYXQgaXQgYXMgYSBQMlBETUEgcHJvdmlkZXIuIFRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcywgY2FuIHdlIHRoZW4gdXNlIHRoaXMgUDJQRE1BIHNldHVwIHRvIHRyYW5zZmVyIGRhdGEgdG8gKmFub3RoZXIqIE5WTWUgZGV2aWNlIG9yIGV2ZW4gYW4gTUQgZGV2aWNlP1xuXG5JIGZvdW5kIHRoYXQgdGhlIHBhdGNoIG1vZGlmaWVzIE1EIHRvIGhhbmRsZSB0aGVzZSBQMlBETUEgYmlvcy4gV2FpdCwgYG1kX2Jpb19pc19wMnBkbWFgISBJdCBjaGVja3MgaWYgdGhlIGJpbyBoYXMgYSBQMlBETUEgcGFnZS4gU28sIGlmIHdlIGNyZWF0ZSBhbiBNRCBhcnJheSB1dGlsaXppbmcgTlZNZSBkZXZpY2VzLCBhbmQgd2UgaXNzdWUgYSBQMlBETUEgSS9PICp0byogdGhhdCBNRCBhcnJheSwgaXQgc2hvdWxkIHBhc3MgdGhlIGJpbyBkb3duIHRvIHRoZSB1bmRlcmx5aW5nIGRldmljZXMsIHJpZ2h0P1xuXG5CdXQsIGNhbiB0aGlzIGV2ZW4gYmUgdHJpZ2dlcmVkIGZyb20gdXNlcnNwYWNlPyBVc3VhbGx5LCBQMlBETUEgaXMgdGhlIGRvbWFpbiBvZiBrZXJuZWwgZHJpdmVycy4gVGhpbmsgTlZNZS1vRiB0YXJnZXQgb3IgUkRNQS4gT2gsIHdhaXQsIGBPX0RJUkVDVGAgY291cGxlZCB3aXRoIFAyUERNQSBwYWdlcz8gTm8sIHRoYXQgd29uJ3Qgd29yay4gVXNlcnNwYWNlIGNhbid0IGRpcmVjdGx5IGFsbG9jYXRlIFAyUERNQSBwYWdlcy4gVGhhdCBjbG9zZXMgdGhhdCBkb29yLlxuXG5BbHJpZ2h0LCBzbyBob3cgKmFyZSogUDJQRE1BIHBhZ2VzIGNyZWF0ZWQgYW5kIHVzZWQ/IEkgbmVlZCB0byBkaWcgZGVlcGVyLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIHVzYWdlIG9mIGBpc19wY2lfcDJwZG1hX3BhZ2VgIG9yIHNwZWNpZmljYWxseSBob3cgUDJQRE1BIGJpb3MgYXJlIGNyZWF0ZWQuIFRoYXQncyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTk5NiwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QyMTozMzoyOC4zNDE5MTA3ODNaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgzODg3NTMwMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpc19wY2lfcDJwZG1hX3BhZ2VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svYmlvLWludGVncml0eS5jPTMzMz1zdGF0aWMgdW5zaWduZWQgaW50IGJ2ZWNfZnJvbV9wYWdlcyhzdHJ1Y3QgYmlvX3ZlYyAqYnZlYywgc3RydWN0IHBhZ2UgKipwYWdlcyxcXG4tLVxcbmJsb2NrL2Jpby1pbnRlZ3JpdHkuYy0zNTUtXFxuYmxvY2svYmlvLWludGVncml0eS5jOjM1NjpcXHRcXHRpZiAoaXNfcGNpX3AycGRtYV9wYWdlKHBhZ2VzW2ldKSlcXG5ibG9jay9iaW8taW50ZWdyaXR5LmMtMzU3LVxcdFxcdFxcdCppc19wMnAgPSB0cnVlO1xcbi0tXFxuYmxvY2svYmlvLmM9MTAwNj12b2lkIF9fYmlvX2FkZF9wYWdlKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IHBhZ2UgKnBhZ2UsXFxuLS1cXG5ibG9jay9iaW8uYy0xMDExLVxcbmJsb2NrL2Jpby5jOjEwMTI6XFx0aWYgKGlzX3BjaV9wMnBkbWFfcGFnZShwYWdlKSlcXG5ibG9jay9iaW8uYy0xMDEzLVxcdFxcdGJpby1cXHUwMDNlYmlfb3BmIHw9IFJFUV9OT01FUkdFO1xcbi0tXFxuYmxvY2svYmlvLmM9MTI0NT1pbnQgYmlvX2lvdl9pdGVyX2dldF9wYWdlcyhzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG4tLVxcbmJsb2NrL2Jpby5jLTEyNzctXFxuYmxvY2svYmlvLmM6MTI3ODpcXHRpZiAoaXNfcGNpX3AycGRtYV9wYWdlKGJpby1cXHUwMDNlYmlfaW9fdmVjLVxcdTAwM2Vidl9wYWdlKSlcXG5ibG9jay9iaW8uYy0xMjc5LVxcdFxcdGJpby1cXHUwMDNlYmlfb3BmIHw9IFJFUV9OT01FUkdFO1xcbi0tXFxuYmxvY2svYmxrLmg9MTU2PXN0YXRpYyBpbmxpbmUgYm9vbCB6b25lX2RldmljZV9wYWdlc19jb21wYXRpYmxlKGNvbnN0IHN0cnVjdCBwYWdlICphLFxcbi0tXFxuYmxvY2svYmxrLmgtMTU4LXtcXG5ibG9jay9ibGsuaDoxNTk6XFx0aWYgKGlzX3BjaV9wMnBkbWFfcGFnZShhKSB8fCBpc19wY2lfcDJwZG1hX3BhZ2UoYikpXFxuYmxvY2svYmxrLmgtMTYwLVxcdFxcdHJldHVybiB6b25lX2RldmljZV9wYWdlc19oYXZlX3NhbWVfcGdtYXAoYSwgYik7XFxuLS1cXG5kcml2ZXJzL21kL21kLmg9MzQ9c3RhdGljIGlubGluZSBib29sIG1kX2Jpb19pc19wMnBkbWEoc3RydWN0IGJpbyAqYmlvKVxcbi0tXFxuZHJpdmVycy9tZC9tZC5oLTM2LVxcdHJldHVybiBiaW9faGFzX2RhdGEoYmlvKSBcXHUwMDI2XFx1MDAyNiBiaW8tXFx1MDAzZWJpX2lvX3ZlYyBcXHUwMDI2XFx1MDAyNlxcbmRyaXZlcnMvbWQvbWQuaDozNzpcXHQgICAgICAgaXNfcGNpX3AycGRtYV9wYWdlKGJpby1cXHUwMDNlYmlfaW9fdmVjLVxcdTAwM2Vidl9wYWdlKTtcXG5kcml2ZXJzL21kL21kLmgtMzgtfVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvcGNpLmM9MTIwNj1zdGF0aWMgYmxrX3N0YXR1c190IG52bWVfcGNpX3NldHVwX2RhdGFfc2ltcGxlKHN0cnVjdCByZXF1ZXN0ICpyZXEsXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9wY2kuYy0xMjE3LVxcdFxcdHJldHVybiBCTEtfU1RTX0FHQUlOO1xcbmRyaXZlcnMvbnZtZS9ob3N0L3BjaS5jOjEyMTg6XFx0aWYgKGlzX3BjaV9wMnBkbWFfcGFnZShidi5idl9wYWdlKSlcXG5kcml2ZXJzL252bWUvaG9zdC9wY2kuYy0xMjE5LVxcdFxcdHJldHVybiBCTEtfU1RTX0FHQUlOO1xcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvcGNpLmM9MTM3Mj1zdGF0aWMgYmxrX3N0YXR1c190IG52bWVfcGNpX3NldHVwX21ldGFfbXB0cihzdHJ1Y3QgcmVxdWVzdCAqcmVxKVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvcGNpLmMtMTM3Ny1cXG5kcml2ZXJzL252bWUvaG9zdC9wY2kuYzoxMzc4OlxcdGlmIChpc19wY2lfcDJwZG1hX3BhZ2UoYnYuYnZfcGFnZSkpXFxuZHJpdmVycy9udm1lL2hvc3QvcGNpLmMtMTM3OS1cXHRcXHRyZXR1cm4gbnZtZV9wY2lfc2V0dXBfbWV0YV9pdGVyKHJlcSk7XFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L2lvLWNtZC1iZGV2LmM9MjUzPXN0YXRpYyB2b2lkIG52bWV0X2JkZXZfZXhlY3V0ZV9ydyhzdHJ1Y3QgbnZtZXRfcmVxICpyZXEpXFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L2lvLWNtZC1iZGV2LmMtMjg2LVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvaW8tY21kLWJkZXYuYzoyODc6XFx0aWYgKGlzX3BjaV9wMnBkbWFfcGFnZShzZ19wYWdlKHJlcS1cXHUwMDNlc2cpKSlcXG5kcml2ZXJzL252bWUvdGFyZ2V0L2lvLWNtZC1iZGV2LmMtMjg4LVxcdFxcdG9wZiB8PSBSRVFfTk9NRVJHRTtcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaD0xOTI9c3RhdGljIGlubGluZSB2b2lkIGZvbGlvX3NldF96b25lX2RldmljZV9kYXRhKHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKmRhdGEpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmgtMTk3LVxcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaDoxOTg6c3RhdGljIGlubGluZSBib29sIGlzX3BjaV9wMnBkbWFfcGFnZShjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmgtMTk5LXtcXG4tLVxcbmluY2x1ZGUvbGludXgvcGNpLXAycGRtYS5oPTE5MT1wY2lfcDJwZG1hX3N0YXRlKHN0cnVjdCBwY2lfcDJwZG1hX21hcF9zdGF0ZSAqc3RhdGUsIHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbmluY2x1ZGUvbGludXgvcGNpLXAycGRtYS5oLTE5My17XFxuaW5jbHVkZS9saW51eC9wY2ktcDJwZG1hLmg6MTk0OlxcdGlmIChJU19FTkFCTEVEKENPTkZJR19QQ0lfUDJQRE1BKSBcXHUwMDI2XFx1MDAyNiBpc19wY2lfcDJwZG1hX3BhZ2UocGFnZSkpIHtcXG5pbmNsdWRlL2xpbnV4L3BjaS1wMnBkbWEuaC0xOTUtXFx0XFx0X19wY2lfcDJwZG1hX3VwZGF0ZV9zdGF0ZShzdGF0ZSwgZGV2LCBwYWdlKTtcXG4tLVxcbm1tL2d1cC5jPTUxNz1zdGF0aWMgc3RydWN0IGZvbGlvICp0cnlfZ3JhYl9mb2xpb19mYXN0KHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgcmVmcyxcXG4tLVxcbm1tL2d1cC5jLTUyNy1cXG5tbS9ndXAuYzo1Mjg6XFx0aWYgKHVubGlrZWx5KCEoZmxhZ3MgXFx1MDAyNiBGT0xMX1BDSV9QMlBETUEpIFxcdTAwMjZcXHUwMDI2IGlzX3BjaV9wMnBkbWFfcGFnZShwYWdlKSkpXFxubW0vZ3VwLmMtNTI5LVxcdFxcdHJldHVybiBOVUxMO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QyMTozMzozMC4xODA3OTE5MzVaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTQwNzYxODI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgUDJQRE1BIFBhZ2UgVXNhZ2UgaW4gRGlyZWN0IEkvTyoqXG5cbk9rYXksIHNvIEkgc2VlIGBpc19wY2lfcDJwZG1hX3BhZ2VgIGJlaW5nIGNhbGxlZCB3aXRoaW4gYGJpb19pb3ZfaXRlcl9nZXRfcGFnZXNgLiBUaGF0J3MgaW50ZXJlc3RpbmcsIGJlY2F1c2UgYGJpb19pb3ZfaXRlcl9nZXRfcGFnZXNgIGlzIGVzc2VudGlhbCBmb3IgZGlyZWN0IEkvTyBhbmQgTlZNZSB0YXJnZXQgb3BlcmF0aW9ucy4gQSBsaWdodGJ1bGIgd2VudCBvZmY6IEkgcmVjYWxsIGBGT0xMX1BDSV9QMlBETUFgIGlzIGEgZmxhZyB1dGlsaXplZCBieSBgZ2V0X3VzZXJfcGFnZXNgLiBUaGlzIHRyaWdnZXJzIHRoZSBxdWVzdGlvbiDigJMgY2FuIHVzZXJzcGFjZSBhY3R1YWxseSBtYXAgUDJQRE1BIHBhZ2VzIGFuZCBjb25zZXF1ZW50bHkgcGVyZm9ybSBkaXJlY3QgSS9PIHVzaW5nIHRoZW0/XG5cblRoZSBhbnN3ZXIgc2VlbXMgdG8gYmUgeWVzLCBgT19ESVJFQ1RgICpjYW4qIGJlIHVzZWQgd2l0aCB0aGVzZSBQMlBETUEgcGFnZXMsIHByb3ZpZGVkIHRoZXkncmUgYXBwcm9wcmlhdGVseSBtYXBwZWQgaW50byB1c2Vyc3BhY2UuIE5vdywgdGhlIG5leHQgcXVlc3Rpb24gaXMgaG93IHRoaXMgbWFwcGluZyBhY3R1YWxseSBvY2N1cnMuIEFyZSB3ZSBsb29raW5nIGF0IHNvbWV0aGluZyBsaWtlIGAvZGV2L3AycG1lbSpgIGRldmljZXMsIG9yIGEgc2ltaWxhciBpbnRlcmZhY2U/IFRpbWUgdG8gZGlnIGludG8gYGRyaXZlcnMvcGNpL3AycGRtYS5jYCBhbmQgc2VlIGlmIHRoZXJlJ3MgYSBjaGFyYWN0ZXIgZGV2aWNlIG9yIGFueSBzaW1pbGFyIG1lY2hhbmlzbXMgZXhwb3NlZCB0aGF0IGFsbG93IHVzZXJsYW5kIGFjY2Vzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIxNzcsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMjE6MzM6MzQuNzIxNTU2MDk5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1ODAzNjI1NTAsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBjaV9wMnBkbWFfYWRkX2NsaWVudFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMjE6MzM6MzYuMzAxOTI0OTQ5WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk2OTkwNDc0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKkludmVzdGlnYXRpbmcgVXNlcnNwYWNlIE1hcHBpbmcgaW4gUENJIERpcmVjdCBNZW1vcnkgQWNjZXNzKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGhvdyB1c2Vyc3BhY2UgbWFwcGluZyBpcyBoYW5kbGVkIGluIHRoZSBQQ0kgRGlyZWN0IE1lbW9yeSBBY2Nlc3MgKERNQSkgY29udGV4dCB3aXRoaW4gdGhlIGtlcm5lbC4gVGhlIGxpa2VseSBwbGFjZSB0byBzdGFydCBsb29raW5nIGlzIHRoZSBgZHJpdmVycy9wY2kvcDJwZG1hLmNgIGZpbGUuIFRoYXQgc2VlbXMgdGhlIG1vc3QgbG9naWNhbCBzcG90IHRvIGZpbmQgdGhlIGNvcmUgaW1wbGVtZW50YXRpb24gYW5kIGFueSByZWxhdGVkIGludGVyYWN0aW9ucyB3aXRoIHVzZXJzcGFjZS4gSSdsbCBmb2N1cyBteSBpbnZlc3RpZ2F0aW9uIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjYzMywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDIxOjMzOjM5LjI3MTgzMTk1MloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQ0MzM0MTYsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZpbGVfb3BlcmF0aW9uc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3BjaS9wMnBkbWEuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMjE6MzM6MzkuMzI2MjgzMTM4WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4NTU0NDU0ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTlZNZSBDTUIgYW5kIFVzZXJwYWNlIE1hcHBpbmcgLSBBIFF1aWNrIFNjYW4qKlxuXG5Pa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBEaWQgSSBqdXN0IHJlYWQgc29tZXRoaW5nIGFib3V0IE5WTWUgQ01CIGJlaW5nIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2U/IFRoYXQgZG9lc24ndCBzb3VuZCByaWdodC4uLiB0eXBpY2FsbHksIHlvdSB3b3VsZG4ndCBleHBlY3QgdGhhdC4gTGV0IG1lIHJlLXRoaW5rIHRoYXQg4oCTIG5vLCB1c3VhbGx5IGl0J3Mgbm90IGEgZGlyZWN0IG1hcHBpbmcuIEJ1dOKApiBjb3VsZCB0aGVyZSBiZSBzb21ldGhpbmcgSeKAmW0gbWlzc2luZz9cblxuQWxyaWdodCwgbGV0J3MgcmVmb2N1cy4gUGVyaGFwcyB0aGUga2VybmVsJ3MgTlZNZSB0YXJnZXQgY29kZSBtaWdodCBob2xkIGEgY2x1ZS4gTGV0IG1lIHF1aWNrbHkgemVybyBpbiBvbiBgZHJpdmVycy9udm1lL3RhcmdldC9wMnBtZW0uY2AuIEkgaGF2ZSBhIGZlZWxpbmcgdGhhdCBmaWxlIG1pZ2h0IGJlIHJlbGV2YW50IHRvIHVuZGVyc3RhbmRpbmcgYW55IHBvdGVudGlhbCBudWFuY2VzIG9yIHdvcmthcm91bmRzIHJlbGF0ZWQgdG8gdGhpcyB0b3BpYy4gVGltZSB0byB0YWtlIGEgY2xvc2VyIGxvb2shXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyODA5LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMjE6MzM6NDMuMTgxNzMwMjM5WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzkwOTI2NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwMnBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9udm1lL3RhcmdldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9udm1lL3RhcmdldC9jb25maWdmcy5jLTE0LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9wY2kuaFxcdTAwM2VcXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvbmZpZ2ZzLmM6MTU6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BjaS1wMnBkbWEuaFxcdTAwM2VcXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvbmZpZ2ZzLmMtMTYtI2lmZGVmIENPTkZJR19OVk1FX1RBUkdFVF9BVVRIXFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvbmZpZ2ZzLmM9NTYwPUNPTkZJR0ZTX0FUVFIobnZtZXRfbnNfLCBkZXZpY2VfcGF0aCk7XFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvbmZpZ2ZzLmMtNTYyLSNpZmRlZiBDT05GSUdfUENJX1AyUERNQVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29uZmlnZnMuYzo1NjM6c3RhdGljIHNzaXplX3QgbnZtZXRfbnNfcDJwbWVtX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpwYWdlKVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29uZmlnZnMuYy01NjQte1xcbi0tXFxuZHJpdmVycy9udm1lL3RhcmdldC9jb25maWdmcy5jLTU2Ni1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvbmZpZ2ZzLmM6NTY3OlxcdHJldHVybiBwY2lfcDJwZG1hX2VuYWJsZV9zaG93KHBhZ2UsIG5zLVxcdTAwM2VwMnBfZGV2LCBucy1cXHUwMDNldXNlX3AycG1lbSk7XFxuZHJpdmVycy9udm1lL3RhcmdldC9jb25maWdmcy5jLTU2OC19XFxuZHJpdmVycy9udm1lL3RhcmdldC9jb25maWdmcy5jLTU2OS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvbmZpZ2ZzLmM6NTcwOnN0YXRpYyBzc2l6ZV90IG52bWV0X25zX3AycG1lbV9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXFxuZHJpdmVycy9udm1lL3RhcmdldC9jb25maWdmcy5jLTU3MS1cXHRcXHRjb25zdCBjaGFyICpwYWdlLCBzaXplX3QgY291bnQpXFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvbmZpZ2ZzLmMtNTczLVxcdHN0cnVjdCBudm1ldF9ucyAqbnMgPSB0b19udm1ldF9ucyhpdGVtKTtcXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvbmZpZ2ZzLmM6NTc0OlxcdHN0cnVjdCBwY2lfZGV2ICpwMnBfZGV2ID0gTlVMTDtcXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvbmZpZ2ZzLmM6NTc1OlxcdGJvb2wgdXNlX3AycG1lbTtcXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvbmZpZ2ZzLmMtNTc2LVxcdGludCByZXQgPSBjb3VudDtcXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29uZmlnZnMuYy01ODQtXFxuZHJpdmVycy9udm1lL3RhcmdldC9jb25maWdmcy5jOjU4NTpcXHRlcnJvciA9IHBjaV9wMnBkbWFfZW5hYmxlX3N0b3JlKHBhZ2UsIFxcdTAwMjZwMnBfZGV2LCBcXHUwMDI2dXNlX3AycG1lbSk7XFxuZHJpdmVycy9udm1lL3RhcmdldC9jb25maWdmcy5jLTU4Ni1cXHRpZiAoZXJyb3IpIHtcXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29uZmlnZnMuYy01OTAtXFxuZHJpdmVycy9udm1lL3RhcmdldC9jb25maWdmcy5jOjU5MTpcXHRucy1cXHUwMDNldXNlX3AycG1lbSA9IHVzZV9wMnBtZW07XFxuZHJpdmVycy9udm1lL3RhcmdldC9jb25maWdmcy5jOjU5MjpcXHRwY2lfZGV2X3B1dChucy1cXHUwMDNlcDJwX2Rldik7XFxuZHJpdmVycy9udm1lL3RhcmdldC9jb25maWdmcy5jOjU5MzpcXHRucy1cXHUwMDNlcDJwX2RldiA9IHAycF9kZXY7XFxuZHJpdmVycy9udm1lL3RhcmdldC9jb25maWdmcy5jLTU5NC1cXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29uZmlnZnMuYy02MDAtXFxuZHJpdmVycy9udm1lL3RhcmdldC9jb25maWdmcy5jOjYwMTpDT05GSUdGU19BVFRSKG52bWV0X25zXywgcDJwbWVtKTtcXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvbmZpZ2ZzLmMtNjAyLSNlbmRpZiAvKiBDT05GSUdfUENJX1AyUERNQSAqL1xcbi0tXFxuZHJpdmVycy9udm1lL3RhcmdldC9jb25maWdmcy5jPTgyNT1zdGF0aWMgc3RydWN0IGNvbmZpZ2ZzX2F0dHJpYnV0ZSAqbnZtZXRfbnNfYXR0cnNbXSA9IHtcXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29uZmlnZnMuYy04MzQtI2lmZGVmIENPTkZJR19QQ0lfUDJQRE1BXFxuZHJpdmVycy9udm1lL3RhcmdldC9jb25maWdmcy5jOjgzNTpcXHRcXHUwMDI2bnZtZXRfbnNfYXR0cl9wMnBtZW0sXFxuZHJpdmVycy9udm1lL3RhcmdldC9jb25maWdmcy5jLTgzNi0jZW5kaWZcXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jLTEwLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9yY3VsaXN0LmhcXHUwMDNlXFxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmM6MTE6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BjaS1wMnBkbWEuaFxcdTAwM2VcXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYy0xMi0jaW5jbHVkZSBcXHUwMDNjbGludXgvc2NhdHRlcmxpc3QuaFxcdTAwM2VcXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jPTQ3Nz1zdGF0aWMgdm9pZCBudm1ldF9uc19kZXZfZGlzYWJsZShzdHJ1Y3QgbnZtZXRfbnMgKm5zKVxcbi0tXFxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtNDgyLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jOjQ4MzpzdGF0aWMgaW50IG52bWV0X3AycG1lbV9uc19lbmFibGUoc3RydWN0IG52bWV0X25zICpucylcXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYy00ODQte1xcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jLTQ4NS1cXHRpbnQgcmV0O1xcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jOjQ4NjpcXHRzdHJ1Y3QgcGNpX2RldiAqcDJwX2RldjtcXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYy00ODctXFxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmM6NDg4OlxcdGlmICghbnMtXFx1MDAzZXVzZV9wMnBtZW0pXFxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtNDg5LVxcdFxcdHJldHVybiAwO1xcbi0tXFxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtNDk1LVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jOjQ5NjpcXHRpZiAoIWJsa19xdWV1ZV9wY2lfcDJwZG1hKG5zLVxcdTAwM2ViZGV2LVxcdTAwM2ViZF9kaXNrLVxcdTAwM2VxdWV1ZSkpIHtcXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYy00OTctXFx0XFx0cHJfZXJyKFxcXCJwZWVyLXRvLXBlZXIgRE1BIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGRyaXZlciBvZiAlc1xcXFxuXFxcIixcXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jLTUwMS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYzo1MDI6XFx0aWYgKG5zLVxcdTAwM2VwMnBfZGV2KSB7XFxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmM6NTAzOlxcdFxcdHJldCA9IHBjaV9wMnBkbWFfZGlzdGFuY2UobnMtXFx1MDAzZXAycF9kZXYsIG52bWV0X25zX2RldihucyksIHRydWUpO1xcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jLTUwNC1cXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jLTUwNy1cXHRcXHQvKlxcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jOjUwODpcXHRcXHQgKiBSaWdodCBub3cgd2UganVzdCBjaGVjayB0aGF0IHRoZXJlIGlzIHAycG1lbSBhdmFpbGFibGUgc29cXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYy01MDktXFx0XFx0ICogd2UgY2FuIHJlcG9ydCBhbiBlcnJvciB0byB0aGUgdXNlciByaWdodCBhd2F5IGlmIHRoZXJlXFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYy01MTMtXFxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmM6NTE0OlxcdFxcdHAycF9kZXYgPSBwY2lfcDJwbWVtX2ZpbmQobnZtZXRfbnNfZGV2KG5zKSk7XFxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmM6NTE1OlxcdFxcdGlmICghcDJwX2Rldikge1xcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jLTUxNi1cXHRcXHRcXHRwcl9lcnIoXFxcIm5vIHBlZXItdG8tcGVlciBtZW1vcnkgaXMgYXZhaWxhYmxlIGZvciAlc1xcXFxuXFxcIixcXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jLTUyMC1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYzo1MjE6XFx0XFx0cGNpX2Rldl9wdXQocDJwX2Rldik7XFxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtNTIyLVxcdH1cXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jLTUyNi1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYzo1Mjc6c3RhdGljIHZvaWQgbnZtZXRfcDJwbWVtX25zX2FkZF9wMnAoc3RydWN0IG52bWV0X2N0cmwgKmN0cmwsXFxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtNTI4LVxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgbnZtZXRfbnMgKm5zKVxcbi0tXFxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtNTMwLVxcdHN0cnVjdCBkZXZpY2UgKmNsaWVudHNbMl07XFxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmM6NTMxOlxcdHN0cnVjdCBwY2lfZGV2ICpwMnBfZGV2O1xcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jLTUzMi1cXHRpbnQgcmV0O1xcbi0tXFxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtNTM1LVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jOjUzNjpcXHRpZiAoIWN0cmwtXFx1MDAzZXAycF9jbGllbnQgfHwgIW5zLVxcdTAwM2V1c2VfcDJwbWVtKVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jLTUzNy1cXHRcXHRyZXR1cm47XFxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtNTM4LVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jOjUzOTpcXHRpZiAobnMtXFx1MDAzZXAycF9kZXYpIHtcXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYzo1NDA6XFx0XFx0cmV0ID0gcGNpX3AycGRtYV9kaXN0YW5jZShucy1cXHUwMDNlcDJwX2RldiwgY3RybC1cXHUwMDNlcDJwX2NsaWVudCwgdHJ1ZSk7XFxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtNTQxLVxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi0tXFxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtNTQzLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jOjU0NDpcXHRcXHRwMnBfZGV2ID0gcGNpX2Rldl9nZXQobnMtXFx1MDAzZXAycF9kZXYpO1xcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jLTU0NS1cXHR9IGVsc2Uge1xcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jOjU0NjpcXHRcXHRjbGllbnRzWzBdID0gY3RybC1cXHUwMDNlcDJwX2NsaWVudDtcXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYy01NDctXFx0XFx0Y2xpZW50c1sxXSA9IG52bWV0X25zX2Rldihucyk7XFxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtNTQ4LVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jOjU0OTpcXHRcXHRwMnBfZGV2ID0gcGNpX3AycG1lbV9maW5kX21hbnkoY2xpZW50cywgQVJSQVlfU0laRShjbGllbnRzKSk7XFxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmM6NTUwOlxcdFxcdGlmICghcDJwX2Rldikge1xcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jLTU1MS1cXHRcXHRcXHRwcl9lcnIoXFxcIm5vIHBlZXItdG8tcGVlciBtZW1vcnkgaXMgYXZhaWxhYmxlIHRoYXQncyBzdXBwb3J0ZWQgYnkgJXMgYW5kICVzXFxcXG5cXFwiLFxcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jOjU1MjpcXHRcXHRcXHQgICAgICAgZGV2X25hbWUoY3RybC1cXHUwMDNlcDJwX2NsaWVudCksIG5zLVxcdTAwM2VkZXZpY2VfcGF0aCk7XFxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtNTUzLVxcdFxcdFxcdHJldHVybjtcXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jLTU1Ni1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYzo1NTc6XFx0cmV0ID0gcmFkaXhfdHJlZV9pbnNlcnQoXFx1MDAyNmN0cmwtXFx1MDAzZXAycF9uc19tYXAsIG5zLVxcdTAwM2Vuc2lkLCBwMnBfZGV2KTtcXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYy01NTgtXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmM6NTU5OlxcdFxcdHBjaV9kZXZfcHV0KHAycF9kZXYpO1xcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jLTU2MC1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYzo1NjE6XFx0cHJfaW5mbyhcXFwidXNpbmcgcDJwbWVtIG9uICVzIGZvciBuc2lkICVkXFxcXG5cXFwiLCBwY2lfbmFtZShwMnBfZGV2KSxcXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYy01NjItXFx0XFx0bnMtXFx1MDAzZW5zaWQpO1xcbi0tXFxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmM9NTc3PWludCBudm1ldF9uc19lbmFibGUoc3RydWN0IG52bWV0X25zICpucylcXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jLTU5OS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYzo2MDA6XFx0cmV0ID0gbnZtZXRfcDJwbWVtX25zX2VuYWJsZShucyk7XFxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtNjAxLVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYy02MDQtXFx0bGlzdF9mb3JfZWFjaF9lbnRyeShjdHJsLCBcXHUwMDI2c3Vic3lzLVxcdTAwM2VjdHJscywgc3Vic3lzX2VudHJ5KVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jOjYwNTpcXHRcXHRudm1ldF9wMnBtZW1fbnNfYWRkX3AycChjdHJsLCBucyk7XFxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtNjA2LVxcbi0tXFxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtNjI3LVxcdGxpc3RfZm9yX2VhY2hfZW50cnkoY3RybCwgXFx1MDAyNnN1YnN5cy1cXHUwMDNlY3RybHMsIHN1YnN5c19lbnRyeSlcXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYzo2Mjg6XFx0XFx0cGNpX2Rldl9wdXQocmFkaXhfdHJlZV9kZWxldGUoXFx1MDAyNmN0cmwtXFx1MDAzZXAycF9uc19tYXAsIG5zLVxcdTAwM2Vuc2lkKSk7XFxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtNjI5LW91dF9kZXZfZGlzYWJsZTpcXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jPTYzND12b2lkIG52bWV0X25zX2Rpc2FibGUoc3RydWN0IG52bWV0X25zICpucylcXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jLTY0Ni1cXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGN0cmwsIFxcdTAwMjZzdWJzeXMtXFx1MDAzZWN0cmxzLCBzdWJzeXNfZW50cnkpXFxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmM6NjQ3OlxcdFxcdHBjaV9kZXZfcHV0KHJhZGl4X3RyZWVfZGVsZXRlKFxcdTAwMjZjdHJsLVxcdTAwM2VwMnBfbnNfbWFwLCBucy1cXHUwMDNlbnNpZCkpO1xcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jLTY0OC1cXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jPTEyODg9c3RhdGljIHVuc2lnbmVkIGludCBudm1ldF9kYXRhX3RyYW5zZmVyX2xlbihzdHJ1Y3QgbnZtZXRfcmVxICpyZXEpXFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYy0xMjkyLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jOjEyOTM6c3RhdGljIGludCBudm1ldF9yZXFfYWxsb2NfcDJwbWVtX3NnbHMoc3RydWN0IHBjaV9kZXYgKnAycF9kZXYsXFxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtMTI5NC1cXHRcXHRzdHJ1Y3QgbnZtZXRfcmVxICpyZXEpXFxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtMTI5NS17XFxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmM6MTI5NjpcXHRyZXEtXFx1MDAzZXNnID0gcGNpX3AycG1lbV9hbGxvY19zZ2wocDJwX2RldiwgXFx1MDAyNnJlcS1cXHUwMDNlc2dfY250LFxcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jLTEyOTctXFx0XFx0XFx0bnZtZXRfZGF0YV90cmFuc2Zlcl9sZW4ocmVxKSk7XFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYy0xMzAxLVxcdGlmIChyZXEtXFx1MDAzZW1ldGFkYXRhX2xlbikge1xcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jOjEzMDI6XFx0XFx0cmVxLVxcdTAwM2VtZXRhZGF0YV9zZyA9IHBjaV9wMnBtZW1fYWxsb2Nfc2dsKHAycF9kZXYsXFxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtMTMwMy1cXHRcXHRcXHRcXHRcXHUwMDI2cmVxLVxcdTAwM2VtZXRhZGF0YV9zZ19jbnQsIHJlcS1cXHUwMDNlbWV0YWRhdGFfbGVuKTtcXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jLTEzMDctXFxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmM6MTMwODpcXHRyZXEtXFx1MDAzZXAycF9kZXYgPSBwMnBfZGV2O1xcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jLTEzMDktXFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYy0xMzExLW91dF9mcmVlX3NnOlxcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jOjEzMTI6XFx0cGNpX3AycG1lbV9mcmVlX3NnbChyZXEtXFx1MDAzZXAycF9kZXYsIHJlcS1cXHUwMDNlc2cpO1xcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jLTEzMTMtb3V0X2VycjpcXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jLTEzMTYtXFxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmM6MTMxNzpzdGF0aWMgc3RydWN0IHBjaV9kZXYgKm52bWV0X3JlcV9maW5kX3AycF9kZXYoc3RydWN0IG52bWV0X3JlcSAqcmVxKVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jLTEzMTgte1xcbi0tXFxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtMTMyMS1cXHRcXHRyZXR1cm4gTlVMTDtcXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYzoxMzIyOlxcdHJldHVybiByYWRpeF90cmVlX2xvb2t1cChcXHUwMDI2cmVxLVxcdTAwM2VzcS1cXHUwMDNlY3RybC1cXHUwMDNlcDJwX25zX21hcCwgcmVxLVxcdTAwM2Vucy1cXHUwMDNlbnNpZCk7XFxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtMTMyMy19XFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYz0xMzI1PWludCBudm1ldF9yZXFfYWxsb2Nfc2dscyhzdHJ1Y3QgbnZtZXRfcmVxICpyZXEpXFxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtMTMyNi17XFxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmM6MTMyNzpcXHRzdHJ1Y3QgcGNpX2RldiAqcDJwX2RldiA9IG52bWV0X3JlcV9maW5kX3AycF9kZXYocmVxKTtcXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYy0xMzI4LVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jOjEzMjk6XFx0aWYgKHAycF9kZXYgXFx1MDAyNlxcdTAwMjYgIW52bWV0X3JlcV9hbGxvY19wMnBtZW1fc2dscyhwMnBfZGV2LCByZXEpKVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jLTEzMzAtXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYz0xMzUyPXZvaWQgbnZtZXRfcmVxX2ZyZWVfc2dscyhzdHJ1Y3QgbnZtZXRfcmVxICpyZXEpXFxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtMTM1My17XFxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmM6MTM1NDpcXHRpZiAocmVxLVxcdTAwM2VwMnBfZGV2KSB7XFxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmM6MTM1NTpcXHRcXHRwY2lfcDJwbWVtX2ZyZWVfc2dsKHJlcS1cXHUwMDNlcDJwX2RldiwgcmVxLVxcdTAwM2VzZyk7XFxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtMTM1Ni1cXHRcXHRpZiAocmVxLVxcdTAwM2VtZXRhZGF0YV9zZylcXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYzoxMzU3OlxcdFxcdFxcdHBjaV9wMnBtZW1fZnJlZV9zZ2wocmVxLVxcdTAwM2VwMnBfZGV2LCByZXEtXFx1MDAzZW1ldGFkYXRhX3NnKTtcXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYzoxMzU4OlxcdFxcdHJlcS1cXHUwMDNlcDJwX2RldiA9IE5VTEw7XFxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtMTM1OS1cXHR9IGVsc2Uge1xcbi0tXFxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmM9MTUzMj1ib29sIG52bWV0X2hvc3RfYWxsb3dlZChzdHJ1Y3QgbnZtZXRfc3Vic3lzICpzdWJzeXMsIGNvbnN0IGNoYXIgKmhvc3RucW4pXFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYy0xNTUxLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jOjE1NTI6c3RhdGljIHZvaWQgbnZtZXRfc2V0dXBfcDJwX25zX21hcChzdHJ1Y3QgbnZtZXRfY3RybCAqY3RybCxcXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYzoxNTUzOlxcdFxcdHN0cnVjdCBkZXZpY2UgKnAycF9jbGllbnQpXFxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtMTU1NC17XFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYy0xNTU5LVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jOjE1NjA6XFx0aWYgKCFwMnBfY2xpZW50KVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jLTE1NjEtXFx0XFx0cmV0dXJuO1xcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jLTE1NjItXFxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmM6MTU2MzpcXHRjdHJsLVxcdTAwM2VwMnBfY2xpZW50ID0gZ2V0X2RldmljZShwMnBfY2xpZW50KTtcXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYy0xNTY0LVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jLTE1NjUtXFx0bnZtZXRfZm9yX2VhY2hfZW5hYmxlZF9ucyhcXHUwMDI2Y3RybC1cXHUwMDNlc3Vic3lzLVxcdTAwM2VuYW1lc3BhY2VzLCBpZHgsIG5zKVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jOjE1NjY6XFx0XFx0bnZtZXRfcDJwbWVtX25zX2FkZF9wMnAoY3RybCwgbnMpO1xcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jLTE1NjctfVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jLTE1NjgtXFxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmM6MTU2OTpzdGF0aWMgdm9pZCBudm1ldF9yZWxlYXNlX3AycF9uc19tYXAoc3RydWN0IG52bWV0X2N0cmwgKmN0cmwpXFxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtMTU3MC17XFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYy0xNTc1LVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jOjE1NzY6XFx0cmFkaXhfdHJlZV9mb3JfZWFjaF9zbG90KHNsb3QsIFxcdTAwMjZjdHJsLVxcdTAwM2VwMnBfbnNfbWFwLCBcXHUwMDI2aXRlciwgMClcXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYy0xNTc3LVxcdFxcdHBjaV9kZXZfcHV0KHJhZGl4X3RyZWVfZGVyZWZfc2xvdChzbG90KSk7XFxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtMTU3OC1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYzoxNTc5OlxcdHB1dF9kZXZpY2UoY3RybC1cXHUwMDNlcDJwX2NsaWVudCk7XFxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtMTU4MC19XFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYz0xNTkxPXN0cnVjdCBudm1ldF9jdHJsICpudm1ldF9hbGxvY19jdHJsKHN0cnVjdCBudm1ldF9hbGxvY19jdHJsX2FyZ3MgKmFyZ3MpXFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYy0xNjM3LVxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZjdHJsLVxcdTAwM2Vhc3luY19ldmVudHMpO1xcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jOjE2Mzg6XFx0SU5JVF9SQURJWF9UUkVFKFxcdTAwMjZjdHJsLVxcdTAwM2VwMnBfbnNfbWFwLCBHRlBfS0VSTkVMKTtcXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYy0xNjM5LVxcdElOSVRfV09SSyhcXHUwMDI2Y3RybC1cXHUwMDNlZmF0YWxfZXJyX3dvcmssIG52bWV0X2ZhdGFsX2Vycm9yX2hhbmRsZXIpO1xcbi0tXFxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtMTY5MS1cXHRsaXN0X2FkZF90YWlsKFxcdTAwMjZjdHJsLVxcdTAwM2VzdWJzeXNfZW50cnksIFxcdTAwMjZzdWJzeXMtXFx1MDAzZWN0cmxzKTtcXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYzoxNjkyOlxcdG52bWV0X3NldHVwX3AycF9uc19tYXAoY3RybCwgYXJncy1cXHUwMDNlcDJwX2NsaWVudCk7XFxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtMTY5My1cXHRudm1ldF9kZWJ1Z2ZzX2N0cmxfc2V0dXAoY3RybCk7XFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYz0xNzQxPXN0YXRpYyB2b2lkIG52bWV0X2N0cmxfZnJlZShzdHJ1Y3Qga3JlZiAqcmVmKVxcbi0tXFxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtMTc0Ny1cXHRudm1ldF9jdHJsX2Rlc3Ryb3lfcHIoY3RybCk7XFxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmM6MTc0ODpcXHRudm1ldF9yZWxlYXNlX3AycF9uc19tYXAoY3RybCk7XFxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtMTc0OS1cXHRsaXN0X2RlbChcXHUwMDI2Y3RybC1cXHUwMDNlc3Vic3lzX2VudHJ5KTtcXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvZmFicmljcy1jbWQuYz0yNjc9c3RhdGljIHZvaWQgbnZtZXRfZXhlY3V0ZV9hZG1pbl9jb25uZWN0KHN0cnVjdCBudm1ldF9yZXEgKnJlcSlcXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvZmFicmljcy1jbWQuYy0yNzUtXFx0XFx0Lm9wcyA9IHJlcS1cXHUwMDNlb3BzLFxcbmRyaXZlcnMvbnZtZS90YXJnZXQvZmFicmljcy1jbWQuYzoyNzY6XFx0XFx0LnAycF9jbGllbnQgPSByZXEtXFx1MDAzZXAycF9jbGllbnQsXFxuZHJpdmVycy9udm1lL3RhcmdldC9mYWJyaWNzLWNtZC5jLTI3Ny1cXHRcXHQua2F0byA9IGxlMzJfdG9fY3B1KGMtXFx1MDAzZWthdG8pLFxcbi0tXFxuZHJpdmVycy9udm1lL3RhcmdldC9pby1jbWQtYmRldi5jPTI1Mz1zdGF0aWMgdm9pZCBudm1ldF9iZGV2X2V4ZWN1dGVfcncoc3RydWN0IG52bWV0X3JlcSAqcmVxKVxcbi0tXFxuZHJpdmVycy9udm1lL3RhcmdldC9pby1jbWQtYmRldi5jLTI4Ni1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L2lvLWNtZC1iZGV2LmM6Mjg3OlxcdGlmIChpc19wY2lfcDJwZG1hX3BhZ2Uoc2dfcGFnZShyZXEtXFx1MDAzZXNnKSkpXFxuZHJpdmVycy9udm1lL3RhcmdldC9pby1jbWQtYmRldi5jLTI4OC1cXHRcXHRvcGYgfD0gUkVRX05PTUVSR0U7XFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L252bWV0Lmg9MTAwPXN0cnVjdCBudm1ldF9ucyB7XFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L252bWV0LmgtMTIzLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvbnZtZXQuaDoxMjQ6XFx0c3RydWN0IHBjaV9kZXZcXHRcXHQqcDJwX2RldjtcXG5kcml2ZXJzL252bWUvdGFyZ2V0L252bWV0Lmg6MTI1OlxcdGludFxcdFxcdFxcdHVzZV9wMnBtZW07XFxuZHJpdmVycy9udm1lL3RhcmdldC9udm1ldC5oLTEyNi1cXHRpbnRcXHRcXHRcXHRwaV90eXBlO1xcbi0tXFxuZHJpdmVycy9udm1lL3RhcmdldC9udm1ldC5oPTI1Mj1zdHJ1Y3QgbnZtZXRfY3RybCB7XFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L252bWV0LmgtMjkwLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvbnZtZXQuaDoyOTE6XFx0c3RydWN0IGRldmljZVxcdFxcdCpwMnBfY2xpZW50O1xcbmRyaXZlcnMvbnZtZS90YXJnZXQvbnZtZXQuaDoyOTI6XFx0c3RydWN0IHJhZGl4X3RyZWVfcm9vdFxcdHAycF9uc19tYXA7XFxuZHJpdmVycy9udm1lL3RhcmdldC9udm1ldC5oLTI5My0jaWZkZWYgQ09ORklHX05WTUVfVEFSR0VUX0RFQlVHRlNcXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvbnZtZXQuaD00NDc9c3RydWN0IG52bWV0X3JlcSB7XFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L252bWV0LmgtNDkyLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvbnZtZXQuaDo0OTM6XFx0c3RydWN0IHBjaV9kZXZcXHRcXHQqcDJwX2RldjtcXG5kcml2ZXJzL252bWUvdGFyZ2V0L252bWV0Lmg6NDk0OlxcdHN0cnVjdCBkZXZpY2VcXHRcXHQqcDJwX2NsaWVudDtcXG5kcml2ZXJzL252bWUvdGFyZ2V0L252bWV0LmgtNDk1LVxcdHUxNlxcdFxcdFxcdGVycm9yX2xvYztcXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvbnZtZXQuaD02MDU9c3RydWN0IG52bWV0X2FsbG9jX2N0cmxfYXJncyB7XFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L252bWV0LmgtNjExLVxcdGNvbnN0IHN0cnVjdCBudm1ldF9mYWJyaWNzX29wcyAqb3BzO1xcbmRyaXZlcnMvbnZtZS90YXJnZXQvbnZtZXQuaDo2MTI6XFx0c3RydWN0IGRldmljZVxcdFxcdCpwMnBfY2xpZW50O1xcbmRyaXZlcnMvbnZtZS90YXJnZXQvbnZtZXQuaC02MTMtXFx0dTMyXFx0XFx0XFx0a2F0bztcXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvcmRtYS5jPTQwMD1zdGF0aWMgaW50IG52bWV0X3JkbWFfYWxsb2NfcnNwKHN0cnVjdCBudm1ldF9yZG1hX2RldmljZSAqbmRldixcXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvcmRtYS5jLTQxMi1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L3JkbWEuYzo0MTM6XFx0aWYgKGliX2RtYV9wY2lfcDJwX2RtYV9zdXBwb3J0ZWQobmRldi1cXHUwMDNlZGV2aWNlKSlcXG5kcml2ZXJzL252bWUvdGFyZ2V0L3JkbWEuYzo0MTQ6XFx0XFx0ci1cXHUwMDNlcmVxLnAycF9jbGllbnQgPSBcXHUwMDI2bmRldi1cXHUwMDNlZGV2aWNlLVxcdTAwM2VkZXY7XFxuZHJpdmVycy9udm1lL3RhcmdldC9yZG1hLmMtNDE1LVxcdHItXFx1MDAzZXNlbmRfc2dlLmxlbmd0aCA9IHNpemVvZigqci1cXHUwMDNlcmVxLmNxZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDIxOjMzOjQzLjIzNTY0MzAzNloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NDE0NjIyNzMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlYWNoaW5nIHRoZSBUYXJnZXQ6IEEgRnV6emluZyBTdHJhdGVneSoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBkaWdnaW5nIGludG8gdGhpcywgYW5kIGl0IGxvb2tzIGxpa2UgYGRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jYCBoYXMgUDJQIHN1cHBvcnQgYnVpbHQgaW4uICBUaGF0J3Mga2V5LiAgSXQgdXNlcyBgcGNpX3AycG1lbV9hbGxvY19zZ2xgLCB3aGljaCBpcyBwcmVjaXNlbHkgd2hhdCB3ZSB3YW50LCBhbmQgaW1wb3J0YW50bHksIGl0J3MgY29udHJvbGxhYmxlIHZpYSBjb25maWdmcyB1c2luZyB0aGUgYHAycG1lbWAgb3B0aW9uLiBCaW5nby5cblxuTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGlmIHdlIHNldCB1cCBhbiBOVk1lIHRhcmdldCB1c2luZyBhbiBNRCBhcnJheSBhcyBhIGJhY2tlbmQg4oCTIGEgYG52bWV0X25zYCBiYWNrZWQgYnkgYSBibG9jayBkZXZpY2Ugd2hpY2ggaXRzZWxmIGlzIGFuIE1EIGFycmF5IOKAkyBhbmQgdGhlbiBlbmFibGUgYHAycG1lbWAgb24gdGhhdCBuYW1lc3BhY2UuLi4gYm9vbS4gVGhlIE5WTWUgdGFyZ2V0ICpzaG91bGQqIHN0YXJ0IGFsbG9jYXRpbmcgUDJQIG1lbW9yeSBhbmQgdGhlbiBpc3N1aW5nIEkvTyBkaXJlY3RseSB0byB0aGUgTUQgYXJyYXksIHVzaW5nIHRob3NlIHBhZ2VzLiBUaGF0IHRyaWdnZXJzIHRoZSBNRCBSQUlEIGNvZGUgd2UgYXJlIGludGVyZXN0ZWQgaW4uIFRoaXMgaXMgZGVmaW5pdGVseSBhIHNvbGlkIGF0dGFjayBzdXJmYWNlLlxuXG5BbmQgaGVyZSdzIHRoZSBraWNrZXI6IHRoaXMgaXMgYWxsIGFjaGlldmFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCB3aXRoIFFFTVUuICBXZSBjYW4gcHJvdmlzaW9uIGEgdmlydHVhbCBOVk1lIGRldmljZSB3aXRoIGEgQ01CIChDb250cm9sbGVyIE1lbW9yeSBCdWZmZXIpIGFjdGluZyBhcyBhIFAyUCBtZW1vcnkgcHJvdmlkZXIuIEFuZCB5ZXMsIFFFTVUncyBOVk1lIGRldmljZSAqZG9lcyogc3VwcG9ydCBDTUIsIHRoYW5rcyB0byB0aGUgYGNtYl9zaXplX21iYCBwYXJhbWV0ZXIuXG5cbk5vdywgZG9lcyBzeXprYWxsZXIgcGxheSBuaWNlbHk/ICBZZXMhIEl0IGhhcyBkZXNjcmlwdGlvbnMgZm9yIE5WTWUgdGFyZ2V0IGNvbmZpZ2ZzLCBzbyB0aGF0J3MgY292ZXJlZC4gQWxzbywgaXQgaGFzIGRlc2NyaXB0aW9ucyBmb3IgTUQgaW9jdGxzLCBzbyB3ZSBjYW4gZGVmaW5lIHRoZSBNRCBhcnJheXMuICBUaGlzIGlzIGFsbCBkZWZpbml0ZWx5IHJlYWNoYWJsZSBhbmQgcmlwZSBmb3IgZnV6emluZy5cblxuTW92aW5nIG9uLCBJIG5lZWQgdG8gY2hlY2sgb3V0IHRoZSBOVk1lIFJETUEgbW9kaWZpY2F0aW9ucyBpbiBgZHJpdmVycy9udm1lL2hvc3QvcmRtYS5jYC4gSXQgbG9va3MgbGlrZSB0aGUgcGF0Y2ggY2hhbmdlcyBgbnZtZV9yZG1hX2RtYV9tYXBfcmVxYCB0byB1c2UgYGliX2RtYV9tYXBfc2d0YWJsZV9hdHRyc2AgaW5zdGVhZCBvZiB0aGUgb2xkIGBpYl9kbWFfbWFwX3NnYC4gIFdlJ3JlIG1hcHBpbmcgdGhlIHNjYXR0ZXJsaXN0LlxuXG5BbHNvLCBpbiBgbnZtZV9yZG1hX3F1ZXVlX3JxYCwgaXQgaGFuZGxlcyBgLUVSRU1PVEVJT2AgYnkgcmV0dXJuaW5nIGBCTEtfU1RTX1AyUERNQWAuIFRoaXMgaXMgYWxzbyBhIHZhbGlkIHBhdGh3YXkgaWYgd2UncmUgdXNpbmcgTlZNZSBvdmVyIFJETUEsIHdoaWNoIHN5emthbGxlciBzdXBwb3J0cyB3aXRoIGl0cyBgc2l3YCBvciBgcnhlYCBzb2Z0d2FyZSBSRE1BIGRyaXZlcnMuXG5cbk5vdyBJJ20gdGhpbmtpbmcsIGRvZXMgc29mdHdhcmUgUkRNQSBzdXBwb3J0IFAyUERNQT8gIGBpYl9kbWFfcGNpX3AycF9kbWFfc3VwcG9ydGVkYCBpcyBjaGVja2VkIGluIGBudm1ldF9yZG1hX2FsbG9jX3JzcGAsIGJ1dCB0aGUgY29kZSBpbiBgbnZtZV9yZG1hX2RtYV9tYXBfcmVxYCBzZWVtcyB0byBleGVjdXRlIGZvciAqYWxsKiBOVk1lIFJETUEgcmVxdWVzdHMsIG5vdCBqdXN0IFAyUERNQSBvbmVzISAgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBsYXN0IHBvaW50Li4uIEknbGwgdmVyaWZ5IHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MTM2LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTY2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDIxOjMzOjUyLjY1MDI2NzY2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjU1MDQ3NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpYl9kbWFfbWFwX3NndGFibGVfYXR0cnNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9udm1lL2hvc3QvcmRtYS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbnZtZS9ob3N0L3JkbWEuYz0xNDY4PXN0YXRpYyBpbnQgbnZtZV9yZG1hX2RtYV9tYXBfcmVxKHN0cnVjdCBpYl9kZXZpY2UgKmliZGV2LCBzdHJ1Y3QgcmVxdWVzdCAqcnEsXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9yZG1hLmMtMTQ4Ny1cXHR9O1xcbmRyaXZlcnMvbnZtZS9ob3N0L3JkbWEuYzoxNDg4OlxcdHJldCA9IGliX2RtYV9tYXBfc2d0YWJsZV9hdHRycyhpYmRldiwgXFx1MDAyNnNndCwgcnFfZG1hX2RpcihycSksIDApO1xcbmRyaXZlcnMvbnZtZS9ob3N0L3JkbWEuYy0xNDg5LVxcdGlmICh1bmxpa2VseShyZXQpKVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvcmRtYS5jLTE1MTAtXFx0XFx0fTtcXG5kcml2ZXJzL252bWUvaG9zdC9yZG1hLmM6MTUxMTpcXHRcXHRyZXQgPSBpYl9kbWFfbWFwX3NndGFibGVfYXR0cnMoaWJkZXYsIFxcdTAwMjZzZ3QsIHJxX2RtYV9kaXIocnEpLCAwKTtcXG5kcml2ZXJzL252bWUvaG9zdC9yZG1hLmMtMTUxMi1cXHRcXHRpZiAodW5saWtlbHkocmV0KSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMjE6MzM6NTIuNzA2ODIyMzM2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg3ODY1MzUzOTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBOVk1lIFJETUEgYW5kIE1EIFJBSUQgTW9kaWZpY2F0aW9ucyoqXG5cbk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCwgdGhlIGNvcmUgY2hhbmdlIGZvciBOVk1lIFJETUEsIHNwZWNpZmljYWxseSB0aGUgc3dpdGNoIGluIGBudm1lX3JkbWFfZG1hX21hcF9yZXFgIHRvIGBpYl9kbWFfbWFwX3NndGFibGVfYXR0cnNgLCBzZWVtcyBsaWtlIGEgc29saWQgZnVuY3Rpb25hbCBjaGFuZ2UgYWZmZWN0aW5nIGFsbCBOVk1lIFJETUEgSS9PLiBUaGUgTlZNZSBSRE1BIGNvbXBvbmVudCBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBhbmQgdGVzdGFibGUsIHdoaWNoIGlzIGdvb2QuIFdlIGRvbid0IG5lY2Vzc2FyaWx5IG5lZWQgUDJQRE1BIHRvIHZhbGlkYXRlIHRoZSBmdW5kYW1lbnRhbCBSRE1BIHBhcnQuXG5cbk5vdywgdGhlIG1vcmUgaW50ZXJlc3RpbmcgcGFydCBpcyB0aGUgbW9kaWZpY2F0aW9ucyB0byB0aGUgTUQgUkFJRCBjb2RlLiBJdCdzIHRvdWNoaW5nIGEgbnVtYmVyIG9mIGZ1bmN0aW9ucywgcHJpbWFyaWx5IGFyb3VuZCBob3cgUDJQRE1BIGJpb3MgYXJlIGhhbmRsZWQ6IGBtZF9zdWJtaXRfYmlvYCBub3cgc2V0cyBgUkVRX05PTUVSR0VgLCBgcmFpZDFfd3JpdGVfZXJyb3JgIGlzIG1vZGlmaWVkIHRvIGF2b2lkIGRpc2sgZmFpbHVyZXMgdW5kZXIgc3BlY2lmaWMgUDJQRE1BIGNvbmRpdGlvbnMsIGFuZCBjaGFuZ2VzIGV4dGVuZCB0byBgcmFpZDFfZW5kX3dyaXRlX3JlcXVlc3RgLCBgcmFpZDFfd3JpdGVfcmVxdWVzdGAsIGBoYW5kbGVfd3JpdGVfZmluaXNoZWRgLCBhbmQgYGhhbmRsZV9yZWFkX2Vycm9yYCB0byBoYW5kbGUgUDJQRE1BIGVycm9ycywgbGlrZSBibG9ja2luZyB0aGUgYmlvIGlmIHdlIGdldCBhIGBwMnBkbWFfZXJyb3JgLiBUaGVyZSBhcmUgc2ltaWxhciBjaGFuZ2VzIGZvciBSQUlEMTAsIHRvby5cblxuVG8gdGVzdCB0aGVzZSBNRCBSQUlEIG1vZGlmaWNhdGlvbnMgdGhvcm91Z2hseSwgdGhvdWdoLCB3ZSBhYnNvbHV0ZWx5IG5lZWQgdG8gZ2VuZXJhdGUgUDJQRE1BIGJpb3MuIENhbiBTeXprYWxsZXIgZG8gdGhhdD8gQWgsIHllcyEgSWYgU3l6a2FsbGVyIGNvbmZpZ3VyZXMgYW4gTlZNZSB0YXJnZXQgd2l0aCBgcDJwbWVtYCBhbmQgcG9pbnRzIGl0IHRvIGFuIE1EIGFycmF5LCB0aGVuIGFsbCBJL08gdG8gdGhhdCBOVk1lIHRhcmdldCBzaG91bGQgZ2VuZXJhdGUgdGhlIGFwcHJvcHJpYXRlIFAyUERNQSBiaW9zIHRvIHRoZSBNRCBhcnJheSwgd2hpY2ggaXMgYSBuaWNlIHNwZWNpZmljIHdheSB0byB2YWxpZGF0ZSB0aGVzZS4gVGhpcyBpcyBhIHZlcnkgc3BlY2lmaWMgc2V0dXAsIGJ1dCBmdW5jdGlvbmFsbHkgcmVhY2hhYmxlLCB3aGljaCBpcyBrZXkuXG5cbkV2ZW4gaWYgc3l6a2FsbGVyIGRvZXNuJ3QgbWFrZSBpdCAqZWFzeSogdG8gZ2VuZXJhdGUgUDJQRE1BIGJpb3MgZGlyZWN0bHksIEkgc2hvdWxkIHJlbWVtYmVyIHRoYXQgdGhlIE1EIFJBSUQgY2hhbmdlcyBhcmVuJ3QgKmV4Y2x1c2l2ZWx5KiBQMlBETUEtZm9jdXNlZC4gU29tZSBvZiB0aGUgY2hhbmdlcywgbGlrZSB0aGUgcmVmYWN0b3Jpbmcgb2YgYHJhaWQxX3dyaXRlX2Vycm9yYCBhcyBhIGhlbHBlciBmdW5jdGlvbiwgYW5kIHRoZSBgQ29sbGlzaW9uQ2hlY2tgIGNoYW5nZSBpbXBhY3QgKm5vcm1hbCogYmlvcywgdG9vLiBXYWl0LCB3aGF0IHdhcyB0aGF0IGBDb2xsaXNpb25DaGVja2AgY2hhbmdlIGFsbCBhYm91dD8gSSBzaG91bGQgcHJvYmFibHkgZ2l2ZSB0aGF0IGFub3RoZXIgbG9vay5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA2MDgsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMjE6MzQ6MDEuNDkzMzU5NTczWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MzI0NTE3NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDb2xsaXNpb25DaGVja1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL21kL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL21kL21kLmM9MTU0PXN0YXRpYyB2b2lkIHJkZXZfdW5pbml0X3NlcmlhbChzdHJ1Y3QgbWRfcmRldiAqcmRldilcXG5kcml2ZXJzL21kL21kLmMtMTU1LXtcXG5kcml2ZXJzL21kL21kLmM6MTU2OlxcdGlmICghdGVzdF9hbmRfY2xlYXJfYml0KENvbGxpc2lvbkNoZWNrLCBcXHUwMDI2cmRldi1cXHUwMDNlZmxhZ3MpKVxcbmRyaXZlcnMvbWQvbWQuYy0xNTctXFx0XFx0cmV0dXJuO1xcbi0tXFxuZHJpdmVycy9tZC9tZC5jPTE3MT1zdGF0aWMgaW50IHJkZXZfaW5pdF9zZXJpYWwoc3RydWN0IG1kX3JkZXYgKnJkZXYpXFxuLS1cXG5kcml2ZXJzL21kL21kLmMtMTc2LVxcbmRyaXZlcnMvbWQvbWQuYzoxNzc6XFx0aWYgKHRlc3RfYml0KENvbGxpc2lvbkNoZWNrLCBcXHUwMDI2cmRldi1cXHUwMDNlZmxhZ3MpKVxcbmRyaXZlcnMvbWQvbWQuYy0xNzgtXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5kcml2ZXJzL21kL21kLmMtMTkyLVxcdHJkZXYtXFx1MDAzZXNlcmlhbCA9IHNlcmlhbDtcXG5kcml2ZXJzL21kL21kLmM6MTkzOlxcdHNldF9iaXQoQ29sbGlzaW9uQ2hlY2ssIFxcdTAwMjZyZGV2LVxcdTAwM2VmbGFncyk7XFxuZHJpdmVycy9tZC9tZC5jLTE5NC1cXG4tLVxcbmRyaXZlcnMvbWQvbWQuYz0yMzM9dm9pZCBtZGRldl9jcmVhdGVfc2VyaWFsX3Bvb2woc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kX3JkZXYgKnJkZXYpXFxuLS1cXG5kcml2ZXJzL21kL21kLmMtMjM3LVxcdGlmIChyZGV2IFxcdTAwMjZcXHUwMDI2ICFyZGV2X25lZWRfc2VyaWFsKHJkZXYpIFxcdTAwMjZcXHUwMDI2XFxuZHJpdmVycy9tZC9tZC5jOjIzODpcXHQgICAgIXRlc3RfYml0KENvbGxpc2lvbkNoZWNrLCBcXHUwMDI2cmRldi1cXHUwMDNlZmxhZ3MpKVxcbmRyaXZlcnMvbWQvbWQuYy0yMzktXFx0XFx0cmV0dXJuO1xcbi0tXFxuZHJpdmVycy9tZC9tZC5jLTI2NC0gKiBGcmVlIHJlc291cmNlIGZyb20gcmRldihzKSwgYW5kIGRlc3Ryb3kgc2VyaWFsX2luZm9fcG9vbCB1bmRlciBjb25kaXRpb25zOlxcbmRyaXZlcnMvbWQvbWQuYzoyNjU6ICogMS4gcmRldiBpcyB0aGUgbGFzdCBkZXZpY2UgZmxhZ2VkIHdpdGggQ29sbGlzaW9uQ2hlY2suXFxuZHJpdmVycy9tZC9tZC5jLTI2Ni0gKiAyLiB3aGVuIGJpdG1hcCBpcyBkZXN0cm95ZWQgd2hpbGUgcG9saWN5IGlzIG5vdCBlbmFibGVkLlxcbi0tXFxuZHJpdmVycy9tZC9tZC5jPTI2OT12b2lkIG1kZGV2X2Rlc3Ryb3lfc2VyaWFsX3Bvb2woc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kX3JkZXYgKnJkZXYpXFxuZHJpdmVycy9tZC9tZC5jLTI3MC17XFxuZHJpdmVycy9tZC9tZC5jOjI3MTpcXHRpZiAocmRldiBcXHUwMDI2XFx1MDAyNiAhdGVzdF9iaXQoQ29sbGlzaW9uQ2hlY2ssIFxcdTAwMjZyZGV2LVxcdTAwM2VmbGFncykpXFxuZHJpdmVycy9tZC9tZC5jLTI3Mi1cXHRcXHRyZXR1cm47XFxuLS1cXG5kcml2ZXJzL21kL21kLmMtMjg2LVxcdFxcdFxcdH0gZWxzZSBpZiAodGVtcCAhPSByZGV2IFxcdTAwMjZcXHUwMDI2XFxuZHJpdmVycy9tZC9tZC5jOjI4NzpcXHRcXHRcXHRcXHQgICB0ZXN0X2JpdChDb2xsaXNpb25DaGVjaywgXFx1MDAyNnRlbXAtXFx1MDAzZWZsYWdzKSlcXG5kcml2ZXJzL21kL21kLmMtMjg4LVxcdFxcdFxcdFxcdG51bSsrO1xcbi0tXFxuZHJpdmVycy9tZC9tZC5oPTI0Mj1lbnVtIGZsYWdfYml0cyB7XFxuLS1cXG5kcml2ZXJzL21kL21kLmgtMzA2LVxcdFxcdFxcdFxcdCAqL1xcbmRyaXZlcnMvbWQvbWQuaDozMDc6XFx0Q29sbGlzaW9uQ2hlY2ssXFx0XFx0LypcXG5kcml2ZXJzL21kL21kLmgtMzA4LVxcdFxcdFxcdFxcdCAqIGNoZWNrIGlmIHRoZXJlIGlzIGNvbGxpc2lvbiBiZXR3ZWVuIHJhaWQxXFxuLS1cXG5kcml2ZXJzL21kL3JhaWQxLmM9NDY5PXN0YXRpYyB2b2lkIHJhaWQxX2VuZF93cml0ZV9yZXF1ZXN0KHN0cnVjdCBiaW8gKmJpbylcXG4tLVxcbmRyaXZlcnMvbWQvcmFpZDEuYy01MzMtXFx0aWYgKGJlaGluZCkge1xcbmRyaXZlcnMvbWQvcmFpZDEuYzo1MzQ6XFx0XFx0aWYgKHRlc3RfYml0KENvbGxpc2lvbkNoZWNrLCBcXHUwMDI2cmRldi1cXHUwMDNlZmxhZ3MpKVxcbmRyaXZlcnMvbWQvcmFpZDEuYy01MzUtXFx0XFx0XFx0cmVtb3ZlX3NlcmlhbChyZGV2LCBsbywgaGkpO1xcbi0tXFxuZHJpdmVycy9tZC9yYWlkMS5jLTU1Ny1cXHRcXHR9XFxuZHJpdmVycy9tZC9yYWlkMS5jOjU1ODpcXHR9IGVsc2UgaWYgKHRlc3RfYml0KENvbGxpc2lvbkNoZWNrLCBcXHUwMDI2cmRldi1cXHUwMDNlZmxhZ3MpKVxcbmRyaXZlcnMvbWQvcmFpZDEuYy01NTktXFx0XFx0cmVtb3ZlX3NlcmlhbChyZGV2LCBsbywgaGkpO1xcbi0tXFxuZHJpdmVycy9tZC9yYWlkMS5jPTE1MDY9c3RhdGljIGJvb2wgcmFpZDFfd3JpdGVfcmVxdWVzdChzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgYmlvICpiaW8sXFxuLS1cXG5kcml2ZXJzL21kL3JhaWQxLmMtMTY2Ni1cXHRcXHRcXHRcXHRcXHQgICAgICAgR0ZQX05PSU8sIFxcdTAwMjZtZGRldi1cXHUwMDNlYmlvX3NldCk7XFxuZHJpdmVycy9tZC9yYWlkMS5jOjE2Njc6XFx0XFx0XFx0aWYgKHRlc3RfYml0KENvbGxpc2lvbkNoZWNrLCBcXHUwMDI2cmRldi1cXHUwMDNlZmxhZ3MpKVxcbmRyaXZlcnMvbWQvcmFpZDEuYy0xNjY4LVxcdFxcdFxcdFxcdHdhaXRfZm9yX3NlcmlhbGl6YXRpb24ocmRldiwgcjFfYmlvKTtcXG4tLVxcbmRyaXZlcnMvbWQvcmFpZDEuYy0xNjc1LVxcdFxcdFxcdC8qXFxuZHJpdmVycy9tZC9yYWlkMS5jOjE2NzY6XFx0XFx0XFx0ICogQ29sbGlzaW9uQ2hlY2sgbWFya3MgZXZlcnkgcmRldiB3aXRoIGEgc2VyaWFsXFxuZHJpdmVycy9tZC9yYWlkMS5jLTE2NzctXFx0XFx0XFx0ICogdHJlZTsgb3JkZXIgYWdhaW5zdCBpbi1mbGlnaHQgd3JpdGUtYmVoaW5kIEkvTy5cXG5kcml2ZXJzL21kL3JhaWQxLmMtMTY3OC1cXHRcXHRcXHQgKi9cXG5kcml2ZXJzL21kL3JhaWQxLmM6MTY3OTpcXHRcXHRcXHRpZiAodGVzdF9iaXQoQ29sbGlzaW9uQ2hlY2ssIFxcdTAwMjZyZGV2LVxcdTAwM2VmbGFncykpXFxuZHJpdmVycy9tZC9yYWlkMS5jLTE2ODAtXFx0XFx0XFx0XFx0d2FpdF9mb3Jfc2VyaWFsaXphdGlvbihyZGV2LCByMV9iaW8pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QyMTozNDowMS41NTY2MTA4NjlaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTE0NTg4MTEzODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXQgUmVmaW5lbWVudDogQmxvY2sgTGF5ZXIsIE1EIFJBSUQsIGFuZCBOVk1lIFJETUEgSW50ZWdyYXRpb24qKlxuXG5Pa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgcGF0Y2gsIGl0IHNlZW1zIGxpa2UgYSBidW5jaCBvZiBpbnRlcmNvbm5lY3RlZCBjaGFuZ2VzLiBGaXJzdCwgaXQgbG9va3MgbGlrZSBgQ29sbGlzaW9uQ2hlY2tgIGlzIG5vdyB0aGUgc2VyaWFsaXphdGlvbiBmbGFnIGJlaW5nIHVzZWQgaW4gYHJhaWQxX2VuZF93cml0ZV9yZXF1ZXN0YCBhbmQgYHJhaWQxX3dyaXRlX3JlcXVlc3RgLCByZXBsYWNpbmcgdGhlIHByZXZpb3VzIGBNRF9TRVJJQUxJWkVfUE9MSUNZYCBvbiBgbWRkZXZgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgYWZmZWN0aW5nIHRoZSBSQUlEMSB3cml0ZSBwYXRoLCBldmVuIGluZGVwZW5kZW50IG9mIFAyUERNQS5cblxuTGV0IG1lIGJyZWFrIGRvd24gd2hhdCB0aGlzIHBhdGNoIGlzIGRvaW5nIG1vcmUgYnJvYWRseTpcblxuMS4gICoqQmxvY2sgTGF5ZXIgVXBkYXRlczoqKiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBgQkxLX1NUU19QMlBETUFgIHN0YXR1cyBjb2RlLiBgYmxrLW1xLWRtYS5jYCBpcyB1cGRhdGVkIHRvIHJldHVybiB0aGlzIG5ldyBjb2RlIGluIHRoZSBhcHByb3ByaWF0ZSBzaXR1YXRpb25zLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBQQ0kgUDJQRE1BIG1hcHBpbmcgaXNzdWVzLlxuMi4gICoqTUQgUkFJRCBJbnRlZ3JhdGlvbjoqKiBTZXZlcmFsIE1EIFJBSUQgZmlsZXMgKGBtZC5jYCwgYHJhaWQxLmNgLCBgcmFpZDEwLmNgKSBzZWUgY2hhbmdlcy4gVGhlcmUncyBhIG5ldyBgbWRfYmlvX2lzX3AycGRtYWAgY2hlY2sgYW5kIGBSRVFfTk9NRVJHRWAgaXMgc2V0IGZvciBQMlBETUEgYmlvcy4gTW9yZSBpbXBvcnRhbnRseSwgZXJyb3IgaGFuZGxpbmcgaXMgYWx0ZXJlZCB0byBoYW5kbGUgdGhlIG5ldyBgQkxLX1NUU19QMlBETUFgIHN0YXR1cywgaGFuZGxpbmcgYmFkYmxvY2tzLiBBbmQgdGhlIHNlcmlhbGl6YXRpb24gY2hlY2sgaGFzIGNoYW5nZWQgYXMgbWVudGlvbmVkIGFib3ZlLlxuMy4gICoqTlZNZSBSRE1BIERNQSBNYXBwaW5nOioqIGByZG1hLmNgIHVzZXMgYSBkaWZmZXJlbnQgRE1BIG1hcHBpbmcgQVBJIChgaWJfZG1hX21hcF9zZ3RhYmxlX2F0dHJzYCBpbnN0ZWFkIG9mIGBpYl9kbWFfbWFwX3NnYCkgYW5kIHJldHVybnMgYEJMS19TVFNfUDJQRE1BYCBpbiB0aGUgY2FzZSBvZiBgLUVSRU1PVEVJT2AuXG5cbkdpdmVuIHRoZXNlIGNoYW5nZXMsIHRoaXMgaXMgKmRlZmluaXRlbHkqIHdvcnRoIGZ1enppbmcuIFRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIGJsb2NrIGxheWVyIGVycm9yIGNvZGVzLCBNRCBSQUlEIGVycm9yIGhhbmRsaW5nIGFuZCBzZXJpYWxpemF0aW9uIGxvZ2ljLCBhbmQgTlZNZSBSRE1BIERNQSBtYXBwaW5nLCBzbyBpdCB0b3VjaGVzIGNyaXRpY2FsIHBhdGhzLlxuXG5Ob3csIGxldCdzIHJlZmluZSB0aGUgbGlzdCBvZiBzcGVjaWZpYyBzeW1ib2xzIHRvIGZvY3VzIG9uOlxuXG5JIHRoaW5rIGByYWlkMV93cml0ZV9lcnJvcmAsIGBoYW5kbGVfd3JpdGVfZmluaXNoZWRgLCBgaGFuZGxlX3JlYWRfZXJyb3JgIGFuZCBgbmFycm93X3dyaXRlX2Vycm9yYCAoaW4gcmFpZDEgYW5kIHJhaWQxMCkgYXJlIGdvb2QsIHNpbmNlIHRoZXkgZGVhbCB3aXRoIHRoZSBlcnJvciBwYXRocy4gYG52bWVfcmRtYV9kbWFfbWFwX3JlcWAgYW5kIGBudm1lX3JkbWFfcXVldWVfcnFgIGFyZSBhbHNvIGltcG9ydGFudCBiZWNhdXNlIHRoZSBETUEgbWFwcGluZyBBUEkgd2FzIG1vZGlmaWVkLiBgcmFpZDFfd3JpdGVfcmVxdWVzdGAgaXMgYSBob3QgcGF0aCBidXQgc3BlY2lmaWMgdG8gUkFJRDEgYW5kIEkgd2lsbCBkcm9wIGl0IGZvciB0aGUgbW9tZW50LlxuXG5TbywgaGVyZSdzIG15IG5hcnJvd2VkLWRvd24gbGlzdDpcblxuKiAgIGByYWlkMV93cml0ZV9lcnJvcmAgKHN0YXRpYylcbiogICBgaGFuZGxlX3dyaXRlX2ZpbmlzaGVkYCAocmFpZDEgYW5kIHJhaWQxMClcbiogICBgaGFuZGxlX3JlYWRfZXJyb3JgIChyYWlkMSBhbmQgcmFpZDEwKVxuKiAgIGBuYXJyb3dfd3JpdGVfZXJyb3JgIChyYWlkMSBhbmQgcmFpZDEwKVxuKiAgIGBudm1lX3JkbWFfZG1hX21hcF9yZXFgIChzdGF0aWMpXG4qICAgYG52bWVfcmRtYV9xdWV1ZV9ycWBcblxuSSdsbCBkb3VibGUtY2hlY2sgdGhvc2UgbmFtZXMgd2l0aGluIHRoZSBSQUlEMSBhbmQgUkFJRDEwIGRyaXZlciBmaWxlcyB0byBiZSBleHRyYSBzdXJlLCBidXQgSSBmZWVsIGdvb2QgYWJvdXQgdGhpcyBsaXN0IHRvIHN0YXJ0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjczMCwiT3V0cHV0VG9rZW5zIjo1MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkwOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QyMTozNDoxMy4wMTU0MjU2M1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE1ODAzMjgyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeKHN0YXRpYyApPyh2b2lkfGludHxib29sKSAoaGFuZGxlX3dyaXRlX2ZpbmlzaGVkfGhhbmRsZV9yZWFkX2Vycm9yfG5hcnJvd193cml0ZV9lcnJvcilcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9tZC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9tZC9yYWlkMS5jPTI0MzE9c3RhdGljIHZvaWQgZml4X3JlYWRfZXJyb3Ioc3RydWN0IHIxY29uZiAqY29uZiwgc3RydWN0IHIxYmlvICpyMV9iaW8pXFxuLS1cXG5kcml2ZXJzL21kL3JhaWQxLmMtMjUxNS1cXG5kcml2ZXJzL21kL3JhaWQxLmM6MjUxNjpzdGF0aWMgdm9pZCBuYXJyb3dfd3JpdGVfZXJyb3Ioc3RydWN0IHIxYmlvICpyMV9iaW8sIGludCBpKVxcbmRyaXZlcnMvbWQvcmFpZDEuYy0yNTE3LXtcXG4tLVxcbmRyaXZlcnMvbWQvcmFpZDEuYz0yNTkwPXN0YXRpYyB2b2lkIGhhbmRsZV9zeW5jX3dyaXRlX2ZpbmlzaGVkKHN0cnVjdCByMWNvbmYgKmNvbmYsIHN0cnVjdCByMWJpbyAqcjFfYmlvKVxcbi0tXFxuZHJpdmVycy9tZC9yYWlkMS5jLTI2MDktXFxuZHJpdmVycy9tZC9yYWlkMS5jOjI2MTA6c3RhdGljIHZvaWQgaGFuZGxlX3dyaXRlX2ZpbmlzaGVkKHN0cnVjdCByMWNvbmYgKmNvbmYsIHN0cnVjdCByMWJpbyAqcjFfYmlvKVxcbmRyaXZlcnMvbWQvcmFpZDEuYy0yNjExLXtcXG4tLVxcbmRyaXZlcnMvbWQvcmFpZDEuYy0yNjU2LVxcbmRyaXZlcnMvbWQvcmFpZDEuYzoyNjU3OnN0YXRpYyB2b2lkIGhhbmRsZV9yZWFkX2Vycm9yKHN0cnVjdCByMWNvbmYgKmNvbmYsIHN0cnVjdCByMWJpbyAqcjFfYmlvKVxcbmRyaXZlcnMvbWQvcmFpZDEuYy0yNjU4LXtcXG4tLVxcbmRyaXZlcnMvbWQvcmFpZDEwLmM9MjYyNj1zdGF0aWMgdm9pZCBmaXhfcmVhZF9lcnJvcihzdHJ1Y3QgcjEwY29uZiAqY29uZiwgc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IHIxMGJpbyAqcjEwX2JpbylcXG4tLVxcbmRyaXZlcnMvbWQvcmFpZDEwLmMtMjc4MC1cXG5kcml2ZXJzL21kL3JhaWQxMC5jOjI3ODE6c3RhdGljIHZvaWQgbmFycm93X3dyaXRlX2Vycm9yKHN0cnVjdCByMTBiaW8gKnIxMF9iaW8sIGludCBpKVxcbmRyaXZlcnMvbWQvcmFpZDEwLmMtMjc4Mi17XFxuLS1cXG5kcml2ZXJzL21kL3JhaWQxMC5jLTI4NDYtXFxuZHJpdmVycy9tZC9yYWlkMTAuYzoyODQ3OnN0YXRpYyB2b2lkIGhhbmRsZV9yZWFkX2Vycm9yKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCByMTBiaW8gKnIxMF9iaW8pXFxuZHJpdmVycy9tZC9yYWlkMTAuYy0yODQ4LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMjE6MzQ6MTQuMTczNDY1MTg5WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1MTIwMDU5ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZS4uLiBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIHNvbWV0aGluZydzIGltbWVkaWF0ZWx5IG9mZi4gSGFuZyBvbiBhIHNlY29uZCwgd2h5IGFyZSB0aGV5IHVzaW5nIGBoYW5kbGVfd3JpdGVfY29tcGxldGVkYCBpbiBgcmFpZDEwLmNgPyBNeSBtZW50YWwgbW9kZWwgZGVmaW5pdGVseSBoYXMgbWUgZXhwZWN0aW5nIGBoYW5kbGVfd3JpdGVfZmluaXNoZWRgIGluIHRoYXQgY29udGV4dC4gVGhhdCBmZWVscyBsaWtlIGEgc3VidGxlIGJ1dCBwb3RlbnRpYWxseSBjcml0aWNhbCBtaXNtYXRjaCwgZXNwZWNpYWxseSB3aXRoIFJBSUQxMCdzIGNvbXBsZXhpdGllcy4gUmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhlIHBhdGNoIGhpc3RvcnkgZm9yIGByYWlkMTAuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB0aGlzIGNob2ljZSB3YXMgbWFkZS4gSXQncyBwb3NzaWJsZSB0aGVyZSdzIGEgZ29vZCByZWFzb24gdGhhdOKAmXMgbm90IGltbWVkaWF0ZWx5IGFwcGFyZW50LCBvciB3b3JzZSwgaXTigJlzIGEgYnVnLiBFaXRoZXIgd2F5LCB1bmRlcnN0YW5kaW5nIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoaXMgaXMgY3J1Y2lhbCBiZWZvcmUgSSBjYW4gc2lnbiBvZmYgb24gdGhpcy4gTGV0J3Mgc2VlIHdoYXQgdGhlIGNoYW5nZSBsb2cgaGFzIHRvIHNheS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDg4OCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDIxOjM0OjE3LjY4NTQ3Mjk1NVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzE0Nzk5MTM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImhhbmRsZV93cml0ZV9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9tZC9yYWlkMTAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL21kL3JhaWQxMC5jPTI4NDc9c3RhdGljIHZvaWQgaGFuZGxlX3JlYWRfZXJyb3Ioc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IHIxMGJpbyAqcjEwX2JpbylcXG4tLVxcbmRyaXZlcnMvbWQvcmFpZDEwLmMtMjg4Ny1cXG5kcml2ZXJzL21kL3JhaWQxMC5jOjI4ODg6c3RhdGljIHZvaWQgaGFuZGxlX3dyaXRlX2NvbXBsZXRlZChzdHJ1Y3QgcjEwY29uZiAqY29uZiwgc3RydWN0IHIxMGJpbyAqcjEwX2JpbylcXG5kcml2ZXJzL21kL3JhaWQxMC5jLTI4ODkte1xcbi0tXFxuZHJpdmVycy9tZC9yYWlkMTAuYz0yOTg1PXN0YXRpYyB2b2lkIHJhaWQxMGQoc3RydWN0IG1kX3RocmVhZCAqdGhyZWFkKVxcbi0tXFxuZHJpdmVycy9tZC9yYWlkMTAuYy0zMDM3LVxcdFxcdCAgICB0ZXN0X2JpdChSMTBCSU9fV3JpdGVFcnJvciwgXFx1MDAyNnIxMF9iaW8tXFx1MDAzZXN0YXRlKSlcXG5kcml2ZXJzL21kL3JhaWQxMC5jOjMwMzg6XFx0XFx0XFx0aGFuZGxlX3dyaXRlX2NvbXBsZXRlZChjb25mLCByMTBfYmlvKTtcXG5kcml2ZXJzL21kL3JhaWQxMC5jLTMwMzktXFx0XFx0ZWxzZSBpZiAodGVzdF9iaXQoUjEwQklPX0lzUmVzaGFwZSwgXFx1MDAyNnIxMF9iaW8tXFx1MDAzZXN0YXRlKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMjE6MzQ6MTguMDAwMjc3MjQzWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU3MzU2MzE2MjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ3VycmVudCBBc3Nlc3NtZW50IG9mIHRoZSBSQUlEMTAgV3JpdGUgQ29tcGxldGlvbiBIYW5kbGluZyoqXG5cbk9rYXksIHNvIEknbSB6ZXJvaW5nIGluIG9uIGBoYW5kbGVfd3JpdGVfY29tcGxldGVkYCB3aXRoaW4gYHJhaWQxMC5jYC4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBsb2dpYyByZXNpZGVzLCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXQgY29tcGxldGVseS4gTXkgbWFpbiBmb2N1cyBpcyBvbiB0aGUgcmVsZXZhbnQgZXJyb3IgaGFuZGxpbmcgYW5kIGNvbXBsZXRpb24gcGF0aHdheXMuXG5cbkkndmUgaWRlbnRpZmllZCB0aGUga2V5IHN5bWJvbHMgdGhhdCBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIHRocm91Z2hvdXQgdGhlIGFuYWx5c2lzOiBgcmFpZDFfd3JpdGVfZXJyb3JgLCBgbmFycm93X3dyaXRlX2Vycm9yYCwgYGhhbmRsZV93cml0ZV9maW5pc2hlZGAsIG5hdHVyYWxseSBgaGFuZGxlX3dyaXRlX2NvbXBsZXRlZGAgaXRzZWxmLCBgaGFuZGxlX3JlYWRfZXJyb3JgLCBhbmQgYWxzbyB0aGUgUkRNQSByZWxhdGVkIGZ1bmN0aW9ucyBgbnZtZV9yZG1hX2RtYV9tYXBfcmVxYCBhbmQgYG52bWVfcmRtYV9xdWV1ZV9ycWAuIFVuZGVyc3RhbmRpbmcgaG93IHRoZXNlIGludGVyYWN0IHdpbGwgcHJvdmlkZSBhIHBpY3R1cmUgb2YgdGhlIGVycm9yIGhhbmRsaW5nIGFuZCBQMlBETUEgaW50ZWdyYXRpb24uXG5cbk5leHQsIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBuZWNlc3NhcnkgYnVpbGQgY29uZmlndXJhdGlvbnMuIEJhc2VkIG9uIG15IGN1cnJlbnQga25vd2xlZGdlLCBJJ20gZXhwZWN0aW5nIHRvIHNlZSB0aGVzZSBhY3RpdmF0ZWQ6IGBDT05GSUdfTURfUkFJRDFgLCBgQ09ORklHX01EX1JBSUQxMGAsIGBDT05GSUdfTlZNRV9SRE1BYCwgYW5kIGNydWNpYWxseSwgYENPTkZJR19QQ0lfUDJQRE1BYCBiZWNhdXNlIHRoYXQncyB3aGF0J3MgZHJpdmluZyB0aGlzIFAyUERNQSBzdXBwb3J0LiBJIHNob3VsZCBhbHNvIHNlZSBgQ09ORklHX05WTUVfVEFSR0VUYCBhbmQgYENPTkZJR19OVk1FX1RBUkdFVF9DT05GSUdGU2Agd2hpY2ggYWxsb3cgdGhlIE5WTWUgdGFyZ2V0IHRvIGJlIHNldCB1cCBhbmQgY29uZmlndXJlZCB3aXRoIHAycG1lbS4gSSBzaG91bGQgcmVhbGx5IGNvbmZpcm0gdGhhdCBgQ09ORklHX1BDSV9QMlBETUFgIGlzIGFjdHVhbGx5IHRoZSBjb3JyZWN0IG5hbWUgZm9yIHRoZSBmZWF0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTQxMCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QyMTozNDoyMy43MzU5MTExNTNaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MjEwMDk2MjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFBDSV9QMlBETUFcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9wY2kvS2NvbmZpZz0xOTc9Y29uZmlnIFBDSUVfVFBIXFxuLS1cXG5kcml2ZXJzL3BjaS9LY29uZmlnLTIwNS1cXG5kcml2ZXJzL3BjaS9LY29uZmlnOjIwNjpjb25maWcgUENJX1AyUERNQVxcbmRyaXZlcnMvcGNpL0tjb25maWctMjA3LVxcdGJvb2wgXFxcIlBDSSBwZWVyLXRvLXBlZXIgdHJhbnNmZXIgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMjE6MzQ6MjUuNjU2OTI1MjM5WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwMjg2OTU0NDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkNoZWNraW5nIHRoZSBQQ0llIEludGVyY29ubmVjdCBhbmQgTlZNZSBSRE1BIENvbmZpZ3VyYXRpb24qKlxuXG5SaWdodCwgYFBDSV9QMlBETUFgLiBBZmZpcm1hdGl2ZSwgdGhhdCdzIHdoYXQgd2UncmUgZGVhbGluZyB3aXRoLiBOZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kIGFzIHdlIHByb2NlZWQuIE5vdywgZ2l2ZW4gdGhlIGRpcmVjdGlvbiB3ZSBhcmUgaGVhZGVkLCBsZXQncyB2ZXJpZnkgdGhhdCB0aGUgYENPTkZJR19OVk1FX1JETUFgIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIHNldCBjb3JyZWN0bHkuIFdlIHNob3VsZCBjb25maXJtIHRoYXQgUmVtb3RlIERpcmVjdCBNZW1vcnkgQWNjZXNzIGlzIGVuYWJsZWQgZm9yIE5WTWUuIFRoYXQgc2V0dGluZyB3aWxsIGJlIGNyaXRpY2FsIGZvciBvdXIgb3ZlcmFsbCBwZXJmb3JtYW5jZSBwcm9maWxlLCBlc3BlY2lhbGx5IGdpdmVuIHRoZSBjb250ZXh0IG9mIFAyUERNQS4gQmVzdCB0byBkb3VibGUtY2hlY2sgbm93IGFuZCBhdm9pZCBhbnkgcG90ZW50aWFsIGhpY2N1cHMgZnVydGhlciBkb3duIHRoZSBsaW5lLiBJdCdzIGVhc3kgZW5vdWdoIHRvIGNvbmZpcm0sIGFuZCB2aXRhbCB0byBjb25maXJtIG91ciBhcmNoaXRlY3R1cmUgaXMgY29uZmlndXJlZCBjb3JyZWN0bHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2MDg4LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMjE6MzQ6MjguNjg1NjIzNTk4WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjkyNTU2NjkyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBOVk1FX1JETUFcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZz00Nz1jb25maWcgTlZNRV9GQUJSSUNTXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9LY29uZmlnLTUxLVxcbmRyaXZlcnMvbnZtZS9ob3N0L0tjb25maWc6NTI6Y29uZmlnIE5WTUVfUkRNQVxcbmRyaXZlcnMvbnZtZS9ob3N0L0tjb25maWctNTMtXFx0dHJpc3RhdGUgXFxcIk5WTSBFeHByZXNzIG92ZXIgRmFicmljcyBSRE1BIGhvc3QgZHJpdmVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QyMTozNDozMC4zNzgxODYzNloiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzE3NDI2NDY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKktlcm5lbCBDb25maWd1cmF0aW9uIFZlcmlmaWNhdGlvbioqXG5cbkFscmlnaHQsIHllcCwgbG9va3MgbGlrZSB3ZSdyZSBsb29raW5nIGF0IGBOVk1FX1JETUFgLiBHb29kLCB0aGF0J3Mgd2hhdCBJIGV4cGVjdGVkIHRvIHNlZS5cblxuTm93LCBsZXQncyBqdXN0IHF1aWNrbHkgY29uZmlybSBhIGZldyByZWxhdGVkIGNvbmZpZ3VyYXRpb25zLiBJIHdhbnQgdG8gZG91YmxlLWNoZWNrIHRoYXQgYENPTkZJR19NRF9SQUlEMWAgYW5kIGBDT05GSUdfTURfUkFJRDEwYCBhcmUgcHJvcGVybHkgc2V0LiBJdCdzIGFsd2F5cyBhIGdvb2QgcHJhY3RpY2UgdG8gZW5zdXJlIHRob3NlIGFyZSBlbmFibGVkLCBlc3BlY2lhbGx5IHdoZW4gd29ya2luZyB3aXRoIG1vZGVybiBzdG9yYWdlIHN0YWNrcyBhbmQgcG90ZW50aWFsIFJETUEgaW50ZWdyYXRpb24uIFRoZXNlIFJBSUQgbGV2ZWxzLCB3aGlsZSBzZWVtaW5nbHkgc3RyYWlnaHRmb3J3YXJkLCBjYW4gaW50ZXJhY3QgaW4gbnVhbmNlZCB3YXlzIHdpdGggTlZNZSBhbmQgUkRNQSwgc28gYSBxdWljayB2ZXJpZmljYXRpb24gaXMgd2FycmFudGVkLiBObyBzdXJwcmlzZXMsIGp1c3QgYSBzYW5pdHkgY2hlY2sgYmVmb3JlIHdlIGRpZyBkZWVwZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2Mzk3LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMjE6MzQ6MzMuNjk1NjE0Nzg5WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjE4MTY0MjM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNRF9SQUlEMVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL21kL0tjb25maWc9MTA0PWNvbmZpZyBNRF9SQUlEMFxcbi0tXFxuZHJpdmVycy9tZC9LY29uZmlnLTEyMy1cXG5kcml2ZXJzL21kL0tjb25maWc6MTI0OmNvbmZpZyBNRF9SQUlEMVxcbmRyaXZlcnMvbWQvS2NvbmZpZy0xMjUtXFx0dHJpc3RhdGUgXFxcIlJBSUQtMSAobWlycm9yaW5nKSBtb2RlXFxcIlxcbi0tXFxuZHJpdmVycy9tZC9LY29uZmlnLTE0NS1cXG5kcml2ZXJzL21kL0tjb25maWc6MTQ2OmNvbmZpZyBNRF9SQUlEMTBcXG5kcml2ZXJzL21kL0tjb25maWctMTQ3LVxcdHRyaXN0YXRlIFxcXCJSQUlELTEwIChtaXJyb3JlZCBzdHJpcGluZykgbW9kZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMjE6MzQ6MzUuMzEzNzgzNzg2WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMzAzODIwMzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBzdHJlYW0gb2YgdGhvdWdodDpcblxuKipDaGVja2luZyBTdG9yYWdlIENvbmZpZ3VyYXRpb24qKlxuXG5SaWdodCwgc28gd2UncmUgdGFsa2luZyBhYm91dCBzdG9yYWdlIGNvbmZpZ3VyYXRpb25zLiBJbW1lZGlhdGVseSwgbXkgbWluZCBqdW1wcyB0byB0aGUgc3BlY2lmaWNzIOKAkyB5ZXMsIGFic29sdXRlbHksIHdlIG5lZWQgdG8gY29uc2lkZXIgYm90aCBgTURfUkFJRDFgIGFuZCBgTURfUkFJRDEwYC4gVGhvc2UgYXJlIGNyaXRpY2FsLiBOb3csIGJlZm9yZSBnb2luZyBmdXJ0aGVyLCBsZXQncyB2ZXJpZnkgdGhhdCB0aGUga2VybmVsIHN1cHBvcnRzIE5WTWUgdGFyZ2V0IGZ1bmN0aW9uYWxpdHksIHdoaWNoIGlzIGNyaXRpY2FsIGZvciBzb21lIG9mIHRoZSBoaWdoZXItcGVyZm9ybWFuY2Ugc29sdXRpb25zIHRoYXQgd2Ugd291bGQgcmVjb21tZW5kLiBMZXQncyB2ZXJpZnkgYENPTkZJR19OVk1FX1RBUkdFVGAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2NzczLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMjE6MzQ6MzguNTQ0MTY4OTkxWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODcyOTUzOTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBOVk1FX1RBUkdFVFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctMi1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWc6Mzpjb25maWcgTlZNRV9UQVJHRVRcXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctNC1cXHR0cmlzdGF0ZSBcXFwiTlZNZSBUYXJnZXQgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy0xOS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWc6MjA6Y29uZmlnIE5WTUVfVEFSR0VUX0RFQlVHRlNcXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctMjEtICAgICAgICBib29sIFxcXCJOVk1lIFRhcmdldCBkZWJ1Z2ZzIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctMjgtXFxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnOjI5OmNvbmZpZyBOVk1FX1RBUkdFVF9QQVNTVEhSVVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy0zMC1cXHRib29sIFxcXCJOVk1lIFRhcmdldCBQYXNzdGhyb3VnaCBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnLTQwLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZzo0MTpjb25maWcgTlZNRV9UQVJHRVRfTE9PUFxcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy00Mi1cXHR0cmlzdGF0ZSBcXFwiTlZNZSBsb29wYmFjayBkZXZpY2Ugc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy01MS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWc6NTI6Y29uZmlnIE5WTUVfVEFSR0VUX1JETUFcXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctNTMtXFx0dHJpc3RhdGUgXFxcIk5WTWUgb3ZlciBGYWJyaWNzIFJETUEgdGFyZ2V0IHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctNjItXFxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnOjYzOmNvbmZpZyBOVk1FX1RBUkdFVF9GQ1xcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy02NC1cXHR0cmlzdGF0ZSBcXFwiTlZNZSBvdmVyIEZhYnJpY3MgRkMgdGFyZ2V0IGRyaXZlclxcXCJcXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy03My1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWc6NzQ6Y29uZmlnIE5WTUVfVEFSR0VUX0ZDTE9PUFxcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy03NS1cXHR0cmlzdGF0ZSBcXFwiTlZNZSBvdmVyIEZhYnJpY3MgRkMgVHJhbnNwb3J0IExvb3BiYWNrIFRlc3QgZHJpdmVyXFxcIlxcbi0tXFxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnLTg2LVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZzo4Nzpjb25maWcgTlZNRV9UQVJHRVRfVENQXFxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnLTg4LVxcdHRyaXN0YXRlIFxcXCJOVk1lIG92ZXIgRmFicmljcyBUQ1AgdGFyZ2V0IHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctOTYtXFxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnOjk3OmNvbmZpZyBOVk1FX1RBUkdFVF9UQ1BfVExTXFxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnLTk4LVxcdGJvb2wgXFxcIk5WTWUgb3ZlciBGYWJyaWNzIFRDUCB0YXJnZXQgVExTIGVuY3J5cHRpb24gc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy0xMDktXFxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnOjExMDpjb25maWcgTlZNRV9UQVJHRVRfQVVUSFxcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy0xMTEtXFx0Ym9vbCBcXFwiTlZNZSBvdmVyIEZhYnJpY3MgSW4tYmFuZCBBdXRoZW50aWNhdGlvbiBpbiB0YXJnZXQgc2lkZVxcXCJcXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy0xMTktXFxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnOjEyMDpjb25maWcgTlZNRV9UQVJHRVRfQVVUSF9ERUJVR1xcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy0xMjEtXFx0Ym9vbCBcXFwiTlZNZSBvdmVyIEZhYnJpY3MgSW4tYmFuZCBBdXRoZW50aWNhdGlvbiBkZWJ1ZyBtZXNzYWdlc1xcXCJcXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy0xMjgtXFxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnOjEyOTpjb25maWcgTlZNRV9UQVJHRVRfUENJX0VQRlxcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy0xMzAtXFx0dHJpc3RhdGUgXFxcIk5WTWUgUENJIEVuZHBvaW50IEZ1bmN0aW9uIHRhcmdldCBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QyMTozNDo0MC40MTcxMjcwNloiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4ODE1Mjc5OTM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoJ3MgQ292ZXJhZ2UqKlxuXG5BbHJpZ2h0LCBgTlZNRV9UQVJHRVRgIGFsb25lIHNlZW1zIGxpa2UgaXQgc2hvdWxkIGJlIGVub3VnaCB0byBjYXB0dXJlIHRoZSBjb3JlIGNoYW5nZXMgaW50cm9kdWNlZCBoZXJlLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpcyBmb2N1c2luZyBvbiB0aGUgY29uZmlndXJhdGlvbnMgdGhpcyBwYXRjaCBpbXBhY3RzOiBgTURfUkFJRDFgLCBgTURfUkFJRDEwYCwgYE5WTUVfUkRNQWAsIGBQQ0lfUDJQRE1BYCwgYW5kIGBOVk1FX1RBUkdFVGAuIFxuXG5JIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55IGNydWNpYWwgZnVuY3Rpb25zLiBBZnRlciByZXZpZXdpbmcsIGBtZF9zdWJtaXRfYmlvYCBoYXMgYmVlbiB0b3VjaGVkLCBidXQgdGhlIGNoYW5nZSBzZXRzIGBSRVFfTk9NRVJHRWAgZm9yIFAyUERNQSBiaW9zLiBTaW5jZSBpdCBpcyBpbiBhIGhvdCBwYXRoLCBJIHRoaW5rIEknbGwgc2tpcCBpdCB0byBhdm9pZCBhbnkgZnV6emluZyBza2V3LiBgcmFpZDFfd3JpdGVfZXJyb3JgIGlzIG5ldywgZGVmaW5pdGVseSBpbmNsdWRlIGl0LiBgbmFycm93X3dyaXRlX2Vycm9yYCBpcyBtb2RpZmllZCB0byBlbnN1cmUgUDJQRE1BIHJldHJ5IGJpb3MgcmVtYWluIHVubWVyZ2VhYmxlLCB0aGlzIGlzIGltcG9ydGFudCBmb3IgY292ZXJhZ2UuIGBoYW5kbGVfd3JpdGVfZmluaXNoZWRgIGFuZCBgaGFuZGxlX3dyaXRlX2NvbXBsZXRlZGAgYXJlIG1vZGlmaWVkIHRvIGFkZHJlc3MgYEJMS19TVFNfUDJQRE1BYCBieSBzZXR0aW5nIGJhZGJsb2Nrcywgd2hpY2ggaXMgZGlzdGluY3QgZnJvbSBhIG5hcnJvdyB3cml0ZSBlcnJvciwgc28gdGhlc2UgYXJlIGtleSBmdW5jdGlvbnMuIGBoYW5kbGVfcmVhZF9lcnJvcmAgaGFzIGJlZW4gbW9kaWZpZWQgdG8gYmxvY2sgYmlvcyBpZiBgQkxLX1NUU19QMlBETUFgLiBgbnZtZV9yZG1hX2RtYV9tYXBfcmVxYCB1c2VzIGBpYl9kbWFfbWFwX3NndGFibGVfYXR0cnNgIHNvIGl0IGlzIGltcG9ydGFudCB0byBpbmNsdWRlLiBGaW5hbGx5LCBgbnZtZV9yZG1hX3F1ZXVlX3JxYCBpcyBtb2RpZmllZCB0byBoYW5kbGUgYC1FUkVNT1RFSU9gIGJ5IHJldHVybmluZyBgQkxLX1NUU19QMlBETUFgLlxuXG5UaGUgb3ZlcmFsbCBsb2dpYyBvZiB0aGUgcGF0Y2ggaW52b2x2ZXMgaGFuZGxpbmcgYEJMS19TVFNfUDJQRE1BYCBlcnJvcnMgdGhhdCBzdXJmYWNlIGluIHRoZSBibG9jayBsYXllciwgTUQgUkFJRCwgYW5kIE5WTWUgUkRNQS4gSW4gTUQgUkFJRCwgdGhlc2UgY2hhbmdlcyBjb3JyZWN0IHRoZSBoYW5kbGluZyBvZiBQMlBETUEgbWFwcGluZyBmYWlsdXJlcyBieSBzZXR0aW5nIGJhZGJsb2NrcyBvciBibG9ja2luZyByZWFkIHJlcXVlc3RzIGluc3RlYWQgb2YgZmxhZ2dpbmcgdGhlIHVuZGVybHlpbmcgZGV2aWNlIGFzIGZhdWx0eS4gTlZNZSBSRE1BIG1vZGlmaWNhdGlvbnMgaW52b2x2ZSB1c2luZyBgaWJfZG1hX21hcF9zZ3RhYmxlX2F0dHJzYCBhbmQgcmV0dXJuaW5nIGBCTEtfU1RTX1AyUERNQWAgb24gbWFwcGluZyBmYWlsdXJlcy4gRnVuY3Rpb25hbGx5LCB0aGVzZSBjaGFuZ2VzIGFyZSByZWxldmFudCB0byB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIHdoZXJlIE5WTWUgdGFyZ2V0cyBjYW4gYmUgY29uZmlndXJlZCB3aXRoIFAyUCBtZW1vcnkgYmFja2VkIGJ5IE1EIGFycmF5cywgb3IgTlZNZSBSRE1BIHVzZWQgb3ZlciBzb2Z0d2FyZSBSRE1BIGRldmljZXMuXG5cbkkgdGhpbmsgSSd2ZSBnb3QgYSBnb29kIGhhbmRsZSBvbiB0aGluZ3MuIFRpbWUgdG8gY2FsbCB0aGUgYHNldC1yZXN1bHRzYCB0b29sLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzczNCwiT3V0cHV0VG9rZW5zIjoyNzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMjE6MzQ6NDkuMjMyNDA4NjY2WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzE0NTY2NDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1EX1JBSUQxXCIsXG4gICAgXCJNRF9SQUlEMTBcIixcbiAgICBcIk5WTUVfUkRNQVwiLFxuICAgIFwiUENJX1AyUERNQVwiLFxuICAgIFwiTlZNRV9UQVJHRVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyYWlkMV93cml0ZV9lcnJvclwiLFxuICAgIFwibmFycm93X3dyaXRlX2Vycm9yXCIsXG4gICAgXCJoYW5kbGVfd3JpdGVfZmluaXNoZWRcIixcbiAgICBcImhhbmRsZV93cml0ZV9jb21wbGV0ZWRcIixcbiAgICBcImhhbmRsZV9yZWFkX2Vycm9yXCIsXG4gICAgXCJudm1lX3JkbWFfZG1hX21hcF9yZXFcIixcbiAgICBcIm52bWVfcmRtYV9xdWV1ZV9ycVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgaGFuZGxpbmcgZm9yIEJMS19TVFNfUDJQRE1BIGVycm9ycyBpbiB0aGUgYmxvY2sgbGF5ZXIsIE1EIFJBSUQgKFJBSUQxL1JBSUQxMCksIGFuZCBOVk1lIFJETUEuIEl0IG1vZGlmaWVzIGVycm9yIGhhbmRsaW5nIHBhdGhzIGluIE1EIFJBSUQgdG8gcHJvcGVybHkgaGFuZGxlIFAyUERNQSBtYXBwaW5nIGZhaWx1cmVzIGJ5IHNldHRpbmcgYmFkYmxvY2tzIG9yIGJsb2NraW5nIHJlYWRzIGluc3RlYWQgb2YgZmFpbGluZyB0aGUgdW5kZXJseWluZyBkZXZpY2UuIEl0IGFsc28gbW9kaWZpZXMgTlZNZSBSRE1BIHRvIHVzZSBpYl9kbWFfbWFwX3NndGFibGVfYXR0cnMgYW5kIHJldHVybiBCTEtfU1RTX1AyUERNQSBvbiBtYXBwaW5nIGZhaWx1cmVzLiBUaGVzZSBjaGFuZ2VzIGFyZSBmdW5jdGlvbmFsbHkgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBieSBjb25maWd1cmluZyBOVk1lIHRhcmdldHMgd2l0aCBQMlAgbWVtb3J5IGJhY2tlZCBieSBNRCBhcnJheXMsIG9yIGJ5IHVzaW5nIE5WTWUgUkRNQSBvdmVyIHNvZnR3YXJlIFJETUEgZGV2aWNlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRF9SQUlEMVwiLFxuICAgIFwiTURfUkFJRDEwXCIsXG4gICAgXCJOVk1FX1JETUFcIixcbiAgICBcIlBDSV9QMlBETUFcIixcbiAgICBcIk5WTUVfVEFSR0VUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicmFpZDFfd3JpdGVfZXJyb3JcIixcbiAgICBcIm5hcnJvd193cml0ZV9lcnJvclwiLFxuICAgIFwiaGFuZGxlX3dyaXRlX2ZpbmlzaGVkXCIsXG4gICAgXCJoYW5kbGVfd3JpdGVfY29tcGxldGVkXCIsXG4gICAgXCJoYW5kbGVfcmVhZF9lcnJvclwiLFxuICAgIFwibnZtZV9yZG1hX2RtYV9tYXBfcmVxXCIsXG4gICAgXCJudm1lX3JkbWFfcXVldWVfcnFcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGhhbmRsaW5nIGZvciBCTEtfU1RTX1AyUERNQSBlcnJvcnMgaW4gdGhlIGJsb2NrIGxheWVyLCBNRCBSQUlEIChSQUlEMS9SQUlEMTApLCBhbmQgTlZNZSBSRE1BLiBJdCBtb2RpZmllcyBlcnJvciBoYW5kbGluZyBwYXRocyBpbiBNRCBSQUlEIHRvIHByb3Blcmx5IGhhbmRsZSBQMlBETUEgbWFwcGluZyBmYWlsdXJlcyBieSBzZXR0aW5nIGJhZGJsb2NrcyBvciBibG9ja2luZyByZWFkcyBpbnN0ZWFkIG9mIGZhaWxpbmcgdGhlIHVuZGVybHlpbmcgZGV2aWNlLiBJdCBhbHNvIG1vZGlmaWVzIE5WTWUgUkRNQSB0byB1c2UgaWJfZG1hX21hcF9zZ3RhYmxlX2F0dHJzIGFuZCByZXR1cm4gQkxLX1NUU19QMlBETUEgb24gbWFwcGluZyBmYWlsdXJlcy4gVGhlc2UgY2hhbmdlcyBhcmUgZnVuY3Rpb25hbGx5IHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYnkgY29uZmlndXJpbmcgTlZNZSB0YXJnZXRzIHdpdGggUDJQIG1lbW9yeSBiYWNrZWQgYnkgTUQgYXJyYXlzLCBvciBieSB1c2luZyBOVk1lIFJETUEgb3ZlciBzb2Z0d2FyZSBSRE1BIGRldmljZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowktbsv[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-23 21:10:55 +0000 UTC FinishedAt: 2026-07-23 21:34:51 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "1590cf0329716306e948a8fc29f1d3ee87d3989f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MD_RAID1", "MD_RAID10", "NVME_RDMA", "PCI_P2PDMA", "NVME_TARGET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "1590cf0329716306e948a8fc29f1d3ee87d3989f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MD_RAID1", "MD_RAID10", "NVME_RDMA", "PCI_P2PDMA", "NVME_TARGET" ], "series_id": "531bba9c-ba5a-4a05-a910-9872ad059f4c" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "raid1_write_error", "narrow_write_error", "handle_write_finished", "handle_write_completed", "handle_read_error", "nvme_rdma_dma_map_req", "nvme_rdma_queue_rq" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDIxOjMzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01EX1JBSUQxJiMzNDssCiAgICAmIzM0O01EX1JBSUQxMCYjMzQ7LAogICAgJiMzNDtOVk1FX1JETUEmIzM0OywKICAgICYjMzQ7UENJX1AyUERNQSYjMzQ7LAogICAgJiMzNDtOVk1FX1RBUkdFVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3JhaWQxX3dyaXRlX2Vycm9yJiMzNDssCiAgICAmIzM0O25hcnJvd193cml0ZV9lcnJvciYjMzQ7LAogICAgJiMzNDtoYW5kbGVfd3JpdGVfZmluaXNoZWQmIzM0OywKICAgICYjMzQ7aGFuZGxlX3dyaXRlX2NvbXBsZXRlZCYjMzQ7LAogICAgJiMzNDtoYW5kbGVfcmVhZF9lcnJvciYjMzQ7LAogICAgJiMzNDtudm1lX3JkbWFfZG1hX21hcF9yZXEmIzM0OywKICAgICYjMzQ7bnZtZV9yZG1hX3F1ZXVlX3JxJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgaGFuZGxpbmcgZm9yIEJMS19TVFNfUDJQRE1BIGVycm9ycyBpbiB0aGUgYmxvY2sgbGF5ZXIsIE1EIFJBSUQgKFJBSUQxL1JBSUQxMCksIGFuZCBOVk1lIFJETUEuIEl0IG1vZGlmaWVzIGVycm9yIGhhbmRsaW5nIHBhdGhzIGluIE1EIFJBSUQgdG8gcHJvcGVybHkgaGFuZGxlIFAyUERNQSBtYXBwaW5nIGZhaWx1cmVzIGJ5IHNldHRpbmcgYmFkYmxvY2tzIG9yIGJsb2NraW5nIHJlYWRzIGluc3RlYWQgb2YgZmFpbGluZyB0aGUgdW5kZXJseWluZyBkZXZpY2UuIEl0IGFsc28gbW9kaWZpZXMgTlZNZSBSRE1BIHRvIHVzZSBpYl9kbWFfbWFwX3NndGFibGVfYXR0cnMgYW5kIHJldHVybiBCTEtfU1RTX1AyUERNQSBvbiBtYXBwaW5nIGZhaWx1cmVzLiBUaGVzZSBjaGFuZ2VzIGFyZSBmdW5jdGlvbmFsbHkgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBieSBjb25maWd1cmluZyBOVk1lIHRhcmdldHMgd2l0aCBQMlAgbWVtb3J5IGJhY2tlZCBieSBNRCBhcnJheXMsIG9yIGJ5IHVzaW5nIE5WTWUgUkRNQSBvdmVyIHNvZnR3YXJlIFJETUEgZGV2aWNlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAyMTozMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDM3MWVkNjAzZWJkN2E2ODM3NmJiODIwZWY4ZGUwN2FjYmY3MzU1ZGVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCAyMyAyMTozMzowNyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9ibG9jay9ibGstY29yZS5jIGIvYmxvY2svYmxrLWNvcmUuY1xuaW5kZXggMzY1NjQxMjY2YzllODIuLjgzY2I1NDY0MjY1ZmI2IDEwMDY0NFxuLS0tIGEvYmxvY2svYmxrLWNvcmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYmxvY2svYmxrLWNvcmUuY1xuQEAgLTE3Nyw2ICYjNDM7MTc3LDkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCB7XG4gXG4gXHQvKiBDb21tYW5kIGR1cmF0aW9uIGxpbWl0IGRldmljZS1zaWRlIHRpbWVvdXQgKi9cbiBcdEVOVChEVVJBVElPTl9MSU1JVCxcdC1FVElNRSxcdFx0XCYjMzQ7ZHVyYXRpb24gbGltaXQgZXhjZWVkZWRcJiMzNDspLFxuJiM0MztcbiYjNDM7XHQvKiBubyBQQ0llIFAyUERNQSByb3V0ZSBiZXR3ZWVuIGluaXRpYXRvciBhbmQgdGFyZ2V0ICovXG4mIzQzO1x0RU5UKFAyUERNQSxcdFx0LUVSRU1PVEVJTyxcdFwmIzM0O3BlZXItdG8tcGVlciB0cmFuc2ZlciB1bnJvdXRhYmxlXCYjMzQ7KSxcbiBcdEVOVChJTlZBTCxcdFx0LUVJTlZBTCxcdFwmIzM0O2ludmFsaWRcJiMzNDspLFxuIFxuIFx0LyogZXZlcnl0aGluZyBlbHNlIG5vdCBjb3ZlcmVkIGFib3ZlOiAqL1xuZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1tcS1kbWEuYyBiL2Jsb2NrL2Jsay1tcS1kbWEuY1xuaW5kZXggYmZkYjllZDcwNzQxMTYuLmU4OGQ2YjM1MjRlNmFkIDEwMDY0NFxuLS0tIGEvYmxvY2svYmxrLW1xLWRtYS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9ibG9jay9ibGstbXEtZG1hLmNcbkBAIC0xODksOCAmIzQzOzE4OSw5IEBAIHN0YXRpYyBib29sIGJsa19kbWFfbWFwX2l0ZXJfc3RhcnQoc3RydWN0IHJlcXVlc3QgKnJlcSwgc3RydWN0IGRldmljZSAqZG1hX2RldixcbiBcdFx0ICovXG4gXHRjYXNlIFBDSV9QMlBETUFfTUFQX05PTkU6XG4gXHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgUENJX1AyUERNQV9NQVBfTk9UX1NVUFBPUlRFRDpcbiBcdGRlZmF1bHQ6XG4tXHRcdGl0ZXItXHUwMDNlc3RhdHVzID0gQkxLX1NUU19JTlZBTDtcbiYjNDM7XHRcdGl0ZXItXHUwMDNlc3RhdHVzID0gQkxLX1NUU19QMlBETUE7XG4gXHRcdHJldHVybiBmYWxzZTtcbiBcdH1cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL21kLmMgYi9kcml2ZXJzL21kL21kLmNcbmluZGV4IGQxNDY1YmNkODZjODEyLi4zNzcwYmRiNGQ0YjI4YiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbWQvbWQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9tZC9tZC5jXG5AQCAtNDUxLDggJiM0Mzs0NTEsMTQgQEAgc3RhdGljIHZvaWQgbWRfc3VibWl0X2JpbyhzdHJ1Y3QgYmlvICpiaW8pXG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbi1cdC8qIGJpbyBjb3VsZCBiZSBtZXJnZWFibGUgYWZ0ZXIgcGFzc2luZyB0byB1bmRlcmxheWVyICovXG4tXHRiaW8tXHUwMDNlYmlfb3BmIFx1MDAyNj0gflJFUV9OT01FUkdFO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogQSBiaW8gbWQgc3BsaXQgbWF5IG1lcmdlIGFnYWluIGJlbG93IG1kIC0tIGV4Y2VwdCBQMlBETUEgYmlvcyxcbiYjNDM7XHQgKiB3aGljaCBtdXN0IHN0YXkgc2luZ2xlLXByb3ZpZGVyIChzZWUgX19iaW9fYWRkX3BhZ2UoKSkuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKG1kX2Jpb19pc19wMnBkbWEoYmlvKSlcbiYjNDM7XHRcdGJpby1cdTAwM2ViaV9vcGYgfD0gUkVRX05PTUVSR0U7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0YmlvLVx1MDAzZWJpX29wZiBcdTAwMjY9IH5SRVFfTk9NRVJHRTtcbiBcbiBcdG1kX2hhbmRsZV9yZXF1ZXN0KG1kZGV2LCBiaW8pO1xuIH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL21kLmggYi9kcml2ZXJzL21kL21kLmhcbmluZGV4IGQ4ZGFmMGY3NWNiYmU4Li43M2RmMWE2ZWNjZDg1MCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbWQvbWQuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9tZC9tZC5oXG5AQCAtMTEsOCAmIzQzOzExLDEwIEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYmxrZGV2LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9iYWNraW5nLWRldi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYmFkYmxvY2tzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvYmlvLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rb2JqZWN0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9saXN0LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbWVtcmVtYXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21tLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tdXRleC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdGltZXIuaFx1MDAzZVxuQEAgLTIyLDYgJiM0MzsyNCwxOSBAQFxuICNpbmNsdWRlIFx1MDAzY3RyYWNlL2V2ZW50cy9ibG9jay5oXHUwMDNlXG4gXG4gI2RlZmluZSBNYXhTZWN0b3IgKH4oc2VjdG9yX3QpMClcbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFAyUCBhbmQgaG9zdCBwYWdlcyBuZXZlciBtaXggd2l0aGluIGEgYmlvLCBzbyB0aGUgZmlyc3QgYnZlYyBpc1xuJiM0MzsgKiByZXByZXNlbnRhdGl2ZS4gIFJlYWQgYmlfaW9fdmVjIGRpcmVjdGx5OiBiaW9fZmlyc3RfYnZlY19hbGwoKVxuJiM0MzsgKiBXQVJOcyBvbiB0aGUgc3BsaXQgY2xvbmVzIG1kIGhhbmRsZXMsIGFuZCBkYXRhLWxlc3MgYmlvcyBoYXZlIG5vXG4mIzQzOyAqIGJpX2lvX3ZlYy4gIE5vdCB2YWxpZCBhZnRlciB0aGUgYmlvJiMzOTtzIGl0ZXJhdG9yIGlzIGNvbnN1bWVkLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGlubGluZSBib29sIG1kX2Jpb19pc19wMnBkbWEoc3RydWN0IGJpbyAqYmlvKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGJpb19oYXNfZGF0YShiaW8pIFx1MDAyNlx1MDAyNiBiaW8tXHUwMDNlYmlfaW9fdmVjIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAgICBpc19wY2lfcDJwZG1hX3BhZ2UoYmlvLVx1MDAzZWJpX2lvX3ZlYy1cdTAwM2Vidl9wYWdlKTtcbiYjNDM7fVxuJiM0MztcbiAvKlxuICAqIE51bWJlciBvZiBndWFyYW50ZWVkIHJhaWQgYmlvcyBpbiBjYXNlIG9mIGV4dHJlbWUgVk0gbG9hZDpcbiAgKi9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3JhaWQxLTEwLmMgYi9kcml2ZXJzL21kL3JhaWQxLTEwLmNcbmluZGV4IDU2YTU2YTRkYTRmODNmLi44OWRhZjg1NTgyNTFmYSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbWQvcmFpZDEtMTAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9tZC9yYWlkMS0xMC5jXG5AQCAtMzAzLDMgJiM0MzszMDMsMTkgQEAgc3RhdGljIGlubGluZSBib29sIHJhaWQxX3Nob3VsZF9oYW5kbGVfZXJyb3Ioc3RydWN0IGJpbyAqYmlvKVxuIFx0cmV0dXJuICEoYmlvLVx1MDAzZWJpX29wZiBcdTAwMjYgKFJFUV9SQUhFQUQgfCBSRVFfTk9XQUlUKSkgXHUwMDI2XHUwMDI2XG4gXHRcdGJpby1cdTAwM2ViaV9zdGF0dXMgIT0gQkxLX1NUU19JTlZBTDtcbiB9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgcmFpZDFfd3JpdGVfZXJyb3Ioc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kX3JkZXYgKnJkZXYsXG4mIzQzO1x0XHRcdFx0ICAgICBzdHJ1Y3QgYmlvICpiaW8sIGJvb2wgYWxsb3dfZmFpbGZhc3QpXG4mIzQzO3tcbiYjNDM7XHRzZXRfYml0KFdyaXRlRXJyb3JTZWVuLCBcdTAwMjZyZGV2LVx1MDAzZWZsYWdzKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGJpby1cdTAwM2ViaV9zdGF0dXMgPT0gQkxLX1NUU19QMlBETUEpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGlmICghdGVzdF9hbmRfc2V0X2JpdChXYW50UmVwbGFjZW1lbnQsIFx1MDAyNnJkZXYtXHUwMDNlZmxhZ3MpKVxuJiM0MztcdFx0c2V0X2JpdChNRF9SRUNPVkVSWV9ORUVERUQsIFx1MDAyNm1kZGV2LVx1MDAzZXJlY292ZXJ5KTtcbiYjNDM7XG4mIzQzO1x0aWYgKGFsbG93X2ZhaWxmYXN0IFx1MDAyNlx1MDAyNiB0ZXN0X2JpdChGYWlsRmFzdCwgXHUwMDI2cmRldi1cdTAwM2VmbGFncykgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIChiaW8tXHUwMDNlYmlfb3BmIFx1MDAyNiBNRF9GQUlMRkFTVCkpXG4mIzQzO1x0XHRtZF9lcnJvcihtZGRldiwgcmRldik7XG4mIzQzO31cbmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3JhaWQxLmMgYi9kcml2ZXJzL21kL3JhaWQxLmNcbmluZGV4IGFmZTJjYTk2YWQ4YzIyLi43NmExNDI2ZTY0ZjAyZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbWQvcmFpZDEuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9tZC9yYWlkMS5jXG5AQCAtNDgzLDE3ICYjNDM7NDgzLDggQEAgc3RhdGljIHZvaWQgcmFpZDFfZW5kX3dyaXRlX3JlcXVlc3Qoc3RydWN0IGJpbyAqYmlvKVxuIFx0ICogJiMzOTtvbmUgbWlycm9yIElPIGhhcyBmaW5pc2hlZCYjMzk7IGV2ZW50IGhhbmRsZXI6XG4gXHQgKi9cbiBcdGlmIChiaW8tXHUwMDNlYmlfc3RhdHVzIFx1MDAyNlx1MDAyNiAhaWdub3JlX2Vycm9yKSB7XG4tXHRcdHNldF9iaXQoV3JpdGVFcnJvclNlZW4sXHRcdTAwMjZyZGV2LVx1MDAzZWZsYWdzKTtcbi1cdFx0aWYgKCF0ZXN0X2FuZF9zZXRfYml0KFdhbnRSZXBsYWNlbWVudCwgXHUwMDI2cmRldi1cdTAwM2VmbGFncykpXG4tXHRcdFx0c2V0X2JpdChNRF9SRUNPVkVSWV9ORUVERUQsIFx1MDAyNlxuLVx0XHRcdFx0Y29uZi1cdTAwM2VtZGRldi1cdTAwM2VyZWNvdmVyeSk7XG4tXG4tXHRcdGlmICh0ZXN0X2JpdChGYWlsRmFzdCwgXHUwMDI2cmRldi1cdTAwM2VmbGFncykgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICAoYmlvLVx1MDAzZWJpX29wZiBcdTAwMjYgTURfRkFJTEZBU1QpIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgLyogV2UgbmV2ZXIgdHJ5IEZhaWxGYXN0IHRvIFdyaXRlTW9zdGx5IGRldmljZXMgKi9cbi1cdFx0ICAgICF0ZXN0X2JpdChXcml0ZU1vc3RseSwgXHUwMDI2cmRldi1cdTAwM2VmbGFncykpIHtcbi1cdFx0XHRtZF9lcnJvcihyMV9iaW8tXHUwMDNlbWRkZXYsIHJkZXYpO1xuLVx0XHR9XG4mIzQzO1x0XHRyYWlkMV93cml0ZV9lcnJvcihjb25mLVx1MDAzZW1kZGV2LCByZGV2LCBiaW8sXG4mIzQzO1x0XHRcdFx0ICAhdGVzdF9iaXQoV3JpdGVNb3N0bHksIFx1MDAyNnJkZXYtXHUwMDNlZmxhZ3MpKTtcbiBcbiBcdFx0LypcbiBcdFx0ICogV2hlbiB0aGUgZGV2aWNlIGlzIGZhdWx0eSwgaXQgaXMgbm90IG5lY2Vzc2FyeSB0b1xuQEAgLTU2NCw3ICYjNDM7NTU1LDcgQEAgc3RhdGljIHZvaWQgcmFpZDFfZW5kX3dyaXRlX3JlcXVlc3Qoc3RydWN0IGJpbyAqYmlvKVxuIFx0XHRcdFx0Y2FsbF9iaW9fZW5kaW8ocjFfYmlvKTtcbiBcdFx0XHR9XG4gXHRcdH1cbi1cdH0gZWxzZSBpZiAodGVzdF9iaXQoTURfU0VSSUFMSVpFX1BPTElDWSwgXHUwMDI2cmRldi1cdTAwM2VtZGRldi1cdTAwM2VmbGFncykpXG4mIzQzO1x0fSBlbHNlIGlmICh0ZXN0X2JpdChDb2xsaXNpb25DaGVjaywgXHUwMDI2cmRldi1cdTAwM2VmbGFncykpXG4gXHRcdHJlbW92ZV9zZXJpYWwocmRldiwgbG8sIGhpKTtcbiBcdGlmIChyMV9iaW8tXHUwMDNlYmlvc1ttaXJyb3JdID09IE5VTEwpXG4gXHRcdHJkZXZfZGVjX3BlbmRpbmcocmRldiwgY29uZi1cdTAwM2VtZGRldik7XG5AQCAtMTUyMyw2ICYjNDM7MTUxNCw3IEBAIHN0YXRpYyBib29sIHJhaWQxX3dyaXRlX3JlcXVlc3Qoc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IGJpbyAqYmlvLFxuIFx0Ym9vbCB3cml0ZV9iZWhpbmQgPSBmYWxzZTtcbiBcdGJvb2wgbm93YWl0ID0gYmlvLVx1MDAzZWJpX29wZiBcdTAwMjYgUkVRX05PV0FJVDtcbiBcdGJvb2wgaXNfZGlzY2FyZCA9IG9wX2lzX2Rpc2NhcmQoYmlvLVx1MDAzZWJpX29wZik7XG4mIzQzO1x0Ym9vbCBpc19wMnBkbWEgPSBtZF9iaW9faXNfcDJwZG1hKGJpbyk7XG4gXHRzZWN0b3JfdCBzZWN0b3IgPSBiaW8tXHUwMDNlYmlfaXRlci5iaV9zZWN0b3I7XG4gXG4gXHRpZiAobWRkZXZfaXNfY2x1c3RlcmVkKG1kZGV2KSBcdTAwMjZcdTAwMjZcbkBAIC0xNTc1LDkgJiM0MzsxNTY3LDEyIEBAIHN0YXRpYyBib29sIHJhaWQxX3dyaXRlX3JlcXVlc3Qoc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IGJpbyAqYmlvLFxuIFx0XHQvKlxuIFx0XHQgKiBUaGUgd3JpdGUtYmVoaW5kIGlvIGlzIG9ubHkgYXR0ZW1wdGVkIG9uIGRyaXZlcyBtYXJrZWQgYXNcbiBcdFx0ICogd3JpdGUtbW9zdGx5LCB3aGljaCBtZWFucyB3ZSBjb3VsZCBhbGxvY2F0ZSB3cml0ZSBiZWhpbmRcbi1cdFx0ICogYmlvIGxhdGVyLlxuJiM0MztcdFx0ICogYmlvIGxhdGVyLiBQMlBETUEgYmlvcyBhcmUgZXhjbHVkZWQ6IHdyaXRlLWJlaGluZCBjb3BpZXNcbiYjNDM7XHRcdCAqIHRoZSBkYXRhIHdpdGggYmlvX2NvcHlfZGF0YSgpLCBhIENQVSBjb3B5IHRoYXQgY2Fubm90IGJlXG4mIzQzO1x0XHQgKiBhc3N1bWVkIHNhZmUgb3IgZmFzdCBvbiBQMlBETUEgKGRldmljZSBCQVIpIHBhZ2VzLlxuIFx0XHQgKi9cbi1cdFx0aWYgKCFpc19kaXNjYXJkIFx1MDAyNlx1MDAyNiByZGV2IFx1MDAyNlx1MDAyNiB0ZXN0X2JpdChXcml0ZU1vc3RseSwgXHUwMDI2cmRldi1cdTAwM2VmbGFncykpXG4mIzQzO1x0XHRpZiAoIWlzX2Rpc2NhcmQgXHUwMDI2XHUwMDI2ICFpc19wMnBkbWEgXHUwMDI2XHUwMDI2IHJkZXYgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgdGVzdF9iaXQoV3JpdGVNb3N0bHksIFx1MDAyNnJkZXYtXHUwMDNlZmxhZ3MpKVxuIFx0XHRcdHdyaXRlX2JlaGluZCA9IHRydWU7XG4gXG4gXHRcdHIxX2Jpby1cdTAwM2ViaW9zW2ldID0gTlVMTDtcbkBAIC0xNjc3LDcgJiM0MzsxNjcyLDExIEBAIHN0YXRpYyBib29sIHJhaWQxX3dyaXRlX3JlcXVlc3Qoc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IGJpbyAqYmlvLFxuIFx0XHRcdG1iaW8gPSBiaW9fYWxsb2NfY2xvbmUocmRldi1cdTAwM2ViZGV2LCBiaW8sIEdGUF9OT0lPLFxuIFx0XHRcdFx0XHQgICAgICAgXHUwMDI2bWRkZXYtXHUwMDNlYmlvX3NldCk7XG4gXG4tXHRcdFx0aWYgKHRlc3RfYml0KE1EX1NFUklBTElaRV9QT0xJQ1ksIFx1MDAyNm1kZGV2LVx1MDAzZWZsYWdzKSlcbiYjNDM7XHRcdFx0LypcbiYjNDM7XHRcdFx0ICogQ29sbGlzaW9uQ2hlY2sgbWFya3MgZXZlcnkgcmRldiB3aXRoIGEgc2VyaWFsXG4mIzQzO1x0XHRcdCAqIHRyZWU7IG9yZGVyIGFnYWluc3QgaW4tZmxpZ2h0IHdyaXRlLWJlaGluZCBJL08uXG4mIzQzO1x0XHRcdCAqL1xuJiM0MztcdFx0XHRpZiAodGVzdF9iaXQoQ29sbGlzaW9uQ2hlY2ssIFx1MDAyNnJkZXYtXHUwMDNlZmxhZ3MpKVxuIFx0XHRcdFx0d2FpdF9mb3Jfc2VyaWFsaXphdGlvbihyZGV2LCByMV9iaW8pO1xuIFx0XHR9XG4gXG5AQCAtMjU2Miw2ICYjNDM7MjU2MSw5IEBAIHN0YXRpYyB2b2lkIG5hcnJvd193cml0ZV9lcnJvcihzdHJ1Y3QgcjFiaW8gKnIxX2JpbywgaW50IGkpXG4gXHRcdH1cbiBcbiBcdFx0d2Jpby1cdTAwM2ViaV9vcGYgPSBSRVFfT1BfV1JJVEU7XG4mIzQzO1x0XHQvKiBLZWVwIFAyUERNQSByZXRyeSBiaW9zIHVubWVyZ2VhYmxlLCBsaWtlIHRoZSBvcmlnaW5hbCAqL1xuJiM0MztcdFx0aWYgKG1kX2Jpb19pc19wMnBkbWEod2JpbykpXG4mIzQzO1x0XHRcdHdiaW8tXHUwMDNlYmlfb3BmIHw9IFJFUV9OT01FUkdFO1xuIFx0XHR3YmlvLVx1MDAzZWJpX2l0ZXIuYmlfc2VjdG9yID0gcjFfYmlvLVx1MDAzZXNlY3RvcjtcbiBcdFx0d2Jpby1cdTAwM2ViaV9pdGVyLmJpX3NpemUgPSByMV9iaW8tXHUwMDNlc2VjdG9ycyBcdTAwM2NcdTAwM2MgOTtcbiBcbkBAIC0yNjIyLDEwICYjNDM7MjYyNCwxNiBAQCBzdGF0aWMgdm9pZCBoYW5kbGVfd3JpdGVfZmluaXNoZWQoc3RydWN0IHIxY29uZiAqY29uZiwgc3RydWN0IHIxYmlvICpyMV9iaW8pXG4gXHRcdFx0ICogbmFycm93IGRvd24gYW5kIHJlY29yZCBwcmVjaXNlIHdyaXRlXG4gXHRcdFx0ICogZXJyb3JzLlxuIFx0XHRcdCAqL1xuJiM0MztcdFx0XHRzdHJ1Y3QgbWRfcmRldiAqcmRldiA9IGNvbmYtXHUwMDNlbWlycm9yc1ttXS5yZGV2O1xuJiM0MztcbiBcdFx0XHRmYWlsID0gdHJ1ZTtcbi1cdFx0XHRuYXJyb3dfd3JpdGVfZXJyb3IocjFfYmlvLCBtKTtcbi1cdFx0XHRyZGV2X2RlY19wZW5kaW5nKGNvbmYtXHUwMDNlbWlycm9yc1ttXS5yZGV2LFxuLVx0XHRcdFx0XHQgY29uZi1cdTAwM2VtZGRldik7XG4mIzQzO1x0XHRcdC8qIE1hcHBpbmcgZmFpbHVyZXMgYXJlIHdob2xlLXJhbmdlIGFuZCBkZXRlcm1pbmlzdGljICovXG4mIzQzO1x0XHRcdGlmIChyMV9iaW8tXHUwMDNlYmlvc1ttXS1cdTAwM2ViaV9zdGF0dXMgPT0gQkxLX1NUU19QMlBETUEpXG4mIzQzO1x0XHRcdFx0cmRldl9zZXRfYmFkYmxvY2tzKHJkZXYsIHIxX2Jpby1cdTAwM2VzZWN0b3IsXG4mIzQzO1x0XHRcdFx0XHRcdCAgIHIxX2Jpby1cdTAwM2VzZWN0b3JzLCAwKTtcbiYjNDM7XHRcdFx0ZWxzZVxuJiM0MztcdFx0XHRcdG5hcnJvd193cml0ZV9lcnJvcihyMV9iaW8sIG0pO1xuJiM0MztcdFx0XHRyZGV2X2RlY19wZW5kaW5nKHJkZXYsIGNvbmYtXHUwMDNlbWRkZXYpO1xuIFx0XHR9XG4gXHRpZiAoZmFpbCkge1xuIFx0XHRzcGluX2xvY2tfaXJxKFx1MDAyNmNvbmYtXHUwMDNlZGV2aWNlX2xvY2spO1xuQEAgLTI2NTAsNiAmIzQzOzI2NTgsOCBAQCBzdGF0aWMgdm9pZCBoYW5kbGVfcmVhZF9lcnJvcihzdHJ1Y3QgcjFjb25mICpjb25mLCBzdHJ1Y3QgcjFiaW8gKnIxX2JpbylcbiB7XG4gXHRzdHJ1Y3QgbWRfcmRldiAqcmRldiA9IGNvbmYtXHUwMDNlbWlycm9yc1tyMV9iaW8tXHUwMDNlcmVhZF9kaXNrXS5yZGV2O1xuIFx0c3RydWN0IGJpbyAqYmlvID0gcjFfYmlvLVx1MDAzZWJpb3NbcjFfYmlvLVx1MDAzZXJlYWRfZGlza107XG4mIzQzO1x0LyogZXZhbHVhdGUgYmVmb3JlIHRoZSBiaW9fcHV0KCkgYmVsb3cgKi9cbiYjNDM7XHRib29sIHAycGRtYV9lcnJvciA9IGJpby1cdTAwM2ViaV9zdGF0dXMgPT0gQkxLX1NUU19QMlBETUE7XG4gXHRzdHJ1Y3QgbWRkZXYgKm1kZGV2ID0gY29uZi1cdTAwM2VtZGRldjtcbiBcdHNlY3Rvcl90IHNlY3RvcjtcbiBcbkBAIC0yNjY3LDcgJiM0MzsyNjc3LDcgQEAgc3RhdGljIHZvaWQgaGFuZGxlX3JlYWRfZXJyb3Ioc3RydWN0IHIxY29uZiAqY29uZiwgc3RydWN0IHIxYmlvICpyMV9iaW8pXG4gXHQgKiByZWFkIGVycm9yLiAgVGhpcyBpcyBhbGwgZG9uZSBzeW5jaHJvbm91c2x5IHdoaWxlIHRoZSBhcnJheSBpc1xuIFx0ICogZnJvemVuLlxuIFx0ICovXG4tXHRpZiAobWRkZXYtXHUwMDNlcm8pIHtcbiYjNDM7XHRpZiAobWRkZXYtXHUwMDNlcm8gfHwgcDJwZG1hX2Vycm9yKSB7XG4gXHRcdHIxX2Jpby1cdTAwM2ViaW9zW3IxX2Jpby1cdTAwM2VyZWFkX2Rpc2tdID0gSU9fQkxPQ0tFRDtcbiBcdH0gZWxzZSBpZiAodGVzdF9iaXQoRmFpbEZhc3QsIFx1MDAyNnJkZXYtXHUwMDNlZmxhZ3MpKSB7XG4gXHRcdG1kX2Vycm9yKG1kZGV2LCByZGV2KTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3JhaWQxMC5jIGIvZHJpdmVycy9tZC9yYWlkMTAuY1xuaW5kZXggMGEzY2ZkZDNmNWRmODAuLmUzNWFlYWMyOWYwNjQyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9tZC9yYWlkMTAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9tZC9yYWlkMTAuY1xuQEAgLTQ4MiwxNiAmIzQzOzQ4Miw4IEBAIHN0YXRpYyB2b2lkIHJhaWQxMF9lbmRfd3JpdGVfcmVxdWVzdChzdHJ1Y3QgYmlvICpiaW8pXG4gXHRcdFx0ICovXG4gXHRcdFx0bWRfZXJyb3IocmRldi1cdTAwM2VtZGRldiwgcmRldik7XG4gXHRcdGVsc2Uge1xuLVx0XHRcdHNldF9iaXQoV3JpdGVFcnJvclNlZW4sXHRcdTAwMjZyZGV2LVx1MDAzZWZsYWdzKTtcbi1cdFx0XHRpZiAoIXRlc3RfYW5kX3NldF9iaXQoV2FudFJlcGxhY2VtZW50LCBcdTAwMjZyZGV2LVx1MDAzZWZsYWdzKSlcbi1cdFx0XHRcdHNldF9iaXQoTURfUkVDT1ZFUllfTkVFREVELFxuLVx0XHRcdFx0XHRcdTAwMjZyZGV2LVx1MDAzZW1kZGV2LVx1MDAzZXJlY292ZXJ5KTtcbi1cbiBcdFx0XHRkZWNfcmRldiA9IDA7XG4tXHRcdFx0aWYgKHRlc3RfYml0KEZhaWxGYXN0LCBcdTAwMjZyZGV2LVx1MDAzZWZsYWdzKSBcdTAwMjZcdTAwMjZcbi1cdFx0XHQgICAgKGJpby1cdTAwM2ViaV9vcGYgXHUwMDI2IE1EX0ZBSUxGQVNUKSkge1xuLVx0XHRcdFx0bWRfZXJyb3IocmRldi1cdTAwM2VtZGRldiwgcmRldik7XG4tXHRcdFx0fVxuJiM0MztcdFx0XHRyYWlkMV93cml0ZV9lcnJvcihyZGV2LVx1MDAzZW1kZGV2LCByZGV2LCBiaW8sIHRydWUpO1xuIFxuIFx0XHRcdC8qXG4gXHRcdFx0ICogV2hlbiB0aGUgZGV2aWNlIGlzIGZhdWx0eSwgaXQgaXMgbm90IG5lY2Vzc2FyeSB0b1xuQEAgLTI4MzEsNiAmIzQzOzI4MjMsOSBAQCBzdGF0aWMgdm9pZCBuYXJyb3dfd3JpdGVfZXJyb3Ioc3RydWN0IHIxMGJpbyAqcjEwX2JpbywgaW50IGkpXG4gXHRcdHdiaW8tXHUwMDNlYmlfaXRlci5iaV9zZWN0b3IgPSB3c2VjdG9yICYjNDM7XG4gXHRcdFx0XHQgICBjaG9vc2VfZGF0YV9vZmZzZXQocjEwX2JpbywgcmRldik7XG4gXHRcdHdiaW8tXHUwMDNlYmlfb3BmID0gUkVRX09QX1dSSVRFO1xuJiM0MztcdFx0LyogS2VlcCBQMlBETUEgcmV0cnkgYmlvcyB1bm1lcmdlYWJsZSwgbGlrZSB0aGUgb3JpZ2luYWwgKi9cbiYjNDM7XHRcdGlmIChtZF9iaW9faXNfcDJwZG1hKHdiaW8pKVxuJiM0MztcdFx0XHR3YmlvLVx1MDAzZWJpX29wZiB8PSBSRVFfTk9NRVJHRTtcbiBcbiBcdFx0aWYgKHN1Ym1pdF9iaW9fd2FpdCh3YmlvKSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgICFyZGV2X3NldF9iYWRibG9ja3MocmRldiwgd3NlY3Rvciwgc2VjdG9ycywgMCkpIHtcbkBAIC0yODUzLDYgJiM0MzsyODQ4LDcgQEAgc3RhdGljIHZvaWQgaGFuZGxlX3JlYWRfZXJyb3Ioc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IHIxMGJpbyAqcjEwX2JpbylcbiB7XG4gXHRpbnQgc2xvdCA9IHIxMF9iaW8tXHUwMDNlcmVhZF9zbG90O1xuIFx0c3RydWN0IGJpbyAqYmlvO1xuJiM0MztcdGJvb2wgcDJwZG1hX2Vycm9yO1xuIFx0c3RydWN0IHIxMGNvbmYgKmNvbmYgPSBtZGRldi1cdTAwM2Vwcml2YXRlO1xuIFx0c3RydWN0IG1kX3JkZXYgKnJkZXYgPSByMTBfYmlvLVx1MDAzZWRldnNbc2xvdF0ucmRldjtcbiBcbkBAIC0yODY1LDEwICYjNDM7Mjg2MSwxMiBAQCBzdGF0aWMgdm9pZCBoYW5kbGVfcmVhZF9lcnJvcihzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgcjEwYmlvICpyMTBfYmlvKVxuIFx0ICogZnJvemVuLlxuIFx0ICovXG4gXHRiaW8gPSByMTBfYmlvLVx1MDAzZWRldnNbc2xvdF0uYmlvO1xuJiM0MztcdC8qIGV2YWx1YXRlIGJlZm9yZSB0aGUgYmlvX3B1dCgpIGJlbG93ICovXG4mIzQzO1x0cDJwZG1hX2Vycm9yID0gYmlvLVx1MDAzZWJpX3N0YXR1cyA9PSBCTEtfU1RTX1AyUERNQTtcbiBcdGJpb19wdXQoYmlvKTtcbiBcdHIxMF9iaW8tXHUwMDNlZGV2c1tzbG90XS5iaW8gPSBOVUxMO1xuIFxuLVx0aWYgKG1kZGV2LVx1MDAzZXJvKVxuJiM0MztcdGlmIChtZGRldi1cdTAwM2VybyB8fCBwMnBkbWFfZXJyb3IpXG4gXHRcdHIxMF9iaW8tXHUwMDNlZGV2c1tzbG90XS5iaW8gPSBJT19CTE9DS0VEO1xuIFx0ZWxzZSBpZiAoIXRlc3RfYml0KEZhaWxGYXN0LCBcdTAwMjZyZGV2LVx1MDAzZWZsYWdzKSkge1xuIFx0XHRmcmVlemVfYXJyYXkoY29uZiwgMSk7XG5AQCAtMjk0NSw3ICYjNDM7Mjk0MywxMyBAQCBzdGF0aWMgdm9pZCBoYW5kbGVfd3JpdGVfY29tcGxldGVkKHN0cnVjdCByMTBjb25mICpjb25mLCBzdHJ1Y3QgcjEwYmlvICpyMTBfYmlvKVxuIFx0XHRcdFx0cmRldl9kZWNfcGVuZGluZyhyZGV2LCBjb25mLVx1MDAzZW1kZGV2KTtcbiBcdFx0XHR9IGVsc2UgaWYgKGJpbyAhPSBOVUxMIFx1MDAyNlx1MDAyNiBiaW8tXHUwMDNlYmlfc3RhdHVzKSB7XG4gXHRcdFx0XHRmYWlsID0gdHJ1ZTtcbi1cdFx0XHRcdG5hcnJvd193cml0ZV9lcnJvcihyMTBfYmlvLCBtKTtcbiYjNDM7XHRcdFx0XHQvKiBNYXBwaW5nIGZhaWx1cmVzIGFyZSB3aG9sZS1yYW5nZSBhbmQgZGV0ZXJtaW5pc3RpYyAqL1xuJiM0MztcdFx0XHRcdGlmIChiaW8tXHUwMDNlYmlfc3RhdHVzID09IEJMS19TVFNfUDJQRE1BKVxuJiM0MztcdFx0XHRcdFx0cmRldl9zZXRfYmFkYmxvY2tzKHJkZXYsXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgcjEwX2Jpby1cdTAwM2VkZXZzW21dLmFkZHIsXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgcjEwX2Jpby1cdTAwM2VzZWN0b3JzLCAwKTtcbiYjNDM7XHRcdFx0XHRlbHNlXG4mIzQzO1x0XHRcdFx0XHRuYXJyb3dfd3JpdGVfZXJyb3IocjEwX2JpbywgbSk7XG4gXHRcdFx0XHRyZGV2X2RlY19wZW5kaW5nKHJkZXYsIGNvbmYtXHUwMDNlbWRkZXYpO1xuIFx0XHRcdH1cbiBcdFx0XHRiaW8gPSByMTBfYmlvLVx1MDAzZWRldnNbbV0ucmVwbF9iaW87XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9udm1lL2hvc3QvcmRtYS5jIGIvZHJpdmVycy9udm1lL2hvc3QvcmRtYS5jXG5pbmRleCA2OTA5ZTM1NDI3OTQyNy4uMmY1MDUwOWE3YTYxNjAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL252bWUvaG9zdC9yZG1hLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbnZtZS9ob3N0L3JkbWEuY1xuQEAgLTE0NjksNiAmIzQzOzE0NjksNyBAQCBzdGF0aWMgaW50IG52bWVfcmRtYV9kbWFfbWFwX3JlcShzdHJ1Y3QgaWJfZGV2aWNlICppYmRldiwgc3RydWN0IHJlcXVlc3QgKnJxLFxuIFx0XHRpbnQgKmNvdW50LCBpbnQgKnBpX2NvdW50KVxuIHtcbiBcdHN0cnVjdCBudm1lX3JkbWFfcmVxdWVzdCAqcmVxID0gYmxrX21xX3JxX3RvX3BkdShycSk7XG4mIzQzO1x0c3RydWN0IHNnX3RhYmxlIHNndDtcbiBcdGludCByZXQ7XG4gXG4gXHRyZXEtXHUwMDNlZGF0YV9zZ2wuc2dfdGFibGUuc2dsID0gKHN0cnVjdCBzY2F0dGVybGlzdCAqKShyZXEgJiM0MzsgMSk7XG5AQCAtMTQ4MCwxMiAmIzQzOzE0ODEsMTQgQEAgc3RhdGljIGludCBudm1lX3JkbWFfZG1hX21hcF9yZXEoc3RydWN0IGliX2RldmljZSAqaWJkZXYsIHN0cnVjdCByZXF1ZXN0ICpycSxcbiBcbiBcdHJlcS1cdTAwM2VkYXRhX3NnbC5uZW50cyA9IGJsa19ycV9tYXBfc2cocnEsIHJlcS1cdTAwM2VkYXRhX3NnbC5zZ190YWJsZS5zZ2wpO1xuIFxuLVx0KmNvdW50ID0gaWJfZG1hX21hcF9zZyhpYmRldiwgcmVxLVx1MDAzZWRhdGFfc2dsLnNnX3RhYmxlLnNnbCxcbi1cdFx0XHQgICAgICAgcmVxLVx1MDAzZWRhdGFfc2dsLm5lbnRzLCBycV9kbWFfZGlyKHJxKSk7XG4tXHRpZiAodW5saWtlbHkoKmNvdW50IFx1MDAzYz0gMCkpIHtcbi1cdFx0cmV0ID0gLUVJTztcbiYjNDM7XHRzZ3QgPSAoc3RydWN0IHNnX3RhYmxlKSB7XG4mIzQzO1x0XHQuc2dsXHRcdD0gcmVxLVx1MDAzZWRhdGFfc2dsLnNnX3RhYmxlLnNnbCxcbiYjNDM7XHRcdC5vcmlnX25lbnRzXHQ9IHJlcS1cdTAwM2VkYXRhX3NnbC5uZW50cyxcbiYjNDM7XHR9O1xuJiM0MztcdHJldCA9IGliX2RtYV9tYXBfc2d0YWJsZV9hdHRycyhpYmRldiwgXHUwMDI2c2d0LCBycV9kbWFfZGlyKHJxKSwgMCk7XG4mIzQzO1x0aWYgKHVubGlrZWx5KHJldCkpXG4gXHRcdGdvdG8gb3V0X2ZyZWVfdGFibGU7XG4tXHR9XG4mIzQzO1x0KmNvdW50ID0gc2d0Lm5lbnRzO1xuIFxuIFx0aWYgKGJsa19pbnRlZ3JpdHlfcnEocnEpKSB7XG4gXHRcdHJlcS1cdTAwM2VtZXRhZGF0YV9zZ2wtXHUwMDNlc2dfdGFibGUuc2dsID1cbkBAIC0xNTAxLDE0ICYjNDM7MTUwNCwxNCBAQCBzdGF0aWMgaW50IG52bWVfcmRtYV9kbWFfbWFwX3JlcShzdHJ1Y3QgaWJfZGV2aWNlICppYmRldiwgc3RydWN0IHJlcXVlc3QgKnJxLFxuIFxuIFx0XHRyZXEtXHUwMDNlbWV0YWRhdGFfc2dsLVx1MDAzZW5lbnRzID0gYmxrX3JxX21hcF9pbnRlZ3JpdHlfc2cocnEsXG4gXHRcdFx0XHRyZXEtXHUwMDNlbWV0YWRhdGFfc2dsLVx1MDAzZXNnX3RhYmxlLnNnbCk7XG4tXHRcdCpwaV9jb3VudCA9IGliX2RtYV9tYXBfc2coaWJkZXYsXG4tXHRcdFx0XHRcdCAgcmVxLVx1MDAzZW1ldGFkYXRhX3NnbC1cdTAwM2VzZ190YWJsZS5zZ2wsXG4tXHRcdFx0XHRcdCAgcmVxLVx1MDAzZW1ldGFkYXRhX3NnbC1cdTAwM2VuZW50cyxcbi1cdFx0XHRcdFx0ICBycV9kbWFfZGlyKHJxKSk7XG4tXHRcdGlmICh1bmxpa2VseSgqcGlfY291bnQgXHUwMDNjPSAwKSkge1xuLVx0XHRcdHJldCA9IC1FSU87XG4mIzQzO1x0XHRzZ3QgPSAoc3RydWN0IHNnX3RhYmxlKSB7XG4mIzQzO1x0XHRcdC5zZ2xcdFx0PSByZXEtXHUwMDNlbWV0YWRhdGFfc2dsLVx1MDAzZXNnX3RhYmxlLnNnbCxcbiYjNDM7XHRcdFx0Lm9yaWdfbmVudHNcdD0gcmVxLVx1MDAzZW1ldGFkYXRhX3NnbC1cdTAwM2VuZW50cyxcbiYjNDM7XHRcdH07XG4mIzQzO1x0XHRyZXQgPSBpYl9kbWFfbWFwX3NndGFibGVfYXR0cnMoaWJkZXYsIFx1MDAyNnNndCwgcnFfZG1hX2RpcihycSksIDApO1xuJiM0MztcdFx0aWYgKHVubGlrZWx5KHJldCkpXG4gXHRcdFx0Z290byBvdXRfZnJlZV9waV90YWJsZTtcbi1cdFx0fVxuJiM0MztcdFx0KnBpX2NvdW50ID0gc2d0Lm5lbnRzO1xuIFx0fVxuIFxuIFx0cmV0dXJuIDA7XG5AQCAtMjAyNiw4ICYjNDM7MjAyOSw2IEBAIHN0YXRpYyBibGtfc3RhdHVzX3QgbnZtZV9yZG1hX3F1ZXVlX3JxKHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4LFxuIFx0aWYgKHJldClcbiBcdFx0Z290byB1bm1hcF9xZTtcbiBcbi1cdG52bWVfc3RhcnRfcmVxdWVzdChycSk7XG4tXG4gXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkpIFx1MDAyNlx1MDAyNlxuIFx0ICAgIHF1ZXVlLVx1MDAzZXBpX3N1cHBvcnQgXHUwMDI2XHUwMDI2XG4gXHQgICAgKGMtXHUwMDNlY29tbW9uLm9wY29kZSA9PSBudm1lX2NtZF93cml0ZSB8fFxuQEAgLTIwMzksMTEgJiM0MzsyMDQwLDEzIEBAIHN0YXRpYyBibGtfc3RhdHVzX3QgbnZtZV9yZG1hX3F1ZXVlX3JxKHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4LFxuIFxuIFx0ZXJyID0gbnZtZV9yZG1hX21hcF9kYXRhKHF1ZXVlLCBycSwgYyk7XG4gXHRpZiAodW5saWtlbHkoZXJyIFx1MDAzYyAwKSkge1xuLVx0XHRkZXZfZXJyKHF1ZXVlLVx1MDAzZWN0cmwtXHUwMDNlY3RybC5kZXZpY2UsXG4tXHRcdFx0ICAgICBcJiMzNDtGYWlsZWQgdG8gbWFwIGRhdGEgKCVkKVxcblwmIzM0OywgZXJyKTtcbiYjNDM7XHRcdGRldl9lcnJfcmF0ZWxpbWl0ZWQocXVldWUtXHUwMDNlY3RybC1cdTAwM2VjdHJsLmRldmljZSxcbiYjNDM7XHRcdFx0XHQgICAgXCYjMzQ7RmFpbGVkIHRvIG1hcCBkYXRhICglZClcXG5cJiMzNDssIGVycik7XG4gXHRcdGdvdG8gZXJyO1xuIFx0fVxuIFxuJiM0MztcdG52bWVfc3RhcnRfcmVxdWVzdChycSk7XG4mIzQzO1xuIFx0c3FlLVx1MDAzZWNxZS5kb25lID0gbnZtZV9yZG1hX3NlbmRfZG9uZTtcbiBcbiBcdGliX2RtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKGRldiwgc3FlLVx1MDAzZWRtYSxcbkBAIC0yMDYzLDYgJiM0MzsyMDY2LDkgQEAgc3RhdGljIGJsa19zdGF0dXNfdCBudm1lX3JkbWFfcXVldWVfcnEoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsXG4gXHRcdHJldCA9IG52bWVfaG9zdF9wYXRoX2Vycm9yKHJxKTtcbiBcdGVsc2UgaWYgKGVyciA9PSAtRU5PTUVNIHx8IGVyciA9PSAtRUFHQUlOKVxuIFx0XHRyZXQgPSBCTEtfU1RTX1JFU09VUkNFO1xuJiM0MztcdC8qIFBlZXIgbWVtb3J5IHVucmVhY2hhYmxlIGZyb20gdGhpcyBkZXZpY2U6IGRvbiYjMzk7dCByZXRyeS4gKi9cbiYjNDM7XHRlbHNlIGlmIChlcnIgPT0gLUVSRU1PVEVJTylcbiYjNDM7XHRcdHJldCA9IEJMS19TVFNfUDJQRE1BO1xuIFx0ZWxzZVxuIFx0XHRyZXQgPSBCTEtfU1RTX0lPRVJSO1xuIFx0bnZtZV9jbGVhbnVwX2NtZChycSk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ibGtfdHlwZXMuaCBiL2luY2x1ZGUvbGludXgvYmxrX3R5cGVzLmhcbmluZGV4IDg4MDhlZTc2ZTczYzA5Li5jOGRlNzgwOTMyMGFkNCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvYmxrX3R5cGVzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYmxrX3R5cGVzLmhcbkBAIC0xNjUsNiAmIzQzOzE2NSwxNSBAQCB0eXBlZGVmIHUxNiBibGtfc2hvcnRfdDtcbiAgKi9cbiAjZGVmaW5lIEJMS19TVFNfRFVSQVRJT05fTElNSVRcdCgoX19mb3JjZSBibGtfc3RhdHVzX3QpMTcpXG4gXG4mIzQzOy8qXG4mIzQzOyAqIEJMS19TVFNfUDJQRE1BIGlzIHJldHVybmVkIHdoZW4gYSBwZWVyLXRvLXBlZXIgRE1BIHRyYW5zZmVyIGNhbm5vdCBiZVxuJiM0MzsgKiBtYXBwZWQgKHR5cGljYWxseSBiZWNhdXNlIHRoZXJlIGlzIG5vIHJvdXRlIGJldHdlZW4gdGhlIGluaXRpYXRvciBhbmQgdGhlXG4mIzQzOyAqIHRhcmdldCB0aGF0IHRoZSBwbGF0Zm9ybSYjMzk7cyBQQ0llIHRvcG9sb2d5IGFuZCBBQ1Mgc2V0dGluZ3MgYWxsb3cpLiBUaGlzXG4mIzQzOyAqIGlzIGEgcHJvcGVydHkgb2YgdGhlIGluaXRpYXRvci90YXJnZXQgcGFpciwgbm90IG9mIHRoZSB0YXJnZXQgZGV2aWNlJiMzOTtzXG4mIzQzOyAqIGhlYWx0aC4gVGhpcyBlcnJvciBzaG91bGQgbmV2ZXIgYmUgcmV0cmllZC5cbiYjNDM7ICovXG4mIzQzOyNkZWZpbmUgQkxLX1NUU19QMlBETUFcdCgoX19mb3JjZSBibGtfc3RhdHVzX3QpMTgpXG4mIzQzO1xuIC8qXG4gICogSW52YWxpZCBzaXplIG9yIGFsaWdubWVudC5cbiAgKi9cbkBAIC0xODgsNiAmIzQzOzE5Nyw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBibGtfcGF0aF9lcnJvcihibGtfc3RhdHVzX3QgZXJyb3IpXG4gXHRjYXNlIEJMS19TVFNfTk9UU1VQUDpcbiBcdGNhc2UgQkxLX1NUU19OT1NQQzpcbiBcdGNhc2UgQkxLX1NUU19UQVJHRVQ6XG4mIzQzO1x0Y2FzZSBCTEtfU1RTX1AyUERNQTpcbiBcdGNhc2UgQkxLX1NUU19SRVNWX0NPTkZMSUNUOlxuIFx0Y2FzZSBCTEtfU1RTX01FRElVTTpcbiBcdGNhc2UgQkxLX1NUU19QUk9URUNUSU9OOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDIxOjMzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNRF9SQUlEMSYjMzQ7LAogICAgJiMzNDtNRF9SQUlEMTAmIzM0OywKICAgICYjMzQ7TlZNRV9SRE1BJiMzNDssCiAgICAmIzM0O1BDSV9QMlBETUEmIzM0OywKICAgICYjMzQ7TlZNRV9UQVJHRVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyYWlkMV93cml0ZV9lcnJvciYjMzQ7LAogICAgJiMzNDtuYXJyb3dfd3JpdGVfZXJyb3ImIzM0OywKICAgICYjMzQ7aGFuZGxlX3dyaXRlX2ZpbmlzaGVkJiMzNDssCiAgICAmIzM0O2hhbmRsZV93cml0ZV9jb21wbGV0ZWQmIzM0OywKICAgICYjMzQ7aGFuZGxlX3JlYWRfZXJyb3ImIzM0OywKICAgICYjMzQ7bnZtZV9yZG1hX2RtYV9tYXBfcmVxJiMzNDssCiAgICAmIzM0O252bWVfcmRtYV9xdWV1ZV9ycSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGhhbmRsaW5nIGZvciBCTEtfU1RTX1AyUERNQSBlcnJvcnMgaW4gdGhlIGJsb2NrIGxheWVyLCBNRCBSQUlEIChSQUlEMS9SQUlEMTApLCBhbmQgTlZNZSBSRE1BLiBJdCBtb2RpZmllcyBlcnJvciBoYW5kbGluZyBwYXRocyBpbiBNRCBSQUlEIHRvIHByb3Blcmx5IGhhbmRsZSBQMlBETUEgbWFwcGluZyBmYWlsdXJlcyBieSBzZXR0aW5nIGJhZGJsb2NrcyBvciBibG9ja2luZyByZWFkcyBpbnN0ZWFkIG9mIGZhaWxpbmcgdGhlIHVuZGVybHlpbmcgZGV2aWNlLiBJdCBhbHNvIG1vZGlmaWVzIE5WTWUgUkRNQSB0byB1c2UgaWJfZG1hX21hcF9zZ3RhYmxlX2F0dHJzIGFuZCByZXR1cm4gQkxLX1NUU19QMlBETUEgb24gbWFwcGluZyBmYWlsdXJlcy4gVGhlc2UgY2hhbmdlcyBhcmUgZnVuY3Rpb25hbGx5IHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYnkgY29uZmlndXJpbmcgTlZNZSB0YXJnZXRzIHdpdGggUDJQIG1lbW9yeSBiYWNrZWQgYnkgTUQgYXJyYXlzLCBvciBieSB1c2luZyBOVk1lIFJETUEgb3ZlciBzb2Z0d2FyZSBSRE1BIGRldmljZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDM3MWVkNjAzZWJkN2E2ODM3NmJiODIwZWY4ZGUwN2FjYmY3MzU1ZGUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEp1bCAyMyAyMTozMzowNyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1jb3JlLmMgYi9ibG9jay9ibGstY29yZS5jCmluZGV4IDM2NTY0MTI2NmM5ZTgyLi44M2NiNTQ2NDI2NWZiNiAxMDA2NDQKLS0tIGEvYmxvY2svYmxrLWNvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9ibG9jay9ibGstY29yZS5jCkBAIC0xNzcsNiAmIzQzOzE3Nyw5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgewogCiAJLyogQ29tbWFuZCBkdXJhdGlvbiBsaW1pdCBkZXZpY2Utc2lkZSB0aW1lb3V0ICovCiAJRU5UKERVUkFUSU9OX0xJTUlULAktRVRJTUUsCQkmIzM0O2R1cmF0aW9uIGxpbWl0IGV4Y2VlZGVkJiMzNDspLAomIzQzOwomIzQzOwkvKiBubyBQQ0llIFAyUERNQSByb3V0ZSBiZXR3ZWVuIGluaXRpYXRvciBhbmQgdGFyZ2V0ICovCiYjNDM7CUVOVChQMlBETUEsCQktRVJFTU9URUlPLAkmIzM0O3BlZXItdG8tcGVlciB0cmFuc2ZlciB1bnJvdXRhYmxlJiMzNDspLAogCUVOVChJTlZBTCwJCS1FSU5WQUwsCSYjMzQ7aW52YWxpZCYjMzQ7KSwKIAogCS8qIGV2ZXJ5dGhpbmcgZWxzZSBub3QgY292ZXJlZCBhYm92ZTogKi8KZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1tcS1kbWEuYyBiL2Jsb2NrL2Jsay1tcS1kbWEuYwppbmRleCBiZmRiOWVkNzA3NDExNi4uZTg4ZDZiMzUyNGU2YWQgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2Jsay1tcS1kbWEuYwomIzQzOyYjNDM7JiM0MzsgYi9ibG9jay9ibGstbXEtZG1hLmMKQEAgLTE4OSw4ICYjNDM7MTg5LDkgQEAgc3RhdGljIGJvb2wgYmxrX2RtYV9tYXBfaXRlcl9zdGFydChzdHJ1Y3QgcmVxdWVzdCAqcmVxLCBzdHJ1Y3QgZGV2aWNlICpkbWFfZGV2LAogCQkgKi8KIAljYXNlIFBDSV9QMlBETUFfTUFQX05PTkU6CiAJCWJyZWFrOwomIzQzOwljYXNlIFBDSV9QMlBETUFfTUFQX05PVF9TVVBQT1JURUQ6CiAJZGVmYXVsdDoKLQkJaXRlci0mZ3Q7c3RhdHVzID0gQkxLX1NUU19JTlZBTDsKJiM0MzsJCWl0ZXItJmd0O3N0YXR1cyA9IEJMS19TVFNfUDJQRE1BOwogCQlyZXR1cm4gZmFsc2U7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL21kLmMgYi9kcml2ZXJzL21kL21kLmMKaW5kZXggZDE0NjViY2Q4NmM4MTIuLjM3NzBiZGI0ZDRiMjhiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL21kLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9tZC9tZC5jCkBAIC00NTEsOCAmIzQzOzQ1MSwxNCBAQCBzdGF0aWMgdm9pZCBtZF9zdWJtaXRfYmlvKHN0cnVjdCBiaW8gKmJpbykKIAkJcmV0dXJuOwogCX0KIAotCS8qIGJpbyBjb3VsZCBiZSBtZXJnZWFibGUgYWZ0ZXIgcGFzc2luZyB0byB1bmRlcmxheWVyICovCi0JYmlvLSZndDtiaV9vcGYgJmFtcDs9IH5SRVFfTk9NRVJHRTsKJiM0MzsJLyoKJiM0MzsJICogQSBiaW8gbWQgc3BsaXQgbWF5IG1lcmdlIGFnYWluIGJlbG93IG1kIC0tIGV4Y2VwdCBQMlBETUEgYmlvcywKJiM0MzsJICogd2hpY2ggbXVzdCBzdGF5IHNpbmdsZS1wcm92aWRlciAoc2VlIF9fYmlvX2FkZF9wYWdlKCkpLgomIzQzOwkgKi8KJiM0MzsJaWYgKG1kX2Jpb19pc19wMnBkbWEoYmlvKSkKJiM0MzsJCWJpby0mZ3Q7Ymlfb3BmIHw9IFJFUV9OT01FUkdFOwomIzQzOwllbHNlCiYjNDM7CQliaW8tJmd0O2JpX29wZiAmYW1wOz0gflJFUV9OT01FUkdFOwogCiAJbWRfaGFuZGxlX3JlcXVlc3QobWRkZXYsIGJpbyk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL21kLmggYi9kcml2ZXJzL21kL21kLmgKaW5kZXggZDhkYWYwZjc1Y2JiZTguLjczZGYxYTZlY2NkODUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL21kLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9tZC9tZC5oCkBAIC0xMSw4ICYjNDM7MTEsMTAgQEAKICNpbmNsdWRlICZsdDtsaW51eC9ibGtkZXYuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9iYWNraW5nLWRldi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2JhZGJsb2Nrcy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9iaW8uaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9rb2JqZWN0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbGlzdC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9tZW1yZW1hcC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L21tLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbXV0ZXguaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC90aW1lci5oJmd0OwpAQCAtMjIsNiAmIzQzOzI0LDE5IEBACiAjaW5jbHVkZSAmbHQ7dHJhY2UvZXZlbnRzL2Jsb2NrLmgmZ3Q7CiAKICNkZWZpbmUgTWF4U2VjdG9yICh+KHNlY3Rvcl90KTApCiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBQMlAgYW5kIGhvc3QgcGFnZXMgbmV2ZXIgbWl4IHdpdGhpbiBhIGJpbywgc28gdGhlIGZpcnN0IGJ2ZWMgaXMKJiM0MzsgKiByZXByZXNlbnRhdGl2ZS4gIFJlYWQgYmlfaW9fdmVjIGRpcmVjdGx5OiBiaW9fZmlyc3RfYnZlY19hbGwoKQomIzQzOyAqIFdBUk5zIG9uIHRoZSBzcGxpdCBjbG9uZXMgbWQgaGFuZGxlcywgYW5kIGRhdGEtbGVzcyBiaW9zIGhhdmUgbm8KJiM0MzsgKiBiaV9pb192ZWMuICBOb3QgdmFsaWQgYWZ0ZXIgdGhlIGJpbyYjMzk7cyBpdGVyYXRvciBpcyBjb25zdW1lZC4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgbWRfYmlvX2lzX3AycGRtYShzdHJ1Y3QgYmlvICpiaW8pCiYjNDM7ewomIzQzOwlyZXR1cm4gYmlvX2hhc19kYXRhKGJpbykgJmFtcDsmYW1wOyBiaW8tJmd0O2JpX2lvX3ZlYyAmYW1wOyZhbXA7CiYjNDM7CSAgICAgICBpc19wY2lfcDJwZG1hX3BhZ2UoYmlvLSZndDtiaV9pb192ZWMtJmd0O2J2X3BhZ2UpOwomIzQzO30KJiM0MzsKIC8qCiAgKiBOdW1iZXIgb2YgZ3VhcmFudGVlZCByYWlkIGJpb3MgaW4gY2FzZSBvZiBleHRyZW1lIFZNIGxvYWQ6CiAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvcmFpZDEtMTAuYyBiL2RyaXZlcnMvbWQvcmFpZDEtMTAuYwppbmRleCA1NmE1NmE0ZGE0ZjgzZi4uODlkYWY4NTU4MjUxZmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvcmFpZDEtMTAuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL21kL3JhaWQxLTEwLmMKQEAgLTMwMywzICYjNDM7MzAzLDE5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCByYWlkMV9zaG91bGRfaGFuZGxlX2Vycm9yKHN0cnVjdCBiaW8gKmJpbykKIAlyZXR1cm4gIShiaW8tJmd0O2JpX29wZiAmYW1wOyAoUkVRX1JBSEVBRCB8IFJFUV9OT1dBSVQpKSAmYW1wOyZhbXA7CiAJCWJpby0mZ3Q7Ymlfc3RhdHVzICE9IEJMS19TVFNfSU5WQUw7CiB9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHJhaWQxX3dyaXRlX2Vycm9yKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZF9yZGV2ICpyZGV2LAomIzQzOwkJCQkgICAgIHN0cnVjdCBiaW8gKmJpbywgYm9vbCBhbGxvd19mYWlsZmFzdCkKJiM0Mzt7CiYjNDM7CXNldF9iaXQoV3JpdGVFcnJvclNlZW4sICZhbXA7cmRldi0mZ3Q7ZmxhZ3MpOwomIzQzOwomIzQzOwlpZiAoYmlvLSZndDtiaV9zdGF0dXMgPT0gQkxLX1NUU19QMlBETUEpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWlmICghdGVzdF9hbmRfc2V0X2JpdChXYW50UmVwbGFjZW1lbnQsICZhbXA7cmRldi0mZ3Q7ZmxhZ3MpKQomIzQzOwkJc2V0X2JpdChNRF9SRUNPVkVSWV9ORUVERUQsICZhbXA7bWRkZXYtJmd0O3JlY292ZXJ5KTsKJiM0MzsKJiM0MzsJaWYgKGFsbG93X2ZhaWxmYXN0ICZhbXA7JmFtcDsgdGVzdF9iaXQoRmFpbEZhc3QsICZhbXA7cmRldi0mZ3Q7ZmxhZ3MpICZhbXA7JmFtcDsKJiM0MzsJICAgIChiaW8tJmd0O2JpX29wZiAmYW1wOyBNRF9GQUlMRkFTVCkpCiYjNDM7CQltZF9lcnJvcihtZGRldiwgcmRldik7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9yYWlkMS5jIGIvZHJpdmVycy9tZC9yYWlkMS5jCmluZGV4IGFmZTJjYTk2YWQ4YzIyLi43NmExNDI2ZTY0ZjAyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9yYWlkMS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbWQvcmFpZDEuYwpAQCAtNDgzLDE3ICYjNDM7NDgzLDggQEAgc3RhdGljIHZvaWQgcmFpZDFfZW5kX3dyaXRlX3JlcXVlc3Qoc3RydWN0IGJpbyAqYmlvKQogCSAqICYjMzk7b25lIG1pcnJvciBJTyBoYXMgZmluaXNoZWQmIzM5OyBldmVudCBoYW5kbGVyOgogCSAqLwogCWlmIChiaW8tJmd0O2JpX3N0YXR1cyAmYW1wOyZhbXA7ICFpZ25vcmVfZXJyb3IpIHsKLQkJc2V0X2JpdChXcml0ZUVycm9yU2VlbiwJJmFtcDtyZGV2LSZndDtmbGFncyk7Ci0JCWlmICghdGVzdF9hbmRfc2V0X2JpdChXYW50UmVwbGFjZW1lbnQsICZhbXA7cmRldi0mZ3Q7ZmxhZ3MpKQotCQkJc2V0X2JpdChNRF9SRUNPVkVSWV9ORUVERUQsICZhbXA7Ci0JCQkJY29uZi0mZ3Q7bWRkZXYtJmd0O3JlY292ZXJ5KTsKLQotCQlpZiAodGVzdF9iaXQoRmFpbEZhc3QsICZhbXA7cmRldi0mZ3Q7ZmxhZ3MpICZhbXA7JmFtcDsKLQkJICAgIChiaW8tJmd0O2JpX29wZiAmYW1wOyBNRF9GQUlMRkFTVCkgJmFtcDsmYW1wOwotCQkgICAgLyogV2UgbmV2ZXIgdHJ5IEZhaWxGYXN0IHRvIFdyaXRlTW9zdGx5IGRldmljZXMgKi8KLQkJICAgICF0ZXN0X2JpdChXcml0ZU1vc3RseSwgJmFtcDtyZGV2LSZndDtmbGFncykpIHsKLQkJCW1kX2Vycm9yKHIxX2Jpby0mZ3Q7bWRkZXYsIHJkZXYpOwotCQl9CiYjNDM7CQlyYWlkMV93cml0ZV9lcnJvcihjb25mLSZndDttZGRldiwgcmRldiwgYmlvLAomIzQzOwkJCQkgICF0ZXN0X2JpdChXcml0ZU1vc3RseSwgJmFtcDtyZGV2LSZndDtmbGFncykpOwogCiAJCS8qCiAJCSAqIFdoZW4gdGhlIGRldmljZSBpcyBmYXVsdHksIGl0IGlzIG5vdCBuZWNlc3NhcnkgdG8KQEAgLTU2NCw3ICYjNDM7NTU1LDcgQEAgc3RhdGljIHZvaWQgcmFpZDFfZW5kX3dyaXRlX3JlcXVlc3Qoc3RydWN0IGJpbyAqYmlvKQogCQkJCWNhbGxfYmlvX2VuZGlvKHIxX2Jpbyk7CiAJCQl9CiAJCX0KLQl9IGVsc2UgaWYgKHRlc3RfYml0KE1EX1NFUklBTElaRV9QT0xJQ1ksICZhbXA7cmRldi0mZ3Q7bWRkZXYtJmd0O2ZsYWdzKSkKJiM0MzsJfSBlbHNlIGlmICh0ZXN0X2JpdChDb2xsaXNpb25DaGVjaywgJmFtcDtyZGV2LSZndDtmbGFncykpCiAJCXJlbW92ZV9zZXJpYWwocmRldiwgbG8sIGhpKTsKIAlpZiAocjFfYmlvLSZndDtiaW9zW21pcnJvcl0gPT0gTlVMTCkKIAkJcmRldl9kZWNfcGVuZGluZyhyZGV2LCBjb25mLSZndDttZGRldik7CkBAIC0xNTIzLDYgJiM0MzsxNTE0LDcgQEAgc3RhdGljIGJvb2wgcmFpZDFfd3JpdGVfcmVxdWVzdChzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgYmlvICpiaW8sCiAJYm9vbCB3cml0ZV9iZWhpbmQgPSBmYWxzZTsKIAlib29sIG5vd2FpdCA9IGJpby0mZ3Q7Ymlfb3BmICZhbXA7IFJFUV9OT1dBSVQ7CiAJYm9vbCBpc19kaXNjYXJkID0gb3BfaXNfZGlzY2FyZChiaW8tJmd0O2JpX29wZik7CiYjNDM7CWJvb2wgaXNfcDJwZG1hID0gbWRfYmlvX2lzX3AycGRtYShiaW8pOwogCXNlY3Rvcl90IHNlY3RvciA9IGJpby0mZ3Q7YmlfaXRlci5iaV9zZWN0b3I7CiAKIAlpZiAobWRkZXZfaXNfY2x1c3RlcmVkKG1kZGV2KSAmYW1wOyZhbXA7CkBAIC0xNTc1LDkgJiM0MzsxNTY3LDEyIEBAIHN0YXRpYyBib29sIHJhaWQxX3dyaXRlX3JlcXVlc3Qoc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IGJpbyAqYmlvLAogCQkvKgogCQkgKiBUaGUgd3JpdGUtYmVoaW5kIGlvIGlzIG9ubHkgYXR0ZW1wdGVkIG9uIGRyaXZlcyBtYXJrZWQgYXMKIAkJICogd3JpdGUtbW9zdGx5LCB3aGljaCBtZWFucyB3ZSBjb3VsZCBhbGxvY2F0ZSB3cml0ZSBiZWhpbmQKLQkJICogYmlvIGxhdGVyLgomIzQzOwkJICogYmlvIGxhdGVyLiBQMlBETUEgYmlvcyBhcmUgZXhjbHVkZWQ6IHdyaXRlLWJlaGluZCBjb3BpZXMKJiM0MzsJCSAqIHRoZSBkYXRhIHdpdGggYmlvX2NvcHlfZGF0YSgpLCBhIENQVSBjb3B5IHRoYXQgY2Fubm90IGJlCiYjNDM7CQkgKiBhc3N1bWVkIHNhZmUgb3IgZmFzdCBvbiBQMlBETUEgKGRldmljZSBCQVIpIHBhZ2VzLgogCQkgKi8KLQkJaWYgKCFpc19kaXNjYXJkICZhbXA7JmFtcDsgcmRldiAmYW1wOyZhbXA7IHRlc3RfYml0KFdyaXRlTW9zdGx5LCAmYW1wO3JkZXYtJmd0O2ZsYWdzKSkKJiM0MzsJCWlmICghaXNfZGlzY2FyZCAmYW1wOyZhbXA7ICFpc19wMnBkbWEgJmFtcDsmYW1wOyByZGV2ICZhbXA7JmFtcDsKJiM0MzsJCSAgICB0ZXN0X2JpdChXcml0ZU1vc3RseSwgJmFtcDtyZGV2LSZndDtmbGFncykpCiAJCQl3cml0ZV9iZWhpbmQgPSB0cnVlOwogCiAJCXIxX2Jpby0mZ3Q7Ymlvc1tpXSA9IE5VTEw7CkBAIC0xNjc3LDcgJiM0MzsxNjcyLDExIEBAIHN0YXRpYyBib29sIHJhaWQxX3dyaXRlX3JlcXVlc3Qoc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IGJpbyAqYmlvLAogCQkJbWJpbyA9IGJpb19hbGxvY19jbG9uZShyZGV2LSZndDtiZGV2LCBiaW8sIEdGUF9OT0lPLAogCQkJCQkgICAgICAgJmFtcDttZGRldi0mZ3Q7YmlvX3NldCk7CiAKLQkJCWlmICh0ZXN0X2JpdChNRF9TRVJJQUxJWkVfUE9MSUNZLCAmYW1wO21kZGV2LSZndDtmbGFncykpCiYjNDM7CQkJLyoKJiM0MzsJCQkgKiBDb2xsaXNpb25DaGVjayBtYXJrcyBldmVyeSByZGV2IHdpdGggYSBzZXJpYWwKJiM0MzsJCQkgKiB0cmVlOyBvcmRlciBhZ2FpbnN0IGluLWZsaWdodCB3cml0ZS1iZWhpbmQgSS9PLgomIzQzOwkJCSAqLwomIzQzOwkJCWlmICh0ZXN0X2JpdChDb2xsaXNpb25DaGVjaywgJmFtcDtyZGV2LSZndDtmbGFncykpCiAJCQkJd2FpdF9mb3Jfc2VyaWFsaXphdGlvbihyZGV2LCByMV9iaW8pOwogCQl9CiAKQEAgLTI1NjIsNiAmIzQzOzI1NjEsOSBAQCBzdGF0aWMgdm9pZCBuYXJyb3dfd3JpdGVfZXJyb3Ioc3RydWN0IHIxYmlvICpyMV9iaW8sIGludCBpKQogCQl9CiAKIAkJd2Jpby0mZ3Q7Ymlfb3BmID0gUkVRX09QX1dSSVRFOwomIzQzOwkJLyogS2VlcCBQMlBETUEgcmV0cnkgYmlvcyB1bm1lcmdlYWJsZSwgbGlrZSB0aGUgb3JpZ2luYWwgKi8KJiM0MzsJCWlmIChtZF9iaW9faXNfcDJwZG1hKHdiaW8pKQomIzQzOwkJCXdiaW8tJmd0O2JpX29wZiB8PSBSRVFfTk9NRVJHRTsKIAkJd2Jpby0mZ3Q7YmlfaXRlci5iaV9zZWN0b3IgPSByMV9iaW8tJmd0O3NlY3RvcjsKIAkJd2Jpby0mZ3Q7YmlfaXRlci5iaV9zaXplID0gcjFfYmlvLSZndDtzZWN0b3JzICZsdDsmbHQ7IDk7CiAKQEAgLTI2MjIsMTAgJiM0MzsyNjI0LDE2IEBAIHN0YXRpYyB2b2lkIGhhbmRsZV93cml0ZV9maW5pc2hlZChzdHJ1Y3QgcjFjb25mICpjb25mLCBzdHJ1Y3QgcjFiaW8gKnIxX2JpbykKIAkJCSAqIG5hcnJvdyBkb3duIGFuZCByZWNvcmQgcHJlY2lzZSB3cml0ZQogCQkJICogZXJyb3JzLgogCQkJICovCiYjNDM7CQkJc3RydWN0IG1kX3JkZXYgKnJkZXYgPSBjb25mLSZndDttaXJyb3JzW21dLnJkZXY7CiYjNDM7CiAJCQlmYWlsID0gdHJ1ZTsKLQkJCW5hcnJvd193cml0ZV9lcnJvcihyMV9iaW8sIG0pOwotCQkJcmRldl9kZWNfcGVuZGluZyhjb25mLSZndDttaXJyb3JzW21dLnJkZXYsCi0JCQkJCSBjb25mLSZndDttZGRldik7CiYjNDM7CQkJLyogTWFwcGluZyBmYWlsdXJlcyBhcmUgd2hvbGUtcmFuZ2UgYW5kIGRldGVybWluaXN0aWMgKi8KJiM0MzsJCQlpZiAocjFfYmlvLSZndDtiaW9zW21dLSZndDtiaV9zdGF0dXMgPT0gQkxLX1NUU19QMlBETUEpCiYjNDM7CQkJCXJkZXZfc2V0X2JhZGJsb2NrcyhyZGV2LCByMV9iaW8tJmd0O3NlY3RvciwKJiM0MzsJCQkJCQkgICByMV9iaW8tJmd0O3NlY3RvcnMsIDApOwomIzQzOwkJCWVsc2UKJiM0MzsJCQkJbmFycm93X3dyaXRlX2Vycm9yKHIxX2JpbywgbSk7CiYjNDM7CQkJcmRldl9kZWNfcGVuZGluZyhyZGV2LCBjb25mLSZndDttZGRldik7CiAJCX0KIAlpZiAoZmFpbCkgewogCQlzcGluX2xvY2tfaXJxKCZhbXA7Y29uZi0mZ3Q7ZGV2aWNlX2xvY2spOwpAQCAtMjY1MCw2ICYjNDM7MjY1OCw4IEBAIHN0YXRpYyB2b2lkIGhhbmRsZV9yZWFkX2Vycm9yKHN0cnVjdCByMWNvbmYgKmNvbmYsIHN0cnVjdCByMWJpbyAqcjFfYmlvKQogewogCXN0cnVjdCBtZF9yZGV2ICpyZGV2ID0gY29uZi0mZ3Q7bWlycm9yc1tyMV9iaW8tJmd0O3JlYWRfZGlza10ucmRldjsKIAlzdHJ1Y3QgYmlvICpiaW8gPSByMV9iaW8tJmd0O2Jpb3NbcjFfYmlvLSZndDtyZWFkX2Rpc2tdOwomIzQzOwkvKiBldmFsdWF0ZSBiZWZvcmUgdGhlIGJpb19wdXQoKSBiZWxvdyAqLwomIzQzOwlib29sIHAycGRtYV9lcnJvciA9IGJpby0mZ3Q7Ymlfc3RhdHVzID09IEJMS19TVFNfUDJQRE1BOwogCXN0cnVjdCBtZGRldiAqbWRkZXYgPSBjb25mLSZndDttZGRldjsKIAlzZWN0b3JfdCBzZWN0b3I7CiAKQEAgLTI2NjcsNyAmIzQzOzI2NzcsNyBAQCBzdGF0aWMgdm9pZCBoYW5kbGVfcmVhZF9lcnJvcihzdHJ1Y3QgcjFjb25mICpjb25mLCBzdHJ1Y3QgcjFiaW8gKnIxX2JpbykKIAkgKiByZWFkIGVycm9yLiAgVGhpcyBpcyBhbGwgZG9uZSBzeW5jaHJvbm91c2x5IHdoaWxlIHRoZSBhcnJheSBpcwogCSAqIGZyb3plbi4KIAkgKi8KLQlpZiAobWRkZXYtJmd0O3JvKSB7CiYjNDM7CWlmIChtZGRldi0mZ3Q7cm8gfHwgcDJwZG1hX2Vycm9yKSB7CiAJCXIxX2Jpby0mZ3Q7Ymlvc1tyMV9iaW8tJmd0O3JlYWRfZGlza10gPSBJT19CTE9DS0VEOwogCX0gZWxzZSBpZiAodGVzdF9iaXQoRmFpbEZhc3QsICZhbXA7cmRldi0mZ3Q7ZmxhZ3MpKSB7CiAJCW1kX2Vycm9yKG1kZGV2LCByZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvcmFpZDEwLmMgYi9kcml2ZXJzL21kL3JhaWQxMC5jCmluZGV4IDBhM2NmZGQzZjVkZjgwLi5lMzVhZWFjMjlmMDY0MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9yYWlkMTAuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL21kL3JhaWQxMC5jCkBAIC00ODIsMTYgJiM0Mzs0ODIsOCBAQCBzdGF0aWMgdm9pZCByYWlkMTBfZW5kX3dyaXRlX3JlcXVlc3Qoc3RydWN0IGJpbyAqYmlvKQogCQkJICovCiAJCQltZF9lcnJvcihyZGV2LSZndDttZGRldiwgcmRldik7CiAJCWVsc2UgewotCQkJc2V0X2JpdChXcml0ZUVycm9yU2VlbiwJJmFtcDtyZGV2LSZndDtmbGFncyk7Ci0JCQlpZiAoIXRlc3RfYW5kX3NldF9iaXQoV2FudFJlcGxhY2VtZW50LCAmYW1wO3JkZXYtJmd0O2ZsYWdzKSkKLQkJCQlzZXRfYml0KE1EX1JFQ09WRVJZX05FRURFRCwKLQkJCQkJJmFtcDtyZGV2LSZndDttZGRldi0mZ3Q7cmVjb3ZlcnkpOwotCiAJCQlkZWNfcmRldiA9IDA7Ci0JCQlpZiAodGVzdF9iaXQoRmFpbEZhc3QsICZhbXA7cmRldi0mZ3Q7ZmxhZ3MpICZhbXA7JmFtcDsKLQkJCSAgICAoYmlvLSZndDtiaV9vcGYgJmFtcDsgTURfRkFJTEZBU1QpKSB7Ci0JCQkJbWRfZXJyb3IocmRldi0mZ3Q7bWRkZXYsIHJkZXYpOwotCQkJfQomIzQzOwkJCXJhaWQxX3dyaXRlX2Vycm9yKHJkZXYtJmd0O21kZGV2LCByZGV2LCBiaW8sIHRydWUpOwogCiAJCQkvKgogCQkJICogV2hlbiB0aGUgZGV2aWNlIGlzIGZhdWx0eSwgaXQgaXMgbm90IG5lY2Vzc2FyeSB0bwpAQCAtMjgzMSw2ICYjNDM7MjgyMyw5IEBAIHN0YXRpYyB2b2lkIG5hcnJvd193cml0ZV9lcnJvcihzdHJ1Y3QgcjEwYmlvICpyMTBfYmlvLCBpbnQgaSkKIAkJd2Jpby0mZ3Q7YmlfaXRlci5iaV9zZWN0b3IgPSB3c2VjdG9yICYjNDM7CiAJCQkJICAgY2hvb3NlX2RhdGFfb2Zmc2V0KHIxMF9iaW8sIHJkZXYpOwogCQl3YmlvLSZndDtiaV9vcGYgPSBSRVFfT1BfV1JJVEU7CiYjNDM7CQkvKiBLZWVwIFAyUERNQSByZXRyeSBiaW9zIHVubWVyZ2VhYmxlLCBsaWtlIHRoZSBvcmlnaW5hbCAqLwomIzQzOwkJaWYgKG1kX2Jpb19pc19wMnBkbWEod2JpbykpCiYjNDM7CQkJd2Jpby0mZ3Q7Ymlfb3BmIHw9IFJFUV9OT01FUkdFOwogCiAJCWlmIChzdWJtaXRfYmlvX3dhaXQod2JpbykgJmFtcDsmYW1wOwogCQkgICAgIXJkZXZfc2V0X2JhZGJsb2NrcyhyZGV2LCB3c2VjdG9yLCBzZWN0b3JzLCAwKSkgewpAQCAtMjg1Myw2ICYjNDM7Mjg0OCw3IEBAIHN0YXRpYyB2b2lkIGhhbmRsZV9yZWFkX2Vycm9yKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCByMTBiaW8gKnIxMF9iaW8pCiB7CiAJaW50IHNsb3QgPSByMTBfYmlvLSZndDtyZWFkX3Nsb3Q7CiAJc3RydWN0IGJpbyAqYmlvOwomIzQzOwlib29sIHAycGRtYV9lcnJvcjsKIAlzdHJ1Y3QgcjEwY29uZiAqY29uZiA9IG1kZGV2LSZndDtwcml2YXRlOwogCXN0cnVjdCBtZF9yZGV2ICpyZGV2ID0gcjEwX2Jpby0mZ3Q7ZGV2c1tzbG90XS5yZGV2OwogCkBAIC0yODY1LDEwICYjNDM7Mjg2MSwxMiBAQCBzdGF0aWMgdm9pZCBoYW5kbGVfcmVhZF9lcnJvcihzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgcjEwYmlvICpyMTBfYmlvKQogCSAqIGZyb3plbi4KIAkgKi8KIAliaW8gPSByMTBfYmlvLSZndDtkZXZzW3Nsb3RdLmJpbzsKJiM0MzsJLyogZXZhbHVhdGUgYmVmb3JlIHRoZSBiaW9fcHV0KCkgYmVsb3cgKi8KJiM0MzsJcDJwZG1hX2Vycm9yID0gYmlvLSZndDtiaV9zdGF0dXMgPT0gQkxLX1NUU19QMlBETUE7CiAJYmlvX3B1dChiaW8pOwogCXIxMF9iaW8tJmd0O2RldnNbc2xvdF0uYmlvID0gTlVMTDsKIAotCWlmIChtZGRldi0mZ3Q7cm8pCiYjNDM7CWlmIChtZGRldi0mZ3Q7cm8gfHwgcDJwZG1hX2Vycm9yKQogCQlyMTBfYmlvLSZndDtkZXZzW3Nsb3RdLmJpbyA9IElPX0JMT0NLRUQ7CiAJZWxzZSBpZiAoIXRlc3RfYml0KEZhaWxGYXN0LCAmYW1wO3JkZXYtJmd0O2ZsYWdzKSkgewogCQlmcmVlemVfYXJyYXkoY29uZiwgMSk7CkBAIC0yOTQ1LDcgJiM0MzsyOTQzLDEzIEBAIHN0YXRpYyB2b2lkIGhhbmRsZV93cml0ZV9jb21wbGV0ZWQoc3RydWN0IHIxMGNvbmYgKmNvbmYsIHN0cnVjdCByMTBiaW8gKnIxMF9iaW8pCiAJCQkJcmRldl9kZWNfcGVuZGluZyhyZGV2LCBjb25mLSZndDttZGRldik7CiAJCQl9IGVsc2UgaWYgKGJpbyAhPSBOVUxMICZhbXA7JmFtcDsgYmlvLSZndDtiaV9zdGF0dXMpIHsKIAkJCQlmYWlsID0gdHJ1ZTsKLQkJCQluYXJyb3dfd3JpdGVfZXJyb3IocjEwX2JpbywgbSk7CiYjNDM7CQkJCS8qIE1hcHBpbmcgZmFpbHVyZXMgYXJlIHdob2xlLXJhbmdlIGFuZCBkZXRlcm1pbmlzdGljICovCiYjNDM7CQkJCWlmIChiaW8tJmd0O2JpX3N0YXR1cyA9PSBCTEtfU1RTX1AyUERNQSkKJiM0MzsJCQkJCXJkZXZfc2V0X2JhZGJsb2NrcyhyZGV2LAomIzQzOwkJCQkJCQkgICByMTBfYmlvLSZndDtkZXZzW21dLmFkZHIsCiYjNDM7CQkJCQkJCSAgIHIxMF9iaW8tJmd0O3NlY3RvcnMsIDApOwomIzQzOwkJCQllbHNlCiYjNDM7CQkJCQluYXJyb3dfd3JpdGVfZXJyb3IocjEwX2JpbywgbSk7CiAJCQkJcmRldl9kZWNfcGVuZGluZyhyZGV2LCBjb25mLSZndDttZGRldik7CiAJCQl9CiAJCQliaW8gPSByMTBfYmlvLSZndDtkZXZzW21dLnJlcGxfYmlvOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9udm1lL2hvc3QvcmRtYS5jIGIvZHJpdmVycy9udm1lL2hvc3QvcmRtYS5jCmluZGV4IDY5MDllMzU0Mjc5NDI3Li4yZjUwNTA5YTdhNjE2MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9udm1lL2hvc3QvcmRtYS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbnZtZS9ob3N0L3JkbWEuYwpAQCAtMTQ2OSw2ICYjNDM7MTQ2OSw3IEBAIHN0YXRpYyBpbnQgbnZtZV9yZG1hX2RtYV9tYXBfcmVxKHN0cnVjdCBpYl9kZXZpY2UgKmliZGV2LCBzdHJ1Y3QgcmVxdWVzdCAqcnEsCiAJCWludCAqY291bnQsIGludCAqcGlfY291bnQpCiB7CiAJc3RydWN0IG52bWVfcmRtYV9yZXF1ZXN0ICpyZXEgPSBibGtfbXFfcnFfdG9fcGR1KHJxKTsKJiM0MzsJc3RydWN0IHNnX3RhYmxlIHNndDsKIAlpbnQgcmV0OwogCiAJcmVxLSZndDtkYXRhX3NnbC5zZ190YWJsZS5zZ2wgPSAoc3RydWN0IHNjYXR0ZXJsaXN0ICopKHJlcSAmIzQzOyAxKTsKQEAgLTE0ODAsMTIgJiM0MzsxNDgxLDE0IEBAIHN0YXRpYyBpbnQgbnZtZV9yZG1hX2RtYV9tYXBfcmVxKHN0cnVjdCBpYl9kZXZpY2UgKmliZGV2LCBzdHJ1Y3QgcmVxdWVzdCAqcnEsCiAKIAlyZXEtJmd0O2RhdGFfc2dsLm5lbnRzID0gYmxrX3JxX21hcF9zZyhycSwgcmVxLSZndDtkYXRhX3NnbC5zZ190YWJsZS5zZ2wpOwogCi0JKmNvdW50ID0gaWJfZG1hX21hcF9zZyhpYmRldiwgcmVxLSZndDtkYXRhX3NnbC5zZ190YWJsZS5zZ2wsCi0JCQkgICAgICAgcmVxLSZndDtkYXRhX3NnbC5uZW50cywgcnFfZG1hX2RpcihycSkpOwotCWlmICh1bmxpa2VseSgqY291bnQgJmx0Oz0gMCkpIHsKLQkJcmV0ID0gLUVJTzsKJiM0MzsJc2d0ID0gKHN0cnVjdCBzZ190YWJsZSkgewomIzQzOwkJLnNnbAkJPSByZXEtJmd0O2RhdGFfc2dsLnNnX3RhYmxlLnNnbCwKJiM0MzsJCS5vcmlnX25lbnRzCT0gcmVxLSZndDtkYXRhX3NnbC5uZW50cywKJiM0MzsJfTsKJiM0MzsJcmV0ID0gaWJfZG1hX21hcF9zZ3RhYmxlX2F0dHJzKGliZGV2LCAmYW1wO3NndCwgcnFfZG1hX2RpcihycSksIDApOwomIzQzOwlpZiAodW5saWtlbHkocmV0KSkKIAkJZ290byBvdXRfZnJlZV90YWJsZTsKLQl9CiYjNDM7CSpjb3VudCA9IHNndC5uZW50czsKIAogCWlmIChibGtfaW50ZWdyaXR5X3JxKHJxKSkgewogCQlyZXEtJmd0O21ldGFkYXRhX3NnbC0mZ3Q7c2dfdGFibGUuc2dsID0KQEAgLTE1MDEsMTQgJiM0MzsxNTA0LDE0IEBAIHN0YXRpYyBpbnQgbnZtZV9yZG1hX2RtYV9tYXBfcmVxKHN0cnVjdCBpYl9kZXZpY2UgKmliZGV2LCBzdHJ1Y3QgcmVxdWVzdCAqcnEsCiAKIAkJcmVxLSZndDttZXRhZGF0YV9zZ2wtJmd0O25lbnRzID0gYmxrX3JxX21hcF9pbnRlZ3JpdHlfc2cocnEsCiAJCQkJcmVxLSZndDttZXRhZGF0YV9zZ2wtJmd0O3NnX3RhYmxlLnNnbCk7Ci0JCSpwaV9jb3VudCA9IGliX2RtYV9tYXBfc2coaWJkZXYsCi0JCQkJCSAgcmVxLSZndDttZXRhZGF0YV9zZ2wtJmd0O3NnX3RhYmxlLnNnbCwKLQkJCQkJICByZXEtJmd0O21ldGFkYXRhX3NnbC0mZ3Q7bmVudHMsCi0JCQkJCSAgcnFfZG1hX2RpcihycSkpOwotCQlpZiAodW5saWtlbHkoKnBpX2NvdW50ICZsdDs9IDApKSB7Ci0JCQlyZXQgPSAtRUlPOwomIzQzOwkJc2d0ID0gKHN0cnVjdCBzZ190YWJsZSkgewomIzQzOwkJCS5zZ2wJCT0gcmVxLSZndDttZXRhZGF0YV9zZ2wtJmd0O3NnX3RhYmxlLnNnbCwKJiM0MzsJCQkub3JpZ19uZW50cwk9IHJlcS0mZ3Q7bWV0YWRhdGFfc2dsLSZndDtuZW50cywKJiM0MzsJCX07CiYjNDM7CQlyZXQgPSBpYl9kbWFfbWFwX3NndGFibGVfYXR0cnMoaWJkZXYsICZhbXA7c2d0LCBycV9kbWFfZGlyKHJxKSwgMCk7CiYjNDM7CQlpZiAodW5saWtlbHkocmV0KSkKIAkJCWdvdG8gb3V0X2ZyZWVfcGlfdGFibGU7Ci0JCX0KJiM0MzsJCSpwaV9jb3VudCA9IHNndC5uZW50czsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTIwMjYsOCAmIzQzOzIwMjksNiBAQCBzdGF0aWMgYmxrX3N0YXR1c190IG52bWVfcmRtYV9xdWV1ZV9ycShzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eCwKIAlpZiAocmV0KQogCQlnb3RvIHVubWFwX3FlOwogCi0JbnZtZV9zdGFydF9yZXF1ZXN0KHJxKTsKLQogCWlmIChJU19FTkFCTEVEKENPTkZJR19CTEtfREVWX0lOVEVHUklUWSkgJmFtcDsmYW1wOwogCSAgICBxdWV1ZS0mZ3Q7cGlfc3VwcG9ydCAmYW1wOyZhbXA7CiAJICAgIChjLSZndDtjb21tb24ub3Bjb2RlID09IG52bWVfY21kX3dyaXRlIHx8CkBAIC0yMDM5LDExICYjNDM7MjA0MCwxMyBAQCBzdGF0aWMgYmxrX3N0YXR1c190IG52bWVfcmRtYV9xdWV1ZV9ycShzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eCwKIAogCWVyciA9IG52bWVfcmRtYV9tYXBfZGF0YShxdWV1ZSwgcnEsIGMpOwogCWlmICh1bmxpa2VseShlcnIgJmx0OyAwKSkgewotCQlkZXZfZXJyKHF1ZXVlLSZndDtjdHJsLSZndDtjdHJsLmRldmljZSwKLQkJCSAgICAgJiMzNDtGYWlsZWQgdG8gbWFwIGRhdGEgKCVkKVxuJiMzNDssIGVycik7CiYjNDM7CQlkZXZfZXJyX3JhdGVsaW1pdGVkKHF1ZXVlLSZndDtjdHJsLSZndDtjdHJsLmRldmljZSwKJiM0MzsJCQkJICAgICYjMzQ7RmFpbGVkIHRvIG1hcCBkYXRhICglZClcbiYjMzQ7LCBlcnIpOwogCQlnb3RvIGVycjsKIAl9CiAKJiM0MzsJbnZtZV9zdGFydF9yZXF1ZXN0KHJxKTsKJiM0MzsKIAlzcWUtJmd0O2NxZS5kb25lID0gbnZtZV9yZG1hX3NlbmRfZG9uZTsKIAogCWliX2RtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKGRldiwgc3FlLSZndDtkbWEsCkBAIC0yMDYzLDYgJiM0MzsyMDY2LDkgQEAgc3RhdGljIGJsa19zdGF0dXNfdCBudm1lX3JkbWFfcXVldWVfcnEoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsCiAJCXJldCA9IG52bWVfaG9zdF9wYXRoX2Vycm9yKHJxKTsKIAllbHNlIGlmIChlcnIgPT0gLUVOT01FTSB8fCBlcnIgPT0gLUVBR0FJTikKIAkJcmV0ID0gQkxLX1NUU19SRVNPVVJDRTsKJiM0MzsJLyogUGVlciBtZW1vcnkgdW5yZWFjaGFibGUgZnJvbSB0aGlzIGRldmljZTogZG9uJiMzOTt0IHJldHJ5LiAqLwomIzQzOwllbHNlIGlmIChlcnIgPT0gLUVSRU1PVEVJTykKJiM0MzsJCXJldCA9IEJMS19TVFNfUDJQRE1BOwogCWVsc2UKIAkJcmV0ID0gQkxLX1NUU19JT0VSUjsKIAludm1lX2NsZWFudXBfY21kKHJxKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmxrX3R5cGVzLmggYi9pbmNsdWRlL2xpbnV4L2Jsa190eXBlcy5oCmluZGV4IDg4MDhlZTc2ZTczYzA5Li5jOGRlNzgwOTMyMGFkNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ibGtfdHlwZXMuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2Jsa190eXBlcy5oCkBAIC0xNjUsNiAmIzQzOzE2NSwxNSBAQCB0eXBlZGVmIHUxNiBibGtfc2hvcnRfdDsKICAqLwogI2RlZmluZSBCTEtfU1RTX0RVUkFUSU9OX0xJTUlUCSgoX19mb3JjZSBibGtfc3RhdHVzX3QpMTcpCiAKJiM0MzsvKgomIzQzOyAqIEJMS19TVFNfUDJQRE1BIGlzIHJldHVybmVkIHdoZW4gYSBwZWVyLXRvLXBlZXIgRE1BIHRyYW5zZmVyIGNhbm5vdCBiZQomIzQzOyAqIG1hcHBlZCAodHlwaWNhbGx5IGJlY2F1c2UgdGhlcmUgaXMgbm8gcm91dGUgYmV0d2VlbiB0aGUgaW5pdGlhdG9yIGFuZCB0aGUKJiM0MzsgKiB0YXJnZXQgdGhhdCB0aGUgcGxhdGZvcm0mIzM5O3MgUENJZSB0b3BvbG9neSBhbmQgQUNTIHNldHRpbmdzIGFsbG93KS4gVGhpcwomIzQzOyAqIGlzIGEgcHJvcGVydHkgb2YgdGhlIGluaXRpYXRvci90YXJnZXQgcGFpciwgbm90IG9mIHRoZSB0YXJnZXQgZGV2aWNlJiMzOTtzCiYjNDM7ICogaGVhbHRoLiBUaGlzIGVycm9yIHNob3VsZCBuZXZlciBiZSByZXRyaWVkLgomIzQzOyAqLwomIzQzOyNkZWZpbmUgQkxLX1NUU19QMlBETUEJKChfX2ZvcmNlIGJsa19zdGF0dXNfdCkxOCkKJiM0MzsKIC8qCiAgKiBJbnZhbGlkIHNpemUgb3IgYWxpZ25tZW50LgogICovCkBAIC0xODgsNiAmIzQzOzE5Nyw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBibGtfcGF0aF9lcnJvcihibGtfc3RhdHVzX3QgZXJyb3IpCiAJY2FzZSBCTEtfU1RTX05PVFNVUFA6CiAJY2FzZSBCTEtfU1RTX05PU1BDOgogCWNhc2UgQkxLX1NUU19UQVJHRVQ6CiYjNDM7CWNhc2UgQkxLX1NUU19QMlBETUE6CiAJY2FzZSBCTEtfU1RTX1JFU1ZfQ09ORkxJQ1Q6CiAJY2FzZSBCTEtfU1RTX01FRElVTToKIAljYXNlIEJMS19TVFNfUFJPVEVDVElPTjoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMjE6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzkzNQoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDQ5OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFAyUERNQSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBpbnRyb2R1Y2luZyBgQkxLX1NUU19QMlBETUFgLiBJdCBzZWVtcyBmb2N1c2VkIG9uIGhhbmRsaW5nIFBlZXItdG8tUGVlciBETUEgZXJyb3JzLCBzcGVjaWZpY2FsbHkgd2hlbiBhIFAyUERNQSB0cmFuc2ZlciBjYW4mIzM5O3QgYmUgbWFwcGVkLiBUaGUgY2hhbmdlcyB0b3VjaCBhIHByZXR0eSB3aWRlIHJhbmdlIG9mIGNvZGU6IGBibGstY29yZS5jYCwgYGJsay1tcS1kbWEuY2AsIHZhcmlvdXMgUkFJRCBjb21wb25lbnRzIChgbWQuY2AsIGByYWlkMS0xMC5jYCwgZXRjLiksIGBudm1lL2hvc3QvcmRtYS5jYCwgYW5kIGBibGtfdHlwZXMuaGAuIFRoYXQmIzM5O3MgYSBkZWNlbnQgc3ByZWFkLiBUaGUgY29yZSBvZiBpdCBzZWVtcyB0byBiZSByZXR1cm5pbmcgdGhpcyBuZXcgYEJMS19TVFNfUDJQRE1BYCBzdGF0dXMuIFRoZSBwYXRjaCBhbHNvIG1vZGlmaWVzIGhvdyBNRCAoc29mdHdhcmUgUkFJRCkgaGFuZGxlcyBQMlBETUEgYmlvcywgZW5zdXJpbmcgY29ycmVjdCBlcnJvciBoYW5kbGluZyB3aXRob3V0IGNhc2NhZGluZyBmYWlsdXJlcyBhbmQgaG93IE5WTWUgUkRNQSBoYW5kbGVzIG1hcHBpbmcgZmFpbHVyZXMgd2l0aCBgLUVSRU1PVEVJT2AuCgpNeSBwcmltYXJ5IGNvbmNlcm4sIG9mIGNvdXJzZSwgaXMgYWJvdXQgcmVhY2hhYmlsaXR5LiBJcyB0aGlzIGNvZGUgcGF0aCBldmVuICpyZWFjaGFibGUqIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBHQ0Ugb3IgUUVNVT8gUDJQRE1BLCBieSBpdHMgdmVyeSBuYXR1cmUsIHJlbGllcyBvbiBQQ0kgZGV2aWNlcyB3aXRoIFAyUERNQSBzdXBwb3J0LiBUaGUgcmVhbCBxdWVzdGlvbiBpczogY2FuIHdlIGVtdWxhdGUgdGhhdCBpbiBRRU1VPyBXZSYjMzk7ZCBuZWVkIHRvIGJlIGFibGUgdG8gdHJpZ2dlciB0aGUgUDJQRE1BIGxvZ2ljLCB3aGljaCBsZWFkcyBtZSB0byBteSBuZXh0IHF1ZXN0aW9uLCBpcyB0aGVyZSBhbnkgc29mdHdhcmUgZW11bGF0ZWQgUDJQRE1BIGRldmljZSB0aGF0IHdlIGNvdWxkIHBvc3NpYmx5IHVzZSwgb3IgYW5vdGhlciB3YXkgdGhhdCB0aGlzIHBhdGggY2FuIGJlIHRyaWdnZXJlZD8KClNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBNRCBhbmQgTlZNZSBjaGFuZ2VzIGNvbWUgaW50byBwbGF5LiBJbiBNRCwgdGhlIGZ1bmN0aW9uIGBtZF9iaW9faXNfcDJwZG1hKGJpbylgIGlzIGNydWNpYWwuIEl0IGNhbGxzIGBpc19wY2lfcDJwZG1hX3BhZ2UoYmlvLSZndDtiaV9pb192ZWMtJmd0O2J2X3BhZ2UpYC4gQ2FuIHdlIGNyZWF0ZSBhIFAyUERNQSBwYWdlICp3aXRoaW4qIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQ/IFAyUERNQSBwYWdlcyBhcmUgdHlwaWNhbGx5IGNyZWF0ZWQgYnkgUENJIGRyaXZlcnMgdXNpbmcgYHBjaV9wMnBkbWFfYWRkX3Jlc291cmNlKClgLiBNeSBndWVzcyBpcyB0aGF0LCB3aXRob3V0IHJlYWwgaGFyZHdhcmUsIHRoaXMgaXMgZ29pbmcgdG8gYmUgdGhlIHRvdWdoIHBhcnQuCgpTbywgSSYjMzk7bSB0aGlua2luZywgaXMgdGhlcmUgKmFueSogd2F5IHRvIHRyaWdnZXIgdGhpcyB3aXRob3V0IHBoeXNpY2FsIGhhcmR3YXJlPyBNYXliZSBhIHNpbXVsYXRlZCBlbnZpcm9ubWVudCwgcGVyaGFwcyBzb21ldGhpbmcgaW4gYGRyaXZlcnMvbnZtZS90YXJnZXQvcDJwbWVtLmNgLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseS4gSSYjMzk7bSBnb2luZyB0byBzZWFyY2ggdGhlIGNvZGViYXNlIGZvciB1c2VzIG9mIGBwY2lfcDJwZG1hX2FkZF9yZXNvdXJjZWAgYW5kIGBpc19wY2lfcDJwZG1hX3BhZ2VgLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgY29uZGl0aW9ucyBuZWVkZWQgdG8gcmVhY2ggdGhpcyBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDIxOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BjaV9wMnBkbWFfYWRkX3Jlc291cmNlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9wY2kvcDJwZG1hLnJzdD05NT1BIHByb3ZpZGVyIHNpbXBseSBuZWVkcyB0byByZWdpc3RlciBhIEJBUiAob3IgYSBwb3J0aW9uIG9mIGEgQkFSKVxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL3BjaS9wMnBkbWEucnN0Ojk2OmFzIGEgUDJQIERNQSByZXNvdXJjZSB1c2luZyA6YzpmdW5jOmBwY2lfcDJwZG1hX2FkZF9yZXNvdXJjZSgpYC5cbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9wY2kvcDJwZG1hLnJzdC05Ny1UaGlzIHdpbGwgcmVnaXN0ZXIgc3RydWN0IHBhZ2VzIGZvciBhbGwgdGhlIHNwZWNpZmllZCBtZW1vcnkuXG4tLVxuZHJpdmVycy9hY2NlbC9oYWJhbmFsYWJzL2NvbW1vbi9obGRpby5jPTM2OT1pbnQgaGxfcDJwX3JlZ2lvbl9pbml0KHN0cnVjdCBobF9kZXZpY2UgKmhkZXYsIHN0cnVjdCBobF9wMnBfcmVnaW9uICpwMnByKVxuLS1cbmRyaXZlcnMvYWNjZWwvaGFiYW5hbGFicy9jb21tb24vaGxkaW8uYy0zNzQtXHQvKiBTdGFydCBieSBwdWJsaXNoaW5nIG91ciBwMnAgbWVtb3J5ICovXG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvY29tbW9uL2hsZGlvLmM6Mzc1Olx0cmMgPSBwY2lfcDJwZG1hX2FkZF9yZXNvdXJjZShoZGV2LVx1MDAzZXBkZXYsIHAycHItXHUwMDNlYmFyLCBwMnByLVx1MDAzZXNpemUsIHAycHItXHUwMDNlYmFyX29mZnNldCk7XG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvY29tbW9uL2hsZGlvLmMtMzc2LVx0aWYgKHJjKSB7XG4tLVxuZHJpdmVycy9udm1lL2hvc3QvcGNpLmM9MjQ1OT1zdGF0aWMgdm9pZCBudm1lX21hcF9jbWIoc3RydWN0IG52bWVfZGV2ICpkZXYpXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvcGNpLmMtMjUwNi1cbmRyaXZlcnMvbnZtZS9ob3N0L3BjaS5jOjI1MDc6XHRpZiAocGNpX3AycGRtYV9hZGRfcmVzb3VyY2UocGRldiwgYmFyLCBzaXplLCBvZmZzZXQpKSB7XG5kcml2ZXJzL252bWUvaG9zdC9wY2kuYy0yNTA4LVx0XHRkZXZfd2FybihkZXYtXHUwMDNlY3RybC5kZXZpY2UsXG4tLVxuZHJpdmVycy9wY2kvcDJwZG1hLmM9MzYzPXN0YXRpYyB2b2lkIHBjaV9wMnBkbWFfdW5tYXBfbWFwcGluZ3Modm9pZCAqZGF0YSlcbi0tXG5kcml2ZXJzL3BjaS9wMnBkbWEuYy0zNzctLyoqXG5kcml2ZXJzL3BjaS9wMnBkbWEuYzozNzg6ICogcGNpX3AycGRtYV9hZGRfcmVzb3VyY2UgLSBhZGQgbWVtb3J5IGZvciB1c2UgYXMgcDJwIG1lbW9yeVxuZHJpdmVycy9wY2kvcDJwZG1hLmMtMzc5LSAqIEBwZGV2OiB0aGUgZGV2aWNlIHRvIGFkZCB0aGUgbWVtb3J5IHRvXG4tLVxuZHJpdmVycy9wY2kvcDJwZG1hLmMtMzg2LSAqL1xuZHJpdmVycy9wY2kvcDJwZG1hLmM6Mzg3OmludCBwY2lfcDJwZG1hX2FkZF9yZXNvdXJjZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IGJhciwgc2l6ZV90IHNpemUsXG5kcml2ZXJzL3BjaS9wMnBkbWEuYy0zODgtXHRcdFx0ICAgIHU2NCBvZmZzZXQpXG4tLVxuZHJpdmVycy9wY2kvcDJwZG1hLmMtNDY2LX1cbmRyaXZlcnMvcGNpL3AycGRtYS5jOjQ2NzpFWFBPUlRfU1lNQk9MX0dQTChwY2lfcDJwZG1hX2FkZF9yZXNvdXJjZSk7XG5kcml2ZXJzL3BjaS9wMnBkbWEuYy00NjgtXG4tLVxuaW5jbHVkZS9saW51eC9wY2ktcDJwZG1hLmg9NzI9c3RydWN0IHAycGRtYV9wcm92aWRlciAqcGNpbV9wMnBkbWFfcHJvdmlkZXIoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBiYXIpO1xuaW5jbHVkZS9saW51eC9wY2ktcDJwZG1hLmg6NzM6aW50IHBjaV9wMnBkbWFfYWRkX3Jlc291cmNlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgYmFyLCBzaXplX3Qgc2l6ZSxcbmluY2x1ZGUvbGludXgvcGNpLXAycGRtYS5oLTc0LVx0XHR1NjQgb2Zmc2V0KTtcbi0tXG5pbmNsdWRlL2xpbnV4L3BjaS1wMnBkbWEuaD05Nj1zdGF0aWMgaW5saW5lIHN0cnVjdCBwMnBkbWFfcHJvdmlkZXIgKnBjaW1fcDJwZG1hX3Byb3ZpZGVyKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuLS1cbmluY2x1ZGUvbGludXgvcGNpLXAycGRtYS5oLTEwMC19XG5pbmNsdWRlL2xpbnV4L3BjaS1wMnBkbWEuaDoxMDE6c3RhdGljIGlubGluZSBpbnQgcGNpX3AycGRtYV9hZGRfcmVzb3VyY2Uoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBiYXIsXG5pbmNsdWRlL2xpbnV4L3BjaS1wMnBkbWEuaC0xMDItXHRcdHNpemVfdCBzaXplLCB1NjQgb2Zmc2V0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDIxOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk5OTYKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAzMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhwbG9yaW5nIFAyUERNQSBhbmQgaXRzIEludGVyYWN0aW9uIHdpdGggTUQgUkFJRCoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBob3cgUDJQRE1BIHdvcmtzLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBOVk1lIGNvbnRleHQgYW5kIHdvbmRlcmluZyBhYm91dCBpdHMgaW50ZWdyYXRpb24gd2l0aCBNRCBSQUlELiBJIHNlZSB0aGF0IGBwY2lfcDJwZG1hX2FkZF9yZXNvdXJjZWAgaW4gYGRyaXZlcnMvbnZtZS9ob3N0L3BjaS5jYCBpcyBrZXksIHBhcnRpY3VsYXJseSBmb3IgQ29udHJvbGxlciBNZW1vcnkgQnVmZmVyIChDTUIpLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIGNhbiB0aGlzIGJlIGVtdWxhdGVkIHdpdGhpbiBhIFFFTVUgZW52aXJvbm1lbnQ/IEx1Y2tpbHksIFFFTVUmIzM5O3MgTlZNZSBkZXZpY2UgKmRvZXMqIHN1cHBvcnQgQ01CLCBzbyB0aGF0JiMzOTtzIHByb21pc2luZyDigJMgd2UgY2FuIHNpbXVsYXRlIFAyUERNQSBwYWdlcyBpbiBhIHZpcnR1YWxpemVkIHNldHVwLgoKTm93LCB0aGUgaW50ZXJlc3RpbmcgcXVlc3Rpb24gaXM6IGNhbiB3ZSBhY3R1YWxseSB0cmlnZ2VyIHRoZSBNRCBSQUlEIGNvZGUgdXNpbmcgdGhlc2UgUDJQRE1BIHBhZ2VzPyBJZiB3ZSBoYXZlIGFuIE5WTWUgZGV2aWNlIGNvbmZpZ3VyZWQgd2l0aCBDTUIsIHdlIHNob3VsZCBiZSBhYmxlIHRvIHRyZWF0IGl0IGFzIGEgUDJQRE1BIHByb3ZpZGVyLiBUaGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMsIGNhbiB3ZSB0aGVuIHVzZSB0aGlzIFAyUERNQSBzZXR1cCB0byB0cmFuc2ZlciBkYXRhIHRvICphbm90aGVyKiBOVk1lIGRldmljZSBvciBldmVuIGFuIE1EIGRldmljZT8KCkkgZm91bmQgdGhhdCB0aGUgcGF0Y2ggbW9kaWZpZXMgTUQgdG8gaGFuZGxlIHRoZXNlIFAyUERNQSBiaW9zLiBXYWl0LCBgbWRfYmlvX2lzX3AycGRtYWAhIEl0IGNoZWNrcyBpZiB0aGUgYmlvIGhhcyBhIFAyUERNQSBwYWdlLiBTbywgaWYgd2UgY3JlYXRlIGFuIE1EIGFycmF5IHV0aWxpemluZyBOVk1lIGRldmljZXMsIGFuZCB3ZSBpc3N1ZSBhIFAyUERNQSBJL08gKnRvKiB0aGF0IE1EIGFycmF5LCBpdCBzaG91bGQgcGFzcyB0aGUgYmlvIGRvd24gdG8gdGhlIHVuZGVybHlpbmcgZGV2aWNlcywgcmlnaHQ/CgpCdXQsIGNhbiB0aGlzIGV2ZW4gYmUgdHJpZ2dlcmVkIGZyb20gdXNlcnNwYWNlPyBVc3VhbGx5LCBQMlBETUEgaXMgdGhlIGRvbWFpbiBvZiBrZXJuZWwgZHJpdmVycy4gVGhpbmsgTlZNZS1vRiB0YXJnZXQgb3IgUkRNQS4gT2gsIHdhaXQsIGBPX0RJUkVDVGAgY291cGxlZCB3aXRoIFAyUERNQSBwYWdlcz8gTm8sIHRoYXQgd29uJiMzOTt0IHdvcmsuIFVzZXJzcGFjZSBjYW4mIzM5O3QgZGlyZWN0bHkgYWxsb2NhdGUgUDJQRE1BIHBhZ2VzLiBUaGF0IGNsb3NlcyB0aGF0IGRvb3IuCgpBbHJpZ2h0LCBzbyBob3cgKmFyZSogUDJQRE1BIHBhZ2VzIGNyZWF0ZWQgYW5kIHVzZWQ/IEkgbmVlZCB0byBkaWcgZGVlcGVyLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSB1c2FnZSBvZiBgaXNfcGNpX3AycGRtYV9wYWdlYCBvciBzcGVjaWZpY2FsbHkgaG93IFAyUERNQSBiaW9zIGFyZSBjcmVhdGVkLiBUaGF0JiMzOTtzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDIxOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lzX3BjaV9wMnBkbWFfcGFnZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9iaW8taW50ZWdyaXR5LmM9MzMzPXN0YXRpYyB1bnNpZ25lZCBpbnQgYnZlY19mcm9tX3BhZ2VzKHN0cnVjdCBiaW9fdmVjICpidmVjLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLFxuLS1cbmJsb2NrL2Jpby1pbnRlZ3JpdHkuYy0zNTUtXG5ibG9jay9iaW8taW50ZWdyaXR5LmM6MzU2Olx0XHRpZiAoaXNfcGNpX3AycGRtYV9wYWdlKHBhZ2VzW2ldKSlcbmJsb2NrL2Jpby1pbnRlZ3JpdHkuYy0zNTctXHRcdFx0KmlzX3AycCA9IHRydWU7XG4tLVxuYmxvY2svYmlvLmM9MTAwNj12b2lkIF9fYmlvX2FkZF9wYWdlKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IHBhZ2UgKnBhZ2UsXG4tLVxuYmxvY2svYmlvLmMtMTAxMS1cbmJsb2NrL2Jpby5jOjEwMTI6XHRpZiAoaXNfcGNpX3AycGRtYV9wYWdlKHBhZ2UpKVxuYmxvY2svYmlvLmMtMTAxMy1cdFx0YmlvLVx1MDAzZWJpX29wZiB8PSBSRVFfTk9NRVJHRTtcbi0tXG5ibG9jay9iaW8uYz0xMjQ1PWludCBiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuLS1cbmJsb2NrL2Jpby5jLTEyNzctXG5ibG9jay9iaW8uYzoxMjc4Olx0aWYgKGlzX3BjaV9wMnBkbWFfcGFnZShiaW8tXHUwMDNlYmlfaW9fdmVjLVx1MDAzZWJ2X3BhZ2UpKVxuYmxvY2svYmlvLmMtMTI3OS1cdFx0YmlvLVx1MDAzZWJpX29wZiB8PSBSRVFfTk9NRVJHRTtcbi0tXG5ibG9jay9ibGsuaD0xNTY9c3RhdGljIGlubGluZSBib29sIHpvbmVfZGV2aWNlX3BhZ2VzX2NvbXBhdGlibGUoY29uc3Qgc3RydWN0IHBhZ2UgKmEsXG4tLVxuYmxvY2svYmxrLmgtMTU4LXtcbmJsb2NrL2Jsay5oOjE1OTpcdGlmIChpc19wY2lfcDJwZG1hX3BhZ2UoYSkgfHwgaXNfcGNpX3AycGRtYV9wYWdlKGIpKVxuYmxvY2svYmxrLmgtMTYwLVx0XHRyZXR1cm4gem9uZV9kZXZpY2VfcGFnZXNfaGF2ZV9zYW1lX3BnbWFwKGEsIGIpO1xuLS1cbmRyaXZlcnMvbWQvbWQuaD0zND1zdGF0aWMgaW5saW5lIGJvb2wgbWRfYmlvX2lzX3AycGRtYShzdHJ1Y3QgYmlvICpiaW8pXG4tLVxuZHJpdmVycy9tZC9tZC5oLTM2LVx0cmV0dXJuIGJpb19oYXNfZGF0YShiaW8pIFx1MDAyNlx1MDAyNiBiaW8tXHUwMDNlYmlfaW9fdmVjIFx1MDAyNlx1MDAyNlxuZHJpdmVycy9tZC9tZC5oOjM3Olx0ICAgICAgIGlzX3BjaV9wMnBkbWFfcGFnZShiaW8tXHUwMDNlYmlfaW9fdmVjLVx1MDAzZWJ2X3BhZ2UpO1xuZHJpdmVycy9tZC9tZC5oLTM4LX1cbi0tXG5kcml2ZXJzL252bWUvaG9zdC9wY2kuYz0xMjA2PXN0YXRpYyBibGtfc3RhdHVzX3QgbnZtZV9wY2lfc2V0dXBfZGF0YV9zaW1wbGUoc3RydWN0IHJlcXVlc3QgKnJlcSxcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9wY2kuYy0xMjE3LVx0XHRyZXR1cm4gQkxLX1NUU19BR0FJTjtcbmRyaXZlcnMvbnZtZS9ob3N0L3BjaS5jOjEyMTg6XHRpZiAoaXNfcGNpX3AycGRtYV9wYWdlKGJ2LmJ2X3BhZ2UpKVxuZHJpdmVycy9udm1lL2hvc3QvcGNpLmMtMTIxOS1cdFx0cmV0dXJuIEJMS19TVFNfQUdBSU47XG4tLVxuZHJpdmVycy9udm1lL2hvc3QvcGNpLmM9MTM3Mj1zdGF0aWMgYmxrX3N0YXR1c190IG52bWVfcGNpX3NldHVwX21ldGFfbXB0cihzdHJ1Y3QgcmVxdWVzdCAqcmVxKVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L3BjaS5jLTEzNzctXG5kcml2ZXJzL252bWUvaG9zdC9wY2kuYzoxMzc4Olx0aWYgKGlzX3BjaV9wMnBkbWFfcGFnZShidi5idl9wYWdlKSlcbmRyaXZlcnMvbnZtZS9ob3N0L3BjaS5jLTEzNzktXHRcdHJldHVybiBudm1lX3BjaV9zZXR1cF9tZXRhX2l0ZXIocmVxKTtcbi0tXG5kcml2ZXJzL252bWUvdGFyZ2V0L2lvLWNtZC1iZGV2LmM9MjUzPXN0YXRpYyB2b2lkIG52bWV0X2JkZXZfZXhlY3V0ZV9ydyhzdHJ1Y3QgbnZtZXRfcmVxICpyZXEpXG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC9pby1jbWQtYmRldi5jLTI4Ni1cbmRyaXZlcnMvbnZtZS90YXJnZXQvaW8tY21kLWJkZXYuYzoyODc6XHRpZiAoaXNfcGNpX3AycGRtYV9wYWdlKHNnX3BhZ2UocmVxLVx1MDAzZXNnKSkpXG5kcml2ZXJzL252bWUvdGFyZ2V0L2lvLWNtZC1iZGV2LmMtMjg4LVx0XHRvcGYgfD0gUkVRX05PTUVSR0U7XG4tLVxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oPTE5Mj1zdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fc2V0X3pvbmVfZGV2aWNlX2RhdGEoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqZGF0YSlcbi0tXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmgtMTk3LVxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oOjE5ODpzdGF0aWMgaW5saW5lIGJvb2wgaXNfcGNpX3AycGRtYV9wYWdlKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oLTE5OS17XG4tLVxuaW5jbHVkZS9saW51eC9wY2ktcDJwZG1hLmg9MTkxPXBjaV9wMnBkbWFfc3RhdGUoc3RydWN0IHBjaV9wMnBkbWFfbWFwX3N0YXRlICpzdGF0ZSwgc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmluY2x1ZGUvbGludXgvcGNpLXAycGRtYS5oLTE5My17XG5pbmNsdWRlL2xpbnV4L3BjaS1wMnBkbWEuaDoxOTQ6XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfUENJX1AyUERNQSkgXHUwMDI2XHUwMDI2IGlzX3BjaV9wMnBkbWFfcGFnZShwYWdlKSkge1xuaW5jbHVkZS9saW51eC9wY2ktcDJwZG1hLmgtMTk1LVx0XHRfX3BjaV9wMnBkbWFfdXBkYXRlX3N0YXRlKHN0YXRlLCBkZXYsIHBhZ2UpO1xuLS1cbm1tL2d1cC5jPTUxNz1zdGF0aWMgc3RydWN0IGZvbGlvICp0cnlfZ3JhYl9mb2xpb19mYXN0KHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgcmVmcyxcbi0tXG5tbS9ndXAuYy01MjctXG5tbS9ndXAuYzo1Mjg6XHRpZiAodW5saWtlbHkoIShmbGFncyBcdTAwMjYgRk9MTF9QQ0lfUDJQRE1BKSBcdTAwMjZcdTAwMjYgaXNfcGNpX3AycGRtYV9wYWdlKHBhZ2UpKSlcbm1tL2d1cC5jLTUyOS1cdFx0cmV0dXJuIE5VTEw7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMjE6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIxNzcKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAxNzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBQMlBETUEgUGFnZSBVc2FnZSBpbiBEaXJlY3QgSS9PKioKCk9rYXksIHNvIEkgc2VlIGBpc19wY2lfcDJwZG1hX3BhZ2VgIGJlaW5nIGNhbGxlZCB3aXRoaW4gYGJpb19pb3ZfaXRlcl9nZXRfcGFnZXNgLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCBiZWNhdXNlIGBiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzYCBpcyBlc3NlbnRpYWwgZm9yIGRpcmVjdCBJL08gYW5kIE5WTWUgdGFyZ2V0IG9wZXJhdGlvbnMuIEEgbGlnaHRidWxiIHdlbnQgb2ZmOiBJIHJlY2FsbCBgRk9MTF9QQ0lfUDJQRE1BYCBpcyBhIGZsYWcgdXRpbGl6ZWQgYnkgYGdldF91c2VyX3BhZ2VzYC4gVGhpcyB0cmlnZ2VycyB0aGUgcXVlc3Rpb24g4oCTIGNhbiB1c2Vyc3BhY2UgYWN0dWFsbHkgbWFwIFAyUERNQSBwYWdlcyBhbmQgY29uc2VxdWVudGx5IHBlcmZvcm0gZGlyZWN0IEkvTyB1c2luZyB0aGVtPwoKVGhlIGFuc3dlciBzZWVtcyB0byBiZSB5ZXMsIGBPX0RJUkVDVGAgKmNhbiogYmUgdXNlZCB3aXRoIHRoZXNlIFAyUERNQSBwYWdlcywgcHJvdmlkZWQgdGhleSYjMzk7cmUgYXBwcm9wcmlhdGVseSBtYXBwZWQgaW50byB1c2Vyc3BhY2UuIE5vdywgdGhlIG5leHQgcXVlc3Rpb24gaXMgaG93IHRoaXMgbWFwcGluZyBhY3R1YWxseSBvY2N1cnMuIEFyZSB3ZSBsb29raW5nIGF0IHNvbWV0aGluZyBsaWtlIGAvZGV2L3AycG1lbSpgIGRldmljZXMsIG9yIGEgc2ltaWxhciBpbnRlcmZhY2U/IFRpbWUgdG8gZGlnIGludG8gYGRyaXZlcnMvcGNpL3AycGRtYS5jYCBhbmQgc2VlIGlmIHRoZXJlJiMzOTtzIGEgY2hhcmFjdGVyIGRldmljZSBvciBhbnkgc2ltaWxhciBtZWNoYW5pc21zIGV4cG9zZWQgdGhhdCBhbGxvdyB1c2VybGFuZCBhY2Nlc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMjE6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwY2lfcDJwZG1hX2FkZF9jbGllbnQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDIxOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNjMzCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKkludmVzdGlnYXRpbmcgVXNlcnNwYWNlIE1hcHBpbmcgaW4gUENJIERpcmVjdCBNZW1vcnkgQWNjZXNzKioKCkFscmlnaHQsIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgdXNlcnNwYWNlIG1hcHBpbmcgaXMgaGFuZGxlZCBpbiB0aGUgUENJIERpcmVjdCBNZW1vcnkgQWNjZXNzIChETUEpIGNvbnRleHQgd2l0aGluIHRoZSBrZXJuZWwuIFRoZSBsaWtlbHkgcGxhY2UgdG8gc3RhcnQgbG9va2luZyBpcyB0aGUgYGRyaXZlcnMvcGNpL3AycGRtYS5jYCBmaWxlLiBUaGF0IHNlZW1zIHRoZSBtb3N0IGxvZ2ljYWwgc3BvdCB0byBmaW5kIHRoZSBjb3JlIGltcGxlbWVudGF0aW9uIGFuZCBhbnkgcmVsYXRlZCBpbnRlcmFjdGlvbnMgd2l0aCB1c2Vyc3BhY2UuIEkmIzM5O2xsIGZvY3VzIG15IGludmVzdGlnYXRpb24gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDIxOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZmlsZV9vcGVyYXRpb25zJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9wY2kvcDJwZG1hLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAyMTozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjgwOQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk5WTWUgQ01CIGFuZCBVc2VycGFjZSBNYXBwaW5nIC0gQSBRdWljayBTY2FuKioKCk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIERpZCBJIGp1c3QgcmVhZCBzb21ldGhpbmcgYWJvdXQgTlZNZSBDTUIgYmVpbmcgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZT8gVGhhdCBkb2VzbiYjMzk7dCBzb3VuZCByaWdodC4uLiB0eXBpY2FsbHksIHlvdSB3b3VsZG4mIzM5O3QgZXhwZWN0IHRoYXQuIExldCBtZSByZS10aGluayB0aGF0IOKAkyBubywgdXN1YWxseSBpdCYjMzk7cyBub3QgYSBkaXJlY3QgbWFwcGluZy4gQnV04oCmIGNvdWxkIHRoZXJlIGJlIHNvbWV0aGluZyBJ4oCZbSBtaXNzaW5nPwoKQWxyaWdodCwgbGV0JiMzOTtzIHJlZm9jdXMuIFBlcmhhcHMgdGhlIGtlcm5lbCYjMzk7cyBOVk1lIHRhcmdldCBjb2RlIG1pZ2h0IGhvbGQgYSBjbHVlLiBMZXQgbWUgcXVpY2tseSB6ZXJvIGluIG9uIGBkcml2ZXJzL252bWUvdGFyZ2V0L3AycG1lbS5jYC4gSSBoYXZlIGEgZmVlbGluZyB0aGF0IGZpbGUgbWlnaHQgYmUgcmVsZXZhbnQgdG8gdW5kZXJzdGFuZGluZyBhbnkgcG90ZW50aWFsIG51YW5jZXMgb3Igd29ya2Fyb3VuZHMgcmVsYXRlZCB0byB0aGlzIHRvcGljLiBUaW1lIHRvIHRha2UgYSBjbG9zZXIgbG9vayEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMjE6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cDJwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9udm1lL3RhcmdldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9udm1lL3RhcmdldC9jb25maWdmcy5jLTE0LSNpbmNsdWRlIFx1MDAzY2xpbnV4L3BjaS5oXHUwMDNlXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvbmZpZ2ZzLmM6MTU6I2luY2x1ZGUgXHUwMDNjbGludXgvcGNpLXAycGRtYS5oXHUwMDNlXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvbmZpZ2ZzLmMtMTYtI2lmZGVmIENPTkZJR19OVk1FX1RBUkdFVF9BVVRIXG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC9jb25maWdmcy5jPTU2MD1DT05GSUdGU19BVFRSKG52bWV0X25zXywgZGV2aWNlX3BhdGgpO1xuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvY29uZmlnZnMuYy01NjItI2lmZGVmIENPTkZJR19QQ0lfUDJQRE1BXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvbmZpZ2ZzLmM6NTYzOnN0YXRpYyBzc2l6ZV90IG52bWV0X25zX3AycG1lbV9zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hhciAqcGFnZSlcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29uZmlnZnMuYy01NjQte1xuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvY29uZmlnZnMuYy01NjYtXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvbmZpZ2ZzLmM6NTY3Olx0cmV0dXJuIHBjaV9wMnBkbWFfZW5hYmxlX3Nob3cocGFnZSwgbnMtXHUwMDNlcDJwX2RldiwgbnMtXHUwMDNldXNlX3AycG1lbSk7XG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvbmZpZ2ZzLmMtNTY4LX1cbmRyaXZlcnMvbnZtZS90YXJnZXQvY29uZmlnZnMuYy01NjktXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvbmZpZ2ZzLmM6NTcwOnN0YXRpYyBzc2l6ZV90IG52bWV0X25zX3AycG1lbV9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvbmZpZ2ZzLmMtNTcxLVx0XHRjb25zdCBjaGFyICpwYWdlLCBzaXplX3QgY291bnQpXG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC9jb25maWdmcy5jLTU3My1cdHN0cnVjdCBudm1ldF9ucyAqbnMgPSB0b19udm1ldF9ucyhpdGVtKTtcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29uZmlnZnMuYzo1NzQ6XHRzdHJ1Y3QgcGNpX2RldiAqcDJwX2RldiA9IE5VTEw7XG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvbmZpZ2ZzLmM6NTc1Olx0Ym9vbCB1c2VfcDJwbWVtO1xuZHJpdmVycy9udm1lL3RhcmdldC9jb25maWdmcy5jLTU3Ni1cdGludCByZXQgPSBjb3VudDtcbi0tXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvbmZpZ2ZzLmMtNTg0LVxuZHJpdmVycy9udm1lL3RhcmdldC9jb25maWdmcy5jOjU4NTpcdGVycm9yID0gcGNpX3AycGRtYV9lbmFibGVfc3RvcmUocGFnZSwgXHUwMDI2cDJwX2RldiwgXHUwMDI2dXNlX3AycG1lbSk7XG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvbmZpZ2ZzLmMtNTg2LVx0aWYgKGVycm9yKSB7XG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC9jb25maWdmcy5jLTU5MC1cbmRyaXZlcnMvbnZtZS90YXJnZXQvY29uZmlnZnMuYzo1OTE6XHRucy1cdTAwM2V1c2VfcDJwbWVtID0gdXNlX3AycG1lbTtcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29uZmlnZnMuYzo1OTI6XHRwY2lfZGV2X3B1dChucy1cdTAwM2VwMnBfZGV2KTtcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29uZmlnZnMuYzo1OTM6XHRucy1cdTAwM2VwMnBfZGV2ID0gcDJwX2RldjtcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29uZmlnZnMuYy01OTQtXG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC9jb25maWdmcy5jLTYwMC1cbmRyaXZlcnMvbnZtZS90YXJnZXQvY29uZmlnZnMuYzo2MDE6Q09ORklHRlNfQVRUUihudm1ldF9uc18sIHAycG1lbSk7XG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvbmZpZ2ZzLmMtNjAyLSNlbmRpZiAvKiBDT05GSUdfUENJX1AyUERNQSAqL1xuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvY29uZmlnZnMuYz04MjU9c3RhdGljIHN0cnVjdCBjb25maWdmc19hdHRyaWJ1dGUgKm52bWV0X25zX2F0dHJzW10gPSB7XG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC9jb25maWdmcy5jLTgzNC0jaWZkZWYgQ09ORklHX1BDSV9QMlBETUFcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29uZmlnZnMuYzo4MzU6XHRcdTAwMjZudm1ldF9uc19hdHRyX3AycG1lbSxcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29uZmlnZnMuYy04MzYtI2VuZGlmXG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtMTAtI2luY2x1ZGUgXHUwMDNjbGludXgvcmN1bGlzdC5oXHUwMDNlXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYzoxMTojaW5jbHVkZSBcdTAwM2NsaW51eC9wY2ktcDJwZG1hLmhcdTAwM2VcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jLTEyLSNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjYXR0ZXJsaXN0LmhcdTAwM2Vcbi0tXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYz00Nzc9c3RhdGljIHZvaWQgbnZtZXRfbnNfZGV2X2Rpc2FibGUoc3RydWN0IG52bWV0X25zICpucylcbi0tXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYy00ODItXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYzo0ODM6c3RhdGljIGludCBudm1ldF9wMnBtZW1fbnNfZW5hYmxlKHN0cnVjdCBudm1ldF9ucyAqbnMpXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYy00ODQte1xuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtNDg1LVx0aW50IHJldDtcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jOjQ4NjpcdHN0cnVjdCBwY2lfZGV2ICpwMnBfZGV2O1xuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtNDg3LVxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmM6NDg4Olx0aWYgKCFucy1cdTAwM2V1c2VfcDJwbWVtKVxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtNDg5LVx0XHRyZXR1cm4gMDtcbi0tXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYy00OTUtXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYzo0OTY6XHRpZiAoIWJsa19xdWV1ZV9wY2lfcDJwZG1hKG5zLVx1MDAzZWJkZXYtXHUwMDNlYmRfZGlzay1cdTAwM2VxdWV1ZSkpIHtcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jLTQ5Ny1cdFx0cHJfZXJyKFwmIzM0O3BlZXItdG8tcGVlciBETUEgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgZHJpdmVyIG9mICVzXFxuXCYjMzQ7LFxuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jLTUwMS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jOjUwMjpcdGlmIChucy1cdTAwM2VwMnBfZGV2KSB7XG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYzo1MDM6XHRcdHJldCA9IHBjaV9wMnBkbWFfZGlzdGFuY2UobnMtXHUwMDNlcDJwX2RldiwgbnZtZXRfbnNfZGV2KG5zKSwgdHJ1ZSk7XG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYy01MDQtXHRcdGlmIChyZXQgXHUwMDNjIDApXG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtNTA3LVx0XHQvKlxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmM6NTA4Olx0XHQgKiBSaWdodCBub3cgd2UganVzdCBjaGVjayB0aGF0IHRoZXJlIGlzIHAycG1lbSBhdmFpbGFibGUgc29cbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jLTUwOS1cdFx0ICogd2UgY2FuIHJlcG9ydCBhbiBlcnJvciB0byB0aGUgdXNlciByaWdodCBhd2F5IGlmIHRoZXJlXG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtNTEzLVxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmM6NTE0Olx0XHRwMnBfZGV2ID0gcGNpX3AycG1lbV9maW5kKG52bWV0X25zX2RldihucykpO1xuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmM6NTE1Olx0XHRpZiAoIXAycF9kZXYpIHtcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jLTUxNi1cdFx0XHRwcl9lcnIoXCYjMzQ7bm8gcGVlci10by1wZWVyIG1lbW9yeSBpcyBhdmFpbGFibGUgZm9yICVzXFxuXCYjMzQ7LFxuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jLTUyMC1cbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jOjUyMTpcdFx0cGNpX2Rldl9wdXQocDJwX2Rldik7XG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYy01MjItXHR9XG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtNTI2LVxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmM6NTI3OnN0YXRpYyB2b2lkIG52bWV0X3AycG1lbV9uc19hZGRfcDJwKHN0cnVjdCBudm1ldF9jdHJsICpjdHJsLFxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtNTI4LVx0XHRcdFx0ICAgIHN0cnVjdCBudm1ldF9ucyAqbnMpXG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtNTMwLVx0c3RydWN0IGRldmljZSAqY2xpZW50c1syXTtcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jOjUzMTpcdHN0cnVjdCBwY2lfZGV2ICpwMnBfZGV2O1xuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtNTMyLVx0aW50IHJldDtcbi0tXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYy01MzUtXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYzo1MzY6XHRpZiAoIWN0cmwtXHUwMDNlcDJwX2NsaWVudCB8fCAhbnMtXHUwMDNldXNlX3AycG1lbSlcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jLTUzNy1cdFx0cmV0dXJuO1xuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtNTM4LVxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmM6NTM5Olx0aWYgKG5zLVx1MDAzZXAycF9kZXYpIHtcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jOjU0MDpcdFx0cmV0ID0gcGNpX3AycGRtYV9kaXN0YW5jZShucy1cdTAwM2VwMnBfZGV2LCBjdHJsLVx1MDAzZXAycF9jbGllbnQsIHRydWUpO1xuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtNTQxLVx0XHRpZiAocmV0IFx1MDAzYyAwKVxuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jLTU0My1cbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jOjU0NDpcdFx0cDJwX2RldiA9IHBjaV9kZXZfZ2V0KG5zLVx1MDAzZXAycF9kZXYpO1xuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtNTQ1LVx0fSBlbHNlIHtcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jOjU0NjpcdFx0Y2xpZW50c1swXSA9IGN0cmwtXHUwMDNlcDJwX2NsaWVudDtcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jLTU0Ny1cdFx0Y2xpZW50c1sxXSA9IG52bWV0X25zX2Rldihucyk7XG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYy01NDgtXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYzo1NDk6XHRcdHAycF9kZXYgPSBwY2lfcDJwbWVtX2ZpbmRfbWFueShjbGllbnRzLCBBUlJBWV9TSVpFKGNsaWVudHMpKTtcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jOjU1MDpcdFx0aWYgKCFwMnBfZGV2KSB7XG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYy01NTEtXHRcdFx0cHJfZXJyKFwmIzM0O25vIHBlZXItdG8tcGVlciBtZW1vcnkgaXMgYXZhaWxhYmxlIHRoYXQmIzM5O3Mgc3VwcG9ydGVkIGJ5ICVzIGFuZCAlc1xcblwmIzM0OyxcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jOjU1MjpcdFx0XHQgICAgICAgZGV2X25hbWUoY3RybC1cdTAwM2VwMnBfY2xpZW50KSwgbnMtXHUwMDNlZGV2aWNlX3BhdGgpO1xuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtNTUzLVx0XHRcdHJldHVybjtcbi0tXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYy01NTYtXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYzo1NTc6XHRyZXQgPSByYWRpeF90cmVlX2luc2VydChcdTAwMjZjdHJsLVx1MDAzZXAycF9uc19tYXAsIG5zLVx1MDAzZW5zaWQsIHAycF9kZXYpO1xuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtNTU4LVx0aWYgKHJldCBcdTAwM2MgMClcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jOjU1OTpcdFx0cGNpX2Rldl9wdXQocDJwX2Rldik7XG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYy01NjAtXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYzo1NjE6XHRwcl9pbmZvKFwmIzM0O3VzaW5nIHAycG1lbSBvbiAlcyBmb3IgbnNpZCAlZFxcblwmIzM0OywgcGNpX25hbWUocDJwX2RldiksXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYy01NjItXHRcdG5zLVx1MDAzZW5zaWQpO1xuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jPTU3Nz1pbnQgbnZtZXRfbnNfZW5hYmxlKHN0cnVjdCBudm1ldF9ucyAqbnMpXG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtNTk5LVxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmM6NjAwOlx0cmV0ID0gbnZtZXRfcDJwbWVtX25zX2VuYWJsZShucyk7XG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYy02MDEtXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jLTYwNC1cdGxpc3RfZm9yX2VhY2hfZW50cnkoY3RybCwgXHUwMDI2c3Vic3lzLVx1MDAzZWN0cmxzLCBzdWJzeXNfZW50cnkpXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYzo2MDU6XHRcdG52bWV0X3AycG1lbV9uc19hZGRfcDJwKGN0cmwsIG5zKTtcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jLTYwNi1cbi0tXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYy02MjctXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGN0cmwsIFx1MDAyNnN1YnN5cy1cdTAwM2VjdHJscywgc3Vic3lzX2VudHJ5KVxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmM6NjI4Olx0XHRwY2lfZGV2X3B1dChyYWRpeF90cmVlX2RlbGV0ZShcdTAwMjZjdHJsLVx1MDAzZXAycF9uc19tYXAsIG5zLVx1MDAzZW5zaWQpKTtcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jLTYyOS1vdXRfZGV2X2Rpc2FibGU6XG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmM9NjM0PXZvaWQgbnZtZXRfbnNfZGlzYWJsZShzdHJ1Y3QgbnZtZXRfbnMgKm5zKVxuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jLTY0Ni1cdGxpc3RfZm9yX2VhY2hfZW50cnkoY3RybCwgXHUwMDI2c3Vic3lzLVx1MDAzZWN0cmxzLCBzdWJzeXNfZW50cnkpXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYzo2NDc6XHRcdHBjaV9kZXZfcHV0KHJhZGl4X3RyZWVfZGVsZXRlKFx1MDAyNmN0cmwtXHUwMDNlcDJwX25zX21hcCwgbnMtXHUwMDNlbnNpZCkpO1xuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtNjQ4LVxuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jPTEyODg9c3RhdGljIHVuc2lnbmVkIGludCBudm1ldF9kYXRhX3RyYW5zZmVyX2xlbihzdHJ1Y3QgbnZtZXRfcmVxICpyZXEpXG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtMTI5Mi1cbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jOjEyOTM6c3RhdGljIGludCBudm1ldF9yZXFfYWxsb2NfcDJwbWVtX3NnbHMoc3RydWN0IHBjaV9kZXYgKnAycF9kZXYsXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYy0xMjk0LVx0XHRzdHJ1Y3QgbnZtZXRfcmVxICpyZXEpXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYy0xMjk1LXtcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jOjEyOTY6XHRyZXEtXHUwMDNlc2cgPSBwY2lfcDJwbWVtX2FsbG9jX3NnbChwMnBfZGV2LCBcdTAwMjZyZXEtXHUwMDNlc2dfY250LFxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtMTI5Ny1cdFx0XHRudm1ldF9kYXRhX3RyYW5zZmVyX2xlbihyZXEpKTtcbi0tXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYy0xMzAxLVx0aWYgKHJlcS1cdTAwM2VtZXRhZGF0YV9sZW4pIHtcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jOjEzMDI6XHRcdHJlcS1cdTAwM2VtZXRhZGF0YV9zZyA9IHBjaV9wMnBtZW1fYWxsb2Nfc2dsKHAycF9kZXYsXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYy0xMzAzLVx0XHRcdFx0XHUwMDI2cmVxLVx1MDAzZW1ldGFkYXRhX3NnX2NudCwgcmVxLVx1MDAzZW1ldGFkYXRhX2xlbik7XG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtMTMwNy1cbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jOjEzMDg6XHRyZXEtXHUwMDNlcDJwX2RldiA9IHAycF9kZXY7XG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYy0xMzA5LVxuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jLTEzMTEtb3V0X2ZyZWVfc2c6XG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYzoxMzEyOlx0cGNpX3AycG1lbV9mcmVlX3NnbChyZXEtXHUwMDNlcDJwX2RldiwgcmVxLVx1MDAzZXNnKTtcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jLTEzMTMtb3V0X2Vycjpcbi0tXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYy0xMzE2LVxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmM6MTMxNzpzdGF0aWMgc3RydWN0IHBjaV9kZXYgKm52bWV0X3JlcV9maW5kX3AycF9kZXYoc3RydWN0IG52bWV0X3JlcSAqcmVxKVxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtMTMxOC17XG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtMTMyMS1cdFx0cmV0dXJuIE5VTEw7XG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYzoxMzIyOlx0cmV0dXJuIHJhZGl4X3RyZWVfbG9va3VwKFx1MDAyNnJlcS1cdTAwM2VzcS1cdTAwM2VjdHJsLVx1MDAzZXAycF9uc19tYXAsIHJlcS1cdTAwM2Vucy1cdTAwM2Vuc2lkKTtcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jLTEzMjMtfVxuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jPTEzMjU9aW50IG52bWV0X3JlcV9hbGxvY19zZ2xzKHN0cnVjdCBudm1ldF9yZXEgKnJlcSlcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jLTEzMjYte1xuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmM6MTMyNzpcdHN0cnVjdCBwY2lfZGV2ICpwMnBfZGV2ID0gbnZtZXRfcmVxX2ZpbmRfcDJwX2RldihyZXEpO1xuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtMTMyOC1cbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jOjEzMjk6XHRpZiAocDJwX2RldiBcdTAwMjZcdTAwMjYgIW52bWV0X3JlcV9hbGxvY19wMnBtZW1fc2dscyhwMnBfZGV2LCByZXEpKVxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtMTMzMC1cdFx0cmV0dXJuIDA7XG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmM9MTM1Mj12b2lkIG52bWV0X3JlcV9mcmVlX3NnbHMoc3RydWN0IG52bWV0X3JlcSAqcmVxKVxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtMTM1My17XG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYzoxMzU0Olx0aWYgKHJlcS1cdTAwM2VwMnBfZGV2KSB7XG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYzoxMzU1Olx0XHRwY2lfcDJwbWVtX2ZyZWVfc2dsKHJlcS1cdTAwM2VwMnBfZGV2LCByZXEtXHUwMDNlc2cpO1xuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtMTM1Ni1cdFx0aWYgKHJlcS1cdTAwM2VtZXRhZGF0YV9zZylcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jOjEzNTc6XHRcdFx0cGNpX3AycG1lbV9mcmVlX3NnbChyZXEtXHUwMDNlcDJwX2RldiwgcmVxLVx1MDAzZW1ldGFkYXRhX3NnKTtcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jOjEzNTg6XHRcdHJlcS1cdTAwM2VwMnBfZGV2ID0gTlVMTDtcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jLTEzNTktXHR9IGVsc2Uge1xuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jPTE1MzI9Ym9vbCBudm1ldF9ob3N0X2FsbG93ZWQoc3RydWN0IG52bWV0X3N1YnN5cyAqc3Vic3lzLCBjb25zdCBjaGFyICpob3N0bnFuKVxuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jLTE1NTEtXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYzoxNTUyOnN0YXRpYyB2b2lkIG52bWV0X3NldHVwX3AycF9uc19tYXAoc3RydWN0IG52bWV0X2N0cmwgKmN0cmwsXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYzoxNTUzOlx0XHRzdHJ1Y3QgZGV2aWNlICpwMnBfY2xpZW50KVxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtMTU1NC17XG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtMTU1OS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jOjE1NjA6XHRpZiAoIXAycF9jbGllbnQpXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYy0xNTYxLVx0XHRyZXR1cm47XG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYy0xNTYyLVxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmM6MTU2MzpcdGN0cmwtXHUwMDNlcDJwX2NsaWVudCA9IGdldF9kZXZpY2UocDJwX2NsaWVudCk7XG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYy0xNTY0LVxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtMTU2NS1cdG52bWV0X2Zvcl9lYWNoX2VuYWJsZWRfbnMoXHUwMDI2Y3RybC1cdTAwM2VzdWJzeXMtXHUwMDNlbmFtZXNwYWNlcywgaWR4LCBucylcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jOjE1NjY6XHRcdG52bWV0X3AycG1lbV9uc19hZGRfcDJwKGN0cmwsIG5zKTtcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jLTE1NjctfVxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtMTU2OC1cbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jOjE1Njk6c3RhdGljIHZvaWQgbnZtZXRfcmVsZWFzZV9wMnBfbnNfbWFwKHN0cnVjdCBudm1ldF9jdHJsICpjdHJsKVxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtMTU3MC17XG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtMTU3NS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jOjE1NzY6XHRyYWRpeF90cmVlX2Zvcl9lYWNoX3Nsb3Qoc2xvdCwgXHUwMDI2Y3RybC1cdTAwM2VwMnBfbnNfbWFwLCBcdTAwMjZpdGVyLCAwKVxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtMTU3Ny1cdFx0cGNpX2Rldl9wdXQocmFkaXhfdHJlZV9kZXJlZl9zbG90KHNsb3QpKTtcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jLTE1NzgtXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYzoxNTc5Olx0cHV0X2RldmljZShjdHJsLVx1MDAzZXAycF9jbGllbnQpO1xuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtMTU4MC19XG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmM9MTU5MT1zdHJ1Y3QgbnZtZXRfY3RybCAqbnZtZXRfYWxsb2NfY3RybChzdHJ1Y3QgbnZtZXRfYWxsb2NfY3RybF9hcmdzICphcmdzKVxuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jLTE2MzctXHRJTklUX0xJU1RfSEVBRChcdTAwMjZjdHJsLVx1MDAzZWFzeW5jX2V2ZW50cyk7XG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYzoxNjM4Olx0SU5JVF9SQURJWF9UUkVFKFx1MDAyNmN0cmwtXHUwMDNlcDJwX25zX21hcCwgR0ZQX0tFUk5FTCk7XG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYy0xNjM5LVx0SU5JVF9XT1JLKFx1MDAyNmN0cmwtXHUwMDNlZmF0YWxfZXJyX3dvcmssIG52bWV0X2ZhdGFsX2Vycm9yX2hhbmRsZXIpO1xuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jLTE2OTEtXHRsaXN0X2FkZF90YWlsKFx1MDAyNmN0cmwtXHUwMDNlc3Vic3lzX2VudHJ5LCBcdTAwMjZzdWJzeXMtXHUwMDNlY3RybHMpO1xuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmM6MTY5MjpcdG52bWV0X3NldHVwX3AycF9uc19tYXAoY3RybCwgYXJncy1cdTAwM2VwMnBfY2xpZW50KTtcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jLTE2OTMtXHRudm1ldF9kZWJ1Z2ZzX2N0cmxfc2V0dXAoY3RybCk7XG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmM9MTc0MT1zdGF0aWMgdm9pZCBudm1ldF9jdHJsX2ZyZWUoc3RydWN0IGtyZWYgKnJlZilcbi0tXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYy0xNzQ3LVx0bnZtZXRfY3RybF9kZXN0cm95X3ByKGN0cmwpO1xuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmM6MTc0ODpcdG52bWV0X3JlbGVhc2VfcDJwX25zX21hcChjdHJsKTtcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jLTE3NDktXHRsaXN0X2RlbChcdTAwMjZjdHJsLVx1MDAzZXN1YnN5c19lbnRyeSk7XG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC9mYWJyaWNzLWNtZC5jPTI2Nz1zdGF0aWMgdm9pZCBudm1ldF9leGVjdXRlX2FkbWluX2Nvbm5lY3Qoc3RydWN0IG52bWV0X3JlcSAqcmVxKVxuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvZmFicmljcy1jbWQuYy0yNzUtXHRcdC5vcHMgPSByZXEtXHUwMDNlb3BzLFxuZHJpdmVycy9udm1lL3RhcmdldC9mYWJyaWNzLWNtZC5jOjI3NjpcdFx0LnAycF9jbGllbnQgPSByZXEtXHUwMDNlcDJwX2NsaWVudCxcbmRyaXZlcnMvbnZtZS90YXJnZXQvZmFicmljcy1jbWQuYy0yNzctXHRcdC5rYXRvID0gbGUzMl90b19jcHUoYy1cdTAwM2VrYXRvKSxcbi0tXG5kcml2ZXJzL252bWUvdGFyZ2V0L2lvLWNtZC1iZGV2LmM9MjUzPXN0YXRpYyB2b2lkIG52bWV0X2JkZXZfZXhlY3V0ZV9ydyhzdHJ1Y3QgbnZtZXRfcmVxICpyZXEpXG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC9pby1jbWQtYmRldi5jLTI4Ni1cbmRyaXZlcnMvbnZtZS90YXJnZXQvaW8tY21kLWJkZXYuYzoyODc6XHRpZiAoaXNfcGNpX3AycGRtYV9wYWdlKHNnX3BhZ2UocmVxLVx1MDAzZXNnKSkpXG5kcml2ZXJzL252bWUvdGFyZ2V0L2lvLWNtZC1iZGV2LmMtMjg4LVx0XHRvcGYgfD0gUkVRX05PTUVSR0U7XG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC9udm1ldC5oPTEwMD1zdHJ1Y3QgbnZtZXRfbnMge1xuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvbnZtZXQuaC0xMjMtXG5kcml2ZXJzL252bWUvdGFyZ2V0L252bWV0Lmg6MTI0Olx0c3RydWN0IHBjaV9kZXZcdFx0KnAycF9kZXY7XG5kcml2ZXJzL252bWUvdGFyZ2V0L252bWV0Lmg6MTI1Olx0aW50XHRcdFx0dXNlX3AycG1lbTtcbmRyaXZlcnMvbnZtZS90YXJnZXQvbnZtZXQuaC0xMjYtXHRpbnRcdFx0XHRwaV90eXBlO1xuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvbnZtZXQuaD0yNTI9c3RydWN0IG52bWV0X2N0cmwge1xuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvbnZtZXQuaC0yOTAtXG5kcml2ZXJzL252bWUvdGFyZ2V0L252bWV0Lmg6MjkxOlx0c3RydWN0IGRldmljZVx0XHQqcDJwX2NsaWVudDtcbmRyaXZlcnMvbnZtZS90YXJnZXQvbnZtZXQuaDoyOTI6XHRzdHJ1Y3QgcmFkaXhfdHJlZV9yb290XHRwMnBfbnNfbWFwO1xuZHJpdmVycy9udm1lL3RhcmdldC9udm1ldC5oLTI5My0jaWZkZWYgQ09ORklHX05WTUVfVEFSR0VUX0RFQlVHRlNcbi0tXG5kcml2ZXJzL252bWUvdGFyZ2V0L252bWV0Lmg9NDQ3PXN0cnVjdCBudm1ldF9yZXEge1xuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvbnZtZXQuaC00OTItXG5kcml2ZXJzL252bWUvdGFyZ2V0L252bWV0Lmg6NDkzOlx0c3RydWN0IHBjaV9kZXZcdFx0KnAycF9kZXY7XG5kcml2ZXJzL252bWUvdGFyZ2V0L252bWV0Lmg6NDk0Olx0c3RydWN0IGRldmljZVx0XHQqcDJwX2NsaWVudDtcbmRyaXZlcnMvbnZtZS90YXJnZXQvbnZtZXQuaC00OTUtXHR1MTZcdFx0XHRlcnJvcl9sb2M7XG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC9udm1ldC5oPTYwNT1zdHJ1Y3QgbnZtZXRfYWxsb2NfY3RybF9hcmdzIHtcbi0tXG5kcml2ZXJzL252bWUvdGFyZ2V0L252bWV0LmgtNjExLVx0Y29uc3Qgc3RydWN0IG52bWV0X2ZhYnJpY3Nfb3BzICpvcHM7XG5kcml2ZXJzL252bWUvdGFyZ2V0L252bWV0Lmg6NjEyOlx0c3RydWN0IGRldmljZVx0XHQqcDJwX2NsaWVudDtcbmRyaXZlcnMvbnZtZS90YXJnZXQvbnZtZXQuaC02MTMtXHR1MzJcdFx0XHRrYXRvO1xuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvcmRtYS5jPTQwMD1zdGF0aWMgaW50IG52bWV0X3JkbWFfYWxsb2NfcnNwKHN0cnVjdCBudm1ldF9yZG1hX2RldmljZSAqbmRldixcbi0tXG5kcml2ZXJzL252bWUvdGFyZ2V0L3JkbWEuYy00MTItXG5kcml2ZXJzL252bWUvdGFyZ2V0L3JkbWEuYzo0MTM6XHRpZiAoaWJfZG1hX3BjaV9wMnBfZG1hX3N1cHBvcnRlZChuZGV2LVx1MDAzZWRldmljZSkpXG5kcml2ZXJzL252bWUvdGFyZ2V0L3JkbWEuYzo0MTQ6XHRcdHItXHUwMDNlcmVxLnAycF9jbGllbnQgPSBcdTAwMjZuZGV2LVx1MDAzZWRldmljZS1cdTAwM2VkZXY7XG5kcml2ZXJzL252bWUvdGFyZ2V0L3JkbWEuYy00MTUtXHRyLVx1MDAzZXNlbmRfc2dlLmxlbmd0aCA9IHNpemVvZigqci1cdTAwM2VyZXEuY3FlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMjE6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkxMzYKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiA1NjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUmVhY2hpbmcgdGhlIFRhcmdldDogQSBGdXp6aW5nIFN0cmF0ZWd5KioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gZGlnZ2luZyBpbnRvIHRoaXMsIGFuZCBpdCBsb29rcyBsaWtlIGBkcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuY2AgaGFzIFAyUCBzdXBwb3J0IGJ1aWx0IGluLiAgVGhhdCYjMzk7cyBrZXkuICBJdCB1c2VzIGBwY2lfcDJwbWVtX2FsbG9jX3NnbGAsIHdoaWNoIGlzIHByZWNpc2VseSB3aGF0IHdlIHdhbnQsIGFuZCBpbXBvcnRhbnRseSwgaXQmIzM5O3MgY29udHJvbGxhYmxlIHZpYSBjb25maWdmcyB1c2luZyB0aGUgYHAycG1lbWAgb3B0aW9uLiBCaW5nby4KCk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBpZiB3ZSBzZXQgdXAgYW4gTlZNZSB0YXJnZXQgdXNpbmcgYW4gTUQgYXJyYXkgYXMgYSBiYWNrZW5kIOKAkyBhIGBudm1ldF9uc2AgYmFja2VkIGJ5IGEgYmxvY2sgZGV2aWNlIHdoaWNoIGl0c2VsZiBpcyBhbiBNRCBhcnJheSDigJMgYW5kIHRoZW4gZW5hYmxlIGBwMnBtZW1gIG9uIHRoYXQgbmFtZXNwYWNlLi4uIGJvb20uIFRoZSBOVk1lIHRhcmdldCAqc2hvdWxkKiBzdGFydCBhbGxvY2F0aW5nIFAyUCBtZW1vcnkgYW5kIHRoZW4gaXNzdWluZyBJL08gZGlyZWN0bHkgdG8gdGhlIE1EIGFycmF5LCB1c2luZyB0aG9zZSBwYWdlcy4gVGhhdCB0cmlnZ2VycyB0aGUgTUQgUkFJRCBjb2RlIHdlIGFyZSBpbnRlcmVzdGVkIGluLiBUaGlzIGlzIGRlZmluaXRlbHkgYSBzb2xpZCBhdHRhY2sgc3VyZmFjZS4KCkFuZCBoZXJlJiMzOTtzIHRoZSBraWNrZXI6IHRoaXMgaXMgYWxsIGFjaGlldmFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCB3aXRoIFFFTVUuICBXZSBjYW4gcHJvdmlzaW9uIGEgdmlydHVhbCBOVk1lIGRldmljZSB3aXRoIGEgQ01CIChDb250cm9sbGVyIE1lbW9yeSBCdWZmZXIpIGFjdGluZyBhcyBhIFAyUCBtZW1vcnkgcHJvdmlkZXIuIEFuZCB5ZXMsIFFFTVUmIzM5O3MgTlZNZSBkZXZpY2UgKmRvZXMqIHN1cHBvcnQgQ01CLCB0aGFua3MgdG8gdGhlIGBjbWJfc2l6ZV9tYmAgcGFyYW1ldGVyLgoKTm93LCBkb2VzIHN5emthbGxlciBwbGF5IG5pY2VseT8gIFllcyEgSXQgaGFzIGRlc2NyaXB0aW9ucyBmb3IgTlZNZSB0YXJnZXQgY29uZmlnZnMsIHNvIHRoYXQmIzM5O3MgY292ZXJlZC4gQWxzbywgaXQgaGFzIGRlc2NyaXB0aW9ucyBmb3IgTUQgaW9jdGxzLCBzbyB3ZSBjYW4gZGVmaW5lIHRoZSBNRCBhcnJheXMuICBUaGlzIGlzIGFsbCBkZWZpbml0ZWx5IHJlYWNoYWJsZSBhbmQgcmlwZSBmb3IgZnV6emluZy4KCk1vdmluZyBvbiwgSSBuZWVkIHRvIGNoZWNrIG91dCB0aGUgTlZNZSBSRE1BIG1vZGlmaWNhdGlvbnMgaW4gYGRyaXZlcnMvbnZtZS9ob3N0L3JkbWEuY2AuIEl0IGxvb2tzIGxpa2UgdGhlIHBhdGNoIGNoYW5nZXMgYG52bWVfcmRtYV9kbWFfbWFwX3JlcWAgdG8gdXNlIGBpYl9kbWFfbWFwX3NndGFibGVfYXR0cnNgIGluc3RlYWQgb2YgdGhlIG9sZCBgaWJfZG1hX21hcF9zZ2AuICBXZSYjMzk7cmUgbWFwcGluZyB0aGUgc2NhdHRlcmxpc3QuCgpBbHNvLCBpbiBgbnZtZV9yZG1hX3F1ZXVlX3JxYCwgaXQgaGFuZGxlcyBgLUVSRU1PVEVJT2AgYnkgcmV0dXJuaW5nIGBCTEtfU1RTX1AyUERNQWAuIFRoaXMgaXMgYWxzbyBhIHZhbGlkIHBhdGh3YXkgaWYgd2UmIzM5O3JlIHVzaW5nIE5WTWUgb3ZlciBSRE1BLCB3aGljaCBzeXprYWxsZXIgc3VwcG9ydHMgd2l0aCBpdHMgYHNpd2Agb3IgYHJ4ZWAgc29mdHdhcmUgUkRNQSBkcml2ZXJzLgoKTm93IEkmIzM5O20gdGhpbmtpbmcsIGRvZXMgc29mdHdhcmUgUkRNQSBzdXBwb3J0IFAyUERNQT8gIGBpYl9kbWFfcGNpX3AycF9kbWFfc3VwcG9ydGVkYCBpcyBjaGVja2VkIGluIGBudm1ldF9yZG1hX2FsbG9jX3JzcGAsIGJ1dCB0aGUgY29kZSBpbiBgbnZtZV9yZG1hX2RtYV9tYXBfcmVxYCBzZWVtcyB0byBleGVjdXRlIGZvciAqYWxsKiBOVk1lIFJETUEgcmVxdWVzdHMsIG5vdCBqdXN0IFAyUERNQSBvbmVzISAgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBsYXN0IHBvaW50Li4uIEkmIzM5O2xsIHZlcmlmeSB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAyMTozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpYl9kbWFfbWFwX3NndGFibGVfYXR0cnMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL252bWUvaG9zdC9yZG1hLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9udm1lL2hvc3QvcmRtYS5jPTE0Njg9c3RhdGljIGludCBudm1lX3JkbWFfZG1hX21hcF9yZXEoc3RydWN0IGliX2RldmljZSAqaWJkZXYsIHN0cnVjdCByZXF1ZXN0ICpycSxcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9yZG1hLmMtMTQ4Ny1cdH07XG5kcml2ZXJzL252bWUvaG9zdC9yZG1hLmM6MTQ4ODpcdHJldCA9IGliX2RtYV9tYXBfc2d0YWJsZV9hdHRycyhpYmRldiwgXHUwMDI2c2d0LCBycV9kbWFfZGlyKHJxKSwgMCk7XG5kcml2ZXJzL252bWUvaG9zdC9yZG1hLmMtMTQ4OS1cdGlmICh1bmxpa2VseShyZXQpKVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L3JkbWEuYy0xNTEwLVx0XHR9O1xuZHJpdmVycy9udm1lL2hvc3QvcmRtYS5jOjE1MTE6XHRcdHJldCA9IGliX2RtYV9tYXBfc2d0YWJsZV9hdHRycyhpYmRldiwgXHUwMDI2c2d0LCBycV9kbWFfZGlyKHJxKSwgMCk7XG5kcml2ZXJzL252bWUvaG9zdC9yZG1hLmMtMTUxMi1cdFx0aWYgKHVubGlrZWx5KHJldCkpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDIxOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNjA4CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogNDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTlZNZSBSRE1BIGFuZCBNRCBSQUlEIE1vZGlmaWNhdGlvbnMqKgoKT2theSwgc28gbG9va2luZyBhdCB0aGlzIHBhdGNoLCB0aGUgY29yZSBjaGFuZ2UgZm9yIE5WTWUgUkRNQSwgc3BlY2lmaWNhbGx5IHRoZSBzd2l0Y2ggaW4gYG52bWVfcmRtYV9kbWFfbWFwX3JlcWAgdG8gYGliX2RtYV9tYXBfc2d0YWJsZV9hdHRyc2AsIHNlZW1zIGxpa2UgYSBzb2xpZCBmdW5jdGlvbmFsIGNoYW5nZSBhZmZlY3RpbmcgYWxsIE5WTWUgUkRNQSBJL08uIFRoZSBOVk1lIFJETUEgY29tcG9uZW50IGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGFuZCB0ZXN0YWJsZSwgd2hpY2ggaXMgZ29vZC4gV2UgZG9uJiMzOTt0IG5lY2Vzc2FyaWx5IG5lZWQgUDJQRE1BIHRvIHZhbGlkYXRlIHRoZSBmdW5kYW1lbnRhbCBSRE1BIHBhcnQuCgpOb3csIHRoZSBtb3JlIGludGVyZXN0aW5nIHBhcnQgaXMgdGhlIG1vZGlmaWNhdGlvbnMgdG8gdGhlIE1EIFJBSUQgY29kZS4gSXQmIzM5O3MgdG91Y2hpbmcgYSBudW1iZXIgb2YgZnVuY3Rpb25zLCBwcmltYXJpbHkgYXJvdW5kIGhvdyBQMlBETUEgYmlvcyBhcmUgaGFuZGxlZDogYG1kX3N1Ym1pdF9iaW9gIG5vdyBzZXRzIGBSRVFfTk9NRVJHRWAsIGByYWlkMV93cml0ZV9lcnJvcmAgaXMgbW9kaWZpZWQgdG8gYXZvaWQgZGlzayBmYWlsdXJlcyB1bmRlciBzcGVjaWZpYyBQMlBETUEgY29uZGl0aW9ucywgYW5kIGNoYW5nZXMgZXh0ZW5kIHRvIGByYWlkMV9lbmRfd3JpdGVfcmVxdWVzdGAsIGByYWlkMV93cml0ZV9yZXF1ZXN0YCwgYGhhbmRsZV93cml0ZV9maW5pc2hlZGAsIGFuZCBgaGFuZGxlX3JlYWRfZXJyb3JgIHRvIGhhbmRsZSBQMlBETUEgZXJyb3JzLCBsaWtlIGJsb2NraW5nIHRoZSBiaW8gaWYgd2UgZ2V0IGEgYHAycGRtYV9lcnJvcmAuIFRoZXJlIGFyZSBzaW1pbGFyIGNoYW5nZXMgZm9yIFJBSUQxMCwgdG9vLgoKVG8gdGVzdCB0aGVzZSBNRCBSQUlEIG1vZGlmaWNhdGlvbnMgdGhvcm91Z2hseSwgdGhvdWdoLCB3ZSBhYnNvbHV0ZWx5IG5lZWQgdG8gZ2VuZXJhdGUgUDJQRE1BIGJpb3MuIENhbiBTeXprYWxsZXIgZG8gdGhhdD8gQWgsIHllcyEgSWYgU3l6a2FsbGVyIGNvbmZpZ3VyZXMgYW4gTlZNZSB0YXJnZXQgd2l0aCBgcDJwbWVtYCBhbmQgcG9pbnRzIGl0IHRvIGFuIE1EIGFycmF5LCB0aGVuIGFsbCBJL08gdG8gdGhhdCBOVk1lIHRhcmdldCBzaG91bGQgZ2VuZXJhdGUgdGhlIGFwcHJvcHJpYXRlIFAyUERNQSBiaW9zIHRvIHRoZSBNRCBhcnJheSwgd2hpY2ggaXMgYSBuaWNlIHNwZWNpZmljIHdheSB0byB2YWxpZGF0ZSB0aGVzZS4gVGhpcyBpcyBhIHZlcnkgc3BlY2lmaWMgc2V0dXAsIGJ1dCBmdW5jdGlvbmFsbHkgcmVhY2hhYmxlLCB3aGljaCBpcyBrZXkuCgpFdmVuIGlmIHN5emthbGxlciBkb2VzbiYjMzk7dCBtYWtlIGl0ICplYXN5KiB0byBnZW5lcmF0ZSBQMlBETUEgYmlvcyBkaXJlY3RseSwgSSBzaG91bGQgcmVtZW1iZXIgdGhhdCB0aGUgTUQgUkFJRCBjaGFuZ2VzIGFyZW4mIzM5O3QgKmV4Y2x1c2l2ZWx5KiBQMlBETUEtZm9jdXNlZC4gU29tZSBvZiB0aGUgY2hhbmdlcywgbGlrZSB0aGUgcmVmYWN0b3Jpbmcgb2YgYHJhaWQxX3dyaXRlX2Vycm9yYCBhcyBhIGhlbHBlciBmdW5jdGlvbiwgYW5kIHRoZSBgQ29sbGlzaW9uQ2hlY2tgIGNoYW5nZSBpbXBhY3QgKm5vcm1hbCogYmlvcywgdG9vLiBXYWl0LCB3aGF0IHdhcyB0aGF0IGBDb2xsaXNpb25DaGVja2AgY2hhbmdlIGFsbCBhYm91dD8gSSBzaG91bGQgcHJvYmFibHkgZ2l2ZSB0aGF0IGFub3RoZXIgbG9vay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMjE6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q29sbGlzaW9uQ2hlY2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL21kLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL21kL21kLmM9MTU0PXN0YXRpYyB2b2lkIHJkZXZfdW5pbml0X3NlcmlhbChzdHJ1Y3QgbWRfcmRldiAqcmRldilcbmRyaXZlcnMvbWQvbWQuYy0xNTUte1xuZHJpdmVycy9tZC9tZC5jOjE1NjpcdGlmICghdGVzdF9hbmRfY2xlYXJfYml0KENvbGxpc2lvbkNoZWNrLCBcdTAwMjZyZGV2LVx1MDAzZWZsYWdzKSlcbmRyaXZlcnMvbWQvbWQuYy0xNTctXHRcdHJldHVybjtcbi0tXG5kcml2ZXJzL21kL21kLmM9MTcxPXN0YXRpYyBpbnQgcmRldl9pbml0X3NlcmlhbChzdHJ1Y3QgbWRfcmRldiAqcmRldilcbi0tXG5kcml2ZXJzL21kL21kLmMtMTc2LVxuZHJpdmVycy9tZC9tZC5jOjE3NzpcdGlmICh0ZXN0X2JpdChDb2xsaXNpb25DaGVjaywgXHUwMDI2cmRldi1cdTAwM2VmbGFncykpXG5kcml2ZXJzL21kL21kLmMtMTc4LVx0XHRyZXR1cm4gMDtcbi0tXG5kcml2ZXJzL21kL21kLmMtMTkyLVx0cmRldi1cdTAwM2VzZXJpYWwgPSBzZXJpYWw7XG5kcml2ZXJzL21kL21kLmM6MTkzOlx0c2V0X2JpdChDb2xsaXNpb25DaGVjaywgXHUwMDI2cmRldi1cdTAwM2VmbGFncyk7XG5kcml2ZXJzL21kL21kLmMtMTk0LVxuLS1cbmRyaXZlcnMvbWQvbWQuYz0yMzM9dm9pZCBtZGRldl9jcmVhdGVfc2VyaWFsX3Bvb2woc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kX3JkZXYgKnJkZXYpXG4tLVxuZHJpdmVycy9tZC9tZC5jLTIzNy1cdGlmIChyZGV2IFx1MDAyNlx1MDAyNiAhcmRldl9uZWVkX3NlcmlhbChyZGV2KSBcdTAwMjZcdTAwMjZcbmRyaXZlcnMvbWQvbWQuYzoyMzg6XHQgICAgIXRlc3RfYml0KENvbGxpc2lvbkNoZWNrLCBcdTAwMjZyZGV2LVx1MDAzZWZsYWdzKSlcbmRyaXZlcnMvbWQvbWQuYy0yMzktXHRcdHJldHVybjtcbi0tXG5kcml2ZXJzL21kL21kLmMtMjY0LSAqIEZyZWUgcmVzb3VyY2UgZnJvbSByZGV2KHMpLCBhbmQgZGVzdHJveSBzZXJpYWxfaW5mb19wb29sIHVuZGVyIGNvbmRpdGlvbnM6XG5kcml2ZXJzL21kL21kLmM6MjY1OiAqIDEuIHJkZXYgaXMgdGhlIGxhc3QgZGV2aWNlIGZsYWdlZCB3aXRoIENvbGxpc2lvbkNoZWNrLlxuZHJpdmVycy9tZC9tZC5jLTI2Ni0gKiAyLiB3aGVuIGJpdG1hcCBpcyBkZXN0cm95ZWQgd2hpbGUgcG9saWN5IGlzIG5vdCBlbmFibGVkLlxuLS1cbmRyaXZlcnMvbWQvbWQuYz0yNjk9dm9pZCBtZGRldl9kZXN0cm95X3NlcmlhbF9wb29sKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZF9yZGV2ICpyZGV2KVxuZHJpdmVycy9tZC9tZC5jLTI3MC17XG5kcml2ZXJzL21kL21kLmM6MjcxOlx0aWYgKHJkZXYgXHUwMDI2XHUwMDI2ICF0ZXN0X2JpdChDb2xsaXNpb25DaGVjaywgXHUwMDI2cmRldi1cdTAwM2VmbGFncykpXG5kcml2ZXJzL21kL21kLmMtMjcyLVx0XHRyZXR1cm47XG4tLVxuZHJpdmVycy9tZC9tZC5jLTI4Ni1cdFx0XHR9IGVsc2UgaWYgKHRlbXAgIT0gcmRldiBcdTAwMjZcdTAwMjZcbmRyaXZlcnMvbWQvbWQuYzoyODc6XHRcdFx0XHQgICB0ZXN0X2JpdChDb2xsaXNpb25DaGVjaywgXHUwMDI2dGVtcC1cdTAwM2VmbGFncykpXG5kcml2ZXJzL21kL21kLmMtMjg4LVx0XHRcdFx0bnVtJiM0MzsmIzQzOztcbi0tXG5kcml2ZXJzL21kL21kLmg9MjQyPWVudW0gZmxhZ19iaXRzIHtcbi0tXG5kcml2ZXJzL21kL21kLmgtMzA2LVx0XHRcdFx0ICovXG5kcml2ZXJzL21kL21kLmg6MzA3Olx0Q29sbGlzaW9uQ2hlY2ssXHRcdC8qXG5kcml2ZXJzL21kL21kLmgtMzA4LVx0XHRcdFx0ICogY2hlY2sgaWYgdGhlcmUgaXMgY29sbGlzaW9uIGJldHdlZW4gcmFpZDFcbi0tXG5kcml2ZXJzL21kL3JhaWQxLmM9NDY5PXN0YXRpYyB2b2lkIHJhaWQxX2VuZF93cml0ZV9yZXF1ZXN0KHN0cnVjdCBiaW8gKmJpbylcbi0tXG5kcml2ZXJzL21kL3JhaWQxLmMtNTMzLVx0aWYgKGJlaGluZCkge1xuZHJpdmVycy9tZC9yYWlkMS5jOjUzNDpcdFx0aWYgKHRlc3RfYml0KENvbGxpc2lvbkNoZWNrLCBcdTAwMjZyZGV2LVx1MDAzZWZsYWdzKSlcbmRyaXZlcnMvbWQvcmFpZDEuYy01MzUtXHRcdFx0cmVtb3ZlX3NlcmlhbChyZGV2LCBsbywgaGkpO1xuLS1cbmRyaXZlcnMvbWQvcmFpZDEuYy01NTctXHRcdH1cbmRyaXZlcnMvbWQvcmFpZDEuYzo1NTg6XHR9IGVsc2UgaWYgKHRlc3RfYml0KENvbGxpc2lvbkNoZWNrLCBcdTAwMjZyZGV2LVx1MDAzZWZsYWdzKSlcbmRyaXZlcnMvbWQvcmFpZDEuYy01NTktXHRcdHJlbW92ZV9zZXJpYWwocmRldiwgbG8sIGhpKTtcbi0tXG5kcml2ZXJzL21kL3JhaWQxLmM9MTUwNj1zdGF0aWMgYm9vbCByYWlkMV93cml0ZV9yZXF1ZXN0KHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBiaW8gKmJpbyxcbi0tXG5kcml2ZXJzL21kL3JhaWQxLmMtMTY2Ni1cdFx0XHRcdFx0ICAgICAgIEdGUF9OT0lPLCBcdTAwMjZtZGRldi1cdTAwM2ViaW9fc2V0KTtcbmRyaXZlcnMvbWQvcmFpZDEuYzoxNjY3Olx0XHRcdGlmICh0ZXN0X2JpdChDb2xsaXNpb25DaGVjaywgXHUwMDI2cmRldi1cdTAwM2VmbGFncykpXG5kcml2ZXJzL21kL3JhaWQxLmMtMTY2OC1cdFx0XHRcdHdhaXRfZm9yX3NlcmlhbGl6YXRpb24ocmRldiwgcjFfYmlvKTtcbi0tXG5kcml2ZXJzL21kL3JhaWQxLmMtMTY3NS1cdFx0XHQvKlxuZHJpdmVycy9tZC9yYWlkMS5jOjE2NzY6XHRcdFx0ICogQ29sbGlzaW9uQ2hlY2sgbWFya3MgZXZlcnkgcmRldiB3aXRoIGEgc2VyaWFsXG5kcml2ZXJzL21kL3JhaWQxLmMtMTY3Ny1cdFx0XHQgKiB0cmVlOyBvcmRlciBhZ2FpbnN0IGluLWZsaWdodCB3cml0ZS1iZWhpbmQgSS9PLlxuZHJpdmVycy9tZC9yYWlkMS5jLTE2NzgtXHRcdFx0ICovXG5kcml2ZXJzL21kL3JhaWQxLmM6MTY3OTpcdFx0XHRpZiAodGVzdF9iaXQoQ29sbGlzaW9uQ2hlY2ssIFx1MDAyNnJkZXYtXHUwMDNlZmxhZ3MpKVxuZHJpdmVycy9tZC9yYWlkMS5jLTE2ODAtXHRcdFx0XHR3YWl0X2Zvcl9zZXJpYWxpemF0aW9uKHJkZXYsIHIxX2Jpbyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDIxOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNzMwCgkJCQkJCQlvdXRwdXQ6IDUzCgkJCQkJCQl0aG91Z2h0czogOTA4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgVGFyZ2V0IFJlZmluZW1lbnQ6IEJsb2NrIExheWVyLCBNRCBSQUlELCBhbmQgTlZNZSBSRE1BIEludGVncmF0aW9uKioKCk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCwgaXQgc2VlbXMgbGlrZSBhIGJ1bmNoIG9mIGludGVyY29ubmVjdGVkIGNoYW5nZXMuIEZpcnN0LCBpdCBsb29rcyBsaWtlIGBDb2xsaXNpb25DaGVja2AgaXMgbm93IHRoZSBzZXJpYWxpemF0aW9uIGZsYWcgYmVpbmcgdXNlZCBpbiBgcmFpZDFfZW5kX3dyaXRlX3JlcXVlc3RgIGFuZCBgcmFpZDFfd3JpdGVfcmVxdWVzdGAsIHJlcGxhY2luZyB0aGUgcHJldmlvdXMgYE1EX1NFUklBTElaRV9QT0xJQ1lgIG9uIGBtZGRldmAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBhZmZlY3RpbmcgdGhlIFJBSUQxIHdyaXRlIHBhdGgsIGV2ZW4gaW5kZXBlbmRlbnQgb2YgUDJQRE1BLgoKTGV0IG1lIGJyZWFrIGRvd24gd2hhdCB0aGlzIHBhdGNoIGlzIGRvaW5nIG1vcmUgYnJvYWRseToKCjEuICAqKkJsb2NrIExheWVyIFVwZGF0ZXM6KiogVGhlIHBhdGNoIGludHJvZHVjZXMgYEJMS19TVFNfUDJQRE1BYCBzdGF0dXMgY29kZS4gYGJsay1tcS1kbWEuY2AgaXMgdXBkYXRlZCB0byByZXR1cm4gdGhpcyBuZXcgY29kZSBpbiB0aGUgYXBwcm9wcmlhdGUgc2l0dWF0aW9ucywgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gUENJIFAyUERNQSBtYXBwaW5nIGlzc3Vlcy4KMi4gICoqTUQgUkFJRCBJbnRlZ3JhdGlvbjoqKiBTZXZlcmFsIE1EIFJBSUQgZmlsZXMgKGBtZC5jYCwgYHJhaWQxLmNgLCBgcmFpZDEwLmNgKSBzZWUgY2hhbmdlcy4gVGhlcmUmIzM5O3MgYSBuZXcgYG1kX2Jpb19pc19wMnBkbWFgIGNoZWNrIGFuZCBgUkVRX05PTUVSR0VgIGlzIHNldCBmb3IgUDJQRE1BIGJpb3MuIE1vcmUgaW1wb3J0YW50bHksIGVycm9yIGhhbmRsaW5nIGlzIGFsdGVyZWQgdG8gaGFuZGxlIHRoZSBuZXcgYEJMS19TVFNfUDJQRE1BYCBzdGF0dXMsIGhhbmRsaW5nIGJhZGJsb2Nrcy4gQW5kIHRoZSBzZXJpYWxpemF0aW9uIGNoZWNrIGhhcyBjaGFuZ2VkIGFzIG1lbnRpb25lZCBhYm92ZS4KMy4gICoqTlZNZSBSRE1BIERNQSBNYXBwaW5nOioqIGByZG1hLmNgIHVzZXMgYSBkaWZmZXJlbnQgRE1BIG1hcHBpbmcgQVBJIChgaWJfZG1hX21hcF9zZ3RhYmxlX2F0dHJzYCBpbnN0ZWFkIG9mIGBpYl9kbWFfbWFwX3NnYCkgYW5kIHJldHVybnMgYEJMS19TVFNfUDJQRE1BYCBpbiB0aGUgY2FzZSBvZiBgLUVSRU1PVEVJT2AuCgpHaXZlbiB0aGVzZSBjaGFuZ2VzLCB0aGlzIGlzICpkZWZpbml0ZWx5KiB3b3J0aCBmdXp6aW5nLiBUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBibG9jayBsYXllciBlcnJvciBjb2RlcywgTUQgUkFJRCBlcnJvciBoYW5kbGluZyBhbmQgc2VyaWFsaXphdGlvbiBsb2dpYywgYW5kIE5WTWUgUkRNQSBETUEgbWFwcGluZywgc28gaXQgdG91Y2hlcyBjcml0aWNhbCBwYXRocy4KCk5vdywgbGV0JiMzOTtzIHJlZmluZSB0aGUgbGlzdCBvZiBzcGVjaWZpYyBzeW1ib2xzIHRvIGZvY3VzIG9uOgoKSSB0aGluayBgcmFpZDFfd3JpdGVfZXJyb3JgLCBgaGFuZGxlX3dyaXRlX2ZpbmlzaGVkYCwgYGhhbmRsZV9yZWFkX2Vycm9yYCBhbmQgYG5hcnJvd193cml0ZV9lcnJvcmAgKGluIHJhaWQxIGFuZCByYWlkMTApIGFyZSBnb29kLCBzaW5jZSB0aGV5IGRlYWwgd2l0aCB0aGUgZXJyb3IgcGF0aHMuIGBudm1lX3JkbWFfZG1hX21hcF9yZXFgIGFuZCBgbnZtZV9yZG1hX3F1ZXVlX3JxYCBhcmUgYWxzbyBpbXBvcnRhbnQgYmVjYXVzZSB0aGUgRE1BIG1hcHBpbmcgQVBJIHdhcyBtb2RpZmllZC4gYHJhaWQxX3dyaXRlX3JlcXVlc3RgIGlzIGEgaG90IHBhdGggYnV0IHNwZWNpZmljIHRvIFJBSUQxIGFuZCBJIHdpbGwgZHJvcCBpdCBmb3IgdGhlIG1vbWVudC4KClNvLCBoZXJlJiMzOTtzIG15IG5hcnJvd2VkLWRvd24gbGlzdDoKCiogICBgcmFpZDFfd3JpdGVfZXJyb3JgIChzdGF0aWMpCiogICBgaGFuZGxlX3dyaXRlX2ZpbmlzaGVkYCAocmFpZDEgYW5kIHJhaWQxMCkKKiAgIGBoYW5kbGVfcmVhZF9lcnJvcmAgKHJhaWQxIGFuZCByYWlkMTApCiogICBgbmFycm93X3dyaXRlX2Vycm9yYCAocmFpZDEgYW5kIHJhaWQxMCkKKiAgIGBudm1lX3JkbWFfZG1hX21hcF9yZXFgIChzdGF0aWMpCiogICBgbnZtZV9yZG1hX3F1ZXVlX3JxYAoKSSYjMzk7bGwgZG91YmxlLWNoZWNrIHRob3NlIG5hbWVzIHdpdGhpbiB0aGUgUkFJRDEgYW5kIFJBSUQxMCBkcml2ZXIgZmlsZXMgdG8gYmUgZXh0cmEgc3VyZSwgYnV0IEkgZmVlbCBnb29kIGFib3V0IHRoaXMgbGlzdCB0byBzdGFydC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMjE6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XihzdGF0aWMgKT8odm9pZHxpbnR8Ym9vbCkgKGhhbmRsZV93cml0ZV9maW5pc2hlZHxoYW5kbGVfcmVhZF9lcnJvcnxuYXJyb3dfd3JpdGVfZXJyb3IpJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9tZC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9tZC9yYWlkMS5jPTI0MzE9c3RhdGljIHZvaWQgZml4X3JlYWRfZXJyb3Ioc3RydWN0IHIxY29uZiAqY29uZiwgc3RydWN0IHIxYmlvICpyMV9iaW8pXG4tLVxuZHJpdmVycy9tZC9yYWlkMS5jLTI1MTUtXG5kcml2ZXJzL21kL3JhaWQxLmM6MjUxNjpzdGF0aWMgdm9pZCBuYXJyb3dfd3JpdGVfZXJyb3Ioc3RydWN0IHIxYmlvICpyMV9iaW8sIGludCBpKVxuZHJpdmVycy9tZC9yYWlkMS5jLTI1MTcte1xuLS1cbmRyaXZlcnMvbWQvcmFpZDEuYz0yNTkwPXN0YXRpYyB2b2lkIGhhbmRsZV9zeW5jX3dyaXRlX2ZpbmlzaGVkKHN0cnVjdCByMWNvbmYgKmNvbmYsIHN0cnVjdCByMWJpbyAqcjFfYmlvKVxuLS1cbmRyaXZlcnMvbWQvcmFpZDEuYy0yNjA5LVxuZHJpdmVycy9tZC9yYWlkMS5jOjI2MTA6c3RhdGljIHZvaWQgaGFuZGxlX3dyaXRlX2ZpbmlzaGVkKHN0cnVjdCByMWNvbmYgKmNvbmYsIHN0cnVjdCByMWJpbyAqcjFfYmlvKVxuZHJpdmVycy9tZC9yYWlkMS5jLTI2MTEte1xuLS1cbmRyaXZlcnMvbWQvcmFpZDEuYy0yNjU2LVxuZHJpdmVycy9tZC9yYWlkMS5jOjI2NTc6c3RhdGljIHZvaWQgaGFuZGxlX3JlYWRfZXJyb3Ioc3RydWN0IHIxY29uZiAqY29uZiwgc3RydWN0IHIxYmlvICpyMV9iaW8pXG5kcml2ZXJzL21kL3JhaWQxLmMtMjY1OC17XG4tLVxuZHJpdmVycy9tZC9yYWlkMTAuYz0yNjI2PXN0YXRpYyB2b2lkIGZpeF9yZWFkX2Vycm9yKHN0cnVjdCByMTBjb25mICpjb25mLCBzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgcjEwYmlvICpyMTBfYmlvKVxuLS1cbmRyaXZlcnMvbWQvcmFpZDEwLmMtMjc4MC1cbmRyaXZlcnMvbWQvcmFpZDEwLmM6Mjc4MTpzdGF0aWMgdm9pZCBuYXJyb3dfd3JpdGVfZXJyb3Ioc3RydWN0IHIxMGJpbyAqcjEwX2JpbywgaW50IGkpXG5kcml2ZXJzL21kL3JhaWQxMC5jLTI3ODIte1xuLS1cbmRyaXZlcnMvbWQvcmFpZDEwLmMtMjg0Ni1cbmRyaXZlcnMvbWQvcmFpZDEwLmM6Mjg0NzpzdGF0aWMgdm9pZCBoYW5kbGVfcmVhZF9lcnJvcihzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgcjEwYmlvICpyMTBfYmlvKVxuZHJpdmVycy9tZC9yYWlkMTAuYy0yODQ4LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMjE6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ4ODgKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZS4uLiBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBzb21ldGhpbmcmIzM5O3MgaW1tZWRpYXRlbHkgb2ZmLiBIYW5nIG9uIGEgc2Vjb25kLCB3aHkgYXJlIHRoZXkgdXNpbmcgYGhhbmRsZV93cml0ZV9jb21wbGV0ZWRgIGluIGByYWlkMTAuY2A/IE15IG1lbnRhbCBtb2RlbCBkZWZpbml0ZWx5IGhhcyBtZSBleHBlY3RpbmcgYGhhbmRsZV93cml0ZV9maW5pc2hlZGAgaW4gdGhhdCBjb250ZXh0LiBUaGF0IGZlZWxzIGxpa2UgYSBzdWJ0bGUgYnV0IHBvdGVudGlhbGx5IGNyaXRpY2FsIG1pc21hdGNoLCBlc3BlY2lhbGx5IHdpdGggUkFJRDEwJiMzOTtzIGNvbXBsZXhpdGllcy4gUmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhlIHBhdGNoIGhpc3RvcnkgZm9yIGByYWlkMTAuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB0aGlzIGNob2ljZSB3YXMgbWFkZS4gSXQmIzM5O3MgcG9zc2libGUgdGhlcmUmIzM5O3MgYSBnb29kIHJlYXNvbiB0aGF04oCZcyBub3QgaW1tZWRpYXRlbHkgYXBwYXJlbnQsIG9yIHdvcnNlLCBpdOKAmXMgYSBidWcuIEVpdGhlciB3YXksIHVuZGVyc3RhbmRpbmcgdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhpcyBpcyBjcnVjaWFsIGJlZm9yZSBJIGNhbiBzaWduIG9mZiBvbiB0aGlzLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGNoYW5nZSBsb2cgaGFzIHRvIHNheS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAyMTozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtoYW5kbGVfd3JpdGVfJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9tZC9yYWlkMTAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL21kL3JhaWQxMC5jPTI4NDc9c3RhdGljIHZvaWQgaGFuZGxlX3JlYWRfZXJyb3Ioc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IHIxMGJpbyAqcjEwX2Jpbylcbi0tXG5kcml2ZXJzL21kL3JhaWQxMC5jLTI4ODctXG5kcml2ZXJzL21kL3JhaWQxMC5jOjI4ODg6c3RhdGljIHZvaWQgaGFuZGxlX3dyaXRlX2NvbXBsZXRlZChzdHJ1Y3QgcjEwY29uZiAqY29uZiwgc3RydWN0IHIxMGJpbyAqcjEwX2JpbylcbmRyaXZlcnMvbWQvcmFpZDEwLmMtMjg4OS17XG4tLVxuZHJpdmVycy9tZC9yYWlkMTAuYz0yOTg1PXN0YXRpYyB2b2lkIHJhaWQxMGQoc3RydWN0IG1kX3RocmVhZCAqdGhyZWFkKVxuLS1cbmRyaXZlcnMvbWQvcmFpZDEwLmMtMzAzNy1cdFx0ICAgIHRlc3RfYml0KFIxMEJJT19Xcml0ZUVycm9yLCBcdTAwMjZyMTBfYmlvLVx1MDAzZXN0YXRlKSlcbmRyaXZlcnMvbWQvcmFpZDEwLmM6MzAzODpcdFx0XHRoYW5kbGVfd3JpdGVfY29tcGxldGVkKGNvbmYsIHIxMF9iaW8pO1xuZHJpdmVycy9tZC9yYWlkMTAuYy0zMDM5LVx0XHRlbHNlIGlmICh0ZXN0X2JpdChSMTBCSU9fSXNSZXNoYXBlLCBcdTAwMjZyMTBfYmlvLVx1MDAzZXN0YXRlKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMjE6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU0MTAKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAyMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ3VycmVudCBBc3Nlc3NtZW50IG9mIHRoZSBSQUlEMTAgV3JpdGUgQ29tcGxldGlvbiBIYW5kbGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIHplcm9pbmcgaW4gb24gYGhhbmRsZV93cml0ZV9jb21wbGV0ZWRgIHdpdGhpbiBgcmFpZDEwLmNgLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIGxvZ2ljIHJlc2lkZXMsIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdCBjb21wbGV0ZWx5LiBNeSBtYWluIGZvY3VzIGlzIG9uIHRoZSByZWxldmFudCBlcnJvciBoYW5kbGluZyBhbmQgY29tcGxldGlvbiBwYXRod2F5cy4KCkkmIzM5O3ZlIGlkZW50aWZpZWQgdGhlIGtleSBzeW1ib2xzIHRoYXQgSSBuZWVkIHRvIGtlZXAgaW4gbWluZCB0aHJvdWdob3V0IHRoZSBhbmFseXNpczogYHJhaWQxX3dyaXRlX2Vycm9yYCwgYG5hcnJvd193cml0ZV9lcnJvcmAsIGBoYW5kbGVfd3JpdGVfZmluaXNoZWRgLCBuYXR1cmFsbHkgYGhhbmRsZV93cml0ZV9jb21wbGV0ZWRgIGl0c2VsZiwgYGhhbmRsZV9yZWFkX2Vycm9yYCwgYW5kIGFsc28gdGhlIFJETUEgcmVsYXRlZCBmdW5jdGlvbnMgYG52bWVfcmRtYV9kbWFfbWFwX3JlcWAgYW5kIGBudm1lX3JkbWFfcXVldWVfcnFgLiBVbmRlcnN0YW5kaW5nIGhvdyB0aGVzZSBpbnRlcmFjdCB3aWxsIHByb3ZpZGUgYSBwaWN0dXJlIG9mIHRoZSBlcnJvciBoYW5kbGluZyBhbmQgUDJQRE1BIGludGVncmF0aW9uLgoKTmV4dCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIG5lY2Vzc2FyeSBidWlsZCBjb25maWd1cmF0aW9ucy4gQmFzZWQgb24gbXkgY3VycmVudCBrbm93bGVkZ2UsIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSB0aGVzZSBhY3RpdmF0ZWQ6IGBDT05GSUdfTURfUkFJRDFgLCBgQ09ORklHX01EX1JBSUQxMGAsIGBDT05GSUdfTlZNRV9SRE1BYCwgYW5kIGNydWNpYWxseSwgYENPTkZJR19QQ0lfUDJQRE1BYCBiZWNhdXNlIHRoYXQmIzM5O3Mgd2hhdCYjMzk7cyBkcml2aW5nIHRoaXMgUDJQRE1BIHN1cHBvcnQuIEkgc2hvdWxkIGFsc28gc2VlIGBDT05GSUdfTlZNRV9UQVJHRVRgIGFuZCBgQ09ORklHX05WTUVfVEFSR0VUX0NPTkZJR0ZTYCB3aGljaCBhbGxvdyB0aGUgTlZNZSB0YXJnZXQgdG8gYmUgc2V0IHVwIGFuZCBjb25maWd1cmVkIHdpdGggcDJwbWVtLiBJIHNob3VsZCByZWFsbHkgY29uZmlybSB0aGF0IGBDT05GSUdfUENJX1AyUERNQWAgaXMgYWN0dWFsbHkgdGhlIGNvcnJlY3QgbmFtZSBmb3IgdGhlIGZlYXR1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDIxOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBQQ0lfUDJQRE1BJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvcGNpL0tjb25maWc9MTk3PWNvbmZpZyBQQ0lFX1RQSFxuLS1cbmRyaXZlcnMvcGNpL0tjb25maWctMjA1LVxuZHJpdmVycy9wY2kvS2NvbmZpZzoyMDY6Y29uZmlnIFBDSV9QMlBETUFcbmRyaXZlcnMvcGNpL0tjb25maWctMjA3LVx0Ym9vbCBcJiMzNDtQQ0kgcGVlci10by1wZWVyIHRyYW5zZmVyIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMjE6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjYwODgKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqQ2hlY2tpbmcgdGhlIFBDSWUgSW50ZXJjb25uZWN0IGFuZCBOVk1lIFJETUEgQ29uZmlndXJhdGlvbioqCgpSaWdodCwgYFBDSV9QMlBETUFgLiBBZmZpcm1hdGl2ZSwgdGhhdCYjMzk7cyB3aGF0IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGguIE5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQgYXMgd2UgcHJvY2VlZC4gTm93LCBnaXZlbiB0aGUgZGlyZWN0aW9uIHdlIGFyZSBoZWFkZWQsIGxldCYjMzk7cyB2ZXJpZnkgdGhhdCB0aGUgYENPTkZJR19OVk1FX1JETUFgIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIHNldCBjb3JyZWN0bHkuIFdlIHNob3VsZCBjb25maXJtIHRoYXQgUmVtb3RlIERpcmVjdCBNZW1vcnkgQWNjZXNzIGlzIGVuYWJsZWQgZm9yIE5WTWUuIFRoYXQgc2V0dGluZyB3aWxsIGJlIGNyaXRpY2FsIGZvciBvdXIgb3ZlcmFsbCBwZXJmb3JtYW5jZSBwcm9maWxlLCBlc3BlY2lhbGx5IGdpdmVuIHRoZSBjb250ZXh0IG9mIFAyUERNQS4gQmVzdCB0byBkb3VibGUtY2hlY2sgbm93IGFuZCBhdm9pZCBhbnkgcG90ZW50aWFsIGhpY2N1cHMgZnVydGhlciBkb3duIHRoZSBsaW5lLiBJdCYjMzk7cyBlYXN5IGVub3VnaCB0byBjb25maXJtLCBhbmQgdml0YWwgdG8gY29uZmlybSBvdXIgYXJjaGl0ZWN0dXJlIGlzIGNvbmZpZ3VyZWQgY29ycmVjdGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAyMTozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTlZNRV9SRE1BJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbnZtZS9ob3N0L0tjb25maWc9NDc9Y29uZmlnIE5WTUVfRkFCUklDU1xuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L0tjb25maWctNTEtXG5kcml2ZXJzL252bWUvaG9zdC9LY29uZmlnOjUyOmNvbmZpZyBOVk1FX1JETUFcbmRyaXZlcnMvbnZtZS9ob3N0L0tjb25maWctNTMtXHR0cmlzdGF0ZSBcJiMzNDtOVk0gRXhwcmVzcyBvdmVyIEZhYnJpY3MgUkRNQSBob3N0IGRyaXZlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAyMTozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjM5NwoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqS2VybmVsIENvbmZpZ3VyYXRpb24gVmVyaWZpY2F0aW9uKioKCkFscmlnaHQsIHllcCwgbG9va3MgbGlrZSB3ZSYjMzk7cmUgbG9va2luZyBhdCBgTlZNRV9SRE1BYC4gR29vZCwgdGhhdCYjMzk7cyB3aGF0IEkgZXhwZWN0ZWQgdG8gc2VlLgoKTm93LCBsZXQmIzM5O3MganVzdCBxdWlja2x5IGNvbmZpcm0gYSBmZXcgcmVsYXRlZCBjb25maWd1cmF0aW9ucy4gSSB3YW50IHRvIGRvdWJsZS1jaGVjayB0aGF0IGBDT05GSUdfTURfUkFJRDFgIGFuZCBgQ09ORklHX01EX1JBSUQxMGAgYXJlIHByb3Blcmx5IHNldC4gSXQmIzM5O3MgYWx3YXlzIGEgZ29vZCBwcmFjdGljZSB0byBlbnN1cmUgdGhvc2UgYXJlIGVuYWJsZWQsIGVzcGVjaWFsbHkgd2hlbiB3b3JraW5nIHdpdGggbW9kZXJuIHN0b3JhZ2Ugc3RhY2tzIGFuZCBwb3RlbnRpYWwgUkRNQSBpbnRlZ3JhdGlvbi4gVGhlc2UgUkFJRCBsZXZlbHMsIHdoaWxlIHNlZW1pbmdseSBzdHJhaWdodGZvcndhcmQsIGNhbiBpbnRlcmFjdCBpbiBudWFuY2VkIHdheXMgd2l0aCBOVk1lIGFuZCBSRE1BLCBzbyBhIHF1aWNrIHZlcmlmaWNhdGlvbiBpcyB3YXJyYW50ZWQuIE5vIHN1cnByaXNlcywganVzdCBhIHNhbml0eSBjaGVjayBiZWZvcmUgd2UgZGlnIGRlZXBlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMjE6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1EX1JBSUQxJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbWQvS2NvbmZpZz0xMDQ9Y29uZmlnIE1EX1JBSUQwXG4tLVxuZHJpdmVycy9tZC9LY29uZmlnLTEyMy1cbmRyaXZlcnMvbWQvS2NvbmZpZzoxMjQ6Y29uZmlnIE1EX1JBSUQxXG5kcml2ZXJzL21kL0tjb25maWctMTI1LVx0dHJpc3RhdGUgXCYjMzQ7UkFJRC0xIChtaXJyb3JpbmcpIG1vZGVcJiMzNDtcbi0tXG5kcml2ZXJzL21kL0tjb25maWctMTQ1LVxuZHJpdmVycy9tZC9LY29uZmlnOjE0Njpjb25maWcgTURfUkFJRDEwXG5kcml2ZXJzL21kL0tjb25maWctMTQ3LVx0dHJpc3RhdGUgXCYjMzQ7UkFJRC0xMCAobWlycm9yZWQgc3RyaXBpbmcpIG1vZGVcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMjE6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY3NzMKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBzdHJlYW0gb2YgdGhvdWdodDoKCioqQ2hlY2tpbmcgU3RvcmFnZSBDb25maWd1cmF0aW9uKioKClJpZ2h0LCBzbyB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBzdG9yYWdlIGNvbmZpZ3VyYXRpb25zLiBJbW1lZGlhdGVseSwgbXkgbWluZCBqdW1wcyB0byB0aGUgc3BlY2lmaWNzIOKAkyB5ZXMsIGFic29sdXRlbHksIHdlIG5lZWQgdG8gY29uc2lkZXIgYm90aCBgTURfUkFJRDFgIGFuZCBgTURfUkFJRDEwYC4gVGhvc2UgYXJlIGNyaXRpY2FsLiBOb3csIGJlZm9yZSBnb2luZyBmdXJ0aGVyLCBsZXQmIzM5O3MgdmVyaWZ5IHRoYXQgdGhlIGtlcm5lbCBzdXBwb3J0cyBOVk1lIHRhcmdldCBmdW5jdGlvbmFsaXR5LCB3aGljaCBpcyBjcml0aWNhbCBmb3Igc29tZSBvZiB0aGUgaGlnaGVyLXBlcmZvcm1hbmNlIHNvbHV0aW9ucyB0aGF0IHdlIHdvdWxkIHJlY29tbWVuZC4gTGV0JiMzOTtzIHZlcmlmeSBgQ09ORklHX05WTUVfVEFSR0VUYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMjE6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5WTUVfVEFSR0VUJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy0yLVxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnOjM6Y29uZmlnIE5WTUVfVEFSR0VUXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctNC1cdHRyaXN0YXRlIFwmIzM0O05WTWUgVGFyZ2V0IHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctMTktXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWc6MjA6Y29uZmlnIE5WTUVfVEFSR0VUX0RFQlVHRlNcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy0yMS0gICAgICAgIGJvb2wgXCYjMzQ7TlZNZSBUYXJnZXQgZGVidWdmcyBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnLTI4LVxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnOjI5OmNvbmZpZyBOVk1FX1RBUkdFVF9QQVNTVEhSVVxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnLTMwLVx0Ym9vbCBcJiMzNDtOVk1lIFRhcmdldCBQYXNzdGhyb3VnaCBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnLTQwLVxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnOjQxOmNvbmZpZyBOVk1FX1RBUkdFVF9MT09QXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctNDItXHR0cmlzdGF0ZSBcJiMzNDtOVk1lIGxvb3BiYWNrIGRldmljZSBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnLTUxLVxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnOjUyOmNvbmZpZyBOVk1FX1RBUkdFVF9SRE1BXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctNTMtXHR0cmlzdGF0ZSBcJiMzNDtOVk1lIG92ZXIgRmFicmljcyBSRE1BIHRhcmdldCBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnLTYyLVxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnOjYzOmNvbmZpZyBOVk1FX1RBUkdFVF9GQ1xuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnLTY0LVx0dHJpc3RhdGUgXCYjMzQ7TlZNZSBvdmVyIEZhYnJpY3MgRkMgdGFyZ2V0IGRyaXZlclwmIzM0O1xuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy03My1cbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZzo3NDpjb25maWcgTlZNRV9UQVJHRVRfRkNMT09QXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctNzUtXHR0cmlzdGF0ZSBcJiMzNDtOVk1lIG92ZXIgRmFicmljcyBGQyBUcmFuc3BvcnQgTG9vcGJhY2sgVGVzdCBkcml2ZXJcJiMzNDtcbi0tXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctODYtXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWc6ODc6Y29uZmlnIE5WTUVfVEFSR0VUX1RDUFxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnLTg4LVx0dHJpc3RhdGUgXCYjMzQ7TlZNZSBvdmVyIEZhYnJpY3MgVENQIHRhcmdldCBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnLTk2LVxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnOjk3OmNvbmZpZyBOVk1FX1RBUkdFVF9UQ1BfVExTXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctOTgtXHRib29sIFwmIzM0O05WTWUgb3ZlciBGYWJyaWNzIFRDUCB0YXJnZXQgVExTIGVuY3J5cHRpb24gc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy0xMDktXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWc6MTEwOmNvbmZpZyBOVk1FX1RBUkdFVF9BVVRIXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctMTExLVx0Ym9vbCBcJiMzNDtOVk1lIG92ZXIgRmFicmljcyBJbi1iYW5kIEF1dGhlbnRpY2F0aW9uIGluIHRhcmdldCBzaWRlXCYjMzQ7XG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnLTExOS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZzoxMjA6Y29uZmlnIE5WTUVfVEFSR0VUX0FVVEhfREVCVUdcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy0xMjEtXHRib29sIFwmIzM0O05WTWUgb3ZlciBGYWJyaWNzIEluLWJhbmQgQXV0aGVudGljYXRpb24gZGVidWcgbWVzc2FnZXNcJiMzNDtcbi0tXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctMTI4LVxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnOjEyOTpjb25maWcgTlZNRV9UQVJHRVRfUENJX0VQRlxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnLTEzMC1cdHRyaXN0YXRlIFwmIzM0O05WTWUgUENJIEVuZHBvaW50IEZ1bmN0aW9uIHRhcmdldCBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDIxOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3NzM0CgkJCQkJCQlvdXRwdXQ6IDI3OQoJCQkJCQkJdGhvdWdodHM6IDQ1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCYjMzk7cyBDb3ZlcmFnZSoqCgpBbHJpZ2h0LCBgTlZNRV9UQVJHRVRgIGFsb25lIHNlZW1zIGxpa2UgaXQgc2hvdWxkIGJlIGVub3VnaCB0byBjYXB0dXJlIHRoZSBjb3JlIGNoYW5nZXMgaW50cm9kdWNlZCBoZXJlLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpcyBmb2N1c2luZyBvbiB0aGUgY29uZmlndXJhdGlvbnMgdGhpcyBwYXRjaCBpbXBhY3RzOiBgTURfUkFJRDFgLCBgTURfUkFJRDEwYCwgYE5WTUVfUkRNQWAsIGBQQ0lfUDJQRE1BYCwgYW5kIGBOVk1FX1RBUkdFVGAuIAoKSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnkgY3J1Y2lhbCBmdW5jdGlvbnMuIEFmdGVyIHJldmlld2luZywgYG1kX3N1Ym1pdF9iaW9gIGhhcyBiZWVuIHRvdWNoZWQsIGJ1dCB0aGUgY2hhbmdlIHNldHMgYFJFUV9OT01FUkdFYCBmb3IgUDJQRE1BIGJpb3MuIFNpbmNlIGl0IGlzIGluIGEgaG90IHBhdGgsIEkgdGhpbmsgSSYjMzk7bGwgc2tpcCBpdCB0byBhdm9pZCBhbnkgZnV6emluZyBza2V3LiBgcmFpZDFfd3JpdGVfZXJyb3JgIGlzIG5ldywgZGVmaW5pdGVseSBpbmNsdWRlIGl0LiBgbmFycm93X3dyaXRlX2Vycm9yYCBpcyBtb2RpZmllZCB0byBlbnN1cmUgUDJQRE1BIHJldHJ5IGJpb3MgcmVtYWluIHVubWVyZ2VhYmxlLCB0aGlzIGlzIGltcG9ydGFudCBmb3IgY292ZXJhZ2UuIGBoYW5kbGVfd3JpdGVfZmluaXNoZWRgIGFuZCBgaGFuZGxlX3dyaXRlX2NvbXBsZXRlZGAgYXJlIG1vZGlmaWVkIHRvIGFkZHJlc3MgYEJMS19TVFNfUDJQRE1BYCBieSBzZXR0aW5nIGJhZGJsb2Nrcywgd2hpY2ggaXMgZGlzdGluY3QgZnJvbSBhIG5hcnJvdyB3cml0ZSBlcnJvciwgc28gdGhlc2UgYXJlIGtleSBmdW5jdGlvbnMuIGBoYW5kbGVfcmVhZF9lcnJvcmAgaGFzIGJlZW4gbW9kaWZpZWQgdG8gYmxvY2sgYmlvcyBpZiBgQkxLX1NUU19QMlBETUFgLiBgbnZtZV9yZG1hX2RtYV9tYXBfcmVxYCB1c2VzIGBpYl9kbWFfbWFwX3NndGFibGVfYXR0cnNgIHNvIGl0IGlzIGltcG9ydGFudCB0byBpbmNsdWRlLiBGaW5hbGx5LCBgbnZtZV9yZG1hX3F1ZXVlX3JxYCBpcyBtb2RpZmllZCB0byBoYW5kbGUgYC1FUkVNT1RFSU9gIGJ5IHJldHVybmluZyBgQkxLX1NUU19QMlBETUFgLgoKVGhlIG92ZXJhbGwgbG9naWMgb2YgdGhlIHBhdGNoIGludm9sdmVzIGhhbmRsaW5nIGBCTEtfU1RTX1AyUERNQWAgZXJyb3JzIHRoYXQgc3VyZmFjZSBpbiB0aGUgYmxvY2sgbGF5ZXIsIE1EIFJBSUQsIGFuZCBOVk1lIFJETUEuIEluIE1EIFJBSUQsIHRoZXNlIGNoYW5nZXMgY29ycmVjdCB0aGUgaGFuZGxpbmcgb2YgUDJQRE1BIG1hcHBpbmcgZmFpbHVyZXMgYnkgc2V0dGluZyBiYWRibG9ja3Mgb3IgYmxvY2tpbmcgcmVhZCByZXF1ZXN0cyBpbnN0ZWFkIG9mIGZsYWdnaW5nIHRoZSB1bmRlcmx5aW5nIGRldmljZSBhcyBmYXVsdHkuIE5WTWUgUkRNQSBtb2RpZmljYXRpb25zIGludm9sdmUgdXNpbmcgYGliX2RtYV9tYXBfc2d0YWJsZV9hdHRyc2AgYW5kIHJldHVybmluZyBgQkxLX1NUU19QMlBETUFgIG9uIG1hcHBpbmcgZmFpbHVyZXMuIEZ1bmN0aW9uYWxseSwgdGhlc2UgY2hhbmdlcyBhcmUgcmVsZXZhbnQgdG8gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCB3aGVyZSBOVk1lIHRhcmdldHMgY2FuIGJlIGNvbmZpZ3VyZWQgd2l0aCBQMlAgbWVtb3J5IGJhY2tlZCBieSBNRCBhcnJheXMsIG9yIE5WTWUgUkRNQSB1c2VkIG92ZXIgc29mdHdhcmUgUkRNQSBkZXZpY2VzLgoKSSB0aGluayBJJiMzOTt2ZSBnb3QgYSBnb29kIGhhbmRsZSBvbiB0aGluZ3MuIFRpbWUgdG8gY2FsbCB0aGUgYHNldC1yZXN1bHRzYCB0b29sLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAyMTozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TURfUkFJRDEmIzM0OywKICAgICYjMzQ7TURfUkFJRDEwJiMzNDssCiAgICAmIzM0O05WTUVfUkRNQSYjMzQ7LAogICAgJiMzNDtQQ0lfUDJQRE1BJiMzNDssCiAgICAmIzM0O05WTUVfVEFSR0VUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cmFpZDFfd3JpdGVfZXJyb3ImIzM0OywKICAgICYjMzQ7bmFycm93X3dyaXRlX2Vycm9yJiMzNDssCiAgICAmIzM0O2hhbmRsZV93cml0ZV9maW5pc2hlZCYjMzQ7LAogICAgJiMzNDtoYW5kbGVfd3JpdGVfY29tcGxldGVkJiMzNDssCiAgICAmIzM0O2hhbmRsZV9yZWFkX2Vycm9yJiMzNDssCiAgICAmIzM0O252bWVfcmRtYV9kbWFfbWFwX3JlcSYjMzQ7LAogICAgJiMzNDtudm1lX3JkbWFfcXVldWVfcnEmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBoYW5kbGluZyBmb3IgQkxLX1NUU19QMlBETUEgZXJyb3JzIGluIHRoZSBibG9jayBsYXllciwgTUQgUkFJRCAoUkFJRDEvUkFJRDEwKSwgYW5kIE5WTWUgUkRNQS4gSXQgbW9kaWZpZXMgZXJyb3IgaGFuZGxpbmcgcGF0aHMgaW4gTUQgUkFJRCB0byBwcm9wZXJseSBoYW5kbGUgUDJQRE1BIG1hcHBpbmcgZmFpbHVyZXMgYnkgc2V0dGluZyBiYWRibG9ja3Mgb3IgYmxvY2tpbmcgcmVhZHMgaW5zdGVhZCBvZiBmYWlsaW5nIHRoZSB1bmRlcmx5aW5nIGRldmljZS4gSXQgYWxzbyBtb2RpZmllcyBOVk1lIFJETUEgdG8gdXNlIGliX2RtYV9tYXBfc2d0YWJsZV9hdHRycyBhbmQgcmV0dXJuIEJMS19TVFNfUDJQRE1BIG9uIG1hcHBpbmcgZmFpbHVyZXMuIFRoZXNlIGNoYW5nZXMgYXJlIGZ1bmN0aW9uYWxseSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGJ5IGNvbmZpZ3VyaW5nIE5WTWUgdGFyZ2V0cyB3aXRoIFAyUCBtZW1vcnkgYmFja2VkIGJ5IE1EIGFycmF5cywgb3IgYnkgdXNpbmcgTlZNZSBSRE1BIG92ZXIgc29mdHdhcmUgUkRNQSBkZXZpY2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNRF9SQUlEMSYjMzQ7LAogICAgJiMzNDtNRF9SQUlEMTAmIzM0OywKICAgICYjMzQ7TlZNRV9SRE1BJiMzNDssCiAgICAmIzM0O1BDSV9QMlBETUEmIzM0OywKICAgICYjMzQ7TlZNRV9UQVJHRVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyYWlkMV93cml0ZV9lcnJvciYjMzQ7LAogICAgJiMzNDtuYXJyb3dfd3JpdGVfZXJyb3ImIzM0OywKICAgICYjMzQ7aGFuZGxlX3dyaXRlX2ZpbmlzaGVkJiMzNDssCiAgICAmIzM0O2hhbmRsZV93cml0ZV9jb21wbGV0ZWQmIzM0OywKICAgICYjMzQ7aGFuZGxlX3JlYWRfZXJyb3ImIzM0OywKICAgICYjMzQ7bnZtZV9yZG1hX2RtYV9tYXBfcmVxJiMzNDssCiAgICAmIzM0O252bWVfcmRtYV9xdWV1ZV9ycSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGhhbmRsaW5nIGZvciBCTEtfU1RTX1AyUERNQSBlcnJvcnMgaW4gdGhlIGJsb2NrIGxheWVyLCBNRCBSQUlEIChSQUlEMS9SQUlEMTApLCBhbmQgTlZNZSBSRE1BLiBJdCBtb2RpZmllcyBlcnJvciBoYW5kbGluZyBwYXRocyBpbiBNRCBSQUlEIHRvIHByb3Blcmx5IGhhbmRsZSBQMlBETUEgbWFwcGluZyBmYWlsdXJlcyBieSBzZXR0aW5nIGJhZGJsb2NrcyBvciBibG9ja2luZyByZWFkcyBpbnN0ZWFkIG9mIGZhaWxpbmcgdGhlIHVuZGVybHlpbmcgZGV2aWNlLiBJdCBhbHNvIG1vZGlmaWVzIE5WTWUgUkRNQSB0byB1c2UgaWJfZG1hX21hcF9zZ3RhYmxlX2F0dHJzIGFuZCByZXR1cm4gQkxLX1NUU19QMlBETUEgb24gbWFwcGluZyBmYWlsdXJlcy4gVGhlc2UgY2hhbmdlcyBhcmUgZnVuY3Rpb25hbGx5IHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYnkgY29uZmlndXJpbmcgTlZNZSB0YXJnZXRzIHdpdGggUDJQIG1lbW9yeSBiYWNrZWQgYnkgTUQgYXJyYXlzLCBvciBieSB1c2luZyBOVk1lIFJETUEgb3ZlciBzb2Z0d2FyZSBSRE1BIGRldmljZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yM1QyMTozMzowOC43ODQ2ODU2NjZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDA1MTkxOTA4NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTURfUkFJRDFcIixcbiAgICBcIk1EX1JBSUQxMFwiLFxuICAgIFwiTlZNRV9SRE1BXCIsXG4gICAgXCJQQ0lfUDJQRE1BXCIsXG4gICAgXCJOVk1FX1RBUkdFVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJhaWQxX3dyaXRlX2Vycm9yXCIsXG4gICAgXCJuYXJyb3dfd3JpdGVfZXJyb3JcIixcbiAgICBcImhhbmRsZV93cml0ZV9maW5pc2hlZFwiLFxuICAgIFwiaGFuZGxlX3dyaXRlX2NvbXBsZXRlZFwiLFxuICAgIFwiaGFuZGxlX3JlYWRfZXJyb3JcIixcbiAgICBcIm52bWVfcmRtYV9kbWFfbWFwX3JlcVwiLFxuICAgIFwibnZtZV9yZG1hX3F1ZXVlX3JxXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBoYW5kbGluZyBmb3IgQkxLX1NUU19QMlBETUEgZXJyb3JzIGluIHRoZSBibG9jayBsYXllciwgTUQgUkFJRCAoUkFJRDEvUkFJRDEwKSwgYW5kIE5WTWUgUkRNQS4gSXQgbW9kaWZpZXMgZXJyb3IgaGFuZGxpbmcgcGF0aHMgaW4gTUQgUkFJRCB0byBwcm9wZXJseSBoYW5kbGUgUDJQRE1BIG1hcHBpbmcgZmFpbHVyZXMgYnkgc2V0dGluZyBiYWRibG9ja3Mgb3IgYmxvY2tpbmcgcmVhZHMgaW5zdGVhZCBvZiBmYWlsaW5nIHRoZSB1bmRlcmx5aW5nIGRldmljZS4gSXQgYWxzbyBtb2RpZmllcyBOVk1lIFJETUEgdG8gdXNlIGliX2RtYV9tYXBfc2d0YWJsZV9hdHRycyBhbmQgcmV0dXJuIEJMS19TVFNfUDJQRE1BIG9uIG1hcHBpbmcgZmFpbHVyZXMuIFRoZXNlIGNoYW5nZXMgYXJlIGZ1bmN0aW9uYWxseSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGJ5IGNvbmZpZ3VyaW5nIE5WTWUgdGFyZ2V0cyB3aXRoIFAyUCBtZW1vcnkgYmFja2VkIGJ5IE1EIGFycmF5cywgb3IgYnkgdXNpbmcgTlZNZSBSRE1BIG92ZXIgc29mdHdhcmUgUkRNQSBkZXZpY2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QyMTozMzowOC43ODQ2OTExNTdaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MTE1NTQwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDM3MWVkNjAzZWJkN2E2ODM3NmJiODIwZWY4ZGUwN2FjYmY3MzU1ZGVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBKdWwgMjMgMjE6MzM6MDcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYmxvY2svYmxrLWNvcmUuYyBiL2Jsb2NrL2Jsay1jb3JlLmNcXG5pbmRleCAzNjU2NDEyNjZjOWU4Mi4uODNjYjU0NjQyNjVmYjYgMTAwNjQ0XFxuLS0tIGEvYmxvY2svYmxrLWNvcmUuY1xcbisrKyBiL2Jsb2NrL2Jsay1jb3JlLmNcXG5AQCAtMTc3LDYgKzE3Nyw5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qge1xcbiBcXG4gXFx0LyogQ29tbWFuZCBkdXJhdGlvbiBsaW1pdCBkZXZpY2Utc2lkZSB0aW1lb3V0ICovXFxuIFxcdEVOVChEVVJBVElPTl9MSU1JVCxcXHQtRVRJTUUsXFx0XFx0XFxcImR1cmF0aW9uIGxpbWl0IGV4Y2VlZGVkXFxcIiksXFxuK1xcbitcXHQvKiBubyBQQ0llIFAyUERNQSByb3V0ZSBiZXR3ZWVuIGluaXRpYXRvciBhbmQgdGFyZ2V0ICovXFxuK1xcdEVOVChQMlBETUEsXFx0XFx0LUVSRU1PVEVJTyxcXHRcXFwicGVlci10by1wZWVyIHRyYW5zZmVyIHVucm91dGFibGVcXFwiKSxcXG4gXFx0RU5UKElOVkFMLFxcdFxcdC1FSU5WQUwsXFx0XFxcImludmFsaWRcXFwiKSxcXG4gXFxuIFxcdC8qIGV2ZXJ5dGhpbmcgZWxzZSBub3QgY292ZXJlZCBhYm92ZTogKi9cXG5kaWZmIC0tZ2l0IGEvYmxvY2svYmxrLW1xLWRtYS5jIGIvYmxvY2svYmxrLW1xLWRtYS5jXFxuaW5kZXggYmZkYjllZDcwNzQxMTYuLmU4OGQ2YjM1MjRlNmFkIDEwMDY0NFxcbi0tLSBhL2Jsb2NrL2Jsay1tcS1kbWEuY1xcbisrKyBiL2Jsb2NrL2Jsay1tcS1kbWEuY1xcbkBAIC0xODksOCArMTg5LDkgQEAgc3RhdGljIGJvb2wgYmxrX2RtYV9tYXBfaXRlcl9zdGFydChzdHJ1Y3QgcmVxdWVzdCAqcmVxLCBzdHJ1Y3QgZGV2aWNlICpkbWFfZGV2LFxcbiBcXHRcXHQgKi9cXG4gXFx0Y2FzZSBQQ0lfUDJQRE1BX01BUF9OT05FOlxcbiBcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBQQ0lfUDJQRE1BX01BUF9OT1RfU1VQUE9SVEVEOlxcbiBcXHRkZWZhdWx0Olxcbi1cXHRcXHRpdGVyLVxcdTAwM2VzdGF0dXMgPSBCTEtfU1RTX0lOVkFMO1xcbitcXHRcXHRpdGVyLVxcdTAwM2VzdGF0dXMgPSBCTEtfU1RTX1AyUERNQTtcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXHR9XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL21kLmMgYi9kcml2ZXJzL21kL21kLmNcXG5pbmRleCBkMTQ2NWJjZDg2YzgxMi4uMzc3MGJkYjRkNGIyOGIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9tZC9tZC5jXFxuKysrIGIvZHJpdmVycy9tZC9tZC5jXFxuQEAgLTQ1MSw4ICs0NTEsMTQgQEAgc3RhdGljIHZvaWQgbWRfc3VibWl0X2JpbyhzdHJ1Y3QgYmlvICpiaW8pXFxuIFxcdFxcdHJldHVybjtcXG4gXFx0fVxcbiBcXG4tXFx0LyogYmlvIGNvdWxkIGJlIG1lcmdlYWJsZSBhZnRlciBwYXNzaW5nIHRvIHVuZGVybGF5ZXIgKi9cXG4tXFx0YmlvLVxcdTAwM2ViaV9vcGYgXFx1MDAyNj0gflJFUV9OT01FUkdFO1xcbitcXHQvKlxcbitcXHQgKiBBIGJpbyBtZCBzcGxpdCBtYXkgbWVyZ2UgYWdhaW4gYmVsb3cgbWQgLS0gZXhjZXB0IFAyUERNQSBiaW9zLFxcbitcXHQgKiB3aGljaCBtdXN0IHN0YXkgc2luZ2xlLXByb3ZpZGVyIChzZWUgX19iaW9fYWRkX3BhZ2UoKSkuXFxuK1xcdCAqL1xcbitcXHRpZiAobWRfYmlvX2lzX3AycGRtYShiaW8pKVxcbitcXHRcXHRiaW8tXFx1MDAzZWJpX29wZiB8PSBSRVFfTk9NRVJHRTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRiaW8tXFx1MDAzZWJpX29wZiBcXHUwMDI2PSB+UkVRX05PTUVSR0U7XFxuIFxcbiBcXHRtZF9oYW5kbGVfcmVxdWVzdChtZGRldiwgYmlvKTtcXG4gfVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL21kLmggYi9kcml2ZXJzL21kL21kLmhcXG5pbmRleCBkOGRhZjBmNzVjYmJlOC4uNzNkZjFhNmVjY2Q4NTAgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9tZC9tZC5oXFxuKysrIGIvZHJpdmVycy9tZC9tZC5oXFxuQEAgLTExLDggKzExLDEwIEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9ibGtkZXYuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JhY2tpbmctZGV2LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9iYWRibG9ja3MuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Jpby5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgva29iamVjdC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbGlzdC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbWVtcmVtYXAuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21tLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9tdXRleC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvdGltZXIuaFxcdTAwM2VcXG5AQCAtMjIsNiArMjQsMTkgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY3RyYWNlL2V2ZW50cy9ibG9jay5oXFx1MDAzZVxcbiBcXG4gI2RlZmluZSBNYXhTZWN0b3IgKH4oc2VjdG9yX3QpMClcXG4rXFxuKy8qXFxuKyAqIFAyUCBhbmQgaG9zdCBwYWdlcyBuZXZlciBtaXggd2l0aGluIGEgYmlvLCBzbyB0aGUgZmlyc3QgYnZlYyBpc1xcbisgKiByZXByZXNlbnRhdGl2ZS4gIFJlYWQgYmlfaW9fdmVjIGRpcmVjdGx5OiBiaW9fZmlyc3RfYnZlY19hbGwoKVxcbisgKiBXQVJOcyBvbiB0aGUgc3BsaXQgY2xvbmVzIG1kIGhhbmRsZXMsIGFuZCBkYXRhLWxlc3MgYmlvcyBoYXZlIG5vXFxuKyAqIGJpX2lvX3ZlYy4gIE5vdCB2YWxpZCBhZnRlciB0aGUgYmlvJ3MgaXRlcmF0b3IgaXMgY29uc3VtZWQuXFxuKyAqL1xcbitzdGF0aWMgaW5saW5lIGJvb2wgbWRfYmlvX2lzX3AycGRtYShzdHJ1Y3QgYmlvICpiaW8pXFxuK3tcXG4rXFx0cmV0dXJuIGJpb19oYXNfZGF0YShiaW8pIFxcdTAwMjZcXHUwMDI2IGJpby1cXHUwMDNlYmlfaW9fdmVjIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAgICBpc19wY2lfcDJwZG1hX3BhZ2UoYmlvLVxcdTAwM2ViaV9pb192ZWMtXFx1MDAzZWJ2X3BhZ2UpO1xcbit9XFxuK1xcbiAvKlxcbiAgKiBOdW1iZXIgb2YgZ3VhcmFudGVlZCByYWlkIGJpb3MgaW4gY2FzZSBvZiBleHRyZW1lIFZNIGxvYWQ6XFxuICAqL1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3JhaWQxLTEwLmMgYi9kcml2ZXJzL21kL3JhaWQxLTEwLmNcXG5pbmRleCA1NmE1NmE0ZGE0ZjgzZi4uODlkYWY4NTU4MjUxZmEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9tZC9yYWlkMS0xMC5jXFxuKysrIGIvZHJpdmVycy9tZC9yYWlkMS0xMC5jXFxuQEAgLTMwMywzICszMDMsMTkgQEAgc3RhdGljIGlubGluZSBib29sIHJhaWQxX3Nob3VsZF9oYW5kbGVfZXJyb3Ioc3RydWN0IGJpbyAqYmlvKVxcbiBcXHRyZXR1cm4gIShiaW8tXFx1MDAzZWJpX29wZiBcXHUwMDI2IChSRVFfUkFIRUFEIHwgUkVRX05PV0FJVCkpIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdGJpby1cXHUwMDNlYmlfc3RhdHVzICE9IEJMS19TVFNfSU5WQUw7XFxuIH1cXG4rXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCByYWlkMV93cml0ZV9lcnJvcihzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWRfcmRldiAqcmRldixcXG4rXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgYmlvICpiaW8sIGJvb2wgYWxsb3dfZmFpbGZhc3QpXFxuK3tcXG4rXFx0c2V0X2JpdChXcml0ZUVycm9yU2VlbiwgXFx1MDAyNnJkZXYtXFx1MDAzZWZsYWdzKTtcXG4rXFxuK1xcdGlmIChiaW8tXFx1MDAzZWJpX3N0YXR1cyA9PSBCTEtfU1RTX1AyUERNQSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0aWYgKCF0ZXN0X2FuZF9zZXRfYml0KFdhbnRSZXBsYWNlbWVudCwgXFx1MDAyNnJkZXYtXFx1MDAzZWZsYWdzKSlcXG4rXFx0XFx0c2V0X2JpdChNRF9SRUNPVkVSWV9ORUVERUQsIFxcdTAwMjZtZGRldi1cXHUwMDNlcmVjb3ZlcnkpO1xcbitcXG4rXFx0aWYgKGFsbG93X2ZhaWxmYXN0IFxcdTAwMjZcXHUwMDI2IHRlc3RfYml0KEZhaWxGYXN0LCBcXHUwMDI2cmRldi1cXHUwMDNlZmxhZ3MpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAoYmlvLVxcdTAwM2ViaV9vcGYgXFx1MDAyNiBNRF9GQUlMRkFTVCkpXFxuK1xcdFxcdG1kX2Vycm9yKG1kZGV2LCByZGV2KTtcXG4rfVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3JhaWQxLmMgYi9kcml2ZXJzL21kL3JhaWQxLmNcXG5pbmRleCBhZmUyY2E5NmFkOGMyMi4uNzZhMTQyNmU2NGYwMmQgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9tZC9yYWlkMS5jXFxuKysrIGIvZHJpdmVycy9tZC9yYWlkMS5jXFxuQEAgLTQ4MywxNyArNDgzLDggQEAgc3RhdGljIHZvaWQgcmFpZDFfZW5kX3dyaXRlX3JlcXVlc3Qoc3RydWN0IGJpbyAqYmlvKVxcbiBcXHQgKiAnb25lIG1pcnJvciBJTyBoYXMgZmluaXNoZWQnIGV2ZW50IGhhbmRsZXI6XFxuIFxcdCAqL1xcbiBcXHRpZiAoYmlvLVxcdTAwM2ViaV9zdGF0dXMgXFx1MDAyNlxcdTAwMjYgIWlnbm9yZV9lcnJvcikge1xcbi1cXHRcXHRzZXRfYml0KFdyaXRlRXJyb3JTZWVuLFxcdFxcdTAwMjZyZGV2LVxcdTAwM2VmbGFncyk7XFxuLVxcdFxcdGlmICghdGVzdF9hbmRfc2V0X2JpdChXYW50UmVwbGFjZW1lbnQsIFxcdTAwMjZyZGV2LVxcdTAwM2VmbGFncykpXFxuLVxcdFxcdFxcdHNldF9iaXQoTURfUkVDT1ZFUllfTkVFREVELCBcXHUwMDI2XFxuLVxcdFxcdFxcdFxcdGNvbmYtXFx1MDAzZW1kZGV2LVxcdTAwM2VyZWNvdmVyeSk7XFxuLVxcbi1cXHRcXHRpZiAodGVzdF9iaXQoRmFpbEZhc3QsIFxcdTAwMjZyZGV2LVxcdTAwM2VmbGFncykgXFx1MDAyNlxcdTAwMjZcXG4tXFx0XFx0ICAgIChiaW8tXFx1MDAzZWJpX29wZiBcXHUwMDI2IE1EX0ZBSUxGQVNUKSBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHQgICAgLyogV2UgbmV2ZXIgdHJ5IEZhaWxGYXN0IHRvIFdyaXRlTW9zdGx5IGRldmljZXMgKi9cXG4tXFx0XFx0ICAgICF0ZXN0X2JpdChXcml0ZU1vc3RseSwgXFx1MDAyNnJkZXYtXFx1MDAzZWZsYWdzKSkge1xcbi1cXHRcXHRcXHRtZF9lcnJvcihyMV9iaW8tXFx1MDAzZW1kZGV2LCByZGV2KTtcXG4tXFx0XFx0fVxcbitcXHRcXHRyYWlkMV93cml0ZV9lcnJvcihjb25mLVxcdTAwM2VtZGRldiwgcmRldiwgYmlvLFxcbitcXHRcXHRcXHRcXHQgICF0ZXN0X2JpdChXcml0ZU1vc3RseSwgXFx1MDAyNnJkZXYtXFx1MDAzZWZsYWdzKSk7XFxuIFxcbiBcXHRcXHQvKlxcbiBcXHRcXHQgKiBXaGVuIHRoZSBkZXZpY2UgaXMgZmF1bHR5LCBpdCBpcyBub3QgbmVjZXNzYXJ5IHRvXFxuQEAgLTU2NCw3ICs1NTUsNyBAQCBzdGF0aWMgdm9pZCByYWlkMV9lbmRfd3JpdGVfcmVxdWVzdChzdHJ1Y3QgYmlvICpiaW8pXFxuIFxcdFxcdFxcdFxcdGNhbGxfYmlvX2VuZGlvKHIxX2Jpbyk7XFxuIFxcdFxcdFxcdH1cXG4gXFx0XFx0fVxcbi1cXHR9IGVsc2UgaWYgKHRlc3RfYml0KE1EX1NFUklBTElaRV9QT0xJQ1ksIFxcdTAwMjZyZGV2LVxcdTAwM2VtZGRldi1cXHUwMDNlZmxhZ3MpKVxcbitcXHR9IGVsc2UgaWYgKHRlc3RfYml0KENvbGxpc2lvbkNoZWNrLCBcXHUwMDI2cmRldi1cXHUwMDNlZmxhZ3MpKVxcbiBcXHRcXHRyZW1vdmVfc2VyaWFsKHJkZXYsIGxvLCBoaSk7XFxuIFxcdGlmIChyMV9iaW8tXFx1MDAzZWJpb3NbbWlycm9yXSA9PSBOVUxMKVxcbiBcXHRcXHRyZGV2X2RlY19wZW5kaW5nKHJkZXYsIGNvbmYtXFx1MDAzZW1kZGV2KTtcXG5AQCAtMTUyMyw2ICsxNTE0LDcgQEAgc3RhdGljIGJvb2wgcmFpZDFfd3JpdGVfcmVxdWVzdChzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgYmlvICpiaW8sXFxuIFxcdGJvb2wgd3JpdGVfYmVoaW5kID0gZmFsc2U7XFxuIFxcdGJvb2wgbm93YWl0ID0gYmlvLVxcdTAwM2ViaV9vcGYgXFx1MDAyNiBSRVFfTk9XQUlUO1xcbiBcXHRib29sIGlzX2Rpc2NhcmQgPSBvcF9pc19kaXNjYXJkKGJpby1cXHUwMDNlYmlfb3BmKTtcXG4rXFx0Ym9vbCBpc19wMnBkbWEgPSBtZF9iaW9faXNfcDJwZG1hKGJpbyk7XFxuIFxcdHNlY3Rvcl90IHNlY3RvciA9IGJpby1cXHUwMDNlYmlfaXRlci5iaV9zZWN0b3I7XFxuIFxcbiBcXHRpZiAobWRkZXZfaXNfY2x1c3RlcmVkKG1kZGV2KSBcXHUwMDI2XFx1MDAyNlxcbkBAIC0xNTc1LDkgKzE1NjcsMTIgQEAgc3RhdGljIGJvb2wgcmFpZDFfd3JpdGVfcmVxdWVzdChzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgYmlvICpiaW8sXFxuIFxcdFxcdC8qXFxuIFxcdFxcdCAqIFRoZSB3cml0ZS1iZWhpbmQgaW8gaXMgb25seSBhdHRlbXB0ZWQgb24gZHJpdmVzIG1hcmtlZCBhc1xcbiBcXHRcXHQgKiB3cml0ZS1tb3N0bHksIHdoaWNoIG1lYW5zIHdlIGNvdWxkIGFsbG9jYXRlIHdyaXRlIGJlaGluZFxcbi1cXHRcXHQgKiBiaW8gbGF0ZXIuXFxuK1xcdFxcdCAqIGJpbyBsYXRlci4gUDJQRE1BIGJpb3MgYXJlIGV4Y2x1ZGVkOiB3cml0ZS1iZWhpbmQgY29waWVzXFxuK1xcdFxcdCAqIHRoZSBkYXRhIHdpdGggYmlvX2NvcHlfZGF0YSgpLCBhIENQVSBjb3B5IHRoYXQgY2Fubm90IGJlXFxuK1xcdFxcdCAqIGFzc3VtZWQgc2FmZSBvciBmYXN0IG9uIFAyUERNQSAoZGV2aWNlIEJBUikgcGFnZXMuXFxuIFxcdFxcdCAqL1xcbi1cXHRcXHRpZiAoIWlzX2Rpc2NhcmQgXFx1MDAyNlxcdTAwMjYgcmRldiBcXHUwMDI2XFx1MDAyNiB0ZXN0X2JpdChXcml0ZU1vc3RseSwgXFx1MDAyNnJkZXYtXFx1MDAzZWZsYWdzKSlcXG4rXFx0XFx0aWYgKCFpc19kaXNjYXJkIFxcdTAwMjZcXHUwMDI2ICFpc19wMnBkbWEgXFx1MDAyNlxcdTAwMjYgcmRldiBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgdGVzdF9iaXQoV3JpdGVNb3N0bHksIFxcdTAwMjZyZGV2LVxcdTAwM2VmbGFncykpXFxuIFxcdFxcdFxcdHdyaXRlX2JlaGluZCA9IHRydWU7XFxuIFxcbiBcXHRcXHRyMV9iaW8tXFx1MDAzZWJpb3NbaV0gPSBOVUxMO1xcbkBAIC0xNjc3LDcgKzE2NzIsMTEgQEAgc3RhdGljIGJvb2wgcmFpZDFfd3JpdGVfcmVxdWVzdChzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgYmlvICpiaW8sXFxuIFxcdFxcdFxcdG1iaW8gPSBiaW9fYWxsb2NfY2xvbmUocmRldi1cXHUwMDNlYmRldiwgYmlvLCBHRlBfTk9JTyxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcdTAwMjZtZGRldi1cXHUwMDNlYmlvX3NldCk7XFxuIFxcbi1cXHRcXHRcXHRpZiAodGVzdF9iaXQoTURfU0VSSUFMSVpFX1BPTElDWSwgXFx1MDAyNm1kZGV2LVxcdTAwM2VmbGFncykpXFxuK1xcdFxcdFxcdC8qXFxuK1xcdFxcdFxcdCAqIENvbGxpc2lvbkNoZWNrIG1hcmtzIGV2ZXJ5IHJkZXYgd2l0aCBhIHNlcmlhbFxcbitcXHRcXHRcXHQgKiB0cmVlOyBvcmRlciBhZ2FpbnN0IGluLWZsaWdodCB3cml0ZS1iZWhpbmQgSS9PLlxcbitcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0aWYgKHRlc3RfYml0KENvbGxpc2lvbkNoZWNrLCBcXHUwMDI2cmRldi1cXHUwMDNlZmxhZ3MpKVxcbiBcXHRcXHRcXHRcXHR3YWl0X2Zvcl9zZXJpYWxpemF0aW9uKHJkZXYsIHIxX2Jpbyk7XFxuIFxcdFxcdH1cXG4gXFxuQEAgLTI1NjIsNiArMjU2MSw5IEBAIHN0YXRpYyB2b2lkIG5hcnJvd193cml0ZV9lcnJvcihzdHJ1Y3QgcjFiaW8gKnIxX2JpbywgaW50IGkpXFxuIFxcdFxcdH1cXG4gXFxuIFxcdFxcdHdiaW8tXFx1MDAzZWJpX29wZiA9IFJFUV9PUF9XUklURTtcXG4rXFx0XFx0LyogS2VlcCBQMlBETUEgcmV0cnkgYmlvcyB1bm1lcmdlYWJsZSwgbGlrZSB0aGUgb3JpZ2luYWwgKi9cXG4rXFx0XFx0aWYgKG1kX2Jpb19pc19wMnBkbWEod2JpbykpXFxuK1xcdFxcdFxcdHdiaW8tXFx1MDAzZWJpX29wZiB8PSBSRVFfTk9NRVJHRTtcXG4gXFx0XFx0d2Jpby1cXHUwMDNlYmlfaXRlci5iaV9zZWN0b3IgPSByMV9iaW8tXFx1MDAzZXNlY3RvcjtcXG4gXFx0XFx0d2Jpby1cXHUwMDNlYmlfaXRlci5iaV9zaXplID0gcjFfYmlvLVxcdTAwM2VzZWN0b3JzIFxcdTAwM2NcXHUwMDNjIDk7XFxuIFxcbkBAIC0yNjIyLDEwICsyNjI0LDE2IEBAIHN0YXRpYyB2b2lkIGhhbmRsZV93cml0ZV9maW5pc2hlZChzdHJ1Y3QgcjFjb25mICpjb25mLCBzdHJ1Y3QgcjFiaW8gKnIxX2JpbylcXG4gXFx0XFx0XFx0ICogbmFycm93IGRvd24gYW5kIHJlY29yZCBwcmVjaXNlIHdyaXRlXFxuIFxcdFxcdFxcdCAqIGVycm9ycy5cXG4gXFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdHN0cnVjdCBtZF9yZGV2ICpyZGV2ID0gY29uZi1cXHUwMDNlbWlycm9yc1ttXS5yZGV2O1xcbitcXG4gXFx0XFx0XFx0ZmFpbCA9IHRydWU7XFxuLVxcdFxcdFxcdG5hcnJvd193cml0ZV9lcnJvcihyMV9iaW8sIG0pO1xcbi1cXHRcXHRcXHRyZGV2X2RlY19wZW5kaW5nKGNvbmYtXFx1MDAzZW1pcnJvcnNbbV0ucmRldixcXG4tXFx0XFx0XFx0XFx0XFx0IGNvbmYtXFx1MDAzZW1kZGV2KTtcXG4rXFx0XFx0XFx0LyogTWFwcGluZyBmYWlsdXJlcyBhcmUgd2hvbGUtcmFuZ2UgYW5kIGRldGVybWluaXN0aWMgKi9cXG4rXFx0XFx0XFx0aWYgKHIxX2Jpby1cXHUwMDNlYmlvc1ttXS1cXHUwMDNlYmlfc3RhdHVzID09IEJMS19TVFNfUDJQRE1BKVxcbitcXHRcXHRcXHRcXHRyZGV2X3NldF9iYWRibG9ja3MocmRldiwgcjFfYmlvLVxcdTAwM2VzZWN0b3IsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgIHIxX2Jpby1cXHUwMDNlc2VjdG9ycywgMCk7XFxuK1xcdFxcdFxcdGVsc2VcXG4rXFx0XFx0XFx0XFx0bmFycm93X3dyaXRlX2Vycm9yKHIxX2JpbywgbSk7XFxuK1xcdFxcdFxcdHJkZXZfZGVjX3BlbmRpbmcocmRldiwgY29uZi1cXHUwMDNlbWRkZXYpO1xcbiBcXHRcXHR9XFxuIFxcdGlmIChmYWlsKSB7XFxuIFxcdFxcdHNwaW5fbG9ja19pcnEoXFx1MDAyNmNvbmYtXFx1MDAzZWRldmljZV9sb2NrKTtcXG5AQCAtMjY1MCw2ICsyNjU4LDggQEAgc3RhdGljIHZvaWQgaGFuZGxlX3JlYWRfZXJyb3Ioc3RydWN0IHIxY29uZiAqY29uZiwgc3RydWN0IHIxYmlvICpyMV9iaW8pXFxuIHtcXG4gXFx0c3RydWN0IG1kX3JkZXYgKnJkZXYgPSBjb25mLVxcdTAwM2VtaXJyb3JzW3IxX2Jpby1cXHUwMDNlcmVhZF9kaXNrXS5yZGV2O1xcbiBcXHRzdHJ1Y3QgYmlvICpiaW8gPSByMV9iaW8tXFx1MDAzZWJpb3NbcjFfYmlvLVxcdTAwM2VyZWFkX2Rpc2tdO1xcbitcXHQvKiBldmFsdWF0ZSBiZWZvcmUgdGhlIGJpb19wdXQoKSBiZWxvdyAqL1xcbitcXHRib29sIHAycGRtYV9lcnJvciA9IGJpby1cXHUwMDNlYmlfc3RhdHVzID09IEJMS19TVFNfUDJQRE1BO1xcbiBcXHRzdHJ1Y3QgbWRkZXYgKm1kZGV2ID0gY29uZi1cXHUwMDNlbWRkZXY7XFxuIFxcdHNlY3Rvcl90IHNlY3RvcjtcXG4gXFxuQEAgLTI2NjcsNyArMjY3Nyw3IEBAIHN0YXRpYyB2b2lkIGhhbmRsZV9yZWFkX2Vycm9yKHN0cnVjdCByMWNvbmYgKmNvbmYsIHN0cnVjdCByMWJpbyAqcjFfYmlvKVxcbiBcXHQgKiByZWFkIGVycm9yLiAgVGhpcyBpcyBhbGwgZG9uZSBzeW5jaHJvbm91c2x5IHdoaWxlIHRoZSBhcnJheSBpc1xcbiBcXHQgKiBmcm96ZW4uXFxuIFxcdCAqL1xcbi1cXHRpZiAobWRkZXYtXFx1MDAzZXJvKSB7XFxuK1xcdGlmIChtZGRldi1cXHUwMDNlcm8gfHwgcDJwZG1hX2Vycm9yKSB7XFxuIFxcdFxcdHIxX2Jpby1cXHUwMDNlYmlvc1tyMV9iaW8tXFx1MDAzZXJlYWRfZGlza10gPSBJT19CTE9DS0VEO1xcbiBcXHR9IGVsc2UgaWYgKHRlc3RfYml0KEZhaWxGYXN0LCBcXHUwMDI2cmRldi1cXHUwMDNlZmxhZ3MpKSB7XFxuIFxcdFxcdG1kX2Vycm9yKG1kZGV2LCByZGV2KTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9yYWlkMTAuYyBiL2RyaXZlcnMvbWQvcmFpZDEwLmNcXG5pbmRleCAwYTNjZmRkM2Y1ZGY4MC4uZTM1YWVhYzI5ZjA2NDIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9tZC9yYWlkMTAuY1xcbisrKyBiL2RyaXZlcnMvbWQvcmFpZDEwLmNcXG5AQCAtNDgyLDE2ICs0ODIsOCBAQCBzdGF0aWMgdm9pZCByYWlkMTBfZW5kX3dyaXRlX3JlcXVlc3Qoc3RydWN0IGJpbyAqYmlvKVxcbiBcXHRcXHRcXHQgKi9cXG4gXFx0XFx0XFx0bWRfZXJyb3IocmRldi1cXHUwMDNlbWRkZXYsIHJkZXYpO1xcbiBcXHRcXHRlbHNlIHtcXG4tXFx0XFx0XFx0c2V0X2JpdChXcml0ZUVycm9yU2VlbixcXHRcXHUwMDI2cmRldi1cXHUwMDNlZmxhZ3MpO1xcbi1cXHRcXHRcXHRpZiAoIXRlc3RfYW5kX3NldF9iaXQoV2FudFJlcGxhY2VtZW50LCBcXHUwMDI2cmRldi1cXHUwMDNlZmxhZ3MpKVxcbi1cXHRcXHRcXHRcXHRzZXRfYml0KE1EX1JFQ09WRVJZX05FRURFRCxcXG4tXFx0XFx0XFx0XFx0XFx0XFx1MDAyNnJkZXYtXFx1MDAzZW1kZGV2LVxcdTAwM2VyZWNvdmVyeSk7XFxuLVxcbiBcXHRcXHRcXHRkZWNfcmRldiA9IDA7XFxuLVxcdFxcdFxcdGlmICh0ZXN0X2JpdChGYWlsRmFzdCwgXFx1MDAyNnJkZXYtXFx1MDAzZWZsYWdzKSBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHRcXHQgICAgKGJpby1cXHUwMDNlYmlfb3BmIFxcdTAwMjYgTURfRkFJTEZBU1QpKSB7XFxuLVxcdFxcdFxcdFxcdG1kX2Vycm9yKHJkZXYtXFx1MDAzZW1kZGV2LCByZGV2KTtcXG4tXFx0XFx0XFx0fVxcbitcXHRcXHRcXHRyYWlkMV93cml0ZV9lcnJvcihyZGV2LVxcdTAwM2VtZGRldiwgcmRldiwgYmlvLCB0cnVlKTtcXG4gXFxuIFxcdFxcdFxcdC8qXFxuIFxcdFxcdFxcdCAqIFdoZW4gdGhlIGRldmljZSBpcyBmYXVsdHksIGl0IGlzIG5vdCBuZWNlc3NhcnkgdG9cXG5AQCAtMjgzMSw2ICsyODIzLDkgQEAgc3RhdGljIHZvaWQgbmFycm93X3dyaXRlX2Vycm9yKHN0cnVjdCByMTBiaW8gKnIxMF9iaW8sIGludCBpKVxcbiBcXHRcXHR3YmlvLVxcdTAwM2ViaV9pdGVyLmJpX3NlY3RvciA9IHdzZWN0b3IgK1xcbiBcXHRcXHRcXHRcXHQgICBjaG9vc2VfZGF0YV9vZmZzZXQocjEwX2JpbywgcmRldik7XFxuIFxcdFxcdHdiaW8tXFx1MDAzZWJpX29wZiA9IFJFUV9PUF9XUklURTtcXG4rXFx0XFx0LyogS2VlcCBQMlBETUEgcmV0cnkgYmlvcyB1bm1lcmdlYWJsZSwgbGlrZSB0aGUgb3JpZ2luYWwgKi9cXG4rXFx0XFx0aWYgKG1kX2Jpb19pc19wMnBkbWEod2JpbykpXFxuK1xcdFxcdFxcdHdiaW8tXFx1MDAzZWJpX29wZiB8PSBSRVFfTk9NRVJHRTtcXG4gXFxuIFxcdFxcdGlmIChzdWJtaXRfYmlvX3dhaXQod2JpbykgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0ICAgICFyZGV2X3NldF9iYWRibG9ja3MocmRldiwgd3NlY3Rvciwgc2VjdG9ycywgMCkpIHtcXG5AQCAtMjg1Myw2ICsyODQ4LDcgQEAgc3RhdGljIHZvaWQgaGFuZGxlX3JlYWRfZXJyb3Ioc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IHIxMGJpbyAqcjEwX2JpbylcXG4ge1xcbiBcXHRpbnQgc2xvdCA9IHIxMF9iaW8tXFx1MDAzZXJlYWRfc2xvdDtcXG4gXFx0c3RydWN0IGJpbyAqYmlvO1xcbitcXHRib29sIHAycGRtYV9lcnJvcjtcXG4gXFx0c3RydWN0IHIxMGNvbmYgKmNvbmYgPSBtZGRldi1cXHUwMDNlcHJpdmF0ZTtcXG4gXFx0c3RydWN0IG1kX3JkZXYgKnJkZXYgPSByMTBfYmlvLVxcdTAwM2VkZXZzW3Nsb3RdLnJkZXY7XFxuIFxcbkBAIC0yODY1LDEwICsyODYxLDEyIEBAIHN0YXRpYyB2b2lkIGhhbmRsZV9yZWFkX2Vycm9yKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCByMTBiaW8gKnIxMF9iaW8pXFxuIFxcdCAqIGZyb3plbi5cXG4gXFx0ICovXFxuIFxcdGJpbyA9IHIxMF9iaW8tXFx1MDAzZWRldnNbc2xvdF0uYmlvO1xcbitcXHQvKiBldmFsdWF0ZSBiZWZvcmUgdGhlIGJpb19wdXQoKSBiZWxvdyAqL1xcbitcXHRwMnBkbWFfZXJyb3IgPSBiaW8tXFx1MDAzZWJpX3N0YXR1cyA9PSBCTEtfU1RTX1AyUERNQTtcXG4gXFx0YmlvX3B1dChiaW8pO1xcbiBcXHRyMTBfYmlvLVxcdTAwM2VkZXZzW3Nsb3RdLmJpbyA9IE5VTEw7XFxuIFxcbi1cXHRpZiAobWRkZXYtXFx1MDAzZXJvKVxcbitcXHRpZiAobWRkZXYtXFx1MDAzZXJvIHx8IHAycGRtYV9lcnJvcilcXG4gXFx0XFx0cjEwX2Jpby1cXHUwMDNlZGV2c1tzbG90XS5iaW8gPSBJT19CTE9DS0VEO1xcbiBcXHRlbHNlIGlmICghdGVzdF9iaXQoRmFpbEZhc3QsIFxcdTAwMjZyZGV2LVxcdTAwM2VmbGFncykpIHtcXG4gXFx0XFx0ZnJlZXplX2FycmF5KGNvbmYsIDEpO1xcbkBAIC0yOTQ1LDcgKzI5NDMsMTMgQEAgc3RhdGljIHZvaWQgaGFuZGxlX3dyaXRlX2NvbXBsZXRlZChzdHJ1Y3QgcjEwY29uZiAqY29uZiwgc3RydWN0IHIxMGJpbyAqcjEwX2JpbylcXG4gXFx0XFx0XFx0XFx0cmRldl9kZWNfcGVuZGluZyhyZGV2LCBjb25mLVxcdTAwM2VtZGRldik7XFxuIFxcdFxcdFxcdH0gZWxzZSBpZiAoYmlvICE9IE5VTEwgXFx1MDAyNlxcdTAwMjYgYmlvLVxcdTAwM2ViaV9zdGF0dXMpIHtcXG4gXFx0XFx0XFx0XFx0ZmFpbCA9IHRydWU7XFxuLVxcdFxcdFxcdFxcdG5hcnJvd193cml0ZV9lcnJvcihyMTBfYmlvLCBtKTtcXG4rXFx0XFx0XFx0XFx0LyogTWFwcGluZyBmYWlsdXJlcyBhcmUgd2hvbGUtcmFuZ2UgYW5kIGRldGVybWluaXN0aWMgKi9cXG4rXFx0XFx0XFx0XFx0aWYgKGJpby1cXHUwMDNlYmlfc3RhdHVzID09IEJMS19TVFNfUDJQRE1BKVxcbitcXHRcXHRcXHRcXHRcXHRyZGV2X3NldF9iYWRibG9ja3MocmRldixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgcjEwX2Jpby1cXHUwMDNlZGV2c1ttXS5hZGRyLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICByMTBfYmlvLVxcdTAwM2VzZWN0b3JzLCAwKTtcXG4rXFx0XFx0XFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRcXHRcXHRuYXJyb3dfd3JpdGVfZXJyb3IocjEwX2JpbywgbSk7XFxuIFxcdFxcdFxcdFxcdHJkZXZfZGVjX3BlbmRpbmcocmRldiwgY29uZi1cXHUwMDNlbWRkZXYpO1xcbiBcXHRcXHRcXHR9XFxuIFxcdFxcdFxcdGJpbyA9IHIxMF9iaW8tXFx1MDAzZWRldnNbbV0ucmVwbF9iaW87XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbnZtZS9ob3N0L3JkbWEuYyBiL2RyaXZlcnMvbnZtZS9ob3N0L3JkbWEuY1xcbmluZGV4IDY5MDllMzU0Mjc5NDI3Li4yZjUwNTA5YTdhNjE2MCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL252bWUvaG9zdC9yZG1hLmNcXG4rKysgYi9kcml2ZXJzL252bWUvaG9zdC9yZG1hLmNcXG5AQCAtMTQ2OSw2ICsxNDY5LDcgQEAgc3RhdGljIGludCBudm1lX3JkbWFfZG1hX21hcF9yZXEoc3RydWN0IGliX2RldmljZSAqaWJkZXYsIHN0cnVjdCByZXF1ZXN0ICpycSxcXG4gXFx0XFx0aW50ICpjb3VudCwgaW50ICpwaV9jb3VudClcXG4ge1xcbiBcXHRzdHJ1Y3QgbnZtZV9yZG1hX3JlcXVlc3QgKnJlcSA9IGJsa19tcV9ycV90b19wZHUocnEpO1xcbitcXHRzdHJ1Y3Qgc2dfdGFibGUgc2d0O1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4gXFx0cmVxLVxcdTAwM2VkYXRhX3NnbC5zZ190YWJsZS5zZ2wgPSAoc3RydWN0IHNjYXR0ZXJsaXN0ICopKHJlcSArIDEpO1xcbkBAIC0xNDgwLDEyICsxNDgxLDE0IEBAIHN0YXRpYyBpbnQgbnZtZV9yZG1hX2RtYV9tYXBfcmVxKHN0cnVjdCBpYl9kZXZpY2UgKmliZGV2LCBzdHJ1Y3QgcmVxdWVzdCAqcnEsXFxuIFxcbiBcXHRyZXEtXFx1MDAzZWRhdGFfc2dsLm5lbnRzID0gYmxrX3JxX21hcF9zZyhycSwgcmVxLVxcdTAwM2VkYXRhX3NnbC5zZ190YWJsZS5zZ2wpO1xcbiBcXG4tXFx0KmNvdW50ID0gaWJfZG1hX21hcF9zZyhpYmRldiwgcmVxLVxcdTAwM2VkYXRhX3NnbC5zZ190YWJsZS5zZ2wsXFxuLVxcdFxcdFxcdCAgICAgICByZXEtXFx1MDAzZWRhdGFfc2dsLm5lbnRzLCBycV9kbWFfZGlyKHJxKSk7XFxuLVxcdGlmICh1bmxpa2VseSgqY291bnQgXFx1MDAzYz0gMCkpIHtcXG4tXFx0XFx0cmV0ID0gLUVJTztcXG4rXFx0c2d0ID0gKHN0cnVjdCBzZ190YWJsZSkge1xcbitcXHRcXHQuc2dsXFx0XFx0PSByZXEtXFx1MDAzZWRhdGFfc2dsLnNnX3RhYmxlLnNnbCxcXG4rXFx0XFx0Lm9yaWdfbmVudHNcXHQ9IHJlcS1cXHUwMDNlZGF0YV9zZ2wubmVudHMsXFxuK1xcdH07XFxuK1xcdHJldCA9IGliX2RtYV9tYXBfc2d0YWJsZV9hdHRycyhpYmRldiwgXFx1MDAyNnNndCwgcnFfZG1hX2RpcihycSksIDApO1xcbitcXHRpZiAodW5saWtlbHkocmV0KSlcXG4gXFx0XFx0Z290byBvdXRfZnJlZV90YWJsZTtcXG4tXFx0fVxcbitcXHQqY291bnQgPSBzZ3QubmVudHM7XFxuIFxcbiBcXHRpZiAoYmxrX2ludGVncml0eV9ycShycSkpIHtcXG4gXFx0XFx0cmVxLVxcdTAwM2VtZXRhZGF0YV9zZ2wtXFx1MDAzZXNnX3RhYmxlLnNnbCA9XFxuQEAgLTE1MDEsMTQgKzE1MDQsMTQgQEAgc3RhdGljIGludCBudm1lX3JkbWFfZG1hX21hcF9yZXEoc3RydWN0IGliX2RldmljZSAqaWJkZXYsIHN0cnVjdCByZXF1ZXN0ICpycSxcXG4gXFxuIFxcdFxcdHJlcS1cXHUwMDNlbWV0YWRhdGFfc2dsLVxcdTAwM2VuZW50cyA9IGJsa19ycV9tYXBfaW50ZWdyaXR5X3NnKHJxLFxcbiBcXHRcXHRcXHRcXHRyZXEtXFx1MDAzZW1ldGFkYXRhX3NnbC1cXHUwMDNlc2dfdGFibGUuc2dsKTtcXG4tXFx0XFx0KnBpX2NvdW50ID0gaWJfZG1hX21hcF9zZyhpYmRldixcXG4tXFx0XFx0XFx0XFx0XFx0ICByZXEtXFx1MDAzZW1ldGFkYXRhX3NnbC1cXHUwMDNlc2dfdGFibGUuc2dsLFxcbi1cXHRcXHRcXHRcXHRcXHQgIHJlcS1cXHUwMDNlbWV0YWRhdGFfc2dsLVxcdTAwM2VuZW50cyxcXG4tXFx0XFx0XFx0XFx0XFx0ICBycV9kbWFfZGlyKHJxKSk7XFxuLVxcdFxcdGlmICh1bmxpa2VseSgqcGlfY291bnQgXFx1MDAzYz0gMCkpIHtcXG4tXFx0XFx0XFx0cmV0ID0gLUVJTztcXG4rXFx0XFx0c2d0ID0gKHN0cnVjdCBzZ190YWJsZSkge1xcbitcXHRcXHRcXHQuc2dsXFx0XFx0PSByZXEtXFx1MDAzZW1ldGFkYXRhX3NnbC1cXHUwMDNlc2dfdGFibGUuc2dsLFxcbitcXHRcXHRcXHQub3JpZ19uZW50c1xcdD0gcmVxLVxcdTAwM2VtZXRhZGF0YV9zZ2wtXFx1MDAzZW5lbnRzLFxcbitcXHRcXHR9O1xcbitcXHRcXHRyZXQgPSBpYl9kbWFfbWFwX3NndGFibGVfYXR0cnMoaWJkZXYsIFxcdTAwMjZzZ3QsIHJxX2RtYV9kaXIocnEpLCAwKTtcXG4rXFx0XFx0aWYgKHVubGlrZWx5KHJldCkpXFxuIFxcdFxcdFxcdGdvdG8gb3V0X2ZyZWVfcGlfdGFibGU7XFxuLVxcdFxcdH1cXG4rXFx0XFx0KnBpX2NvdW50ID0gc2d0Lm5lbnRzO1xcbiBcXHR9XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG5AQCAtMjAyNiw4ICsyMDI5LDYgQEAgc3RhdGljIGJsa19zdGF0dXNfdCBudm1lX3JkbWFfcXVldWVfcnEoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsXFxuIFxcdGlmIChyZXQpXFxuIFxcdFxcdGdvdG8gdW5tYXBfcWU7XFxuIFxcbi1cXHRudm1lX3N0YXJ0X3JlcXVlc3QocnEpO1xcbi1cXG4gXFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0JMS19ERVZfSU5URUdSSVRZKSBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAgcXVldWUtXFx1MDAzZXBpX3N1cHBvcnQgXFx1MDAyNlxcdTAwMjZcXG4gXFx0ICAgIChjLVxcdTAwM2Vjb21tb24ub3Bjb2RlID09IG52bWVfY21kX3dyaXRlIHx8XFxuQEAgLTIwMzksMTEgKzIwNDAsMTMgQEAgc3RhdGljIGJsa19zdGF0dXNfdCBudm1lX3JkbWFfcXVldWVfcnEoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsXFxuIFxcbiBcXHRlcnIgPSBudm1lX3JkbWFfbWFwX2RhdGEocXVldWUsIHJxLCBjKTtcXG4gXFx0aWYgKHVubGlrZWx5KGVyciBcXHUwMDNjIDApKSB7XFxuLVxcdFxcdGRldl9lcnIocXVldWUtXFx1MDAzZWN0cmwtXFx1MDAzZWN0cmwuZGV2aWNlLFxcbi1cXHRcXHRcXHQgICAgIFxcXCJGYWlsZWQgdG8gbWFwIGRhdGEgKCVkKVxcXFxuXFxcIiwgZXJyKTtcXG4rXFx0XFx0ZGV2X2Vycl9yYXRlbGltaXRlZChxdWV1ZS1cXHUwMDNlY3RybC1cXHUwMDNlY3RybC5kZXZpY2UsXFxuK1xcdFxcdFxcdFxcdCAgICBcXFwiRmFpbGVkIHRvIG1hcCBkYXRhICglZClcXFxcblxcXCIsIGVycik7XFxuIFxcdFxcdGdvdG8gZXJyO1xcbiBcXHR9XFxuIFxcbitcXHRudm1lX3N0YXJ0X3JlcXVlc3QocnEpO1xcbitcXG4gXFx0c3FlLVxcdTAwM2VjcWUuZG9uZSA9IG52bWVfcmRtYV9zZW5kX2RvbmU7XFxuIFxcbiBcXHRpYl9kbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShkZXYsIHNxZS1cXHUwMDNlZG1hLFxcbkBAIC0yMDYzLDYgKzIwNjYsOSBAQCBzdGF0aWMgYmxrX3N0YXR1c190IG52bWVfcmRtYV9xdWV1ZV9ycShzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eCxcXG4gXFx0XFx0cmV0ID0gbnZtZV9ob3N0X3BhdGhfZXJyb3IocnEpO1xcbiBcXHRlbHNlIGlmIChlcnIgPT0gLUVOT01FTSB8fCBlcnIgPT0gLUVBR0FJTilcXG4gXFx0XFx0cmV0ID0gQkxLX1NUU19SRVNPVVJDRTtcXG4rXFx0LyogUGVlciBtZW1vcnkgdW5yZWFjaGFibGUgZnJvbSB0aGlzIGRldmljZTogZG9uJ3QgcmV0cnkuICovXFxuK1xcdGVsc2UgaWYgKGVyciA9PSAtRVJFTU9URUlPKVxcbitcXHRcXHRyZXQgPSBCTEtfU1RTX1AyUERNQTtcXG4gXFx0ZWxzZVxcbiBcXHRcXHRyZXQgPSBCTEtfU1RTX0lPRVJSO1xcbiBcXHRudm1lX2NsZWFudXBfY21kKHJxKTtcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ibGtfdHlwZXMuaCBiL2luY2x1ZGUvbGludXgvYmxrX3R5cGVzLmhcXG5pbmRleCA4ODA4ZWU3NmU3M2MwOS4uYzhkZTc4MDkzMjBhZDQgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9ibGtfdHlwZXMuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvYmxrX3R5cGVzLmhcXG5AQCAtMTY1LDYgKzE2NSwxNSBAQCB0eXBlZGVmIHUxNiBibGtfc2hvcnRfdDtcXG4gICovXFxuICNkZWZpbmUgQkxLX1NUU19EVVJBVElPTl9MSU1JVFxcdCgoX19mb3JjZSBibGtfc3RhdHVzX3QpMTcpXFxuIFxcbisvKlxcbisgKiBCTEtfU1RTX1AyUERNQSBpcyByZXR1cm5lZCB3aGVuIGEgcGVlci10by1wZWVyIERNQSB0cmFuc2ZlciBjYW5ub3QgYmVcXG4rICogbWFwcGVkICh0eXBpY2FsbHkgYmVjYXVzZSB0aGVyZSBpcyBubyByb3V0ZSBiZXR3ZWVuIHRoZSBpbml0aWF0b3IgYW5kIHRoZVxcbisgKiB0YXJnZXQgdGhhdCB0aGUgcGxhdGZvcm0ncyBQQ0llIHRvcG9sb2d5IGFuZCBBQ1Mgc2V0dGluZ3MgYWxsb3cpLiBUaGlzXFxuKyAqIGlzIGEgcHJvcGVydHkgb2YgdGhlIGluaXRpYXRvci90YXJnZXQgcGFpciwgbm90IG9mIHRoZSB0YXJnZXQgZGV2aWNlJ3NcXG4rICogaGVhbHRoLiBUaGlzIGVycm9yIHNob3VsZCBuZXZlciBiZSByZXRyaWVkLlxcbisgKi9cXG4rI2RlZmluZSBCTEtfU1RTX1AyUERNQVxcdCgoX19mb3JjZSBibGtfc3RhdHVzX3QpMTgpXFxuK1xcbiAvKlxcbiAgKiBJbnZhbGlkIHNpemUgb3IgYWxpZ25tZW50LlxcbiAgKi9cXG5AQCAtMTg4LDYgKzE5Nyw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBibGtfcGF0aF9lcnJvcihibGtfc3RhdHVzX3QgZXJyb3IpXFxuIFxcdGNhc2UgQkxLX1NUU19OT1RTVVBQOlxcbiBcXHRjYXNlIEJMS19TVFNfTk9TUEM6XFxuIFxcdGNhc2UgQkxLX1NUU19UQVJHRVQ6XFxuK1xcdGNhc2UgQkxLX1NUU19QMlBETUE6XFxuIFxcdGNhc2UgQkxLX1NUU19SRVNWX0NPTkZMSUNUOlxcbiBcXHRjYXNlIEJMS19TVFNfTUVESVVNOlxcbiBcXHRjYXNlIEJMS19TVFNfUFJPVEVDVElPTjpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMjE6MzM6MDkuMjI2NTE1Nzc2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTAwMDc3MzUxOTE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1EX1JBSUQxXCIsXG4gICAgXCJNRF9SQUlEMTBcIixcbiAgICBcIk5WTUVfUkRNQVwiLFxuICAgIFwiUENJX1AyUERNQVwiLFxuICAgIFwiTlZNRV9UQVJHRVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyYWlkMV93cml0ZV9lcnJvclwiLFxuICAgIFwibmFycm93X3dyaXRlX2Vycm9yXCIsXG4gICAgXCJoYW5kbGVfd3JpdGVfZmluaXNoZWRcIixcbiAgICBcImhhbmRsZV93cml0ZV9jb21wbGV0ZWRcIixcbiAgICBcImhhbmRsZV9yZWFkX2Vycm9yXCIsXG4gICAgXCJudm1lX3JkbWFfZG1hX21hcF9yZXFcIixcbiAgICBcIm52bWVfcmRtYV9xdWV1ZV9ycVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgaGFuZGxpbmcgZm9yIEJMS19TVFNfUDJQRE1BIGVycm9ycyBpbiB0aGUgYmxvY2sgbGF5ZXIsIE1EIFJBSUQgKFJBSUQxL1JBSUQxMCksIGFuZCBOVk1lIFJETUEuIEl0IG1vZGlmaWVzIGVycm9yIGhhbmRsaW5nIHBhdGhzIGluIE1EIFJBSUQgdG8gcHJvcGVybHkgaGFuZGxlIFAyUERNQSBtYXBwaW5nIGZhaWx1cmVzIGJ5IHNldHRpbmcgYmFkYmxvY2tzIG9yIGJsb2NraW5nIHJlYWRzIGluc3RlYWQgb2YgZmFpbGluZyB0aGUgdW5kZXJseWluZyBkZXZpY2UuIEl0IGFsc28gbW9kaWZpZXMgTlZNZSBSRE1BIHRvIHVzZSBpYl9kbWFfbWFwX3NndGFibGVfYXR0cnMgYW5kIHJldHVybiBCTEtfU1RTX1AyUERNQSBvbiBtYXBwaW5nIGZhaWx1cmVzLiBUaGVzZSBjaGFuZ2VzIGFyZSBmdW5jdGlvbmFsbHkgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBieSBjb25maWd1cmluZyBOVk1lIHRhcmdldHMgd2l0aCBQMlAgbWVtb3J5IGJhY2tlZCBieSBNRCBhcnJheXMsIG9yIGJ5IHVzaW5nIE5WTWUgUkRNQSBvdmVyIHNvZnR3YXJlIFJETUEgZGV2aWNlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzNzFlZDYwM2ViZDdhNjgzNzZiYjgyMGVmOGRlMDdhY2JmNzM1NWRlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgMjMgMjE6MzM6MDcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9ibG9jay9ibGstY29yZS5jIGIvYmxvY2svYmxrLWNvcmUuY1xuaW5kZXggMzY1NjQxMjY2YzllODIuLjgzY2I1NDY0MjY1ZmI2IDEwMDY0NFxuLS0tIGEvYmxvY2svYmxrLWNvcmUuY1xuKysrIGIvYmxvY2svYmxrLWNvcmUuY1xuQEAgLTE3Nyw2ICsxNzcsOSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHtcbiBcbiBcdC8qIENvbW1hbmQgZHVyYXRpb24gbGltaXQgZGV2aWNlLXNpZGUgdGltZW91dCAqL1xuIFx0RU5UKERVUkFUSU9OX0xJTUlULFx0LUVUSU1FLFx0XHRcImR1cmF0aW9uIGxpbWl0IGV4Y2VlZGVkXCIpLFxuK1xuK1x0Lyogbm8gUENJZSBQMlBETUEgcm91dGUgYmV0d2VlbiBpbml0aWF0b3IgYW5kIHRhcmdldCAqL1xuK1x0RU5UKFAyUERNQSxcdFx0LUVSRU1PVEVJTyxcdFwicGVlci10by1wZWVyIHRyYW5zZmVyIHVucm91dGFibGVcIiksXG4gXHRFTlQoSU5WQUwsXHRcdC1FSU5WQUwsXHRcImludmFsaWRcIiksXG4gXG4gXHQvKiBldmVyeXRoaW5nIGVsc2Ugbm90IGNvdmVyZWQgYWJvdmU6ICovXG5kaWZmIC0tZ2l0IGEvYmxvY2svYmxrLW1xLWRtYS5jIGIvYmxvY2svYmxrLW1xLWRtYS5jXG5pbmRleCBiZmRiOWVkNzA3NDExNi4uZTg4ZDZiMzUyNGU2YWQgMTAwNjQ0XG4tLS0gYS9ibG9jay9ibGstbXEtZG1hLmNcbisrKyBiL2Jsb2NrL2Jsay1tcS1kbWEuY1xuQEAgLTE4OSw4ICsxODksOSBAQCBzdGF0aWMgYm9vbCBibGtfZG1hX21hcF9pdGVyX3N0YXJ0KHN0cnVjdCByZXF1ZXN0ICpyZXEsIHN0cnVjdCBkZXZpY2UgKmRtYV9kZXYsXG4gXHRcdCAqL1xuIFx0Y2FzZSBQQ0lfUDJQRE1BX01BUF9OT05FOlxuIFx0XHRicmVhaztcbitcdGNhc2UgUENJX1AyUERNQV9NQVBfTk9UX1NVUFBPUlRFRDpcbiBcdGRlZmF1bHQ6XG4tXHRcdGl0ZXItXHUwMDNlc3RhdHVzID0gQkxLX1NUU19JTlZBTDtcbitcdFx0aXRlci1cdTAwM2VzdGF0dXMgPSBCTEtfU1RTX1AyUERNQTtcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFx0fVxuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvbWQuYyBiL2RyaXZlcnMvbWQvbWQuY1xuaW5kZXggZDE0NjViY2Q4NmM4MTIuLjM3NzBiZGI0ZDRiMjhiIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9tZC9tZC5jXG4rKysgYi9kcml2ZXJzL21kL21kLmNcbkBAIC00NTEsOCArNDUxLDE0IEBAIHN0YXRpYyB2b2lkIG1kX3N1Ym1pdF9iaW8oc3RydWN0IGJpbyAqYmlvKVxuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG4tXHQvKiBiaW8gY291bGQgYmUgbWVyZ2VhYmxlIGFmdGVyIHBhc3NpbmcgdG8gdW5kZXJsYXllciAqL1xuLVx0YmlvLVx1MDAzZWJpX29wZiBcdTAwMjY9IH5SRVFfTk9NRVJHRTtcbitcdC8qXG4rXHQgKiBBIGJpbyBtZCBzcGxpdCBtYXkgbWVyZ2UgYWdhaW4gYmVsb3cgbWQgLS0gZXhjZXB0IFAyUERNQSBiaW9zLFxuK1x0ICogd2hpY2ggbXVzdCBzdGF5IHNpbmdsZS1wcm92aWRlciAoc2VlIF9fYmlvX2FkZF9wYWdlKCkpLlxuK1x0ICovXG4rXHRpZiAobWRfYmlvX2lzX3AycGRtYShiaW8pKVxuK1x0XHRiaW8tXHUwMDNlYmlfb3BmIHw9IFJFUV9OT01FUkdFO1xuK1x0ZWxzZVxuK1x0XHRiaW8tXHUwMDNlYmlfb3BmIFx1MDAyNj0gflJFUV9OT01FUkdFO1xuIFxuIFx0bWRfaGFuZGxlX3JlcXVlc3QobWRkZXYsIGJpbyk7XG4gfVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvbWQuaCBiL2RyaXZlcnMvbWQvbWQuaFxuaW5kZXggZDhkYWYwZjc1Y2JiZTguLjczZGYxYTZlY2NkODUwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9tZC9tZC5oXG4rKysgYi9kcml2ZXJzL21kL21kLmhcbkBAIC0xMSw4ICsxMSwxMCBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Jsa2Rldi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYmFja2luZy1kZXYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JhZGJsb2Nrcy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvYmlvLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rb2JqZWN0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9saXN0LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1yZW1hcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbW0uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L211dGV4LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC90aW1lci5oXHUwMDNlXG5AQCAtMjIsNiArMjQsMTkgQEBcbiAjaW5jbHVkZSBcdTAwM2N0cmFjZS9ldmVudHMvYmxvY2suaFx1MDAzZVxuIFxuICNkZWZpbmUgTWF4U2VjdG9yICh+KHNlY3Rvcl90KTApXG4rXG4rLypcbisgKiBQMlAgYW5kIGhvc3QgcGFnZXMgbmV2ZXIgbWl4IHdpdGhpbiBhIGJpbywgc28gdGhlIGZpcnN0IGJ2ZWMgaXNcbisgKiByZXByZXNlbnRhdGl2ZS4gIFJlYWQgYmlfaW9fdmVjIGRpcmVjdGx5OiBiaW9fZmlyc3RfYnZlY19hbGwoKVxuKyAqIFdBUk5zIG9uIHRoZSBzcGxpdCBjbG9uZXMgbWQgaGFuZGxlcywgYW5kIGRhdGEtbGVzcyBiaW9zIGhhdmUgbm9cbisgKiBiaV9pb192ZWMuICBOb3QgdmFsaWQgYWZ0ZXIgdGhlIGJpbydzIGl0ZXJhdG9yIGlzIGNvbnN1bWVkLlxuKyAqL1xuK3N0YXRpYyBpbmxpbmUgYm9vbCBtZF9iaW9faXNfcDJwZG1hKHN0cnVjdCBiaW8gKmJpbylcbit7XG4rXHRyZXR1cm4gYmlvX2hhc19kYXRhKGJpbykgXHUwMDI2XHUwMDI2IGJpby1cdTAwM2ViaV9pb192ZWMgXHUwMDI2XHUwMDI2XG4rXHQgICAgICAgaXNfcGNpX3AycGRtYV9wYWdlKGJpby1cdTAwM2ViaV9pb192ZWMtXHUwMDNlYnZfcGFnZSk7XG4rfVxuK1xuIC8qXG4gICogTnVtYmVyIG9mIGd1YXJhbnRlZWQgcmFpZCBiaW9zIGluIGNhc2Ugb2YgZXh0cmVtZSBWTSBsb2FkOlxuICAqL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvcmFpZDEtMTAuYyBiL2RyaXZlcnMvbWQvcmFpZDEtMTAuY1xuaW5kZXggNTZhNTZhNGRhNGY4M2YuLjg5ZGFmODU1ODI1MWZhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9tZC9yYWlkMS0xMC5jXG4rKysgYi9kcml2ZXJzL21kL3JhaWQxLTEwLmNcbkBAIC0zMDMsMyArMzAzLDE5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCByYWlkMV9zaG91bGRfaGFuZGxlX2Vycm9yKHN0cnVjdCBiaW8gKmJpbylcbiBcdHJldHVybiAhKGJpby1cdTAwM2ViaV9vcGYgXHUwMDI2IChSRVFfUkFIRUFEIHwgUkVRX05PV0FJVCkpIFx1MDAyNlx1MDAyNlxuIFx0XHRiaW8tXHUwMDNlYmlfc3RhdHVzICE9IEJMS19TVFNfSU5WQUw7XG4gfVxuK1xuK3N0YXRpYyBpbmxpbmUgdm9pZCByYWlkMV93cml0ZV9lcnJvcihzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWRfcmRldiAqcmRldixcbitcdFx0XHRcdCAgICAgc3RydWN0IGJpbyAqYmlvLCBib29sIGFsbG93X2ZhaWxmYXN0KVxuK3tcbitcdHNldF9iaXQoV3JpdGVFcnJvclNlZW4sIFx1MDAyNnJkZXYtXHUwMDNlZmxhZ3MpO1xuK1xuK1x0aWYgKGJpby1cdTAwM2ViaV9zdGF0dXMgPT0gQkxLX1NUU19QMlBETUEpXG4rXHRcdHJldHVybjtcbitcbitcdGlmICghdGVzdF9hbmRfc2V0X2JpdChXYW50UmVwbGFjZW1lbnQsIFx1MDAyNnJkZXYtXHUwMDNlZmxhZ3MpKVxuK1x0XHRzZXRfYml0KE1EX1JFQ09WRVJZX05FRURFRCwgXHUwMDI2bWRkZXYtXHUwMDNlcmVjb3ZlcnkpO1xuK1xuK1x0aWYgKGFsbG93X2ZhaWxmYXN0IFx1MDAyNlx1MDAyNiB0ZXN0X2JpdChGYWlsRmFzdCwgXHUwMDI2cmRldi1cdTAwM2VmbGFncykgXHUwMDI2XHUwMDI2XG4rXHQgICAgKGJpby1cdTAwM2ViaV9vcGYgXHUwMDI2IE1EX0ZBSUxGQVNUKSlcbitcdFx0bWRfZXJyb3IobWRkZXYsIHJkZXYpO1xuK31cbmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3JhaWQxLmMgYi9kcml2ZXJzL21kL3JhaWQxLmNcbmluZGV4IGFmZTJjYTk2YWQ4YzIyLi43NmExNDI2ZTY0ZjAyZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbWQvcmFpZDEuY1xuKysrIGIvZHJpdmVycy9tZC9yYWlkMS5jXG5AQCAtNDgzLDE3ICs0ODMsOCBAQCBzdGF0aWMgdm9pZCByYWlkMV9lbmRfd3JpdGVfcmVxdWVzdChzdHJ1Y3QgYmlvICpiaW8pXG4gXHQgKiAnb25lIG1pcnJvciBJTyBoYXMgZmluaXNoZWQnIGV2ZW50IGhhbmRsZXI6XG4gXHQgKi9cbiBcdGlmIChiaW8tXHUwMDNlYmlfc3RhdHVzIFx1MDAyNlx1MDAyNiAhaWdub3JlX2Vycm9yKSB7XG4tXHRcdHNldF9iaXQoV3JpdGVFcnJvclNlZW4sXHRcdTAwMjZyZGV2LVx1MDAzZWZsYWdzKTtcbi1cdFx0aWYgKCF0ZXN0X2FuZF9zZXRfYml0KFdhbnRSZXBsYWNlbWVudCwgXHUwMDI2cmRldi1cdTAwM2VmbGFncykpXG4tXHRcdFx0c2V0X2JpdChNRF9SRUNPVkVSWV9ORUVERUQsIFx1MDAyNlxuLVx0XHRcdFx0Y29uZi1cdTAwM2VtZGRldi1cdTAwM2VyZWNvdmVyeSk7XG4tXG4tXHRcdGlmICh0ZXN0X2JpdChGYWlsRmFzdCwgXHUwMDI2cmRldi1cdTAwM2VmbGFncykgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICAoYmlvLVx1MDAzZWJpX29wZiBcdTAwMjYgTURfRkFJTEZBU1QpIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgLyogV2UgbmV2ZXIgdHJ5IEZhaWxGYXN0IHRvIFdyaXRlTW9zdGx5IGRldmljZXMgKi9cbi1cdFx0ICAgICF0ZXN0X2JpdChXcml0ZU1vc3RseSwgXHUwMDI2cmRldi1cdTAwM2VmbGFncykpIHtcbi1cdFx0XHRtZF9lcnJvcihyMV9iaW8tXHUwMDNlbWRkZXYsIHJkZXYpO1xuLVx0XHR9XG4rXHRcdHJhaWQxX3dyaXRlX2Vycm9yKGNvbmYtXHUwMDNlbWRkZXYsIHJkZXYsIGJpbyxcbitcdFx0XHRcdCAgIXRlc3RfYml0KFdyaXRlTW9zdGx5LCBcdTAwMjZyZGV2LVx1MDAzZWZsYWdzKSk7XG4gXG4gXHRcdC8qXG4gXHRcdCAqIFdoZW4gdGhlIGRldmljZSBpcyBmYXVsdHksIGl0IGlzIG5vdCBuZWNlc3NhcnkgdG9cbkBAIC01NjQsNyArNTU1LDcgQEAgc3RhdGljIHZvaWQgcmFpZDFfZW5kX3dyaXRlX3JlcXVlc3Qoc3RydWN0IGJpbyAqYmlvKVxuIFx0XHRcdFx0Y2FsbF9iaW9fZW5kaW8ocjFfYmlvKTtcbiBcdFx0XHR9XG4gXHRcdH1cbi1cdH0gZWxzZSBpZiAodGVzdF9iaXQoTURfU0VSSUFMSVpFX1BPTElDWSwgXHUwMDI2cmRldi1cdTAwM2VtZGRldi1cdTAwM2VmbGFncykpXG4rXHR9IGVsc2UgaWYgKHRlc3RfYml0KENvbGxpc2lvbkNoZWNrLCBcdTAwMjZyZGV2LVx1MDAzZWZsYWdzKSlcbiBcdFx0cmVtb3ZlX3NlcmlhbChyZGV2LCBsbywgaGkpO1xuIFx0aWYgKHIxX2Jpby1cdTAwM2ViaW9zW21pcnJvcl0gPT0gTlVMTClcbiBcdFx0cmRldl9kZWNfcGVuZGluZyhyZGV2LCBjb25mLVx1MDAzZW1kZGV2KTtcbkBAIC0xNTIzLDYgKzE1MTQsNyBAQCBzdGF0aWMgYm9vbCByYWlkMV93cml0ZV9yZXF1ZXN0KHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBiaW8gKmJpbyxcbiBcdGJvb2wgd3JpdGVfYmVoaW5kID0gZmFsc2U7XG4gXHRib29sIG5vd2FpdCA9IGJpby1cdTAwM2ViaV9vcGYgXHUwMDI2IFJFUV9OT1dBSVQ7XG4gXHRib29sIGlzX2Rpc2NhcmQgPSBvcF9pc19kaXNjYXJkKGJpby1cdTAwM2ViaV9vcGYpO1xuK1x0Ym9vbCBpc19wMnBkbWEgPSBtZF9iaW9faXNfcDJwZG1hKGJpbyk7XG4gXHRzZWN0b3JfdCBzZWN0b3IgPSBiaW8tXHUwMDNlYmlfaXRlci5iaV9zZWN0b3I7XG4gXG4gXHRpZiAobWRkZXZfaXNfY2x1c3RlcmVkKG1kZGV2KSBcdTAwMjZcdTAwMjZcbkBAIC0xNTc1LDkgKzE1NjcsMTIgQEAgc3RhdGljIGJvb2wgcmFpZDFfd3JpdGVfcmVxdWVzdChzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgYmlvICpiaW8sXG4gXHRcdC8qXG4gXHRcdCAqIFRoZSB3cml0ZS1iZWhpbmQgaW8gaXMgb25seSBhdHRlbXB0ZWQgb24gZHJpdmVzIG1hcmtlZCBhc1xuIFx0XHQgKiB3cml0ZS1tb3N0bHksIHdoaWNoIG1lYW5zIHdlIGNvdWxkIGFsbG9jYXRlIHdyaXRlIGJlaGluZFxuLVx0XHQgKiBiaW8gbGF0ZXIuXG4rXHRcdCAqIGJpbyBsYXRlci4gUDJQRE1BIGJpb3MgYXJlIGV4Y2x1ZGVkOiB3cml0ZS1iZWhpbmQgY29waWVzXG4rXHRcdCAqIHRoZSBkYXRhIHdpdGggYmlvX2NvcHlfZGF0YSgpLCBhIENQVSBjb3B5IHRoYXQgY2Fubm90IGJlXG4rXHRcdCAqIGFzc3VtZWQgc2FmZSBvciBmYXN0IG9uIFAyUERNQSAoZGV2aWNlIEJBUikgcGFnZXMuXG4gXHRcdCAqL1xuLVx0XHRpZiAoIWlzX2Rpc2NhcmQgXHUwMDI2XHUwMDI2IHJkZXYgXHUwMDI2XHUwMDI2IHRlc3RfYml0KFdyaXRlTW9zdGx5LCBcdTAwMjZyZGV2LVx1MDAzZWZsYWdzKSlcbitcdFx0aWYgKCFpc19kaXNjYXJkIFx1MDAyNlx1MDAyNiAhaXNfcDJwZG1hIFx1MDAyNlx1MDAyNiByZGV2IFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgdGVzdF9iaXQoV3JpdGVNb3N0bHksIFx1MDAyNnJkZXYtXHUwMDNlZmxhZ3MpKVxuIFx0XHRcdHdyaXRlX2JlaGluZCA9IHRydWU7XG4gXG4gXHRcdHIxX2Jpby1cdTAwM2ViaW9zW2ldID0gTlVMTDtcbkBAIC0xNjc3LDcgKzE2NzIsMTEgQEAgc3RhdGljIGJvb2wgcmFpZDFfd3JpdGVfcmVxdWVzdChzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgYmlvICpiaW8sXG4gXHRcdFx0bWJpbyA9IGJpb19hbGxvY19jbG9uZShyZGV2LVx1MDAzZWJkZXYsIGJpbywgR0ZQX05PSU8sXG4gXHRcdFx0XHRcdCAgICAgICBcdTAwMjZtZGRldi1cdTAwM2ViaW9fc2V0KTtcbiBcbi1cdFx0XHRpZiAodGVzdF9iaXQoTURfU0VSSUFMSVpFX1BPTElDWSwgXHUwMDI2bWRkZXYtXHUwMDNlZmxhZ3MpKVxuK1x0XHRcdC8qXG4rXHRcdFx0ICogQ29sbGlzaW9uQ2hlY2sgbWFya3MgZXZlcnkgcmRldiB3aXRoIGEgc2VyaWFsXG4rXHRcdFx0ICogdHJlZTsgb3JkZXIgYWdhaW5zdCBpbi1mbGlnaHQgd3JpdGUtYmVoaW5kIEkvTy5cbitcdFx0XHQgKi9cbitcdFx0XHRpZiAodGVzdF9iaXQoQ29sbGlzaW9uQ2hlY2ssIFx1MDAyNnJkZXYtXHUwMDNlZmxhZ3MpKVxuIFx0XHRcdFx0d2FpdF9mb3Jfc2VyaWFsaXphdGlvbihyZGV2LCByMV9iaW8pO1xuIFx0XHR9XG4gXG5AQCAtMjU2Miw2ICsyNTYxLDkgQEAgc3RhdGljIHZvaWQgbmFycm93X3dyaXRlX2Vycm9yKHN0cnVjdCByMWJpbyAqcjFfYmlvLCBpbnQgaSlcbiBcdFx0fVxuIFxuIFx0XHR3YmlvLVx1MDAzZWJpX29wZiA9IFJFUV9PUF9XUklURTtcbitcdFx0LyogS2VlcCBQMlBETUEgcmV0cnkgYmlvcyB1bm1lcmdlYWJsZSwgbGlrZSB0aGUgb3JpZ2luYWwgKi9cbitcdFx0aWYgKG1kX2Jpb19pc19wMnBkbWEod2JpbykpXG4rXHRcdFx0d2Jpby1cdTAwM2ViaV9vcGYgfD0gUkVRX05PTUVSR0U7XG4gXHRcdHdiaW8tXHUwMDNlYmlfaXRlci5iaV9zZWN0b3IgPSByMV9iaW8tXHUwMDNlc2VjdG9yO1xuIFx0XHR3YmlvLVx1MDAzZWJpX2l0ZXIuYmlfc2l6ZSA9IHIxX2Jpby1cdTAwM2VzZWN0b3JzIFx1MDAzY1x1MDAzYyA5O1xuIFxuQEAgLTI2MjIsMTAgKzI2MjQsMTYgQEAgc3RhdGljIHZvaWQgaGFuZGxlX3dyaXRlX2ZpbmlzaGVkKHN0cnVjdCByMWNvbmYgKmNvbmYsIHN0cnVjdCByMWJpbyAqcjFfYmlvKVxuIFx0XHRcdCAqIG5hcnJvdyBkb3duIGFuZCByZWNvcmQgcHJlY2lzZSB3cml0ZVxuIFx0XHRcdCAqIGVycm9ycy5cbiBcdFx0XHQgKi9cbitcdFx0XHRzdHJ1Y3QgbWRfcmRldiAqcmRldiA9IGNvbmYtXHUwMDNlbWlycm9yc1ttXS5yZGV2O1xuK1xuIFx0XHRcdGZhaWwgPSB0cnVlO1xuLVx0XHRcdG5hcnJvd193cml0ZV9lcnJvcihyMV9iaW8sIG0pO1xuLVx0XHRcdHJkZXZfZGVjX3BlbmRpbmcoY29uZi1cdTAwM2VtaXJyb3JzW21dLnJkZXYsXG4tXHRcdFx0XHRcdCBjb25mLVx1MDAzZW1kZGV2KTtcbitcdFx0XHQvKiBNYXBwaW5nIGZhaWx1cmVzIGFyZSB3aG9sZS1yYW5nZSBhbmQgZGV0ZXJtaW5pc3RpYyAqL1xuK1x0XHRcdGlmIChyMV9iaW8tXHUwMDNlYmlvc1ttXS1cdTAwM2ViaV9zdGF0dXMgPT0gQkxLX1NUU19QMlBETUEpXG4rXHRcdFx0XHRyZGV2X3NldF9iYWRibG9ja3MocmRldiwgcjFfYmlvLVx1MDAzZXNlY3RvcixcbitcdFx0XHRcdFx0XHQgICByMV9iaW8tXHUwMDNlc2VjdG9ycywgMCk7XG4rXHRcdFx0ZWxzZVxuK1x0XHRcdFx0bmFycm93X3dyaXRlX2Vycm9yKHIxX2JpbywgbSk7XG4rXHRcdFx0cmRldl9kZWNfcGVuZGluZyhyZGV2LCBjb25mLVx1MDAzZW1kZGV2KTtcbiBcdFx0fVxuIFx0aWYgKGZhaWwpIHtcbiBcdFx0c3Bpbl9sb2NrX2lycShcdTAwMjZjb25mLVx1MDAzZWRldmljZV9sb2NrKTtcbkBAIC0yNjUwLDYgKzI2NTgsOCBAQCBzdGF0aWMgdm9pZCBoYW5kbGVfcmVhZF9lcnJvcihzdHJ1Y3QgcjFjb25mICpjb25mLCBzdHJ1Y3QgcjFiaW8gKnIxX2JpbylcbiB7XG4gXHRzdHJ1Y3QgbWRfcmRldiAqcmRldiA9IGNvbmYtXHUwMDNlbWlycm9yc1tyMV9iaW8tXHUwMDNlcmVhZF9kaXNrXS5yZGV2O1xuIFx0c3RydWN0IGJpbyAqYmlvID0gcjFfYmlvLVx1MDAzZWJpb3NbcjFfYmlvLVx1MDAzZXJlYWRfZGlza107XG4rXHQvKiBldmFsdWF0ZSBiZWZvcmUgdGhlIGJpb19wdXQoKSBiZWxvdyAqL1xuK1x0Ym9vbCBwMnBkbWFfZXJyb3IgPSBiaW8tXHUwMDNlYmlfc3RhdHVzID09IEJMS19TVFNfUDJQRE1BO1xuIFx0c3RydWN0IG1kZGV2ICptZGRldiA9IGNvbmYtXHUwMDNlbWRkZXY7XG4gXHRzZWN0b3JfdCBzZWN0b3I7XG4gXG5AQCAtMjY2Nyw3ICsyNjc3LDcgQEAgc3RhdGljIHZvaWQgaGFuZGxlX3JlYWRfZXJyb3Ioc3RydWN0IHIxY29uZiAqY29uZiwgc3RydWN0IHIxYmlvICpyMV9iaW8pXG4gXHQgKiByZWFkIGVycm9yLiAgVGhpcyBpcyBhbGwgZG9uZSBzeW5jaHJvbm91c2x5IHdoaWxlIHRoZSBhcnJheSBpc1xuIFx0ICogZnJvemVuLlxuIFx0ICovXG4tXHRpZiAobWRkZXYtXHUwMDNlcm8pIHtcbitcdGlmIChtZGRldi1cdTAwM2VybyB8fCBwMnBkbWFfZXJyb3IpIHtcbiBcdFx0cjFfYmlvLVx1MDAzZWJpb3NbcjFfYmlvLVx1MDAzZXJlYWRfZGlza10gPSBJT19CTE9DS0VEO1xuIFx0fSBlbHNlIGlmICh0ZXN0X2JpdChGYWlsRmFzdCwgXHUwMDI2cmRldi1cdTAwM2VmbGFncykpIHtcbiBcdFx0bWRfZXJyb3IobWRkZXYsIHJkZXYpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvcmFpZDEwLmMgYi9kcml2ZXJzL21kL3JhaWQxMC5jXG5pbmRleCAwYTNjZmRkM2Y1ZGY4MC4uZTM1YWVhYzI5ZjA2NDIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL21kL3JhaWQxMC5jXG4rKysgYi9kcml2ZXJzL21kL3JhaWQxMC5jXG5AQCAtNDgyLDE2ICs0ODIsOCBAQCBzdGF0aWMgdm9pZCByYWlkMTBfZW5kX3dyaXRlX3JlcXVlc3Qoc3RydWN0IGJpbyAqYmlvKVxuIFx0XHRcdCAqL1xuIFx0XHRcdG1kX2Vycm9yKHJkZXYtXHUwMDNlbWRkZXYsIHJkZXYpO1xuIFx0XHRlbHNlIHtcbi1cdFx0XHRzZXRfYml0KFdyaXRlRXJyb3JTZWVuLFx0XHUwMDI2cmRldi1cdTAwM2VmbGFncyk7XG4tXHRcdFx0aWYgKCF0ZXN0X2FuZF9zZXRfYml0KFdhbnRSZXBsYWNlbWVudCwgXHUwMDI2cmRldi1cdTAwM2VmbGFncykpXG4tXHRcdFx0XHRzZXRfYml0KE1EX1JFQ09WRVJZX05FRURFRCxcbi1cdFx0XHRcdFx0XHUwMDI2cmRldi1cdTAwM2VtZGRldi1cdTAwM2VyZWNvdmVyeSk7XG4tXG4gXHRcdFx0ZGVjX3JkZXYgPSAwO1xuLVx0XHRcdGlmICh0ZXN0X2JpdChGYWlsRmFzdCwgXHUwMDI2cmRldi1cdTAwM2VmbGFncykgXHUwMDI2XHUwMDI2XG4tXHRcdFx0ICAgIChiaW8tXHUwMDNlYmlfb3BmIFx1MDAyNiBNRF9GQUlMRkFTVCkpIHtcbi1cdFx0XHRcdG1kX2Vycm9yKHJkZXYtXHUwMDNlbWRkZXYsIHJkZXYpO1xuLVx0XHRcdH1cbitcdFx0XHRyYWlkMV93cml0ZV9lcnJvcihyZGV2LVx1MDAzZW1kZGV2LCByZGV2LCBiaW8sIHRydWUpO1xuIFxuIFx0XHRcdC8qXG4gXHRcdFx0ICogV2hlbiB0aGUgZGV2aWNlIGlzIGZhdWx0eSwgaXQgaXMgbm90IG5lY2Vzc2FyeSB0b1xuQEAgLTI4MzEsNiArMjgyMyw5IEBAIHN0YXRpYyB2b2lkIG5hcnJvd193cml0ZV9lcnJvcihzdHJ1Y3QgcjEwYmlvICpyMTBfYmlvLCBpbnQgaSlcbiBcdFx0d2Jpby1cdTAwM2ViaV9pdGVyLmJpX3NlY3RvciA9IHdzZWN0b3IgK1xuIFx0XHRcdFx0ICAgY2hvb3NlX2RhdGFfb2Zmc2V0KHIxMF9iaW8sIHJkZXYpO1xuIFx0XHR3YmlvLVx1MDAzZWJpX29wZiA9IFJFUV9PUF9XUklURTtcbitcdFx0LyogS2VlcCBQMlBETUEgcmV0cnkgYmlvcyB1bm1lcmdlYWJsZSwgbGlrZSB0aGUgb3JpZ2luYWwgKi9cbitcdFx0aWYgKG1kX2Jpb19pc19wMnBkbWEod2JpbykpXG4rXHRcdFx0d2Jpby1cdTAwM2ViaV9vcGYgfD0gUkVRX05PTUVSR0U7XG4gXG4gXHRcdGlmIChzdWJtaXRfYmlvX3dhaXQod2JpbykgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICAhcmRldl9zZXRfYmFkYmxvY2tzKHJkZXYsIHdzZWN0b3IsIHNlY3RvcnMsIDApKSB7XG5AQCAtMjg1Myw2ICsyODQ4LDcgQEAgc3RhdGljIHZvaWQgaGFuZGxlX3JlYWRfZXJyb3Ioc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IHIxMGJpbyAqcjEwX2JpbylcbiB7XG4gXHRpbnQgc2xvdCA9IHIxMF9iaW8tXHUwMDNlcmVhZF9zbG90O1xuIFx0c3RydWN0IGJpbyAqYmlvO1xuK1x0Ym9vbCBwMnBkbWFfZXJyb3I7XG4gXHRzdHJ1Y3QgcjEwY29uZiAqY29uZiA9IG1kZGV2LVx1MDAzZXByaXZhdGU7XG4gXHRzdHJ1Y3QgbWRfcmRldiAqcmRldiA9IHIxMF9iaW8tXHUwMDNlZGV2c1tzbG90XS5yZGV2O1xuIFxuQEAgLTI4NjUsMTAgKzI4NjEsMTIgQEAgc3RhdGljIHZvaWQgaGFuZGxlX3JlYWRfZXJyb3Ioc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IHIxMGJpbyAqcjEwX2JpbylcbiBcdCAqIGZyb3plbi5cbiBcdCAqL1xuIFx0YmlvID0gcjEwX2Jpby1cdTAwM2VkZXZzW3Nsb3RdLmJpbztcbitcdC8qIGV2YWx1YXRlIGJlZm9yZSB0aGUgYmlvX3B1dCgpIGJlbG93ICovXG4rXHRwMnBkbWFfZXJyb3IgPSBiaW8tXHUwMDNlYmlfc3RhdHVzID09IEJMS19TVFNfUDJQRE1BO1xuIFx0YmlvX3B1dChiaW8pO1xuIFx0cjEwX2Jpby1cdTAwM2VkZXZzW3Nsb3RdLmJpbyA9IE5VTEw7XG4gXG4tXHRpZiAobWRkZXYtXHUwMDNlcm8pXG4rXHRpZiAobWRkZXYtXHUwMDNlcm8gfHwgcDJwZG1hX2Vycm9yKVxuIFx0XHRyMTBfYmlvLVx1MDAzZWRldnNbc2xvdF0uYmlvID0gSU9fQkxPQ0tFRDtcbiBcdGVsc2UgaWYgKCF0ZXN0X2JpdChGYWlsRmFzdCwgXHUwMDI2cmRldi1cdTAwM2VmbGFncykpIHtcbiBcdFx0ZnJlZXplX2FycmF5KGNvbmYsIDEpO1xuQEAgLTI5NDUsNyArMjk0MywxMyBAQCBzdGF0aWMgdm9pZCBoYW5kbGVfd3JpdGVfY29tcGxldGVkKHN0cnVjdCByMTBjb25mICpjb25mLCBzdHJ1Y3QgcjEwYmlvICpyMTBfYmlvKVxuIFx0XHRcdFx0cmRldl9kZWNfcGVuZGluZyhyZGV2LCBjb25mLVx1MDAzZW1kZGV2KTtcbiBcdFx0XHR9IGVsc2UgaWYgKGJpbyAhPSBOVUxMIFx1MDAyNlx1MDAyNiBiaW8tXHUwMDNlYmlfc3RhdHVzKSB7XG4gXHRcdFx0XHRmYWlsID0gdHJ1ZTtcbi1cdFx0XHRcdG5hcnJvd193cml0ZV9lcnJvcihyMTBfYmlvLCBtKTtcbitcdFx0XHRcdC8qIE1hcHBpbmcgZmFpbHVyZXMgYXJlIHdob2xlLXJhbmdlIGFuZCBkZXRlcm1pbmlzdGljICovXG4rXHRcdFx0XHRpZiAoYmlvLVx1MDAzZWJpX3N0YXR1cyA9PSBCTEtfU1RTX1AyUERNQSlcbitcdFx0XHRcdFx0cmRldl9zZXRfYmFkYmxvY2tzKHJkZXYsXG4rXHRcdFx0XHRcdFx0XHQgICByMTBfYmlvLVx1MDAzZWRldnNbbV0uYWRkcixcbitcdFx0XHRcdFx0XHRcdCAgIHIxMF9iaW8tXHUwMDNlc2VjdG9ycywgMCk7XG4rXHRcdFx0XHRlbHNlXG4rXHRcdFx0XHRcdG5hcnJvd193cml0ZV9lcnJvcihyMTBfYmlvLCBtKTtcbiBcdFx0XHRcdHJkZXZfZGVjX3BlbmRpbmcocmRldiwgY29uZi1cdTAwM2VtZGRldik7XG4gXHRcdFx0fVxuIFx0XHRcdGJpbyA9IHIxMF9iaW8tXHUwMDNlZGV2c1ttXS5yZXBsX2JpbztcbmRpZmYgLS1naXQgYS9kcml2ZXJzL252bWUvaG9zdC9yZG1hLmMgYi9kcml2ZXJzL252bWUvaG9zdC9yZG1hLmNcbmluZGV4IDY5MDllMzU0Mjc5NDI3Li4yZjUwNTA5YTdhNjE2MCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbnZtZS9ob3N0L3JkbWEuY1xuKysrIGIvZHJpdmVycy9udm1lL2hvc3QvcmRtYS5jXG5AQCAtMTQ2OSw2ICsxNDY5LDcgQEAgc3RhdGljIGludCBudm1lX3JkbWFfZG1hX21hcF9yZXEoc3RydWN0IGliX2RldmljZSAqaWJkZXYsIHN0cnVjdCByZXF1ZXN0ICpycSxcbiBcdFx0aW50ICpjb3VudCwgaW50ICpwaV9jb3VudClcbiB7XG4gXHRzdHJ1Y3QgbnZtZV9yZG1hX3JlcXVlc3QgKnJlcSA9IGJsa19tcV9ycV90b19wZHUocnEpO1xuK1x0c3RydWN0IHNnX3RhYmxlIHNndDtcbiBcdGludCByZXQ7XG4gXG4gXHRyZXEtXHUwMDNlZGF0YV9zZ2wuc2dfdGFibGUuc2dsID0gKHN0cnVjdCBzY2F0dGVybGlzdCAqKShyZXEgKyAxKTtcbkBAIC0xNDgwLDEyICsxNDgxLDE0IEBAIHN0YXRpYyBpbnQgbnZtZV9yZG1hX2RtYV9tYXBfcmVxKHN0cnVjdCBpYl9kZXZpY2UgKmliZGV2LCBzdHJ1Y3QgcmVxdWVzdCAqcnEsXG4gXG4gXHRyZXEtXHUwMDNlZGF0YV9zZ2wubmVudHMgPSBibGtfcnFfbWFwX3NnKHJxLCByZXEtXHUwMDNlZGF0YV9zZ2wuc2dfdGFibGUuc2dsKTtcbiBcbi1cdCpjb3VudCA9IGliX2RtYV9tYXBfc2coaWJkZXYsIHJlcS1cdTAwM2VkYXRhX3NnbC5zZ190YWJsZS5zZ2wsXG4tXHRcdFx0ICAgICAgIHJlcS1cdTAwM2VkYXRhX3NnbC5uZW50cywgcnFfZG1hX2RpcihycSkpO1xuLVx0aWYgKHVubGlrZWx5KCpjb3VudCBcdTAwM2M9IDApKSB7XG4tXHRcdHJldCA9IC1FSU87XG4rXHRzZ3QgPSAoc3RydWN0IHNnX3RhYmxlKSB7XG4rXHRcdC5zZ2xcdFx0PSByZXEtXHUwMDNlZGF0YV9zZ2wuc2dfdGFibGUuc2dsLFxuK1x0XHQub3JpZ19uZW50c1x0PSByZXEtXHUwMDNlZGF0YV9zZ2wubmVudHMsXG4rXHR9O1xuK1x0cmV0ID0gaWJfZG1hX21hcF9zZ3RhYmxlX2F0dHJzKGliZGV2LCBcdTAwMjZzZ3QsIHJxX2RtYV9kaXIocnEpLCAwKTtcbitcdGlmICh1bmxpa2VseShyZXQpKVxuIFx0XHRnb3RvIG91dF9mcmVlX3RhYmxlO1xuLVx0fVxuK1x0KmNvdW50ID0gc2d0Lm5lbnRzO1xuIFxuIFx0aWYgKGJsa19pbnRlZ3JpdHlfcnEocnEpKSB7XG4gXHRcdHJlcS1cdTAwM2VtZXRhZGF0YV9zZ2wtXHUwMDNlc2dfdGFibGUuc2dsID1cbkBAIC0xNTAxLDE0ICsxNTA0LDE0IEBAIHN0YXRpYyBpbnQgbnZtZV9yZG1hX2RtYV9tYXBfcmVxKHN0cnVjdCBpYl9kZXZpY2UgKmliZGV2LCBzdHJ1Y3QgcmVxdWVzdCAqcnEsXG4gXG4gXHRcdHJlcS1cdTAwM2VtZXRhZGF0YV9zZ2wtXHUwMDNlbmVudHMgPSBibGtfcnFfbWFwX2ludGVncml0eV9zZyhycSxcbiBcdFx0XHRcdHJlcS1cdTAwM2VtZXRhZGF0YV9zZ2wtXHUwMDNlc2dfdGFibGUuc2dsKTtcbi1cdFx0KnBpX2NvdW50ID0gaWJfZG1hX21hcF9zZyhpYmRldixcbi1cdFx0XHRcdFx0ICByZXEtXHUwMDNlbWV0YWRhdGFfc2dsLVx1MDAzZXNnX3RhYmxlLnNnbCxcbi1cdFx0XHRcdFx0ICByZXEtXHUwMDNlbWV0YWRhdGFfc2dsLVx1MDAzZW5lbnRzLFxuLVx0XHRcdFx0XHQgIHJxX2RtYV9kaXIocnEpKTtcbi1cdFx0aWYgKHVubGlrZWx5KCpwaV9jb3VudCBcdTAwM2M9IDApKSB7XG4tXHRcdFx0cmV0ID0gLUVJTztcbitcdFx0c2d0ID0gKHN0cnVjdCBzZ190YWJsZSkge1xuK1x0XHRcdC5zZ2xcdFx0PSByZXEtXHUwMDNlbWV0YWRhdGFfc2dsLVx1MDAzZXNnX3RhYmxlLnNnbCxcbitcdFx0XHQub3JpZ19uZW50c1x0PSByZXEtXHUwMDNlbWV0YWRhdGFfc2dsLVx1MDAzZW5lbnRzLFxuK1x0XHR9O1xuK1x0XHRyZXQgPSBpYl9kbWFfbWFwX3NndGFibGVfYXR0cnMoaWJkZXYsIFx1MDAyNnNndCwgcnFfZG1hX2RpcihycSksIDApO1xuK1x0XHRpZiAodW5saWtlbHkocmV0KSlcbiBcdFx0XHRnb3RvIG91dF9mcmVlX3BpX3RhYmxlO1xuLVx0XHR9XG4rXHRcdCpwaV9jb3VudCA9IHNndC5uZW50cztcbiBcdH1cbiBcbiBcdHJldHVybiAwO1xuQEAgLTIwMjYsOCArMjAyOSw2IEBAIHN0YXRpYyBibGtfc3RhdHVzX3QgbnZtZV9yZG1hX3F1ZXVlX3JxKHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4LFxuIFx0aWYgKHJldClcbiBcdFx0Z290byB1bm1hcF9xZTtcbiBcbi1cdG52bWVfc3RhcnRfcmVxdWVzdChycSk7XG4tXG4gXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkpIFx1MDAyNlx1MDAyNlxuIFx0ICAgIHF1ZXVlLVx1MDAzZXBpX3N1cHBvcnQgXHUwMDI2XHUwMDI2XG4gXHQgICAgKGMtXHUwMDNlY29tbW9uLm9wY29kZSA9PSBudm1lX2NtZF93cml0ZSB8fFxuQEAgLTIwMzksMTEgKzIwNDAsMTMgQEAgc3RhdGljIGJsa19zdGF0dXNfdCBudm1lX3JkbWFfcXVldWVfcnEoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsXG4gXG4gXHRlcnIgPSBudm1lX3JkbWFfbWFwX2RhdGEocXVldWUsIHJxLCBjKTtcbiBcdGlmICh1bmxpa2VseShlcnIgXHUwMDNjIDApKSB7XG4tXHRcdGRldl9lcnIocXVldWUtXHUwMDNlY3RybC1cdTAwM2VjdHJsLmRldmljZSxcbi1cdFx0XHQgICAgIFwiRmFpbGVkIHRvIG1hcCBkYXRhICglZClcXG5cIiwgZXJyKTtcbitcdFx0ZGV2X2Vycl9yYXRlbGltaXRlZChxdWV1ZS1cdTAwM2VjdHJsLVx1MDAzZWN0cmwuZGV2aWNlLFxuK1x0XHRcdFx0ICAgIFwiRmFpbGVkIHRvIG1hcCBkYXRhICglZClcXG5cIiwgZXJyKTtcbiBcdFx0Z290byBlcnI7XG4gXHR9XG4gXG4rXHRudm1lX3N0YXJ0X3JlcXVlc3QocnEpO1xuK1xuIFx0c3FlLVx1MDAzZWNxZS5kb25lID0gbnZtZV9yZG1hX3NlbmRfZG9uZTtcbiBcbiBcdGliX2RtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKGRldiwgc3FlLVx1MDAzZWRtYSxcbkBAIC0yMDYzLDYgKzIwNjYsOSBAQCBzdGF0aWMgYmxrX3N0YXR1c190IG52bWVfcmRtYV9xdWV1ZV9ycShzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eCxcbiBcdFx0cmV0ID0gbnZtZV9ob3N0X3BhdGhfZXJyb3IocnEpO1xuIFx0ZWxzZSBpZiAoZXJyID09IC1FTk9NRU0gfHwgZXJyID09IC1FQUdBSU4pXG4gXHRcdHJldCA9IEJMS19TVFNfUkVTT1VSQ0U7XG4rXHQvKiBQZWVyIG1lbW9yeSB1bnJlYWNoYWJsZSBmcm9tIHRoaXMgZGV2aWNlOiBkb24ndCByZXRyeS4gKi9cbitcdGVsc2UgaWYgKGVyciA9PSAtRVJFTU9URUlPKVxuK1x0XHRyZXQgPSBCTEtfU1RTX1AyUERNQTtcbiBcdGVsc2VcbiBcdFx0cmV0ID0gQkxLX1NUU19JT0VSUjtcbiBcdG52bWVfY2xlYW51cF9jbWQocnEpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmxrX3R5cGVzLmggYi9pbmNsdWRlL2xpbnV4L2Jsa190eXBlcy5oXG5pbmRleCA4ODA4ZWU3NmU3M2MwOS4uYzhkZTc4MDkzMjBhZDQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2Jsa190eXBlcy5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2Jsa190eXBlcy5oXG5AQCAtMTY1LDYgKzE2NSwxNSBAQCB0eXBlZGVmIHUxNiBibGtfc2hvcnRfdDtcbiAgKi9cbiAjZGVmaW5lIEJMS19TVFNfRFVSQVRJT05fTElNSVRcdCgoX19mb3JjZSBibGtfc3RhdHVzX3QpMTcpXG4gXG4rLypcbisgKiBCTEtfU1RTX1AyUERNQSBpcyByZXR1cm5lZCB3aGVuIGEgcGVlci10by1wZWVyIERNQSB0cmFuc2ZlciBjYW5ub3QgYmVcbisgKiBtYXBwZWQgKHR5cGljYWxseSBiZWNhdXNlIHRoZXJlIGlzIG5vIHJvdXRlIGJldHdlZW4gdGhlIGluaXRpYXRvciBhbmQgdGhlXG4rICogdGFyZ2V0IHRoYXQgdGhlIHBsYXRmb3JtJ3MgUENJZSB0b3BvbG9neSBhbmQgQUNTIHNldHRpbmdzIGFsbG93KS4gVGhpc1xuKyAqIGlzIGEgcHJvcGVydHkgb2YgdGhlIGluaXRpYXRvci90YXJnZXQgcGFpciwgbm90IG9mIHRoZSB0YXJnZXQgZGV2aWNlJ3NcbisgKiBoZWFsdGguIFRoaXMgZXJyb3Igc2hvdWxkIG5ldmVyIGJlIHJldHJpZWQuXG4rICovXG4rI2RlZmluZSBCTEtfU1RTX1AyUERNQVx0KChfX2ZvcmNlIGJsa19zdGF0dXNfdCkxOClcbitcbiAvKlxuICAqIEludmFsaWQgc2l6ZSBvciBhbGlnbm1lbnQuXG4gICovXG5AQCAtMTg4LDYgKzE5Nyw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBibGtfcGF0aF9lcnJvcihibGtfc3RhdHVzX3QgZXJyb3IpXG4gXHRjYXNlIEJMS19TVFNfTk9UU1VQUDpcbiBcdGNhc2UgQkxLX1NUU19OT1NQQzpcbiBcdGNhc2UgQkxLX1NUU19UQVJHRVQ6XG4rXHRjYXNlIEJMS19TVFNfUDJQRE1BOlxuIFx0Y2FzZSBCTEtfU1RTX1JFU1ZfQ09ORkxJQ1Q6XG4gXHRjYXNlIEJMS19TVFNfTUVESVVNOlxuIFx0Y2FzZSBCTEtfU1RTX1BST1RFQ1RJT046XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QyMTozMzowOS4yMjY1MTczMTZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NjI3MDEyNTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUDJQRE1BIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBpbnRyb2R1Y2luZyBgQkxLX1NUU19QMlBETUFgLiBJdCBzZWVtcyBmb2N1c2VkIG9uIGhhbmRsaW5nIFBlZXItdG8tUGVlciBETUEgZXJyb3JzLCBzcGVjaWZpY2FsbHkgd2hlbiBhIFAyUERNQSB0cmFuc2ZlciBjYW4ndCBiZSBtYXBwZWQuIFRoZSBjaGFuZ2VzIHRvdWNoIGEgcHJldHR5IHdpZGUgcmFuZ2Ugb2YgY29kZTogYGJsay1jb3JlLmNgLCBgYmxrLW1xLWRtYS5jYCwgdmFyaW91cyBSQUlEIGNvbXBvbmVudHMgKGBtZC5jYCwgYHJhaWQxLTEwLmNgLCBldGMuKSwgYG52bWUvaG9zdC9yZG1hLmNgLCBhbmQgYGJsa190eXBlcy5oYC4gVGhhdCdzIGEgZGVjZW50IHNwcmVhZC4gVGhlIGNvcmUgb2YgaXQgc2VlbXMgdG8gYmUgcmV0dXJuaW5nIHRoaXMgbmV3IGBCTEtfU1RTX1AyUERNQWAgc3RhdHVzLiBUaGUgcGF0Y2ggYWxzbyBtb2RpZmllcyBob3cgTUQgKHNvZnR3YXJlIFJBSUQpIGhhbmRsZXMgUDJQRE1BIGJpb3MsIGVuc3VyaW5nIGNvcnJlY3QgZXJyb3IgaGFuZGxpbmcgd2l0aG91dCBjYXNjYWRpbmcgZmFpbHVyZXMgYW5kIGhvdyBOVk1lIFJETUEgaGFuZGxlcyBtYXBwaW5nIGZhaWx1cmVzIHdpdGggYC1FUkVNT1RFSU9gLlxuXG5NeSBwcmltYXJ5IGNvbmNlcm4sIG9mIGNvdXJzZSwgaXMgYWJvdXQgcmVhY2hhYmlsaXR5LiBJcyB0aGlzIGNvZGUgcGF0aCBldmVuICpyZWFjaGFibGUqIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBHQ0Ugb3IgUUVNVT8gUDJQRE1BLCBieSBpdHMgdmVyeSBuYXR1cmUsIHJlbGllcyBvbiBQQ0kgZGV2aWNlcyB3aXRoIFAyUERNQSBzdXBwb3J0LiBUaGUgcmVhbCBxdWVzdGlvbiBpczogY2FuIHdlIGVtdWxhdGUgdGhhdCBpbiBRRU1VPyBXZSdkIG5lZWQgdG8gYmUgYWJsZSB0byB0cmlnZ2VyIHRoZSBQMlBETUEgbG9naWMsIHdoaWNoIGxlYWRzIG1lIHRvIG15IG5leHQgcXVlc3Rpb24sIGlzIHRoZXJlIGFueSBzb2Z0d2FyZSBlbXVsYXRlZCBQMlBETUEgZGV2aWNlIHRoYXQgd2UgY291bGQgcG9zc2libHkgdXNlLCBvciBhbm90aGVyIHdheSB0aGF0IHRoaXMgcGF0aCBjYW4gYmUgdHJpZ2dlcmVkP1xuXG5TcGVjaWZpY2FsbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgTUQgYW5kIE5WTWUgY2hhbmdlcyBjb21lIGludG8gcGxheS4gSW4gTUQsIHRoZSBmdW5jdGlvbiBgbWRfYmlvX2lzX3AycGRtYShiaW8pYCBpcyBjcnVjaWFsLiBJdCBjYWxscyBgaXNfcGNpX3AycGRtYV9wYWdlKGJpby1cdTAwM2ViaV9pb192ZWMtXHUwMDNlYnZfcGFnZSlgLiBDYW4gd2UgY3JlYXRlIGEgUDJQRE1BIHBhZ2UgKndpdGhpbiogYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gUDJQRE1BIHBhZ2VzIGFyZSB0eXBpY2FsbHkgY3JlYXRlZCBieSBQQ0kgZHJpdmVycyB1c2luZyBgcGNpX3AycGRtYV9hZGRfcmVzb3VyY2UoKWAuIE15IGd1ZXNzIGlzIHRoYXQsIHdpdGhvdXQgcmVhbCBoYXJkd2FyZSwgdGhpcyBpcyBnb2luZyB0byBiZSB0aGUgdG91Z2ggcGFydC5cblxuU28sIEknbSB0aGlua2luZywgaXMgdGhlcmUgKmFueSogd2F5IHRvIHRyaWdnZXIgdGhpcyB3aXRob3V0IHBoeXNpY2FsIGhhcmR3YXJlPyBNYXliZSBhIHNpbXVsYXRlZCBlbnZpcm9ubWVudCwgcGVyaGFwcyBzb21ldGhpbmcgaW4gYGRyaXZlcnMvbnZtZS90YXJnZXQvcDJwbWVtLmNgLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseS4gSSdtIGdvaW5nIHRvIHNlYXJjaCB0aGUgY29kZWJhc2UgZm9yIHVzZXMgb2YgYHBjaV9wMnBkbWFfYWRkX3Jlc291cmNlYCBhbmQgYGlzX3BjaV9wMnBkbWFfcGFnZWAuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBjb25kaXRpb25zIG5lZWRlZCB0byByZWFjaCB0aGlzIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc5MzUsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OTksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QyMTozMzoxNy44NTM1MzIzMzRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzAxNzYzMTkyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwY2lfcDJwZG1hX2FkZF9yZXNvdXJjZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvcGNpL3AycGRtYS5yc3Q9OTU9QSBwcm92aWRlciBzaW1wbHkgbmVlZHMgdG8gcmVnaXN0ZXIgYSBCQVIgKG9yIGEgcG9ydGlvbiBvZiBhIEJBUilcXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvcGNpL3AycGRtYS5yc3Q6OTY6YXMgYSBQMlAgRE1BIHJlc291cmNlIHVzaW5nIDpjOmZ1bmM6YHBjaV9wMnBkbWFfYWRkX3Jlc291cmNlKClgLlxcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9wY2kvcDJwZG1hLnJzdC05Ny1UaGlzIHdpbGwgcmVnaXN0ZXIgc3RydWN0IHBhZ2VzIGZvciBhbGwgdGhlIHNwZWNpZmllZCBtZW1vcnkuXFxuLS1cXG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvY29tbW9uL2hsZGlvLmM9MzY5PWludCBobF9wMnBfcmVnaW9uX2luaXQoc3RydWN0IGhsX2RldmljZSAqaGRldiwgc3RydWN0IGhsX3AycF9yZWdpb24gKnAycHIpXFxuLS1cXG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvY29tbW9uL2hsZGlvLmMtMzc0LVxcdC8qIFN0YXJ0IGJ5IHB1Ymxpc2hpbmcgb3VyIHAycCBtZW1vcnkgKi9cXG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvY29tbW9uL2hsZGlvLmM6Mzc1OlxcdHJjID0gcGNpX3AycGRtYV9hZGRfcmVzb3VyY2UoaGRldi1cXHUwMDNlcGRldiwgcDJwci1cXHUwMDNlYmFyLCBwMnByLVxcdTAwM2VzaXplLCBwMnByLVxcdTAwM2ViYXJfb2Zmc2V0KTtcXG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvY29tbW9uL2hsZGlvLmMtMzc2LVxcdGlmIChyYykge1xcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvcGNpLmM9MjQ1OT1zdGF0aWMgdm9pZCBudm1lX21hcF9jbWIoc3RydWN0IG52bWVfZGV2ICpkZXYpXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9wY2kuYy0yNTA2LVxcbmRyaXZlcnMvbnZtZS9ob3N0L3BjaS5jOjI1MDc6XFx0aWYgKHBjaV9wMnBkbWFfYWRkX3Jlc291cmNlKHBkZXYsIGJhciwgc2l6ZSwgb2Zmc2V0KSkge1xcbmRyaXZlcnMvbnZtZS9ob3N0L3BjaS5jLTI1MDgtXFx0XFx0ZGV2X3dhcm4oZGV2LVxcdTAwM2VjdHJsLmRldmljZSxcXG4tLVxcbmRyaXZlcnMvcGNpL3AycGRtYS5jPTM2Mz1zdGF0aWMgdm9pZCBwY2lfcDJwZG1hX3VubWFwX21hcHBpbmdzKHZvaWQgKmRhdGEpXFxuLS1cXG5kcml2ZXJzL3BjaS9wMnBkbWEuYy0zNzctLyoqXFxuZHJpdmVycy9wY2kvcDJwZG1hLmM6Mzc4OiAqIHBjaV9wMnBkbWFfYWRkX3Jlc291cmNlIC0gYWRkIG1lbW9yeSBmb3IgdXNlIGFzIHAycCBtZW1vcnlcXG5kcml2ZXJzL3BjaS9wMnBkbWEuYy0zNzktICogQHBkZXY6IHRoZSBkZXZpY2UgdG8gYWRkIHRoZSBtZW1vcnkgdG9cXG4tLVxcbmRyaXZlcnMvcGNpL3AycGRtYS5jLTM4Ni0gKi9cXG5kcml2ZXJzL3BjaS9wMnBkbWEuYzozODc6aW50IHBjaV9wMnBkbWFfYWRkX3Jlc291cmNlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgYmFyLCBzaXplX3Qgc2l6ZSxcXG5kcml2ZXJzL3BjaS9wMnBkbWEuYy0zODgtXFx0XFx0XFx0ICAgIHU2NCBvZmZzZXQpXFxuLS1cXG5kcml2ZXJzL3BjaS9wMnBkbWEuYy00NjYtfVxcbmRyaXZlcnMvcGNpL3AycGRtYS5jOjQ2NzpFWFBPUlRfU1lNQk9MX0dQTChwY2lfcDJwZG1hX2FkZF9yZXNvdXJjZSk7XFxuZHJpdmVycy9wY2kvcDJwZG1hLmMtNDY4LVxcbi0tXFxuaW5jbHVkZS9saW51eC9wY2ktcDJwZG1hLmg9NzI9c3RydWN0IHAycGRtYV9wcm92aWRlciAqcGNpbV9wMnBkbWFfcHJvdmlkZXIoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBiYXIpO1xcbmluY2x1ZGUvbGludXgvcGNpLXAycGRtYS5oOjczOmludCBwY2lfcDJwZG1hX2FkZF9yZXNvdXJjZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IGJhciwgc2l6ZV90IHNpemUsXFxuaW5jbHVkZS9saW51eC9wY2ktcDJwZG1hLmgtNzQtXFx0XFx0dTY0IG9mZnNldCk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BjaS1wMnBkbWEuaD05Nj1zdGF0aWMgaW5saW5lIHN0cnVjdCBwMnBkbWFfcHJvdmlkZXIgKnBjaW1fcDJwZG1hX3Byb3ZpZGVyKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbi0tXFxuaW5jbHVkZS9saW51eC9wY2ktcDJwZG1hLmgtMTAwLX1cXG5pbmNsdWRlL2xpbnV4L3BjaS1wMnBkbWEuaDoxMDE6c3RhdGljIGlubGluZSBpbnQgcGNpX3AycGRtYV9hZGRfcmVzb3VyY2Uoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBiYXIsXFxuaW5jbHVkZS9saW51eC9wY2ktcDJwZG1hLmgtMTAyLVxcdFxcdHNpemVfdCBzaXplLCB1NjQgb2Zmc2V0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QyMTozMzoyMC44NzExNzE0NDRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NDcwNzM3NTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4cGxvcmluZyBQMlBETUEgYW5kIGl0cyBJbnRlcmFjdGlvbiB3aXRoIE1EIFJBSUQqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGhvdyBQMlBETUEgd29ya3MsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIE5WTWUgY29udGV4dCBhbmQgd29uZGVyaW5nIGFib3V0IGl0cyBpbnRlZ3JhdGlvbiB3aXRoIE1EIFJBSUQuIEkgc2VlIHRoYXQgYHBjaV9wMnBkbWFfYWRkX3Jlc291cmNlYCBpbiBgZHJpdmVycy9udm1lL2hvc3QvcGNpLmNgIGlzIGtleSwgcGFydGljdWxhcmx5IGZvciBDb250cm9sbGVyIE1lbW9yeSBCdWZmZXIgKENNQikuIE15IGluaXRpYWwgdGhvdWdodCBpcywgY2FuIHRoaXMgYmUgZW11bGF0ZWQgd2l0aGluIGEgUUVNVSBlbnZpcm9ubWVudD8gTHVja2lseSwgUUVNVSdzIE5WTWUgZGV2aWNlICpkb2VzKiBzdXBwb3J0IENNQiwgc28gdGhhdCdzIHByb21pc2luZyDigJMgd2UgY2FuIHNpbXVsYXRlIFAyUERNQSBwYWdlcyBpbiBhIHZpcnR1YWxpemVkIHNldHVwLlxuXG5Ob3csIHRoZSBpbnRlcmVzdGluZyBxdWVzdGlvbiBpczogY2FuIHdlIGFjdHVhbGx5IHRyaWdnZXIgdGhlIE1EIFJBSUQgY29kZSB1c2luZyB0aGVzZSBQMlBETUEgcGFnZXM/IElmIHdlIGhhdmUgYW4gTlZNZSBkZXZpY2UgY29uZmlndXJlZCB3aXRoIENNQiwgd2Ugc2hvdWxkIGJlIGFibGUgdG8gdHJlYXQgaXQgYXMgYSBQMlBETUEgcHJvdmlkZXIuIFRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcywgY2FuIHdlIHRoZW4gdXNlIHRoaXMgUDJQRE1BIHNldHVwIHRvIHRyYW5zZmVyIGRhdGEgdG8gKmFub3RoZXIqIE5WTWUgZGV2aWNlIG9yIGV2ZW4gYW4gTUQgZGV2aWNlP1xuXG5JIGZvdW5kIHRoYXQgdGhlIHBhdGNoIG1vZGlmaWVzIE1EIHRvIGhhbmRsZSB0aGVzZSBQMlBETUEgYmlvcy4gV2FpdCwgYG1kX2Jpb19pc19wMnBkbWFgISBJdCBjaGVja3MgaWYgdGhlIGJpbyBoYXMgYSBQMlBETUEgcGFnZS4gU28sIGlmIHdlIGNyZWF0ZSBhbiBNRCBhcnJheSB1dGlsaXppbmcgTlZNZSBkZXZpY2VzLCBhbmQgd2UgaXNzdWUgYSBQMlBETUEgSS9PICp0byogdGhhdCBNRCBhcnJheSwgaXQgc2hvdWxkIHBhc3MgdGhlIGJpbyBkb3duIHRvIHRoZSB1bmRlcmx5aW5nIGRldmljZXMsIHJpZ2h0P1xuXG5CdXQsIGNhbiB0aGlzIGV2ZW4gYmUgdHJpZ2dlcmVkIGZyb20gdXNlcnNwYWNlPyBVc3VhbGx5LCBQMlBETUEgaXMgdGhlIGRvbWFpbiBvZiBrZXJuZWwgZHJpdmVycy4gVGhpbmsgTlZNZS1vRiB0YXJnZXQgb3IgUkRNQS4gT2gsIHdhaXQsIGBPX0RJUkVDVGAgY291cGxlZCB3aXRoIFAyUERNQSBwYWdlcz8gTm8sIHRoYXQgd29uJ3Qgd29yay4gVXNlcnNwYWNlIGNhbid0IGRpcmVjdGx5IGFsbG9jYXRlIFAyUERNQSBwYWdlcy4gVGhhdCBjbG9zZXMgdGhhdCBkb29yLlxuXG5BbHJpZ2h0LCBzbyBob3cgKmFyZSogUDJQRE1BIHBhZ2VzIGNyZWF0ZWQgYW5kIHVzZWQ/IEkgbmVlZCB0byBkaWcgZGVlcGVyLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIHVzYWdlIG9mIGBpc19wY2lfcDJwZG1hX3BhZ2VgIG9yIHNwZWNpZmljYWxseSBob3cgUDJQRE1BIGJpb3MgYXJlIGNyZWF0ZWQuIFRoYXQncyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTk5NiwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QyMTozMzoyOC4zNDE5MTA3ODNaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgzODg3NTMwMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpc19wY2lfcDJwZG1hX3BhZ2VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svYmlvLWludGVncml0eS5jPTMzMz1zdGF0aWMgdW5zaWduZWQgaW50IGJ2ZWNfZnJvbV9wYWdlcyhzdHJ1Y3QgYmlvX3ZlYyAqYnZlYywgc3RydWN0IHBhZ2UgKipwYWdlcyxcXG4tLVxcbmJsb2NrL2Jpby1pbnRlZ3JpdHkuYy0zNTUtXFxuYmxvY2svYmlvLWludGVncml0eS5jOjM1NjpcXHRcXHRpZiAoaXNfcGNpX3AycGRtYV9wYWdlKHBhZ2VzW2ldKSlcXG5ibG9jay9iaW8taW50ZWdyaXR5LmMtMzU3LVxcdFxcdFxcdCppc19wMnAgPSB0cnVlO1xcbi0tXFxuYmxvY2svYmlvLmM9MTAwNj12b2lkIF9fYmlvX2FkZF9wYWdlKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IHBhZ2UgKnBhZ2UsXFxuLS1cXG5ibG9jay9iaW8uYy0xMDExLVxcbmJsb2NrL2Jpby5jOjEwMTI6XFx0aWYgKGlzX3BjaV9wMnBkbWFfcGFnZShwYWdlKSlcXG5ibG9jay9iaW8uYy0xMDEzLVxcdFxcdGJpby1cXHUwMDNlYmlfb3BmIHw9IFJFUV9OT01FUkdFO1xcbi0tXFxuYmxvY2svYmlvLmM9MTI0NT1pbnQgYmlvX2lvdl9pdGVyX2dldF9wYWdlcyhzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG4tLVxcbmJsb2NrL2Jpby5jLTEyNzctXFxuYmxvY2svYmlvLmM6MTI3ODpcXHRpZiAoaXNfcGNpX3AycGRtYV9wYWdlKGJpby1cXHUwMDNlYmlfaW9fdmVjLVxcdTAwM2Vidl9wYWdlKSlcXG5ibG9jay9iaW8uYy0xMjc5LVxcdFxcdGJpby1cXHUwMDNlYmlfb3BmIHw9IFJFUV9OT01FUkdFO1xcbi0tXFxuYmxvY2svYmxrLmg9MTU2PXN0YXRpYyBpbmxpbmUgYm9vbCB6b25lX2RldmljZV9wYWdlc19jb21wYXRpYmxlKGNvbnN0IHN0cnVjdCBwYWdlICphLFxcbi0tXFxuYmxvY2svYmxrLmgtMTU4LXtcXG5ibG9jay9ibGsuaDoxNTk6XFx0aWYgKGlzX3BjaV9wMnBkbWFfcGFnZShhKSB8fCBpc19wY2lfcDJwZG1hX3BhZ2UoYikpXFxuYmxvY2svYmxrLmgtMTYwLVxcdFxcdHJldHVybiB6b25lX2RldmljZV9wYWdlc19oYXZlX3NhbWVfcGdtYXAoYSwgYik7XFxuLS1cXG5kcml2ZXJzL21kL21kLmg9MzQ9c3RhdGljIGlubGluZSBib29sIG1kX2Jpb19pc19wMnBkbWEoc3RydWN0IGJpbyAqYmlvKVxcbi0tXFxuZHJpdmVycy9tZC9tZC5oLTM2LVxcdHJldHVybiBiaW9faGFzX2RhdGEoYmlvKSBcXHUwMDI2XFx1MDAyNiBiaW8tXFx1MDAzZWJpX2lvX3ZlYyBcXHUwMDI2XFx1MDAyNlxcbmRyaXZlcnMvbWQvbWQuaDozNzpcXHQgICAgICAgaXNfcGNpX3AycGRtYV9wYWdlKGJpby1cXHUwMDNlYmlfaW9fdmVjLVxcdTAwM2Vidl9wYWdlKTtcXG5kcml2ZXJzL21kL21kLmgtMzgtfVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvcGNpLmM9MTIwNj1zdGF0aWMgYmxrX3N0YXR1c190IG52bWVfcGNpX3NldHVwX2RhdGFfc2ltcGxlKHN0cnVjdCByZXF1ZXN0ICpyZXEsXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9wY2kuYy0xMjE3LVxcdFxcdHJldHVybiBCTEtfU1RTX0FHQUlOO1xcbmRyaXZlcnMvbnZtZS9ob3N0L3BjaS5jOjEyMTg6XFx0aWYgKGlzX3BjaV9wMnBkbWFfcGFnZShidi5idl9wYWdlKSlcXG5kcml2ZXJzL252bWUvaG9zdC9wY2kuYy0xMjE5LVxcdFxcdHJldHVybiBCTEtfU1RTX0FHQUlOO1xcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvcGNpLmM9MTM3Mj1zdGF0aWMgYmxrX3N0YXR1c190IG52bWVfcGNpX3NldHVwX21ldGFfbXB0cihzdHJ1Y3QgcmVxdWVzdCAqcmVxKVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvcGNpLmMtMTM3Ny1cXG5kcml2ZXJzL252bWUvaG9zdC9wY2kuYzoxMzc4OlxcdGlmIChpc19wY2lfcDJwZG1hX3BhZ2UoYnYuYnZfcGFnZSkpXFxuZHJpdmVycy9udm1lL2hvc3QvcGNpLmMtMTM3OS1cXHRcXHRyZXR1cm4gbnZtZV9wY2lfc2V0dXBfbWV0YV9pdGVyKHJlcSk7XFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L2lvLWNtZC1iZGV2LmM9MjUzPXN0YXRpYyB2b2lkIG52bWV0X2JkZXZfZXhlY3V0ZV9ydyhzdHJ1Y3QgbnZtZXRfcmVxICpyZXEpXFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L2lvLWNtZC1iZGV2LmMtMjg2LVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvaW8tY21kLWJkZXYuYzoyODc6XFx0aWYgKGlzX3BjaV9wMnBkbWFfcGFnZShzZ19wYWdlKHJlcS1cXHUwMDNlc2cpKSlcXG5kcml2ZXJzL252bWUvdGFyZ2V0L2lvLWNtZC1iZGV2LmMtMjg4LVxcdFxcdG9wZiB8PSBSRVFfTk9NRVJHRTtcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaD0xOTI9c3RhdGljIGlubGluZSB2b2lkIGZvbGlvX3NldF96b25lX2RldmljZV9kYXRhKHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKmRhdGEpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmgtMTk3LVxcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaDoxOTg6c3RhdGljIGlubGluZSBib29sIGlzX3BjaV9wMnBkbWFfcGFnZShjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmgtMTk5LXtcXG4tLVxcbmluY2x1ZGUvbGludXgvcGNpLXAycGRtYS5oPTE5MT1wY2lfcDJwZG1hX3N0YXRlKHN0cnVjdCBwY2lfcDJwZG1hX21hcF9zdGF0ZSAqc3RhdGUsIHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbmluY2x1ZGUvbGludXgvcGNpLXAycGRtYS5oLTE5My17XFxuaW5jbHVkZS9saW51eC9wY2ktcDJwZG1hLmg6MTk0OlxcdGlmIChJU19FTkFCTEVEKENPTkZJR19QQ0lfUDJQRE1BKSBcXHUwMDI2XFx1MDAyNiBpc19wY2lfcDJwZG1hX3BhZ2UocGFnZSkpIHtcXG5pbmNsdWRlL2xpbnV4L3BjaS1wMnBkbWEuaC0xOTUtXFx0XFx0X19wY2lfcDJwZG1hX3VwZGF0ZV9zdGF0ZShzdGF0ZSwgZGV2LCBwYWdlKTtcXG4tLVxcbm1tL2d1cC5jPTUxNz1zdGF0aWMgc3RydWN0IGZvbGlvICp0cnlfZ3JhYl9mb2xpb19mYXN0KHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgcmVmcyxcXG4tLVxcbm1tL2d1cC5jLTUyNy1cXG5tbS9ndXAuYzo1Mjg6XFx0aWYgKHVubGlrZWx5KCEoZmxhZ3MgXFx1MDAyNiBGT0xMX1BDSV9QMlBETUEpIFxcdTAwMjZcXHUwMDI2IGlzX3BjaV9wMnBkbWFfcGFnZShwYWdlKSkpXFxubW0vZ3VwLmMtNTI5LVxcdFxcdHJldHVybiBOVUxMO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QyMTozMzozMC4xODA3OTE5MzVaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTQwNzYxODI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgUDJQRE1BIFBhZ2UgVXNhZ2UgaW4gRGlyZWN0IEkvTyoqXG5cbk9rYXksIHNvIEkgc2VlIGBpc19wY2lfcDJwZG1hX3BhZ2VgIGJlaW5nIGNhbGxlZCB3aXRoaW4gYGJpb19pb3ZfaXRlcl9nZXRfcGFnZXNgLiBUaGF0J3MgaW50ZXJlc3RpbmcsIGJlY2F1c2UgYGJpb19pb3ZfaXRlcl9nZXRfcGFnZXNgIGlzIGVzc2VudGlhbCBmb3IgZGlyZWN0IEkvTyBhbmQgTlZNZSB0YXJnZXQgb3BlcmF0aW9ucy4gQSBsaWdodGJ1bGIgd2VudCBvZmY6IEkgcmVjYWxsIGBGT0xMX1BDSV9QMlBETUFgIGlzIGEgZmxhZyB1dGlsaXplZCBieSBgZ2V0X3VzZXJfcGFnZXNgLiBUaGlzIHRyaWdnZXJzIHRoZSBxdWVzdGlvbiDigJMgY2FuIHVzZXJzcGFjZSBhY3R1YWxseSBtYXAgUDJQRE1BIHBhZ2VzIGFuZCBjb25zZXF1ZW50bHkgcGVyZm9ybSBkaXJlY3QgSS9PIHVzaW5nIHRoZW0/XG5cblRoZSBhbnN3ZXIgc2VlbXMgdG8gYmUgeWVzLCBgT19ESVJFQ1RgICpjYW4qIGJlIHVzZWQgd2l0aCB0aGVzZSBQMlBETUEgcGFnZXMsIHByb3ZpZGVkIHRoZXkncmUgYXBwcm9wcmlhdGVseSBtYXBwZWQgaW50byB1c2Vyc3BhY2UuIE5vdywgdGhlIG5leHQgcXVlc3Rpb24gaXMgaG93IHRoaXMgbWFwcGluZyBhY3R1YWxseSBvY2N1cnMuIEFyZSB3ZSBsb29raW5nIGF0IHNvbWV0aGluZyBsaWtlIGAvZGV2L3AycG1lbSpgIGRldmljZXMsIG9yIGEgc2ltaWxhciBpbnRlcmZhY2U/IFRpbWUgdG8gZGlnIGludG8gYGRyaXZlcnMvcGNpL3AycGRtYS5jYCBhbmQgc2VlIGlmIHRoZXJlJ3MgYSBjaGFyYWN0ZXIgZGV2aWNlIG9yIGFueSBzaW1pbGFyIG1lY2hhbmlzbXMgZXhwb3NlZCB0aGF0IGFsbG93IHVzZXJsYW5kIGFjY2Vzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIxNzcsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMjE6MzM6MzQuNzIxNTU2MDk5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1ODAzNjI1NTAsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBjaV9wMnBkbWFfYWRkX2NsaWVudFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMjE6MzM6MzYuMzAxOTI0OTQ5WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk2OTkwNDc0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKkludmVzdGlnYXRpbmcgVXNlcnNwYWNlIE1hcHBpbmcgaW4gUENJIERpcmVjdCBNZW1vcnkgQWNjZXNzKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGhvdyB1c2Vyc3BhY2UgbWFwcGluZyBpcyBoYW5kbGVkIGluIHRoZSBQQ0kgRGlyZWN0IE1lbW9yeSBBY2Nlc3MgKERNQSkgY29udGV4dCB3aXRoaW4gdGhlIGtlcm5lbC4gVGhlIGxpa2VseSBwbGFjZSB0byBzdGFydCBsb29raW5nIGlzIHRoZSBgZHJpdmVycy9wY2kvcDJwZG1hLmNgIGZpbGUuIFRoYXQgc2VlbXMgdGhlIG1vc3QgbG9naWNhbCBzcG90IHRvIGZpbmQgdGhlIGNvcmUgaW1wbGVtZW50YXRpb24gYW5kIGFueSByZWxhdGVkIGludGVyYWN0aW9ucyB3aXRoIHVzZXJzcGFjZS4gSSdsbCBmb2N1cyBteSBpbnZlc3RpZ2F0aW9uIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjYzMywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDIxOjMzOjM5LjI3MTgzMTk1MloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQ0MzM0MTYsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZpbGVfb3BlcmF0aW9uc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3BjaS9wMnBkbWEuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMjE6MzM6MzkuMzI2MjgzMTM4WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4NTU0NDU0ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTlZNZSBDTUIgYW5kIFVzZXJwYWNlIE1hcHBpbmcgLSBBIFF1aWNrIFNjYW4qKlxuXG5Pa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBEaWQgSSBqdXN0IHJlYWQgc29tZXRoaW5nIGFib3V0IE5WTWUgQ01CIGJlaW5nIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2U/IFRoYXQgZG9lc24ndCBzb3VuZCByaWdodC4uLiB0eXBpY2FsbHksIHlvdSB3b3VsZG4ndCBleHBlY3QgdGhhdC4gTGV0IG1lIHJlLXRoaW5rIHRoYXQg4oCTIG5vLCB1c3VhbGx5IGl0J3Mgbm90IGEgZGlyZWN0IG1hcHBpbmcuIEJ1dOKApiBjb3VsZCB0aGVyZSBiZSBzb21ldGhpbmcgSeKAmW0gbWlzc2luZz9cblxuQWxyaWdodCwgbGV0J3MgcmVmb2N1cy4gUGVyaGFwcyB0aGUga2VybmVsJ3MgTlZNZSB0YXJnZXQgY29kZSBtaWdodCBob2xkIGEgY2x1ZS4gTGV0IG1lIHF1aWNrbHkgemVybyBpbiBvbiBgZHJpdmVycy9udm1lL3RhcmdldC9wMnBtZW0uY2AuIEkgaGF2ZSBhIGZlZWxpbmcgdGhhdCBmaWxlIG1pZ2h0IGJlIHJlbGV2YW50IHRvIHVuZGVyc3RhbmRpbmcgYW55IHBvdGVudGlhbCBudWFuY2VzIG9yIHdvcmthcm91bmRzIHJlbGF0ZWQgdG8gdGhpcyB0b3BpYy4gVGltZSB0byB0YWtlIGEgY2xvc2VyIGxvb2shXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyODA5LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMjE6MzM6NDMuMTgxNzMwMjM5WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzkwOTI2NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwMnBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9udm1lL3RhcmdldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9udm1lL3RhcmdldC9jb25maWdmcy5jLTE0LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9wY2kuaFxcdTAwM2VcXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvbmZpZ2ZzLmM6MTU6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BjaS1wMnBkbWEuaFxcdTAwM2VcXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvbmZpZ2ZzLmMtMTYtI2lmZGVmIENPTkZJR19OVk1FX1RBUkdFVF9BVVRIXFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvbmZpZ2ZzLmM9NTYwPUNPTkZJR0ZTX0FUVFIobnZtZXRfbnNfLCBkZXZpY2VfcGF0aCk7XFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvbmZpZ2ZzLmMtNTYyLSNpZmRlZiBDT05GSUdfUENJX1AyUERNQVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29uZmlnZnMuYzo1NjM6c3RhdGljIHNzaXplX3QgbnZtZXRfbnNfcDJwbWVtX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpwYWdlKVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29uZmlnZnMuYy01NjQte1xcbi0tXFxuZHJpdmVycy9udm1lL3RhcmdldC9jb25maWdmcy5jLTU2Ni1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvbmZpZ2ZzLmM6NTY3OlxcdHJldHVybiBwY2lfcDJwZG1hX2VuYWJsZV9zaG93KHBhZ2UsIG5zLVxcdTAwM2VwMnBfZGV2LCBucy1cXHUwMDNldXNlX3AycG1lbSk7XFxuZHJpdmVycy9udm1lL3RhcmdldC9jb25maWdmcy5jLTU2OC19XFxuZHJpdmVycy9udm1lL3RhcmdldC9jb25maWdmcy5jLTU2OS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvbmZpZ2ZzLmM6NTcwOnN0YXRpYyBzc2l6ZV90IG52bWV0X25zX3AycG1lbV9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXFxuZHJpdmVycy9udm1lL3RhcmdldC9jb25maWdmcy5jLTU3MS1cXHRcXHRjb25zdCBjaGFyICpwYWdlLCBzaXplX3QgY291bnQpXFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvbmZpZ2ZzLmMtNTczLVxcdHN0cnVjdCBudm1ldF9ucyAqbnMgPSB0b19udm1ldF9ucyhpdGVtKTtcXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvbmZpZ2ZzLmM6NTc0OlxcdHN0cnVjdCBwY2lfZGV2ICpwMnBfZGV2ID0gTlVMTDtcXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvbmZpZ2ZzLmM6NTc1OlxcdGJvb2wgdXNlX3AycG1lbTtcXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvbmZpZ2ZzLmMtNTc2LVxcdGludCByZXQgPSBjb3VudDtcXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29uZmlnZnMuYy01ODQtXFxuZHJpdmVycy9udm1lL3RhcmdldC9jb25maWdmcy5jOjU4NTpcXHRlcnJvciA9IHBjaV9wMnBkbWFfZW5hYmxlX3N0b3JlKHBhZ2UsIFxcdTAwMjZwMnBfZGV2LCBcXHUwMDI2dXNlX3AycG1lbSk7XFxuZHJpdmVycy9udm1lL3RhcmdldC9jb25maWdmcy5jLTU4Ni1cXHRpZiAoZXJyb3IpIHtcXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29uZmlnZnMuYy01OTAtXFxuZHJpdmVycy9udm1lL3RhcmdldC9jb25maWdmcy5jOjU5MTpcXHRucy1cXHUwMDNldXNlX3AycG1lbSA9IHVzZV9wMnBtZW07XFxuZHJpdmVycy9udm1lL3RhcmdldC9jb25maWdmcy5jOjU5MjpcXHRwY2lfZGV2X3B1dChucy1cXHUwMDNlcDJwX2Rldik7XFxuZHJpdmVycy9udm1lL3RhcmdldC9jb25maWdmcy5jOjU5MzpcXHRucy1cXHUwMDNlcDJwX2RldiA9IHAycF9kZXY7XFxuZHJpdmVycy9udm1lL3RhcmdldC9jb25maWdmcy5jLTU5NC1cXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29uZmlnZnMuYy02MDAtXFxuZHJpdmVycy9udm1lL3RhcmdldC9jb25maWdmcy5jOjYwMTpDT05GSUdGU19BVFRSKG52bWV0X25zXywgcDJwbWVtKTtcXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvbmZpZ2ZzLmMtNjAyLSNlbmRpZiAvKiBDT05GSUdfUENJX1AyUERNQSAqL1xcbi0tXFxuZHJpdmVycy9udm1lL3RhcmdldC9jb25maWdmcy5jPTgyNT1zdGF0aWMgc3RydWN0IGNvbmZpZ2ZzX2F0dHJpYnV0ZSAqbnZtZXRfbnNfYXR0cnNbXSA9IHtcXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29uZmlnZnMuYy04MzQtI2lmZGVmIENPTkZJR19QQ0lfUDJQRE1BXFxuZHJpdmVycy9udm1lL3RhcmdldC9jb25maWdmcy5jOjgzNTpcXHRcXHUwMDI2bnZtZXRfbnNfYXR0cl9wMnBtZW0sXFxuZHJpdmVycy9udm1lL3RhcmdldC9jb25maWdmcy5jLTgzNi0jZW5kaWZcXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jLTEwLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9yY3VsaXN0LmhcXHUwMDNlXFxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmM6MTE6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BjaS1wMnBkbWEuaFxcdTAwM2VcXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYy0xMi0jaW5jbHVkZSBcXHUwMDNjbGludXgvc2NhdHRlcmxpc3QuaFxcdTAwM2VcXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jPTQ3Nz1zdGF0aWMgdm9pZCBudm1ldF9uc19kZXZfZGlzYWJsZShzdHJ1Y3QgbnZtZXRfbnMgKm5zKVxcbi0tXFxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtNDgyLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jOjQ4MzpzdGF0aWMgaW50IG52bWV0X3AycG1lbV9uc19lbmFibGUoc3RydWN0IG52bWV0X25zICpucylcXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYy00ODQte1xcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jLTQ4NS1cXHRpbnQgcmV0O1xcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jOjQ4NjpcXHRzdHJ1Y3QgcGNpX2RldiAqcDJwX2RldjtcXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYy00ODctXFxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmM6NDg4OlxcdGlmICghbnMtXFx1MDAzZXVzZV9wMnBtZW0pXFxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtNDg5LVxcdFxcdHJldHVybiAwO1xcbi0tXFxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtNDk1LVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jOjQ5NjpcXHRpZiAoIWJsa19xdWV1ZV9wY2lfcDJwZG1hKG5zLVxcdTAwM2ViZGV2LVxcdTAwM2ViZF9kaXNrLVxcdTAwM2VxdWV1ZSkpIHtcXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYy00OTctXFx0XFx0cHJfZXJyKFxcXCJwZWVyLXRvLXBlZXIgRE1BIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGRyaXZlciBvZiAlc1xcXFxuXFxcIixcXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jLTUwMS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYzo1MDI6XFx0aWYgKG5zLVxcdTAwM2VwMnBfZGV2KSB7XFxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmM6NTAzOlxcdFxcdHJldCA9IHBjaV9wMnBkbWFfZGlzdGFuY2UobnMtXFx1MDAzZXAycF9kZXYsIG52bWV0X25zX2RldihucyksIHRydWUpO1xcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jLTUwNC1cXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jLTUwNy1cXHRcXHQvKlxcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jOjUwODpcXHRcXHQgKiBSaWdodCBub3cgd2UganVzdCBjaGVjayB0aGF0IHRoZXJlIGlzIHAycG1lbSBhdmFpbGFibGUgc29cXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYy01MDktXFx0XFx0ICogd2UgY2FuIHJlcG9ydCBhbiBlcnJvciB0byB0aGUgdXNlciByaWdodCBhd2F5IGlmIHRoZXJlXFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYy01MTMtXFxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmM6NTE0OlxcdFxcdHAycF9kZXYgPSBwY2lfcDJwbWVtX2ZpbmQobnZtZXRfbnNfZGV2KG5zKSk7XFxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmM6NTE1OlxcdFxcdGlmICghcDJwX2Rldikge1xcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jLTUxNi1cXHRcXHRcXHRwcl9lcnIoXFxcIm5vIHBlZXItdG8tcGVlciBtZW1vcnkgaXMgYXZhaWxhYmxlIGZvciAlc1xcXFxuXFxcIixcXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jLTUyMC1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYzo1MjE6XFx0XFx0cGNpX2Rldl9wdXQocDJwX2Rldik7XFxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtNTIyLVxcdH1cXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jLTUyNi1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYzo1Mjc6c3RhdGljIHZvaWQgbnZtZXRfcDJwbWVtX25zX2FkZF9wMnAoc3RydWN0IG52bWV0X2N0cmwgKmN0cmwsXFxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtNTI4LVxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgbnZtZXRfbnMgKm5zKVxcbi0tXFxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtNTMwLVxcdHN0cnVjdCBkZXZpY2UgKmNsaWVudHNbMl07XFxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmM6NTMxOlxcdHN0cnVjdCBwY2lfZGV2ICpwMnBfZGV2O1xcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jLTUzMi1cXHRpbnQgcmV0O1xcbi0tXFxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtNTM1LVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jOjUzNjpcXHRpZiAoIWN0cmwtXFx1MDAzZXAycF9jbGllbnQgfHwgIW5zLVxcdTAwM2V1c2VfcDJwbWVtKVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jLTUzNy1cXHRcXHRyZXR1cm47XFxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtNTM4LVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jOjUzOTpcXHRpZiAobnMtXFx1MDAzZXAycF9kZXYpIHtcXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYzo1NDA6XFx0XFx0cmV0ID0gcGNpX3AycGRtYV9kaXN0YW5jZShucy1cXHUwMDNlcDJwX2RldiwgY3RybC1cXHUwMDNlcDJwX2NsaWVudCwgdHJ1ZSk7XFxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtNTQxLVxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi0tXFxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtNTQzLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jOjU0NDpcXHRcXHRwMnBfZGV2ID0gcGNpX2Rldl9nZXQobnMtXFx1MDAzZXAycF9kZXYpO1xcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jLTU0NS1cXHR9IGVsc2Uge1xcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jOjU0NjpcXHRcXHRjbGllbnRzWzBdID0gY3RybC1cXHUwMDNlcDJwX2NsaWVudDtcXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYy01NDctXFx0XFx0Y2xpZW50c1sxXSA9IG52bWV0X25zX2Rldihucyk7XFxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtNTQ4LVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jOjU0OTpcXHRcXHRwMnBfZGV2ID0gcGNpX3AycG1lbV9maW5kX21hbnkoY2xpZW50cywgQVJSQVlfU0laRShjbGllbnRzKSk7XFxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmM6NTUwOlxcdFxcdGlmICghcDJwX2Rldikge1xcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jLTU1MS1cXHRcXHRcXHRwcl9lcnIoXFxcIm5vIHBlZXItdG8tcGVlciBtZW1vcnkgaXMgYXZhaWxhYmxlIHRoYXQncyBzdXBwb3J0ZWQgYnkgJXMgYW5kICVzXFxcXG5cXFwiLFxcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jOjU1MjpcXHRcXHRcXHQgICAgICAgZGV2X25hbWUoY3RybC1cXHUwMDNlcDJwX2NsaWVudCksIG5zLVxcdTAwM2VkZXZpY2VfcGF0aCk7XFxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtNTUzLVxcdFxcdFxcdHJldHVybjtcXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jLTU1Ni1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYzo1NTc6XFx0cmV0ID0gcmFkaXhfdHJlZV9pbnNlcnQoXFx1MDAyNmN0cmwtXFx1MDAzZXAycF9uc19tYXAsIG5zLVxcdTAwM2Vuc2lkLCBwMnBfZGV2KTtcXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYy01NTgtXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmM6NTU5OlxcdFxcdHBjaV9kZXZfcHV0KHAycF9kZXYpO1xcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jLTU2MC1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYzo1NjE6XFx0cHJfaW5mbyhcXFwidXNpbmcgcDJwbWVtIG9uICVzIGZvciBuc2lkICVkXFxcXG5cXFwiLCBwY2lfbmFtZShwMnBfZGV2KSxcXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYy01NjItXFx0XFx0bnMtXFx1MDAzZW5zaWQpO1xcbi0tXFxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmM9NTc3PWludCBudm1ldF9uc19lbmFibGUoc3RydWN0IG52bWV0X25zICpucylcXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jLTU5OS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYzo2MDA6XFx0cmV0ID0gbnZtZXRfcDJwbWVtX25zX2VuYWJsZShucyk7XFxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtNjAxLVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYy02MDQtXFx0bGlzdF9mb3JfZWFjaF9lbnRyeShjdHJsLCBcXHUwMDI2c3Vic3lzLVxcdTAwM2VjdHJscywgc3Vic3lzX2VudHJ5KVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jOjYwNTpcXHRcXHRudm1ldF9wMnBtZW1fbnNfYWRkX3AycChjdHJsLCBucyk7XFxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtNjA2LVxcbi0tXFxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtNjI3LVxcdGxpc3RfZm9yX2VhY2hfZW50cnkoY3RybCwgXFx1MDAyNnN1YnN5cy1cXHUwMDNlY3RybHMsIHN1YnN5c19lbnRyeSlcXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYzo2Mjg6XFx0XFx0cGNpX2Rldl9wdXQocmFkaXhfdHJlZV9kZWxldGUoXFx1MDAyNmN0cmwtXFx1MDAzZXAycF9uc19tYXAsIG5zLVxcdTAwM2Vuc2lkKSk7XFxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtNjI5LW91dF9kZXZfZGlzYWJsZTpcXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jPTYzND12b2lkIG52bWV0X25zX2Rpc2FibGUoc3RydWN0IG52bWV0X25zICpucylcXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jLTY0Ni1cXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGN0cmwsIFxcdTAwMjZzdWJzeXMtXFx1MDAzZWN0cmxzLCBzdWJzeXNfZW50cnkpXFxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmM6NjQ3OlxcdFxcdHBjaV9kZXZfcHV0KHJhZGl4X3RyZWVfZGVsZXRlKFxcdTAwMjZjdHJsLVxcdTAwM2VwMnBfbnNfbWFwLCBucy1cXHUwMDNlbnNpZCkpO1xcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jLTY0OC1cXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jPTEyODg9c3RhdGljIHVuc2lnbmVkIGludCBudm1ldF9kYXRhX3RyYW5zZmVyX2xlbihzdHJ1Y3QgbnZtZXRfcmVxICpyZXEpXFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYy0xMjkyLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jOjEyOTM6c3RhdGljIGludCBudm1ldF9yZXFfYWxsb2NfcDJwbWVtX3NnbHMoc3RydWN0IHBjaV9kZXYgKnAycF9kZXYsXFxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtMTI5NC1cXHRcXHRzdHJ1Y3QgbnZtZXRfcmVxICpyZXEpXFxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtMTI5NS17XFxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmM6MTI5NjpcXHRyZXEtXFx1MDAzZXNnID0gcGNpX3AycG1lbV9hbGxvY19zZ2wocDJwX2RldiwgXFx1MDAyNnJlcS1cXHUwMDNlc2dfY250LFxcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jLTEyOTctXFx0XFx0XFx0bnZtZXRfZGF0YV90cmFuc2Zlcl9sZW4ocmVxKSk7XFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYy0xMzAxLVxcdGlmIChyZXEtXFx1MDAzZW1ldGFkYXRhX2xlbikge1xcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jOjEzMDI6XFx0XFx0cmVxLVxcdTAwM2VtZXRhZGF0YV9zZyA9IHBjaV9wMnBtZW1fYWxsb2Nfc2dsKHAycF9kZXYsXFxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtMTMwMy1cXHRcXHRcXHRcXHRcXHUwMDI2cmVxLVxcdTAwM2VtZXRhZGF0YV9zZ19jbnQsIHJlcS1cXHUwMDNlbWV0YWRhdGFfbGVuKTtcXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jLTEzMDctXFxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmM6MTMwODpcXHRyZXEtXFx1MDAzZXAycF9kZXYgPSBwMnBfZGV2O1xcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jLTEzMDktXFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYy0xMzExLW91dF9mcmVlX3NnOlxcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jOjEzMTI6XFx0cGNpX3AycG1lbV9mcmVlX3NnbChyZXEtXFx1MDAzZXAycF9kZXYsIHJlcS1cXHUwMDNlc2cpO1xcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jLTEzMTMtb3V0X2VycjpcXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jLTEzMTYtXFxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmM6MTMxNzpzdGF0aWMgc3RydWN0IHBjaV9kZXYgKm52bWV0X3JlcV9maW5kX3AycF9kZXYoc3RydWN0IG52bWV0X3JlcSAqcmVxKVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jLTEzMTgte1xcbi0tXFxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtMTMyMS1cXHRcXHRyZXR1cm4gTlVMTDtcXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYzoxMzIyOlxcdHJldHVybiByYWRpeF90cmVlX2xvb2t1cChcXHUwMDI2cmVxLVxcdTAwM2VzcS1cXHUwMDNlY3RybC1cXHUwMDNlcDJwX25zX21hcCwgcmVxLVxcdTAwM2Vucy1cXHUwMDNlbnNpZCk7XFxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtMTMyMy19XFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYz0xMzI1PWludCBudm1ldF9yZXFfYWxsb2Nfc2dscyhzdHJ1Y3QgbnZtZXRfcmVxICpyZXEpXFxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtMTMyNi17XFxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmM6MTMyNzpcXHRzdHJ1Y3QgcGNpX2RldiAqcDJwX2RldiA9IG52bWV0X3JlcV9maW5kX3AycF9kZXYocmVxKTtcXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYy0xMzI4LVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jOjEzMjk6XFx0aWYgKHAycF9kZXYgXFx1MDAyNlxcdTAwMjYgIW52bWV0X3JlcV9hbGxvY19wMnBtZW1fc2dscyhwMnBfZGV2LCByZXEpKVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jLTEzMzAtXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYz0xMzUyPXZvaWQgbnZtZXRfcmVxX2ZyZWVfc2dscyhzdHJ1Y3QgbnZtZXRfcmVxICpyZXEpXFxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtMTM1My17XFxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmM6MTM1NDpcXHRpZiAocmVxLVxcdTAwM2VwMnBfZGV2KSB7XFxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmM6MTM1NTpcXHRcXHRwY2lfcDJwbWVtX2ZyZWVfc2dsKHJlcS1cXHUwMDNlcDJwX2RldiwgcmVxLVxcdTAwM2VzZyk7XFxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtMTM1Ni1cXHRcXHRpZiAocmVxLVxcdTAwM2VtZXRhZGF0YV9zZylcXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYzoxMzU3OlxcdFxcdFxcdHBjaV9wMnBtZW1fZnJlZV9zZ2wocmVxLVxcdTAwM2VwMnBfZGV2LCByZXEtXFx1MDAzZW1ldGFkYXRhX3NnKTtcXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYzoxMzU4OlxcdFxcdHJlcS1cXHUwMDNlcDJwX2RldiA9IE5VTEw7XFxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtMTM1OS1cXHR9IGVsc2Uge1xcbi0tXFxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmM9MTUzMj1ib29sIG52bWV0X2hvc3RfYWxsb3dlZChzdHJ1Y3QgbnZtZXRfc3Vic3lzICpzdWJzeXMsIGNvbnN0IGNoYXIgKmhvc3RucW4pXFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYy0xNTUxLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jOjE1NTI6c3RhdGljIHZvaWQgbnZtZXRfc2V0dXBfcDJwX25zX21hcChzdHJ1Y3QgbnZtZXRfY3RybCAqY3RybCxcXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYzoxNTUzOlxcdFxcdHN0cnVjdCBkZXZpY2UgKnAycF9jbGllbnQpXFxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtMTU1NC17XFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYy0xNTU5LVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jOjE1NjA6XFx0aWYgKCFwMnBfY2xpZW50KVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jLTE1NjEtXFx0XFx0cmV0dXJuO1xcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jLTE1NjItXFxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmM6MTU2MzpcXHRjdHJsLVxcdTAwM2VwMnBfY2xpZW50ID0gZ2V0X2RldmljZShwMnBfY2xpZW50KTtcXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYy0xNTY0LVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jLTE1NjUtXFx0bnZtZXRfZm9yX2VhY2hfZW5hYmxlZF9ucyhcXHUwMDI2Y3RybC1cXHUwMDNlc3Vic3lzLVxcdTAwM2VuYW1lc3BhY2VzLCBpZHgsIG5zKVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jOjE1NjY6XFx0XFx0bnZtZXRfcDJwbWVtX25zX2FkZF9wMnAoY3RybCwgbnMpO1xcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jLTE1NjctfVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jLTE1NjgtXFxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmM6MTU2OTpzdGF0aWMgdm9pZCBudm1ldF9yZWxlYXNlX3AycF9uc19tYXAoc3RydWN0IG52bWV0X2N0cmwgKmN0cmwpXFxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtMTU3MC17XFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYy0xNTc1LVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jOjE1NzY6XFx0cmFkaXhfdHJlZV9mb3JfZWFjaF9zbG90KHNsb3QsIFxcdTAwMjZjdHJsLVxcdTAwM2VwMnBfbnNfbWFwLCBcXHUwMDI2aXRlciwgMClcXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYy0xNTc3LVxcdFxcdHBjaV9kZXZfcHV0KHJhZGl4X3RyZWVfZGVyZWZfc2xvdChzbG90KSk7XFxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtMTU3OC1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYzoxNTc5OlxcdHB1dF9kZXZpY2UoY3RybC1cXHUwMDNlcDJwX2NsaWVudCk7XFxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtMTU4MC19XFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYz0xNTkxPXN0cnVjdCBudm1ldF9jdHJsICpudm1ldF9hbGxvY19jdHJsKHN0cnVjdCBudm1ldF9hbGxvY19jdHJsX2FyZ3MgKmFyZ3MpXFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYy0xNjM3LVxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZjdHJsLVxcdTAwM2Vhc3luY19ldmVudHMpO1xcbmRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jOjE2Mzg6XFx0SU5JVF9SQURJWF9UUkVFKFxcdTAwMjZjdHJsLVxcdTAwM2VwMnBfbnNfbWFwLCBHRlBfS0VSTkVMKTtcXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYy0xNjM5LVxcdElOSVRfV09SSyhcXHUwMDI2Y3RybC1cXHUwMDNlZmF0YWxfZXJyX3dvcmssIG52bWV0X2ZhdGFsX2Vycm9yX2hhbmRsZXIpO1xcbi0tXFxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtMTY5MS1cXHRsaXN0X2FkZF90YWlsKFxcdTAwMjZjdHJsLVxcdTAwM2VzdWJzeXNfZW50cnksIFxcdTAwMjZzdWJzeXMtXFx1MDAzZWN0cmxzKTtcXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYzoxNjkyOlxcdG52bWV0X3NldHVwX3AycF9uc19tYXAoY3RybCwgYXJncy1cXHUwMDNlcDJwX2NsaWVudCk7XFxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtMTY5My1cXHRudm1ldF9kZWJ1Z2ZzX2N0cmxfc2V0dXAoY3RybCk7XFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYz0xNzQxPXN0YXRpYyB2b2lkIG52bWV0X2N0cmxfZnJlZShzdHJ1Y3Qga3JlZiAqcmVmKVxcbi0tXFxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtMTc0Ny1cXHRudm1ldF9jdHJsX2Rlc3Ryb3lfcHIoY3RybCk7XFxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmM6MTc0ODpcXHRudm1ldF9yZWxlYXNlX3AycF9uc19tYXAoY3RybCk7XFxuZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMtMTc0OS1cXHRsaXN0X2RlbChcXHUwMDI2Y3RybC1cXHUwMDNlc3Vic3lzX2VudHJ5KTtcXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvZmFicmljcy1jbWQuYz0yNjc9c3RhdGljIHZvaWQgbnZtZXRfZXhlY3V0ZV9hZG1pbl9jb25uZWN0KHN0cnVjdCBudm1ldF9yZXEgKnJlcSlcXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvZmFicmljcy1jbWQuYy0yNzUtXFx0XFx0Lm9wcyA9IHJlcS1cXHUwMDNlb3BzLFxcbmRyaXZlcnMvbnZtZS90YXJnZXQvZmFicmljcy1jbWQuYzoyNzY6XFx0XFx0LnAycF9jbGllbnQgPSByZXEtXFx1MDAzZXAycF9jbGllbnQsXFxuZHJpdmVycy9udm1lL3RhcmdldC9mYWJyaWNzLWNtZC5jLTI3Ny1cXHRcXHQua2F0byA9IGxlMzJfdG9fY3B1KGMtXFx1MDAzZWthdG8pLFxcbi0tXFxuZHJpdmVycy9udm1lL3RhcmdldC9pby1jbWQtYmRldi5jPTI1Mz1zdGF0aWMgdm9pZCBudm1ldF9iZGV2X2V4ZWN1dGVfcncoc3RydWN0IG52bWV0X3JlcSAqcmVxKVxcbi0tXFxuZHJpdmVycy9udm1lL3RhcmdldC9pby1jbWQtYmRldi5jLTI4Ni1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L2lvLWNtZC1iZGV2LmM6Mjg3OlxcdGlmIChpc19wY2lfcDJwZG1hX3BhZ2Uoc2dfcGFnZShyZXEtXFx1MDAzZXNnKSkpXFxuZHJpdmVycy9udm1lL3RhcmdldC9pby1jbWQtYmRldi5jLTI4OC1cXHRcXHRvcGYgfD0gUkVRX05PTUVSR0U7XFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L252bWV0Lmg9MTAwPXN0cnVjdCBudm1ldF9ucyB7XFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L252bWV0LmgtMTIzLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvbnZtZXQuaDoxMjQ6XFx0c3RydWN0IHBjaV9kZXZcXHRcXHQqcDJwX2RldjtcXG5kcml2ZXJzL252bWUvdGFyZ2V0L252bWV0Lmg6MTI1OlxcdGludFxcdFxcdFxcdHVzZV9wMnBtZW07XFxuZHJpdmVycy9udm1lL3RhcmdldC9udm1ldC5oLTEyNi1cXHRpbnRcXHRcXHRcXHRwaV90eXBlO1xcbi0tXFxuZHJpdmVycy9udm1lL3RhcmdldC9udm1ldC5oPTI1Mj1zdHJ1Y3QgbnZtZXRfY3RybCB7XFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L252bWV0LmgtMjkwLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvbnZtZXQuaDoyOTE6XFx0c3RydWN0IGRldmljZVxcdFxcdCpwMnBfY2xpZW50O1xcbmRyaXZlcnMvbnZtZS90YXJnZXQvbnZtZXQuaDoyOTI6XFx0c3RydWN0IHJhZGl4X3RyZWVfcm9vdFxcdHAycF9uc19tYXA7XFxuZHJpdmVycy9udm1lL3RhcmdldC9udm1ldC5oLTI5My0jaWZkZWYgQ09ORklHX05WTUVfVEFSR0VUX0RFQlVHRlNcXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvbnZtZXQuaD00NDc9c3RydWN0IG52bWV0X3JlcSB7XFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L252bWV0LmgtNDkyLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvbnZtZXQuaDo0OTM6XFx0c3RydWN0IHBjaV9kZXZcXHRcXHQqcDJwX2RldjtcXG5kcml2ZXJzL252bWUvdGFyZ2V0L252bWV0Lmg6NDk0OlxcdHN0cnVjdCBkZXZpY2VcXHRcXHQqcDJwX2NsaWVudDtcXG5kcml2ZXJzL252bWUvdGFyZ2V0L252bWV0LmgtNDk1LVxcdHUxNlxcdFxcdFxcdGVycm9yX2xvYztcXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvbnZtZXQuaD02MDU9c3RydWN0IG52bWV0X2FsbG9jX2N0cmxfYXJncyB7XFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L252bWV0LmgtNjExLVxcdGNvbnN0IHN0cnVjdCBudm1ldF9mYWJyaWNzX29wcyAqb3BzO1xcbmRyaXZlcnMvbnZtZS90YXJnZXQvbnZtZXQuaDo2MTI6XFx0c3RydWN0IGRldmljZVxcdFxcdCpwMnBfY2xpZW50O1xcbmRyaXZlcnMvbnZtZS90YXJnZXQvbnZtZXQuaC02MTMtXFx0dTMyXFx0XFx0XFx0a2F0bztcXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvcmRtYS5jPTQwMD1zdGF0aWMgaW50IG52bWV0X3JkbWFfYWxsb2NfcnNwKHN0cnVjdCBudm1ldF9yZG1hX2RldmljZSAqbmRldixcXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvcmRtYS5jLTQxMi1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L3JkbWEuYzo0MTM6XFx0aWYgKGliX2RtYV9wY2lfcDJwX2RtYV9zdXBwb3J0ZWQobmRldi1cXHUwMDNlZGV2aWNlKSlcXG5kcml2ZXJzL252bWUvdGFyZ2V0L3JkbWEuYzo0MTQ6XFx0XFx0ci1cXHUwMDNlcmVxLnAycF9jbGllbnQgPSBcXHUwMDI2bmRldi1cXHUwMDNlZGV2aWNlLVxcdTAwM2VkZXY7XFxuZHJpdmVycy9udm1lL3RhcmdldC9yZG1hLmMtNDE1LVxcdHItXFx1MDAzZXNlbmRfc2dlLmxlbmd0aCA9IHNpemVvZigqci1cXHUwMDNlcmVxLmNxZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDIxOjMzOjQzLjIzNTY0MzAzNloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NDE0NjIyNzMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlYWNoaW5nIHRoZSBUYXJnZXQ6IEEgRnV6emluZyBTdHJhdGVneSoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBkaWdnaW5nIGludG8gdGhpcywgYW5kIGl0IGxvb2tzIGxpa2UgYGRyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jYCBoYXMgUDJQIHN1cHBvcnQgYnVpbHQgaW4uICBUaGF0J3Mga2V5LiAgSXQgdXNlcyBgcGNpX3AycG1lbV9hbGxvY19zZ2xgLCB3aGljaCBpcyBwcmVjaXNlbHkgd2hhdCB3ZSB3YW50LCBhbmQgaW1wb3J0YW50bHksIGl0J3MgY29udHJvbGxhYmxlIHZpYSBjb25maWdmcyB1c2luZyB0aGUgYHAycG1lbWAgb3B0aW9uLiBCaW5nby5cblxuTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGlmIHdlIHNldCB1cCBhbiBOVk1lIHRhcmdldCB1c2luZyBhbiBNRCBhcnJheSBhcyBhIGJhY2tlbmQg4oCTIGEgYG52bWV0X25zYCBiYWNrZWQgYnkgYSBibG9jayBkZXZpY2Ugd2hpY2ggaXRzZWxmIGlzIGFuIE1EIGFycmF5IOKAkyBhbmQgdGhlbiBlbmFibGUgYHAycG1lbWAgb24gdGhhdCBuYW1lc3BhY2UuLi4gYm9vbS4gVGhlIE5WTWUgdGFyZ2V0ICpzaG91bGQqIHN0YXJ0IGFsbG9jYXRpbmcgUDJQIG1lbW9yeSBhbmQgdGhlbiBpc3N1aW5nIEkvTyBkaXJlY3RseSB0byB0aGUgTUQgYXJyYXksIHVzaW5nIHRob3NlIHBhZ2VzLiBUaGF0IHRyaWdnZXJzIHRoZSBNRCBSQUlEIGNvZGUgd2UgYXJlIGludGVyZXN0ZWQgaW4uIFRoaXMgaXMgZGVmaW5pdGVseSBhIHNvbGlkIGF0dGFjayBzdXJmYWNlLlxuXG5BbmQgaGVyZSdzIHRoZSBraWNrZXI6IHRoaXMgaXMgYWxsIGFjaGlldmFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCB3aXRoIFFFTVUuICBXZSBjYW4gcHJvdmlzaW9uIGEgdmlydHVhbCBOVk1lIGRldmljZSB3aXRoIGEgQ01CIChDb250cm9sbGVyIE1lbW9yeSBCdWZmZXIpIGFjdGluZyBhcyBhIFAyUCBtZW1vcnkgcHJvdmlkZXIuIEFuZCB5ZXMsIFFFTVUncyBOVk1lIGRldmljZSAqZG9lcyogc3VwcG9ydCBDTUIsIHRoYW5rcyB0byB0aGUgYGNtYl9zaXplX21iYCBwYXJhbWV0ZXIuXG5cbk5vdywgZG9lcyBzeXprYWxsZXIgcGxheSBuaWNlbHk/ICBZZXMhIEl0IGhhcyBkZXNjcmlwdGlvbnMgZm9yIE5WTWUgdGFyZ2V0IGNvbmZpZ2ZzLCBzbyB0aGF0J3MgY292ZXJlZC4gQWxzbywgaXQgaGFzIGRlc2NyaXB0aW9ucyBmb3IgTUQgaW9jdGxzLCBzbyB3ZSBjYW4gZGVmaW5lIHRoZSBNRCBhcnJheXMuICBUaGlzIGlzIGFsbCBkZWZpbml0ZWx5IHJlYWNoYWJsZSBhbmQgcmlwZSBmb3IgZnV6emluZy5cblxuTW92aW5nIG9uLCBJIG5lZWQgdG8gY2hlY2sgb3V0IHRoZSBOVk1lIFJETUEgbW9kaWZpY2F0aW9ucyBpbiBgZHJpdmVycy9udm1lL2hvc3QvcmRtYS5jYC4gSXQgbG9va3MgbGlrZSB0aGUgcGF0Y2ggY2hhbmdlcyBgbnZtZV9yZG1hX2RtYV9tYXBfcmVxYCB0byB1c2UgYGliX2RtYV9tYXBfc2d0YWJsZV9hdHRyc2AgaW5zdGVhZCBvZiB0aGUgb2xkIGBpYl9kbWFfbWFwX3NnYC4gIFdlJ3JlIG1hcHBpbmcgdGhlIHNjYXR0ZXJsaXN0LlxuXG5BbHNvLCBpbiBgbnZtZV9yZG1hX3F1ZXVlX3JxYCwgaXQgaGFuZGxlcyBgLUVSRU1PVEVJT2AgYnkgcmV0dXJuaW5nIGBCTEtfU1RTX1AyUERNQWAuIFRoaXMgaXMgYWxzbyBhIHZhbGlkIHBhdGh3YXkgaWYgd2UncmUgdXNpbmcgTlZNZSBvdmVyIFJETUEsIHdoaWNoIHN5emthbGxlciBzdXBwb3J0cyB3aXRoIGl0cyBgc2l3YCBvciBgcnhlYCBzb2Z0d2FyZSBSRE1BIGRyaXZlcnMuXG5cbk5vdyBJJ20gdGhpbmtpbmcsIGRvZXMgc29mdHdhcmUgUkRNQSBzdXBwb3J0IFAyUERNQT8gIGBpYl9kbWFfcGNpX3AycF9kbWFfc3VwcG9ydGVkYCBpcyBjaGVja2VkIGluIGBudm1ldF9yZG1hX2FsbG9jX3JzcGAsIGJ1dCB0aGUgY29kZSBpbiBgbnZtZV9yZG1hX2RtYV9tYXBfcmVxYCBzZWVtcyB0byBleGVjdXRlIGZvciAqYWxsKiBOVk1lIFJETUEgcmVxdWVzdHMsIG5vdCBqdXN0IFAyUERNQSBvbmVzISAgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBsYXN0IHBvaW50Li4uIEknbGwgdmVyaWZ5IHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MTM2LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTY2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDIxOjMzOjUyLjY1MDI2NzY2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjU1MDQ3NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpYl9kbWFfbWFwX3NndGFibGVfYXR0cnNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9udm1lL2hvc3QvcmRtYS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbnZtZS9ob3N0L3JkbWEuYz0xNDY4PXN0YXRpYyBpbnQgbnZtZV9yZG1hX2RtYV9tYXBfcmVxKHN0cnVjdCBpYl9kZXZpY2UgKmliZGV2LCBzdHJ1Y3QgcmVxdWVzdCAqcnEsXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9yZG1hLmMtMTQ4Ny1cXHR9O1xcbmRyaXZlcnMvbnZtZS9ob3N0L3JkbWEuYzoxNDg4OlxcdHJldCA9IGliX2RtYV9tYXBfc2d0YWJsZV9hdHRycyhpYmRldiwgXFx1MDAyNnNndCwgcnFfZG1hX2RpcihycSksIDApO1xcbmRyaXZlcnMvbnZtZS9ob3N0L3JkbWEuYy0xNDg5LVxcdGlmICh1bmxpa2VseShyZXQpKVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvcmRtYS5jLTE1MTAtXFx0XFx0fTtcXG5kcml2ZXJzL252bWUvaG9zdC9yZG1hLmM6MTUxMTpcXHRcXHRyZXQgPSBpYl9kbWFfbWFwX3NndGFibGVfYXR0cnMoaWJkZXYsIFxcdTAwMjZzZ3QsIHJxX2RtYV9kaXIocnEpLCAwKTtcXG5kcml2ZXJzL252bWUvaG9zdC9yZG1hLmMtMTUxMi1cXHRcXHRpZiAodW5saWtlbHkocmV0KSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMjE6MzM6NTIuNzA2ODIyMzM2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg3ODY1MzUzOTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBOVk1lIFJETUEgYW5kIE1EIFJBSUQgTW9kaWZpY2F0aW9ucyoqXG5cbk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCwgdGhlIGNvcmUgY2hhbmdlIGZvciBOVk1lIFJETUEsIHNwZWNpZmljYWxseSB0aGUgc3dpdGNoIGluIGBudm1lX3JkbWFfZG1hX21hcF9yZXFgIHRvIGBpYl9kbWFfbWFwX3NndGFibGVfYXR0cnNgLCBzZWVtcyBsaWtlIGEgc29saWQgZnVuY3Rpb25hbCBjaGFuZ2UgYWZmZWN0aW5nIGFsbCBOVk1lIFJETUEgSS9PLiBUaGUgTlZNZSBSRE1BIGNvbXBvbmVudCBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBhbmQgdGVzdGFibGUsIHdoaWNoIGlzIGdvb2QuIFdlIGRvbid0IG5lY2Vzc2FyaWx5IG5lZWQgUDJQRE1BIHRvIHZhbGlkYXRlIHRoZSBmdW5kYW1lbnRhbCBSRE1BIHBhcnQuXG5cbk5vdywgdGhlIG1vcmUgaW50ZXJlc3RpbmcgcGFydCBpcyB0aGUgbW9kaWZpY2F0aW9ucyB0byB0aGUgTUQgUkFJRCBjb2RlLiBJdCdzIHRvdWNoaW5nIGEgbnVtYmVyIG9mIGZ1bmN0aW9ucywgcHJpbWFyaWx5IGFyb3VuZCBob3cgUDJQRE1BIGJpb3MgYXJlIGhhbmRsZWQ6IGBtZF9zdWJtaXRfYmlvYCBub3cgc2V0cyBgUkVRX05PTUVSR0VgLCBgcmFpZDFfd3JpdGVfZXJyb3JgIGlzIG1vZGlmaWVkIHRvIGF2b2lkIGRpc2sgZmFpbHVyZXMgdW5kZXIgc3BlY2lmaWMgUDJQRE1BIGNvbmRpdGlvbnMsIGFuZCBjaGFuZ2VzIGV4dGVuZCB0byBgcmFpZDFfZW5kX3dyaXRlX3JlcXVlc3RgLCBgcmFpZDFfd3JpdGVfcmVxdWVzdGAsIGBoYW5kbGVfd3JpdGVfZmluaXNoZWRgLCBhbmQgYGhhbmRsZV9yZWFkX2Vycm9yYCB0byBoYW5kbGUgUDJQRE1BIGVycm9ycywgbGlrZSBibG9ja2luZyB0aGUgYmlvIGlmIHdlIGdldCBhIGBwMnBkbWFfZXJyb3JgLiBUaGVyZSBhcmUgc2ltaWxhciBjaGFuZ2VzIGZvciBSQUlEMTAsIHRvby5cblxuVG8gdGVzdCB0aGVzZSBNRCBSQUlEIG1vZGlmaWNhdGlvbnMgdGhvcm91Z2hseSwgdGhvdWdoLCB3ZSBhYnNvbHV0ZWx5IG5lZWQgdG8gZ2VuZXJhdGUgUDJQRE1BIGJpb3MuIENhbiBTeXprYWxsZXIgZG8gdGhhdD8gQWgsIHllcyEgSWYgU3l6a2FsbGVyIGNvbmZpZ3VyZXMgYW4gTlZNZSB0YXJnZXQgd2l0aCBgcDJwbWVtYCBhbmQgcG9pbnRzIGl0IHRvIGFuIE1EIGFycmF5LCB0aGVuIGFsbCBJL08gdG8gdGhhdCBOVk1lIHRhcmdldCBzaG91bGQgZ2VuZXJhdGUgdGhlIGFwcHJvcHJpYXRlIFAyUERNQSBiaW9zIHRvIHRoZSBNRCBhcnJheSwgd2hpY2ggaXMgYSBuaWNlIHNwZWNpZmljIHdheSB0byB2YWxpZGF0ZSB0aGVzZS4gVGhpcyBpcyBhIHZlcnkgc3BlY2lmaWMgc2V0dXAsIGJ1dCBmdW5jdGlvbmFsbHkgcmVhY2hhYmxlLCB3aGljaCBpcyBrZXkuXG5cbkV2ZW4gaWYgc3l6a2FsbGVyIGRvZXNuJ3QgbWFrZSBpdCAqZWFzeSogdG8gZ2VuZXJhdGUgUDJQRE1BIGJpb3MgZGlyZWN0bHksIEkgc2hvdWxkIHJlbWVtYmVyIHRoYXQgdGhlIE1EIFJBSUQgY2hhbmdlcyBhcmVuJ3QgKmV4Y2x1c2l2ZWx5KiBQMlBETUEtZm9jdXNlZC4gU29tZSBvZiB0aGUgY2hhbmdlcywgbGlrZSB0aGUgcmVmYWN0b3Jpbmcgb2YgYHJhaWQxX3dyaXRlX2Vycm9yYCBhcyBhIGhlbHBlciBmdW5jdGlvbiwgYW5kIHRoZSBgQ29sbGlzaW9uQ2hlY2tgIGNoYW5nZSBpbXBhY3QgKm5vcm1hbCogYmlvcywgdG9vLiBXYWl0LCB3aGF0IHdhcyB0aGF0IGBDb2xsaXNpb25DaGVja2AgY2hhbmdlIGFsbCBhYm91dD8gSSBzaG91bGQgcHJvYmFibHkgZ2l2ZSB0aGF0IGFub3RoZXIgbG9vay5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA2MDgsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMjE6MzQ6MDEuNDkzMzU5NTczWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MzI0NTE3NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDb2xsaXNpb25DaGVja1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL21kL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL21kL21kLmM9MTU0PXN0YXRpYyB2b2lkIHJkZXZfdW5pbml0X3NlcmlhbChzdHJ1Y3QgbWRfcmRldiAqcmRldilcXG5kcml2ZXJzL21kL21kLmMtMTU1LXtcXG5kcml2ZXJzL21kL21kLmM6MTU2OlxcdGlmICghdGVzdF9hbmRfY2xlYXJfYml0KENvbGxpc2lvbkNoZWNrLCBcXHUwMDI2cmRldi1cXHUwMDNlZmxhZ3MpKVxcbmRyaXZlcnMvbWQvbWQuYy0xNTctXFx0XFx0cmV0dXJuO1xcbi0tXFxuZHJpdmVycy9tZC9tZC5jPTE3MT1zdGF0aWMgaW50IHJkZXZfaW5pdF9zZXJpYWwoc3RydWN0IG1kX3JkZXYgKnJkZXYpXFxuLS1cXG5kcml2ZXJzL21kL21kLmMtMTc2LVxcbmRyaXZlcnMvbWQvbWQuYzoxNzc6XFx0aWYgKHRlc3RfYml0KENvbGxpc2lvbkNoZWNrLCBcXHUwMDI2cmRldi1cXHUwMDNlZmxhZ3MpKVxcbmRyaXZlcnMvbWQvbWQuYy0xNzgtXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5kcml2ZXJzL21kL21kLmMtMTkyLVxcdHJkZXYtXFx1MDAzZXNlcmlhbCA9IHNlcmlhbDtcXG5kcml2ZXJzL21kL21kLmM6MTkzOlxcdHNldF9iaXQoQ29sbGlzaW9uQ2hlY2ssIFxcdTAwMjZyZGV2LVxcdTAwM2VmbGFncyk7XFxuZHJpdmVycy9tZC9tZC5jLTE5NC1cXG4tLVxcbmRyaXZlcnMvbWQvbWQuYz0yMzM9dm9pZCBtZGRldl9jcmVhdGVfc2VyaWFsX3Bvb2woc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kX3JkZXYgKnJkZXYpXFxuLS1cXG5kcml2ZXJzL21kL21kLmMtMjM3LVxcdGlmIChyZGV2IFxcdTAwMjZcXHUwMDI2ICFyZGV2X25lZWRfc2VyaWFsKHJkZXYpIFxcdTAwMjZcXHUwMDI2XFxuZHJpdmVycy9tZC9tZC5jOjIzODpcXHQgICAgIXRlc3RfYml0KENvbGxpc2lvbkNoZWNrLCBcXHUwMDI2cmRldi1cXHUwMDNlZmxhZ3MpKVxcbmRyaXZlcnMvbWQvbWQuYy0yMzktXFx0XFx0cmV0dXJuO1xcbi0tXFxuZHJpdmVycy9tZC9tZC5jLTI2NC0gKiBGcmVlIHJlc291cmNlIGZyb20gcmRldihzKSwgYW5kIGRlc3Ryb3kgc2VyaWFsX2luZm9fcG9vbCB1bmRlciBjb25kaXRpb25zOlxcbmRyaXZlcnMvbWQvbWQuYzoyNjU6ICogMS4gcmRldiBpcyB0aGUgbGFzdCBkZXZpY2UgZmxhZ2VkIHdpdGggQ29sbGlzaW9uQ2hlY2suXFxuZHJpdmVycy9tZC9tZC5jLTI2Ni0gKiAyLiB3aGVuIGJpdG1hcCBpcyBkZXN0cm95ZWQgd2hpbGUgcG9saWN5IGlzIG5vdCBlbmFibGVkLlxcbi0tXFxuZHJpdmVycy9tZC9tZC5jPTI2OT12b2lkIG1kZGV2X2Rlc3Ryb3lfc2VyaWFsX3Bvb2woc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kX3JkZXYgKnJkZXYpXFxuZHJpdmVycy9tZC9tZC5jLTI3MC17XFxuZHJpdmVycy9tZC9tZC5jOjI3MTpcXHRpZiAocmRldiBcXHUwMDI2XFx1MDAyNiAhdGVzdF9iaXQoQ29sbGlzaW9uQ2hlY2ssIFxcdTAwMjZyZGV2LVxcdTAwM2VmbGFncykpXFxuZHJpdmVycy9tZC9tZC5jLTI3Mi1cXHRcXHRyZXR1cm47XFxuLS1cXG5kcml2ZXJzL21kL21kLmMtMjg2LVxcdFxcdFxcdH0gZWxzZSBpZiAodGVtcCAhPSByZGV2IFxcdTAwMjZcXHUwMDI2XFxuZHJpdmVycy9tZC9tZC5jOjI4NzpcXHRcXHRcXHRcXHQgICB0ZXN0X2JpdChDb2xsaXNpb25DaGVjaywgXFx1MDAyNnRlbXAtXFx1MDAzZWZsYWdzKSlcXG5kcml2ZXJzL21kL21kLmMtMjg4LVxcdFxcdFxcdFxcdG51bSsrO1xcbi0tXFxuZHJpdmVycy9tZC9tZC5oPTI0Mj1lbnVtIGZsYWdfYml0cyB7XFxuLS1cXG5kcml2ZXJzL21kL21kLmgtMzA2LVxcdFxcdFxcdFxcdCAqL1xcbmRyaXZlcnMvbWQvbWQuaDozMDc6XFx0Q29sbGlzaW9uQ2hlY2ssXFx0XFx0LypcXG5kcml2ZXJzL21kL21kLmgtMzA4LVxcdFxcdFxcdFxcdCAqIGNoZWNrIGlmIHRoZXJlIGlzIGNvbGxpc2lvbiBiZXR3ZWVuIHJhaWQxXFxuLS1cXG5kcml2ZXJzL21kL3JhaWQxLmM9NDY5PXN0YXRpYyB2b2lkIHJhaWQxX2VuZF93cml0ZV9yZXF1ZXN0KHN0cnVjdCBiaW8gKmJpbylcXG4tLVxcbmRyaXZlcnMvbWQvcmFpZDEuYy01MzMtXFx0aWYgKGJlaGluZCkge1xcbmRyaXZlcnMvbWQvcmFpZDEuYzo1MzQ6XFx0XFx0aWYgKHRlc3RfYml0KENvbGxpc2lvbkNoZWNrLCBcXHUwMDI2cmRldi1cXHUwMDNlZmxhZ3MpKVxcbmRyaXZlcnMvbWQvcmFpZDEuYy01MzUtXFx0XFx0XFx0cmVtb3ZlX3NlcmlhbChyZGV2LCBsbywgaGkpO1xcbi0tXFxuZHJpdmVycy9tZC9yYWlkMS5jLTU1Ny1cXHRcXHR9XFxuZHJpdmVycy9tZC9yYWlkMS5jOjU1ODpcXHR9IGVsc2UgaWYgKHRlc3RfYml0KENvbGxpc2lvbkNoZWNrLCBcXHUwMDI2cmRldi1cXHUwMDNlZmxhZ3MpKVxcbmRyaXZlcnMvbWQvcmFpZDEuYy01NTktXFx0XFx0cmVtb3ZlX3NlcmlhbChyZGV2LCBsbywgaGkpO1xcbi0tXFxuZHJpdmVycy9tZC9yYWlkMS5jPTE1MDY9c3RhdGljIGJvb2wgcmFpZDFfd3JpdGVfcmVxdWVzdChzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgYmlvICpiaW8sXFxuLS1cXG5kcml2ZXJzL21kL3JhaWQxLmMtMTY2Ni1cXHRcXHRcXHRcXHRcXHQgICAgICAgR0ZQX05PSU8sIFxcdTAwMjZtZGRldi1cXHUwMDNlYmlvX3NldCk7XFxuZHJpdmVycy9tZC9yYWlkMS5jOjE2Njc6XFx0XFx0XFx0aWYgKHRlc3RfYml0KENvbGxpc2lvbkNoZWNrLCBcXHUwMDI2cmRldi1cXHUwMDNlZmxhZ3MpKVxcbmRyaXZlcnMvbWQvcmFpZDEuYy0xNjY4LVxcdFxcdFxcdFxcdHdhaXRfZm9yX3NlcmlhbGl6YXRpb24ocmRldiwgcjFfYmlvKTtcXG4tLVxcbmRyaXZlcnMvbWQvcmFpZDEuYy0xNjc1LVxcdFxcdFxcdC8qXFxuZHJpdmVycy9tZC9yYWlkMS5jOjE2NzY6XFx0XFx0XFx0ICogQ29sbGlzaW9uQ2hlY2sgbWFya3MgZXZlcnkgcmRldiB3aXRoIGEgc2VyaWFsXFxuZHJpdmVycy9tZC9yYWlkMS5jLTE2NzctXFx0XFx0XFx0ICogdHJlZTsgb3JkZXIgYWdhaW5zdCBpbi1mbGlnaHQgd3JpdGUtYmVoaW5kIEkvTy5cXG5kcml2ZXJzL21kL3JhaWQxLmMtMTY3OC1cXHRcXHRcXHQgKi9cXG5kcml2ZXJzL21kL3JhaWQxLmM6MTY3OTpcXHRcXHRcXHRpZiAodGVzdF9iaXQoQ29sbGlzaW9uQ2hlY2ssIFxcdTAwMjZyZGV2LVxcdTAwM2VmbGFncykpXFxuZHJpdmVycy9tZC9yYWlkMS5jLTE2ODAtXFx0XFx0XFx0XFx0d2FpdF9mb3Jfc2VyaWFsaXphdGlvbihyZGV2LCByMV9iaW8pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QyMTozNDowMS41NTY2MTA4NjlaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTE0NTg4MTEzODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXQgUmVmaW5lbWVudDogQmxvY2sgTGF5ZXIsIE1EIFJBSUQsIGFuZCBOVk1lIFJETUEgSW50ZWdyYXRpb24qKlxuXG5Pa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgcGF0Y2gsIGl0IHNlZW1zIGxpa2UgYSBidW5jaCBvZiBpbnRlcmNvbm5lY3RlZCBjaGFuZ2VzLiBGaXJzdCwgaXQgbG9va3MgbGlrZSBgQ29sbGlzaW9uQ2hlY2tgIGlzIG5vdyB0aGUgc2VyaWFsaXphdGlvbiBmbGFnIGJlaW5nIHVzZWQgaW4gYHJhaWQxX2VuZF93cml0ZV9yZXF1ZXN0YCBhbmQgYHJhaWQxX3dyaXRlX3JlcXVlc3RgLCByZXBsYWNpbmcgdGhlIHByZXZpb3VzIGBNRF9TRVJJQUxJWkVfUE9MSUNZYCBvbiBgbWRkZXZgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgYWZmZWN0aW5nIHRoZSBSQUlEMSB3cml0ZSBwYXRoLCBldmVuIGluZGVwZW5kZW50IG9mIFAyUERNQS5cblxuTGV0IG1lIGJyZWFrIGRvd24gd2hhdCB0aGlzIHBhdGNoIGlzIGRvaW5nIG1vcmUgYnJvYWRseTpcblxuMS4gICoqQmxvY2sgTGF5ZXIgVXBkYXRlczoqKiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBgQkxLX1NUU19QMlBETUFgIHN0YXR1cyBjb2RlLiBgYmxrLW1xLWRtYS5jYCBpcyB1cGRhdGVkIHRvIHJldHVybiB0aGlzIG5ldyBjb2RlIGluIHRoZSBhcHByb3ByaWF0ZSBzaXR1YXRpb25zLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBQQ0kgUDJQRE1BIG1hcHBpbmcgaXNzdWVzLlxuMi4gICoqTUQgUkFJRCBJbnRlZ3JhdGlvbjoqKiBTZXZlcmFsIE1EIFJBSUQgZmlsZXMgKGBtZC5jYCwgYHJhaWQxLmNgLCBgcmFpZDEwLmNgKSBzZWUgY2hhbmdlcy4gVGhlcmUncyBhIG5ldyBgbWRfYmlvX2lzX3AycGRtYWAgY2hlY2sgYW5kIGBSRVFfTk9NRVJHRWAgaXMgc2V0IGZvciBQMlBETUEgYmlvcy4gTW9yZSBpbXBvcnRhbnRseSwgZXJyb3IgaGFuZGxpbmcgaXMgYWx0ZXJlZCB0byBoYW5kbGUgdGhlIG5ldyBgQkxLX1NUU19QMlBETUFgIHN0YXR1cywgaGFuZGxpbmcgYmFkYmxvY2tzLiBBbmQgdGhlIHNlcmlhbGl6YXRpb24gY2hlY2sgaGFzIGNoYW5nZWQgYXMgbWVudGlvbmVkIGFib3ZlLlxuMy4gICoqTlZNZSBSRE1BIERNQSBNYXBwaW5nOioqIGByZG1hLmNgIHVzZXMgYSBkaWZmZXJlbnQgRE1BIG1hcHBpbmcgQVBJIChgaWJfZG1hX21hcF9zZ3RhYmxlX2F0dHJzYCBpbnN0ZWFkIG9mIGBpYl9kbWFfbWFwX3NnYCkgYW5kIHJldHVybnMgYEJMS19TVFNfUDJQRE1BYCBpbiB0aGUgY2FzZSBvZiBgLUVSRU1PVEVJT2AuXG5cbkdpdmVuIHRoZXNlIGNoYW5nZXMsIHRoaXMgaXMgKmRlZmluaXRlbHkqIHdvcnRoIGZ1enppbmcuIFRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIGJsb2NrIGxheWVyIGVycm9yIGNvZGVzLCBNRCBSQUlEIGVycm9yIGhhbmRsaW5nIGFuZCBzZXJpYWxpemF0aW9uIGxvZ2ljLCBhbmQgTlZNZSBSRE1BIERNQSBtYXBwaW5nLCBzbyBpdCB0b3VjaGVzIGNyaXRpY2FsIHBhdGhzLlxuXG5Ob3csIGxldCdzIHJlZmluZSB0aGUgbGlzdCBvZiBzcGVjaWZpYyBzeW1ib2xzIHRvIGZvY3VzIG9uOlxuXG5JIHRoaW5rIGByYWlkMV93cml0ZV9lcnJvcmAsIGBoYW5kbGVfd3JpdGVfZmluaXNoZWRgLCBgaGFuZGxlX3JlYWRfZXJyb3JgIGFuZCBgbmFycm93X3dyaXRlX2Vycm9yYCAoaW4gcmFpZDEgYW5kIHJhaWQxMCkgYXJlIGdvb2QsIHNpbmNlIHRoZXkgZGVhbCB3aXRoIHRoZSBlcnJvciBwYXRocy4gYG52bWVfcmRtYV9kbWFfbWFwX3JlcWAgYW5kIGBudm1lX3JkbWFfcXVldWVfcnFgIGFyZSBhbHNvIGltcG9ydGFudCBiZWNhdXNlIHRoZSBETUEgbWFwcGluZyBBUEkgd2FzIG1vZGlmaWVkLiBgcmFpZDFfd3JpdGVfcmVxdWVzdGAgaXMgYSBob3QgcGF0aCBidXQgc3BlY2lmaWMgdG8gUkFJRDEgYW5kIEkgd2lsbCBkcm9wIGl0IGZvciB0aGUgbW9tZW50LlxuXG5TbywgaGVyZSdzIG15IG5hcnJvd2VkLWRvd24gbGlzdDpcblxuKiAgIGByYWlkMV93cml0ZV9lcnJvcmAgKHN0YXRpYylcbiogICBgaGFuZGxlX3dyaXRlX2ZpbmlzaGVkYCAocmFpZDEgYW5kIHJhaWQxMClcbiogICBgaGFuZGxlX3JlYWRfZXJyb3JgIChyYWlkMSBhbmQgcmFpZDEwKVxuKiAgIGBuYXJyb3dfd3JpdGVfZXJyb3JgIChyYWlkMSBhbmQgcmFpZDEwKVxuKiAgIGBudm1lX3JkbWFfZG1hX21hcF9yZXFgIChzdGF0aWMpXG4qICAgYG52bWVfcmRtYV9xdWV1ZV9ycWBcblxuSSdsbCBkb3VibGUtY2hlY2sgdGhvc2UgbmFtZXMgd2l0aGluIHRoZSBSQUlEMSBhbmQgUkFJRDEwIGRyaXZlciBmaWxlcyB0byBiZSBleHRyYSBzdXJlLCBidXQgSSBmZWVsIGdvb2QgYWJvdXQgdGhpcyBsaXN0IHRvIHN0YXJ0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjczMCwiT3V0cHV0VG9rZW5zIjo1MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkwOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QyMTozNDoxMy4wMTU0MjU2M1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE1ODAzMjgyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeKHN0YXRpYyApPyh2b2lkfGludHxib29sKSAoaGFuZGxlX3dyaXRlX2ZpbmlzaGVkfGhhbmRsZV9yZWFkX2Vycm9yfG5hcnJvd193cml0ZV9lcnJvcilcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9tZC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9tZC9yYWlkMS5jPTI0MzE9c3RhdGljIHZvaWQgZml4X3JlYWRfZXJyb3Ioc3RydWN0IHIxY29uZiAqY29uZiwgc3RydWN0IHIxYmlvICpyMV9iaW8pXFxuLS1cXG5kcml2ZXJzL21kL3JhaWQxLmMtMjUxNS1cXG5kcml2ZXJzL21kL3JhaWQxLmM6MjUxNjpzdGF0aWMgdm9pZCBuYXJyb3dfd3JpdGVfZXJyb3Ioc3RydWN0IHIxYmlvICpyMV9iaW8sIGludCBpKVxcbmRyaXZlcnMvbWQvcmFpZDEuYy0yNTE3LXtcXG4tLVxcbmRyaXZlcnMvbWQvcmFpZDEuYz0yNTkwPXN0YXRpYyB2b2lkIGhhbmRsZV9zeW5jX3dyaXRlX2ZpbmlzaGVkKHN0cnVjdCByMWNvbmYgKmNvbmYsIHN0cnVjdCByMWJpbyAqcjFfYmlvKVxcbi0tXFxuZHJpdmVycy9tZC9yYWlkMS5jLTI2MDktXFxuZHJpdmVycy9tZC9yYWlkMS5jOjI2MTA6c3RhdGljIHZvaWQgaGFuZGxlX3dyaXRlX2ZpbmlzaGVkKHN0cnVjdCByMWNvbmYgKmNvbmYsIHN0cnVjdCByMWJpbyAqcjFfYmlvKVxcbmRyaXZlcnMvbWQvcmFpZDEuYy0yNjExLXtcXG4tLVxcbmRyaXZlcnMvbWQvcmFpZDEuYy0yNjU2LVxcbmRyaXZlcnMvbWQvcmFpZDEuYzoyNjU3OnN0YXRpYyB2b2lkIGhhbmRsZV9yZWFkX2Vycm9yKHN0cnVjdCByMWNvbmYgKmNvbmYsIHN0cnVjdCByMWJpbyAqcjFfYmlvKVxcbmRyaXZlcnMvbWQvcmFpZDEuYy0yNjU4LXtcXG4tLVxcbmRyaXZlcnMvbWQvcmFpZDEwLmM9MjYyNj1zdGF0aWMgdm9pZCBmaXhfcmVhZF9lcnJvcihzdHJ1Y3QgcjEwY29uZiAqY29uZiwgc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IHIxMGJpbyAqcjEwX2JpbylcXG4tLVxcbmRyaXZlcnMvbWQvcmFpZDEwLmMtMjc4MC1cXG5kcml2ZXJzL21kL3JhaWQxMC5jOjI3ODE6c3RhdGljIHZvaWQgbmFycm93X3dyaXRlX2Vycm9yKHN0cnVjdCByMTBiaW8gKnIxMF9iaW8sIGludCBpKVxcbmRyaXZlcnMvbWQvcmFpZDEwLmMtMjc4Mi17XFxuLS1cXG5kcml2ZXJzL21kL3JhaWQxMC5jLTI4NDYtXFxuZHJpdmVycy9tZC9yYWlkMTAuYzoyODQ3OnN0YXRpYyB2b2lkIGhhbmRsZV9yZWFkX2Vycm9yKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCByMTBiaW8gKnIxMF9iaW8pXFxuZHJpdmVycy9tZC9yYWlkMTAuYy0yODQ4LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMjE6MzQ6MTQuMTczNDY1MTg5WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1MTIwMDU5ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZS4uLiBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIHNvbWV0aGluZydzIGltbWVkaWF0ZWx5IG9mZi4gSGFuZyBvbiBhIHNlY29uZCwgd2h5IGFyZSB0aGV5IHVzaW5nIGBoYW5kbGVfd3JpdGVfY29tcGxldGVkYCBpbiBgcmFpZDEwLmNgPyBNeSBtZW50YWwgbW9kZWwgZGVmaW5pdGVseSBoYXMgbWUgZXhwZWN0aW5nIGBoYW5kbGVfd3JpdGVfZmluaXNoZWRgIGluIHRoYXQgY29udGV4dC4gVGhhdCBmZWVscyBsaWtlIGEgc3VidGxlIGJ1dCBwb3RlbnRpYWxseSBjcml0aWNhbCBtaXNtYXRjaCwgZXNwZWNpYWxseSB3aXRoIFJBSUQxMCdzIGNvbXBsZXhpdGllcy4gUmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhlIHBhdGNoIGhpc3RvcnkgZm9yIGByYWlkMTAuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB0aGlzIGNob2ljZSB3YXMgbWFkZS4gSXQncyBwb3NzaWJsZSB0aGVyZSdzIGEgZ29vZCByZWFzb24gdGhhdOKAmXMgbm90IGltbWVkaWF0ZWx5IGFwcGFyZW50LCBvciB3b3JzZSwgaXTigJlzIGEgYnVnLiBFaXRoZXIgd2F5LCB1bmRlcnN0YW5kaW5nIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoaXMgaXMgY3J1Y2lhbCBiZWZvcmUgSSBjYW4gc2lnbiBvZmYgb24gdGhpcy4gTGV0J3Mgc2VlIHdoYXQgdGhlIGNoYW5nZSBsb2cgaGFzIHRvIHNheS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDg4OCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDIxOjM0OjE3LjY4NTQ3Mjk1NVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzE0Nzk5MTM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImhhbmRsZV93cml0ZV9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9tZC9yYWlkMTAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL21kL3JhaWQxMC5jPTI4NDc9c3RhdGljIHZvaWQgaGFuZGxlX3JlYWRfZXJyb3Ioc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IHIxMGJpbyAqcjEwX2JpbylcXG4tLVxcbmRyaXZlcnMvbWQvcmFpZDEwLmMtMjg4Ny1cXG5kcml2ZXJzL21kL3JhaWQxMC5jOjI4ODg6c3RhdGljIHZvaWQgaGFuZGxlX3dyaXRlX2NvbXBsZXRlZChzdHJ1Y3QgcjEwY29uZiAqY29uZiwgc3RydWN0IHIxMGJpbyAqcjEwX2JpbylcXG5kcml2ZXJzL21kL3JhaWQxMC5jLTI4ODkte1xcbi0tXFxuZHJpdmVycy9tZC9yYWlkMTAuYz0yOTg1PXN0YXRpYyB2b2lkIHJhaWQxMGQoc3RydWN0IG1kX3RocmVhZCAqdGhyZWFkKVxcbi0tXFxuZHJpdmVycy9tZC9yYWlkMTAuYy0zMDM3LVxcdFxcdCAgICB0ZXN0X2JpdChSMTBCSU9fV3JpdGVFcnJvciwgXFx1MDAyNnIxMF9iaW8tXFx1MDAzZXN0YXRlKSlcXG5kcml2ZXJzL21kL3JhaWQxMC5jOjMwMzg6XFx0XFx0XFx0aGFuZGxlX3dyaXRlX2NvbXBsZXRlZChjb25mLCByMTBfYmlvKTtcXG5kcml2ZXJzL21kL3JhaWQxMC5jLTMwMzktXFx0XFx0ZWxzZSBpZiAodGVzdF9iaXQoUjEwQklPX0lzUmVzaGFwZSwgXFx1MDAyNnIxMF9iaW8tXFx1MDAzZXN0YXRlKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMjE6MzQ6MTguMDAwMjc3MjQzWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU3MzU2MzE2MjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ3VycmVudCBBc3Nlc3NtZW50IG9mIHRoZSBSQUlEMTAgV3JpdGUgQ29tcGxldGlvbiBIYW5kbGluZyoqXG5cbk9rYXksIHNvIEknbSB6ZXJvaW5nIGluIG9uIGBoYW5kbGVfd3JpdGVfY29tcGxldGVkYCB3aXRoaW4gYHJhaWQxMC5jYC4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBsb2dpYyByZXNpZGVzLCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXQgY29tcGxldGVseS4gTXkgbWFpbiBmb2N1cyBpcyBvbiB0aGUgcmVsZXZhbnQgZXJyb3IgaGFuZGxpbmcgYW5kIGNvbXBsZXRpb24gcGF0aHdheXMuXG5cbkkndmUgaWRlbnRpZmllZCB0aGUga2V5IHN5bWJvbHMgdGhhdCBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIHRocm91Z2hvdXQgdGhlIGFuYWx5c2lzOiBgcmFpZDFfd3JpdGVfZXJyb3JgLCBgbmFycm93X3dyaXRlX2Vycm9yYCwgYGhhbmRsZV93cml0ZV9maW5pc2hlZGAsIG5hdHVyYWxseSBgaGFuZGxlX3dyaXRlX2NvbXBsZXRlZGAgaXRzZWxmLCBgaGFuZGxlX3JlYWRfZXJyb3JgLCBhbmQgYWxzbyB0aGUgUkRNQSByZWxhdGVkIGZ1bmN0aW9ucyBgbnZtZV9yZG1hX2RtYV9tYXBfcmVxYCBhbmQgYG52bWVfcmRtYV9xdWV1ZV9ycWAuIFVuZGVyc3RhbmRpbmcgaG93IHRoZXNlIGludGVyYWN0IHdpbGwgcHJvdmlkZSBhIHBpY3R1cmUgb2YgdGhlIGVycm9yIGhhbmRsaW5nIGFuZCBQMlBETUEgaW50ZWdyYXRpb24uXG5cbk5leHQsIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBuZWNlc3NhcnkgYnVpbGQgY29uZmlndXJhdGlvbnMuIEJhc2VkIG9uIG15IGN1cnJlbnQga25vd2xlZGdlLCBJJ20gZXhwZWN0aW5nIHRvIHNlZSB0aGVzZSBhY3RpdmF0ZWQ6IGBDT05GSUdfTURfUkFJRDFgLCBgQ09ORklHX01EX1JBSUQxMGAsIGBDT05GSUdfTlZNRV9SRE1BYCwgYW5kIGNydWNpYWxseSwgYENPTkZJR19QQ0lfUDJQRE1BYCBiZWNhdXNlIHRoYXQncyB3aGF0J3MgZHJpdmluZyB0aGlzIFAyUERNQSBzdXBwb3J0LiBJIHNob3VsZCBhbHNvIHNlZSBgQ09ORklHX05WTUVfVEFSR0VUYCBhbmQgYENPTkZJR19OVk1FX1RBUkdFVF9DT05GSUdGU2Agd2hpY2ggYWxsb3cgdGhlIE5WTWUgdGFyZ2V0IHRvIGJlIHNldCB1cCBhbmQgY29uZmlndXJlZCB3aXRoIHAycG1lbS4gSSBzaG91bGQgcmVhbGx5IGNvbmZpcm0gdGhhdCBgQ09ORklHX1BDSV9QMlBETUFgIGlzIGFjdHVhbGx5IHRoZSBjb3JyZWN0IG5hbWUgZm9yIHRoZSBmZWF0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTQxMCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QyMTozNDoyMy43MzU5MTExNTNaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MjEwMDk2MjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFBDSV9QMlBETUFcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9wY2kvS2NvbmZpZz0xOTc9Y29uZmlnIFBDSUVfVFBIXFxuLS1cXG5kcml2ZXJzL3BjaS9LY29uZmlnLTIwNS1cXG5kcml2ZXJzL3BjaS9LY29uZmlnOjIwNjpjb25maWcgUENJX1AyUERNQVxcbmRyaXZlcnMvcGNpL0tjb25maWctMjA3LVxcdGJvb2wgXFxcIlBDSSBwZWVyLXRvLXBlZXIgdHJhbnNmZXIgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMjE6MzQ6MjUuNjU2OTI1MjM5WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwMjg2OTU0NDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkNoZWNraW5nIHRoZSBQQ0llIEludGVyY29ubmVjdCBhbmQgTlZNZSBSRE1BIENvbmZpZ3VyYXRpb24qKlxuXG5SaWdodCwgYFBDSV9QMlBETUFgLiBBZmZpcm1hdGl2ZSwgdGhhdCdzIHdoYXQgd2UncmUgZGVhbGluZyB3aXRoLiBOZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kIGFzIHdlIHByb2NlZWQuIE5vdywgZ2l2ZW4gdGhlIGRpcmVjdGlvbiB3ZSBhcmUgaGVhZGVkLCBsZXQncyB2ZXJpZnkgdGhhdCB0aGUgYENPTkZJR19OVk1FX1JETUFgIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIHNldCBjb3JyZWN0bHkuIFdlIHNob3VsZCBjb25maXJtIHRoYXQgUmVtb3RlIERpcmVjdCBNZW1vcnkgQWNjZXNzIGlzIGVuYWJsZWQgZm9yIE5WTWUuIFRoYXQgc2V0dGluZyB3aWxsIGJlIGNyaXRpY2FsIGZvciBvdXIgb3ZlcmFsbCBwZXJmb3JtYW5jZSBwcm9maWxlLCBlc3BlY2lhbGx5IGdpdmVuIHRoZSBjb250ZXh0IG9mIFAyUERNQS4gQmVzdCB0byBkb3VibGUtY2hlY2sgbm93IGFuZCBhdm9pZCBhbnkgcG90ZW50aWFsIGhpY2N1cHMgZnVydGhlciBkb3duIHRoZSBsaW5lLiBJdCdzIGVhc3kgZW5vdWdoIHRvIGNvbmZpcm0sIGFuZCB2aXRhbCB0byBjb25maXJtIG91ciBhcmNoaXRlY3R1cmUgaXMgY29uZmlndXJlZCBjb3JyZWN0bHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2MDg4LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMjE6MzQ6MjguNjg1NjIzNTk4WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjkyNTU2NjkyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBOVk1FX1JETUFcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZz00Nz1jb25maWcgTlZNRV9GQUJSSUNTXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9LY29uZmlnLTUxLVxcbmRyaXZlcnMvbnZtZS9ob3N0L0tjb25maWc6NTI6Y29uZmlnIE5WTUVfUkRNQVxcbmRyaXZlcnMvbnZtZS9ob3N0L0tjb25maWctNTMtXFx0dHJpc3RhdGUgXFxcIk5WTSBFeHByZXNzIG92ZXIgRmFicmljcyBSRE1BIGhvc3QgZHJpdmVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QyMTozNDozMC4zNzgxODYzNloiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzE3NDI2NDY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKktlcm5lbCBDb25maWd1cmF0aW9uIFZlcmlmaWNhdGlvbioqXG5cbkFscmlnaHQsIHllcCwgbG9va3MgbGlrZSB3ZSdyZSBsb29raW5nIGF0IGBOVk1FX1JETUFgLiBHb29kLCB0aGF0J3Mgd2hhdCBJIGV4cGVjdGVkIHRvIHNlZS5cblxuTm93LCBsZXQncyBqdXN0IHF1aWNrbHkgY29uZmlybSBhIGZldyByZWxhdGVkIGNvbmZpZ3VyYXRpb25zLiBJIHdhbnQgdG8gZG91YmxlLWNoZWNrIHRoYXQgYENPTkZJR19NRF9SQUlEMWAgYW5kIGBDT05GSUdfTURfUkFJRDEwYCBhcmUgcHJvcGVybHkgc2V0LiBJdCdzIGFsd2F5cyBhIGdvb2QgcHJhY3RpY2UgdG8gZW5zdXJlIHRob3NlIGFyZSBlbmFibGVkLCBlc3BlY2lhbGx5IHdoZW4gd29ya2luZyB3aXRoIG1vZGVybiBzdG9yYWdlIHN0YWNrcyBhbmQgcG90ZW50aWFsIFJETUEgaW50ZWdyYXRpb24uIFRoZXNlIFJBSUQgbGV2ZWxzLCB3aGlsZSBzZWVtaW5nbHkgc3RyYWlnaHRmb3J3YXJkLCBjYW4gaW50ZXJhY3QgaW4gbnVhbmNlZCB3YXlzIHdpdGggTlZNZSBhbmQgUkRNQSwgc28gYSBxdWljayB2ZXJpZmljYXRpb24gaXMgd2FycmFudGVkLiBObyBzdXJwcmlzZXMsIGp1c3QgYSBzYW5pdHkgY2hlY2sgYmVmb3JlIHdlIGRpZyBkZWVwZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2Mzk3LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMjE6MzQ6MzMuNjk1NjE0Nzg5WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjE4MTY0MjM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNRF9SQUlEMVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL21kL0tjb25maWc9MTA0PWNvbmZpZyBNRF9SQUlEMFxcbi0tXFxuZHJpdmVycy9tZC9LY29uZmlnLTEyMy1cXG5kcml2ZXJzL21kL0tjb25maWc6MTI0OmNvbmZpZyBNRF9SQUlEMVxcbmRyaXZlcnMvbWQvS2NvbmZpZy0xMjUtXFx0dHJpc3RhdGUgXFxcIlJBSUQtMSAobWlycm9yaW5nKSBtb2RlXFxcIlxcbi0tXFxuZHJpdmVycy9tZC9LY29uZmlnLTE0NS1cXG5kcml2ZXJzL21kL0tjb25maWc6MTQ2OmNvbmZpZyBNRF9SQUlEMTBcXG5kcml2ZXJzL21kL0tjb25maWctMTQ3LVxcdHRyaXN0YXRlIFxcXCJSQUlELTEwIChtaXJyb3JlZCBzdHJpcGluZykgbW9kZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMjE6MzQ6MzUuMzEzNzgzNzg2WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMzAzODIwMzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBzdHJlYW0gb2YgdGhvdWdodDpcblxuKipDaGVja2luZyBTdG9yYWdlIENvbmZpZ3VyYXRpb24qKlxuXG5SaWdodCwgc28gd2UncmUgdGFsa2luZyBhYm91dCBzdG9yYWdlIGNvbmZpZ3VyYXRpb25zLiBJbW1lZGlhdGVseSwgbXkgbWluZCBqdW1wcyB0byB0aGUgc3BlY2lmaWNzIOKAkyB5ZXMsIGFic29sdXRlbHksIHdlIG5lZWQgdG8gY29uc2lkZXIgYm90aCBgTURfUkFJRDFgIGFuZCBgTURfUkFJRDEwYC4gVGhvc2UgYXJlIGNyaXRpY2FsLiBOb3csIGJlZm9yZSBnb2luZyBmdXJ0aGVyLCBsZXQncyB2ZXJpZnkgdGhhdCB0aGUga2VybmVsIHN1cHBvcnRzIE5WTWUgdGFyZ2V0IGZ1bmN0aW9uYWxpdHksIHdoaWNoIGlzIGNyaXRpY2FsIGZvciBzb21lIG9mIHRoZSBoaWdoZXItcGVyZm9ybWFuY2Ugc29sdXRpb25zIHRoYXQgd2Ugd291bGQgcmVjb21tZW5kLiBMZXQncyB2ZXJpZnkgYENPTkZJR19OVk1FX1RBUkdFVGAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2NzczLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMjE6MzQ6MzguNTQ0MTY4OTkxWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODcyOTUzOTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBOVk1FX1RBUkdFVFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctMi1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWc6Mzpjb25maWcgTlZNRV9UQVJHRVRcXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctNC1cXHR0cmlzdGF0ZSBcXFwiTlZNZSBUYXJnZXQgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy0xOS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWc6MjA6Y29uZmlnIE5WTUVfVEFSR0VUX0RFQlVHRlNcXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctMjEtICAgICAgICBib29sIFxcXCJOVk1lIFRhcmdldCBkZWJ1Z2ZzIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctMjgtXFxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnOjI5OmNvbmZpZyBOVk1FX1RBUkdFVF9QQVNTVEhSVVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy0zMC1cXHRib29sIFxcXCJOVk1lIFRhcmdldCBQYXNzdGhyb3VnaCBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnLTQwLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZzo0MTpjb25maWcgTlZNRV9UQVJHRVRfTE9PUFxcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy00Mi1cXHR0cmlzdGF0ZSBcXFwiTlZNZSBsb29wYmFjayBkZXZpY2Ugc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy01MS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWc6NTI6Y29uZmlnIE5WTUVfVEFSR0VUX1JETUFcXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctNTMtXFx0dHJpc3RhdGUgXFxcIk5WTWUgb3ZlciBGYWJyaWNzIFJETUEgdGFyZ2V0IHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctNjItXFxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnOjYzOmNvbmZpZyBOVk1FX1RBUkdFVF9GQ1xcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy02NC1cXHR0cmlzdGF0ZSBcXFwiTlZNZSBvdmVyIEZhYnJpY3MgRkMgdGFyZ2V0IGRyaXZlclxcXCJcXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy03My1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWc6NzQ6Y29uZmlnIE5WTUVfVEFSR0VUX0ZDTE9PUFxcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy03NS1cXHR0cmlzdGF0ZSBcXFwiTlZNZSBvdmVyIEZhYnJpY3MgRkMgVHJhbnNwb3J0IExvb3BiYWNrIFRlc3QgZHJpdmVyXFxcIlxcbi0tXFxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnLTg2LVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZzo4Nzpjb25maWcgTlZNRV9UQVJHRVRfVENQXFxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnLTg4LVxcdHRyaXN0YXRlIFxcXCJOVk1lIG92ZXIgRmFicmljcyBUQ1AgdGFyZ2V0IHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctOTYtXFxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnOjk3OmNvbmZpZyBOVk1FX1RBUkdFVF9UQ1BfVExTXFxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnLTk4LVxcdGJvb2wgXFxcIk5WTWUgb3ZlciBGYWJyaWNzIFRDUCB0YXJnZXQgVExTIGVuY3J5cHRpb24gc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy0xMDktXFxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnOjExMDpjb25maWcgTlZNRV9UQVJHRVRfQVVUSFxcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy0xMTEtXFx0Ym9vbCBcXFwiTlZNZSBvdmVyIEZhYnJpY3MgSW4tYmFuZCBBdXRoZW50aWNhdGlvbiBpbiB0YXJnZXQgc2lkZVxcXCJcXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy0xMTktXFxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnOjEyMDpjb25maWcgTlZNRV9UQVJHRVRfQVVUSF9ERUJVR1xcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy0xMjEtXFx0Ym9vbCBcXFwiTlZNZSBvdmVyIEZhYnJpY3MgSW4tYmFuZCBBdXRoZW50aWNhdGlvbiBkZWJ1ZyBtZXNzYWdlc1xcXCJcXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy0xMjgtXFxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnOjEyOTpjb25maWcgTlZNRV9UQVJHRVRfUENJX0VQRlxcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy0xMzAtXFx0dHJpc3RhdGUgXFxcIk5WTWUgUENJIEVuZHBvaW50IEZ1bmN0aW9uIHRhcmdldCBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QyMTozNDo0MC40MTcxMjcwNloiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4ODE1Mjc5OTM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoJ3MgQ292ZXJhZ2UqKlxuXG5BbHJpZ2h0LCBgTlZNRV9UQVJHRVRgIGFsb25lIHNlZW1zIGxpa2UgaXQgc2hvdWxkIGJlIGVub3VnaCB0byBjYXB0dXJlIHRoZSBjb3JlIGNoYW5nZXMgaW50cm9kdWNlZCBoZXJlLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpcyBmb2N1c2luZyBvbiB0aGUgY29uZmlndXJhdGlvbnMgdGhpcyBwYXRjaCBpbXBhY3RzOiBgTURfUkFJRDFgLCBgTURfUkFJRDEwYCwgYE5WTUVfUkRNQWAsIGBQQ0lfUDJQRE1BYCwgYW5kIGBOVk1FX1RBUkdFVGAuIFxuXG5JIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55IGNydWNpYWwgZnVuY3Rpb25zLiBBZnRlciByZXZpZXdpbmcsIGBtZF9zdWJtaXRfYmlvYCBoYXMgYmVlbiB0b3VjaGVkLCBidXQgdGhlIGNoYW5nZSBzZXRzIGBSRVFfTk9NRVJHRWAgZm9yIFAyUERNQSBiaW9zLiBTaW5jZSBpdCBpcyBpbiBhIGhvdCBwYXRoLCBJIHRoaW5rIEknbGwgc2tpcCBpdCB0byBhdm9pZCBhbnkgZnV6emluZyBza2V3LiBgcmFpZDFfd3JpdGVfZXJyb3JgIGlzIG5ldywgZGVmaW5pdGVseSBpbmNsdWRlIGl0LiBgbmFycm93X3dyaXRlX2Vycm9yYCBpcyBtb2RpZmllZCB0byBlbnN1cmUgUDJQRE1BIHJldHJ5IGJpb3MgcmVtYWluIHVubWVyZ2VhYmxlLCB0aGlzIGlzIGltcG9ydGFudCBmb3IgY292ZXJhZ2UuIGBoYW5kbGVfd3JpdGVfZmluaXNoZWRgIGFuZCBgaGFuZGxlX3dyaXRlX2NvbXBsZXRlZGAgYXJlIG1vZGlmaWVkIHRvIGFkZHJlc3MgYEJMS19TVFNfUDJQRE1BYCBieSBzZXR0aW5nIGJhZGJsb2Nrcywgd2hpY2ggaXMgZGlzdGluY3QgZnJvbSBhIG5hcnJvdyB3cml0ZSBlcnJvciwgc28gdGhlc2UgYXJlIGtleSBmdW5jdGlvbnMuIGBoYW5kbGVfcmVhZF9lcnJvcmAgaGFzIGJlZW4gbW9kaWZpZWQgdG8gYmxvY2sgYmlvcyBpZiBgQkxLX1NUU19QMlBETUFgLiBgbnZtZV9yZG1hX2RtYV9tYXBfcmVxYCB1c2VzIGBpYl9kbWFfbWFwX3NndGFibGVfYXR0cnNgIHNvIGl0IGlzIGltcG9ydGFudCB0byBpbmNsdWRlLiBGaW5hbGx5LCBgbnZtZV9yZG1hX3F1ZXVlX3JxYCBpcyBtb2RpZmllZCB0byBoYW5kbGUgYC1FUkVNT1RFSU9gIGJ5IHJldHVybmluZyBgQkxLX1NUU19QMlBETUFgLlxuXG5UaGUgb3ZlcmFsbCBsb2dpYyBvZiB0aGUgcGF0Y2ggaW52b2x2ZXMgaGFuZGxpbmcgYEJMS19TVFNfUDJQRE1BYCBlcnJvcnMgdGhhdCBzdXJmYWNlIGluIHRoZSBibG9jayBsYXllciwgTUQgUkFJRCwgYW5kIE5WTWUgUkRNQS4gSW4gTUQgUkFJRCwgdGhlc2UgY2hhbmdlcyBjb3JyZWN0IHRoZSBoYW5kbGluZyBvZiBQMlBETUEgbWFwcGluZyBmYWlsdXJlcyBieSBzZXR0aW5nIGJhZGJsb2NrcyBvciBibG9ja2luZyByZWFkIHJlcXVlc3RzIGluc3RlYWQgb2YgZmxhZ2dpbmcgdGhlIHVuZGVybHlpbmcgZGV2aWNlIGFzIGZhdWx0eS4gTlZNZSBSRE1BIG1vZGlmaWNhdGlvbnMgaW52b2x2ZSB1c2luZyBgaWJfZG1hX21hcF9zZ3RhYmxlX2F0dHJzYCBhbmQgcmV0dXJuaW5nIGBCTEtfU1RTX1AyUERNQWAgb24gbWFwcGluZyBmYWlsdXJlcy4gRnVuY3Rpb25hbGx5LCB0aGVzZSBjaGFuZ2VzIGFyZSByZWxldmFudCB0byB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIHdoZXJlIE5WTWUgdGFyZ2V0cyBjYW4gYmUgY29uZmlndXJlZCB3aXRoIFAyUCBtZW1vcnkgYmFja2VkIGJ5IE1EIGFycmF5cywgb3IgTlZNZSBSRE1BIHVzZWQgb3ZlciBzb2Z0d2FyZSBSRE1BIGRldmljZXMuXG5cbkkgdGhpbmsgSSd2ZSBnb3QgYSBnb29kIGhhbmRsZSBvbiB0aGluZ3MuIFRpbWUgdG8gY2FsbCB0aGUgYHNldC1yZXN1bHRzYCB0b29sLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzczNCwiT3V0cHV0VG9rZW5zIjoyNzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMjE6MzQ6NDkuMjMyNDA4NjY2WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzE0NTY2NDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1EX1JBSUQxXCIsXG4gICAgXCJNRF9SQUlEMTBcIixcbiAgICBcIk5WTUVfUkRNQVwiLFxuICAgIFwiUENJX1AyUERNQVwiLFxuICAgIFwiTlZNRV9UQVJHRVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyYWlkMV93cml0ZV9lcnJvclwiLFxuICAgIFwibmFycm93X3dyaXRlX2Vycm9yXCIsXG4gICAgXCJoYW5kbGVfd3JpdGVfZmluaXNoZWRcIixcbiAgICBcImhhbmRsZV93cml0ZV9jb21wbGV0ZWRcIixcbiAgICBcImhhbmRsZV9yZWFkX2Vycm9yXCIsXG4gICAgXCJudm1lX3JkbWFfZG1hX21hcF9yZXFcIixcbiAgICBcIm52bWVfcmRtYV9xdWV1ZV9ycVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgaGFuZGxpbmcgZm9yIEJMS19TVFNfUDJQRE1BIGVycm9ycyBpbiB0aGUgYmxvY2sgbGF5ZXIsIE1EIFJBSUQgKFJBSUQxL1JBSUQxMCksIGFuZCBOVk1lIFJETUEuIEl0IG1vZGlmaWVzIGVycm9yIGhhbmRsaW5nIHBhdGhzIGluIE1EIFJBSUQgdG8gcHJvcGVybHkgaGFuZGxlIFAyUERNQSBtYXBwaW5nIGZhaWx1cmVzIGJ5IHNldHRpbmcgYmFkYmxvY2tzIG9yIGJsb2NraW5nIHJlYWRzIGluc3RlYWQgb2YgZmFpbGluZyB0aGUgdW5kZXJseWluZyBkZXZpY2UuIEl0IGFsc28gbW9kaWZpZXMgTlZNZSBSRE1BIHRvIHVzZSBpYl9kbWFfbWFwX3NndGFibGVfYXR0cnMgYW5kIHJldHVybiBCTEtfU1RTX1AyUERNQSBvbiBtYXBwaW5nIGZhaWx1cmVzLiBUaGVzZSBjaGFuZ2VzIGFyZSBmdW5jdGlvbmFsbHkgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBieSBjb25maWd1cmluZyBOVk1lIHRhcmdldHMgd2l0aCBQMlAgbWVtb3J5IGJhY2tlZCBieSBNRCBhcnJheXMsIG9yIGJ5IHVzaW5nIE5WTWUgUkRNQSBvdmVyIHNvZnR3YXJlIFJETUEgZGV2aWNlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRF9SQUlEMVwiLFxuICAgIFwiTURfUkFJRDEwXCIsXG4gICAgXCJOVk1FX1JETUFcIixcbiAgICBcIlBDSV9QMlBETUFcIixcbiAgICBcIk5WTUVfVEFSR0VUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicmFpZDFfd3JpdGVfZXJyb3JcIixcbiAgICBcIm5hcnJvd193cml0ZV9lcnJvclwiLFxuICAgIFwiaGFuZGxlX3dyaXRlX2ZpbmlzaGVkXCIsXG4gICAgXCJoYW5kbGVfd3JpdGVfY29tcGxldGVkXCIsXG4gICAgXCJoYW5kbGVfcmVhZF9lcnJvclwiLFxuICAgIFwibnZtZV9yZG1hX2RtYV9tYXBfcmVxXCIsXG4gICAgXCJudm1lX3JkbWFfcXVldWVfcnFcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGhhbmRsaW5nIGZvciBCTEtfU1RTX1AyUERNQSBlcnJvcnMgaW4gdGhlIGJsb2NrIGxheWVyLCBNRCBSQUlEIChSQUlEMS9SQUlEMTApLCBhbmQgTlZNZSBSRE1BLiBJdCBtb2RpZmllcyBlcnJvciBoYW5kbGluZyBwYXRocyBpbiBNRCBSQUlEIHRvIHByb3Blcmx5IGhhbmRsZSBQMlBETUEgbWFwcGluZyBmYWlsdXJlcyBieSBzZXR0aW5nIGJhZGJsb2NrcyBvciBibG9ja2luZyByZWFkcyBpbnN0ZWFkIG9mIGZhaWxpbmcgdGhlIHVuZGVybHlpbmcgZGV2aWNlLiBJdCBhbHNvIG1vZGlmaWVzIE5WTWUgUkRNQSB0byB1c2UgaWJfZG1hX21hcF9zZ3RhYmxlX2F0dHJzIGFuZCByZXR1cm4gQkxLX1NUU19QMlBETUEgb24gbWFwcGluZyBmYWlsdXJlcy4gVGhlc2UgY2hhbmdlcyBhcmUgZnVuY3Rpb25hbGx5IHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYnkgY29uZmlndXJpbmcgTlZNZSB0YXJnZXRzIHdpdGggUDJQIG1lbW9yeSBiYWNrZWQgYnkgTUQgYXJyYXlzLCBvciBieSB1c2luZyBOVk1lIFJETUEgb3ZlciBzb2Z0d2FyZSBSRE1BIGRldmljZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowktbsv[1] Phase: Succeeded StartedAt: 2026-07-23 21:35:01 +0000 UTC FinishedAt: 2026-07-23 21:35:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowktbsv[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-23 21:35:01 +0000 UTC FinishedAt: 2026-07-23 21:35:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowktbsv[2] Phase: Succeeded StartedAt: 2026-07-23 21:35:01 +0000 UTC FinishedAt: 2026-07-24 02:03:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowktbsv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD_RAID1","MD_RAID10","NVME_RDMA","PCI_P2PDMA","NVME_TARGET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["raid1_write_error","narrow_write_error","handle_write_finished","handle_write_completed","handle_read_error","nvme_rdma_dma_map_req","nvme_rdma_queue_rq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD_RAID1","MD_RAID10","NVME_RDMA","PCI_P2PDMA","NVME_TARGET"],"series_id":"531bba9c-ba5a-4a05-a910-9872ad059f4c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-23 21:35:01 +0000 UTC FinishedAt: 2026-07-24 02:03:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD_RAID1","MD_RAID10","NVME_RDMA","PCI_P2PDMA","NVME_TARGET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["raid1_write_error","narrow_write_error","handle_write_finished","handle_write_completed","handle_read_error","nvme_rdma_dma_map_req","nvme_rdma_queue_rq"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD_RAID1","MD_RAID10","NVME_RDMA","PCI_P2PDMA","NVME_TARGET"],"series_id":"531bba9c-ba5a-4a05-a910-9872ad059f4c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowktbsv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD_RAID1","MD_RAID10","NVME_RDMA","PCI_P2PDMA","NVME_TARGET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["raid1_write_error","narrow_write_error","handle_write_finished","handle_write_completed","handle_read_error","nvme_rdma_dma_map_req","nvme_rdma_queue_rq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD_RAID1","MD_RAID10","NVME_RDMA","PCI_P2PDMA","NVME_TARGET"],"series_id":"531bba9c-ba5a-4a05-a910-9872ad059f4c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-23 21:35:01 +0000 UTC FinishedAt: 2026-07-23 21:35:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowktbsv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD_RAID1","MD_RAID10","NVME_RDMA","PCI_P2PDMA","NVME_TARGET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["raid1_write_error","narrow_write_error","handle_write_finished","handle_write_completed","handle_read_error","nvme_rdma_dma_map_req","nvme_rdma_queue_rq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD_RAID1","MD_RAID10","NVME_RDMA","PCI_P2PDMA","NVME_TARGET"],"series_id":"531bba9c-ba5a-4a05-a910-9872ad059f4c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-23 21:35:01 +0000 UTC FinishedAt: 2026-07-23 21:35:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD_RAID1","MD_RAID10","NVME_RDMA","PCI_P2PDMA","NVME_TARGET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowktbsv/series-workflowktbsv-convert-artifact-372961760/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowktbsv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD_RAID1","MD_RAID10","NVME_RDMA","PCI_P2PDMA","NVME_TARGET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["raid1_write_error","narrow_write_error","handle_write_finished","handle_write_completed","handle_read_error","nvme_rdma_dma_map_req","nvme_rdma_queue_rq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD_RAID1","MD_RAID10","NVME_RDMA","PCI_P2PDMA","NVME_TARGET"],"series_id":"531bba9c-ba5a-4a05-a910-9872ad059f4c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-23 21:35:11 +0000 UTC FinishedAt: 2026-07-23 22:07:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowktbsv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD_RAID1","MD_RAID10","NVME_RDMA","PCI_P2PDMA","NVME_TARGET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["raid1_write_error","narrow_write_error","handle_write_finished","handle_write_completed","handle_read_error","nvme_rdma_dma_map_req","nvme_rdma_queue_rq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD_RAID1","MD_RAID10","NVME_RDMA","PCI_P2PDMA","NVME_TARGET"],"series_id":"531bba9c-ba5a-4a05-a910-9872ad059f4c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-23 21:35:11 +0000 UTC FinishedAt: 2026-07-23 22:07:13 +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:*152e7167-47d9-4ba0-ace8-e41eef2e8fd0,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-workflowktbsv/series-workflowktbsv-convert-artifact-372961760/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": "20023c9c-1c5b-4b04-b598-0b062e6cae8b", "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-workflowktbsv/series-workflowktbsv-build-action-438526118/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowktbsv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD_RAID1","MD_RAID10","NVME_RDMA","PCI_P2PDMA","NVME_TARGET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["raid1_write_error","narrow_write_error","handle_write_finished","handle_write_completed","handle_read_error","nvme_rdma_dma_map_req","nvme_rdma_queue_rq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD_RAID1","MD_RAID10","NVME_RDMA","PCI_P2PDMA","NVME_TARGET"],"series_id":"531bba9c-ba5a-4a05-a910-9872ad059f4c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-23 21:35:11 +0000 UTC FinishedAt: 2026-07-23 22:07:00 +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:*152e7167-47d9-4ba0-ace8-e41eef2e8fd0,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-workflowktbsv/series-workflowktbsv-convert-artifact-372961760/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": "20023c9c-1c5b-4b04-b598-0b062e6cae8b", "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-workflowktbsv/series-workflowktbsv-build-action-438526118/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowktbsv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD_RAID1","MD_RAID10","NVME_RDMA","PCI_P2PDMA","NVME_TARGET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["raid1_write_error","narrow_write_error","handle_write_finished","handle_write_completed","handle_read_error","nvme_rdma_dma_map_req","nvme_rdma_queue_rq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD_RAID1","MD_RAID10","NVME_RDMA","PCI_P2PDMA","NVME_TARGET"],"series_id":"531bba9c-ba5a-4a05-a910-9872ad059f4c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-23 22:07:13 +0000 UTC FinishedAt: 2026-07-23 22:07:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowktbsv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD_RAID1","MD_RAID10","NVME_RDMA","PCI_P2PDMA","NVME_TARGET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["raid1_write_error","narrow_write_error","handle_write_finished","handle_write_completed","handle_read_error","nvme_rdma_dma_map_req","nvme_rdma_queue_rq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD_RAID1","MD_RAID10","NVME_RDMA","PCI_P2PDMA","NVME_TARGET"],"series_id":"531bba9c-ba5a-4a05-a910-9872ad059f4c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-23 22:07:13 +0000 UTC FinishedAt: 2026-07-23 22:07:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowktbsv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD_RAID1","MD_RAID10","NVME_RDMA","PCI_P2PDMA","NVME_TARGET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["raid1_write_error","narrow_write_error","handle_write_finished","handle_write_completed","handle_read_error","nvme_rdma_dma_map_req","nvme_rdma_queue_rq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD_RAID1","MD_RAID10","NVME_RDMA","PCI_P2PDMA","NVME_TARGET"],"series_id":"531bba9c-ba5a-4a05-a910-9872ad059f4c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-23 22:07:14 +0000 UTC FinishedAt: 2026-07-23 22:07:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowktbsv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD_RAID1","MD_RAID10","NVME_RDMA","PCI_P2PDMA","NVME_TARGET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["raid1_write_error","narrow_write_error","handle_write_finished","handle_write_completed","handle_read_error","nvme_rdma_dma_map_req","nvme_rdma_queue_rq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD_RAID1","MD_RAID10","NVME_RDMA","PCI_P2PDMA","NVME_TARGET"],"series_id":"531bba9c-ba5a-4a05-a910-9872ad059f4c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-23 22:07:14 +0000 UTC FinishedAt: 2026-07-23 22:07:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD_RAID1","MD_RAID10","NVME_RDMA","PCI_P2PDMA","NVME_TARGET"],"series_id":"531bba9c-ba5a-4a05-a910-9872ad059f4c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowktbsv/series-workflowktbsv-convert-artifact-1046855943/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowktbsv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD_RAID1","MD_RAID10","NVME_RDMA","PCI_P2PDMA","NVME_TARGET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["raid1_write_error","narrow_write_error","handle_write_finished","handle_write_completed","handle_read_error","nvme_rdma_dma_map_req","nvme_rdma_queue_rq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD_RAID1","MD_RAID10","NVME_RDMA","PCI_P2PDMA","NVME_TARGET"],"series_id":"531bba9c-ba5a-4a05-a910-9872ad059f4c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-23 22:07:31 +0000 UTC FinishedAt: 2026-07-23 22:09:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowktbsv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD_RAID1","MD_RAID10","NVME_RDMA","PCI_P2PDMA","NVME_TARGET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["raid1_write_error","narrow_write_error","handle_write_finished","handle_write_completed","handle_read_error","nvme_rdma_dma_map_req","nvme_rdma_queue_rq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD_RAID1","MD_RAID10","NVME_RDMA","PCI_P2PDMA","NVME_TARGET"],"series_id":"531bba9c-ba5a-4a05-a910-9872ad059f4c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-23 22:07:31 +0000 UTC FinishedAt: 2026-07-23 22:09:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*20023c9c-1c5b-4b04-b598-0b062e6cae8b,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-workflowktbsv/series-workflowktbsv-build-action-438526118/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-workflowktbsv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD_RAID1","MD_RAID10","NVME_RDMA","PCI_P2PDMA","NVME_TARGET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["raid1_write_error","narrow_write_error","handle_write_finished","handle_write_completed","handle_read_error","nvme_rdma_dma_map_req","nvme_rdma_queue_rq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD_RAID1","MD_RAID10","NVME_RDMA","PCI_P2PDMA","NVME_TARGET"],"series_id":"531bba9c-ba5a-4a05-a910-9872ad059f4c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-23 22:09:49 +0000 UTC FinishedAt: 2026-07-23 22:09:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowktbsv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD_RAID1","MD_RAID10","NVME_RDMA","PCI_P2PDMA","NVME_TARGET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["raid1_write_error","narrow_write_error","handle_write_finished","handle_write_completed","handle_read_error","nvme_rdma_dma_map_req","nvme_rdma_queue_rq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD_RAID1","MD_RAID10","NVME_RDMA","PCI_P2PDMA","NVME_TARGET"],"series_id":"531bba9c-ba5a-4a05-a910-9872ad059f4c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-23 22:09:49 +0000 UTC FinishedAt: 2026-07-23 22:09:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowktbsv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD_RAID1","MD_RAID10","NVME_RDMA","PCI_P2PDMA","NVME_TARGET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["raid1_write_error","narrow_write_error","handle_write_finished","handle_write_completed","handle_read_error","nvme_rdma_dma_map_req","nvme_rdma_queue_rq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD_RAID1","MD_RAID10","NVME_RDMA","PCI_P2PDMA","NVME_TARGET"],"series_id":"531bba9c-ba5a-4a05-a910-9872ad059f4c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-23 22:09:49 +0000 UTC FinishedAt: 2026-07-23 22:58:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowktbsv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD_RAID1","MD_RAID10","NVME_RDMA","PCI_P2PDMA","NVME_TARGET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["raid1_write_error","narrow_write_error","handle_write_finished","handle_write_completed","handle_read_error","nvme_rdma_dma_map_req","nvme_rdma_queue_rq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD_RAID1","MD_RAID10","NVME_RDMA","PCI_P2PDMA","NVME_TARGET"],"series_id":"531bba9c-ba5a-4a05-a910-9872ad059f4c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-23 22:09:49 +0000 UTC FinishedAt: 2026-07-23 22:58:41 +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:*152e7167-47d9-4ba0-ace8-e41eef2e8fd0,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-workflowktbsv/series-workflowktbsv-convert-artifact-1046855943/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": "d669b589-481c-4044-a4bb-35c7a89a3f86", "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-workflowktbsv/series-workflowktbsv-build-action-3439309451/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowktbsv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD_RAID1","MD_RAID10","NVME_RDMA","PCI_P2PDMA","NVME_TARGET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["raid1_write_error","narrow_write_error","handle_write_finished","handle_write_completed","handle_read_error","nvme_rdma_dma_map_req","nvme_rdma_queue_rq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD_RAID1","MD_RAID10","NVME_RDMA","PCI_P2PDMA","NVME_TARGET"],"series_id":"531bba9c-ba5a-4a05-a910-9872ad059f4c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-23 22:09:49 +0000 UTC FinishedAt: 2026-07-23 22:58:26 +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:*152e7167-47d9-4ba0-ace8-e41eef2e8fd0,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-workflowktbsv/series-workflowktbsv-convert-artifact-1046855943/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": "d669b589-481c-4044-a4bb-35c7a89a3f86", "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-workflowktbsv/series-workflowktbsv-build-action-3439309451/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowktbsv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD_RAID1","MD_RAID10","NVME_RDMA","PCI_P2PDMA","NVME_TARGET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["raid1_write_error","narrow_write_error","handle_write_finished","handle_write_completed","handle_read_error","nvme_rdma_dma_map_req","nvme_rdma_queue_rq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD_RAID1","MD_RAID10","NVME_RDMA","PCI_P2PDMA","NVME_TARGET"],"series_id":"531bba9c-ba5a-4a05-a910-9872ad059f4c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-23 22:58:41 +0000 UTC FinishedAt: 2026-07-23 22:58:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowktbsv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD_RAID1","MD_RAID10","NVME_RDMA","PCI_P2PDMA","NVME_TARGET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["raid1_write_error","narrow_write_error","handle_write_finished","handle_write_completed","handle_read_error","nvme_rdma_dma_map_req","nvme_rdma_queue_rq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD_RAID1","MD_RAID10","NVME_RDMA","PCI_P2PDMA","NVME_TARGET"],"series_id":"531bba9c-ba5a-4a05-a910-9872ad059f4c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-23 22:58:41 +0000 UTC FinishedAt: 2026-07-23 22:58:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowktbsv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD_RAID1","MD_RAID10","NVME_RDMA","PCI_P2PDMA","NVME_TARGET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["raid1_write_error","narrow_write_error","handle_write_finished","handle_write_completed","handle_read_error","nvme_rdma_dma_map_req","nvme_rdma_queue_rq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD_RAID1","MD_RAID10","NVME_RDMA","PCI_P2PDMA","NVME_TARGET"],"series_id":"531bba9c-ba5a-4a05-a910-9872ad059f4c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-23 22:58:42 +0000 UTC FinishedAt: 2026-07-23 23:00:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowktbsv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD_RAID1","MD_RAID10","NVME_RDMA","PCI_P2PDMA","NVME_TARGET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["raid1_write_error","narrow_write_error","handle_write_finished","handle_write_completed","handle_read_error","nvme_rdma_dma_map_req","nvme_rdma_queue_rq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD_RAID1","MD_RAID10","NVME_RDMA","PCI_P2PDMA","NVME_TARGET"],"series_id":"531bba9c-ba5a-4a05-a910-9872ad059f4c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-23 22:58:42 +0000 UTC FinishedAt: 2026-07-23 23:00:28 +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:*d669b589-481c-4044-a4bb-35c7a89a3f86,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-workflowktbsv/series-workflowktbsv-build-action-3439309451/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-workflowktbsv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD_RAID1","MD_RAID10","NVME_RDMA","PCI_P2PDMA","NVME_TARGET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["raid1_write_error","narrow_write_error","handle_write_finished","handle_write_completed","handle_read_error","nvme_rdma_dma_map_req","nvme_rdma_queue_rq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD_RAID1","MD_RAID10","NVME_RDMA","PCI_P2PDMA","NVME_TARGET"],"series_id":"531bba9c-ba5a-4a05-a910-9872ad059f4c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-23 23:00:39 +0000 UTC FinishedAt: 2026-07-24 02:03:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowktbsv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD_RAID1","MD_RAID10","NVME_RDMA","PCI_P2PDMA","NVME_TARGET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["raid1_write_error","narrow_write_error","handle_write_finished","handle_write_completed","handle_read_error","nvme_rdma_dma_map_req","nvme_rdma_queue_rq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD_RAID1","MD_RAID10","NVME_RDMA","PCI_P2PDMA","NVME_TARGET"],"series_id":"531bba9c-ba5a-4a05-a910-9872ad059f4c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-23 23:00:39 +0000 UTC FinishedAt: 2026-07-24 02:03:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["raid1_write_error","narrow_write_error","handle_write_finished","handle_write_completed","handle_read_error","nvme_rdma_dma_map_req","nvme_rdma_queue_rq"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*20023c9c-1c5b-4b04-b598-0b062e6cae8b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d669b589-481c-4044-a4bb-35c7a89a3f86,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-workflowktbsv/series-workflowktbsv-build-action-438526118/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-workflowktbsv/series-workflowktbsv-build-action-3439309451/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowktbsv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD_RAID1","MD_RAID10","NVME_RDMA","PCI_P2PDMA","NVME_TARGET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["raid1_write_error","narrow_write_error","handle_write_finished","handle_write_completed","handle_read_error","nvme_rdma_dma_map_req","nvme_rdma_queue_rq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD_RAID1","MD_RAID10","NVME_RDMA","PCI_P2PDMA","NVME_TARGET"],"series_id":"531bba9c-ba5a-4a05-a910-9872ad059f4c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-23 23:00:39 +0000 UTC FinishedAt: 2026-07-23 23:01:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowktbsv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD_RAID1","MD_RAID10","NVME_RDMA","PCI_P2PDMA","NVME_TARGET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["raid1_write_error","narrow_write_error","handle_write_finished","handle_write_completed","handle_read_error","nvme_rdma_dma_map_req","nvme_rdma_queue_rq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD_RAID1","MD_RAID10","NVME_RDMA","PCI_P2PDMA","NVME_TARGET"],"series_id":"531bba9c-ba5a-4a05-a910-9872ad059f4c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-23 23:00:39 +0000 UTC FinishedAt: 2026-07-23 23:01:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["raid1_write_error","narrow_write_error","handle_write_finished","handle_write_completed","handle_read_error","nvme_rdma_dma_map_req","nvme_rdma_queue_rq"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowktbsv/series-workflowktbsv-convert-artifact-1857063136/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowktbsv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD_RAID1","MD_RAID10","NVME_RDMA","PCI_P2PDMA","NVME_TARGET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["raid1_write_error","narrow_write_error","handle_write_finished","handle_write_completed","handle_read_error","nvme_rdma_dma_map_req","nvme_rdma_queue_rq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD_RAID1","MD_RAID10","NVME_RDMA","PCI_P2PDMA","NVME_TARGET"],"series_id":"531bba9c-ba5a-4a05-a910-9872ad059f4c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-23 23:00:39 +0000 UTC FinishedAt: 2026-07-23 23:00:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowktbsv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD_RAID1","MD_RAID10","NVME_RDMA","PCI_P2PDMA","NVME_TARGET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["raid1_write_error","narrow_write_error","handle_write_finished","handle_write_completed","handle_read_error","nvme_rdma_dma_map_req","nvme_rdma_queue_rq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD_RAID1","MD_RAID10","NVME_RDMA","PCI_P2PDMA","NVME_TARGET"],"series_id":"531bba9c-ba5a-4a05-a910-9872ad059f4c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-23 23:00:39 +0000 UTC FinishedAt: 2026-07-23 23:00:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowktbsv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD_RAID1","MD_RAID10","NVME_RDMA","PCI_P2PDMA","NVME_TARGET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["raid1_write_error","narrow_write_error","handle_write_finished","handle_write_completed","handle_read_error","nvme_rdma_dma_map_req","nvme_rdma_queue_rq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD_RAID1","MD_RAID10","NVME_RDMA","PCI_P2PDMA","NVME_TARGET"],"series_id":"531bba9c-ba5a-4a05-a910-9872ad059f4c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-23 23:00:39 +0000 UTC FinishedAt: 2026-07-23 23:00:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowktbsv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD_RAID1","MD_RAID10","NVME_RDMA","PCI_P2PDMA","NVME_TARGET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["raid1_write_error","narrow_write_error","handle_write_finished","handle_write_completed","handle_read_error","nvme_rdma_dma_map_req","nvme_rdma_queue_rq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD_RAID1","MD_RAID10","NVME_RDMA","PCI_P2PDMA","NVME_TARGET"],"series_id":"531bba9c-ba5a-4a05-a910-9872ad059f4c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-23 23:01:10 +0000 UTC FinishedAt: 2026-07-24 02:03:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowktbsv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD_RAID1","MD_RAID10","NVME_RDMA","PCI_P2PDMA","NVME_TARGET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["raid1_write_error","narrow_write_error","handle_write_finished","handle_write_completed","handle_read_error","nvme_rdma_dma_map_req","nvme_rdma_queue_rq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD_RAID1","MD_RAID10","NVME_RDMA","PCI_P2PDMA","NVME_TARGET"],"series_id":"531bba9c-ba5a-4a05-a910-9872ad059f4c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-23 23:01:10 +0000 UTC FinishedAt: 2026-07-24 02:02:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*20023c9c-1c5b-4b04-b598-0b062e6cae8b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d669b589-481c-4044-a4bb-35c7a89a3f86,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-workflowktbsv/series-workflowktbsv-build-action-438526118/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-workflowktbsv/series-workflowktbsv-build-action-3439309451/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-workflowktbsv/series-workflowktbsv-convert-artifact-1857063136/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,}