Name: series-workflowg6gwd Phase: Succeeded StartedAt: 2026-06-22 19:07:13 +0000 UTC FinishedAt: 2026-06-22 20:53:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg6gwd[0] Phase: Succeeded StartedAt: 2026-06-22 19:07:13 +0000 UTC FinishedAt: 2026-06-22 19:15:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg6gwd[0].run-triage Phase: Succeeded StartedAt: 2026-06-22 19:07:13 +0000 UTC FinishedAt: 2026-06-22 19:15:20 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "a975094bf98ca97be9146f9d3b5681a6f9cf5ce3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PCIE_TPH", "VFIO_PCI", "PCI_P2PDMA", "MLX5_INFINIBAND" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "a975094bf98ca97be9146f9d3b5681a6f9cf5ce3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PCIE_TPH", "VFIO_PCI", "PCI_P2PDMA", "MLX5_INFINIBAND" ], "series_id": "4663fac5-8a4f-492f-a717-0c70e9a07bab" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "vfio_pci_core_feature_dma_buf_tph", "vfio_pci_dma_buf_get_pci_tph", "dma_buf_get_pci_tph", "pcie_tph_enabled_req_type", "pcie_tph_completer_type", "mlx5_st_alloc_index_by_tag", "mlx5_st_get_index" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDE5OjEzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BDSUVfVFBIJiMzNDssCiAgICAmIzM0O1ZGSU9fUENJJiMzNDssCiAgICAmIzM0O1BDSV9QMlBETUEmIzM0OywKICAgICYjMzQ7TUxYNV9JTkZJTklCQU5EJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWZfdHBoJiMzNDssCiAgICAmIzM0O3ZmaW9fcGNpX2RtYV9idWZfZ2V0X3BjaV90cGgmIzM0OywKICAgICYjMzQ7ZG1hX2J1Zl9nZXRfcGNpX3RwaCYjMzQ7LAogICAgJiMzNDtwY2llX3RwaF9lbmFibGVkX3JlcV90eXBlJiMzNDssCiAgICAmIzM0O3BjaWVfdHBoX2NvbXBsZXRlcl90eXBlJiMzNDssCiAgICAmIzM0O21seDVfc3RfYWxsb2NfaW5kZXhfYnlfdGFnJiMzNDssCiAgICAmIzM0O21seDVfc3RfZ2V0X2luZGV4JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgVkZJTyBpb2N0bCBmZWF0dXJlIGBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUZfVFBIYCB0byBhc3NvY2lhdGUgUENJZSBUUEggKFRMUCBQcm9jZXNzaW5nIEhpbnRzKSBtZXRhZGF0YSB3aXRoIGEgRE1BLUJVRi4gSXQgYWxzbyBhZGRzIGEgbmV3IGBnZXRfcGNpX3RwaGAgY2FsbGJhY2sgdG8gYGRtYV9idWZfb3BzYCBhbmQgaW1wbGVtZW50cyBpdCBmb3IgVkZJTyBQQ0kgRE1BLUJVRnMuIFRoZSBNZWxsYW5veCBtbHg1IEluZmluaWJhbmQgZHJpdmVyIGlzIG1vZGlmaWVkIHRvIHF1ZXJ5IGFuZCB1c2UgdGhpcyBtZXRhZGF0YS4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIERNQS1CVUYsIFZGSU8sIGFuZCBtbHg1IGxvZ2ljIHRoYXQgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAxOToxMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDIxOGIyNjk5NmZmYTRjOThiYzUxMzA4Y2M5YzA3ZWUwMjU4MjVhN2JcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1biAyMiAxOToxMzozNiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS1idWYvZG1hLWJ1Zi5jIGIvZHJpdmVycy9kbWEtYnVmL2RtYS1idWYuY1xuaW5kZXggZDUwNGM2MzZkYzI5NGUuLjdhNGM5YjBkNWRhYjQ2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kbWEtYnVmL2RtYS1idWYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9kbWEtYnVmL2RtYS1idWYuY1xuQEAgLTExNDQsNiAmIzQzOzExNDQsMzEgQEAgdm9pZCBkbWFfYnVmX3VucGluKHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaClcbiB9XG4gRVhQT1JUX1NZTUJPTF9OU19HUEwoZG1hX2J1Zl91bnBpbiwgXCYjMzQ7RE1BX0JVRlwmIzM0Oyk7XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiBkbWFfYnVmX2dldF9wY2lfdHBoIC0gUmV0cmlldmUgUENJZSBUTFAgUHJvY2Vzc2luZyBIaW50IChUUEgpIG1ldGFkYXRhXG4mIzQzOyAqIEBkbWFidWY6IERNQSBidWZmZXIgdG8gcXVlcnlcbiYjNDM7ICogQGV4dGVuZGVkOiBmYWxzZSBmb3IgOC1iaXQgU1QsIHRydWUgZm9yIDE2LWJpdCBFeHRlbmRlZCBTVFxuJiM0MzsgKiBAc3RlZXJpbmdfdGFnOiByZXR1cm5zIHRoZSByYXcgc3RlZXJpbmcgdGFnIGZvciB0aGUgcmVxdWVzdGVkIG5hbWVzcGFjZVxuJiM0MzsgKiBAcGg6IHJldHVybnMgdGhlIFRQSCBwcm9jZXNzaW5nIGhpbnRcbiYjNDM7ICpcbiYjNDM7ICogV3JhcHBlciBmb3IgdGhlIG9wdGlvbmFsIFx1MDAyNmRtYV9idWZfb3BzLmdldF9wY2lfdHBoIGNhbGxiYWNrLlxuJiM0MzsgKlxuJiM0MzsgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIFx1MDAyNmRtYV9idWYucmVzdiBoZWxkLiBSZXR1cm5zIC1FT1BOT1RTVVBQIGlmIHRoZVxuJiM0MzsgKiBleHBvcnRlciBkb2VzIG5vdCBpbXBsZW1lbnQgdGhlIGNhbGxiYWNrIG9yIGhhcyBubyBtZXRhZGF0YSBmb3IgdGhlXG4mIzQzOyAqIHJlcXVlc3RlZCBuYW1lc3BhY2UuXG4mIzQzOyAqL1xuJiM0MztpbnQgZG1hX2J1Zl9nZXRfcGNpX3RwaChzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLCBib29sIGV4dGVuZGVkLFxuJiM0MztcdFx0XHR1MTYgKnN0ZWVyaW5nX3RhZywgdTggKnBoKVxuJiM0Mzt7XG4mIzQzO1x0ZG1hX3Jlc3ZfYXNzZXJ0X2hlbGQoZG1hYnVmLVx1MDAzZXJlc3YpO1xuJiM0MztcbiYjNDM7XHRpZiAoIWRtYWJ1Zi1cdTAwM2VvcHMtXHUwMDNlZ2V0X3BjaV90cGgpXG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1xuJiM0MztcdHJldHVybiBkbWFidWYtXHUwMDNlb3BzLVx1MDAzZWdldF9wY2lfdHBoKGRtYWJ1ZiwgZXh0ZW5kZWQsIHN0ZWVyaW5nX3RhZywgcGgpO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfTlNfR1BMKGRtYV9idWZfZ2V0X3BjaV90cGgsIFwmIzM0O0RNQV9CVUZcJiMzNDspO1xuJiM0MztcbiAvKipcbiAgKiBkbWFfYnVmX21hcF9hdHRhY2htZW50IC0gUmV0dXJucyB0aGUgc2NhdHRlcmxpc3QgdGFibGUgb2YgdGhlIGF0dGFjaG1lbnQ7XG4gICogbWFwcGVkIGludG8gX2RldmljZV8gYWRkcmVzcyBzcGFjZS4gSXMgYSB3cmFwcGVyIGZvciBtYXBfZG1hX2J1ZigpIG9mIHRoZVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg1L21haW4uYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg1L21haW4uY1xuaW5kZXggMDI4MDkxMTRmYzc5YWYuLmEyYjQ5N2Y2YjE2YmRjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDUvbWFpbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NS9tYWluLmNcbkBAIC02MCw2ICYjNDM7NjAsNyBAQFxuIE1PRFVMRV9BVVRIT1IoXCYjMzQ7RWxpIENvaGVuIFx1MDAzY2VsaUBtZWxsYW5veC5jb21cdTAwM2VcJiMzNDspO1xuIE1PRFVMRV9ERVNDUklQVElPTihcJiMzNDtNZWxsYW5veCA1dGggZ2VuZXJhdGlvbiBuZXR3b3JrIGFkYXB0ZXJzIChDb25uZWN0WCBzZXJpZXMpIElCIGRyaXZlclwmIzM0Oyk7XG4gTU9EVUxFX0xJQ0VOU0UoXCYjMzQ7RHVhbCBCU0QvR1BMXCYjMzQ7KTtcbiYjNDM7TU9EVUxFX0lNUE9SVF9OUyhcJiMzNDtETUFfQlVGXCYjMzQ7KTtcbiBcbiBzdHJ1Y3QgbWx4NV9pYl9ldmVudF93b3JrIHtcbiBcdHN0cnVjdCB3b3JrX3N0cnVjdFx0d29yaztcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NS9tci5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDUvbXIuY1xuaW5kZXggZTZiNzQ5NTVkOTVkY2QuLjdhY2VkM2Y1NTQ1NjFlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDUvbXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDUvbXIuY1xuQEAgLTM5LDYgJiM0MzszOSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZGVsYXkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RtYS1idWYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RtYS1yZXN2LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcGNpLXRwaC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjcmRtYS9mcm1yX3Bvb2xzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NyZG1hL2liX3VtZW1fb2RwLmhcdTAwM2VcbiAjaW5jbHVkZSBcJiMzNDtkbS5oXCYjMzQ7XG5AQCAtMTY3LDYgJiM0MzsxNjgsMzIgQEAgc3RhdGljIGludCBnZXRfdW5jaGFuZ2VhYmxlX2FjY2Vzc19mbGFncyhzdHJ1Y3QgbWx4NV9pYl9kZXYgKmRldixcbiAjZGVmaW5lIE1MWDVfRlJNUl9QT09MU19LRVJORUxfS0VZX1BIX01BU0sgR0VOTUFTS19VTEwoMjMsIDE2KVxuICNkZWZpbmUgTUxYNV9GUk1SX1BPT0xTX0tFUk5FTF9LRVlfU1RfSU5ERVhfTUFTSyBHRU5NQVNLX1VMTCgxNSwgMClcbiBcbiYjNDM7c3RhdGljIGludCBtbHg1X2liX2dldF9mcm1yX3N0X2hhbmRsZV9yZWYoc3RydWN0IG1seDVfaWJfZGV2ICpkZXYsXG4mIzQzO1x0XHRcdFx0XHQgIHUxNiBzdF9pbmRleClcbiYjNDM7e1xuJiM0MztcdGlmIChzdF9pbmRleCA9PSBNTFg1X01LQ19QQ0lFX1RQSF9OT19TVEVFUklOR19UQUdfSU5ERVgpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIG1seDVfc3RfZ2V0X2luZGV4KGRldi1cdTAwM2VtZGV2LCBzdF9pbmRleCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIG1seDVfaWJfcHV0X3N0X2luZGV4X3JlZihzdHJ1Y3QgbWx4NV9pYl9kZXYgKmRldiwgdTE2IHN0X2luZGV4KVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHN0X2luZGV4ID09IE1MWDVfTUtDX1BDSUVfVFBIX05PX1NURUVSSU5HX1RBR19JTkRFWClcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0bWx4NV9zdF9kZWFsbG9jX2luZGV4KGRldi1cdTAwM2VtZGV2LCBzdF9pbmRleCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIG1seDVfaWJfcHV0X2ZybXJfc3RfaGFuZGxlX3JlZihzdHJ1Y3QgbWx4NV9pYl9kZXYgKmRldixcbiYjNDM7XHRcdFx0XHRcdCAgIHU2NCBrZXJuZWxfdmVuZG9yX2tleSlcbiYjNDM7e1xuJiM0MztcdHUxNiBzdF9pbmRleCA9IEZJRUxEX0dFVChNTFg1X0ZSTVJfUE9PTFNfS0VSTkVMX0tFWV9TVF9JTkRFWF9NQVNLLFxuJiM0MztcdFx0XHRcdCBrZXJuZWxfdmVuZG9yX2tleSk7XG4mIzQzO1xuJiM0MztcdG1seDVfaWJfcHV0X3N0X2luZGV4X3JlZihkZXYsIHN0X2luZGV4KTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgc3RydWN0IG1seDVfaWJfbXIgKlxuIF9tbHg1X2ZybXJfcG9vbF9hbGxvYyhzdHJ1Y3QgbWx4NV9pYl9kZXYgKmRldiwgc3RydWN0IGliX3VtZW0gKnVtZW0sXG4gXHRcdCAgICAgIGludCBhY2Nlc3NfZmxhZ3MsIGludCBhY2Nlc3NfbW9kZSxcbkBAIC0yMTgsNyAmIzQzOzI0NSw5IEBAIHN0cnVjdCBtbHg1X2liX21yICptbHg1X21yX2NhY2hlX2FsbG9jKHN0cnVjdCBtbHg1X2liX2RldiAqZGV2LFxuIFx0XHRcdFx0ICAgICAgMCA6XG4gXHRcdFx0XHQgICAgICBNTFg1X0ZSTVJfUE9PTFNfS0VZX0FDQ0VTU19NT0RFX0tTTV9NQVNLLFxuIFx0XHQubnVtX2RtYV9ibG9ja3MgPSBuZGVzY3MsXG4tXHRcdC5rZXJuZWxfdmVuZG9yX2tleSA9IDAsIC8qIG5vIFBIIGFuZCBubyBTVCBpbmRleCAqL1xuJiM0MztcdFx0Lmtlcm5lbF92ZW5kb3Jfa2V5ID1cbiYjNDM7XHRcdFx0RklFTERfUFJFUChNTFg1X0ZSTVJfUE9PTFNfS0VSTkVMX0tFWV9TVF9JTkRFWF9NQVNLLFxuJiM0MztcdFx0XHRcdCAgIE1MWDVfTUtDX1BDSUVfVFBIX05PX1NURUVSSU5HX1RBR19JTkRFWCksXG4gXHR9O1xuIFx0c3RydWN0IG1seDVfaWJfbXIgKm1yO1xuIFx0aW50IHJldDtcbkBAIC0zMzUsNiAmIzQzOzM2NCw3IEBAIHN0YXRpYyBpbnQgbWx4NXJfYnVpbGRfZnJtcl9rZXkoc3RydWN0IGliX2RldmljZSAqZGV2aWNlLFxuIFx0XHRnZXRfdW5jaGFuZ2VhYmxlX2FjY2Vzc19mbGFncyhkZXYsIGluLVx1MDAzZWFjY2Vzc19mbGFncyk7XG4gXHRvdXQtXHUwMDNldmVuZG9yX2tleSA9IGluLVx1MDAzZXZlbmRvcl9rZXk7XG4gXHRvdXQtXHUwMDNlbnVtX2RtYV9ibG9ja3MgPSBpbi1cdTAwM2VudW1fZG1hX2Jsb2NrcztcbiYjNDM7XHRvdXQtXHUwMDNla2VybmVsX3ZlbmRvcl9rZXkgPSBpbi1cdTAwM2VrZXJuZWxfdmVuZG9yX2tleTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbkBAIC01NTcsNiAmIzQzOzU4Nyw5IEBAIHN0YXRpYyBzdHJ1Y3QgbWx4NV9pYl9tciAqcmVnX2NyZWF0ZShzdHJ1Y3QgaWJfcGQgKnBkLCBzdHJ1Y3QgaWJfdW1lbSAqdW1lbSxcbiBcdG1yLVx1MDAzZWlibXIucGQgPSBwZDtcbiBcdG1yLVx1MDAzZWFjY2Vzc19mbGFncyA9IGFjY2Vzc19mbGFncztcbiBcdG1yLVx1MDAzZXBhZ2Vfc2hpZnQgPSBvcmRlcl9iYXNlXzIocGFnZV9zaXplKTtcbiYjNDM7XHRtci1cdTAwM2VpYm1yLmZybXIua2V5Lmtlcm5lbF92ZW5kb3Jfa2V5ID1cbiYjNDM7XHRcdEZJRUxEX1BSRVAoTUxYNV9GUk1SX1BPT0xTX0tFUk5FTF9LRVlfU1RfSU5ERVhfTUFTSywgc3RfaW5kZXgpIHxcbiYjNDM7XHRcdEZJRUxEX1BSRVAoTUxYNV9GUk1SX1BPT0xTX0tFUk5FTF9LRVlfUEhfTUFTSywgcGgpO1xuIFxuIFx0aW5sZW4gPSBNTFg1X1NUX1NaX0JZVEVTKGNyZWF0ZV9ta2V5X2luKTtcbiBcdGlmIChwb3B1bGF0ZSlcbkBAIC03NTUsNiAmIzQzOzc4OCwxMiBAQCBzdGF0aWMgc3RydWN0IGliX21yICpjcmVhdGVfcmVhbF9tcihzdHJ1Y3QgaWJfcGQgKnBkLCBzdHJ1Y3QgaWJfdW1lbSAqdW1lbSxcbiBcbiBcdHhsdF93aXRoX3VtciA9IG1seDVyX3Vtcl9jYW5fbG9hZF9wYXMoZGV2LCB1bWVtLVx1MDAzZWxlbmd0aCk7XG4gXHRpZiAoeGx0X3dpdGhfdW1yKSB7XG4mIzQzO1x0XHRlcnIgPSBtbHg1X2liX2dldF9mcm1yX3N0X2hhbmRsZV9yZWYoZGV2LCBzdF9pbmRleCk7XG4mIzQzO1x0XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRcdGliX3VtZW1fcmVsZWFzZSh1bWVtKTtcbiYjNDM7XHRcdFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4gXHRcdG1yID0gYWxsb2NfY2FjaGVhYmxlX21yKHBkLCB1bWVtLCBpb3ZhLCBhY2Nlc3NfZmxhZ3MsXG4gXHRcdFx0XHRcdE1MWDVfTUtDX0FDQ0VTU19NT0RFX01UVCxcbiBcdFx0XHRcdFx0c3RfaW5kZXgsIHBoKTtcbkBAIC03NjksNiAmIzQzOzgwOCw4IEBAIHN0YXRpYyBzdHJ1Y3QgaWJfbXIgKmNyZWF0ZV9yZWFsX21yKHN0cnVjdCBpYl9wZCAqcGQsIHN0cnVjdCBpYl91bWVtICp1bWVtLFxuIFx0XHRtdXRleF91bmxvY2soXHUwMDI2ZGV2LVx1MDAzZXNsb3dfcGF0aF9tdXRleCk7XG4gXHR9XG4gXHRpZiAoSVNfRVJSKG1yKSkge1xuJiM0MztcdFx0aWYgKHhsdF93aXRoX3VtcilcbiYjNDM7XHRcdFx0bWx4NV9pYl9wdXRfc3RfaW5kZXhfcmVmKGRldiwgc3RfaW5kZXgpO1xuIFx0XHRpYl91bWVtX3JlbGVhc2UodW1lbSk7XG4gXHRcdHJldHVybiBFUlJfQ0FTVChtcik7XG4gXHR9XG5AQCAtOTAzLDYgJiM0Mzs5NDQsNTIgQEAgc3RhdGljIHN0cnVjdCBkbWFfYnVmX2F0dGFjaF9vcHMgbWx4NV9pYl9kbWFidWZfYXR0YWNoX29wcyA9IHtcbiBcdC5pbnZhbGlkYXRlX21hcHBpbmdzID0gbWx4NV9pYl9kbWFidWZfaW52YWxpZGF0ZV9jYixcbiB9O1xuIFxuJiM0MztzdGF0aWMgdm9pZCBnZXRfcGNpX3RwaF9tcl9kbWFidWYoc3RydWN0IG1seDVfaWJfZGV2ICpkZXYsIHN0cnVjdCBkbWFfYnVmICpkbWFidWYsXG4mIzQzO1x0XHRcdFx0ICB1MTYgKnN0X2luZGV4LCB1OCAqcGgpXG4mIzQzO3tcbiYjNDM7XHR1MTYgbG9jYWxfc3RfaW5kZXg7XG4mIzQzO1x0dTE2IHN0ZWVyaW5nX3RhZztcbiYjNDM7XHR1OCBsb2NhbF9waDtcbiYjNDM7XHRib29sIGV4dGVuZGVkO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHN3aXRjaCAocGNpZV90cGhfZW5hYmxlZF9yZXFfdHlwZShkZXYtXHUwMDNlbWRldi1cdTAwM2VwZGV2KSkge1xuJiM0MztcdGNhc2UgUENJX1RQSF9SRVFfVFBIX09OTFk6XG4mIzQzO1x0XHRleHRlbmRlZCA9IGZhbHNlO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBQQ0lfVFBIX1JFUV9FWFRfVFBIOlxuJiM0MztcdFx0ZXh0ZW5kZWQgPSB0cnVlO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGRtYV9yZXN2X2xvY2soZG1hYnVmLVx1MDAzZXJlc3YsIE5VTEwpO1xuJiM0MztcdHJldCA9IGRtYV9idWZfZ2V0X3BjaV90cGgoZG1hYnVmLCBleHRlbmRlZCwgXHUwMDI2c3RlZXJpbmdfdGFnLCBcdTAwMjZsb2NhbF9waCk7XG4mIzQzO1x0ZG1hX3Jlc3ZfdW5sb2NrKGRtYWJ1Zi1cdTAwM2VyZXN2KTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRpZiAocmV0ICE9IC1FT1BOT1RTVVBQKVxuJiM0MztcdFx0XHRtbHg1X2liX2RiZyhkZXYsIFwmIzM0O2dldF9wY2lfdHBoIGZhaWxlZCAoJWQpXFxuXCYjMzQ7LCByZXQpO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0ID0gbWx4NV9zdF9hbGxvY19pbmRleF9ieV90YWcoZGV2LVx1MDAzZW1kZXYsIHN0ZWVyaW5nX3RhZyxcbiYjNDM7XHRcdFx0XHRcdCBcdTAwMjZsb2NhbF9zdF9pbmRleCk7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0bWx4NV9pYl9kYmcoZGV2LCBcJiMzNDtzdF9hbGxvY19pbmRleF9ieV90YWcgZmFpbGVkICglZClcXG5cJiMzNDssIHJldCk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQqc3RfaW5kZXggPSBsb2NhbF9zdF9pbmRleDtcbiYjNDM7XHQqcGggPSBsb2NhbF9waDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgbWx4NV9pYl9tcl9wdXRfZnJtcl9zdF9oYW5kbGVfcmVmKHN0cnVjdCBtbHg1X2liX21yICptcilcbiYjNDM7e1xuJiM0MztcdG1seDVfaWJfcHV0X2ZybXJfc3RfaGFuZGxlX3JlZihtcl90b19tZGV2KG1yKSxcbiYjNDM7XHRcdFx0XHQgICAgICAgbXItXHUwMDNlaWJtci5mcm1yLmtleS5rZXJuZWxfdmVuZG9yX2tleSk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHN0cnVjdCBpYl9tciAqXG4gcmVnX3VzZXJfbXJfZG1hYnVmKHN0cnVjdCBpYl9wZCAqcGQsIHN0cnVjdCBkZXZpY2UgKmRtYV9kZXZpY2UsXG4gXHRcdCAgIHU2NCBvZmZzZXQsIHU2NCBsZW5ndGgsIHU2NCB2aXJ0X2FkZHIsXG5AQCAtOTQ1LDEyICYjNDM7MTAzMiwyMiBAQCByZWdfdXNlcl9tcl9kbWFidWYoc3RydWN0IGliX3BkICpwZCwgc3RydWN0IGRldmljZSAqZG1hX2RldmljZSxcbiBcdFx0cGggPSBkbWFoLVx1MDAzZXBoO1xuIFx0XHRpZiAoZG1haC1cdTAwM2V2YWxpZF9maWVsZHMgXHUwMDI2IEJJVChJQl9ETUFIX0NQVV9JRF9FWElTVFMpKVxuIFx0XHRcdHN0X2luZGV4ID0gbWRtYWgtXHUwMDNlc3RfaW5kZXg7XG4mIzQzO1xuJiM0MztcdFx0ZXJyID0gbWx4NV9pYl9nZXRfZnJtcl9zdF9oYW5kbGVfcmVmKGRldiwgc3RfaW5kZXgpO1xuJiM0MztcdFx0aWYgKGVycikge1xuJiM0MztcdFx0XHRpYl91bWVtX3JlbGVhc2UoXHUwMDI2dW1lbV9kbWFidWYtXHUwMDNldW1lbSk7XG4mIzQzO1x0XHRcdHJldHVybiBFUlJfUFRSKGVycik7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdGdldF9wY2lfdHBoX21yX2RtYWJ1ZihkZXYsIHVtZW1fZG1hYnVmLVx1MDAzZWF0dGFjaC1cdTAwM2VkbWFidWYsXG4mIzQzO1x0XHRcdFx0ICAgICAgXHUwMDI2c3RfaW5kZXgsIFx1MDAyNnBoKTtcbiBcdH1cbiBcbiBcdG1yID0gYWxsb2NfY2FjaGVhYmxlX21yKHBkLCBcdTAwMjZ1bWVtX2RtYWJ1Zi1cdTAwM2V1bWVtLCB2aXJ0X2FkZHIsXG4gXHRcdFx0XHRhY2Nlc3NfZmxhZ3MsIGFjY2Vzc19tb2RlLFxuIFx0XHRcdFx0c3RfaW5kZXgsIHBoKTtcbiBcdGlmIChJU19FUlIobXIpKSB7XG4mIzQzO1x0XHRtbHg1X2liX3B1dF9zdF9pbmRleF9yZWYoZGV2LCBzdF9pbmRleCk7XG4gXHRcdGliX3VtZW1fcmVsZWFzZShcdTAwMjZ1bWVtX2RtYWJ1Zi1cdTAwM2V1bWVtKTtcbiBcdFx0cmV0dXJuIEVSUl9DQVNUKG1yKTtcbiBcdH1cbkBAIC0xNDA1LDYgJiM0MzsxNTAyLDcgQEAgc3RhdGljIGludCBtbHg1cl9oYW5kbGVfbWtleV9jbGVhbnVwKHN0cnVjdCBtbHg1X2liX21yICptcilcbiBcdGlmIChtci1cdTAwM2VpYm1yLmZybXIucG9vbCkge1xuIFx0XHRpZiAoIW1seDVfdW1yX3Jldm9rZV9tcl93aXRoX2xvY2sobXIpKSB7XG4gXHRcdFx0aWJfZnJtcl9wb29sX3B1c2gobXItXHUwMDNlaWJtci5kZXZpY2UsIFx1MDAyNm1yLVx1MDAzZWlibXIpO1xuJiM0MztcdFx0XHRtbHg1X2liX21yX3B1dF9mcm1yX3N0X2hhbmRsZV9yZWYobXIpO1xuIFx0XHRcdHJldHVybiAwO1xuIFx0XHR9XG4gXHR9XG5AQCAtMTQzMiw2ICYjNDM7MTUzMCw5IEBAIHN0YXRpYyBpbnQgbWx4NXJfaGFuZGxlX21rZXlfY2xlYW51cChzdHJ1Y3QgbWx4NV9pYl9tciAqbXIpXG4gXHRpZiAobXItXHUwMDNlaWJtci5mcm1yLnBvb2wgXHUwMDI2XHUwMDI2ICFyZXQpXG4gXHRcdGliX2ZybXJfcG9vbF9kcm9wKFx1MDAyNm1yLVx1MDAzZWlibXIpO1xuIFxuJiM0MztcdGlmICghcmV0KVxuJiM0MztcdFx0bWx4NV9pYl9tcl9wdXRfZnJtcl9zdF9oYW5kbGVfcmVmKG1yKTtcbiYjNDM7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGliL3N0LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGliL3N0LmNcbmluZGV4IDk5N2JlOTFmMGExMzVhLi5iZjE0YTdhNmRmMTVlMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9saWIvc3QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi9zdC5jXG5AQCAtOTIsMjMgJiM0Mzs5MiwxOCBAQCB2b2lkIG1seDVfc3RfZGVzdHJveShzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KVxuIFx0a2ZyZWUoc3QpO1xuIH1cbiBcbi1pbnQgbWx4NV9zdF9hbGxvY19pbmRleChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCBlbnVtIHRwaF9tZW1fdHlwZSBtZW1fdHlwZSxcbi1cdFx0XHR1bnNpZ25lZCBpbnQgY3B1X3VpZCwgdTE2ICpzdF9pbmRleClcbiYjNDM7aW50IG1seDVfc3RfYWxsb2NfaW5kZXhfYnlfdGFnKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIHUxNiB0YWcsXG4mIzQzO1x0XHRcdCAgICAgICB1MTYgKnN0X2luZGV4KVxuIHtcbiBcdHN0cnVjdCBtbHg1X3N0X2lkeF9kYXRhICppZHhfZGF0YTtcbiBcdHN0cnVjdCBtbHg1X3N0ICpzdCA9IGRldi1cdTAwM2VzdDtcbiBcdHVuc2lnbmVkIGxvbmcgaW5kZXg7XG4gXHR1MzIgeGFfaWQ7XG4tXHR1MTYgdGFnO1xuLVx0aW50IHJldDtcbiYjNDM7XHRpbnQgcmV0ID0gMDtcbiBcbiBcdGlmICghc3QpXG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcbi1cdHJldCA9IHBjaWVfdHBoX2dldF9jcHVfc3QoZGV2LVx1MDAzZXBkZXYsIG1lbV90eXBlLCBjcHVfdWlkLCBcdTAwMjZ0YWcpO1xuLVx0aWYgKHJldClcbi1cdFx0cmV0dXJuIHJldDtcbi1cbiBcdGlmIChzdC1cdTAwM2VkaXJlY3RfbW9kZSkge1xuIFx0XHQqc3RfaW5kZXggPSB0YWc7XG4gXHRcdHJldHVybiAwO1xuQEAgLTE1Miw4ICYjNDM7MTQ3LDQ2IEBAIGludCBtbHg1X3N0X2FsbG9jX2luZGV4KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIGVudW0gdHBoX21lbV90eXBlIG1lbV90eXBlLFxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnN0LVx1MDAzZWxvY2spO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKG1seDVfc3RfYWxsb2NfaW5kZXhfYnlfdGFnKTtcbiYjNDM7XG4mIzQzO2ludCBtbHg1X3N0X2FsbG9jX2luZGV4KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIGVudW0gdHBoX21lbV90eXBlIG1lbV90eXBlLFxuJiM0MztcdFx0XHR1bnNpZ25lZCBpbnQgY3B1X3VpZCwgdTE2ICpzdF9pbmRleClcbiYjNDM7e1xuJiM0MztcdHUxNiB0YWc7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcGNpZV90cGhfZ2V0X2NwdV9zdChkZXYtXHUwMDNlcGRldiwgbWVtX3R5cGUsIGNwdV91aWQsIFx1MDAyNnRhZyk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldHVybiBtbHg1X3N0X2FsbG9jX2luZGV4X2J5X3RhZyhkZXYsIHRhZywgc3RfaW5kZXgpO1xuJiM0Mzt9XG4gRVhQT1JUX1NZTUJPTF9HUEwobWx4NV9zdF9hbGxvY19pbmRleCk7XG4gXG4mIzQzO2ludCBtbHg1X3N0X2dldF9pbmRleChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCB1MTYgc3RfaW5kZXgpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbWx4NV9zdF9pZHhfZGF0YSAqaWR4X2RhdGE7XG4mIzQzO1x0c3RydWN0IG1seDVfc3QgKnN0ID0gZGV2LVx1MDAzZXN0O1xuJiM0MztcdGludCByZXQgPSAwO1xuJiM0MztcbiYjNDM7XHRpZiAoIXN0KVxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcbiYjNDM7XHRpZiAoc3QtXHUwMDNlZGlyZWN0X21vZGUpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZzdC1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRpZHhfZGF0YSA9IHhhX2xvYWQoXHUwMDI2c3QtXHUwMDNlaWR4X3hhLCBzdF9pbmRleCk7XG4mIzQzO1x0aWYgKFdBUk5fT05fT05DRSghaWR4X2RhdGEpKVxuJiM0MztcdFx0cmV0ID0gLUVJTlZBTDtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRyZWZjb3VudF9pbmMoXHUwMDI2aWR4X2RhdGEtXHUwMDNldXNlY291bnQpO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZzdC1cdTAwM2Vsb2NrKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChtbHg1X3N0X2dldF9pbmRleCk7XG4mIzQzO1xuIGludCBtbHg1X3N0X2RlYWxsb2NfaW5kZXgoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgdTE2IHN0X2luZGV4KVxuIHtcbiBcdHN0cnVjdCBtbHg1X3N0X2lkeF9kYXRhICppZHhfZGF0YTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS90cGguYyBiL2RyaXZlcnMvcGNpL3RwaC5jXG5pbmRleCA5MTE0NWU4ZDlkOTUxMi4uNzE3YjQ3ZDFkOWNhY2UgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3BjaS90cGguY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9wY2kvdHBoLmNcbkBAIC0xNzQsNiAmIzQzOzE3NCw1MSBAQCB1MzIgcGNpZV90cGhfZ2V0X3N0X3RhYmxlX2xvYyhzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiB9XG4gRVhQT1JUX1NZTUJPTChwY2llX3RwaF9nZXRfc3RfdGFibGVfbG9jKTtcbiBcbiYjNDM7LyoqXG4mIzQzOyAqIHBjaWVfdHBoX2VuYWJsZWRfcmVxX3R5cGUgLSBSZXR1cm4gdGhlIGRldmljZSYjMzk7cyBlbmFibGVkIFRQSCByZXF1ZXN0ZXIgdHlwZVxuJiM0MzsgKiBAcGRldjogUENJIGRldmljZSB0byBxdWVyeVxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IFBDSV9UUEhfUkVRX0RJU0FCTEUsIFBDSV9UUEhfUkVRX1RQSF9PTkxZIG9yIFBDSV9UUEhfUkVRX0VYVF9UUEguXG4mIzQzOyAqL1xuJiM0Mzt1OCBwY2llX3RwaF9lbmFibGVkX3JlcV90eXBlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHBkZXYtXHUwMDNldHBoX3JlcV90eXBlO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0wocGNpZV90cGhfZW5hYmxlZF9yZXFfdHlwZSk7XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogcGNpZV90cGhfY29tcGxldGVyX3R5cGUgLSBSZXR1cm4gdGhlIGRldmljZSYjMzk7cyBUUEggQ29tcGxldGVyIHN1cHBvcnRcbiYjNDM7ICogQHBkZXY6IFBDSSBkZXZpY2UgdG8gcXVlcnlcbiYjNDM7ICpcbiYjNDM7ICogUmVhZHMgdGhlIFwmIzM0O1RQSCBDb21wbGV0ZXIgU3VwcG9ydGVkXCYjMzQ7IGZpZWxkIChiaXRzIDEzOjEyKSBvZiBEZXZpY2VcbiYjNDM7ICogQ2FwYWJpbGl0aWVzIDIuIFRoZSByZXNlcnZlZCAwYjEwIGVuY29kaW5nIGlzIGZvbGRlZCBpbnRvXG4mIzQzOyAqIFwmIzM0O25vdCBzdXBwb3J0ZWRcJiMzNDsgc28gY2FsbGVycyBvbmx5IG5lZWQgdG8gY29tcGFyZSBhZ2FpbnN0IHRoZSB0aHJlZVxuJiM0MzsgKiBkZWZpbmVkIHZhbHVlcy5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiBvbmUgb2YgJVBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9OT05FLFxuJiM0MzsgKiAgICAgICAgICVQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfVFBIX09OTFkgb3JcbiYjNDM7ICogICAgICAgICAlUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX0VYVF9UUEguXG4mIzQzOyAqL1xuJiM0Mzt1OCBwY2llX3RwaF9jb21wbGV0ZXJfdHlwZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiYjNDM7e1xuJiM0MztcdHUzMiByZWc7XG4mIzQzO1xuJiM0MztcdGlmIChwY2llX2NhcGFiaWxpdHlfcmVhZF9kd29yZChwZGV2LCBQQ0lfRVhQX0RFVkNBUDIsIFx1MDAyNnJlZykpXG4mIzQzO1x0XHRyZXR1cm4gUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX05PTkU7XG4mIzQzO1x0aWYgKFBDSV9QT1NTSUJMRV9FUlJPUihyZWcpKVxuJiM0MztcdFx0cmV0dXJuIFBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9OT05FO1xuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKEZJRUxEX0dFVChQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfTUFTSywgcmVnKSkge1xuJiM0MztcdGNhc2UgUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX1RQSF9PTkxZOlxuJiM0MztcdFx0cmV0dXJuIFBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9UUEhfT05MWTtcbiYjNDM7XHRjYXNlIFBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9FWFRfVFBIOlxuJiM0MztcdFx0cmV0dXJuIFBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9FWFRfVFBIO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRyZXR1cm4gUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX05PTkU7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0wocGNpZV90cGhfY29tcGxldGVyX3R5cGUpO1xuJiM0MztcbiAvKlxuICAqIFJldHVybiB0aGUgc2l6ZSBvZiBTVCB0YWJsZS4gSWYgU1QgdGFibGUgaXMgbm90IGluIFRQSCBSZXF1ZXN0ZXIgRXh0ZW5kZWRcbiAgKiBDYXBhYmlsaXR5IHNwYWNlLCByZXR1cm4gMC4gT3RoZXJ3aXNlIHJldHVybiB0aGUgU1QgVGFibGUgU2l6ZSAmIzQzOyAxLlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jIGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmNcbmluZGV4IGEyOGYxZTk5MzYyYzFlLi5jN2Q2OTAyYmM2MWIwNyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuY1xuQEAgLTE1NzIsNiAmIzQzOzE1NzIsOSBAQCBpbnQgdmZpb19wY2lfY29yZV9pb2N0bF9mZWF0dXJlKHN0cnVjdCB2ZmlvX2RldmljZSAqZGV2aWNlLCB1MzIgZmxhZ3MsXG4gXHRcdHJldHVybiB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdG9rZW4odmRldiwgZmxhZ3MsIGFyZywgYXJnc3opO1xuIFx0Y2FzZSBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUY6XG4gXHRcdHJldHVybiB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zih2ZGV2LCBmbGFncywgYXJnLCBhcmdzeik7XG4mIzQzO1x0Y2FzZSBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUZfVFBIOlxuJiM0MztcdFx0cmV0dXJuIHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3RwaCh2ZGV2LCBmbGFncywgYXJnLFxuJiM0MztcdFx0XHRcdFx0XHRcdCBhcmdzeik7XG4gXHRkZWZhdWx0OlxuIFx0XHRyZXR1cm4gLUVOT1RUWTtcbiBcdH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jIGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuY1xuaW5kZXggYzE2ZjQ2MGMwMWQ2ODEuLmQ2ZjVkZDMyMTAwMDljIDEwMDY0NFxuLS0tIGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuY1xuQEAgLTMsNiAmIzQzOzMsNyBAQFxuICAqL1xuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RtYS1idWYtbWFwcGluZy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGNpLXAycGRtYS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BjaS10cGguaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RtYS1yZXN2LmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcJiMzNDt2ZmlvX3BjaV9wcml2LmhcJiMzNDtcbkBAIC0xOSw3ICYjNDM7MjAsMTQgQEAgc3RydWN0IHZmaW9fcGNpX2RtYV9idWYge1xuIFx0dTMyIG5yX3JhbmdlcztcbiBcdHN0cnVjdCBrcmVmIGtyZWY7XG4gXHRzdHJ1Y3QgY29tcGxldGlvbiBjb21wO1xuLVx0dTggcmV2b2tlZCA6IDE7XG4mIzQzO1xuJiM0MztcdC8qIFByb3RlY3RlZCBieSBkbWFidWYtXHUwMDNlcmVzdi4gKi9cbiYjNDM7XHR1MTYgdHBoX3N0X2V4dDtcbiYjNDM7XHR1OCB0cGhfc3Q7XG4mIzQzO1x0dTggcmV2b2tlZDoxO1xuJiM0MztcdHU4IHRwaF9zdF92YWxpZDoxO1xuJiM0MztcdHU4IHRwaF9zdF9leHRfdmFsaWQ6MTtcbiYjNDM7XHR1OCB0cGhfcGg6MjtcbiB9O1xuIFxuIHN0YXRpYyBpbnQgdmZpb19wY2lfZG1hX2J1Zl9hdHRhY2goc3RydWN0IGRtYV9idWYgKmRtYWJ1ZixcbkBAIC02OSw2ICYjNDM7NzcsMjYgQEAgdmZpb19wY2lfZG1hX2J1Zl9tYXAoc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNobWVudCxcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IHZmaW9fcGNpX2RtYV9idWZfZ2V0X3BjaV90cGgoc3RydWN0IGRtYV9idWYgKmRtYWJ1ZiwgYm9vbCBleHRlbmRlZCxcbiYjNDM7XHRcdFx0XHRcdHUxNiAqc3RlZXJpbmdfdGFnLCB1OCAqcGgpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgdmZpb19wY2lfZG1hX2J1ZiAqcHJpdiA9IGRtYWJ1Zi1cdTAwM2Vwcml2O1xuJiM0MztcbiYjNDM7XHRkbWFfcmVzdl9hc3NlcnRfaGVsZChkbWFidWYtXHUwMDNlcmVzdik7XG4mIzQzO1xuJiM0MztcdGlmIChleHRlbmRlZCkge1xuJiM0MztcdFx0aWYgKCFwcml2LVx1MDAzZXRwaF9zdF9leHRfdmFsaWQpXG4mIzQzO1x0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHRcdCpzdGVlcmluZ190YWcgPSBwcml2LVx1MDAzZXRwaF9zdF9leHQ7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdGlmICghcHJpdi1cdTAwM2V0cGhfc3RfdmFsaWQpXG4mIzQzO1x0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHRcdCpzdGVlcmluZ190YWcgPSBwcml2LVx1MDAzZXRwaF9zdDtcbiYjNDM7XHR9XG4mIzQzO1x0KnBoID0gcHJpdi1cdTAwM2V0cGhfcGg7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWQgdmZpb19wY2lfZG1hX2J1Zl91bm1hcChzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2htZW50LFxuIFx0XHRcdFx0ICAgc3RydWN0IHNnX3RhYmxlICpzZ3QsXG4gXHRcdFx0XHQgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpXG5AQCAtMTAxLDYgJiM0MzsxMjksNyBAQCBzdGF0aWMgdm9pZCB2ZmlvX3BjaV9kbWFfYnVmX3JlbGVhc2Uoc3RydWN0IGRtYV9idWYgKmRtYWJ1ZilcbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGRtYV9idWZfb3BzIHZmaW9fcGNpX2RtYWJ1Zl9vcHMgPSB7XG4gXHQuYXR0YWNoID0gdmZpb19wY2lfZG1hX2J1Zl9hdHRhY2gsXG4mIzQzO1x0LmdldF9wY2lfdHBoID0gdmZpb19wY2lfZG1hX2J1Zl9nZXRfcGNpX3RwaCxcbiBcdC5tYXBfZG1hX2J1ZiA9IHZmaW9fcGNpX2RtYV9idWZfbWFwLFxuIFx0LnVubWFwX2RtYV9idWYgPSB2ZmlvX3BjaV9kbWFfYnVmX3VubWFwLFxuIFx0LnJlbGVhc2UgPSB2ZmlvX3BjaV9kbWFfYnVmX3JlbGVhc2UsXG5AQCAtMzMzLDYgJiM0MzszNjIsNzIgQEAgaW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTMyIGZsYWdzLFxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4mIzQzO2ludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl90cGgoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LFxuJiM0MztcdFx0XHRcdCAgICAgIHUzMiBmbGFncyxcbiYjNDM7XHRcdFx0XHQgICAgICBzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV9kbWFfYnVmX3RwaCBfX3VzZXIgKmFyZyxcbiYjNDM7XHRcdFx0XHQgICAgICBzaXplX3QgYXJnc3opXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV9kbWFfYnVmX3RwaCBzZXRfdHBoO1xuJiM0MztcdHN0cnVjdCB2ZmlvX3BjaV9kbWFfYnVmICpwcml2O1xuJiM0MztcdHN0cnVjdCBkbWFfYnVmICpkbWFidWY7XG4mIzQzO1x0dTggY29tcDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRjb21wID0gcGNpZV90cGhfY29tcGxldGVyX3R5cGUodmRldi1cdTAwM2VwZGV2KTtcbiYjNDM7XHRpZiAoY29tcCA9PSBQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfTk9ORSlcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gdmZpb19jaGVja19mZWF0dXJlKGZsYWdzLCBhcmdzeiwgVkZJT19ERVZJQ0VfRkVBVFVSRV9TRVQsXG4mIzQzO1x0XHRcdFx0IHNpemVvZihzZXRfdHBoKSk7XG4mIzQzO1x0aWYgKHJldCAhPSAxKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKGNvcHlfZnJvbV91c2VyKFx1MDAyNnNldF90cGgsIGFyZywgc2l6ZW9mKHNldF90cGgpKSlcbiYjNDM7XHRcdHJldHVybiAtRUZBVUxUO1xuJiM0MztcbiYjNDM7XHRpZiAoc2V0X3RwaC5mbGFncyBcdTAwMjYgfihWRklPX0RNQV9CVUZfVFBIX1NUIHwgVkZJT19ETUFfQlVGX1RQSF9TVF9FWFQpKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdGlmIChzZXRfdHBoLnBoIFx1MDAyNiB+MHgzKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdGlmICgoc2V0X3RwaC5mbGFncyBcdTAwMjYgVkZJT19ETUFfQlVGX1RQSF9TVF9FWFQpIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBjb21wICE9IFBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9FWFRfVFBIKVxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcbiYjNDM7XHRkbWFidWYgPSBkbWFfYnVmX2dldChzZXRfdHBoLmRtYWJ1Zl9mZCk7XG4mIzQzO1x0aWYgKElTX0VSUihkbWFidWYpKVxuJiM0MztcdFx0cmV0dXJuIFBUUl9FUlIoZG1hYnVmKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGRtYWJ1Zi1cdTAwM2VvcHMgIT0gXHUwMDI2dmZpb19wY2lfZG1hYnVmX29wcykge1xuJiM0MztcdFx0cmV0ID0gLUVJTlZBTDtcbiYjNDM7XHRcdGdvdG8gb3V0X3B1dDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHByaXYgPSBkbWFidWYtXHUwMDNlcHJpdjtcbiYjNDM7XHRpZiAocHJpdi1cdTAwM2V2ZGV2ICE9IHZkZXYpIHtcbiYjNDM7XHRcdHJldCA9IC1FSU5WQUw7XG4mIzQzO1x0XHRnb3RvIG91dF9wdXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXQgPSBkbWFfcmVzdl9sb2NrX2ludGVycnVwdGlibGUoZG1hYnVmLVx1MDAzZXJlc3YsIE5VTEwpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIG91dF9wdXQ7XG4mIzQzO1xuJiM0MztcdHByaXYtXHUwMDNldHBoX3N0ICAgICAgICAgPSBzZXRfdHBoLnN0ZWVyaW5nX3RhZztcbiYjNDM7XHRwcml2LVx1MDAzZXRwaF9zdF9leHQgICAgID0gc2V0X3RwaC5zdGVlcmluZ190YWdfZXh0O1xuJiM0MztcdHByaXYtXHUwMDNldHBoX3BoICAgICAgICAgPSBzZXRfdHBoLnBoO1xuJiM0MztcdHByaXYtXHUwMDNldHBoX3N0X3ZhbGlkICAgPSAhIShzZXRfdHBoLmZsYWdzIFx1MDAyNiBWRklPX0RNQV9CVUZfVFBIX1NUKTtcbiYjNDM7XHRwcml2LVx1MDAzZXRwaF9zdF9leHRfdmFsaWQgPVxuJiM0MztcdFx0ISEoc2V0X3RwaC5mbGFncyBcdTAwMjYgVkZJT19ETUFfQlVGX1RQSF9TVF9FWFQpO1xuJiM0MztcdGRtYV9yZXN2X3VubG9jayhkbWFidWYtXHUwMDNlcmVzdik7XG4mIzQzO1x0cmV0ID0gMDtcbiYjNDM7XG4mIzQzO291dF9wdXQ6XG4mIzQzO1x0ZG1hX2J1Zl9wdXQoZG1hYnVmKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuIHZvaWQgdmZpb19wY2lfZG1hX2J1Zl9tb3ZlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgYm9vbCByZXZva2VkKVxuIHtcbiBcdHN0cnVjdCB2ZmlvX3BjaV9kbWFfYnVmICpwcml2O1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfcHJpdi5oIGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9wcml2LmhcbmluZGV4IGZjYTlkMGRmYWM5MGY4Li5jNThmMzY5YmU0YjM5OCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfcHJpdi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX3ByaXYuaFxuQEAgLTExOCw2ICYjNDM7MTE4LDEwIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB2ZmlvX3BjaV9pc192Z2Eoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gaW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTMyIGZsYWdzLFxuIFx0XHRcdFx0ICBzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV9kbWFfYnVmIF9fdXNlciAqYXJnLFxuIFx0XHRcdFx0ICBzaXplX3QgYXJnc3opO1xuJiM0MztpbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWZfdHBoKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldixcbiYjNDM7XHRcdFx0XHQgICAgICB1MzIgZmxhZ3MsXG4mIzQzO1x0XHRcdFx0ICAgICAgc3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfZG1hX2J1Zl90cGggX191c2VyICphcmcsXG4mIzQzO1x0XHRcdFx0ICAgICAgc2l6ZV90IGFyZ3N6KTtcbiB2b2lkIHZmaW9fcGNpX2RtYV9idWZfY2xlYW51cChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpO1xuIHZvaWQgdmZpb19wY2lfZG1hX2J1Zl9tb3ZlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgYm9vbCByZXZva2VkKTtcbiAjZWxzZVxuQEAgLTEyOCw2ICYjNDM7MTMyLDE0IEBAIHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTMyIGZsYWdzLFxuIHtcbiBcdHJldHVybiAtRU5PVFRZO1xuIH1cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50XG4mIzQzO3ZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3RwaChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIHUzMiBmbGFncyxcbiYjNDM7XHRcdFx0XHQgIHN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX2RtYV9idWZfdHBoIF9fdXNlciAqYXJnLFxuJiM0MztcdFx0XHRcdCAgc2l6ZV90IGFyZ3N6KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIC1FTk9UVFk7XG4mIzQzO31cbiBzdGF0aWMgaW5saW5lIHZvaWQgdmZpb19wY2lfZG1hX2J1Zl9jbGVhbnVwKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldilcbiB7XG4gfVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZG1hLWJ1Zi5oIGIvaW5jbHVkZS9saW51eC9kbWEtYnVmLmhcbmluZGV4IGQxMjAzZGE1NmZjNWY3Li41M2IyNjg2YWQ4ZmM2NyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvZG1hLWJ1Zi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2RtYS1idWYuaFxuQEAgLTExMyw2ICYjNDM7MTEzLDI2IEBAIHN0cnVjdCBkbWFfYnVmX29wcyB7XG4gXHQgKi9cbiBcdHZvaWQgKCp1bnBpbikoc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoKTtcbiBcbiYjNDM7XHQvKipcbiYjNDM7XHQgKiBAZ2V0X3BjaV90cGg6XG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBSZXRyaWV2ZSBQQ0llIFRMUCBQcm9jZXNzaW5nIEhpbnQgKFRQSCkgc3RlZXJpbmcgbWV0YWRhdGEgZm9yXG4mIzQzO1x0ICogdGhpcyBidWZmZXIgc28gYW4gaW1wb3J0ZXIgY2FuIHByb2dyYW0gYSBtYXRjaGluZyBTVC9QSCBoaW50IG9uXG4mIzQzO1x0ICogb3V0Ym91bmQgVExQcyB0YXJnZXRpbmcgdGhlIGV4cG9ydGVyIGZvciBwZWVyLXRvLXBlZXIgRE1BLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogQGRtYWJ1ZjogRE1BIGJ1ZmZlciBmb3Igd2hpY2ggdG8gcmV0cmlldmUgVFBIIG1ldGFkYXRhXG4mIzQzO1x0ICogQGV4dGVuZGVkOiBmYWxzZSBmb3IgOC1iaXQgU1QsIHRydWUgZm9yIDE2LWJpdCBFeHRlbmRlZCBTVFxuJiM0MztcdCAqIEBzdGVlcmluZ190YWc6IFJldHVybnMgdGhlIHJhdyBUUEggc3RlZXJpbmcgdGFnIGZvciB0aGUgcmVxdWVzdGVkXG4mIzQzO1x0ICogICAgICAgICAgICAgICAgbmFtZXNwYWNlXG4mIzQzO1x0ICogQHBoOiBSZXR1cm5zIHRoZSBUUEggcHJvY2Vzc2luZyBoaW50ICgyLWJpdCB2YWx1ZSlcbiYjNDM7XHQgKlxuJiM0MztcdCAqIE9wdGlvbmFsIGNhbGxiYWNrIGZvciBkbWFfYnVmX2dldF9wY2lfdHBoKCkuIENhbGxlZCB3aXRoXG4mIzQzO1x0ICogXHUwMDI2ZG1hX2J1Zi5yZXN2IGhlbGQuIFJldHVybnMgMCBvbiBzdWNjZXNzIG9yIC1FT1BOT1RTVVBQIHdoZW5cbiYjNDM7XHQgKiB0aGUgZXhwb3J0ZXIgaGFzIG5vIG1ldGFkYXRhIGZvciB0aGUgcmVxdWVzdGVkIG5hbWVzcGFjZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpbnQgKCpnZXRfcGNpX3RwaCkoc3RydWN0IGRtYV9idWYgKmRtYWJ1ZiwgYm9vbCBleHRlbmRlZCxcbiYjNDM7XHRcdFx0ICAgdTE2ICpzdGVlcmluZ190YWcsIHU4ICpwaCk7XG4mIzQzO1xuIFx0LyoqXG4gXHQgKiBAbWFwX2RtYV9idWY6XG4gXHQgKlxuQEAgLTU2Myw2ICYjNDM7NTgzLDggQEAgdm9pZCBkbWFfYnVmX2RldGFjaChzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLFxuIFx0XHQgICAgc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoKTtcbiBpbnQgZG1hX2J1Zl9waW4oc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoKTtcbiB2b2lkIGRtYV9idWZfdW5waW4oc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoKTtcbiYjNDM7aW50IGRtYV9idWZfZ2V0X3BjaV90cGgoc3RydWN0IGRtYV9idWYgKmRtYWJ1ZiwgYm9vbCBleHRlbmRlZCxcbiYjNDM7XHRcdFx0dTE2ICpzdGVlcmluZ190YWcsIHU4ICpwaCk7XG4gXG4gc3RydWN0IGRtYV9idWYgKmRtYV9idWZfZXhwb3J0KGNvbnN0IHN0cnVjdCBkbWFfYnVmX2V4cG9ydF9pbmZvICpleHBfaW5mbyk7XG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbHg1L2RyaXZlci5oIGIvaW5jbHVkZS9saW51eC9tbHg1L2RyaXZlci5oXG5pbmRleCBiMTg3MWMwODIxZDBiOS4uOGIzOTExMTkxZmI2MjYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21seDUvZHJpdmVyLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbWx4NS9kcml2ZXIuaFxuQEAgLTExODIsMTAgJiM0MzsxMTgyLDIzIEBAIGludCBtbHg1X2RtX3N3X2ljbV9kZWFsbG9jKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIGVudW0gbWx4NV9zd19pY21fdHlwZSB0eXBlXG4gXHRcdFx0ICAgdTY0IGxlbmd0aCwgdTE2IHVpZCwgcGh5c19hZGRyX3QgYWRkciwgdTMyIG9ial9pZCk7XG4gXG4gI2lmZGVmIENPTkZJR19QQ0lFX1RQSFxuJiM0MztpbnQgbWx4NV9zdF9hbGxvY19pbmRleF9ieV90YWcoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgdTE2IHRhZyxcbiYjNDM7XHRcdFx0ICAgICAgIHUxNiAqc3RfaW5kZXgpO1xuJiM0MztpbnQgbWx4NV9zdF9nZXRfaW5kZXgoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgdTE2IHN0X2luZGV4KTtcbiBpbnQgbWx4NV9zdF9hbGxvY19pbmRleChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCBlbnVtIHRwaF9tZW1fdHlwZSBtZW1fdHlwZSxcbiBcdFx0XHR1bnNpZ25lZCBpbnQgY3B1X3VpZCwgdTE2ICpzdF9pbmRleCk7XG4gaW50IG1seDVfc3RfZGVhbGxvY19pbmRleChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCB1MTYgc3RfaW5kZXgpO1xuICNlbHNlXG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IG1seDVfc3RfYWxsb2NfaW5kZXhfYnlfdGFnKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsXG4mIzQzO1x0XHRcdFx0XHQgICAgIHUxNiB0YWcsIHUxNiAqc3RfaW5kZXgpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IG1seDVfc3RfZ2V0X2luZGV4KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIHUxNiBzdF9pbmRleClcbiYjNDM7e1xuJiM0MztcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7fVxuIHN0YXRpYyBpbmxpbmUgaW50IG1seDVfc3RfYWxsb2NfaW5kZXgoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldixcbiBcdFx0XHRcdCAgICAgIGVudW0gdHBoX21lbV90eXBlIG1lbV90eXBlLFxuIFx0XHRcdFx0ICAgICAgdW5zaWduZWQgaW50IGNwdV91aWQsIHUxNiAqc3RfaW5kZXgpXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wY2ktdHBoLmggYi9pbmNsdWRlL2xpbnV4L3BjaS10cGguaFxuaW5kZXggYmU2OGNkMTdmMmY4MzMuLjc3NDNhZjZmZTQzMjZlIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9wY2ktdHBoLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGNpLXRwaC5oXG5AQCAtOSw2ICYjNDM7OSw4IEBAXG4gI2lmbmRlZiBMSU5VWF9QQ0lfVFBIX0hcbiAjZGVmaW5lIExJTlVYX1BDSV9UUEhfSFxuIFxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9wY2lfcmVncy5oXHUwMDNlXG4mIzQzO1xuIC8qXG4gICogQWNjb3JkaW5nIHRvIHRoZSBFQ04gZm9yIFBDSSBGaXJtd2FyZSBTcGVjLCBTdGVlcmluZyBUYWcgY2FuIGJlIGRpZmZlcmVudFxuICAqIGRlcGVuZGluZyBvbiB0aGUgbWVtb3J5IHR5cGU6IFZvbGF0aWxlIE1lbW9yeSBvciBQZXJzaXN0ZW50IE1lbW9yeS4gV2hlbiBhXG5AQCAtMzAsNiAmIzQzOzMyLDggQEAgdm9pZCBwY2llX2Rpc2FibGVfdHBoKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTtcbiBpbnQgcGNpZV9lbmFibGVfdHBoKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbW9kZSk7XG4gdTE2IHBjaWVfdHBoX2dldF9zdF90YWJsZV9zaXplKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTtcbiB1MzIgcGNpZV90cGhfZ2V0X3N0X3RhYmxlX2xvYyhzdHJ1Y3QgcGNpX2RldiAqcGRldik7XG4mIzQzO3U4IHBjaWVfdHBoX2VuYWJsZWRfcmVxX3R5cGUoc3RydWN0IHBjaV9kZXYgKnBkZXYpO1xuJiM0Mzt1OCBwY2llX3RwaF9jb21wbGV0ZXJfdHlwZShzdHJ1Y3QgcGNpX2RldiAqcGRldik7XG4gI2Vsc2VcbiBzdGF0aWMgaW5saW5lIGludCBwY2llX3RwaF9zZXRfc3RfZW50cnkoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4gXHRcdFx0XHRcdHVuc2lnbmVkIGludCBpbmRleCwgdTE2IHRhZylcbkBAIC00MSw2ICYjNDM7NDUsMTAgQEAgc3RhdGljIGlubGluZSBpbnQgcGNpZV90cGhfZ2V0X2NwdV9zdChzdHJ1Y3QgcGNpX2RldiAqZGV2LFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBwY2llX2Rpc2FibGVfdHBoKHN0cnVjdCBwY2lfZGV2ICpwZGV2KSB7IH1cbiBzdGF0aWMgaW5saW5lIGludCBwY2llX2VuYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBtb2RlKVxuIHsgcmV0dXJuIC1FSU5WQUw7IH1cbiYjNDM7c3RhdGljIGlubGluZSB1OCBwY2llX3RwaF9lbmFibGVkX3JlcV90eXBlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuJiM0Mzt7IHJldHVybiBQQ0lfVFBIX1JFUV9ESVNBQkxFOyB9XG4mIzQzO3N0YXRpYyBpbmxpbmUgdTggcGNpZV90cGhfY29tcGxldGVyX3R5cGUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4mIzQzO3sgcmV0dXJuIFBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9OT05FOyB9XG4gI2VuZGlmXG4gXG4gI2VuZGlmIC8qIExJTlVYX1BDSV9UUEhfSCAqL1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC92ZmlvLmggYi9pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oXG5pbmRleCA1ZGU2MThhM2E1ZWVlZS4uMmQzMGJhNDNlMmNmZjUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oXG5AQCAtMTUzNCw2ICYjNDM7MTUzNCw0MyBAQCBzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV9kbWFfYnVmIHtcbiAgKi9cbiAjZGVmaW5lIFZGSU9fREVWSUNFX0ZFQVRVUkVfTUlHX1BSRUNPUFlfSU5GT3YyICAxMlxuIFxuJiM0MzsvKipcbiYjNDM7ICogVXBvbiBWRklPX0RFVklDRV9GRUFUVVJFX1NFVCBhc3NvY2lhdGUgVFBIIChUTFAgUHJvY2Vzc2luZyBIaW50cykgbWV0YWRhdGFcbiYjNDM7ICogd2l0aCBhIHZmaW8tZXhwb3J0ZWQgZG1hLWJ1Zi4gVGhlIGRtYS1idWYgbXVzdCBoYXZlIGJlZW4gY3JlYXRlZCBieVxuJiM0MzsgKiBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUYgb24gdGhpcyBkZXZpY2UsIGFuZCB0aGUgZGV2aWNlIG11c3QgcmVwb3J0XG4mIzQzOyAqIFRQSCBDb21wbGV0ZXIgc3VwcG9ydCBpbiBEZXZpY2UgQ2FwYWJpbGl0aWVzIDIgKGJpdHMgMTM6MTIpOyByZXF1ZXN0c1xuJiM0MzsgKiBjYXJyeWluZyBWRklPX0RNQV9CVUZfVFBIX1NUX0VYVCBhZGRpdGlvbmFsbHkgcmVxdWlyZSB0aGUgZGV2aWNlIHRvXG4mIzQzOyAqIHJlcG9ydCB0aGUgRXh0ZW5kZWQgVFBIIENvbXBsZXRlciBlbmNvZGluZy4gT3RoZXJ3aXNlIHRoZSBpb2N0bFxuJiM0MzsgKiByZXR1cm5zIC1FT1BOT1RTVVBQLlxuJiM0MzsgKlxuJiM0MzsgKiBkbWFidWZfZmQgaXMgdGhlIGZpbGUgZGVzY3JpcHRvciByZXR1cm5lZCBieSBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUYuXG4mIzQzOyAqXG4mIzQzOyAqIDgtYml0IFNUIChzdGVlcmluZ190YWcpIGFuZCAxNi1iaXQgRXh0ZW5kZWQgU1QgKHN0ZWVyaW5nX3RhZ19leHQpIGFyZVxuJiM0MzsgKiBkaXN0aW5jdCBuYW1lc3BhY2VzLiBVc2Vyc3BhY2Ugc3VwcGxpZXMgd2hpY2hldmVyIHZhbHVlcyBhcmUgdmFsaWQgYW5kIHNldHNcbiYjNDM7ICogdGhlIG1hdGNoaW5nIFZGSU9fRE1BX0JVRl9UUEhfU1QgLyBWRklPX0RNQV9CVUZfVFBIX1NUX0VYVCBiaXRzIGluIEBmbGFncztcbiYjNDM7ICogYW4gaW1wb3J0ZXIgcmVxdWVzdHMgb25lIG5hbWVzcGFjZSBhbmQgcmVjZWl2ZXMgdGhlIG1hdGNoaW5nIHZhbHVlLlxuJiM0MzsgKlxuJiM0MzsgKiBAZmxhZ3MgPT0gMCBtYXJrcyBhbnkgcHJldmlvdXNseSBwdWJsaXNoZWQgU1QgLyBFeHRlbmRlZC1TVCBhcyBpbnZhbGlkXG4mIzQzOyAqIGZvciBmdXR1cmUgUENJIFRQSCBxdWVyaWVzIG9uIHRoaXMgZG1hLWJ1Zi5cbiYjNDM7ICpcbiYjNDM7ICogcGggaXMgdGhlIDItYml0IFRMUCBQcm9jZXNzaW5nIEhpbnQgYW5kIG11c3QgYmUgaW4gdGhlIHJhbmdlIFswLCAzXS5cbiYjNDM7ICpcbiYjNDM7ICogVXNlcnNwYWNlIG11c3QgcHVibGlzaCBUUEggYmVmb3JlIGhhbmRpbmcgdGhlIGRtYS1idWYgZmQgdG8gYW4gaW1wb3J0ZXIuXG4mIzQzOyAqIENhbGxpbmcgU0VUIGFnYWluIHJlcGxhY2VzIHRoZSBwdWJsaXNoZWQgdmFsdWVzLlxuJiM0MzsgKi9cbiYjNDM7I2RlZmluZSBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUZfVFBIIDEzXG4mIzQzO1xuJiM0MzsjZGVmaW5lIFZGSU9fRE1BX0JVRl9UUEhfU1RcdFx0KDEgXHUwMDNjXHUwMDNjIDApXG4mIzQzOyNkZWZpbmUgVkZJT19ETUFfQlVGX1RQSF9TVF9FWFRcdFx0KDEgXHUwMDNjXHUwMDNjIDEpXG4mIzQzO1xuJiM0MztzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV9kbWFfYnVmX3RwaCB7XG4mIzQzO1x0X19zMzJcdGRtYWJ1Zl9mZDtcbiYjNDM7XHRfX3UzMlx0ZmxhZ3M7XG4mIzQzO1x0X191MTZcdHN0ZWVyaW5nX3RhZ19leHQ7XG4mIzQzO1x0X191OFx0c3RlZXJpbmdfdGFnO1xuJiM0MztcdF9fdThcdHBoO1xuJiM0Mzt9O1xuJiM0MztcbiAvKiAtLS0tLS0tLSBBUEkgZm9yIFR5cGUxIFZGSU8gSU9NTVUgLS0tLS0tLS0gKi9cbiBcbiAvKipcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAxOToxMzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtQQ0lFX1RQSCYjMzQ7LAogICAgJiMzNDtWRklPX1BDSSYjMzQ7LAogICAgJiMzNDtQQ0lfUDJQRE1BJiMzNDssCiAgICAmIzM0O01MWDVfSU5GSU5JQkFORCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3ZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3RwaCYjMzQ7LAogICAgJiMzNDt2ZmlvX3BjaV9kbWFfYnVmX2dldF9wY2lfdHBoJiMzNDssCiAgICAmIzM0O2RtYV9idWZfZ2V0X3BjaV90cGgmIzM0OywKICAgICYjMzQ7cGNpZV90cGhfZW5hYmxlZF9yZXFfdHlwZSYjMzQ7LAogICAgJiMzNDtwY2llX3RwaF9jb21wbGV0ZXJfdHlwZSYjMzQ7LAogICAgJiMzNDttbHg1X3N0X2FsbG9jX2luZGV4X2J5X3RhZyYjMzQ7LAogICAgJiMzNDttbHg1X3N0X2dldF9pbmRleCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IFZGSU8gaW9jdGwgZmVhdHVyZSBgVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGX1RQSGAgdG8gYXNzb2NpYXRlIFBDSWUgVFBIIChUTFAgUHJvY2Vzc2luZyBIaW50cykgbWV0YWRhdGEgd2l0aCBhIERNQS1CVUYuIEl0IGFsc28gYWRkcyBhIG5ldyBgZ2V0X3BjaV90cGhgIGNhbGxiYWNrIHRvIGBkbWFfYnVmX29wc2AgYW5kIGltcGxlbWVudHMgaXQgZm9yIFZGSU8gUENJIERNQS1CVUZzLiBUaGUgTWVsbGFub3ggbWx4NSBJbmZpbmliYW5kIGRyaXZlciBpcyBtb2RpZmllZCB0byBxdWVyeSBhbmQgdXNlIHRoaXMgbWV0YWRhdGEuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBETUEtQlVGLCBWRklPLCBhbmQgbWx4NSBsb2dpYyB0aGF0IGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDIxOGIyNjk5NmZmYTRjOThiYzUxMzA4Y2M5YzA3ZWUwMjU4MjVhN2IKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEp1biAyMiAxOToxMzozNiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hLWJ1Zi9kbWEtYnVmLmMgYi9kcml2ZXJzL2RtYS1idWYvZG1hLWJ1Zi5jCmluZGV4IGQ1MDRjNjM2ZGMyOTRlLi43YTRjOWIwZDVkYWI0NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9kbWEtYnVmL2RtYS1idWYuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RtYS1idWYvZG1hLWJ1Zi5jCkBAIC0xMTQ0LDYgJiM0MzsxMTQ0LDMxIEBAIHZvaWQgZG1hX2J1Zl91bnBpbihzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2gpCiB9CiBFWFBPUlRfU1lNQk9MX05TX0dQTChkbWFfYnVmX3VucGluLCAmIzM0O0RNQV9CVUYmIzM0Oyk7CiAKJiM0MzsvKioKJiM0MzsgKiBkbWFfYnVmX2dldF9wY2lfdHBoIC0gUmV0cmlldmUgUENJZSBUTFAgUHJvY2Vzc2luZyBIaW50IChUUEgpIG1ldGFkYXRhCiYjNDM7ICogQGRtYWJ1ZjogRE1BIGJ1ZmZlciB0byBxdWVyeQomIzQzOyAqIEBleHRlbmRlZDogZmFsc2UgZm9yIDgtYml0IFNULCB0cnVlIGZvciAxNi1iaXQgRXh0ZW5kZWQgU1QKJiM0MzsgKiBAc3RlZXJpbmdfdGFnOiByZXR1cm5zIHRoZSByYXcgc3RlZXJpbmcgdGFnIGZvciB0aGUgcmVxdWVzdGVkIG5hbWVzcGFjZQomIzQzOyAqIEBwaDogcmV0dXJucyB0aGUgVFBIIHByb2Nlc3NpbmcgaGludAomIzQzOyAqCiYjNDM7ICogV3JhcHBlciBmb3IgdGhlIG9wdGlvbmFsICZhbXA7ZG1hX2J1Zl9vcHMuZ2V0X3BjaV90cGggY2FsbGJhY2suCiYjNDM7ICoKJiM0MzsgKiBNdXN0IGJlIGNhbGxlZCB3aXRoICZhbXA7ZG1hX2J1Zi5yZXN2IGhlbGQuIFJldHVybnMgLUVPUE5PVFNVUFAgaWYgdGhlCiYjNDM7ICogZXhwb3J0ZXIgZG9lcyBub3QgaW1wbGVtZW50IHRoZSBjYWxsYmFjayBvciBoYXMgbm8gbWV0YWRhdGEgZm9yIHRoZQomIzQzOyAqIHJlcXVlc3RlZCBuYW1lc3BhY2UuCiYjNDM7ICovCiYjNDM7aW50IGRtYV9idWZfZ2V0X3BjaV90cGgoc3RydWN0IGRtYV9idWYgKmRtYWJ1ZiwgYm9vbCBleHRlbmRlZCwKJiM0MzsJCQl1MTYgKnN0ZWVyaW5nX3RhZywgdTggKnBoKQomIzQzO3sKJiM0MzsJZG1hX3Jlc3ZfYXNzZXJ0X2hlbGQoZG1hYnVmLSZndDtyZXN2KTsKJiM0MzsKJiM0MzsJaWYgKCFkbWFidWYtJmd0O29wcy0mZ3Q7Z2V0X3BjaV90cGgpCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiYjNDM7CXJldHVybiBkbWFidWYtJmd0O29wcy0mZ3Q7Z2V0X3BjaV90cGgoZG1hYnVmLCBleHRlbmRlZCwgc3RlZXJpbmdfdGFnLCBwaCk7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfTlNfR1BMKGRtYV9idWZfZ2V0X3BjaV90cGgsICYjMzQ7RE1BX0JVRiYjMzQ7KTsKJiM0MzsKIC8qKgogICogZG1hX2J1Zl9tYXBfYXR0YWNobWVudCAtIFJldHVybnMgdGhlIHNjYXR0ZXJsaXN0IHRhYmxlIG9mIHRoZSBhdHRhY2htZW50OwogICogbWFwcGVkIGludG8gX2RldmljZV8gYWRkcmVzcyBzcGFjZS4gSXMgYSB3cmFwcGVyIGZvciBtYXBfZG1hX2J1ZigpIG9mIHRoZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDUvbWFpbi5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDUvbWFpbi5jCmluZGV4IDAyODA5MTE0ZmM3OWFmLi5hMmI0OTdmNmIxNmJkYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDUvbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg1L21haW4uYwpAQCAtNjAsNiAmIzQzOzYwLDcgQEAKIE1PRFVMRV9BVVRIT1IoJiMzNDtFbGkgQ29oZW4gJmx0O2VsaUBtZWxsYW5veC5jb20mZ3Q7JiMzNDspOwogTU9EVUxFX0RFU0NSSVBUSU9OKCYjMzQ7TWVsbGFub3ggNXRoIGdlbmVyYXRpb24gbmV0d29yayBhZGFwdGVycyAoQ29ubmVjdFggc2VyaWVzKSBJQiBkcml2ZXImIzM0Oyk7CiBNT0RVTEVfTElDRU5TRSgmIzM0O0R1YWwgQlNEL0dQTCYjMzQ7KTsKJiM0MztNT0RVTEVfSU1QT1JUX05TKCYjMzQ7RE1BX0JVRiYjMzQ7KTsKIAogc3RydWN0IG1seDVfaWJfZXZlbnRfd29yayB7CiAJc3RydWN0IHdvcmtfc3RydWN0CXdvcms7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NS9tci5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDUvbXIuYwppbmRleCBlNmI3NDk1NWQ5NWRjZC4uN2FjZWQzZjU1NDU2MWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg1L21yLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDUvbXIuYwpAQCAtMzksNiAmIzQzOzM5LDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9kZWxheS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2RtYS1idWYuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9kbWEtcmVzdi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9wY2ktdHBoLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7cmRtYS9mcm1yX3Bvb2xzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7cmRtYS9pYl91bWVtX29kcC5oJmd0OwogI2luY2x1ZGUgJiMzNDtkbS5oJiMzNDsKQEAgLTE2Nyw2ICYjNDM7MTY4LDMyIEBAIHN0YXRpYyBpbnQgZ2V0X3VuY2hhbmdlYWJsZV9hY2Nlc3NfZmxhZ3Moc3RydWN0IG1seDVfaWJfZGV2ICpkZXYsCiAjZGVmaW5lIE1MWDVfRlJNUl9QT09MU19LRVJORUxfS0VZX1BIX01BU0sgR0VOTUFTS19VTEwoMjMsIDE2KQogI2RlZmluZSBNTFg1X0ZSTVJfUE9PTFNfS0VSTkVMX0tFWV9TVF9JTkRFWF9NQVNLIEdFTk1BU0tfVUxMKDE1LCAwKQogCiYjNDM7c3RhdGljIGludCBtbHg1X2liX2dldF9mcm1yX3N0X2hhbmRsZV9yZWYoc3RydWN0IG1seDVfaWJfZGV2ICpkZXYsCiYjNDM7CQkJCQkgIHUxNiBzdF9pbmRleCkKJiM0Mzt7CiYjNDM7CWlmIChzdF9pbmRleCA9PSBNTFg1X01LQ19QQ0lFX1RQSF9OT19TVEVFUklOR19UQUdfSU5ERVgpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJcmV0dXJuIG1seDVfc3RfZ2V0X2luZGV4KGRldi0mZ3Q7bWRldiwgc3RfaW5kZXgpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBtbHg1X2liX3B1dF9zdF9pbmRleF9yZWYoc3RydWN0IG1seDVfaWJfZGV2ICpkZXYsIHUxNiBzdF9pbmRleCkKJiM0Mzt7CiYjNDM7CWlmIChzdF9pbmRleCA9PSBNTFg1X01LQ19QQ0lFX1RQSF9OT19TVEVFUklOR19UQUdfSU5ERVgpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CW1seDVfc3RfZGVhbGxvY19pbmRleChkZXYtJmd0O21kZXYsIHN0X2luZGV4KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgbWx4NV9pYl9wdXRfZnJtcl9zdF9oYW5kbGVfcmVmKHN0cnVjdCBtbHg1X2liX2RldiAqZGV2LAomIzQzOwkJCQkJICAgdTY0IGtlcm5lbF92ZW5kb3Jfa2V5KQomIzQzO3sKJiM0MzsJdTE2IHN0X2luZGV4ID0gRklFTERfR0VUKE1MWDVfRlJNUl9QT09MU19LRVJORUxfS0VZX1NUX0lOREVYX01BU0ssCiYjNDM7CQkJCSBrZXJuZWxfdmVuZG9yX2tleSk7CiYjNDM7CiYjNDM7CW1seDVfaWJfcHV0X3N0X2luZGV4X3JlZihkZXYsIHN0X2luZGV4KTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgc3RydWN0IG1seDVfaWJfbXIgKgogX21seDVfZnJtcl9wb29sX2FsbG9jKHN0cnVjdCBtbHg1X2liX2RldiAqZGV2LCBzdHJ1Y3QgaWJfdW1lbSAqdW1lbSwKIAkJICAgICAgaW50IGFjY2Vzc19mbGFncywgaW50IGFjY2Vzc19tb2RlLApAQCAtMjE4LDcgJiM0MzsyNDUsOSBAQCBzdHJ1Y3QgbWx4NV9pYl9tciAqbWx4NV9tcl9jYWNoZV9hbGxvYyhzdHJ1Y3QgbWx4NV9pYl9kZXYgKmRldiwKIAkJCQkgICAgICAwIDoKIAkJCQkgICAgICBNTFg1X0ZSTVJfUE9PTFNfS0VZX0FDQ0VTU19NT0RFX0tTTV9NQVNLLAogCQkubnVtX2RtYV9ibG9ja3MgPSBuZGVzY3MsCi0JCS5rZXJuZWxfdmVuZG9yX2tleSA9IDAsIC8qIG5vIFBIIGFuZCBubyBTVCBpbmRleCAqLwomIzQzOwkJLmtlcm5lbF92ZW5kb3Jfa2V5ID0KJiM0MzsJCQlGSUVMRF9QUkVQKE1MWDVfRlJNUl9QT09MU19LRVJORUxfS0VZX1NUX0lOREVYX01BU0ssCiYjNDM7CQkJCSAgIE1MWDVfTUtDX1BDSUVfVFBIX05PX1NURUVSSU5HX1RBR19JTkRFWCksCiAJfTsKIAlzdHJ1Y3QgbWx4NV9pYl9tciAqbXI7CiAJaW50IHJldDsKQEAgLTMzNSw2ICYjNDM7MzY0LDcgQEAgc3RhdGljIGludCBtbHg1cl9idWlsZF9mcm1yX2tleShzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UsCiAJCWdldF91bmNoYW5nZWFibGVfYWNjZXNzX2ZsYWdzKGRldiwgaW4tJmd0O2FjY2Vzc19mbGFncyk7CiAJb3V0LSZndDt2ZW5kb3Jfa2V5ID0gaW4tJmd0O3ZlbmRvcl9rZXk7CiAJb3V0LSZndDtudW1fZG1hX2Jsb2NrcyA9IGluLSZndDtudW1fZG1hX2Jsb2NrczsKJiM0MzsJb3V0LSZndDtrZXJuZWxfdmVuZG9yX2tleSA9IGluLSZndDtrZXJuZWxfdmVuZG9yX2tleTsKIAogCXJldHVybiAwOwogfQpAQCAtNTU3LDYgJiM0Mzs1ODcsOSBAQCBzdGF0aWMgc3RydWN0IG1seDVfaWJfbXIgKnJlZ19jcmVhdGUoc3RydWN0IGliX3BkICpwZCwgc3RydWN0IGliX3VtZW0gKnVtZW0sCiAJbXItJmd0O2libXIucGQgPSBwZDsKIAltci0mZ3Q7YWNjZXNzX2ZsYWdzID0gYWNjZXNzX2ZsYWdzOwogCW1yLSZndDtwYWdlX3NoaWZ0ID0gb3JkZXJfYmFzZV8yKHBhZ2Vfc2l6ZSk7CiYjNDM7CW1yLSZndDtpYm1yLmZybXIua2V5Lmtlcm5lbF92ZW5kb3Jfa2V5ID0KJiM0MzsJCUZJRUxEX1BSRVAoTUxYNV9GUk1SX1BPT0xTX0tFUk5FTF9LRVlfU1RfSU5ERVhfTUFTSywgc3RfaW5kZXgpIHwKJiM0MzsJCUZJRUxEX1BSRVAoTUxYNV9GUk1SX1BPT0xTX0tFUk5FTF9LRVlfUEhfTUFTSywgcGgpOwogCiAJaW5sZW4gPSBNTFg1X1NUX1NaX0JZVEVTKGNyZWF0ZV9ta2V5X2luKTsKIAlpZiAocG9wdWxhdGUpCkBAIC03NTUsNiAmIzQzOzc4OCwxMiBAQCBzdGF0aWMgc3RydWN0IGliX21yICpjcmVhdGVfcmVhbF9tcihzdHJ1Y3QgaWJfcGQgKnBkLCBzdHJ1Y3QgaWJfdW1lbSAqdW1lbSwKIAogCXhsdF93aXRoX3VtciA9IG1seDVyX3Vtcl9jYW5fbG9hZF9wYXMoZGV2LCB1bWVtLSZndDtsZW5ndGgpOwogCWlmICh4bHRfd2l0aF91bXIpIHsKJiM0MzsJCWVyciA9IG1seDVfaWJfZ2V0X2ZybXJfc3RfaGFuZGxlX3JlZihkZXYsIHN0X2luZGV4KTsKJiM0MzsJCWlmIChlcnIpIHsKJiM0MzsJCQlpYl91bWVtX3JlbGVhc2UodW1lbSk7CiYjNDM7CQkJcmV0dXJuIEVSUl9QVFIoZXJyKTsKJiM0MzsJCX0KJiM0MzsKIAkJbXIgPSBhbGxvY19jYWNoZWFibGVfbXIocGQsIHVtZW0sIGlvdmEsIGFjY2Vzc19mbGFncywKIAkJCQkJTUxYNV9NS0NfQUNDRVNTX01PREVfTVRULAogCQkJCQlzdF9pbmRleCwgcGgpOwpAQCAtNzY5LDYgJiM0Mzs4MDgsOCBAQCBzdGF0aWMgc3RydWN0IGliX21yICpjcmVhdGVfcmVhbF9tcihzdHJ1Y3QgaWJfcGQgKnBkLCBzdHJ1Y3QgaWJfdW1lbSAqdW1lbSwKIAkJbXV0ZXhfdW5sb2NrKCZhbXA7ZGV2LSZndDtzbG93X3BhdGhfbXV0ZXgpOwogCX0KIAlpZiAoSVNfRVJSKG1yKSkgewomIzQzOwkJaWYgKHhsdF93aXRoX3VtcikKJiM0MzsJCQltbHg1X2liX3B1dF9zdF9pbmRleF9yZWYoZGV2LCBzdF9pbmRleCk7CiAJCWliX3VtZW1fcmVsZWFzZSh1bWVtKTsKIAkJcmV0dXJuIEVSUl9DQVNUKG1yKTsKIAl9CkBAIC05MDMsNiAmIzQzOzk0NCw1MiBAQCBzdGF0aWMgc3RydWN0IGRtYV9idWZfYXR0YWNoX29wcyBtbHg1X2liX2RtYWJ1Zl9hdHRhY2hfb3BzID0gewogCS5pbnZhbGlkYXRlX21hcHBpbmdzID0gbWx4NV9pYl9kbWFidWZfaW52YWxpZGF0ZV9jYiwKIH07CiAKJiM0MztzdGF0aWMgdm9pZCBnZXRfcGNpX3RwaF9tcl9kbWFidWYoc3RydWN0IG1seDVfaWJfZGV2ICpkZXYsIHN0cnVjdCBkbWFfYnVmICpkbWFidWYsCiYjNDM7CQkJCSAgdTE2ICpzdF9pbmRleCwgdTggKnBoKQomIzQzO3sKJiM0MzsJdTE2IGxvY2FsX3N0X2luZGV4OwomIzQzOwl1MTYgc3RlZXJpbmdfdGFnOwomIzQzOwl1OCBsb2NhbF9waDsKJiM0MzsJYm9vbCBleHRlbmRlZDsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJc3dpdGNoIChwY2llX3RwaF9lbmFibGVkX3JlcV90eXBlKGRldi0mZ3Q7bWRldi0mZ3Q7cGRldikpIHsKJiM0MzsJY2FzZSBQQ0lfVFBIX1JFUV9UUEhfT05MWToKJiM0MzsJCWV4dGVuZGVkID0gZmFsc2U7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBQQ0lfVFBIX1JFUV9FWFRfVFBIOgomIzQzOwkJZXh0ZW5kZWQgPSB0cnVlOwomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJZG1hX3Jlc3ZfbG9jayhkbWFidWYtJmd0O3Jlc3YsIE5VTEwpOwomIzQzOwlyZXQgPSBkbWFfYnVmX2dldF9wY2lfdHBoKGRtYWJ1ZiwgZXh0ZW5kZWQsICZhbXA7c3RlZXJpbmdfdGFnLCAmYW1wO2xvY2FsX3BoKTsKJiM0MzsJZG1hX3Jlc3ZfdW5sb2NrKGRtYWJ1Zi0mZ3Q7cmVzdik7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCWlmIChyZXQgIT0gLUVPUE5PVFNVUFApCiYjNDM7CQkJbWx4NV9pYl9kYmcoZGV2LCAmIzM0O2dldF9wY2lfdHBoIGZhaWxlZCAoJWQpXG4mIzM0OywgcmV0KTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXQgPSBtbHg1X3N0X2FsbG9jX2luZGV4X2J5X3RhZyhkZXYtJmd0O21kZXYsIHN0ZWVyaW5nX3RhZywKJiM0MzsJCQkJCSAmYW1wO2xvY2FsX3N0X2luZGV4KTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJbWx4NV9pYl9kYmcoZGV2LCAmIzM0O3N0X2FsbG9jX2luZGV4X2J5X3RhZyBmYWlsZWQgKCVkKVxuJiMzNDssIHJldCk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJKnN0X2luZGV4ID0gbG9jYWxfc3RfaW5kZXg7CiYjNDM7CSpwaCA9IGxvY2FsX3BoOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBtbHg1X2liX21yX3B1dF9mcm1yX3N0X2hhbmRsZV9yZWYoc3RydWN0IG1seDVfaWJfbXIgKm1yKQomIzQzO3sKJiM0MzsJbWx4NV9pYl9wdXRfZnJtcl9zdF9oYW5kbGVfcmVmKG1yX3RvX21kZXYobXIpLAomIzQzOwkJCQkgICAgICAgbXItJmd0O2libXIuZnJtci5rZXkua2VybmVsX3ZlbmRvcl9rZXkpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBzdHJ1Y3QgaWJfbXIgKgogcmVnX3VzZXJfbXJfZG1hYnVmKHN0cnVjdCBpYl9wZCAqcGQsIHN0cnVjdCBkZXZpY2UgKmRtYV9kZXZpY2UsCiAJCSAgIHU2NCBvZmZzZXQsIHU2NCBsZW5ndGgsIHU2NCB2aXJ0X2FkZHIsCkBAIC05NDUsMTIgJiM0MzsxMDMyLDIyIEBAIHJlZ191c2VyX21yX2RtYWJ1ZihzdHJ1Y3QgaWJfcGQgKnBkLCBzdHJ1Y3QgZGV2aWNlICpkbWFfZGV2aWNlLAogCQlwaCA9IGRtYWgtJmd0O3BoOwogCQlpZiAoZG1haC0mZ3Q7dmFsaWRfZmllbGRzICZhbXA7IEJJVChJQl9ETUFIX0NQVV9JRF9FWElTVFMpKQogCQkJc3RfaW5kZXggPSBtZG1haC0mZ3Q7c3RfaW5kZXg7CiYjNDM7CiYjNDM7CQllcnIgPSBtbHg1X2liX2dldF9mcm1yX3N0X2hhbmRsZV9yZWYoZGV2LCBzdF9pbmRleCk7CiYjNDM7CQlpZiAoZXJyKSB7CiYjNDM7CQkJaWJfdW1lbV9yZWxlYXNlKCZhbXA7dW1lbV9kbWFidWYtJmd0O3VtZW0pOwomIzQzOwkJCXJldHVybiBFUlJfUFRSKGVycik7CiYjNDM7CQl9CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlnZXRfcGNpX3RwaF9tcl9kbWFidWYoZGV2LCB1bWVtX2RtYWJ1Zi0mZ3Q7YXR0YWNoLSZndDtkbWFidWYsCiYjNDM7CQkJCSAgICAgICZhbXA7c3RfaW5kZXgsICZhbXA7cGgpOwogCX0KIAogCW1yID0gYWxsb2NfY2FjaGVhYmxlX21yKHBkLCAmYW1wO3VtZW1fZG1hYnVmLSZndDt1bWVtLCB2aXJ0X2FkZHIsCiAJCQkJYWNjZXNzX2ZsYWdzLCBhY2Nlc3NfbW9kZSwKIAkJCQlzdF9pbmRleCwgcGgpOwogCWlmIChJU19FUlIobXIpKSB7CiYjNDM7CQltbHg1X2liX3B1dF9zdF9pbmRleF9yZWYoZGV2LCBzdF9pbmRleCk7CiAJCWliX3VtZW1fcmVsZWFzZSgmYW1wO3VtZW1fZG1hYnVmLSZndDt1bWVtKTsKIAkJcmV0dXJuIEVSUl9DQVNUKG1yKTsKIAl9CkBAIC0xNDA1LDYgJiM0MzsxNTAyLDcgQEAgc3RhdGljIGludCBtbHg1cl9oYW5kbGVfbWtleV9jbGVhbnVwKHN0cnVjdCBtbHg1X2liX21yICptcikKIAlpZiAobXItJmd0O2libXIuZnJtci5wb29sKSB7CiAJCWlmICghbWx4NV91bXJfcmV2b2tlX21yX3dpdGhfbG9jayhtcikpIHsKIAkJCWliX2ZybXJfcG9vbF9wdXNoKG1yLSZndDtpYm1yLmRldmljZSwgJmFtcDttci0mZ3Q7aWJtcik7CiYjNDM7CQkJbWx4NV9pYl9tcl9wdXRfZnJtcl9zdF9oYW5kbGVfcmVmKG1yKTsKIAkJCXJldHVybiAwOwogCQl9CiAJfQpAQCAtMTQzMiw2ICYjNDM7MTUzMCw5IEBAIHN0YXRpYyBpbnQgbWx4NXJfaGFuZGxlX21rZXlfY2xlYW51cChzdHJ1Y3QgbWx4NV9pYl9tciAqbXIpCiAJaWYgKG1yLSZndDtpYm1yLmZybXIucG9vbCAmYW1wOyZhbXA7ICFyZXQpCiAJCWliX2ZybXJfcG9vbF9kcm9wKCZhbXA7bXItJmd0O2libXIpOwogCiYjNDM7CWlmICghcmV0KQomIzQzOwkJbWx4NV9pYl9tcl9wdXRfZnJtcl9zdF9oYW5kbGVfcmVmKG1yKTsKJiM0MzsKIAlyZXR1cm4gcmV0OwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGliL3N0LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGliL3N0LmMKaW5kZXggOTk3YmU5MWYwYTEzNWEuLmJmMTRhN2E2ZGYxNWUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGliL3N0LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi9zdC5jCkBAIC05MiwyMyAmIzQzOzkyLDE4IEBAIHZvaWQgbWx4NV9zdF9kZXN0cm95KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYpCiAJa2ZyZWUoc3QpOwogfQogCi1pbnQgbWx4NV9zdF9hbGxvY19pbmRleChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCBlbnVtIHRwaF9tZW1fdHlwZSBtZW1fdHlwZSwKLQkJCXVuc2lnbmVkIGludCBjcHVfdWlkLCB1MTYgKnN0X2luZGV4KQomIzQzO2ludCBtbHg1X3N0X2FsbG9jX2luZGV4X2J5X3RhZyhzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCB1MTYgdGFnLAomIzQzOwkJCSAgICAgICB1MTYgKnN0X2luZGV4KQogewogCXN0cnVjdCBtbHg1X3N0X2lkeF9kYXRhICppZHhfZGF0YTsKIAlzdHJ1Y3QgbWx4NV9zdCAqc3QgPSBkZXYtJmd0O3N0OwogCXVuc2lnbmVkIGxvbmcgaW5kZXg7CiAJdTMyIHhhX2lkOwotCXUxNiB0YWc7Ci0JaW50IHJldDsKJiM0MzsJaW50IHJldCA9IDA7CiAKIAlpZiAoIXN0KQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKLQlyZXQgPSBwY2llX3RwaF9nZXRfY3B1X3N0KGRldi0mZ3Q7cGRldiwgbWVtX3R5cGUsIGNwdV91aWQsICZhbXA7dGFnKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCiAJaWYgKHN0LSZndDtkaXJlY3RfbW9kZSkgewogCQkqc3RfaW5kZXggPSB0YWc7CiAJCXJldHVybiAwOwpAQCAtMTUyLDggJiM0MzsxNDcsNDYgQEAgaW50IG1seDVfc3RfYWxsb2NfaW5kZXgoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgZW51bSB0cGhfbWVtX3R5cGUgbWVtX3R5cGUsCiAJbXV0ZXhfdW5sb2NrKCZhbXA7c3QtJmd0O2xvY2spOwogCXJldHVybiByZXQ7CiB9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwobWx4NV9zdF9hbGxvY19pbmRleF9ieV90YWcpOwomIzQzOwomIzQzO2ludCBtbHg1X3N0X2FsbG9jX2luZGV4KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIGVudW0gdHBoX21lbV90eXBlIG1lbV90eXBlLAomIzQzOwkJCXVuc2lnbmVkIGludCBjcHVfdWlkLCB1MTYgKnN0X2luZGV4KQomIzQzO3sKJiM0MzsJdTE2IHRhZzsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gcGNpZV90cGhfZ2V0X2NwdV9zdChkZXYtJmd0O3BkZXYsIG1lbV90eXBlLCBjcHVfdWlkLCAmYW1wO3RhZyk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXR1cm4gbWx4NV9zdF9hbGxvY19pbmRleF9ieV90YWcoZGV2LCB0YWcsIHN0X2luZGV4KTsKJiM0Mzt9CiBFWFBPUlRfU1lNQk9MX0dQTChtbHg1X3N0X2FsbG9jX2luZGV4KTsKIAomIzQzO2ludCBtbHg1X3N0X2dldF9pbmRleChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCB1MTYgc3RfaW5kZXgpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbWx4NV9zdF9pZHhfZGF0YSAqaWR4X2RhdGE7CiYjNDM7CXN0cnVjdCBtbHg1X3N0ICpzdCA9IGRldi0mZ3Q7c3Q7CiYjNDM7CWludCByZXQgPSAwOwomIzQzOwomIzQzOwlpZiAoIXN0KQomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwomIzQzOwlpZiAoc3QtJmd0O2RpcmVjdF9tb2RlKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtzdC0mZ3Q7bG9jayk7CiYjNDM7CWlkeF9kYXRhID0geGFfbG9hZCgmYW1wO3N0LSZndDtpZHhfeGEsIHN0X2luZGV4KTsKJiM0MzsJaWYgKFdBUk5fT05fT05DRSghaWR4X2RhdGEpKQomIzQzOwkJcmV0ID0gLUVJTlZBTDsKJiM0MzsJZWxzZQomIzQzOwkJcmVmY291bnRfaW5jKCZhbXA7aWR4X2RhdGEtJmd0O3VzZWNvdW50KTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7c3QtJmd0O2xvY2spOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0dQTChtbHg1X3N0X2dldF9pbmRleCk7CiYjNDM7CiBpbnQgbWx4NV9zdF9kZWFsbG9jX2luZGV4KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIHUxNiBzdF9pbmRleCkKIHsKIAlzdHJ1Y3QgbWx4NV9zdF9pZHhfZGF0YSAqaWR4X2RhdGE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS90cGguYyBiL2RyaXZlcnMvcGNpL3RwaC5jCmluZGV4IDkxMTQ1ZThkOWQ5NTEyLi43MTdiNDdkMWQ5Y2FjZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvdHBoLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9wY2kvdHBoLmMKQEAgLTE3NCw2ICYjNDM7MTc0LDUxIEBAIHUzMiBwY2llX3RwaF9nZXRfc3RfdGFibGVfbG9jKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogfQogRVhQT1JUX1NZTUJPTChwY2llX3RwaF9nZXRfc3RfdGFibGVfbG9jKTsKIAomIzQzOy8qKgomIzQzOyAqIHBjaWVfdHBoX2VuYWJsZWRfcmVxX3R5cGUgLSBSZXR1cm4gdGhlIGRldmljZSYjMzk7cyBlbmFibGVkIFRQSCByZXF1ZXN0ZXIgdHlwZQomIzQzOyAqIEBwZGV2OiBQQ0kgZGV2aWNlIHRvIHF1ZXJ5CiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IFBDSV9UUEhfUkVRX0RJU0FCTEUsIFBDSV9UUEhfUkVRX1RQSF9PTkxZIG9yIFBDSV9UUEhfUkVRX0VYVF9UUEguCiYjNDM7ICovCiYjNDM7dTggcGNpZV90cGhfZW5hYmxlZF9yZXFfdHlwZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKJiM0Mzt7CiYjNDM7CXJldHVybiBwZGV2LSZndDt0cGhfcmVxX3R5cGU7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0wocGNpZV90cGhfZW5hYmxlZF9yZXFfdHlwZSk7CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogcGNpZV90cGhfY29tcGxldGVyX3R5cGUgLSBSZXR1cm4gdGhlIGRldmljZSYjMzk7cyBUUEggQ29tcGxldGVyIHN1cHBvcnQKJiM0MzsgKiBAcGRldjogUENJIGRldmljZSB0byBxdWVyeQomIzQzOyAqCiYjNDM7ICogUmVhZHMgdGhlICYjMzQ7VFBIIENvbXBsZXRlciBTdXBwb3J0ZWQmIzM0OyBmaWVsZCAoYml0cyAxMzoxMikgb2YgRGV2aWNlCiYjNDM7ICogQ2FwYWJpbGl0aWVzIDIuIFRoZSByZXNlcnZlZCAwYjEwIGVuY29kaW5nIGlzIGZvbGRlZCBpbnRvCiYjNDM7ICogJiMzNDtub3Qgc3VwcG9ydGVkJiMzNDsgc28gY2FsbGVycyBvbmx5IG5lZWQgdG8gY29tcGFyZSBhZ2FpbnN0IHRoZSB0aHJlZQomIzQzOyAqIGRlZmluZWQgdmFsdWVzLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiBvbmUgb2YgJVBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9OT05FLAomIzQzOyAqICAgICAgICAgJVBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9UUEhfT05MWSBvcgomIzQzOyAqICAgICAgICAgJVBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9FWFRfVFBILgomIzQzOyAqLwomIzQzO3U4IHBjaWVfdHBoX2NvbXBsZXRlcl90eXBlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQomIzQzO3sKJiM0MzsJdTMyIHJlZzsKJiM0MzsKJiM0MzsJaWYgKHBjaWVfY2FwYWJpbGl0eV9yZWFkX2R3b3JkKHBkZXYsIFBDSV9FWFBfREVWQ0FQMiwgJmFtcDtyZWcpKQomIzQzOwkJcmV0dXJuIFBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9OT05FOwomIzQzOwlpZiAoUENJX1BPU1NJQkxFX0VSUk9SKHJlZykpCiYjNDM7CQlyZXR1cm4gUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX05PTkU7CiYjNDM7CiYjNDM7CXN3aXRjaCAoRklFTERfR0VUKFBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9NQVNLLCByZWcpKSB7CiYjNDM7CWNhc2UgUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX1RQSF9PTkxZOgomIzQzOwkJcmV0dXJuIFBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9UUEhfT05MWTsKJiM0MzsJY2FzZSBQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfRVhUX1RQSDoKJiM0MzsJCXJldHVybiBQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfRVhUX1RQSDsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiBQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfTk9ORTsKJiM0MzsJfQomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MKHBjaWVfdHBoX2NvbXBsZXRlcl90eXBlKTsKJiM0MzsKIC8qCiAgKiBSZXR1cm4gdGhlIHNpemUgb2YgU1QgdGFibGUuIElmIFNUIHRhYmxlIGlzIG5vdCBpbiBUUEggUmVxdWVzdGVyIEV4dGVuZGVkCiAgKiBDYXBhYmlsaXR5IHNwYWNlLCByZXR1cm4gMC4gT3RoZXJ3aXNlIHJldHVybiB0aGUgU1QgVGFibGUgU2l6ZSAmIzQzOyAxLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYwppbmRleCBhMjhmMWU5OTM2MmMxZS4uYzdkNjkwMmJjNjFiMDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jCkBAIC0xNTcyLDYgJiM0MzsxNTcyLDkgQEAgaW50IHZmaW9fcGNpX2NvcmVfaW9jdGxfZmVhdHVyZShzdHJ1Y3QgdmZpb19kZXZpY2UgKmRldmljZSwgdTMyIGZsYWdzLAogCQlyZXR1cm4gdmZpb19wY2lfY29yZV9mZWF0dXJlX3Rva2VuKHZkZXYsIGZsYWdzLCBhcmcsIGFyZ3N6KTsKIAljYXNlIFZGSU9fREVWSUNFX0ZFQVRVUkVfRE1BX0JVRjoKIAkJcmV0dXJuIHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmKHZkZXYsIGZsYWdzLCBhcmcsIGFyZ3N6KTsKJiM0MzsJY2FzZSBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUZfVFBIOgomIzQzOwkJcmV0dXJuIHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3RwaCh2ZGV2LCBmbGFncywgYXJnLAomIzQzOwkJCQkJCQkgYXJnc3opOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRU5PVFRZOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmMgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jCmluZGV4IGMxNmY0NjBjMDFkNjgxLi5kNmY1ZGQzMjEwMDA5YyAxMDA2NDQKLS0tIGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jCkBAIC0zLDYgJiM0MzszLDcgQEAKICAqLwogI2luY2x1ZGUgJmx0O2xpbnV4L2RtYS1idWYtbWFwcGluZy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BjaS1wMnBkbWEuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcGNpLXRwaC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2RtYS1yZXN2LmgmZ3Q7CiAKICNpbmNsdWRlICYjMzQ7dmZpb19wY2lfcHJpdi5oJiMzNDsKQEAgLTE5LDcgJiM0MzsyMCwxNCBAQCBzdHJ1Y3QgdmZpb19wY2lfZG1hX2J1ZiB7CiAJdTMyIG5yX3JhbmdlczsKIAlzdHJ1Y3Qga3JlZiBrcmVmOwogCXN0cnVjdCBjb21wbGV0aW9uIGNvbXA7Ci0JdTggcmV2b2tlZCA6IDE7CiYjNDM7CiYjNDM7CS8qIFByb3RlY3RlZCBieSBkbWFidWYtJmd0O3Jlc3YuICovCiYjNDM7CXUxNiB0cGhfc3RfZXh0OwomIzQzOwl1OCB0cGhfc3Q7CiYjNDM7CXU4IHJldm9rZWQ6MTsKJiM0MzsJdTggdHBoX3N0X3ZhbGlkOjE7CiYjNDM7CXU4IHRwaF9zdF9leHRfdmFsaWQ6MTsKJiM0MzsJdTggdHBoX3BoOjI7CiB9OwogCiBzdGF0aWMgaW50IHZmaW9fcGNpX2RtYV9idWZfYXR0YWNoKHN0cnVjdCBkbWFfYnVmICpkbWFidWYsCkBAIC02OSw2ICYjNDM7NzcsMjYgQEAgdmZpb19wY2lfZG1hX2J1Zl9tYXAoc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNobWVudCwKIAlyZXR1cm4gcmV0OwogfQogCiYjNDM7c3RhdGljIGludCB2ZmlvX3BjaV9kbWFfYnVmX2dldF9wY2lfdHBoKHN0cnVjdCBkbWFfYnVmICpkbWFidWYsIGJvb2wgZXh0ZW5kZWQsCiYjNDM7CQkJCQl1MTYgKnN0ZWVyaW5nX3RhZywgdTggKnBoKQomIzQzO3sKJiM0MzsJc3RydWN0IHZmaW9fcGNpX2RtYV9idWYgKnByaXYgPSBkbWFidWYtJmd0O3ByaXY7CiYjNDM7CiYjNDM7CWRtYV9yZXN2X2Fzc2VydF9oZWxkKGRtYWJ1Zi0mZ3Q7cmVzdik7CiYjNDM7CiYjNDM7CWlmIChleHRlbmRlZCkgewomIzQzOwkJaWYgKCFwcml2LSZndDt0cGhfc3RfZXh0X3ZhbGlkKQomIzQzOwkJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJCSpzdGVlcmluZ190YWcgPSBwcml2LSZndDt0cGhfc3RfZXh0OwomIzQzOwl9IGVsc2UgewomIzQzOwkJaWYgKCFwcml2LSZndDt0cGhfc3RfdmFsaWQpCiYjNDM7CQkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwkJKnN0ZWVyaW5nX3RhZyA9IHByaXYtJmd0O3RwaF9zdDsKJiM0MzsJfQomIzQzOwkqcGggPSBwcml2LSZndDt0cGhfcGg7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIHZmaW9fcGNpX2RtYV9idWZfdW5tYXAoc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNobWVudCwKIAkJCQkgICBzdHJ1Y3Qgc2dfdGFibGUgKnNndCwKIAkJCQkgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpCkBAIC0xMDEsNiAmIzQzOzEyOSw3IEBAIHN0YXRpYyB2b2lkIHZmaW9fcGNpX2RtYV9idWZfcmVsZWFzZShzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmKQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGRtYV9idWZfb3BzIHZmaW9fcGNpX2RtYWJ1Zl9vcHMgPSB7CiAJLmF0dGFjaCA9IHZmaW9fcGNpX2RtYV9idWZfYXR0YWNoLAomIzQzOwkuZ2V0X3BjaV90cGggPSB2ZmlvX3BjaV9kbWFfYnVmX2dldF9wY2lfdHBoLAogCS5tYXBfZG1hX2J1ZiA9IHZmaW9fcGNpX2RtYV9idWZfbWFwLAogCS51bm1hcF9kbWFfYnVmID0gdmZpb19wY2lfZG1hX2J1Zl91bm1hcCwKIAkucmVsZWFzZSA9IHZmaW9fcGNpX2RtYV9idWZfcmVsZWFzZSwKQEAgLTMzMyw2ICYjNDM7MzYyLDcyIEBAIGludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1ZihzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIHUzMiBmbGFncywKIAlyZXR1cm4gcmV0OwogfQogCiYjNDM7aW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3RwaChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsCiYjNDM7CQkJCSAgICAgIHUzMiBmbGFncywKJiM0MzsJCQkJICAgICAgc3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfZG1hX2J1Zl90cGggX191c2VyICphcmcsCiYjNDM7CQkJCSAgICAgIHNpemVfdCBhcmdzeikKJiM0Mzt7CiYjNDM7CXN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX2RtYV9idWZfdHBoIHNldF90cGg7CiYjNDM7CXN0cnVjdCB2ZmlvX3BjaV9kbWFfYnVmICpwcml2OwomIzQzOwlzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmOwomIzQzOwl1OCBjb21wOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwljb21wID0gcGNpZV90cGhfY29tcGxldGVyX3R5cGUodmRldi0mZ3Q7cGRldik7CiYjNDM7CWlmIChjb21wID09IFBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9OT05FKQomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwomIzQzOwlyZXQgPSB2ZmlvX2NoZWNrX2ZlYXR1cmUoZmxhZ3MsIGFyZ3N6LCBWRklPX0RFVklDRV9GRUFUVVJFX1NFVCwKJiM0MzsJCQkJIHNpemVvZihzZXRfdHBoKSk7CiYjNDM7CWlmIChyZXQgIT0gMSkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CWlmIChjb3B5X2Zyb21fdXNlcigmYW1wO3NldF90cGgsIGFyZywgc2l6ZW9mKHNldF90cGgpKSkKJiM0MzsJCXJldHVybiAtRUZBVUxUOwomIzQzOwomIzQzOwlpZiAoc2V0X3RwaC5mbGFncyAmYW1wOyB+KFZGSU9fRE1BX0JVRl9UUEhfU1QgfCBWRklPX0RNQV9CVUZfVFBIX1NUX0VYVCkpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJaWYgKHNldF90cGgucGggJmFtcDsgfjB4MykKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlpZiAoKHNldF90cGguZmxhZ3MgJmFtcDsgVkZJT19ETUFfQlVGX1RQSF9TVF9FWFQpICZhbXA7JmFtcDsKJiM0MzsJICAgIGNvbXAgIT0gUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX0VYVF9UUEgpCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiYjNDM7CWRtYWJ1ZiA9IGRtYV9idWZfZ2V0KHNldF90cGguZG1hYnVmX2ZkKTsKJiM0MzsJaWYgKElTX0VSUihkbWFidWYpKQomIzQzOwkJcmV0dXJuIFBUUl9FUlIoZG1hYnVmKTsKJiM0MzsKJiM0MzsJaWYgKGRtYWJ1Zi0mZ3Q7b3BzICE9ICZhbXA7dmZpb19wY2lfZG1hYnVmX29wcykgewomIzQzOwkJcmV0ID0gLUVJTlZBTDsKJiM0MzsJCWdvdG8gb3V0X3B1dDsKJiM0MzsJfQomIzQzOwomIzQzOwlwcml2ID0gZG1hYnVmLSZndDtwcml2OwomIzQzOwlpZiAocHJpdi0mZ3Q7dmRldiAhPSB2ZGV2KSB7CiYjNDM7CQlyZXQgPSAtRUlOVkFMOwomIzQzOwkJZ290byBvdXRfcHV0OwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldCA9IGRtYV9yZXN2X2xvY2tfaW50ZXJydXB0aWJsZShkbWFidWYtJmd0O3Jlc3YsIE5VTEwpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBvdXRfcHV0OwomIzQzOwomIzQzOwlwcml2LSZndDt0cGhfc3QgICAgICAgICA9IHNldF90cGguc3RlZXJpbmdfdGFnOwomIzQzOwlwcml2LSZndDt0cGhfc3RfZXh0ICAgICA9IHNldF90cGguc3RlZXJpbmdfdGFnX2V4dDsKJiM0MzsJcHJpdi0mZ3Q7dHBoX3BoICAgICAgICAgPSBzZXRfdHBoLnBoOwomIzQzOwlwcml2LSZndDt0cGhfc3RfdmFsaWQgICA9ICEhKHNldF90cGguZmxhZ3MgJmFtcDsgVkZJT19ETUFfQlVGX1RQSF9TVCk7CiYjNDM7CXByaXYtJmd0O3RwaF9zdF9leHRfdmFsaWQgPQomIzQzOwkJISEoc2V0X3RwaC5mbGFncyAmYW1wOyBWRklPX0RNQV9CVUZfVFBIX1NUX0VYVCk7CiYjNDM7CWRtYV9yZXN2X3VubG9jayhkbWFidWYtJmd0O3Jlc3YpOwomIzQzOwlyZXQgPSAwOwomIzQzOwomIzQzO291dF9wdXQ6CiYjNDM7CWRtYV9idWZfcHV0KGRtYWJ1Zik7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwogdm9pZCB2ZmlvX3BjaV9kbWFfYnVmX21vdmUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCBib29sIHJldm9rZWQpCiB7CiAJc3RydWN0IHZmaW9fcGNpX2RtYV9idWYgKnByaXY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX3ByaXYuaCBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfcHJpdi5oCmluZGV4IGZjYTlkMGRmYWM5MGY4Li5jNThmMzY5YmU0YjM5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9wcml2LmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9wcml2LmgKQEAgLTExOCw2ICYjNDM7MTE4LDEwIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB2ZmlvX3BjaV9pc192Z2Eoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiBpbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWYoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCB1MzIgZmxhZ3MsCiAJCQkJICBzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV9kbWFfYnVmIF9fdXNlciAqYXJnLAogCQkJCSAgc2l6ZV90IGFyZ3N6KTsKJiM0MztpbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWZfdHBoKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwKJiM0MzsJCQkJICAgICAgdTMyIGZsYWdzLAomIzQzOwkJCQkgICAgICBzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV9kbWFfYnVmX3RwaCBfX3VzZXIgKmFyZywKJiM0MzsJCQkJICAgICAgc2l6ZV90IGFyZ3N6KTsKIHZvaWQgdmZpb19wY2lfZG1hX2J1Zl9jbGVhbnVwKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldik7CiB2b2lkIHZmaW9fcGNpX2RtYV9idWZfbW92ZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIGJvb2wgcmV2b2tlZCk7CiAjZWxzZQpAQCAtMTI4LDYgJiM0MzsxMzIsMTQgQEAgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWYoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCB1MzIgZmxhZ3MsCiB7CiAJcmV0dXJuIC1FTk9UVFk7CiB9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBpbnQKJiM0Mzt2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl90cGgoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCB1MzIgZmxhZ3MsCiYjNDM7CQkJCSAgc3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfZG1hX2J1Zl90cGggX191c2VyICphcmcsCiYjNDM7CQkJCSAgc2l6ZV90IGFyZ3N6KQomIzQzO3sKJiM0MzsJcmV0dXJuIC1FTk9UVFk7CiYjNDM7fQogc3RhdGljIGlubGluZSB2b2lkIHZmaW9fcGNpX2RtYV9idWZfY2xlYW51cChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpCiB7CiB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RtYS1idWYuaCBiL2luY2x1ZGUvbGludXgvZG1hLWJ1Zi5oCmluZGV4IGQxMjAzZGE1NmZjNWY3Li41M2IyNjg2YWQ4ZmM2NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9kbWEtYnVmLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9kbWEtYnVmLmgKQEAgLTExMyw2ICYjNDM7MTEzLDI2IEBAIHN0cnVjdCBkbWFfYnVmX29wcyB7CiAJICovCiAJdm9pZCAoKnVucGluKShzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2gpOwogCiYjNDM7CS8qKgomIzQzOwkgKiBAZ2V0X3BjaV90cGg6CiYjNDM7CSAqCiYjNDM7CSAqIFJldHJpZXZlIFBDSWUgVExQIFByb2Nlc3NpbmcgSGludCAoVFBIKSBzdGVlcmluZyBtZXRhZGF0YSBmb3IKJiM0MzsJICogdGhpcyBidWZmZXIgc28gYW4gaW1wb3J0ZXIgY2FuIHByb2dyYW0gYSBtYXRjaGluZyBTVC9QSCBoaW50IG9uCiYjNDM7CSAqIG91dGJvdW5kIFRMUHMgdGFyZ2V0aW5nIHRoZSBleHBvcnRlciBmb3IgcGVlci10by1wZWVyIERNQS4KJiM0MzsJICoKJiM0MzsJICogQGRtYWJ1ZjogRE1BIGJ1ZmZlciBmb3Igd2hpY2ggdG8gcmV0cmlldmUgVFBIIG1ldGFkYXRhCiYjNDM7CSAqIEBleHRlbmRlZDogZmFsc2UgZm9yIDgtYml0IFNULCB0cnVlIGZvciAxNi1iaXQgRXh0ZW5kZWQgU1QKJiM0MzsJICogQHN0ZWVyaW5nX3RhZzogUmV0dXJucyB0aGUgcmF3IFRQSCBzdGVlcmluZyB0YWcgZm9yIHRoZSByZXF1ZXN0ZWQKJiM0MzsJICogICAgICAgICAgICAgICAgbmFtZXNwYWNlCiYjNDM7CSAqIEBwaDogUmV0dXJucyB0aGUgVFBIIHByb2Nlc3NpbmcgaGludCAoMi1iaXQgdmFsdWUpCiYjNDM7CSAqCiYjNDM7CSAqIE9wdGlvbmFsIGNhbGxiYWNrIGZvciBkbWFfYnVmX2dldF9wY2lfdHBoKCkuIENhbGxlZCB3aXRoCiYjNDM7CSAqICZhbXA7ZG1hX2J1Zi5yZXN2IGhlbGQuIFJldHVybnMgMCBvbiBzdWNjZXNzIG9yIC1FT1BOT1RTVVBQIHdoZW4KJiM0MzsJICogdGhlIGV4cG9ydGVyIGhhcyBubyBtZXRhZGF0YSBmb3IgdGhlIHJlcXVlc3RlZCBuYW1lc3BhY2UuCiYjNDM7CSAqLwomIzQzOwlpbnQgKCpnZXRfcGNpX3RwaCkoc3RydWN0IGRtYV9idWYgKmRtYWJ1ZiwgYm9vbCBleHRlbmRlZCwKJiM0MzsJCQkgICB1MTYgKnN0ZWVyaW5nX3RhZywgdTggKnBoKTsKJiM0MzsKIAkvKioKIAkgKiBAbWFwX2RtYV9idWY6CiAJICoKQEAgLTU2Myw2ICYjNDM7NTgzLDggQEAgdm9pZCBkbWFfYnVmX2RldGFjaChzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLAogCQkgICAgc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoKTsKIGludCBkbWFfYnVmX3BpbihzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2gpOwogdm9pZCBkbWFfYnVmX3VucGluKHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaCk7CiYjNDM7aW50IGRtYV9idWZfZ2V0X3BjaV90cGgoc3RydWN0IGRtYV9idWYgKmRtYWJ1ZiwgYm9vbCBleHRlbmRlZCwKJiM0MzsJCQl1MTYgKnN0ZWVyaW5nX3RhZywgdTggKnBoKTsKIAogc3RydWN0IGRtYV9idWYgKmRtYV9idWZfZXhwb3J0KGNvbnN0IHN0cnVjdCBkbWFfYnVmX2V4cG9ydF9pbmZvICpleHBfaW5mbyk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWx4NS9kcml2ZXIuaCBiL2luY2x1ZGUvbGludXgvbWx4NS9kcml2ZXIuaAppbmRleCBiMTg3MWMwODIxZDBiOS4uOGIzOTExMTkxZmI2MjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWx4NS9kcml2ZXIuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21seDUvZHJpdmVyLmgKQEAgLTExODIsMTAgJiM0MzsxMTgyLDIzIEBAIGludCBtbHg1X2RtX3N3X2ljbV9kZWFsbG9jKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIGVudW0gbWx4NV9zd19pY21fdHlwZSB0eXBlCiAJCQkgICB1NjQgbGVuZ3RoLCB1MTYgdWlkLCBwaHlzX2FkZHJfdCBhZGRyLCB1MzIgb2JqX2lkKTsKIAogI2lmZGVmIENPTkZJR19QQ0lFX1RQSAomIzQzO2ludCBtbHg1X3N0X2FsbG9jX2luZGV4X2J5X3RhZyhzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCB1MTYgdGFnLAomIzQzOwkJCSAgICAgICB1MTYgKnN0X2luZGV4KTsKJiM0MztpbnQgbWx4NV9zdF9nZXRfaW5kZXgoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgdTE2IHN0X2luZGV4KTsKIGludCBtbHg1X3N0X2FsbG9jX2luZGV4KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIGVudW0gdHBoX21lbV90eXBlIG1lbV90eXBlLAogCQkJdW5zaWduZWQgaW50IGNwdV91aWQsIHUxNiAqc3RfaW5kZXgpOwogaW50IG1seDVfc3RfZGVhbGxvY19pbmRleChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCB1MTYgc3RfaW5kZXgpOwogI2Vsc2UKJiM0MztzdGF0aWMgaW5saW5lIGludCBtbHg1X3N0X2FsbG9jX2luZGV4X2J5X3RhZyhzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LAomIzQzOwkJCQkJICAgICB1MTYgdGFnLCB1MTYgKnN0X2luZGV4KQomIzQzO3sKJiM0MzsJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGludCBtbHg1X3N0X2dldF9pbmRleChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCB1MTYgc3RfaW5kZXgpCiYjNDM7ewomIzQzOwlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7fQogc3RhdGljIGlubGluZSBpbnQgbWx4NV9zdF9hbGxvY19pbmRleChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LAogCQkJCSAgICAgIGVudW0gdHBoX21lbV90eXBlIG1lbV90eXBlLAogCQkJCSAgICAgIHVuc2lnbmVkIGludCBjcHVfdWlkLCB1MTYgKnN0X2luZGV4KQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wY2ktdHBoLmggYi9pbmNsdWRlL2xpbnV4L3BjaS10cGguaAppbmRleCBiZTY4Y2QxN2YyZjgzMy4uNzc0M2FmNmZlNDMyNmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGNpLXRwaC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGNpLXRwaC5oCkBAIC05LDYgJiM0Mzs5LDggQEAKICNpZm5kZWYgTElOVVhfUENJX1RQSF9ICiAjZGVmaW5lIExJTlVYX1BDSV9UUEhfSAogCiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3BjaV9yZWdzLmgmZ3Q7CiYjNDM7CiAvKgogICogQWNjb3JkaW5nIHRvIHRoZSBFQ04gZm9yIFBDSSBGaXJtd2FyZSBTcGVjLCBTdGVlcmluZyBUYWcgY2FuIGJlIGRpZmZlcmVudAogICogZGVwZW5kaW5nIG9uIHRoZSBtZW1vcnkgdHlwZTogVm9sYXRpbGUgTWVtb3J5IG9yIFBlcnNpc3RlbnQgTWVtb3J5LiBXaGVuIGEKQEAgLTMwLDYgJiM0MzszMiw4IEBAIHZvaWQgcGNpZV9kaXNhYmxlX3RwaChzdHJ1Y3QgcGNpX2RldiAqcGRldik7CiBpbnQgcGNpZV9lbmFibGVfdHBoKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbW9kZSk7CiB1MTYgcGNpZV90cGhfZ2V0X3N0X3RhYmxlX3NpemUoc3RydWN0IHBjaV9kZXYgKnBkZXYpOwogdTMyIHBjaWVfdHBoX2dldF9zdF90YWJsZV9sb2Moc3RydWN0IHBjaV9kZXYgKnBkZXYpOwomIzQzO3U4IHBjaWVfdHBoX2VuYWJsZWRfcmVxX3R5cGUoc3RydWN0IHBjaV9kZXYgKnBkZXYpOwomIzQzO3U4IHBjaWVfdHBoX2NvbXBsZXRlcl90eXBlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTsKICNlbHNlCiBzdGF0aWMgaW5saW5lIGludCBwY2llX3RwaF9zZXRfc3RfZW50cnkoc3RydWN0IHBjaV9kZXYgKnBkZXYsCiAJCQkJCXVuc2lnbmVkIGludCBpbmRleCwgdTE2IHRhZykKQEAgLTQxLDYgJiM0Mzs0NSwxMCBAQCBzdGF0aWMgaW5saW5lIGludCBwY2llX3RwaF9nZXRfY3B1X3N0KHN0cnVjdCBwY2lfZGV2ICpkZXYsCiBzdGF0aWMgaW5saW5lIHZvaWQgcGNpZV9kaXNhYmxlX3RwaChzdHJ1Y3QgcGNpX2RldiAqcGRldikgeyB9CiBzdGF0aWMgaW5saW5lIGludCBwY2llX2VuYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBtb2RlKQogeyByZXR1cm4gLUVJTlZBTDsgfQomIzQzO3N0YXRpYyBpbmxpbmUgdTggcGNpZV90cGhfZW5hYmxlZF9yZXFfdHlwZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKJiM0Mzt7IHJldHVybiBQQ0lfVFBIX1JFUV9ESVNBQkxFOyB9CiYjNDM7c3RhdGljIGlubGluZSB1OCBwY2llX3RwaF9jb21wbGV0ZXJfdHlwZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKJiM0Mzt7IHJldHVybiBQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfTk9ORTsgfQogI2VuZGlmCiAKICNlbmRpZiAvKiBMSU5VWF9QQ0lfVFBIX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC92ZmlvLmggYi9pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oCmluZGV4IDVkZTYxOGEzYTVlZWVlLi4yZDMwYmE0M2UyY2ZmNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oCkBAIC0xNTM0LDYgJiM0MzsxNTM0LDQzIEBAIHN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX2RtYV9idWYgewogICovCiAjZGVmaW5lIFZGSU9fREVWSUNFX0ZFQVRVUkVfTUlHX1BSRUNPUFlfSU5GT3YyICAxMgogCiYjNDM7LyoqCiYjNDM7ICogVXBvbiBWRklPX0RFVklDRV9GRUFUVVJFX1NFVCBhc3NvY2lhdGUgVFBIIChUTFAgUHJvY2Vzc2luZyBIaW50cykgbWV0YWRhdGEKJiM0MzsgKiB3aXRoIGEgdmZpby1leHBvcnRlZCBkbWEtYnVmLiBUaGUgZG1hLWJ1ZiBtdXN0IGhhdmUgYmVlbiBjcmVhdGVkIGJ5CiYjNDM7ICogVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGIG9uIHRoaXMgZGV2aWNlLCBhbmQgdGhlIGRldmljZSBtdXN0IHJlcG9ydAomIzQzOyAqIFRQSCBDb21wbGV0ZXIgc3VwcG9ydCBpbiBEZXZpY2UgQ2FwYWJpbGl0aWVzIDIgKGJpdHMgMTM6MTIpOyByZXF1ZXN0cwomIzQzOyAqIGNhcnJ5aW5nIFZGSU9fRE1BX0JVRl9UUEhfU1RfRVhUIGFkZGl0aW9uYWxseSByZXF1aXJlIHRoZSBkZXZpY2UgdG8KJiM0MzsgKiByZXBvcnQgdGhlIEV4dGVuZGVkIFRQSCBDb21wbGV0ZXIgZW5jb2RpbmcuIE90aGVyd2lzZSB0aGUgaW9jdGwKJiM0MzsgKiByZXR1cm5zIC1FT1BOT1RTVVBQLgomIzQzOyAqCiYjNDM7ICogZG1hYnVmX2ZkIGlzIHRoZSBmaWxlIGRlc2NyaXB0b3IgcmV0dXJuZWQgYnkgVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGLgomIzQzOyAqCiYjNDM7ICogOC1iaXQgU1QgKHN0ZWVyaW5nX3RhZykgYW5kIDE2LWJpdCBFeHRlbmRlZCBTVCAoc3RlZXJpbmdfdGFnX2V4dCkgYXJlCiYjNDM7ICogZGlzdGluY3QgbmFtZXNwYWNlcy4gVXNlcnNwYWNlIHN1cHBsaWVzIHdoaWNoZXZlciB2YWx1ZXMgYXJlIHZhbGlkIGFuZCBzZXRzCiYjNDM7ICogdGhlIG1hdGNoaW5nIFZGSU9fRE1BX0JVRl9UUEhfU1QgLyBWRklPX0RNQV9CVUZfVFBIX1NUX0VYVCBiaXRzIGluIEBmbGFnczsKJiM0MzsgKiBhbiBpbXBvcnRlciByZXF1ZXN0cyBvbmUgbmFtZXNwYWNlIGFuZCByZWNlaXZlcyB0aGUgbWF0Y2hpbmcgdmFsdWUuCiYjNDM7ICoKJiM0MzsgKiBAZmxhZ3MgPT0gMCBtYXJrcyBhbnkgcHJldmlvdXNseSBwdWJsaXNoZWQgU1QgLyBFeHRlbmRlZC1TVCBhcyBpbnZhbGlkCiYjNDM7ICogZm9yIGZ1dHVyZSBQQ0kgVFBIIHF1ZXJpZXMgb24gdGhpcyBkbWEtYnVmLgomIzQzOyAqCiYjNDM7ICogcGggaXMgdGhlIDItYml0IFRMUCBQcm9jZXNzaW5nIEhpbnQgYW5kIG11c3QgYmUgaW4gdGhlIHJhbmdlIFswLCAzXS4KJiM0MzsgKgomIzQzOyAqIFVzZXJzcGFjZSBtdXN0IHB1Ymxpc2ggVFBIIGJlZm9yZSBoYW5kaW5nIHRoZSBkbWEtYnVmIGZkIHRvIGFuIGltcG9ydGVyLgomIzQzOyAqIENhbGxpbmcgU0VUIGFnYWluIHJlcGxhY2VzIHRoZSBwdWJsaXNoZWQgdmFsdWVzLgomIzQzOyAqLwomIzQzOyNkZWZpbmUgVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGX1RQSCAxMwomIzQzOwomIzQzOyNkZWZpbmUgVkZJT19ETUFfQlVGX1RQSF9TVAkJKDEgJmx0OyZsdDsgMCkKJiM0MzsjZGVmaW5lIFZGSU9fRE1BX0JVRl9UUEhfU1RfRVhUCQkoMSAmbHQ7Jmx0OyAxKQomIzQzOwomIzQzO3N0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX2RtYV9idWZfdHBoIHsKJiM0MzsJX19zMzIJZG1hYnVmX2ZkOwomIzQzOwlfX3UzMglmbGFnczsKJiM0MzsJX191MTYJc3RlZXJpbmdfdGFnX2V4dDsKJiM0MzsJX191OAlzdGVlcmluZ190YWc7CiYjNDM7CV9fdTgJcGg7CiYjNDM7fTsKJiM0MzsKIC8qIC0tLS0tLS0tIEFQSSBmb3IgVHlwZTEgVkZJTyBJT01NVSAtLS0tLS0tLSAqLwogCiAvKioKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMTk6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIxMzAKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA2MDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBUUEggTWV0YWRhdGEgUGF0Y2ggU2VyaWVzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHNlcmllcywgYW5kIGl0JiMzOTtzIGFkZGluZyBUUEggKFRMUCBQcm9jZXNzaW5nIEhpbnRzKSBtZXRhZGF0YSBzdXBwb3J0IHRvIERNQS1CVUYsIHNwZWNpZmljYWxseSBmb3IgVkZJTyBhbmQgdGhlIE1lbGxhbm94IENvbm5lY3RYIEluZmluaWJhbmQgZHJpdmVycy4gVGhhdCBtZWFuczoKCiogICBBIG5ldyBmdW5jdGlvbiwgYGRtYV9idWZfZ2V0X3BjaV90cGhgLCBpcyBiZWluZyBhZGRlZCB0byB0aGUgY29yZSBETUEtQlVGIGNvZGUuCiogICBWRklPIFBDSSBpcyBnZXR0aW5nIGEgbmV3IGlvY3RsIGZlYXR1cmUsIGBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUZfVFBIYC4KKiAgIEEgYGdldF9wY2lfdHBoYCBjYWxsYmFjayBpcyBhZGRlZCB0byBgc3RydWN0IGRtYV9idWZfb3BzYC4KKiAgIEEgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24sIGB2ZmlvX3BjaV9kbWFfYnVmX2dldF9wY2lfdHBoYCwgaXMgYmVpbmcgYWRkZWQgdG8gdGhlIFZGSU8gUENJIGNvZGUuCiogICBBbmQgZmluYWxseSwgdGhlIG1seDUgSW5maW5pYmFuZCBkcml2ZXIgaXMgYmVpbmcgbW9kaWZpZWQgdG8gdXNlIGBkbWFfYnVmX2dldF9wY2lfdHBoYCB3aGVuIHJlZ2lzdGVyaW5nIGEgdXNlciBNUiB3aXRoIGEgZG1hYnVmLgoKVGhpcyBpcyBhIHByZXR0eSBmdW5jdGlvbmFsIGNoYW5nZS4gSXQmIzM5O3MgYWRkaW5nIGFuIGlvY3RsIGZlYXR1cmUgaW4gVkZJTyBhbmQgdGhlbiBtb2RpZnlpbmcgYSBkcml2ZXIgdG8gdXNlIHRoZSBtZXRhZGF0YS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHJlYWNoYWJsZSB0aGlzIGlzIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuCgpWRklPIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlLCBhbmQgaXQmIzM5O3Mga25vd24gdG8gYmUgZnV6emFibGUuIFRoZSBtbHg1IEluZmluaWJhbmQgZHJpdmVyIG1pZ2h0IG5lZWQgc3BlY2lmaWMgaGFyZHdhcmUsIGJ1dCBJIGNhbiBwcm9iYWJseSBtb2NrIHRoYXQuIEhvd2V2ZXIsIGV2ZW4gaWYgSSBjYW4mIzM5O3QgbW9jayBtbHg1LCBWRklPIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlLCBzbyBJIHNob3VsZCBmb2N1cyBvbiB0aGF0LgoKV2FpdCwgc3l6a2FsbGVyICpjYW4qIGZ1enogVkZJTy4gVGhhdCYjMzk7cyBnb29kLgoKU28sIGxldCYjMzk7cyBsb29rIGF0IGBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUZfVFBIYCBtb3JlIGNsb3NlbHkuIEkgY2FuIHNlZSB0aGF0IGB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl90cGhgIGlzIHRoZSBoYW5kbGVyLCBhbmQgaXQmIzM5O3MgY2FsbGVkIGZyb20gYHZmaW9fcGNpX2NvcmVfaW9jdGxfZmVhdHVyZWAuIEl0IGxvb2tzIGxpa2UgaXQgcmVxdWlyZXMgYHBjaWVfdHBoX2NvbXBsZXRlcl90eXBlKHZkZXYtJmd0O3BkZXYpYCB0byAqbm90KiBiZSBgUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX05PTkVgLiBJIHdvbmRlciBpZiBJIGNhbiBlbXVsYXRlIGEgUENJIGRldmljZSB3aXRoIFRQSCBDb21wbGV0ZXIgc3VwcG9ydD8gRXZlbiBpZiBJIGNhbiYjMzk7dCBnZXQgdGhhdCBmYXIsIHRoZSBpb2N0bCBoYW5kbGVyIGl0c2VsZiBpcyBzdGlsbCByZWFjaGFibGUgdXAgdG8gdGhhdCBjaGVjaywgYW5kIHRoYXQmIzM5O3MgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IGZ1enppbmcuIFBsdXMsIGBkbWFfYnVmX2dldF9wY2lfdHBoYCBpcyBhIGNvcmUgRE1BLUJVRiBmdW5jdGlvbiwgc28gaXQmIzM5O3MgcHJvYmFibHkgcHJldHR5IGltcG9ydGFudC4KCkkgc2hvdWxkIGNoZWNrIHRoZSByZWxldmFudCBWRklPIGNvZGUgaW4gYGRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jYCBhbmQgYGRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmNgLgoKRm9yIHRoZSBidWlsZCBjb25maWcsIEkmIzM5O2xsIG5lZWQgYENPTkZJR19WRklPX1BDSWAsIG9mIGNvdXJzZSwgYW5kIGBDT05GSUdfUENJRV9UUEhgLiBgQ09ORklHX01MWDVfSU5GSU5JQkFORGAgbWlnaHQgYmUgbmVlZGVkIGZvciB0aGUgbWx4NSBwYXRoLCBidXQgSSBjYW4gcHJvYmFibHkgZW5hYmxlIGl0IGFueXdheSwgZXZlbiBpZiBzeXprYWxsZXIgZG9lc24mIzM5O3QgaGF2ZSBhY3R1YWwgbWx4NSBoYXJkd2FyZS4gSSBjYW4gcHJvYmFibHkgZ3JlcCBmb3IgYFBDSUVfVFBIYCB0byBzZWUgd2hlcmUgaXQgY29tZXMgdXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMTk6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFBDSUVfVFBIJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvcGNpL0tjb25maWc9MTg1PWNvbmZpZyBQQ0lfUEFTSURcbi0tXG5kcml2ZXJzL3BjaS9LY29uZmlnLTE5Ni1cbmRyaXZlcnMvcGNpL0tjb25maWc6MTk3OmNvbmZpZyBQQ0lFX1RQSFxuZHJpdmVycy9wY2kvS2NvbmZpZy0xOTgtXHRib29sIFwmIzM0O1RMUCBQcm9jZXNzaW5nIEhpbnRzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMTk6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM1MzcKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgSSYjMzk7bSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6CgoqKkludmVzdGlnYXRpbmcgYFZGSU9fUENJYCoqCgpSaWdodCwgbGV0JiMzOTtzIGRpdmUgc3RyYWlnaHQgaW4uIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCBgVkZJT19QQ0lgLiBJIHdhbnQgdG8gaW1tZWRpYXRlbHkgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zLCBwb3RlbnRpYWxseSBpZGVudGlmeSBzb21lIHNwZWNpZmljIGFyZWFzIHRvIHRyb3VibGVzaG9vdCwgb3IgdW5kZXJzdGFuZCBob3cgYSBjZXJ0YWluIGNvbXBvbmVudCBpbiB0aGUgc3lzdGVtIGlzIGFmZmVjdGVkLiBXaXRoIG15IGxldmVsIG9mIGV4cGVydGlzZSwgdGhpcyBpcyBtb3JlIHRoYW4ganVzdCBhIHBhc3NpbmcgZ2xhbmNlIGF0IHRoZSBzdXJmYWNlLiBJJiMzOTttIGxpa2VseSBnZWFyaW5nIHVwIHRvIGV4YW1pbmUgY29uZmlndXJhdGlvbiwgcG90ZW50aWFsIHJlc291cmNlIGNvbmZsaWN0cywgb3IgZXZlbiBkZWx2aW5nIGludG8gdGhlIGludGVyYWN0aW9ucyBiZXR3ZWVuIHRoZSBob3N0IGFuZCB0aGUgdmlydHVhbCBtYWNoaW5lcy4gSXQgbWlnaHQgYWxzbyBiZSBhIHNwZWNpZmljIHRyb3VibGVzaG9vdGluZyBzdGVwIEkmIzM5O20gdGFraW5nIGluIGFuIGluLWRlcHRoIGludmVzdGlnYXRpb24uIEkgYW0gY29uc2lkZXJpbmcgdGhlIGludHJpY2FjaWVzIG9mIGRpcmVjdCBkZXZpY2UgYXNzaWdubWVudCwgSU9NTVUgZ3JvdXBzLCBhbmQgdGhlIG92ZXJhbGwgc2VjdXJpdHkgaW1wbGljYXRpb25zLiBNeSBjdXJyZW50IGxpbmUgb2YgdGhvdWdodCBpcyB0aGF0IEkgd2FudCBhIGdyYW51bGFyIHVuZGVyc3RhbmRpbmcgb2YgYFZGSU9fUENJYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAxOToxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVkZJT19QQ0kmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnPTI9bWVudSBcJiMzNDtWRklPIHN1cHBvcnQgZm9yIFBDSSBkZXZpY2VzXCYjMzQ7XG4tLVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTQtXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc6NTpjb25maWcgVkZJT19QQ0lfQ09SRVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTYtXHR0cmlzdGF0ZVxuLS1cbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy05LVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnOjEwOmNvbmZpZyBWRklPX1BDSV9JTlRYXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctMTEtXHRkZWZfYm9vbCB5IGlmICFTMzkwXG4tLVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTEzLVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnOjE0OmNvbmZpZyBWRklPX1BDSVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTE1LVx0dHJpc3RhdGUgXCYjMzQ7R2VuZXJpYyBWRklPIHN1cHBvcnQgZm9yIGFueSBQQ0kgZGV2aWNlXCYjMzQ7XG4tLVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnPTIzPWlmIFZGSU9fUENJXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc6MjQ6Y29uZmlnIFZGSU9fUENJX1ZHQVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTI1LVx0Ym9vbCBcJiMzNDtHZW5lcmljIFZGSU8gUENJIHN1cHBvcnQgZm9yIFZHQSBkZXZpY2VzXCYjMzQ7XG4tLVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTMzLVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnOjM0OmNvbmZpZyBWRklPX1BDSV9JR0RcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy0zNS1cdGJvb2wgXCYjMzQ7R2VuZXJpYyBWRklPIFBDSSBleHRlbnNpb25zIGZvciBJbnRlbCBncmFwaGljcyAoR1ZULWQpXCYjMzQ7XG4tLVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnPTQ1PWVuZGlmXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctNDYtXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc6NDc6Y29uZmlnIFZGSU9fUENJX1pERVZfS1ZNXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctNDgtXHRib29sIFwmIzM0O1ZGSU8gUENJIGV4dGVuc2lvbnMgZm9yIHMzOTB4IEtWTSBwYXNzdGhyb3VnaFwmIzM0O1xuLS1cbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy01Ny1cbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZzo1ODpjb25maWcgVkZJT19QQ0lfRE1BQlVGXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctNTktXHRkZWZfYm9vbCB5IGlmIFZGSU9fUENJX0NPUkUgXHUwMDI2XHUwMDI2IFBDSV9QMlBETUEgXHUwMDI2XHUwMDI2IERNQV9TSEFSRURfQlVGRkVSXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMTk6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQyOTcKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiA2NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipEaXNzZWN0aW5nIHRoZSBWRklPIExhbmRzY2FwZSoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBWRklPIHNldHVwLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdHJ5aW5nIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgZGlmZmVyZW50IGNvbXBvbmVudHMgaW50ZXJyZWxhdGUuIE15IGJyYWluJiMzOTtzIGxhdGNoaW5nIG9udG8gYFZGSU9fUENJYCwgd2hpY2ggSSBrbm93IGlzIGZvdW5kYXRpb25hbCwgYW5kIHRoZW4gSSYjMzk7bSBtZW50YWxseSBwYXJzaW5nIHRoZSBjb25kaXRpb25hbCBkZXBlbmRlbmNpZXMuIGBQQ0lFX1RQSGAgaXMganVtcGluZyBvdXQgYXMgd2VsbCAtIEkgbmVlZCB0byByZWNhbGwgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBhc3BlY3RzIG9mIHRoZSBETUEgaGFuZGxpbmcgaXQgcHJvdmlkZXMgdGhhdCBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIGZvciBteSB1c2UgY2FzZS4KClRoZW4sIHRoZXJlJiMzOTtzIGBWRklPX1BDSV9ETUFCVUZgLiBBaCB5ZXMsIHRoZSBETUEgYnVmZmVyIHN1cHBvcnQuIEkmIzM5O20gcmVtaW5kaW5nIG15c2VsZiB0aGF0IHRoaXMgb25lIGlzIGEgYml0IG1vcmUgaW50cmljYXRlLCBiZWluZyBhIGBkZWZfYm9vbCB5YCBpZiBgVkZJT19QQ0lfQ09SRWAsIGBQQ0lfUDJQRE1BYCBhbmQgYERNQV9TSEFSRURfQlVGRkVSYCBhcmUgYWxzbyBlbmFibGVkLiBUaGUgZGVwZW5kZW5jeSBjaGFpbiBpcyBpbXBvcnRhbnQsIEkgbmVlZCB0byBtYWtlIHN1cmUgYWxsIG9mIHRob3NlIGFyZSBhZGRyZXNzZWQuCgpOb3csIG15IG1pbmQgc2hpZnRzIGdlYXJzIHNsaWdodGx5LiBMZXQmIzM5O3Mgc2VlLi4uIEkgc2hvdWxkIGNoZWNrIGluIG9uIGhvdyBhbGwgb2YgdGhpcyBpbnRlcmFjdHMgd2l0aCBgTUxYNV9JTkZJTklCQU5EYC4gSSYjMzk7bSBnb2luZyB0byBoYXZlIHRvIG1ha2Ugc3VyZSB0aGF0IEkgdW5kZXJzdGFuZCBob3cgYWxsIG9mIHRoZXNlIHBpZWNlcyBmaXQgdG9nZXRoZXIuIFRoZXJlJiMzOTtzIHByb2JhYmx5IGEgcGVyZm9ybWFuY2UgYW5nbGUgaW52b2x2ZWQsIGxldCYjMzk7cyBleHBsb3JlIHRoYXQgYXMgd2VsbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAxOToxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTUxYNV9JTkZJTklCQU5EJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg1L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg1L0tjb25maWc6Mjpjb25maWcgTUxYNV9JTkZJTklCQU5EXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NS9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtNZWxsYW5veCA1dGggZ2VuZXJhdGlvbiBuZXR3b3JrIGFkYXB0ZXJzIChDb25uZWN0WCBzZXJpZXMpIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAxOToxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDc3OQoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDQyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFZGSU8gRE1BLUJVRiBUUEggSW1wbGVtZW50YXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGNvcmUgb2YgdGhlc2UgY2hhbmdlcyBzZWVtcyB0byByZXZvbHZlIGFyb3VuZCB1dGlsaXppbmcgVkZJTyBpb2N0bHMgdG8gaW50ZXJhY3Qgd2l0aCBzb21lIG5ldyBETUEtQlVGIGZ1bmN0aW9uYWxpdHkg4oCTIHNwZWNpZmljYWxseSwgVGFyZ2V0IFBoeXNpY2FsIEFkZHJlc3MgKFRQSCkgc3VwcG9ydC4gVGhlIGtleSBmdW5jdGlvbnMgdG8ga2VlcCBhbiBleWUgb24gYXJlOiBgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWZfdHBoYCwgYHZmaW9fcGNpX2RtYV9idWZfZ2V0X3BjaV90cGhgLCBhbmQgYGRtYV9idWZfZ2V0X3BjaV90cGhgLgoKRmlyc3QsIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIG5hbWluZyBpcyBjb3JyZWN0LiAgYHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3RwaGAg4oCTIHllcywgdGhhdCYjMzk7cyB3aGF0JiMzOTtzIGJlZW4gYWRkZWQgaW4gYGRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmNgLiAgR29vZC4gTm93LCBvbiB0byB0aGUgYGRtYS1idWZgIHNpZGUgb2YgdGhpbmdzLiBDb25maXJtaW5nIGBkbWFfYnVmX2dldF9wY2lfdHBoYCBpcyBwcmVzZW50IGluIGBkcml2ZXJzL2RtYS1idWYvZG1hLWJ1Zi5jYCDigJMgaXQgaXMuICBFeGNlbGxlbnQuCgpOZXh0LCBJIG5lZWQgdG8gbG9vayBhdCB3aGF0JiMzOTtzIGJlZW4gYWRkZWQgZm9yIHRoZSBNZWxsYW5veCBkcml2ZXJzLiAgSSYjMzk7bSBzZWFyY2hpbmcgZm9yIGBtbHg1X3N0X2FsbG9jX2luZGV4X2J5X3RhZ2AgYW5kIGBtbHg1X3N0X2dldF9pbmRleGAgaW4gYGRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9saWIvc3QuY2AuIFl1cCwgdGhleSYjMzk7cmUgdGhlcmUuIFRoYXQgbWFrZXMgc2Vuc2UsIGdpdmVuIHRoZSBwb3RlbnRpYWwgZm9yIFJETUEgd2l0aCB0aGVzZSBkZXZpY2VzLgoKQW5kIGZpbmFsbHksIHRvIG1ha2Ugc3VyZSB0aGUgdW5kZXJseWluZyBQQ0kgbWVjaGFuaXNtcyBhcmUgaW4gcGxhY2UsIEkmIzM5O2xsIGNoZWNrIGBwY2llX3RwaF9lbmFibGVkX3JlcV90eXBlYCBhbmQgYHBjaWVfdHBoX2NvbXBsZXRlcl90eXBlYCBpbiBgZHJpdmVycy9wY2kvdHBoLmNgLiAgWWVwLCB0aGV5IGFyZSBhbHNvIGFkZGVkLiBHb29kLgoKTm93IGZvciBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEkmIzM5O2xsIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSByaWdodCBrZXJuZWwgY29uZmlncyBhcmUgZW5hYmxlZDogYFBDSUVfVFBIYCwgYFZGSU9fUENJYCwgYFBDSV9QMlBETUFgICh3aGljaCBpcyBlc3NlbnRpYWwgZm9yIGBWRklPX1BDSV9ETUFCVUZgKSwgYERNQV9TSEFSRURfQlVGRkVSYCAoYWxzbyBjcnVjaWFsIGZvciBgVkZJT19QQ0lfRE1BQlVGYCksIGFuZCBgTUxYNV9JTkZJTklCQU5EYCAod2hpbGUgb3B0aW9uYWwsIGl0JiMzOTtzIGRlZmluaXRlbHkgYSBnb29kIGlkZWEgdG8gaGF2ZSB0aGF0IGVuYWJsZWQgZm9yIG1heGltdW0gZmxleGliaWxpdHkpLgoKRmluYWxseSwgSSBzaG91bGQgdmVyaWZ5IHRoZSBgVkZJT19QQ0lfRE1BQlVGYCBkZXBlbmRlbmNpZXMgZGlyZWN0bHkgdG8gYmUgMTAwJSBzdXJlIEkmIzM5O3ZlIGdvdCBhIGNvbXByZWhlbnNpdmUgdW5kZXJzdGFuZGluZyBvZiB3aGF0JiMzOTtzIGdvaW5nIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAxOToxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVkZJT19QQ0lfRE1BQlVGJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmZpby9wY2kvS2NvbmZpZz00Nz1jb25maWcgVkZJT19QQ0lfWkRFVl9LVk1cbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctNTctXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc6NTg6Y29uZmlnIFZGSU9fUENJX0RNQUJVRlxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTU5LVx0ZGVmX2Jvb2wgeSBpZiBWRklPX1BDSV9DT1JFIFx1MDAyNlx1MDAyNiBQQ0lfUDJQRE1BIFx1MDAyNlx1MDAyNiBETUFfU0hBUkVEX0JVRkZFUlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAxOToxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTkwMQoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDc1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgcmVmbGVjdGluZyBteSBpbW1lZGlhdGUgdW5kZXJzdGFuZGluZzoKCioqS2VybmVsIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzIEFzc2Vzc21lbnQqKgoKUmlnaHQsIHNvIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlc2UgdHdvIGNyaXRpY2FsIGNvbXBvbmVudHM6IGBQQ0lfUDJQRE1BYCBhbmQgYERNQV9TSEFSRURfQlVGRkVSYC4gVGhleSBzZWVtIGVzc2VudGlhbCBmb3IgdGhpcyBzcGVjaWZpYyBzZXR1cC4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGVpciBkZXBlbmRlbmNpZXMsIGFuZCBob3cgdGhleSByZWxhdGUgdG8gdGhlIG92ZXJhbGwgZHJpdmVyIGNvbmZpZ3VyYXRpb24uCgpGaXJzdCwgbGV0JiMzOTtzIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZzogSSYjMzk7bSBjaGVja2luZyBpZiBgVkZJT19QQ0lfQ09SRWAgaXMgaW5kZWVkIHNldCBhcyBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGluIHRoZSBrZXJuZWwuIEFoLCB5ZXMsIGl0JiMzOTtzIGNvcnJlY3RseSBzZWxlY3RlZCB0aHJvdWdoIGBWRklPX1BDSWAuIEdvb2QsIHRoYXQgbWFrZXMgc2Vuc2UuIFRoYXQmIzM5O3MgYSBjcml0aWNhbCBkZXBlbmRlbmN5IGZvciBhIGdvb2QgZmV3IHNldHVwcy4KCk5leHQsIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgdGhlcmUmIzM5O3MgYW55IGxpbmsgYmV0d2VlbiB0aGUgTWVsbGFub3ggZHJpdmVyIGFuZCB0aGVzZSBvdGhlciBjb21wb25lbnRzLiBJdCBsb29rcyBsaWtlIEkgbmVlZCB0byBxdWlja2x5IGVzdGFibGlzaCBpZiBgTUxYNV9DT1JFYCBpcyByZXF1aXJlZCBmb3IgYE1MWDVfSU5GSU5JQkFORGAuIFRoYXQgcmVsYXRpb25zaGlwIGlzIHByb2JhYmx5IHZlcnkgaW1wb3J0YW50IGZvciBwZXJmb3JtYW5jZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMTk6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1MWDVfQ09SRSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvS2NvbmZpZy01LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL0tjb25maWc6Njpjb25maWcgTUxYNV9DT1JFXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvS2NvbmZpZy03LVx0dHJpc3RhdGUgXCYjMzQ7TWVsbGFub3ggNXRoIGdlbmVyYXRpb24gbmV0d29yayBhZGFwdGVycyAoQ29ubmVjdFggc2VyaWVzKSBjb3JlIGRyaXZlclwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9LY29uZmlnPTE5PWNvbmZpZyBNTFg1X0ZQR0Fcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvS2NvbmZpZy0yOC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9LY29uZmlnOjI5OmNvbmZpZyBNTFg1X0NPUkVfRU5cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9LY29uZmlnLTMwLVx0Ym9vbCBcJiMzNDtNZWxsYW5veCA1dGggZ2VuZXJhdGlvbiBuZXR3b3JrIGFkYXB0ZXJzIChDb25uZWN0WCBzZXJpZXMpIEV0aGVybmV0IHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvS2NvbmZpZz0xMTI9Y29uZmlnIE1MWDVfVENfU0FNUExFXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL0tjb25maWctMTI0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL0tjb25maWc6MTI1OmNvbmZpZyBNTFg1X0NPUkVfRU5fRENCXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvS2NvbmZpZy0xMjYtXHRib29sIFwmIzM0O0RhdGEgQ2VudGVyIEJyaWRnaW5nIChEQ0IpIFN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvS2NvbmZpZy0xMzYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvS2NvbmZpZzoxMzc6Y29uZmlnIE1MWDVfQ09SRV9JUE9JQlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL0tjb25maWctMTM4LVx0Ym9vbCBcJiMzNDtNZWxsYW5veCA1dGggZ2VuZXJhdGlvbiBuZXR3b3JrIGFkYXB0ZXJzIChjb25uZWN0WCBzZXJpZXMpIElQb0lCIG9mZmxvYWRzIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMTk6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY2OTAKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyODkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ3VycmVudCBBbmFseXNpczogVFBILVJlbGF0ZWQgUENJL1ZGSU8gQ2FwYWJpbGl0aWVzKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gc29tZSBjcnVjaWFsIFBDSS9WRklPIGNvZGUsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIFRyYW5zYWN0aW9uIFByb2Nlc3NpbmcgSGludHMgKFRQSCkuIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIG1hcCBvdXQgdGhlIGtleSBjb21wb25lbnRzIGludm9sdmVkIGluIHRoaXMgZnVuY3Rpb25hbGl0eS4gSSYjMzk7bSBzdGFydGluZyBieSBsaXN0aW5nIG91dCB0aGVzZSBrZXkgZWxlbWVudHM6CgoqICAgYFBDSUVfVFBIYAoqICAgYFZGSU9fUENJYAoqICAgYFBDSV9QMlBETUFgCiogICBgTUxYNV9JTkZJTklCQU5EYAoKSSBuZWVkIHRvIGZvY3VzIG9uIHRoZXNlIHN5bWJvbHM6CgoqICAgYHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3RwaGAKKiAgIGB2ZmlvX3BjaV9kbWFfYnVmX2dldF9wY2lfdHBoYAoqICAgYGRtYV9idWZfZ2V0X3BjaV90cGhgCiogICBgcGNpZV90cGhfZW5hYmxlZF9yZXFfdHlwZWAKKiAgIGBwY2llX3RwaF9jb21wbGV0ZXJfdHlwZWAKCldhaXQgYSBzZWNvbmQuLi5JJiMzOTt2ZSBqdXN0IHNwb3R0ZWQgc29tZXRoaW5nIGludGVyZXN0aW5nLiBXaGlsZSBsb29raW5nIGF0IGNvZGUsIGBtbHg1X3N0X2FsbG9jX2luZGV4X2J5X3RhZ2AgYW5kIGBtbHg1X3N0X2dldF9pbmRleGAgYXJlIGluIHRoZSBgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi9zdC5jYCBmaWxlLiBUaGlzIGlzIGNydWNpYWw7IEkgbmVlZCB0byBhZGQgdGhlbSB0byBteSAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7IGxpc3QgYXMgdGhleSBhcmUgcmVsYXRlZCB0byB0aGUgTWVsbGFub3ggZHJpdmVycyB3aGljaCB3aWxsIGJlIGVzc2VudGlhbCB0byBjb25zaWRlciB3aGVuIHVuZGVyc3RhbmRpbmcgZnVsbCBUUEggYmVoYXZpb3VyLiBTbywgSSBuZWVkIHRvIGluY2x1ZGUgdGhlc2UgZnVuY3Rpb25zOgoKKiAgIGBtbHg1X3N0X2FsbG9jX2luZGV4X2J5X3RhZ2AKKiAgIGBtbHg1X3N0X2dldF9pbmRleGAKCk5vdywgbGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHNvbWV0aGluZyBxdWlja2x5IHRvIGVuc3VyZSBJIGhhdmUgdGhlIHJpZ2h0IG5hbWUuLi4geWVwLCBgVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGX1RQSGAgaXMgdGhlIGNvcnJlY3QgbWFjcm8uIFNhdGlzZmllZCB3aXRoIHRoYXQuCgpMYXN0bHksIGxldCBtZSBydW4gYSBxdWljayBjaGVjayBvbiB0aGUgaW1wbGljYXRpb25zIG9mIGB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl90cGhgLiBUaGlzIGlzIGxpa2VseSB3aGVyZSB0aGUgY29yZSBWRklPIFRQSCBpbXBsZW1lbnRhdGlvbiBzdGFydHMuIFVuZGVyc3RhbmRpbmcgaXQgd2lsbCBiZSBrZXkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDE5OjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3RwaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYz0xNTU3PWludCB2ZmlvX3BjaV9jb3JlX2lvY3RsX2ZlYXR1cmUoc3RydWN0IHZmaW9fZGV2aWNlICpkZXZpY2UsIHUzMiBmbGFncyxcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy0xNTc1LVx0Y2FzZSBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUZfVFBIOlxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmM6MTU3NjpcdFx0cmV0dXJuIHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3RwaCh2ZGV2LCBmbGFncywgYXJnLFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMtMTU3Ny1cdFx0XHRcdFx0XHRcdCBhcmdzeik7XG4tLVxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYz0yNTA9aW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTMyIGZsYWdzLFxuLS1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmMtMzY0LVxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYzozNjU6aW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3RwaChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jLTM2Ni1cdFx0XHRcdCAgICAgIHUzMiBmbGFncyxcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX3ByaXYuaD0xMTg9aW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTMyIGZsYWdzLFxuLS1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfcHJpdi5oLTEyMC1cdFx0XHRcdCAgc2l6ZV90IGFyZ3N6KTtcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfcHJpdi5oOjEyMTppbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWZfdHBoKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldixcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfcHJpdi5oLTEyMi1cdFx0XHRcdCAgICAgIHUzMiBmbGFncyxcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX3ByaXYuaD0xMzY9c3RhdGljIGlubGluZSBpbnRcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfcHJpdi5oOjEzNzp2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl90cGgoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCB1MzIgZmxhZ3MsXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX3ByaXYuaC0xMzgtXHRcdFx0XHQgIHN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX2RtYV9idWZfdHBoIF9fdXNlciAqYXJnLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAxOToxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODE0MwoJCQkJCQkJb3V0cHV0OiAzMDIKCQkJCQkJCXRob3VnaHRzOiAzNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBhZGRpbmcgc29tZSBpbnRlcmVzdGluZyBuZXcgZnVuY3Rpb25hbGl0eSByZWxhdGVkIHRvIERNQS1CVUZzIGFuZCBQQ0llIFRQSCAoVExQIFByb2Nlc3NpbmcgSGludHMpLiBFc3NlbnRpYWxseSwgaXQmIzM5O3MgYWxsb3dpbmcgdXNlcnNwYWNlLCB0aHJvdWdoIFZGSU8gaW9jdGxzLCB0byBzZXQgYW5kIHJldHJpZXZlIFRQSCBtZXRhZGF0YSBhc3NvY2lhdGVkIHdpdGggYSBETUEtQlVGLiBUaGF0JiMzOTtzIGEgcHJldHR5IHNpZ25pZmljYW50IGNoYW5nZSwgZXNwZWNpYWxseSBnaXZlbiB0aGUgaW50ZWdyYXRpb24gd2l0aCBjb3JlIERNQS1CVUYsIFZGSU8sIGFuZCB0aGUgbWx4NSBJbmZpbmliYW5kIGRyaXZlci4KClNwZWNpZmljYWxseSwgaXQgbG9va3MgbGlrZSBhIG5ldyBgaW9jdGxgIGlzIGludHJvZHVjZWQgaW4gVkZJTyB0byBzZXQgVFBIIG1ldGFkYXRhIG9uIGEgRE1BLUJVRi4gQSBjb3JyZXNwb25kaW5nIGBnZXRfcGNpX3RwaGAgb3BlcmF0aW9uIGlzIGFkZGVkIHRvIGBkbWFfYnVmX29wc2AsIGFuZCBpdCBsb29rcyBsaWtlIHRoaXMgaXMgaW1wbGVtZW50ZWQgZm9yIFZGSU8gUENJIERNQS1CVUZzLCB3aGljaCBpcyBzZW5zaWJsZS4gVGhlIG1seDUgSUIgZHJpdmVyIGFsc28gZ2V0cyB1cGRhdGVkIHRvIHF1ZXJ5IGFuZCB1dGlsaXplIHRoaXMgbWV0YWRhdGEsIHdoaWNoIG1ha2VzIGl0IGEgY3JpdGljYWwgcGFydCBvZiB0aGUgbmV3IGZlYXR1cmUuCgpHaXZlbiB0aGF0IGl0JiMzOTtzIHVzZXItYWNjZXNzaWJsZSB2aWEgVkZJTyBpb2N0bHMgYW5kIHRvdWNoZXMgZmFpcmx5IGZ1bmRhbWVudGFsIGtlcm5lbCBzdWJzeXN0ZW1zLCBJIGRlZmluaXRlbHkgdGhpbmsgdGhpcyB3YXJyYW50cyBmdXp6aW5nLiBJJiMzOTtsbCBzZXQgYFdvcnRoRnV6emluZz10cnVlYC4KClRoZSBpbXBvcnRhbnQgYml0cyB0byBrZWVwIGFuIGV5ZSBvbiBhcmUgdGhlIG5ldyBmZWF0dXJlcyBpbnRyb2R1Y2VkLCB0aGUgc3BlY2lmaWMgY2FsbCBwYXRocyBhbmQgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGUgc3lzdGVtcywgZXNwZWNpYWxseSBgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWZfdHBoYCwgYHZmaW9fcGNpX2RtYV9idWZfZ2V0X3BjaV90cGhgLCBgZG1hX2J1Zl9nZXRfcGNpX3RwaGAsIGBwY2llX3RwaF9lbmFibGVkX3JlcV90eXBlYCwgYHBjaWVfdHBoX2NvbXBsZXRlcl90eXBlYCwgYG1seDVfc3RfYWxsb2NfaW5kZXhfYnlfdGFnYCwgYW5kIGBtbHg1X3N0X2dldF9pbmRleGAuIEl0IHdpbGwgYWxzbyBiZSBpbXBvcnRhbnQgdG8gZW5zdXJlIHRoZXJlIGFyZSBubyBzdWJ0bGUgcmFjZSBjb25kaXRpb25zIG9yIG1lbW9yeSBjb3JydXB0aW9uIGlzc3VlcyBhcm91bmQgdGhvc2UgY2hhbmdlcy4gVGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgaW50ZXJlc3RpbmcsIGFuZCBpdCBsb29rcyBsaWtlIGl0IGRlcGVuZHMgb24gYFBDSUVfVFBIYCwgYFZGSU9fUENJYCwgYFBDSV9QMlBETUFgLCBhbmQgYE1MWDVfSU5GSU5JQkFORGAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDE5OjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtQQ0lFX1RQSCYjMzQ7LAogICAgJiMzNDtWRklPX1BDSSYjMzQ7LAogICAgJiMzNDtQQ0lfUDJQRE1BJiMzNDssCiAgICAmIzM0O01MWDVfSU5GSU5JQkFORCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3ZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3RwaCYjMzQ7LAogICAgJiMzNDt2ZmlvX3BjaV9kbWFfYnVmX2dldF9wY2lfdHBoJiMzNDssCiAgICAmIzM0O2RtYV9idWZfZ2V0X3BjaV90cGgmIzM0OywKICAgICYjMzQ7cGNpZV90cGhfZW5hYmxlZF9yZXFfdHlwZSYjMzQ7LAogICAgJiMzNDtwY2llX3RwaF9jb21wbGV0ZXJfdHlwZSYjMzQ7LAogICAgJiMzNDttbHg1X3N0X2FsbG9jX2luZGV4X2J5X3RhZyYjMzQ7LAogICAgJiMzNDttbHg1X3N0X2dldF9pbmRleCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IFZGSU8gaW9jdGwgZmVhdHVyZSBgVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGX1RQSGAgdG8gYXNzb2NpYXRlIFBDSWUgVFBIIChUTFAgUHJvY2Vzc2luZyBIaW50cykgbWV0YWRhdGEgd2l0aCBhIERNQS1CVUYuIEl0IGFsc28gYWRkcyBhIG5ldyBgZ2V0X3BjaV90cGhgIGNhbGxiYWNrIHRvIGBkbWFfYnVmX29wc2AgYW5kIGltcGxlbWVudHMgaXQgZm9yIFZGSU8gUENJIERNQS1CVUZzLiBUaGUgTWVsbGFub3ggbWx4NSBJbmZpbmliYW5kIGRyaXZlciBpcyBtb2RpZmllZCB0byBxdWVyeSBhbmQgdXNlIHRoaXMgbWV0YWRhdGEuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBETUEtQlVGLCBWRklPLCBhbmQgbWx4NSBsb2dpYyB0aGF0IGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BDSUVfVFBIJiMzNDssCiAgICAmIzM0O1ZGSU9fUENJJiMzNDssCiAgICAmIzM0O1BDSV9QMlBETUEmIzM0OywKICAgICYjMzQ7TUxYNV9JTkZJTklCQU5EJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWZfdHBoJiMzNDssCiAgICAmIzM0O3ZmaW9fcGNpX2RtYV9idWZfZ2V0X3BjaV90cGgmIzM0OywKICAgICYjMzQ7ZG1hX2J1Zl9nZXRfcGNpX3RwaCYjMzQ7LAogICAgJiMzNDtwY2llX3RwaF9lbmFibGVkX3JlcV90eXBlJiMzNDssCiAgICAmIzM0O3BjaWVfdHBoX2NvbXBsZXRlcl90eXBlJiMzNDssCiAgICAmIzM0O21seDVfc3RfYWxsb2NfaW5kZXhfYnlfdGFnJiMzNDssCiAgICAmIzM0O21seDVfc3RfZ2V0X2luZGV4JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgVkZJTyBpb2N0bCBmZWF0dXJlIGBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUZfVFBIYCB0byBhc3NvY2lhdGUgUENJZSBUUEggKFRMUCBQcm9jZXNzaW5nIEhpbnRzKSBtZXRhZGF0YSB3aXRoIGEgRE1BLUJVRi4gSXQgYWxzbyBhZGRzIGEgbmV3IGBnZXRfcGNpX3RwaGAgY2FsbGJhY2sgdG8gYGRtYV9idWZfb3BzYCBhbmQgaW1wbGVtZW50cyBpdCBmb3IgVkZJTyBQQ0kgRE1BLUJVRnMuIFRoZSBNZWxsYW5veCBtbHg1IEluZmluaWJhbmQgZHJpdmVyIGlzIG1vZGlmaWVkIHRvIHF1ZXJ5IGFuZCB1c2UgdGhpcyBtZXRhZGF0YS4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIERNQS1CVUYsIFZGSU8sIGFuZCBtbHg1IGxvZ2ljIHRoYXQgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDE5OjEzOjM4LjA2ODUxMjU3OVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2NjcxOTk5NzA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBDSUVfVFBIXCIsXG4gICAgXCJWRklPX1BDSVwiLFxuICAgIFwiUENJX1AyUERNQVwiLFxuICAgIFwiTUxYNV9JTkZJTklCQU5EXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWZfdHBoXCIsXG4gICAgXCJ2ZmlvX3BjaV9kbWFfYnVmX2dldF9wY2lfdHBoXCIsXG4gICAgXCJkbWFfYnVmX2dldF9wY2lfdHBoXCIsXG4gICAgXCJwY2llX3RwaF9lbmFibGVkX3JlcV90eXBlXCIsXG4gICAgXCJwY2llX3RwaF9jb21wbGV0ZXJfdHlwZVwiLFxuICAgIFwibWx4NV9zdF9hbGxvY19pbmRleF9ieV90YWdcIixcbiAgICBcIm1seDVfc3RfZ2V0X2luZGV4XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBWRklPIGlvY3RsIGZlYXR1cmUgYFZGSU9fREVWSUNFX0ZFQVRVUkVfRE1BX0JVRl9UUEhgIHRvIGFzc29jaWF0ZSBQQ0llIFRQSCAoVExQIFByb2Nlc3NpbmcgSGludHMpIG1ldGFkYXRhIHdpdGggYSBETUEtQlVGLiBJdCBhbHNvIGFkZHMgYSBuZXcgYGdldF9wY2lfdHBoYCBjYWxsYmFjayB0byBgZG1hX2J1Zl9vcHNgIGFuZCBpbXBsZW1lbnRzIGl0IGZvciBWRklPIFBDSSBETUEtQlVGcy4gVGhlIE1lbGxhbm94IG1seDUgSW5maW5pYmFuZCBkcml2ZXIgaXMgbW9kaWZpZWQgdG8gcXVlcnkgYW5kIHVzZSB0aGlzIG1ldGFkYXRhLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgRE1BLUJVRiwgVkZJTywgYW5kIG1seDUgbG9naWMgdGhhdCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQxOToxMzozOC4wNjg1MTcwMjhaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4Njg2ODE2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDIxOGIyNjk5NmZmYTRjOThiYzUxMzA4Y2M5YzA3ZWUwMjU4MjVhN2JcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBKdW4gMjIgMTk6MTM6MzYgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEtYnVmL2RtYS1idWYuYyBiL2RyaXZlcnMvZG1hLWJ1Zi9kbWEtYnVmLmNcXG5pbmRleCBkNTA0YzYzNmRjMjk0ZS4uN2E0YzliMGQ1ZGFiNDYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9kbWEtYnVmL2RtYS1idWYuY1xcbisrKyBiL2RyaXZlcnMvZG1hLWJ1Zi9kbWEtYnVmLmNcXG5AQCAtMTE0NCw2ICsxMTQ0LDMxIEBAIHZvaWQgZG1hX2J1Zl91bnBpbihzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2gpXFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9OU19HUEwoZG1hX2J1Zl91bnBpbiwgXFxcIkRNQV9CVUZcXFwiKTtcXG4gXFxuKy8qKlxcbisgKiBkbWFfYnVmX2dldF9wY2lfdHBoIC0gUmV0cmlldmUgUENJZSBUTFAgUHJvY2Vzc2luZyBIaW50IChUUEgpIG1ldGFkYXRhXFxuKyAqIEBkbWFidWY6IERNQSBidWZmZXIgdG8gcXVlcnlcXG4rICogQGV4dGVuZGVkOiBmYWxzZSBmb3IgOC1iaXQgU1QsIHRydWUgZm9yIDE2LWJpdCBFeHRlbmRlZCBTVFxcbisgKiBAc3RlZXJpbmdfdGFnOiByZXR1cm5zIHRoZSByYXcgc3RlZXJpbmcgdGFnIGZvciB0aGUgcmVxdWVzdGVkIG5hbWVzcGFjZVxcbisgKiBAcGg6IHJldHVybnMgdGhlIFRQSCBwcm9jZXNzaW5nIGhpbnRcXG4rICpcXG4rICogV3JhcHBlciBmb3IgdGhlIG9wdGlvbmFsIFxcdTAwMjZkbWFfYnVmX29wcy5nZXRfcGNpX3RwaCBjYWxsYmFjay5cXG4rICpcXG4rICogTXVzdCBiZSBjYWxsZWQgd2l0aCBcXHUwMDI2ZG1hX2J1Zi5yZXN2IGhlbGQuIFJldHVybnMgLUVPUE5PVFNVUFAgaWYgdGhlXFxuKyAqIGV4cG9ydGVyIGRvZXMgbm90IGltcGxlbWVudCB0aGUgY2FsbGJhY2sgb3IgaGFzIG5vIG1ldGFkYXRhIGZvciB0aGVcXG4rICogcmVxdWVzdGVkIG5hbWVzcGFjZS5cXG4rICovXFxuK2ludCBkbWFfYnVmX2dldF9wY2lfdHBoKHN0cnVjdCBkbWFfYnVmICpkbWFidWYsIGJvb2wgZXh0ZW5kZWQsXFxuK1xcdFxcdFxcdHUxNiAqc3RlZXJpbmdfdGFnLCB1OCAqcGgpXFxuK3tcXG4rXFx0ZG1hX3Jlc3ZfYXNzZXJ0X2hlbGQoZG1hYnVmLVxcdTAwM2VyZXN2KTtcXG4rXFxuK1xcdGlmICghZG1hYnVmLVxcdTAwM2VvcHMtXFx1MDAzZWdldF9wY2lfdHBoKVxcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcbitcXHRyZXR1cm4gZG1hYnVmLVxcdTAwM2VvcHMtXFx1MDAzZWdldF9wY2lfdHBoKGRtYWJ1ZiwgZXh0ZW5kZWQsIHN0ZWVyaW5nX3RhZywgcGgpO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfTlNfR1BMKGRtYV9idWZfZ2V0X3BjaV90cGgsIFxcXCJETUFfQlVGXFxcIik7XFxuK1xcbiAvKipcXG4gICogZG1hX2J1Zl9tYXBfYXR0YWNobWVudCAtIFJldHVybnMgdGhlIHNjYXR0ZXJsaXN0IHRhYmxlIG9mIHRoZSBhdHRhY2htZW50O1xcbiAgKiBtYXBwZWQgaW50byBfZGV2aWNlXyBhZGRyZXNzIHNwYWNlLiBJcyBhIHdyYXBwZXIgZm9yIG1hcF9kbWFfYnVmKCkgb2YgdGhlXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg1L21haW4uYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg1L21haW4uY1xcbmluZGV4IDAyODA5MTE0ZmM3OWFmLi5hMmI0OTdmNmIxNmJkYyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NS9tYWluLmNcXG4rKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NS9tYWluLmNcXG5AQCAtNjAsNiArNjAsNyBAQFxcbiBNT0RVTEVfQVVUSE9SKFxcXCJFbGkgQ29oZW4gXFx1MDAzY2VsaUBtZWxsYW5veC5jb21cXHUwMDNlXFxcIik7XFxuIE1PRFVMRV9ERVNDUklQVElPTihcXFwiTWVsbGFub3ggNXRoIGdlbmVyYXRpb24gbmV0d29yayBhZGFwdGVycyAoQ29ubmVjdFggc2VyaWVzKSBJQiBkcml2ZXJcXFwiKTtcXG4gTU9EVUxFX0xJQ0VOU0UoXFxcIkR1YWwgQlNEL0dQTFxcXCIpO1xcbitNT0RVTEVfSU1QT1JUX05TKFxcXCJETUFfQlVGXFxcIik7XFxuIFxcbiBzdHJ1Y3QgbWx4NV9pYl9ldmVudF93b3JrIHtcXG4gXFx0c3RydWN0IHdvcmtfc3RydWN0XFx0d29yaztcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDUvbXIuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg1L21yLmNcXG5pbmRleCBlNmI3NDk1NWQ5NWRjZC4uN2FjZWQzZjU1NDU2MWUgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDUvbXIuY1xcbisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg1L21yLmNcXG5AQCAtMzksNiArMzksNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZGVsYXkuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RtYS1idWYuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RtYS1yZXN2LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9wY2ktdHBoLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NyZG1hL2ZybXJfcG9vbHMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3JkbWEvaWJfdW1lbV9vZHAuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFxcImRtLmhcXFwiXFxuQEAgLTE2Nyw2ICsxNjgsMzIgQEAgc3RhdGljIGludCBnZXRfdW5jaGFuZ2VhYmxlX2FjY2Vzc19mbGFncyhzdHJ1Y3QgbWx4NV9pYl9kZXYgKmRldixcXG4gI2RlZmluZSBNTFg1X0ZSTVJfUE9PTFNfS0VSTkVMX0tFWV9QSF9NQVNLIEdFTk1BU0tfVUxMKDIzLCAxNilcXG4gI2RlZmluZSBNTFg1X0ZSTVJfUE9PTFNfS0VSTkVMX0tFWV9TVF9JTkRFWF9NQVNLIEdFTk1BU0tfVUxMKDE1LCAwKVxcbiBcXG4rc3RhdGljIGludCBtbHg1X2liX2dldF9mcm1yX3N0X2hhbmRsZV9yZWYoc3RydWN0IG1seDVfaWJfZGV2ICpkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdCAgdTE2IHN0X2luZGV4KVxcbit7XFxuK1xcdGlmIChzdF9pbmRleCA9PSBNTFg1X01LQ19QQ0lFX1RQSF9OT19TVEVFUklOR19UQUdfSU5ERVgpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0cmV0dXJuIG1seDVfc3RfZ2V0X2luZGV4KGRldi1cXHUwMDNlbWRldiwgc3RfaW5kZXgpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBtbHg1X2liX3B1dF9zdF9pbmRleF9yZWYoc3RydWN0IG1seDVfaWJfZGV2ICpkZXYsIHUxNiBzdF9pbmRleClcXG4re1xcbitcXHRpZiAoc3RfaW5kZXggPT0gTUxYNV9NS0NfUENJRV9UUEhfTk9fU1RFRVJJTkdfVEFHX0lOREVYKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRtbHg1X3N0X2RlYWxsb2NfaW5kZXgoZGV2LVxcdTAwM2VtZGV2LCBzdF9pbmRleCk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIG1seDVfaWJfcHV0X2ZybXJfc3RfaGFuZGxlX3JlZihzdHJ1Y3QgbWx4NV9pYl9kZXYgKmRldixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgdTY0IGtlcm5lbF92ZW5kb3Jfa2V5KVxcbit7XFxuK1xcdHUxNiBzdF9pbmRleCA9IEZJRUxEX0dFVChNTFg1X0ZSTVJfUE9PTFNfS0VSTkVMX0tFWV9TVF9JTkRFWF9NQVNLLFxcbitcXHRcXHRcXHRcXHQga2VybmVsX3ZlbmRvcl9rZXkpO1xcbitcXG4rXFx0bWx4NV9pYl9wdXRfc3RfaW5kZXhfcmVmKGRldiwgc3RfaW5kZXgpO1xcbit9XFxuK1xcbiBzdGF0aWMgc3RydWN0IG1seDVfaWJfbXIgKlxcbiBfbWx4NV9mcm1yX3Bvb2xfYWxsb2Moc3RydWN0IG1seDVfaWJfZGV2ICpkZXYsIHN0cnVjdCBpYl91bWVtICp1bWVtLFxcbiBcXHRcXHQgICAgICBpbnQgYWNjZXNzX2ZsYWdzLCBpbnQgYWNjZXNzX21vZGUsXFxuQEAgLTIxOCw3ICsyNDUsOSBAQCBzdHJ1Y3QgbWx4NV9pYl9tciAqbWx4NV9tcl9jYWNoZV9hbGxvYyhzdHJ1Y3QgbWx4NV9pYl9kZXYgKmRldixcXG4gXFx0XFx0XFx0XFx0ICAgICAgMCA6XFxuIFxcdFxcdFxcdFxcdCAgICAgIE1MWDVfRlJNUl9QT09MU19LRVlfQUNDRVNTX01PREVfS1NNX01BU0ssXFxuIFxcdFxcdC5udW1fZG1hX2Jsb2NrcyA9IG5kZXNjcyxcXG4tXFx0XFx0Lmtlcm5lbF92ZW5kb3Jfa2V5ID0gMCwgLyogbm8gUEggYW5kIG5vIFNUIGluZGV4ICovXFxuK1xcdFxcdC5rZXJuZWxfdmVuZG9yX2tleSA9XFxuK1xcdFxcdFxcdEZJRUxEX1BSRVAoTUxYNV9GUk1SX1BPT0xTX0tFUk5FTF9LRVlfU1RfSU5ERVhfTUFTSyxcXG4rXFx0XFx0XFx0XFx0ICAgTUxYNV9NS0NfUENJRV9UUEhfTk9fU1RFRVJJTkdfVEFHX0lOREVYKSxcXG4gXFx0fTtcXG4gXFx0c3RydWN0IG1seDVfaWJfbXIgKm1yO1xcbiBcXHRpbnQgcmV0O1xcbkBAIC0zMzUsNiArMzY0LDcgQEAgc3RhdGljIGludCBtbHg1cl9idWlsZF9mcm1yX2tleShzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UsXFxuIFxcdFxcdGdldF91bmNoYW5nZWFibGVfYWNjZXNzX2ZsYWdzKGRldiwgaW4tXFx1MDAzZWFjY2Vzc19mbGFncyk7XFxuIFxcdG91dC1cXHUwMDNldmVuZG9yX2tleSA9IGluLVxcdTAwM2V2ZW5kb3Jfa2V5O1xcbiBcXHRvdXQtXFx1MDAzZW51bV9kbWFfYmxvY2tzID0gaW4tXFx1MDAzZW51bV9kbWFfYmxvY2tzO1xcbitcXHRvdXQtXFx1MDAzZWtlcm5lbF92ZW5kb3Jfa2V5ID0gaW4tXFx1MDAzZWtlcm5lbF92ZW5kb3Jfa2V5O1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5AQCAtNTU3LDYgKzU4Nyw5IEBAIHN0YXRpYyBzdHJ1Y3QgbWx4NV9pYl9tciAqcmVnX2NyZWF0ZShzdHJ1Y3QgaWJfcGQgKnBkLCBzdHJ1Y3QgaWJfdW1lbSAqdW1lbSxcXG4gXFx0bXItXFx1MDAzZWlibXIucGQgPSBwZDtcXG4gXFx0bXItXFx1MDAzZWFjY2Vzc19mbGFncyA9IGFjY2Vzc19mbGFncztcXG4gXFx0bXItXFx1MDAzZXBhZ2Vfc2hpZnQgPSBvcmRlcl9iYXNlXzIocGFnZV9zaXplKTtcXG4rXFx0bXItXFx1MDAzZWlibXIuZnJtci5rZXkua2VybmVsX3ZlbmRvcl9rZXkgPVxcbitcXHRcXHRGSUVMRF9QUkVQKE1MWDVfRlJNUl9QT09MU19LRVJORUxfS0VZX1NUX0lOREVYX01BU0ssIHN0X2luZGV4KSB8XFxuK1xcdFxcdEZJRUxEX1BSRVAoTUxYNV9GUk1SX1BPT0xTX0tFUk5FTF9LRVlfUEhfTUFTSywgcGgpO1xcbiBcXG4gXFx0aW5sZW4gPSBNTFg1X1NUX1NaX0JZVEVTKGNyZWF0ZV9ta2V5X2luKTtcXG4gXFx0aWYgKHBvcHVsYXRlKVxcbkBAIC03NTUsNiArNzg4LDEyIEBAIHN0YXRpYyBzdHJ1Y3QgaWJfbXIgKmNyZWF0ZV9yZWFsX21yKHN0cnVjdCBpYl9wZCAqcGQsIHN0cnVjdCBpYl91bWVtICp1bWVtLFxcbiBcXG4gXFx0eGx0X3dpdGhfdW1yID0gbWx4NXJfdW1yX2Nhbl9sb2FkX3BhcyhkZXYsIHVtZW0tXFx1MDAzZWxlbmd0aCk7XFxuIFxcdGlmICh4bHRfd2l0aF91bXIpIHtcXG4rXFx0XFx0ZXJyID0gbWx4NV9pYl9nZXRfZnJtcl9zdF9oYW5kbGVfcmVmKGRldiwgc3RfaW5kZXgpO1xcbitcXHRcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdFxcdGliX3VtZW1fcmVsZWFzZSh1bWVtKTtcXG4rXFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcXG4rXFx0XFx0fVxcbitcXG4gXFx0XFx0bXIgPSBhbGxvY19jYWNoZWFibGVfbXIocGQsIHVtZW0sIGlvdmEsIGFjY2Vzc19mbGFncyxcXG4gXFx0XFx0XFx0XFx0XFx0TUxYNV9NS0NfQUNDRVNTX01PREVfTVRULFxcbiBcXHRcXHRcXHRcXHRcXHRzdF9pbmRleCwgcGgpO1xcbkBAIC03NjksNiArODA4LDggQEAgc3RhdGljIHN0cnVjdCBpYl9tciAqY3JlYXRlX3JlYWxfbXIoc3RydWN0IGliX3BkICpwZCwgc3RydWN0IGliX3VtZW0gKnVtZW0sXFxuIFxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2ZGV2LVxcdTAwM2VzbG93X3BhdGhfbXV0ZXgpO1xcbiBcXHR9XFxuIFxcdGlmIChJU19FUlIobXIpKSB7XFxuK1xcdFxcdGlmICh4bHRfd2l0aF91bXIpXFxuK1xcdFxcdFxcdG1seDVfaWJfcHV0X3N0X2luZGV4X3JlZihkZXYsIHN0X2luZGV4KTtcXG4gXFx0XFx0aWJfdW1lbV9yZWxlYXNlKHVtZW0pO1xcbiBcXHRcXHRyZXR1cm4gRVJSX0NBU1QobXIpO1xcbiBcXHR9XFxuQEAgLTkwMyw2ICs5NDQsNTIgQEAgc3RhdGljIHN0cnVjdCBkbWFfYnVmX2F0dGFjaF9vcHMgbWx4NV9pYl9kbWFidWZfYXR0YWNoX29wcyA9IHtcXG4gXFx0LmludmFsaWRhdGVfbWFwcGluZ3MgPSBtbHg1X2liX2RtYWJ1Zl9pbnZhbGlkYXRlX2NiLFxcbiB9O1xcbiBcXG4rc3RhdGljIHZvaWQgZ2V0X3BjaV90cGhfbXJfZG1hYnVmKHN0cnVjdCBtbHg1X2liX2RldiAqZGV2LCBzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLFxcbitcXHRcXHRcXHRcXHQgIHUxNiAqc3RfaW5kZXgsIHU4ICpwaClcXG4re1xcbitcXHR1MTYgbG9jYWxfc3RfaW5kZXg7XFxuK1xcdHUxNiBzdGVlcmluZ190YWc7XFxuK1xcdHU4IGxvY2FsX3BoO1xcbitcXHRib29sIGV4dGVuZGVkO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0c3dpdGNoIChwY2llX3RwaF9lbmFibGVkX3JlcV90eXBlKGRldi1cXHUwMDNlbWRldi1cXHUwMDNlcGRldikpIHtcXG4rXFx0Y2FzZSBQQ0lfVFBIX1JFUV9UUEhfT05MWTpcXG4rXFx0XFx0ZXh0ZW5kZWQgPSBmYWxzZTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgUENJX1RQSF9SRVFfRVhUX1RQSDpcXG4rXFx0XFx0ZXh0ZW5kZWQgPSB0cnVlO1xcbitcXHRcXHRicmVhaztcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHRkbWFfcmVzdl9sb2NrKGRtYWJ1Zi1cXHUwMDNlcmVzdiwgTlVMTCk7XFxuK1xcdHJldCA9IGRtYV9idWZfZ2V0X3BjaV90cGgoZG1hYnVmLCBleHRlbmRlZCwgXFx1MDAyNnN0ZWVyaW5nX3RhZywgXFx1MDAyNmxvY2FsX3BoKTtcXG4rXFx0ZG1hX3Jlc3ZfdW5sb2NrKGRtYWJ1Zi1cXHUwMDNlcmVzdik7XFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0aWYgKHJldCAhPSAtRU9QTk9UU1VQUClcXG4rXFx0XFx0XFx0bWx4NV9pYl9kYmcoZGV2LCBcXFwiZ2V0X3BjaV90cGggZmFpbGVkICglZClcXFxcblxcXCIsIHJldCk7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0cmV0ID0gbWx4NV9zdF9hbGxvY19pbmRleF9ieV90YWcoZGV2LVxcdTAwM2VtZGV2LCBzdGVlcmluZ190YWcsXFxuK1xcdFxcdFxcdFxcdFxcdCBcXHUwMDI2bG9jYWxfc3RfaW5kZXgpO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdG1seDVfaWJfZGJnKGRldiwgXFxcInN0X2FsbG9jX2luZGV4X2J5X3RhZyBmYWlsZWQgKCVkKVxcXFxuXFxcIiwgcmV0KTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHQqc3RfaW5kZXggPSBsb2NhbF9zdF9pbmRleDtcXG4rXFx0KnBoID0gbG9jYWxfcGg7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIG1seDVfaWJfbXJfcHV0X2ZybXJfc3RfaGFuZGxlX3JlZihzdHJ1Y3QgbWx4NV9pYl9tciAqbXIpXFxuK3tcXG4rXFx0bWx4NV9pYl9wdXRfZnJtcl9zdF9oYW5kbGVfcmVmKG1yX3RvX21kZXYobXIpLFxcbitcXHRcXHRcXHRcXHQgICAgICAgbXItXFx1MDAzZWlibXIuZnJtci5rZXkua2VybmVsX3ZlbmRvcl9rZXkpO1xcbit9XFxuK1xcbiBzdGF0aWMgc3RydWN0IGliX21yICpcXG4gcmVnX3VzZXJfbXJfZG1hYnVmKHN0cnVjdCBpYl9wZCAqcGQsIHN0cnVjdCBkZXZpY2UgKmRtYV9kZXZpY2UsXFxuIFxcdFxcdCAgIHU2NCBvZmZzZXQsIHU2NCBsZW5ndGgsIHU2NCB2aXJ0X2FkZHIsXFxuQEAgLTk0NSwxMiArMTAzMiwyMiBAQCByZWdfdXNlcl9tcl9kbWFidWYoc3RydWN0IGliX3BkICpwZCwgc3RydWN0IGRldmljZSAqZG1hX2RldmljZSxcXG4gXFx0XFx0cGggPSBkbWFoLVxcdTAwM2VwaDtcXG4gXFx0XFx0aWYgKGRtYWgtXFx1MDAzZXZhbGlkX2ZpZWxkcyBcXHUwMDI2IEJJVChJQl9ETUFIX0NQVV9JRF9FWElTVFMpKVxcbiBcXHRcXHRcXHRzdF9pbmRleCA9IG1kbWFoLVxcdTAwM2VzdF9pbmRleDtcXG4rXFxuK1xcdFxcdGVyciA9IG1seDVfaWJfZ2V0X2ZybXJfc3RfaGFuZGxlX3JlZihkZXYsIHN0X2luZGV4KTtcXG4rXFx0XFx0aWYgKGVycikge1xcbitcXHRcXHRcXHRpYl91bWVtX3JlbGVhc2UoXFx1MDAyNnVtZW1fZG1hYnVmLVxcdTAwM2V1bWVtKTtcXG4rXFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcXG4rXFx0XFx0fVxcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRnZXRfcGNpX3RwaF9tcl9kbWFidWYoZGV2LCB1bWVtX2RtYWJ1Zi1cXHUwMDNlYXR0YWNoLVxcdTAwM2VkbWFidWYsXFxuK1xcdFxcdFxcdFxcdCAgICAgIFxcdTAwMjZzdF9pbmRleCwgXFx1MDAyNnBoKTtcXG4gXFx0fVxcbiBcXG4gXFx0bXIgPSBhbGxvY19jYWNoZWFibGVfbXIocGQsIFxcdTAwMjZ1bWVtX2RtYWJ1Zi1cXHUwMDNldW1lbSwgdmlydF9hZGRyLFxcbiBcXHRcXHRcXHRcXHRhY2Nlc3NfZmxhZ3MsIGFjY2Vzc19tb2RlLFxcbiBcXHRcXHRcXHRcXHRzdF9pbmRleCwgcGgpO1xcbiBcXHRpZiAoSVNfRVJSKG1yKSkge1xcbitcXHRcXHRtbHg1X2liX3B1dF9zdF9pbmRleF9yZWYoZGV2LCBzdF9pbmRleCk7XFxuIFxcdFxcdGliX3VtZW1fcmVsZWFzZShcXHUwMDI2dW1lbV9kbWFidWYtXFx1MDAzZXVtZW0pO1xcbiBcXHRcXHRyZXR1cm4gRVJSX0NBU1QobXIpO1xcbiBcXHR9XFxuQEAgLTE0MDUsNiArMTUwMiw3IEBAIHN0YXRpYyBpbnQgbWx4NXJfaGFuZGxlX21rZXlfY2xlYW51cChzdHJ1Y3QgbWx4NV9pYl9tciAqbXIpXFxuIFxcdGlmIChtci1cXHUwMDNlaWJtci5mcm1yLnBvb2wpIHtcXG4gXFx0XFx0aWYgKCFtbHg1X3Vtcl9yZXZva2VfbXJfd2l0aF9sb2NrKG1yKSkge1xcbiBcXHRcXHRcXHRpYl9mcm1yX3Bvb2xfcHVzaChtci1cXHUwMDNlaWJtci5kZXZpY2UsIFxcdTAwMjZtci1cXHUwMDNlaWJtcik7XFxuK1xcdFxcdFxcdG1seDVfaWJfbXJfcHV0X2ZybXJfc3RfaGFuZGxlX3JlZihtcik7XFxuIFxcdFxcdFxcdHJldHVybiAwO1xcbiBcXHRcXHR9XFxuIFxcdH1cXG5AQCAtMTQzMiw2ICsxNTMwLDkgQEAgc3RhdGljIGludCBtbHg1cl9oYW5kbGVfbWtleV9jbGVhbnVwKHN0cnVjdCBtbHg1X2liX21yICptcilcXG4gXFx0aWYgKG1yLVxcdTAwM2VpYm1yLmZybXIucG9vbCBcXHUwMDI2XFx1MDAyNiAhcmV0KVxcbiBcXHRcXHRpYl9mcm1yX3Bvb2xfZHJvcChcXHUwMDI2bXItXFx1MDAzZWlibXIpO1xcbiBcXG4rXFx0aWYgKCFyZXQpXFxuK1xcdFxcdG1seDVfaWJfbXJfcHV0X2ZybXJfc3RfaGFuZGxlX3JlZihtcik7XFxuK1xcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGliL3N0LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGliL3N0LmNcXG5pbmRleCA5OTdiZTkxZjBhMTM1YS4uYmYxNGE3YTZkZjE1ZTEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi9zdC5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi9zdC5jXFxuQEAgLTkyLDIzICs5MiwxOCBAQCB2b2lkIG1seDVfc3RfZGVzdHJveShzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KVxcbiBcXHRrZnJlZShzdCk7XFxuIH1cXG4gXFxuLWludCBtbHg1X3N0X2FsbG9jX2luZGV4KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIGVudW0gdHBoX21lbV90eXBlIG1lbV90eXBlLFxcbi1cXHRcXHRcXHR1bnNpZ25lZCBpbnQgY3B1X3VpZCwgdTE2ICpzdF9pbmRleClcXG4raW50IG1seDVfc3RfYWxsb2NfaW5kZXhfYnlfdGFnKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIHUxNiB0YWcsXFxuK1xcdFxcdFxcdCAgICAgICB1MTYgKnN0X2luZGV4KVxcbiB7XFxuIFxcdHN0cnVjdCBtbHg1X3N0X2lkeF9kYXRhICppZHhfZGF0YTtcXG4gXFx0c3RydWN0IG1seDVfc3QgKnN0ID0gZGV2LVxcdTAwM2VzdDtcXG4gXFx0dW5zaWduZWQgbG9uZyBpbmRleDtcXG4gXFx0dTMyIHhhX2lkO1xcbi1cXHR1MTYgdGFnO1xcbi1cXHRpbnQgcmV0O1xcbitcXHRpbnQgcmV0ID0gMDtcXG4gXFxuIFxcdGlmICghc3QpXFxuIFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4gXFxuLVxcdHJldCA9IHBjaWVfdHBoX2dldF9jcHVfc3QoZGV2LVxcdTAwM2VwZGV2LCBtZW1fdHlwZSwgY3B1X3VpZCwgXFx1MDAyNnRhZyk7XFxuLVxcdGlmIChyZXQpXFxuLVxcdFxcdHJldHVybiByZXQ7XFxuLVxcbiBcXHRpZiAoc3QtXFx1MDAzZWRpcmVjdF9tb2RlKSB7XFxuIFxcdFxcdCpzdF9pbmRleCA9IHRhZztcXG4gXFx0XFx0cmV0dXJuIDA7XFxuQEAgLTE1Miw4ICsxNDcsNDYgQEAgaW50IG1seDVfc3RfYWxsb2NfaW5kZXgoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgZW51bSB0cGhfbWVtX3R5cGUgbWVtX3R5cGUsXFxuIFxcdG11dGV4X3VubG9jayhcXHUwMDI2c3QtXFx1MDAzZWxvY2spO1xcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuK0VYUE9SVF9TWU1CT0xfR1BMKG1seDVfc3RfYWxsb2NfaW5kZXhfYnlfdGFnKTtcXG4rXFxuK2ludCBtbHg1X3N0X2FsbG9jX2luZGV4KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIGVudW0gdHBoX21lbV90eXBlIG1lbV90eXBlLFxcbitcXHRcXHRcXHR1bnNpZ25lZCBpbnQgY3B1X3VpZCwgdTE2ICpzdF9pbmRleClcXG4re1xcbitcXHR1MTYgdGFnO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cmV0ID0gcGNpZV90cGhfZ2V0X2NwdV9zdChkZXYtXFx1MDAzZXBkZXYsIG1lbV90eXBlLCBjcHVfdWlkLCBcXHUwMDI2dGFnKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldHVybiBtbHg1X3N0X2FsbG9jX2luZGV4X2J5X3RhZyhkZXYsIHRhZywgc3RfaW5kZXgpO1xcbit9XFxuIEVYUE9SVF9TWU1CT0xfR1BMKG1seDVfc3RfYWxsb2NfaW5kZXgpO1xcbiBcXG4raW50IG1seDVfc3RfZ2V0X2luZGV4KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIHUxNiBzdF9pbmRleClcXG4re1xcbitcXHRzdHJ1Y3QgbWx4NV9zdF9pZHhfZGF0YSAqaWR4X2RhdGE7XFxuK1xcdHN0cnVjdCBtbHg1X3N0ICpzdCA9IGRldi1cXHUwMDNlc3Q7XFxuK1xcdGludCByZXQgPSAwO1xcbitcXG4rXFx0aWYgKCFzdClcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXG4rXFx0aWYgKHN0LVxcdTAwM2VkaXJlY3RfbW9kZSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZzdC1cXHUwMDNlbG9jayk7XFxuK1xcdGlkeF9kYXRhID0geGFfbG9hZChcXHUwMDI2c3QtXFx1MDAzZWlkeF94YSwgc3RfaW5kZXgpO1xcbitcXHRpZiAoV0FSTl9PTl9PTkNFKCFpZHhfZGF0YSkpXFxuK1xcdFxcdHJldCA9IC1FSU5WQUw7XFxuK1xcdGVsc2VcXG4rXFx0XFx0cmVmY291bnRfaW5jKFxcdTAwMjZpZHhfZGF0YS1cXHUwMDNldXNlY291bnQpO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnN0LVxcdTAwM2Vsb2NrKTtcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwobWx4NV9zdF9nZXRfaW5kZXgpO1xcbitcXG4gaW50IG1seDVfc3RfZGVhbGxvY19pbmRleChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCB1MTYgc3RfaW5kZXgpXFxuIHtcXG4gXFx0c3RydWN0IG1seDVfc3RfaWR4X2RhdGEgKmlkeF9kYXRhO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS90cGguYyBiL2RyaXZlcnMvcGNpL3RwaC5jXFxuaW5kZXggOTExNDVlOGQ5ZDk1MTIuLjcxN2I0N2QxZDljYWNlIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvcGNpL3RwaC5jXFxuKysrIGIvZHJpdmVycy9wY2kvdHBoLmNcXG5AQCAtMTc0LDYgKzE3NCw1MSBAQCB1MzIgcGNpZV90cGhfZ2V0X3N0X3RhYmxlX2xvYyhzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4gfVxcbiBFWFBPUlRfU1lNQk9MKHBjaWVfdHBoX2dldF9zdF90YWJsZV9sb2MpO1xcbiBcXG4rLyoqXFxuKyAqIHBjaWVfdHBoX2VuYWJsZWRfcmVxX3R5cGUgLSBSZXR1cm4gdGhlIGRldmljZSdzIGVuYWJsZWQgVFBIIHJlcXVlc3RlciB0eXBlXFxuKyAqIEBwZGV2OiBQQ0kgZGV2aWNlIHRvIHF1ZXJ5XFxuKyAqXFxuKyAqIFJldHVybjogUENJX1RQSF9SRVFfRElTQUJMRSwgUENJX1RQSF9SRVFfVFBIX09OTFkgb3IgUENJX1RQSF9SRVFfRVhUX1RQSC5cXG4rICovXFxuK3U4IHBjaWVfdHBoX2VuYWJsZWRfcmVxX3R5cGUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuK3tcXG4rXFx0cmV0dXJuIHBkZXYtXFx1MDAzZXRwaF9yZXFfdHlwZTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MKHBjaWVfdHBoX2VuYWJsZWRfcmVxX3R5cGUpO1xcbitcXG4rLyoqXFxuKyAqIHBjaWVfdHBoX2NvbXBsZXRlcl90eXBlIC0gUmV0dXJuIHRoZSBkZXZpY2UncyBUUEggQ29tcGxldGVyIHN1cHBvcnRcXG4rICogQHBkZXY6IFBDSSBkZXZpY2UgdG8gcXVlcnlcXG4rICpcXG4rICogUmVhZHMgdGhlIFxcXCJUUEggQ29tcGxldGVyIFN1cHBvcnRlZFxcXCIgZmllbGQgKGJpdHMgMTM6MTIpIG9mIERldmljZVxcbisgKiBDYXBhYmlsaXRpZXMgMi4gVGhlIHJlc2VydmVkIDBiMTAgZW5jb2RpbmcgaXMgZm9sZGVkIGludG9cXG4rICogXFxcIm5vdCBzdXBwb3J0ZWRcXFwiIHNvIGNhbGxlcnMgb25seSBuZWVkIHRvIGNvbXBhcmUgYWdhaW5zdCB0aGUgdGhyZWVcXG4rICogZGVmaW5lZCB2YWx1ZXMuXFxuKyAqXFxuKyAqIFJldHVybjogb25lIG9mICVQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfTk9ORSxcXG4rICogICAgICAgICAlUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX1RQSF9PTkxZIG9yXFxuKyAqICAgICAgICAgJVBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9FWFRfVFBILlxcbisgKi9cXG4rdTggcGNpZV90cGhfY29tcGxldGVyX3R5cGUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuK3tcXG4rXFx0dTMyIHJlZztcXG4rXFxuK1xcdGlmIChwY2llX2NhcGFiaWxpdHlfcmVhZF9kd29yZChwZGV2LCBQQ0lfRVhQX0RFVkNBUDIsIFxcdTAwMjZyZWcpKVxcbitcXHRcXHRyZXR1cm4gUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX05PTkU7XFxuK1xcdGlmIChQQ0lfUE9TU0lCTEVfRVJST1IocmVnKSlcXG4rXFx0XFx0cmV0dXJuIFBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9OT05FO1xcbitcXG4rXFx0c3dpdGNoIChGSUVMRF9HRVQoUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX01BU0ssIHJlZykpIHtcXG4rXFx0Y2FzZSBQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfVFBIX09OTFk6XFxuK1xcdFxcdHJldHVybiBQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfVFBIX09OTFk7XFxuK1xcdGNhc2UgUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX0VYVF9UUEg6XFxuK1xcdFxcdHJldHVybiBQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfRVhUX1RQSDtcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0cmV0dXJuIFBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9OT05FO1xcbitcXHR9XFxuK31cXG4rRVhQT1JUX1NZTUJPTChwY2llX3RwaF9jb21wbGV0ZXJfdHlwZSk7XFxuK1xcbiAvKlxcbiAgKiBSZXR1cm4gdGhlIHNpemUgb2YgU1QgdGFibGUuIElmIFNUIHRhYmxlIGlzIG5vdCBpbiBUUEggUmVxdWVzdGVyIEV4dGVuZGVkXFxuICAqIENhcGFiaWxpdHkgc3BhY2UsIHJldHVybiAwLiBPdGhlcndpc2UgcmV0dXJuIHRoZSBTVCBUYWJsZSBTaXplICsgMS5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuY1xcbmluZGV4IGEyOGYxZTk5MzYyYzFlLi5jN2Q2OTAyYmM2MWIwNyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuY1xcbisrKyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jXFxuQEAgLTE1NzIsNiArMTU3Miw5IEBAIGludCB2ZmlvX3BjaV9jb3JlX2lvY3RsX2ZlYXR1cmUoc3RydWN0IHZmaW9fZGV2aWNlICpkZXZpY2UsIHUzMiBmbGFncyxcXG4gXFx0XFx0cmV0dXJuIHZmaW9fcGNpX2NvcmVfZmVhdHVyZV90b2tlbih2ZGV2LCBmbGFncywgYXJnLCBhcmdzeik7XFxuIFxcdGNhc2UgVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGOlxcbiBcXHRcXHRyZXR1cm4gdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWYodmRldiwgZmxhZ3MsIGFyZywgYXJnc3opO1xcbitcXHRjYXNlIFZGSU9fREVWSUNFX0ZFQVRVUkVfRE1BX0JVRl9UUEg6XFxuK1xcdFxcdHJldHVybiB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl90cGgodmRldiwgZmxhZ3MsIGFyZyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0IGFyZ3N6KTtcXG4gXFx0ZGVmYXVsdDpcXG4gXFx0XFx0cmV0dXJuIC1FTk9UVFk7XFxuIFxcdH1cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmNcXG5pbmRleCBjMTZmNDYwYzAxZDY4MS4uZDZmNWRkMzIxMDAwOWMgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuY1xcbisrKyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmNcXG5AQCAtMyw2ICszLDcgQEBcXG4gICovXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9kbWEtYnVmLW1hcHBpbmcuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BjaS1wMnBkbWEuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BjaS10cGguaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RtYS1yZXN2LmhcXHUwMDNlXFxuIFxcbiAjaW5jbHVkZSBcXFwidmZpb19wY2lfcHJpdi5oXFxcIlxcbkBAIC0xOSw3ICsyMCwxNCBAQCBzdHJ1Y3QgdmZpb19wY2lfZG1hX2J1ZiB7XFxuIFxcdHUzMiBucl9yYW5nZXM7XFxuIFxcdHN0cnVjdCBrcmVmIGtyZWY7XFxuIFxcdHN0cnVjdCBjb21wbGV0aW9uIGNvbXA7XFxuLVxcdHU4IHJldm9rZWQgOiAxO1xcbitcXG4rXFx0LyogUHJvdGVjdGVkIGJ5IGRtYWJ1Zi1cXHUwMDNlcmVzdi4gKi9cXG4rXFx0dTE2IHRwaF9zdF9leHQ7XFxuK1xcdHU4IHRwaF9zdDtcXG4rXFx0dTggcmV2b2tlZDoxO1xcbitcXHR1OCB0cGhfc3RfdmFsaWQ6MTtcXG4rXFx0dTggdHBoX3N0X2V4dF92YWxpZDoxO1xcbitcXHR1OCB0cGhfcGg6MjtcXG4gfTtcXG4gXFxuIHN0YXRpYyBpbnQgdmZpb19wY2lfZG1hX2J1Zl9hdHRhY2goc3RydWN0IGRtYV9idWYgKmRtYWJ1ZixcXG5AQCAtNjksNiArNzcsMjYgQEAgdmZpb19wY2lfZG1hX2J1Zl9tYXAoc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNobWVudCxcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4rc3RhdGljIGludCB2ZmlvX3BjaV9kbWFfYnVmX2dldF9wY2lfdHBoKHN0cnVjdCBkbWFfYnVmICpkbWFidWYsIGJvb2wgZXh0ZW5kZWQsXFxuK1xcdFxcdFxcdFxcdFxcdHUxNiAqc3RlZXJpbmdfdGFnLCB1OCAqcGgpXFxuK3tcXG4rXFx0c3RydWN0IHZmaW9fcGNpX2RtYV9idWYgKnByaXYgPSBkbWFidWYtXFx1MDAzZXByaXY7XFxuK1xcbitcXHRkbWFfcmVzdl9hc3NlcnRfaGVsZChkbWFidWYtXFx1MDAzZXJlc3YpO1xcbitcXG4rXFx0aWYgKGV4dGVuZGVkKSB7XFxuK1xcdFxcdGlmICghcHJpdi1cXHUwMDNldHBoX3N0X2V4dF92YWxpZClcXG4rXFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHRcXHQqc3RlZXJpbmdfdGFnID0gcHJpdi1cXHUwMDNldHBoX3N0X2V4dDtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0aWYgKCFwcml2LVxcdTAwM2V0cGhfc3RfdmFsaWQpXFxuK1xcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0XFx0KnN0ZWVyaW5nX3RhZyA9IHByaXYtXFx1MDAzZXRwaF9zdDtcXG4rXFx0fVxcbitcXHQqcGggPSBwcml2LVxcdTAwM2V0cGhfcGg7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCB2ZmlvX3BjaV9kbWFfYnVmX3VubWFwKHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaG1lbnQsXFxuIFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBzZ190YWJsZSAqc2d0LFxcbiBcXHRcXHRcXHRcXHQgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpXFxuQEAgLTEwMSw2ICsxMjksNyBAQCBzdGF0aWMgdm9pZCB2ZmlvX3BjaV9kbWFfYnVmX3JlbGVhc2Uoc3RydWN0IGRtYV9idWYgKmRtYWJ1ZilcXG4gXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZG1hX2J1Zl9vcHMgdmZpb19wY2lfZG1hYnVmX29wcyA9IHtcXG4gXFx0LmF0dGFjaCA9IHZmaW9fcGNpX2RtYV9idWZfYXR0YWNoLFxcbitcXHQuZ2V0X3BjaV90cGggPSB2ZmlvX3BjaV9kbWFfYnVmX2dldF9wY2lfdHBoLFxcbiBcXHQubWFwX2RtYV9idWYgPSB2ZmlvX3BjaV9kbWFfYnVmX21hcCxcXG4gXFx0LnVubWFwX2RtYV9idWYgPSB2ZmlvX3BjaV9kbWFfYnVmX3VubWFwLFxcbiBcXHQucmVsZWFzZSA9IHZmaW9fcGNpX2RtYV9idWZfcmVsZWFzZSxcXG5AQCAtMzMzLDYgKzM2Miw3MiBAQCBpbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWYoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCB1MzIgZmxhZ3MsXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuK2ludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl90cGgoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LFxcbitcXHRcXHRcXHRcXHQgICAgICB1MzIgZmxhZ3MsXFxuK1xcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX2RtYV9idWZfdHBoIF9fdXNlciAqYXJnLFxcbitcXHRcXHRcXHRcXHQgICAgICBzaXplX3QgYXJnc3opXFxuK3tcXG4rXFx0c3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfZG1hX2J1Zl90cGggc2V0X3RwaDtcXG4rXFx0c3RydWN0IHZmaW9fcGNpX2RtYV9idWYgKnByaXY7XFxuK1xcdHN0cnVjdCBkbWFfYnVmICpkbWFidWY7XFxuK1xcdHU4IGNvbXA7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRjb21wID0gcGNpZV90cGhfY29tcGxldGVyX3R5cGUodmRldi1cXHUwMDNlcGRldik7XFxuK1xcdGlmIChjb21wID09IFBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9OT05FKVxcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcbitcXHRyZXQgPSB2ZmlvX2NoZWNrX2ZlYXR1cmUoZmxhZ3MsIGFyZ3N6LCBWRklPX0RFVklDRV9GRUFUVVJFX1NFVCxcXG4rXFx0XFx0XFx0XFx0IHNpemVvZihzZXRfdHBoKSk7XFxuK1xcdGlmIChyZXQgIT0gMSlcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdGlmIChjb3B5X2Zyb21fdXNlcihcXHUwMDI2c2V0X3RwaCwgYXJnLCBzaXplb2Yoc2V0X3RwaCkpKVxcbitcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4rXFxuK1xcdGlmIChzZXRfdHBoLmZsYWdzIFxcdTAwMjYgfihWRklPX0RNQV9CVUZfVFBIX1NUIHwgVkZJT19ETUFfQlVGX1RQSF9TVF9FWFQpKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdGlmIChzZXRfdHBoLnBoIFxcdTAwMjYgfjB4MylcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRpZiAoKHNldF90cGguZmxhZ3MgXFx1MDAyNiBWRklPX0RNQV9CVUZfVFBIX1NUX0VYVCkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIGNvbXAgIT0gUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX0VYVF9UUEgpXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFxuK1xcdGRtYWJ1ZiA9IGRtYV9idWZfZ2V0KHNldF90cGguZG1hYnVmX2ZkKTtcXG4rXFx0aWYgKElTX0VSUihkbWFidWYpKVxcbitcXHRcXHRyZXR1cm4gUFRSX0VSUihkbWFidWYpO1xcbitcXG4rXFx0aWYgKGRtYWJ1Zi1cXHUwMDNlb3BzICE9IFxcdTAwMjZ2ZmlvX3BjaV9kbWFidWZfb3BzKSB7XFxuK1xcdFxcdHJldCA9IC1FSU5WQUw7XFxuK1xcdFxcdGdvdG8gb3V0X3B1dDtcXG4rXFx0fVxcbitcXG4rXFx0cHJpdiA9IGRtYWJ1Zi1cXHUwMDNlcHJpdjtcXG4rXFx0aWYgKHByaXYtXFx1MDAzZXZkZXYgIT0gdmRldikge1xcbitcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbitcXHRcXHRnb3RvIG91dF9wdXQ7XFxuK1xcdH1cXG4rXFxuK1xcdHJldCA9IGRtYV9yZXN2X2xvY2tfaW50ZXJydXB0aWJsZShkbWFidWYtXFx1MDAzZXJlc3YsIE5VTEwpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIG91dF9wdXQ7XFxuK1xcbitcXHRwcml2LVxcdTAwM2V0cGhfc3QgICAgICAgICA9IHNldF90cGguc3RlZXJpbmdfdGFnO1xcbitcXHRwcml2LVxcdTAwM2V0cGhfc3RfZXh0ICAgICA9IHNldF90cGguc3RlZXJpbmdfdGFnX2V4dDtcXG4rXFx0cHJpdi1cXHUwMDNldHBoX3BoICAgICAgICAgPSBzZXRfdHBoLnBoO1xcbitcXHRwcml2LVxcdTAwM2V0cGhfc3RfdmFsaWQgICA9ICEhKHNldF90cGguZmxhZ3MgXFx1MDAyNiBWRklPX0RNQV9CVUZfVFBIX1NUKTtcXG4rXFx0cHJpdi1cXHUwMDNldHBoX3N0X2V4dF92YWxpZCA9XFxuK1xcdFxcdCEhKHNldF90cGguZmxhZ3MgXFx1MDAyNiBWRklPX0RNQV9CVUZfVFBIX1NUX0VYVCk7XFxuK1xcdGRtYV9yZXN2X3VubG9jayhkbWFidWYtXFx1MDAzZXJlc3YpO1xcbitcXHRyZXQgPSAwO1xcbitcXG4rb3V0X3B1dDpcXG4rXFx0ZG1hX2J1Zl9wdXQoZG1hYnVmKTtcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4gdm9pZCB2ZmlvX3BjaV9kbWFfYnVmX21vdmUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCBib29sIHJldm9rZWQpXFxuIHtcXG4gXFx0c3RydWN0IHZmaW9fcGNpX2RtYV9idWYgKnByaXY7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfcHJpdi5oIGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9wcml2LmhcXG5pbmRleCBmY2E5ZDBkZmFjOTBmOC4uYzU4ZjM2OWJlNGIzOTggMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9wcml2LmhcXG4rKysgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX3ByaXYuaFxcbkBAIC0xMTgsNiArMTE4LDEwIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB2ZmlvX3BjaV9pc192Z2Eoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuIGludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1ZihzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIHUzMiBmbGFncyxcXG4gXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV9kbWFfYnVmIF9fdXNlciAqYXJnLFxcbiBcXHRcXHRcXHRcXHQgIHNpemVfdCBhcmdzeik7XFxuK2ludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl90cGgoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LFxcbitcXHRcXHRcXHRcXHQgICAgICB1MzIgZmxhZ3MsXFxuK1xcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX2RtYV9idWZfdHBoIF9fdXNlciAqYXJnLFxcbitcXHRcXHRcXHRcXHQgICAgICBzaXplX3QgYXJnc3opO1xcbiB2b2lkIHZmaW9fcGNpX2RtYV9idWZfY2xlYW51cChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpO1xcbiB2b2lkIHZmaW9fcGNpX2RtYV9idWZfbW92ZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIGJvb2wgcmV2b2tlZCk7XFxuICNlbHNlXFxuQEAgLTEyOCw2ICsxMzIsMTQgQEAgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWYoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCB1MzIgZmxhZ3MsXFxuIHtcXG4gXFx0cmV0dXJuIC1FTk9UVFk7XFxuIH1cXG4rXFxuK3N0YXRpYyBpbmxpbmUgaW50XFxuK3ZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3RwaChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIHUzMiBmbGFncyxcXG4rXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV9kbWFfYnVmX3RwaCBfX3VzZXIgKmFyZyxcXG4rXFx0XFx0XFx0XFx0ICBzaXplX3QgYXJnc3opXFxuK3tcXG4rXFx0cmV0dXJuIC1FTk9UVFk7XFxuK31cXG4gc3RhdGljIGlubGluZSB2b2lkIHZmaW9fcGNpX2RtYV9idWZfY2xlYW51cChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpXFxuIHtcXG4gfVxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RtYS1idWYuaCBiL2luY2x1ZGUvbGludXgvZG1hLWJ1Zi5oXFxuaW5kZXggZDEyMDNkYTU2ZmM1ZjcuLjUzYjI2ODZhZDhmYzY3IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvZG1hLWJ1Zi5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9kbWEtYnVmLmhcXG5AQCAtMTEzLDYgKzExMywyNiBAQCBzdHJ1Y3QgZG1hX2J1Zl9vcHMge1xcbiBcXHQgKi9cXG4gXFx0dm9pZCAoKnVucGluKShzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2gpO1xcbiBcXG4rXFx0LyoqXFxuK1xcdCAqIEBnZXRfcGNpX3RwaDpcXG4rXFx0ICpcXG4rXFx0ICogUmV0cmlldmUgUENJZSBUTFAgUHJvY2Vzc2luZyBIaW50IChUUEgpIHN0ZWVyaW5nIG1ldGFkYXRhIGZvclxcbitcXHQgKiB0aGlzIGJ1ZmZlciBzbyBhbiBpbXBvcnRlciBjYW4gcHJvZ3JhbSBhIG1hdGNoaW5nIFNUL1BIIGhpbnQgb25cXG4rXFx0ICogb3V0Ym91bmQgVExQcyB0YXJnZXRpbmcgdGhlIGV4cG9ydGVyIGZvciBwZWVyLXRvLXBlZXIgRE1BLlxcbitcXHQgKlxcbitcXHQgKiBAZG1hYnVmOiBETUEgYnVmZmVyIGZvciB3aGljaCB0byByZXRyaWV2ZSBUUEggbWV0YWRhdGFcXG4rXFx0ICogQGV4dGVuZGVkOiBmYWxzZSBmb3IgOC1iaXQgU1QsIHRydWUgZm9yIDE2LWJpdCBFeHRlbmRlZCBTVFxcbitcXHQgKiBAc3RlZXJpbmdfdGFnOiBSZXR1cm5zIHRoZSByYXcgVFBIIHN0ZWVyaW5nIHRhZyBmb3IgdGhlIHJlcXVlc3RlZFxcbitcXHQgKiAgICAgICAgICAgICAgICBuYW1lc3BhY2VcXG4rXFx0ICogQHBoOiBSZXR1cm5zIHRoZSBUUEggcHJvY2Vzc2luZyBoaW50ICgyLWJpdCB2YWx1ZSlcXG4rXFx0ICpcXG4rXFx0ICogT3B0aW9uYWwgY2FsbGJhY2sgZm9yIGRtYV9idWZfZ2V0X3BjaV90cGgoKS4gQ2FsbGVkIHdpdGhcXG4rXFx0ICogXFx1MDAyNmRtYV9idWYucmVzdiBoZWxkLiBSZXR1cm5zIDAgb24gc3VjY2VzcyBvciAtRU9QTk9UU1VQUCB3aGVuXFxuK1xcdCAqIHRoZSBleHBvcnRlciBoYXMgbm8gbWV0YWRhdGEgZm9yIHRoZSByZXF1ZXN0ZWQgbmFtZXNwYWNlLlxcbitcXHQgKi9cXG4rXFx0aW50ICgqZ2V0X3BjaV90cGgpKHN0cnVjdCBkbWFfYnVmICpkbWFidWYsIGJvb2wgZXh0ZW5kZWQsXFxuK1xcdFxcdFxcdCAgIHUxNiAqc3RlZXJpbmdfdGFnLCB1OCAqcGgpO1xcbitcXG4gXFx0LyoqXFxuIFxcdCAqIEBtYXBfZG1hX2J1ZjpcXG4gXFx0ICpcXG5AQCAtNTYzLDYgKzU4Myw4IEBAIHZvaWQgZG1hX2J1Zl9kZXRhY2goc3RydWN0IGRtYV9idWYgKmRtYWJ1ZixcXG4gXFx0XFx0ICAgIHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaCk7XFxuIGludCBkbWFfYnVmX3BpbihzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2gpO1xcbiB2b2lkIGRtYV9idWZfdW5waW4oc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoKTtcXG4raW50IGRtYV9idWZfZ2V0X3BjaV90cGgoc3RydWN0IGRtYV9idWYgKmRtYWJ1ZiwgYm9vbCBleHRlbmRlZCxcXG4rXFx0XFx0XFx0dTE2ICpzdGVlcmluZ190YWcsIHU4ICpwaCk7XFxuIFxcbiBzdHJ1Y3QgZG1hX2J1ZiAqZG1hX2J1Zl9leHBvcnQoY29uc3Qgc3RydWN0IGRtYV9idWZfZXhwb3J0X2luZm8gKmV4cF9pbmZvKTtcXG4gXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWx4NS9kcml2ZXIuaCBiL2luY2x1ZGUvbGludXgvbWx4NS9kcml2ZXIuaFxcbmluZGV4IGIxODcxYzA4MjFkMGI5Li44YjM5MTExOTFmYjYyNiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L21seDUvZHJpdmVyLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L21seDUvZHJpdmVyLmhcXG5AQCAtMTE4MiwxMCArMTE4MiwyMyBAQCBpbnQgbWx4NV9kbV9zd19pY21fZGVhbGxvYyhzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCBlbnVtIG1seDVfc3dfaWNtX3R5cGUgdHlwZVxcbiBcXHRcXHRcXHQgICB1NjQgbGVuZ3RoLCB1MTYgdWlkLCBwaHlzX2FkZHJfdCBhZGRyLCB1MzIgb2JqX2lkKTtcXG4gXFxuICNpZmRlZiBDT05GSUdfUENJRV9UUEhcXG4raW50IG1seDVfc3RfYWxsb2NfaW5kZXhfYnlfdGFnKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIHUxNiB0YWcsXFxuK1xcdFxcdFxcdCAgICAgICB1MTYgKnN0X2luZGV4KTtcXG4raW50IG1seDVfc3RfZ2V0X2luZGV4KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIHUxNiBzdF9pbmRleCk7XFxuIGludCBtbHg1X3N0X2FsbG9jX2luZGV4KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIGVudW0gdHBoX21lbV90eXBlIG1lbV90eXBlLFxcbiBcXHRcXHRcXHR1bnNpZ25lZCBpbnQgY3B1X3VpZCwgdTE2ICpzdF9pbmRleCk7XFxuIGludCBtbHg1X3N0X2RlYWxsb2NfaW5kZXgoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgdTE2IHN0X2luZGV4KTtcXG4gI2Vsc2VcXG4rc3RhdGljIGlubGluZSBpbnQgbWx4NV9zdF9hbGxvY19pbmRleF9ieV90YWcoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICB1MTYgdGFnLCB1MTYgKnN0X2luZGV4KVxcbit7XFxuK1xcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSBpbnQgbWx4NV9zdF9nZXRfaW5kZXgoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgdTE2IHN0X2luZGV4KVxcbit7XFxuK1xcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rfVxcbiBzdGF0aWMgaW5saW5lIGludCBtbHg1X3N0X2FsbG9jX2luZGV4KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsXFxuIFxcdFxcdFxcdFxcdCAgICAgIGVudW0gdHBoX21lbV90eXBlIG1lbV90eXBlLFxcbiBcXHRcXHRcXHRcXHQgICAgICB1bnNpZ25lZCBpbnQgY3B1X3VpZCwgdTE2ICpzdF9pbmRleClcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wY2ktdHBoLmggYi9pbmNsdWRlL2xpbnV4L3BjaS10cGguaFxcbmluZGV4IGJlNjhjZDE3ZjJmODMzLi43NzQzYWY2ZmU0MzI2ZSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BjaS10cGguaFxcbisrKyBiL2luY2x1ZGUvbGludXgvcGNpLXRwaC5oXFxuQEAgLTksNiArOSw4IEBAXFxuICNpZm5kZWYgTElOVVhfUENJX1RQSF9IXFxuICNkZWZpbmUgTElOVVhfUENJX1RQSF9IXFxuIFxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcGNpX3JlZ3MuaFxcdTAwM2VcXG4rXFxuIC8qXFxuICAqIEFjY29yZGluZyB0byB0aGUgRUNOIGZvciBQQ0kgRmlybXdhcmUgU3BlYywgU3RlZXJpbmcgVGFnIGNhbiBiZSBkaWZmZXJlbnRcXG4gICogZGVwZW5kaW5nIG9uIHRoZSBtZW1vcnkgdHlwZTogVm9sYXRpbGUgTWVtb3J5IG9yIFBlcnNpc3RlbnQgTWVtb3J5LiBXaGVuIGFcXG5AQCAtMzAsNiArMzIsOCBAQCB2b2lkIHBjaWVfZGlzYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYpO1xcbiBpbnQgcGNpZV9lbmFibGVfdHBoKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbW9kZSk7XFxuIHUxNiBwY2llX3RwaF9nZXRfc3RfdGFibGVfc2l6ZShzdHJ1Y3QgcGNpX2RldiAqcGRldik7XFxuIHUzMiBwY2llX3RwaF9nZXRfc3RfdGFibGVfbG9jKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTtcXG4rdTggcGNpZV90cGhfZW5hYmxlZF9yZXFfdHlwZShzdHJ1Y3QgcGNpX2RldiAqcGRldik7XFxuK3U4IHBjaWVfdHBoX2NvbXBsZXRlcl90eXBlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTtcXG4gI2Vsc2VcXG4gc3RhdGljIGlubGluZSBpbnQgcGNpZV90cGhfc2V0X3N0X2VudHJ5KHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbiBcXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgaW5kZXgsIHUxNiB0YWcpXFxuQEAgLTQxLDYgKzQ1LDEwIEBAIHN0YXRpYyBpbmxpbmUgaW50IHBjaWVfdHBoX2dldF9jcHVfc3Qoc3RydWN0IHBjaV9kZXYgKmRldixcXG4gc3RhdGljIGlubGluZSB2b2lkIHBjaWVfZGlzYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYpIHsgfVxcbiBzdGF0aWMgaW5saW5lIGludCBwY2llX2VuYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBtb2RlKVxcbiB7IHJldHVybiAtRUlOVkFMOyB9XFxuK3N0YXRpYyBpbmxpbmUgdTggcGNpZV90cGhfZW5hYmxlZF9yZXFfdHlwZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4reyByZXR1cm4gUENJX1RQSF9SRVFfRElTQUJMRTsgfVxcbitzdGF0aWMgaW5saW5lIHU4IHBjaWVfdHBoX2NvbXBsZXRlcl90eXBlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbit7IHJldHVybiBQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfTk9ORTsgfVxcbiAjZW5kaWZcXG4gXFxuICNlbmRpZiAvKiBMSU5VWF9QQ0lfVFBIX0ggKi9cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaCBiL2luY2x1ZGUvdWFwaS9saW51eC92ZmlvLmhcXG5pbmRleCA1ZGU2MThhM2E1ZWVlZS4uMmQzMGJhNDNlMmNmZjUgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaFxcbisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC92ZmlvLmhcXG5AQCAtMTUzNCw2ICsxNTM0LDQzIEBAIHN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX2RtYV9idWYge1xcbiAgKi9cXG4gI2RlZmluZSBWRklPX0RFVklDRV9GRUFUVVJFX01JR19QUkVDT1BZX0lORk92MiAgMTJcXG4gXFxuKy8qKlxcbisgKiBVcG9uIFZGSU9fREVWSUNFX0ZFQVRVUkVfU0VUIGFzc29jaWF0ZSBUUEggKFRMUCBQcm9jZXNzaW5nIEhpbnRzKSBtZXRhZGF0YVxcbisgKiB3aXRoIGEgdmZpby1leHBvcnRlZCBkbWEtYnVmLiBUaGUgZG1hLWJ1ZiBtdXN0IGhhdmUgYmVlbiBjcmVhdGVkIGJ5XFxuKyAqIFZGSU9fREVWSUNFX0ZFQVRVUkVfRE1BX0JVRiBvbiB0aGlzIGRldmljZSwgYW5kIHRoZSBkZXZpY2UgbXVzdCByZXBvcnRcXG4rICogVFBIIENvbXBsZXRlciBzdXBwb3J0IGluIERldmljZSBDYXBhYmlsaXRpZXMgMiAoYml0cyAxMzoxMik7IHJlcXVlc3RzXFxuKyAqIGNhcnJ5aW5nIFZGSU9fRE1BX0JVRl9UUEhfU1RfRVhUIGFkZGl0aW9uYWxseSByZXF1aXJlIHRoZSBkZXZpY2UgdG9cXG4rICogcmVwb3J0IHRoZSBFeHRlbmRlZCBUUEggQ29tcGxldGVyIGVuY29kaW5nLiBPdGhlcndpc2UgdGhlIGlvY3RsXFxuKyAqIHJldHVybnMgLUVPUE5PVFNVUFAuXFxuKyAqXFxuKyAqIGRtYWJ1Zl9mZCBpcyB0aGUgZmlsZSBkZXNjcmlwdG9yIHJldHVybmVkIGJ5IFZGSU9fREVWSUNFX0ZFQVRVUkVfRE1BX0JVRi5cXG4rICpcXG4rICogOC1iaXQgU1QgKHN0ZWVyaW5nX3RhZykgYW5kIDE2LWJpdCBFeHRlbmRlZCBTVCAoc3RlZXJpbmdfdGFnX2V4dCkgYXJlXFxuKyAqIGRpc3RpbmN0IG5hbWVzcGFjZXMuIFVzZXJzcGFjZSBzdXBwbGllcyB3aGljaGV2ZXIgdmFsdWVzIGFyZSB2YWxpZCBhbmQgc2V0c1xcbisgKiB0aGUgbWF0Y2hpbmcgVkZJT19ETUFfQlVGX1RQSF9TVCAvIFZGSU9fRE1BX0JVRl9UUEhfU1RfRVhUIGJpdHMgaW4gQGZsYWdzO1xcbisgKiBhbiBpbXBvcnRlciByZXF1ZXN0cyBvbmUgbmFtZXNwYWNlIGFuZCByZWNlaXZlcyB0aGUgbWF0Y2hpbmcgdmFsdWUuXFxuKyAqXFxuKyAqIEBmbGFncyA9PSAwIG1hcmtzIGFueSBwcmV2aW91c2x5IHB1Ymxpc2hlZCBTVCAvIEV4dGVuZGVkLVNUIGFzIGludmFsaWRcXG4rICogZm9yIGZ1dHVyZSBQQ0kgVFBIIHF1ZXJpZXMgb24gdGhpcyBkbWEtYnVmLlxcbisgKlxcbisgKiBwaCBpcyB0aGUgMi1iaXQgVExQIFByb2Nlc3NpbmcgSGludCBhbmQgbXVzdCBiZSBpbiB0aGUgcmFuZ2UgWzAsIDNdLlxcbisgKlxcbisgKiBVc2Vyc3BhY2UgbXVzdCBwdWJsaXNoIFRQSCBiZWZvcmUgaGFuZGluZyB0aGUgZG1hLWJ1ZiBmZCB0byBhbiBpbXBvcnRlci5cXG4rICogQ2FsbGluZyBTRVQgYWdhaW4gcmVwbGFjZXMgdGhlIHB1Ymxpc2hlZCB2YWx1ZXMuXFxuKyAqL1xcbisjZGVmaW5lIFZGSU9fREVWSUNFX0ZFQVRVUkVfRE1BX0JVRl9UUEggMTNcXG4rXFxuKyNkZWZpbmUgVkZJT19ETUFfQlVGX1RQSF9TVFxcdFxcdCgxIFxcdTAwM2NcXHUwMDNjIDApXFxuKyNkZWZpbmUgVkZJT19ETUFfQlVGX1RQSF9TVF9FWFRcXHRcXHQoMSBcXHUwMDNjXFx1MDAzYyAxKVxcbitcXG4rc3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfZG1hX2J1Zl90cGgge1xcbitcXHRfX3MzMlxcdGRtYWJ1Zl9mZDtcXG4rXFx0X191MzJcXHRmbGFncztcXG4rXFx0X191MTZcXHRzdGVlcmluZ190YWdfZXh0O1xcbitcXHRfX3U4XFx0c3RlZXJpbmdfdGFnO1xcbitcXHRfX3U4XFx0cGg7XFxuK307XFxuK1xcbiAvKiAtLS0tLS0tLSBBUEkgZm9yIFR5cGUxIFZGSU8gSU9NTVUgLS0tLS0tLS0gKi9cXG4gXFxuIC8qKlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQxOToxMzozOC42NTYxNTA1MzRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU2MDg0MzUwMzcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBDSUVfVFBIXCIsXG4gICAgXCJWRklPX1BDSVwiLFxuICAgIFwiUENJX1AyUERNQVwiLFxuICAgIFwiTUxYNV9JTkZJTklCQU5EXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWZfdHBoXCIsXG4gICAgXCJ2ZmlvX3BjaV9kbWFfYnVmX2dldF9wY2lfdHBoXCIsXG4gICAgXCJkbWFfYnVmX2dldF9wY2lfdHBoXCIsXG4gICAgXCJwY2llX3RwaF9lbmFibGVkX3JlcV90eXBlXCIsXG4gICAgXCJwY2llX3RwaF9jb21wbGV0ZXJfdHlwZVwiLFxuICAgIFwibWx4NV9zdF9hbGxvY19pbmRleF9ieV90YWdcIixcbiAgICBcIm1seDVfc3RfZ2V0X2luZGV4XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBWRklPIGlvY3RsIGZlYXR1cmUgYFZGSU9fREVWSUNFX0ZFQVRVUkVfRE1BX0JVRl9UUEhgIHRvIGFzc29jaWF0ZSBQQ0llIFRQSCAoVExQIFByb2Nlc3NpbmcgSGludHMpIG1ldGFkYXRhIHdpdGggYSBETUEtQlVGLiBJdCBhbHNvIGFkZHMgYSBuZXcgYGdldF9wY2lfdHBoYCBjYWxsYmFjayB0byBgZG1hX2J1Zl9vcHNgIGFuZCBpbXBsZW1lbnRzIGl0IGZvciBWRklPIFBDSSBETUEtQlVGcy4gVGhlIE1lbGxhbm94IG1seDUgSW5maW5pYmFuZCBkcml2ZXIgaXMgbW9kaWZpZWQgdG8gcXVlcnkgYW5kIHVzZSB0aGlzIG1ldGFkYXRhLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgRE1BLUJVRiwgVkZJTywgYW5kIG1seDUgbG9naWMgdGhhdCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDIxOGIyNjk5NmZmYTRjOThiYzUxMzA4Y2M5YzA3ZWUwMjU4MjVhN2JcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1biAyMiAxOToxMzozNiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hLWJ1Zi9kbWEtYnVmLmMgYi9kcml2ZXJzL2RtYS1idWYvZG1hLWJ1Zi5jXG5pbmRleCBkNTA0YzYzNmRjMjk0ZS4uN2E0YzliMGQ1ZGFiNDYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2RtYS1idWYvZG1hLWJ1Zi5jXG4rKysgYi9kcml2ZXJzL2RtYS1idWYvZG1hLWJ1Zi5jXG5AQCAtMTE0NCw2ICsxMTQ0LDMxIEBAIHZvaWQgZG1hX2J1Zl91bnBpbihzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2gpXG4gfVxuIEVYUE9SVF9TWU1CT0xfTlNfR1BMKGRtYV9idWZfdW5waW4sIFwiRE1BX0JVRlwiKTtcbiBcbisvKipcbisgKiBkbWFfYnVmX2dldF9wY2lfdHBoIC0gUmV0cmlldmUgUENJZSBUTFAgUHJvY2Vzc2luZyBIaW50IChUUEgpIG1ldGFkYXRhXG4rICogQGRtYWJ1ZjogRE1BIGJ1ZmZlciB0byBxdWVyeVxuKyAqIEBleHRlbmRlZDogZmFsc2UgZm9yIDgtYml0IFNULCB0cnVlIGZvciAxNi1iaXQgRXh0ZW5kZWQgU1RcbisgKiBAc3RlZXJpbmdfdGFnOiByZXR1cm5zIHRoZSByYXcgc3RlZXJpbmcgdGFnIGZvciB0aGUgcmVxdWVzdGVkIG5hbWVzcGFjZVxuKyAqIEBwaDogcmV0dXJucyB0aGUgVFBIIHByb2Nlc3NpbmcgaGludFxuKyAqXG4rICogV3JhcHBlciBmb3IgdGhlIG9wdGlvbmFsIFx1MDAyNmRtYV9idWZfb3BzLmdldF9wY2lfdHBoIGNhbGxiYWNrLlxuKyAqXG4rICogTXVzdCBiZSBjYWxsZWQgd2l0aCBcdTAwMjZkbWFfYnVmLnJlc3YgaGVsZC4gUmV0dXJucyAtRU9QTk9UU1VQUCBpZiB0aGVcbisgKiBleHBvcnRlciBkb2VzIG5vdCBpbXBsZW1lbnQgdGhlIGNhbGxiYWNrIG9yIGhhcyBubyBtZXRhZGF0YSBmb3IgdGhlXG4rICogcmVxdWVzdGVkIG5hbWVzcGFjZS5cbisgKi9cbitpbnQgZG1hX2J1Zl9nZXRfcGNpX3RwaChzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLCBib29sIGV4dGVuZGVkLFxuK1x0XHRcdHUxNiAqc3RlZXJpbmdfdGFnLCB1OCAqcGgpXG4re1xuK1x0ZG1hX3Jlc3ZfYXNzZXJ0X2hlbGQoZG1hYnVmLVx1MDAzZXJlc3YpO1xuK1xuK1x0aWYgKCFkbWFidWYtXHUwMDNlb3BzLVx1MDAzZWdldF9wY2lfdHBoKVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHRyZXR1cm4gZG1hYnVmLVx1MDAzZW9wcy1cdTAwM2VnZXRfcGNpX3RwaChkbWFidWYsIGV4dGVuZGVkLCBzdGVlcmluZ190YWcsIHBoKTtcbit9XG4rRVhQT1JUX1NZTUJPTF9OU19HUEwoZG1hX2J1Zl9nZXRfcGNpX3RwaCwgXCJETUFfQlVGXCIpO1xuK1xuIC8qKlxuICAqIGRtYV9idWZfbWFwX2F0dGFjaG1lbnQgLSBSZXR1cm5zIHRoZSBzY2F0dGVybGlzdCB0YWJsZSBvZiB0aGUgYXR0YWNobWVudDtcbiAgKiBtYXBwZWQgaW50byBfZGV2aWNlXyBhZGRyZXNzIHNwYWNlLiBJcyBhIHdyYXBwZXIgZm9yIG1hcF9kbWFfYnVmKCkgb2YgdGhlXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDUvbWFpbi5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDUvbWFpbi5jXG5pbmRleCAwMjgwOTExNGZjNzlhZi4uYTJiNDk3ZjZiMTZiZGMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NS9tYWluLmNcbisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg1L21haW4uY1xuQEAgLTYwLDYgKzYwLDcgQEBcbiBNT0RVTEVfQVVUSE9SKFwiRWxpIENvaGVuIFx1MDAzY2VsaUBtZWxsYW5veC5jb21cdTAwM2VcIik7XG4gTU9EVUxFX0RFU0NSSVBUSU9OKFwiTWVsbGFub3ggNXRoIGdlbmVyYXRpb24gbmV0d29yayBhZGFwdGVycyAoQ29ubmVjdFggc2VyaWVzKSBJQiBkcml2ZXJcIik7XG4gTU9EVUxFX0xJQ0VOU0UoXCJEdWFsIEJTRC9HUExcIik7XG4rTU9EVUxFX0lNUE9SVF9OUyhcIkRNQV9CVUZcIik7XG4gXG4gc3RydWN0IG1seDVfaWJfZXZlbnRfd29yayB7XG4gXHRzdHJ1Y3Qgd29ya19zdHJ1Y3RcdHdvcms7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDUvbXIuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg1L21yLmNcbmluZGV4IGU2Yjc0OTU1ZDk1ZGNkLi43YWNlZDNmNTU0NTYxZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg1L21yLmNcbisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg1L21yLmNcbkBAIC0zOSw2ICszOSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZGVsYXkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RtYS1idWYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RtYS1yZXN2LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9wY2ktdHBoLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NyZG1hL2ZybXJfcG9vbHMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3JkbWEvaWJfdW1lbV9vZHAuaFx1MDAzZVxuICNpbmNsdWRlIFwiZG0uaFwiXG5AQCAtMTY3LDYgKzE2OCwzMiBAQCBzdGF0aWMgaW50IGdldF91bmNoYW5nZWFibGVfYWNjZXNzX2ZsYWdzKHN0cnVjdCBtbHg1X2liX2RldiAqZGV2LFxuICNkZWZpbmUgTUxYNV9GUk1SX1BPT0xTX0tFUk5FTF9LRVlfUEhfTUFTSyBHRU5NQVNLX1VMTCgyMywgMTYpXG4gI2RlZmluZSBNTFg1X0ZSTVJfUE9PTFNfS0VSTkVMX0tFWV9TVF9JTkRFWF9NQVNLIEdFTk1BU0tfVUxMKDE1LCAwKVxuIFxuK3N0YXRpYyBpbnQgbWx4NV9pYl9nZXRfZnJtcl9zdF9oYW5kbGVfcmVmKHN0cnVjdCBtbHg1X2liX2RldiAqZGV2LFxuK1x0XHRcdFx0XHQgIHUxNiBzdF9pbmRleClcbit7XG4rXHRpZiAoc3RfaW5kZXggPT0gTUxYNV9NS0NfUENJRV9UUEhfTk9fU1RFRVJJTkdfVEFHX0lOREVYKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdHJldHVybiBtbHg1X3N0X2dldF9pbmRleChkZXYtXHUwMDNlbWRldiwgc3RfaW5kZXgpO1xuK31cbitcbitzdGF0aWMgdm9pZCBtbHg1X2liX3B1dF9zdF9pbmRleF9yZWYoc3RydWN0IG1seDVfaWJfZGV2ICpkZXYsIHUxNiBzdF9pbmRleClcbit7XG4rXHRpZiAoc3RfaW5kZXggPT0gTUxYNV9NS0NfUENJRV9UUEhfTk9fU1RFRVJJTkdfVEFHX0lOREVYKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRtbHg1X3N0X2RlYWxsb2NfaW5kZXgoZGV2LVx1MDAzZW1kZXYsIHN0X2luZGV4KTtcbit9XG4rXG4rc3RhdGljIHZvaWQgbWx4NV9pYl9wdXRfZnJtcl9zdF9oYW5kbGVfcmVmKHN0cnVjdCBtbHg1X2liX2RldiAqZGV2LFxuK1x0XHRcdFx0XHQgICB1NjQga2VybmVsX3ZlbmRvcl9rZXkpXG4re1xuK1x0dTE2IHN0X2luZGV4ID0gRklFTERfR0VUKE1MWDVfRlJNUl9QT09MU19LRVJORUxfS0VZX1NUX0lOREVYX01BU0ssXG4rXHRcdFx0XHQga2VybmVsX3ZlbmRvcl9rZXkpO1xuK1xuK1x0bWx4NV9pYl9wdXRfc3RfaW5kZXhfcmVmKGRldiwgc3RfaW5kZXgpO1xuK31cbitcbiBzdGF0aWMgc3RydWN0IG1seDVfaWJfbXIgKlxuIF9tbHg1X2ZybXJfcG9vbF9hbGxvYyhzdHJ1Y3QgbWx4NV9pYl9kZXYgKmRldiwgc3RydWN0IGliX3VtZW0gKnVtZW0sXG4gXHRcdCAgICAgIGludCBhY2Nlc3NfZmxhZ3MsIGludCBhY2Nlc3NfbW9kZSxcbkBAIC0yMTgsNyArMjQ1LDkgQEAgc3RydWN0IG1seDVfaWJfbXIgKm1seDVfbXJfY2FjaGVfYWxsb2Moc3RydWN0IG1seDVfaWJfZGV2ICpkZXYsXG4gXHRcdFx0XHQgICAgICAwIDpcbiBcdFx0XHRcdCAgICAgIE1MWDVfRlJNUl9QT09MU19LRVlfQUNDRVNTX01PREVfS1NNX01BU0ssXG4gXHRcdC5udW1fZG1hX2Jsb2NrcyA9IG5kZXNjcyxcbi1cdFx0Lmtlcm5lbF92ZW5kb3Jfa2V5ID0gMCwgLyogbm8gUEggYW5kIG5vIFNUIGluZGV4ICovXG4rXHRcdC5rZXJuZWxfdmVuZG9yX2tleSA9XG4rXHRcdFx0RklFTERfUFJFUChNTFg1X0ZSTVJfUE9PTFNfS0VSTkVMX0tFWV9TVF9JTkRFWF9NQVNLLFxuK1x0XHRcdFx0ICAgTUxYNV9NS0NfUENJRV9UUEhfTk9fU1RFRVJJTkdfVEFHX0lOREVYKSxcbiBcdH07XG4gXHRzdHJ1Y3QgbWx4NV9pYl9tciAqbXI7XG4gXHRpbnQgcmV0O1xuQEAgLTMzNSw2ICszNjQsNyBAQCBzdGF0aWMgaW50IG1seDVyX2J1aWxkX2ZybXJfa2V5KHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSxcbiBcdFx0Z2V0X3VuY2hhbmdlYWJsZV9hY2Nlc3NfZmxhZ3MoZGV2LCBpbi1cdTAwM2VhY2Nlc3NfZmxhZ3MpO1xuIFx0b3V0LVx1MDAzZXZlbmRvcl9rZXkgPSBpbi1cdTAwM2V2ZW5kb3Jfa2V5O1xuIFx0b3V0LVx1MDAzZW51bV9kbWFfYmxvY2tzID0gaW4tXHUwMDNlbnVtX2RtYV9ibG9ja3M7XG4rXHRvdXQtXHUwMDNla2VybmVsX3ZlbmRvcl9rZXkgPSBpbi1cdTAwM2VrZXJuZWxfdmVuZG9yX2tleTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbkBAIC01NTcsNiArNTg3LDkgQEAgc3RhdGljIHN0cnVjdCBtbHg1X2liX21yICpyZWdfY3JlYXRlKHN0cnVjdCBpYl9wZCAqcGQsIHN0cnVjdCBpYl91bWVtICp1bWVtLFxuIFx0bXItXHUwMDNlaWJtci5wZCA9IHBkO1xuIFx0bXItXHUwMDNlYWNjZXNzX2ZsYWdzID0gYWNjZXNzX2ZsYWdzO1xuIFx0bXItXHUwMDNlcGFnZV9zaGlmdCA9IG9yZGVyX2Jhc2VfMihwYWdlX3NpemUpO1xuK1x0bXItXHUwMDNlaWJtci5mcm1yLmtleS5rZXJuZWxfdmVuZG9yX2tleSA9XG4rXHRcdEZJRUxEX1BSRVAoTUxYNV9GUk1SX1BPT0xTX0tFUk5FTF9LRVlfU1RfSU5ERVhfTUFTSywgc3RfaW5kZXgpIHxcbitcdFx0RklFTERfUFJFUChNTFg1X0ZSTVJfUE9PTFNfS0VSTkVMX0tFWV9QSF9NQVNLLCBwaCk7XG4gXG4gXHRpbmxlbiA9IE1MWDVfU1RfU1pfQllURVMoY3JlYXRlX21rZXlfaW4pO1xuIFx0aWYgKHBvcHVsYXRlKVxuQEAgLTc1NSw2ICs3ODgsMTIgQEAgc3RhdGljIHN0cnVjdCBpYl9tciAqY3JlYXRlX3JlYWxfbXIoc3RydWN0IGliX3BkICpwZCwgc3RydWN0IGliX3VtZW0gKnVtZW0sXG4gXG4gXHR4bHRfd2l0aF91bXIgPSBtbHg1cl91bXJfY2FuX2xvYWRfcGFzKGRldiwgdW1lbS1cdTAwM2VsZW5ndGgpO1xuIFx0aWYgKHhsdF93aXRoX3Vtcikge1xuK1x0XHRlcnIgPSBtbHg1X2liX2dldF9mcm1yX3N0X2hhbmRsZV9yZWYoZGV2LCBzdF9pbmRleCk7XG4rXHRcdGlmIChlcnIpIHtcbitcdFx0XHRpYl91bWVtX3JlbGVhc2UodW1lbSk7XG4rXHRcdFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcbitcdFx0fVxuK1xuIFx0XHRtciA9IGFsbG9jX2NhY2hlYWJsZV9tcihwZCwgdW1lbSwgaW92YSwgYWNjZXNzX2ZsYWdzLFxuIFx0XHRcdFx0XHRNTFg1X01LQ19BQ0NFU1NfTU9ERV9NVFQsXG4gXHRcdFx0XHRcdHN0X2luZGV4LCBwaCk7XG5AQCAtNzY5LDYgKzgwOCw4IEBAIHN0YXRpYyBzdHJ1Y3QgaWJfbXIgKmNyZWF0ZV9yZWFsX21yKHN0cnVjdCBpYl9wZCAqcGQsIHN0cnVjdCBpYl91bWVtICp1bWVtLFxuIFx0XHRtdXRleF91bmxvY2soXHUwMDI2ZGV2LVx1MDAzZXNsb3dfcGF0aF9tdXRleCk7XG4gXHR9XG4gXHRpZiAoSVNfRVJSKG1yKSkge1xuK1x0XHRpZiAoeGx0X3dpdGhfdW1yKVxuK1x0XHRcdG1seDVfaWJfcHV0X3N0X2luZGV4X3JlZihkZXYsIHN0X2luZGV4KTtcbiBcdFx0aWJfdW1lbV9yZWxlYXNlKHVtZW0pO1xuIFx0XHRyZXR1cm4gRVJSX0NBU1QobXIpO1xuIFx0fVxuQEAgLTkwMyw2ICs5NDQsNTIgQEAgc3RhdGljIHN0cnVjdCBkbWFfYnVmX2F0dGFjaF9vcHMgbWx4NV9pYl9kbWFidWZfYXR0YWNoX29wcyA9IHtcbiBcdC5pbnZhbGlkYXRlX21hcHBpbmdzID0gbWx4NV9pYl9kbWFidWZfaW52YWxpZGF0ZV9jYixcbiB9O1xuIFxuK3N0YXRpYyB2b2lkIGdldF9wY2lfdHBoX21yX2RtYWJ1ZihzdHJ1Y3QgbWx4NV9pYl9kZXYgKmRldiwgc3RydWN0IGRtYV9idWYgKmRtYWJ1ZixcbitcdFx0XHRcdCAgdTE2ICpzdF9pbmRleCwgdTggKnBoKVxuK3tcbitcdHUxNiBsb2NhbF9zdF9pbmRleDtcbitcdHUxNiBzdGVlcmluZ190YWc7XG4rXHR1OCBsb2NhbF9waDtcbitcdGJvb2wgZXh0ZW5kZWQ7XG4rXHRpbnQgcmV0O1xuK1xuK1x0c3dpdGNoIChwY2llX3RwaF9lbmFibGVkX3JlcV90eXBlKGRldi1cdTAwM2VtZGV2LVx1MDAzZXBkZXYpKSB7XG4rXHRjYXNlIFBDSV9UUEhfUkVRX1RQSF9PTkxZOlxuK1x0XHRleHRlbmRlZCA9IGZhbHNlO1xuK1x0XHRicmVhaztcbitcdGNhc2UgUENJX1RQSF9SRVFfRVhUX1RQSDpcbitcdFx0ZXh0ZW5kZWQgPSB0cnVlO1xuK1x0XHRicmVhaztcbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdGRtYV9yZXN2X2xvY2soZG1hYnVmLVx1MDAzZXJlc3YsIE5VTEwpO1xuK1x0cmV0ID0gZG1hX2J1Zl9nZXRfcGNpX3RwaChkbWFidWYsIGV4dGVuZGVkLCBcdTAwMjZzdGVlcmluZ190YWcsIFx1MDAyNmxvY2FsX3BoKTtcbitcdGRtYV9yZXN2X3VubG9jayhkbWFidWYtXHUwMDNlcmVzdik7XG4rXHRpZiAocmV0KSB7XG4rXHRcdGlmIChyZXQgIT0gLUVPUE5PVFNVUFApXG4rXHRcdFx0bWx4NV9pYl9kYmcoZGV2LCBcImdldF9wY2lfdHBoIGZhaWxlZCAoJWQpXFxuXCIsIHJldCk7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdHJldCA9IG1seDVfc3RfYWxsb2NfaW5kZXhfYnlfdGFnKGRldi1cdTAwM2VtZGV2LCBzdGVlcmluZ190YWcsXG4rXHRcdFx0XHRcdCBcdTAwMjZsb2NhbF9zdF9pbmRleCk7XG4rXHRpZiAocmV0KSB7XG4rXHRcdG1seDVfaWJfZGJnKGRldiwgXCJzdF9hbGxvY19pbmRleF9ieV90YWcgZmFpbGVkICglZClcXG5cIiwgcmV0KTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0KnN0X2luZGV4ID0gbG9jYWxfc3RfaW5kZXg7XG4rXHQqcGggPSBsb2NhbF9waDtcbit9XG4rXG4rc3RhdGljIHZvaWQgbWx4NV9pYl9tcl9wdXRfZnJtcl9zdF9oYW5kbGVfcmVmKHN0cnVjdCBtbHg1X2liX21yICptcilcbit7XG4rXHRtbHg1X2liX3B1dF9mcm1yX3N0X2hhbmRsZV9yZWYobXJfdG9fbWRldihtciksXG4rXHRcdFx0XHQgICAgICAgbXItXHUwMDNlaWJtci5mcm1yLmtleS5rZXJuZWxfdmVuZG9yX2tleSk7XG4rfVxuK1xuIHN0YXRpYyBzdHJ1Y3QgaWJfbXIgKlxuIHJlZ191c2VyX21yX2RtYWJ1ZihzdHJ1Y3QgaWJfcGQgKnBkLCBzdHJ1Y3QgZGV2aWNlICpkbWFfZGV2aWNlLFxuIFx0XHQgICB1NjQgb2Zmc2V0LCB1NjQgbGVuZ3RoLCB1NjQgdmlydF9hZGRyLFxuQEAgLTk0NSwxMiArMTAzMiwyMiBAQCByZWdfdXNlcl9tcl9kbWFidWYoc3RydWN0IGliX3BkICpwZCwgc3RydWN0IGRldmljZSAqZG1hX2RldmljZSxcbiBcdFx0cGggPSBkbWFoLVx1MDAzZXBoO1xuIFx0XHRpZiAoZG1haC1cdTAwM2V2YWxpZF9maWVsZHMgXHUwMDI2IEJJVChJQl9ETUFIX0NQVV9JRF9FWElTVFMpKVxuIFx0XHRcdHN0X2luZGV4ID0gbWRtYWgtXHUwMDNlc3RfaW5kZXg7XG4rXG4rXHRcdGVyciA9IG1seDVfaWJfZ2V0X2ZybXJfc3RfaGFuZGxlX3JlZihkZXYsIHN0X2luZGV4KTtcbitcdFx0aWYgKGVycikge1xuK1x0XHRcdGliX3VtZW1fcmVsZWFzZShcdTAwMjZ1bWVtX2RtYWJ1Zi1cdTAwM2V1bWVtKTtcbitcdFx0XHRyZXR1cm4gRVJSX1BUUihlcnIpO1xuK1x0XHR9XG4rXHR9IGVsc2Uge1xuK1x0XHRnZXRfcGNpX3RwaF9tcl9kbWFidWYoZGV2LCB1bWVtX2RtYWJ1Zi1cdTAwM2VhdHRhY2gtXHUwMDNlZG1hYnVmLFxuK1x0XHRcdFx0ICAgICAgXHUwMDI2c3RfaW5kZXgsIFx1MDAyNnBoKTtcbiBcdH1cbiBcbiBcdG1yID0gYWxsb2NfY2FjaGVhYmxlX21yKHBkLCBcdTAwMjZ1bWVtX2RtYWJ1Zi1cdTAwM2V1bWVtLCB2aXJ0X2FkZHIsXG4gXHRcdFx0XHRhY2Nlc3NfZmxhZ3MsIGFjY2Vzc19tb2RlLFxuIFx0XHRcdFx0c3RfaW5kZXgsIHBoKTtcbiBcdGlmIChJU19FUlIobXIpKSB7XG4rXHRcdG1seDVfaWJfcHV0X3N0X2luZGV4X3JlZihkZXYsIHN0X2luZGV4KTtcbiBcdFx0aWJfdW1lbV9yZWxlYXNlKFx1MDAyNnVtZW1fZG1hYnVmLVx1MDAzZXVtZW0pO1xuIFx0XHRyZXR1cm4gRVJSX0NBU1QobXIpO1xuIFx0fVxuQEAgLTE0MDUsNiArMTUwMiw3IEBAIHN0YXRpYyBpbnQgbWx4NXJfaGFuZGxlX21rZXlfY2xlYW51cChzdHJ1Y3QgbWx4NV9pYl9tciAqbXIpXG4gXHRpZiAobXItXHUwMDNlaWJtci5mcm1yLnBvb2wpIHtcbiBcdFx0aWYgKCFtbHg1X3Vtcl9yZXZva2VfbXJfd2l0aF9sb2NrKG1yKSkge1xuIFx0XHRcdGliX2ZybXJfcG9vbF9wdXNoKG1yLVx1MDAzZWlibXIuZGV2aWNlLCBcdTAwMjZtci1cdTAwM2VpYm1yKTtcbitcdFx0XHRtbHg1X2liX21yX3B1dF9mcm1yX3N0X2hhbmRsZV9yZWYobXIpO1xuIFx0XHRcdHJldHVybiAwO1xuIFx0XHR9XG4gXHR9XG5AQCAtMTQzMiw2ICsxNTMwLDkgQEAgc3RhdGljIGludCBtbHg1cl9oYW5kbGVfbWtleV9jbGVhbnVwKHN0cnVjdCBtbHg1X2liX21yICptcilcbiBcdGlmIChtci1cdTAwM2VpYm1yLmZybXIucG9vbCBcdTAwMjZcdTAwMjYgIXJldClcbiBcdFx0aWJfZnJtcl9wb29sX2Ryb3AoXHUwMDI2bXItXHUwMDNlaWJtcik7XG4gXG4rXHRpZiAoIXJldClcbitcdFx0bWx4NV9pYl9tcl9wdXRfZnJtcl9zdF9oYW5kbGVfcmVmKG1yKTtcbitcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9saWIvc3QuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9saWIvc3QuY1xuaW5kZXggOTk3YmU5MWYwYTEzNWEuLmJmMTRhN2E2ZGYxNWUxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi9zdC5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGliL3N0LmNcbkBAIC05MiwyMyArOTIsMTggQEAgdm9pZCBtbHg1X3N0X2Rlc3Ryb3koc3RydWN0IG1seDVfY29yZV9kZXYgKmRldilcbiBcdGtmcmVlKHN0KTtcbiB9XG4gXG4taW50IG1seDVfc3RfYWxsb2NfaW5kZXgoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgZW51bSB0cGhfbWVtX3R5cGUgbWVtX3R5cGUsXG4tXHRcdFx0dW5zaWduZWQgaW50IGNwdV91aWQsIHUxNiAqc3RfaW5kZXgpXG4raW50IG1seDVfc3RfYWxsb2NfaW5kZXhfYnlfdGFnKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIHUxNiB0YWcsXG4rXHRcdFx0ICAgICAgIHUxNiAqc3RfaW5kZXgpXG4ge1xuIFx0c3RydWN0IG1seDVfc3RfaWR4X2RhdGEgKmlkeF9kYXRhO1xuIFx0c3RydWN0IG1seDVfc3QgKnN0ID0gZGV2LVx1MDAzZXN0O1xuIFx0dW5zaWduZWQgbG9uZyBpbmRleDtcbiBcdHUzMiB4YV9pZDtcbi1cdHUxNiB0YWc7XG4tXHRpbnQgcmV0O1xuK1x0aW50IHJldCA9IDA7XG4gXG4gXHRpZiAoIXN0KVxuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXG4tXHRyZXQgPSBwY2llX3RwaF9nZXRfY3B1X3N0KGRldi1cdTAwM2VwZGV2LCBtZW1fdHlwZSwgY3B1X3VpZCwgXHUwMDI2dGFnKTtcbi1cdGlmIChyZXQpXG4tXHRcdHJldHVybiByZXQ7XG4tXG4gXHRpZiAoc3QtXHUwMDNlZGlyZWN0X21vZGUpIHtcbiBcdFx0KnN0X2luZGV4ID0gdGFnO1xuIFx0XHRyZXR1cm4gMDtcbkBAIC0xNTIsOCArMTQ3LDQ2IEBAIGludCBtbHg1X3N0X2FsbG9jX2luZGV4KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIGVudW0gdHBoX21lbV90eXBlIG1lbV90eXBlLFxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnN0LVx1MDAzZWxvY2spO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4rRVhQT1JUX1NZTUJPTF9HUEwobWx4NV9zdF9hbGxvY19pbmRleF9ieV90YWcpO1xuK1xuK2ludCBtbHg1X3N0X2FsbG9jX2luZGV4KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIGVudW0gdHBoX21lbV90eXBlIG1lbV90eXBlLFxuK1x0XHRcdHVuc2lnbmVkIGludCBjcHVfdWlkLCB1MTYgKnN0X2luZGV4KVxuK3tcbitcdHUxNiB0YWc7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cmV0ID0gcGNpZV90cGhfZ2V0X2NwdV9zdChkZXYtXHUwMDNlcGRldiwgbWVtX3R5cGUsIGNwdV91aWQsIFx1MDAyNnRhZyk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0dXJuIG1seDVfc3RfYWxsb2NfaW5kZXhfYnlfdGFnKGRldiwgdGFnLCBzdF9pbmRleCk7XG4rfVxuIEVYUE9SVF9TWU1CT0xfR1BMKG1seDVfc3RfYWxsb2NfaW5kZXgpO1xuIFxuK2ludCBtbHg1X3N0X2dldF9pbmRleChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCB1MTYgc3RfaW5kZXgpXG4re1xuK1x0c3RydWN0IG1seDVfc3RfaWR4X2RhdGEgKmlkeF9kYXRhO1xuK1x0c3RydWN0IG1seDVfc3QgKnN0ID0gZGV2LVx1MDAzZXN0O1xuK1x0aW50IHJldCA9IDA7XG4rXG4rXHRpZiAoIXN0KVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHRpZiAoc3QtXHUwMDNlZGlyZWN0X21vZGUpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZzdC1cdTAwM2Vsb2NrKTtcbitcdGlkeF9kYXRhID0geGFfbG9hZChcdTAwMjZzdC1cdTAwM2VpZHhfeGEsIHN0X2luZGV4KTtcbitcdGlmIChXQVJOX09OX09OQ0UoIWlkeF9kYXRhKSlcbitcdFx0cmV0ID0gLUVJTlZBTDtcbitcdGVsc2VcbitcdFx0cmVmY291bnRfaW5jKFx1MDAyNmlkeF9kYXRhLVx1MDAzZXVzZWNvdW50KTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZzdC1cdTAwM2Vsb2NrKTtcbitcbitcdHJldHVybiByZXQ7XG4rfVxuK0VYUE9SVF9TWU1CT0xfR1BMKG1seDVfc3RfZ2V0X2luZGV4KTtcbitcbiBpbnQgbWx4NV9zdF9kZWFsbG9jX2luZGV4KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIHUxNiBzdF9pbmRleClcbiB7XG4gXHRzdHJ1Y3QgbWx4NV9zdF9pZHhfZGF0YSAqaWR4X2RhdGE7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvdHBoLmMgYi9kcml2ZXJzL3BjaS90cGguY1xuaW5kZXggOTExNDVlOGQ5ZDk1MTIuLjcxN2I0N2QxZDljYWNlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9wY2kvdHBoLmNcbisrKyBiL2RyaXZlcnMvcGNpL3RwaC5jXG5AQCAtMTc0LDYgKzE3NCw1MSBAQCB1MzIgcGNpZV90cGhfZ2V0X3N0X3RhYmxlX2xvYyhzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiB9XG4gRVhQT1JUX1NZTUJPTChwY2llX3RwaF9nZXRfc3RfdGFibGVfbG9jKTtcbiBcbisvKipcbisgKiBwY2llX3RwaF9lbmFibGVkX3JlcV90eXBlIC0gUmV0dXJuIHRoZSBkZXZpY2UncyBlbmFibGVkIFRQSCByZXF1ZXN0ZXIgdHlwZVxuKyAqIEBwZGV2OiBQQ0kgZGV2aWNlIHRvIHF1ZXJ5XG4rICpcbisgKiBSZXR1cm46IFBDSV9UUEhfUkVRX0RJU0FCTEUsIFBDSV9UUEhfUkVRX1RQSF9PTkxZIG9yIFBDSV9UUEhfUkVRX0VYVF9UUEguXG4rICovXG4rdTggcGNpZV90cGhfZW5hYmxlZF9yZXFfdHlwZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbit7XG4rXHRyZXR1cm4gcGRldi1cdTAwM2V0cGhfcmVxX3R5cGU7XG4rfVxuK0VYUE9SVF9TWU1CT0wocGNpZV90cGhfZW5hYmxlZF9yZXFfdHlwZSk7XG4rXG4rLyoqXG4rICogcGNpZV90cGhfY29tcGxldGVyX3R5cGUgLSBSZXR1cm4gdGhlIGRldmljZSdzIFRQSCBDb21wbGV0ZXIgc3VwcG9ydFxuKyAqIEBwZGV2OiBQQ0kgZGV2aWNlIHRvIHF1ZXJ5XG4rICpcbisgKiBSZWFkcyB0aGUgXCJUUEggQ29tcGxldGVyIFN1cHBvcnRlZFwiIGZpZWxkIChiaXRzIDEzOjEyKSBvZiBEZXZpY2VcbisgKiBDYXBhYmlsaXRpZXMgMi4gVGhlIHJlc2VydmVkIDBiMTAgZW5jb2RpbmcgaXMgZm9sZGVkIGludG9cbisgKiBcIm5vdCBzdXBwb3J0ZWRcIiBzbyBjYWxsZXJzIG9ubHkgbmVlZCB0byBjb21wYXJlIGFnYWluc3QgdGhlIHRocmVlXG4rICogZGVmaW5lZCB2YWx1ZXMuXG4rICpcbisgKiBSZXR1cm46IG9uZSBvZiAlUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX05PTkUsXG4rICogICAgICAgICAlUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX1RQSF9PTkxZIG9yXG4rICogICAgICAgICAlUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX0VYVF9UUEguXG4rICovXG4rdTggcGNpZV90cGhfY29tcGxldGVyX3R5cGUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4re1xuK1x0dTMyIHJlZztcbitcbitcdGlmIChwY2llX2NhcGFiaWxpdHlfcmVhZF9kd29yZChwZGV2LCBQQ0lfRVhQX0RFVkNBUDIsIFx1MDAyNnJlZykpXG4rXHRcdHJldHVybiBQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfTk9ORTtcbitcdGlmIChQQ0lfUE9TU0lCTEVfRVJST1IocmVnKSlcbitcdFx0cmV0dXJuIFBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9OT05FO1xuK1xuK1x0c3dpdGNoIChGSUVMRF9HRVQoUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX01BU0ssIHJlZykpIHtcbitcdGNhc2UgUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX1RQSF9PTkxZOlxuK1x0XHRyZXR1cm4gUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX1RQSF9PTkxZO1xuK1x0Y2FzZSBQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfRVhUX1RQSDpcbitcdFx0cmV0dXJuIFBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9FWFRfVFBIO1xuK1x0ZGVmYXVsdDpcbitcdFx0cmV0dXJuIFBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9OT05FO1xuK1x0fVxuK31cbitFWFBPUlRfU1lNQk9MKHBjaWVfdHBoX2NvbXBsZXRlcl90eXBlKTtcbitcbiAvKlxuICAqIFJldHVybiB0aGUgc2l6ZSBvZiBTVCB0YWJsZS4gSWYgU1QgdGFibGUgaXMgbm90IGluIFRQSCBSZXF1ZXN0ZXIgRXh0ZW5kZWRcbiAgKiBDYXBhYmlsaXR5IHNwYWNlLCByZXR1cm4gMC4gT3RoZXJ3aXNlIHJldHVybiB0aGUgU1QgVGFibGUgU2l6ZSArIDEuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuY1xuaW5kZXggYTI4ZjFlOTkzNjJjMWUuLmM3ZDY5MDJiYzYxYjA3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmNcbisrKyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jXG5AQCAtMTU3Miw2ICsxNTcyLDkgQEAgaW50IHZmaW9fcGNpX2NvcmVfaW9jdGxfZmVhdHVyZShzdHJ1Y3QgdmZpb19kZXZpY2UgKmRldmljZSwgdTMyIGZsYWdzLFxuIFx0XHRyZXR1cm4gdmZpb19wY2lfY29yZV9mZWF0dXJlX3Rva2VuKHZkZXYsIGZsYWdzLCBhcmcsIGFyZ3N6KTtcbiBcdGNhc2UgVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGOlxuIFx0XHRyZXR1cm4gdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWYodmRldiwgZmxhZ3MsIGFyZywgYXJnc3opO1xuK1x0Y2FzZSBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUZfVFBIOlxuK1x0XHRyZXR1cm4gdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWZfdHBoKHZkZXYsIGZsYWdzLCBhcmcsXG4rXHRcdFx0XHRcdFx0XHQgYXJnc3opO1xuIFx0ZGVmYXVsdDpcbiBcdFx0cmV0dXJuIC1FTk9UVFk7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmNcbmluZGV4IGMxNmY0NjBjMDFkNjgxLi5kNmY1ZGQzMjEwMDA5YyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmNcbisrKyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmNcbkBAIC0zLDYgKzMsNyBAQFxuICAqL1xuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RtYS1idWYtbWFwcGluZy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGNpLXAycGRtYS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcGNpLXRwaC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZG1hLXJlc3YuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwidmZpb19wY2lfcHJpdi5oXCJcbkBAIC0xOSw3ICsyMCwxNCBAQCBzdHJ1Y3QgdmZpb19wY2lfZG1hX2J1ZiB7XG4gXHR1MzIgbnJfcmFuZ2VzO1xuIFx0c3RydWN0IGtyZWYga3JlZjtcbiBcdHN0cnVjdCBjb21wbGV0aW9uIGNvbXA7XG4tXHR1OCByZXZva2VkIDogMTtcbitcbitcdC8qIFByb3RlY3RlZCBieSBkbWFidWYtXHUwMDNlcmVzdi4gKi9cbitcdHUxNiB0cGhfc3RfZXh0O1xuK1x0dTggdHBoX3N0O1xuK1x0dTggcmV2b2tlZDoxO1xuK1x0dTggdHBoX3N0X3ZhbGlkOjE7XG4rXHR1OCB0cGhfc3RfZXh0X3ZhbGlkOjE7XG4rXHR1OCB0cGhfcGg6MjtcbiB9O1xuIFxuIHN0YXRpYyBpbnQgdmZpb19wY2lfZG1hX2J1Zl9hdHRhY2goc3RydWN0IGRtYV9idWYgKmRtYWJ1ZixcbkBAIC02OSw2ICs3NywyNiBAQCB2ZmlvX3BjaV9kbWFfYnVmX21hcChzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2htZW50LFxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4rc3RhdGljIGludCB2ZmlvX3BjaV9kbWFfYnVmX2dldF9wY2lfdHBoKHN0cnVjdCBkbWFfYnVmICpkbWFidWYsIGJvb2wgZXh0ZW5kZWQsXG4rXHRcdFx0XHRcdHUxNiAqc3RlZXJpbmdfdGFnLCB1OCAqcGgpXG4re1xuK1x0c3RydWN0IHZmaW9fcGNpX2RtYV9idWYgKnByaXYgPSBkbWFidWYtXHUwMDNlcHJpdjtcbitcbitcdGRtYV9yZXN2X2Fzc2VydF9oZWxkKGRtYWJ1Zi1cdTAwM2VyZXN2KTtcbitcbitcdGlmIChleHRlbmRlZCkge1xuK1x0XHRpZiAoIXByaXYtXHUwMDNldHBoX3N0X2V4dF92YWxpZClcbitcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHRcdCpzdGVlcmluZ190YWcgPSBwcml2LVx1MDAzZXRwaF9zdF9leHQ7XG4rXHR9IGVsc2Uge1xuK1x0XHRpZiAoIXByaXYtXHUwMDNldHBoX3N0X3ZhbGlkKVxuK1x0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdFx0KnN0ZWVyaW5nX3RhZyA9IHByaXYtXHUwMDNldHBoX3N0O1xuK1x0fVxuK1x0KnBoID0gcHJpdi1cdTAwM2V0cGhfcGg7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gc3RhdGljIHZvaWQgdmZpb19wY2lfZG1hX2J1Zl91bm1hcChzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2htZW50LFxuIFx0XHRcdFx0ICAgc3RydWN0IHNnX3RhYmxlICpzZ3QsXG4gXHRcdFx0XHQgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpXG5AQCAtMTAxLDYgKzEyOSw3IEBAIHN0YXRpYyB2b2lkIHZmaW9fcGNpX2RtYV9idWZfcmVsZWFzZShzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmKVxuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZG1hX2J1Zl9vcHMgdmZpb19wY2lfZG1hYnVmX29wcyA9IHtcbiBcdC5hdHRhY2ggPSB2ZmlvX3BjaV9kbWFfYnVmX2F0dGFjaCxcbitcdC5nZXRfcGNpX3RwaCA9IHZmaW9fcGNpX2RtYV9idWZfZ2V0X3BjaV90cGgsXG4gXHQubWFwX2RtYV9idWYgPSB2ZmlvX3BjaV9kbWFfYnVmX21hcCxcbiBcdC51bm1hcF9kbWFfYnVmID0gdmZpb19wY2lfZG1hX2J1Zl91bm1hcCxcbiBcdC5yZWxlYXNlID0gdmZpb19wY2lfZG1hX2J1Zl9yZWxlYXNlLFxuQEAgLTMzMyw2ICszNjIsNzIgQEAgaW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTMyIGZsYWdzLFxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4raW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3RwaChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsXG4rXHRcdFx0XHQgICAgICB1MzIgZmxhZ3MsXG4rXHRcdFx0XHQgICAgICBzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV9kbWFfYnVmX3RwaCBfX3VzZXIgKmFyZyxcbitcdFx0XHRcdCAgICAgIHNpemVfdCBhcmdzeilcbit7XG4rXHRzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV9kbWFfYnVmX3RwaCBzZXRfdHBoO1xuK1x0c3RydWN0IHZmaW9fcGNpX2RtYV9idWYgKnByaXY7XG4rXHRzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmO1xuK1x0dTggY29tcDtcbitcdGludCByZXQ7XG4rXG4rXHRjb21wID0gcGNpZV90cGhfY29tcGxldGVyX3R5cGUodmRldi1cdTAwM2VwZGV2KTtcbitcdGlmIChjb21wID09IFBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9OT05FKVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHRyZXQgPSB2ZmlvX2NoZWNrX2ZlYXR1cmUoZmxhZ3MsIGFyZ3N6LCBWRklPX0RFVklDRV9GRUFUVVJFX1NFVCxcbitcdFx0XHRcdCBzaXplb2Yoc2V0X3RwaCkpO1xuK1x0aWYgKHJldCAhPSAxKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0aWYgKGNvcHlfZnJvbV91c2VyKFx1MDAyNnNldF90cGgsIGFyZywgc2l6ZW9mKHNldF90cGgpKSlcbitcdFx0cmV0dXJuIC1FRkFVTFQ7XG4rXG4rXHRpZiAoc2V0X3RwaC5mbGFncyBcdTAwMjYgfihWRklPX0RNQV9CVUZfVFBIX1NUIHwgVkZJT19ETUFfQlVGX1RQSF9TVF9FWFQpKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdGlmIChzZXRfdHBoLnBoIFx1MDAyNiB+MHgzKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdGlmICgoc2V0X3RwaC5mbGFncyBcdTAwMjYgVkZJT19ETUFfQlVGX1RQSF9TVF9FWFQpIFx1MDAyNlx1MDAyNlxuK1x0ICAgIGNvbXAgIT0gUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX0VYVF9UUEgpXG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcbitcdGRtYWJ1ZiA9IGRtYV9idWZfZ2V0KHNldF90cGguZG1hYnVmX2ZkKTtcbitcdGlmIChJU19FUlIoZG1hYnVmKSlcbitcdFx0cmV0dXJuIFBUUl9FUlIoZG1hYnVmKTtcbitcbitcdGlmIChkbWFidWYtXHUwMDNlb3BzICE9IFx1MDAyNnZmaW9fcGNpX2RtYWJ1Zl9vcHMpIHtcbitcdFx0cmV0ID0gLUVJTlZBTDtcbitcdFx0Z290byBvdXRfcHV0O1xuK1x0fVxuK1xuK1x0cHJpdiA9IGRtYWJ1Zi1cdTAwM2Vwcml2O1xuK1x0aWYgKHByaXYtXHUwMDNldmRldiAhPSB2ZGV2KSB7XG4rXHRcdHJldCA9IC1FSU5WQUw7XG4rXHRcdGdvdG8gb3V0X3B1dDtcbitcdH1cbitcbitcdHJldCA9IGRtYV9yZXN2X2xvY2tfaW50ZXJydXB0aWJsZShkbWFidWYtXHUwMDNlcmVzdiwgTlVMTCk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIG91dF9wdXQ7XG4rXG4rXHRwcml2LVx1MDAzZXRwaF9zdCAgICAgICAgID0gc2V0X3RwaC5zdGVlcmluZ190YWc7XG4rXHRwcml2LVx1MDAzZXRwaF9zdF9leHQgICAgID0gc2V0X3RwaC5zdGVlcmluZ190YWdfZXh0O1xuK1x0cHJpdi1cdTAwM2V0cGhfcGggICAgICAgICA9IHNldF90cGgucGg7XG4rXHRwcml2LVx1MDAzZXRwaF9zdF92YWxpZCAgID0gISEoc2V0X3RwaC5mbGFncyBcdTAwMjYgVkZJT19ETUFfQlVGX1RQSF9TVCk7XG4rXHRwcml2LVx1MDAzZXRwaF9zdF9leHRfdmFsaWQgPVxuK1x0XHQhIShzZXRfdHBoLmZsYWdzIFx1MDAyNiBWRklPX0RNQV9CVUZfVFBIX1NUX0VYVCk7XG4rXHRkbWFfcmVzdl91bmxvY2soZG1hYnVmLVx1MDAzZXJlc3YpO1xuK1x0cmV0ID0gMDtcbitcbitvdXRfcHV0OlxuK1x0ZG1hX2J1Zl9wdXQoZG1hYnVmKTtcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuIHZvaWQgdmZpb19wY2lfZG1hX2J1Zl9tb3ZlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgYm9vbCByZXZva2VkKVxuIHtcbiBcdHN0cnVjdCB2ZmlvX3BjaV9kbWFfYnVmICpwcml2O1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfcHJpdi5oIGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9wcml2LmhcbmluZGV4IGZjYTlkMGRmYWM5MGY4Li5jNThmMzY5YmU0YjM5OCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfcHJpdi5oXG4rKysgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX3ByaXYuaFxuQEAgLTExOCw2ICsxMTgsMTAgQEAgc3RhdGljIGlubGluZSBib29sIHZmaW9fcGNpX2lzX3ZnYShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBpbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWYoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCB1MzIgZmxhZ3MsXG4gXHRcdFx0XHQgIHN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX2RtYV9idWYgX191c2VyICphcmcsXG4gXHRcdFx0XHQgIHNpemVfdCBhcmdzeik7XG4raW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3RwaChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsXG4rXHRcdFx0XHQgICAgICB1MzIgZmxhZ3MsXG4rXHRcdFx0XHQgICAgICBzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV9kbWFfYnVmX3RwaCBfX3VzZXIgKmFyZyxcbitcdFx0XHRcdCAgICAgIHNpemVfdCBhcmdzeik7XG4gdm9pZCB2ZmlvX3BjaV9kbWFfYnVmX2NsZWFudXAoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KTtcbiB2b2lkIHZmaW9fcGNpX2RtYV9idWZfbW92ZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIGJvb2wgcmV2b2tlZCk7XG4gI2Vsc2VcbkBAIC0xMjgsNiArMTMyLDE0IEBAIHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTMyIGZsYWdzLFxuIHtcbiBcdHJldHVybiAtRU5PVFRZO1xuIH1cbitcbitzdGF0aWMgaW5saW5lIGludFxuK3ZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3RwaChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIHUzMiBmbGFncyxcbitcdFx0XHRcdCAgc3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfZG1hX2J1Zl90cGggX191c2VyICphcmcsXG4rXHRcdFx0XHQgIHNpemVfdCBhcmdzeilcbit7XG4rXHRyZXR1cm4gLUVOT1RUWTtcbit9XG4gc3RhdGljIGlubGluZSB2b2lkIHZmaW9fcGNpX2RtYV9idWZfY2xlYW51cChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpXG4ge1xuIH1cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RtYS1idWYuaCBiL2luY2x1ZGUvbGludXgvZG1hLWJ1Zi5oXG5pbmRleCBkMTIwM2RhNTZmYzVmNy4uNTNiMjY4NmFkOGZjNjcgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2RtYS1idWYuaFxuKysrIGIvaW5jbHVkZS9saW51eC9kbWEtYnVmLmhcbkBAIC0xMTMsNiArMTEzLDI2IEBAIHN0cnVjdCBkbWFfYnVmX29wcyB7XG4gXHQgKi9cbiBcdHZvaWQgKCp1bnBpbikoc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoKTtcbiBcbitcdC8qKlxuK1x0ICogQGdldF9wY2lfdHBoOlxuK1x0ICpcbitcdCAqIFJldHJpZXZlIFBDSWUgVExQIFByb2Nlc3NpbmcgSGludCAoVFBIKSBzdGVlcmluZyBtZXRhZGF0YSBmb3JcbitcdCAqIHRoaXMgYnVmZmVyIHNvIGFuIGltcG9ydGVyIGNhbiBwcm9ncmFtIGEgbWF0Y2hpbmcgU1QvUEggaGludCBvblxuK1x0ICogb3V0Ym91bmQgVExQcyB0YXJnZXRpbmcgdGhlIGV4cG9ydGVyIGZvciBwZWVyLXRvLXBlZXIgRE1BLlxuK1x0ICpcbitcdCAqIEBkbWFidWY6IERNQSBidWZmZXIgZm9yIHdoaWNoIHRvIHJldHJpZXZlIFRQSCBtZXRhZGF0YVxuK1x0ICogQGV4dGVuZGVkOiBmYWxzZSBmb3IgOC1iaXQgU1QsIHRydWUgZm9yIDE2LWJpdCBFeHRlbmRlZCBTVFxuK1x0ICogQHN0ZWVyaW5nX3RhZzogUmV0dXJucyB0aGUgcmF3IFRQSCBzdGVlcmluZyB0YWcgZm9yIHRoZSByZXF1ZXN0ZWRcbitcdCAqICAgICAgICAgICAgICAgIG5hbWVzcGFjZVxuK1x0ICogQHBoOiBSZXR1cm5zIHRoZSBUUEggcHJvY2Vzc2luZyBoaW50ICgyLWJpdCB2YWx1ZSlcbitcdCAqXG4rXHQgKiBPcHRpb25hbCBjYWxsYmFjayBmb3IgZG1hX2J1Zl9nZXRfcGNpX3RwaCgpLiBDYWxsZWQgd2l0aFxuK1x0ICogXHUwMDI2ZG1hX2J1Zi5yZXN2IGhlbGQuIFJldHVybnMgMCBvbiBzdWNjZXNzIG9yIC1FT1BOT1RTVVBQIHdoZW5cbitcdCAqIHRoZSBleHBvcnRlciBoYXMgbm8gbWV0YWRhdGEgZm9yIHRoZSByZXF1ZXN0ZWQgbmFtZXNwYWNlLlxuK1x0ICovXG4rXHRpbnQgKCpnZXRfcGNpX3RwaCkoc3RydWN0IGRtYV9idWYgKmRtYWJ1ZiwgYm9vbCBleHRlbmRlZCxcbitcdFx0XHQgICB1MTYgKnN0ZWVyaW5nX3RhZywgdTggKnBoKTtcbitcbiBcdC8qKlxuIFx0ICogQG1hcF9kbWFfYnVmOlxuIFx0ICpcbkBAIC01NjMsNiArNTgzLDggQEAgdm9pZCBkbWFfYnVmX2RldGFjaChzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLFxuIFx0XHQgICAgc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoKTtcbiBpbnQgZG1hX2J1Zl9waW4oc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoKTtcbiB2b2lkIGRtYV9idWZfdW5waW4oc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoKTtcbitpbnQgZG1hX2J1Zl9nZXRfcGNpX3RwaChzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLCBib29sIGV4dGVuZGVkLFxuK1x0XHRcdHUxNiAqc3RlZXJpbmdfdGFnLCB1OCAqcGgpO1xuIFxuIHN0cnVjdCBkbWFfYnVmICpkbWFfYnVmX2V4cG9ydChjb25zdCBzdHJ1Y3QgZG1hX2J1Zl9leHBvcnRfaW5mbyAqZXhwX2luZm8pO1xuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWx4NS9kcml2ZXIuaCBiL2luY2x1ZGUvbGludXgvbWx4NS9kcml2ZXIuaFxuaW5kZXggYjE4NzFjMDgyMWQwYjkuLjhiMzkxMTE5MWZiNjI2IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbHg1L2RyaXZlci5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L21seDUvZHJpdmVyLmhcbkBAIC0xMTgyLDEwICsxMTgyLDIzIEBAIGludCBtbHg1X2RtX3N3X2ljbV9kZWFsbG9jKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIGVudW0gbWx4NV9zd19pY21fdHlwZSB0eXBlXG4gXHRcdFx0ICAgdTY0IGxlbmd0aCwgdTE2IHVpZCwgcGh5c19hZGRyX3QgYWRkciwgdTMyIG9ial9pZCk7XG4gXG4gI2lmZGVmIENPTkZJR19QQ0lFX1RQSFxuK2ludCBtbHg1X3N0X2FsbG9jX2luZGV4X2J5X3RhZyhzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCB1MTYgdGFnLFxuK1x0XHRcdCAgICAgICB1MTYgKnN0X2luZGV4KTtcbitpbnQgbWx4NV9zdF9nZXRfaW5kZXgoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgdTE2IHN0X2luZGV4KTtcbiBpbnQgbWx4NV9zdF9hbGxvY19pbmRleChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCBlbnVtIHRwaF9tZW1fdHlwZSBtZW1fdHlwZSxcbiBcdFx0XHR1bnNpZ25lZCBpbnQgY3B1X3VpZCwgdTE2ICpzdF9pbmRleCk7XG4gaW50IG1seDVfc3RfZGVhbGxvY19pbmRleChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCB1MTYgc3RfaW5kZXgpO1xuICNlbHNlXG4rc3RhdGljIGlubGluZSBpbnQgbWx4NV9zdF9hbGxvY19pbmRleF9ieV90YWcoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldixcbitcdFx0XHRcdFx0ICAgICB1MTYgdGFnLCB1MTYgKnN0X2luZGV4KVxuK3tcbitcdHJldHVybiAtRU9QTk9UU1VQUDtcbit9XG4rXG4rc3RhdGljIGlubGluZSBpbnQgbWx4NV9zdF9nZXRfaW5kZXgoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgdTE2IHN0X2luZGV4KVxuK3tcbitcdHJldHVybiAtRU9QTk9UU1VQUDtcbit9XG4gc3RhdGljIGlubGluZSBpbnQgbWx4NV9zdF9hbGxvY19pbmRleChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LFxuIFx0XHRcdFx0ICAgICAgZW51bSB0cGhfbWVtX3R5cGUgbWVtX3R5cGUsXG4gXHRcdFx0XHQgICAgICB1bnNpZ25lZCBpbnQgY3B1X3VpZCwgdTE2ICpzdF9pbmRleClcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BjaS10cGguaCBiL2luY2x1ZGUvbGludXgvcGNpLXRwaC5oXG5pbmRleCBiZTY4Y2QxN2YyZjgzMy4uNzc0M2FmNmZlNDMyNmUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BjaS10cGguaFxuKysrIGIvaW5jbHVkZS9saW51eC9wY2ktdHBoLmhcbkBAIC05LDYgKzksOCBAQFxuICNpZm5kZWYgTElOVVhfUENJX1RQSF9IXG4gI2RlZmluZSBMSU5VWF9QQ0lfVFBIX0hcbiBcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9wY2lfcmVncy5oXHUwMDNlXG4rXG4gLypcbiAgKiBBY2NvcmRpbmcgdG8gdGhlIEVDTiBmb3IgUENJIEZpcm13YXJlIFNwZWMsIFN0ZWVyaW5nIFRhZyBjYW4gYmUgZGlmZmVyZW50XG4gICogZGVwZW5kaW5nIG9uIHRoZSBtZW1vcnkgdHlwZTogVm9sYXRpbGUgTWVtb3J5IG9yIFBlcnNpc3RlbnQgTWVtb3J5LiBXaGVuIGFcbkBAIC0zMCw2ICszMiw4IEBAIHZvaWQgcGNpZV9kaXNhYmxlX3RwaChzdHJ1Y3QgcGNpX2RldiAqcGRldik7XG4gaW50IHBjaWVfZW5hYmxlX3RwaChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG1vZGUpO1xuIHUxNiBwY2llX3RwaF9nZXRfc3RfdGFibGVfc2l6ZShzdHJ1Y3QgcGNpX2RldiAqcGRldik7XG4gdTMyIHBjaWVfdHBoX2dldF9zdF90YWJsZV9sb2Moc3RydWN0IHBjaV9kZXYgKnBkZXYpO1xuK3U4IHBjaWVfdHBoX2VuYWJsZWRfcmVxX3R5cGUoc3RydWN0IHBjaV9kZXYgKnBkZXYpO1xuK3U4IHBjaWVfdHBoX2NvbXBsZXRlcl90eXBlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTtcbiAjZWxzZVxuIHN0YXRpYyBpbmxpbmUgaW50IHBjaWVfdHBoX3NldF9zdF9lbnRyeShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbiBcdFx0XHRcdFx0dW5zaWduZWQgaW50IGluZGV4LCB1MTYgdGFnKVxuQEAgLTQxLDYgKzQ1LDEwIEBAIHN0YXRpYyBpbmxpbmUgaW50IHBjaWVfdHBoX2dldF9jcHVfc3Qoc3RydWN0IHBjaV9kZXYgKmRldixcbiBzdGF0aWMgaW5saW5lIHZvaWQgcGNpZV9kaXNhYmxlX3RwaChzdHJ1Y3QgcGNpX2RldiAqcGRldikgeyB9XG4gc3RhdGljIGlubGluZSBpbnQgcGNpZV9lbmFibGVfdHBoKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbW9kZSlcbiB7IHJldHVybiAtRUlOVkFMOyB9XG4rc3RhdGljIGlubGluZSB1OCBwY2llX3RwaF9lbmFibGVkX3JlcV90eXBlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuK3sgcmV0dXJuIFBDSV9UUEhfUkVRX0RJU0FCTEU7IH1cbitzdGF0aWMgaW5saW5lIHU4IHBjaWVfdHBoX2NvbXBsZXRlcl90eXBlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuK3sgcmV0dXJuIFBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9OT05FOyB9XG4gI2VuZGlmXG4gXG4gI2VuZGlmIC8qIExJTlVYX1BDSV9UUEhfSCAqL1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC92ZmlvLmggYi9pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oXG5pbmRleCA1ZGU2MThhM2E1ZWVlZS4uMmQzMGJhNDNlMmNmZjUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oXG4rKysgYi9pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oXG5AQCAtMTUzNCw2ICsxNTM0LDQzIEBAIHN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX2RtYV9idWYge1xuICAqL1xuICNkZWZpbmUgVkZJT19ERVZJQ0VfRkVBVFVSRV9NSUdfUFJFQ09QWV9JTkZPdjIgIDEyXG4gXG4rLyoqXG4rICogVXBvbiBWRklPX0RFVklDRV9GRUFUVVJFX1NFVCBhc3NvY2lhdGUgVFBIIChUTFAgUHJvY2Vzc2luZyBIaW50cykgbWV0YWRhdGFcbisgKiB3aXRoIGEgdmZpby1leHBvcnRlZCBkbWEtYnVmLiBUaGUgZG1hLWJ1ZiBtdXN0IGhhdmUgYmVlbiBjcmVhdGVkIGJ5XG4rICogVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGIG9uIHRoaXMgZGV2aWNlLCBhbmQgdGhlIGRldmljZSBtdXN0IHJlcG9ydFxuKyAqIFRQSCBDb21wbGV0ZXIgc3VwcG9ydCBpbiBEZXZpY2UgQ2FwYWJpbGl0aWVzIDIgKGJpdHMgMTM6MTIpOyByZXF1ZXN0c1xuKyAqIGNhcnJ5aW5nIFZGSU9fRE1BX0JVRl9UUEhfU1RfRVhUIGFkZGl0aW9uYWxseSByZXF1aXJlIHRoZSBkZXZpY2UgdG9cbisgKiByZXBvcnQgdGhlIEV4dGVuZGVkIFRQSCBDb21wbGV0ZXIgZW5jb2RpbmcuIE90aGVyd2lzZSB0aGUgaW9jdGxcbisgKiByZXR1cm5zIC1FT1BOT1RTVVBQLlxuKyAqXG4rICogZG1hYnVmX2ZkIGlzIHRoZSBmaWxlIGRlc2NyaXB0b3IgcmV0dXJuZWQgYnkgVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGLlxuKyAqXG4rICogOC1iaXQgU1QgKHN0ZWVyaW5nX3RhZykgYW5kIDE2LWJpdCBFeHRlbmRlZCBTVCAoc3RlZXJpbmdfdGFnX2V4dCkgYXJlXG4rICogZGlzdGluY3QgbmFtZXNwYWNlcy4gVXNlcnNwYWNlIHN1cHBsaWVzIHdoaWNoZXZlciB2YWx1ZXMgYXJlIHZhbGlkIGFuZCBzZXRzXG4rICogdGhlIG1hdGNoaW5nIFZGSU9fRE1BX0JVRl9UUEhfU1QgLyBWRklPX0RNQV9CVUZfVFBIX1NUX0VYVCBiaXRzIGluIEBmbGFncztcbisgKiBhbiBpbXBvcnRlciByZXF1ZXN0cyBvbmUgbmFtZXNwYWNlIGFuZCByZWNlaXZlcyB0aGUgbWF0Y2hpbmcgdmFsdWUuXG4rICpcbisgKiBAZmxhZ3MgPT0gMCBtYXJrcyBhbnkgcHJldmlvdXNseSBwdWJsaXNoZWQgU1QgLyBFeHRlbmRlZC1TVCBhcyBpbnZhbGlkXG4rICogZm9yIGZ1dHVyZSBQQ0kgVFBIIHF1ZXJpZXMgb24gdGhpcyBkbWEtYnVmLlxuKyAqXG4rICogcGggaXMgdGhlIDItYml0IFRMUCBQcm9jZXNzaW5nIEhpbnQgYW5kIG11c3QgYmUgaW4gdGhlIHJhbmdlIFswLCAzXS5cbisgKlxuKyAqIFVzZXJzcGFjZSBtdXN0IHB1Ymxpc2ggVFBIIGJlZm9yZSBoYW5kaW5nIHRoZSBkbWEtYnVmIGZkIHRvIGFuIGltcG9ydGVyLlxuKyAqIENhbGxpbmcgU0VUIGFnYWluIHJlcGxhY2VzIHRoZSBwdWJsaXNoZWQgdmFsdWVzLlxuKyAqL1xuKyNkZWZpbmUgVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGX1RQSCAxM1xuK1xuKyNkZWZpbmUgVkZJT19ETUFfQlVGX1RQSF9TVFx0XHQoMSBcdTAwM2NcdTAwM2MgMClcbisjZGVmaW5lIFZGSU9fRE1BX0JVRl9UUEhfU1RfRVhUXHRcdCgxIFx1MDAzY1x1MDAzYyAxKVxuK1xuK3N0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX2RtYV9idWZfdHBoIHtcbitcdF9fczMyXHRkbWFidWZfZmQ7XG4rXHRfX3UzMlx0ZmxhZ3M7XG4rXHRfX3UxNlx0c3RlZXJpbmdfdGFnX2V4dDtcbitcdF9fdThcdHN0ZWVyaW5nX3RhZztcbitcdF9fdThcdHBoO1xuK307XG4rXG4gLyogLS0tLS0tLS0gQVBJIGZvciBUeXBlMSBWRklPIElPTU1VIC0tLS0tLS0tICovXG4gXG4gLyoqXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQxOToxMzozOC42NTYxNTI3MjRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5OTAwMDUwNTk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVFBIIE1ldGFkYXRhIFBhdGNoIFNlcmllcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggc2VyaWVzLCBhbmQgaXQncyBhZGRpbmcgVFBIIChUTFAgUHJvY2Vzc2luZyBIaW50cykgbWV0YWRhdGEgc3VwcG9ydCB0byBETUEtQlVGLCBzcGVjaWZpY2FsbHkgZm9yIFZGSU8gYW5kIHRoZSBNZWxsYW5veCBDb25uZWN0WCBJbmZpbmliYW5kIGRyaXZlcnMuIFRoYXQgbWVhbnM6XG5cbiogICBBIG5ldyBmdW5jdGlvbiwgYGRtYV9idWZfZ2V0X3BjaV90cGhgLCBpcyBiZWluZyBhZGRlZCB0byB0aGUgY29yZSBETUEtQlVGIGNvZGUuXG4qICAgVkZJTyBQQ0kgaXMgZ2V0dGluZyBhIG5ldyBpb2N0bCBmZWF0dXJlLCBgVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGX1RQSGAuXG4qICAgQSBgZ2V0X3BjaV90cGhgIGNhbGxiYWNrIGlzIGFkZGVkIHRvIGBzdHJ1Y3QgZG1hX2J1Zl9vcHNgLlxuKiAgIEEgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24sIGB2ZmlvX3BjaV9kbWFfYnVmX2dldF9wY2lfdHBoYCwgaXMgYmVpbmcgYWRkZWQgdG8gdGhlIFZGSU8gUENJIGNvZGUuXG4qICAgQW5kIGZpbmFsbHksIHRoZSBtbHg1IEluZmluaWJhbmQgZHJpdmVyIGlzIGJlaW5nIG1vZGlmaWVkIHRvIHVzZSBgZG1hX2J1Zl9nZXRfcGNpX3RwaGAgd2hlbiByZWdpc3RlcmluZyBhIHVzZXIgTVIgd2l0aCBhIGRtYWJ1Zi5cblxuVGhpcyBpcyBhIHByZXR0eSBmdW5jdGlvbmFsIGNoYW5nZS4gSXQncyBhZGRpbmcgYW4gaW9jdGwgZmVhdHVyZSBpbiBWRklPIGFuZCB0aGVuIG1vZGlmeWluZyBhIGRyaXZlciB0byB1c2UgdGhlIG1ldGFkYXRhLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgcmVhY2hhYmxlIHRoaXMgaXMgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC5cblxuVkZJTyBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZSwgYW5kIGl0J3Mga25vd24gdG8gYmUgZnV6emFibGUuIFRoZSBtbHg1IEluZmluaWJhbmQgZHJpdmVyIG1pZ2h0IG5lZWQgc3BlY2lmaWMgaGFyZHdhcmUsIGJ1dCBJIGNhbiBwcm9iYWJseSBtb2NrIHRoYXQuIEhvd2V2ZXIsIGV2ZW4gaWYgSSBjYW4ndCBtb2NrIG1seDUsIFZGSU8gaXMgZGVmaW5pdGVseSByZWFjaGFibGUsIHNvIEkgc2hvdWxkIGZvY3VzIG9uIHRoYXQuXG5cbldhaXQsIHN5emthbGxlciAqY2FuKiBmdXp6IFZGSU8uIFRoYXQncyBnb29kLlxuXG5TbywgbGV0J3MgbG9vayBhdCBgVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGX1RQSGAgbW9yZSBjbG9zZWx5LiBJIGNhbiBzZWUgdGhhdCBgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWZfdHBoYCBpcyB0aGUgaGFuZGxlciwgYW5kIGl0J3MgY2FsbGVkIGZyb20gYHZmaW9fcGNpX2NvcmVfaW9jdGxfZmVhdHVyZWAuIEl0IGxvb2tzIGxpa2UgaXQgcmVxdWlyZXMgYHBjaWVfdHBoX2NvbXBsZXRlcl90eXBlKHZkZXYtXHUwMDNlcGRldilgIHRvICpub3QqIGJlIGBQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfTk9ORWAuIEkgd29uZGVyIGlmIEkgY2FuIGVtdWxhdGUgYSBQQ0kgZGV2aWNlIHdpdGggVFBIIENvbXBsZXRlciBzdXBwb3J0PyBFdmVuIGlmIEkgY2FuJ3QgZ2V0IHRoYXQgZmFyLCB0aGUgaW9jdGwgaGFuZGxlciBpdHNlbGYgaXMgc3RpbGwgcmVhY2hhYmxlIHVwIHRvIHRoYXQgY2hlY2ssIGFuZCB0aGF0J3MgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IGZ1enppbmcuIFBsdXMsIGBkbWFfYnVmX2dldF9wY2lfdHBoYCBpcyBhIGNvcmUgRE1BLUJVRiBmdW5jdGlvbiwgc28gaXQncyBwcm9iYWJseSBwcmV0dHkgaW1wb3J0YW50LlxuXG5JIHNob3VsZCBjaGVjayB0aGUgcmVsZXZhbnQgVkZJTyBjb2RlIGluIGBkcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuY2AgYW5kIGBkcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jYC5cblxuRm9yIHRoZSBidWlsZCBjb25maWcsIEknbGwgbmVlZCBgQ09ORklHX1ZGSU9fUENJYCwgb2YgY291cnNlLCBhbmQgYENPTkZJR19QQ0lFX1RQSGAuIGBDT05GSUdfTUxYNV9JTkZJTklCQU5EYCBtaWdodCBiZSBuZWVkZWQgZm9yIHRoZSBtbHg1IHBhdGgsIGJ1dCBJIGNhbiBwcm9iYWJseSBlbmFibGUgaXQgYW55d2F5LCBldmVuIGlmIHN5emthbGxlciBkb2Vzbid0IGhhdmUgYWN0dWFsIG1seDUgaGFyZHdhcmUuIEkgY2FuIHByb2JhYmx5IGdyZXAgZm9yIGBQQ0lFX1RQSGAgdG8gc2VlIHdoZXJlIGl0IGNvbWVzIHVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjEzMCwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYwMiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDE5OjEzOjQ4LjU1NjIwNTg3MVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTczNzE5ODM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBQQ0lFX1RQSFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3BjaS9LY29uZmlnPTE4NT1jb25maWcgUENJX1BBU0lEXFxuLS1cXG5kcml2ZXJzL3BjaS9LY29uZmlnLTE5Ni1cXG5kcml2ZXJzL3BjaS9LY29uZmlnOjE5Nzpjb25maWcgUENJRV9UUEhcXG5kcml2ZXJzL3BjaS9LY29uZmlnLTE5OC1cXHRib29sIFxcXCJUTFAgUHJvY2Vzc2luZyBIaW50c1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMTk6MTM6NTAuNzI5OTMyNTY3WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ3MTgwMjA5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJ20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgYFZGSU9fUENJYCoqXG5cblJpZ2h0LCBsZXQncyBkaXZlIHN0cmFpZ2h0IGluLiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgYFZGSU9fUENJYC4gSSB3YW50IHRvIGltbWVkaWF0ZWx5IHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucywgcG90ZW50aWFsbHkgaWRlbnRpZnkgc29tZSBzcGVjaWZpYyBhcmVhcyB0byB0cm91Ymxlc2hvb3QsIG9yIHVuZGVyc3RhbmQgaG93IGEgY2VydGFpbiBjb21wb25lbnQgaW4gdGhlIHN5c3RlbSBpcyBhZmZlY3RlZC4gV2l0aCBteSBsZXZlbCBvZiBleHBlcnRpc2UsIHRoaXMgaXMgbW9yZSB0aGFuIGp1c3QgYSBwYXNzaW5nIGdsYW5jZSBhdCB0aGUgc3VyZmFjZS4gSSdtIGxpa2VseSBnZWFyaW5nIHVwIHRvIGV4YW1pbmUgY29uZmlndXJhdGlvbiwgcG90ZW50aWFsIHJlc291cmNlIGNvbmZsaWN0cywgb3IgZXZlbiBkZWx2aW5nIGludG8gdGhlIGludGVyYWN0aW9ucyBiZXR3ZWVuIHRoZSBob3N0IGFuZCB0aGUgdmlydHVhbCBtYWNoaW5lcy4gSXQgbWlnaHQgYWxzbyBiZSBhIHNwZWNpZmljIHRyb3VibGVzaG9vdGluZyBzdGVwIEknbSB0YWtpbmcgaW4gYW4gaW4tZGVwdGggaW52ZXN0aWdhdGlvbi4gSSBhbSBjb25zaWRlcmluZyB0aGUgaW50cmljYWNpZXMgb2YgZGlyZWN0IGRldmljZSBhc3NpZ25tZW50LCBJT01NVSBncm91cHMsIGFuZCB0aGUgb3ZlcmFsbCBzZWN1cml0eSBpbXBsaWNhdGlvbnMuIE15IGN1cnJlbnQgbGluZSBvZiB0aG91Z2h0IGlzIHRoYXQgSSB3YW50IGEgZ3JhbnVsYXIgdW5kZXJzdGFuZGluZyBvZiBgVkZJT19QQ0lgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzUzNywiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDE5OjEzOjU0LjIwMTczNzg1MloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTM2MDkyMTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBWRklPX1BDSVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc9Mj1tZW51IFxcXCJWRklPIHN1cHBvcnQgZm9yIFBDSSBkZXZpY2VzXFxcIlxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTQtXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnOjU6Y29uZmlnIFZGSU9fUENJX0NPUkVcXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctNi1cXHR0cmlzdGF0ZVxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTktXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnOjEwOmNvbmZpZyBWRklPX1BDSV9JTlRYXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTExLVxcdGRlZl9ib29sIHkgaWYgIVMzOTBcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy0xMy1cXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc6MTQ6Y29uZmlnIFZGSU9fUENJXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTE1LVxcdHRyaXN0YXRlIFxcXCJHZW5lcmljIFZGSU8gc3VwcG9ydCBmb3IgYW55IFBDSSBkZXZpY2VcXFwiXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc9MjM9aWYgVkZJT19QQ0lcXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc6MjQ6Y29uZmlnIFZGSU9fUENJX1ZHQVxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy0yNS1cXHRib29sIFxcXCJHZW5lcmljIFZGSU8gUENJIHN1cHBvcnQgZm9yIFZHQSBkZXZpY2VzXFxcIlxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTMzLVxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZzozNDpjb25maWcgVkZJT19QQ0lfSUdEXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTM1LVxcdGJvb2wgXFxcIkdlbmVyaWMgVkZJTyBQQ0kgZXh0ZW5zaW9ucyBmb3IgSW50ZWwgZ3JhcGhpY3MgKEdWVC1kKVxcXCJcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZz00NT1lbmRpZlxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy00Ni1cXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc6NDc6Y29uZmlnIFZGSU9fUENJX1pERVZfS1ZNXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTQ4LVxcdGJvb2wgXFxcIlZGSU8gUENJIGV4dGVuc2lvbnMgZm9yIHMzOTB4IEtWTSBwYXNzdGhyb3VnaFxcXCJcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy01Ny1cXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc6NTg6Y29uZmlnIFZGSU9fUENJX0RNQUJVRlxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy01OS1cXHRkZWZfYm9vbCB5IGlmIFZGSU9fUENJX0NPUkUgXFx1MDAyNlxcdTAwMjYgUENJX1AyUERNQSBcXHUwMDI2XFx1MDAyNiBETUFfU0hBUkVEX0JVRkZFUlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQxOToxMzo1Ni4zMzc4MzYzNDlaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzQxMDE4Njc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipEaXNzZWN0aW5nIHRoZSBWRklPIExhbmRzY2FwZSoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCB0aGUgVkZJTyBzZXR1cC4gU3BlY2lmaWNhbGx5LCBJJ20gdHJ5aW5nIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgZGlmZmVyZW50IGNvbXBvbmVudHMgaW50ZXJyZWxhdGUuIE15IGJyYWluJ3MgbGF0Y2hpbmcgb250byBgVkZJT19QQ0lgLCB3aGljaCBJIGtub3cgaXMgZm91bmRhdGlvbmFsLCBhbmQgdGhlbiBJJ20gbWVudGFsbHkgcGFyc2luZyB0aGUgY29uZGl0aW9uYWwgZGVwZW5kZW5jaWVzLiBgUENJRV9UUEhgIGlzIGp1bXBpbmcgb3V0IGFzIHdlbGwgLSBJIG5lZWQgdG8gcmVjYWxsIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMgYXNwZWN0cyBvZiB0aGUgRE1BIGhhbmRsaW5nIGl0IHByb3ZpZGVzIHRoYXQgSSBuZWVkIHRvIGtlZXAgaW4gbWluZCBmb3IgbXkgdXNlIGNhc2UuXG5cblRoZW4sIHRoZXJlJ3MgYFZGSU9fUENJX0RNQUJVRmAuIEFoIHllcywgdGhlIERNQSBidWZmZXIgc3VwcG9ydC4gSSdtIHJlbWluZGluZyBteXNlbGYgdGhhdCB0aGlzIG9uZSBpcyBhIGJpdCBtb3JlIGludHJpY2F0ZSwgYmVpbmcgYSBgZGVmX2Jvb2wgeWAgaWYgYFZGSU9fUENJX0NPUkVgLCBgUENJX1AyUERNQWAgYW5kIGBETUFfU0hBUkVEX0JVRkZFUmAgYXJlIGFsc28gZW5hYmxlZC4gVGhlIGRlcGVuZGVuY3kgY2hhaW4gaXMgaW1wb3J0YW50LCBJIG5lZWQgdG8gbWFrZSBzdXJlIGFsbCBvZiB0aG9zZSBhcmUgYWRkcmVzc2VkLlxuXG5Ob3csIG15IG1pbmQgc2hpZnRzIGdlYXJzIHNsaWdodGx5LiBMZXQncyBzZWUuLi4gSSBzaG91bGQgY2hlY2sgaW4gb24gaG93IGFsbCBvZiB0aGlzIGludGVyYWN0cyB3aXRoIGBNTFg1X0lORklOSUJBTkRgLiBJJ20gZ29pbmcgdG8gaGF2ZSB0byBtYWtlIHN1cmUgdGhhdCBJIHVuZGVyc3RhbmQgaG93IGFsbCBvZiB0aGVzZSBwaWVjZXMgZml0IHRvZ2V0aGVyLiBUaGVyZSdzIHByb2JhYmx5IGEgcGVyZm9ybWFuY2UgYW5nbGUgaW52b2x2ZWQsIGxldCdzIGV4cGxvcmUgdGhhdCBhcyB3ZWxsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDI5NywiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDE5OjE0OjAwLjY3ODg1ODE2M1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTU0NDUzMzIyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNTFg1X0lORklOSUJBTkRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDUvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg1L0tjb25maWc6Mjpjb25maWcgTUxYNV9JTkZJTklCQU5EXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDUvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJNZWxsYW5veCA1dGggZ2VuZXJhdGlvbiBuZXR3b3JrIGFkYXB0ZXJzIChDb25uZWN0WCBzZXJpZXMpIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDE5OjE0OjAyLjYzMzMxNzMwNVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjczNjQzNjIwNjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBWRklPIERNQS1CVUYgVFBIIEltcGxlbWVudGF0aW9uKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgY29yZSBvZiB0aGVzZSBjaGFuZ2VzIHNlZW1zIHRvIHJldm9sdmUgYXJvdW5kIHV0aWxpemluZyBWRklPIGlvY3RscyB0byBpbnRlcmFjdCB3aXRoIHNvbWUgbmV3IERNQS1CVUYgZnVuY3Rpb25hbGl0eSDigJMgc3BlY2lmaWNhbGx5LCBUYXJnZXQgUGh5c2ljYWwgQWRkcmVzcyAoVFBIKSBzdXBwb3J0LiBUaGUga2V5IGZ1bmN0aW9ucyB0byBrZWVwIGFuIGV5ZSBvbiBhcmU6IGB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl90cGhgLCBgdmZpb19wY2lfZG1hX2J1Zl9nZXRfcGNpX3RwaGAsIGFuZCBgZG1hX2J1Zl9nZXRfcGNpX3RwaGAuXG5cbkZpcnN0LCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBuYW1pbmcgaXMgY29ycmVjdC4gIGB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl90cGhgIOKAkyB5ZXMsIHRoYXQncyB3aGF0J3MgYmVlbiBhZGRlZCBpbiBgZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuY2AuICBHb29kLiBOb3csIG9uIHRvIHRoZSBgZG1hLWJ1ZmAgc2lkZSBvZiB0aGluZ3MuIENvbmZpcm1pbmcgYGRtYV9idWZfZ2V0X3BjaV90cGhgIGlzIHByZXNlbnQgaW4gYGRyaXZlcnMvZG1hLWJ1Zi9kbWEtYnVmLmNgIOKAkyBpdCBpcy4gIEV4Y2VsbGVudC5cblxuTmV4dCwgSSBuZWVkIHRvIGxvb2sgYXQgd2hhdCdzIGJlZW4gYWRkZWQgZm9yIHRoZSBNZWxsYW5veCBkcml2ZXJzLiAgSSdtIHNlYXJjaGluZyBmb3IgYG1seDVfc3RfYWxsb2NfaW5kZXhfYnlfdGFnYCBhbmQgYG1seDVfc3RfZ2V0X2luZGV4YCBpbiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi9zdC5jYC4gWXVwLCB0aGV5J3JlIHRoZXJlLiBUaGF0IG1ha2VzIHNlbnNlLCBnaXZlbiB0aGUgcG90ZW50aWFsIGZvciBSRE1BIHdpdGggdGhlc2UgZGV2aWNlcy5cblxuQW5kIGZpbmFsbHksIHRvIG1ha2Ugc3VyZSB0aGUgdW5kZXJseWluZyBQQ0kgbWVjaGFuaXNtcyBhcmUgaW4gcGxhY2UsIEknbGwgY2hlY2sgYHBjaWVfdHBoX2VuYWJsZWRfcmVxX3R5cGVgIGFuZCBgcGNpZV90cGhfY29tcGxldGVyX3R5cGVgIGluIGBkcml2ZXJzL3BjaS90cGguY2AuICBZZXAsIHRoZXkgYXJlIGFsc28gYWRkZWQuIEdvb2QuXG5cbk5vdyBmb3IgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJJ2xsIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSByaWdodCBrZXJuZWwgY29uZmlncyBhcmUgZW5hYmxlZDogYFBDSUVfVFBIYCwgYFZGSU9fUENJYCwgYFBDSV9QMlBETUFgICh3aGljaCBpcyBlc3NlbnRpYWwgZm9yIGBWRklPX1BDSV9ETUFCVUZgKSwgYERNQV9TSEFSRURfQlVGRkVSYCAoYWxzbyBjcnVjaWFsIGZvciBgVkZJT19QQ0lfRE1BQlVGYCksIGFuZCBgTUxYNV9JTkZJTklCQU5EYCAod2hpbGUgb3B0aW9uYWwsIGl0J3MgZGVmaW5pdGVseSBhIGdvb2QgaWRlYSB0byBoYXZlIHRoYXQgZW5hYmxlZCBmb3IgbWF4aW11bSBmbGV4aWJpbGl0eSkuXG5cbkZpbmFsbHksIEkgc2hvdWxkIHZlcmlmeSB0aGUgYFZGSU9fUENJX0RNQUJVRmAgZGVwZW5kZW5jaWVzIGRpcmVjdGx5IHRvIGJlIDEwMCUgc3VyZSBJJ3ZlIGdvdCBhIGNvbXByZWhlbnNpdmUgdW5kZXJzdGFuZGluZyBvZiB3aGF0J3MgZ29pbmcgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0Nzc5LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDE5OjE0OjA5Ljk5NzY4MTYyNFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkzMjU2OTQ3MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVkZJT19QQ0lfRE1BQlVGXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZz00Nz1jb25maWcgVkZJT19QQ0lfWkRFVl9LVk1cXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy01Ny1cXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc6NTg6Y29uZmlnIFZGSU9fUENJX0RNQUJVRlxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy01OS1cXHRkZWZfYm9vbCB5IGlmIFZGSU9fUENJX0NPUkUgXFx1MDAyNlxcdTAwMjYgUENJX1AyUERNQSBcXHUwMDI2XFx1MDAyNiBETUFfU0hBUkVEX0JVRkZFUlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQxOToxNDoxMS45MzAyNTc0MDZaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU3OTYxMzExNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgcmVmbGVjdGluZyBteSBpbW1lZGlhdGUgdW5kZXJzdGFuZGluZzpcblxuKipLZXJuZWwgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMgQXNzZXNzbWVudCoqXG5cblJpZ2h0LCBzbyBJJ20gZm9jdXNpbmcgb24gdGhlc2UgdHdvIGNyaXRpY2FsIGNvbXBvbmVudHM6IGBQQ0lfUDJQRE1BYCBhbmQgYERNQV9TSEFSRURfQlVGRkVSYC4gVGhleSBzZWVtIGVzc2VudGlhbCBmb3IgdGhpcyBzcGVjaWZpYyBzZXR1cC4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGVpciBkZXBlbmRlbmNpZXMsIGFuZCBob3cgdGhleSByZWxhdGUgdG8gdGhlIG92ZXJhbGwgZHJpdmVyIGNvbmZpZ3VyYXRpb24uXG5cbkZpcnN0LCBsZXQncyBjb25maXJtIG15IHVuZGVyc3RhbmRpbmc6IEknbSBjaGVja2luZyBpZiBgVkZJT19QQ0lfQ09SRWAgaXMgaW5kZWVkIHNldCBhcyBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGluIHRoZSBrZXJuZWwuIEFoLCB5ZXMsIGl0J3MgY29ycmVjdGx5IHNlbGVjdGVkIHRocm91Z2ggYFZGSU9fUENJYC4gR29vZCwgdGhhdCBtYWtlcyBzZW5zZS4gVGhhdCdzIGEgY3JpdGljYWwgZGVwZW5kZW5jeSBmb3IgYSBnb29kIGZldyBzZXR1cHMuXG5cbk5leHQsIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgdGhlcmUncyBhbnkgbGluayBiZXR3ZWVuIHRoZSBNZWxsYW5veCBkcml2ZXIgYW5kIHRoZXNlIG90aGVyIGNvbXBvbmVudHMuIEl0IGxvb2tzIGxpa2UgSSBuZWVkIHRvIHF1aWNrbHkgZXN0YWJsaXNoIGlmIGBNTFg1X0NPUkVgIGlzIHJlcXVpcmVkIGZvciBgTUxYNV9JTkZJTklCQU5EYC4gVGhhdCByZWxhdGlvbnNoaXAgaXMgcHJvYmFibHkgdmVyeSBpbXBvcnRhbnQgZm9yIHBlcmZvcm1hbmNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTkwMSwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDE5OjE0OjE2LjUwOTg3NTIzNFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkxODYzNzQ3MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTUxYNV9DT1JFXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9LY29uZmlnLTUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL0tjb25maWc6Njpjb25maWcgTUxYNV9DT1JFXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL0tjb25maWctNy1cXHR0cmlzdGF0ZSBcXFwiTWVsbGFub3ggNXRoIGdlbmVyYXRpb24gbmV0d29yayBhZGFwdGVycyAoQ29ubmVjdFggc2VyaWVzKSBjb3JlIGRyaXZlclxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9LY29uZmlnPTE5PWNvbmZpZyBNTFg1X0ZQR0FcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9LY29uZmlnLTI4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9LY29uZmlnOjI5OmNvbmZpZyBNTFg1X0NPUkVfRU5cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvS2NvbmZpZy0zMC1cXHRib29sIFxcXCJNZWxsYW5veCA1dGggZ2VuZXJhdGlvbiBuZXR3b3JrIGFkYXB0ZXJzIChDb25uZWN0WCBzZXJpZXMpIEV0aGVybmV0IHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvS2NvbmZpZz0xMTI9Y29uZmlnIE1MWDVfVENfU0FNUExFXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvS2NvbmZpZy0xMjQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL0tjb25maWc6MTI1OmNvbmZpZyBNTFg1X0NPUkVfRU5fRENCXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL0tjb25maWctMTI2LVxcdGJvb2wgXFxcIkRhdGEgQ2VudGVyIEJyaWRnaW5nIChEQ0IpIFN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvS2NvbmZpZy0xMzYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL0tjb25maWc6MTM3OmNvbmZpZyBNTFg1X0NPUkVfSVBPSUJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvS2NvbmZpZy0xMzgtXFx0Ym9vbCBcXFwiTWVsbGFub3ggNXRoIGdlbmVyYXRpb24gbmV0d29yayBhZGFwdGVycyAoY29ubmVjdFggc2VyaWVzKSBJUG9JQiBvZmZsb2FkcyBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQxOToxNDoxOC40Mjg1MTc3MTZaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjAyMzc3MTk2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBDdXJyZW50IEFuYWx5c2lzOiBUUEgtUmVsYXRlZCBQQ0kvVkZJTyBDYXBhYmlsaXRpZXMqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gc29tZSBjcnVjaWFsIFBDSS9WRklPIGNvZGUsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIFRyYW5zYWN0aW9uIFByb2Nlc3NpbmcgSGludHMgKFRQSCkuIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIG1hcCBvdXQgdGhlIGtleSBjb21wb25lbnRzIGludm9sdmVkIGluIHRoaXMgZnVuY3Rpb25hbGl0eS4gSSdtIHN0YXJ0aW5nIGJ5IGxpc3Rpbmcgb3V0IHRoZXNlIGtleSBlbGVtZW50czpcblxuKiAgIGBQQ0lFX1RQSGBcbiogICBgVkZJT19QQ0lgXG4qICAgYFBDSV9QMlBETUFgXG4qICAgYE1MWDVfSU5GSU5JQkFORGBcblxuSSBuZWVkIHRvIGZvY3VzIG9uIHRoZXNlIHN5bWJvbHM6XG5cbiogICBgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWZfdHBoYFxuKiAgIGB2ZmlvX3BjaV9kbWFfYnVmX2dldF9wY2lfdHBoYFxuKiAgIGBkbWFfYnVmX2dldF9wY2lfdHBoYFxuKiAgIGBwY2llX3RwaF9lbmFibGVkX3JlcV90eXBlYFxuKiAgIGBwY2llX3RwaF9jb21wbGV0ZXJfdHlwZWBcblxuV2FpdCBhIHNlY29uZC4uLkkndmUganVzdCBzcG90dGVkIHNvbWV0aGluZyBpbnRlcmVzdGluZy4gV2hpbGUgbG9va2luZyBhdCBjb2RlLCBgbWx4NV9zdF9hbGxvY19pbmRleF9ieV90YWdgIGFuZCBgbWx4NV9zdF9nZXRfaW5kZXhgIGFyZSBpbiB0aGUgYGRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9saWIvc3QuY2AgZmlsZS4gVGhpcyBpcyBjcnVjaWFsOyBJIG5lZWQgdG8gYWRkIHRoZW0gdG8gbXkgXCJGb2N1c1N5bWJvbHNcIiBsaXN0IGFzIHRoZXkgYXJlIHJlbGF0ZWQgdG8gdGhlIE1lbGxhbm94IGRyaXZlcnMgd2hpY2ggd2lsbCBiZSBlc3NlbnRpYWwgdG8gY29uc2lkZXIgd2hlbiB1bmRlcnN0YW5kaW5nIGZ1bGwgVFBIIGJlaGF2aW91ci4gU28sIEkgbmVlZCB0byBpbmNsdWRlIHRoZXNlIGZ1bmN0aW9uczpcblxuKiAgIGBtbHg1X3N0X2FsbG9jX2luZGV4X2J5X3RhZ2BcbiogICBgbWx4NV9zdF9nZXRfaW5kZXhgXG5cbk5vdywgbGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHNvbWV0aGluZyBxdWlja2x5IHRvIGVuc3VyZSBJIGhhdmUgdGhlIHJpZ2h0IG5hbWUuLi4geWVwLCBgVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGX1RQSGAgaXMgdGhlIGNvcnJlY3QgbWFjcm8uIFNhdGlzZmllZCB3aXRoIHRoYXQuXG5cbkxhc3RseSwgbGV0IG1lIHJ1biBhIHF1aWNrIGNoZWNrIG9uIHRoZSBpbXBsaWNhdGlvbnMgb2YgYHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3RwaGAuIFRoaXMgaXMgbGlrZWx5IHdoZXJlIHRoZSBjb3JlIFZGSU8gVFBIIGltcGxlbWVudGF0aW9uIHN0YXJ0cy4gVW5kZXJzdGFuZGluZyBpdCB3aWxsIGJlIGtleS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY2OTAsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMTk6MTQ6MjQuNDUyMjkzMjM4WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTAzNjE3MDg0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3RwaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYz0xNTU3PWludCB2ZmlvX3BjaV9jb3JlX2lvY3RsX2ZlYXR1cmUoc3RydWN0IHZmaW9fZGV2aWNlICpkZXZpY2UsIHUzMiBmbGFncyxcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTE1NzUtXFx0Y2FzZSBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUZfVFBIOlxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jOjE1NzY6XFx0XFx0cmV0dXJuIHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3RwaCh2ZGV2LCBmbGFncywgYXJnLFxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTE1NzctXFx0XFx0XFx0XFx0XFx0XFx0XFx0IGFyZ3N6KTtcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmM9MjUwPWludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1ZihzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIHUzMiBmbGFncyxcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmMtMzY0LVxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmM6MzY1OmludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl90cGgoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LFxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmMtMzY2LVxcdFxcdFxcdFxcdCAgICAgIHUzMiBmbGFncyxcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfcHJpdi5oPTExOD1pbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWYoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCB1MzIgZmxhZ3MsXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX3ByaXYuaC0xMjAtXFx0XFx0XFx0XFx0ICBzaXplX3QgYXJnc3opO1xcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfcHJpdi5oOjEyMTppbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWZfdHBoKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldixcXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX3ByaXYuaC0xMjItXFx0XFx0XFx0XFx0ICAgICAgdTMyIGZsYWdzLFxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9wcml2Lmg9MTM2PXN0YXRpYyBpbmxpbmUgaW50XFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9wcml2Lmg6MTM3OnZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3RwaChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIHUzMiBmbGFncyxcXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX3ByaXYuaC0xMzgtXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV9kbWFfYnVmX3RwaCBfX3VzZXIgKmFyZyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMTk6MTQ6MjYuMzU1OTIxNDkyWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgzMDg3MzgzMjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGFkZGluZyBzb21lIGludGVyZXN0aW5nIG5ldyBmdW5jdGlvbmFsaXR5IHJlbGF0ZWQgdG8gRE1BLUJVRnMgYW5kIFBDSWUgVFBIIChUTFAgUHJvY2Vzc2luZyBIaW50cykuIEVzc2VudGlhbGx5LCBpdCdzIGFsbG93aW5nIHVzZXJzcGFjZSwgdGhyb3VnaCBWRklPIGlvY3RscywgdG8gc2V0IGFuZCByZXRyaWV2ZSBUUEggbWV0YWRhdGEgYXNzb2NpYXRlZCB3aXRoIGEgRE1BLUJVRi4gVGhhdCdzIGEgcHJldHR5IHNpZ25pZmljYW50IGNoYW5nZSwgZXNwZWNpYWxseSBnaXZlbiB0aGUgaW50ZWdyYXRpb24gd2l0aCBjb3JlIERNQS1CVUYsIFZGSU8sIGFuZCB0aGUgbWx4NSBJbmZpbmliYW5kIGRyaXZlci5cblxuU3BlY2lmaWNhbGx5LCBpdCBsb29rcyBsaWtlIGEgbmV3IGBpb2N0bGAgaXMgaW50cm9kdWNlZCBpbiBWRklPIHRvIHNldCBUUEggbWV0YWRhdGEgb24gYSBETUEtQlVGLiBBIGNvcnJlc3BvbmRpbmcgYGdldF9wY2lfdHBoYCBvcGVyYXRpb24gaXMgYWRkZWQgdG8gYGRtYV9idWZfb3BzYCwgYW5kIGl0IGxvb2tzIGxpa2UgdGhpcyBpcyBpbXBsZW1lbnRlZCBmb3IgVkZJTyBQQ0kgRE1BLUJVRnMsIHdoaWNoIGlzIHNlbnNpYmxlLiBUaGUgbWx4NSBJQiBkcml2ZXIgYWxzbyBnZXRzIHVwZGF0ZWQgdG8gcXVlcnkgYW5kIHV0aWxpemUgdGhpcyBtZXRhZGF0YSwgd2hpY2ggbWFrZXMgaXQgYSBjcml0aWNhbCBwYXJ0IG9mIHRoZSBuZXcgZmVhdHVyZS5cblxuR2l2ZW4gdGhhdCBpdCdzIHVzZXItYWNjZXNzaWJsZSB2aWEgVkZJTyBpb2N0bHMgYW5kIHRvdWNoZXMgZmFpcmx5IGZ1bmRhbWVudGFsIGtlcm5lbCBzdWJzeXN0ZW1zLCBJIGRlZmluaXRlbHkgdGhpbmsgdGhpcyB3YXJyYW50cyBmdXp6aW5nLiBJJ2xsIHNldCBgV29ydGhGdXp6aW5nPXRydWVgLlxuXG5UaGUgaW1wb3J0YW50IGJpdHMgdG8ga2VlcCBhbiBleWUgb24gYXJlIHRoZSBuZXcgZmVhdHVyZXMgaW50cm9kdWNlZCwgdGhlIHNwZWNpZmljIGNhbGwgcGF0aHMgYW5kIGludGVyYWN0aW9uIGJldHdlZW4gdGhlIHN5c3RlbXMsIGVzcGVjaWFsbHkgYHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3RwaGAsIGB2ZmlvX3BjaV9kbWFfYnVmX2dldF9wY2lfdHBoYCwgYGRtYV9idWZfZ2V0X3BjaV90cGhgLCBgcGNpZV90cGhfZW5hYmxlZF9yZXFfdHlwZWAsIGBwY2llX3RwaF9jb21wbGV0ZXJfdHlwZWAsIGBtbHg1X3N0X2FsbG9jX2luZGV4X2J5X3RhZ2AsIGFuZCBgbWx4NV9zdF9nZXRfaW5kZXhgLiBJdCB3aWxsIGFsc28gYmUgaW1wb3J0YW50IHRvIGVuc3VyZSB0aGVyZSBhcmUgbm8gc3VidGxlIHJhY2UgY29uZGl0aW9ucyBvciBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZXMgYXJvdW5kIHRob3NlIGNoYW5nZXMuIFRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGludGVyZXN0aW5nLCBhbmQgaXQgbG9va3MgbGlrZSBpdCBkZXBlbmRzIG9uIGBQQ0lFX1RQSGAsIGBWRklPX1BDSWAsIGBQQ0lfUDJQRE1BYCwgYW5kIGBNTFg1X0lORklOSUJBTkRgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODE0MywiT3V0cHV0VG9rZW5zIjozMDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMTk6MTQ6MzQuNjY0NjYzODQ3WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzU4MzE3NDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBDSUVfVFBIXCIsXG4gICAgXCJWRklPX1BDSVwiLFxuICAgIFwiUENJX1AyUERNQVwiLFxuICAgIFwiTUxYNV9JTkZJTklCQU5EXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWZfdHBoXCIsXG4gICAgXCJ2ZmlvX3BjaV9kbWFfYnVmX2dldF9wY2lfdHBoXCIsXG4gICAgXCJkbWFfYnVmX2dldF9wY2lfdHBoXCIsXG4gICAgXCJwY2llX3RwaF9lbmFibGVkX3JlcV90eXBlXCIsXG4gICAgXCJwY2llX3RwaF9jb21wbGV0ZXJfdHlwZVwiLFxuICAgIFwibWx4NV9zdF9hbGxvY19pbmRleF9ieV90YWdcIixcbiAgICBcIm1seDVfc3RfZ2V0X2luZGV4XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBWRklPIGlvY3RsIGZlYXR1cmUgYFZGSU9fREVWSUNFX0ZFQVRVUkVfRE1BX0JVRl9UUEhgIHRvIGFzc29jaWF0ZSBQQ0llIFRQSCAoVExQIFByb2Nlc3NpbmcgSGludHMpIG1ldGFkYXRhIHdpdGggYSBETUEtQlVGLiBJdCBhbHNvIGFkZHMgYSBuZXcgYGdldF9wY2lfdHBoYCBjYWxsYmFjayB0byBgZG1hX2J1Zl9vcHNgIGFuZCBpbXBsZW1lbnRzIGl0IGZvciBWRklPIFBDSSBETUEtQlVGcy4gVGhlIE1lbGxhbm94IG1seDUgSW5maW5pYmFuZCBkcml2ZXIgaXMgbW9kaWZpZWQgdG8gcXVlcnkgYW5kIHVzZSB0aGlzIG1ldGFkYXRhLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgRE1BLUJVRiwgVkZJTywgYW5kIG1seDUgbG9naWMgdGhhdCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBDSUVfVFBIXCIsXG4gICAgXCJWRklPX1BDSVwiLFxuICAgIFwiUENJX1AyUERNQVwiLFxuICAgIFwiTUxYNV9JTkZJTklCQU5EXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWZfdHBoXCIsXG4gICAgXCJ2ZmlvX3BjaV9kbWFfYnVmX2dldF9wY2lfdHBoXCIsXG4gICAgXCJkbWFfYnVmX2dldF9wY2lfdHBoXCIsXG4gICAgXCJwY2llX3RwaF9lbmFibGVkX3JlcV90eXBlXCIsXG4gICAgXCJwY2llX3RwaF9jb21wbGV0ZXJfdHlwZVwiLFxuICAgIFwibWx4NV9zdF9hbGxvY19pbmRleF9ieV90YWdcIixcbiAgICBcIm1seDVfc3RfZ2V0X2luZGV4XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBWRklPIGlvY3RsIGZlYXR1cmUgYFZGSU9fREVWSUNFX0ZFQVRVUkVfRE1BX0JVRl9UUEhgIHRvIGFzc29jaWF0ZSBQQ0llIFRQSCAoVExQIFByb2Nlc3NpbmcgSGludHMpIG1ldGFkYXRhIHdpdGggYSBETUEtQlVGLiBJdCBhbHNvIGFkZHMgYSBuZXcgYGdldF9wY2lfdHBoYCBjYWxsYmFjayB0byBgZG1hX2J1Zl9vcHNgIGFuZCBpbXBsZW1lbnRzIGl0IGZvciBWRklPIFBDSSBETUEtQlVGcy4gVGhlIE1lbGxhbm94IG1seDUgSW5maW5pYmFuZCBkcml2ZXIgaXMgbW9kaWZpZWQgdG8gcXVlcnkgYW5kIHVzZSB0aGlzIG1ldGFkYXRhLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgRE1BLUJVRiwgVkZJTywgYW5kIG1seDUgbG9naWMgdGhhdCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowg6gwd[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-22 19:07:13 +0000 UTC FinishedAt: 2026-06-22 19:14:36 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "a975094bf98ca97be9146f9d3b5681a6f9cf5ce3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PCIE_TPH", "VFIO_PCI", "PCI_P2PDMA", "MLX5_INFINIBAND" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "a975094bf98ca97be9146f9d3b5681a6f9cf5ce3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PCIE_TPH", "VFIO_PCI", "PCI_P2PDMA", "MLX5_INFINIBAND" ], "series_id": "4663fac5-8a4f-492f-a717-0c70e9a07bab" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "vfio_pci_core_feature_dma_buf_tph", "vfio_pci_dma_buf_get_pci_tph", "dma_buf_get_pci_tph", "pcie_tph_enabled_req_type", "pcie_tph_completer_type", "mlx5_st_alloc_index_by_tag", "mlx5_st_get_index" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDE5OjEzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BDSUVfVFBIJiMzNDssCiAgICAmIzM0O1ZGSU9fUENJJiMzNDssCiAgICAmIzM0O1BDSV9QMlBETUEmIzM0OywKICAgICYjMzQ7TUxYNV9JTkZJTklCQU5EJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWZfdHBoJiMzNDssCiAgICAmIzM0O3ZmaW9fcGNpX2RtYV9idWZfZ2V0X3BjaV90cGgmIzM0OywKICAgICYjMzQ7ZG1hX2J1Zl9nZXRfcGNpX3RwaCYjMzQ7LAogICAgJiMzNDtwY2llX3RwaF9lbmFibGVkX3JlcV90eXBlJiMzNDssCiAgICAmIzM0O3BjaWVfdHBoX2NvbXBsZXRlcl90eXBlJiMzNDssCiAgICAmIzM0O21seDVfc3RfYWxsb2NfaW5kZXhfYnlfdGFnJiMzNDssCiAgICAmIzM0O21seDVfc3RfZ2V0X2luZGV4JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgVkZJTyBpb2N0bCBmZWF0dXJlIGBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUZfVFBIYCB0byBhc3NvY2lhdGUgUENJZSBUUEggKFRMUCBQcm9jZXNzaW5nIEhpbnRzKSBtZXRhZGF0YSB3aXRoIGEgRE1BLUJVRi4gSXQgYWxzbyBhZGRzIGEgbmV3IGBnZXRfcGNpX3RwaGAgY2FsbGJhY2sgdG8gYGRtYV9idWZfb3BzYCBhbmQgaW1wbGVtZW50cyBpdCBmb3IgVkZJTyBQQ0kgRE1BLUJVRnMuIFRoZSBNZWxsYW5veCBtbHg1IEluZmluaWJhbmQgZHJpdmVyIGlzIG1vZGlmaWVkIHRvIHF1ZXJ5IGFuZCB1c2UgdGhpcyBtZXRhZGF0YS4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIERNQS1CVUYsIFZGSU8sIGFuZCBtbHg1IGxvZ2ljIHRoYXQgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAxOToxMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDIxOGIyNjk5NmZmYTRjOThiYzUxMzA4Y2M5YzA3ZWUwMjU4MjVhN2JcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1biAyMiAxOToxMzozNiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS1idWYvZG1hLWJ1Zi5jIGIvZHJpdmVycy9kbWEtYnVmL2RtYS1idWYuY1xuaW5kZXggZDUwNGM2MzZkYzI5NGUuLjdhNGM5YjBkNWRhYjQ2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kbWEtYnVmL2RtYS1idWYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9kbWEtYnVmL2RtYS1idWYuY1xuQEAgLTExNDQsNiAmIzQzOzExNDQsMzEgQEAgdm9pZCBkbWFfYnVmX3VucGluKHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaClcbiB9XG4gRVhQT1JUX1NZTUJPTF9OU19HUEwoZG1hX2J1Zl91bnBpbiwgXCYjMzQ7RE1BX0JVRlwmIzM0Oyk7XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiBkbWFfYnVmX2dldF9wY2lfdHBoIC0gUmV0cmlldmUgUENJZSBUTFAgUHJvY2Vzc2luZyBIaW50IChUUEgpIG1ldGFkYXRhXG4mIzQzOyAqIEBkbWFidWY6IERNQSBidWZmZXIgdG8gcXVlcnlcbiYjNDM7ICogQGV4dGVuZGVkOiBmYWxzZSBmb3IgOC1iaXQgU1QsIHRydWUgZm9yIDE2LWJpdCBFeHRlbmRlZCBTVFxuJiM0MzsgKiBAc3RlZXJpbmdfdGFnOiByZXR1cm5zIHRoZSByYXcgc3RlZXJpbmcgdGFnIGZvciB0aGUgcmVxdWVzdGVkIG5hbWVzcGFjZVxuJiM0MzsgKiBAcGg6IHJldHVybnMgdGhlIFRQSCBwcm9jZXNzaW5nIGhpbnRcbiYjNDM7ICpcbiYjNDM7ICogV3JhcHBlciBmb3IgdGhlIG9wdGlvbmFsIFx1MDAyNmRtYV9idWZfb3BzLmdldF9wY2lfdHBoIGNhbGxiYWNrLlxuJiM0MzsgKlxuJiM0MzsgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIFx1MDAyNmRtYV9idWYucmVzdiBoZWxkLiBSZXR1cm5zIC1FT1BOT1RTVVBQIGlmIHRoZVxuJiM0MzsgKiBleHBvcnRlciBkb2VzIG5vdCBpbXBsZW1lbnQgdGhlIGNhbGxiYWNrIG9yIGhhcyBubyBtZXRhZGF0YSBmb3IgdGhlXG4mIzQzOyAqIHJlcXVlc3RlZCBuYW1lc3BhY2UuXG4mIzQzOyAqL1xuJiM0MztpbnQgZG1hX2J1Zl9nZXRfcGNpX3RwaChzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLCBib29sIGV4dGVuZGVkLFxuJiM0MztcdFx0XHR1MTYgKnN0ZWVyaW5nX3RhZywgdTggKnBoKVxuJiM0Mzt7XG4mIzQzO1x0ZG1hX3Jlc3ZfYXNzZXJ0X2hlbGQoZG1hYnVmLVx1MDAzZXJlc3YpO1xuJiM0MztcbiYjNDM7XHRpZiAoIWRtYWJ1Zi1cdTAwM2VvcHMtXHUwMDNlZ2V0X3BjaV90cGgpXG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1xuJiM0MztcdHJldHVybiBkbWFidWYtXHUwMDNlb3BzLVx1MDAzZWdldF9wY2lfdHBoKGRtYWJ1ZiwgZXh0ZW5kZWQsIHN0ZWVyaW5nX3RhZywgcGgpO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfTlNfR1BMKGRtYV9idWZfZ2V0X3BjaV90cGgsIFwmIzM0O0RNQV9CVUZcJiMzNDspO1xuJiM0MztcbiAvKipcbiAgKiBkbWFfYnVmX21hcF9hdHRhY2htZW50IC0gUmV0dXJucyB0aGUgc2NhdHRlcmxpc3QgdGFibGUgb2YgdGhlIGF0dGFjaG1lbnQ7XG4gICogbWFwcGVkIGludG8gX2RldmljZV8gYWRkcmVzcyBzcGFjZS4gSXMgYSB3cmFwcGVyIGZvciBtYXBfZG1hX2J1ZigpIG9mIHRoZVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg1L21haW4uYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg1L21haW4uY1xuaW5kZXggMDI4MDkxMTRmYzc5YWYuLmEyYjQ5N2Y2YjE2YmRjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDUvbWFpbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NS9tYWluLmNcbkBAIC02MCw2ICYjNDM7NjAsNyBAQFxuIE1PRFVMRV9BVVRIT1IoXCYjMzQ7RWxpIENvaGVuIFx1MDAzY2VsaUBtZWxsYW5veC5jb21cdTAwM2VcJiMzNDspO1xuIE1PRFVMRV9ERVNDUklQVElPTihcJiMzNDtNZWxsYW5veCA1dGggZ2VuZXJhdGlvbiBuZXR3b3JrIGFkYXB0ZXJzIChDb25uZWN0WCBzZXJpZXMpIElCIGRyaXZlclwmIzM0Oyk7XG4gTU9EVUxFX0xJQ0VOU0UoXCYjMzQ7RHVhbCBCU0QvR1BMXCYjMzQ7KTtcbiYjNDM7TU9EVUxFX0lNUE9SVF9OUyhcJiMzNDtETUFfQlVGXCYjMzQ7KTtcbiBcbiBzdHJ1Y3QgbWx4NV9pYl9ldmVudF93b3JrIHtcbiBcdHN0cnVjdCB3b3JrX3N0cnVjdFx0d29yaztcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NS9tci5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDUvbXIuY1xuaW5kZXggZTZiNzQ5NTVkOTVkY2QuLjdhY2VkM2Y1NTQ1NjFlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDUvbXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDUvbXIuY1xuQEAgLTM5LDYgJiM0MzszOSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZGVsYXkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RtYS1idWYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RtYS1yZXN2LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcGNpLXRwaC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjcmRtYS9mcm1yX3Bvb2xzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NyZG1hL2liX3VtZW1fb2RwLmhcdTAwM2VcbiAjaW5jbHVkZSBcJiMzNDtkbS5oXCYjMzQ7XG5AQCAtMTY3LDYgJiM0MzsxNjgsMzIgQEAgc3RhdGljIGludCBnZXRfdW5jaGFuZ2VhYmxlX2FjY2Vzc19mbGFncyhzdHJ1Y3QgbWx4NV9pYl9kZXYgKmRldixcbiAjZGVmaW5lIE1MWDVfRlJNUl9QT09MU19LRVJORUxfS0VZX1BIX01BU0sgR0VOTUFTS19VTEwoMjMsIDE2KVxuICNkZWZpbmUgTUxYNV9GUk1SX1BPT0xTX0tFUk5FTF9LRVlfU1RfSU5ERVhfTUFTSyBHRU5NQVNLX1VMTCgxNSwgMClcbiBcbiYjNDM7c3RhdGljIGludCBtbHg1X2liX2dldF9mcm1yX3N0X2hhbmRsZV9yZWYoc3RydWN0IG1seDVfaWJfZGV2ICpkZXYsXG4mIzQzO1x0XHRcdFx0XHQgIHUxNiBzdF9pbmRleClcbiYjNDM7e1xuJiM0MztcdGlmIChzdF9pbmRleCA9PSBNTFg1X01LQ19QQ0lFX1RQSF9OT19TVEVFUklOR19UQUdfSU5ERVgpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIG1seDVfc3RfZ2V0X2luZGV4KGRldi1cdTAwM2VtZGV2LCBzdF9pbmRleCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIG1seDVfaWJfcHV0X3N0X2luZGV4X3JlZihzdHJ1Y3QgbWx4NV9pYl9kZXYgKmRldiwgdTE2IHN0X2luZGV4KVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHN0X2luZGV4ID09IE1MWDVfTUtDX1BDSUVfVFBIX05PX1NURUVSSU5HX1RBR19JTkRFWClcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0bWx4NV9zdF9kZWFsbG9jX2luZGV4KGRldi1cdTAwM2VtZGV2LCBzdF9pbmRleCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIG1seDVfaWJfcHV0X2ZybXJfc3RfaGFuZGxlX3JlZihzdHJ1Y3QgbWx4NV9pYl9kZXYgKmRldixcbiYjNDM7XHRcdFx0XHRcdCAgIHU2NCBrZXJuZWxfdmVuZG9yX2tleSlcbiYjNDM7e1xuJiM0MztcdHUxNiBzdF9pbmRleCA9IEZJRUxEX0dFVChNTFg1X0ZSTVJfUE9PTFNfS0VSTkVMX0tFWV9TVF9JTkRFWF9NQVNLLFxuJiM0MztcdFx0XHRcdCBrZXJuZWxfdmVuZG9yX2tleSk7XG4mIzQzO1xuJiM0MztcdG1seDVfaWJfcHV0X3N0X2luZGV4X3JlZihkZXYsIHN0X2luZGV4KTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgc3RydWN0IG1seDVfaWJfbXIgKlxuIF9tbHg1X2ZybXJfcG9vbF9hbGxvYyhzdHJ1Y3QgbWx4NV9pYl9kZXYgKmRldiwgc3RydWN0IGliX3VtZW0gKnVtZW0sXG4gXHRcdCAgICAgIGludCBhY2Nlc3NfZmxhZ3MsIGludCBhY2Nlc3NfbW9kZSxcbkBAIC0yMTgsNyAmIzQzOzI0NSw5IEBAIHN0cnVjdCBtbHg1X2liX21yICptbHg1X21yX2NhY2hlX2FsbG9jKHN0cnVjdCBtbHg1X2liX2RldiAqZGV2LFxuIFx0XHRcdFx0ICAgICAgMCA6XG4gXHRcdFx0XHQgICAgICBNTFg1X0ZSTVJfUE9PTFNfS0VZX0FDQ0VTU19NT0RFX0tTTV9NQVNLLFxuIFx0XHQubnVtX2RtYV9ibG9ja3MgPSBuZGVzY3MsXG4tXHRcdC5rZXJuZWxfdmVuZG9yX2tleSA9IDAsIC8qIG5vIFBIIGFuZCBubyBTVCBpbmRleCAqL1xuJiM0MztcdFx0Lmtlcm5lbF92ZW5kb3Jfa2V5ID1cbiYjNDM7XHRcdFx0RklFTERfUFJFUChNTFg1X0ZSTVJfUE9PTFNfS0VSTkVMX0tFWV9TVF9JTkRFWF9NQVNLLFxuJiM0MztcdFx0XHRcdCAgIE1MWDVfTUtDX1BDSUVfVFBIX05PX1NURUVSSU5HX1RBR19JTkRFWCksXG4gXHR9O1xuIFx0c3RydWN0IG1seDVfaWJfbXIgKm1yO1xuIFx0aW50IHJldDtcbkBAIC0zMzUsNiAmIzQzOzM2NCw3IEBAIHN0YXRpYyBpbnQgbWx4NXJfYnVpbGRfZnJtcl9rZXkoc3RydWN0IGliX2RldmljZSAqZGV2aWNlLFxuIFx0XHRnZXRfdW5jaGFuZ2VhYmxlX2FjY2Vzc19mbGFncyhkZXYsIGluLVx1MDAzZWFjY2Vzc19mbGFncyk7XG4gXHRvdXQtXHUwMDNldmVuZG9yX2tleSA9IGluLVx1MDAzZXZlbmRvcl9rZXk7XG4gXHRvdXQtXHUwMDNlbnVtX2RtYV9ibG9ja3MgPSBpbi1cdTAwM2VudW1fZG1hX2Jsb2NrcztcbiYjNDM7XHRvdXQtXHUwMDNla2VybmVsX3ZlbmRvcl9rZXkgPSBpbi1cdTAwM2VrZXJuZWxfdmVuZG9yX2tleTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbkBAIC01NTcsNiAmIzQzOzU4Nyw5IEBAIHN0YXRpYyBzdHJ1Y3QgbWx4NV9pYl9tciAqcmVnX2NyZWF0ZShzdHJ1Y3QgaWJfcGQgKnBkLCBzdHJ1Y3QgaWJfdW1lbSAqdW1lbSxcbiBcdG1yLVx1MDAzZWlibXIucGQgPSBwZDtcbiBcdG1yLVx1MDAzZWFjY2Vzc19mbGFncyA9IGFjY2Vzc19mbGFncztcbiBcdG1yLVx1MDAzZXBhZ2Vfc2hpZnQgPSBvcmRlcl9iYXNlXzIocGFnZV9zaXplKTtcbiYjNDM7XHRtci1cdTAwM2VpYm1yLmZybXIua2V5Lmtlcm5lbF92ZW5kb3Jfa2V5ID1cbiYjNDM7XHRcdEZJRUxEX1BSRVAoTUxYNV9GUk1SX1BPT0xTX0tFUk5FTF9LRVlfU1RfSU5ERVhfTUFTSywgc3RfaW5kZXgpIHxcbiYjNDM7XHRcdEZJRUxEX1BSRVAoTUxYNV9GUk1SX1BPT0xTX0tFUk5FTF9LRVlfUEhfTUFTSywgcGgpO1xuIFxuIFx0aW5sZW4gPSBNTFg1X1NUX1NaX0JZVEVTKGNyZWF0ZV9ta2V5X2luKTtcbiBcdGlmIChwb3B1bGF0ZSlcbkBAIC03NTUsNiAmIzQzOzc4OCwxMiBAQCBzdGF0aWMgc3RydWN0IGliX21yICpjcmVhdGVfcmVhbF9tcihzdHJ1Y3QgaWJfcGQgKnBkLCBzdHJ1Y3QgaWJfdW1lbSAqdW1lbSxcbiBcbiBcdHhsdF93aXRoX3VtciA9IG1seDVyX3Vtcl9jYW5fbG9hZF9wYXMoZGV2LCB1bWVtLVx1MDAzZWxlbmd0aCk7XG4gXHRpZiAoeGx0X3dpdGhfdW1yKSB7XG4mIzQzO1x0XHRlcnIgPSBtbHg1X2liX2dldF9mcm1yX3N0X2hhbmRsZV9yZWYoZGV2LCBzdF9pbmRleCk7XG4mIzQzO1x0XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRcdGliX3VtZW1fcmVsZWFzZSh1bWVtKTtcbiYjNDM7XHRcdFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4gXHRcdG1yID0gYWxsb2NfY2FjaGVhYmxlX21yKHBkLCB1bWVtLCBpb3ZhLCBhY2Nlc3NfZmxhZ3MsXG4gXHRcdFx0XHRcdE1MWDVfTUtDX0FDQ0VTU19NT0RFX01UVCxcbiBcdFx0XHRcdFx0c3RfaW5kZXgsIHBoKTtcbkBAIC03NjksNiAmIzQzOzgwOCw4IEBAIHN0YXRpYyBzdHJ1Y3QgaWJfbXIgKmNyZWF0ZV9yZWFsX21yKHN0cnVjdCBpYl9wZCAqcGQsIHN0cnVjdCBpYl91bWVtICp1bWVtLFxuIFx0XHRtdXRleF91bmxvY2soXHUwMDI2ZGV2LVx1MDAzZXNsb3dfcGF0aF9tdXRleCk7XG4gXHR9XG4gXHRpZiAoSVNfRVJSKG1yKSkge1xuJiM0MztcdFx0aWYgKHhsdF93aXRoX3VtcilcbiYjNDM7XHRcdFx0bWx4NV9pYl9wdXRfc3RfaW5kZXhfcmVmKGRldiwgc3RfaW5kZXgpO1xuIFx0XHRpYl91bWVtX3JlbGVhc2UodW1lbSk7XG4gXHRcdHJldHVybiBFUlJfQ0FTVChtcik7XG4gXHR9XG5AQCAtOTAzLDYgJiM0Mzs5NDQsNTIgQEAgc3RhdGljIHN0cnVjdCBkbWFfYnVmX2F0dGFjaF9vcHMgbWx4NV9pYl9kbWFidWZfYXR0YWNoX29wcyA9IHtcbiBcdC5pbnZhbGlkYXRlX21hcHBpbmdzID0gbWx4NV9pYl9kbWFidWZfaW52YWxpZGF0ZV9jYixcbiB9O1xuIFxuJiM0MztzdGF0aWMgdm9pZCBnZXRfcGNpX3RwaF9tcl9kbWFidWYoc3RydWN0IG1seDVfaWJfZGV2ICpkZXYsIHN0cnVjdCBkbWFfYnVmICpkbWFidWYsXG4mIzQzO1x0XHRcdFx0ICB1MTYgKnN0X2luZGV4LCB1OCAqcGgpXG4mIzQzO3tcbiYjNDM7XHR1MTYgbG9jYWxfc3RfaW5kZXg7XG4mIzQzO1x0dTE2IHN0ZWVyaW5nX3RhZztcbiYjNDM7XHR1OCBsb2NhbF9waDtcbiYjNDM7XHRib29sIGV4dGVuZGVkO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHN3aXRjaCAocGNpZV90cGhfZW5hYmxlZF9yZXFfdHlwZShkZXYtXHUwMDNlbWRldi1cdTAwM2VwZGV2KSkge1xuJiM0MztcdGNhc2UgUENJX1RQSF9SRVFfVFBIX09OTFk6XG4mIzQzO1x0XHRleHRlbmRlZCA9IGZhbHNlO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBQQ0lfVFBIX1JFUV9FWFRfVFBIOlxuJiM0MztcdFx0ZXh0ZW5kZWQgPSB0cnVlO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGRtYV9yZXN2X2xvY2soZG1hYnVmLVx1MDAzZXJlc3YsIE5VTEwpO1xuJiM0MztcdHJldCA9IGRtYV9idWZfZ2V0X3BjaV90cGgoZG1hYnVmLCBleHRlbmRlZCwgXHUwMDI2c3RlZXJpbmdfdGFnLCBcdTAwMjZsb2NhbF9waCk7XG4mIzQzO1x0ZG1hX3Jlc3ZfdW5sb2NrKGRtYWJ1Zi1cdTAwM2VyZXN2KTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRpZiAocmV0ICE9IC1FT1BOT1RTVVBQKVxuJiM0MztcdFx0XHRtbHg1X2liX2RiZyhkZXYsIFwmIzM0O2dldF9wY2lfdHBoIGZhaWxlZCAoJWQpXFxuXCYjMzQ7LCByZXQpO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0ID0gbWx4NV9zdF9hbGxvY19pbmRleF9ieV90YWcoZGV2LVx1MDAzZW1kZXYsIHN0ZWVyaW5nX3RhZyxcbiYjNDM7XHRcdFx0XHRcdCBcdTAwMjZsb2NhbF9zdF9pbmRleCk7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0bWx4NV9pYl9kYmcoZGV2LCBcJiMzNDtzdF9hbGxvY19pbmRleF9ieV90YWcgZmFpbGVkICglZClcXG5cJiMzNDssIHJldCk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQqc3RfaW5kZXggPSBsb2NhbF9zdF9pbmRleDtcbiYjNDM7XHQqcGggPSBsb2NhbF9waDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgbWx4NV9pYl9tcl9wdXRfZnJtcl9zdF9oYW5kbGVfcmVmKHN0cnVjdCBtbHg1X2liX21yICptcilcbiYjNDM7e1xuJiM0MztcdG1seDVfaWJfcHV0X2ZybXJfc3RfaGFuZGxlX3JlZihtcl90b19tZGV2KG1yKSxcbiYjNDM7XHRcdFx0XHQgICAgICAgbXItXHUwMDNlaWJtci5mcm1yLmtleS5rZXJuZWxfdmVuZG9yX2tleSk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHN0cnVjdCBpYl9tciAqXG4gcmVnX3VzZXJfbXJfZG1hYnVmKHN0cnVjdCBpYl9wZCAqcGQsIHN0cnVjdCBkZXZpY2UgKmRtYV9kZXZpY2UsXG4gXHRcdCAgIHU2NCBvZmZzZXQsIHU2NCBsZW5ndGgsIHU2NCB2aXJ0X2FkZHIsXG5AQCAtOTQ1LDEyICYjNDM7MTAzMiwyMiBAQCByZWdfdXNlcl9tcl9kbWFidWYoc3RydWN0IGliX3BkICpwZCwgc3RydWN0IGRldmljZSAqZG1hX2RldmljZSxcbiBcdFx0cGggPSBkbWFoLVx1MDAzZXBoO1xuIFx0XHRpZiAoZG1haC1cdTAwM2V2YWxpZF9maWVsZHMgXHUwMDI2IEJJVChJQl9ETUFIX0NQVV9JRF9FWElTVFMpKVxuIFx0XHRcdHN0X2luZGV4ID0gbWRtYWgtXHUwMDNlc3RfaW5kZXg7XG4mIzQzO1xuJiM0MztcdFx0ZXJyID0gbWx4NV9pYl9nZXRfZnJtcl9zdF9oYW5kbGVfcmVmKGRldiwgc3RfaW5kZXgpO1xuJiM0MztcdFx0aWYgKGVycikge1xuJiM0MztcdFx0XHRpYl91bWVtX3JlbGVhc2UoXHUwMDI2dW1lbV9kbWFidWYtXHUwMDNldW1lbSk7XG4mIzQzO1x0XHRcdHJldHVybiBFUlJfUFRSKGVycik7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdGdldF9wY2lfdHBoX21yX2RtYWJ1ZihkZXYsIHVtZW1fZG1hYnVmLVx1MDAzZWF0dGFjaC1cdTAwM2VkbWFidWYsXG4mIzQzO1x0XHRcdFx0ICAgICAgXHUwMDI2c3RfaW5kZXgsIFx1MDAyNnBoKTtcbiBcdH1cbiBcbiBcdG1yID0gYWxsb2NfY2FjaGVhYmxlX21yKHBkLCBcdTAwMjZ1bWVtX2RtYWJ1Zi1cdTAwM2V1bWVtLCB2aXJ0X2FkZHIsXG4gXHRcdFx0XHRhY2Nlc3NfZmxhZ3MsIGFjY2Vzc19tb2RlLFxuIFx0XHRcdFx0c3RfaW5kZXgsIHBoKTtcbiBcdGlmIChJU19FUlIobXIpKSB7XG4mIzQzO1x0XHRtbHg1X2liX3B1dF9zdF9pbmRleF9yZWYoZGV2LCBzdF9pbmRleCk7XG4gXHRcdGliX3VtZW1fcmVsZWFzZShcdTAwMjZ1bWVtX2RtYWJ1Zi1cdTAwM2V1bWVtKTtcbiBcdFx0cmV0dXJuIEVSUl9DQVNUKG1yKTtcbiBcdH1cbkBAIC0xNDA1LDYgJiM0MzsxNTAyLDcgQEAgc3RhdGljIGludCBtbHg1cl9oYW5kbGVfbWtleV9jbGVhbnVwKHN0cnVjdCBtbHg1X2liX21yICptcilcbiBcdGlmIChtci1cdTAwM2VpYm1yLmZybXIucG9vbCkge1xuIFx0XHRpZiAoIW1seDVfdW1yX3Jldm9rZV9tcl93aXRoX2xvY2sobXIpKSB7XG4gXHRcdFx0aWJfZnJtcl9wb29sX3B1c2gobXItXHUwMDNlaWJtci5kZXZpY2UsIFx1MDAyNm1yLVx1MDAzZWlibXIpO1xuJiM0MztcdFx0XHRtbHg1X2liX21yX3B1dF9mcm1yX3N0X2hhbmRsZV9yZWYobXIpO1xuIFx0XHRcdHJldHVybiAwO1xuIFx0XHR9XG4gXHR9XG5AQCAtMTQzMiw2ICYjNDM7MTUzMCw5IEBAIHN0YXRpYyBpbnQgbWx4NXJfaGFuZGxlX21rZXlfY2xlYW51cChzdHJ1Y3QgbWx4NV9pYl9tciAqbXIpXG4gXHRpZiAobXItXHUwMDNlaWJtci5mcm1yLnBvb2wgXHUwMDI2XHUwMDI2ICFyZXQpXG4gXHRcdGliX2ZybXJfcG9vbF9kcm9wKFx1MDAyNm1yLVx1MDAzZWlibXIpO1xuIFxuJiM0MztcdGlmICghcmV0KVxuJiM0MztcdFx0bWx4NV9pYl9tcl9wdXRfZnJtcl9zdF9oYW5kbGVfcmVmKG1yKTtcbiYjNDM7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGliL3N0LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGliL3N0LmNcbmluZGV4IDk5N2JlOTFmMGExMzVhLi5iZjE0YTdhNmRmMTVlMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9saWIvc3QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi9zdC5jXG5AQCAtOTIsMjMgJiM0Mzs5MiwxOCBAQCB2b2lkIG1seDVfc3RfZGVzdHJveShzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KVxuIFx0a2ZyZWUoc3QpO1xuIH1cbiBcbi1pbnQgbWx4NV9zdF9hbGxvY19pbmRleChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCBlbnVtIHRwaF9tZW1fdHlwZSBtZW1fdHlwZSxcbi1cdFx0XHR1bnNpZ25lZCBpbnQgY3B1X3VpZCwgdTE2ICpzdF9pbmRleClcbiYjNDM7aW50IG1seDVfc3RfYWxsb2NfaW5kZXhfYnlfdGFnKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIHUxNiB0YWcsXG4mIzQzO1x0XHRcdCAgICAgICB1MTYgKnN0X2luZGV4KVxuIHtcbiBcdHN0cnVjdCBtbHg1X3N0X2lkeF9kYXRhICppZHhfZGF0YTtcbiBcdHN0cnVjdCBtbHg1X3N0ICpzdCA9IGRldi1cdTAwM2VzdDtcbiBcdHVuc2lnbmVkIGxvbmcgaW5kZXg7XG4gXHR1MzIgeGFfaWQ7XG4tXHR1MTYgdGFnO1xuLVx0aW50IHJldDtcbiYjNDM7XHRpbnQgcmV0ID0gMDtcbiBcbiBcdGlmICghc3QpXG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcbi1cdHJldCA9IHBjaWVfdHBoX2dldF9jcHVfc3QoZGV2LVx1MDAzZXBkZXYsIG1lbV90eXBlLCBjcHVfdWlkLCBcdTAwMjZ0YWcpO1xuLVx0aWYgKHJldClcbi1cdFx0cmV0dXJuIHJldDtcbi1cbiBcdGlmIChzdC1cdTAwM2VkaXJlY3RfbW9kZSkge1xuIFx0XHQqc3RfaW5kZXggPSB0YWc7XG4gXHRcdHJldHVybiAwO1xuQEAgLTE1Miw4ICYjNDM7MTQ3LDQ2IEBAIGludCBtbHg1X3N0X2FsbG9jX2luZGV4KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIGVudW0gdHBoX21lbV90eXBlIG1lbV90eXBlLFxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnN0LVx1MDAzZWxvY2spO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKG1seDVfc3RfYWxsb2NfaW5kZXhfYnlfdGFnKTtcbiYjNDM7XG4mIzQzO2ludCBtbHg1X3N0X2FsbG9jX2luZGV4KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIGVudW0gdHBoX21lbV90eXBlIG1lbV90eXBlLFxuJiM0MztcdFx0XHR1bnNpZ25lZCBpbnQgY3B1X3VpZCwgdTE2ICpzdF9pbmRleClcbiYjNDM7e1xuJiM0MztcdHUxNiB0YWc7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcGNpZV90cGhfZ2V0X2NwdV9zdChkZXYtXHUwMDNlcGRldiwgbWVtX3R5cGUsIGNwdV91aWQsIFx1MDAyNnRhZyk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldHVybiBtbHg1X3N0X2FsbG9jX2luZGV4X2J5X3RhZyhkZXYsIHRhZywgc3RfaW5kZXgpO1xuJiM0Mzt9XG4gRVhQT1JUX1NZTUJPTF9HUEwobWx4NV9zdF9hbGxvY19pbmRleCk7XG4gXG4mIzQzO2ludCBtbHg1X3N0X2dldF9pbmRleChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCB1MTYgc3RfaW5kZXgpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbWx4NV9zdF9pZHhfZGF0YSAqaWR4X2RhdGE7XG4mIzQzO1x0c3RydWN0IG1seDVfc3QgKnN0ID0gZGV2LVx1MDAzZXN0O1xuJiM0MztcdGludCByZXQgPSAwO1xuJiM0MztcbiYjNDM7XHRpZiAoIXN0KVxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcbiYjNDM7XHRpZiAoc3QtXHUwMDNlZGlyZWN0X21vZGUpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZzdC1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRpZHhfZGF0YSA9IHhhX2xvYWQoXHUwMDI2c3QtXHUwMDNlaWR4X3hhLCBzdF9pbmRleCk7XG4mIzQzO1x0aWYgKFdBUk5fT05fT05DRSghaWR4X2RhdGEpKVxuJiM0MztcdFx0cmV0ID0gLUVJTlZBTDtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRyZWZjb3VudF9pbmMoXHUwMDI2aWR4X2RhdGEtXHUwMDNldXNlY291bnQpO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZzdC1cdTAwM2Vsb2NrKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChtbHg1X3N0X2dldF9pbmRleCk7XG4mIzQzO1xuIGludCBtbHg1X3N0X2RlYWxsb2NfaW5kZXgoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgdTE2IHN0X2luZGV4KVxuIHtcbiBcdHN0cnVjdCBtbHg1X3N0X2lkeF9kYXRhICppZHhfZGF0YTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS90cGguYyBiL2RyaXZlcnMvcGNpL3RwaC5jXG5pbmRleCA5MTE0NWU4ZDlkOTUxMi4uNzE3YjQ3ZDFkOWNhY2UgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3BjaS90cGguY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9wY2kvdHBoLmNcbkBAIC0xNzQsNiAmIzQzOzE3NCw1MSBAQCB1MzIgcGNpZV90cGhfZ2V0X3N0X3RhYmxlX2xvYyhzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiB9XG4gRVhQT1JUX1NZTUJPTChwY2llX3RwaF9nZXRfc3RfdGFibGVfbG9jKTtcbiBcbiYjNDM7LyoqXG4mIzQzOyAqIHBjaWVfdHBoX2VuYWJsZWRfcmVxX3R5cGUgLSBSZXR1cm4gdGhlIGRldmljZSYjMzk7cyBlbmFibGVkIFRQSCByZXF1ZXN0ZXIgdHlwZVxuJiM0MzsgKiBAcGRldjogUENJIGRldmljZSB0byBxdWVyeVxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IFBDSV9UUEhfUkVRX0RJU0FCTEUsIFBDSV9UUEhfUkVRX1RQSF9PTkxZIG9yIFBDSV9UUEhfUkVRX0VYVF9UUEguXG4mIzQzOyAqL1xuJiM0Mzt1OCBwY2llX3RwaF9lbmFibGVkX3JlcV90eXBlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHBkZXYtXHUwMDNldHBoX3JlcV90eXBlO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0wocGNpZV90cGhfZW5hYmxlZF9yZXFfdHlwZSk7XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogcGNpZV90cGhfY29tcGxldGVyX3R5cGUgLSBSZXR1cm4gdGhlIGRldmljZSYjMzk7cyBUUEggQ29tcGxldGVyIHN1cHBvcnRcbiYjNDM7ICogQHBkZXY6IFBDSSBkZXZpY2UgdG8gcXVlcnlcbiYjNDM7ICpcbiYjNDM7ICogUmVhZHMgdGhlIFwmIzM0O1RQSCBDb21wbGV0ZXIgU3VwcG9ydGVkXCYjMzQ7IGZpZWxkIChiaXRzIDEzOjEyKSBvZiBEZXZpY2VcbiYjNDM7ICogQ2FwYWJpbGl0aWVzIDIuIFRoZSByZXNlcnZlZCAwYjEwIGVuY29kaW5nIGlzIGZvbGRlZCBpbnRvXG4mIzQzOyAqIFwmIzM0O25vdCBzdXBwb3J0ZWRcJiMzNDsgc28gY2FsbGVycyBvbmx5IG5lZWQgdG8gY29tcGFyZSBhZ2FpbnN0IHRoZSB0aHJlZVxuJiM0MzsgKiBkZWZpbmVkIHZhbHVlcy5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiBvbmUgb2YgJVBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9OT05FLFxuJiM0MzsgKiAgICAgICAgICVQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfVFBIX09OTFkgb3JcbiYjNDM7ICogICAgICAgICAlUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX0VYVF9UUEguXG4mIzQzOyAqL1xuJiM0Mzt1OCBwY2llX3RwaF9jb21wbGV0ZXJfdHlwZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiYjNDM7e1xuJiM0MztcdHUzMiByZWc7XG4mIzQzO1xuJiM0MztcdGlmIChwY2llX2NhcGFiaWxpdHlfcmVhZF9kd29yZChwZGV2LCBQQ0lfRVhQX0RFVkNBUDIsIFx1MDAyNnJlZykpXG4mIzQzO1x0XHRyZXR1cm4gUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX05PTkU7XG4mIzQzO1x0aWYgKFBDSV9QT1NTSUJMRV9FUlJPUihyZWcpKVxuJiM0MztcdFx0cmV0dXJuIFBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9OT05FO1xuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKEZJRUxEX0dFVChQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfTUFTSywgcmVnKSkge1xuJiM0MztcdGNhc2UgUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX1RQSF9PTkxZOlxuJiM0MztcdFx0cmV0dXJuIFBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9UUEhfT05MWTtcbiYjNDM7XHRjYXNlIFBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9FWFRfVFBIOlxuJiM0MztcdFx0cmV0dXJuIFBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9FWFRfVFBIO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRyZXR1cm4gUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX05PTkU7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0wocGNpZV90cGhfY29tcGxldGVyX3R5cGUpO1xuJiM0MztcbiAvKlxuICAqIFJldHVybiB0aGUgc2l6ZSBvZiBTVCB0YWJsZS4gSWYgU1QgdGFibGUgaXMgbm90IGluIFRQSCBSZXF1ZXN0ZXIgRXh0ZW5kZWRcbiAgKiBDYXBhYmlsaXR5IHNwYWNlLCByZXR1cm4gMC4gT3RoZXJ3aXNlIHJldHVybiB0aGUgU1QgVGFibGUgU2l6ZSAmIzQzOyAxLlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jIGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmNcbmluZGV4IGEyOGYxZTk5MzYyYzFlLi5jN2Q2OTAyYmM2MWIwNyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuY1xuQEAgLTE1NzIsNiAmIzQzOzE1NzIsOSBAQCBpbnQgdmZpb19wY2lfY29yZV9pb2N0bF9mZWF0dXJlKHN0cnVjdCB2ZmlvX2RldmljZSAqZGV2aWNlLCB1MzIgZmxhZ3MsXG4gXHRcdHJldHVybiB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdG9rZW4odmRldiwgZmxhZ3MsIGFyZywgYXJnc3opO1xuIFx0Y2FzZSBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUY6XG4gXHRcdHJldHVybiB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zih2ZGV2LCBmbGFncywgYXJnLCBhcmdzeik7XG4mIzQzO1x0Y2FzZSBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUZfVFBIOlxuJiM0MztcdFx0cmV0dXJuIHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3RwaCh2ZGV2LCBmbGFncywgYXJnLFxuJiM0MztcdFx0XHRcdFx0XHRcdCBhcmdzeik7XG4gXHRkZWZhdWx0OlxuIFx0XHRyZXR1cm4gLUVOT1RUWTtcbiBcdH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jIGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuY1xuaW5kZXggYzE2ZjQ2MGMwMWQ2ODEuLmQ2ZjVkZDMyMTAwMDljIDEwMDY0NFxuLS0tIGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuY1xuQEAgLTMsNiAmIzQzOzMsNyBAQFxuICAqL1xuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RtYS1idWYtbWFwcGluZy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGNpLXAycGRtYS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BjaS10cGguaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RtYS1yZXN2LmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcJiMzNDt2ZmlvX3BjaV9wcml2LmhcJiMzNDtcbkBAIC0xOSw3ICYjNDM7MjAsMTQgQEAgc3RydWN0IHZmaW9fcGNpX2RtYV9idWYge1xuIFx0dTMyIG5yX3JhbmdlcztcbiBcdHN0cnVjdCBrcmVmIGtyZWY7XG4gXHRzdHJ1Y3QgY29tcGxldGlvbiBjb21wO1xuLVx0dTggcmV2b2tlZCA6IDE7XG4mIzQzO1xuJiM0MztcdC8qIFByb3RlY3RlZCBieSBkbWFidWYtXHUwMDNlcmVzdi4gKi9cbiYjNDM7XHR1MTYgdHBoX3N0X2V4dDtcbiYjNDM7XHR1OCB0cGhfc3Q7XG4mIzQzO1x0dTggcmV2b2tlZDoxO1xuJiM0MztcdHU4IHRwaF9zdF92YWxpZDoxO1xuJiM0MztcdHU4IHRwaF9zdF9leHRfdmFsaWQ6MTtcbiYjNDM7XHR1OCB0cGhfcGg6MjtcbiB9O1xuIFxuIHN0YXRpYyBpbnQgdmZpb19wY2lfZG1hX2J1Zl9hdHRhY2goc3RydWN0IGRtYV9idWYgKmRtYWJ1ZixcbkBAIC02OSw2ICYjNDM7NzcsMjYgQEAgdmZpb19wY2lfZG1hX2J1Zl9tYXAoc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNobWVudCxcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IHZmaW9fcGNpX2RtYV9idWZfZ2V0X3BjaV90cGgoc3RydWN0IGRtYV9idWYgKmRtYWJ1ZiwgYm9vbCBleHRlbmRlZCxcbiYjNDM7XHRcdFx0XHRcdHUxNiAqc3RlZXJpbmdfdGFnLCB1OCAqcGgpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgdmZpb19wY2lfZG1hX2J1ZiAqcHJpdiA9IGRtYWJ1Zi1cdTAwM2Vwcml2O1xuJiM0MztcbiYjNDM7XHRkbWFfcmVzdl9hc3NlcnRfaGVsZChkbWFidWYtXHUwMDNlcmVzdik7XG4mIzQzO1xuJiM0MztcdGlmIChleHRlbmRlZCkge1xuJiM0MztcdFx0aWYgKCFwcml2LVx1MDAzZXRwaF9zdF9leHRfdmFsaWQpXG4mIzQzO1x0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHRcdCpzdGVlcmluZ190YWcgPSBwcml2LVx1MDAzZXRwaF9zdF9leHQ7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdGlmICghcHJpdi1cdTAwM2V0cGhfc3RfdmFsaWQpXG4mIzQzO1x0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHRcdCpzdGVlcmluZ190YWcgPSBwcml2LVx1MDAzZXRwaF9zdDtcbiYjNDM7XHR9XG4mIzQzO1x0KnBoID0gcHJpdi1cdTAwM2V0cGhfcGg7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWQgdmZpb19wY2lfZG1hX2J1Zl91bm1hcChzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2htZW50LFxuIFx0XHRcdFx0ICAgc3RydWN0IHNnX3RhYmxlICpzZ3QsXG4gXHRcdFx0XHQgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpXG5AQCAtMTAxLDYgJiM0MzsxMjksNyBAQCBzdGF0aWMgdm9pZCB2ZmlvX3BjaV9kbWFfYnVmX3JlbGVhc2Uoc3RydWN0IGRtYV9idWYgKmRtYWJ1ZilcbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGRtYV9idWZfb3BzIHZmaW9fcGNpX2RtYWJ1Zl9vcHMgPSB7XG4gXHQuYXR0YWNoID0gdmZpb19wY2lfZG1hX2J1Zl9hdHRhY2gsXG4mIzQzO1x0LmdldF9wY2lfdHBoID0gdmZpb19wY2lfZG1hX2J1Zl9nZXRfcGNpX3RwaCxcbiBcdC5tYXBfZG1hX2J1ZiA9IHZmaW9fcGNpX2RtYV9idWZfbWFwLFxuIFx0LnVubWFwX2RtYV9idWYgPSB2ZmlvX3BjaV9kbWFfYnVmX3VubWFwLFxuIFx0LnJlbGVhc2UgPSB2ZmlvX3BjaV9kbWFfYnVmX3JlbGVhc2UsXG5AQCAtMzMzLDYgJiM0MzszNjIsNzIgQEAgaW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTMyIGZsYWdzLFxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4mIzQzO2ludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl90cGgoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LFxuJiM0MztcdFx0XHRcdCAgICAgIHUzMiBmbGFncyxcbiYjNDM7XHRcdFx0XHQgICAgICBzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV9kbWFfYnVmX3RwaCBfX3VzZXIgKmFyZyxcbiYjNDM7XHRcdFx0XHQgICAgICBzaXplX3QgYXJnc3opXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV9kbWFfYnVmX3RwaCBzZXRfdHBoO1xuJiM0MztcdHN0cnVjdCB2ZmlvX3BjaV9kbWFfYnVmICpwcml2O1xuJiM0MztcdHN0cnVjdCBkbWFfYnVmICpkbWFidWY7XG4mIzQzO1x0dTggY29tcDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRjb21wID0gcGNpZV90cGhfY29tcGxldGVyX3R5cGUodmRldi1cdTAwM2VwZGV2KTtcbiYjNDM7XHRpZiAoY29tcCA9PSBQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfTk9ORSlcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gdmZpb19jaGVja19mZWF0dXJlKGZsYWdzLCBhcmdzeiwgVkZJT19ERVZJQ0VfRkVBVFVSRV9TRVQsXG4mIzQzO1x0XHRcdFx0IHNpemVvZihzZXRfdHBoKSk7XG4mIzQzO1x0aWYgKHJldCAhPSAxKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKGNvcHlfZnJvbV91c2VyKFx1MDAyNnNldF90cGgsIGFyZywgc2l6ZW9mKHNldF90cGgpKSlcbiYjNDM7XHRcdHJldHVybiAtRUZBVUxUO1xuJiM0MztcbiYjNDM7XHRpZiAoc2V0X3RwaC5mbGFncyBcdTAwMjYgfihWRklPX0RNQV9CVUZfVFBIX1NUIHwgVkZJT19ETUFfQlVGX1RQSF9TVF9FWFQpKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdGlmIChzZXRfdHBoLnBoIFx1MDAyNiB+MHgzKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdGlmICgoc2V0X3RwaC5mbGFncyBcdTAwMjYgVkZJT19ETUFfQlVGX1RQSF9TVF9FWFQpIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBjb21wICE9IFBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9FWFRfVFBIKVxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcbiYjNDM7XHRkbWFidWYgPSBkbWFfYnVmX2dldChzZXRfdHBoLmRtYWJ1Zl9mZCk7XG4mIzQzO1x0aWYgKElTX0VSUihkbWFidWYpKVxuJiM0MztcdFx0cmV0dXJuIFBUUl9FUlIoZG1hYnVmKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGRtYWJ1Zi1cdTAwM2VvcHMgIT0gXHUwMDI2dmZpb19wY2lfZG1hYnVmX29wcykge1xuJiM0MztcdFx0cmV0ID0gLUVJTlZBTDtcbiYjNDM7XHRcdGdvdG8gb3V0X3B1dDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHByaXYgPSBkbWFidWYtXHUwMDNlcHJpdjtcbiYjNDM7XHRpZiAocHJpdi1cdTAwM2V2ZGV2ICE9IHZkZXYpIHtcbiYjNDM7XHRcdHJldCA9IC1FSU5WQUw7XG4mIzQzO1x0XHRnb3RvIG91dF9wdXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXQgPSBkbWFfcmVzdl9sb2NrX2ludGVycnVwdGlibGUoZG1hYnVmLVx1MDAzZXJlc3YsIE5VTEwpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIG91dF9wdXQ7XG4mIzQzO1xuJiM0MztcdHByaXYtXHUwMDNldHBoX3N0ICAgICAgICAgPSBzZXRfdHBoLnN0ZWVyaW5nX3RhZztcbiYjNDM7XHRwcml2LVx1MDAzZXRwaF9zdF9leHQgICAgID0gc2V0X3RwaC5zdGVlcmluZ190YWdfZXh0O1xuJiM0MztcdHByaXYtXHUwMDNldHBoX3BoICAgICAgICAgPSBzZXRfdHBoLnBoO1xuJiM0MztcdHByaXYtXHUwMDNldHBoX3N0X3ZhbGlkICAgPSAhIShzZXRfdHBoLmZsYWdzIFx1MDAyNiBWRklPX0RNQV9CVUZfVFBIX1NUKTtcbiYjNDM7XHRwcml2LVx1MDAzZXRwaF9zdF9leHRfdmFsaWQgPVxuJiM0MztcdFx0ISEoc2V0X3RwaC5mbGFncyBcdTAwMjYgVkZJT19ETUFfQlVGX1RQSF9TVF9FWFQpO1xuJiM0MztcdGRtYV9yZXN2X3VubG9jayhkbWFidWYtXHUwMDNlcmVzdik7XG4mIzQzO1x0cmV0ID0gMDtcbiYjNDM7XG4mIzQzO291dF9wdXQ6XG4mIzQzO1x0ZG1hX2J1Zl9wdXQoZG1hYnVmKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuIHZvaWQgdmZpb19wY2lfZG1hX2J1Zl9tb3ZlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgYm9vbCByZXZva2VkKVxuIHtcbiBcdHN0cnVjdCB2ZmlvX3BjaV9kbWFfYnVmICpwcml2O1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfcHJpdi5oIGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9wcml2LmhcbmluZGV4IGZjYTlkMGRmYWM5MGY4Li5jNThmMzY5YmU0YjM5OCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfcHJpdi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX3ByaXYuaFxuQEAgLTExOCw2ICYjNDM7MTE4LDEwIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB2ZmlvX3BjaV9pc192Z2Eoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gaW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTMyIGZsYWdzLFxuIFx0XHRcdFx0ICBzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV9kbWFfYnVmIF9fdXNlciAqYXJnLFxuIFx0XHRcdFx0ICBzaXplX3QgYXJnc3opO1xuJiM0MztpbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWZfdHBoKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldixcbiYjNDM7XHRcdFx0XHQgICAgICB1MzIgZmxhZ3MsXG4mIzQzO1x0XHRcdFx0ICAgICAgc3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfZG1hX2J1Zl90cGggX191c2VyICphcmcsXG4mIzQzO1x0XHRcdFx0ICAgICAgc2l6ZV90IGFyZ3N6KTtcbiB2b2lkIHZmaW9fcGNpX2RtYV9idWZfY2xlYW51cChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpO1xuIHZvaWQgdmZpb19wY2lfZG1hX2J1Zl9tb3ZlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgYm9vbCByZXZva2VkKTtcbiAjZWxzZVxuQEAgLTEyOCw2ICYjNDM7MTMyLDE0IEBAIHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTMyIGZsYWdzLFxuIHtcbiBcdHJldHVybiAtRU5PVFRZO1xuIH1cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50XG4mIzQzO3ZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3RwaChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIHUzMiBmbGFncyxcbiYjNDM7XHRcdFx0XHQgIHN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX2RtYV9idWZfdHBoIF9fdXNlciAqYXJnLFxuJiM0MztcdFx0XHRcdCAgc2l6ZV90IGFyZ3N6KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIC1FTk9UVFk7XG4mIzQzO31cbiBzdGF0aWMgaW5saW5lIHZvaWQgdmZpb19wY2lfZG1hX2J1Zl9jbGVhbnVwKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldilcbiB7XG4gfVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZG1hLWJ1Zi5oIGIvaW5jbHVkZS9saW51eC9kbWEtYnVmLmhcbmluZGV4IGQxMjAzZGE1NmZjNWY3Li41M2IyNjg2YWQ4ZmM2NyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvZG1hLWJ1Zi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2RtYS1idWYuaFxuQEAgLTExMyw2ICYjNDM7MTEzLDI2IEBAIHN0cnVjdCBkbWFfYnVmX29wcyB7XG4gXHQgKi9cbiBcdHZvaWQgKCp1bnBpbikoc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoKTtcbiBcbiYjNDM7XHQvKipcbiYjNDM7XHQgKiBAZ2V0X3BjaV90cGg6XG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBSZXRyaWV2ZSBQQ0llIFRMUCBQcm9jZXNzaW5nIEhpbnQgKFRQSCkgc3RlZXJpbmcgbWV0YWRhdGEgZm9yXG4mIzQzO1x0ICogdGhpcyBidWZmZXIgc28gYW4gaW1wb3J0ZXIgY2FuIHByb2dyYW0gYSBtYXRjaGluZyBTVC9QSCBoaW50IG9uXG4mIzQzO1x0ICogb3V0Ym91bmQgVExQcyB0YXJnZXRpbmcgdGhlIGV4cG9ydGVyIGZvciBwZWVyLXRvLXBlZXIgRE1BLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogQGRtYWJ1ZjogRE1BIGJ1ZmZlciBmb3Igd2hpY2ggdG8gcmV0cmlldmUgVFBIIG1ldGFkYXRhXG4mIzQzO1x0ICogQGV4dGVuZGVkOiBmYWxzZSBmb3IgOC1iaXQgU1QsIHRydWUgZm9yIDE2LWJpdCBFeHRlbmRlZCBTVFxuJiM0MztcdCAqIEBzdGVlcmluZ190YWc6IFJldHVybnMgdGhlIHJhdyBUUEggc3RlZXJpbmcgdGFnIGZvciB0aGUgcmVxdWVzdGVkXG4mIzQzO1x0ICogICAgICAgICAgICAgICAgbmFtZXNwYWNlXG4mIzQzO1x0ICogQHBoOiBSZXR1cm5zIHRoZSBUUEggcHJvY2Vzc2luZyBoaW50ICgyLWJpdCB2YWx1ZSlcbiYjNDM7XHQgKlxuJiM0MztcdCAqIE9wdGlvbmFsIGNhbGxiYWNrIGZvciBkbWFfYnVmX2dldF9wY2lfdHBoKCkuIENhbGxlZCB3aXRoXG4mIzQzO1x0ICogXHUwMDI2ZG1hX2J1Zi5yZXN2IGhlbGQuIFJldHVybnMgMCBvbiBzdWNjZXNzIG9yIC1FT1BOT1RTVVBQIHdoZW5cbiYjNDM7XHQgKiB0aGUgZXhwb3J0ZXIgaGFzIG5vIG1ldGFkYXRhIGZvciB0aGUgcmVxdWVzdGVkIG5hbWVzcGFjZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpbnQgKCpnZXRfcGNpX3RwaCkoc3RydWN0IGRtYV9idWYgKmRtYWJ1ZiwgYm9vbCBleHRlbmRlZCxcbiYjNDM7XHRcdFx0ICAgdTE2ICpzdGVlcmluZ190YWcsIHU4ICpwaCk7XG4mIzQzO1xuIFx0LyoqXG4gXHQgKiBAbWFwX2RtYV9idWY6XG4gXHQgKlxuQEAgLTU2Myw2ICYjNDM7NTgzLDggQEAgdm9pZCBkbWFfYnVmX2RldGFjaChzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLFxuIFx0XHQgICAgc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoKTtcbiBpbnQgZG1hX2J1Zl9waW4oc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoKTtcbiB2b2lkIGRtYV9idWZfdW5waW4oc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoKTtcbiYjNDM7aW50IGRtYV9idWZfZ2V0X3BjaV90cGgoc3RydWN0IGRtYV9idWYgKmRtYWJ1ZiwgYm9vbCBleHRlbmRlZCxcbiYjNDM7XHRcdFx0dTE2ICpzdGVlcmluZ190YWcsIHU4ICpwaCk7XG4gXG4gc3RydWN0IGRtYV9idWYgKmRtYV9idWZfZXhwb3J0KGNvbnN0IHN0cnVjdCBkbWFfYnVmX2V4cG9ydF9pbmZvICpleHBfaW5mbyk7XG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbHg1L2RyaXZlci5oIGIvaW5jbHVkZS9saW51eC9tbHg1L2RyaXZlci5oXG5pbmRleCBiMTg3MWMwODIxZDBiOS4uOGIzOTExMTkxZmI2MjYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21seDUvZHJpdmVyLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbWx4NS9kcml2ZXIuaFxuQEAgLTExODIsMTAgJiM0MzsxMTgyLDIzIEBAIGludCBtbHg1X2RtX3N3X2ljbV9kZWFsbG9jKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIGVudW0gbWx4NV9zd19pY21fdHlwZSB0eXBlXG4gXHRcdFx0ICAgdTY0IGxlbmd0aCwgdTE2IHVpZCwgcGh5c19hZGRyX3QgYWRkciwgdTMyIG9ial9pZCk7XG4gXG4gI2lmZGVmIENPTkZJR19QQ0lFX1RQSFxuJiM0MztpbnQgbWx4NV9zdF9hbGxvY19pbmRleF9ieV90YWcoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgdTE2IHRhZyxcbiYjNDM7XHRcdFx0ICAgICAgIHUxNiAqc3RfaW5kZXgpO1xuJiM0MztpbnQgbWx4NV9zdF9nZXRfaW5kZXgoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgdTE2IHN0X2luZGV4KTtcbiBpbnQgbWx4NV9zdF9hbGxvY19pbmRleChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCBlbnVtIHRwaF9tZW1fdHlwZSBtZW1fdHlwZSxcbiBcdFx0XHR1bnNpZ25lZCBpbnQgY3B1X3VpZCwgdTE2ICpzdF9pbmRleCk7XG4gaW50IG1seDVfc3RfZGVhbGxvY19pbmRleChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCB1MTYgc3RfaW5kZXgpO1xuICNlbHNlXG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IG1seDVfc3RfYWxsb2NfaW5kZXhfYnlfdGFnKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsXG4mIzQzO1x0XHRcdFx0XHQgICAgIHUxNiB0YWcsIHUxNiAqc3RfaW5kZXgpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IG1seDVfc3RfZ2V0X2luZGV4KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIHUxNiBzdF9pbmRleClcbiYjNDM7e1xuJiM0MztcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7fVxuIHN0YXRpYyBpbmxpbmUgaW50IG1seDVfc3RfYWxsb2NfaW5kZXgoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldixcbiBcdFx0XHRcdCAgICAgIGVudW0gdHBoX21lbV90eXBlIG1lbV90eXBlLFxuIFx0XHRcdFx0ICAgICAgdW5zaWduZWQgaW50IGNwdV91aWQsIHUxNiAqc3RfaW5kZXgpXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wY2ktdHBoLmggYi9pbmNsdWRlL2xpbnV4L3BjaS10cGguaFxuaW5kZXggYmU2OGNkMTdmMmY4MzMuLjc3NDNhZjZmZTQzMjZlIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9wY2ktdHBoLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGNpLXRwaC5oXG5AQCAtOSw2ICYjNDM7OSw4IEBAXG4gI2lmbmRlZiBMSU5VWF9QQ0lfVFBIX0hcbiAjZGVmaW5lIExJTlVYX1BDSV9UUEhfSFxuIFxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9wY2lfcmVncy5oXHUwMDNlXG4mIzQzO1xuIC8qXG4gICogQWNjb3JkaW5nIHRvIHRoZSBFQ04gZm9yIFBDSSBGaXJtd2FyZSBTcGVjLCBTdGVlcmluZyBUYWcgY2FuIGJlIGRpZmZlcmVudFxuICAqIGRlcGVuZGluZyBvbiB0aGUgbWVtb3J5IHR5cGU6IFZvbGF0aWxlIE1lbW9yeSBvciBQZXJzaXN0ZW50IE1lbW9yeS4gV2hlbiBhXG5AQCAtMzAsNiAmIzQzOzMyLDggQEAgdm9pZCBwY2llX2Rpc2FibGVfdHBoKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTtcbiBpbnQgcGNpZV9lbmFibGVfdHBoKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbW9kZSk7XG4gdTE2IHBjaWVfdHBoX2dldF9zdF90YWJsZV9zaXplKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTtcbiB1MzIgcGNpZV90cGhfZ2V0X3N0X3RhYmxlX2xvYyhzdHJ1Y3QgcGNpX2RldiAqcGRldik7XG4mIzQzO3U4IHBjaWVfdHBoX2VuYWJsZWRfcmVxX3R5cGUoc3RydWN0IHBjaV9kZXYgKnBkZXYpO1xuJiM0Mzt1OCBwY2llX3RwaF9jb21wbGV0ZXJfdHlwZShzdHJ1Y3QgcGNpX2RldiAqcGRldik7XG4gI2Vsc2VcbiBzdGF0aWMgaW5saW5lIGludCBwY2llX3RwaF9zZXRfc3RfZW50cnkoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4gXHRcdFx0XHRcdHVuc2lnbmVkIGludCBpbmRleCwgdTE2IHRhZylcbkBAIC00MSw2ICYjNDM7NDUsMTAgQEAgc3RhdGljIGlubGluZSBpbnQgcGNpZV90cGhfZ2V0X2NwdV9zdChzdHJ1Y3QgcGNpX2RldiAqZGV2LFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBwY2llX2Rpc2FibGVfdHBoKHN0cnVjdCBwY2lfZGV2ICpwZGV2KSB7IH1cbiBzdGF0aWMgaW5saW5lIGludCBwY2llX2VuYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBtb2RlKVxuIHsgcmV0dXJuIC1FSU5WQUw7IH1cbiYjNDM7c3RhdGljIGlubGluZSB1OCBwY2llX3RwaF9lbmFibGVkX3JlcV90eXBlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuJiM0Mzt7IHJldHVybiBQQ0lfVFBIX1JFUV9ESVNBQkxFOyB9XG4mIzQzO3N0YXRpYyBpbmxpbmUgdTggcGNpZV90cGhfY29tcGxldGVyX3R5cGUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4mIzQzO3sgcmV0dXJuIFBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9OT05FOyB9XG4gI2VuZGlmXG4gXG4gI2VuZGlmIC8qIExJTlVYX1BDSV9UUEhfSCAqL1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC92ZmlvLmggYi9pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oXG5pbmRleCA1ZGU2MThhM2E1ZWVlZS4uMmQzMGJhNDNlMmNmZjUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oXG5AQCAtMTUzNCw2ICYjNDM7MTUzNCw0MyBAQCBzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV9kbWFfYnVmIHtcbiAgKi9cbiAjZGVmaW5lIFZGSU9fREVWSUNFX0ZFQVRVUkVfTUlHX1BSRUNPUFlfSU5GT3YyICAxMlxuIFxuJiM0MzsvKipcbiYjNDM7ICogVXBvbiBWRklPX0RFVklDRV9GRUFUVVJFX1NFVCBhc3NvY2lhdGUgVFBIIChUTFAgUHJvY2Vzc2luZyBIaW50cykgbWV0YWRhdGFcbiYjNDM7ICogd2l0aCBhIHZmaW8tZXhwb3J0ZWQgZG1hLWJ1Zi4gVGhlIGRtYS1idWYgbXVzdCBoYXZlIGJlZW4gY3JlYXRlZCBieVxuJiM0MzsgKiBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUYgb24gdGhpcyBkZXZpY2UsIGFuZCB0aGUgZGV2aWNlIG11c3QgcmVwb3J0XG4mIzQzOyAqIFRQSCBDb21wbGV0ZXIgc3VwcG9ydCBpbiBEZXZpY2UgQ2FwYWJpbGl0aWVzIDIgKGJpdHMgMTM6MTIpOyByZXF1ZXN0c1xuJiM0MzsgKiBjYXJyeWluZyBWRklPX0RNQV9CVUZfVFBIX1NUX0VYVCBhZGRpdGlvbmFsbHkgcmVxdWlyZSB0aGUgZGV2aWNlIHRvXG4mIzQzOyAqIHJlcG9ydCB0aGUgRXh0ZW5kZWQgVFBIIENvbXBsZXRlciBlbmNvZGluZy4gT3RoZXJ3aXNlIHRoZSBpb2N0bFxuJiM0MzsgKiByZXR1cm5zIC1FT1BOT1RTVVBQLlxuJiM0MzsgKlxuJiM0MzsgKiBkbWFidWZfZmQgaXMgdGhlIGZpbGUgZGVzY3JpcHRvciByZXR1cm5lZCBieSBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUYuXG4mIzQzOyAqXG4mIzQzOyAqIDgtYml0IFNUIChzdGVlcmluZ190YWcpIGFuZCAxNi1iaXQgRXh0ZW5kZWQgU1QgKHN0ZWVyaW5nX3RhZ19leHQpIGFyZVxuJiM0MzsgKiBkaXN0aW5jdCBuYW1lc3BhY2VzLiBVc2Vyc3BhY2Ugc3VwcGxpZXMgd2hpY2hldmVyIHZhbHVlcyBhcmUgdmFsaWQgYW5kIHNldHNcbiYjNDM7ICogdGhlIG1hdGNoaW5nIFZGSU9fRE1BX0JVRl9UUEhfU1QgLyBWRklPX0RNQV9CVUZfVFBIX1NUX0VYVCBiaXRzIGluIEBmbGFncztcbiYjNDM7ICogYW4gaW1wb3J0ZXIgcmVxdWVzdHMgb25lIG5hbWVzcGFjZSBhbmQgcmVjZWl2ZXMgdGhlIG1hdGNoaW5nIHZhbHVlLlxuJiM0MzsgKlxuJiM0MzsgKiBAZmxhZ3MgPT0gMCBtYXJrcyBhbnkgcHJldmlvdXNseSBwdWJsaXNoZWQgU1QgLyBFeHRlbmRlZC1TVCBhcyBpbnZhbGlkXG4mIzQzOyAqIGZvciBmdXR1cmUgUENJIFRQSCBxdWVyaWVzIG9uIHRoaXMgZG1hLWJ1Zi5cbiYjNDM7ICpcbiYjNDM7ICogcGggaXMgdGhlIDItYml0IFRMUCBQcm9jZXNzaW5nIEhpbnQgYW5kIG11c3QgYmUgaW4gdGhlIHJhbmdlIFswLCAzXS5cbiYjNDM7ICpcbiYjNDM7ICogVXNlcnNwYWNlIG11c3QgcHVibGlzaCBUUEggYmVmb3JlIGhhbmRpbmcgdGhlIGRtYS1idWYgZmQgdG8gYW4gaW1wb3J0ZXIuXG4mIzQzOyAqIENhbGxpbmcgU0VUIGFnYWluIHJlcGxhY2VzIHRoZSBwdWJsaXNoZWQgdmFsdWVzLlxuJiM0MzsgKi9cbiYjNDM7I2RlZmluZSBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUZfVFBIIDEzXG4mIzQzO1xuJiM0MzsjZGVmaW5lIFZGSU9fRE1BX0JVRl9UUEhfU1RcdFx0KDEgXHUwMDNjXHUwMDNjIDApXG4mIzQzOyNkZWZpbmUgVkZJT19ETUFfQlVGX1RQSF9TVF9FWFRcdFx0KDEgXHUwMDNjXHUwMDNjIDEpXG4mIzQzO1xuJiM0MztzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV9kbWFfYnVmX3RwaCB7XG4mIzQzO1x0X19zMzJcdGRtYWJ1Zl9mZDtcbiYjNDM7XHRfX3UzMlx0ZmxhZ3M7XG4mIzQzO1x0X191MTZcdHN0ZWVyaW5nX3RhZ19leHQ7XG4mIzQzO1x0X191OFx0c3RlZXJpbmdfdGFnO1xuJiM0MztcdF9fdThcdHBoO1xuJiM0Mzt9O1xuJiM0MztcbiAvKiAtLS0tLS0tLSBBUEkgZm9yIFR5cGUxIFZGSU8gSU9NTVUgLS0tLS0tLS0gKi9cbiBcbiAvKipcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAxOToxMzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtQQ0lFX1RQSCYjMzQ7LAogICAgJiMzNDtWRklPX1BDSSYjMzQ7LAogICAgJiMzNDtQQ0lfUDJQRE1BJiMzNDssCiAgICAmIzM0O01MWDVfSU5GSU5JQkFORCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3ZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3RwaCYjMzQ7LAogICAgJiMzNDt2ZmlvX3BjaV9kbWFfYnVmX2dldF9wY2lfdHBoJiMzNDssCiAgICAmIzM0O2RtYV9idWZfZ2V0X3BjaV90cGgmIzM0OywKICAgICYjMzQ7cGNpZV90cGhfZW5hYmxlZF9yZXFfdHlwZSYjMzQ7LAogICAgJiMzNDtwY2llX3RwaF9jb21wbGV0ZXJfdHlwZSYjMzQ7LAogICAgJiMzNDttbHg1X3N0X2FsbG9jX2luZGV4X2J5X3RhZyYjMzQ7LAogICAgJiMzNDttbHg1X3N0X2dldF9pbmRleCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IFZGSU8gaW9jdGwgZmVhdHVyZSBgVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGX1RQSGAgdG8gYXNzb2NpYXRlIFBDSWUgVFBIIChUTFAgUHJvY2Vzc2luZyBIaW50cykgbWV0YWRhdGEgd2l0aCBhIERNQS1CVUYuIEl0IGFsc28gYWRkcyBhIG5ldyBgZ2V0X3BjaV90cGhgIGNhbGxiYWNrIHRvIGBkbWFfYnVmX29wc2AgYW5kIGltcGxlbWVudHMgaXQgZm9yIFZGSU8gUENJIERNQS1CVUZzLiBUaGUgTWVsbGFub3ggbWx4NSBJbmZpbmliYW5kIGRyaXZlciBpcyBtb2RpZmllZCB0byBxdWVyeSBhbmQgdXNlIHRoaXMgbWV0YWRhdGEuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBETUEtQlVGLCBWRklPLCBhbmQgbWx4NSBsb2dpYyB0aGF0IGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDIxOGIyNjk5NmZmYTRjOThiYzUxMzA4Y2M5YzA3ZWUwMjU4MjVhN2IKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEp1biAyMiAxOToxMzozNiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hLWJ1Zi9kbWEtYnVmLmMgYi9kcml2ZXJzL2RtYS1idWYvZG1hLWJ1Zi5jCmluZGV4IGQ1MDRjNjM2ZGMyOTRlLi43YTRjOWIwZDVkYWI0NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9kbWEtYnVmL2RtYS1idWYuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RtYS1idWYvZG1hLWJ1Zi5jCkBAIC0xMTQ0LDYgJiM0MzsxMTQ0LDMxIEBAIHZvaWQgZG1hX2J1Zl91bnBpbihzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2gpCiB9CiBFWFBPUlRfU1lNQk9MX05TX0dQTChkbWFfYnVmX3VucGluLCAmIzM0O0RNQV9CVUYmIzM0Oyk7CiAKJiM0MzsvKioKJiM0MzsgKiBkbWFfYnVmX2dldF9wY2lfdHBoIC0gUmV0cmlldmUgUENJZSBUTFAgUHJvY2Vzc2luZyBIaW50IChUUEgpIG1ldGFkYXRhCiYjNDM7ICogQGRtYWJ1ZjogRE1BIGJ1ZmZlciB0byBxdWVyeQomIzQzOyAqIEBleHRlbmRlZDogZmFsc2UgZm9yIDgtYml0IFNULCB0cnVlIGZvciAxNi1iaXQgRXh0ZW5kZWQgU1QKJiM0MzsgKiBAc3RlZXJpbmdfdGFnOiByZXR1cm5zIHRoZSByYXcgc3RlZXJpbmcgdGFnIGZvciB0aGUgcmVxdWVzdGVkIG5hbWVzcGFjZQomIzQzOyAqIEBwaDogcmV0dXJucyB0aGUgVFBIIHByb2Nlc3NpbmcgaGludAomIzQzOyAqCiYjNDM7ICogV3JhcHBlciBmb3IgdGhlIG9wdGlvbmFsICZhbXA7ZG1hX2J1Zl9vcHMuZ2V0X3BjaV90cGggY2FsbGJhY2suCiYjNDM7ICoKJiM0MzsgKiBNdXN0IGJlIGNhbGxlZCB3aXRoICZhbXA7ZG1hX2J1Zi5yZXN2IGhlbGQuIFJldHVybnMgLUVPUE5PVFNVUFAgaWYgdGhlCiYjNDM7ICogZXhwb3J0ZXIgZG9lcyBub3QgaW1wbGVtZW50IHRoZSBjYWxsYmFjayBvciBoYXMgbm8gbWV0YWRhdGEgZm9yIHRoZQomIzQzOyAqIHJlcXVlc3RlZCBuYW1lc3BhY2UuCiYjNDM7ICovCiYjNDM7aW50IGRtYV9idWZfZ2V0X3BjaV90cGgoc3RydWN0IGRtYV9idWYgKmRtYWJ1ZiwgYm9vbCBleHRlbmRlZCwKJiM0MzsJCQl1MTYgKnN0ZWVyaW5nX3RhZywgdTggKnBoKQomIzQzO3sKJiM0MzsJZG1hX3Jlc3ZfYXNzZXJ0X2hlbGQoZG1hYnVmLSZndDtyZXN2KTsKJiM0MzsKJiM0MzsJaWYgKCFkbWFidWYtJmd0O29wcy0mZ3Q7Z2V0X3BjaV90cGgpCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiYjNDM7CXJldHVybiBkbWFidWYtJmd0O29wcy0mZ3Q7Z2V0X3BjaV90cGgoZG1hYnVmLCBleHRlbmRlZCwgc3RlZXJpbmdfdGFnLCBwaCk7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfTlNfR1BMKGRtYV9idWZfZ2V0X3BjaV90cGgsICYjMzQ7RE1BX0JVRiYjMzQ7KTsKJiM0MzsKIC8qKgogICogZG1hX2J1Zl9tYXBfYXR0YWNobWVudCAtIFJldHVybnMgdGhlIHNjYXR0ZXJsaXN0IHRhYmxlIG9mIHRoZSBhdHRhY2htZW50OwogICogbWFwcGVkIGludG8gX2RldmljZV8gYWRkcmVzcyBzcGFjZS4gSXMgYSB3cmFwcGVyIGZvciBtYXBfZG1hX2J1ZigpIG9mIHRoZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDUvbWFpbi5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDUvbWFpbi5jCmluZGV4IDAyODA5MTE0ZmM3OWFmLi5hMmI0OTdmNmIxNmJkYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDUvbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg1L21haW4uYwpAQCAtNjAsNiAmIzQzOzYwLDcgQEAKIE1PRFVMRV9BVVRIT1IoJiMzNDtFbGkgQ29oZW4gJmx0O2VsaUBtZWxsYW5veC5jb20mZ3Q7JiMzNDspOwogTU9EVUxFX0RFU0NSSVBUSU9OKCYjMzQ7TWVsbGFub3ggNXRoIGdlbmVyYXRpb24gbmV0d29yayBhZGFwdGVycyAoQ29ubmVjdFggc2VyaWVzKSBJQiBkcml2ZXImIzM0Oyk7CiBNT0RVTEVfTElDRU5TRSgmIzM0O0R1YWwgQlNEL0dQTCYjMzQ7KTsKJiM0MztNT0RVTEVfSU1QT1JUX05TKCYjMzQ7RE1BX0JVRiYjMzQ7KTsKIAogc3RydWN0IG1seDVfaWJfZXZlbnRfd29yayB7CiAJc3RydWN0IHdvcmtfc3RydWN0CXdvcms7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NS9tci5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDUvbXIuYwppbmRleCBlNmI3NDk1NWQ5NWRjZC4uN2FjZWQzZjU1NDU2MWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg1L21yLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDUvbXIuYwpAQCAtMzksNiAmIzQzOzM5LDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9kZWxheS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2RtYS1idWYuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9kbWEtcmVzdi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9wY2ktdHBoLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7cmRtYS9mcm1yX3Bvb2xzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7cmRtYS9pYl91bWVtX29kcC5oJmd0OwogI2luY2x1ZGUgJiMzNDtkbS5oJiMzNDsKQEAgLTE2Nyw2ICYjNDM7MTY4LDMyIEBAIHN0YXRpYyBpbnQgZ2V0X3VuY2hhbmdlYWJsZV9hY2Nlc3NfZmxhZ3Moc3RydWN0IG1seDVfaWJfZGV2ICpkZXYsCiAjZGVmaW5lIE1MWDVfRlJNUl9QT09MU19LRVJORUxfS0VZX1BIX01BU0sgR0VOTUFTS19VTEwoMjMsIDE2KQogI2RlZmluZSBNTFg1X0ZSTVJfUE9PTFNfS0VSTkVMX0tFWV9TVF9JTkRFWF9NQVNLIEdFTk1BU0tfVUxMKDE1LCAwKQogCiYjNDM7c3RhdGljIGludCBtbHg1X2liX2dldF9mcm1yX3N0X2hhbmRsZV9yZWYoc3RydWN0IG1seDVfaWJfZGV2ICpkZXYsCiYjNDM7CQkJCQkgIHUxNiBzdF9pbmRleCkKJiM0Mzt7CiYjNDM7CWlmIChzdF9pbmRleCA9PSBNTFg1X01LQ19QQ0lFX1RQSF9OT19TVEVFUklOR19UQUdfSU5ERVgpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJcmV0dXJuIG1seDVfc3RfZ2V0X2luZGV4KGRldi0mZ3Q7bWRldiwgc3RfaW5kZXgpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBtbHg1X2liX3B1dF9zdF9pbmRleF9yZWYoc3RydWN0IG1seDVfaWJfZGV2ICpkZXYsIHUxNiBzdF9pbmRleCkKJiM0Mzt7CiYjNDM7CWlmIChzdF9pbmRleCA9PSBNTFg1X01LQ19QQ0lFX1RQSF9OT19TVEVFUklOR19UQUdfSU5ERVgpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CW1seDVfc3RfZGVhbGxvY19pbmRleChkZXYtJmd0O21kZXYsIHN0X2luZGV4KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgbWx4NV9pYl9wdXRfZnJtcl9zdF9oYW5kbGVfcmVmKHN0cnVjdCBtbHg1X2liX2RldiAqZGV2LAomIzQzOwkJCQkJICAgdTY0IGtlcm5lbF92ZW5kb3Jfa2V5KQomIzQzO3sKJiM0MzsJdTE2IHN0X2luZGV4ID0gRklFTERfR0VUKE1MWDVfRlJNUl9QT09MU19LRVJORUxfS0VZX1NUX0lOREVYX01BU0ssCiYjNDM7CQkJCSBrZXJuZWxfdmVuZG9yX2tleSk7CiYjNDM7CiYjNDM7CW1seDVfaWJfcHV0X3N0X2luZGV4X3JlZihkZXYsIHN0X2luZGV4KTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgc3RydWN0IG1seDVfaWJfbXIgKgogX21seDVfZnJtcl9wb29sX2FsbG9jKHN0cnVjdCBtbHg1X2liX2RldiAqZGV2LCBzdHJ1Y3QgaWJfdW1lbSAqdW1lbSwKIAkJICAgICAgaW50IGFjY2Vzc19mbGFncywgaW50IGFjY2Vzc19tb2RlLApAQCAtMjE4LDcgJiM0MzsyNDUsOSBAQCBzdHJ1Y3QgbWx4NV9pYl9tciAqbWx4NV9tcl9jYWNoZV9hbGxvYyhzdHJ1Y3QgbWx4NV9pYl9kZXYgKmRldiwKIAkJCQkgICAgICAwIDoKIAkJCQkgICAgICBNTFg1X0ZSTVJfUE9PTFNfS0VZX0FDQ0VTU19NT0RFX0tTTV9NQVNLLAogCQkubnVtX2RtYV9ibG9ja3MgPSBuZGVzY3MsCi0JCS5rZXJuZWxfdmVuZG9yX2tleSA9IDAsIC8qIG5vIFBIIGFuZCBubyBTVCBpbmRleCAqLwomIzQzOwkJLmtlcm5lbF92ZW5kb3Jfa2V5ID0KJiM0MzsJCQlGSUVMRF9QUkVQKE1MWDVfRlJNUl9QT09MU19LRVJORUxfS0VZX1NUX0lOREVYX01BU0ssCiYjNDM7CQkJCSAgIE1MWDVfTUtDX1BDSUVfVFBIX05PX1NURUVSSU5HX1RBR19JTkRFWCksCiAJfTsKIAlzdHJ1Y3QgbWx4NV9pYl9tciAqbXI7CiAJaW50IHJldDsKQEAgLTMzNSw2ICYjNDM7MzY0LDcgQEAgc3RhdGljIGludCBtbHg1cl9idWlsZF9mcm1yX2tleShzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UsCiAJCWdldF91bmNoYW5nZWFibGVfYWNjZXNzX2ZsYWdzKGRldiwgaW4tJmd0O2FjY2Vzc19mbGFncyk7CiAJb3V0LSZndDt2ZW5kb3Jfa2V5ID0gaW4tJmd0O3ZlbmRvcl9rZXk7CiAJb3V0LSZndDtudW1fZG1hX2Jsb2NrcyA9IGluLSZndDtudW1fZG1hX2Jsb2NrczsKJiM0MzsJb3V0LSZndDtrZXJuZWxfdmVuZG9yX2tleSA9IGluLSZndDtrZXJuZWxfdmVuZG9yX2tleTsKIAogCXJldHVybiAwOwogfQpAQCAtNTU3LDYgJiM0Mzs1ODcsOSBAQCBzdGF0aWMgc3RydWN0IG1seDVfaWJfbXIgKnJlZ19jcmVhdGUoc3RydWN0IGliX3BkICpwZCwgc3RydWN0IGliX3VtZW0gKnVtZW0sCiAJbXItJmd0O2libXIucGQgPSBwZDsKIAltci0mZ3Q7YWNjZXNzX2ZsYWdzID0gYWNjZXNzX2ZsYWdzOwogCW1yLSZndDtwYWdlX3NoaWZ0ID0gb3JkZXJfYmFzZV8yKHBhZ2Vfc2l6ZSk7CiYjNDM7CW1yLSZndDtpYm1yLmZybXIua2V5Lmtlcm5lbF92ZW5kb3Jfa2V5ID0KJiM0MzsJCUZJRUxEX1BSRVAoTUxYNV9GUk1SX1BPT0xTX0tFUk5FTF9LRVlfU1RfSU5ERVhfTUFTSywgc3RfaW5kZXgpIHwKJiM0MzsJCUZJRUxEX1BSRVAoTUxYNV9GUk1SX1BPT0xTX0tFUk5FTF9LRVlfUEhfTUFTSywgcGgpOwogCiAJaW5sZW4gPSBNTFg1X1NUX1NaX0JZVEVTKGNyZWF0ZV9ta2V5X2luKTsKIAlpZiAocG9wdWxhdGUpCkBAIC03NTUsNiAmIzQzOzc4OCwxMiBAQCBzdGF0aWMgc3RydWN0IGliX21yICpjcmVhdGVfcmVhbF9tcihzdHJ1Y3QgaWJfcGQgKnBkLCBzdHJ1Y3QgaWJfdW1lbSAqdW1lbSwKIAogCXhsdF93aXRoX3VtciA9IG1seDVyX3Vtcl9jYW5fbG9hZF9wYXMoZGV2LCB1bWVtLSZndDtsZW5ndGgpOwogCWlmICh4bHRfd2l0aF91bXIpIHsKJiM0MzsJCWVyciA9IG1seDVfaWJfZ2V0X2ZybXJfc3RfaGFuZGxlX3JlZihkZXYsIHN0X2luZGV4KTsKJiM0MzsJCWlmIChlcnIpIHsKJiM0MzsJCQlpYl91bWVtX3JlbGVhc2UodW1lbSk7CiYjNDM7CQkJcmV0dXJuIEVSUl9QVFIoZXJyKTsKJiM0MzsJCX0KJiM0MzsKIAkJbXIgPSBhbGxvY19jYWNoZWFibGVfbXIocGQsIHVtZW0sIGlvdmEsIGFjY2Vzc19mbGFncywKIAkJCQkJTUxYNV9NS0NfQUNDRVNTX01PREVfTVRULAogCQkJCQlzdF9pbmRleCwgcGgpOwpAQCAtNzY5LDYgJiM0Mzs4MDgsOCBAQCBzdGF0aWMgc3RydWN0IGliX21yICpjcmVhdGVfcmVhbF9tcihzdHJ1Y3QgaWJfcGQgKnBkLCBzdHJ1Y3QgaWJfdW1lbSAqdW1lbSwKIAkJbXV0ZXhfdW5sb2NrKCZhbXA7ZGV2LSZndDtzbG93X3BhdGhfbXV0ZXgpOwogCX0KIAlpZiAoSVNfRVJSKG1yKSkgewomIzQzOwkJaWYgKHhsdF93aXRoX3VtcikKJiM0MzsJCQltbHg1X2liX3B1dF9zdF9pbmRleF9yZWYoZGV2LCBzdF9pbmRleCk7CiAJCWliX3VtZW1fcmVsZWFzZSh1bWVtKTsKIAkJcmV0dXJuIEVSUl9DQVNUKG1yKTsKIAl9CkBAIC05MDMsNiAmIzQzOzk0NCw1MiBAQCBzdGF0aWMgc3RydWN0IGRtYV9idWZfYXR0YWNoX29wcyBtbHg1X2liX2RtYWJ1Zl9hdHRhY2hfb3BzID0gewogCS5pbnZhbGlkYXRlX21hcHBpbmdzID0gbWx4NV9pYl9kbWFidWZfaW52YWxpZGF0ZV9jYiwKIH07CiAKJiM0MztzdGF0aWMgdm9pZCBnZXRfcGNpX3RwaF9tcl9kbWFidWYoc3RydWN0IG1seDVfaWJfZGV2ICpkZXYsIHN0cnVjdCBkbWFfYnVmICpkbWFidWYsCiYjNDM7CQkJCSAgdTE2ICpzdF9pbmRleCwgdTggKnBoKQomIzQzO3sKJiM0MzsJdTE2IGxvY2FsX3N0X2luZGV4OwomIzQzOwl1MTYgc3RlZXJpbmdfdGFnOwomIzQzOwl1OCBsb2NhbF9waDsKJiM0MzsJYm9vbCBleHRlbmRlZDsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJc3dpdGNoIChwY2llX3RwaF9lbmFibGVkX3JlcV90eXBlKGRldi0mZ3Q7bWRldi0mZ3Q7cGRldikpIHsKJiM0MzsJY2FzZSBQQ0lfVFBIX1JFUV9UUEhfT05MWToKJiM0MzsJCWV4dGVuZGVkID0gZmFsc2U7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBQQ0lfVFBIX1JFUV9FWFRfVFBIOgomIzQzOwkJZXh0ZW5kZWQgPSB0cnVlOwomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJZG1hX3Jlc3ZfbG9jayhkbWFidWYtJmd0O3Jlc3YsIE5VTEwpOwomIzQzOwlyZXQgPSBkbWFfYnVmX2dldF9wY2lfdHBoKGRtYWJ1ZiwgZXh0ZW5kZWQsICZhbXA7c3RlZXJpbmdfdGFnLCAmYW1wO2xvY2FsX3BoKTsKJiM0MzsJZG1hX3Jlc3ZfdW5sb2NrKGRtYWJ1Zi0mZ3Q7cmVzdik7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCWlmIChyZXQgIT0gLUVPUE5PVFNVUFApCiYjNDM7CQkJbWx4NV9pYl9kYmcoZGV2LCAmIzM0O2dldF9wY2lfdHBoIGZhaWxlZCAoJWQpXG4mIzM0OywgcmV0KTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXQgPSBtbHg1X3N0X2FsbG9jX2luZGV4X2J5X3RhZyhkZXYtJmd0O21kZXYsIHN0ZWVyaW5nX3RhZywKJiM0MzsJCQkJCSAmYW1wO2xvY2FsX3N0X2luZGV4KTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJbWx4NV9pYl9kYmcoZGV2LCAmIzM0O3N0X2FsbG9jX2luZGV4X2J5X3RhZyBmYWlsZWQgKCVkKVxuJiMzNDssIHJldCk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJKnN0X2luZGV4ID0gbG9jYWxfc3RfaW5kZXg7CiYjNDM7CSpwaCA9IGxvY2FsX3BoOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBtbHg1X2liX21yX3B1dF9mcm1yX3N0X2hhbmRsZV9yZWYoc3RydWN0IG1seDVfaWJfbXIgKm1yKQomIzQzO3sKJiM0MzsJbWx4NV9pYl9wdXRfZnJtcl9zdF9oYW5kbGVfcmVmKG1yX3RvX21kZXYobXIpLAomIzQzOwkJCQkgICAgICAgbXItJmd0O2libXIuZnJtci5rZXkua2VybmVsX3ZlbmRvcl9rZXkpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBzdHJ1Y3QgaWJfbXIgKgogcmVnX3VzZXJfbXJfZG1hYnVmKHN0cnVjdCBpYl9wZCAqcGQsIHN0cnVjdCBkZXZpY2UgKmRtYV9kZXZpY2UsCiAJCSAgIHU2NCBvZmZzZXQsIHU2NCBsZW5ndGgsIHU2NCB2aXJ0X2FkZHIsCkBAIC05NDUsMTIgJiM0MzsxMDMyLDIyIEBAIHJlZ191c2VyX21yX2RtYWJ1ZihzdHJ1Y3QgaWJfcGQgKnBkLCBzdHJ1Y3QgZGV2aWNlICpkbWFfZGV2aWNlLAogCQlwaCA9IGRtYWgtJmd0O3BoOwogCQlpZiAoZG1haC0mZ3Q7dmFsaWRfZmllbGRzICZhbXA7IEJJVChJQl9ETUFIX0NQVV9JRF9FWElTVFMpKQogCQkJc3RfaW5kZXggPSBtZG1haC0mZ3Q7c3RfaW5kZXg7CiYjNDM7CiYjNDM7CQllcnIgPSBtbHg1X2liX2dldF9mcm1yX3N0X2hhbmRsZV9yZWYoZGV2LCBzdF9pbmRleCk7CiYjNDM7CQlpZiAoZXJyKSB7CiYjNDM7CQkJaWJfdW1lbV9yZWxlYXNlKCZhbXA7dW1lbV9kbWFidWYtJmd0O3VtZW0pOwomIzQzOwkJCXJldHVybiBFUlJfUFRSKGVycik7CiYjNDM7CQl9CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlnZXRfcGNpX3RwaF9tcl9kbWFidWYoZGV2LCB1bWVtX2RtYWJ1Zi0mZ3Q7YXR0YWNoLSZndDtkbWFidWYsCiYjNDM7CQkJCSAgICAgICZhbXA7c3RfaW5kZXgsICZhbXA7cGgpOwogCX0KIAogCW1yID0gYWxsb2NfY2FjaGVhYmxlX21yKHBkLCAmYW1wO3VtZW1fZG1hYnVmLSZndDt1bWVtLCB2aXJ0X2FkZHIsCiAJCQkJYWNjZXNzX2ZsYWdzLCBhY2Nlc3NfbW9kZSwKIAkJCQlzdF9pbmRleCwgcGgpOwogCWlmIChJU19FUlIobXIpKSB7CiYjNDM7CQltbHg1X2liX3B1dF9zdF9pbmRleF9yZWYoZGV2LCBzdF9pbmRleCk7CiAJCWliX3VtZW1fcmVsZWFzZSgmYW1wO3VtZW1fZG1hYnVmLSZndDt1bWVtKTsKIAkJcmV0dXJuIEVSUl9DQVNUKG1yKTsKIAl9CkBAIC0xNDA1LDYgJiM0MzsxNTAyLDcgQEAgc3RhdGljIGludCBtbHg1cl9oYW5kbGVfbWtleV9jbGVhbnVwKHN0cnVjdCBtbHg1X2liX21yICptcikKIAlpZiAobXItJmd0O2libXIuZnJtci5wb29sKSB7CiAJCWlmICghbWx4NV91bXJfcmV2b2tlX21yX3dpdGhfbG9jayhtcikpIHsKIAkJCWliX2ZybXJfcG9vbF9wdXNoKG1yLSZndDtpYm1yLmRldmljZSwgJmFtcDttci0mZ3Q7aWJtcik7CiYjNDM7CQkJbWx4NV9pYl9tcl9wdXRfZnJtcl9zdF9oYW5kbGVfcmVmKG1yKTsKIAkJCXJldHVybiAwOwogCQl9CiAJfQpAQCAtMTQzMiw2ICYjNDM7MTUzMCw5IEBAIHN0YXRpYyBpbnQgbWx4NXJfaGFuZGxlX21rZXlfY2xlYW51cChzdHJ1Y3QgbWx4NV9pYl9tciAqbXIpCiAJaWYgKG1yLSZndDtpYm1yLmZybXIucG9vbCAmYW1wOyZhbXA7ICFyZXQpCiAJCWliX2ZybXJfcG9vbF9kcm9wKCZhbXA7bXItJmd0O2libXIpOwogCiYjNDM7CWlmICghcmV0KQomIzQzOwkJbWx4NV9pYl9tcl9wdXRfZnJtcl9zdF9oYW5kbGVfcmVmKG1yKTsKJiM0MzsKIAlyZXR1cm4gcmV0OwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGliL3N0LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGliL3N0LmMKaW5kZXggOTk3YmU5MWYwYTEzNWEuLmJmMTRhN2E2ZGYxNWUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGliL3N0LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi9zdC5jCkBAIC05MiwyMyAmIzQzOzkyLDE4IEBAIHZvaWQgbWx4NV9zdF9kZXN0cm95KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYpCiAJa2ZyZWUoc3QpOwogfQogCi1pbnQgbWx4NV9zdF9hbGxvY19pbmRleChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCBlbnVtIHRwaF9tZW1fdHlwZSBtZW1fdHlwZSwKLQkJCXVuc2lnbmVkIGludCBjcHVfdWlkLCB1MTYgKnN0X2luZGV4KQomIzQzO2ludCBtbHg1X3N0X2FsbG9jX2luZGV4X2J5X3RhZyhzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCB1MTYgdGFnLAomIzQzOwkJCSAgICAgICB1MTYgKnN0X2luZGV4KQogewogCXN0cnVjdCBtbHg1X3N0X2lkeF9kYXRhICppZHhfZGF0YTsKIAlzdHJ1Y3QgbWx4NV9zdCAqc3QgPSBkZXYtJmd0O3N0OwogCXVuc2lnbmVkIGxvbmcgaW5kZXg7CiAJdTMyIHhhX2lkOwotCXUxNiB0YWc7Ci0JaW50IHJldDsKJiM0MzsJaW50IHJldCA9IDA7CiAKIAlpZiAoIXN0KQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKLQlyZXQgPSBwY2llX3RwaF9nZXRfY3B1X3N0KGRldi0mZ3Q7cGRldiwgbWVtX3R5cGUsIGNwdV91aWQsICZhbXA7dGFnKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCiAJaWYgKHN0LSZndDtkaXJlY3RfbW9kZSkgewogCQkqc3RfaW5kZXggPSB0YWc7CiAJCXJldHVybiAwOwpAQCAtMTUyLDggJiM0MzsxNDcsNDYgQEAgaW50IG1seDVfc3RfYWxsb2NfaW5kZXgoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgZW51bSB0cGhfbWVtX3R5cGUgbWVtX3R5cGUsCiAJbXV0ZXhfdW5sb2NrKCZhbXA7c3QtJmd0O2xvY2spOwogCXJldHVybiByZXQ7CiB9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwobWx4NV9zdF9hbGxvY19pbmRleF9ieV90YWcpOwomIzQzOwomIzQzO2ludCBtbHg1X3N0X2FsbG9jX2luZGV4KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIGVudW0gdHBoX21lbV90eXBlIG1lbV90eXBlLAomIzQzOwkJCXVuc2lnbmVkIGludCBjcHVfdWlkLCB1MTYgKnN0X2luZGV4KQomIzQzO3sKJiM0MzsJdTE2IHRhZzsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gcGNpZV90cGhfZ2V0X2NwdV9zdChkZXYtJmd0O3BkZXYsIG1lbV90eXBlLCBjcHVfdWlkLCAmYW1wO3RhZyk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXR1cm4gbWx4NV9zdF9hbGxvY19pbmRleF9ieV90YWcoZGV2LCB0YWcsIHN0X2luZGV4KTsKJiM0Mzt9CiBFWFBPUlRfU1lNQk9MX0dQTChtbHg1X3N0X2FsbG9jX2luZGV4KTsKIAomIzQzO2ludCBtbHg1X3N0X2dldF9pbmRleChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCB1MTYgc3RfaW5kZXgpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbWx4NV9zdF9pZHhfZGF0YSAqaWR4X2RhdGE7CiYjNDM7CXN0cnVjdCBtbHg1X3N0ICpzdCA9IGRldi0mZ3Q7c3Q7CiYjNDM7CWludCByZXQgPSAwOwomIzQzOwomIzQzOwlpZiAoIXN0KQomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwomIzQzOwlpZiAoc3QtJmd0O2RpcmVjdF9tb2RlKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtzdC0mZ3Q7bG9jayk7CiYjNDM7CWlkeF9kYXRhID0geGFfbG9hZCgmYW1wO3N0LSZndDtpZHhfeGEsIHN0X2luZGV4KTsKJiM0MzsJaWYgKFdBUk5fT05fT05DRSghaWR4X2RhdGEpKQomIzQzOwkJcmV0ID0gLUVJTlZBTDsKJiM0MzsJZWxzZQomIzQzOwkJcmVmY291bnRfaW5jKCZhbXA7aWR4X2RhdGEtJmd0O3VzZWNvdW50KTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7c3QtJmd0O2xvY2spOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0dQTChtbHg1X3N0X2dldF9pbmRleCk7CiYjNDM7CiBpbnQgbWx4NV9zdF9kZWFsbG9jX2luZGV4KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIHUxNiBzdF9pbmRleCkKIHsKIAlzdHJ1Y3QgbWx4NV9zdF9pZHhfZGF0YSAqaWR4X2RhdGE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS90cGguYyBiL2RyaXZlcnMvcGNpL3RwaC5jCmluZGV4IDkxMTQ1ZThkOWQ5NTEyLi43MTdiNDdkMWQ5Y2FjZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvdHBoLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9wY2kvdHBoLmMKQEAgLTE3NCw2ICYjNDM7MTc0LDUxIEBAIHUzMiBwY2llX3RwaF9nZXRfc3RfdGFibGVfbG9jKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogfQogRVhQT1JUX1NZTUJPTChwY2llX3RwaF9nZXRfc3RfdGFibGVfbG9jKTsKIAomIzQzOy8qKgomIzQzOyAqIHBjaWVfdHBoX2VuYWJsZWRfcmVxX3R5cGUgLSBSZXR1cm4gdGhlIGRldmljZSYjMzk7cyBlbmFibGVkIFRQSCByZXF1ZXN0ZXIgdHlwZQomIzQzOyAqIEBwZGV2OiBQQ0kgZGV2aWNlIHRvIHF1ZXJ5CiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IFBDSV9UUEhfUkVRX0RJU0FCTEUsIFBDSV9UUEhfUkVRX1RQSF9PTkxZIG9yIFBDSV9UUEhfUkVRX0VYVF9UUEguCiYjNDM7ICovCiYjNDM7dTggcGNpZV90cGhfZW5hYmxlZF9yZXFfdHlwZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKJiM0Mzt7CiYjNDM7CXJldHVybiBwZGV2LSZndDt0cGhfcmVxX3R5cGU7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0wocGNpZV90cGhfZW5hYmxlZF9yZXFfdHlwZSk7CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogcGNpZV90cGhfY29tcGxldGVyX3R5cGUgLSBSZXR1cm4gdGhlIGRldmljZSYjMzk7cyBUUEggQ29tcGxldGVyIHN1cHBvcnQKJiM0MzsgKiBAcGRldjogUENJIGRldmljZSB0byBxdWVyeQomIzQzOyAqCiYjNDM7ICogUmVhZHMgdGhlICYjMzQ7VFBIIENvbXBsZXRlciBTdXBwb3J0ZWQmIzM0OyBmaWVsZCAoYml0cyAxMzoxMikgb2YgRGV2aWNlCiYjNDM7ICogQ2FwYWJpbGl0aWVzIDIuIFRoZSByZXNlcnZlZCAwYjEwIGVuY29kaW5nIGlzIGZvbGRlZCBpbnRvCiYjNDM7ICogJiMzNDtub3Qgc3VwcG9ydGVkJiMzNDsgc28gY2FsbGVycyBvbmx5IG5lZWQgdG8gY29tcGFyZSBhZ2FpbnN0IHRoZSB0aHJlZQomIzQzOyAqIGRlZmluZWQgdmFsdWVzLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiBvbmUgb2YgJVBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9OT05FLAomIzQzOyAqICAgICAgICAgJVBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9UUEhfT05MWSBvcgomIzQzOyAqICAgICAgICAgJVBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9FWFRfVFBILgomIzQzOyAqLwomIzQzO3U4IHBjaWVfdHBoX2NvbXBsZXRlcl90eXBlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQomIzQzO3sKJiM0MzsJdTMyIHJlZzsKJiM0MzsKJiM0MzsJaWYgKHBjaWVfY2FwYWJpbGl0eV9yZWFkX2R3b3JkKHBkZXYsIFBDSV9FWFBfREVWQ0FQMiwgJmFtcDtyZWcpKQomIzQzOwkJcmV0dXJuIFBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9OT05FOwomIzQzOwlpZiAoUENJX1BPU1NJQkxFX0VSUk9SKHJlZykpCiYjNDM7CQlyZXR1cm4gUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX05PTkU7CiYjNDM7CiYjNDM7CXN3aXRjaCAoRklFTERfR0VUKFBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9NQVNLLCByZWcpKSB7CiYjNDM7CWNhc2UgUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX1RQSF9PTkxZOgomIzQzOwkJcmV0dXJuIFBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9UUEhfT05MWTsKJiM0MzsJY2FzZSBQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfRVhUX1RQSDoKJiM0MzsJCXJldHVybiBQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfRVhUX1RQSDsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiBQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfTk9ORTsKJiM0MzsJfQomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MKHBjaWVfdHBoX2NvbXBsZXRlcl90eXBlKTsKJiM0MzsKIC8qCiAgKiBSZXR1cm4gdGhlIHNpemUgb2YgU1QgdGFibGUuIElmIFNUIHRhYmxlIGlzIG5vdCBpbiBUUEggUmVxdWVzdGVyIEV4dGVuZGVkCiAgKiBDYXBhYmlsaXR5IHNwYWNlLCByZXR1cm4gMC4gT3RoZXJ3aXNlIHJldHVybiB0aGUgU1QgVGFibGUgU2l6ZSAmIzQzOyAxLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYwppbmRleCBhMjhmMWU5OTM2MmMxZS4uYzdkNjkwMmJjNjFiMDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jCkBAIC0xNTcyLDYgJiM0MzsxNTcyLDkgQEAgaW50IHZmaW9fcGNpX2NvcmVfaW9jdGxfZmVhdHVyZShzdHJ1Y3QgdmZpb19kZXZpY2UgKmRldmljZSwgdTMyIGZsYWdzLAogCQlyZXR1cm4gdmZpb19wY2lfY29yZV9mZWF0dXJlX3Rva2VuKHZkZXYsIGZsYWdzLCBhcmcsIGFyZ3N6KTsKIAljYXNlIFZGSU9fREVWSUNFX0ZFQVRVUkVfRE1BX0JVRjoKIAkJcmV0dXJuIHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmKHZkZXYsIGZsYWdzLCBhcmcsIGFyZ3N6KTsKJiM0MzsJY2FzZSBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUZfVFBIOgomIzQzOwkJcmV0dXJuIHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3RwaCh2ZGV2LCBmbGFncywgYXJnLAomIzQzOwkJCQkJCQkgYXJnc3opOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRU5PVFRZOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmMgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jCmluZGV4IGMxNmY0NjBjMDFkNjgxLi5kNmY1ZGQzMjEwMDA5YyAxMDA2NDQKLS0tIGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jCkBAIC0zLDYgJiM0MzszLDcgQEAKICAqLwogI2luY2x1ZGUgJmx0O2xpbnV4L2RtYS1idWYtbWFwcGluZy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BjaS1wMnBkbWEuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcGNpLXRwaC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2RtYS1yZXN2LmgmZ3Q7CiAKICNpbmNsdWRlICYjMzQ7dmZpb19wY2lfcHJpdi5oJiMzNDsKQEAgLTE5LDcgJiM0MzsyMCwxNCBAQCBzdHJ1Y3QgdmZpb19wY2lfZG1hX2J1ZiB7CiAJdTMyIG5yX3JhbmdlczsKIAlzdHJ1Y3Qga3JlZiBrcmVmOwogCXN0cnVjdCBjb21wbGV0aW9uIGNvbXA7Ci0JdTggcmV2b2tlZCA6IDE7CiYjNDM7CiYjNDM7CS8qIFByb3RlY3RlZCBieSBkbWFidWYtJmd0O3Jlc3YuICovCiYjNDM7CXUxNiB0cGhfc3RfZXh0OwomIzQzOwl1OCB0cGhfc3Q7CiYjNDM7CXU4IHJldm9rZWQ6MTsKJiM0MzsJdTggdHBoX3N0X3ZhbGlkOjE7CiYjNDM7CXU4IHRwaF9zdF9leHRfdmFsaWQ6MTsKJiM0MzsJdTggdHBoX3BoOjI7CiB9OwogCiBzdGF0aWMgaW50IHZmaW9fcGNpX2RtYV9idWZfYXR0YWNoKHN0cnVjdCBkbWFfYnVmICpkbWFidWYsCkBAIC02OSw2ICYjNDM7NzcsMjYgQEAgdmZpb19wY2lfZG1hX2J1Zl9tYXAoc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNobWVudCwKIAlyZXR1cm4gcmV0OwogfQogCiYjNDM7c3RhdGljIGludCB2ZmlvX3BjaV9kbWFfYnVmX2dldF9wY2lfdHBoKHN0cnVjdCBkbWFfYnVmICpkbWFidWYsIGJvb2wgZXh0ZW5kZWQsCiYjNDM7CQkJCQl1MTYgKnN0ZWVyaW5nX3RhZywgdTggKnBoKQomIzQzO3sKJiM0MzsJc3RydWN0IHZmaW9fcGNpX2RtYV9idWYgKnByaXYgPSBkbWFidWYtJmd0O3ByaXY7CiYjNDM7CiYjNDM7CWRtYV9yZXN2X2Fzc2VydF9oZWxkKGRtYWJ1Zi0mZ3Q7cmVzdik7CiYjNDM7CiYjNDM7CWlmIChleHRlbmRlZCkgewomIzQzOwkJaWYgKCFwcml2LSZndDt0cGhfc3RfZXh0X3ZhbGlkKQomIzQzOwkJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJCSpzdGVlcmluZ190YWcgPSBwcml2LSZndDt0cGhfc3RfZXh0OwomIzQzOwl9IGVsc2UgewomIzQzOwkJaWYgKCFwcml2LSZndDt0cGhfc3RfdmFsaWQpCiYjNDM7CQkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwkJKnN0ZWVyaW5nX3RhZyA9IHByaXYtJmd0O3RwaF9zdDsKJiM0MzsJfQomIzQzOwkqcGggPSBwcml2LSZndDt0cGhfcGg7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIHZmaW9fcGNpX2RtYV9idWZfdW5tYXAoc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNobWVudCwKIAkJCQkgICBzdHJ1Y3Qgc2dfdGFibGUgKnNndCwKIAkJCQkgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpCkBAIC0xMDEsNiAmIzQzOzEyOSw3IEBAIHN0YXRpYyB2b2lkIHZmaW9fcGNpX2RtYV9idWZfcmVsZWFzZShzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmKQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGRtYV9idWZfb3BzIHZmaW9fcGNpX2RtYWJ1Zl9vcHMgPSB7CiAJLmF0dGFjaCA9IHZmaW9fcGNpX2RtYV9idWZfYXR0YWNoLAomIzQzOwkuZ2V0X3BjaV90cGggPSB2ZmlvX3BjaV9kbWFfYnVmX2dldF9wY2lfdHBoLAogCS5tYXBfZG1hX2J1ZiA9IHZmaW9fcGNpX2RtYV9idWZfbWFwLAogCS51bm1hcF9kbWFfYnVmID0gdmZpb19wY2lfZG1hX2J1Zl91bm1hcCwKIAkucmVsZWFzZSA9IHZmaW9fcGNpX2RtYV9idWZfcmVsZWFzZSwKQEAgLTMzMyw2ICYjNDM7MzYyLDcyIEBAIGludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1ZihzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIHUzMiBmbGFncywKIAlyZXR1cm4gcmV0OwogfQogCiYjNDM7aW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3RwaChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsCiYjNDM7CQkJCSAgICAgIHUzMiBmbGFncywKJiM0MzsJCQkJICAgICAgc3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfZG1hX2J1Zl90cGggX191c2VyICphcmcsCiYjNDM7CQkJCSAgICAgIHNpemVfdCBhcmdzeikKJiM0Mzt7CiYjNDM7CXN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX2RtYV9idWZfdHBoIHNldF90cGg7CiYjNDM7CXN0cnVjdCB2ZmlvX3BjaV9kbWFfYnVmICpwcml2OwomIzQzOwlzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmOwomIzQzOwl1OCBjb21wOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwljb21wID0gcGNpZV90cGhfY29tcGxldGVyX3R5cGUodmRldi0mZ3Q7cGRldik7CiYjNDM7CWlmIChjb21wID09IFBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9OT05FKQomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwomIzQzOwlyZXQgPSB2ZmlvX2NoZWNrX2ZlYXR1cmUoZmxhZ3MsIGFyZ3N6LCBWRklPX0RFVklDRV9GRUFUVVJFX1NFVCwKJiM0MzsJCQkJIHNpemVvZihzZXRfdHBoKSk7CiYjNDM7CWlmIChyZXQgIT0gMSkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CWlmIChjb3B5X2Zyb21fdXNlcigmYW1wO3NldF90cGgsIGFyZywgc2l6ZW9mKHNldF90cGgpKSkKJiM0MzsJCXJldHVybiAtRUZBVUxUOwomIzQzOwomIzQzOwlpZiAoc2V0X3RwaC5mbGFncyAmYW1wOyB+KFZGSU9fRE1BX0JVRl9UUEhfU1QgfCBWRklPX0RNQV9CVUZfVFBIX1NUX0VYVCkpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJaWYgKHNldF90cGgucGggJmFtcDsgfjB4MykKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlpZiAoKHNldF90cGguZmxhZ3MgJmFtcDsgVkZJT19ETUFfQlVGX1RQSF9TVF9FWFQpICZhbXA7JmFtcDsKJiM0MzsJICAgIGNvbXAgIT0gUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX0VYVF9UUEgpCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiYjNDM7CWRtYWJ1ZiA9IGRtYV9idWZfZ2V0KHNldF90cGguZG1hYnVmX2ZkKTsKJiM0MzsJaWYgKElTX0VSUihkbWFidWYpKQomIzQzOwkJcmV0dXJuIFBUUl9FUlIoZG1hYnVmKTsKJiM0MzsKJiM0MzsJaWYgKGRtYWJ1Zi0mZ3Q7b3BzICE9ICZhbXA7dmZpb19wY2lfZG1hYnVmX29wcykgewomIzQzOwkJcmV0ID0gLUVJTlZBTDsKJiM0MzsJCWdvdG8gb3V0X3B1dDsKJiM0MzsJfQomIzQzOwomIzQzOwlwcml2ID0gZG1hYnVmLSZndDtwcml2OwomIzQzOwlpZiAocHJpdi0mZ3Q7dmRldiAhPSB2ZGV2KSB7CiYjNDM7CQlyZXQgPSAtRUlOVkFMOwomIzQzOwkJZ290byBvdXRfcHV0OwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldCA9IGRtYV9yZXN2X2xvY2tfaW50ZXJydXB0aWJsZShkbWFidWYtJmd0O3Jlc3YsIE5VTEwpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBvdXRfcHV0OwomIzQzOwomIzQzOwlwcml2LSZndDt0cGhfc3QgICAgICAgICA9IHNldF90cGguc3RlZXJpbmdfdGFnOwomIzQzOwlwcml2LSZndDt0cGhfc3RfZXh0ICAgICA9IHNldF90cGguc3RlZXJpbmdfdGFnX2V4dDsKJiM0MzsJcHJpdi0mZ3Q7dHBoX3BoICAgICAgICAgPSBzZXRfdHBoLnBoOwomIzQzOwlwcml2LSZndDt0cGhfc3RfdmFsaWQgICA9ICEhKHNldF90cGguZmxhZ3MgJmFtcDsgVkZJT19ETUFfQlVGX1RQSF9TVCk7CiYjNDM7CXByaXYtJmd0O3RwaF9zdF9leHRfdmFsaWQgPQomIzQzOwkJISEoc2V0X3RwaC5mbGFncyAmYW1wOyBWRklPX0RNQV9CVUZfVFBIX1NUX0VYVCk7CiYjNDM7CWRtYV9yZXN2X3VubG9jayhkbWFidWYtJmd0O3Jlc3YpOwomIzQzOwlyZXQgPSAwOwomIzQzOwomIzQzO291dF9wdXQ6CiYjNDM7CWRtYV9idWZfcHV0KGRtYWJ1Zik7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwogdm9pZCB2ZmlvX3BjaV9kbWFfYnVmX21vdmUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCBib29sIHJldm9rZWQpCiB7CiAJc3RydWN0IHZmaW9fcGNpX2RtYV9idWYgKnByaXY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX3ByaXYuaCBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfcHJpdi5oCmluZGV4IGZjYTlkMGRmYWM5MGY4Li5jNThmMzY5YmU0YjM5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9wcml2LmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9wcml2LmgKQEAgLTExOCw2ICYjNDM7MTE4LDEwIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB2ZmlvX3BjaV9pc192Z2Eoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiBpbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWYoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCB1MzIgZmxhZ3MsCiAJCQkJICBzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV9kbWFfYnVmIF9fdXNlciAqYXJnLAogCQkJCSAgc2l6ZV90IGFyZ3N6KTsKJiM0MztpbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWZfdHBoKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwKJiM0MzsJCQkJICAgICAgdTMyIGZsYWdzLAomIzQzOwkJCQkgICAgICBzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV9kbWFfYnVmX3RwaCBfX3VzZXIgKmFyZywKJiM0MzsJCQkJICAgICAgc2l6ZV90IGFyZ3N6KTsKIHZvaWQgdmZpb19wY2lfZG1hX2J1Zl9jbGVhbnVwKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldik7CiB2b2lkIHZmaW9fcGNpX2RtYV9idWZfbW92ZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIGJvb2wgcmV2b2tlZCk7CiAjZWxzZQpAQCAtMTI4LDYgJiM0MzsxMzIsMTQgQEAgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWYoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCB1MzIgZmxhZ3MsCiB7CiAJcmV0dXJuIC1FTk9UVFk7CiB9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBpbnQKJiM0Mzt2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl90cGgoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCB1MzIgZmxhZ3MsCiYjNDM7CQkJCSAgc3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfZG1hX2J1Zl90cGggX191c2VyICphcmcsCiYjNDM7CQkJCSAgc2l6ZV90IGFyZ3N6KQomIzQzO3sKJiM0MzsJcmV0dXJuIC1FTk9UVFk7CiYjNDM7fQogc3RhdGljIGlubGluZSB2b2lkIHZmaW9fcGNpX2RtYV9idWZfY2xlYW51cChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpCiB7CiB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RtYS1idWYuaCBiL2luY2x1ZGUvbGludXgvZG1hLWJ1Zi5oCmluZGV4IGQxMjAzZGE1NmZjNWY3Li41M2IyNjg2YWQ4ZmM2NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9kbWEtYnVmLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9kbWEtYnVmLmgKQEAgLTExMyw2ICYjNDM7MTEzLDI2IEBAIHN0cnVjdCBkbWFfYnVmX29wcyB7CiAJICovCiAJdm9pZCAoKnVucGluKShzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2gpOwogCiYjNDM7CS8qKgomIzQzOwkgKiBAZ2V0X3BjaV90cGg6CiYjNDM7CSAqCiYjNDM7CSAqIFJldHJpZXZlIFBDSWUgVExQIFByb2Nlc3NpbmcgSGludCAoVFBIKSBzdGVlcmluZyBtZXRhZGF0YSBmb3IKJiM0MzsJICogdGhpcyBidWZmZXIgc28gYW4gaW1wb3J0ZXIgY2FuIHByb2dyYW0gYSBtYXRjaGluZyBTVC9QSCBoaW50IG9uCiYjNDM7CSAqIG91dGJvdW5kIFRMUHMgdGFyZ2V0aW5nIHRoZSBleHBvcnRlciBmb3IgcGVlci10by1wZWVyIERNQS4KJiM0MzsJICoKJiM0MzsJICogQGRtYWJ1ZjogRE1BIGJ1ZmZlciBmb3Igd2hpY2ggdG8gcmV0cmlldmUgVFBIIG1ldGFkYXRhCiYjNDM7CSAqIEBleHRlbmRlZDogZmFsc2UgZm9yIDgtYml0IFNULCB0cnVlIGZvciAxNi1iaXQgRXh0ZW5kZWQgU1QKJiM0MzsJICogQHN0ZWVyaW5nX3RhZzogUmV0dXJucyB0aGUgcmF3IFRQSCBzdGVlcmluZyB0YWcgZm9yIHRoZSByZXF1ZXN0ZWQKJiM0MzsJICogICAgICAgICAgICAgICAgbmFtZXNwYWNlCiYjNDM7CSAqIEBwaDogUmV0dXJucyB0aGUgVFBIIHByb2Nlc3NpbmcgaGludCAoMi1iaXQgdmFsdWUpCiYjNDM7CSAqCiYjNDM7CSAqIE9wdGlvbmFsIGNhbGxiYWNrIGZvciBkbWFfYnVmX2dldF9wY2lfdHBoKCkuIENhbGxlZCB3aXRoCiYjNDM7CSAqICZhbXA7ZG1hX2J1Zi5yZXN2IGhlbGQuIFJldHVybnMgMCBvbiBzdWNjZXNzIG9yIC1FT1BOT1RTVVBQIHdoZW4KJiM0MzsJICogdGhlIGV4cG9ydGVyIGhhcyBubyBtZXRhZGF0YSBmb3IgdGhlIHJlcXVlc3RlZCBuYW1lc3BhY2UuCiYjNDM7CSAqLwomIzQzOwlpbnQgKCpnZXRfcGNpX3RwaCkoc3RydWN0IGRtYV9idWYgKmRtYWJ1ZiwgYm9vbCBleHRlbmRlZCwKJiM0MzsJCQkgICB1MTYgKnN0ZWVyaW5nX3RhZywgdTggKnBoKTsKJiM0MzsKIAkvKioKIAkgKiBAbWFwX2RtYV9idWY6CiAJICoKQEAgLTU2Myw2ICYjNDM7NTgzLDggQEAgdm9pZCBkbWFfYnVmX2RldGFjaChzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLAogCQkgICAgc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoKTsKIGludCBkbWFfYnVmX3BpbihzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2gpOwogdm9pZCBkbWFfYnVmX3VucGluKHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaCk7CiYjNDM7aW50IGRtYV9idWZfZ2V0X3BjaV90cGgoc3RydWN0IGRtYV9idWYgKmRtYWJ1ZiwgYm9vbCBleHRlbmRlZCwKJiM0MzsJCQl1MTYgKnN0ZWVyaW5nX3RhZywgdTggKnBoKTsKIAogc3RydWN0IGRtYV9idWYgKmRtYV9idWZfZXhwb3J0KGNvbnN0IHN0cnVjdCBkbWFfYnVmX2V4cG9ydF9pbmZvICpleHBfaW5mbyk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWx4NS9kcml2ZXIuaCBiL2luY2x1ZGUvbGludXgvbWx4NS9kcml2ZXIuaAppbmRleCBiMTg3MWMwODIxZDBiOS4uOGIzOTExMTkxZmI2MjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWx4NS9kcml2ZXIuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21seDUvZHJpdmVyLmgKQEAgLTExODIsMTAgJiM0MzsxMTgyLDIzIEBAIGludCBtbHg1X2RtX3N3X2ljbV9kZWFsbG9jKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIGVudW0gbWx4NV9zd19pY21fdHlwZSB0eXBlCiAJCQkgICB1NjQgbGVuZ3RoLCB1MTYgdWlkLCBwaHlzX2FkZHJfdCBhZGRyLCB1MzIgb2JqX2lkKTsKIAogI2lmZGVmIENPTkZJR19QQ0lFX1RQSAomIzQzO2ludCBtbHg1X3N0X2FsbG9jX2luZGV4X2J5X3RhZyhzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCB1MTYgdGFnLAomIzQzOwkJCSAgICAgICB1MTYgKnN0X2luZGV4KTsKJiM0MztpbnQgbWx4NV9zdF9nZXRfaW5kZXgoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgdTE2IHN0X2luZGV4KTsKIGludCBtbHg1X3N0X2FsbG9jX2luZGV4KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIGVudW0gdHBoX21lbV90eXBlIG1lbV90eXBlLAogCQkJdW5zaWduZWQgaW50IGNwdV91aWQsIHUxNiAqc3RfaW5kZXgpOwogaW50IG1seDVfc3RfZGVhbGxvY19pbmRleChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCB1MTYgc3RfaW5kZXgpOwogI2Vsc2UKJiM0MztzdGF0aWMgaW5saW5lIGludCBtbHg1X3N0X2FsbG9jX2luZGV4X2J5X3RhZyhzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LAomIzQzOwkJCQkJICAgICB1MTYgdGFnLCB1MTYgKnN0X2luZGV4KQomIzQzO3sKJiM0MzsJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGludCBtbHg1X3N0X2dldF9pbmRleChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCB1MTYgc3RfaW5kZXgpCiYjNDM7ewomIzQzOwlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7fQogc3RhdGljIGlubGluZSBpbnQgbWx4NV9zdF9hbGxvY19pbmRleChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LAogCQkJCSAgICAgIGVudW0gdHBoX21lbV90eXBlIG1lbV90eXBlLAogCQkJCSAgICAgIHVuc2lnbmVkIGludCBjcHVfdWlkLCB1MTYgKnN0X2luZGV4KQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wY2ktdHBoLmggYi9pbmNsdWRlL2xpbnV4L3BjaS10cGguaAppbmRleCBiZTY4Y2QxN2YyZjgzMy4uNzc0M2FmNmZlNDMyNmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGNpLXRwaC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGNpLXRwaC5oCkBAIC05LDYgJiM0Mzs5LDggQEAKICNpZm5kZWYgTElOVVhfUENJX1RQSF9ICiAjZGVmaW5lIExJTlVYX1BDSV9UUEhfSAogCiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3BjaV9yZWdzLmgmZ3Q7CiYjNDM7CiAvKgogICogQWNjb3JkaW5nIHRvIHRoZSBFQ04gZm9yIFBDSSBGaXJtd2FyZSBTcGVjLCBTdGVlcmluZyBUYWcgY2FuIGJlIGRpZmZlcmVudAogICogZGVwZW5kaW5nIG9uIHRoZSBtZW1vcnkgdHlwZTogVm9sYXRpbGUgTWVtb3J5IG9yIFBlcnNpc3RlbnQgTWVtb3J5LiBXaGVuIGEKQEAgLTMwLDYgJiM0MzszMiw4IEBAIHZvaWQgcGNpZV9kaXNhYmxlX3RwaChzdHJ1Y3QgcGNpX2RldiAqcGRldik7CiBpbnQgcGNpZV9lbmFibGVfdHBoKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbW9kZSk7CiB1MTYgcGNpZV90cGhfZ2V0X3N0X3RhYmxlX3NpemUoc3RydWN0IHBjaV9kZXYgKnBkZXYpOwogdTMyIHBjaWVfdHBoX2dldF9zdF90YWJsZV9sb2Moc3RydWN0IHBjaV9kZXYgKnBkZXYpOwomIzQzO3U4IHBjaWVfdHBoX2VuYWJsZWRfcmVxX3R5cGUoc3RydWN0IHBjaV9kZXYgKnBkZXYpOwomIzQzO3U4IHBjaWVfdHBoX2NvbXBsZXRlcl90eXBlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTsKICNlbHNlCiBzdGF0aWMgaW5saW5lIGludCBwY2llX3RwaF9zZXRfc3RfZW50cnkoc3RydWN0IHBjaV9kZXYgKnBkZXYsCiAJCQkJCXVuc2lnbmVkIGludCBpbmRleCwgdTE2IHRhZykKQEAgLTQxLDYgJiM0Mzs0NSwxMCBAQCBzdGF0aWMgaW5saW5lIGludCBwY2llX3RwaF9nZXRfY3B1X3N0KHN0cnVjdCBwY2lfZGV2ICpkZXYsCiBzdGF0aWMgaW5saW5lIHZvaWQgcGNpZV9kaXNhYmxlX3RwaChzdHJ1Y3QgcGNpX2RldiAqcGRldikgeyB9CiBzdGF0aWMgaW5saW5lIGludCBwY2llX2VuYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBtb2RlKQogeyByZXR1cm4gLUVJTlZBTDsgfQomIzQzO3N0YXRpYyBpbmxpbmUgdTggcGNpZV90cGhfZW5hYmxlZF9yZXFfdHlwZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKJiM0Mzt7IHJldHVybiBQQ0lfVFBIX1JFUV9ESVNBQkxFOyB9CiYjNDM7c3RhdGljIGlubGluZSB1OCBwY2llX3RwaF9jb21wbGV0ZXJfdHlwZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKJiM0Mzt7IHJldHVybiBQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfTk9ORTsgfQogI2VuZGlmCiAKICNlbmRpZiAvKiBMSU5VWF9QQ0lfVFBIX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC92ZmlvLmggYi9pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oCmluZGV4IDVkZTYxOGEzYTVlZWVlLi4yZDMwYmE0M2UyY2ZmNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oCkBAIC0xNTM0LDYgJiM0MzsxNTM0LDQzIEBAIHN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX2RtYV9idWYgewogICovCiAjZGVmaW5lIFZGSU9fREVWSUNFX0ZFQVRVUkVfTUlHX1BSRUNPUFlfSU5GT3YyICAxMgogCiYjNDM7LyoqCiYjNDM7ICogVXBvbiBWRklPX0RFVklDRV9GRUFUVVJFX1NFVCBhc3NvY2lhdGUgVFBIIChUTFAgUHJvY2Vzc2luZyBIaW50cykgbWV0YWRhdGEKJiM0MzsgKiB3aXRoIGEgdmZpby1leHBvcnRlZCBkbWEtYnVmLiBUaGUgZG1hLWJ1ZiBtdXN0IGhhdmUgYmVlbiBjcmVhdGVkIGJ5CiYjNDM7ICogVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGIG9uIHRoaXMgZGV2aWNlLCBhbmQgdGhlIGRldmljZSBtdXN0IHJlcG9ydAomIzQzOyAqIFRQSCBDb21wbGV0ZXIgc3VwcG9ydCBpbiBEZXZpY2UgQ2FwYWJpbGl0aWVzIDIgKGJpdHMgMTM6MTIpOyByZXF1ZXN0cwomIzQzOyAqIGNhcnJ5aW5nIFZGSU9fRE1BX0JVRl9UUEhfU1RfRVhUIGFkZGl0aW9uYWxseSByZXF1aXJlIHRoZSBkZXZpY2UgdG8KJiM0MzsgKiByZXBvcnQgdGhlIEV4dGVuZGVkIFRQSCBDb21wbGV0ZXIgZW5jb2RpbmcuIE90aGVyd2lzZSB0aGUgaW9jdGwKJiM0MzsgKiByZXR1cm5zIC1FT1BOT1RTVVBQLgomIzQzOyAqCiYjNDM7ICogZG1hYnVmX2ZkIGlzIHRoZSBmaWxlIGRlc2NyaXB0b3IgcmV0dXJuZWQgYnkgVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGLgomIzQzOyAqCiYjNDM7ICogOC1iaXQgU1QgKHN0ZWVyaW5nX3RhZykgYW5kIDE2LWJpdCBFeHRlbmRlZCBTVCAoc3RlZXJpbmdfdGFnX2V4dCkgYXJlCiYjNDM7ICogZGlzdGluY3QgbmFtZXNwYWNlcy4gVXNlcnNwYWNlIHN1cHBsaWVzIHdoaWNoZXZlciB2YWx1ZXMgYXJlIHZhbGlkIGFuZCBzZXRzCiYjNDM7ICogdGhlIG1hdGNoaW5nIFZGSU9fRE1BX0JVRl9UUEhfU1QgLyBWRklPX0RNQV9CVUZfVFBIX1NUX0VYVCBiaXRzIGluIEBmbGFnczsKJiM0MzsgKiBhbiBpbXBvcnRlciByZXF1ZXN0cyBvbmUgbmFtZXNwYWNlIGFuZCByZWNlaXZlcyB0aGUgbWF0Y2hpbmcgdmFsdWUuCiYjNDM7ICoKJiM0MzsgKiBAZmxhZ3MgPT0gMCBtYXJrcyBhbnkgcHJldmlvdXNseSBwdWJsaXNoZWQgU1QgLyBFeHRlbmRlZC1TVCBhcyBpbnZhbGlkCiYjNDM7ICogZm9yIGZ1dHVyZSBQQ0kgVFBIIHF1ZXJpZXMgb24gdGhpcyBkbWEtYnVmLgomIzQzOyAqCiYjNDM7ICogcGggaXMgdGhlIDItYml0IFRMUCBQcm9jZXNzaW5nIEhpbnQgYW5kIG11c3QgYmUgaW4gdGhlIHJhbmdlIFswLCAzXS4KJiM0MzsgKgomIzQzOyAqIFVzZXJzcGFjZSBtdXN0IHB1Ymxpc2ggVFBIIGJlZm9yZSBoYW5kaW5nIHRoZSBkbWEtYnVmIGZkIHRvIGFuIGltcG9ydGVyLgomIzQzOyAqIENhbGxpbmcgU0VUIGFnYWluIHJlcGxhY2VzIHRoZSBwdWJsaXNoZWQgdmFsdWVzLgomIzQzOyAqLwomIzQzOyNkZWZpbmUgVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGX1RQSCAxMwomIzQzOwomIzQzOyNkZWZpbmUgVkZJT19ETUFfQlVGX1RQSF9TVAkJKDEgJmx0OyZsdDsgMCkKJiM0MzsjZGVmaW5lIFZGSU9fRE1BX0JVRl9UUEhfU1RfRVhUCQkoMSAmbHQ7Jmx0OyAxKQomIzQzOwomIzQzO3N0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX2RtYV9idWZfdHBoIHsKJiM0MzsJX19zMzIJZG1hYnVmX2ZkOwomIzQzOwlfX3UzMglmbGFnczsKJiM0MzsJX191MTYJc3RlZXJpbmdfdGFnX2V4dDsKJiM0MzsJX191OAlzdGVlcmluZ190YWc7CiYjNDM7CV9fdTgJcGg7CiYjNDM7fTsKJiM0MzsKIC8qIC0tLS0tLS0tIEFQSSBmb3IgVHlwZTEgVkZJTyBJT01NVSAtLS0tLS0tLSAqLwogCiAvKioKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMTk6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIxMzAKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA2MDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBUUEggTWV0YWRhdGEgUGF0Y2ggU2VyaWVzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHNlcmllcywgYW5kIGl0JiMzOTtzIGFkZGluZyBUUEggKFRMUCBQcm9jZXNzaW5nIEhpbnRzKSBtZXRhZGF0YSBzdXBwb3J0IHRvIERNQS1CVUYsIHNwZWNpZmljYWxseSBmb3IgVkZJTyBhbmQgdGhlIE1lbGxhbm94IENvbm5lY3RYIEluZmluaWJhbmQgZHJpdmVycy4gVGhhdCBtZWFuczoKCiogICBBIG5ldyBmdW5jdGlvbiwgYGRtYV9idWZfZ2V0X3BjaV90cGhgLCBpcyBiZWluZyBhZGRlZCB0byB0aGUgY29yZSBETUEtQlVGIGNvZGUuCiogICBWRklPIFBDSSBpcyBnZXR0aW5nIGEgbmV3IGlvY3RsIGZlYXR1cmUsIGBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUZfVFBIYC4KKiAgIEEgYGdldF9wY2lfdHBoYCBjYWxsYmFjayBpcyBhZGRlZCB0byBgc3RydWN0IGRtYV9idWZfb3BzYC4KKiAgIEEgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24sIGB2ZmlvX3BjaV9kbWFfYnVmX2dldF9wY2lfdHBoYCwgaXMgYmVpbmcgYWRkZWQgdG8gdGhlIFZGSU8gUENJIGNvZGUuCiogICBBbmQgZmluYWxseSwgdGhlIG1seDUgSW5maW5pYmFuZCBkcml2ZXIgaXMgYmVpbmcgbW9kaWZpZWQgdG8gdXNlIGBkbWFfYnVmX2dldF9wY2lfdHBoYCB3aGVuIHJlZ2lzdGVyaW5nIGEgdXNlciBNUiB3aXRoIGEgZG1hYnVmLgoKVGhpcyBpcyBhIHByZXR0eSBmdW5jdGlvbmFsIGNoYW5nZS4gSXQmIzM5O3MgYWRkaW5nIGFuIGlvY3RsIGZlYXR1cmUgaW4gVkZJTyBhbmQgdGhlbiBtb2RpZnlpbmcgYSBkcml2ZXIgdG8gdXNlIHRoZSBtZXRhZGF0YS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHJlYWNoYWJsZSB0aGlzIGlzIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuCgpWRklPIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlLCBhbmQgaXQmIzM5O3Mga25vd24gdG8gYmUgZnV6emFibGUuIFRoZSBtbHg1IEluZmluaWJhbmQgZHJpdmVyIG1pZ2h0IG5lZWQgc3BlY2lmaWMgaGFyZHdhcmUsIGJ1dCBJIGNhbiBwcm9iYWJseSBtb2NrIHRoYXQuIEhvd2V2ZXIsIGV2ZW4gaWYgSSBjYW4mIzM5O3QgbW9jayBtbHg1LCBWRklPIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlLCBzbyBJIHNob3VsZCBmb2N1cyBvbiB0aGF0LgoKV2FpdCwgc3l6a2FsbGVyICpjYW4qIGZ1enogVkZJTy4gVGhhdCYjMzk7cyBnb29kLgoKU28sIGxldCYjMzk7cyBsb29rIGF0IGBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUZfVFBIYCBtb3JlIGNsb3NlbHkuIEkgY2FuIHNlZSB0aGF0IGB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl90cGhgIGlzIHRoZSBoYW5kbGVyLCBhbmQgaXQmIzM5O3MgY2FsbGVkIGZyb20gYHZmaW9fcGNpX2NvcmVfaW9jdGxfZmVhdHVyZWAuIEl0IGxvb2tzIGxpa2UgaXQgcmVxdWlyZXMgYHBjaWVfdHBoX2NvbXBsZXRlcl90eXBlKHZkZXYtJmd0O3BkZXYpYCB0byAqbm90KiBiZSBgUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX05PTkVgLiBJIHdvbmRlciBpZiBJIGNhbiBlbXVsYXRlIGEgUENJIGRldmljZSB3aXRoIFRQSCBDb21wbGV0ZXIgc3VwcG9ydD8gRXZlbiBpZiBJIGNhbiYjMzk7dCBnZXQgdGhhdCBmYXIsIHRoZSBpb2N0bCBoYW5kbGVyIGl0c2VsZiBpcyBzdGlsbCByZWFjaGFibGUgdXAgdG8gdGhhdCBjaGVjaywgYW5kIHRoYXQmIzM5O3MgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IGZ1enppbmcuIFBsdXMsIGBkbWFfYnVmX2dldF9wY2lfdHBoYCBpcyBhIGNvcmUgRE1BLUJVRiBmdW5jdGlvbiwgc28gaXQmIzM5O3MgcHJvYmFibHkgcHJldHR5IGltcG9ydGFudC4KCkkgc2hvdWxkIGNoZWNrIHRoZSByZWxldmFudCBWRklPIGNvZGUgaW4gYGRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jYCBhbmQgYGRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmNgLgoKRm9yIHRoZSBidWlsZCBjb25maWcsIEkmIzM5O2xsIG5lZWQgYENPTkZJR19WRklPX1BDSWAsIG9mIGNvdXJzZSwgYW5kIGBDT05GSUdfUENJRV9UUEhgLiBgQ09ORklHX01MWDVfSU5GSU5JQkFORGAgbWlnaHQgYmUgbmVlZGVkIGZvciB0aGUgbWx4NSBwYXRoLCBidXQgSSBjYW4gcHJvYmFibHkgZW5hYmxlIGl0IGFueXdheSwgZXZlbiBpZiBzeXprYWxsZXIgZG9lc24mIzM5O3QgaGF2ZSBhY3R1YWwgbWx4NSBoYXJkd2FyZS4gSSBjYW4gcHJvYmFibHkgZ3JlcCBmb3IgYFBDSUVfVFBIYCB0byBzZWUgd2hlcmUgaXQgY29tZXMgdXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMTk6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFBDSUVfVFBIJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvcGNpL0tjb25maWc9MTg1PWNvbmZpZyBQQ0lfUEFTSURcbi0tXG5kcml2ZXJzL3BjaS9LY29uZmlnLTE5Ni1cbmRyaXZlcnMvcGNpL0tjb25maWc6MTk3OmNvbmZpZyBQQ0lFX1RQSFxuZHJpdmVycy9wY2kvS2NvbmZpZy0xOTgtXHRib29sIFwmIzM0O1RMUCBQcm9jZXNzaW5nIEhpbnRzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMTk6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM1MzcKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgSSYjMzk7bSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6CgoqKkludmVzdGlnYXRpbmcgYFZGSU9fUENJYCoqCgpSaWdodCwgbGV0JiMzOTtzIGRpdmUgc3RyYWlnaHQgaW4uIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCBgVkZJT19QQ0lgLiBJIHdhbnQgdG8gaW1tZWRpYXRlbHkgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zLCBwb3RlbnRpYWxseSBpZGVudGlmeSBzb21lIHNwZWNpZmljIGFyZWFzIHRvIHRyb3VibGVzaG9vdCwgb3IgdW5kZXJzdGFuZCBob3cgYSBjZXJ0YWluIGNvbXBvbmVudCBpbiB0aGUgc3lzdGVtIGlzIGFmZmVjdGVkLiBXaXRoIG15IGxldmVsIG9mIGV4cGVydGlzZSwgdGhpcyBpcyBtb3JlIHRoYW4ganVzdCBhIHBhc3NpbmcgZ2xhbmNlIGF0IHRoZSBzdXJmYWNlLiBJJiMzOTttIGxpa2VseSBnZWFyaW5nIHVwIHRvIGV4YW1pbmUgY29uZmlndXJhdGlvbiwgcG90ZW50aWFsIHJlc291cmNlIGNvbmZsaWN0cywgb3IgZXZlbiBkZWx2aW5nIGludG8gdGhlIGludGVyYWN0aW9ucyBiZXR3ZWVuIHRoZSBob3N0IGFuZCB0aGUgdmlydHVhbCBtYWNoaW5lcy4gSXQgbWlnaHQgYWxzbyBiZSBhIHNwZWNpZmljIHRyb3VibGVzaG9vdGluZyBzdGVwIEkmIzM5O20gdGFraW5nIGluIGFuIGluLWRlcHRoIGludmVzdGlnYXRpb24uIEkgYW0gY29uc2lkZXJpbmcgdGhlIGludHJpY2FjaWVzIG9mIGRpcmVjdCBkZXZpY2UgYXNzaWdubWVudCwgSU9NTVUgZ3JvdXBzLCBhbmQgdGhlIG92ZXJhbGwgc2VjdXJpdHkgaW1wbGljYXRpb25zLiBNeSBjdXJyZW50IGxpbmUgb2YgdGhvdWdodCBpcyB0aGF0IEkgd2FudCBhIGdyYW51bGFyIHVuZGVyc3RhbmRpbmcgb2YgYFZGSU9fUENJYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAxOToxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVkZJT19QQ0kmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnPTI9bWVudSBcJiMzNDtWRklPIHN1cHBvcnQgZm9yIFBDSSBkZXZpY2VzXCYjMzQ7XG4tLVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTQtXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc6NTpjb25maWcgVkZJT19QQ0lfQ09SRVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTYtXHR0cmlzdGF0ZVxuLS1cbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy05LVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnOjEwOmNvbmZpZyBWRklPX1BDSV9JTlRYXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctMTEtXHRkZWZfYm9vbCB5IGlmICFTMzkwXG4tLVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTEzLVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnOjE0OmNvbmZpZyBWRklPX1BDSVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTE1LVx0dHJpc3RhdGUgXCYjMzQ7R2VuZXJpYyBWRklPIHN1cHBvcnQgZm9yIGFueSBQQ0kgZGV2aWNlXCYjMzQ7XG4tLVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnPTIzPWlmIFZGSU9fUENJXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc6MjQ6Y29uZmlnIFZGSU9fUENJX1ZHQVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTI1LVx0Ym9vbCBcJiMzNDtHZW5lcmljIFZGSU8gUENJIHN1cHBvcnQgZm9yIFZHQSBkZXZpY2VzXCYjMzQ7XG4tLVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTMzLVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnOjM0OmNvbmZpZyBWRklPX1BDSV9JR0RcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy0zNS1cdGJvb2wgXCYjMzQ7R2VuZXJpYyBWRklPIFBDSSBleHRlbnNpb25zIGZvciBJbnRlbCBncmFwaGljcyAoR1ZULWQpXCYjMzQ7XG4tLVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnPTQ1PWVuZGlmXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctNDYtXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc6NDc6Y29uZmlnIFZGSU9fUENJX1pERVZfS1ZNXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctNDgtXHRib29sIFwmIzM0O1ZGSU8gUENJIGV4dGVuc2lvbnMgZm9yIHMzOTB4IEtWTSBwYXNzdGhyb3VnaFwmIzM0O1xuLS1cbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy01Ny1cbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZzo1ODpjb25maWcgVkZJT19QQ0lfRE1BQlVGXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctNTktXHRkZWZfYm9vbCB5IGlmIFZGSU9fUENJX0NPUkUgXHUwMDI2XHUwMDI2IFBDSV9QMlBETUEgXHUwMDI2XHUwMDI2IERNQV9TSEFSRURfQlVGRkVSXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMTk6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQyOTcKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiA2NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipEaXNzZWN0aW5nIHRoZSBWRklPIExhbmRzY2FwZSoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBWRklPIHNldHVwLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdHJ5aW5nIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgZGlmZmVyZW50IGNvbXBvbmVudHMgaW50ZXJyZWxhdGUuIE15IGJyYWluJiMzOTtzIGxhdGNoaW5nIG9udG8gYFZGSU9fUENJYCwgd2hpY2ggSSBrbm93IGlzIGZvdW5kYXRpb25hbCwgYW5kIHRoZW4gSSYjMzk7bSBtZW50YWxseSBwYXJzaW5nIHRoZSBjb25kaXRpb25hbCBkZXBlbmRlbmNpZXMuIGBQQ0lFX1RQSGAgaXMganVtcGluZyBvdXQgYXMgd2VsbCAtIEkgbmVlZCB0byByZWNhbGwgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBhc3BlY3RzIG9mIHRoZSBETUEgaGFuZGxpbmcgaXQgcHJvdmlkZXMgdGhhdCBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIGZvciBteSB1c2UgY2FzZS4KClRoZW4sIHRoZXJlJiMzOTtzIGBWRklPX1BDSV9ETUFCVUZgLiBBaCB5ZXMsIHRoZSBETUEgYnVmZmVyIHN1cHBvcnQuIEkmIzM5O20gcmVtaW5kaW5nIG15c2VsZiB0aGF0IHRoaXMgb25lIGlzIGEgYml0IG1vcmUgaW50cmljYXRlLCBiZWluZyBhIGBkZWZfYm9vbCB5YCBpZiBgVkZJT19QQ0lfQ09SRWAsIGBQQ0lfUDJQRE1BYCBhbmQgYERNQV9TSEFSRURfQlVGRkVSYCBhcmUgYWxzbyBlbmFibGVkLiBUaGUgZGVwZW5kZW5jeSBjaGFpbiBpcyBpbXBvcnRhbnQsIEkgbmVlZCB0byBtYWtlIHN1cmUgYWxsIG9mIHRob3NlIGFyZSBhZGRyZXNzZWQuCgpOb3csIG15IG1pbmQgc2hpZnRzIGdlYXJzIHNsaWdodGx5LiBMZXQmIzM5O3Mgc2VlLi4uIEkgc2hvdWxkIGNoZWNrIGluIG9uIGhvdyBhbGwgb2YgdGhpcyBpbnRlcmFjdHMgd2l0aCBgTUxYNV9JTkZJTklCQU5EYC4gSSYjMzk7bSBnb2luZyB0byBoYXZlIHRvIG1ha2Ugc3VyZSB0aGF0IEkgdW5kZXJzdGFuZCBob3cgYWxsIG9mIHRoZXNlIHBpZWNlcyBmaXQgdG9nZXRoZXIuIFRoZXJlJiMzOTtzIHByb2JhYmx5IGEgcGVyZm9ybWFuY2UgYW5nbGUgaW52b2x2ZWQsIGxldCYjMzk7cyBleHBsb3JlIHRoYXQgYXMgd2VsbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAxOToxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTUxYNV9JTkZJTklCQU5EJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg1L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg1L0tjb25maWc6Mjpjb25maWcgTUxYNV9JTkZJTklCQU5EXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NS9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtNZWxsYW5veCA1dGggZ2VuZXJhdGlvbiBuZXR3b3JrIGFkYXB0ZXJzIChDb25uZWN0WCBzZXJpZXMpIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAxOToxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDc3OQoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDQyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFZGSU8gRE1BLUJVRiBUUEggSW1wbGVtZW50YXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGNvcmUgb2YgdGhlc2UgY2hhbmdlcyBzZWVtcyB0byByZXZvbHZlIGFyb3VuZCB1dGlsaXppbmcgVkZJTyBpb2N0bHMgdG8gaW50ZXJhY3Qgd2l0aCBzb21lIG5ldyBETUEtQlVGIGZ1bmN0aW9uYWxpdHkg4oCTIHNwZWNpZmljYWxseSwgVGFyZ2V0IFBoeXNpY2FsIEFkZHJlc3MgKFRQSCkgc3VwcG9ydC4gVGhlIGtleSBmdW5jdGlvbnMgdG8ga2VlcCBhbiBleWUgb24gYXJlOiBgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWZfdHBoYCwgYHZmaW9fcGNpX2RtYV9idWZfZ2V0X3BjaV90cGhgLCBhbmQgYGRtYV9idWZfZ2V0X3BjaV90cGhgLgoKRmlyc3QsIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIG5hbWluZyBpcyBjb3JyZWN0LiAgYHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3RwaGAg4oCTIHllcywgdGhhdCYjMzk7cyB3aGF0JiMzOTtzIGJlZW4gYWRkZWQgaW4gYGRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmNgLiAgR29vZC4gTm93LCBvbiB0byB0aGUgYGRtYS1idWZgIHNpZGUgb2YgdGhpbmdzLiBDb25maXJtaW5nIGBkbWFfYnVmX2dldF9wY2lfdHBoYCBpcyBwcmVzZW50IGluIGBkcml2ZXJzL2RtYS1idWYvZG1hLWJ1Zi5jYCDigJMgaXQgaXMuICBFeGNlbGxlbnQuCgpOZXh0LCBJIG5lZWQgdG8gbG9vayBhdCB3aGF0JiMzOTtzIGJlZW4gYWRkZWQgZm9yIHRoZSBNZWxsYW5veCBkcml2ZXJzLiAgSSYjMzk7bSBzZWFyY2hpbmcgZm9yIGBtbHg1X3N0X2FsbG9jX2luZGV4X2J5X3RhZ2AgYW5kIGBtbHg1X3N0X2dldF9pbmRleGAgaW4gYGRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9saWIvc3QuY2AuIFl1cCwgdGhleSYjMzk7cmUgdGhlcmUuIFRoYXQgbWFrZXMgc2Vuc2UsIGdpdmVuIHRoZSBwb3RlbnRpYWwgZm9yIFJETUEgd2l0aCB0aGVzZSBkZXZpY2VzLgoKQW5kIGZpbmFsbHksIHRvIG1ha2Ugc3VyZSB0aGUgdW5kZXJseWluZyBQQ0kgbWVjaGFuaXNtcyBhcmUgaW4gcGxhY2UsIEkmIzM5O2xsIGNoZWNrIGBwY2llX3RwaF9lbmFibGVkX3JlcV90eXBlYCBhbmQgYHBjaWVfdHBoX2NvbXBsZXRlcl90eXBlYCBpbiBgZHJpdmVycy9wY2kvdHBoLmNgLiAgWWVwLCB0aGV5IGFyZSBhbHNvIGFkZGVkLiBHb29kLgoKTm93IGZvciBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEkmIzM5O2xsIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSByaWdodCBrZXJuZWwgY29uZmlncyBhcmUgZW5hYmxlZDogYFBDSUVfVFBIYCwgYFZGSU9fUENJYCwgYFBDSV9QMlBETUFgICh3aGljaCBpcyBlc3NlbnRpYWwgZm9yIGBWRklPX1BDSV9ETUFCVUZgKSwgYERNQV9TSEFSRURfQlVGRkVSYCAoYWxzbyBjcnVjaWFsIGZvciBgVkZJT19QQ0lfRE1BQlVGYCksIGFuZCBgTUxYNV9JTkZJTklCQU5EYCAod2hpbGUgb3B0aW9uYWwsIGl0JiMzOTtzIGRlZmluaXRlbHkgYSBnb29kIGlkZWEgdG8gaGF2ZSB0aGF0IGVuYWJsZWQgZm9yIG1heGltdW0gZmxleGliaWxpdHkpLgoKRmluYWxseSwgSSBzaG91bGQgdmVyaWZ5IHRoZSBgVkZJT19QQ0lfRE1BQlVGYCBkZXBlbmRlbmNpZXMgZGlyZWN0bHkgdG8gYmUgMTAwJSBzdXJlIEkmIzM5O3ZlIGdvdCBhIGNvbXByZWhlbnNpdmUgdW5kZXJzdGFuZGluZyBvZiB3aGF0JiMzOTtzIGdvaW5nIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAxOToxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVkZJT19QQ0lfRE1BQlVGJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmZpby9wY2kvS2NvbmZpZz00Nz1jb25maWcgVkZJT19QQ0lfWkRFVl9LVk1cbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctNTctXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc6NTg6Y29uZmlnIFZGSU9fUENJX0RNQUJVRlxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTU5LVx0ZGVmX2Jvb2wgeSBpZiBWRklPX1BDSV9DT1JFIFx1MDAyNlx1MDAyNiBQQ0lfUDJQRE1BIFx1MDAyNlx1MDAyNiBETUFfU0hBUkVEX0JVRkZFUlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAxOToxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTkwMQoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDc1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgcmVmbGVjdGluZyBteSBpbW1lZGlhdGUgdW5kZXJzdGFuZGluZzoKCioqS2VybmVsIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzIEFzc2Vzc21lbnQqKgoKUmlnaHQsIHNvIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlc2UgdHdvIGNyaXRpY2FsIGNvbXBvbmVudHM6IGBQQ0lfUDJQRE1BYCBhbmQgYERNQV9TSEFSRURfQlVGRkVSYC4gVGhleSBzZWVtIGVzc2VudGlhbCBmb3IgdGhpcyBzcGVjaWZpYyBzZXR1cC4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGVpciBkZXBlbmRlbmNpZXMsIGFuZCBob3cgdGhleSByZWxhdGUgdG8gdGhlIG92ZXJhbGwgZHJpdmVyIGNvbmZpZ3VyYXRpb24uCgpGaXJzdCwgbGV0JiMzOTtzIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZzogSSYjMzk7bSBjaGVja2luZyBpZiBgVkZJT19QQ0lfQ09SRWAgaXMgaW5kZWVkIHNldCBhcyBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGluIHRoZSBrZXJuZWwuIEFoLCB5ZXMsIGl0JiMzOTtzIGNvcnJlY3RseSBzZWxlY3RlZCB0aHJvdWdoIGBWRklPX1BDSWAuIEdvb2QsIHRoYXQgbWFrZXMgc2Vuc2UuIFRoYXQmIzM5O3MgYSBjcml0aWNhbCBkZXBlbmRlbmN5IGZvciBhIGdvb2QgZmV3IHNldHVwcy4KCk5leHQsIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgdGhlcmUmIzM5O3MgYW55IGxpbmsgYmV0d2VlbiB0aGUgTWVsbGFub3ggZHJpdmVyIGFuZCB0aGVzZSBvdGhlciBjb21wb25lbnRzLiBJdCBsb29rcyBsaWtlIEkgbmVlZCB0byBxdWlja2x5IGVzdGFibGlzaCBpZiBgTUxYNV9DT1JFYCBpcyByZXF1aXJlZCBmb3IgYE1MWDVfSU5GSU5JQkFORGAuIFRoYXQgcmVsYXRpb25zaGlwIGlzIHByb2JhYmx5IHZlcnkgaW1wb3J0YW50IGZvciBwZXJmb3JtYW5jZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMTk6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1MWDVfQ09SRSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvS2NvbmZpZy01LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL0tjb25maWc6Njpjb25maWcgTUxYNV9DT1JFXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvS2NvbmZpZy03LVx0dHJpc3RhdGUgXCYjMzQ7TWVsbGFub3ggNXRoIGdlbmVyYXRpb24gbmV0d29yayBhZGFwdGVycyAoQ29ubmVjdFggc2VyaWVzKSBjb3JlIGRyaXZlclwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9LY29uZmlnPTE5PWNvbmZpZyBNTFg1X0ZQR0Fcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvS2NvbmZpZy0yOC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9LY29uZmlnOjI5OmNvbmZpZyBNTFg1X0NPUkVfRU5cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9LY29uZmlnLTMwLVx0Ym9vbCBcJiMzNDtNZWxsYW5veCA1dGggZ2VuZXJhdGlvbiBuZXR3b3JrIGFkYXB0ZXJzIChDb25uZWN0WCBzZXJpZXMpIEV0aGVybmV0IHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvS2NvbmZpZz0xMTI9Y29uZmlnIE1MWDVfVENfU0FNUExFXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL0tjb25maWctMTI0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL0tjb25maWc6MTI1OmNvbmZpZyBNTFg1X0NPUkVfRU5fRENCXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvS2NvbmZpZy0xMjYtXHRib29sIFwmIzM0O0RhdGEgQ2VudGVyIEJyaWRnaW5nIChEQ0IpIFN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvS2NvbmZpZy0xMzYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvS2NvbmZpZzoxMzc6Y29uZmlnIE1MWDVfQ09SRV9JUE9JQlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL0tjb25maWctMTM4LVx0Ym9vbCBcJiMzNDtNZWxsYW5veCA1dGggZ2VuZXJhdGlvbiBuZXR3b3JrIGFkYXB0ZXJzIChjb25uZWN0WCBzZXJpZXMpIElQb0lCIG9mZmxvYWRzIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMTk6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY2OTAKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyODkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ3VycmVudCBBbmFseXNpczogVFBILVJlbGF0ZWQgUENJL1ZGSU8gQ2FwYWJpbGl0aWVzKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gc29tZSBjcnVjaWFsIFBDSS9WRklPIGNvZGUsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIFRyYW5zYWN0aW9uIFByb2Nlc3NpbmcgSGludHMgKFRQSCkuIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIG1hcCBvdXQgdGhlIGtleSBjb21wb25lbnRzIGludm9sdmVkIGluIHRoaXMgZnVuY3Rpb25hbGl0eS4gSSYjMzk7bSBzdGFydGluZyBieSBsaXN0aW5nIG91dCB0aGVzZSBrZXkgZWxlbWVudHM6CgoqICAgYFBDSUVfVFBIYAoqICAgYFZGSU9fUENJYAoqICAgYFBDSV9QMlBETUFgCiogICBgTUxYNV9JTkZJTklCQU5EYAoKSSBuZWVkIHRvIGZvY3VzIG9uIHRoZXNlIHN5bWJvbHM6CgoqICAgYHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3RwaGAKKiAgIGB2ZmlvX3BjaV9kbWFfYnVmX2dldF9wY2lfdHBoYAoqICAgYGRtYV9idWZfZ2V0X3BjaV90cGhgCiogICBgcGNpZV90cGhfZW5hYmxlZF9yZXFfdHlwZWAKKiAgIGBwY2llX3RwaF9jb21wbGV0ZXJfdHlwZWAKCldhaXQgYSBzZWNvbmQuLi5JJiMzOTt2ZSBqdXN0IHNwb3R0ZWQgc29tZXRoaW5nIGludGVyZXN0aW5nLiBXaGlsZSBsb29raW5nIGF0IGNvZGUsIGBtbHg1X3N0X2FsbG9jX2luZGV4X2J5X3RhZ2AgYW5kIGBtbHg1X3N0X2dldF9pbmRleGAgYXJlIGluIHRoZSBgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi9zdC5jYCBmaWxlLiBUaGlzIGlzIGNydWNpYWw7IEkgbmVlZCB0byBhZGQgdGhlbSB0byBteSAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7IGxpc3QgYXMgdGhleSBhcmUgcmVsYXRlZCB0byB0aGUgTWVsbGFub3ggZHJpdmVycyB3aGljaCB3aWxsIGJlIGVzc2VudGlhbCB0byBjb25zaWRlciB3aGVuIHVuZGVyc3RhbmRpbmcgZnVsbCBUUEggYmVoYXZpb3VyLiBTbywgSSBuZWVkIHRvIGluY2x1ZGUgdGhlc2UgZnVuY3Rpb25zOgoKKiAgIGBtbHg1X3N0X2FsbG9jX2luZGV4X2J5X3RhZ2AKKiAgIGBtbHg1X3N0X2dldF9pbmRleGAKCk5vdywgbGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHNvbWV0aGluZyBxdWlja2x5IHRvIGVuc3VyZSBJIGhhdmUgdGhlIHJpZ2h0IG5hbWUuLi4geWVwLCBgVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGX1RQSGAgaXMgdGhlIGNvcnJlY3QgbWFjcm8uIFNhdGlzZmllZCB3aXRoIHRoYXQuCgpMYXN0bHksIGxldCBtZSBydW4gYSBxdWljayBjaGVjayBvbiB0aGUgaW1wbGljYXRpb25zIG9mIGB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl90cGhgLiBUaGlzIGlzIGxpa2VseSB3aGVyZSB0aGUgY29yZSBWRklPIFRQSCBpbXBsZW1lbnRhdGlvbiBzdGFydHMuIFVuZGVyc3RhbmRpbmcgaXQgd2lsbCBiZSBrZXkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDE5OjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3RwaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYz0xNTU3PWludCB2ZmlvX3BjaV9jb3JlX2lvY3RsX2ZlYXR1cmUoc3RydWN0IHZmaW9fZGV2aWNlICpkZXZpY2UsIHUzMiBmbGFncyxcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy0xNTc1LVx0Y2FzZSBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUZfVFBIOlxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmM6MTU3NjpcdFx0cmV0dXJuIHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3RwaCh2ZGV2LCBmbGFncywgYXJnLFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMtMTU3Ny1cdFx0XHRcdFx0XHRcdCBhcmdzeik7XG4tLVxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYz0yNTA9aW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTMyIGZsYWdzLFxuLS1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmMtMzY0LVxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYzozNjU6aW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3RwaChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jLTM2Ni1cdFx0XHRcdCAgICAgIHUzMiBmbGFncyxcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX3ByaXYuaD0xMTg9aW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTMyIGZsYWdzLFxuLS1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfcHJpdi5oLTEyMC1cdFx0XHRcdCAgc2l6ZV90IGFyZ3N6KTtcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfcHJpdi5oOjEyMTppbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWZfdHBoKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldixcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfcHJpdi5oLTEyMi1cdFx0XHRcdCAgICAgIHUzMiBmbGFncyxcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX3ByaXYuaD0xMzY9c3RhdGljIGlubGluZSBpbnRcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfcHJpdi5oOjEzNzp2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl90cGgoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCB1MzIgZmxhZ3MsXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX3ByaXYuaC0xMzgtXHRcdFx0XHQgIHN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX2RtYV9idWZfdHBoIF9fdXNlciAqYXJnLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAxOToxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODE0MwoJCQkJCQkJb3V0cHV0OiAzMDIKCQkJCQkJCXRob3VnaHRzOiAzNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBhZGRpbmcgc29tZSBpbnRlcmVzdGluZyBuZXcgZnVuY3Rpb25hbGl0eSByZWxhdGVkIHRvIERNQS1CVUZzIGFuZCBQQ0llIFRQSCAoVExQIFByb2Nlc3NpbmcgSGludHMpLiBFc3NlbnRpYWxseSwgaXQmIzM5O3MgYWxsb3dpbmcgdXNlcnNwYWNlLCB0aHJvdWdoIFZGSU8gaW9jdGxzLCB0byBzZXQgYW5kIHJldHJpZXZlIFRQSCBtZXRhZGF0YSBhc3NvY2lhdGVkIHdpdGggYSBETUEtQlVGLiBUaGF0JiMzOTtzIGEgcHJldHR5IHNpZ25pZmljYW50IGNoYW5nZSwgZXNwZWNpYWxseSBnaXZlbiB0aGUgaW50ZWdyYXRpb24gd2l0aCBjb3JlIERNQS1CVUYsIFZGSU8sIGFuZCB0aGUgbWx4NSBJbmZpbmliYW5kIGRyaXZlci4KClNwZWNpZmljYWxseSwgaXQgbG9va3MgbGlrZSBhIG5ldyBgaW9jdGxgIGlzIGludHJvZHVjZWQgaW4gVkZJTyB0byBzZXQgVFBIIG1ldGFkYXRhIG9uIGEgRE1BLUJVRi4gQSBjb3JyZXNwb25kaW5nIGBnZXRfcGNpX3RwaGAgb3BlcmF0aW9uIGlzIGFkZGVkIHRvIGBkbWFfYnVmX29wc2AsIGFuZCBpdCBsb29rcyBsaWtlIHRoaXMgaXMgaW1wbGVtZW50ZWQgZm9yIFZGSU8gUENJIERNQS1CVUZzLCB3aGljaCBpcyBzZW5zaWJsZS4gVGhlIG1seDUgSUIgZHJpdmVyIGFsc28gZ2V0cyB1cGRhdGVkIHRvIHF1ZXJ5IGFuZCB1dGlsaXplIHRoaXMgbWV0YWRhdGEsIHdoaWNoIG1ha2VzIGl0IGEgY3JpdGljYWwgcGFydCBvZiB0aGUgbmV3IGZlYXR1cmUuCgpHaXZlbiB0aGF0IGl0JiMzOTtzIHVzZXItYWNjZXNzaWJsZSB2aWEgVkZJTyBpb2N0bHMgYW5kIHRvdWNoZXMgZmFpcmx5IGZ1bmRhbWVudGFsIGtlcm5lbCBzdWJzeXN0ZW1zLCBJIGRlZmluaXRlbHkgdGhpbmsgdGhpcyB3YXJyYW50cyBmdXp6aW5nLiBJJiMzOTtsbCBzZXQgYFdvcnRoRnV6emluZz10cnVlYC4KClRoZSBpbXBvcnRhbnQgYml0cyB0byBrZWVwIGFuIGV5ZSBvbiBhcmUgdGhlIG5ldyBmZWF0dXJlcyBpbnRyb2R1Y2VkLCB0aGUgc3BlY2lmaWMgY2FsbCBwYXRocyBhbmQgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGUgc3lzdGVtcywgZXNwZWNpYWxseSBgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWZfdHBoYCwgYHZmaW9fcGNpX2RtYV9idWZfZ2V0X3BjaV90cGhgLCBgZG1hX2J1Zl9nZXRfcGNpX3RwaGAsIGBwY2llX3RwaF9lbmFibGVkX3JlcV90eXBlYCwgYHBjaWVfdHBoX2NvbXBsZXRlcl90eXBlYCwgYG1seDVfc3RfYWxsb2NfaW5kZXhfYnlfdGFnYCwgYW5kIGBtbHg1X3N0X2dldF9pbmRleGAuIEl0IHdpbGwgYWxzbyBiZSBpbXBvcnRhbnQgdG8gZW5zdXJlIHRoZXJlIGFyZSBubyBzdWJ0bGUgcmFjZSBjb25kaXRpb25zIG9yIG1lbW9yeSBjb3JydXB0aW9uIGlzc3VlcyBhcm91bmQgdGhvc2UgY2hhbmdlcy4gVGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgaW50ZXJlc3RpbmcsIGFuZCBpdCBsb29rcyBsaWtlIGl0IGRlcGVuZHMgb24gYFBDSUVfVFBIYCwgYFZGSU9fUENJYCwgYFBDSV9QMlBETUFgLCBhbmQgYE1MWDVfSU5GSU5JQkFORGAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDE5OjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtQQ0lFX1RQSCYjMzQ7LAogICAgJiMzNDtWRklPX1BDSSYjMzQ7LAogICAgJiMzNDtQQ0lfUDJQRE1BJiMzNDssCiAgICAmIzM0O01MWDVfSU5GSU5JQkFORCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3ZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3RwaCYjMzQ7LAogICAgJiMzNDt2ZmlvX3BjaV9kbWFfYnVmX2dldF9wY2lfdHBoJiMzNDssCiAgICAmIzM0O2RtYV9idWZfZ2V0X3BjaV90cGgmIzM0OywKICAgICYjMzQ7cGNpZV90cGhfZW5hYmxlZF9yZXFfdHlwZSYjMzQ7LAogICAgJiMzNDtwY2llX3RwaF9jb21wbGV0ZXJfdHlwZSYjMzQ7LAogICAgJiMzNDttbHg1X3N0X2FsbG9jX2luZGV4X2J5X3RhZyYjMzQ7LAogICAgJiMzNDttbHg1X3N0X2dldF9pbmRleCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IFZGSU8gaW9jdGwgZmVhdHVyZSBgVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGX1RQSGAgdG8gYXNzb2NpYXRlIFBDSWUgVFBIIChUTFAgUHJvY2Vzc2luZyBIaW50cykgbWV0YWRhdGEgd2l0aCBhIERNQS1CVUYuIEl0IGFsc28gYWRkcyBhIG5ldyBgZ2V0X3BjaV90cGhgIGNhbGxiYWNrIHRvIGBkbWFfYnVmX29wc2AgYW5kIGltcGxlbWVudHMgaXQgZm9yIFZGSU8gUENJIERNQS1CVUZzLiBUaGUgTWVsbGFub3ggbWx4NSBJbmZpbmliYW5kIGRyaXZlciBpcyBtb2RpZmllZCB0byBxdWVyeSBhbmQgdXNlIHRoaXMgbWV0YWRhdGEuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBETUEtQlVGLCBWRklPLCBhbmQgbWx4NSBsb2dpYyB0aGF0IGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BDSUVfVFBIJiMzNDssCiAgICAmIzM0O1ZGSU9fUENJJiMzNDssCiAgICAmIzM0O1BDSV9QMlBETUEmIzM0OywKICAgICYjMzQ7TUxYNV9JTkZJTklCQU5EJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWZfdHBoJiMzNDssCiAgICAmIzM0O3ZmaW9fcGNpX2RtYV9idWZfZ2V0X3BjaV90cGgmIzM0OywKICAgICYjMzQ7ZG1hX2J1Zl9nZXRfcGNpX3RwaCYjMzQ7LAogICAgJiMzNDtwY2llX3RwaF9lbmFibGVkX3JlcV90eXBlJiMzNDssCiAgICAmIzM0O3BjaWVfdHBoX2NvbXBsZXRlcl90eXBlJiMzNDssCiAgICAmIzM0O21seDVfc3RfYWxsb2NfaW5kZXhfYnlfdGFnJiMzNDssCiAgICAmIzM0O21seDVfc3RfZ2V0X2luZGV4JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgVkZJTyBpb2N0bCBmZWF0dXJlIGBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUZfVFBIYCB0byBhc3NvY2lhdGUgUENJZSBUUEggKFRMUCBQcm9jZXNzaW5nIEhpbnRzKSBtZXRhZGF0YSB3aXRoIGEgRE1BLUJVRi4gSXQgYWxzbyBhZGRzIGEgbmV3IGBnZXRfcGNpX3RwaGAgY2FsbGJhY2sgdG8gYGRtYV9idWZfb3BzYCBhbmQgaW1wbGVtZW50cyBpdCBmb3IgVkZJTyBQQ0kgRE1BLUJVRnMuIFRoZSBNZWxsYW5veCBtbHg1IEluZmluaWJhbmQgZHJpdmVyIGlzIG1vZGlmaWVkIHRvIHF1ZXJ5IGFuZCB1c2UgdGhpcyBtZXRhZGF0YS4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIERNQS1CVUYsIFZGSU8sIGFuZCBtbHg1IGxvZ2ljIHRoYXQgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDE5OjEzOjM4LjA2ODUxMjU3OVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2NjcxOTk5NzA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBDSUVfVFBIXCIsXG4gICAgXCJWRklPX1BDSVwiLFxuICAgIFwiUENJX1AyUERNQVwiLFxuICAgIFwiTUxYNV9JTkZJTklCQU5EXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWZfdHBoXCIsXG4gICAgXCJ2ZmlvX3BjaV9kbWFfYnVmX2dldF9wY2lfdHBoXCIsXG4gICAgXCJkbWFfYnVmX2dldF9wY2lfdHBoXCIsXG4gICAgXCJwY2llX3RwaF9lbmFibGVkX3JlcV90eXBlXCIsXG4gICAgXCJwY2llX3RwaF9jb21wbGV0ZXJfdHlwZVwiLFxuICAgIFwibWx4NV9zdF9hbGxvY19pbmRleF9ieV90YWdcIixcbiAgICBcIm1seDVfc3RfZ2V0X2luZGV4XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBWRklPIGlvY3RsIGZlYXR1cmUgYFZGSU9fREVWSUNFX0ZFQVRVUkVfRE1BX0JVRl9UUEhgIHRvIGFzc29jaWF0ZSBQQ0llIFRQSCAoVExQIFByb2Nlc3NpbmcgSGludHMpIG1ldGFkYXRhIHdpdGggYSBETUEtQlVGLiBJdCBhbHNvIGFkZHMgYSBuZXcgYGdldF9wY2lfdHBoYCBjYWxsYmFjayB0byBgZG1hX2J1Zl9vcHNgIGFuZCBpbXBsZW1lbnRzIGl0IGZvciBWRklPIFBDSSBETUEtQlVGcy4gVGhlIE1lbGxhbm94IG1seDUgSW5maW5pYmFuZCBkcml2ZXIgaXMgbW9kaWZpZWQgdG8gcXVlcnkgYW5kIHVzZSB0aGlzIG1ldGFkYXRhLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgRE1BLUJVRiwgVkZJTywgYW5kIG1seDUgbG9naWMgdGhhdCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQxOToxMzozOC4wNjg1MTcwMjhaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4Njg2ODE2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDIxOGIyNjk5NmZmYTRjOThiYzUxMzA4Y2M5YzA3ZWUwMjU4MjVhN2JcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBKdW4gMjIgMTk6MTM6MzYgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEtYnVmL2RtYS1idWYuYyBiL2RyaXZlcnMvZG1hLWJ1Zi9kbWEtYnVmLmNcXG5pbmRleCBkNTA0YzYzNmRjMjk0ZS4uN2E0YzliMGQ1ZGFiNDYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9kbWEtYnVmL2RtYS1idWYuY1xcbisrKyBiL2RyaXZlcnMvZG1hLWJ1Zi9kbWEtYnVmLmNcXG5AQCAtMTE0NCw2ICsxMTQ0LDMxIEBAIHZvaWQgZG1hX2J1Zl91bnBpbihzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2gpXFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9OU19HUEwoZG1hX2J1Zl91bnBpbiwgXFxcIkRNQV9CVUZcXFwiKTtcXG4gXFxuKy8qKlxcbisgKiBkbWFfYnVmX2dldF9wY2lfdHBoIC0gUmV0cmlldmUgUENJZSBUTFAgUHJvY2Vzc2luZyBIaW50IChUUEgpIG1ldGFkYXRhXFxuKyAqIEBkbWFidWY6IERNQSBidWZmZXIgdG8gcXVlcnlcXG4rICogQGV4dGVuZGVkOiBmYWxzZSBmb3IgOC1iaXQgU1QsIHRydWUgZm9yIDE2LWJpdCBFeHRlbmRlZCBTVFxcbisgKiBAc3RlZXJpbmdfdGFnOiByZXR1cm5zIHRoZSByYXcgc3RlZXJpbmcgdGFnIGZvciB0aGUgcmVxdWVzdGVkIG5hbWVzcGFjZVxcbisgKiBAcGg6IHJldHVybnMgdGhlIFRQSCBwcm9jZXNzaW5nIGhpbnRcXG4rICpcXG4rICogV3JhcHBlciBmb3IgdGhlIG9wdGlvbmFsIFxcdTAwMjZkbWFfYnVmX29wcy5nZXRfcGNpX3RwaCBjYWxsYmFjay5cXG4rICpcXG4rICogTXVzdCBiZSBjYWxsZWQgd2l0aCBcXHUwMDI2ZG1hX2J1Zi5yZXN2IGhlbGQuIFJldHVybnMgLUVPUE5PVFNVUFAgaWYgdGhlXFxuKyAqIGV4cG9ydGVyIGRvZXMgbm90IGltcGxlbWVudCB0aGUgY2FsbGJhY2sgb3IgaGFzIG5vIG1ldGFkYXRhIGZvciB0aGVcXG4rICogcmVxdWVzdGVkIG5hbWVzcGFjZS5cXG4rICovXFxuK2ludCBkbWFfYnVmX2dldF9wY2lfdHBoKHN0cnVjdCBkbWFfYnVmICpkbWFidWYsIGJvb2wgZXh0ZW5kZWQsXFxuK1xcdFxcdFxcdHUxNiAqc3RlZXJpbmdfdGFnLCB1OCAqcGgpXFxuK3tcXG4rXFx0ZG1hX3Jlc3ZfYXNzZXJ0X2hlbGQoZG1hYnVmLVxcdTAwM2VyZXN2KTtcXG4rXFxuK1xcdGlmICghZG1hYnVmLVxcdTAwM2VvcHMtXFx1MDAzZWdldF9wY2lfdHBoKVxcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcbitcXHRyZXR1cm4gZG1hYnVmLVxcdTAwM2VvcHMtXFx1MDAzZWdldF9wY2lfdHBoKGRtYWJ1ZiwgZXh0ZW5kZWQsIHN0ZWVyaW5nX3RhZywgcGgpO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfTlNfR1BMKGRtYV9idWZfZ2V0X3BjaV90cGgsIFxcXCJETUFfQlVGXFxcIik7XFxuK1xcbiAvKipcXG4gICogZG1hX2J1Zl9tYXBfYXR0YWNobWVudCAtIFJldHVybnMgdGhlIHNjYXR0ZXJsaXN0IHRhYmxlIG9mIHRoZSBhdHRhY2htZW50O1xcbiAgKiBtYXBwZWQgaW50byBfZGV2aWNlXyBhZGRyZXNzIHNwYWNlLiBJcyBhIHdyYXBwZXIgZm9yIG1hcF9kbWFfYnVmKCkgb2YgdGhlXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg1L21haW4uYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg1L21haW4uY1xcbmluZGV4IDAyODA5MTE0ZmM3OWFmLi5hMmI0OTdmNmIxNmJkYyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NS9tYWluLmNcXG4rKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NS9tYWluLmNcXG5AQCAtNjAsNiArNjAsNyBAQFxcbiBNT0RVTEVfQVVUSE9SKFxcXCJFbGkgQ29oZW4gXFx1MDAzY2VsaUBtZWxsYW5veC5jb21cXHUwMDNlXFxcIik7XFxuIE1PRFVMRV9ERVNDUklQVElPTihcXFwiTWVsbGFub3ggNXRoIGdlbmVyYXRpb24gbmV0d29yayBhZGFwdGVycyAoQ29ubmVjdFggc2VyaWVzKSBJQiBkcml2ZXJcXFwiKTtcXG4gTU9EVUxFX0xJQ0VOU0UoXFxcIkR1YWwgQlNEL0dQTFxcXCIpO1xcbitNT0RVTEVfSU1QT1JUX05TKFxcXCJETUFfQlVGXFxcIik7XFxuIFxcbiBzdHJ1Y3QgbWx4NV9pYl9ldmVudF93b3JrIHtcXG4gXFx0c3RydWN0IHdvcmtfc3RydWN0XFx0d29yaztcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDUvbXIuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg1L21yLmNcXG5pbmRleCBlNmI3NDk1NWQ5NWRjZC4uN2FjZWQzZjU1NDU2MWUgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDUvbXIuY1xcbisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg1L21yLmNcXG5AQCAtMzksNiArMzksNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZGVsYXkuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RtYS1idWYuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RtYS1yZXN2LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9wY2ktdHBoLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NyZG1hL2ZybXJfcG9vbHMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3JkbWEvaWJfdW1lbV9vZHAuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFxcImRtLmhcXFwiXFxuQEAgLTE2Nyw2ICsxNjgsMzIgQEAgc3RhdGljIGludCBnZXRfdW5jaGFuZ2VhYmxlX2FjY2Vzc19mbGFncyhzdHJ1Y3QgbWx4NV9pYl9kZXYgKmRldixcXG4gI2RlZmluZSBNTFg1X0ZSTVJfUE9PTFNfS0VSTkVMX0tFWV9QSF9NQVNLIEdFTk1BU0tfVUxMKDIzLCAxNilcXG4gI2RlZmluZSBNTFg1X0ZSTVJfUE9PTFNfS0VSTkVMX0tFWV9TVF9JTkRFWF9NQVNLIEdFTk1BU0tfVUxMKDE1LCAwKVxcbiBcXG4rc3RhdGljIGludCBtbHg1X2liX2dldF9mcm1yX3N0X2hhbmRsZV9yZWYoc3RydWN0IG1seDVfaWJfZGV2ICpkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdCAgdTE2IHN0X2luZGV4KVxcbit7XFxuK1xcdGlmIChzdF9pbmRleCA9PSBNTFg1X01LQ19QQ0lFX1RQSF9OT19TVEVFUklOR19UQUdfSU5ERVgpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0cmV0dXJuIG1seDVfc3RfZ2V0X2luZGV4KGRldi1cXHUwMDNlbWRldiwgc3RfaW5kZXgpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBtbHg1X2liX3B1dF9zdF9pbmRleF9yZWYoc3RydWN0IG1seDVfaWJfZGV2ICpkZXYsIHUxNiBzdF9pbmRleClcXG4re1xcbitcXHRpZiAoc3RfaW5kZXggPT0gTUxYNV9NS0NfUENJRV9UUEhfTk9fU1RFRVJJTkdfVEFHX0lOREVYKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRtbHg1X3N0X2RlYWxsb2NfaW5kZXgoZGV2LVxcdTAwM2VtZGV2LCBzdF9pbmRleCk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIG1seDVfaWJfcHV0X2ZybXJfc3RfaGFuZGxlX3JlZihzdHJ1Y3QgbWx4NV9pYl9kZXYgKmRldixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgdTY0IGtlcm5lbF92ZW5kb3Jfa2V5KVxcbit7XFxuK1xcdHUxNiBzdF9pbmRleCA9IEZJRUxEX0dFVChNTFg1X0ZSTVJfUE9PTFNfS0VSTkVMX0tFWV9TVF9JTkRFWF9NQVNLLFxcbitcXHRcXHRcXHRcXHQga2VybmVsX3ZlbmRvcl9rZXkpO1xcbitcXG4rXFx0bWx4NV9pYl9wdXRfc3RfaW5kZXhfcmVmKGRldiwgc3RfaW5kZXgpO1xcbit9XFxuK1xcbiBzdGF0aWMgc3RydWN0IG1seDVfaWJfbXIgKlxcbiBfbWx4NV9mcm1yX3Bvb2xfYWxsb2Moc3RydWN0IG1seDVfaWJfZGV2ICpkZXYsIHN0cnVjdCBpYl91bWVtICp1bWVtLFxcbiBcXHRcXHQgICAgICBpbnQgYWNjZXNzX2ZsYWdzLCBpbnQgYWNjZXNzX21vZGUsXFxuQEAgLTIxOCw3ICsyNDUsOSBAQCBzdHJ1Y3QgbWx4NV9pYl9tciAqbWx4NV9tcl9jYWNoZV9hbGxvYyhzdHJ1Y3QgbWx4NV9pYl9kZXYgKmRldixcXG4gXFx0XFx0XFx0XFx0ICAgICAgMCA6XFxuIFxcdFxcdFxcdFxcdCAgICAgIE1MWDVfRlJNUl9QT09MU19LRVlfQUNDRVNTX01PREVfS1NNX01BU0ssXFxuIFxcdFxcdC5udW1fZG1hX2Jsb2NrcyA9IG5kZXNjcyxcXG4tXFx0XFx0Lmtlcm5lbF92ZW5kb3Jfa2V5ID0gMCwgLyogbm8gUEggYW5kIG5vIFNUIGluZGV4ICovXFxuK1xcdFxcdC5rZXJuZWxfdmVuZG9yX2tleSA9XFxuK1xcdFxcdFxcdEZJRUxEX1BSRVAoTUxYNV9GUk1SX1BPT0xTX0tFUk5FTF9LRVlfU1RfSU5ERVhfTUFTSyxcXG4rXFx0XFx0XFx0XFx0ICAgTUxYNV9NS0NfUENJRV9UUEhfTk9fU1RFRVJJTkdfVEFHX0lOREVYKSxcXG4gXFx0fTtcXG4gXFx0c3RydWN0IG1seDVfaWJfbXIgKm1yO1xcbiBcXHRpbnQgcmV0O1xcbkBAIC0zMzUsNiArMzY0LDcgQEAgc3RhdGljIGludCBtbHg1cl9idWlsZF9mcm1yX2tleShzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UsXFxuIFxcdFxcdGdldF91bmNoYW5nZWFibGVfYWNjZXNzX2ZsYWdzKGRldiwgaW4tXFx1MDAzZWFjY2Vzc19mbGFncyk7XFxuIFxcdG91dC1cXHUwMDNldmVuZG9yX2tleSA9IGluLVxcdTAwM2V2ZW5kb3Jfa2V5O1xcbiBcXHRvdXQtXFx1MDAzZW51bV9kbWFfYmxvY2tzID0gaW4tXFx1MDAzZW51bV9kbWFfYmxvY2tzO1xcbitcXHRvdXQtXFx1MDAzZWtlcm5lbF92ZW5kb3Jfa2V5ID0gaW4tXFx1MDAzZWtlcm5lbF92ZW5kb3Jfa2V5O1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5AQCAtNTU3LDYgKzU4Nyw5IEBAIHN0YXRpYyBzdHJ1Y3QgbWx4NV9pYl9tciAqcmVnX2NyZWF0ZShzdHJ1Y3QgaWJfcGQgKnBkLCBzdHJ1Y3QgaWJfdW1lbSAqdW1lbSxcXG4gXFx0bXItXFx1MDAzZWlibXIucGQgPSBwZDtcXG4gXFx0bXItXFx1MDAzZWFjY2Vzc19mbGFncyA9IGFjY2Vzc19mbGFncztcXG4gXFx0bXItXFx1MDAzZXBhZ2Vfc2hpZnQgPSBvcmRlcl9iYXNlXzIocGFnZV9zaXplKTtcXG4rXFx0bXItXFx1MDAzZWlibXIuZnJtci5rZXkua2VybmVsX3ZlbmRvcl9rZXkgPVxcbitcXHRcXHRGSUVMRF9QUkVQKE1MWDVfRlJNUl9QT09MU19LRVJORUxfS0VZX1NUX0lOREVYX01BU0ssIHN0X2luZGV4KSB8XFxuK1xcdFxcdEZJRUxEX1BSRVAoTUxYNV9GUk1SX1BPT0xTX0tFUk5FTF9LRVlfUEhfTUFTSywgcGgpO1xcbiBcXG4gXFx0aW5sZW4gPSBNTFg1X1NUX1NaX0JZVEVTKGNyZWF0ZV9ta2V5X2luKTtcXG4gXFx0aWYgKHBvcHVsYXRlKVxcbkBAIC03NTUsNiArNzg4LDEyIEBAIHN0YXRpYyBzdHJ1Y3QgaWJfbXIgKmNyZWF0ZV9yZWFsX21yKHN0cnVjdCBpYl9wZCAqcGQsIHN0cnVjdCBpYl91bWVtICp1bWVtLFxcbiBcXG4gXFx0eGx0X3dpdGhfdW1yID0gbWx4NXJfdW1yX2Nhbl9sb2FkX3BhcyhkZXYsIHVtZW0tXFx1MDAzZWxlbmd0aCk7XFxuIFxcdGlmICh4bHRfd2l0aF91bXIpIHtcXG4rXFx0XFx0ZXJyID0gbWx4NV9pYl9nZXRfZnJtcl9zdF9oYW5kbGVfcmVmKGRldiwgc3RfaW5kZXgpO1xcbitcXHRcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdFxcdGliX3VtZW1fcmVsZWFzZSh1bWVtKTtcXG4rXFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcXG4rXFx0XFx0fVxcbitcXG4gXFx0XFx0bXIgPSBhbGxvY19jYWNoZWFibGVfbXIocGQsIHVtZW0sIGlvdmEsIGFjY2Vzc19mbGFncyxcXG4gXFx0XFx0XFx0XFx0XFx0TUxYNV9NS0NfQUNDRVNTX01PREVfTVRULFxcbiBcXHRcXHRcXHRcXHRcXHRzdF9pbmRleCwgcGgpO1xcbkBAIC03NjksNiArODA4LDggQEAgc3RhdGljIHN0cnVjdCBpYl9tciAqY3JlYXRlX3JlYWxfbXIoc3RydWN0IGliX3BkICpwZCwgc3RydWN0IGliX3VtZW0gKnVtZW0sXFxuIFxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2ZGV2LVxcdTAwM2VzbG93X3BhdGhfbXV0ZXgpO1xcbiBcXHR9XFxuIFxcdGlmIChJU19FUlIobXIpKSB7XFxuK1xcdFxcdGlmICh4bHRfd2l0aF91bXIpXFxuK1xcdFxcdFxcdG1seDVfaWJfcHV0X3N0X2luZGV4X3JlZihkZXYsIHN0X2luZGV4KTtcXG4gXFx0XFx0aWJfdW1lbV9yZWxlYXNlKHVtZW0pO1xcbiBcXHRcXHRyZXR1cm4gRVJSX0NBU1QobXIpO1xcbiBcXHR9XFxuQEAgLTkwMyw2ICs5NDQsNTIgQEAgc3RhdGljIHN0cnVjdCBkbWFfYnVmX2F0dGFjaF9vcHMgbWx4NV9pYl9kbWFidWZfYXR0YWNoX29wcyA9IHtcXG4gXFx0LmludmFsaWRhdGVfbWFwcGluZ3MgPSBtbHg1X2liX2RtYWJ1Zl9pbnZhbGlkYXRlX2NiLFxcbiB9O1xcbiBcXG4rc3RhdGljIHZvaWQgZ2V0X3BjaV90cGhfbXJfZG1hYnVmKHN0cnVjdCBtbHg1X2liX2RldiAqZGV2LCBzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLFxcbitcXHRcXHRcXHRcXHQgIHUxNiAqc3RfaW5kZXgsIHU4ICpwaClcXG4re1xcbitcXHR1MTYgbG9jYWxfc3RfaW5kZXg7XFxuK1xcdHUxNiBzdGVlcmluZ190YWc7XFxuK1xcdHU4IGxvY2FsX3BoO1xcbitcXHRib29sIGV4dGVuZGVkO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0c3dpdGNoIChwY2llX3RwaF9lbmFibGVkX3JlcV90eXBlKGRldi1cXHUwMDNlbWRldi1cXHUwMDNlcGRldikpIHtcXG4rXFx0Y2FzZSBQQ0lfVFBIX1JFUV9UUEhfT05MWTpcXG4rXFx0XFx0ZXh0ZW5kZWQgPSBmYWxzZTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgUENJX1RQSF9SRVFfRVhUX1RQSDpcXG4rXFx0XFx0ZXh0ZW5kZWQgPSB0cnVlO1xcbitcXHRcXHRicmVhaztcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHRkbWFfcmVzdl9sb2NrKGRtYWJ1Zi1cXHUwMDNlcmVzdiwgTlVMTCk7XFxuK1xcdHJldCA9IGRtYV9idWZfZ2V0X3BjaV90cGgoZG1hYnVmLCBleHRlbmRlZCwgXFx1MDAyNnN0ZWVyaW5nX3RhZywgXFx1MDAyNmxvY2FsX3BoKTtcXG4rXFx0ZG1hX3Jlc3ZfdW5sb2NrKGRtYWJ1Zi1cXHUwMDNlcmVzdik7XFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0aWYgKHJldCAhPSAtRU9QTk9UU1VQUClcXG4rXFx0XFx0XFx0bWx4NV9pYl9kYmcoZGV2LCBcXFwiZ2V0X3BjaV90cGggZmFpbGVkICglZClcXFxcblxcXCIsIHJldCk7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0cmV0ID0gbWx4NV9zdF9hbGxvY19pbmRleF9ieV90YWcoZGV2LVxcdTAwM2VtZGV2LCBzdGVlcmluZ190YWcsXFxuK1xcdFxcdFxcdFxcdFxcdCBcXHUwMDI2bG9jYWxfc3RfaW5kZXgpO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdG1seDVfaWJfZGJnKGRldiwgXFxcInN0X2FsbG9jX2luZGV4X2J5X3RhZyBmYWlsZWQgKCVkKVxcXFxuXFxcIiwgcmV0KTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHQqc3RfaW5kZXggPSBsb2NhbF9zdF9pbmRleDtcXG4rXFx0KnBoID0gbG9jYWxfcGg7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIG1seDVfaWJfbXJfcHV0X2ZybXJfc3RfaGFuZGxlX3JlZihzdHJ1Y3QgbWx4NV9pYl9tciAqbXIpXFxuK3tcXG4rXFx0bWx4NV9pYl9wdXRfZnJtcl9zdF9oYW5kbGVfcmVmKG1yX3RvX21kZXYobXIpLFxcbitcXHRcXHRcXHRcXHQgICAgICAgbXItXFx1MDAzZWlibXIuZnJtci5rZXkua2VybmVsX3ZlbmRvcl9rZXkpO1xcbit9XFxuK1xcbiBzdGF0aWMgc3RydWN0IGliX21yICpcXG4gcmVnX3VzZXJfbXJfZG1hYnVmKHN0cnVjdCBpYl9wZCAqcGQsIHN0cnVjdCBkZXZpY2UgKmRtYV9kZXZpY2UsXFxuIFxcdFxcdCAgIHU2NCBvZmZzZXQsIHU2NCBsZW5ndGgsIHU2NCB2aXJ0X2FkZHIsXFxuQEAgLTk0NSwxMiArMTAzMiwyMiBAQCByZWdfdXNlcl9tcl9kbWFidWYoc3RydWN0IGliX3BkICpwZCwgc3RydWN0IGRldmljZSAqZG1hX2RldmljZSxcXG4gXFx0XFx0cGggPSBkbWFoLVxcdTAwM2VwaDtcXG4gXFx0XFx0aWYgKGRtYWgtXFx1MDAzZXZhbGlkX2ZpZWxkcyBcXHUwMDI2IEJJVChJQl9ETUFIX0NQVV9JRF9FWElTVFMpKVxcbiBcXHRcXHRcXHRzdF9pbmRleCA9IG1kbWFoLVxcdTAwM2VzdF9pbmRleDtcXG4rXFxuK1xcdFxcdGVyciA9IG1seDVfaWJfZ2V0X2ZybXJfc3RfaGFuZGxlX3JlZihkZXYsIHN0X2luZGV4KTtcXG4rXFx0XFx0aWYgKGVycikge1xcbitcXHRcXHRcXHRpYl91bWVtX3JlbGVhc2UoXFx1MDAyNnVtZW1fZG1hYnVmLVxcdTAwM2V1bWVtKTtcXG4rXFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcXG4rXFx0XFx0fVxcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRnZXRfcGNpX3RwaF9tcl9kbWFidWYoZGV2LCB1bWVtX2RtYWJ1Zi1cXHUwMDNlYXR0YWNoLVxcdTAwM2VkbWFidWYsXFxuK1xcdFxcdFxcdFxcdCAgICAgIFxcdTAwMjZzdF9pbmRleCwgXFx1MDAyNnBoKTtcXG4gXFx0fVxcbiBcXG4gXFx0bXIgPSBhbGxvY19jYWNoZWFibGVfbXIocGQsIFxcdTAwMjZ1bWVtX2RtYWJ1Zi1cXHUwMDNldW1lbSwgdmlydF9hZGRyLFxcbiBcXHRcXHRcXHRcXHRhY2Nlc3NfZmxhZ3MsIGFjY2Vzc19tb2RlLFxcbiBcXHRcXHRcXHRcXHRzdF9pbmRleCwgcGgpO1xcbiBcXHRpZiAoSVNfRVJSKG1yKSkge1xcbitcXHRcXHRtbHg1X2liX3B1dF9zdF9pbmRleF9yZWYoZGV2LCBzdF9pbmRleCk7XFxuIFxcdFxcdGliX3VtZW1fcmVsZWFzZShcXHUwMDI2dW1lbV9kbWFidWYtXFx1MDAzZXVtZW0pO1xcbiBcXHRcXHRyZXR1cm4gRVJSX0NBU1QobXIpO1xcbiBcXHR9XFxuQEAgLTE0MDUsNiArMTUwMiw3IEBAIHN0YXRpYyBpbnQgbWx4NXJfaGFuZGxlX21rZXlfY2xlYW51cChzdHJ1Y3QgbWx4NV9pYl9tciAqbXIpXFxuIFxcdGlmIChtci1cXHUwMDNlaWJtci5mcm1yLnBvb2wpIHtcXG4gXFx0XFx0aWYgKCFtbHg1X3Vtcl9yZXZva2VfbXJfd2l0aF9sb2NrKG1yKSkge1xcbiBcXHRcXHRcXHRpYl9mcm1yX3Bvb2xfcHVzaChtci1cXHUwMDNlaWJtci5kZXZpY2UsIFxcdTAwMjZtci1cXHUwMDNlaWJtcik7XFxuK1xcdFxcdFxcdG1seDVfaWJfbXJfcHV0X2ZybXJfc3RfaGFuZGxlX3JlZihtcik7XFxuIFxcdFxcdFxcdHJldHVybiAwO1xcbiBcXHRcXHR9XFxuIFxcdH1cXG5AQCAtMTQzMiw2ICsxNTMwLDkgQEAgc3RhdGljIGludCBtbHg1cl9oYW5kbGVfbWtleV9jbGVhbnVwKHN0cnVjdCBtbHg1X2liX21yICptcilcXG4gXFx0aWYgKG1yLVxcdTAwM2VpYm1yLmZybXIucG9vbCBcXHUwMDI2XFx1MDAyNiAhcmV0KVxcbiBcXHRcXHRpYl9mcm1yX3Bvb2xfZHJvcChcXHUwMDI2bXItXFx1MDAzZWlibXIpO1xcbiBcXG4rXFx0aWYgKCFyZXQpXFxuK1xcdFxcdG1seDVfaWJfbXJfcHV0X2ZybXJfc3RfaGFuZGxlX3JlZihtcik7XFxuK1xcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGliL3N0LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGliL3N0LmNcXG5pbmRleCA5OTdiZTkxZjBhMTM1YS4uYmYxNGE3YTZkZjE1ZTEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi9zdC5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi9zdC5jXFxuQEAgLTkyLDIzICs5MiwxOCBAQCB2b2lkIG1seDVfc3RfZGVzdHJveShzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KVxcbiBcXHRrZnJlZShzdCk7XFxuIH1cXG4gXFxuLWludCBtbHg1X3N0X2FsbG9jX2luZGV4KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIGVudW0gdHBoX21lbV90eXBlIG1lbV90eXBlLFxcbi1cXHRcXHRcXHR1bnNpZ25lZCBpbnQgY3B1X3VpZCwgdTE2ICpzdF9pbmRleClcXG4raW50IG1seDVfc3RfYWxsb2NfaW5kZXhfYnlfdGFnKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIHUxNiB0YWcsXFxuK1xcdFxcdFxcdCAgICAgICB1MTYgKnN0X2luZGV4KVxcbiB7XFxuIFxcdHN0cnVjdCBtbHg1X3N0X2lkeF9kYXRhICppZHhfZGF0YTtcXG4gXFx0c3RydWN0IG1seDVfc3QgKnN0ID0gZGV2LVxcdTAwM2VzdDtcXG4gXFx0dW5zaWduZWQgbG9uZyBpbmRleDtcXG4gXFx0dTMyIHhhX2lkO1xcbi1cXHR1MTYgdGFnO1xcbi1cXHRpbnQgcmV0O1xcbitcXHRpbnQgcmV0ID0gMDtcXG4gXFxuIFxcdGlmICghc3QpXFxuIFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4gXFxuLVxcdHJldCA9IHBjaWVfdHBoX2dldF9jcHVfc3QoZGV2LVxcdTAwM2VwZGV2LCBtZW1fdHlwZSwgY3B1X3VpZCwgXFx1MDAyNnRhZyk7XFxuLVxcdGlmIChyZXQpXFxuLVxcdFxcdHJldHVybiByZXQ7XFxuLVxcbiBcXHRpZiAoc3QtXFx1MDAzZWRpcmVjdF9tb2RlKSB7XFxuIFxcdFxcdCpzdF9pbmRleCA9IHRhZztcXG4gXFx0XFx0cmV0dXJuIDA7XFxuQEAgLTE1Miw4ICsxNDcsNDYgQEAgaW50IG1seDVfc3RfYWxsb2NfaW5kZXgoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgZW51bSB0cGhfbWVtX3R5cGUgbWVtX3R5cGUsXFxuIFxcdG11dGV4X3VubG9jayhcXHUwMDI2c3QtXFx1MDAzZWxvY2spO1xcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuK0VYUE9SVF9TWU1CT0xfR1BMKG1seDVfc3RfYWxsb2NfaW5kZXhfYnlfdGFnKTtcXG4rXFxuK2ludCBtbHg1X3N0X2FsbG9jX2luZGV4KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIGVudW0gdHBoX21lbV90eXBlIG1lbV90eXBlLFxcbitcXHRcXHRcXHR1bnNpZ25lZCBpbnQgY3B1X3VpZCwgdTE2ICpzdF9pbmRleClcXG4re1xcbitcXHR1MTYgdGFnO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cmV0ID0gcGNpZV90cGhfZ2V0X2NwdV9zdChkZXYtXFx1MDAzZXBkZXYsIG1lbV90eXBlLCBjcHVfdWlkLCBcXHUwMDI2dGFnKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldHVybiBtbHg1X3N0X2FsbG9jX2luZGV4X2J5X3RhZyhkZXYsIHRhZywgc3RfaW5kZXgpO1xcbit9XFxuIEVYUE9SVF9TWU1CT0xfR1BMKG1seDVfc3RfYWxsb2NfaW5kZXgpO1xcbiBcXG4raW50IG1seDVfc3RfZ2V0X2luZGV4KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIHUxNiBzdF9pbmRleClcXG4re1xcbitcXHRzdHJ1Y3QgbWx4NV9zdF9pZHhfZGF0YSAqaWR4X2RhdGE7XFxuK1xcdHN0cnVjdCBtbHg1X3N0ICpzdCA9IGRldi1cXHUwMDNlc3Q7XFxuK1xcdGludCByZXQgPSAwO1xcbitcXG4rXFx0aWYgKCFzdClcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXG4rXFx0aWYgKHN0LVxcdTAwM2VkaXJlY3RfbW9kZSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZzdC1cXHUwMDNlbG9jayk7XFxuK1xcdGlkeF9kYXRhID0geGFfbG9hZChcXHUwMDI2c3QtXFx1MDAzZWlkeF94YSwgc3RfaW5kZXgpO1xcbitcXHRpZiAoV0FSTl9PTl9PTkNFKCFpZHhfZGF0YSkpXFxuK1xcdFxcdHJldCA9IC1FSU5WQUw7XFxuK1xcdGVsc2VcXG4rXFx0XFx0cmVmY291bnRfaW5jKFxcdTAwMjZpZHhfZGF0YS1cXHUwMDNldXNlY291bnQpO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnN0LVxcdTAwM2Vsb2NrKTtcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwobWx4NV9zdF9nZXRfaW5kZXgpO1xcbitcXG4gaW50IG1seDVfc3RfZGVhbGxvY19pbmRleChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCB1MTYgc3RfaW5kZXgpXFxuIHtcXG4gXFx0c3RydWN0IG1seDVfc3RfaWR4X2RhdGEgKmlkeF9kYXRhO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS90cGguYyBiL2RyaXZlcnMvcGNpL3RwaC5jXFxuaW5kZXggOTExNDVlOGQ5ZDk1MTIuLjcxN2I0N2QxZDljYWNlIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvcGNpL3RwaC5jXFxuKysrIGIvZHJpdmVycy9wY2kvdHBoLmNcXG5AQCAtMTc0LDYgKzE3NCw1MSBAQCB1MzIgcGNpZV90cGhfZ2V0X3N0X3RhYmxlX2xvYyhzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4gfVxcbiBFWFBPUlRfU1lNQk9MKHBjaWVfdHBoX2dldF9zdF90YWJsZV9sb2MpO1xcbiBcXG4rLyoqXFxuKyAqIHBjaWVfdHBoX2VuYWJsZWRfcmVxX3R5cGUgLSBSZXR1cm4gdGhlIGRldmljZSdzIGVuYWJsZWQgVFBIIHJlcXVlc3RlciB0eXBlXFxuKyAqIEBwZGV2OiBQQ0kgZGV2aWNlIHRvIHF1ZXJ5XFxuKyAqXFxuKyAqIFJldHVybjogUENJX1RQSF9SRVFfRElTQUJMRSwgUENJX1RQSF9SRVFfVFBIX09OTFkgb3IgUENJX1RQSF9SRVFfRVhUX1RQSC5cXG4rICovXFxuK3U4IHBjaWVfdHBoX2VuYWJsZWRfcmVxX3R5cGUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuK3tcXG4rXFx0cmV0dXJuIHBkZXYtXFx1MDAzZXRwaF9yZXFfdHlwZTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MKHBjaWVfdHBoX2VuYWJsZWRfcmVxX3R5cGUpO1xcbitcXG4rLyoqXFxuKyAqIHBjaWVfdHBoX2NvbXBsZXRlcl90eXBlIC0gUmV0dXJuIHRoZSBkZXZpY2UncyBUUEggQ29tcGxldGVyIHN1cHBvcnRcXG4rICogQHBkZXY6IFBDSSBkZXZpY2UgdG8gcXVlcnlcXG4rICpcXG4rICogUmVhZHMgdGhlIFxcXCJUUEggQ29tcGxldGVyIFN1cHBvcnRlZFxcXCIgZmllbGQgKGJpdHMgMTM6MTIpIG9mIERldmljZVxcbisgKiBDYXBhYmlsaXRpZXMgMi4gVGhlIHJlc2VydmVkIDBiMTAgZW5jb2RpbmcgaXMgZm9sZGVkIGludG9cXG4rICogXFxcIm5vdCBzdXBwb3J0ZWRcXFwiIHNvIGNhbGxlcnMgb25seSBuZWVkIHRvIGNvbXBhcmUgYWdhaW5zdCB0aGUgdGhyZWVcXG4rICogZGVmaW5lZCB2YWx1ZXMuXFxuKyAqXFxuKyAqIFJldHVybjogb25lIG9mICVQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfTk9ORSxcXG4rICogICAgICAgICAlUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX1RQSF9PTkxZIG9yXFxuKyAqICAgICAgICAgJVBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9FWFRfVFBILlxcbisgKi9cXG4rdTggcGNpZV90cGhfY29tcGxldGVyX3R5cGUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuK3tcXG4rXFx0dTMyIHJlZztcXG4rXFxuK1xcdGlmIChwY2llX2NhcGFiaWxpdHlfcmVhZF9kd29yZChwZGV2LCBQQ0lfRVhQX0RFVkNBUDIsIFxcdTAwMjZyZWcpKVxcbitcXHRcXHRyZXR1cm4gUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX05PTkU7XFxuK1xcdGlmIChQQ0lfUE9TU0lCTEVfRVJST1IocmVnKSlcXG4rXFx0XFx0cmV0dXJuIFBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9OT05FO1xcbitcXG4rXFx0c3dpdGNoIChGSUVMRF9HRVQoUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX01BU0ssIHJlZykpIHtcXG4rXFx0Y2FzZSBQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfVFBIX09OTFk6XFxuK1xcdFxcdHJldHVybiBQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfVFBIX09OTFk7XFxuK1xcdGNhc2UgUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX0VYVF9UUEg6XFxuK1xcdFxcdHJldHVybiBQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfRVhUX1RQSDtcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0cmV0dXJuIFBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9OT05FO1xcbitcXHR9XFxuK31cXG4rRVhQT1JUX1NZTUJPTChwY2llX3RwaF9jb21wbGV0ZXJfdHlwZSk7XFxuK1xcbiAvKlxcbiAgKiBSZXR1cm4gdGhlIHNpemUgb2YgU1QgdGFibGUuIElmIFNUIHRhYmxlIGlzIG5vdCBpbiBUUEggUmVxdWVzdGVyIEV4dGVuZGVkXFxuICAqIENhcGFiaWxpdHkgc3BhY2UsIHJldHVybiAwLiBPdGhlcndpc2UgcmV0dXJuIHRoZSBTVCBUYWJsZSBTaXplICsgMS5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuY1xcbmluZGV4IGEyOGYxZTk5MzYyYzFlLi5jN2Q2OTAyYmM2MWIwNyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuY1xcbisrKyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jXFxuQEAgLTE1NzIsNiArMTU3Miw5IEBAIGludCB2ZmlvX3BjaV9jb3JlX2lvY3RsX2ZlYXR1cmUoc3RydWN0IHZmaW9fZGV2aWNlICpkZXZpY2UsIHUzMiBmbGFncyxcXG4gXFx0XFx0cmV0dXJuIHZmaW9fcGNpX2NvcmVfZmVhdHVyZV90b2tlbih2ZGV2LCBmbGFncywgYXJnLCBhcmdzeik7XFxuIFxcdGNhc2UgVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGOlxcbiBcXHRcXHRyZXR1cm4gdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWYodmRldiwgZmxhZ3MsIGFyZywgYXJnc3opO1xcbitcXHRjYXNlIFZGSU9fREVWSUNFX0ZFQVRVUkVfRE1BX0JVRl9UUEg6XFxuK1xcdFxcdHJldHVybiB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl90cGgodmRldiwgZmxhZ3MsIGFyZyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0IGFyZ3N6KTtcXG4gXFx0ZGVmYXVsdDpcXG4gXFx0XFx0cmV0dXJuIC1FTk9UVFk7XFxuIFxcdH1cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmNcXG5pbmRleCBjMTZmNDYwYzAxZDY4MS4uZDZmNWRkMzIxMDAwOWMgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuY1xcbisrKyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmNcXG5AQCAtMyw2ICszLDcgQEBcXG4gICovXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9kbWEtYnVmLW1hcHBpbmcuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BjaS1wMnBkbWEuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BjaS10cGguaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RtYS1yZXN2LmhcXHUwMDNlXFxuIFxcbiAjaW5jbHVkZSBcXFwidmZpb19wY2lfcHJpdi5oXFxcIlxcbkBAIC0xOSw3ICsyMCwxNCBAQCBzdHJ1Y3QgdmZpb19wY2lfZG1hX2J1ZiB7XFxuIFxcdHUzMiBucl9yYW5nZXM7XFxuIFxcdHN0cnVjdCBrcmVmIGtyZWY7XFxuIFxcdHN0cnVjdCBjb21wbGV0aW9uIGNvbXA7XFxuLVxcdHU4IHJldm9rZWQgOiAxO1xcbitcXG4rXFx0LyogUHJvdGVjdGVkIGJ5IGRtYWJ1Zi1cXHUwMDNlcmVzdi4gKi9cXG4rXFx0dTE2IHRwaF9zdF9leHQ7XFxuK1xcdHU4IHRwaF9zdDtcXG4rXFx0dTggcmV2b2tlZDoxO1xcbitcXHR1OCB0cGhfc3RfdmFsaWQ6MTtcXG4rXFx0dTggdHBoX3N0X2V4dF92YWxpZDoxO1xcbitcXHR1OCB0cGhfcGg6MjtcXG4gfTtcXG4gXFxuIHN0YXRpYyBpbnQgdmZpb19wY2lfZG1hX2J1Zl9hdHRhY2goc3RydWN0IGRtYV9idWYgKmRtYWJ1ZixcXG5AQCAtNjksNiArNzcsMjYgQEAgdmZpb19wY2lfZG1hX2J1Zl9tYXAoc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNobWVudCxcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4rc3RhdGljIGludCB2ZmlvX3BjaV9kbWFfYnVmX2dldF9wY2lfdHBoKHN0cnVjdCBkbWFfYnVmICpkbWFidWYsIGJvb2wgZXh0ZW5kZWQsXFxuK1xcdFxcdFxcdFxcdFxcdHUxNiAqc3RlZXJpbmdfdGFnLCB1OCAqcGgpXFxuK3tcXG4rXFx0c3RydWN0IHZmaW9fcGNpX2RtYV9idWYgKnByaXYgPSBkbWFidWYtXFx1MDAzZXByaXY7XFxuK1xcbitcXHRkbWFfcmVzdl9hc3NlcnRfaGVsZChkbWFidWYtXFx1MDAzZXJlc3YpO1xcbitcXG4rXFx0aWYgKGV4dGVuZGVkKSB7XFxuK1xcdFxcdGlmICghcHJpdi1cXHUwMDNldHBoX3N0X2V4dF92YWxpZClcXG4rXFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHRcXHQqc3RlZXJpbmdfdGFnID0gcHJpdi1cXHUwMDNldHBoX3N0X2V4dDtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0aWYgKCFwcml2LVxcdTAwM2V0cGhfc3RfdmFsaWQpXFxuK1xcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0XFx0KnN0ZWVyaW5nX3RhZyA9IHByaXYtXFx1MDAzZXRwaF9zdDtcXG4rXFx0fVxcbitcXHQqcGggPSBwcml2LVxcdTAwM2V0cGhfcGg7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCB2ZmlvX3BjaV9kbWFfYnVmX3VubWFwKHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaG1lbnQsXFxuIFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBzZ190YWJsZSAqc2d0LFxcbiBcXHRcXHRcXHRcXHQgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpXFxuQEAgLTEwMSw2ICsxMjksNyBAQCBzdGF0aWMgdm9pZCB2ZmlvX3BjaV9kbWFfYnVmX3JlbGVhc2Uoc3RydWN0IGRtYV9idWYgKmRtYWJ1ZilcXG4gXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZG1hX2J1Zl9vcHMgdmZpb19wY2lfZG1hYnVmX29wcyA9IHtcXG4gXFx0LmF0dGFjaCA9IHZmaW9fcGNpX2RtYV9idWZfYXR0YWNoLFxcbitcXHQuZ2V0X3BjaV90cGggPSB2ZmlvX3BjaV9kbWFfYnVmX2dldF9wY2lfdHBoLFxcbiBcXHQubWFwX2RtYV9idWYgPSB2ZmlvX3BjaV9kbWFfYnVmX21hcCxcXG4gXFx0LnVubWFwX2RtYV9idWYgPSB2ZmlvX3BjaV9kbWFfYnVmX3VubWFwLFxcbiBcXHQucmVsZWFzZSA9IHZmaW9fcGNpX2RtYV9idWZfcmVsZWFzZSxcXG5AQCAtMzMzLDYgKzM2Miw3MiBAQCBpbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWYoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCB1MzIgZmxhZ3MsXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuK2ludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl90cGgoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LFxcbitcXHRcXHRcXHRcXHQgICAgICB1MzIgZmxhZ3MsXFxuK1xcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX2RtYV9idWZfdHBoIF9fdXNlciAqYXJnLFxcbitcXHRcXHRcXHRcXHQgICAgICBzaXplX3QgYXJnc3opXFxuK3tcXG4rXFx0c3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfZG1hX2J1Zl90cGggc2V0X3RwaDtcXG4rXFx0c3RydWN0IHZmaW9fcGNpX2RtYV9idWYgKnByaXY7XFxuK1xcdHN0cnVjdCBkbWFfYnVmICpkbWFidWY7XFxuK1xcdHU4IGNvbXA7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRjb21wID0gcGNpZV90cGhfY29tcGxldGVyX3R5cGUodmRldi1cXHUwMDNlcGRldik7XFxuK1xcdGlmIChjb21wID09IFBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9OT05FKVxcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcbitcXHRyZXQgPSB2ZmlvX2NoZWNrX2ZlYXR1cmUoZmxhZ3MsIGFyZ3N6LCBWRklPX0RFVklDRV9GRUFUVVJFX1NFVCxcXG4rXFx0XFx0XFx0XFx0IHNpemVvZihzZXRfdHBoKSk7XFxuK1xcdGlmIChyZXQgIT0gMSlcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdGlmIChjb3B5X2Zyb21fdXNlcihcXHUwMDI2c2V0X3RwaCwgYXJnLCBzaXplb2Yoc2V0X3RwaCkpKVxcbitcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4rXFxuK1xcdGlmIChzZXRfdHBoLmZsYWdzIFxcdTAwMjYgfihWRklPX0RNQV9CVUZfVFBIX1NUIHwgVkZJT19ETUFfQlVGX1RQSF9TVF9FWFQpKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdGlmIChzZXRfdHBoLnBoIFxcdTAwMjYgfjB4MylcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRpZiAoKHNldF90cGguZmxhZ3MgXFx1MDAyNiBWRklPX0RNQV9CVUZfVFBIX1NUX0VYVCkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIGNvbXAgIT0gUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX0VYVF9UUEgpXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFxuK1xcdGRtYWJ1ZiA9IGRtYV9idWZfZ2V0KHNldF90cGguZG1hYnVmX2ZkKTtcXG4rXFx0aWYgKElTX0VSUihkbWFidWYpKVxcbitcXHRcXHRyZXR1cm4gUFRSX0VSUihkbWFidWYpO1xcbitcXG4rXFx0aWYgKGRtYWJ1Zi1cXHUwMDNlb3BzICE9IFxcdTAwMjZ2ZmlvX3BjaV9kbWFidWZfb3BzKSB7XFxuK1xcdFxcdHJldCA9IC1FSU5WQUw7XFxuK1xcdFxcdGdvdG8gb3V0X3B1dDtcXG4rXFx0fVxcbitcXG4rXFx0cHJpdiA9IGRtYWJ1Zi1cXHUwMDNlcHJpdjtcXG4rXFx0aWYgKHByaXYtXFx1MDAzZXZkZXYgIT0gdmRldikge1xcbitcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbitcXHRcXHRnb3RvIG91dF9wdXQ7XFxuK1xcdH1cXG4rXFxuK1xcdHJldCA9IGRtYV9yZXN2X2xvY2tfaW50ZXJydXB0aWJsZShkbWFidWYtXFx1MDAzZXJlc3YsIE5VTEwpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIG91dF9wdXQ7XFxuK1xcbitcXHRwcml2LVxcdTAwM2V0cGhfc3QgICAgICAgICA9IHNldF90cGguc3RlZXJpbmdfdGFnO1xcbitcXHRwcml2LVxcdTAwM2V0cGhfc3RfZXh0ICAgICA9IHNldF90cGguc3RlZXJpbmdfdGFnX2V4dDtcXG4rXFx0cHJpdi1cXHUwMDNldHBoX3BoICAgICAgICAgPSBzZXRfdHBoLnBoO1xcbitcXHRwcml2LVxcdTAwM2V0cGhfc3RfdmFsaWQgICA9ICEhKHNldF90cGguZmxhZ3MgXFx1MDAyNiBWRklPX0RNQV9CVUZfVFBIX1NUKTtcXG4rXFx0cHJpdi1cXHUwMDNldHBoX3N0X2V4dF92YWxpZCA9XFxuK1xcdFxcdCEhKHNldF90cGguZmxhZ3MgXFx1MDAyNiBWRklPX0RNQV9CVUZfVFBIX1NUX0VYVCk7XFxuK1xcdGRtYV9yZXN2X3VubG9jayhkbWFidWYtXFx1MDAzZXJlc3YpO1xcbitcXHRyZXQgPSAwO1xcbitcXG4rb3V0X3B1dDpcXG4rXFx0ZG1hX2J1Zl9wdXQoZG1hYnVmKTtcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4gdm9pZCB2ZmlvX3BjaV9kbWFfYnVmX21vdmUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCBib29sIHJldm9rZWQpXFxuIHtcXG4gXFx0c3RydWN0IHZmaW9fcGNpX2RtYV9idWYgKnByaXY7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfcHJpdi5oIGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9wcml2LmhcXG5pbmRleCBmY2E5ZDBkZmFjOTBmOC4uYzU4ZjM2OWJlNGIzOTggMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9wcml2LmhcXG4rKysgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX3ByaXYuaFxcbkBAIC0xMTgsNiArMTE4LDEwIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB2ZmlvX3BjaV9pc192Z2Eoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuIGludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1ZihzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIHUzMiBmbGFncyxcXG4gXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV9kbWFfYnVmIF9fdXNlciAqYXJnLFxcbiBcXHRcXHRcXHRcXHQgIHNpemVfdCBhcmdzeik7XFxuK2ludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl90cGgoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LFxcbitcXHRcXHRcXHRcXHQgICAgICB1MzIgZmxhZ3MsXFxuK1xcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX2RtYV9idWZfdHBoIF9fdXNlciAqYXJnLFxcbitcXHRcXHRcXHRcXHQgICAgICBzaXplX3QgYXJnc3opO1xcbiB2b2lkIHZmaW9fcGNpX2RtYV9idWZfY2xlYW51cChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpO1xcbiB2b2lkIHZmaW9fcGNpX2RtYV9idWZfbW92ZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIGJvb2wgcmV2b2tlZCk7XFxuICNlbHNlXFxuQEAgLTEyOCw2ICsxMzIsMTQgQEAgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWYoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCB1MzIgZmxhZ3MsXFxuIHtcXG4gXFx0cmV0dXJuIC1FTk9UVFk7XFxuIH1cXG4rXFxuK3N0YXRpYyBpbmxpbmUgaW50XFxuK3ZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3RwaChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIHUzMiBmbGFncyxcXG4rXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV9kbWFfYnVmX3RwaCBfX3VzZXIgKmFyZyxcXG4rXFx0XFx0XFx0XFx0ICBzaXplX3QgYXJnc3opXFxuK3tcXG4rXFx0cmV0dXJuIC1FTk9UVFk7XFxuK31cXG4gc3RhdGljIGlubGluZSB2b2lkIHZmaW9fcGNpX2RtYV9idWZfY2xlYW51cChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpXFxuIHtcXG4gfVxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RtYS1idWYuaCBiL2luY2x1ZGUvbGludXgvZG1hLWJ1Zi5oXFxuaW5kZXggZDEyMDNkYTU2ZmM1ZjcuLjUzYjI2ODZhZDhmYzY3IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvZG1hLWJ1Zi5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9kbWEtYnVmLmhcXG5AQCAtMTEzLDYgKzExMywyNiBAQCBzdHJ1Y3QgZG1hX2J1Zl9vcHMge1xcbiBcXHQgKi9cXG4gXFx0dm9pZCAoKnVucGluKShzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2gpO1xcbiBcXG4rXFx0LyoqXFxuK1xcdCAqIEBnZXRfcGNpX3RwaDpcXG4rXFx0ICpcXG4rXFx0ICogUmV0cmlldmUgUENJZSBUTFAgUHJvY2Vzc2luZyBIaW50IChUUEgpIHN0ZWVyaW5nIG1ldGFkYXRhIGZvclxcbitcXHQgKiB0aGlzIGJ1ZmZlciBzbyBhbiBpbXBvcnRlciBjYW4gcHJvZ3JhbSBhIG1hdGNoaW5nIFNUL1BIIGhpbnQgb25cXG4rXFx0ICogb3V0Ym91bmQgVExQcyB0YXJnZXRpbmcgdGhlIGV4cG9ydGVyIGZvciBwZWVyLXRvLXBlZXIgRE1BLlxcbitcXHQgKlxcbitcXHQgKiBAZG1hYnVmOiBETUEgYnVmZmVyIGZvciB3aGljaCB0byByZXRyaWV2ZSBUUEggbWV0YWRhdGFcXG4rXFx0ICogQGV4dGVuZGVkOiBmYWxzZSBmb3IgOC1iaXQgU1QsIHRydWUgZm9yIDE2LWJpdCBFeHRlbmRlZCBTVFxcbitcXHQgKiBAc3RlZXJpbmdfdGFnOiBSZXR1cm5zIHRoZSByYXcgVFBIIHN0ZWVyaW5nIHRhZyBmb3IgdGhlIHJlcXVlc3RlZFxcbitcXHQgKiAgICAgICAgICAgICAgICBuYW1lc3BhY2VcXG4rXFx0ICogQHBoOiBSZXR1cm5zIHRoZSBUUEggcHJvY2Vzc2luZyBoaW50ICgyLWJpdCB2YWx1ZSlcXG4rXFx0ICpcXG4rXFx0ICogT3B0aW9uYWwgY2FsbGJhY2sgZm9yIGRtYV9idWZfZ2V0X3BjaV90cGgoKS4gQ2FsbGVkIHdpdGhcXG4rXFx0ICogXFx1MDAyNmRtYV9idWYucmVzdiBoZWxkLiBSZXR1cm5zIDAgb24gc3VjY2VzcyBvciAtRU9QTk9UU1VQUCB3aGVuXFxuK1xcdCAqIHRoZSBleHBvcnRlciBoYXMgbm8gbWV0YWRhdGEgZm9yIHRoZSByZXF1ZXN0ZWQgbmFtZXNwYWNlLlxcbitcXHQgKi9cXG4rXFx0aW50ICgqZ2V0X3BjaV90cGgpKHN0cnVjdCBkbWFfYnVmICpkbWFidWYsIGJvb2wgZXh0ZW5kZWQsXFxuK1xcdFxcdFxcdCAgIHUxNiAqc3RlZXJpbmdfdGFnLCB1OCAqcGgpO1xcbitcXG4gXFx0LyoqXFxuIFxcdCAqIEBtYXBfZG1hX2J1ZjpcXG4gXFx0ICpcXG5AQCAtNTYzLDYgKzU4Myw4IEBAIHZvaWQgZG1hX2J1Zl9kZXRhY2goc3RydWN0IGRtYV9idWYgKmRtYWJ1ZixcXG4gXFx0XFx0ICAgIHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaCk7XFxuIGludCBkbWFfYnVmX3BpbihzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2gpO1xcbiB2b2lkIGRtYV9idWZfdW5waW4oc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoKTtcXG4raW50IGRtYV9idWZfZ2V0X3BjaV90cGgoc3RydWN0IGRtYV9idWYgKmRtYWJ1ZiwgYm9vbCBleHRlbmRlZCxcXG4rXFx0XFx0XFx0dTE2ICpzdGVlcmluZ190YWcsIHU4ICpwaCk7XFxuIFxcbiBzdHJ1Y3QgZG1hX2J1ZiAqZG1hX2J1Zl9leHBvcnQoY29uc3Qgc3RydWN0IGRtYV9idWZfZXhwb3J0X2luZm8gKmV4cF9pbmZvKTtcXG4gXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWx4NS9kcml2ZXIuaCBiL2luY2x1ZGUvbGludXgvbWx4NS9kcml2ZXIuaFxcbmluZGV4IGIxODcxYzA4MjFkMGI5Li44YjM5MTExOTFmYjYyNiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L21seDUvZHJpdmVyLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L21seDUvZHJpdmVyLmhcXG5AQCAtMTE4MiwxMCArMTE4MiwyMyBAQCBpbnQgbWx4NV9kbV9zd19pY21fZGVhbGxvYyhzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCBlbnVtIG1seDVfc3dfaWNtX3R5cGUgdHlwZVxcbiBcXHRcXHRcXHQgICB1NjQgbGVuZ3RoLCB1MTYgdWlkLCBwaHlzX2FkZHJfdCBhZGRyLCB1MzIgb2JqX2lkKTtcXG4gXFxuICNpZmRlZiBDT05GSUdfUENJRV9UUEhcXG4raW50IG1seDVfc3RfYWxsb2NfaW5kZXhfYnlfdGFnKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIHUxNiB0YWcsXFxuK1xcdFxcdFxcdCAgICAgICB1MTYgKnN0X2luZGV4KTtcXG4raW50IG1seDVfc3RfZ2V0X2luZGV4KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIHUxNiBzdF9pbmRleCk7XFxuIGludCBtbHg1X3N0X2FsbG9jX2luZGV4KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIGVudW0gdHBoX21lbV90eXBlIG1lbV90eXBlLFxcbiBcXHRcXHRcXHR1bnNpZ25lZCBpbnQgY3B1X3VpZCwgdTE2ICpzdF9pbmRleCk7XFxuIGludCBtbHg1X3N0X2RlYWxsb2NfaW5kZXgoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgdTE2IHN0X2luZGV4KTtcXG4gI2Vsc2VcXG4rc3RhdGljIGlubGluZSBpbnQgbWx4NV9zdF9hbGxvY19pbmRleF9ieV90YWcoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICB1MTYgdGFnLCB1MTYgKnN0X2luZGV4KVxcbit7XFxuK1xcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSBpbnQgbWx4NV9zdF9nZXRfaW5kZXgoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgdTE2IHN0X2luZGV4KVxcbit7XFxuK1xcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rfVxcbiBzdGF0aWMgaW5saW5lIGludCBtbHg1X3N0X2FsbG9jX2luZGV4KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsXFxuIFxcdFxcdFxcdFxcdCAgICAgIGVudW0gdHBoX21lbV90eXBlIG1lbV90eXBlLFxcbiBcXHRcXHRcXHRcXHQgICAgICB1bnNpZ25lZCBpbnQgY3B1X3VpZCwgdTE2ICpzdF9pbmRleClcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wY2ktdHBoLmggYi9pbmNsdWRlL2xpbnV4L3BjaS10cGguaFxcbmluZGV4IGJlNjhjZDE3ZjJmODMzLi43NzQzYWY2ZmU0MzI2ZSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BjaS10cGguaFxcbisrKyBiL2luY2x1ZGUvbGludXgvcGNpLXRwaC5oXFxuQEAgLTksNiArOSw4IEBAXFxuICNpZm5kZWYgTElOVVhfUENJX1RQSF9IXFxuICNkZWZpbmUgTElOVVhfUENJX1RQSF9IXFxuIFxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcGNpX3JlZ3MuaFxcdTAwM2VcXG4rXFxuIC8qXFxuICAqIEFjY29yZGluZyB0byB0aGUgRUNOIGZvciBQQ0kgRmlybXdhcmUgU3BlYywgU3RlZXJpbmcgVGFnIGNhbiBiZSBkaWZmZXJlbnRcXG4gICogZGVwZW5kaW5nIG9uIHRoZSBtZW1vcnkgdHlwZTogVm9sYXRpbGUgTWVtb3J5IG9yIFBlcnNpc3RlbnQgTWVtb3J5LiBXaGVuIGFcXG5AQCAtMzAsNiArMzIsOCBAQCB2b2lkIHBjaWVfZGlzYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYpO1xcbiBpbnQgcGNpZV9lbmFibGVfdHBoKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbW9kZSk7XFxuIHUxNiBwY2llX3RwaF9nZXRfc3RfdGFibGVfc2l6ZShzdHJ1Y3QgcGNpX2RldiAqcGRldik7XFxuIHUzMiBwY2llX3RwaF9nZXRfc3RfdGFibGVfbG9jKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTtcXG4rdTggcGNpZV90cGhfZW5hYmxlZF9yZXFfdHlwZShzdHJ1Y3QgcGNpX2RldiAqcGRldik7XFxuK3U4IHBjaWVfdHBoX2NvbXBsZXRlcl90eXBlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTtcXG4gI2Vsc2VcXG4gc3RhdGljIGlubGluZSBpbnQgcGNpZV90cGhfc2V0X3N0X2VudHJ5KHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbiBcXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgaW5kZXgsIHUxNiB0YWcpXFxuQEAgLTQxLDYgKzQ1LDEwIEBAIHN0YXRpYyBpbmxpbmUgaW50IHBjaWVfdHBoX2dldF9jcHVfc3Qoc3RydWN0IHBjaV9kZXYgKmRldixcXG4gc3RhdGljIGlubGluZSB2b2lkIHBjaWVfZGlzYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYpIHsgfVxcbiBzdGF0aWMgaW5saW5lIGludCBwY2llX2VuYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBtb2RlKVxcbiB7IHJldHVybiAtRUlOVkFMOyB9XFxuK3N0YXRpYyBpbmxpbmUgdTggcGNpZV90cGhfZW5hYmxlZF9yZXFfdHlwZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4reyByZXR1cm4gUENJX1RQSF9SRVFfRElTQUJMRTsgfVxcbitzdGF0aWMgaW5saW5lIHU4IHBjaWVfdHBoX2NvbXBsZXRlcl90eXBlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbit7IHJldHVybiBQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfTk9ORTsgfVxcbiAjZW5kaWZcXG4gXFxuICNlbmRpZiAvKiBMSU5VWF9QQ0lfVFBIX0ggKi9cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaCBiL2luY2x1ZGUvdWFwaS9saW51eC92ZmlvLmhcXG5pbmRleCA1ZGU2MThhM2E1ZWVlZS4uMmQzMGJhNDNlMmNmZjUgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaFxcbisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC92ZmlvLmhcXG5AQCAtMTUzNCw2ICsxNTM0LDQzIEBAIHN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX2RtYV9idWYge1xcbiAgKi9cXG4gI2RlZmluZSBWRklPX0RFVklDRV9GRUFUVVJFX01JR19QUkVDT1BZX0lORk92MiAgMTJcXG4gXFxuKy8qKlxcbisgKiBVcG9uIFZGSU9fREVWSUNFX0ZFQVRVUkVfU0VUIGFzc29jaWF0ZSBUUEggKFRMUCBQcm9jZXNzaW5nIEhpbnRzKSBtZXRhZGF0YVxcbisgKiB3aXRoIGEgdmZpby1leHBvcnRlZCBkbWEtYnVmLiBUaGUgZG1hLWJ1ZiBtdXN0IGhhdmUgYmVlbiBjcmVhdGVkIGJ5XFxuKyAqIFZGSU9fREVWSUNFX0ZFQVRVUkVfRE1BX0JVRiBvbiB0aGlzIGRldmljZSwgYW5kIHRoZSBkZXZpY2UgbXVzdCByZXBvcnRcXG4rICogVFBIIENvbXBsZXRlciBzdXBwb3J0IGluIERldmljZSBDYXBhYmlsaXRpZXMgMiAoYml0cyAxMzoxMik7IHJlcXVlc3RzXFxuKyAqIGNhcnJ5aW5nIFZGSU9fRE1BX0JVRl9UUEhfU1RfRVhUIGFkZGl0aW9uYWxseSByZXF1aXJlIHRoZSBkZXZpY2UgdG9cXG4rICogcmVwb3J0IHRoZSBFeHRlbmRlZCBUUEggQ29tcGxldGVyIGVuY29kaW5nLiBPdGhlcndpc2UgdGhlIGlvY3RsXFxuKyAqIHJldHVybnMgLUVPUE5PVFNVUFAuXFxuKyAqXFxuKyAqIGRtYWJ1Zl9mZCBpcyB0aGUgZmlsZSBkZXNjcmlwdG9yIHJldHVybmVkIGJ5IFZGSU9fREVWSUNFX0ZFQVRVUkVfRE1BX0JVRi5cXG4rICpcXG4rICogOC1iaXQgU1QgKHN0ZWVyaW5nX3RhZykgYW5kIDE2LWJpdCBFeHRlbmRlZCBTVCAoc3RlZXJpbmdfdGFnX2V4dCkgYXJlXFxuKyAqIGRpc3RpbmN0IG5hbWVzcGFjZXMuIFVzZXJzcGFjZSBzdXBwbGllcyB3aGljaGV2ZXIgdmFsdWVzIGFyZSB2YWxpZCBhbmQgc2V0c1xcbisgKiB0aGUgbWF0Y2hpbmcgVkZJT19ETUFfQlVGX1RQSF9TVCAvIFZGSU9fRE1BX0JVRl9UUEhfU1RfRVhUIGJpdHMgaW4gQGZsYWdzO1xcbisgKiBhbiBpbXBvcnRlciByZXF1ZXN0cyBvbmUgbmFtZXNwYWNlIGFuZCByZWNlaXZlcyB0aGUgbWF0Y2hpbmcgdmFsdWUuXFxuKyAqXFxuKyAqIEBmbGFncyA9PSAwIG1hcmtzIGFueSBwcmV2aW91c2x5IHB1Ymxpc2hlZCBTVCAvIEV4dGVuZGVkLVNUIGFzIGludmFsaWRcXG4rICogZm9yIGZ1dHVyZSBQQ0kgVFBIIHF1ZXJpZXMgb24gdGhpcyBkbWEtYnVmLlxcbisgKlxcbisgKiBwaCBpcyB0aGUgMi1iaXQgVExQIFByb2Nlc3NpbmcgSGludCBhbmQgbXVzdCBiZSBpbiB0aGUgcmFuZ2UgWzAsIDNdLlxcbisgKlxcbisgKiBVc2Vyc3BhY2UgbXVzdCBwdWJsaXNoIFRQSCBiZWZvcmUgaGFuZGluZyB0aGUgZG1hLWJ1ZiBmZCB0byBhbiBpbXBvcnRlci5cXG4rICogQ2FsbGluZyBTRVQgYWdhaW4gcmVwbGFjZXMgdGhlIHB1Ymxpc2hlZCB2YWx1ZXMuXFxuKyAqL1xcbisjZGVmaW5lIFZGSU9fREVWSUNFX0ZFQVRVUkVfRE1BX0JVRl9UUEggMTNcXG4rXFxuKyNkZWZpbmUgVkZJT19ETUFfQlVGX1RQSF9TVFxcdFxcdCgxIFxcdTAwM2NcXHUwMDNjIDApXFxuKyNkZWZpbmUgVkZJT19ETUFfQlVGX1RQSF9TVF9FWFRcXHRcXHQoMSBcXHUwMDNjXFx1MDAzYyAxKVxcbitcXG4rc3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfZG1hX2J1Zl90cGgge1xcbitcXHRfX3MzMlxcdGRtYWJ1Zl9mZDtcXG4rXFx0X191MzJcXHRmbGFncztcXG4rXFx0X191MTZcXHRzdGVlcmluZ190YWdfZXh0O1xcbitcXHRfX3U4XFx0c3RlZXJpbmdfdGFnO1xcbitcXHRfX3U4XFx0cGg7XFxuK307XFxuK1xcbiAvKiAtLS0tLS0tLSBBUEkgZm9yIFR5cGUxIFZGSU8gSU9NTVUgLS0tLS0tLS0gKi9cXG4gXFxuIC8qKlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQxOToxMzozOC42NTYxNTA1MzRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU2MDg0MzUwMzcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBDSUVfVFBIXCIsXG4gICAgXCJWRklPX1BDSVwiLFxuICAgIFwiUENJX1AyUERNQVwiLFxuICAgIFwiTUxYNV9JTkZJTklCQU5EXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWZfdHBoXCIsXG4gICAgXCJ2ZmlvX3BjaV9kbWFfYnVmX2dldF9wY2lfdHBoXCIsXG4gICAgXCJkbWFfYnVmX2dldF9wY2lfdHBoXCIsXG4gICAgXCJwY2llX3RwaF9lbmFibGVkX3JlcV90eXBlXCIsXG4gICAgXCJwY2llX3RwaF9jb21wbGV0ZXJfdHlwZVwiLFxuICAgIFwibWx4NV9zdF9hbGxvY19pbmRleF9ieV90YWdcIixcbiAgICBcIm1seDVfc3RfZ2V0X2luZGV4XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBWRklPIGlvY3RsIGZlYXR1cmUgYFZGSU9fREVWSUNFX0ZFQVRVUkVfRE1BX0JVRl9UUEhgIHRvIGFzc29jaWF0ZSBQQ0llIFRQSCAoVExQIFByb2Nlc3NpbmcgSGludHMpIG1ldGFkYXRhIHdpdGggYSBETUEtQlVGLiBJdCBhbHNvIGFkZHMgYSBuZXcgYGdldF9wY2lfdHBoYCBjYWxsYmFjayB0byBgZG1hX2J1Zl9vcHNgIGFuZCBpbXBsZW1lbnRzIGl0IGZvciBWRklPIFBDSSBETUEtQlVGcy4gVGhlIE1lbGxhbm94IG1seDUgSW5maW5pYmFuZCBkcml2ZXIgaXMgbW9kaWZpZWQgdG8gcXVlcnkgYW5kIHVzZSB0aGlzIG1ldGFkYXRhLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgRE1BLUJVRiwgVkZJTywgYW5kIG1seDUgbG9naWMgdGhhdCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDIxOGIyNjk5NmZmYTRjOThiYzUxMzA4Y2M5YzA3ZWUwMjU4MjVhN2JcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1biAyMiAxOToxMzozNiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hLWJ1Zi9kbWEtYnVmLmMgYi9kcml2ZXJzL2RtYS1idWYvZG1hLWJ1Zi5jXG5pbmRleCBkNTA0YzYzNmRjMjk0ZS4uN2E0YzliMGQ1ZGFiNDYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2RtYS1idWYvZG1hLWJ1Zi5jXG4rKysgYi9kcml2ZXJzL2RtYS1idWYvZG1hLWJ1Zi5jXG5AQCAtMTE0NCw2ICsxMTQ0LDMxIEBAIHZvaWQgZG1hX2J1Zl91bnBpbihzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2gpXG4gfVxuIEVYUE9SVF9TWU1CT0xfTlNfR1BMKGRtYV9idWZfdW5waW4sIFwiRE1BX0JVRlwiKTtcbiBcbisvKipcbisgKiBkbWFfYnVmX2dldF9wY2lfdHBoIC0gUmV0cmlldmUgUENJZSBUTFAgUHJvY2Vzc2luZyBIaW50IChUUEgpIG1ldGFkYXRhXG4rICogQGRtYWJ1ZjogRE1BIGJ1ZmZlciB0byBxdWVyeVxuKyAqIEBleHRlbmRlZDogZmFsc2UgZm9yIDgtYml0IFNULCB0cnVlIGZvciAxNi1iaXQgRXh0ZW5kZWQgU1RcbisgKiBAc3RlZXJpbmdfdGFnOiByZXR1cm5zIHRoZSByYXcgc3RlZXJpbmcgdGFnIGZvciB0aGUgcmVxdWVzdGVkIG5hbWVzcGFjZVxuKyAqIEBwaDogcmV0dXJucyB0aGUgVFBIIHByb2Nlc3NpbmcgaGludFxuKyAqXG4rICogV3JhcHBlciBmb3IgdGhlIG9wdGlvbmFsIFx1MDAyNmRtYV9idWZfb3BzLmdldF9wY2lfdHBoIGNhbGxiYWNrLlxuKyAqXG4rICogTXVzdCBiZSBjYWxsZWQgd2l0aCBcdTAwMjZkbWFfYnVmLnJlc3YgaGVsZC4gUmV0dXJucyAtRU9QTk9UU1VQUCBpZiB0aGVcbisgKiBleHBvcnRlciBkb2VzIG5vdCBpbXBsZW1lbnQgdGhlIGNhbGxiYWNrIG9yIGhhcyBubyBtZXRhZGF0YSBmb3IgdGhlXG4rICogcmVxdWVzdGVkIG5hbWVzcGFjZS5cbisgKi9cbitpbnQgZG1hX2J1Zl9nZXRfcGNpX3RwaChzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLCBib29sIGV4dGVuZGVkLFxuK1x0XHRcdHUxNiAqc3RlZXJpbmdfdGFnLCB1OCAqcGgpXG4re1xuK1x0ZG1hX3Jlc3ZfYXNzZXJ0X2hlbGQoZG1hYnVmLVx1MDAzZXJlc3YpO1xuK1xuK1x0aWYgKCFkbWFidWYtXHUwMDNlb3BzLVx1MDAzZWdldF9wY2lfdHBoKVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHRyZXR1cm4gZG1hYnVmLVx1MDAzZW9wcy1cdTAwM2VnZXRfcGNpX3RwaChkbWFidWYsIGV4dGVuZGVkLCBzdGVlcmluZ190YWcsIHBoKTtcbit9XG4rRVhQT1JUX1NZTUJPTF9OU19HUEwoZG1hX2J1Zl9nZXRfcGNpX3RwaCwgXCJETUFfQlVGXCIpO1xuK1xuIC8qKlxuICAqIGRtYV9idWZfbWFwX2F0dGFjaG1lbnQgLSBSZXR1cm5zIHRoZSBzY2F0dGVybGlzdCB0YWJsZSBvZiB0aGUgYXR0YWNobWVudDtcbiAgKiBtYXBwZWQgaW50byBfZGV2aWNlXyBhZGRyZXNzIHNwYWNlLiBJcyBhIHdyYXBwZXIgZm9yIG1hcF9kbWFfYnVmKCkgb2YgdGhlXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDUvbWFpbi5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDUvbWFpbi5jXG5pbmRleCAwMjgwOTExNGZjNzlhZi4uYTJiNDk3ZjZiMTZiZGMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NS9tYWluLmNcbisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg1L21haW4uY1xuQEAgLTYwLDYgKzYwLDcgQEBcbiBNT0RVTEVfQVVUSE9SKFwiRWxpIENvaGVuIFx1MDAzY2VsaUBtZWxsYW5veC5jb21cdTAwM2VcIik7XG4gTU9EVUxFX0RFU0NSSVBUSU9OKFwiTWVsbGFub3ggNXRoIGdlbmVyYXRpb24gbmV0d29yayBhZGFwdGVycyAoQ29ubmVjdFggc2VyaWVzKSBJQiBkcml2ZXJcIik7XG4gTU9EVUxFX0xJQ0VOU0UoXCJEdWFsIEJTRC9HUExcIik7XG4rTU9EVUxFX0lNUE9SVF9OUyhcIkRNQV9CVUZcIik7XG4gXG4gc3RydWN0IG1seDVfaWJfZXZlbnRfd29yayB7XG4gXHRzdHJ1Y3Qgd29ya19zdHJ1Y3RcdHdvcms7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDUvbXIuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg1L21yLmNcbmluZGV4IGU2Yjc0OTU1ZDk1ZGNkLi43YWNlZDNmNTU0NTYxZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg1L21yLmNcbisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg1L21yLmNcbkBAIC0zOSw2ICszOSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZGVsYXkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RtYS1idWYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RtYS1yZXN2LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9wY2ktdHBoLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NyZG1hL2ZybXJfcG9vbHMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3JkbWEvaWJfdW1lbV9vZHAuaFx1MDAzZVxuICNpbmNsdWRlIFwiZG0uaFwiXG5AQCAtMTY3LDYgKzE2OCwzMiBAQCBzdGF0aWMgaW50IGdldF91bmNoYW5nZWFibGVfYWNjZXNzX2ZsYWdzKHN0cnVjdCBtbHg1X2liX2RldiAqZGV2LFxuICNkZWZpbmUgTUxYNV9GUk1SX1BPT0xTX0tFUk5FTF9LRVlfUEhfTUFTSyBHRU5NQVNLX1VMTCgyMywgMTYpXG4gI2RlZmluZSBNTFg1X0ZSTVJfUE9PTFNfS0VSTkVMX0tFWV9TVF9JTkRFWF9NQVNLIEdFTk1BU0tfVUxMKDE1LCAwKVxuIFxuK3N0YXRpYyBpbnQgbWx4NV9pYl9nZXRfZnJtcl9zdF9oYW5kbGVfcmVmKHN0cnVjdCBtbHg1X2liX2RldiAqZGV2LFxuK1x0XHRcdFx0XHQgIHUxNiBzdF9pbmRleClcbit7XG4rXHRpZiAoc3RfaW5kZXggPT0gTUxYNV9NS0NfUENJRV9UUEhfTk9fU1RFRVJJTkdfVEFHX0lOREVYKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdHJldHVybiBtbHg1X3N0X2dldF9pbmRleChkZXYtXHUwMDNlbWRldiwgc3RfaW5kZXgpO1xuK31cbitcbitzdGF0aWMgdm9pZCBtbHg1X2liX3B1dF9zdF9pbmRleF9yZWYoc3RydWN0IG1seDVfaWJfZGV2ICpkZXYsIHUxNiBzdF9pbmRleClcbit7XG4rXHRpZiAoc3RfaW5kZXggPT0gTUxYNV9NS0NfUENJRV9UUEhfTk9fU1RFRVJJTkdfVEFHX0lOREVYKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRtbHg1X3N0X2RlYWxsb2NfaW5kZXgoZGV2LVx1MDAzZW1kZXYsIHN0X2luZGV4KTtcbit9XG4rXG4rc3RhdGljIHZvaWQgbWx4NV9pYl9wdXRfZnJtcl9zdF9oYW5kbGVfcmVmKHN0cnVjdCBtbHg1X2liX2RldiAqZGV2LFxuK1x0XHRcdFx0XHQgICB1NjQga2VybmVsX3ZlbmRvcl9rZXkpXG4re1xuK1x0dTE2IHN0X2luZGV4ID0gRklFTERfR0VUKE1MWDVfRlJNUl9QT09MU19LRVJORUxfS0VZX1NUX0lOREVYX01BU0ssXG4rXHRcdFx0XHQga2VybmVsX3ZlbmRvcl9rZXkpO1xuK1xuK1x0bWx4NV9pYl9wdXRfc3RfaW5kZXhfcmVmKGRldiwgc3RfaW5kZXgpO1xuK31cbitcbiBzdGF0aWMgc3RydWN0IG1seDVfaWJfbXIgKlxuIF9tbHg1X2ZybXJfcG9vbF9hbGxvYyhzdHJ1Y3QgbWx4NV9pYl9kZXYgKmRldiwgc3RydWN0IGliX3VtZW0gKnVtZW0sXG4gXHRcdCAgICAgIGludCBhY2Nlc3NfZmxhZ3MsIGludCBhY2Nlc3NfbW9kZSxcbkBAIC0yMTgsNyArMjQ1LDkgQEAgc3RydWN0IG1seDVfaWJfbXIgKm1seDVfbXJfY2FjaGVfYWxsb2Moc3RydWN0IG1seDVfaWJfZGV2ICpkZXYsXG4gXHRcdFx0XHQgICAgICAwIDpcbiBcdFx0XHRcdCAgICAgIE1MWDVfRlJNUl9QT09MU19LRVlfQUNDRVNTX01PREVfS1NNX01BU0ssXG4gXHRcdC5udW1fZG1hX2Jsb2NrcyA9IG5kZXNjcyxcbi1cdFx0Lmtlcm5lbF92ZW5kb3Jfa2V5ID0gMCwgLyogbm8gUEggYW5kIG5vIFNUIGluZGV4ICovXG4rXHRcdC5rZXJuZWxfdmVuZG9yX2tleSA9XG4rXHRcdFx0RklFTERfUFJFUChNTFg1X0ZSTVJfUE9PTFNfS0VSTkVMX0tFWV9TVF9JTkRFWF9NQVNLLFxuK1x0XHRcdFx0ICAgTUxYNV9NS0NfUENJRV9UUEhfTk9fU1RFRVJJTkdfVEFHX0lOREVYKSxcbiBcdH07XG4gXHRzdHJ1Y3QgbWx4NV9pYl9tciAqbXI7XG4gXHRpbnQgcmV0O1xuQEAgLTMzNSw2ICszNjQsNyBAQCBzdGF0aWMgaW50IG1seDVyX2J1aWxkX2ZybXJfa2V5KHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSxcbiBcdFx0Z2V0X3VuY2hhbmdlYWJsZV9hY2Nlc3NfZmxhZ3MoZGV2LCBpbi1cdTAwM2VhY2Nlc3NfZmxhZ3MpO1xuIFx0b3V0LVx1MDAzZXZlbmRvcl9rZXkgPSBpbi1cdTAwM2V2ZW5kb3Jfa2V5O1xuIFx0b3V0LVx1MDAzZW51bV9kbWFfYmxvY2tzID0gaW4tXHUwMDNlbnVtX2RtYV9ibG9ja3M7XG4rXHRvdXQtXHUwMDNla2VybmVsX3ZlbmRvcl9rZXkgPSBpbi1cdTAwM2VrZXJuZWxfdmVuZG9yX2tleTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbkBAIC01NTcsNiArNTg3LDkgQEAgc3RhdGljIHN0cnVjdCBtbHg1X2liX21yICpyZWdfY3JlYXRlKHN0cnVjdCBpYl9wZCAqcGQsIHN0cnVjdCBpYl91bWVtICp1bWVtLFxuIFx0bXItXHUwMDNlaWJtci5wZCA9IHBkO1xuIFx0bXItXHUwMDNlYWNjZXNzX2ZsYWdzID0gYWNjZXNzX2ZsYWdzO1xuIFx0bXItXHUwMDNlcGFnZV9zaGlmdCA9IG9yZGVyX2Jhc2VfMihwYWdlX3NpemUpO1xuK1x0bXItXHUwMDNlaWJtci5mcm1yLmtleS5rZXJuZWxfdmVuZG9yX2tleSA9XG4rXHRcdEZJRUxEX1BSRVAoTUxYNV9GUk1SX1BPT0xTX0tFUk5FTF9LRVlfU1RfSU5ERVhfTUFTSywgc3RfaW5kZXgpIHxcbitcdFx0RklFTERfUFJFUChNTFg1X0ZSTVJfUE9PTFNfS0VSTkVMX0tFWV9QSF9NQVNLLCBwaCk7XG4gXG4gXHRpbmxlbiA9IE1MWDVfU1RfU1pfQllURVMoY3JlYXRlX21rZXlfaW4pO1xuIFx0aWYgKHBvcHVsYXRlKVxuQEAgLTc1NSw2ICs3ODgsMTIgQEAgc3RhdGljIHN0cnVjdCBpYl9tciAqY3JlYXRlX3JlYWxfbXIoc3RydWN0IGliX3BkICpwZCwgc3RydWN0IGliX3VtZW0gKnVtZW0sXG4gXG4gXHR4bHRfd2l0aF91bXIgPSBtbHg1cl91bXJfY2FuX2xvYWRfcGFzKGRldiwgdW1lbS1cdTAwM2VsZW5ndGgpO1xuIFx0aWYgKHhsdF93aXRoX3Vtcikge1xuK1x0XHRlcnIgPSBtbHg1X2liX2dldF9mcm1yX3N0X2hhbmRsZV9yZWYoZGV2LCBzdF9pbmRleCk7XG4rXHRcdGlmIChlcnIpIHtcbitcdFx0XHRpYl91bWVtX3JlbGVhc2UodW1lbSk7XG4rXHRcdFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcbitcdFx0fVxuK1xuIFx0XHRtciA9IGFsbG9jX2NhY2hlYWJsZV9tcihwZCwgdW1lbSwgaW92YSwgYWNjZXNzX2ZsYWdzLFxuIFx0XHRcdFx0XHRNTFg1X01LQ19BQ0NFU1NfTU9ERV9NVFQsXG4gXHRcdFx0XHRcdHN0X2luZGV4LCBwaCk7XG5AQCAtNzY5LDYgKzgwOCw4IEBAIHN0YXRpYyBzdHJ1Y3QgaWJfbXIgKmNyZWF0ZV9yZWFsX21yKHN0cnVjdCBpYl9wZCAqcGQsIHN0cnVjdCBpYl91bWVtICp1bWVtLFxuIFx0XHRtdXRleF91bmxvY2soXHUwMDI2ZGV2LVx1MDAzZXNsb3dfcGF0aF9tdXRleCk7XG4gXHR9XG4gXHRpZiAoSVNfRVJSKG1yKSkge1xuK1x0XHRpZiAoeGx0X3dpdGhfdW1yKVxuK1x0XHRcdG1seDVfaWJfcHV0X3N0X2luZGV4X3JlZihkZXYsIHN0X2luZGV4KTtcbiBcdFx0aWJfdW1lbV9yZWxlYXNlKHVtZW0pO1xuIFx0XHRyZXR1cm4gRVJSX0NBU1QobXIpO1xuIFx0fVxuQEAgLTkwMyw2ICs5NDQsNTIgQEAgc3RhdGljIHN0cnVjdCBkbWFfYnVmX2F0dGFjaF9vcHMgbWx4NV9pYl9kbWFidWZfYXR0YWNoX29wcyA9IHtcbiBcdC5pbnZhbGlkYXRlX21hcHBpbmdzID0gbWx4NV9pYl9kbWFidWZfaW52YWxpZGF0ZV9jYixcbiB9O1xuIFxuK3N0YXRpYyB2b2lkIGdldF9wY2lfdHBoX21yX2RtYWJ1ZihzdHJ1Y3QgbWx4NV9pYl9kZXYgKmRldiwgc3RydWN0IGRtYV9idWYgKmRtYWJ1ZixcbitcdFx0XHRcdCAgdTE2ICpzdF9pbmRleCwgdTggKnBoKVxuK3tcbitcdHUxNiBsb2NhbF9zdF9pbmRleDtcbitcdHUxNiBzdGVlcmluZ190YWc7XG4rXHR1OCBsb2NhbF9waDtcbitcdGJvb2wgZXh0ZW5kZWQ7XG4rXHRpbnQgcmV0O1xuK1xuK1x0c3dpdGNoIChwY2llX3RwaF9lbmFibGVkX3JlcV90eXBlKGRldi1cdTAwM2VtZGV2LVx1MDAzZXBkZXYpKSB7XG4rXHRjYXNlIFBDSV9UUEhfUkVRX1RQSF9PTkxZOlxuK1x0XHRleHRlbmRlZCA9IGZhbHNlO1xuK1x0XHRicmVhaztcbitcdGNhc2UgUENJX1RQSF9SRVFfRVhUX1RQSDpcbitcdFx0ZXh0ZW5kZWQgPSB0cnVlO1xuK1x0XHRicmVhaztcbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdGRtYV9yZXN2X2xvY2soZG1hYnVmLVx1MDAzZXJlc3YsIE5VTEwpO1xuK1x0cmV0ID0gZG1hX2J1Zl9nZXRfcGNpX3RwaChkbWFidWYsIGV4dGVuZGVkLCBcdTAwMjZzdGVlcmluZ190YWcsIFx1MDAyNmxvY2FsX3BoKTtcbitcdGRtYV9yZXN2X3VubG9jayhkbWFidWYtXHUwMDNlcmVzdik7XG4rXHRpZiAocmV0KSB7XG4rXHRcdGlmIChyZXQgIT0gLUVPUE5PVFNVUFApXG4rXHRcdFx0bWx4NV9pYl9kYmcoZGV2LCBcImdldF9wY2lfdHBoIGZhaWxlZCAoJWQpXFxuXCIsIHJldCk7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdHJldCA9IG1seDVfc3RfYWxsb2NfaW5kZXhfYnlfdGFnKGRldi1cdTAwM2VtZGV2LCBzdGVlcmluZ190YWcsXG4rXHRcdFx0XHRcdCBcdTAwMjZsb2NhbF9zdF9pbmRleCk7XG4rXHRpZiAocmV0KSB7XG4rXHRcdG1seDVfaWJfZGJnKGRldiwgXCJzdF9hbGxvY19pbmRleF9ieV90YWcgZmFpbGVkICglZClcXG5cIiwgcmV0KTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0KnN0X2luZGV4ID0gbG9jYWxfc3RfaW5kZXg7XG4rXHQqcGggPSBsb2NhbF9waDtcbit9XG4rXG4rc3RhdGljIHZvaWQgbWx4NV9pYl9tcl9wdXRfZnJtcl9zdF9oYW5kbGVfcmVmKHN0cnVjdCBtbHg1X2liX21yICptcilcbit7XG4rXHRtbHg1X2liX3B1dF9mcm1yX3N0X2hhbmRsZV9yZWYobXJfdG9fbWRldihtciksXG4rXHRcdFx0XHQgICAgICAgbXItXHUwMDNlaWJtci5mcm1yLmtleS5rZXJuZWxfdmVuZG9yX2tleSk7XG4rfVxuK1xuIHN0YXRpYyBzdHJ1Y3QgaWJfbXIgKlxuIHJlZ191c2VyX21yX2RtYWJ1ZihzdHJ1Y3QgaWJfcGQgKnBkLCBzdHJ1Y3QgZGV2aWNlICpkbWFfZGV2aWNlLFxuIFx0XHQgICB1NjQgb2Zmc2V0LCB1NjQgbGVuZ3RoLCB1NjQgdmlydF9hZGRyLFxuQEAgLTk0NSwxMiArMTAzMiwyMiBAQCByZWdfdXNlcl9tcl9kbWFidWYoc3RydWN0IGliX3BkICpwZCwgc3RydWN0IGRldmljZSAqZG1hX2RldmljZSxcbiBcdFx0cGggPSBkbWFoLVx1MDAzZXBoO1xuIFx0XHRpZiAoZG1haC1cdTAwM2V2YWxpZF9maWVsZHMgXHUwMDI2IEJJVChJQl9ETUFIX0NQVV9JRF9FWElTVFMpKVxuIFx0XHRcdHN0X2luZGV4ID0gbWRtYWgtXHUwMDNlc3RfaW5kZXg7XG4rXG4rXHRcdGVyciA9IG1seDVfaWJfZ2V0X2ZybXJfc3RfaGFuZGxlX3JlZihkZXYsIHN0X2luZGV4KTtcbitcdFx0aWYgKGVycikge1xuK1x0XHRcdGliX3VtZW1fcmVsZWFzZShcdTAwMjZ1bWVtX2RtYWJ1Zi1cdTAwM2V1bWVtKTtcbitcdFx0XHRyZXR1cm4gRVJSX1BUUihlcnIpO1xuK1x0XHR9XG4rXHR9IGVsc2Uge1xuK1x0XHRnZXRfcGNpX3RwaF9tcl9kbWFidWYoZGV2LCB1bWVtX2RtYWJ1Zi1cdTAwM2VhdHRhY2gtXHUwMDNlZG1hYnVmLFxuK1x0XHRcdFx0ICAgICAgXHUwMDI2c3RfaW5kZXgsIFx1MDAyNnBoKTtcbiBcdH1cbiBcbiBcdG1yID0gYWxsb2NfY2FjaGVhYmxlX21yKHBkLCBcdTAwMjZ1bWVtX2RtYWJ1Zi1cdTAwM2V1bWVtLCB2aXJ0X2FkZHIsXG4gXHRcdFx0XHRhY2Nlc3NfZmxhZ3MsIGFjY2Vzc19tb2RlLFxuIFx0XHRcdFx0c3RfaW5kZXgsIHBoKTtcbiBcdGlmIChJU19FUlIobXIpKSB7XG4rXHRcdG1seDVfaWJfcHV0X3N0X2luZGV4X3JlZihkZXYsIHN0X2luZGV4KTtcbiBcdFx0aWJfdW1lbV9yZWxlYXNlKFx1MDAyNnVtZW1fZG1hYnVmLVx1MDAzZXVtZW0pO1xuIFx0XHRyZXR1cm4gRVJSX0NBU1QobXIpO1xuIFx0fVxuQEAgLTE0MDUsNiArMTUwMiw3IEBAIHN0YXRpYyBpbnQgbWx4NXJfaGFuZGxlX21rZXlfY2xlYW51cChzdHJ1Y3QgbWx4NV9pYl9tciAqbXIpXG4gXHRpZiAobXItXHUwMDNlaWJtci5mcm1yLnBvb2wpIHtcbiBcdFx0aWYgKCFtbHg1X3Vtcl9yZXZva2VfbXJfd2l0aF9sb2NrKG1yKSkge1xuIFx0XHRcdGliX2ZybXJfcG9vbF9wdXNoKG1yLVx1MDAzZWlibXIuZGV2aWNlLCBcdTAwMjZtci1cdTAwM2VpYm1yKTtcbitcdFx0XHRtbHg1X2liX21yX3B1dF9mcm1yX3N0X2hhbmRsZV9yZWYobXIpO1xuIFx0XHRcdHJldHVybiAwO1xuIFx0XHR9XG4gXHR9XG5AQCAtMTQzMiw2ICsxNTMwLDkgQEAgc3RhdGljIGludCBtbHg1cl9oYW5kbGVfbWtleV9jbGVhbnVwKHN0cnVjdCBtbHg1X2liX21yICptcilcbiBcdGlmIChtci1cdTAwM2VpYm1yLmZybXIucG9vbCBcdTAwMjZcdTAwMjYgIXJldClcbiBcdFx0aWJfZnJtcl9wb29sX2Ryb3AoXHUwMDI2bXItXHUwMDNlaWJtcik7XG4gXG4rXHRpZiAoIXJldClcbitcdFx0bWx4NV9pYl9tcl9wdXRfZnJtcl9zdF9oYW5kbGVfcmVmKG1yKTtcbitcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9saWIvc3QuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9saWIvc3QuY1xuaW5kZXggOTk3YmU5MWYwYTEzNWEuLmJmMTRhN2E2ZGYxNWUxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi9zdC5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGliL3N0LmNcbkBAIC05MiwyMyArOTIsMTggQEAgdm9pZCBtbHg1X3N0X2Rlc3Ryb3koc3RydWN0IG1seDVfY29yZV9kZXYgKmRldilcbiBcdGtmcmVlKHN0KTtcbiB9XG4gXG4taW50IG1seDVfc3RfYWxsb2NfaW5kZXgoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgZW51bSB0cGhfbWVtX3R5cGUgbWVtX3R5cGUsXG4tXHRcdFx0dW5zaWduZWQgaW50IGNwdV91aWQsIHUxNiAqc3RfaW5kZXgpXG4raW50IG1seDVfc3RfYWxsb2NfaW5kZXhfYnlfdGFnKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIHUxNiB0YWcsXG4rXHRcdFx0ICAgICAgIHUxNiAqc3RfaW5kZXgpXG4ge1xuIFx0c3RydWN0IG1seDVfc3RfaWR4X2RhdGEgKmlkeF9kYXRhO1xuIFx0c3RydWN0IG1seDVfc3QgKnN0ID0gZGV2LVx1MDAzZXN0O1xuIFx0dW5zaWduZWQgbG9uZyBpbmRleDtcbiBcdHUzMiB4YV9pZDtcbi1cdHUxNiB0YWc7XG4tXHRpbnQgcmV0O1xuK1x0aW50IHJldCA9IDA7XG4gXG4gXHRpZiAoIXN0KVxuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXG4tXHRyZXQgPSBwY2llX3RwaF9nZXRfY3B1X3N0KGRldi1cdTAwM2VwZGV2LCBtZW1fdHlwZSwgY3B1X3VpZCwgXHUwMDI2dGFnKTtcbi1cdGlmIChyZXQpXG4tXHRcdHJldHVybiByZXQ7XG4tXG4gXHRpZiAoc3QtXHUwMDNlZGlyZWN0X21vZGUpIHtcbiBcdFx0KnN0X2luZGV4ID0gdGFnO1xuIFx0XHRyZXR1cm4gMDtcbkBAIC0xNTIsOCArMTQ3LDQ2IEBAIGludCBtbHg1X3N0X2FsbG9jX2luZGV4KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIGVudW0gdHBoX21lbV90eXBlIG1lbV90eXBlLFxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnN0LVx1MDAzZWxvY2spO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4rRVhQT1JUX1NZTUJPTF9HUEwobWx4NV9zdF9hbGxvY19pbmRleF9ieV90YWcpO1xuK1xuK2ludCBtbHg1X3N0X2FsbG9jX2luZGV4KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIGVudW0gdHBoX21lbV90eXBlIG1lbV90eXBlLFxuK1x0XHRcdHVuc2lnbmVkIGludCBjcHVfdWlkLCB1MTYgKnN0X2luZGV4KVxuK3tcbitcdHUxNiB0YWc7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cmV0ID0gcGNpZV90cGhfZ2V0X2NwdV9zdChkZXYtXHUwMDNlcGRldiwgbWVtX3R5cGUsIGNwdV91aWQsIFx1MDAyNnRhZyk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0dXJuIG1seDVfc3RfYWxsb2NfaW5kZXhfYnlfdGFnKGRldiwgdGFnLCBzdF9pbmRleCk7XG4rfVxuIEVYUE9SVF9TWU1CT0xfR1BMKG1seDVfc3RfYWxsb2NfaW5kZXgpO1xuIFxuK2ludCBtbHg1X3N0X2dldF9pbmRleChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCB1MTYgc3RfaW5kZXgpXG4re1xuK1x0c3RydWN0IG1seDVfc3RfaWR4X2RhdGEgKmlkeF9kYXRhO1xuK1x0c3RydWN0IG1seDVfc3QgKnN0ID0gZGV2LVx1MDAzZXN0O1xuK1x0aW50IHJldCA9IDA7XG4rXG4rXHRpZiAoIXN0KVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHRpZiAoc3QtXHUwMDNlZGlyZWN0X21vZGUpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZzdC1cdTAwM2Vsb2NrKTtcbitcdGlkeF9kYXRhID0geGFfbG9hZChcdTAwMjZzdC1cdTAwM2VpZHhfeGEsIHN0X2luZGV4KTtcbitcdGlmIChXQVJOX09OX09OQ0UoIWlkeF9kYXRhKSlcbitcdFx0cmV0ID0gLUVJTlZBTDtcbitcdGVsc2VcbitcdFx0cmVmY291bnRfaW5jKFx1MDAyNmlkeF9kYXRhLVx1MDAzZXVzZWNvdW50KTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZzdC1cdTAwM2Vsb2NrKTtcbitcbitcdHJldHVybiByZXQ7XG4rfVxuK0VYUE9SVF9TWU1CT0xfR1BMKG1seDVfc3RfZ2V0X2luZGV4KTtcbitcbiBpbnQgbWx4NV9zdF9kZWFsbG9jX2luZGV4KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIHUxNiBzdF9pbmRleClcbiB7XG4gXHRzdHJ1Y3QgbWx4NV9zdF9pZHhfZGF0YSAqaWR4X2RhdGE7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvdHBoLmMgYi9kcml2ZXJzL3BjaS90cGguY1xuaW5kZXggOTExNDVlOGQ5ZDk1MTIuLjcxN2I0N2QxZDljYWNlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9wY2kvdHBoLmNcbisrKyBiL2RyaXZlcnMvcGNpL3RwaC5jXG5AQCAtMTc0LDYgKzE3NCw1MSBAQCB1MzIgcGNpZV90cGhfZ2V0X3N0X3RhYmxlX2xvYyhzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiB9XG4gRVhQT1JUX1NZTUJPTChwY2llX3RwaF9nZXRfc3RfdGFibGVfbG9jKTtcbiBcbisvKipcbisgKiBwY2llX3RwaF9lbmFibGVkX3JlcV90eXBlIC0gUmV0dXJuIHRoZSBkZXZpY2UncyBlbmFibGVkIFRQSCByZXF1ZXN0ZXIgdHlwZVxuKyAqIEBwZGV2OiBQQ0kgZGV2aWNlIHRvIHF1ZXJ5XG4rICpcbisgKiBSZXR1cm46IFBDSV9UUEhfUkVRX0RJU0FCTEUsIFBDSV9UUEhfUkVRX1RQSF9PTkxZIG9yIFBDSV9UUEhfUkVRX0VYVF9UUEguXG4rICovXG4rdTggcGNpZV90cGhfZW5hYmxlZF9yZXFfdHlwZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbit7XG4rXHRyZXR1cm4gcGRldi1cdTAwM2V0cGhfcmVxX3R5cGU7XG4rfVxuK0VYUE9SVF9TWU1CT0wocGNpZV90cGhfZW5hYmxlZF9yZXFfdHlwZSk7XG4rXG4rLyoqXG4rICogcGNpZV90cGhfY29tcGxldGVyX3R5cGUgLSBSZXR1cm4gdGhlIGRldmljZSdzIFRQSCBDb21wbGV0ZXIgc3VwcG9ydFxuKyAqIEBwZGV2OiBQQ0kgZGV2aWNlIHRvIHF1ZXJ5XG4rICpcbisgKiBSZWFkcyB0aGUgXCJUUEggQ29tcGxldGVyIFN1cHBvcnRlZFwiIGZpZWxkIChiaXRzIDEzOjEyKSBvZiBEZXZpY2VcbisgKiBDYXBhYmlsaXRpZXMgMi4gVGhlIHJlc2VydmVkIDBiMTAgZW5jb2RpbmcgaXMgZm9sZGVkIGludG9cbisgKiBcIm5vdCBzdXBwb3J0ZWRcIiBzbyBjYWxsZXJzIG9ubHkgbmVlZCB0byBjb21wYXJlIGFnYWluc3QgdGhlIHRocmVlXG4rICogZGVmaW5lZCB2YWx1ZXMuXG4rICpcbisgKiBSZXR1cm46IG9uZSBvZiAlUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX05PTkUsXG4rICogICAgICAgICAlUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX1RQSF9PTkxZIG9yXG4rICogICAgICAgICAlUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX0VYVF9UUEguXG4rICovXG4rdTggcGNpZV90cGhfY29tcGxldGVyX3R5cGUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4re1xuK1x0dTMyIHJlZztcbitcbitcdGlmIChwY2llX2NhcGFiaWxpdHlfcmVhZF9kd29yZChwZGV2LCBQQ0lfRVhQX0RFVkNBUDIsIFx1MDAyNnJlZykpXG4rXHRcdHJldHVybiBQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfTk9ORTtcbitcdGlmIChQQ0lfUE9TU0lCTEVfRVJST1IocmVnKSlcbitcdFx0cmV0dXJuIFBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9OT05FO1xuK1xuK1x0c3dpdGNoIChGSUVMRF9HRVQoUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX01BU0ssIHJlZykpIHtcbitcdGNhc2UgUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX1RQSF9PTkxZOlxuK1x0XHRyZXR1cm4gUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX1RQSF9PTkxZO1xuK1x0Y2FzZSBQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfRVhUX1RQSDpcbitcdFx0cmV0dXJuIFBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9FWFRfVFBIO1xuK1x0ZGVmYXVsdDpcbitcdFx0cmV0dXJuIFBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9OT05FO1xuK1x0fVxuK31cbitFWFBPUlRfU1lNQk9MKHBjaWVfdHBoX2NvbXBsZXRlcl90eXBlKTtcbitcbiAvKlxuICAqIFJldHVybiB0aGUgc2l6ZSBvZiBTVCB0YWJsZS4gSWYgU1QgdGFibGUgaXMgbm90IGluIFRQSCBSZXF1ZXN0ZXIgRXh0ZW5kZWRcbiAgKiBDYXBhYmlsaXR5IHNwYWNlLCByZXR1cm4gMC4gT3RoZXJ3aXNlIHJldHVybiB0aGUgU1QgVGFibGUgU2l6ZSArIDEuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuY1xuaW5kZXggYTI4ZjFlOTkzNjJjMWUuLmM3ZDY5MDJiYzYxYjA3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmNcbisrKyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jXG5AQCAtMTU3Miw2ICsxNTcyLDkgQEAgaW50IHZmaW9fcGNpX2NvcmVfaW9jdGxfZmVhdHVyZShzdHJ1Y3QgdmZpb19kZXZpY2UgKmRldmljZSwgdTMyIGZsYWdzLFxuIFx0XHRyZXR1cm4gdmZpb19wY2lfY29yZV9mZWF0dXJlX3Rva2VuKHZkZXYsIGZsYWdzLCBhcmcsIGFyZ3N6KTtcbiBcdGNhc2UgVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGOlxuIFx0XHRyZXR1cm4gdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWYodmRldiwgZmxhZ3MsIGFyZywgYXJnc3opO1xuK1x0Y2FzZSBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUZfVFBIOlxuK1x0XHRyZXR1cm4gdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWZfdHBoKHZkZXYsIGZsYWdzLCBhcmcsXG4rXHRcdFx0XHRcdFx0XHQgYXJnc3opO1xuIFx0ZGVmYXVsdDpcbiBcdFx0cmV0dXJuIC1FTk9UVFk7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmNcbmluZGV4IGMxNmY0NjBjMDFkNjgxLi5kNmY1ZGQzMjEwMDA5YyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmNcbisrKyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmNcbkBAIC0zLDYgKzMsNyBAQFxuICAqL1xuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RtYS1idWYtbWFwcGluZy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGNpLXAycGRtYS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcGNpLXRwaC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZG1hLXJlc3YuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwidmZpb19wY2lfcHJpdi5oXCJcbkBAIC0xOSw3ICsyMCwxNCBAQCBzdHJ1Y3QgdmZpb19wY2lfZG1hX2J1ZiB7XG4gXHR1MzIgbnJfcmFuZ2VzO1xuIFx0c3RydWN0IGtyZWYga3JlZjtcbiBcdHN0cnVjdCBjb21wbGV0aW9uIGNvbXA7XG4tXHR1OCByZXZva2VkIDogMTtcbitcbitcdC8qIFByb3RlY3RlZCBieSBkbWFidWYtXHUwMDNlcmVzdi4gKi9cbitcdHUxNiB0cGhfc3RfZXh0O1xuK1x0dTggdHBoX3N0O1xuK1x0dTggcmV2b2tlZDoxO1xuK1x0dTggdHBoX3N0X3ZhbGlkOjE7XG4rXHR1OCB0cGhfc3RfZXh0X3ZhbGlkOjE7XG4rXHR1OCB0cGhfcGg6MjtcbiB9O1xuIFxuIHN0YXRpYyBpbnQgdmZpb19wY2lfZG1hX2J1Zl9hdHRhY2goc3RydWN0IGRtYV9idWYgKmRtYWJ1ZixcbkBAIC02OSw2ICs3NywyNiBAQCB2ZmlvX3BjaV9kbWFfYnVmX21hcChzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2htZW50LFxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4rc3RhdGljIGludCB2ZmlvX3BjaV9kbWFfYnVmX2dldF9wY2lfdHBoKHN0cnVjdCBkbWFfYnVmICpkbWFidWYsIGJvb2wgZXh0ZW5kZWQsXG4rXHRcdFx0XHRcdHUxNiAqc3RlZXJpbmdfdGFnLCB1OCAqcGgpXG4re1xuK1x0c3RydWN0IHZmaW9fcGNpX2RtYV9idWYgKnByaXYgPSBkbWFidWYtXHUwMDNlcHJpdjtcbitcbitcdGRtYV9yZXN2X2Fzc2VydF9oZWxkKGRtYWJ1Zi1cdTAwM2VyZXN2KTtcbitcbitcdGlmIChleHRlbmRlZCkge1xuK1x0XHRpZiAoIXByaXYtXHUwMDNldHBoX3N0X2V4dF92YWxpZClcbitcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHRcdCpzdGVlcmluZ190YWcgPSBwcml2LVx1MDAzZXRwaF9zdF9leHQ7XG4rXHR9IGVsc2Uge1xuK1x0XHRpZiAoIXByaXYtXHUwMDNldHBoX3N0X3ZhbGlkKVxuK1x0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdFx0KnN0ZWVyaW5nX3RhZyA9IHByaXYtXHUwMDNldHBoX3N0O1xuK1x0fVxuK1x0KnBoID0gcHJpdi1cdTAwM2V0cGhfcGg7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gc3RhdGljIHZvaWQgdmZpb19wY2lfZG1hX2J1Zl91bm1hcChzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2htZW50LFxuIFx0XHRcdFx0ICAgc3RydWN0IHNnX3RhYmxlICpzZ3QsXG4gXHRcdFx0XHQgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpXG5AQCAtMTAxLDYgKzEyOSw3IEBAIHN0YXRpYyB2b2lkIHZmaW9fcGNpX2RtYV9idWZfcmVsZWFzZShzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmKVxuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZG1hX2J1Zl9vcHMgdmZpb19wY2lfZG1hYnVmX29wcyA9IHtcbiBcdC5hdHRhY2ggPSB2ZmlvX3BjaV9kbWFfYnVmX2F0dGFjaCxcbitcdC5nZXRfcGNpX3RwaCA9IHZmaW9fcGNpX2RtYV9idWZfZ2V0X3BjaV90cGgsXG4gXHQubWFwX2RtYV9idWYgPSB2ZmlvX3BjaV9kbWFfYnVmX21hcCxcbiBcdC51bm1hcF9kbWFfYnVmID0gdmZpb19wY2lfZG1hX2J1Zl91bm1hcCxcbiBcdC5yZWxlYXNlID0gdmZpb19wY2lfZG1hX2J1Zl9yZWxlYXNlLFxuQEAgLTMzMyw2ICszNjIsNzIgQEAgaW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTMyIGZsYWdzLFxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4raW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3RwaChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsXG4rXHRcdFx0XHQgICAgICB1MzIgZmxhZ3MsXG4rXHRcdFx0XHQgICAgICBzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV9kbWFfYnVmX3RwaCBfX3VzZXIgKmFyZyxcbitcdFx0XHRcdCAgICAgIHNpemVfdCBhcmdzeilcbit7XG4rXHRzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV9kbWFfYnVmX3RwaCBzZXRfdHBoO1xuK1x0c3RydWN0IHZmaW9fcGNpX2RtYV9idWYgKnByaXY7XG4rXHRzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmO1xuK1x0dTggY29tcDtcbitcdGludCByZXQ7XG4rXG4rXHRjb21wID0gcGNpZV90cGhfY29tcGxldGVyX3R5cGUodmRldi1cdTAwM2VwZGV2KTtcbitcdGlmIChjb21wID09IFBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9OT05FKVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHRyZXQgPSB2ZmlvX2NoZWNrX2ZlYXR1cmUoZmxhZ3MsIGFyZ3N6LCBWRklPX0RFVklDRV9GRUFUVVJFX1NFVCxcbitcdFx0XHRcdCBzaXplb2Yoc2V0X3RwaCkpO1xuK1x0aWYgKHJldCAhPSAxKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0aWYgKGNvcHlfZnJvbV91c2VyKFx1MDAyNnNldF90cGgsIGFyZywgc2l6ZW9mKHNldF90cGgpKSlcbitcdFx0cmV0dXJuIC1FRkFVTFQ7XG4rXG4rXHRpZiAoc2V0X3RwaC5mbGFncyBcdTAwMjYgfihWRklPX0RNQV9CVUZfVFBIX1NUIHwgVkZJT19ETUFfQlVGX1RQSF9TVF9FWFQpKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdGlmIChzZXRfdHBoLnBoIFx1MDAyNiB+MHgzKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdGlmICgoc2V0X3RwaC5mbGFncyBcdTAwMjYgVkZJT19ETUFfQlVGX1RQSF9TVF9FWFQpIFx1MDAyNlx1MDAyNlxuK1x0ICAgIGNvbXAgIT0gUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX0VYVF9UUEgpXG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcbitcdGRtYWJ1ZiA9IGRtYV9idWZfZ2V0KHNldF90cGguZG1hYnVmX2ZkKTtcbitcdGlmIChJU19FUlIoZG1hYnVmKSlcbitcdFx0cmV0dXJuIFBUUl9FUlIoZG1hYnVmKTtcbitcbitcdGlmIChkbWFidWYtXHUwMDNlb3BzICE9IFx1MDAyNnZmaW9fcGNpX2RtYWJ1Zl9vcHMpIHtcbitcdFx0cmV0ID0gLUVJTlZBTDtcbitcdFx0Z290byBvdXRfcHV0O1xuK1x0fVxuK1xuK1x0cHJpdiA9IGRtYWJ1Zi1cdTAwM2Vwcml2O1xuK1x0aWYgKHByaXYtXHUwMDNldmRldiAhPSB2ZGV2KSB7XG4rXHRcdHJldCA9IC1FSU5WQUw7XG4rXHRcdGdvdG8gb3V0X3B1dDtcbitcdH1cbitcbitcdHJldCA9IGRtYV9yZXN2X2xvY2tfaW50ZXJydXB0aWJsZShkbWFidWYtXHUwMDNlcmVzdiwgTlVMTCk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIG91dF9wdXQ7XG4rXG4rXHRwcml2LVx1MDAzZXRwaF9zdCAgICAgICAgID0gc2V0X3RwaC5zdGVlcmluZ190YWc7XG4rXHRwcml2LVx1MDAzZXRwaF9zdF9leHQgICAgID0gc2V0X3RwaC5zdGVlcmluZ190YWdfZXh0O1xuK1x0cHJpdi1cdTAwM2V0cGhfcGggICAgICAgICA9IHNldF90cGgucGg7XG4rXHRwcml2LVx1MDAzZXRwaF9zdF92YWxpZCAgID0gISEoc2V0X3RwaC5mbGFncyBcdTAwMjYgVkZJT19ETUFfQlVGX1RQSF9TVCk7XG4rXHRwcml2LVx1MDAzZXRwaF9zdF9leHRfdmFsaWQgPVxuK1x0XHQhIShzZXRfdHBoLmZsYWdzIFx1MDAyNiBWRklPX0RNQV9CVUZfVFBIX1NUX0VYVCk7XG4rXHRkbWFfcmVzdl91bmxvY2soZG1hYnVmLVx1MDAzZXJlc3YpO1xuK1x0cmV0ID0gMDtcbitcbitvdXRfcHV0OlxuK1x0ZG1hX2J1Zl9wdXQoZG1hYnVmKTtcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuIHZvaWQgdmZpb19wY2lfZG1hX2J1Zl9tb3ZlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgYm9vbCByZXZva2VkKVxuIHtcbiBcdHN0cnVjdCB2ZmlvX3BjaV9kbWFfYnVmICpwcml2O1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfcHJpdi5oIGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9wcml2LmhcbmluZGV4IGZjYTlkMGRmYWM5MGY4Li5jNThmMzY5YmU0YjM5OCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfcHJpdi5oXG4rKysgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX3ByaXYuaFxuQEAgLTExOCw2ICsxMTgsMTAgQEAgc3RhdGljIGlubGluZSBib29sIHZmaW9fcGNpX2lzX3ZnYShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBpbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWYoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCB1MzIgZmxhZ3MsXG4gXHRcdFx0XHQgIHN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX2RtYV9idWYgX191c2VyICphcmcsXG4gXHRcdFx0XHQgIHNpemVfdCBhcmdzeik7XG4raW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3RwaChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsXG4rXHRcdFx0XHQgICAgICB1MzIgZmxhZ3MsXG4rXHRcdFx0XHQgICAgICBzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV9kbWFfYnVmX3RwaCBfX3VzZXIgKmFyZyxcbitcdFx0XHRcdCAgICAgIHNpemVfdCBhcmdzeik7XG4gdm9pZCB2ZmlvX3BjaV9kbWFfYnVmX2NsZWFudXAoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KTtcbiB2b2lkIHZmaW9fcGNpX2RtYV9idWZfbW92ZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIGJvb2wgcmV2b2tlZCk7XG4gI2Vsc2VcbkBAIC0xMjgsNiArMTMyLDE0IEBAIHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTMyIGZsYWdzLFxuIHtcbiBcdHJldHVybiAtRU5PVFRZO1xuIH1cbitcbitzdGF0aWMgaW5saW5lIGludFxuK3ZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3RwaChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIHUzMiBmbGFncyxcbitcdFx0XHRcdCAgc3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfZG1hX2J1Zl90cGggX191c2VyICphcmcsXG4rXHRcdFx0XHQgIHNpemVfdCBhcmdzeilcbit7XG4rXHRyZXR1cm4gLUVOT1RUWTtcbit9XG4gc3RhdGljIGlubGluZSB2b2lkIHZmaW9fcGNpX2RtYV9idWZfY2xlYW51cChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpXG4ge1xuIH1cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RtYS1idWYuaCBiL2luY2x1ZGUvbGludXgvZG1hLWJ1Zi5oXG5pbmRleCBkMTIwM2RhNTZmYzVmNy4uNTNiMjY4NmFkOGZjNjcgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2RtYS1idWYuaFxuKysrIGIvaW5jbHVkZS9saW51eC9kbWEtYnVmLmhcbkBAIC0xMTMsNiArMTEzLDI2IEBAIHN0cnVjdCBkbWFfYnVmX29wcyB7XG4gXHQgKi9cbiBcdHZvaWQgKCp1bnBpbikoc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoKTtcbiBcbitcdC8qKlxuK1x0ICogQGdldF9wY2lfdHBoOlxuK1x0ICpcbitcdCAqIFJldHJpZXZlIFBDSWUgVExQIFByb2Nlc3NpbmcgSGludCAoVFBIKSBzdGVlcmluZyBtZXRhZGF0YSBmb3JcbitcdCAqIHRoaXMgYnVmZmVyIHNvIGFuIGltcG9ydGVyIGNhbiBwcm9ncmFtIGEgbWF0Y2hpbmcgU1QvUEggaGludCBvblxuK1x0ICogb3V0Ym91bmQgVExQcyB0YXJnZXRpbmcgdGhlIGV4cG9ydGVyIGZvciBwZWVyLXRvLXBlZXIgRE1BLlxuK1x0ICpcbitcdCAqIEBkbWFidWY6IERNQSBidWZmZXIgZm9yIHdoaWNoIHRvIHJldHJpZXZlIFRQSCBtZXRhZGF0YVxuK1x0ICogQGV4dGVuZGVkOiBmYWxzZSBmb3IgOC1iaXQgU1QsIHRydWUgZm9yIDE2LWJpdCBFeHRlbmRlZCBTVFxuK1x0ICogQHN0ZWVyaW5nX3RhZzogUmV0dXJucyB0aGUgcmF3IFRQSCBzdGVlcmluZyB0YWcgZm9yIHRoZSByZXF1ZXN0ZWRcbitcdCAqICAgICAgICAgICAgICAgIG5hbWVzcGFjZVxuK1x0ICogQHBoOiBSZXR1cm5zIHRoZSBUUEggcHJvY2Vzc2luZyBoaW50ICgyLWJpdCB2YWx1ZSlcbitcdCAqXG4rXHQgKiBPcHRpb25hbCBjYWxsYmFjayBmb3IgZG1hX2J1Zl9nZXRfcGNpX3RwaCgpLiBDYWxsZWQgd2l0aFxuK1x0ICogXHUwMDI2ZG1hX2J1Zi5yZXN2IGhlbGQuIFJldHVybnMgMCBvbiBzdWNjZXNzIG9yIC1FT1BOT1RTVVBQIHdoZW5cbitcdCAqIHRoZSBleHBvcnRlciBoYXMgbm8gbWV0YWRhdGEgZm9yIHRoZSByZXF1ZXN0ZWQgbmFtZXNwYWNlLlxuK1x0ICovXG4rXHRpbnQgKCpnZXRfcGNpX3RwaCkoc3RydWN0IGRtYV9idWYgKmRtYWJ1ZiwgYm9vbCBleHRlbmRlZCxcbitcdFx0XHQgICB1MTYgKnN0ZWVyaW5nX3RhZywgdTggKnBoKTtcbitcbiBcdC8qKlxuIFx0ICogQG1hcF9kbWFfYnVmOlxuIFx0ICpcbkBAIC01NjMsNiArNTgzLDggQEAgdm9pZCBkbWFfYnVmX2RldGFjaChzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLFxuIFx0XHQgICAgc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoKTtcbiBpbnQgZG1hX2J1Zl9waW4oc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoKTtcbiB2b2lkIGRtYV9idWZfdW5waW4oc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoKTtcbitpbnQgZG1hX2J1Zl9nZXRfcGNpX3RwaChzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLCBib29sIGV4dGVuZGVkLFxuK1x0XHRcdHUxNiAqc3RlZXJpbmdfdGFnLCB1OCAqcGgpO1xuIFxuIHN0cnVjdCBkbWFfYnVmICpkbWFfYnVmX2V4cG9ydChjb25zdCBzdHJ1Y3QgZG1hX2J1Zl9leHBvcnRfaW5mbyAqZXhwX2luZm8pO1xuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWx4NS9kcml2ZXIuaCBiL2luY2x1ZGUvbGludXgvbWx4NS9kcml2ZXIuaFxuaW5kZXggYjE4NzFjMDgyMWQwYjkuLjhiMzkxMTE5MWZiNjI2IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbHg1L2RyaXZlci5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L21seDUvZHJpdmVyLmhcbkBAIC0xMTgyLDEwICsxMTgyLDIzIEBAIGludCBtbHg1X2RtX3N3X2ljbV9kZWFsbG9jKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIGVudW0gbWx4NV9zd19pY21fdHlwZSB0eXBlXG4gXHRcdFx0ICAgdTY0IGxlbmd0aCwgdTE2IHVpZCwgcGh5c19hZGRyX3QgYWRkciwgdTMyIG9ial9pZCk7XG4gXG4gI2lmZGVmIENPTkZJR19QQ0lFX1RQSFxuK2ludCBtbHg1X3N0X2FsbG9jX2luZGV4X2J5X3RhZyhzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCB1MTYgdGFnLFxuK1x0XHRcdCAgICAgICB1MTYgKnN0X2luZGV4KTtcbitpbnQgbWx4NV9zdF9nZXRfaW5kZXgoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgdTE2IHN0X2luZGV4KTtcbiBpbnQgbWx4NV9zdF9hbGxvY19pbmRleChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCBlbnVtIHRwaF9tZW1fdHlwZSBtZW1fdHlwZSxcbiBcdFx0XHR1bnNpZ25lZCBpbnQgY3B1X3VpZCwgdTE2ICpzdF9pbmRleCk7XG4gaW50IG1seDVfc3RfZGVhbGxvY19pbmRleChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCB1MTYgc3RfaW5kZXgpO1xuICNlbHNlXG4rc3RhdGljIGlubGluZSBpbnQgbWx4NV9zdF9hbGxvY19pbmRleF9ieV90YWcoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldixcbitcdFx0XHRcdFx0ICAgICB1MTYgdGFnLCB1MTYgKnN0X2luZGV4KVxuK3tcbitcdHJldHVybiAtRU9QTk9UU1VQUDtcbit9XG4rXG4rc3RhdGljIGlubGluZSBpbnQgbWx4NV9zdF9nZXRfaW5kZXgoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgdTE2IHN0X2luZGV4KVxuK3tcbitcdHJldHVybiAtRU9QTk9UU1VQUDtcbit9XG4gc3RhdGljIGlubGluZSBpbnQgbWx4NV9zdF9hbGxvY19pbmRleChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LFxuIFx0XHRcdFx0ICAgICAgZW51bSB0cGhfbWVtX3R5cGUgbWVtX3R5cGUsXG4gXHRcdFx0XHQgICAgICB1bnNpZ25lZCBpbnQgY3B1X3VpZCwgdTE2ICpzdF9pbmRleClcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BjaS10cGguaCBiL2luY2x1ZGUvbGludXgvcGNpLXRwaC5oXG5pbmRleCBiZTY4Y2QxN2YyZjgzMy4uNzc0M2FmNmZlNDMyNmUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BjaS10cGguaFxuKysrIGIvaW5jbHVkZS9saW51eC9wY2ktdHBoLmhcbkBAIC05LDYgKzksOCBAQFxuICNpZm5kZWYgTElOVVhfUENJX1RQSF9IXG4gI2RlZmluZSBMSU5VWF9QQ0lfVFBIX0hcbiBcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9wY2lfcmVncy5oXHUwMDNlXG4rXG4gLypcbiAgKiBBY2NvcmRpbmcgdG8gdGhlIEVDTiBmb3IgUENJIEZpcm13YXJlIFNwZWMsIFN0ZWVyaW5nIFRhZyBjYW4gYmUgZGlmZmVyZW50XG4gICogZGVwZW5kaW5nIG9uIHRoZSBtZW1vcnkgdHlwZTogVm9sYXRpbGUgTWVtb3J5IG9yIFBlcnNpc3RlbnQgTWVtb3J5LiBXaGVuIGFcbkBAIC0zMCw2ICszMiw4IEBAIHZvaWQgcGNpZV9kaXNhYmxlX3RwaChzdHJ1Y3QgcGNpX2RldiAqcGRldik7XG4gaW50IHBjaWVfZW5hYmxlX3RwaChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG1vZGUpO1xuIHUxNiBwY2llX3RwaF9nZXRfc3RfdGFibGVfc2l6ZShzdHJ1Y3QgcGNpX2RldiAqcGRldik7XG4gdTMyIHBjaWVfdHBoX2dldF9zdF90YWJsZV9sb2Moc3RydWN0IHBjaV9kZXYgKnBkZXYpO1xuK3U4IHBjaWVfdHBoX2VuYWJsZWRfcmVxX3R5cGUoc3RydWN0IHBjaV9kZXYgKnBkZXYpO1xuK3U4IHBjaWVfdHBoX2NvbXBsZXRlcl90eXBlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTtcbiAjZWxzZVxuIHN0YXRpYyBpbmxpbmUgaW50IHBjaWVfdHBoX3NldF9zdF9lbnRyeShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbiBcdFx0XHRcdFx0dW5zaWduZWQgaW50IGluZGV4LCB1MTYgdGFnKVxuQEAgLTQxLDYgKzQ1LDEwIEBAIHN0YXRpYyBpbmxpbmUgaW50IHBjaWVfdHBoX2dldF9jcHVfc3Qoc3RydWN0IHBjaV9kZXYgKmRldixcbiBzdGF0aWMgaW5saW5lIHZvaWQgcGNpZV9kaXNhYmxlX3RwaChzdHJ1Y3QgcGNpX2RldiAqcGRldikgeyB9XG4gc3RhdGljIGlubGluZSBpbnQgcGNpZV9lbmFibGVfdHBoKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbW9kZSlcbiB7IHJldHVybiAtRUlOVkFMOyB9XG4rc3RhdGljIGlubGluZSB1OCBwY2llX3RwaF9lbmFibGVkX3JlcV90eXBlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuK3sgcmV0dXJuIFBDSV9UUEhfUkVRX0RJU0FCTEU7IH1cbitzdGF0aWMgaW5saW5lIHU4IHBjaWVfdHBoX2NvbXBsZXRlcl90eXBlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuK3sgcmV0dXJuIFBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9OT05FOyB9XG4gI2VuZGlmXG4gXG4gI2VuZGlmIC8qIExJTlVYX1BDSV9UUEhfSCAqL1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC92ZmlvLmggYi9pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oXG5pbmRleCA1ZGU2MThhM2E1ZWVlZS4uMmQzMGJhNDNlMmNmZjUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oXG4rKysgYi9pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oXG5AQCAtMTUzNCw2ICsxNTM0LDQzIEBAIHN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX2RtYV9idWYge1xuICAqL1xuICNkZWZpbmUgVkZJT19ERVZJQ0VfRkVBVFVSRV9NSUdfUFJFQ09QWV9JTkZPdjIgIDEyXG4gXG4rLyoqXG4rICogVXBvbiBWRklPX0RFVklDRV9GRUFUVVJFX1NFVCBhc3NvY2lhdGUgVFBIIChUTFAgUHJvY2Vzc2luZyBIaW50cykgbWV0YWRhdGFcbisgKiB3aXRoIGEgdmZpby1leHBvcnRlZCBkbWEtYnVmLiBUaGUgZG1hLWJ1ZiBtdXN0IGhhdmUgYmVlbiBjcmVhdGVkIGJ5XG4rICogVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGIG9uIHRoaXMgZGV2aWNlLCBhbmQgdGhlIGRldmljZSBtdXN0IHJlcG9ydFxuKyAqIFRQSCBDb21wbGV0ZXIgc3VwcG9ydCBpbiBEZXZpY2UgQ2FwYWJpbGl0aWVzIDIgKGJpdHMgMTM6MTIpOyByZXF1ZXN0c1xuKyAqIGNhcnJ5aW5nIFZGSU9fRE1BX0JVRl9UUEhfU1RfRVhUIGFkZGl0aW9uYWxseSByZXF1aXJlIHRoZSBkZXZpY2UgdG9cbisgKiByZXBvcnQgdGhlIEV4dGVuZGVkIFRQSCBDb21wbGV0ZXIgZW5jb2RpbmcuIE90aGVyd2lzZSB0aGUgaW9jdGxcbisgKiByZXR1cm5zIC1FT1BOT1RTVVBQLlxuKyAqXG4rICogZG1hYnVmX2ZkIGlzIHRoZSBmaWxlIGRlc2NyaXB0b3IgcmV0dXJuZWQgYnkgVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGLlxuKyAqXG4rICogOC1iaXQgU1QgKHN0ZWVyaW5nX3RhZykgYW5kIDE2LWJpdCBFeHRlbmRlZCBTVCAoc3RlZXJpbmdfdGFnX2V4dCkgYXJlXG4rICogZGlzdGluY3QgbmFtZXNwYWNlcy4gVXNlcnNwYWNlIHN1cHBsaWVzIHdoaWNoZXZlciB2YWx1ZXMgYXJlIHZhbGlkIGFuZCBzZXRzXG4rICogdGhlIG1hdGNoaW5nIFZGSU9fRE1BX0JVRl9UUEhfU1QgLyBWRklPX0RNQV9CVUZfVFBIX1NUX0VYVCBiaXRzIGluIEBmbGFncztcbisgKiBhbiBpbXBvcnRlciByZXF1ZXN0cyBvbmUgbmFtZXNwYWNlIGFuZCByZWNlaXZlcyB0aGUgbWF0Y2hpbmcgdmFsdWUuXG4rICpcbisgKiBAZmxhZ3MgPT0gMCBtYXJrcyBhbnkgcHJldmlvdXNseSBwdWJsaXNoZWQgU1QgLyBFeHRlbmRlZC1TVCBhcyBpbnZhbGlkXG4rICogZm9yIGZ1dHVyZSBQQ0kgVFBIIHF1ZXJpZXMgb24gdGhpcyBkbWEtYnVmLlxuKyAqXG4rICogcGggaXMgdGhlIDItYml0IFRMUCBQcm9jZXNzaW5nIEhpbnQgYW5kIG11c3QgYmUgaW4gdGhlIHJhbmdlIFswLCAzXS5cbisgKlxuKyAqIFVzZXJzcGFjZSBtdXN0IHB1Ymxpc2ggVFBIIGJlZm9yZSBoYW5kaW5nIHRoZSBkbWEtYnVmIGZkIHRvIGFuIGltcG9ydGVyLlxuKyAqIENhbGxpbmcgU0VUIGFnYWluIHJlcGxhY2VzIHRoZSBwdWJsaXNoZWQgdmFsdWVzLlxuKyAqL1xuKyNkZWZpbmUgVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGX1RQSCAxM1xuK1xuKyNkZWZpbmUgVkZJT19ETUFfQlVGX1RQSF9TVFx0XHQoMSBcdTAwM2NcdTAwM2MgMClcbisjZGVmaW5lIFZGSU9fRE1BX0JVRl9UUEhfU1RfRVhUXHRcdCgxIFx1MDAzY1x1MDAzYyAxKVxuK1xuK3N0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX2RtYV9idWZfdHBoIHtcbitcdF9fczMyXHRkbWFidWZfZmQ7XG4rXHRfX3UzMlx0ZmxhZ3M7XG4rXHRfX3UxNlx0c3RlZXJpbmdfdGFnX2V4dDtcbitcdF9fdThcdHN0ZWVyaW5nX3RhZztcbitcdF9fdThcdHBoO1xuK307XG4rXG4gLyogLS0tLS0tLS0gQVBJIGZvciBUeXBlMSBWRklPIElPTU1VIC0tLS0tLS0tICovXG4gXG4gLyoqXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQxOToxMzozOC42NTYxNTI3MjRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5OTAwMDUwNTk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVFBIIE1ldGFkYXRhIFBhdGNoIFNlcmllcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggc2VyaWVzLCBhbmQgaXQncyBhZGRpbmcgVFBIIChUTFAgUHJvY2Vzc2luZyBIaW50cykgbWV0YWRhdGEgc3VwcG9ydCB0byBETUEtQlVGLCBzcGVjaWZpY2FsbHkgZm9yIFZGSU8gYW5kIHRoZSBNZWxsYW5veCBDb25uZWN0WCBJbmZpbmliYW5kIGRyaXZlcnMuIFRoYXQgbWVhbnM6XG5cbiogICBBIG5ldyBmdW5jdGlvbiwgYGRtYV9idWZfZ2V0X3BjaV90cGhgLCBpcyBiZWluZyBhZGRlZCB0byB0aGUgY29yZSBETUEtQlVGIGNvZGUuXG4qICAgVkZJTyBQQ0kgaXMgZ2V0dGluZyBhIG5ldyBpb2N0bCBmZWF0dXJlLCBgVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGX1RQSGAuXG4qICAgQSBgZ2V0X3BjaV90cGhgIGNhbGxiYWNrIGlzIGFkZGVkIHRvIGBzdHJ1Y3QgZG1hX2J1Zl9vcHNgLlxuKiAgIEEgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24sIGB2ZmlvX3BjaV9kbWFfYnVmX2dldF9wY2lfdHBoYCwgaXMgYmVpbmcgYWRkZWQgdG8gdGhlIFZGSU8gUENJIGNvZGUuXG4qICAgQW5kIGZpbmFsbHksIHRoZSBtbHg1IEluZmluaWJhbmQgZHJpdmVyIGlzIGJlaW5nIG1vZGlmaWVkIHRvIHVzZSBgZG1hX2J1Zl9nZXRfcGNpX3RwaGAgd2hlbiByZWdpc3RlcmluZyBhIHVzZXIgTVIgd2l0aCBhIGRtYWJ1Zi5cblxuVGhpcyBpcyBhIHByZXR0eSBmdW5jdGlvbmFsIGNoYW5nZS4gSXQncyBhZGRpbmcgYW4gaW9jdGwgZmVhdHVyZSBpbiBWRklPIGFuZCB0aGVuIG1vZGlmeWluZyBhIGRyaXZlciB0byB1c2UgdGhlIG1ldGFkYXRhLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgcmVhY2hhYmxlIHRoaXMgaXMgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC5cblxuVkZJTyBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZSwgYW5kIGl0J3Mga25vd24gdG8gYmUgZnV6emFibGUuIFRoZSBtbHg1IEluZmluaWJhbmQgZHJpdmVyIG1pZ2h0IG5lZWQgc3BlY2lmaWMgaGFyZHdhcmUsIGJ1dCBJIGNhbiBwcm9iYWJseSBtb2NrIHRoYXQuIEhvd2V2ZXIsIGV2ZW4gaWYgSSBjYW4ndCBtb2NrIG1seDUsIFZGSU8gaXMgZGVmaW5pdGVseSByZWFjaGFibGUsIHNvIEkgc2hvdWxkIGZvY3VzIG9uIHRoYXQuXG5cbldhaXQsIHN5emthbGxlciAqY2FuKiBmdXp6IFZGSU8uIFRoYXQncyBnb29kLlxuXG5TbywgbGV0J3MgbG9vayBhdCBgVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGX1RQSGAgbW9yZSBjbG9zZWx5LiBJIGNhbiBzZWUgdGhhdCBgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWZfdHBoYCBpcyB0aGUgaGFuZGxlciwgYW5kIGl0J3MgY2FsbGVkIGZyb20gYHZmaW9fcGNpX2NvcmVfaW9jdGxfZmVhdHVyZWAuIEl0IGxvb2tzIGxpa2UgaXQgcmVxdWlyZXMgYHBjaWVfdHBoX2NvbXBsZXRlcl90eXBlKHZkZXYtXHUwMDNlcGRldilgIHRvICpub3QqIGJlIGBQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfTk9ORWAuIEkgd29uZGVyIGlmIEkgY2FuIGVtdWxhdGUgYSBQQ0kgZGV2aWNlIHdpdGggVFBIIENvbXBsZXRlciBzdXBwb3J0PyBFdmVuIGlmIEkgY2FuJ3QgZ2V0IHRoYXQgZmFyLCB0aGUgaW9jdGwgaGFuZGxlciBpdHNlbGYgaXMgc3RpbGwgcmVhY2hhYmxlIHVwIHRvIHRoYXQgY2hlY2ssIGFuZCB0aGF0J3MgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IGZ1enppbmcuIFBsdXMsIGBkbWFfYnVmX2dldF9wY2lfdHBoYCBpcyBhIGNvcmUgRE1BLUJVRiBmdW5jdGlvbiwgc28gaXQncyBwcm9iYWJseSBwcmV0dHkgaW1wb3J0YW50LlxuXG5JIHNob3VsZCBjaGVjayB0aGUgcmVsZXZhbnQgVkZJTyBjb2RlIGluIGBkcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuY2AgYW5kIGBkcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jYC5cblxuRm9yIHRoZSBidWlsZCBjb25maWcsIEknbGwgbmVlZCBgQ09ORklHX1ZGSU9fUENJYCwgb2YgY291cnNlLCBhbmQgYENPTkZJR19QQ0lFX1RQSGAuIGBDT05GSUdfTUxYNV9JTkZJTklCQU5EYCBtaWdodCBiZSBuZWVkZWQgZm9yIHRoZSBtbHg1IHBhdGgsIGJ1dCBJIGNhbiBwcm9iYWJseSBlbmFibGUgaXQgYW55d2F5LCBldmVuIGlmIHN5emthbGxlciBkb2Vzbid0IGhhdmUgYWN0dWFsIG1seDUgaGFyZHdhcmUuIEkgY2FuIHByb2JhYmx5IGdyZXAgZm9yIGBQQ0lFX1RQSGAgdG8gc2VlIHdoZXJlIGl0IGNvbWVzIHVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjEzMCwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYwMiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDE5OjEzOjQ4LjU1NjIwNTg3MVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTczNzE5ODM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBQQ0lFX1RQSFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3BjaS9LY29uZmlnPTE4NT1jb25maWcgUENJX1BBU0lEXFxuLS1cXG5kcml2ZXJzL3BjaS9LY29uZmlnLTE5Ni1cXG5kcml2ZXJzL3BjaS9LY29uZmlnOjE5Nzpjb25maWcgUENJRV9UUEhcXG5kcml2ZXJzL3BjaS9LY29uZmlnLTE5OC1cXHRib29sIFxcXCJUTFAgUHJvY2Vzc2luZyBIaW50c1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMTk6MTM6NTAuNzI5OTMyNTY3WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ3MTgwMjA5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJ20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgYFZGSU9fUENJYCoqXG5cblJpZ2h0LCBsZXQncyBkaXZlIHN0cmFpZ2h0IGluLiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgYFZGSU9fUENJYC4gSSB3YW50IHRvIGltbWVkaWF0ZWx5IHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucywgcG90ZW50aWFsbHkgaWRlbnRpZnkgc29tZSBzcGVjaWZpYyBhcmVhcyB0byB0cm91Ymxlc2hvb3QsIG9yIHVuZGVyc3RhbmQgaG93IGEgY2VydGFpbiBjb21wb25lbnQgaW4gdGhlIHN5c3RlbSBpcyBhZmZlY3RlZC4gV2l0aCBteSBsZXZlbCBvZiBleHBlcnRpc2UsIHRoaXMgaXMgbW9yZSB0aGFuIGp1c3QgYSBwYXNzaW5nIGdsYW5jZSBhdCB0aGUgc3VyZmFjZS4gSSdtIGxpa2VseSBnZWFyaW5nIHVwIHRvIGV4YW1pbmUgY29uZmlndXJhdGlvbiwgcG90ZW50aWFsIHJlc291cmNlIGNvbmZsaWN0cywgb3IgZXZlbiBkZWx2aW5nIGludG8gdGhlIGludGVyYWN0aW9ucyBiZXR3ZWVuIHRoZSBob3N0IGFuZCB0aGUgdmlydHVhbCBtYWNoaW5lcy4gSXQgbWlnaHQgYWxzbyBiZSBhIHNwZWNpZmljIHRyb3VibGVzaG9vdGluZyBzdGVwIEknbSB0YWtpbmcgaW4gYW4gaW4tZGVwdGggaW52ZXN0aWdhdGlvbi4gSSBhbSBjb25zaWRlcmluZyB0aGUgaW50cmljYWNpZXMgb2YgZGlyZWN0IGRldmljZSBhc3NpZ25tZW50LCBJT01NVSBncm91cHMsIGFuZCB0aGUgb3ZlcmFsbCBzZWN1cml0eSBpbXBsaWNhdGlvbnMuIE15IGN1cnJlbnQgbGluZSBvZiB0aG91Z2h0IGlzIHRoYXQgSSB3YW50IGEgZ3JhbnVsYXIgdW5kZXJzdGFuZGluZyBvZiBgVkZJT19QQ0lgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzUzNywiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDE5OjEzOjU0LjIwMTczNzg1MloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTM2MDkyMTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBWRklPX1BDSVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc9Mj1tZW51IFxcXCJWRklPIHN1cHBvcnQgZm9yIFBDSSBkZXZpY2VzXFxcIlxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTQtXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnOjU6Y29uZmlnIFZGSU9fUENJX0NPUkVcXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctNi1cXHR0cmlzdGF0ZVxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTktXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnOjEwOmNvbmZpZyBWRklPX1BDSV9JTlRYXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTExLVxcdGRlZl9ib29sIHkgaWYgIVMzOTBcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy0xMy1cXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc6MTQ6Y29uZmlnIFZGSU9fUENJXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTE1LVxcdHRyaXN0YXRlIFxcXCJHZW5lcmljIFZGSU8gc3VwcG9ydCBmb3IgYW55IFBDSSBkZXZpY2VcXFwiXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc9MjM9aWYgVkZJT19QQ0lcXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc6MjQ6Y29uZmlnIFZGSU9fUENJX1ZHQVxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy0yNS1cXHRib29sIFxcXCJHZW5lcmljIFZGSU8gUENJIHN1cHBvcnQgZm9yIFZHQSBkZXZpY2VzXFxcIlxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTMzLVxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZzozNDpjb25maWcgVkZJT19QQ0lfSUdEXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTM1LVxcdGJvb2wgXFxcIkdlbmVyaWMgVkZJTyBQQ0kgZXh0ZW5zaW9ucyBmb3IgSW50ZWwgZ3JhcGhpY3MgKEdWVC1kKVxcXCJcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZz00NT1lbmRpZlxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy00Ni1cXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc6NDc6Y29uZmlnIFZGSU9fUENJX1pERVZfS1ZNXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTQ4LVxcdGJvb2wgXFxcIlZGSU8gUENJIGV4dGVuc2lvbnMgZm9yIHMzOTB4IEtWTSBwYXNzdGhyb3VnaFxcXCJcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy01Ny1cXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc6NTg6Y29uZmlnIFZGSU9fUENJX0RNQUJVRlxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy01OS1cXHRkZWZfYm9vbCB5IGlmIFZGSU9fUENJX0NPUkUgXFx1MDAyNlxcdTAwMjYgUENJX1AyUERNQSBcXHUwMDI2XFx1MDAyNiBETUFfU0hBUkVEX0JVRkZFUlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQxOToxMzo1Ni4zMzc4MzYzNDlaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzQxMDE4Njc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipEaXNzZWN0aW5nIHRoZSBWRklPIExhbmRzY2FwZSoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCB0aGUgVkZJTyBzZXR1cC4gU3BlY2lmaWNhbGx5LCBJJ20gdHJ5aW5nIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgZGlmZmVyZW50IGNvbXBvbmVudHMgaW50ZXJyZWxhdGUuIE15IGJyYWluJ3MgbGF0Y2hpbmcgb250byBgVkZJT19QQ0lgLCB3aGljaCBJIGtub3cgaXMgZm91bmRhdGlvbmFsLCBhbmQgdGhlbiBJJ20gbWVudGFsbHkgcGFyc2luZyB0aGUgY29uZGl0aW9uYWwgZGVwZW5kZW5jaWVzLiBgUENJRV9UUEhgIGlzIGp1bXBpbmcgb3V0IGFzIHdlbGwgLSBJIG5lZWQgdG8gcmVjYWxsIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMgYXNwZWN0cyBvZiB0aGUgRE1BIGhhbmRsaW5nIGl0IHByb3ZpZGVzIHRoYXQgSSBuZWVkIHRvIGtlZXAgaW4gbWluZCBmb3IgbXkgdXNlIGNhc2UuXG5cblRoZW4sIHRoZXJlJ3MgYFZGSU9fUENJX0RNQUJVRmAuIEFoIHllcywgdGhlIERNQSBidWZmZXIgc3VwcG9ydC4gSSdtIHJlbWluZGluZyBteXNlbGYgdGhhdCB0aGlzIG9uZSBpcyBhIGJpdCBtb3JlIGludHJpY2F0ZSwgYmVpbmcgYSBgZGVmX2Jvb2wgeWAgaWYgYFZGSU9fUENJX0NPUkVgLCBgUENJX1AyUERNQWAgYW5kIGBETUFfU0hBUkVEX0JVRkZFUmAgYXJlIGFsc28gZW5hYmxlZC4gVGhlIGRlcGVuZGVuY3kgY2hhaW4gaXMgaW1wb3J0YW50LCBJIG5lZWQgdG8gbWFrZSBzdXJlIGFsbCBvZiB0aG9zZSBhcmUgYWRkcmVzc2VkLlxuXG5Ob3csIG15IG1pbmQgc2hpZnRzIGdlYXJzIHNsaWdodGx5LiBMZXQncyBzZWUuLi4gSSBzaG91bGQgY2hlY2sgaW4gb24gaG93IGFsbCBvZiB0aGlzIGludGVyYWN0cyB3aXRoIGBNTFg1X0lORklOSUJBTkRgLiBJJ20gZ29pbmcgdG8gaGF2ZSB0byBtYWtlIHN1cmUgdGhhdCBJIHVuZGVyc3RhbmQgaG93IGFsbCBvZiB0aGVzZSBwaWVjZXMgZml0IHRvZ2V0aGVyLiBUaGVyZSdzIHByb2JhYmx5IGEgcGVyZm9ybWFuY2UgYW5nbGUgaW52b2x2ZWQsIGxldCdzIGV4cGxvcmUgdGhhdCBhcyB3ZWxsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDI5NywiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDE5OjE0OjAwLjY3ODg1ODE2M1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTU0NDUzMzIyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNTFg1X0lORklOSUJBTkRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDUvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg1L0tjb25maWc6Mjpjb25maWcgTUxYNV9JTkZJTklCQU5EXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDUvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJNZWxsYW5veCA1dGggZ2VuZXJhdGlvbiBuZXR3b3JrIGFkYXB0ZXJzIChDb25uZWN0WCBzZXJpZXMpIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDE5OjE0OjAyLjYzMzMxNzMwNVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjczNjQzNjIwNjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBWRklPIERNQS1CVUYgVFBIIEltcGxlbWVudGF0aW9uKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgY29yZSBvZiB0aGVzZSBjaGFuZ2VzIHNlZW1zIHRvIHJldm9sdmUgYXJvdW5kIHV0aWxpemluZyBWRklPIGlvY3RscyB0byBpbnRlcmFjdCB3aXRoIHNvbWUgbmV3IERNQS1CVUYgZnVuY3Rpb25hbGl0eSDigJMgc3BlY2lmaWNhbGx5LCBUYXJnZXQgUGh5c2ljYWwgQWRkcmVzcyAoVFBIKSBzdXBwb3J0LiBUaGUga2V5IGZ1bmN0aW9ucyB0byBrZWVwIGFuIGV5ZSBvbiBhcmU6IGB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl90cGhgLCBgdmZpb19wY2lfZG1hX2J1Zl9nZXRfcGNpX3RwaGAsIGFuZCBgZG1hX2J1Zl9nZXRfcGNpX3RwaGAuXG5cbkZpcnN0LCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBuYW1pbmcgaXMgY29ycmVjdC4gIGB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl90cGhgIOKAkyB5ZXMsIHRoYXQncyB3aGF0J3MgYmVlbiBhZGRlZCBpbiBgZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuY2AuICBHb29kLiBOb3csIG9uIHRvIHRoZSBgZG1hLWJ1ZmAgc2lkZSBvZiB0aGluZ3MuIENvbmZpcm1pbmcgYGRtYV9idWZfZ2V0X3BjaV90cGhgIGlzIHByZXNlbnQgaW4gYGRyaXZlcnMvZG1hLWJ1Zi9kbWEtYnVmLmNgIOKAkyBpdCBpcy4gIEV4Y2VsbGVudC5cblxuTmV4dCwgSSBuZWVkIHRvIGxvb2sgYXQgd2hhdCdzIGJlZW4gYWRkZWQgZm9yIHRoZSBNZWxsYW5veCBkcml2ZXJzLiAgSSdtIHNlYXJjaGluZyBmb3IgYG1seDVfc3RfYWxsb2NfaW5kZXhfYnlfdGFnYCBhbmQgYG1seDVfc3RfZ2V0X2luZGV4YCBpbiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi9zdC5jYC4gWXVwLCB0aGV5J3JlIHRoZXJlLiBUaGF0IG1ha2VzIHNlbnNlLCBnaXZlbiB0aGUgcG90ZW50aWFsIGZvciBSRE1BIHdpdGggdGhlc2UgZGV2aWNlcy5cblxuQW5kIGZpbmFsbHksIHRvIG1ha2Ugc3VyZSB0aGUgdW5kZXJseWluZyBQQ0kgbWVjaGFuaXNtcyBhcmUgaW4gcGxhY2UsIEknbGwgY2hlY2sgYHBjaWVfdHBoX2VuYWJsZWRfcmVxX3R5cGVgIGFuZCBgcGNpZV90cGhfY29tcGxldGVyX3R5cGVgIGluIGBkcml2ZXJzL3BjaS90cGguY2AuICBZZXAsIHRoZXkgYXJlIGFsc28gYWRkZWQuIEdvb2QuXG5cbk5vdyBmb3IgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJJ2xsIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSByaWdodCBrZXJuZWwgY29uZmlncyBhcmUgZW5hYmxlZDogYFBDSUVfVFBIYCwgYFZGSU9fUENJYCwgYFBDSV9QMlBETUFgICh3aGljaCBpcyBlc3NlbnRpYWwgZm9yIGBWRklPX1BDSV9ETUFCVUZgKSwgYERNQV9TSEFSRURfQlVGRkVSYCAoYWxzbyBjcnVjaWFsIGZvciBgVkZJT19QQ0lfRE1BQlVGYCksIGFuZCBgTUxYNV9JTkZJTklCQU5EYCAod2hpbGUgb3B0aW9uYWwsIGl0J3MgZGVmaW5pdGVseSBhIGdvb2QgaWRlYSB0byBoYXZlIHRoYXQgZW5hYmxlZCBmb3IgbWF4aW11bSBmbGV4aWJpbGl0eSkuXG5cbkZpbmFsbHksIEkgc2hvdWxkIHZlcmlmeSB0aGUgYFZGSU9fUENJX0RNQUJVRmAgZGVwZW5kZW5jaWVzIGRpcmVjdGx5IHRvIGJlIDEwMCUgc3VyZSBJJ3ZlIGdvdCBhIGNvbXByZWhlbnNpdmUgdW5kZXJzdGFuZGluZyBvZiB3aGF0J3MgZ29pbmcgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0Nzc5LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDE5OjE0OjA5Ljk5NzY4MTYyNFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkzMjU2OTQ3MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVkZJT19QQ0lfRE1BQlVGXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZz00Nz1jb25maWcgVkZJT19QQ0lfWkRFVl9LVk1cXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy01Ny1cXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc6NTg6Y29uZmlnIFZGSU9fUENJX0RNQUJVRlxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy01OS1cXHRkZWZfYm9vbCB5IGlmIFZGSU9fUENJX0NPUkUgXFx1MDAyNlxcdTAwMjYgUENJX1AyUERNQSBcXHUwMDI2XFx1MDAyNiBETUFfU0hBUkVEX0JVRkZFUlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQxOToxNDoxMS45MzAyNTc0MDZaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU3OTYxMzExNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgcmVmbGVjdGluZyBteSBpbW1lZGlhdGUgdW5kZXJzdGFuZGluZzpcblxuKipLZXJuZWwgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMgQXNzZXNzbWVudCoqXG5cblJpZ2h0LCBzbyBJJ20gZm9jdXNpbmcgb24gdGhlc2UgdHdvIGNyaXRpY2FsIGNvbXBvbmVudHM6IGBQQ0lfUDJQRE1BYCBhbmQgYERNQV9TSEFSRURfQlVGRkVSYC4gVGhleSBzZWVtIGVzc2VudGlhbCBmb3IgdGhpcyBzcGVjaWZpYyBzZXR1cC4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGVpciBkZXBlbmRlbmNpZXMsIGFuZCBob3cgdGhleSByZWxhdGUgdG8gdGhlIG92ZXJhbGwgZHJpdmVyIGNvbmZpZ3VyYXRpb24uXG5cbkZpcnN0LCBsZXQncyBjb25maXJtIG15IHVuZGVyc3RhbmRpbmc6IEknbSBjaGVja2luZyBpZiBgVkZJT19QQ0lfQ09SRWAgaXMgaW5kZWVkIHNldCBhcyBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGluIHRoZSBrZXJuZWwuIEFoLCB5ZXMsIGl0J3MgY29ycmVjdGx5IHNlbGVjdGVkIHRocm91Z2ggYFZGSU9fUENJYC4gR29vZCwgdGhhdCBtYWtlcyBzZW5zZS4gVGhhdCdzIGEgY3JpdGljYWwgZGVwZW5kZW5jeSBmb3IgYSBnb29kIGZldyBzZXR1cHMuXG5cbk5leHQsIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgdGhlcmUncyBhbnkgbGluayBiZXR3ZWVuIHRoZSBNZWxsYW5veCBkcml2ZXIgYW5kIHRoZXNlIG90aGVyIGNvbXBvbmVudHMuIEl0IGxvb2tzIGxpa2UgSSBuZWVkIHRvIHF1aWNrbHkgZXN0YWJsaXNoIGlmIGBNTFg1X0NPUkVgIGlzIHJlcXVpcmVkIGZvciBgTUxYNV9JTkZJTklCQU5EYC4gVGhhdCByZWxhdGlvbnNoaXAgaXMgcHJvYmFibHkgdmVyeSBpbXBvcnRhbnQgZm9yIHBlcmZvcm1hbmNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTkwMSwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDE5OjE0OjE2LjUwOTg3NTIzNFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkxODYzNzQ3MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTUxYNV9DT1JFXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9LY29uZmlnLTUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL0tjb25maWc6Njpjb25maWcgTUxYNV9DT1JFXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL0tjb25maWctNy1cXHR0cmlzdGF0ZSBcXFwiTWVsbGFub3ggNXRoIGdlbmVyYXRpb24gbmV0d29yayBhZGFwdGVycyAoQ29ubmVjdFggc2VyaWVzKSBjb3JlIGRyaXZlclxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9LY29uZmlnPTE5PWNvbmZpZyBNTFg1X0ZQR0FcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9LY29uZmlnLTI4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9LY29uZmlnOjI5OmNvbmZpZyBNTFg1X0NPUkVfRU5cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvS2NvbmZpZy0zMC1cXHRib29sIFxcXCJNZWxsYW5veCA1dGggZ2VuZXJhdGlvbiBuZXR3b3JrIGFkYXB0ZXJzIChDb25uZWN0WCBzZXJpZXMpIEV0aGVybmV0IHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvS2NvbmZpZz0xMTI9Y29uZmlnIE1MWDVfVENfU0FNUExFXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvS2NvbmZpZy0xMjQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL0tjb25maWc6MTI1OmNvbmZpZyBNTFg1X0NPUkVfRU5fRENCXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL0tjb25maWctMTI2LVxcdGJvb2wgXFxcIkRhdGEgQ2VudGVyIEJyaWRnaW5nIChEQ0IpIFN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvS2NvbmZpZy0xMzYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL0tjb25maWc6MTM3OmNvbmZpZyBNTFg1X0NPUkVfSVBPSUJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvS2NvbmZpZy0xMzgtXFx0Ym9vbCBcXFwiTWVsbGFub3ggNXRoIGdlbmVyYXRpb24gbmV0d29yayBhZGFwdGVycyAoY29ubmVjdFggc2VyaWVzKSBJUG9JQiBvZmZsb2FkcyBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQxOToxNDoxOC40Mjg1MTc3MTZaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjAyMzc3MTk2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBDdXJyZW50IEFuYWx5c2lzOiBUUEgtUmVsYXRlZCBQQ0kvVkZJTyBDYXBhYmlsaXRpZXMqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gc29tZSBjcnVjaWFsIFBDSS9WRklPIGNvZGUsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIFRyYW5zYWN0aW9uIFByb2Nlc3NpbmcgSGludHMgKFRQSCkuIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIG1hcCBvdXQgdGhlIGtleSBjb21wb25lbnRzIGludm9sdmVkIGluIHRoaXMgZnVuY3Rpb25hbGl0eS4gSSdtIHN0YXJ0aW5nIGJ5IGxpc3Rpbmcgb3V0IHRoZXNlIGtleSBlbGVtZW50czpcblxuKiAgIGBQQ0lFX1RQSGBcbiogICBgVkZJT19QQ0lgXG4qICAgYFBDSV9QMlBETUFgXG4qICAgYE1MWDVfSU5GSU5JQkFORGBcblxuSSBuZWVkIHRvIGZvY3VzIG9uIHRoZXNlIHN5bWJvbHM6XG5cbiogICBgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWZfdHBoYFxuKiAgIGB2ZmlvX3BjaV9kbWFfYnVmX2dldF9wY2lfdHBoYFxuKiAgIGBkbWFfYnVmX2dldF9wY2lfdHBoYFxuKiAgIGBwY2llX3RwaF9lbmFibGVkX3JlcV90eXBlYFxuKiAgIGBwY2llX3RwaF9jb21wbGV0ZXJfdHlwZWBcblxuV2FpdCBhIHNlY29uZC4uLkkndmUganVzdCBzcG90dGVkIHNvbWV0aGluZyBpbnRlcmVzdGluZy4gV2hpbGUgbG9va2luZyBhdCBjb2RlLCBgbWx4NV9zdF9hbGxvY19pbmRleF9ieV90YWdgIGFuZCBgbWx4NV9zdF9nZXRfaW5kZXhgIGFyZSBpbiB0aGUgYGRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9saWIvc3QuY2AgZmlsZS4gVGhpcyBpcyBjcnVjaWFsOyBJIG5lZWQgdG8gYWRkIHRoZW0gdG8gbXkgXCJGb2N1c1N5bWJvbHNcIiBsaXN0IGFzIHRoZXkgYXJlIHJlbGF0ZWQgdG8gdGhlIE1lbGxhbm94IGRyaXZlcnMgd2hpY2ggd2lsbCBiZSBlc3NlbnRpYWwgdG8gY29uc2lkZXIgd2hlbiB1bmRlcnN0YW5kaW5nIGZ1bGwgVFBIIGJlaGF2aW91ci4gU28sIEkgbmVlZCB0byBpbmNsdWRlIHRoZXNlIGZ1bmN0aW9uczpcblxuKiAgIGBtbHg1X3N0X2FsbG9jX2luZGV4X2J5X3RhZ2BcbiogICBgbWx4NV9zdF9nZXRfaW5kZXhgXG5cbk5vdywgbGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHNvbWV0aGluZyBxdWlja2x5IHRvIGVuc3VyZSBJIGhhdmUgdGhlIHJpZ2h0IG5hbWUuLi4geWVwLCBgVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGX1RQSGAgaXMgdGhlIGNvcnJlY3QgbWFjcm8uIFNhdGlzZmllZCB3aXRoIHRoYXQuXG5cbkxhc3RseSwgbGV0IG1lIHJ1biBhIHF1aWNrIGNoZWNrIG9uIHRoZSBpbXBsaWNhdGlvbnMgb2YgYHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3RwaGAuIFRoaXMgaXMgbGlrZWx5IHdoZXJlIHRoZSBjb3JlIFZGSU8gVFBIIGltcGxlbWVudGF0aW9uIHN0YXJ0cy4gVW5kZXJzdGFuZGluZyBpdCB3aWxsIGJlIGtleS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY2OTAsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMTk6MTQ6MjQuNDUyMjkzMjM4WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTAzNjE3MDg0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3RwaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYz0xNTU3PWludCB2ZmlvX3BjaV9jb3JlX2lvY3RsX2ZlYXR1cmUoc3RydWN0IHZmaW9fZGV2aWNlICpkZXZpY2UsIHUzMiBmbGFncyxcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTE1NzUtXFx0Y2FzZSBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUZfVFBIOlxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jOjE1NzY6XFx0XFx0cmV0dXJuIHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3RwaCh2ZGV2LCBmbGFncywgYXJnLFxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTE1NzctXFx0XFx0XFx0XFx0XFx0XFx0XFx0IGFyZ3N6KTtcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmM9MjUwPWludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1ZihzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIHUzMiBmbGFncyxcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmMtMzY0LVxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmM6MzY1OmludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl90cGgoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LFxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmMtMzY2LVxcdFxcdFxcdFxcdCAgICAgIHUzMiBmbGFncyxcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfcHJpdi5oPTExOD1pbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWYoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCB1MzIgZmxhZ3MsXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX3ByaXYuaC0xMjAtXFx0XFx0XFx0XFx0ICBzaXplX3QgYXJnc3opO1xcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfcHJpdi5oOjEyMTppbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWZfdHBoKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldixcXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX3ByaXYuaC0xMjItXFx0XFx0XFx0XFx0ICAgICAgdTMyIGZsYWdzLFxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9wcml2Lmg9MTM2PXN0YXRpYyBpbmxpbmUgaW50XFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9wcml2Lmg6MTM3OnZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3RwaChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIHUzMiBmbGFncyxcXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX3ByaXYuaC0xMzgtXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV9kbWFfYnVmX3RwaCBfX3VzZXIgKmFyZyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMTk6MTQ6MjYuMzU1OTIxNDkyWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgzMDg3MzgzMjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGFkZGluZyBzb21lIGludGVyZXN0aW5nIG5ldyBmdW5jdGlvbmFsaXR5IHJlbGF0ZWQgdG8gRE1BLUJVRnMgYW5kIFBDSWUgVFBIIChUTFAgUHJvY2Vzc2luZyBIaW50cykuIEVzc2VudGlhbGx5LCBpdCdzIGFsbG93aW5nIHVzZXJzcGFjZSwgdGhyb3VnaCBWRklPIGlvY3RscywgdG8gc2V0IGFuZCByZXRyaWV2ZSBUUEggbWV0YWRhdGEgYXNzb2NpYXRlZCB3aXRoIGEgRE1BLUJVRi4gVGhhdCdzIGEgcHJldHR5IHNpZ25pZmljYW50IGNoYW5nZSwgZXNwZWNpYWxseSBnaXZlbiB0aGUgaW50ZWdyYXRpb24gd2l0aCBjb3JlIERNQS1CVUYsIFZGSU8sIGFuZCB0aGUgbWx4NSBJbmZpbmliYW5kIGRyaXZlci5cblxuU3BlY2lmaWNhbGx5LCBpdCBsb29rcyBsaWtlIGEgbmV3IGBpb2N0bGAgaXMgaW50cm9kdWNlZCBpbiBWRklPIHRvIHNldCBUUEggbWV0YWRhdGEgb24gYSBETUEtQlVGLiBBIGNvcnJlc3BvbmRpbmcgYGdldF9wY2lfdHBoYCBvcGVyYXRpb24gaXMgYWRkZWQgdG8gYGRtYV9idWZfb3BzYCwgYW5kIGl0IGxvb2tzIGxpa2UgdGhpcyBpcyBpbXBsZW1lbnRlZCBmb3IgVkZJTyBQQ0kgRE1BLUJVRnMsIHdoaWNoIGlzIHNlbnNpYmxlLiBUaGUgbWx4NSBJQiBkcml2ZXIgYWxzbyBnZXRzIHVwZGF0ZWQgdG8gcXVlcnkgYW5kIHV0aWxpemUgdGhpcyBtZXRhZGF0YSwgd2hpY2ggbWFrZXMgaXQgYSBjcml0aWNhbCBwYXJ0IG9mIHRoZSBuZXcgZmVhdHVyZS5cblxuR2l2ZW4gdGhhdCBpdCdzIHVzZXItYWNjZXNzaWJsZSB2aWEgVkZJTyBpb2N0bHMgYW5kIHRvdWNoZXMgZmFpcmx5IGZ1bmRhbWVudGFsIGtlcm5lbCBzdWJzeXN0ZW1zLCBJIGRlZmluaXRlbHkgdGhpbmsgdGhpcyB3YXJyYW50cyBmdXp6aW5nLiBJJ2xsIHNldCBgV29ydGhGdXp6aW5nPXRydWVgLlxuXG5UaGUgaW1wb3J0YW50IGJpdHMgdG8ga2VlcCBhbiBleWUgb24gYXJlIHRoZSBuZXcgZmVhdHVyZXMgaW50cm9kdWNlZCwgdGhlIHNwZWNpZmljIGNhbGwgcGF0aHMgYW5kIGludGVyYWN0aW9uIGJldHdlZW4gdGhlIHN5c3RlbXMsIGVzcGVjaWFsbHkgYHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3RwaGAsIGB2ZmlvX3BjaV9kbWFfYnVmX2dldF9wY2lfdHBoYCwgYGRtYV9idWZfZ2V0X3BjaV90cGhgLCBgcGNpZV90cGhfZW5hYmxlZF9yZXFfdHlwZWAsIGBwY2llX3RwaF9jb21wbGV0ZXJfdHlwZWAsIGBtbHg1X3N0X2FsbG9jX2luZGV4X2J5X3RhZ2AsIGFuZCBgbWx4NV9zdF9nZXRfaW5kZXhgLiBJdCB3aWxsIGFsc28gYmUgaW1wb3J0YW50IHRvIGVuc3VyZSB0aGVyZSBhcmUgbm8gc3VidGxlIHJhY2UgY29uZGl0aW9ucyBvciBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZXMgYXJvdW5kIHRob3NlIGNoYW5nZXMuIFRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGludGVyZXN0aW5nLCBhbmQgaXQgbG9va3MgbGlrZSBpdCBkZXBlbmRzIG9uIGBQQ0lFX1RQSGAsIGBWRklPX1BDSWAsIGBQQ0lfUDJQRE1BYCwgYW5kIGBNTFg1X0lORklOSUJBTkRgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODE0MywiT3V0cHV0VG9rZW5zIjozMDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMTk6MTQ6MzQuNjY0NjYzODQ3WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzU4MzE3NDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBDSUVfVFBIXCIsXG4gICAgXCJWRklPX1BDSVwiLFxuICAgIFwiUENJX1AyUERNQVwiLFxuICAgIFwiTUxYNV9JTkZJTklCQU5EXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWZfdHBoXCIsXG4gICAgXCJ2ZmlvX3BjaV9kbWFfYnVmX2dldF9wY2lfdHBoXCIsXG4gICAgXCJkbWFfYnVmX2dldF9wY2lfdHBoXCIsXG4gICAgXCJwY2llX3RwaF9lbmFibGVkX3JlcV90eXBlXCIsXG4gICAgXCJwY2llX3RwaF9jb21wbGV0ZXJfdHlwZVwiLFxuICAgIFwibWx4NV9zdF9hbGxvY19pbmRleF9ieV90YWdcIixcbiAgICBcIm1seDVfc3RfZ2V0X2luZGV4XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBWRklPIGlvY3RsIGZlYXR1cmUgYFZGSU9fREVWSUNFX0ZFQVRVUkVfRE1BX0JVRl9UUEhgIHRvIGFzc29jaWF0ZSBQQ0llIFRQSCAoVExQIFByb2Nlc3NpbmcgSGludHMpIG1ldGFkYXRhIHdpdGggYSBETUEtQlVGLiBJdCBhbHNvIGFkZHMgYSBuZXcgYGdldF9wY2lfdHBoYCBjYWxsYmFjayB0byBgZG1hX2J1Zl9vcHNgIGFuZCBpbXBsZW1lbnRzIGl0IGZvciBWRklPIFBDSSBETUEtQlVGcy4gVGhlIE1lbGxhbm94IG1seDUgSW5maW5pYmFuZCBkcml2ZXIgaXMgbW9kaWZpZWQgdG8gcXVlcnkgYW5kIHVzZSB0aGlzIG1ldGFkYXRhLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgRE1BLUJVRiwgVkZJTywgYW5kIG1seDUgbG9naWMgdGhhdCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBDSUVfVFBIXCIsXG4gICAgXCJWRklPX1BDSVwiLFxuICAgIFwiUENJX1AyUERNQVwiLFxuICAgIFwiTUxYNV9JTkZJTklCQU5EXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWZfdHBoXCIsXG4gICAgXCJ2ZmlvX3BjaV9kbWFfYnVmX2dldF9wY2lfdHBoXCIsXG4gICAgXCJkbWFfYnVmX2dldF9wY2lfdHBoXCIsXG4gICAgXCJwY2llX3RwaF9lbmFibGVkX3JlcV90eXBlXCIsXG4gICAgXCJwY2llX3RwaF9jb21wbGV0ZXJfdHlwZVwiLFxuICAgIFwibWx4NV9zdF9hbGxvY19pbmRleF9ieV90YWdcIixcbiAgICBcIm1seDVfc3RfZ2V0X2luZGV4XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBWRklPIGlvY3RsIGZlYXR1cmUgYFZGSU9fREVWSUNFX0ZFQVRVUkVfRE1BX0JVRl9UUEhgIHRvIGFzc29jaWF0ZSBQQ0llIFRQSCAoVExQIFByb2Nlc3NpbmcgSGludHMpIG1ldGFkYXRhIHdpdGggYSBETUEtQlVGLiBJdCBhbHNvIGFkZHMgYSBuZXcgYGdldF9wY2lfdHBoYCBjYWxsYmFjayB0byBgZG1hX2J1Zl9vcHNgIGFuZCBpbXBsZW1lbnRzIGl0IGZvciBWRklPIFBDSSBETUEtQlVGcy4gVGhlIE1lbGxhbm94IG1seDUgSW5maW5pYmFuZCBkcml2ZXIgaXMgbW9kaWZpZWQgdG8gcXVlcnkgYW5kIHVzZSB0aGlzIG1ldGFkYXRhLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgRE1BLUJVRiwgVkZJTywgYW5kIG1seDUgbG9naWMgdGhhdCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowg6gwd[1] Phase: Succeeded StartedAt: 2026-06-22 19:15:20 +0000 UTC FinishedAt: 2026-06-22 19:15:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg6gwd[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-06-22 19:15:20 +0000 UTC FinishedAt: 2026-06-22 19:15:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg6gwd[2] Phase: Succeeded StartedAt: 2026-06-22 19:15:20 +0000 UTC FinishedAt: 2026-06-22 20:53:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg6gwd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH","VFIO_PCI","PCI_P2PDMA","MLX5_INFINIBAND"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vfio_pci_core_feature_dma_buf_tph","vfio_pci_dma_buf_get_pci_tph","dma_buf_get_pci_tph","pcie_tph_enabled_req_type","pcie_tph_completer_type","mlx5_st_alloc_index_by_tag","mlx5_st_get_index"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH","VFIO_PCI","PCI_P2PDMA","MLX5_INFINIBAND"],"series_id":"4663fac5-8a4f-492f-a717-0c70e9a07bab","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-06-22 19:15:20 +0000 UTC FinishedAt: 2026-06-22 20:53:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH","VFIO_PCI","PCI_P2PDMA","MLX5_INFINIBAND"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vfio_pci_core_feature_dma_buf_tph","vfio_pci_dma_buf_get_pci_tph","dma_buf_get_pci_tph","pcie_tph_enabled_req_type","pcie_tph_completer_type","mlx5_st_alloc_index_by_tag","mlx5_st_get_index"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH","VFIO_PCI","PCI_P2PDMA","MLX5_INFINIBAND"],"series_id":"4663fac5-8a4f-492f-a717-0c70e9a07bab","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowg6gwd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH","VFIO_PCI","PCI_P2PDMA","MLX5_INFINIBAND"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vfio_pci_core_feature_dma_buf_tph","vfio_pci_dma_buf_get_pci_tph","dma_buf_get_pci_tph","pcie_tph_enabled_req_type","pcie_tph_completer_type","mlx5_st_alloc_index_by_tag","mlx5_st_get_index"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH","VFIO_PCI","PCI_P2PDMA","MLX5_INFINIBAND"],"series_id":"4663fac5-8a4f-492f-a717-0c70e9a07bab","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-06-22 19:15:20 +0000 UTC FinishedAt: 2026-06-22 19:15:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg6gwd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH","VFIO_PCI","PCI_P2PDMA","MLX5_INFINIBAND"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vfio_pci_core_feature_dma_buf_tph","vfio_pci_dma_buf_get_pci_tph","dma_buf_get_pci_tph","pcie_tph_enabled_req_type","pcie_tph_completer_type","mlx5_st_alloc_index_by_tag","mlx5_st_get_index"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH","VFIO_PCI","PCI_P2PDMA","MLX5_INFINIBAND"],"series_id":"4663fac5-8a4f-492f-a717-0c70e9a07bab","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-06-22 19:15:20 +0000 UTC FinishedAt: 2026-06-22 19:15:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH","VFIO_PCI","PCI_P2PDMA","MLX5_INFINIBAND"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.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-workflowg6gwd/series-workflowg6gwd-convert-artifact-246319536/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowg6gwd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH","VFIO_PCI","PCI_P2PDMA","MLX5_INFINIBAND"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vfio_pci_core_feature_dma_buf_tph","vfio_pci_dma_buf_get_pci_tph","dma_buf_get_pci_tph","pcie_tph_enabled_req_type","pcie_tph_completer_type","mlx5_st_alloc_index_by_tag","mlx5_st_get_index"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH","VFIO_PCI","PCI_P2PDMA","MLX5_INFINIBAND"],"series_id":"4663fac5-8a4f-492f-a717-0c70e9a07bab","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-06-22 19:15:30 +0000 UTC FinishedAt: 2026-06-22 19:42:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg6gwd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH","VFIO_PCI","PCI_P2PDMA","MLX5_INFINIBAND"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vfio_pci_core_feature_dma_buf_tph","vfio_pci_dma_buf_get_pci_tph","dma_buf_get_pci_tph","pcie_tph_enabled_req_type","pcie_tph_completer_type","mlx5_st_alloc_index_by_tag","mlx5_st_get_index"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH","VFIO_PCI","PCI_P2PDMA","MLX5_INFINIBAND"],"series_id":"4663fac5-8a4f-492f-a717-0c70e9a07bab","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-06-22 19:15:30 +0000 UTC FinishedAt: 2026-06-22 19:42:29 +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:*f9055822-70e0-44ba-8c9e-bdbb4fd50dd5,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-workflowg6gwd/series-workflowg6gwd-convert-artifact-246319536/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": "cd431449-9864-45b4-a48c-f466c34c6c31", "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-workflowg6gwd/series-workflowg6gwd-build-action-2670622390/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowg6gwd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH","VFIO_PCI","PCI_P2PDMA","MLX5_INFINIBAND"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vfio_pci_core_feature_dma_buf_tph","vfio_pci_dma_buf_get_pci_tph","dma_buf_get_pci_tph","pcie_tph_enabled_req_type","pcie_tph_completer_type","mlx5_st_alloc_index_by_tag","mlx5_st_get_index"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH","VFIO_PCI","PCI_P2PDMA","MLX5_INFINIBAND"],"series_id":"4663fac5-8a4f-492f-a717-0c70e9a07bab","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-06-22 19:15:30 +0000 UTC FinishedAt: 2026-06-22 19:41:54 +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:*f9055822-70e0-44ba-8c9e-bdbb4fd50dd5,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-workflowg6gwd/series-workflowg6gwd-convert-artifact-246319536/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": "cd431449-9864-45b4-a48c-f466c34c6c31", "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-workflowg6gwd/series-workflowg6gwd-build-action-2670622390/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowg6gwd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH","VFIO_PCI","PCI_P2PDMA","MLX5_INFINIBAND"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vfio_pci_core_feature_dma_buf_tph","vfio_pci_dma_buf_get_pci_tph","dma_buf_get_pci_tph","pcie_tph_enabled_req_type","pcie_tph_completer_type","mlx5_st_alloc_index_by_tag","mlx5_st_get_index"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH","VFIO_PCI","PCI_P2PDMA","MLX5_INFINIBAND"],"series_id":"4663fac5-8a4f-492f-a717-0c70e9a07bab","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-06-22 19:42:29 +0000 UTC FinishedAt: 2026-06-22 19:42:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg6gwd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH","VFIO_PCI","PCI_P2PDMA","MLX5_INFINIBAND"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vfio_pci_core_feature_dma_buf_tph","vfio_pci_dma_buf_get_pci_tph","dma_buf_get_pci_tph","pcie_tph_enabled_req_type","pcie_tph_completer_type","mlx5_st_alloc_index_by_tag","mlx5_st_get_index"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH","VFIO_PCI","PCI_P2PDMA","MLX5_INFINIBAND"],"series_id":"4663fac5-8a4f-492f-a717-0c70e9a07bab","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-06-22 19:42:29 +0000 UTC FinishedAt: 2026-06-22 19:42:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg6gwd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH","VFIO_PCI","PCI_P2PDMA","MLX5_INFINIBAND"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vfio_pci_core_feature_dma_buf_tph","vfio_pci_dma_buf_get_pci_tph","dma_buf_get_pci_tph","pcie_tph_enabled_req_type","pcie_tph_completer_type","mlx5_st_alloc_index_by_tag","mlx5_st_get_index"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH","VFIO_PCI","PCI_P2PDMA","MLX5_INFINIBAND"],"series_id":"4663fac5-8a4f-492f-a717-0c70e9a07bab","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-06-22 19:42:29 +0000 UTC FinishedAt: 2026-06-22 19:42:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg6gwd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH","VFIO_PCI","PCI_P2PDMA","MLX5_INFINIBAND"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vfio_pci_core_feature_dma_buf_tph","vfio_pci_dma_buf_get_pci_tph","dma_buf_get_pci_tph","pcie_tph_enabled_req_type","pcie_tph_completer_type","mlx5_st_alloc_index_by_tag","mlx5_st_get_index"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH","VFIO_PCI","PCI_P2PDMA","MLX5_INFINIBAND"],"series_id":"4663fac5-8a4f-492f-a717-0c70e9a07bab","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-06-22 19:42:29 +0000 UTC FinishedAt: 2026-06-22 19:42:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH","VFIO_PCI","PCI_P2PDMA","MLX5_INFINIBAND"],"series_id":"4663fac5-8a4f-492f-a717-0c70e9a07bab","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.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-workflowg6gwd/series-workflowg6gwd-convert-artifact-2700533655/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowg6gwd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH","VFIO_PCI","PCI_P2PDMA","MLX5_INFINIBAND"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vfio_pci_core_feature_dma_buf_tph","vfio_pci_dma_buf_get_pci_tph","dma_buf_get_pci_tph","pcie_tph_enabled_req_type","pcie_tph_completer_type","mlx5_st_alloc_index_by_tag","mlx5_st_get_index"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH","VFIO_PCI","PCI_P2PDMA","MLX5_INFINIBAND"],"series_id":"4663fac5-8a4f-492f-a717-0c70e9a07bab","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-06-22 19:42:39 +0000 UTC FinishedAt: 2026-06-22 19:44:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg6gwd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH","VFIO_PCI","PCI_P2PDMA","MLX5_INFINIBAND"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vfio_pci_core_feature_dma_buf_tph","vfio_pci_dma_buf_get_pci_tph","dma_buf_get_pci_tph","pcie_tph_enabled_req_type","pcie_tph_completer_type","mlx5_st_alloc_index_by_tag","mlx5_st_get_index"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH","VFIO_PCI","PCI_P2PDMA","MLX5_INFINIBAND"],"series_id":"4663fac5-8a4f-492f-a717-0c70e9a07bab","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-06-22 19:42:39 +0000 UTC FinishedAt: 2026-06-22 19:44:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*cd431449-9864-45b4-a48c-f466c34c6c31,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-workflowg6gwd/series-workflowg6gwd-build-action-2670622390/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-workflowg6gwd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH","VFIO_PCI","PCI_P2PDMA","MLX5_INFINIBAND"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vfio_pci_core_feature_dma_buf_tph","vfio_pci_dma_buf_get_pci_tph","dma_buf_get_pci_tph","pcie_tph_enabled_req_type","pcie_tph_completer_type","mlx5_st_alloc_index_by_tag","mlx5_st_get_index"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH","VFIO_PCI","PCI_P2PDMA","MLX5_INFINIBAND"],"series_id":"4663fac5-8a4f-492f-a717-0c70e9a07bab","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-06-22 19:44:28 +0000 UTC FinishedAt: 2026-06-22 19:44:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg6gwd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH","VFIO_PCI","PCI_P2PDMA","MLX5_INFINIBAND"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vfio_pci_core_feature_dma_buf_tph","vfio_pci_dma_buf_get_pci_tph","dma_buf_get_pci_tph","pcie_tph_enabled_req_type","pcie_tph_completer_type","mlx5_st_alloc_index_by_tag","mlx5_st_get_index"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH","VFIO_PCI","PCI_P2PDMA","MLX5_INFINIBAND"],"series_id":"4663fac5-8a4f-492f-a717-0c70e9a07bab","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-06-22 19:44:28 +0000 UTC FinishedAt: 2026-06-22 19:44:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg6gwd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH","VFIO_PCI","PCI_P2PDMA","MLX5_INFINIBAND"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vfio_pci_core_feature_dma_buf_tph","vfio_pci_dma_buf_get_pci_tph","dma_buf_get_pci_tph","pcie_tph_enabled_req_type","pcie_tph_completer_type","mlx5_st_alloc_index_by_tag","mlx5_st_get_index"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH","VFIO_PCI","PCI_P2PDMA","MLX5_INFINIBAND"],"series_id":"4663fac5-8a4f-492f-a717-0c70e9a07bab","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-06-22 19:44:28 +0000 UTC FinishedAt: 2026-06-22 20:16:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg6gwd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH","VFIO_PCI","PCI_P2PDMA","MLX5_INFINIBAND"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vfio_pci_core_feature_dma_buf_tph","vfio_pci_dma_buf_get_pci_tph","dma_buf_get_pci_tph","pcie_tph_enabled_req_type","pcie_tph_completer_type","mlx5_st_alloc_index_by_tag","mlx5_st_get_index"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH","VFIO_PCI","PCI_P2PDMA","MLX5_INFINIBAND"],"series_id":"4663fac5-8a4f-492f-a717-0c70e9a07bab","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-06-22 19:44:28 +0000 UTC FinishedAt: 2026-06-22 20:16:09 +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:*f9055822-70e0-44ba-8c9e-bdbb4fd50dd5,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-workflowg6gwd/series-workflowg6gwd-convert-artifact-2700533655/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": "cb9e7da7-fa1e-41d6-9cdb-808d54754f09", "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-workflowg6gwd/series-workflowg6gwd-build-action-4041348571/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowg6gwd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH","VFIO_PCI","PCI_P2PDMA","MLX5_INFINIBAND"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vfio_pci_core_feature_dma_buf_tph","vfio_pci_dma_buf_get_pci_tph","dma_buf_get_pci_tph","pcie_tph_enabled_req_type","pcie_tph_completer_type","mlx5_st_alloc_index_by_tag","mlx5_st_get_index"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH","VFIO_PCI","PCI_P2PDMA","MLX5_INFINIBAND"],"series_id":"4663fac5-8a4f-492f-a717-0c70e9a07bab","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-06-22 19:44:28 +0000 UTC FinishedAt: 2026-06-22 20:15:45 +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:*f9055822-70e0-44ba-8c9e-bdbb4fd50dd5,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-workflowg6gwd/series-workflowg6gwd-convert-artifact-2700533655/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": "cb9e7da7-fa1e-41d6-9cdb-808d54754f09", "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-workflowg6gwd/series-workflowg6gwd-build-action-4041348571/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowg6gwd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH","VFIO_PCI","PCI_P2PDMA","MLX5_INFINIBAND"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vfio_pci_core_feature_dma_buf_tph","vfio_pci_dma_buf_get_pci_tph","dma_buf_get_pci_tph","pcie_tph_enabled_req_type","pcie_tph_completer_type","mlx5_st_alloc_index_by_tag","mlx5_st_get_index"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH","VFIO_PCI","PCI_P2PDMA","MLX5_INFINIBAND"],"series_id":"4663fac5-8a4f-492f-a717-0c70e9a07bab","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-06-22 20:16:09 +0000 UTC FinishedAt: 2026-06-22 20:16:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg6gwd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH","VFIO_PCI","PCI_P2PDMA","MLX5_INFINIBAND"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vfio_pci_core_feature_dma_buf_tph","vfio_pci_dma_buf_get_pci_tph","dma_buf_get_pci_tph","pcie_tph_enabled_req_type","pcie_tph_completer_type","mlx5_st_alloc_index_by_tag","mlx5_st_get_index"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH","VFIO_PCI","PCI_P2PDMA","MLX5_INFINIBAND"],"series_id":"4663fac5-8a4f-492f-a717-0c70e9a07bab","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-06-22 20:16:09 +0000 UTC FinishedAt: 2026-06-22 20:16:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg6gwd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH","VFIO_PCI","PCI_P2PDMA","MLX5_INFINIBAND"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vfio_pci_core_feature_dma_buf_tph","vfio_pci_dma_buf_get_pci_tph","dma_buf_get_pci_tph","pcie_tph_enabled_req_type","pcie_tph_completer_type","mlx5_st_alloc_index_by_tag","mlx5_st_get_index"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH","VFIO_PCI","PCI_P2PDMA","MLX5_INFINIBAND"],"series_id":"4663fac5-8a4f-492f-a717-0c70e9a07bab","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-06-22 20:16:09 +0000 UTC FinishedAt: 2026-06-22 20:18:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg6gwd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH","VFIO_PCI","PCI_P2PDMA","MLX5_INFINIBAND"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vfio_pci_core_feature_dma_buf_tph","vfio_pci_dma_buf_get_pci_tph","dma_buf_get_pci_tph","pcie_tph_enabled_req_type","pcie_tph_completer_type","mlx5_st_alloc_index_by_tag","mlx5_st_get_index"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH","VFIO_PCI","PCI_P2PDMA","MLX5_INFINIBAND"],"series_id":"4663fac5-8a4f-492f-a717-0c70e9a07bab","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-06-22 20:16:09 +0000 UTC FinishedAt: 2026-06-22 20:18:11 +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:*cb9e7da7-fa1e-41d6-9cdb-808d54754f09,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-workflowg6gwd/series-workflowg6gwd-build-action-4041348571/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-workflowg6gwd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH","VFIO_PCI","PCI_P2PDMA","MLX5_INFINIBAND"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vfio_pci_core_feature_dma_buf_tph","vfio_pci_dma_buf_get_pci_tph","dma_buf_get_pci_tph","pcie_tph_enabled_req_type","pcie_tph_completer_type","mlx5_st_alloc_index_by_tag","mlx5_st_get_index"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH","VFIO_PCI","PCI_P2PDMA","MLX5_INFINIBAND"],"series_id":"4663fac5-8a4f-492f-a717-0c70e9a07bab","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-06-22 20:18:21 +0000 UTC FinishedAt: 2026-06-22 20:53:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg6gwd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH","VFIO_PCI","PCI_P2PDMA","MLX5_INFINIBAND"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vfio_pci_core_feature_dma_buf_tph","vfio_pci_dma_buf_get_pci_tph","dma_buf_get_pci_tph","pcie_tph_enabled_req_type","pcie_tph_completer_type","mlx5_st_alloc_index_by_tag","mlx5_st_get_index"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH","VFIO_PCI","PCI_P2PDMA","MLX5_INFINIBAND"],"series_id":"4663fac5-8a4f-492f-a717-0c70e9a07bab","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-06-22 20:18:21 +0000 UTC FinishedAt: 2026-06-22 20:53:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vfio_pci_core_feature_dma_buf_tph","vfio_pci_dma_buf_get_pci_tph","dma_buf_get_pci_tph","pcie_tph_enabled_req_type","pcie_tph_completer_type","mlx5_st_alloc_index_by_tag","mlx5_st_get_index"],"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:*cd431449-9864-45b4-a48c-f466c34c6c31,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*cb9e7da7-fa1e-41d6-9cdb-808d54754f09,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-workflowg6gwd/series-workflowg6gwd-build-action-2670622390/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-workflowg6gwd/series-workflowg6gwd-build-action-4041348571/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowg6gwd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH","VFIO_PCI","PCI_P2PDMA","MLX5_INFINIBAND"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vfio_pci_core_feature_dma_buf_tph","vfio_pci_dma_buf_get_pci_tph","dma_buf_get_pci_tph","pcie_tph_enabled_req_type","pcie_tph_completer_type","mlx5_st_alloc_index_by_tag","mlx5_st_get_index"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH","VFIO_PCI","PCI_P2PDMA","MLX5_INFINIBAND"],"series_id":"4663fac5-8a4f-492f-a717-0c70e9a07bab","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-06-22 20:18:21 +0000 UTC FinishedAt: 2026-06-22 20:19:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg6gwd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH","VFIO_PCI","PCI_P2PDMA","MLX5_INFINIBAND"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vfio_pci_core_feature_dma_buf_tph","vfio_pci_dma_buf_get_pci_tph","dma_buf_get_pci_tph","pcie_tph_enabled_req_type","pcie_tph_completer_type","mlx5_st_alloc_index_by_tag","mlx5_st_get_index"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH","VFIO_PCI","PCI_P2PDMA","MLX5_INFINIBAND"],"series_id":"4663fac5-8a4f-492f-a717-0c70e9a07bab","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-06-22 20:18:21 +0000 UTC FinishedAt: 2026-06-22 20:18:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vfio_pci_core_feature_dma_buf_tph","vfio_pci_dma_buf_get_pci_tph","dma_buf_get_pci_tph","pcie_tph_enabled_req_type","pcie_tph_completer_type","mlx5_st_alloc_index_by_tag","mlx5_st_get_index"],"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-workflowg6gwd/series-workflowg6gwd-convert-artifact-3778469200/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowg6gwd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH","VFIO_PCI","PCI_P2PDMA","MLX5_INFINIBAND"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vfio_pci_core_feature_dma_buf_tph","vfio_pci_dma_buf_get_pci_tph","dma_buf_get_pci_tph","pcie_tph_enabled_req_type","pcie_tph_completer_type","mlx5_st_alloc_index_by_tag","mlx5_st_get_index"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH","VFIO_PCI","PCI_P2PDMA","MLX5_INFINIBAND"],"series_id":"4663fac5-8a4f-492f-a717-0c70e9a07bab","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-06-22 20:18:21 +0000 UTC FinishedAt: 2026-06-22 20:18:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg6gwd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH","VFIO_PCI","PCI_P2PDMA","MLX5_INFINIBAND"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vfio_pci_core_feature_dma_buf_tph","vfio_pci_dma_buf_get_pci_tph","dma_buf_get_pci_tph","pcie_tph_enabled_req_type","pcie_tph_completer_type","mlx5_st_alloc_index_by_tag","mlx5_st_get_index"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH","VFIO_PCI","PCI_P2PDMA","MLX5_INFINIBAND"],"series_id":"4663fac5-8a4f-492f-a717-0c70e9a07bab","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-06-22 20:18:21 +0000 UTC FinishedAt: 2026-06-22 20:18:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg6gwd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH","VFIO_PCI","PCI_P2PDMA","MLX5_INFINIBAND"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vfio_pci_core_feature_dma_buf_tph","vfio_pci_dma_buf_get_pci_tph","dma_buf_get_pci_tph","pcie_tph_enabled_req_type","pcie_tph_completer_type","mlx5_st_alloc_index_by_tag","mlx5_st_get_index"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH","VFIO_PCI","PCI_P2PDMA","MLX5_INFINIBAND"],"series_id":"4663fac5-8a4f-492f-a717-0c70e9a07bab","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-06-22 20:18:21 +0000 UTC FinishedAt: 2026-06-22 20:18:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg6gwd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH","VFIO_PCI","PCI_P2PDMA","MLX5_INFINIBAND"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vfio_pci_core_feature_dma_buf_tph","vfio_pci_dma_buf_get_pci_tph","dma_buf_get_pci_tph","pcie_tph_enabled_req_type","pcie_tph_completer_type","mlx5_st_alloc_index_by_tag","mlx5_st_get_index"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH","VFIO_PCI","PCI_P2PDMA","MLX5_INFINIBAND"],"series_id":"4663fac5-8a4f-492f-a717-0c70e9a07bab","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-06-22 20:19:03 +0000 UTC FinishedAt: 2026-06-22 20:53:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg6gwd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH","VFIO_PCI","PCI_P2PDMA","MLX5_INFINIBAND"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vfio_pci_core_feature_dma_buf_tph","vfio_pci_dma_buf_get_pci_tph","dma_buf_get_pci_tph","pcie_tph_enabled_req_type","pcie_tph_completer_type","mlx5_st_alloc_index_by_tag","mlx5_st_get_index"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH","VFIO_PCI","PCI_P2PDMA","MLX5_INFINIBAND"],"series_id":"4663fac5-8a4f-492f-a717-0c70e9a07bab","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-06-22 20:19:03 +0000 UTC FinishedAt: 2026-06-22 20:52:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*cd431449-9864-45b4-a48c-f466c34c6c31,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*cb9e7da7-fa1e-41d6-9cdb-808d54754f09,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-workflowg6gwd/series-workflowg6gwd-build-action-2670622390/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-workflowg6gwd/series-workflowg6gwd-build-action-4041348571/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-workflowg6gwd/series-workflowg6gwd-convert-artifact-3778469200/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,}