Name: series-workflowwsk9h Phase: Succeeded StartedAt: 2026-08-11 14:46:27 +0000 UTC FinishedAt: 2026-08-11 18:54:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwsk9h[0] Phase: Succeeded StartedAt: 2026-08-11 14:46:27 +0000 UTC FinishedAt: 2026-08-11 15:12:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwsk9h[0].run-triage Phase: Succeeded StartedAt: 2026-08-11 14:46:27 +0000 UTC FinishedAt: 2026-08-11 15:12:48 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "55d20f50a221bdd7b19befc6e3685a2ef5d4c07b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_DEVMEM", "DMA_SHARED_BUFFER", "PAGE_POOL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "55d20f50a221bdd7b19befc6e3685a2ef5d4c07b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_DEVMEM", "DMA_SHARED_BUFFER", "PAGE_POOL" ], "series_id": "75d14da5-9883-4432-b1bb-ff0dc993fc5d" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "netdev_nl_bind_rx_doit", "netdev_nl_bind_tx_doit", "net_devmem_bind_dmabuf", "net_devmem_unbind_dmabuf", "netdev_nl_sock_priv_init", "netdev_nl_sock_priv_destroy" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE1OjEwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9ERVZNRU0mIzM0OywKICAgICYjMzQ7RE1BX1NIQVJFRF9CVUZGRVImIzM0OywKICAgICYjMzQ7UEFHRV9QT09MJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmV0ZGV2X25sX2JpbmRfcnhfZG9pdCYjMzQ7LAogICAgJiMzNDtuZXRkZXZfbmxfYmluZF90eF9kb2l0JiMzNDssCiAgICAmIzM0O25ldF9kZXZtZW1fYmluZF9kbWFidWYmIzM0OywKICAgICYjMzQ7bmV0X2Rldm1lbV91bmJpbmRfZG1hYnVmJiMzNDssCiAgICAmIzM0O25ldGRldl9ubF9zb2NrX3ByaXZfaW5pdCYjMzQ7LAogICAgJiMzNDtuZXRkZXZfbmxfc29ja19wcml2X2Rlc3Ryb3kmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZXBsYWNlcyBhIGxpbmtlZCBsaXN0IGFuZCBhIG11dGV4IHdpdGggYW4geGFycmF5IGZvciBtYW5hZ2luZyBkbWFidWYgYmluZGluZ3MgaW4gYHN0cnVjdCBuZXRkZXZfbmxfc29ja2AuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBhbGxvY2F0ZSBuZXcgYnVmZmVycyB0aGF0IGNvdWxkIGJlIGxlZnQgdW5pbml0aWFsaXplZC4gQW55IGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChzdWNoIGFzIHJhY2UgY29uZGl0aW9ucyBmcm9tIHRoZSByZW1vdmVkIG11dGV4LCB1c2UtYWZ0ZXItZnJlZSwgb3IgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcykgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbmV0ZGV2IG5ldGxpbmsgc29ja2V0IGJpbmRpbmdzIGhhbmRsaW5nLCBjaGFuZ2luZyB0aGUgYGJpbmRpbmdzYCBsaXN0IHRvIGFuIGB4YXJyYXlgIGFuZCByZW1vdmluZyB0aGUgYGxvY2tgIG11dGV4IGZyb20gYHN0cnVjdCBuZXRkZXZfbmxfc29ja2AuIFRoaXMgYWZmZWN0cyB0aGUgYG5ldGRldl9ubF9iaW5kX3J4X2RvaXRgLCBgbmV0ZGV2X25sX2JpbmRfdHhfZG9pdGAsIGBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmYCwgYW5kIGBuZXRfZGV2bWVtX3VuYmluZF9kbWFidWZgIGZ1bmN0aW9ucywgd2hpY2ggYXJlIHJlYWNoYWJsZSB2aWEgbmV0bGluayBjb21tYW5kcy4gVGhlIGNoYW5nZXMgYXJlIGZ1bmN0aW9uYWwgYW5kIGludm9sdmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHN5bmNocm9uaXphdGlvbiwgbWFraW5nIHRoZW0gd29ydGggZnV6emluZy4gVGhlIGBORVRfREVWTUVNYCBmZWF0dXJlIGFuZCBpdHMgZGVwZW5kZW5jaWVzIChgRE1BX1NIQVJFRF9CVUZGRVJgIGFuZCBgUEFHRV9QT09MYCkgbXVzdCBiZSBlbmFibGVkIHRvIHRlc3QgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTU6MTA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA3ZTViYzVmNjc0MzIxNmJiMjRmMzgxYzViZGE5NjE0YTA3NGFhMDg2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMTEgMTU6MTA6MTIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0ZGV2X25ldGxpbmsuaCBiL2luY2x1ZGUvbmV0L25ldGRldl9uZXRsaW5rLmhcbmluZGV4IDA3NTk2MmRiZTc0M2IuLjQ1YTRhNDgyZDQyZTQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9uZXRkZXZfbmV0bGluay5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9uZXRkZXZfbmV0bGluay5oXG5AQCAtMiwxMSAmIzQzOzIsMTAgQEBcbiAjaWZuZGVmIF9fTkVUX05FVERFVl9ORVRMSU5LX0hcbiAjZGVmaW5lIF9fTkVUX05FVERFVl9ORVRMSU5LX0hcbiBcbi0jaW5jbHVkZSBcdTAwM2NsaW51eC9saXN0LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgveGFycmF5LmhcdTAwM2VcbiBcbiBzdHJ1Y3QgbmV0ZGV2X25sX3NvY2sge1xuLVx0c3RydWN0IG11dGV4IGxvY2s7XG4tXHRzdHJ1Y3QgbGlzdF9oZWFkIGJpbmRpbmdzO1xuJiM0MztcdHN0cnVjdCB4YXJyYXkgYmluZGluZ3M7XG4gfTtcbiBcbiAjZW5kaWZcdC8qIF9fTkVUX05FVERFVl9ORVRMSU5LX0ggKi9cbmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXZtZW0uYyBiL25ldC9jb3JlL2Rldm1lbS5jXG5pbmRleCA5NTdkNmI5NjIxNmIzLi5iZGY4YTA3OTlhNDI3IDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvZGV2bWVtLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2Rldm1lbS5jXG5AQCAtMTM0LDggJiM0MzsxMzQsOCBAQCB2b2lkIG5ldF9kZXZtZW1fdW5iaW5kX2RtYWJ1ZihzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqYmluZGluZylcbiBcdCAqL1xuIFx0c3luY2hyb25pemVfbmV0KCk7XG4gXG4tXHRpZiAoYmluZGluZy1cdTAwM2VsaXN0Lm5leHQpXG4tXHRcdGxpc3RfZGVsKFx1MDAyNmJpbmRpbmctXHUwMDNlbGlzdCk7XG4mIzQzO1x0aWYgKGJpbmRpbmctXHUwMDNlc29ja19wcml2KVxuJiM0MztcdFx0eGFfZXJhc2UoXHUwMDI2YmluZGluZy1cdTAwM2Vzb2NrX3ByaXYtXHUwMDNlYmluZGluZ3MsIGJpbmRpbmctXHUwMDNlaWQpO1xuIFxuIFx0eGFfZm9yX2VhY2goXHUwMDI2YmluZGluZy1cdTAwM2Vib3VuZF9yeHFzLCB4YV9pZHgsIHJ4cSkge1xuIFx0XHRjb25zdCBzdHJ1Y3QgcHBfbWVtb3J5X3Byb3ZpZGVyX3BhcmFtcyBtcF9wYXJhbXMgPSB7XG5AQCAtMTkzLDYgJiM0MzsxOTMsNyBAQCBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKnZkZXYsXG4gXHRzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmO1xuIFx0dW5zaWduZWQgaW50IHNnX2lkeCwgaTtcbiBcdHVuc2lnbmVkIGxvbmcgdmlydHVhbDtcbiYjNDM7XHR2b2lkICpyZXM7XG4gXHRpbnQgZXJyO1xuIFxuIFx0aWYgKCFkbWFfZGV2KSB7XG5AQCAtMzI1LDEwICYjNDM7MzI2LDE3IEBAIG5ldF9kZXZtZW1fYmluZF9kbWFidWYoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqdmRldixcbiBcdGlmIChlcnIgXHUwMDNjIDApXG4gXHRcdGdvdG8gZXJyX2ZyZWVfY2h1bmtzO1xuIFxuLVx0bGlzdF9hZGQoXHUwMDI2YmluZGluZy1cdTAwM2VsaXN0LCBcdTAwMjZwcml2LVx1MDAzZWJpbmRpbmdzKTtcbiYjNDM7XHRiaW5kaW5nLVx1MDAzZXNvY2tfcHJpdiA9IHByaXY7XG4mIzQzO1x0cmVzID0geGFfc3RvcmUoXHUwMDI2cHJpdi1cdTAwM2ViaW5kaW5ncywgYmluZGluZy1cdTAwM2VpZCwgYmluZGluZywgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKHhhX2lzX2VycihyZXMpKSB7XG4mIzQzO1x0XHRlcnIgPSB4YV9lcnIocmVzKTtcbiYjNDM7XHRcdGdvdG8gZXJyX2VyYXNlX2RtYWJ1Zl9iaW5kaW5ncztcbiYjNDM7XHR9XG4gXG4gXHRyZXR1cm4gYmluZGluZztcbiBcbiYjNDM7ZXJyX2VyYXNlX2RtYWJ1Zl9iaW5kaW5nczpcbiYjNDM7XHR4YV9lcmFzZShcdTAwMjZuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5ncywgYmluZGluZy1cdTAwM2VpZCk7XG4gZXJyX2ZyZWVfY2h1bmtzOlxuIFx0Z2VuX3Bvb2xfZm9yX2VhY2hfY2h1bmsoYmluZGluZy1cdTAwM2VjaHVua19wb29sLFxuIFx0XHRcdFx0bmV0X2Rldm1lbV9kbWFidWZfZnJlZV9jaHVua19vd25lciwgTlVMTCk7XG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2bWVtLmggYi9uZXQvY29yZS9kZXZtZW0uaFxuaW5kZXggMzg1MmE1NjAzNmNiNC4uYmY3N2U1YTlhOGZlNyAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL2Rldm1lbS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9kZXZtZW0uaFxuQEAgLTQ5LDEwICYjNDM7NDksMTAgQEAgc3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcge1xuIFx0ICovXG4gXHRzdHJ1Y3QgcGVyY3B1X3JlZiByZWY7XG4gXG4tXHQvKiBUaGUgbGlzdCBvZiBiaW5kaW5ncyBjdXJyZW50bHkgYWN0aXZlLiBVc2VkIGZvciBuZXRsaW5rIHRvIG5vdGlmeSB1c1xuJiM0MztcdC8qIFRoZSBzb2NrZXQgcHJpdiB0aGlzIGJpbmRpbmcgYmVsb25ncyB0by4gVXNlZCBmb3IgbmV0bGluayB0byBub3RpZnkgdXNcbiBcdCAqIG9mIHRoZSB1c2VyIGRyb3BwaW5nIHRoZSBiaW5kLlxuIFx0ICovXG4tXHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XG4mIzQzO1x0c3RydWN0IG5ldGRldl9ubF9zb2NrICpzb2NrX3ByaXY7XG4gXG4gXHQvKiByeHEmIzM5O3MgdGhpcyBiaW5kaW5nIGlzIGFjdGl2ZSBvbi4gKi9cbiBcdHN0cnVjdCB4YXJyYXkgYm91bmRfcnhxcztcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9uZXRkZXYtZ2VubC5jIGIvbmV0L2NvcmUvbmV0ZGV2LWdlbmwuY1xuaW5kZXggYzE1ZDhkNGNhMWY4Zi4uZDNmM2E5MWE2ZDkzMiAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL25ldGRldi1nZW5sLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL25ldGRldi1nZW5sLmNcbkBAIC0xMDQ0LDEzICYjNDM7MTA0NCwxMSBAQCBpbnQgbmV0ZGV2X25sX2JpbmRfcnhfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0XHRnb3RvIGVycl9nZW5sbXNnX2ZyZWU7XG4gXHR9XG4gXG4tXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlbG9jayk7XG4tXG4gXHRlcnIgPSAwO1xuIFx0bmV0ZGV2ID0gbmV0ZGV2X2dldF9ieV9pbmRleF9sb2NrKGdlbmxfaW5mb19uZXQoaW5mbyksIGlmaW5kZXgpO1xuIFx0aWYgKCFuZXRkZXYpIHtcbiBcdFx0ZXJyID0gLUVOT0RFVjtcbi1cdFx0Z290byBlcnJfdW5sb2NrX3NvY2s7XG4mIzQzO1x0XHRnb3RvIGVycl9nZW5sbXNnX2ZyZWU7XG4gXHR9XG4gXHRpZiAoIW5ldGlmX2RldmljZV9wcmVzZW50KG5ldGRldikpXG4gXHRcdGVyciA9IC1FTk9ERVY7XG5AQCAtMTEwMiw4ICYjNDM7MTEwMCw2IEBAIGludCBuZXRkZXZfbmxfYmluZF9yeF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXG4gXHRuZXRkZXZfdW5sb2NrKG5ldGRldik7XG4gXG4tXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2Vsb2NrKTtcbi1cbiBcdHJldHVybiBlcnIgXHUwMDNjIDAgPyBlcnIgOiAwO1xuIFxuIGVycl91bmJpbmQ6XG5AQCAtMTExMiw4ICYjNDM7MTEwOCw2IEBAIGludCBuZXRkZXZfbmxfYmluZF9yeF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRiaXRtYXBfZnJlZShyeHFfYml0bWFwKTtcbiBlcnJfdW5sb2NrOlxuIFx0bmV0ZGV2X3VubG9jayhuZXRkZXYpO1xuLWVycl91bmxvY2tfc29jazpcbi1cdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZWxvY2spO1xuIGVycl9nZW5sbXNnX2ZyZWU6XG4gXHRubG1zZ19mcmVlKHJzcCk7XG4gXHRyZXR1cm4gZXJyO1xuQEAgLTExODUsMTIgJiM0MzsxMTc5LDEwIEBAIGludCBuZXRkZXZfbmxfYmluZF90eF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRcdGdvdG8gZXJyX2dlbmxtc2dfZnJlZTtcbiBcdH1cbiBcbi1cdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2Vsb2NrKTtcbi1cbiBcdG5ldGRldiA9IG5ldGRldl9nZXRfYnlfaW5kZXhfbG9jayhnZW5sX2luZm9fbmV0KGluZm8pLCBpZmluZGV4KTtcbiBcdGlmICghbmV0ZGV2KSB7XG4gXHRcdGVyciA9IC1FTk9ERVY7XG4tXHRcdGdvdG8gZXJyX3VubG9ja19zb2NrO1xuJiM0MztcdFx0Z290byBlcnJfZ2VubG1zZ19mcmVlO1xuIFx0fVxuIFxuIFx0aWYgKCFuZXRpZl9kZXZpY2VfcHJlc2VudChuZXRkZXYpKSB7XG5AQCAtMTIzMyw3ICYjNDM7MTIyNSw2IEBAIGludCBuZXRkZXZfbmxfYmluZF90eF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRpZiAoYmluZF9kZXYgIT0gbmV0ZGV2KVxuIFx0XHRuZXRkZXZfdW5sb2NrKGJpbmRfZGV2KTtcbiBcdG5ldGRldl91bmxvY2sobmV0ZGV2KTtcbi1cdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZWxvY2spO1xuIFxuIFx0cmV0dXJuIGdlbmxtc2dfcmVwbHkocnNwLCBpbmZvKTtcbiBcbkBAIC0xMjQyLDggJiM0MzsxMjMzLDYgQEAgaW50IG5ldGRldl9ubF9iaW5kX3R4X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdFx0bmV0ZGV2X3VubG9jayhiaW5kX2Rldik7XG4gZXJyX3VubG9ja19uZXRkZXY6XG4gXHRuZXRkZXZfdW5sb2NrKG5ldGRldik7XG4tZXJyX3VubG9ja19zb2NrOlxuLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlbG9jayk7XG4gZXJyX2dlbmxtc2dfZnJlZTpcbiBcdG5sbXNnX2ZyZWUocnNwKTtcbiBcdHJldHVybiBlcnI7XG5AQCAtMTQxOCwxOSAmIzQzOzE0MDcsMTcgQEAgaW50IG5ldGRldl9ubF9xdWV1ZV9jcmVhdGVfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFxuIHZvaWQgbmV0ZGV2X25sX3NvY2tfcHJpdl9pbml0KHN0cnVjdCBuZXRkZXZfbmxfc29jayAqcHJpdilcbiB7XG4tXHRJTklUX0xJU1RfSEVBRChcdTAwMjZwcml2LVx1MDAzZWJpbmRpbmdzKTtcbi1cdG11dGV4X2luaXQoXHUwMDI2cHJpdi1cdTAwM2Vsb2NrKTtcbiYjNDM7XHR4YV9pbml0KFx1MDAyNnByaXYtXHUwMDNlYmluZGluZ3MpO1xuIH1cbiBcbiB2b2lkIG5ldGRldl9ubF9zb2NrX3ByaXZfZGVzdHJveShzdHJ1Y3QgbmV0ZGV2X25sX3NvY2sgKnByaXYpXG4ge1xuIFx0c3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKmJpbmRpbmc7XG4tXHRzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqdGVtcDtcbiBcdG5ldGRldmljZV90cmFja2VyIGRldl90cmFja2VyO1xuIFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldjtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHhhX2lkeDtcbiBcbi1cdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2Vsb2NrKTtcbi1cdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShiaW5kaW5nLCB0ZW1wLCBcdTAwMjZwcml2LVx1MDAzZWJpbmRpbmdzLCBsaXN0KSB7XG4mIzQzO1x0eGFfZm9yX2VhY2goXHUwMDI2cHJpdi1cdTAwM2ViaW5kaW5ncywgeGFfaWR4LCBiaW5kaW5nKSB7XG4gXHRcdG11dGV4X2xvY2soXHUwMDI2YmluZGluZy1cdTAwM2Vsb2NrKTtcbiBcdFx0ZGV2ID0gYmluZGluZy1cdTAwM2VkZXY7XG4gXHRcdGlmICghZGV2KSB7XG5AQCAtMTQ0Niw3ICYjNDM7MTQzMyw3IEBAIHZvaWQgbmV0ZGV2X25sX3NvY2tfcHJpdl9kZXN0cm95KHN0cnVjdCBuZXRkZXZfbmxfc29jayAqcHJpdilcbiBcdFx0bmV0ZGV2X3VubG9jayhkZXYpO1xuIFx0XHRuZXRkZXZfcHV0KGRldiwgXHUwMDI2ZGV2X3RyYWNrZXIpO1xuIFx0fVxuLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlbG9jayk7XG4mIzQzO1x0eGFfZGVzdHJveShcdTAwMjZwcml2LVx1MDAzZWJpbmRpbmdzKTtcbiB9XG4gXG4gc3RhdGljIGludCBuZXRkZXZfZ2VubF9uZXRkZXZpY2VfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNToxMDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX0RFVk1FTSYjMzQ7LAogICAgJiMzNDtETUFfU0hBUkVEX0JVRkZFUiYjMzQ7LAogICAgJiMzNDtQQUdFX1BPT0wmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZXRkZXZfbmxfYmluZF9yeF9kb2l0JiMzNDssCiAgICAmIzM0O25ldGRldl9ubF9iaW5kX3R4X2RvaXQmIzM0OywKICAgICYjMzQ7bmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZiYjMzQ7LAogICAgJiMzNDtuZXRfZGV2bWVtX3VuYmluZF9kbWFidWYmIzM0OywKICAgICYjMzQ7bmV0ZGV2X25sX3NvY2tfcHJpdl9pbml0JiMzNDssCiAgICAmIzM0O25ldGRldl9ubF9zb2NrX3ByaXZfZGVzdHJveSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbmV0ZGV2IG5ldGxpbmsgc29ja2V0IGJpbmRpbmdzIGhhbmRsaW5nLCBjaGFuZ2luZyB0aGUgYGJpbmRpbmdzYCBsaXN0IHRvIGFuIGB4YXJyYXlgIGFuZCByZW1vdmluZyB0aGUgYGxvY2tgIG11dGV4IGZyb20gYHN0cnVjdCBuZXRkZXZfbmxfc29ja2AuIFRoaXMgYWZmZWN0cyB0aGUgYG5ldGRldl9ubF9iaW5kX3J4X2RvaXRgLCBgbmV0ZGV2X25sX2JpbmRfdHhfZG9pdGAsIGBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmYCwgYW5kIGBuZXRfZGV2bWVtX3VuYmluZF9kbWFidWZgIGZ1bmN0aW9ucywgd2hpY2ggYXJlIHJlYWNoYWJsZSB2aWEgbmV0bGluayBjb21tYW5kcy4gVGhlIGNoYW5nZXMgYXJlIGZ1bmN0aW9uYWwgYW5kIGludm9sdmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHN5bmNocm9uaXphdGlvbiwgbWFraW5nIHRoZW0gd29ydGggZnV6emluZy4gVGhlIGBORVRfREVWTUVNYCBmZWF0dXJlIGFuZCBpdHMgZGVwZW5kZW5jaWVzIChgRE1BX1NIQVJFRF9CVUZGRVJgIGFuZCBgUEFHRV9QT09MYCkgbXVzdCBiZSBlbmFibGVkIHRvIHRlc3QgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3ZTViYzVmNjc0MzIxNmJiMjRmMzgxYzViZGE5NjE0YTA3NGFhMDg2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgMTEgMTU6MTA6MTIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRkZXZfbmV0bGluay5oIGIvaW5jbHVkZS9uZXQvbmV0ZGV2X25ldGxpbmsuaAppbmRleCAwNzU5NjJkYmU3NDNiLi40NWE0YTQ4MmQ0MmU0IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9uZXRkZXZfbmV0bGluay5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L25ldGRldl9uZXRsaW5rLmgKQEAgLTIsMTEgJiM0MzsyLDEwIEBACiAjaWZuZGVmIF9fTkVUX05FVERFVl9ORVRMSU5LX0gKICNkZWZpbmUgX19ORVRfTkVUREVWX05FVExJTktfSAogCi0jaW5jbHVkZSAmbHQ7bGludXgvbGlzdC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC94YXJyYXkuaCZndDsKIAogc3RydWN0IG5ldGRldl9ubF9zb2NrIHsKLQlzdHJ1Y3QgbXV0ZXggbG9jazsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGJpbmRpbmdzOwomIzQzOwlzdHJ1Y3QgeGFycmF5IGJpbmRpbmdzOwogfTsKIAogI2VuZGlmCS8qIF9fTkVUX05FVERFVl9ORVRMSU5LX0ggKi8KZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Rldm1lbS5jIGIvbmV0L2NvcmUvZGV2bWVtLmMKaW5kZXggOTU3ZDZiOTYyMTZiMy4uYmRmOGEwNzk5YTQyNyAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZGV2bWVtLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvZGV2bWVtLmMKQEAgLTEzNCw4ICYjNDM7MTM0LDggQEAgdm9pZCBuZXRfZGV2bWVtX3VuYmluZF9kbWFidWYoc3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKmJpbmRpbmcpCiAJICovCiAJc3luY2hyb25pemVfbmV0KCk7CiAKLQlpZiAoYmluZGluZy0mZ3Q7bGlzdC5uZXh0KQotCQlsaXN0X2RlbCgmYW1wO2JpbmRpbmctJmd0O2xpc3QpOwomIzQzOwlpZiAoYmluZGluZy0mZ3Q7c29ja19wcml2KQomIzQzOwkJeGFfZXJhc2UoJmFtcDtiaW5kaW5nLSZndDtzb2NrX3ByaXYtJmd0O2JpbmRpbmdzLCBiaW5kaW5nLSZndDtpZCk7CiAKIAl4YV9mb3JfZWFjaCgmYW1wO2JpbmRpbmctJmd0O2JvdW5kX3J4cXMsIHhhX2lkeCwgcnhxKSB7CiAJCWNvbnN0IHN0cnVjdCBwcF9tZW1vcnlfcHJvdmlkZXJfcGFyYW1zIG1wX3BhcmFtcyA9IHsKQEAgLTE5Myw2ICYjNDM7MTkzLDcgQEAgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICp2ZGV2LAogCXN0cnVjdCBkbWFfYnVmICpkbWFidWY7CiAJdW5zaWduZWQgaW50IHNnX2lkeCwgaTsKIAl1bnNpZ25lZCBsb25nIHZpcnR1YWw7CiYjNDM7CXZvaWQgKnJlczsKIAlpbnQgZXJyOwogCiAJaWYgKCFkbWFfZGV2KSB7CkBAIC0zMjUsMTAgJiM0MzszMjYsMTcgQEAgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICp2ZGV2LAogCWlmIChlcnIgJmx0OyAwKQogCQlnb3RvIGVycl9mcmVlX2NodW5rczsKIAotCWxpc3RfYWRkKCZhbXA7YmluZGluZy0mZ3Q7bGlzdCwgJmFtcDtwcml2LSZndDtiaW5kaW5ncyk7CiYjNDM7CWJpbmRpbmctJmd0O3NvY2tfcHJpdiA9IHByaXY7CiYjNDM7CXJlcyA9IHhhX3N0b3JlKCZhbXA7cHJpdi0mZ3Q7YmluZGluZ3MsIGJpbmRpbmctJmd0O2lkLCBiaW5kaW5nLCBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKHhhX2lzX2VycihyZXMpKSB7CiYjNDM7CQllcnIgPSB4YV9lcnIocmVzKTsKJiM0MzsJCWdvdG8gZXJyX2VyYXNlX2RtYWJ1Zl9iaW5kaW5nczsKJiM0MzsJfQogCiAJcmV0dXJuIGJpbmRpbmc7CiAKJiM0MztlcnJfZXJhc2VfZG1hYnVmX2JpbmRpbmdzOgomIzQzOwl4YV9lcmFzZSgmYW1wO25ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmdzLCBiaW5kaW5nLSZndDtpZCk7CiBlcnJfZnJlZV9jaHVua3M6CiAJZ2VuX3Bvb2xfZm9yX2VhY2hfY2h1bmsoYmluZGluZy0mZ3Q7Y2h1bmtfcG9vbCwKIAkJCQluZXRfZGV2bWVtX2RtYWJ1Zl9mcmVlX2NodW5rX293bmVyLCBOVUxMKTsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Rldm1lbS5oIGIvbmV0L2NvcmUvZGV2bWVtLmgKaW5kZXggMzg1MmE1NjAzNmNiNC4uYmY3N2U1YTlhOGZlNyAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZGV2bWVtLmgKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvZGV2bWVtLmgKQEAgLTQ5LDEwICYjNDM7NDksMTAgQEAgc3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgewogCSAqLwogCXN0cnVjdCBwZXJjcHVfcmVmIHJlZjsKIAotCS8qIFRoZSBsaXN0IG9mIGJpbmRpbmdzIGN1cnJlbnRseSBhY3RpdmUuIFVzZWQgZm9yIG5ldGxpbmsgdG8gbm90aWZ5IHVzCiYjNDM7CS8qIFRoZSBzb2NrZXQgcHJpdiB0aGlzIGJpbmRpbmcgYmVsb25ncyB0by4gVXNlZCBmb3IgbmV0bGluayB0byBub3RpZnkgdXMKIAkgKiBvZiB0aGUgdXNlciBkcm9wcGluZyB0aGUgYmluZC4KIAkgKi8KLQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiYjNDM7CXN0cnVjdCBuZXRkZXZfbmxfc29jayAqc29ja19wcml2OwogCiAJLyogcnhxJiMzOTtzIHRoaXMgYmluZGluZyBpcyBhY3RpdmUgb24uICovCiAJc3RydWN0IHhhcnJheSBib3VuZF9yeHFzOwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvbmV0ZGV2LWdlbmwuYyBiL25ldC9jb3JlL25ldGRldi1nZW5sLmMKaW5kZXggYzE1ZDhkNGNhMWY4Zi4uZDNmM2E5MWE2ZDkzMiAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvbmV0ZGV2LWdlbmwuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9uZXRkZXYtZ2VubC5jCkBAIC0xMDQ0LDEzICYjNDM7MTA0NCwxMSBAQCBpbnQgbmV0ZGV2X25sX2JpbmRfcnhfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogCQlnb3RvIGVycl9nZW5sbXNnX2ZyZWU7CiAJfQogCi0JbXV0ZXhfbG9jaygmYW1wO3ByaXYtJmd0O2xvY2spOwotCiAJZXJyID0gMDsKIAluZXRkZXYgPSBuZXRkZXZfZ2V0X2J5X2luZGV4X2xvY2soZ2VubF9pbmZvX25ldChpbmZvKSwgaWZpbmRleCk7CiAJaWYgKCFuZXRkZXYpIHsKIAkJZXJyID0gLUVOT0RFVjsKLQkJZ290byBlcnJfdW5sb2NrX3NvY2s7CiYjNDM7CQlnb3RvIGVycl9nZW5sbXNnX2ZyZWU7CiAJfQogCWlmICghbmV0aWZfZGV2aWNlX3ByZXNlbnQobmV0ZGV2KSkKIAkJZXJyID0gLUVOT0RFVjsKQEAgLTExMDIsOCAmIzQzOzExMDAsNiBAQCBpbnQgbmV0ZGV2X25sX2JpbmRfcnhfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogCiAJbmV0ZGV2X3VubG9jayhuZXRkZXYpOwogCi0JbXV0ZXhfdW5sb2NrKCZhbXA7cHJpdi0mZ3Q7bG9jayk7Ci0KIAlyZXR1cm4gZXJyICZsdDsgMCA/IGVyciA6IDA7CiAKIGVycl91bmJpbmQ6CkBAIC0xMTEyLDggJiM0MzsxMTA4LDYgQEAgaW50IG5ldGRldl9ubF9iaW5kX3J4X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIAliaXRtYXBfZnJlZShyeHFfYml0bWFwKTsKIGVycl91bmxvY2s6CiAJbmV0ZGV2X3VubG9jayhuZXRkZXYpOwotZXJyX3VubG9ja19zb2NrOgotCW11dGV4X3VubG9jaygmYW1wO3ByaXYtJmd0O2xvY2spOwogZXJyX2dlbmxtc2dfZnJlZToKIAlubG1zZ19mcmVlKHJzcCk7CiAJcmV0dXJuIGVycjsKQEAgLTExODUsMTIgJiM0MzsxMTc5LDEwIEBAIGludCBuZXRkZXZfbmxfYmluZF90eF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiAJCWdvdG8gZXJyX2dlbmxtc2dfZnJlZTsKIAl9CiAKLQltdXRleF9sb2NrKCZhbXA7cHJpdi0mZ3Q7bG9jayk7Ci0KIAluZXRkZXYgPSBuZXRkZXZfZ2V0X2J5X2luZGV4X2xvY2soZ2VubF9pbmZvX25ldChpbmZvKSwgaWZpbmRleCk7CiAJaWYgKCFuZXRkZXYpIHsKIAkJZXJyID0gLUVOT0RFVjsKLQkJZ290byBlcnJfdW5sb2NrX3NvY2s7CiYjNDM7CQlnb3RvIGVycl9nZW5sbXNnX2ZyZWU7CiAJfQogCiAJaWYgKCFuZXRpZl9kZXZpY2VfcHJlc2VudChuZXRkZXYpKSB7CkBAIC0xMjMzLDcgJiM0MzsxMjI1LDYgQEAgaW50IG5ldGRldl9ubF9iaW5kX3R4X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIAlpZiAoYmluZF9kZXYgIT0gbmV0ZGV2KQogCQluZXRkZXZfdW5sb2NrKGJpbmRfZGV2KTsKIAluZXRkZXZfdW5sb2NrKG5ldGRldik7Ci0JbXV0ZXhfdW5sb2NrKCZhbXA7cHJpdi0mZ3Q7bG9jayk7CiAKIAlyZXR1cm4gZ2VubG1zZ19yZXBseShyc3AsIGluZm8pOwogCkBAIC0xMjQyLDggJiM0MzsxMjMzLDYgQEAgaW50IG5ldGRldl9ubF9iaW5kX3R4X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIAkJbmV0ZGV2X3VubG9jayhiaW5kX2Rldik7CiBlcnJfdW5sb2NrX25ldGRldjoKIAluZXRkZXZfdW5sb2NrKG5ldGRldik7Ci1lcnJfdW5sb2NrX3NvY2s6Ci0JbXV0ZXhfdW5sb2NrKCZhbXA7cHJpdi0mZ3Q7bG9jayk7CiBlcnJfZ2VubG1zZ19mcmVlOgogCW5sbXNnX2ZyZWUocnNwKTsKIAlyZXR1cm4gZXJyOwpAQCAtMTQxOCwxOSAmIzQzOzE0MDcsMTcgQEAgaW50IG5ldGRldl9ubF9xdWV1ZV9jcmVhdGVfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogCiB2b2lkIG5ldGRldl9ubF9zb2NrX3ByaXZfaW5pdChzdHJ1Y3QgbmV0ZGV2X25sX3NvY2sgKnByaXYpCiB7Ci0JSU5JVF9MSVNUX0hFQUQoJmFtcDtwcml2LSZndDtiaW5kaW5ncyk7Ci0JbXV0ZXhfaW5pdCgmYW1wO3ByaXYtJmd0O2xvY2spOwomIzQzOwl4YV9pbml0KCZhbXA7cHJpdi0mZ3Q7YmluZGluZ3MpOwogfQogCiB2b2lkIG5ldGRldl9ubF9zb2NrX3ByaXZfZGVzdHJveShzdHJ1Y3QgbmV0ZGV2X25sX3NvY2sgKnByaXYpCiB7CiAJc3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKmJpbmRpbmc7Ci0Jc3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKnRlbXA7CiAJbmV0ZGV2aWNlX3RyYWNrZXIgZGV2X3RyYWNrZXI7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKJiM0MzsJdW5zaWduZWQgbG9uZyB4YV9pZHg7CiAKLQltdXRleF9sb2NrKCZhbXA7cHJpdi0mZ3Q7bG9jayk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGJpbmRpbmcsIHRlbXAsICZhbXA7cHJpdi0mZ3Q7YmluZGluZ3MsIGxpc3QpIHsKJiM0MzsJeGFfZm9yX2VhY2goJmFtcDtwcml2LSZndDtiaW5kaW5ncywgeGFfaWR4LCBiaW5kaW5nKSB7CiAJCW11dGV4X2xvY2soJmFtcDtiaW5kaW5nLSZndDtsb2NrKTsKIAkJZGV2ID0gYmluZGluZy0mZ3Q7ZGV2OwogCQlpZiAoIWRldikgewpAQCAtMTQ0Niw3ICYjNDM7MTQzMyw3IEBAIHZvaWQgbmV0ZGV2X25sX3NvY2tfcHJpdl9kZXN0cm95KHN0cnVjdCBuZXRkZXZfbmxfc29jayAqcHJpdikKIAkJbmV0ZGV2X3VubG9jayhkZXYpOwogCQluZXRkZXZfcHV0KGRldiwgJmFtcDtkZXZfdHJhY2tlcik7CiAJfQotCW11dGV4X3VubG9jaygmYW1wO3ByaXYtJmd0O2xvY2spOwomIzQzOwl4YV9kZXN0cm95KCZhbXA7cHJpdi0mZ3Q7YmluZGluZ3MpOwogfQogCiBzdGF0aWMgaW50IG5ldGRldl9nZW5sX25ldGRldmljZV9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNToxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDk2CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMzEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIE5ldGRldiBOZXRsaW5rIEJpbmRpbmcgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggaGVyZSwgYW5kIGl0JiMzOTtzIG1ha2luZyBzb21lIHByZXR0eSBzaWduaWZpY2FudCBjaGFuZ2VzIHRvIGhvdyBuZXRkZXYgbmV0bGluayBzb2NrZXQgYmluZGluZ3MgYXJlIGhhbmRsZWQuIFNwZWNpZmljYWxseSwgaXQgc2VlbXMgdG8gYmUgaW4gYG5ldC9jb3JlL2Rldm1lbS5jYCwgYG5ldC9jb3JlL25ldGRldi1nZW5sLmNgLCBhbmQgYGluY2x1ZGUvbmV0L25ldGRldl9uZXRsaW5rLmhgLiBUaGV5JiMzOTtyZSBzd2FwcGluZyBvdXQgdGhlIGBiaW5kaW5nc2AgbGlzdCBmb3IgYW4gYHhhcnJheWAgYW5kLCBpbnRlcmVzdGluZywgcmVtb3ZpbmcgdGhlIGBsb2NrYCBtdXRleCBmcm9tIGBzdHJ1Y3QgbmV0ZGV2X25sX3NvY2tgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMuCgpUaGlzIHBhdGNoIHRvdWNoZXMgdGhlc2UgZnVuY3Rpb25zIGRpcmVjdGx5OiBgbmV0ZGV2X25sX2JpbmRfcnhfZG9pdGAsIGBuZXRkZXZfbmxfYmluZF90eF9kb2l0YCwgYG5ldGRldl9ubF9zb2NrX3ByaXZfaW5pdGAsIGBuZXRkZXZfbmxfc29ja19wcml2X2Rlc3Ryb3lgLCBgbmV0X2Rldm1lbV91bmJpbmRfZG1hYnVmYCwgYW5kIGBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmYC4gVGhlc2UgYWxsIGxvb2sgbGlrZSBuZXRsaW5rIGhhbmRsZXJzIGZvciB0aGUgbmV0ZGV2IGZhbWlseS4gUmlnaHQsIHNvIGl0JiMzOTtzIGEgbmV0bGluay1mb2N1c2VkIGNoYW5nZS4KCk15IGltbWVkaWF0ZSBxdWVzdGlvbiBpczogaXMgdGhpcyByZWFjaGFibGU/IElzIGl0IHdvcnRoIGZ1enppbmc/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IHRyaWdnZXJlZC4gSSBzaG91bGQgYWxzbyB0cmFjayBkb3duIHRoZSBhc3NvY2lhdGVkIGNvbmZpZyBvcHRpb25zIGZvciBkZXZtZW0uIGBuZXQvY29yZS9kZXZtZW0uY2AgaXMgdGhlIHByaW1lIHN1c3BlY3QgZm9yIGNvbmZpZyBjaGVja3MuIE9uY2UgSSBoYXZlIHRoZSByZWxldmFudCBjb25maWcgb3B0aW9ucywgSSBjYW4gZGV0ZXJtaW5lIHRoZSBsaWtlbGlob29kIG9mIHRyaWdnZXJpbmcgdGhpcyBjb2RlIHBhdGguIEkgd2lsbCBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGUgb2xkIGFuZCBuZXcgbWV0aG9kcyBkbyBhbmQgaWYgdGhpcyBpcyBhIGdvb2QgcGxhY2UgdG8gY29uY2VudHJhdGUgbXkgZWZmb3J0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNToxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZXZtZW1cXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvTWFrZWZpbGU9NDg9b2JqLSQoQ09ORklHX05FVF9URVNUKSAmIzQzOz0gbmV0X3Rlc3Qub1xubmV0L2NvcmUvTWFrZWZpbGU6NDk6b2JqLSQoQ09ORklHX05FVF9ERVZNRU0pICYjNDM7PSBkZXZtZW0ub1xubmV0L2NvcmUvTWFrZWZpbGUtNTAtb2JqLSQoQ09ORklHX0RFQlVHX05FVCkgJiM0Mzs9IGxvY2tfZGVidWcub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE1OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ4NjkKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBgQ09ORklHX05FVF9ERVZNRU1gIERlcGVuZGVuY3kqKgoKUmlnaHQsIHNvIHdlJiMzOTtyZSBzZWVpbmcgdGhhdCBgQ09ORklHX05FVF9ERVZNRU1gIGlzIGEgaGFyZCByZXF1aXJlbWVudCBzb21ld2hlcmUuIE1ha2VzIHNlbnNlLCBnaXZlbiB0aGUgcG90ZW50aWFsIGZvciBkaXJlY3QgZGV2aWNlIG1lbW9yeSBhY2Nlc3MuIE15IGluaXRpYWwgbW92ZSBoZXJlIGlzIGFsd2F5cyB0byBkaXZlIHN0cmFpZ2h0IGludG8gdGhlIEtjb25maWcgZmlsZXMuIFRpbWUgdG8gY2hlY2sgdGhlIGRlcGVuZGVuY2llcy4gVGhpcyBuZWVkcyB0byBiZSBjaGVja2VkIGNhcmVmdWxseS4gSSYjMzk7bGwgbmVlZCB0byBsb2NhdGUgd2hlcmUgYENPTkZJR19ORVRfREVWTUVNYCBpcyBkZWZpbmVkLCBmaWd1cmUgb3V0ICp3aHkqIGl0JiMzOTtzIG5lZWRlZCwgYW5kIHdoYXQgb3RoZXIgY29uZmlndXJhdGlvbnMgaXQgbWlnaHQgaW5mbHVlbmNlLiBVbmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0IG9mIHRoaXMgY29uZmlndXJhdGlvbiB3aWxsIGJlIGtleS4gSXMgaXQgYSBjb3JlIG5ldHdvcmtpbmcgZmVhdHVyZSwgb3IgYSBtb3JlIG5pY2hlLCBwZXJmb3JtYW5jZS1vcmllbnRlZCBvcHRpb24/IFRoaXMgbmVlZHMgdGhvcm91Z2ggaW52ZXN0aWdhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNToxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVUX0RFVk1FTSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9LY29uZmlnPTY2PWNvbmZpZyBTS0JfRVhURU5TSU9OU1xuLS1cbm5ldC9LY29uZmlnLTY4LVxubmV0L0tjb25maWc6Njk6Y29uZmlnIE5FVF9ERVZNRU1cbm5ldC9LY29uZmlnLTcwLVx0ZGVmX2Jvb2wgeVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE1OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxNjMKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqSW52ZXN0aWdhdGluZyBhIEtlcm5lbCBDb25maWd1cmF0aW9uIEZsYWcqKgoKT2theSwgc28gYE5FVF9ERVZNRU1gIGlzIGRlZmluZWQgYXMgYGRlZl9ib29sIHlgLiBUaGF0IG1lYW5zIGl0JiMzOTtzIGVuYWJsZWQgYnkgZGVmYXVsdCwgd2hpY2ggaXMgaW1wb3J0YW50IHRvIGtub3cuIEJ1dCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgc2NvcGUgYW5kIGltcGFjdC4gQmVmb3JlIEkganVtcCB0byBjb25jbHVzaW9ucywgSSBuZWVkIHRvIHNlZSB3aGF0IG90aGVyIGNvbmZpZ3VyYXRpb25zIGRlcGVuZCBvbiBpdC4gS25vd2luZyBpdHMgZGVwZW5kZW5jaWVzIHdpbGwgaWxsdW1pbmF0ZSB3aGljaCBmZWF0dXJlcyBvciBmdW5jdGlvbmFsaXRpZXMgYXJlIGFmZmVjdGVkIGlmIEkgd2VyZSB0byBjaGFuZ2UgaXRzIHN0YXRlLiBUaGlzIHdpbGwgYWxzbyBoZWxwIG1lIG5hcnJvdyBkb3duIHdoZXJlIHRvIGxvb2sgaWYgdGhlcmUgYXJlIGFueSBzaWRlIGVmZmVjdHMgb3IgcG90ZW50aWFsIGNvbmZsaWN0cy4gVGltZSB0byBkaWcgaW4gYW5kIHRyYWNlIHRoZSByZWxhdGlvbnNoaXBzLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGRlcGVuZGVuY3kgdHJlZSBsb29rcyBsaWtlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE1OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRfREVWTUVNJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9LY29uZmlnPTY2PWNvbmZpZyBTS0JfRVhURU5TSU9OU1xuLS1cbm5ldC9LY29uZmlnLTY4LVxubmV0L0tjb25maWc6Njk6Y29uZmlnIE5FVF9ERVZNRU1cbm5ldC9LY29uZmlnLTcwLVx0ZGVmX2Jvb2wgeVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE1OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0MjMKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZywgd2hlcmUmIzM5O3MgdGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQgdW50YW5nbGluZyB0aGlzIGNvbmZpZ3VyYXRpb24gbXlzdGVyeT8gUmlnaHQsIHRoZSBgbmV0L0tjb25maWdgIGZpbGUuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBnb2luZyB0byBqdW1wIGluIGFyb3VuZCBsaW5lIDY5LiBUaGF0JiMzOTtzIHVzdWFsbHkgYSBnb29kIHNwb3QgdG8gZ2V0IGEgc2Vuc2Ugb2YgdGhlIGhpZ2hlci1sZXZlbCBuZXR3b3JrIGNvbmZpZ3VyYXRpb25zIGFuZCBkZXBlbmRlbmNpZXMuIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSBzb21lIGNyaXRpY2FsIGRlZmluaXRpb25zLCBtYXliZSBzb21lIGVhcmx5IG1lbnUgc3RydWN0dXJlcyB0aGF0IGxheSBvdXQgdGhlIGJ1aWxkaW5nIGJsb2NrcyBmb3IgdGhlIG1vcmUgZ3JhbnVsYXIgb3B0aW9ucyBmdXJ0aGVyIGRvd24uIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIG9uIGhvdyB0aGUgdmFyaW91cyBuZXR3b3JrIHN1YnN5c3RlbXMgYXJlIGJyb3VnaHQgdG9nZXRoZXIgYXQgdGhlIGNvbmZpZ3VyYXRpb24gbGV2ZWwuIEkmIzM5O20gaG9waW5nIHRvIGdldCBhIHF1aWNrIG92ZXJ2aWV3IG9mIHRoZSBvcmdhbml6YXRpb25hbCBhcHByb2FjaCB1c2VkIGluIHRoZSBgbmV0L2AgZGlyZWN0b3J5JiMzOTtzIGNvbmZpZ3VyYXRpb24gZmlsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTU6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNjA6XHRjb25maWcgTkVUX1JFRElSRUNUXG4gIDYxOlx0XHRib29sXG4gIDYyOlx0XG4gIDYzOlx0Y29uZmlnIFNLQl9ERUNSWVBURURcbiAgNjQ6XHRcdGJvb2xcbiAgNjU6XHRcbiAgNjY6XHRjb25maWcgU0tCX0VYVEVOU0lPTlNcbiAgNjc6XHRcdGJvb2xcbiAgNjg6XHRcbiAgNjk6XHRjb25maWcgTkVUX0RFVk1FTVxuICA3MDpcdFx0ZGVmX2Jvb2wgeVxuICA3MTpcdFx0c2VsZWN0IEdFTkVSSUNfQUxMT0NBVE9SXG4gIDcyOlx0XHRkZXBlbmRzIG9uIERNQV9TSEFSRURfQlVGRkVSXG4gIDczOlx0XHRkZXBlbmRzIG9uIFBBR0VfUE9PTFxuICA3NDpcdFxuICA3NTpcdGNvbmZpZyBORVRfU0hBUEVSXG4gIDc2Olx0XHRib29sXG4gIDc3Olx0XG4gIDc4Olx0Y29uZmlnIE5FVF9DUkMzMkNcbiAgNzk6XHRcdGJvb2xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTU6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTgzOQoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDQ1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyB0aGUgRGVwZW5kZW5jaWVzIG9mIGBORVRfREVWTUVNYCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYE5FVF9ERVZNRU1gIGFuZCBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHByZXJlcXVpc2l0ZXMuIFJpZ2h0IG9mZiB0aGUgYmF0LCBpdCYjMzk7cyB0ZWxsaW5nIG1lIGl0IGRlcGVuZHMgb24gYm90aCBgRE1BX1NIQVJFRF9CVUZGRVJgIGFuZCBgUEFHRV9QT09MYC4gVGhhdCBtYWtlcyBzZW5zZTsgd2UgbmVlZCBhIHNoYXJlZCBtZW1vcnkgc3BhY2UgYW5kIGEgbWVjaGFuaXNtIHRvIG1hbmFnZSBtZW1vcnkgcGFnZXMuIE15IG5leHQgc3RlcCBpcyB0byBxdWlja2x5IHZlcmlmeSB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIGZvciBgRE1BX1NIQVJFRF9CVUZGRVJgLiBJcyBpdCBlbmFibGVkIGJ5IGRlZmF1bHQgaW4gdGhlIGtlcm5lbCBvciBkb2VzIGl0IG5lZWQgdG8gYmUgZXhwbGljaXRseSBzZWxlY3RlZCBpbiB0aGUgY29uZmlndXJhdGlvbj8gSSBuZWVkIHRvIGtub3cgaWYgdGhpcyBpcyBzb21ldGhpbmcgdGhhdCBtaWdodCBiZSBhIGNvbW1vbiBzb3VyY2Ugb2YgcHJvYmxlbXMgZHVyaW5nIGJ1aWxkLCBhbmQgSSBkb24mIzM5O3Qgd2FudCB0byBtYWtlIGFzc3VtcHRpb25zLiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBjb25maWcgYW5kIHNlZSB3aGF0JiMzOTtzIHdoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE1OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBETUFfU0hBUkVEX0JVRkZFUiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jhc2UvS2NvbmZpZz0yMTM9c291cmNlIFwmIzM0O2RyaXZlcnMvYmFzZS9yZWdtYXAvS2NvbmZpZ1wmIzM0O1xuZHJpdmVycy9iYXNlL0tjb25maWctMjE0LVxuZHJpdmVycy9iYXNlL0tjb25maWc6MjE1OmNvbmZpZyBETUFfU0hBUkVEX0JVRkZFUlxuZHJpdmVycy9iYXNlL0tjb25maWctMjE2LVx0Ym9vbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNToxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTU2CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IHNvbWV0aGluZyBpcyBjb25maWd1cmVkIGluIHRoZSBrZXJuZWwsIGFuZCB0aGUgYGRyaXZlcnMvYmFzZS9LY29uZmlnYCBmaWxlIHNlZW1zIGxpa2UgYSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0LiBHaXZlbiBteSBleHBlcmllbmNlLCBsaW5lIDIxNSBzb3VuZHMgbGlrZSBhIGdvb2QgcG9pbnQgdG8gemVybyBpbiBvbi4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBzb21ldGhpbmcgZnVuZGFtZW50YWwsIHByb2JhYmx5IGEgY29yZSBvcHRpb24gcmVsYXRlZCB0byBzb21lIGRyaXZlciBvciBiYXNlIGZ1bmN0aW9uYWxpdHksIG9yIG1heWJlIGV2ZW4gYSBtYWNybyBkZWZpbml0aW9uLiBMZXQgbWUgcHVsbCB0aGF0IGZpbGUgYW5kIGdldCB0byBsaW5lIDIxNSwgSSBzdXNwZWN0IEkgY2FuIHF1aWNrbHkgcGlucG9pbnQgdGhlIHJlbGV2YW50IGNvbmZpZyBvcHRpb24sIGFuZCB1bmRlcnN0YW5kIGl0cyBjb250ZXh0IHdpdGhpbiB0aGUgd2lkZXIgY29uZmlndXJhdGlvbiBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE1OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9iYXNlL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDIxMDpcdFx0Ym9vbFxuIDIxMTpcdFx0c2VsZWN0IEdMT0JcbiAyMTI6XHRcbiAyMTM6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy9iYXNlL3JlZ21hcC9LY29uZmlnXCYjMzQ7XG4gMjE0Olx0XG4gMjE1Olx0Y29uZmlnIERNQV9TSEFSRURfQlVGRkVSXG4gMjE2Olx0XHRib29sXG4gMjE3Olx0XHRkZWZhdWx0IG5cbiAyMTg6XHRcdHNlbGVjdCBJUlFfV09SS1xuIDIxOTpcdFx0aGVscFxuIDIyMDpcdFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBmcmFtZXdvcmsgZm9yIGJ1ZmZlci1zaGFyaW5nIGJldHdlZW5cbiAyMjE6XHRcdCAgbXVsdGlwbGUgZHJpdmVycy4gQSBidWZmZXIgaXMgYXNzb2NpYXRlZCB3aXRoIGEgZmlsZSB1c2luZyBkcml2ZXJcbiAyMjI6XHRcdCAgQVBJcyBleHRlbnNpb247IHRoZSBmaWxlJiMzOTtzIGRlc2NyaXB0b3IgY2FuIHRoZW4gYmUgcGFzc2VkIG9uIHRvIG90aGVyXG4gMjIzOlx0XHQgIGRyaXZlci5cbiAyMjQ6XHRcbiAyMjU6XHRjb25maWcgRE1BX0ZFTkNFX1RSQUNFXG4gMjI2Olx0XHRib29sIFwmIzM0O0VuYWJsZSB2ZXJib3NlIERNQV9GRU5DRV9UUkFDRSBtZXNzYWdlc1wmIzM0O1xuIDIyNzpcdFx0ZGVwZW5kcyBvbiBETUFfU0hBUkVEX0JVRkZFUlxuIDIyODpcdFx0aGVscFxuIDIyOTpcdFx0ICBFbmFibGUgdGhlIERNQV9GRU5DRV9UUkFDRSBwcmludGtzLiBUaGlzIHdpbGwgYWRkIGV4dHJhXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE1OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY2MjcKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiA0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nOgoKKipUaGlua2luZyBUaHJvdWdoIENvbmZpZ3VyYXRpb24gRGVmYXVsdHMqKgoKUmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBETUFfU0hBUkVEX0JVRkZFUmAgdGhpbmcuIEl0JiMzOTtzIGEgQm9vbGVhbiwgZGVmYXVsdGVkIHRvICYjMzk7biYjMzk7IGlmIG5vdCBzcGVjaWZpZWQsIHdoaWNoIHRlbGxzIG1lIGl0JiMzOTtzIGxpa2VseSBhIGNvbmZpZ3VyYXRpb24gdG9nZ2xlLiBHaXZlbiB0aGF0LCBpdCAqZGVmaW5pdGVseSogc2hvdWxkIGJlIHBhcnQgb2YgdGhlIGBFbmFibGVDb25maWdzYCBsaXN0LiBObyBxdWVzdGlvbiB0aGVyZS4gV2UgbmVlZCB0byBleHBsaWNpdGx5IGFja25vd2xlZGdlIGFuZCBtYW5hZ2UgdGhhdCBzZXR0aW5nLgoKTm93LCByZWdhcmRpbmcgYFBBR0VfUE9PTGAuLi4gbXkgZ3V0IGZlZWxpbmcsIGJhc2VkIG9uIHByZXZpb3VzIGV4cGVyaWVuY2UsIGlzIHRoYXQgaXQmIzM5O3MgcHJvYmFibHkgZW5hYmxlZCBieSBkZWZhdWx0LCBlc3BlY2lhbGx5IGluIGEgbmV0d29ya2luZyBjb250ZXh0LiBIb3dldmVyLCBndXQgZmVlbGluZ3MgYXJlbiYjMzk7dCBlbm91Z2guIEkmIzM5O20gZ29pbmcgdG8gZG91YmxlLWNoZWNrIHRoZSBgUEFHRV9QT09MYCBjb25maWd1cmF0aW9uIGRlZmluaXRpb24gdG8gY29uZmlybSB0aGlzIGFzc3VtcHRpb24uIExldCYjMzk7cyBtYWtlIHN1cmUgb3VyIGFzc3VtcHRpb25zIGFyZSBjb3JyZWN0IGJlZm9yZSB3ZSBnbyBmdXJ0aGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNToxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgUEFHRV9QT09MJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9LY29uZmlnPTQ4Nz1jb25maWcgTkVUX0RFVkxJTktcbi0tXG5uZXQvS2NvbmZpZy00OTAtXG5uZXQvS2NvbmZpZzo0OTE6Y29uZmlnIFBBR0VfUE9PTFxubmV0L0tjb25maWctNDkyLVx0Ym9vbFxubmV0L0tjb25maWctNDkzLVxubmV0L0tjb25maWc6NDk0OmNvbmZpZyBQQUdFX1BPT0xfU1RBVFNcbm5ldC9LY29uZmlnLTQ5NS1cdGRlZmF1bHQgblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNToxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2OTg3CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHNvbWV0aGluZyByZWxhdGVkIHRvIHRoZSBuZXR3b3JrIGNvbmZpZ3VyYXRpb24gd2l0aGluIHRoZSBrZXJuZWwuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHplcm8gaW4gb24gYG5ldC9LY29uZmlnYCwgd2hpY2ggaXMgdGhlIGRlIGZhY3RvIHN0YW5kYXJkIGZvciB0aGlzIGtpbmQgb2YgaW5mb3JtYXRpb24sIGVzcGVjaWFsbHkgZ2l2ZW4gdGhlIGtlcm5lbCYjMzk7cyBLY29uZmlnIHN0cnVjdHVyZS4gSSYjMzk7bSBhc3N1bWluZyB0aGF0IHRoZSBzcGVjaWZpY3MgSSYjMzk7bSBhZnRlciBhcmUgbGlrZWx5IGluIHRoZSBnZW5lcmFsIG5ldHdvcmsgY29uZmlndXJhdGlvbiBzZWN0aW9uLCBhbmQgYmFzZWQgb24gcGFzdCBleHBlcmllbmNlIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYXJvdW5kIGxpbmUgNDkxIHRvIHNlZSBpZiB0aGF0IHJpbmdzIGEgYmVsbC4gVGhpcyBpcyBhIGNvbW1vbiBwYXR0ZXJuIOKAkyB0aGUgS2NvbmZpZyBmaWxlcyBhcmUgb2Z0ZW4gb3JnYW5pemVkIGxvZ2ljYWxseSwgYW5kIHRoYXQgcG9zaXRpb24gZmVlbHMgbGlrZSBhIGdvb2QgaW5pdGlhbCBiZXQuIEZyb20gdGhlcmUgSSYjMzk7bGwgYmUgYWJsZSB0byB0cmFjZSBkZXBlbmRlbmNpZXMsIHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbmFsIGxvZ2ljLCBhbmQgcXVpY2tseSBpc29sYXRlIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIHN5bWJvbHMgYW5kIHRoZWlyIGFzc29jaWF0ZWQgb3B0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTU6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ4NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDg1Olx0XHQgIHdpdGggdGhlIGhlbHAgb2YgQlBGIHByb2dyYW1zLlxuIDQ4NjpcdFxuIDQ4NzpcdGNvbmZpZyBORVRfREVWTElOS1xuIDQ4ODpcdFx0Ym9vbFxuIDQ4OTpcdFx0ZGVmYXVsdCBuXG4gNDkwOlx0XG4gNDkxOlx0Y29uZmlnIFBBR0VfUE9PTFxuIDQ5MjpcdFx0Ym9vbFxuIDQ5MzpcdFxuIDQ5NDpcdGNvbmZpZyBQQUdFX1BPT0xfU1RBVFNcbiA0OTU6XHRcdGRlZmF1bHQgblxuIDQ5NjpcdFx0Ym9vbCBcJiMzNDtQYWdlIHBvb2wgc3RhdHNcJiMzNDtcbiA0OTc6XHRcdGRlcGVuZHMgb24gUEFHRV9QT09MXG4gNDk4Olx0XHRoZWxwXG4gNDk5Olx0XHQgIEVuYWJsZSBwYWdlIHBvb2wgc3RhdGlzdGljcyB0byB0cmFjayBwYWdlIGFsbG9jYXRpb24gYW5kIHJlY3ljbGluZ1xuIDUwMDpcdFx0ICBpbiBwYWdlIHBvb2xzLiBUaGlzIG9wdGlvbiBpbmN1cnMgYWRkaXRpb25hbCBDUFUgY29zdCBpbiBhbGxvY2F0aW9uXG4gNTAxOlx0XHQgIGFuZCByZWN5Y2xlIHBhdGhzIGFuZCBhZGRpdGlvbmFsIG1lbW9yeSBjb3N0IHRvIHN0b3JlIHRoZSBzdGF0aXN0aWNzLlxuIDUwMjpcdFx0ICBUaGVzZSBzdGF0aXN0aWNzIGFyZSBvbmx5IGF2YWlsYWJsZSBpZiB0aGlzIG9wdGlvbiBpcyBlbmFibGVkIGFuZCBpZlxuIDUwMzpcdFx0ICB0aGUgZHJpdmVyIHVzaW5nIHRoZSBwYWdlIHBvb2wgc3VwcG9ydHMgZXhwb3J0aW5nIHRoaXMgZGF0YS5cbiA1MDQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTU6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzQ3MwoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDI4MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgQ29uZmlndXJhdGlvbiBDaGFuZ2VzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSBzZWUgYSBkZXBlbmRlbmN5IGlzc3VlIHdpdGggYE5FVF9ERVZNRU1gLiBJdCBzZWVtcyBgUEFHRV9QT09MYCBpcyBhIGJvb2xlYW4gb3B0aW9uIHdpdGhvdXQgYSBkZWZhdWx0LCBidXQgZHJpdmVycyBnZW5lcmFsbHkgZW5hYmxlIGl0LiBUaGUgY29yZSBvZiB0aGUgcHJvYmxlbSBoZXJlIGlzIHRoYXQgaWYgd2Ugd2FudCBgTkVUX0RFVk1FTWAgZW5hYmxlZCwgd2UgKmFsc28qIG5lZWQgdG8gZW5zdXJlIGBETUFfU0hBUkVEX0JVRkZFUmAgYW5kIGBQQUdFX1BPT0xgIGFyZSBzZXQuIE1ha2VzIHBlcmZlY3Qgc2Vuc2U7IHNoYXJlZCBidWZmZXIgaW1wbGllcyB0aGUgbmVlZCBmb3IgYSBwYWdlIHBvb2wsIGFuZCB3ZSBoYXZlIHRvIGV4cGxpY2l0bHkgcmVxdWVzdCBpdC4gU28sIEkgbmVlZCB0byBhZGQgdGhvc2UgdG8gYEVuYWJsZUNvbmZpZ3NgLiBUaGlzIGlzIHRoZSBmaXJzdCBhY3Rpb24sIHNpbmNlIGl0IGVuc3VyZXMgdGhlIHByZS1yZXF1aXNpdGVzIGFyZSBtZXQuCgpOb3csIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9mIHRoZXNlIGNoYW5nZXMuIEkmIzM5O2xsIG5lZWQgdG8gcmV2aWV3IHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgYmVpbmcgbW9kaWZpZWQuIExldCYjMzk7cyBzZWUuLi4gdGhlIHBhdGNoIGlzIHRvdWNoaW5nIGBuZXRkZXZfbmxfYmluZF9yeF9kb2l0YCwgYG5ldGRldl9ubF9iaW5kX3R4X2RvaXRgLCBgbmV0ZGV2X25sX3NvY2tfcHJpdl9pbml0YCwgYG5ldGRldl9ubF9zb2NrX3ByaXZfZGVzdHJveWAsIGBuZXRfZGV2bWVtX3VuYmluZF9kbWFidWZgLCBhbmQgYG5ldF9kZXZtZW1fYmluZF9kbWFidWZgLgoKQWgsIHJpZ2h0LCBzbyBgbmV0ZGV2X25sX2JpbmRfcnhfZG9pdGAgYW5kIGBuZXRkZXZfbmxfYmluZF90eF9kb2l0YCBhcmUgb2J2aW91c2x5IG5ldGxpbmsgaGFuZGxlcnMuIFRoZXkgYXJlIGxpa2VseSByZXNwb25zaWJsZSBmb3IgcmVjZWl2aW5nIHRoZSBtZXNzYWdlcyBmcm9tIHVzZXJzcGFjZS4gYG5ldF9kZXZtZW1fYmluZF9kbWFidWZgIGFuZCBgbmV0X2Rldm1lbV91bmJpbmRfZG1hYnVmYCBhcmUgaW50ZXJlc3Rpbmc7IHRoZXkmIzM5O3JlIGNhbGxlZCBlaXRoZXIgZnJvbSB0aGUgbmV0bGluayBoYW5kbGVycyBvciBkaXJlY3RseSBieSB0aGUgZHJpdmVyIGNvZGUsIGJhc2VkIG9uIHRoZSBjYWxscy4gVGhlIGJpbmRpbmcgZnVuY3Rpb25zIHNvdW5kIGNyaXRpY2FsLgoKTXkgaW1tZWRpYXRlIGZvbGxvdy11cCB3aWxsIGJlIHRvIGNvbmZpcm0gd2hldGhlciB0aG9zZSBuZXRsaW5rIGhhbmRsZXJzIGFyZSBzdGF0aWMgb3Igbm90LiBLbm93aW5nIHRoZWlyIHNjb3BlIGlzIGltcG9ydGFudCBmb3IgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgc3lzdGVtIGFyY2hpdGVjdHVyZSBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNToxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZXRkZXZfbmxfYmluZF9yeF9kb2l0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvbmV0ZGV2LWdlbmwuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9uZXRkZXYtZ2VubC5jPTk4OT1uZXRkZXZfbmxfZ2V0X2RtYV9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdW5zaWduZWQgbG9uZyAqcnhxX2JpdG1hcCxcbi0tXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jLTEwMTItXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jOjEwMTM6aW50IG5ldGRldl9ubF9iaW5kX3J4X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbm5ldC9jb3JlL25ldGRldi1nZW5sLmMtMTAxNC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE1OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgzNDEKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIER5bmFtaWMgTmF0dXJlIGFuZCBMb2NhdGluZyB0aGUgUmVsZXZhbnQgRnVuY3Rpb24qKgoKUmlnaHQsIHNvIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggc29tZXRoaW5nIG5vbi1zdGF0aWMsIGluaGVyZW50bHkgZHluYW1pYy4gVGhhdCYjMzk7cyB0aGUga2V5IGFzc3VtcHRpb24uIE5vdywgZ2l2ZW4gdGhhdCwgbGV0JiMzOTtzIGRyaWxsIGRvd24gaW50byB0aGUgcG90ZW50aWFsIGNvZGUgcGF0aC4gVG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb24gb2YgdGhpcyBub24tc3RhdGljIHZhbHVlLCBJIG5lZWQgdG8ga25vdyAqd2hlcmUqIGl0JiMzOTtzIGJlaW5nIHVzZWQgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgc3lzdGVtLiBNeSBpbml0aWFsIGluc3RpbmN0LCBnaXZlbiB3aGF0IHdlJiMzOTtyZSBsaWtlbHkgZGVhbGluZyB3aXRoIChsaWtlbHkga2VybmVsIGNvZGUgcmVsYXRlZCB0byBtZW1vcnkgb3IgZGV2aWNlIGludGVyYWN0aW9uKSwgaXMgdG8gdHJhY2UgaXQgYmFjayB0byBzb21ldGhpbmcgbGlrZSBgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZmAuIFRoYXQgZnVuY3Rpb24gaXMgb2Z0ZW4gYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBleHBsb3JpbmcgdGhlc2UgdHlwZXMgb2Ygc2NlbmFyaW9zLiBJIHdhbnQgdG8gY2hlY2sgaXRzIGltcGxlbWVudGF0aW9uLCBhbmQgaG93IHRoZSB2YWx1ZSB3ZSYjMzk7dmUgYmVlbiBkaXNjdXNzaW5nIGZhY3RvcnMgaW50byBpdC4gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zIGZvciBtZW1vcnkgbWFuYWdlbWVudCwgRE1BLCBhbmQgZGF0YSB0cmFuc2Zlci4gVW5kZXJzdGFuZGluZyB0aGUgc3BlY2lmaWNzIG9mIGBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmYCB3aWxsIGhvcGVmdWxseSBnaXZlIG1lIHRoZSBjb250ZXh0IEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBzaWduaWZpY2FuY2UgYW5kIGltcGFjdCBvZiB0aGlzICYjMzQ7bm9uLXN0YXRpYyYjMzQ7IHByb3BlcnR5LiBJdCYjMzk7cyBhIGh5cG90aGVzaXMsIGJ1dCBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gdmFsaWRhdGUgbXkgaW5pdGlhbCBhc3N1bXB0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNToxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZXRfZGV2bWVtX2JpbmRfZG1hYnVmJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZGV2bWVtLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZGV2bWVtLmM9MTI0PXZvaWQgbmV0X2Rldm1lbV91bmJpbmRfZG1hYnVmKHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpiaW5kaW5nKVxuLS1cbm5ldC9jb3JlL2Rldm1lbS5jLTE1My1cbm5ldC9jb3JlL2Rldm1lbS5jOjE1NDppbnQgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1Zl90b19xdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgcnhxX2lkeCxcbm5ldC9jb3JlL2Rldm1lbS5jLTE1NS1cdFx0XHRcdCAgICBzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqYmluZGluZyxcbi0tXG5uZXQvY29yZS9kZXZtZW0uYz0xODM9c3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKlxubmV0L2NvcmUvZGV2bWVtLmM6MTg0Om5ldF9kZXZtZW1fYmluZF9kbWFidWYoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqdmRldixcbm5ldC9jb3JlL2Rldm1lbS5jLTE4NS1cdFx0ICAgICAgIHN0cnVjdCBkZXZpY2UgKmRtYV9kZXYsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE1OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg4OTAKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZmAgYW5kIFNvY2tldCBJbml0aWFsaXphdGlvbioqCgpIbW0sIHNvIGBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmYCBpc24mIzM5O3QgZGVjbGFyZWQgc3RhdGljLiBUaGF0IGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdC4gSXQgaW1wbGllcyB0aGlzIGZ1bmN0aW9uIGlzIGludGVuZGVkIGZvciBicm9hZGVyIHVzYWdlLCBwb3NzaWJseSBiZXlvbmQgdGhlIGltbWVkaWF0ZSBzY29wZSBvZiBpdHMgZGVmaW5pbmcgZmlsZS4gSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciB0aGF0IHdoZW4gdHJhY2luZyBkZXBlbmRlbmNpZXMuIEdpdmVuIGl0cyBuYW1pbmcsIGl0IGxpa2VseSBkZWFscyB3aXRoIERNQSBidWZmZXIgYmluZGluZywgcHJvYmFibHkgd2l0aGluIHRoZSBjb250ZXh0IG9mIG5ldHdvcmsgZGV2aWNlcy4gVGhhdCBub24tc3RhdGljIGRlY2xhcmF0aW9uIGNvdWxkIG1lYW4gaXQmIzM5O3MgY2FsbGVkIGZyb20gb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbC4gSSYjMzk7bGwgbWFrZSBhIG1lbnRhbCBub3RlIHRvIGNoZWNrIHRoZSBjcm9zcy1yZWZlcmVuY2VzIGxhdGVyLiBJIGFsc28gd2FudCB0byBjaGVjayB3aGVyZSBpdCBpcyBjYWxsZWQgdG8gaWRlbnRpZnkgYW55IGV4dGVybmFsIGNhbGxlcnMuCgpOb3csIGxldCBtZSBzaGlmdCBnZWFycyBzbGlnaHRseS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBuZXR3b3JrIGRldmljZSBjb250ZXh0LiBMZXQmIzM5O3MgZGVsdmUgaW50byBgbmV0ZGV2X25sX3NvY2tfcHJpdl9pbml0YC4gVW5kZXJzdGFuZGluZyBob3cgbmV0d29yayBkZXZpY2UgcHJpdmF0ZSBkYXRhIGlzIGluaXRpYWxpemVkIHZpYSB0aGUgbmV0bGluayBzb2NrZXQgd2lsbCBwcm92aWRlIGNyaXRpY2FsIGNvbnRleHQuIEkgY2FuJiMzOTt0IGJlIHN1cmUgdGhhdCB0aGlzIHdpbGwgcHJvdmlkZSB1c2VmdWwgaW5mb3JtYXRpb24gaW4gdGhpcyBzaXR1YXRpb24sIGJ1dCBpdCBpcyBhbHdheXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJIGtub3cgaXQgaGFuZGxlcyB0aGUgYWxsb2NhdGlvbiBhbmQgc2V0dXAgb2YgdGhlIHByaXZhdGUgZGF0YSBzdHJ1Y3R1cmVzIGFzc29jaWF0ZWQgd2l0aCBuZXRsaW5rIHNvY2tldHMsIHdoaWNoIGlzIGFuIGltcG9ydGFudCBwYXJ0IG9mIG5ldHdvcmsgZGV2aWNlIG1hbmFnZW1lbnQgYW5kIGNvbmZpZ3VyYXRpb24uIFRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGF0IHNvY2tldCB3aWxsIGxpa2VseSBpbnRlcmFjdCB3aXRoIHRoZSBETUEgYnVmZmVyIGJpbmRpbmcgZnVuY3Rpb24gSSB3YXMgbG9va2luZyBhdCBlYXJsaWVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNToxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZXRkZXZfbmxfc29ja19wcml2X2luaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9uZXRkZXYtZ2VubC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL25ldGRldi1nZW5sLmM9MTI0MT1pbnQgbmV0ZGV2X25sX3F1ZXVlX2NyZWF0ZV9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYy0xNDA3LVxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYzoxNDA4OnZvaWQgbmV0ZGV2X25sX3NvY2tfcHJpdl9pbml0KHN0cnVjdCBuZXRkZXZfbmxfc29jayAqcHJpdilcbm5ldC9jb3JlL25ldGRldi1nZW5sLmMtMTQwOS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE1OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk0MDMKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aGUgdGhvdWdodCBwcm9jZXNzIHVuZm9sZHM6CgoqKkludGVybmFsIHZzLiBFeHRlcm5hbDogQSBRdWljayBEaXZlIGludG8gYG5ldGRldl9ubF9zb2NrX3ByaXZgIEZ1bmN0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgYG5ldGRldl9ubF9zb2NrX3ByaXZfaW5pdGAgYW5kIGBuZXRkZXZfbmxfc29ja19wcml2X2Rlc3Ryb3lgIGZ1bmN0aW9ucy4gVGhlIGZhY3QgdGhhdCB0aGV5JiMzOTtyZSAqbm90KiBkZWNsYXJlZCBhcyBgc3RhdGljYCBpbW1lZGlhdGVseSBzZXRzIG9mZiBhIG1lbnRhbCBmbGFnLiBUaGF0IHVzdWFsbHkgbWVhbnMgdGhleSAqY291bGQqIGJlIGludGVuZGVkIGZvciBleHRlcm5hbCB1c2UsIG91dHNpZGUgdGhlIGN1cnJlbnQgY29tcGlsYXRpb24gdW5pdC4gQnV0IHRoYXQmIzM5O3MganVzdCBhbiBhc3N1bXB0aW9uLgoKSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciB0aGV5JiMzOTtyZSBhY3R1YWxseSBleHBvcnRlZCBhbmQgZGVzaWduZWQgdG8gYmUgcGFydCBvZiB0aGUgcHVibGljIEFQSSwgb3IgaWYgdGhleSYjMzk7cmUganVzdCB1c2VkIGludGVybmFsbHkgd2l0aGluIHRoZSBuZXR3b3JraW5nIHN1YnN5c3RlbS4gSXQmIzM5O3MgYSBrZXkgZGlzdGluY3Rpb24uIFRoZSBpbXBsaWNhdGlvbnMgYXJlIHNpZ25pZmljYW50OiBpZiB0aGV5IGFyZSBwYXJ0IG9mIHRoZSBwdWJsaWMgQVBJLCBhbnkgY2hhbmdlcyB0byB0aGVtIHJlcXVpcmUgZXh0cmEgY29uc2lkZXJhdGlvbiBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgYW5kIGV4dGVybmFsIGRlcGVuZGVuY3kgbWFuYWdlbWVudC4gQ29udmVyc2VseSwgaWYgdGhleSBhcmUgaW50ZXJuYWwsIHRoZWlyIGltcGxlbWVudGF0aW9uIGNhbiBiZSByZWZhY3RvcmVkIG9yIG1vZGlmaWVkIHdpdGggcmVsYXRpdmUgZnJlZWRvbS4gU28sIGxldCYjMzk7cyB0YWtlIGEgbG9vay4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoZXkmIzM5O3JlIGJlaW5nIHVzZWQgYW5kIGRlY2xhcmVkLCBtYXliZSBncmVwIHRocm91Z2ggdGhlIGNvZGUgb3IgdXNlIHNvbWUga2luZCBvZiBzeW1ib2wgbG9va3VwIHRvIHF1aWNrbHkgY2hlY2suIFRoZSBnb2FsIGlzIHRvIGRldGVybWluZSB0aGUgc2NvcGUgb2YgdGhlaXIgaW50ZW5kZWQgdXNlLCBhbmQgZGVjaWRlIGhvdyBpdCBlZmZlY3RzIGZ1dHVyZSBkZXZlbG9wbWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTU6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmV0ZGV2X25sX3NvY2tfcHJpdl9pbml0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL25ldGRldi1nZW5sLWdlbi5jPTI0OD1zdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfbXVsdGljYXN0X2dyb3VwIG5ldGRldl9ubF9tY2dycHNbXSA9IHtcbi0tXG5uZXQvY29yZS9uZXRkZXYtZ2VubC1nZW4uYy0yNTItXG5uZXQvY29yZS9uZXRkZXYtZ2VubC1nZW4uYzoyNTM6c3RhdGljIHZvaWQgX19uZXRkZXZfbmxfc29ja19wcml2X2luaXQodm9pZCAqcHJpdilcbm5ldC9jb3JlL25ldGRldi1nZW5sLWdlbi5jLTI1NC17XG5uZXQvY29yZS9uZXRkZXYtZ2VubC1nZW4uYzoyNTU6XHRuZXRkZXZfbmxfc29ja19wcml2X2luaXQocHJpdik7XG5uZXQvY29yZS9uZXRkZXYtZ2VubC1nZW4uYy0yNTYtfVxuLS1cbm5ldC9jb3JlL25ldGRldi1nZW5sLWdlbi5jPTI2Mz1zdHJ1Y3QgZ2VubF9mYW1pbHkgbmV0ZGV2X25sX2ZhbWlseSBfX3JvX2FmdGVyX2luaXQgPSB7XG4tLVxubmV0L2NvcmUvbmV0ZGV2LWdlbmwtZ2VuLmMtMjczLVx0LnNvY2tfcHJpdl9zaXplXHQ9IHNpemVvZihzdHJ1Y3QgbmV0ZGV2X25sX3NvY2spLFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwtZ2VuLmM6Mjc0Olx0LnNvY2tfcHJpdl9pbml0XHQ9IF9fbmV0ZGV2X25sX3NvY2tfcHJpdl9pbml0LFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwtZ2VuLmMtMjc1LVx0LnNvY2tfcHJpdl9kZXN0cm95ID0gX19uZXRkZXZfbmxfc29ja19wcml2X2Rlc3Ryb3ksXG4tLVxubmV0L2NvcmUvbmV0ZGV2LWdlbmwtZ2VuLmg9NDc9ZXh0ZXJuIHN0cnVjdCBnZW5sX2ZhbWlseSBuZXRkZXZfbmxfZmFtaWx5O1xubmV0L2NvcmUvbmV0ZGV2LWdlbmwtZ2VuLmgtNDgtXG5uZXQvY29yZS9uZXRkZXYtZ2VubC1nZW4uaDo0OTp2b2lkIG5ldGRldl9ubF9zb2NrX3ByaXZfaW5pdChzdHJ1Y3QgbmV0ZGV2X25sX3NvY2sgKnByaXYpO1xubmV0L2NvcmUvbmV0ZGV2LWdlbmwtZ2VuLmgtNTAtdm9pZCBuZXRkZXZfbmxfc29ja19wcml2X2Rlc3Ryb3koc3RydWN0IG5ldGRldl9ubF9zb2NrICpwcml2KTtcbi0tXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jPTEyNDE9aW50IG5ldGRldl9ubF9xdWV1ZV9jcmVhdGVfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbm5ldC9jb3JlL25ldGRldi1nZW5sLmMtMTQwNy1cbm5ldC9jb3JlL25ldGRldi1nZW5sLmM6MTQwODp2b2lkIG5ldGRldl9ubF9zb2NrX3ByaXZfaW5pdChzdHJ1Y3QgbmV0ZGV2X25sX3NvY2sgKnByaXYpXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jLTE0MDkte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNToxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDM0NwoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDExOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIE5ldGxpbmsgRmFtaWx5IFNvY2tldCBJbml0aWFsaXphdGlvbiBhbmQgRGVzdHJ1Y3Rpb24gQ2FsbGJhY2tzKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEl0IHNlZW1zIHdlJiMzOTtyZSBsb29raW5nIGF0IGZ1bmN0aW9ucyB1c2VkIGFzIGNhbGxiYWNrcyBkdXJpbmcgdGhlIGluaXRpYWxpemF0aW9uIGFuZCBkZXN0cnVjdGlvbiBvZiBuZXRsaW5rIGZhbWlseSBzb2NrZXRzLiBTcGVjaWZpY2FsbHksIHRoZSBhcmVhcyBvZiBpbnRlcmVzdCBmb3IgZnV6emluZyBhcHBlYXIgdG8gYmUgY2VudGVyZWQgYXJvdW5kIHNldmVyYWwgY29yZSBmdW5jdGlvbnMuIEkgc2VlIGBuZXRkZXZfbmxfYmluZF9yeF9kb2l0YCwgYG5ldGRldl9ubF9iaW5kX3R4X2RvaXRgLCBgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZmAsIGBuZXRfZGV2bWVtX3VuYmluZF9kbWFidWZgLCBgbmV0ZGV2X25sX3NvY2tfcHJpdl9pbml0YCwgYW5kIGBuZXRkZXZfbmxfc29ja19wcml2X2Rlc3Ryb3lgLiBUaG9zZSBhbGwgbG9vayBsaWtlIHBvdGVudGlhbCBlbnRyeSBwb2ludHMgZm9yIHNvbWUgZnV6emluZy4gR2l2ZW4gdGhlIGNvbnRleHQsIG15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoZXNlIGZ1bmN0aW9ucyBsaWtlbHkgaGFuZGxlIGludGVyYWN0aW9ucyBiZXR3ZWVuIG5ldHdvcmsgZGV2aWNlcyBhbmQgdGhlIG5ldGxpbmsgaW50ZXJmYWNlLCBpbmNsdWRpbmcgbWVtb3J5IG1hbmFnZW1lbnQuCgpNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIGNoZWNrIGZvciB0aGUgcHJlc2VuY2Ugb2YgYG5ldGRldl9ubF9iaW5kX3R4X2RvaXRgLCBJIHRoaW5rIHRoYXQgaXMgYSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGFuZCB3aWxsIG9mZmVyIHNvbWUgdW5kZXJzdGFuZGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTU6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmV0ZGV2X25sX2JpbmRfdHhfZG9pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL25ldGRldi1nZW5sLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvbmV0ZGV2LWdlbmwuYz0xMTIzPW5ldGRldl9maW5kX25ldG1lbV90eF9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jLTExNDgtXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jOjExNDk6aW50IG5ldGRldl9ubF9iaW5kX3R4X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbm5ldC9jb3JlL25ldGRldi1nZW5sLmMtMTE1MC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE1OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwODYzCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMjQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIE5ldHdvcmsgRGV2aWNlIE1lbW9yeSBNYW5hZ2VtZW50IENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7dmUgaWRlbnRpZmllZCB0aGUga2V5IHN5bWJvbHMgcmVsYXRlZCB0byB0aGlzIG5ldHdvcmsgZGV2aWNlIG1lbW9yeSBtYW5hZ2VtZW50IGZlYXR1cmU6IGBuZXRkZXZfbmxfYmluZF9yeF9kb2l0YCwgYG5ldGRldl9ubF9iaW5kX3R4X2RvaXRgLCBgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZmAsIGBuZXRfZGV2bWVtX3VuYmluZF9kbWFidWZgLCBgbmV0ZGV2X25sX3NvY2tfcHJpdl9pbml0YCwgYW5kIGBuZXRkZXZfbmxfc29ja19wcml2X2Rlc3Ryb3lgLiBUaGVzZSBjbGVhcmx5IHJlcHJlc2VudCB0aGUgY29yZSBmdW5jdGlvbnMgZm9yIGJpbmRpbmcgYW5kIHVuYmluZGluZyBETUEgYnVmZmVycywgYW5kIGluaXRpYWxpemluZy9kZXN0cm95aW5nIHRoZSByZWxldmFudCBzb2NrZXQgcHJpdmF0ZSBkYXRhIHN0cnVjdHVyZXMuCgpOb3csIGZvciB0aGUgZW5hYmxpbmcgY29uZmlndXJhdGlvbnMuIEkmIzM5O3ZlIGdvdCBgTkVUX0RFVk1FTWAsIGBETUFfU0hBUkVEX0JVRkZFUmAsIGFuZCBgUEFHRV9QT09MYC4gSW5pdGlhbGx5LCBJIGNvbnNpZGVyZWQgaWYgYE5FVF9ERVZNRU1gIHdhcyB0aGUgb25seSBuZWNlc3NhcnkgY29uZmlnLiBCdXQsIHdhaXQsIGEgY2xvc2VyIGxvb2sgcmV2ZWFscyBgTkVUX0RFVk1FTWAgaXMgZGVmaW5lZCBhcyBgZGVmX2Jvb2wgeWAsIGJ1dCAqZGVwZW5kcyogb24gYm90aCBgRE1BX1NIQVJFRF9CVUZGRVJgIGFuZCBgUEFHRV9QT09MYC4gVGhhdCYjMzk7cyBpbXBvcnRhbnQuCgpTbywgd2hpbGUgZW5hYmxpbmcgYERNQV9TSEFSRURfQlVGRkVSYCBhbmQgYFBBR0VfUE9PTGAgKndpbGwqIGF1dG9tYXRpY2FsbHkgZW5hYmxlIGBORVRfREVWTUVNYCwgZm9yIGNsYXJpdHkgYW5kIGV4cGxpY2l0IGNvbmZpZ3VyYXRpb24sIGl0JiMzOTtzIHNhZmVzdCB0byBsaXN0IGFsbCB0aHJlZTogYE5FVF9ERVZNRU1gLCBgRE1BX1NIQVJFRF9CVUZGRVJgLCBhbmQgYFBBR0VfUE9PTGAuIFRoaXMgZW5zdXJlcyB0aGF0IGFsbCB0aGUgZGVwZW5kZW5jaWVzIGFyZSBjbGVhcmx5IHNldC4KCkJlZm9yZSBJIGZpbmFsaXplIHRoaXMsIEkgc2hvdWxkIHZlcmlmeSB3aGV0aGVyIGBQQUdFX1BPT0xgIGl0c2VsZiBoYXMgYW55IGRlcGVuZGVuY2llcyB0aGF0IEkgbWF5IG5lZWQgdG8gdGFrZSBpbnRvIGNvbnNpZGVyYXRpb24uIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE1OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBQQUdFX1BPT0wmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvS2NvbmZpZz00ODc9Y29uZmlnIE5FVF9ERVZMSU5LXG4tLVxubmV0L0tjb25maWctNDkwLVxubmV0L0tjb25maWc6NDkxOmNvbmZpZyBQQUdFX1BPT0xcbm5ldC9LY29uZmlnLTQ5Mi1cdGJvb2xcbm5ldC9LY29uZmlnLTQ5My1cbm5ldC9LY29uZmlnOjQ5NDpjb25maWcgUEFHRV9QT09MX1NUQVRTXG5uZXQvS2NvbmZpZy00OTUtXHRkZWZhdWx0IG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTU6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE1ODkKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJpemVkIHRob3VnaHQgcHJvY2VzczoKCioqSW50ZXJuYWwgQ29kZSBBdWRpdCAtIFNpbXBsZSBDaGVja3MqKgoKUmlnaHQsIGxldCYjMzk7cyBqdXN0IG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIHNvbWV0aGluZyBvYnZpb3VzIGluIHRoaXMgY29kZWJhc2UuIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSB0aGUgaW1wYWN0IG9mIHRoZXNlIHZhcmlhYmxlcy4gSG1tLCBzbyBgUEFHRV9QT09MYCBpcyBqdXN0IGEgYm9vbGVhbi4gT2theSwgdGhhdCYjMzk7cyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLCBJIGNhbiBoYW5kbGUgdGhhdC4gTm93LCBJIG5lZWQgdG8gY2hlY2sgc29tZXRoaW5nIGVsc2UuIExldCYjMzk7cyBzZWUuLi4gYERNQV9TSEFSRURfQlVGRkVSYC4gSSBzaG91bGQgdmVyaWZ5IGlmIHRoYXQgaGFzIGFueSBkZXBlbmRlbmNpZXMgZmlyc3QuIEdvdHRhIHRoaW5rIGFib3V0IGFsbCB0aGUgcGxhY2VzIHRoaXMgbWlnaHQgYmUgdXNlZCBhbmQgYW55IGRvd25zdHJlYW0gaW1wYWN0LiBHb3QgaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE1OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBETUFfU0hBUkVEX0JVRkZFUiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmFzZS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmFzZS9LY29uZmlnPTIxMz1zb3VyY2UgXCYjMzQ7ZHJpdmVycy9iYXNlL3JlZ21hcC9LY29uZmlnXCYjMzQ7XG5kcml2ZXJzL2Jhc2UvS2NvbmZpZy0yMTQtXG5kcml2ZXJzL2Jhc2UvS2NvbmZpZzoyMTU6Y29uZmlnIERNQV9TSEFSRURfQlVGRkVSXG5kcml2ZXJzL2Jhc2UvS2NvbmZpZy0yMTYtXHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE1OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExODU0CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogODkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqU2ltcGxpZnlpbmcgdGhlIENvbmZpZ3VyYXRpb24gTG9naWMqKgoKUmlnaHQsIGl0JiMzOTtzIGp1c3QgYSBib29sZWFuIGZsYWcsIGZ1bmRhbWVudGFsbHkuIFRoaW5raW5nIGFib3V0IGBFbmFibGVDb25maWdzYCwgaXQgc2VlbXMgbGlrZSBpdCBjYW4gYmUgc3RyZWFtbGluZWQuIEJhc2VkIG9uIHdoYXQgSSBoYXZlLCBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IHdpdGggYSBsaXN0IG9mIHRoZSBrZXkgY29uZmlndXJhdGlvbnM6IGBbJiMzNDtORVRfREVWTUVNJiMzNDssICYjMzQ7RE1BX1NIQVJFRF9CVUZGRVImIzM0OywgJiMzNDtQQUdFX1BPT0wmIzM0O11gLgoKQnV0IHdhaXQsIGhvbGQgb24uIEkgbmVlZCB0byByZW1lbWJlciB0aGF0IGBORVRfREVWTUVNYCBpcyBkZWZpbmVkIGFzIGEgYGRlZl9ib29sIHlgLiBUaGF0IG1lYW5zIGl0JiMzOTtzIGVuYWJsZWQgY29uZGl0aW9uYWxseSwgZGVwZW5kaW5nIG9uIGl0cyBkZXBlbmRlbmNpZXMuIEkgY2FuJiMzOTt0IGp1c3QgYXNzdW1lIGl0JiMzOTtzIGFsd2F5cyAmIzM0O29uJiMzNDsgYmVjYXVzZSBvZiB0aGUgd2F5IHRoZSBrZXJuZWwgY29uZmlnIHN5c3RlbSB3b3Jrcy4gSSBuZWVkIHRvIGJlIHN1cmUgdGhhdCBpdCBpcyBldmVuIHVzZWQgdG8gY29tcGlsZSBgZGV2bWVtLm9gLCBiZWNhdXNlIGlmIG5vdCwgSSBtaWdodCBiZSBpbmNsdWRpbmcgdGhhdCBpbiB0aGUgbGlzdCBmb3Igbm8gcmVhc29uLiBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgdGhpcyBvcHRpb24gaGFzIGFuIGltcGFjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTU6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TkVUX0RFVk1FTSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL01ha2VmaWxlPTQ4PW9iai0kKENPTkZJR19ORVRfVEVTVCkgJiM0Mzs9IG5ldF90ZXN0Lm9cbm5ldC9jb3JlL01ha2VmaWxlOjQ5Om9iai0kKENPTkZJR19ORVRfREVWTUVNKSAmIzQzOz0gZGV2bWVtLm9cbm5ldC9jb3JlL01ha2VmaWxlLTUwLW9iai0kKENPTkZJR19ERUJVR19ORVQpICYjNDM7PSBsb2NrX2RlYnVnLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTU6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIyNjYKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipDaGVja2luZyB0aGUgYG5ldGRldl9ubF9iaW5kX3J4X2RvaXRgIENvbXBpbGF0aW9uKioKClllcy4gT2theSwgSSBuZWVkIHRvIHZlcmlmeSBzb21ldGhpbmcgcXVpY2tseS4gTGV0IG1lIHNlZS4uLiBJIHdhbnQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYG5ldGRldl9ubF9iaW5kX3J4X2RvaXRgIGlzIG9ubHkgY29tcGlsZWQgd2hlbiBgQ09ORklHX05FVF9ERVZNRU1gIGlzIGVuYWJsZWQsIG9yIGlmIGl0JiMzOTtzIGluY2x1ZGVkIHJlZ2FyZGxlc3MuIFRoaXMgaXMgc29tZXRoaW5nIHRoYXQgSSBuZWVkIHRvIGNsYXJpZnkgdG8gZW5zdXJlIHRoYXQgc29tZXRoaW5nIGV4cGVjdGVkIGlzIGhhcHBlbmluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTU6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmV0ZGV2X25sX2JpbmRfcnhfZG9pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL25ldGRldi1nZW5sLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvbmV0ZGV2LWdlbmwuYz05ODk9bmV0ZGV2X25sX2dldF9kbWFfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHVuc2lnbmVkIGxvbmcgKnJ4cV9iaXRtYXAsXG4tLVxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYy0xMDEyLVxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYzoxMDEzOmludCBuZXRkZXZfbmxfYmluZF9yeF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jLTEwMTQte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNToxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjU3OQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIFBvdGVudGlhbCBgQ09ORklHX05FVF9ERVZNRU1gIERlcGVuZGVuY2llcyoqCgpSaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGllY2Ugb2YgY29kZSBhbmQgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgdG8gbWluZCBpcywgJiMzNDtJcyB0aGlzIGZ1bmN0aW9uYWxpdHkgY29uZGl0aW9uYWwgb24gYENPTkZJR19ORVRfREVWTUVNYD8mIzM0OyBJIG5lZWQgdG8gcXVpY2tseSBlc3RhYmxpc2ggaWYgdGhlIHNlY3Rpb24gSSYjMzk7bSByZXZpZXdpbmcgcmVsaWVzIG9uIHRoYXQgY29uZmlndXJhdGlvbiBvcHRpb24uIEkmIzM5O20gZ29pbmcgdG8gc2NhbiB0aGUgc3Vycm91bmRpbmcgY29kZSBmb3IgYCNpZmRlZiBDT05GSUdfTkVUX0RFVk1FTWAgZGlyZWN0aXZlcy4gVGhhdCYjMzk7cyB0aGUgbW9zdCBkaXJlY3Qgd2F5IHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdy4gRGVwZW5kaW5nIG9uIGhvdyB3aWRlc3ByZWFkIHRoYXQgZGVmaW5lIGlzLCBJJiMzOTtsbCBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgY29kZSwgYW5kIG90aGVyIGRlZmluZXMsIHRvIGRldGVybWluZSBob3cgdGhhdCBpbnRlcmFjdHMuIFRpbWUgdG8gZ2V0IHRoZSBncmVwIGNvbW1hbmQgcnVubmluZyBvciBmaXJlIHVwIHRoZSBJREUgc2VhcmNoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNToxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19ORVRfREVWTUVNJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvbmV0ZGV2LWdlbmwuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE1OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyODIxCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhlIHRob3VnaHQgcHJvY2VzcyB1bmZvbGRzOgoKKipXYWl0IGEgTWludXRlLi4uIFdoZXJlJiMzOTtzIHRoZSBgQ09ORklHX05FVF9ERVZNRU1gIENoZWNrPyoqCgpPa2F5LCBob2xkIG9uLiBJJiMzOTttIGxvb2tpbmcgYXQgYG5ldGRldi1nZW5sLmNgLCBhbmQgSSB3YXMgKmNlcnRhaW4qIHRoZXJlIHdhcyBhIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGJsb2NrIGluIHRoZXJlIHNvbWV3aGVyZSByZWxhdGVkIHRvIGBDT05GSUdfTkVUX0RFVk1FTWAuIEJ1dCBJJiMzOTttIG5vdCBzZWVpbmcgaXQuIFRoYXQmIzM5O3Mgb2RkLiBJdCYjMzk7cyByZWFsbHkgdW5leHBlY3RlZCwgZ2l2ZW4gaG93IHRoaXMgY29kZSB1c3VhbGx5IGludGVyYWN0cyB3aXRoIGRpcmVjdCBtZW1vcnkgYWNjZXNzIGFuZCBwb3RlbnRpYWwgc2VjdXJpdHkgaW1wbGljYXRpb25zLgoKQWxyaWdodCwgdGltZSB0byBnZXQgc3BlY2lmaWMuIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBmdW5jdGlvbiB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiBMZXQmIzM5O3MgZHJpbGwgaW50byBgbmV0ZGV2X25sX2JpbmRfcnhfZG9pdGAgd2l0aGluIGBuZXRkZXYtZ2VubC5jYC4gVGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gc3RhcnQsIGFuZCBzZWUgaG93IHRoZSByZWxldmFudCBmdW5jdGlvbmFsaXR5IGlzIGltcGxlbWVudGVkIHdpdGhvdXQgYENPTkZJR19ORVRfREVWTUVNYCBndWFyZGluZyBpdC4gVGhpcyBpcyBnb2luZyB0byBiZSBpbnRlcmVzdGluZy4uLiBhbmQgcG90ZW50aWFsbHkgYSBjcml0aWNhbCBwb2ludCBmb3IgdnVsbmVyYWJpbGl0eSBhbmFseXNpcywgaWYgaXQmIzM5O3Mgb3BlcmF0aW5nIHdpdGhvdXQgdGhlIHVzdWFsIGd1YXJkcmFpbHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYWNjZXNzIHRvIHRoYXQgbWVtb3J5IGlzIGdyYW50ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE1OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvbmV0ZGV2LWdlbmwuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTAwMDpcdFx0XHRpZiAoZG1hX2RldiBcdTAwMjZcdTAwMjYgcnhxX2RtYV9kZXYgIT0gZG1hX2Rldikge1xuMTAwMTpcdFx0XHRcdE5MX1NFVF9FUlJfTVNHX0ZNVChleHRhY2ssIFwmIzM0O0RNQSBkZXZpY2UgbWlzbWF0Y2ggYmV0d2VlbiBxdWV1ZSAldSBhbmQgJXUgKG11bHRpLVBGIGRldmljZT8pXCYjMzQ7LFxuMTAwMjpcdFx0XHRcdFx0XHQgICByeHFfaWR4LCBwcmV2X3J4cV9pZHgpO1xuMTAwMzpcdFx0XHRcdHJldHVybiBFUlJfUFRSKC1FT1BOT1RTVVBQKTtcbjEwMDQ6XHRcdFx0fVxuMTAwNTpcdFxuMTAwNjpcdFx0XHRkbWFfZGV2ID0gcnhxX2RtYV9kZXY7XG4xMDA3Olx0XHRcdHByZXZfcnhxX2lkeCA9IHJ4cV9pZHg7XG4xMDA4Olx0XHR9XG4xMDA5Olx0XG4xMDEwOlx0XHRyZXR1cm4gZG1hX2RldjtcbjEwMTE6XHR9XG4xMDEyOlx0XG4xMDEzOlx0aW50IG5ldGRldl9ubF9iaW5kX3J4X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbjEwMTQ6XHR7XG4xMDE1Olx0XHRzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqYmluZGluZztcbjEwMTY6XHRcdHUzMiBpZmluZGV4LCBkbWFidWZfZmQsIHJ4cV9pZHg7XG4xMDE3Olx0XHRzdHJ1Y3QgbmV0ZGV2X25sX3NvY2sgKnByaXY7XG4xMDE4Olx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2O1xuMTAxOTpcdFx0dW5zaWduZWQgbG9uZyAqcnhxX2JpdG1hcDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTU6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM1MDEKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBhIGBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nYCoqCgpBbHJpZ2h0LCBJIHNlZSB0aGlzIGNvZGUgaXMgdXNpbmcgYHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nYC4gVGhhdCByaW5ncyBhIGJlbGwuLi4gaXQmIzM5O3MgcHJvYmFibHkgZGVmaW5lZCBpbiBgbmV0L2NvcmUvZGV2bWVtLmhgLiBUaW1lIHRvIGRvdWJsZSBjaGVjay4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhpcyBiaW5kaW5nIGlzIGJlaW5nIHVzZWQ7IHdoYXQmIzM5O3MgaXRzIHB1cnBvc2Ugd2l0aGluIHRoZSBjb250ZXh0IG9mIHRoZSBuZXR3b3JraW5nIGRldmljZSBtZW1vcnkgbWFuYWdlbWVudC4gTGV0JiMzOTtzIGRpdmUgaW50byB0aGF0IGhlYWRlciBmaWxlIGFuZCBzZWUgd2hhdCYjMzk7cyB3aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNToxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfTkVUX0RFVk1FTSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL2Rldm1lbS5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL2Rldm1lbS5oPTE4PXN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nIHtcbi0tXG5uZXQvY29yZS9kZXZtZW0uaC03Ni1cbm5ldC9jb3JlL2Rldm1lbS5oOjc3OiNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWTUVNKVxubmV0L2NvcmUvZGV2bWVtLmgtNzgtLyogT3duZXIgb2YgdGhlIGRtYS1idWYgY2h1bmtzIGluc2VydGVkIGludG8gdGhlIGdlbiBwb29sLiBFYWNoIHNjYXR0ZXJsaXN0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE1OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzODE2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIG15c2VsZjoKCioqSW52ZXN0aWdhdGluZyBgbmV0ZGV2X25sX2JpbmRfcnhfZG9pdGAgYW5kIENPTkZJR19ORVRfREVWTUVNKioKCk9rYXksIHNvIEkmIzM5O20gcHJldHR5IHN1cmUgYG5ldGRldl9ubF9iaW5kX3J4X2RvaXRgIGlzIGFsd2F5cyBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwuIFRoZSBpbnRlcmVzdGluZyBxdWVzdGlvbiBpcyB3aGV0aGVyIGl0IGp1c3Qgc2lsZW50bHkgZmFpbHMsIG9yIGFjdGl2ZWx5IHJldHVybnMgYW4gZXJyb3IgaWYgYENPTkZJR19ORVRfREVWTUVNYCAqaXNuJiMzOTt0KiBkZWZpbmVkLiBJIG5lZWQgdG8gY29uZmlybSB0aGF0IGJlaGF2aW9yLiBUbyBkbyB0aGF0IEkgbmVlZCB0byBkaXZlIGludG8gdGhlIHNvdXJjZSwgc3BlY2lmaWNhbGx5IGBuZXQvY29yZS9kZXZtZW0uaGAuIExldCYjMzk7cyB0YWtlIGEgbG9vayBhcm91bmQgbGluZSA3NywgdGhhdCYjMzk7cyB1c3VhbGx5IHdoZXJlIHRoZXNlIHR5cGVzIG9mIGNvbmRpdGlvbmFsIGRlZmluZXMgYXJlIGhhbmRsZWQuIEkgZXhwZWN0IHRvIGZpbmQgc29tZSBgI2lmZGVmIENPTkZJR19ORVRfREVWTUVNYCBvciBzb21ldGhpbmcgc2ltaWxhciB0aGF0IGVpdGhlciBlbmFibGVzIG9yIGRpc2FibGVzIHBhcnRzIG9mIHRoZSBmdW5jdGlvbiYjMzk7cyBsb2dpYy4gVGhhdCBzaG91bGQgdGVsbCB0aGUgdGFsZSEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTU6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9kZXZtZW0uaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNzA6XHRcdCAqIG5ldF9pb3ZzIGluIHRoZSBUWCBwYXRoLlxuICA3MTpcdFx0ICovXG4gIDcyOlx0XHRzdHJ1Y3QgbmV0X2lvdiAqKnR4X3ZlYztcbiAgNzM6XHRcbiAgNzQ6XHRcdHN0cnVjdCB3b3JrX3N0cnVjdCB1bmJpbmRfdztcbiAgNzU6XHR9O1xuICA3NjpcdFxuICA3NzpcdCNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWTUVNKVxuICA3ODpcdC8qIE93bmVyIG9mIHRoZSBkbWEtYnVmIGNodW5rcyBpbnNlcnRlZCBpbnRvIHRoZSBnZW4gcG9vbC4gRWFjaCBzY2F0dGVybGlzdFxuICA3OTpcdCAqIGVudHJ5IGZyb20gdGhlIGRtYWJ1ZiBpcyBpbnNlcnRlZCBpbnRvIHRoZSBnZW5wb29sIGFzIGEgY2h1bmssIGFuZCBuZWVkc1xuICA4MDpcdCAqIHRoaXMgb3duZXIgc3RydWN0IHRvIGtlZXAgdHJhY2sgb2Ygc29tZSBtZXRhZGF0YSBuZWNlc3NhcnkgdG8gY3JlYXRlXG4gIDgxOlx0ICogYWxsb2NhdGlvbnMgZnJvbSB0aGlzIGNodW5rLlxuICA4MjpcdCAqL1xuICA4MzpcdHN0cnVjdCBkbWFidWZfZ2VucG9vbF9jaHVua19vd25lciB7XG4gIDg0Olx0XHRzdHJ1Y3QgbmV0X2lvdl9hcmVhIGFyZWE7XG4gIDg1Olx0XHRzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqYmluZGluZztcbiAgODY6XHRcbiAgODc6XHRcdC8qIGRtYV9hZGRyIG9mIHRoZSBzdGFydCBvZiB0aGUgY2h1bmsuICAqL1xuICA4ODpcdFx0ZG1hX2FkZHJfdCBiYXNlX2RtYV9hZGRyO1xuICA4OTpcdH07XG4gIDkwOlx0XG4gIDkxOlx0dm9pZCBfX25ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmdfZnJlZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndxKTtcbiAgOTI6XHRzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqXG4gIDkzOlx0bmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICp2ZGV2LFxuICA5NDpcdFx0XHQgICAgICAgc3RydWN0IGRldmljZSAqZG1hX2RldixcbiAgOTU6XHRcdFx0ICAgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbixcbiAgOTY6XHRcdFx0ICAgICAgIHVuc2lnbmVkIGludCBkbWFidWZfZmQsIHN0cnVjdCBuZXRkZXZfbmxfc29jayAqcHJpdixcbiAgOTc6XHRcdFx0ICAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG4gIDk4Olx0c3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKm5ldF9kZXZtZW1fbG9va3VwX2RtYWJ1Zih1MzIgaWQpO1xuICA5OTpcdHZvaWQgbmV0X2Rldm1lbV91bmJpbmRfZG1hYnVmKHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpiaW5kaW5nKTtcbiAxMDA6XHRpbnQgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1Zl90b19xdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgcnhxX2lkeCxcbiAxMDE6XHRcdFx0XHRcdCAgICBzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqYmluZGluZyxcbiAxMDI6XHRcdFx0XHRcdCAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xuIDEwMzpcdFxuIDEwNDpcdHN0YXRpYyBpbmxpbmUgc3RydWN0IGRtYWJ1Zl9nZW5wb29sX2NodW5rX293bmVyICpcbiAxMDU6XHRuZXRfZGV2bWVtX2lvdl90b19jaHVua19vd25lcihjb25zdCBzdHJ1Y3QgbmV0X2lvdiAqbmlvdilcbiAxMDY6XHR7XG4gMTA3Olx0XHRzdHJ1Y3QgbmV0X2lvdl9hcmVhICpvd25lciA9IG5ldF9pb3Zfb3duZXIobmlvdik7XG4gMTA4Olx0XG4gMTA5Olx0XHRyZXR1cm4gY29udGFpbmVyX29mKG93bmVyLCBzdHJ1Y3QgZG1hYnVmX2dlbnBvb2xfY2h1bmtfb3duZXIsIGFyZWEpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNToxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDgyNQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdW5kZXJzdGFuZGluZywgcHJlc2VudGVkIGFzIGEgZmlyc3QtcGVyc29uIGFjY291bnQsIHRhaWxvcmVkIGZvciBzb21lb25lIHdobyBrbm93cyB0aGVpciB3YXkgYXJvdW5kIHRoZXNlIHNvcnRzIG9mIHN5c3RlbXM6CgoqKlVuZGVmaW5pbmcgQ09ORklHX05FVF9ERVZNRU06IFdoYXQgTm93PyoqCgpSaWdodCwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zIG9mICpub3QqIGRlZmluaW5nIGBDT05GSUdfTkVUX0RFVk1FTWAuIEkgaW1tZWRpYXRlbHkgc3RhcnQgdG8gcGljdHVyZSB0aGUgbmV0d29yayBkZXZpY2UgbWVtb3J5IG1hcHBpbmcgcHJvY2Vzcy4gSXQmIzM5O3MgYSBjcml0aWNhbCBwaWVjZSwgaXNuJiMzOTt0IGl0PyBXaXRob3V0IGl0LCBJJiMzOTttIGV4cGVjdGluZyBzb21lIHByZXR0eSBzaWduaWZpY2FudCBjaGFuZ2VzIGluIGhvdyB0aGUga2VybmVsIGludGVyYWN0cyB3aXRoIHRoZSBoYXJkd2FyZS4gSSBrbm93IHRoaXMgdHlwaWNhbGx5IGltcGFjdHMgaG93IHRoZSBkcml2ZXIgaGFuZGxlcyBETUEgYnVmZmVycywgaG93IGl0IGFjY2Vzc2VzIHRoZSBoYXJkd2FyZSByZWdpc3RlcnMsIGFuZCBnZW5lcmFsbHkgaG93IGl0IHdvcmtzIHdpdGggbWVtb3J5LgoKSSYjMzk7bSBzdGFydGluZyB0byB0aGluayBhYm91dCB0aGUgZGlmZmVyZW50IG5ldHdvcmsgZHJpdmVycyBhbmQgaG93IHRoZXkgYXJlIGNvbmZpZ3VyZWQuIEkgd2lsbCBuZWVkIHRvIGNvbnNpZGVyIHdoZXRoZXIgaXQmIzM5O3MgZW5hYmxlZCBvciBkaXNhYmxlZCwgYW5kIGhvdyBpdCBkZWFscyB3aXRoIGFjY2Vzc2luZyB0aGUgbmV0d29yayBkZXZpY2UmIzM5O3MgbWVtb3J5LiBNeSBleHBlY3RhdGlvbiBpcyB0aGF0IHRoZSBjb2RlIHBhdGhzIHJlbGF0ZWQgdG8gcGh5c2ljYWwgbWVtb3J5IGFjY2VzcyB0aHJvdWdoIGRldmljZSBtZW1vcnkgd2lsbCBiZSBkaXNhYmxlZCwgcGVyaGFwcyByZXBsYWNlZCB3aXRoIHNvbWV0aGluZyB0aGF0IGludGVyYWN0cyB3aXRoIHRoZSBkZXZpY2UgdmlhIGRpZmZlcmVudCBtZXRob2RzLiBNYXliZSB0aGVyZSYjMzk7cyBzb21lIGtpbmQgb2YgZmFsbGJhY2sgb3IgYSBkaWZmZXJlbnQgbWVjaGFuaXNtIOKAkyBwb3RlbnRpYWxseSBzb21ldGhpbmcgdXNpbmcgSS9PIG1lbW9yeSBtYXBwZWQgaW50byB0aGUga2VybmVsJiMzOTtzIHZpcnR1YWwgYWRkcmVzcyBzcGFjZSwgb3IgbWF5YmUgc29tZSBvdGhlciBraW5kIG9mIG1lY2hhbmlzbS4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoLiAKCkkmIzM5O20gYW50aWNpcGF0aW5nIHRoYXQgYW55IGV4aXN0aW5nIG5ldHdvcmsgZHJpdmVyIGNvZGUgdGhhdCBkaXJlY3RseSBhY2Nlc3NlcyBkZXZpY2UgbWVtb3J5LCBhcyBpZiBpdCB3ZXJlIHJlZ3VsYXIgUkFNLCB3aWxsIGxpa2VseSBicmVhay4gSSYjMzk7bGwgbmVlZCB0byBsb29rIGNsb3NlbHkgYXQgdGhlIGRyaXZlciBjb2RlIHRoYXQgdXNlcyBgaW9yZW1hcGAsIG9yIGFueSBvZiB0aG9zZSBkZXZpY2UgbWVtb3J5IGFjY2VzcyBmdW5jdGlvbnMuIEkmIzM5O2xsIG5lZWQgdG8gZmluZCBvdXQgd2hhdCBoYXBwZW5zIHdpdGggdGhlIGNvZGUgdGhhdCBkZXBlbmRzIG9uIHRoZXNlIG1hY3JvcyBhbmQsIGlmIHRoZXJlIGFyZSBhbnksIHdoZXRoZXIgdGhlcmUmIzM5O3MgYW4gYWx0ZXJuYXRpdmUgdG8gdGhlc2UgZnVuY3Rpb25zIHRvIGRlYWwgd2l0aCB0aGUgbWVtb3J5LgoKRXNzZW50aWFsbHksIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGUgc3lzdGVtIGhhbmRsZXMgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IG9mIHRoZSBuZXR3b3JrIGRldmljZXMgd2hlbiBgQ09ORklHX05FVF9ERVZNRU1gIGlzIG5vdCBhY3RpdmUsIGFuZCBJIG5lZWQgdG8gcHJlZGljdCBob3cgaXQgbWlnaHQgYmVoYXZlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNToxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL2Rldm1lbS5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTEwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMTA6XHR9XG4gMTExOlx0XG4gMTEyOlx0c3RhdGljIGlubGluZSBzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqXG4gMTEzOlx0bmV0X2Rldm1lbV9pb3ZfYmluZGluZyhjb25zdCBzdHJ1Y3QgbmV0X2lvdiAqbmlvdilcbiAxMTQ6XHR7XG4gMTE1Olx0XHRyZXR1cm4gbmV0X2Rldm1lbV9pb3ZfdG9fY2h1bmtfb3duZXIobmlvdiktXHUwMDNlYmluZGluZztcbiAxMTY6XHR9XG4gMTE3Olx0XG4gMTE4Olx0c3RhdGljIGlubGluZSB1MzIgbmV0X2Rldm1lbV9pb3ZfYmluZGluZ19pZChjb25zdCBzdHJ1Y3QgbmV0X2lvdiAqbmlvdilcbiAxMTk6XHR7XG4gMTIwOlx0XHRyZXR1cm4gbmV0X2Rldm1lbV9pb3ZfYmluZGluZyhuaW92KS1cdTAwM2VpZDtcbiAxMjE6XHR9XG4gMTIyOlx0XG4gMTIzOlx0c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG5ldF9pb3ZfdmlydHVhbF9hZGRyKGNvbnN0IHN0cnVjdCBuZXRfaW92ICpuaW92KVxuIDEyNDpcdHtcbiAxMjU6XHRcdHN0cnVjdCBuZXRfaW92X2FyZWEgKm93bmVyID0gbmV0X2lvdl9vd25lcihuaW92KTtcbiAxMjY6XHRcbiAxMjc6XHRcdHJldHVybiBvd25lci1cdTAwM2ViYXNlX3ZpcnR1YWwgJiM0MztcbiAxMjg6XHRcdCAgICAgICAoKHVuc2lnbmVkIGxvbmcpbmV0X2lvdl9pZHgobmlvdikgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQpO1xuIDEyOTpcdH1cbiAxMzA6XHRcbiAxMzE6XHRzdGF0aWMgaW5saW5lIGJvb2xcbiAxMzI6XHRuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nX2dldChzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqYmluZGluZylcbiAxMzM6XHR7XG4gMTM0Olx0XHRyZXR1cm4gcGVyY3B1X3JlZl90cnlnZXQoXHUwMDI2YmluZGluZy1cdTAwM2VyZWYpO1xuIDEzNTpcdH1cbiAxMzY6XHRcbiAxMzc6XHRzdGF0aWMgaW5saW5lIHZvaWRcbiAxMzg6XHRuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nX3B1dChzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqYmluZGluZylcbiAxMzk6XHR7XG4gMTQwOlx0XHRwZXJjcHVfcmVmX3B1dChcdTAwMjZiaW5kaW5nLVx1MDAzZXJlZik7XG4gMTQxOlx0fVxuIDE0MjpcdFxuIDE0MzpcdHZvaWQgbmV0X2Rldm1lbV9nZXRfbmV0X2lvdihzdHJ1Y3QgbmV0X2lvdiAqbmlvdik7XG4gMTQ0Olx0dm9pZCBuZXRfZGV2bWVtX3B1dF9uZXRfaW92KHN0cnVjdCBuZXRfaW92ICpuaW92KTtcbiAxNDU6XHRcbiAxNDY6XHRzdHJ1Y3QgbmV0X2lvdiAqXG4gMTQ3Olx0bmV0X2Rldm1lbV9hbGxvY19kbWFidWYoc3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKmJpbmRpbmcpO1xuIDE0ODpcdHZvaWQgbmV0X2Rldm1lbV9mcmVlX2RtYWJ1ZihzdHJ1Y3QgbmV0X2lvdiAqcHBpb3YpO1xuIDE0OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNToxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTkyNQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKk1pc3NpbmcgYCNlbHNlYD8gQSBTdXNwZWN0IENvbmRpdGlvbmFsIENvbXBpbGF0aW9uKioKCkFscmlnaHQsIGxldCBtZSBqdXN0IHBhcnNlIHRoaXMgY29kZS4uLiBIYW5nIG9uIGEgc2Vjb25kLiBJJiMzOTttIHNjYW5uaW5nIHRoaXMgY29uZGl0aW9uYWwgYmxvY2sgd2l0aCB0aGUgYCNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWTUVNKWAgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZSBhbmQuLi4gd2hlcmUmIzM5O3MgdGhlIGNvcnJlc3BvbmRpbmcgYCNlbHNlYCBjbGF1c2U/IFRoaXMgaXMgaW1tZWRpYXRlbHkgYSByZWQgZmxhZy4gQ29uZGl0aW9uYWwgY29tcGlsYXRpb24gaXMgY3JpdGljYWwgZm9yIHBvcnRhYmlsaXR5IGFuZCBlZmZpY2llbnQgcmVzb3VyY2UgdXNhZ2UsIGVzcGVjaWFsbHkgaW4gZW1iZWRkZWQgc3lzdGVtcy4gV2l0aG91dCBhbiBgI2Vsc2VgLCB0aGUgY29kZSB1bmRlciB0aGUgYCNpZmAgZWl0aGVyIGV4ZWN1dGVzIG9yIGlzIGNvbXBsZXRlbHkgZXhjbHVkZWQuCgpNeSBndXQgZmVlbGluZyBpcyB0aGF0IHNvbWV0aGluZyYjMzk7cyBtaXNzaW5nIGhlcmUuIEl0JiMzOTtzIHBvc3NpYmxlIHRoZSBjb2RlIGlzIGludGVudGlvbmFsbHkgc3RydWN0dXJlZCB0aGlzIHdheSwgYnV0IHRoZSBsYWNrIG9mIGFuIGBlbHNlYCBzdHJvbmdseSBzdWdnZXN0cyB0aGF0IGVpdGhlcjoKCjEuICAqKkEgY3JpdGljYWwgcGF0aCBpcyB1bmhhbmRsZWQ6KiogSWYgYENPTkZJR19ORVRfREVWTUVNYCBpcyAqbm90KiBkZWZpbmVkLCB3aGF0IHNob3VsZCBoYXBwZW4/IElzIHRoZXJlIGEgZGVmYXVsdCBiZWhhdmlvciBiYWtlZCBpbiBzb21ld2hlcmUgZWxzZSB0aGF0JiMzOTtzIGltcGxpY2l0bHkgcmVsaWVkIHVwb24/IFRoaXMgaXMgc2xvcHB5IGFuZCBjYW4gbGVhZCB0byB1bmV4cGVjdGVkIGJlaGF2aW9yIG9yIGV2ZW4gY29tcGlsYXRpb24gZXJyb3JzIGRvd24gdGhlIGxpbmUgaWYgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24gY2hhbmdlcy4KMi4gICoqUmVkdW5kYW50IENvZGUgb3IgYSBMb2dpYyBFcnJvcjoqKiBNYXliZSB0aGUgY29kZSAqaW50ZW5kZWQqIHRvIGhhbmRsZSB0aGUgYWJzZW5jZSBvZiBgQ09ORklHX05FVF9ERVZNRU1gIGlzIGluIGZhY3QgZXhlY3V0ZWQgZXZlcnkgdGltZSwgYnV0IGNvbmRpdGlvbmFsbHkuCjMuICAqKkEgcG90ZW50aWFsIGJ1ZzoqKiBBbiBpbnRlbmRlZCBzZWN0aW9uIG9mIGNvZGUgd2FzIGZvcmdvdHRlbi4KCkkgbmVlZCB0byBkaWcgZGVlcGVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZW50IG9mIHRoaXMgZW50aXJlIHNlY3Rpb24uIElzIGBDT05GSUdfTkVUX0RFVk1FTWAgYSBoYXJkd2FyZSBhYnN0cmFjdGlvbj8gSXMgdGhlIGNvZGUgd2l0aGluIHRoaXMgYCNpZmAgc2VjdGlvbiBzcGVjaWZpYyB0byBhIHBhcnRpY3VsYXIgbWVtb3J5IG1hcHBpbmcgb3IgaGFyZHdhcmUgaW50ZXJmYWNlPyBEZXBlbmRpbmcgb24gdGhlIGNvbnRleHQsIHRoaXMgY291bGQgaGF2ZSBzZXJpb3VzIGltcGxpY2F0aW9ucyBmb3IgcG9ydGFiaWxpdHksIGRyaXZlciBzZWxlY3Rpb24sIG9yIGV2ZW4gc2VjdXJpdHksIGlmIGl0JiMzOTtzIG1pc3NpbmcgY3JpdGljYWwgYm91bmRhcnkgY2hlY2tzIHdpdGhvdXQgdGhlIGVsc2UuIEkgbmVlZCB0byB0cmFjZSB0aGlzIGJhY2sgdG8gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgdGhlIHN1cnJvdW5kaW5nIGNvZGUsIGFuZCBhbnkgcmVsYXRlZCBkb2N1bWVudGF0aW9uLiBBIG1pc3NpbmcgYGVsc2VgIGNsYXVzZSBpbiBhIHByZXByb2Nlc3NvciBkaXJlY3RpdmUgaXMgb2Z0ZW4gYSBzeW1wdG9tIG9mIHNvbWV0aGluZyBkZWVwZXIsIGFuZCBpdCYjMzk7cyBzb21ldGhpbmcgSSBuZWVkIHRvIGZ1bGx5IHVuZGVyc3RhbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE1OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvZGV2bWVtLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE1MDpcdFxuIDE1MTpcdHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpcbiAxNTI6XHRuZXRfZGV2bWVtX2dldF9iaW5kaW5nKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IGRtYWJ1Zl9pZCk7XG4gMTUzOlx0c3RydWN0IG5ldF9pb3YgKlxuIDE1NDpcdG5ldF9kZXZtZW1fZ2V0X25pb3ZfYXQoc3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKmJpbmRpbmcsIHNpemVfdCBhZGRyLFxuIDE1NTpcdFx0XHQgICAgICAgc2l6ZV90ICpvZmYsIHNpemVfdCAqc2l6ZSk7XG4gMTU2Olx0XG4gMTU3Olx0I2Vsc2VcbiAxNTg6XHRzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZztcbiAxNTk6XHRcbiAxNjA6XHRzdGF0aWMgaW5saW5lIHZvaWRcbiAxNjE6XHRuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nX3B1dChzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqYmluZGluZylcbiAxNjI6XHR7XG4gMTYzOlx0fVxuIDE2NDpcdFxuIDE2NTpcdHN0YXRpYyBpbmxpbmUgdm9pZCBuZXRfZGV2bWVtX2dldF9uZXRfaW92KHN0cnVjdCBuZXRfaW92ICpuaW92KVxuIDE2NjpcdHtcbiAxNjc6XHR9XG4gMTY4Olx0XG4gMTY5Olx0c3RhdGljIGlubGluZSB2b2lkIG5ldF9kZXZtZW1fcHV0X25ldF9pb3Yoc3RydWN0IG5ldF9pb3YgKm5pb3YpXG4gMTcwOlx0e1xuIDE3MTpcdH1cbiAxNzI6XHRcbiAxNzM6XHRzdGF0aWMgaW5saW5lIHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpcbiAxNzQ6XHRuZXRfZGV2bWVtX2JpbmRfZG1hYnVmKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKnZkZXYsXG4gMTc1Olx0XHRcdCAgICAgICBzdHJ1Y3QgZGV2aWNlICpkbWFfZGV2LFxuIDE3NjpcdFx0XHQgICAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uLFxuIDE3NzpcdFx0XHQgICAgICAgdW5zaWduZWQgaW50IGRtYWJ1Zl9mZCxcbiAxNzg6XHRcdFx0ICAgICAgIHN0cnVjdCBuZXRkZXZfbmxfc29jayAqcHJpdixcbiAxNzk6XHRcdFx0ICAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiAxODA6XHR7XG4gMTgxOlx0XHRyZXR1cm4gRVJSX1BUUigtRU9QTk9UU1VQUCk7XG4gMTgyOlx0fVxuIDE4MzpcdFxuIDE4NDpcdHN0YXRpYyBpbmxpbmUgc3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKm5ldF9kZXZtZW1fbG9va3VwX2RtYWJ1Zih1MzIgaWQpXG4gMTg1Olx0e1xuIDE4NjpcdFx0cmV0dXJuIE5VTEw7XG4gMTg3Olx0fVxuIDE4ODpcdFxuIDE4OTpcdHN0YXRpYyBpbmxpbmUgdm9pZFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNToxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzAxNgoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDE3NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIERlcGVuZGVuY3kgQ2hhaW4gZm9yIE5ldGxpbmsgVGVzdGluZyoqCgpPa2F5LCBzbyBJIHNlZSB0aGF0IGBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmYCBpcyBnb2luZyB0byBjcmFwIG91dCB3aXRoIGAtRU9QTk9UU1VQUGAgaWYgYENPTkZJR19ORVRfREVWTUVNYCBpc24mIzM5O3Qgc2V0LiBUaGF0JiMzOTtzIG5vIGdvb2QgZm9yIGFjdHVhbGx5IHRlc3RpbmcgdGhlIGludGVuZGVkIGZ1bmN0aW9uYWxpdHkuIEhvd2V2ZXIsIGBuZXRkZXZfbmxfYmluZF9yeF9kb2l0YCBpcyBhbHdheXMgY29tcGlsZWQsIHdoaWNoIGlzIGdyZWF0IGJlY2F1c2UgaXQgbWVhbnMgdGhlcmUmIzM5O3Mgc29tZXRoaW5nIHRvIGhvb2sgaW50by4KClNvLCB0byBwcm9wZXJseSB0ZXN0IHRoZSBjb3JlIGxvZ2ljIG9mIHdoYXQgSSYjMzk7bSBhZnRlciwgSSBhYnNvbHV0ZWx5ICpuZWVkKiBgQ09ORklHX05FVF9ERVZNRU1gIGVuYWJsZWQuIE5vIHdheSBhcm91bmQgaXQuCgpOb3csIGxldCYjMzk7cyB0cmFjZSB0aGlzIGRlcGVuZGVuY3kuIFJpZ2h0LCBgQ09ORklHX05FVF9ERVZNRU1gIHJlbGllcyBvbiBib3RoIGBETUFfU0hBUkVEX0JVRkZFUmAgYW5kIGBQQUdFX1BPT0xgLiBUaGF0JiMzOTtzIHRoZSBmdWxsIGNoYWluLgoKVGhlcmVmb3JlLCBmb3IgbXkgYEVuYWJsZUNvbmZpZ3NgIGxpc3QsIEkmIzM5O20gZ29pbmcgdG8gbmVlZDogYFsmIzM0O05FVF9ERVZNRU0mIzM0OywgJiMzNDtETUFfU0hBUkVEX0JVRkZFUiYjMzQ7LCAmIzM0O1BBR0VfUE9PTCYjMzQ7XWAuIFRob3NlIHRocmVlIGFyZSBlc3NlbnRpYWwgdG8gcHJvcGVybHkgZW5hYmxlIGFuZCB0ZXN0IHRoZSByZWxldmFudCBjb21wb25lbnRzLgoKTm93LCBhIHF1aWNrIGNoZWNrIHRvIGNvbmZpcm06IElzIGBuZXRkZXZfbmxfYmluZF9yeF9kb2l0YCBhY3R1YWxseSByZWFjaGFibGU/IEl0JiMzOTtzIGEgbmV0bGluayBoYW5kbGVyLCBhbmQgaXQmIzM5O3MgbGlrZWx5IHBhcnQgb2YgdGhlIGBuZXRkZXZfbmxfZmFtaWx5YC4gTGV0IG1lIGp1c3QgdmVyaWZ5IHRoYXQgbm93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNToxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZXRkZXZfbmxfYmluZF9yeF9kb2l0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvbmV0ZGV2LWdlbmwtZ2VuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvbmV0ZGV2LWdlbmwtZ2VuLmM9MTM4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9zcGxpdF9vcHMgbmV0ZGV2X25sX29wc1tdID0ge1xuLS1cbm5ldC9jb3JlL25ldGRldi1nZW5sLWdlbi5jLTIxOS1cdFx0LmNtZFx0XHQ9IE5FVERFVl9DTURfQklORF9SWCxcbm5ldC9jb3JlL25ldGRldi1nZW5sLWdlbi5jOjIyMDpcdFx0LmRvaXRcdFx0PSBuZXRkZXZfbmxfYmluZF9yeF9kb2l0LFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwtZ2VuLmMtMjIxLVx0XHQucG9saWN5XHRcdD0gbmV0ZGV2X2JpbmRfcnhfbmxfcG9saWN5LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNToxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzY4NAoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDYzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5ldGxpbmsgSGFuZGxlcioqCgpPa2F5LCBzbyB0aGlzIGlzIGRlZmluaXRlbHkgYSBuZXRsaW5rIGhhbmRsZXIuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBjb25maXJtIHRoZSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZS4gSSYjMzk7bGwgc3RhcnQgYnkgdmVyaWZ5aW5nIHRoYXQgYG5ldGRldl9ubF9zb2NrX3ByaXZfaW5pdGAgaXMgY2FsbGVkLCB3aGljaCBpdCBhcHBlYXJzIHRvIGJlLiBJdCYjMzk7cyByZWdpc3RlcmVkIHdpdGhpbiBgbmV0ZGV2X25sX2ZhbWlseWAsIGFuZCBgc29ja19wcml2X2luaXRgIGlzIGluZGVlZCBjYWxsZWQgd2hlbiBhIG5ldGxpbmsgc29ja2V0IGlzIGNyZWF0ZWQgZm9yIHRoaXMgZmFtaWx5LCBjb25maXJtaW5nIHRoZSBmdW5jdGlvbmFsIHJlYWNoYWJpbGl0eSBvZiB0aGVzZSBjaGFuZ2VzLgoKR2l2ZW4gdGhhdCwgSSBuZWVkIHRvIGZvY3VzIG15IGF0dGVudGlvbiBvbiBzZXZlcmFsIGtleSBzeW1ib2xzOiBgbmV0ZGV2X25sX2JpbmRfcnhfZG9pdGAsIGBuZXRkZXZfbmxfYmluZF90eF9kb2l0YCwgYG5ldF9kZXZtZW1fYmluZF9kbWFidWZgLCBgbmV0X2Rldm1lbV91bmJpbmRfZG1hYnVmYCwgYG5ldGRldl9ubF9zb2NrX3ByaXZfaW5pdGAsIGFuZCBgbmV0ZGV2X25sX3NvY2tfcHJpdl9kZXN0cm95YC4gSSBuZWVkIHRvIHJldmlldyB0aGVzZSBmdW5jdGlvbnMgaW4gZGV0YWlsLgoKTm93LCBsZXQgbWUgZG91YmxlLWNoZWNrIHRoZSB2aXNpYmlsaXR5IG9mIHRoZXNlIGZ1bmN0aW9ucy4gQ2hlY2tpbmcgYG5ldC9jb3JlL25ldGRldi1nZW5sLmNgLCBib3RoIGBuZXRkZXZfbmxfc29ja19wcml2X2luaXRgIGFuZCBgbmV0ZGV2X25sX3NvY2tfcHJpdl9kZXN0cm95YCBhcmUgZGVjbGFyZWQgYXMgbm9uLXN0YXRpYywgd2hpY2ggaXMgd2hhdCBJIGV4cGVjdGVkLiBTaW1pbGFybHksIGluIGBuZXQvY29yZS9kZXZtZW0uY2AsIEkgc2VlIHRoYXQgYG5ldF9kZXZtZW1fYmluZF9kbWFidWZgIGFuZCBgbmV0X2Rldm1lbV91bmJpbmRfZG1hYnVmYCBhcmUgYWxzbyBub3Qgc3RhdGljLiBGaW5hbGx5LCBsb29raW5nIGJhY2sgYXQgYG5ldC9jb3JlL25ldGRldi1nZW5sLmNgLCBib3RoIGBuZXRkZXZfbmxfYmluZF9yeF9kb2l0YCBhbmQgYG5ldGRldl9ubF9iaW5kX3R4X2RvaXRgIGFyZSBhbHNvIG5vbi1zdGF0aWMsIGFzIGV4cGVjdGVkLgoKSSBuZWVkIHRvIGNvbmZpcm0gaWYgdGhlcmUgYXJlIGFueSBvdGhlciByZWxhdGVkIGZ1bmN0aW9ucy4gTGV0IG1lIHJldmlldyB0aGF0IHF1aWNrbHkuIE5vLCB0aGVyZSBhcmVuJiMzOTt0LgoKTGFzdGx5LCBJIHNob3VsZCBjaGVjayB3aGV0aGVyIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGlzIHJlcXVpcmVkLCBsb29raW5nIGF0IHRoZSBgRE1BX1NIQVJFRF9CVUZGRVJgIGNvbmZpZ3VyYXRpb24gb3B0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNToxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgRE1BX1NIQVJFRF9CVUZGRVImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9iYXNlL0tjb25maWc9MjEzPXNvdXJjZSBcJiMzNDtkcml2ZXJzL2Jhc2UvcmVnbWFwL0tjb25maWdcJiMzNDtcbmRyaXZlcnMvYmFzZS9LY29uZmlnLTIxNC1cbmRyaXZlcnMvYmFzZS9LY29uZmlnOjIxNTpjb25maWcgRE1BX1NIQVJFRF9CVUZGRVJcbmRyaXZlcnMvYmFzZS9LY29uZmlnLTIxNi1cdGJvb2xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTU6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg4NDEKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqSW5zcGVjdGluZyB0aGUgYFBBR0VfUE9PTGAqKgoKQWxyaWdodCwgYmVmb3JlIGRpdmluZyB0b28gZGVlcCwgSSBuZWVkIHRvIHRha2UgYSBxdWljayBsb29rIGF0IHRoZSBgUEFHRV9QT09MYC4gSXTigJlzIHRoZSBsaWtlbHkgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgbWVtb3J5IGFsbG9jYXRpb24gYW5kIHBvdGVudGlhbCBpc3N1ZXMuIERlcGVuZGluZyBvbiB0aGUgc3lzdGVtIGFyY2hpdGVjdHVyZSBhbmQgdGhlIHNwZWNpZmljIGltcGxlbWVudGF0aW9uLCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkIHdpdGhpbiB0aGUgYFBBR0VfUE9PTGAgZ2l2ZXMgbWUgYSBoaWdoLWxldmVsIHZpZXcgb2YgaG93IGF2YWlsYWJsZSBtZW1vcnkgaXMgb3JnYW5pemVkLiBJcyBpdCBhIGJ1ZGR5IHN5c3RlbSwgYSBzbGFiIGFsbG9jYXRvciwgb3Igc29tZXRoaW5nIG1vcmUgc3BlY2lhbGl6ZWQ/IFRoZSBwcmVzZW5jZSBvZiBmcmVlIHBhZ2UgbGlzdHMsIHVzYWdlIGNvdW50cywgYW5kIHBvc3NpYmx5IGV2ZW4gZnJhZ21lbnRhdGlvbiBtZXRyaWNzIHdpbGwgcXVpY2tseSBnaXZlIG1lIHRoZSBsYXkgb2YgdGhlIGxhbmQuIEkgbmVlZCB0byBjaGVjayB0aGUgZGF0YSBzdHJ1Y3R1cmVzLCBzcGVjaWZpY2FsbHkgdGhlIGhlYWRlcnMsIHRoZSBwb2ludGVycywgYW5kIGFueSBhc3NvY2lhdGVkIG1ldGFkYXRhLCB0byBnZXQgYSBzZW5zZSBvZiBob3cgcmVxdWVzdHMgYXJlIGhhbmRsZWQgYW5kIGlmIHRoZXJlIGFyZSBhbnkgb2J2aW91cyBib3R0bGVuZWNrcyBvciByZWQgZmxhZ3MuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGluY29uc2lzdGVuY2llcywgcGFydGljdWxhcmx5IGFyb3VuZCB0aGUgYm91bmRhcmllcyBvZiBhbGxvY2F0ZWQgcGFnZXMuIEFyZSB0aGVyZSBhbnkgdW51c3VhbCBwYXR0ZXJucz8gSXMgaXQgZ3Jvd2luZy9zaHJpbmtpbmcgYXMgZXhwZWN0ZWQ/IEkgbmVlZCB0byBhbmFseXplIGl0cyBjdXJyZW50IHN0YXRlLCBjcm9zcy1yZWZlcmVuY2UgaXQgd2l0aCByZWNlbnQgb3BlcmF0aW9ucywgYW5kIGRldGVybWluZSBpZiBpdCYjMzk7cyBjb250cmlidXRpbmcgdG8gdGhlIG9ic2VydmVkIGJlaGF2aW9yIG9yIHBlcmZvcm1hbmNlIHByb2JsZW1zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNToxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgUEFHRV9QT09MJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9LY29uZmlnPTQ4Nz1jb25maWcgTkVUX0RFVkxJTktcbi0tXG5uZXQvS2NvbmZpZy00OTAtXG5uZXQvS2NvbmZpZzo0OTE6Y29uZmlnIFBBR0VfUE9PTFxubmV0L0tjb25maWctNDkyLVx0Ym9vbFxubmV0L0tjb25maWctNDkzLVxubmV0L0tjb25maWc6NDk0OmNvbmZpZyBQQUdFX1BPT0xfU1RBVFNcbm5ldC9LY29uZmlnLTQ5NS1cdGRlZmF1bHQgblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNToxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTIyOQoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipJbml0aWFsIERpYWdub3N0aWMgUXVlcnkqKgoKUmlnaHQsIGxldCYjMzk7cyBzdGFydCB3aXRoIGEgcXVpY2sgY2hlY2sgb24gYE5FVF9ERVZNRU1gLiBUaGF0JiMzOTtzIHVzdWFsbHkgdGhlIGZpcnN0IHBsYWNlIEkgbG9vayB3aGVuIGRlYWxpbmcgd2l0aCBuZXR3b3JrIGRldmljZSBkcml2ZXIgaXNzdWVzLCBlc3BlY2lhbGx5IGFueXRoaW5nIHJlbGF0ZWQgdG8gbWVtb3J5IGFsbG9jYXRpb24gb3IgYWNjZXNzLiBUaGlzIGNvbW1hbmQgaXMgcHJldHR5IG11Y2ggYSBmdW5kYW1lbnRhbCBzdGFydGluZyBwb2ludC4gSXQgcHJvdmlkZXMgYSBxdWljayBhbmQgZGlydHkgd2F5IHRvIGRpYWdub3NlIGhhcmR3YXJlIGFkZHJlc3MgbWFwcGluZyBwcm9ibGVtcywgb3IgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzLiBDaGVja2luZyBpdCB3b24mIzM5O3Qgc29sdmUgZXZlcnl0aGluZywgb2YgY291cnNlLCBidXQgaXQmIzM5O3MgYSB2ZXJ5IGZhc3QgZGlhZ25vc3RpYyB0aGF0IGhhcyBwcm92ZW4gdXNlZnVsIGluIHRoZSBwYXN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNToxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVUX0RFVk1FTSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvS2NvbmZpZz02Nj1jb25maWcgU0tCX0VYVEVOU0lPTlNcbi0tXG5uZXQvS2NvbmZpZy02OC1cbm5ldC9LY29uZmlnOjY5OmNvbmZpZyBORVRfREVWTUVNXG5uZXQvS2NvbmZpZy03MC1cdGRlZl9ib29sIHlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTU6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk0NjYKCQkJCQkJCW91dHB1dDogMjg4CgkJCQkJCQl0aG91Z2h0czogMTk1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTmV0ZGV2IE5ldGxpbmsgU29ja2V0IEJpbmRpbmcgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBJIHNlZSBpdCYjMzk7cyB0b3VjaGluZyB0aGUgbmV0ZGV2IG5ldGxpbmsgc29ja2V0IGJpbmRpbmdzIGhhbmRsaW5nLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIHN3YXBwaW5nIHRoZSBgYmluZGluZ3NgIGxpc3QgZm9yIGFuIGB4YXJyYXlgIGFuZCBnZXR0aW5nIHJpZCBvZiB0aGUgYGxvY2tgIG11dGV4IHdpdGhpbiB0aGUgYHN0cnVjdCBuZXRkZXZfbmxfc29ja2AuIE15IGV4cGVydCBpbnN0aW5jdHMgdGVsbCBtZSB0aGlzIGlzIGEgcG90ZW50aWFsbHkgc2lnbmlmaWNhbnQgYXJlYSBmb3IgZXhwbG9yYXRpb24sIHNwZWNpZmljYWxseSBiZWNhdXNlIGl0JiMzOTtzIGFsdGVyaW5nIGNvcmUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBjb25jdXJyZW5jeSBtZWNoYW5pc21zLiBJdCBpbXBhY3RzIGhvdyB0aGUgc3lzdGVtIGRlYWxzIHdpdGggbmV0bGluayBjb21tYW5kcywgYWZmZWN0aW5nIGZ1bmN0aW9ucyBzdWNoIGFzIGBuZXRkZXZfbmxfYmluZF9yeF9kb2l0YCwgYG5ldGRldl9ubF9iaW5kX3R4X2RvaXRgLCBgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZmAsIGFuZCBgbmV0X2Rldm1lbV91bmJpbmRfZG1hYnVmYC4gVGhlc2UgYXJlIGFsbCBjcnVjaWFsIHBvaW50cyBvZiBpbnRlcmFjdGlvbiBmb3IgYmluZGluZyBhbmQgdW5iaW5kaW5nIGRldmljZXMsIGFuZCwgdGhlcmVmb3JlLCB0aGV5IGFyZSB3b3J0aCBhIGRlZXBlciBpbnZlc3RpZ2F0aW9uLgoKVGhlIHBhdGNoIGl0c2VsZiBhcHBlYXJzIGZ1bmN0aW9uYWxseSBzb3VuZCwgZm9jdXNpbmcgb24gbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHN5bmNocm9uaXphdGlvbiwgd2hpY2ggaXMgYWx3YXlzIGFuIGludGVyZXN0aW5nIHRhcmdldCBmb3IgZnV6emluZy4gVG8gcmVhbGx5IHRlc3QgdGhpcyBwcm9wZXJseSwgSSYjMzk7bGwgbmVlZCB0byBtYWtlIHN1cmUgYE5FVF9ERVZNRU1gIGlzIGVuYWJsZWQsIGdpdmVuIGl0cyByb2xlIGluIHRoZSBuZXRkZXYgbWVtb3J5IHNwYWNlIGFsbG9jYXRpb24uIEkgc2hvdWxkIGFsc28gYmUgbWluZGZ1bCBvZiBpdHMgZGVwZW5kZW5jaWVzLCBwYXJ0aWN1bGFybHkgYERNQV9TSEFSRURfQlVGRkVSYCBhbmQgYFBBR0VfUE9PTGAsIGFzIHRoZXNlIHdpbGwgbGlrZWx5IGJlIGNyaXRpY2FsIGZvciBlbmFibGluZyB0aGUgcmVsZXZhbnQgY29kZSBwYXRocy4KCkkgc2hvdWxkIGFsc28gbWFrZSBhIG5vdGUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNToxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX0RFVk1FTSYjMzQ7LAogICAgJiMzNDtETUFfU0hBUkVEX0JVRkZFUiYjMzQ7LAogICAgJiMzNDtQQUdFX1BPT0wmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZXRkZXZfbmxfYmluZF9yeF9kb2l0JiMzNDssCiAgICAmIzM0O25ldGRldl9ubF9iaW5kX3R4X2RvaXQmIzM0OywKICAgICYjMzQ7bmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZiYjMzQ7LAogICAgJiMzNDtuZXRfZGV2bWVtX3VuYmluZF9kbWFidWYmIzM0OywKICAgICYjMzQ7bmV0ZGV2X25sX3NvY2tfcHJpdl9pbml0JiMzNDssCiAgICAmIzM0O25ldGRldl9ubF9zb2NrX3ByaXZfZGVzdHJveSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbmV0ZGV2IG5ldGxpbmsgc29ja2V0IGJpbmRpbmdzIGhhbmRsaW5nLCBjaGFuZ2luZyB0aGUgYGJpbmRpbmdzYCBsaXN0IHRvIGFuIGB4YXJyYXlgIGFuZCByZW1vdmluZyB0aGUgYGxvY2tgIG11dGV4IGZyb20gYHN0cnVjdCBuZXRkZXZfbmxfc29ja2AuIFRoaXMgYWZmZWN0cyB0aGUgYG5ldGRldl9ubF9iaW5kX3J4X2RvaXRgLCBgbmV0ZGV2X25sX2JpbmRfdHhfZG9pdGAsIGBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmYCwgYW5kIGBuZXRfZGV2bWVtX3VuYmluZF9kbWFidWZgIGZ1bmN0aW9ucywgd2hpY2ggYXJlIHJlYWNoYWJsZSB2aWEgbmV0bGluayBjb21tYW5kcy4gVGhlIGNoYW5nZXMgYXJlIGZ1bmN0aW9uYWwgYW5kIGludm9sdmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHN5bmNocm9uaXphdGlvbiwgbWFraW5nIHRoZW0gd29ydGggZnV6emluZy4gVGhlIGBORVRfREVWTUVNYCBmZWF0dXJlIGFuZCBpdHMgZGVwZW5kZW5jaWVzIChgRE1BX1NIQVJFRF9CVUZGRVJgIGFuZCBgUEFHRV9QT09MYCkgbXVzdCBiZSBlbmFibGVkIHRvIHRlc3QgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9ERVZNRU0mIzM0OywKICAgICYjMzQ7RE1BX1NIQVJFRF9CVUZGRVImIzM0OywKICAgICYjMzQ7UEFHRV9QT09MJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmV0ZGV2X25sX2JpbmRfcnhfZG9pdCYjMzQ7LAogICAgJiMzNDtuZXRkZXZfbmxfYmluZF90eF9kb2l0JiMzNDssCiAgICAmIzM0O25ldF9kZXZtZW1fYmluZF9kbWFidWYmIzM0OywKICAgICYjMzQ7bmV0X2Rldm1lbV91bmJpbmRfZG1hYnVmJiMzNDssCiAgICAmIzM0O25ldGRldl9ubF9zb2NrX3ByaXZfaW5pdCYjMzQ7LAogICAgJiMzNDtuZXRkZXZfbmxfc29ja19wcml2X2Rlc3Ryb3kmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG5ldGRldiBuZXRsaW5rIHNvY2tldCBiaW5kaW5ncyBoYW5kbGluZywgY2hhbmdpbmcgdGhlIGBiaW5kaW5nc2AgbGlzdCB0byBhbiBgeGFycmF5YCBhbmQgcmVtb3ZpbmcgdGhlIGBsb2NrYCBtdXRleCBmcm9tIGBzdHJ1Y3QgbmV0ZGV2X25sX3NvY2tgLiBUaGlzIGFmZmVjdHMgdGhlIGBuZXRkZXZfbmxfYmluZF9yeF9kb2l0YCwgYG5ldGRldl9ubF9iaW5kX3R4X2RvaXRgLCBgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZmAsIGFuZCBgbmV0X2Rldm1lbV91bmJpbmRfZG1hYnVmYCBmdW5jdGlvbnMsIHdoaWNoIGFyZSByZWFjaGFibGUgdmlhIG5ldGxpbmsgY29tbWFuZHMuIFRoZSBjaGFuZ2VzIGFyZSBmdW5jdGlvbmFsIGFuZCBpbnZvbHZlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBzeW5jaHJvbml6YXRpb24sIG1ha2luZyB0aGVtIHdvcnRoIGZ1enppbmcuIFRoZSBgTkVUX0RFVk1FTWAgZmVhdHVyZSBhbmQgaXRzIGRlcGVuZGVuY2llcyAoYERNQV9TSEFSRURfQlVGRkVSYCBhbmQgYFBBR0VfUE9PTGApIG11c3QgYmUgZW5hYmxlZCB0byB0ZXN0IHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNToxMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE1OjEyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlcGxhY2VzIGEgbGlua2VkIGxpc3QgYW5kIGEgbXV0ZXggd2l0aCBhbiB4YXJyYXkgZm9yIG1hbmFnaW5nIGRtYWJ1ZiBiaW5kaW5ncyBpbiBgc3RydWN0IG5ldGRldl9ubF9zb2NrYC4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGFsbG9jYXRlIG5ldyBidWZmZXJzIHRoYXQgY291bGQgYmUgbGVmdCB1bmluaXRpYWxpemVkLiBBbnkgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgcmFjZSBjb25kaXRpb25zIGZyb20gdGhlIHJlbW92ZWQgbXV0ZXgsIHVzZS1hZnRlci1mcmVlLCBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzKSB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDdlNWJjNWY2NzQzMjE2YmIyNGYzODFjNWJkYTk2MTRhMDc0YWEwODYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEF1ZyAxMSAxNToxMDoxMiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldGRldl9uZXRsaW5rLmggYi9pbmNsdWRlL25ldC9uZXRkZXZfbmV0bGluay5oCmluZGV4IDA3NTk2MmRiZTc0M2IuLjQ1YTRhNDgyZDQyZTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L25ldGRldl9uZXRsaW5rLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvbmV0ZGV2X25ldGxpbmsuaApAQCAtMiwxMSAmIzQzOzIsMTAgQEAKICNpZm5kZWYgX19ORVRfTkVUREVWX05FVExJTktfSAogI2RlZmluZSBfX05FVF9ORVRERVZfTkVUTElOS19ICiAKLSNpbmNsdWRlICZsdDtsaW51eC9saXN0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3hhcnJheS5oJmd0OwogCiBzdHJ1Y3QgbmV0ZGV2X25sX3NvY2sgewotCXN0cnVjdCBtdXRleCBsb2NrOwotCXN0cnVjdCBsaXN0X2hlYWQgYmluZGluZ3M7CiYjNDM7CXN0cnVjdCB4YXJyYXkgYmluZGluZ3M7CiB9OwogCiAjZW5kaWYJLyogX19ORVRfTkVUREVWX05FVExJTktfSCAqLwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2bWVtLmMgYi9uZXQvY29yZS9kZXZtZW0uYwppbmRleCA5NTdkNmI5NjIxNmIzLi5iZGY4YTA3OTlhNDI3IDEwMDY0NAotLS0gYS9uZXQvY29yZS9kZXZtZW0uYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9kZXZtZW0uYwpAQCAtMTM0LDggJiM0MzsxMzQsOCBAQCB2b2lkIG5ldF9kZXZtZW1fdW5iaW5kX2RtYWJ1ZihzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqYmluZGluZykKIAkgKi8KIAlzeW5jaHJvbml6ZV9uZXQoKTsKIAotCWlmIChiaW5kaW5nLSZndDtsaXN0Lm5leHQpCi0JCWxpc3RfZGVsKCZhbXA7YmluZGluZy0mZ3Q7bGlzdCk7CiYjNDM7CWlmIChiaW5kaW5nLSZndDtzb2NrX3ByaXYpCiYjNDM7CQl4YV9lcmFzZSgmYW1wO2JpbmRpbmctJmd0O3NvY2tfcHJpdi0mZ3Q7YmluZGluZ3MsIGJpbmRpbmctJmd0O2lkKTsKIAogCXhhX2Zvcl9lYWNoKCZhbXA7YmluZGluZy0mZ3Q7Ym91bmRfcnhxcywgeGFfaWR4LCByeHEpIHsKIAkJY29uc3Qgc3RydWN0IHBwX21lbW9yeV9wcm92aWRlcl9wYXJhbXMgbXBfcGFyYW1zID0gewpAQCAtMTkzLDYgJiM0MzsxOTMsNyBAQCBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKnZkZXYsCiAJc3RydWN0IGRtYV9idWYgKmRtYWJ1ZjsKIAl1bnNpZ25lZCBpbnQgc2dfaWR4LCBpOwogCXVuc2lnbmVkIGxvbmcgdmlydHVhbDsKJiM0MzsJdm9pZCAqcmVzOwogCWludCBlcnI7CiAKIAlpZiAoIWRtYV9kZXYpIHsKQEAgLTMyNSwxMCAmIzQzOzMyNiwxNyBAQCBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKnZkZXYsCiAJaWYgKGVyciAmbHQ7IDApCiAJCWdvdG8gZXJyX2ZyZWVfY2h1bmtzOwogCi0JbGlzdF9hZGQoJmFtcDtiaW5kaW5nLSZndDtsaXN0LCAmYW1wO3ByaXYtJmd0O2JpbmRpbmdzKTsKJiM0MzsJYmluZGluZy0mZ3Q7c29ja19wcml2ID0gcHJpdjsKJiM0MzsJcmVzID0geGFfc3RvcmUoJmFtcDtwcml2LSZndDtiaW5kaW5ncywgYmluZGluZy0mZ3Q7aWQsIGJpbmRpbmcsIEdGUF9LRVJORUwpOwomIzQzOwlpZiAoeGFfaXNfZXJyKHJlcykpIHsKJiM0MzsJCWVyciA9IHhhX2VycihyZXMpOwomIzQzOwkJZ290byBlcnJfZXJhc2VfZG1hYnVmX2JpbmRpbmdzOwomIzQzOwl9CiAKIAlyZXR1cm4gYmluZGluZzsKIAomIzQzO2Vycl9lcmFzZV9kbWFidWZfYmluZGluZ3M6CiYjNDM7CXhhX2VyYXNlKCZhbXA7bmV0X2Rldm1lbV9kbWFidWZfYmluZGluZ3MsIGJpbmRpbmctJmd0O2lkKTsKIGVycl9mcmVlX2NodW5rczoKIAlnZW5fcG9vbF9mb3JfZWFjaF9jaHVuayhiaW5kaW5nLSZndDtjaHVua19wb29sLAogCQkJCW5ldF9kZXZtZW1fZG1hYnVmX2ZyZWVfY2h1bmtfb3duZXIsIE5VTEwpOwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2bWVtLmggYi9uZXQvY29yZS9kZXZtZW0uaAppbmRleCAzODUyYTU2MDM2Y2I0Li5iZjc3ZTVhOWE4ZmU3IDEwMDY0NAotLS0gYS9uZXQvY29yZS9kZXZtZW0uaAomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9kZXZtZW0uaApAQCAtNDksMTAgJiM0Mzs0OSwxMCBAQCBzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyB7CiAJICovCiAJc3RydWN0IHBlcmNwdV9yZWYgcmVmOwogCi0JLyogVGhlIGxpc3Qgb2YgYmluZGluZ3MgY3VycmVudGx5IGFjdGl2ZS4gVXNlZCBmb3IgbmV0bGluayB0byBub3RpZnkgdXMKJiM0MzsJLyogVGhlIHNvY2tldCBwcml2IHRoaXMgYmluZGluZyBiZWxvbmdzIHRvLiBVc2VkIGZvciBuZXRsaW5rIHRvIG5vdGlmeSB1cwogCSAqIG9mIHRoZSB1c2VyIGRyb3BwaW5nIHRoZSBiaW5kLgogCSAqLwotCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKJiM0MzsJc3RydWN0IG5ldGRldl9ubF9zb2NrICpzb2NrX3ByaXY7CiAKIAkvKiByeHEmIzM5O3MgdGhpcyBiaW5kaW5nIGlzIGFjdGl2ZSBvbi4gKi8KIAlzdHJ1Y3QgeGFycmF5IGJvdW5kX3J4cXM7CmRpZmYgLS1naXQgYS9uZXQvY29yZS9uZXRkZXYtZ2VubC5jIGIvbmV0L2NvcmUvbmV0ZGV2LWdlbmwuYwppbmRleCBjMTVkOGQ0Y2ExZjhmLi5kM2YzYTkxYTZkOTMyIDEwMDY0NAotLS0gYS9uZXQvY29yZS9uZXRkZXYtZ2VubC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL25ldGRldi1nZW5sLmMKQEAgLTEwNDQsMTMgJiM0MzsxMDQ0LDExIEBAIGludCBuZXRkZXZfbmxfYmluZF9yeF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiAJCWdvdG8gZXJyX2dlbmxtc2dfZnJlZTsKIAl9CiAKLQltdXRleF9sb2NrKCZhbXA7cHJpdi0mZ3Q7bG9jayk7Ci0KIAllcnIgPSAwOwogCW5ldGRldiA9IG5ldGRldl9nZXRfYnlfaW5kZXhfbG9jayhnZW5sX2luZm9fbmV0KGluZm8pLCBpZmluZGV4KTsKIAlpZiAoIW5ldGRldikgewogCQllcnIgPSAtRU5PREVWOwotCQlnb3RvIGVycl91bmxvY2tfc29jazsKJiM0MzsJCWdvdG8gZXJyX2dlbmxtc2dfZnJlZTsKIAl9CiAJaWYgKCFuZXRpZl9kZXZpY2VfcHJlc2VudChuZXRkZXYpKQogCQllcnIgPSAtRU5PREVWOwpAQCAtMTEwMiw4ICYjNDM7MTEwMCw2IEBAIGludCBuZXRkZXZfbmxfYmluZF9yeF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiAKIAluZXRkZXZfdW5sb2NrKG5ldGRldik7CiAKLQltdXRleF91bmxvY2soJmFtcDtwcml2LSZndDtsb2NrKTsKLQogCXJldHVybiBlcnIgJmx0OyAwID8gZXJyIDogMDsKIAogZXJyX3VuYmluZDoKQEAgLTExMTIsOCAmIzQzOzExMDgsNiBAQCBpbnQgbmV0ZGV2X25sX2JpbmRfcnhfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogCWJpdG1hcF9mcmVlKHJ4cV9iaXRtYXApOwogZXJyX3VubG9jazoKIAluZXRkZXZfdW5sb2NrKG5ldGRldik7Ci1lcnJfdW5sb2NrX3NvY2s6Ci0JbXV0ZXhfdW5sb2NrKCZhbXA7cHJpdi0mZ3Q7bG9jayk7CiBlcnJfZ2VubG1zZ19mcmVlOgogCW5sbXNnX2ZyZWUocnNwKTsKIAlyZXR1cm4gZXJyOwpAQCAtMTE4NSwxMiAmIzQzOzExNzksMTAgQEAgaW50IG5ldGRldl9ubF9iaW5kX3R4X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIAkJZ290byBlcnJfZ2VubG1zZ19mcmVlOwogCX0KIAotCW11dGV4X2xvY2soJmFtcDtwcml2LSZndDtsb2NrKTsKLQogCW5ldGRldiA9IG5ldGRldl9nZXRfYnlfaW5kZXhfbG9jayhnZW5sX2luZm9fbmV0KGluZm8pLCBpZmluZGV4KTsKIAlpZiAoIW5ldGRldikgewogCQllcnIgPSAtRU5PREVWOwotCQlnb3RvIGVycl91bmxvY2tfc29jazsKJiM0MzsJCWdvdG8gZXJyX2dlbmxtc2dfZnJlZTsKIAl9CiAKIAlpZiAoIW5ldGlmX2RldmljZV9wcmVzZW50KG5ldGRldikpIHsKQEAgLTEyMzMsNyAmIzQzOzEyMjUsNiBAQCBpbnQgbmV0ZGV2X25sX2JpbmRfdHhfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogCWlmIChiaW5kX2RldiAhPSBuZXRkZXYpCiAJCW5ldGRldl91bmxvY2soYmluZF9kZXYpOwogCW5ldGRldl91bmxvY2sobmV0ZGV2KTsKLQltdXRleF91bmxvY2soJmFtcDtwcml2LSZndDtsb2NrKTsKIAogCXJldHVybiBnZW5sbXNnX3JlcGx5KHJzcCwgaW5mbyk7CiAKQEAgLTEyNDIsOCAmIzQzOzEyMzMsNiBAQCBpbnQgbmV0ZGV2X25sX2JpbmRfdHhfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogCQluZXRkZXZfdW5sb2NrKGJpbmRfZGV2KTsKIGVycl91bmxvY2tfbmV0ZGV2OgogCW5ldGRldl91bmxvY2sobmV0ZGV2KTsKLWVycl91bmxvY2tfc29jazoKLQltdXRleF91bmxvY2soJmFtcDtwcml2LSZndDtsb2NrKTsKIGVycl9nZW5sbXNnX2ZyZWU6CiAJbmxtc2dfZnJlZShyc3ApOwogCXJldHVybiBlcnI7CkBAIC0xNDE4LDE5ICYjNDM7MTQwNywxNyBAQCBpbnQgbmV0ZGV2X25sX3F1ZXVlX2NyZWF0ZV9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiAKIHZvaWQgbmV0ZGV2X25sX3NvY2tfcHJpdl9pbml0KHN0cnVjdCBuZXRkZXZfbmxfc29jayAqcHJpdikKIHsKLQlJTklUX0xJU1RfSEVBRCgmYW1wO3ByaXYtJmd0O2JpbmRpbmdzKTsKLQltdXRleF9pbml0KCZhbXA7cHJpdi0mZ3Q7bG9jayk7CiYjNDM7CXhhX2luaXQoJmFtcDtwcml2LSZndDtiaW5kaW5ncyk7CiB9CiAKIHZvaWQgbmV0ZGV2X25sX3NvY2tfcHJpdl9kZXN0cm95KHN0cnVjdCBuZXRkZXZfbmxfc29jayAqcHJpdikKIHsKIAlzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqYmluZGluZzsKLQlzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqdGVtcDsKIAluZXRkZXZpY2VfdHJhY2tlciBkZXZfdHJhY2tlcjsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwomIzQzOwl1bnNpZ25lZCBsb25nIHhhX2lkeDsKIAotCW11dGV4X2xvY2soJmFtcDtwcml2LSZndDtsb2NrKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoYmluZGluZywgdGVtcCwgJmFtcDtwcml2LSZndDtiaW5kaW5ncywgbGlzdCkgewomIzQzOwl4YV9mb3JfZWFjaCgmYW1wO3ByaXYtJmd0O2JpbmRpbmdzLCB4YV9pZHgsIGJpbmRpbmcpIHsKIAkJbXV0ZXhfbG9jaygmYW1wO2JpbmRpbmctJmd0O2xvY2spOwogCQlkZXYgPSBiaW5kaW5nLSZndDtkZXY7CiAJCWlmICghZGV2KSB7CkBAIC0xNDQ2LDcgJiM0MzsxNDMzLDcgQEAgdm9pZCBuZXRkZXZfbmxfc29ja19wcml2X2Rlc3Ryb3koc3RydWN0IG5ldGRldl9ubF9zb2NrICpwcml2KQogCQluZXRkZXZfdW5sb2NrKGRldik7CiAJCW5ldGRldl9wdXQoZGV2LCAmYW1wO2Rldl90cmFja2VyKTsKIAl9Ci0JbXV0ZXhfdW5sb2NrKCZhbXA7cHJpdi0mZ3Q7bG9jayk7CiYjNDM7CXhhX2Rlc3Ryb3koJmFtcDtwcml2LSZndDtiaW5kaW5ncyk7CiB9CiAKIHN0YXRpYyBpbnQgbmV0ZGV2X2dlbmxfbmV0ZGV2aWNlX2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNToxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDkzCgkJCQkJCQlvdXRwdXQ6IDE0MQoJCQkJCQkJdGhvdWdodHM6IDM1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBOZXRkZXYgTkwgU29ja2V0IFJlZmFjdG9yaW5nKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSBpbXByZXNzaW9uIGlzIHRoYXQgaXQmIzM5O3MgYSByZWxhdGl2ZWx5IGZvY3VzZWQgcmVmYWN0b3JpbmcsIHByaW1hcmlseSBjZW50ZXJlZCBhcm91bmQgYSBjaGFuZ2UgaW4gaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmVzLiBUaGUgY29yZSBvZiB0aGUgbW9kaWZpY2F0aW9uIGlzIHNoaWZ0aW5nIGZyb20gdGhlIGV4aXN0aW5nIGBsaXN0X2hlYWRgIGFuZCBtdXRleCBhcHByb2FjaCBmb3IgbWFuYWdpbmcgbmV0d29yayBkZXZpY2UgYmluZGluZ3Mgd2l0aGluIGBzdHJ1Y3QgbmV0ZGV2X25sX3NvY2tgIHRvIGFuIGB4YXJyYXlgLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoaXMgaXMgYSBnb29kIG1vdmUuIFhhcnJheXMgYXJlIG9mdGVuIGEgbW9yZSBlZmZpY2llbnQgYW5kIHNjYWxhYmxlIHdheSB0byBtYW5hZ2UgaW5kZXhlZCBkYXRhIHRoYW4gbGlua2VkIGxpc3RzLCBlc3BlY2lhbGx5IGluIGEga2VybmVsIGNvbnRleHQgd2hlcmUgcGVyZm9ybWFuY2UgYW5kIGNvbmN1cnJlbmN5IGFyZSBjcml0aWNhbC4gVGhlIHBhdGNoIHRvdWNoZXMgdGhlIHN0YW5kYXJkIGZ1bmN0aW9ucyBhc3NvY2lhdGVkIHdpdGggYmluZGluZyBhbmQgdW5iaW5kaW5nIERNQSBidWZmZXJzIGFuZCB0aGUgTmV0bGluayBzb2NrZXQmIzM5O3MgbGlmZWN5Y2xlIOKAkyBgbmV0X2Rldm1lbV91bmJpbmRfZG1hYnVmYCwgYG5ldF9kZXZtZW1fYmluZF9kbWFidWZgLCBgbmV0ZGV2X25sX2JpbmRfcnhfZG9pdGAsIGBuZXRkZXZfbmxfYmluZF90eF9kb2l0YCwgYG5ldGRldl9ubF9zb2NrX3ByaXZfaW5pdGAsIGFuZCBgbmV0ZGV2X25sX3NvY2tfcHJpdl9kZXN0cm95YC4gVGhhdCYjMzk7cyB0byBiZSBleHBlY3RlZCwgdGhleSB3b3VsZCBuZWVkIHRvIGJlIHVwZGF0ZWQgdG8gdXNlIHRoZSBuZXcgZGF0YSBzdHJ1Y3R1cmUuCgpUaGUgZGlmZiBpdHNlbGYgc2VlbXMgc3RyYWlnaHRmb3J3YXJkIOKAkyBiYXNpY2FsbHksIGxpc3QgbWFuaXB1bGF0aW9ucyBnZXQgcmVwbGFjZWQgd2l0aCBjb3JyZXNwb25kaW5nIHhhcnJheSBvcGVyYXRpb25zLCBhbmQgdGhlIG11dGV4IGlzIGdvbmUuIENydWNpYWxseSwgdGhlcmUmIzM5O3Mgbm8gYWRkaXRpb24gb2YgbmV3IGRhdGEgc3RydWN0dXJlcyB0aGF0IHdvdWxkIGJlIGV4cG9zZWQgdG8gdXNlcnNwYWNlLCBhbmQgbm8gbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyB0aGF0IGNvdWxkIGxlYWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIEZ1cnRoZXJtb3JlLCBJIHNlZSBubyBjaGFuZ2VzIHJlbGF0ZWQgdG8gYm91bmRzIGNoZWNraW5nIG9yIHRoZSBsZW5ndGhzIG9mIGFueXRoaW5nLiBUaGlzIGlzIGltcG9ydGFudDogYSBjbGVhbiByZWZhY3RvciBsaWtlIHRoaXMgaXMgbGVzcyBsaWtlbHkgdG8gaW50cm9kdWNlIHN1YnRsZSBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMuCgpNeSBjb25jZXJuIG5hdHVyYWxseSBzaGlmdHMgdG8gd2hhdCAqY291bGQqIGdvIHdyb25nIHdpdGggc3VjaCBhIGNoYW5nZS4gQW55IGludHJvZHVjZWQgYnVncyB3aWxsIGxpa2VseSBtYW5pZmVzdCBhcyB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zLCBkb3VibGUgZnJlZXMsIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIG9yIHJhY2UgY29uZGl0aW9ucyBzdGVtbWluZyBmcm9tIHRoZSByZW1vdmFsIG9mIHRoZSBtdXRleC4gSG93ZXZlciwgdGhhdOKAmXMgd2hlcmUgdGhlIGtlcm5lbCYjMzk7cyBtZW1vcnkgc2FmZXR5IGFuZCBjb25jdXJyZW5jeSB0b29scyBjb21lIGludG8gcGxheTogS0FTQU4gYW5kIExPQ0tERVAgc2hvdWxkIGNhdGNoIHRob3NlIGlzc3Vlcy4gSSYjMzk7bSByZWFzb25hYmx5IGNvbmZpZGVudCBpbiB0aGlzIGNhc2UuCgpJIGhhdmUganVzdCBydW4gb3ZlciB0aGUgY29kZSBsb29raW5nIGZvciBhbnkgYXJlYXMgd2hlcmUgbWVtb3J5IG1pZ2h0IGJlIHVuaW5pdGlhbGl6ZWQuIFNwZWNpZmljYWxseSwgbXkgcXVpY2sgcmV2aWV3IGluY2x1ZGVkIGB4YV9zdG9yZWAgYW5kIGB4YV9lcmFzZWAsIGhvd2V2ZXIsIHRob3NlIGFyZSBpbnRlcm5hbCB4YXJyYXkgZnVuY3Rpb25zLCB3aGljaCBtaW5pbWl6ZXMgdGhlIHByb2JhYmlsaXR5IG9mIGEgbGVhay4gVGhlIHNvY2tldCBpdHNlbGYgaXMgYWxsb2NhdGVkIGVsc2V3aGVyZTsgdGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdGhlIGluaXRpYWxpemF0aW9uIHByb2Nlc3Mgb2YgdGhlIGBuZXRkZXZfbmxfc29ja2Agc3RydWN0IC0gYHhhX2luaXRgIHJlcGxhY2VzIGBJTklUX0xJU1RfSEVBRGAgYW5kIGBtdXRleF9pbml0YC4gVGhlIHNhbWUgYXBwbGllcyB0byB0aGUgYGJpbmRpbmdgIHN0cnVjdDogYHNvY2tfcHJpdmAgcmVwbGFjZXMgYGxpc3RgLiBObyB3b3JyaWVzIHRoZXJlLCBlaXRoZXIuCgpCYXNlZCBvbiB0aGlzIGFzc2Vzc21lbnQsIEkmIzM5O2xsIGZsYWcgdGhpcyBhcyBgTmVlZHNLTVNBTj1mYWxzZWAuIEl0IGxvb2tzIGxpa2UgYSBzYWZlIGFuZCBzZW5zaWJsZSByZWZhY3RvcmluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTU6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVwbGFjZXMgYSBsaW5rZWQgbGlzdCBhbmQgYSBtdXRleCB3aXRoIGFuIHhhcnJheSBmb3IgbWFuYWdpbmcgZG1hYnVmIGJpbmRpbmdzIGluIGBzdHJ1Y3QgbmV0ZGV2X25sX3NvY2tgLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgYWxsb2NhdGUgbmV3IGJ1ZmZlcnMgdGhhdCBjb3VsZCBiZSBsZWZ0IHVuaW5pdGlhbGl6ZWQuIEFueSBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyAoc3VjaCBhcyByYWNlIGNvbmRpdGlvbnMgZnJvbSB0aGUgcmVtb3ZlZCBtdXRleCwgdXNlLWFmdGVyLWZyZWUsIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMpIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlcGxhY2VzIGEgbGlua2VkIGxpc3QgYW5kIGEgbXV0ZXggd2l0aCBhbiB4YXJyYXkgZm9yIG1hbmFnaW5nIGRtYWJ1ZiBiaW5kaW5ncyBpbiBgc3RydWN0IG5ldGRldl9ubF9zb2NrYC4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGFsbG9jYXRlIG5ldyBidWZmZXJzIHRoYXQgY291bGQgYmUgbGVmdCB1bmluaXRpYWxpemVkLiBBbnkgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgcmFjZSBjb25kaXRpb25zIGZyb20gdGhlIHJlbW92ZWQgbXV0ZXgsIHVzZS1hZnRlci1mcmVlLCBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzKSB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE1OjEwOjEzLjE4MzQ0NDE4NVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NDAxNTY2MTM1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfREVWTUVNXCIsXG4gICAgXCJETUFfU0hBUkVEX0JVRkZFUlwiLFxuICAgIFwiUEFHRV9QT09MXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmV0ZGV2X25sX2JpbmRfcnhfZG9pdFwiLFxuICAgIFwibmV0ZGV2X25sX2JpbmRfdHhfZG9pdFwiLFxuICAgIFwibmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZlwiLFxuICAgIFwibmV0X2Rldm1lbV91bmJpbmRfZG1hYnVmXCIsXG4gICAgXCJuZXRkZXZfbmxfc29ja19wcml2X2luaXRcIixcbiAgICBcIm5ldGRldl9ubF9zb2NrX3ByaXZfZGVzdHJveVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVwbGFjZXMgYSBsaW5rZWQgbGlzdCBhbmQgYSBtdXRleCB3aXRoIGFuIHhhcnJheSBmb3IgbWFuYWdpbmcgZG1hYnVmIGJpbmRpbmdzIGluIGBzdHJ1Y3QgbmV0ZGV2X25sX3NvY2tgLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgYWxsb2NhdGUgbmV3IGJ1ZmZlcnMgdGhhdCBjb3VsZCBiZSBsZWZ0IHVuaW5pdGlhbGl6ZWQuIEFueSBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyAoc3VjaCBhcyByYWNlIGNvbmRpdGlvbnMgZnJvbSB0aGUgcmVtb3ZlZCBtdXRleCwgdXNlLWFmdGVyLWZyZWUsIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMpIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbmV0ZGV2IG5ldGxpbmsgc29ja2V0IGJpbmRpbmdzIGhhbmRsaW5nLCBjaGFuZ2luZyB0aGUgYGJpbmRpbmdzYCBsaXN0IHRvIGFuIGB4YXJyYXlgIGFuZCByZW1vdmluZyB0aGUgYGxvY2tgIG11dGV4IGZyb20gYHN0cnVjdCBuZXRkZXZfbmxfc29ja2AuIFRoaXMgYWZmZWN0cyB0aGUgYG5ldGRldl9ubF9iaW5kX3J4X2RvaXRgLCBgbmV0ZGV2X25sX2JpbmRfdHhfZG9pdGAsIGBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmYCwgYW5kIGBuZXRfZGV2bWVtX3VuYmluZF9kbWFidWZgIGZ1bmN0aW9ucywgd2hpY2ggYXJlIHJlYWNoYWJsZSB2aWEgbmV0bGluayBjb21tYW5kcy4gVGhlIGNoYW5nZXMgYXJlIGZ1bmN0aW9uYWwgYW5kIGludm9sdmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHN5bmNocm9uaXphdGlvbiwgbWFraW5nIHRoZW0gd29ydGggZnV6emluZy4gVGhlIGBORVRfREVWTUVNYCBmZWF0dXJlIGFuZCBpdHMgZGVwZW5kZW5jaWVzIChgRE1BX1NIQVJFRF9CVUZGRVJgIGFuZCBgUEFHRV9QT09MYCkgbXVzdCBiZSBlbmFibGVkIHRvIHRlc3QgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE1OjEwOjEzLjE4MzQ1MDUyNVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzgzNDA1MzUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgN2U1YmM1ZjY3NDMyMTZiYjI0ZjM4MWM1YmRhOTYxNGEwNzRhYTA4NlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEF1ZyAxMSAxNToxMDoxMiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRkZXZfbmV0bGluay5oIGIvaW5jbHVkZS9uZXQvbmV0ZGV2X25ldGxpbmsuaFxcbmluZGV4IDA3NTk2MmRiZTc0M2IuLjQ1YTRhNDgyZDQyZTQgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9uZXQvbmV0ZGV2X25ldGxpbmsuaFxcbisrKyBiL2luY2x1ZGUvbmV0L25ldGRldl9uZXRsaW5rLmhcXG5AQCAtMiwxMSArMiwxMCBAQFxcbiAjaWZuZGVmIF9fTkVUX05FVERFVl9ORVRMSU5LX0hcXG4gI2RlZmluZSBfX05FVF9ORVRERVZfTkVUTElOS19IXFxuIFxcbi0jaW5jbHVkZSBcXHUwMDNjbGludXgvbGlzdC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgveGFycmF5LmhcXHUwMDNlXFxuIFxcbiBzdHJ1Y3QgbmV0ZGV2X25sX3NvY2sge1xcbi1cXHRzdHJ1Y3QgbXV0ZXggbG9jaztcXG4tXFx0c3RydWN0IGxpc3RfaGVhZCBiaW5kaW5ncztcXG4rXFx0c3RydWN0IHhhcnJheSBiaW5kaW5ncztcXG4gfTtcXG4gXFxuICNlbmRpZlxcdC8qIF9fTkVUX05FVERFVl9ORVRMSU5LX0ggKi9cXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2bWVtLmMgYi9uZXQvY29yZS9kZXZtZW0uY1xcbmluZGV4IDk1N2Q2Yjk2MjE2YjMuLmJkZjhhMDc5OWE0MjcgMTAwNjQ0XFxuLS0tIGEvbmV0L2NvcmUvZGV2bWVtLmNcXG4rKysgYi9uZXQvY29yZS9kZXZtZW0uY1xcbkBAIC0xMzQsOCArMTM0LDggQEAgdm9pZCBuZXRfZGV2bWVtX3VuYmluZF9kbWFidWYoc3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKmJpbmRpbmcpXFxuIFxcdCAqL1xcbiBcXHRzeW5jaHJvbml6ZV9uZXQoKTtcXG4gXFxuLVxcdGlmIChiaW5kaW5nLVxcdTAwM2VsaXN0Lm5leHQpXFxuLVxcdFxcdGxpc3RfZGVsKFxcdTAwMjZiaW5kaW5nLVxcdTAwM2VsaXN0KTtcXG4rXFx0aWYgKGJpbmRpbmctXFx1MDAzZXNvY2tfcHJpdilcXG4rXFx0XFx0eGFfZXJhc2UoXFx1MDAyNmJpbmRpbmctXFx1MDAzZXNvY2tfcHJpdi1cXHUwMDNlYmluZGluZ3MsIGJpbmRpbmctXFx1MDAzZWlkKTtcXG4gXFxuIFxcdHhhX2Zvcl9lYWNoKFxcdTAwMjZiaW5kaW5nLVxcdTAwM2Vib3VuZF9yeHFzLCB4YV9pZHgsIHJ4cSkge1xcbiBcXHRcXHRjb25zdCBzdHJ1Y3QgcHBfbWVtb3J5X3Byb3ZpZGVyX3BhcmFtcyBtcF9wYXJhbXMgPSB7XFxuQEAgLTE5Myw2ICsxOTMsNyBAQCBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKnZkZXYsXFxuIFxcdHN0cnVjdCBkbWFfYnVmICpkbWFidWY7XFxuIFxcdHVuc2lnbmVkIGludCBzZ19pZHgsIGk7XFxuIFxcdHVuc2lnbmVkIGxvbmcgdmlydHVhbDtcXG4rXFx0dm9pZCAqcmVzO1xcbiBcXHRpbnQgZXJyO1xcbiBcXG4gXFx0aWYgKCFkbWFfZGV2KSB7XFxuQEAgLTMyNSwxMCArMzI2LDE3IEBAIG5ldF9kZXZtZW1fYmluZF9kbWFidWYoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqdmRldixcXG4gXFx0aWYgKGVyciBcXHUwMDNjIDApXFxuIFxcdFxcdGdvdG8gZXJyX2ZyZWVfY2h1bmtzO1xcbiBcXG4tXFx0bGlzdF9hZGQoXFx1MDAyNmJpbmRpbmctXFx1MDAzZWxpc3QsIFxcdTAwMjZwcml2LVxcdTAwM2ViaW5kaW5ncyk7XFxuK1xcdGJpbmRpbmctXFx1MDAzZXNvY2tfcHJpdiA9IHByaXY7XFxuK1xcdHJlcyA9IHhhX3N0b3JlKFxcdTAwMjZwcml2LVxcdTAwM2ViaW5kaW5ncywgYmluZGluZy1cXHUwMDNlaWQsIGJpbmRpbmcsIEdGUF9LRVJORUwpO1xcbitcXHRpZiAoeGFfaXNfZXJyKHJlcykpIHtcXG4rXFx0XFx0ZXJyID0geGFfZXJyKHJlcyk7XFxuK1xcdFxcdGdvdG8gZXJyX2VyYXNlX2RtYWJ1Zl9iaW5kaW5ncztcXG4rXFx0fVxcbiBcXG4gXFx0cmV0dXJuIGJpbmRpbmc7XFxuIFxcbitlcnJfZXJhc2VfZG1hYnVmX2JpbmRpbmdzOlxcbitcXHR4YV9lcmFzZShcXHUwMDI2bmV0X2Rldm1lbV9kbWFidWZfYmluZGluZ3MsIGJpbmRpbmctXFx1MDAzZWlkKTtcXG4gZXJyX2ZyZWVfY2h1bmtzOlxcbiBcXHRnZW5fcG9vbF9mb3JfZWFjaF9jaHVuayhiaW5kaW5nLVxcdTAwM2VjaHVua19wb29sLFxcbiBcXHRcXHRcXHRcXHRuZXRfZGV2bWVtX2RtYWJ1Zl9mcmVlX2NodW5rX293bmVyLCBOVUxMKTtcXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2bWVtLmggYi9uZXQvY29yZS9kZXZtZW0uaFxcbmluZGV4IDM4NTJhNTYwMzZjYjQuLmJmNzdlNWE5YThmZTcgMTAwNjQ0XFxuLS0tIGEvbmV0L2NvcmUvZGV2bWVtLmhcXG4rKysgYi9uZXQvY29yZS9kZXZtZW0uaFxcbkBAIC00OSwxMCArNDksMTAgQEAgc3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcge1xcbiBcXHQgKi9cXG4gXFx0c3RydWN0IHBlcmNwdV9yZWYgcmVmO1xcbiBcXG4tXFx0LyogVGhlIGxpc3Qgb2YgYmluZGluZ3MgY3VycmVudGx5IGFjdGl2ZS4gVXNlZCBmb3IgbmV0bGluayB0byBub3RpZnkgdXNcXG4rXFx0LyogVGhlIHNvY2tldCBwcml2IHRoaXMgYmluZGluZyBiZWxvbmdzIHRvLiBVc2VkIGZvciBuZXRsaW5rIHRvIG5vdGlmeSB1c1xcbiBcXHQgKiBvZiB0aGUgdXNlciBkcm9wcGluZyB0aGUgYmluZC5cXG4gXFx0ICovXFxuLVxcdHN0cnVjdCBsaXN0X2hlYWQgbGlzdDtcXG4rXFx0c3RydWN0IG5ldGRldl9ubF9zb2NrICpzb2NrX3ByaXY7XFxuIFxcbiBcXHQvKiByeHEncyB0aGlzIGJpbmRpbmcgaXMgYWN0aXZlIG9uLiAqL1xcbiBcXHRzdHJ1Y3QgeGFycmF5IGJvdW5kX3J4cXM7XFxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL25ldGRldi1nZW5sLmMgYi9uZXQvY29yZS9uZXRkZXYtZ2VubC5jXFxuaW5kZXggYzE1ZDhkNGNhMWY4Zi4uZDNmM2E5MWE2ZDkzMiAxMDA2NDRcXG4tLS0gYS9uZXQvY29yZS9uZXRkZXYtZ2VubC5jXFxuKysrIGIvbmV0L2NvcmUvbmV0ZGV2LWdlbmwuY1xcbkBAIC0xMDQ0LDEzICsxMDQ0LDExIEBAIGludCBuZXRkZXZfbmxfYmluZF9yeF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuIFxcdFxcdGdvdG8gZXJyX2dlbmxtc2dfZnJlZTtcXG4gXFx0fVxcbiBcXG4tXFx0bXV0ZXhfbG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlbG9jayk7XFxuLVxcbiBcXHRlcnIgPSAwO1xcbiBcXHRuZXRkZXYgPSBuZXRkZXZfZ2V0X2J5X2luZGV4X2xvY2soZ2VubF9pbmZvX25ldChpbmZvKSwgaWZpbmRleCk7XFxuIFxcdGlmICghbmV0ZGV2KSB7XFxuIFxcdFxcdGVyciA9IC1FTk9ERVY7XFxuLVxcdFxcdGdvdG8gZXJyX3VubG9ja19zb2NrO1xcbitcXHRcXHRnb3RvIGVycl9nZW5sbXNnX2ZyZWU7XFxuIFxcdH1cXG4gXFx0aWYgKCFuZXRpZl9kZXZpY2VfcHJlc2VudChuZXRkZXYpKVxcbiBcXHRcXHRlcnIgPSAtRU5PREVWO1xcbkBAIC0xMTAyLDggKzExMDAsNiBAQCBpbnQgbmV0ZGV2X25sX2JpbmRfcnhfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbiBcXG4gXFx0bmV0ZGV2X3VubG9jayhuZXRkZXYpO1xcbiBcXG4tXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2Vsb2NrKTtcXG4tXFxuIFxcdHJldHVybiBlcnIgXFx1MDAzYyAwID8gZXJyIDogMDtcXG4gXFxuIGVycl91bmJpbmQ6XFxuQEAgLTExMTIsOCArMTEwOCw2IEBAIGludCBuZXRkZXZfbmxfYmluZF9yeF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuIFxcdGJpdG1hcF9mcmVlKHJ4cV9iaXRtYXApO1xcbiBlcnJfdW5sb2NrOlxcbiBcXHRuZXRkZXZfdW5sb2NrKG5ldGRldik7XFxuLWVycl91bmxvY2tfc29jazpcXG4tXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2Vsb2NrKTtcXG4gZXJyX2dlbmxtc2dfZnJlZTpcXG4gXFx0bmxtc2dfZnJlZShyc3ApO1xcbiBcXHRyZXR1cm4gZXJyO1xcbkBAIC0xMTg1LDEyICsxMTc5LDEwIEBAIGludCBuZXRkZXZfbmxfYmluZF90eF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuIFxcdFxcdGdvdG8gZXJyX2dlbmxtc2dfZnJlZTtcXG4gXFx0fVxcbiBcXG4tXFx0bXV0ZXhfbG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlbG9jayk7XFxuLVxcbiBcXHRuZXRkZXYgPSBuZXRkZXZfZ2V0X2J5X2luZGV4X2xvY2soZ2VubF9pbmZvX25ldChpbmZvKSwgaWZpbmRleCk7XFxuIFxcdGlmICghbmV0ZGV2KSB7XFxuIFxcdFxcdGVyciA9IC1FTk9ERVY7XFxuLVxcdFxcdGdvdG8gZXJyX3VubG9ja19zb2NrO1xcbitcXHRcXHRnb3RvIGVycl9nZW5sbXNnX2ZyZWU7XFxuIFxcdH1cXG4gXFxuIFxcdGlmICghbmV0aWZfZGV2aWNlX3ByZXNlbnQobmV0ZGV2KSkge1xcbkBAIC0xMjMzLDcgKzEyMjUsNiBAQCBpbnQgbmV0ZGV2X25sX2JpbmRfdHhfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbiBcXHRpZiAoYmluZF9kZXYgIT0gbmV0ZGV2KVxcbiBcXHRcXHRuZXRkZXZfdW5sb2NrKGJpbmRfZGV2KTtcXG4gXFx0bmV0ZGV2X3VubG9jayhuZXRkZXYpO1xcbi1cXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZWxvY2spO1xcbiBcXG4gXFx0cmV0dXJuIGdlbmxtc2dfcmVwbHkocnNwLCBpbmZvKTtcXG4gXFxuQEAgLTEyNDIsOCArMTIzMyw2IEBAIGludCBuZXRkZXZfbmxfYmluZF90eF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuIFxcdFxcdG5ldGRldl91bmxvY2soYmluZF9kZXYpO1xcbiBlcnJfdW5sb2NrX25ldGRldjpcXG4gXFx0bmV0ZGV2X3VubG9jayhuZXRkZXYpO1xcbi1lcnJfdW5sb2NrX3NvY2s6XFxuLVxcdG11dGV4X3VubG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlbG9jayk7XFxuIGVycl9nZW5sbXNnX2ZyZWU6XFxuIFxcdG5sbXNnX2ZyZWUocnNwKTtcXG4gXFx0cmV0dXJuIGVycjtcXG5AQCAtMTQxOCwxOSArMTQwNywxNyBAQCBpbnQgbmV0ZGV2X25sX3F1ZXVlX2NyZWF0ZV9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuIFxcbiB2b2lkIG5ldGRldl9ubF9zb2NrX3ByaXZfaW5pdChzdHJ1Y3QgbmV0ZGV2X25sX3NvY2sgKnByaXYpXFxuIHtcXG4tXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNnByaXYtXFx1MDAzZWJpbmRpbmdzKTtcXG4tXFx0bXV0ZXhfaW5pdChcXHUwMDI2cHJpdi1cXHUwMDNlbG9jayk7XFxuK1xcdHhhX2luaXQoXFx1MDAyNnByaXYtXFx1MDAzZWJpbmRpbmdzKTtcXG4gfVxcbiBcXG4gdm9pZCBuZXRkZXZfbmxfc29ja19wcml2X2Rlc3Ryb3koc3RydWN0IG5ldGRldl9ubF9zb2NrICpwcml2KVxcbiB7XFxuIFxcdHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpiaW5kaW5nO1xcbi1cXHRzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqdGVtcDtcXG4gXFx0bmV0ZGV2aWNlX3RyYWNrZXIgZGV2X3RyYWNrZXI7XFxuIFxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XFxuK1xcdHVuc2lnbmVkIGxvbmcgeGFfaWR4O1xcbiBcXG4tXFx0bXV0ZXhfbG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlbG9jayk7XFxuLVxcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShiaW5kaW5nLCB0ZW1wLCBcXHUwMDI2cHJpdi1cXHUwMDNlYmluZGluZ3MsIGxpc3QpIHtcXG4rXFx0eGFfZm9yX2VhY2goXFx1MDAyNnByaXYtXFx1MDAzZWJpbmRpbmdzLCB4YV9pZHgsIGJpbmRpbmcpIHtcXG4gXFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2YmluZGluZy1cXHUwMDNlbG9jayk7XFxuIFxcdFxcdGRldiA9IGJpbmRpbmctXFx1MDAzZWRldjtcXG4gXFx0XFx0aWYgKCFkZXYpIHtcXG5AQCAtMTQ0Niw3ICsxNDMzLDcgQEAgdm9pZCBuZXRkZXZfbmxfc29ja19wcml2X2Rlc3Ryb3koc3RydWN0IG5ldGRldl9ubF9zb2NrICpwcml2KVxcbiBcXHRcXHRuZXRkZXZfdW5sb2NrKGRldik7XFxuIFxcdFxcdG5ldGRldl9wdXQoZGV2LCBcXHUwMDI2ZGV2X3RyYWNrZXIpO1xcbiBcXHR9XFxuLVxcdG11dGV4X3VubG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlbG9jayk7XFxuK1xcdHhhX2Rlc3Ryb3koXFx1MDAyNnByaXYtXFx1MDAzZWJpbmRpbmdzKTtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBuZXRkZXZfZ2VubF9uZXRkZXZpY2VfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTU6MTA6MTMuNTY3NzY1NjM2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTM1MDUyOTYyNDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9ERVZNRU1cIixcbiAgICBcIkRNQV9TSEFSRURfQlVGRkVSXCIsXG4gICAgXCJQQUdFX1BPT0xcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZXRkZXZfbmxfYmluZF9yeF9kb2l0XCIsXG4gICAgXCJuZXRkZXZfbmxfYmluZF90eF9kb2l0XCIsXG4gICAgXCJuZXRfZGV2bWVtX2JpbmRfZG1hYnVmXCIsXG4gICAgXCJuZXRfZGV2bWVtX3VuYmluZF9kbWFidWZcIixcbiAgICBcIm5ldGRldl9ubF9zb2NrX3ByaXZfaW5pdFwiLFxuICAgIFwibmV0ZGV2X25sX3NvY2tfcHJpdl9kZXN0cm95XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG5ldGRldiBuZXRsaW5rIHNvY2tldCBiaW5kaW5ncyBoYW5kbGluZywgY2hhbmdpbmcgdGhlIGBiaW5kaW5nc2AgbGlzdCB0byBhbiBgeGFycmF5YCBhbmQgcmVtb3ZpbmcgdGhlIGBsb2NrYCBtdXRleCBmcm9tIGBzdHJ1Y3QgbmV0ZGV2X25sX3NvY2tgLiBUaGlzIGFmZmVjdHMgdGhlIGBuZXRkZXZfbmxfYmluZF9yeF9kb2l0YCwgYG5ldGRldl9ubF9iaW5kX3R4X2RvaXRgLCBgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZmAsIGFuZCBgbmV0X2Rldm1lbV91bmJpbmRfZG1hYnVmYCBmdW5jdGlvbnMsIHdoaWNoIGFyZSByZWFjaGFibGUgdmlhIG5ldGxpbmsgY29tbWFuZHMuIFRoZSBjaGFuZ2VzIGFyZSBmdW5jdGlvbmFsIGFuZCBpbnZvbHZlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBzeW5jaHJvbml6YXRpb24sIG1ha2luZyB0aGVtIHdvcnRoIGZ1enppbmcuIFRoZSBgTkVUX0RFVk1FTWAgZmVhdHVyZSBhbmQgaXRzIGRlcGVuZGVuY2llcyAoYERNQV9TSEFSRURfQlVGRkVSYCBhbmQgYFBBR0VfUE9PTGApIG11c3QgYmUgZW5hYmxlZCB0byB0ZXN0IHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3ZTViYzVmNjc0MzIxNmJiMjRmMzgxYzViZGE5NjE0YTA3NGFhMDg2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMTEgMTU6MTA6MTIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRkZXZfbmV0bGluay5oIGIvaW5jbHVkZS9uZXQvbmV0ZGV2X25ldGxpbmsuaFxuaW5kZXggMDc1OTYyZGJlNzQzYi4uNDVhNGE0ODJkNDJlNCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L25ldGRldl9uZXRsaW5rLmhcbisrKyBiL2luY2x1ZGUvbmV0L25ldGRldl9uZXRsaW5rLmhcbkBAIC0yLDExICsyLDEwIEBAXG4gI2lmbmRlZiBfX05FVF9ORVRERVZfTkVUTElOS19IXG4gI2RlZmluZSBfX05FVF9ORVRERVZfTkVUTElOS19IXG4gXG4tI2luY2x1ZGUgXHUwMDNjbGludXgvbGlzdC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgveGFycmF5LmhcdTAwM2VcbiBcbiBzdHJ1Y3QgbmV0ZGV2X25sX3NvY2sge1xuLVx0c3RydWN0IG11dGV4IGxvY2s7XG4tXHRzdHJ1Y3QgbGlzdF9oZWFkIGJpbmRpbmdzO1xuK1x0c3RydWN0IHhhcnJheSBiaW5kaW5ncztcbiB9O1xuIFxuICNlbmRpZlx0LyogX19ORVRfTkVUREVWX05FVExJTktfSCAqL1xuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Rldm1lbS5jIGIvbmV0L2NvcmUvZGV2bWVtLmNcbmluZGV4IDk1N2Q2Yjk2MjE2YjMuLmJkZjhhMDc5OWE0MjcgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9kZXZtZW0uY1xuKysrIGIvbmV0L2NvcmUvZGV2bWVtLmNcbkBAIC0xMzQsOCArMTM0LDggQEAgdm9pZCBuZXRfZGV2bWVtX3VuYmluZF9kbWFidWYoc3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKmJpbmRpbmcpXG4gXHQgKi9cbiBcdHN5bmNocm9uaXplX25ldCgpO1xuIFxuLVx0aWYgKGJpbmRpbmctXHUwMDNlbGlzdC5uZXh0KVxuLVx0XHRsaXN0X2RlbChcdTAwMjZiaW5kaW5nLVx1MDAzZWxpc3QpO1xuK1x0aWYgKGJpbmRpbmctXHUwMDNlc29ja19wcml2KVxuK1x0XHR4YV9lcmFzZShcdTAwMjZiaW5kaW5nLVx1MDAzZXNvY2tfcHJpdi1cdTAwM2ViaW5kaW5ncywgYmluZGluZy1cdTAwM2VpZCk7XG4gXG4gXHR4YV9mb3JfZWFjaChcdTAwMjZiaW5kaW5nLVx1MDAzZWJvdW5kX3J4cXMsIHhhX2lkeCwgcnhxKSB7XG4gXHRcdGNvbnN0IHN0cnVjdCBwcF9tZW1vcnlfcHJvdmlkZXJfcGFyYW1zIG1wX3BhcmFtcyA9IHtcbkBAIC0xOTMsNiArMTkzLDcgQEAgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICp2ZGV2LFxuIFx0c3RydWN0IGRtYV9idWYgKmRtYWJ1ZjtcbiBcdHVuc2lnbmVkIGludCBzZ19pZHgsIGk7XG4gXHR1bnNpZ25lZCBsb25nIHZpcnR1YWw7XG4rXHR2b2lkICpyZXM7XG4gXHRpbnQgZXJyO1xuIFxuIFx0aWYgKCFkbWFfZGV2KSB7XG5AQCAtMzI1LDEwICszMjYsMTcgQEAgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICp2ZGV2LFxuIFx0aWYgKGVyciBcdTAwM2MgMClcbiBcdFx0Z290byBlcnJfZnJlZV9jaHVua3M7XG4gXG4tXHRsaXN0X2FkZChcdTAwMjZiaW5kaW5nLVx1MDAzZWxpc3QsIFx1MDAyNnByaXYtXHUwMDNlYmluZGluZ3MpO1xuK1x0YmluZGluZy1cdTAwM2Vzb2NrX3ByaXYgPSBwcml2O1xuK1x0cmVzID0geGFfc3RvcmUoXHUwMDI2cHJpdi1cdTAwM2ViaW5kaW5ncywgYmluZGluZy1cdTAwM2VpZCwgYmluZGluZywgR0ZQX0tFUk5FTCk7XG4rXHRpZiAoeGFfaXNfZXJyKHJlcykpIHtcbitcdFx0ZXJyID0geGFfZXJyKHJlcyk7XG4rXHRcdGdvdG8gZXJyX2VyYXNlX2RtYWJ1Zl9iaW5kaW5ncztcbitcdH1cbiBcbiBcdHJldHVybiBiaW5kaW5nO1xuIFxuK2Vycl9lcmFzZV9kbWFidWZfYmluZGluZ3M6XG4rXHR4YV9lcmFzZShcdTAwMjZuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5ncywgYmluZGluZy1cdTAwM2VpZCk7XG4gZXJyX2ZyZWVfY2h1bmtzOlxuIFx0Z2VuX3Bvb2xfZm9yX2VhY2hfY2h1bmsoYmluZGluZy1cdTAwM2VjaHVua19wb29sLFxuIFx0XHRcdFx0bmV0X2Rldm1lbV9kbWFidWZfZnJlZV9jaHVua19vd25lciwgTlVMTCk7XG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2bWVtLmggYi9uZXQvY29yZS9kZXZtZW0uaFxuaW5kZXggMzg1MmE1NjAzNmNiNC4uYmY3N2U1YTlhOGZlNyAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL2Rldm1lbS5oXG4rKysgYi9uZXQvY29yZS9kZXZtZW0uaFxuQEAgLTQ5LDEwICs0OSwxMCBAQCBzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyB7XG4gXHQgKi9cbiBcdHN0cnVjdCBwZXJjcHVfcmVmIHJlZjtcbiBcbi1cdC8qIFRoZSBsaXN0IG9mIGJpbmRpbmdzIGN1cnJlbnRseSBhY3RpdmUuIFVzZWQgZm9yIG5ldGxpbmsgdG8gbm90aWZ5IHVzXG4rXHQvKiBUaGUgc29ja2V0IHByaXYgdGhpcyBiaW5kaW5nIGJlbG9uZ3MgdG8uIFVzZWQgZm9yIG5ldGxpbmsgdG8gbm90aWZ5IHVzXG4gXHQgKiBvZiB0aGUgdXNlciBkcm9wcGluZyB0aGUgYmluZC5cbiBcdCAqL1xuLVx0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xuK1x0c3RydWN0IG5ldGRldl9ubF9zb2NrICpzb2NrX3ByaXY7XG4gXG4gXHQvKiByeHEncyB0aGlzIGJpbmRpbmcgaXMgYWN0aXZlIG9uLiAqL1xuIFx0c3RydWN0IHhhcnJheSBib3VuZF9yeHFzO1xuZGlmZiAtLWdpdCBhL25ldC9jb3JlL25ldGRldi1nZW5sLmMgYi9uZXQvY29yZS9uZXRkZXYtZ2VubC5jXG5pbmRleCBjMTVkOGQ0Y2ExZjhmLi5kM2YzYTkxYTZkOTMyIDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvbmV0ZGV2LWdlbmwuY1xuKysrIGIvbmV0L2NvcmUvbmV0ZGV2LWdlbmwuY1xuQEAgLTEwNDQsMTMgKzEwNDQsMTEgQEAgaW50IG5ldGRldl9ubF9iaW5kX3J4X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdFx0Z290byBlcnJfZ2VubG1zZ19mcmVlO1xuIFx0fVxuIFxuLVx0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZWxvY2spO1xuLVxuIFx0ZXJyID0gMDtcbiBcdG5ldGRldiA9IG5ldGRldl9nZXRfYnlfaW5kZXhfbG9jayhnZW5sX2luZm9fbmV0KGluZm8pLCBpZmluZGV4KTtcbiBcdGlmICghbmV0ZGV2KSB7XG4gXHRcdGVyciA9IC1FTk9ERVY7XG4tXHRcdGdvdG8gZXJyX3VubG9ja19zb2NrO1xuK1x0XHRnb3RvIGVycl9nZW5sbXNnX2ZyZWU7XG4gXHR9XG4gXHRpZiAoIW5ldGlmX2RldmljZV9wcmVzZW50KG5ldGRldikpXG4gXHRcdGVyciA9IC1FTk9ERVY7XG5AQCAtMTEwMiw4ICsxMTAwLDYgQEAgaW50IG5ldGRldl9ubF9iaW5kX3J4X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcbiBcdG5ldGRldl91bmxvY2sobmV0ZGV2KTtcbiBcbi1cdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZWxvY2spO1xuLVxuIFx0cmV0dXJuIGVyciBcdTAwM2MgMCA/IGVyciA6IDA7XG4gXG4gZXJyX3VuYmluZDpcbkBAIC0xMTEyLDggKzExMDgsNiBAQCBpbnQgbmV0ZGV2X25sX2JpbmRfcnhfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0Yml0bWFwX2ZyZWUocnhxX2JpdG1hcCk7XG4gZXJyX3VubG9jazpcbiBcdG5ldGRldl91bmxvY2sobmV0ZGV2KTtcbi1lcnJfdW5sb2NrX3NvY2s6XG4tXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2Vsb2NrKTtcbiBlcnJfZ2VubG1zZ19mcmVlOlxuIFx0bmxtc2dfZnJlZShyc3ApO1xuIFx0cmV0dXJuIGVycjtcbkBAIC0xMTg1LDEyICsxMTc5LDEwIEBAIGludCBuZXRkZXZfbmxfYmluZF90eF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRcdGdvdG8gZXJyX2dlbmxtc2dfZnJlZTtcbiBcdH1cbiBcbi1cdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2Vsb2NrKTtcbi1cbiBcdG5ldGRldiA9IG5ldGRldl9nZXRfYnlfaW5kZXhfbG9jayhnZW5sX2luZm9fbmV0KGluZm8pLCBpZmluZGV4KTtcbiBcdGlmICghbmV0ZGV2KSB7XG4gXHRcdGVyciA9IC1FTk9ERVY7XG4tXHRcdGdvdG8gZXJyX3VubG9ja19zb2NrO1xuK1x0XHRnb3RvIGVycl9nZW5sbXNnX2ZyZWU7XG4gXHR9XG4gXG4gXHRpZiAoIW5ldGlmX2RldmljZV9wcmVzZW50KG5ldGRldikpIHtcbkBAIC0xMjMzLDcgKzEyMjUsNiBAQCBpbnQgbmV0ZGV2X25sX2JpbmRfdHhfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0aWYgKGJpbmRfZGV2ICE9IG5ldGRldilcbiBcdFx0bmV0ZGV2X3VubG9jayhiaW5kX2Rldik7XG4gXHRuZXRkZXZfdW5sb2NrKG5ldGRldik7XG4tXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2Vsb2NrKTtcbiBcbiBcdHJldHVybiBnZW5sbXNnX3JlcGx5KHJzcCwgaW5mbyk7XG4gXG5AQCAtMTI0Miw4ICsxMjMzLDYgQEAgaW50IG5ldGRldl9ubF9iaW5kX3R4X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdFx0bmV0ZGV2X3VubG9jayhiaW5kX2Rldik7XG4gZXJyX3VubG9ja19uZXRkZXY6XG4gXHRuZXRkZXZfdW5sb2NrKG5ldGRldik7XG4tZXJyX3VubG9ja19zb2NrOlxuLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlbG9jayk7XG4gZXJyX2dlbmxtc2dfZnJlZTpcbiBcdG5sbXNnX2ZyZWUocnNwKTtcbiBcdHJldHVybiBlcnI7XG5AQCAtMTQxOCwxOSArMTQwNywxNyBAQCBpbnQgbmV0ZGV2X25sX3F1ZXVlX2NyZWF0ZV9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXG4gdm9pZCBuZXRkZXZfbmxfc29ja19wcml2X2luaXQoc3RydWN0IG5ldGRldl9ubF9zb2NrICpwcml2KVxuIHtcbi1cdElOSVRfTElTVF9IRUFEKFx1MDAyNnByaXYtXHUwMDNlYmluZGluZ3MpO1xuLVx0bXV0ZXhfaW5pdChcdTAwMjZwcml2LVx1MDAzZWxvY2spO1xuK1x0eGFfaW5pdChcdTAwMjZwcml2LVx1MDAzZWJpbmRpbmdzKTtcbiB9XG4gXG4gdm9pZCBuZXRkZXZfbmxfc29ja19wcml2X2Rlc3Ryb3koc3RydWN0IG5ldGRldl9ubF9zb2NrICpwcml2KVxuIHtcbiBcdHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpiaW5kaW5nO1xuLVx0c3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKnRlbXA7XG4gXHRuZXRkZXZpY2VfdHJhY2tlciBkZXZfdHJhY2tlcjtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XG4rXHR1bnNpZ25lZCBsb25nIHhhX2lkeDtcbiBcbi1cdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2Vsb2NrKTtcbi1cdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShiaW5kaW5nLCB0ZW1wLCBcdTAwMjZwcml2LVx1MDAzZWJpbmRpbmdzLCBsaXN0KSB7XG4rXHR4YV9mb3JfZWFjaChcdTAwMjZwcml2LVx1MDAzZWJpbmRpbmdzLCB4YV9pZHgsIGJpbmRpbmcpIHtcbiBcdFx0bXV0ZXhfbG9jayhcdTAwMjZiaW5kaW5nLVx1MDAzZWxvY2spO1xuIFx0XHRkZXYgPSBiaW5kaW5nLVx1MDAzZWRldjtcbiBcdFx0aWYgKCFkZXYpIHtcbkBAIC0xNDQ2LDcgKzE0MzMsNyBAQCB2b2lkIG5ldGRldl9ubF9zb2NrX3ByaXZfZGVzdHJveShzdHJ1Y3QgbmV0ZGV2X25sX3NvY2sgKnByaXYpXG4gXHRcdG5ldGRldl91bmxvY2soZGV2KTtcbiBcdFx0bmV0ZGV2X3B1dChkZXYsIFx1MDAyNmRldl90cmFja2VyKTtcbiBcdH1cbi1cdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZWxvY2spO1xuK1x0eGFfZGVzdHJveShcdTAwMjZwcml2LVx1MDAzZWJpbmRpbmdzKTtcbiB9XG4gXG4gc3RhdGljIGludCBuZXRkZXZfZ2VubF9uZXRkZXZpY2VfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYixcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE1OjEwOjEzLjU2Nzc2NzI2NloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY0MDgzMjI0MDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgTmV0ZGV2IE5ldGxpbmsgQmluZGluZyBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggaGVyZSwgYW5kIGl0J3MgbWFraW5nIHNvbWUgcHJldHR5IHNpZ25pZmljYW50IGNoYW5nZXMgdG8gaG93IG5ldGRldiBuZXRsaW5rIHNvY2tldCBiaW5kaW5ncyBhcmUgaGFuZGxlZC4gU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyB0byBiZSBpbiBgbmV0L2NvcmUvZGV2bWVtLmNgLCBgbmV0L2NvcmUvbmV0ZGV2LWdlbmwuY2AsIGFuZCBgaW5jbHVkZS9uZXQvbmV0ZGV2X25ldGxpbmsuaGAuIFRoZXkncmUgc3dhcHBpbmcgb3V0IHRoZSBgYmluZGluZ3NgIGxpc3QgZm9yIGFuIGB4YXJyYXlgIGFuZCwgaW50ZXJlc3RpbmcsIHJlbW92aW5nIHRoZSBgbG9ja2AgbXV0ZXggZnJvbSBgc3RydWN0IG5ldGRldl9ubF9zb2NrYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzLlxuXG5UaGlzIHBhdGNoIHRvdWNoZXMgdGhlc2UgZnVuY3Rpb25zIGRpcmVjdGx5OiBgbmV0ZGV2X25sX2JpbmRfcnhfZG9pdGAsIGBuZXRkZXZfbmxfYmluZF90eF9kb2l0YCwgYG5ldGRldl9ubF9zb2NrX3ByaXZfaW5pdGAsIGBuZXRkZXZfbmxfc29ja19wcml2X2Rlc3Ryb3lgLCBgbmV0X2Rldm1lbV91bmJpbmRfZG1hYnVmYCwgYW5kIGBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmYC4gVGhlc2UgYWxsIGxvb2sgbGlrZSBuZXRsaW5rIGhhbmRsZXJzIGZvciB0aGUgbmV0ZGV2IGZhbWlseS4gUmlnaHQsIHNvIGl0J3MgYSBuZXRsaW5rLWZvY3VzZWQgY2hhbmdlLlxuXG5NeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXM6IGlzIHRoaXMgcmVhY2hhYmxlPyBJcyBpdCB3b3J0aCBmdXp6aW5nPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSB0cmlnZ2VyZWQuIEkgc2hvdWxkIGFsc28gdHJhY2sgZG93biB0aGUgYXNzb2NpYXRlZCBjb25maWcgb3B0aW9ucyBmb3IgZGV2bWVtLiBgbmV0L2NvcmUvZGV2bWVtLmNgIGlzIHRoZSBwcmltZSBzdXNwZWN0IGZvciBjb25maWcgY2hlY2tzLiBPbmNlIEkgaGF2ZSB0aGUgcmVsZXZhbnQgY29uZmlnIG9wdGlvbnMsIEkgY2FuIGRldGVybWluZSB0aGUgbGlrZWxpaG9vZCBvZiB0cmlnZ2VyaW5nIHRoaXMgY29kZSBwYXRoLiBJIHdpbGwgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhlIG9sZCBhbmQgbmV3IG1ldGhvZHMgZG8gYW5kIGlmIHRoaXMgaXMgYSBnb29kIHBsYWNlIHRvIGNvbmNlbnRyYXRlIG15IGVmZm9ydHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwOTYsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMTMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNToxMDoxOS45NzYwOTE4MzRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYyNDAzNTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGV2bWVtXFxcXC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL01ha2VmaWxlPTQ4PW9iai0kKENPTkZJR19ORVRfVEVTVCkgKz0gbmV0X3Rlc3Qub1xcbm5ldC9jb3JlL01ha2VmaWxlOjQ5Om9iai0kKENPTkZJR19ORVRfREVWTUVNKSArPSBkZXZtZW0ub1xcbm5ldC9jb3JlL01ha2VmaWxlLTUwLW9iai0kKENPTkZJR19ERUJVR19ORVQpICs9IGxvY2tfZGVidWcub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNToxMDoyMC4wMjIzMzgwOFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NTcxOTkzNDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIGBDT05GSUdfTkVUX0RFVk1FTWAgRGVwZW5kZW5jeSoqXG5cblJpZ2h0LCBzbyB3ZSdyZSBzZWVpbmcgdGhhdCBgQ09ORklHX05FVF9ERVZNRU1gIGlzIGEgaGFyZCByZXF1aXJlbWVudCBzb21ld2hlcmUuIE1ha2VzIHNlbnNlLCBnaXZlbiB0aGUgcG90ZW50aWFsIGZvciBkaXJlY3QgZGV2aWNlIG1lbW9yeSBhY2Nlc3MuIE15IGluaXRpYWwgbW92ZSBoZXJlIGlzIGFsd2F5cyB0byBkaXZlIHN0cmFpZ2h0IGludG8gdGhlIEtjb25maWcgZmlsZXMuIFRpbWUgdG8gY2hlY2sgdGhlIGRlcGVuZGVuY2llcy4gVGhpcyBuZWVkcyB0byBiZSBjaGVja2VkIGNhcmVmdWxseS4gSSdsbCBuZWVkIHRvIGxvY2F0ZSB3aGVyZSBgQ09ORklHX05FVF9ERVZNRU1gIGlzIGRlZmluZWQsIGZpZ3VyZSBvdXQgKndoeSogaXQncyBuZWVkZWQsIGFuZCB3aGF0IG90aGVyIGNvbmZpZ3VyYXRpb25zIGl0IG1pZ2h0IGluZmx1ZW5jZS4gVW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCBvZiB0aGlzIGNvbmZpZ3VyYXRpb24gd2lsbCBiZSBrZXkuIElzIGl0IGEgY29yZSBuZXR3b3JraW5nIGZlYXR1cmUsIG9yIGEgbW9yZSBuaWNoZSwgcGVyZm9ybWFuY2Utb3JpZW50ZWQgb3B0aW9uPyBUaGlzIG5lZWRzIHRob3JvdWdoIGludmVzdGlnYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ4NjksIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNToxMDoyMy40Nzk1NDAzNjNaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY4MTI1NzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVF9ERVZNRU1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L0tjb25maWc9NjY9Y29uZmlnIFNLQl9FWFRFTlNJT05TXFxuLS1cXG5uZXQvS2NvbmZpZy02OC1cXG5uZXQvS2NvbmZpZzo2OTpjb25maWcgTkVUX0RFVk1FTVxcbm5ldC9LY29uZmlnLTcwLVxcdGRlZl9ib29sIHlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTU6MTA6MjMuNTI2MzU5MTI4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDEwOTY5OTg0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKkludmVzdGlnYXRpbmcgYSBLZXJuZWwgQ29uZmlndXJhdGlvbiBGbGFnKipcblxuT2theSwgc28gYE5FVF9ERVZNRU1gIGlzIGRlZmluZWQgYXMgYGRlZl9ib29sIHlgLiBUaGF0IG1lYW5zIGl0J3MgZW5hYmxlZCBieSBkZWZhdWx0LCB3aGljaCBpcyBpbXBvcnRhbnQgdG8ga25vdy4gQnV0IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBzY29wZSBhbmQgaW1wYWN0LiBCZWZvcmUgSSBqdW1wIHRvIGNvbmNsdXNpb25zLCBJIG5lZWQgdG8gc2VlIHdoYXQgb3RoZXIgY29uZmlndXJhdGlvbnMgZGVwZW5kIG9uIGl0LiBLbm93aW5nIGl0cyBkZXBlbmRlbmNpZXMgd2lsbCBpbGx1bWluYXRlIHdoaWNoIGZlYXR1cmVzIG9yIGZ1bmN0aW9uYWxpdGllcyBhcmUgYWZmZWN0ZWQgaWYgSSB3ZXJlIHRvIGNoYW5nZSBpdHMgc3RhdGUuIFRoaXMgd2lsbCBhbHNvIGhlbHAgbWUgbmFycm93IGRvd24gd2hlcmUgdG8gbG9vayBpZiB0aGVyZSBhcmUgYW55IHNpZGUgZWZmZWN0cyBvciBwb3RlbnRpYWwgY29uZmxpY3RzLiBUaW1lIHRvIGRpZyBpbiBhbmQgdHJhY2UgdGhlIHJlbGF0aW9uc2hpcHMuIExldCdzIHNlZSB3aGF0IHRoZSBkZXBlbmRlbmN5IHRyZWUgbG9va3MgbGlrZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTE2MywiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE1OjEwOjI3LjYzNjA2MzIwNFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTQ2Mjk5NDA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORVRfREVWTUVNXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvS2NvbmZpZz02Nj1jb25maWcgU0tCX0VYVEVOU0lPTlNcXG4tLVxcbm5ldC9LY29uZmlnLTY4LVxcbm5ldC9LY29uZmlnOjY5OmNvbmZpZyBORVRfREVWTUVNXFxubmV0L0tjb25maWctNzAtXFx0ZGVmX2Jvb2wgeVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNToxMDoyOS41ODIzNzIzNjNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTM5NzMzNTg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcsIHdoZXJlJ3MgdGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQgdW50YW5nbGluZyB0aGlzIGNvbmZpZ3VyYXRpb24gbXlzdGVyeT8gUmlnaHQsIHRoZSBgbmV0L0tjb25maWdgIGZpbGUuIFNwZWNpZmljYWxseSwgSSdtIGdvaW5nIHRvIGp1bXAgaW4gYXJvdW5kIGxpbmUgNjkuIFRoYXQncyB1c3VhbGx5IGEgZ29vZCBzcG90IHRvIGdldCBhIHNlbnNlIG9mIHRoZSBoaWdoZXItbGV2ZWwgbmV0d29yayBjb25maWd1cmF0aW9ucyBhbmQgZGVwZW5kZW5jaWVzLiBJJ20gZXhwZWN0aW5nIHRvIHNlZSBzb21lIGNyaXRpY2FsIGRlZmluaXRpb25zLCBtYXliZSBzb21lIGVhcmx5IG1lbnUgc3RydWN0dXJlcyB0aGF0IGxheSBvdXQgdGhlIGJ1aWxkaW5nIGJsb2NrcyBmb3IgdGhlIG1vcmUgZ3JhbnVsYXIgb3B0aW9ucyBmdXJ0aGVyIGRvd24uIEknbGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgb24gaG93IHRoZSB2YXJpb3VzIG5ldHdvcmsgc3Vic3lzdGVtcyBhcmUgYnJvdWdodCB0b2dldGhlciBhdCB0aGUgY29uZmlndXJhdGlvbiBsZXZlbC4gSSdtIGhvcGluZyB0byBnZXQgYSBxdWljayBvdmVydmlldyBvZiB0aGUgb3JnYW5pemF0aW9uYWwgYXBwcm9hY2ggdXNlZCBpbiB0aGUgYG5ldC9gIGRpcmVjdG9yeSdzIGNvbmZpZ3VyYXRpb24gZmlsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTQyMywiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE1OjEwOjMyLjcyMjEwODkxOVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MjEyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA2MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA2MDpcXHRjb25maWcgTkVUX1JFRElSRUNUXFxuICA2MTpcXHRcXHRib29sXFxuICA2MjpcXHRcXG4gIDYzOlxcdGNvbmZpZyBTS0JfREVDUllQVEVEXFxuICA2NDpcXHRcXHRib29sXFxuICA2NTpcXHRcXG4gIDY2OlxcdGNvbmZpZyBTS0JfRVhURU5TSU9OU1xcbiAgNjc6XFx0XFx0Ym9vbFxcbiAgNjg6XFx0XFxuICA2OTpcXHRjb25maWcgTkVUX0RFVk1FTVxcbiAgNzA6XFx0XFx0ZGVmX2Jvb2wgeVxcbiAgNzE6XFx0XFx0c2VsZWN0IEdFTkVSSUNfQUxMT0NBVE9SXFxuICA3MjpcXHRcXHRkZXBlbmRzIG9uIERNQV9TSEFSRURfQlVGRkVSXFxuICA3MzpcXHRcXHRkZXBlbmRzIG9uIFBBR0VfUE9PTFxcbiAgNzQ6XFx0XFxuICA3NTpcXHRjb25maWcgTkVUX1NIQVBFUlxcbiAgNzY6XFx0XFx0Ym9vbFxcbiAgNzc6XFx0XFxuICA3ODpcXHRjb25maWcgTkVUX0NSQzMyQ1xcbiAgNzk6XFx0XFx0Ym9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNToxMDozMi43MjIxODQ1MDlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzEzMTI1ODQ4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgdGhlIERlcGVuZGVuY2llcyBvZiBgTkVUX0RFVk1FTWAqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgTkVUX0RFVk1FTWAgYW5kIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcHJlcmVxdWlzaXRlcy4gUmlnaHQgb2ZmIHRoZSBiYXQsIGl0J3MgdGVsbGluZyBtZSBpdCBkZXBlbmRzIG9uIGJvdGggYERNQV9TSEFSRURfQlVGRkVSYCBhbmQgYFBBR0VfUE9PTGAuIFRoYXQgbWFrZXMgc2Vuc2U7IHdlIG5lZWQgYSBzaGFyZWQgbWVtb3J5IHNwYWNlIGFuZCBhIG1lY2hhbmlzbSB0byBtYW5hZ2UgbWVtb3J5IHBhZ2VzLiBNeSBuZXh0IHN0ZXAgaXMgdG8gcXVpY2tseSB2ZXJpZnkgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBmb3IgYERNQV9TSEFSRURfQlVGRkVSYC4gSXMgaXQgZW5hYmxlZCBieSBkZWZhdWx0IGluIHRoZSBrZXJuZWwgb3IgZG9lcyBpdCBuZWVkIHRvIGJlIGV4cGxpY2l0bHkgc2VsZWN0ZWQgaW4gdGhlIGNvbmZpZ3VyYXRpb24/IEkgbmVlZCB0byBrbm93IGlmIHRoaXMgaXMgc29tZXRoaW5nIHRoYXQgbWlnaHQgYmUgYSBjb21tb24gc291cmNlIG9mIHByb2JsZW1zIGR1cmluZyBidWlsZCwgYW5kIEkgZG9uJ3Qgd2FudCB0byBtYWtlIGFzc3VtcHRpb25zLiBJJ2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIGNvbmZpZyBhbmQgc2VlIHdoYXQncyB3aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1ODM5LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNToxMDozNS44NTM0NDU4NzVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NzEyMjAyODYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIERNQV9TSEFSRURfQlVGRkVSXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jhc2UvS2NvbmZpZz0yMTM9c291cmNlIFxcXCJkcml2ZXJzL2Jhc2UvcmVnbWFwL0tjb25maWdcXFwiXFxuZHJpdmVycy9iYXNlL0tjb25maWctMjE0LVxcbmRyaXZlcnMvYmFzZS9LY29uZmlnOjIxNTpjb25maWcgRE1BX1NIQVJFRF9CVUZGRVJcXG5kcml2ZXJzL2Jhc2UvS2NvbmZpZy0yMTYtXFx0Ym9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNToxMDozNy44MjQ2NzM1NTJaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI1MjAxMDk3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgc29tZXRoaW5nIGlzIGNvbmZpZ3VyZWQgaW4gdGhlIGtlcm5lbCwgYW5kIHRoZSBgZHJpdmVycy9iYXNlL0tjb25maWdgIGZpbGUgc2VlbXMgbGlrZSBhIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQuIEdpdmVuIG15IGV4cGVyaWVuY2UsIGxpbmUgMjE1IHNvdW5kcyBsaWtlIGEgZ29vZCBwb2ludCB0byB6ZXJvIGluIG9uLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgc29tZXRoaW5nIGZ1bmRhbWVudGFsLCBwcm9iYWJseSBhIGNvcmUgb3B0aW9uIHJlbGF0ZWQgdG8gc29tZSBkcml2ZXIgb3IgYmFzZSBmdW5jdGlvbmFsaXR5LCBvciBtYXliZSBldmVuIGEgbWFjcm8gZGVmaW5pdGlvbi4gTGV0IG1lIHB1bGwgdGhhdCBmaWxlIGFuZCBnZXQgdG8gbGluZSAyMTUsIEkgc3VzcGVjdCBJIGNhbiBxdWlja2x5IHBpbnBvaW50IHRoZSByZWxldmFudCBjb25maWcgb3B0aW9uLCBhbmQgdW5kZXJzdGFuZCBpdHMgY29udGV4dCB3aXRoaW4gdGhlIHdpZGVyIGNvbmZpZ3VyYXRpb24gc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MTU2LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTU6MTA6NDEuMDc2Njg3NDQ3WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4MzExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvYmFzZS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIxMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDIxMDpcXHRcXHRib29sXFxuIDIxMTpcXHRcXHRzZWxlY3QgR0xPQlxcbiAyMTI6XFx0XFxuIDIxMzpcXHRzb3VyY2UgXFxcImRyaXZlcnMvYmFzZS9yZWdtYXAvS2NvbmZpZ1xcXCJcXG4gMjE0OlxcdFxcbiAyMTU6XFx0Y29uZmlnIERNQV9TSEFSRURfQlVGRkVSXFxuIDIxNjpcXHRcXHRib29sXFxuIDIxNzpcXHRcXHRkZWZhdWx0IG5cXG4gMjE4OlxcdFxcdHNlbGVjdCBJUlFfV09SS1xcbiAyMTk6XFx0XFx0aGVscFxcbiAyMjA6XFx0XFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBmcmFtZXdvcmsgZm9yIGJ1ZmZlci1zaGFyaW5nIGJldHdlZW5cXG4gMjIxOlxcdFxcdCAgbXVsdGlwbGUgZHJpdmVycy4gQSBidWZmZXIgaXMgYXNzb2NpYXRlZCB3aXRoIGEgZmlsZSB1c2luZyBkcml2ZXJcXG4gMjIyOlxcdFxcdCAgQVBJcyBleHRlbnNpb247IHRoZSBmaWxlJ3MgZGVzY3JpcHRvciBjYW4gdGhlbiBiZSBwYXNzZWQgb24gdG8gb3RoZXJcXG4gMjIzOlxcdFxcdCAgZHJpdmVyLlxcbiAyMjQ6XFx0XFxuIDIyNTpcXHRjb25maWcgRE1BX0ZFTkNFX1RSQUNFXFxuIDIyNjpcXHRcXHRib29sIFxcXCJFbmFibGUgdmVyYm9zZSBETUFfRkVOQ0VfVFJBQ0UgbWVzc2FnZXNcXFwiXFxuIDIyNzpcXHRcXHRkZXBlbmRzIG9uIERNQV9TSEFSRURfQlVGRkVSXFxuIDIyODpcXHRcXHRoZWxwXFxuIDIyOTpcXHRcXHQgIEVuYWJsZSB0aGUgRE1BX0ZFTkNFX1RSQUNFIHByaW50a3MuIFRoaXMgd2lsbCBhZGQgZXh0cmFcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTU6MTA6NDEuMDc2NzY2OTI3WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NDQ5ODI3MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nOlxuXG4qKlRoaW5raW5nIFRocm91Z2ggQ29uZmlndXJhdGlvbiBEZWZhdWx0cyoqXG5cblJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBETUFfU0hBUkVEX0JVRkZFUmAgdGhpbmcuIEl0J3MgYSBCb29sZWFuLCBkZWZhdWx0ZWQgdG8gJ24nIGlmIG5vdCBzcGVjaWZpZWQsIHdoaWNoIHRlbGxzIG1lIGl0J3MgbGlrZWx5IGEgY29uZmlndXJhdGlvbiB0b2dnbGUuIEdpdmVuIHRoYXQsIGl0ICpkZWZpbml0ZWx5KiBzaG91bGQgYmUgcGFydCBvZiB0aGUgYEVuYWJsZUNvbmZpZ3NgIGxpc3QuIE5vIHF1ZXN0aW9uIHRoZXJlLiBXZSBuZWVkIHRvIGV4cGxpY2l0bHkgYWNrbm93bGVkZ2UgYW5kIG1hbmFnZSB0aGF0IHNldHRpbmcuXG5cbk5vdywgcmVnYXJkaW5nIGBQQUdFX1BPT0xgLi4uIG15IGd1dCBmZWVsaW5nLCBiYXNlZCBvbiBwcmV2aW91cyBleHBlcmllbmNlLCBpcyB0aGF0IGl0J3MgcHJvYmFibHkgZW5hYmxlZCBieSBkZWZhdWx0LCBlc3BlY2lhbGx5IGluIGEgbmV0d29ya2luZyBjb250ZXh0LiBIb3dldmVyLCBndXQgZmVlbGluZ3MgYXJlbid0IGVub3VnaC4gSSdtIGdvaW5nIHRvIGRvdWJsZS1jaGVjayB0aGUgYFBBR0VfUE9PTGAgY29uZmlndXJhdGlvbiBkZWZpbml0aW9uIHRvIGNvbmZpcm0gdGhpcyBhc3N1bXB0aW9uLiBMZXQncyBtYWtlIHN1cmUgb3VyIGFzc3VtcHRpb25zIGFyZSBjb3JyZWN0IGJlZm9yZSB3ZSBnbyBmdXJ0aGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NjI3LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNToxMDo0NC43MjE3NTI5NFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc1MzY3NjYzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgUEFHRV9QT09MXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvS2NvbmZpZz00ODc9Y29uZmlnIE5FVF9ERVZMSU5LXFxuLS1cXG5uZXQvS2NvbmZpZy00OTAtXFxubmV0L0tjb25maWc6NDkxOmNvbmZpZyBQQUdFX1BPT0xcXG5uZXQvS2NvbmZpZy00OTItXFx0Ym9vbFxcbm5ldC9LY29uZmlnLTQ5My1cXG5uZXQvS2NvbmZpZzo0OTQ6Y29uZmlnIFBBR0VfUE9PTF9TVEFUU1xcbm5ldC9LY29uZmlnLTQ5NS1cXHRkZWZhdWx0IG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTU6MTA6NDYuNDc1NDM1ODM5WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNDI0MjU1MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHNvbWV0aGluZyByZWxhdGVkIHRvIHRoZSBuZXR3b3JrIGNvbmZpZ3VyYXRpb24gd2l0aGluIHRoZSBrZXJuZWwuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHplcm8gaW4gb24gYG5ldC9LY29uZmlnYCwgd2hpY2ggaXMgdGhlIGRlIGZhY3RvIHN0YW5kYXJkIGZvciB0aGlzIGtpbmQgb2YgaW5mb3JtYXRpb24sIGVzcGVjaWFsbHkgZ2l2ZW4gdGhlIGtlcm5lbCdzIEtjb25maWcgc3RydWN0dXJlLiBJJ20gYXNzdW1pbmcgdGhhdCB0aGUgc3BlY2lmaWNzIEknbSBhZnRlciBhcmUgbGlrZWx5IGluIHRoZSBnZW5lcmFsIG5ldHdvcmsgY29uZmlndXJhdGlvbiBzZWN0aW9uLCBhbmQgYmFzZWQgb24gcGFzdCBleHBlcmllbmNlIEknbSBnb2luZyB0byBzdGFydCBhcm91bmQgbGluZSA0OTEgdG8gc2VlIGlmIHRoYXQgcmluZ3MgYSBiZWxsLiBUaGlzIGlzIGEgY29tbW9uIHBhdHRlcm4g4oCTIHRoZSBLY29uZmlnIGZpbGVzIGFyZSBvZnRlbiBvcmdhbml6ZWQgbG9naWNhbGx5LCBhbmQgdGhhdCBwb3NpdGlvbiBmZWVscyBsaWtlIGEgZ29vZCBpbml0aWFsIGJldC4gRnJvbSB0aGVyZSBJJ2xsIGJlIGFibGUgdG8gdHJhY2UgZGVwZW5kZW5jaWVzLCB1bmRlcnN0YW5kIHRoZSBjb25kaXRpb25hbCBsb2dpYywgYW5kIHF1aWNrbHkgaXNvbGF0ZSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBzeW1ib2xzIGFuZCB0aGVpciBhc3NvY2lhdGVkIG9wdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY5ODcsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNToxMDo0OS43MTc4NjUwNzVaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzM3MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNDg1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDg1OlxcdFxcdCAgd2l0aCB0aGUgaGVscCBvZiBCUEYgcHJvZ3JhbXMuXFxuIDQ4NjpcXHRcXG4gNDg3OlxcdGNvbmZpZyBORVRfREVWTElOS1xcbiA0ODg6XFx0XFx0Ym9vbFxcbiA0ODk6XFx0XFx0ZGVmYXVsdCBuXFxuIDQ5MDpcXHRcXG4gNDkxOlxcdGNvbmZpZyBQQUdFX1BPT0xcXG4gNDkyOlxcdFxcdGJvb2xcXG4gNDkzOlxcdFxcbiA0OTQ6XFx0Y29uZmlnIFBBR0VfUE9PTF9TVEFUU1xcbiA0OTU6XFx0XFx0ZGVmYXVsdCBuXFxuIDQ5NjpcXHRcXHRib29sIFxcXCJQYWdlIHBvb2wgc3RhdHNcXFwiXFxuIDQ5NzpcXHRcXHRkZXBlbmRzIG9uIFBBR0VfUE9PTFxcbiA0OTg6XFx0XFx0aGVscFxcbiA0OTk6XFx0XFx0ICBFbmFibGUgcGFnZSBwb29sIHN0YXRpc3RpY3MgdG8gdHJhY2sgcGFnZSBhbGxvY2F0aW9uIGFuZCByZWN5Y2xpbmdcXG4gNTAwOlxcdFxcdCAgaW4gcGFnZSBwb29scy4gVGhpcyBvcHRpb24gaW5jdXJzIGFkZGl0aW9uYWwgQ1BVIGNvc3QgaW4gYWxsb2NhdGlvblxcbiA1MDE6XFx0XFx0ICBhbmQgcmVjeWNsZSBwYXRocyBhbmQgYWRkaXRpb25hbCBtZW1vcnkgY29zdCB0byBzdG9yZSB0aGUgc3RhdGlzdGljcy5cXG4gNTAyOlxcdFxcdCAgVGhlc2Ugc3RhdGlzdGljcyBhcmUgb25seSBhdmFpbGFibGUgaWYgdGhpcyBvcHRpb24gaXMgZW5hYmxlZCBhbmQgaWZcXG4gNTAzOlxcdFxcdCAgdGhlIGRyaXZlciB1c2luZyB0aGUgcGFnZSBwb29sIHN1cHBvcnRzIGV4cG9ydGluZyB0aGlzIGRhdGEuXFxuIDUwNDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTU6MTA6NDkuNzE3OTQyOTk1WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU1NjAzMDM0ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIENvbmZpZ3VyYXRpb24gQ2hhbmdlcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5IHNlZSBhIGRlcGVuZGVuY3kgaXNzdWUgd2l0aCBgTkVUX0RFVk1FTWAuIEl0IHNlZW1zIGBQQUdFX1BPT0xgIGlzIGEgYm9vbGVhbiBvcHRpb24gd2l0aG91dCBhIGRlZmF1bHQsIGJ1dCBkcml2ZXJzIGdlbmVyYWxseSBlbmFibGUgaXQuIFRoZSBjb3JlIG9mIHRoZSBwcm9ibGVtIGhlcmUgaXMgdGhhdCBpZiB3ZSB3YW50IGBORVRfREVWTUVNYCBlbmFibGVkLCB3ZSAqYWxzbyogbmVlZCB0byBlbnN1cmUgYERNQV9TSEFSRURfQlVGRkVSYCBhbmQgYFBBR0VfUE9PTGAgYXJlIHNldC4gTWFrZXMgcGVyZmVjdCBzZW5zZTsgc2hhcmVkIGJ1ZmZlciBpbXBsaWVzIHRoZSBuZWVkIGZvciBhIHBhZ2UgcG9vbCwgYW5kIHdlIGhhdmUgdG8gZXhwbGljaXRseSByZXF1ZXN0IGl0LiBTbywgSSBuZWVkIHRvIGFkZCB0aG9zZSB0byBgRW5hYmxlQ29uZmlnc2AuIFRoaXMgaXMgdGhlIGZpcnN0IGFjdGlvbiwgc2luY2UgaXQgZW5zdXJlcyB0aGUgcHJlLXJlcXVpc2l0ZXMgYXJlIG1ldC5cblxuTm93LCBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9mIHRoZXNlIGNoYW5nZXMuIEknbGwgbmVlZCB0byByZXZpZXcgdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyBiZWluZyBtb2RpZmllZC4gTGV0J3Mgc2VlLi4uIHRoZSBwYXRjaCBpcyB0b3VjaGluZyBgbmV0ZGV2X25sX2JpbmRfcnhfZG9pdGAsIGBuZXRkZXZfbmxfYmluZF90eF9kb2l0YCwgYG5ldGRldl9ubF9zb2NrX3ByaXZfaW5pdGAsIGBuZXRkZXZfbmxfc29ja19wcml2X2Rlc3Ryb3lgLCBgbmV0X2Rldm1lbV91bmJpbmRfZG1hYnVmYCwgYW5kIGBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmYC5cblxuQWgsIHJpZ2h0LCBzbyBgbmV0ZGV2X25sX2JpbmRfcnhfZG9pdGAgYW5kIGBuZXRkZXZfbmxfYmluZF90eF9kb2l0YCBhcmUgb2J2aW91c2x5IG5ldGxpbmsgaGFuZGxlcnMuIFRoZXkgYXJlIGxpa2VseSByZXNwb25zaWJsZSBmb3IgcmVjZWl2aW5nIHRoZSBtZXNzYWdlcyBmcm9tIHVzZXJzcGFjZS4gYG5ldF9kZXZtZW1fYmluZF9kbWFidWZgIGFuZCBgbmV0X2Rldm1lbV91bmJpbmRfZG1hYnVmYCBhcmUgaW50ZXJlc3Rpbmc7IHRoZXkncmUgY2FsbGVkIGVpdGhlciBmcm9tIHRoZSBuZXRsaW5rIGhhbmRsZXJzIG9yIGRpcmVjdGx5IGJ5IHRoZSBkcml2ZXIgY29kZSwgYmFzZWQgb24gdGhlIGNhbGxzLiBUaGUgYmluZGluZyBmdW5jdGlvbnMgc291bmQgY3JpdGljYWwuXG5cbk15IGltbWVkaWF0ZSBmb2xsb3ctdXAgd2lsbCBiZSB0byBjb25maXJtIHdoZXRoZXIgdGhvc2UgbmV0bGluayBoYW5kbGVycyBhcmUgc3RhdGljIG9yIG5vdC4gS25vd2luZyB0aGVpciBzY29wZSBpcyBpbXBvcnRhbnQgZm9yIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHN5c3RlbSBhcmNoaXRlY3R1cmUgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzQ3MywiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE1OjEwOjU1LjI3ODI0OTI3MVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgxMDI0MDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmV0ZGV2X25sX2JpbmRfcnhfZG9pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9uZXRkZXYtZ2VubC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL25ldGRldi1nZW5sLmM9OTg5PW5ldGRldl9ubF9nZXRfZG1hX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1bnNpZ25lZCBsb25nICpyeHFfYml0bWFwLFxcbi0tXFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYy0xMDEyLVxcbm5ldC9jb3JlL25ldGRldi1nZW5sLmM6MTAxMzppbnQgbmV0ZGV2X25sX2JpbmRfcnhfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbm5ldC9jb3JlL25ldGRldi1nZW5sLmMtMTAxNC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE1OjEwOjU1LjMyNjM1NzQ5NloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODE2ODQwNDM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIER5bmFtaWMgTmF0dXJlIGFuZCBMb2NhdGluZyB0aGUgUmVsZXZhbnQgRnVuY3Rpb24qKlxuXG5SaWdodCwgc28gd2UncmUgZGVhbGluZyB3aXRoIHNvbWV0aGluZyBub24tc3RhdGljLCBpbmhlcmVudGx5IGR5bmFtaWMuIFRoYXQncyB0aGUga2V5IGFzc3VtcHRpb24uIE5vdywgZ2l2ZW4gdGhhdCwgbGV0J3MgZHJpbGwgZG93biBpbnRvIHRoZSBwb3RlbnRpYWwgY29kZSBwYXRoLiBUbyB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbiBvZiB0aGlzIG5vbi1zdGF0aWMgdmFsdWUsIEkgbmVlZCB0byBrbm93ICp3aGVyZSogaXQncyBiZWluZyB1c2VkIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHN5c3RlbS4gTXkgaW5pdGlhbCBpbnN0aW5jdCwgZ2l2ZW4gd2hhdCB3ZSdyZSBsaWtlbHkgZGVhbGluZyB3aXRoIChsaWtlbHkga2VybmVsIGNvZGUgcmVsYXRlZCB0byBtZW1vcnkgb3IgZGV2aWNlIGludGVyYWN0aW9uKSwgaXMgdG8gdHJhY2UgaXQgYmFjayB0byBzb21ldGhpbmcgbGlrZSBgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZmAuIFRoYXQgZnVuY3Rpb24gaXMgb2Z0ZW4gYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBleHBsb3JpbmcgdGhlc2UgdHlwZXMgb2Ygc2NlbmFyaW9zLiBJIHdhbnQgdG8gY2hlY2sgaXRzIGltcGxlbWVudGF0aW9uLCBhbmQgaG93IHRoZSB2YWx1ZSB3ZSd2ZSBiZWVuIGRpc2N1c3NpbmcgZmFjdG9ycyBpbnRvIGl0LiBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucyBmb3IgbWVtb3J5IG1hbmFnZW1lbnQsIERNQSwgYW5kIGRhdGEgdHJhbnNmZXIuIFVuZGVyc3RhbmRpbmcgdGhlIHNwZWNpZmljcyBvZiBgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZmAgd2lsbCBob3BlZnVsbHkgZ2l2ZSBtZSB0aGUgY29udGV4dCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgc2lnbmlmaWNhbmNlIGFuZCBpbXBhY3Qgb2YgdGhpcyBcIm5vbi1zdGF0aWNcIiBwcm9wZXJ0eS4gSXQncyBhIGh5cG90aGVzaXMsIGJ1dCBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gdmFsaWRhdGUgbXkgaW5pdGlhbCBhc3N1bXB0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MzQxLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTU6MTA6NTkuMTQzMjAwOTQyWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTkzMTgzNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZXRfZGV2bWVtX2JpbmRfZG1hYnVmXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL2Rldm1lbS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2Rldm1lbS5jPTEyND12b2lkIG5ldF9kZXZtZW1fdW5iaW5kX2RtYWJ1ZihzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqYmluZGluZylcXG4tLVxcbm5ldC9jb3JlL2Rldm1lbS5jLTE1My1cXG5uZXQvY29yZS9kZXZtZW0uYzoxNTQ6aW50IG5ldF9kZXZtZW1fYmluZF9kbWFidWZfdG9fcXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHJ4cV9pZHgsXFxubmV0L2NvcmUvZGV2bWVtLmMtMTU1LVxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqYmluZGluZyxcXG4tLVxcbm5ldC9jb3JlL2Rldm1lbS5jPTE4Mz1zdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqXFxubmV0L2NvcmUvZGV2bWVtLmM6MTg0Om5ldF9kZXZtZW1fYmluZF9kbWFidWYoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqdmRldixcXG5uZXQvY29yZS9kZXZtZW0uYy0xODUtXFx0XFx0ICAgICAgIHN0cnVjdCBkZXZpY2UgKmRtYV9kZXYsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE1OjEwOjU5LjE4OTEzNzE1N1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTI3MzE5NDE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIGBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmYCBhbmQgU29ja2V0IEluaXRpYWxpemF0aW9uKipcblxuSG1tLCBzbyBgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZmAgaXNuJ3QgZGVjbGFyZWQgc3RhdGljLiBUaGF0IGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdC4gSXQgaW1wbGllcyB0aGlzIGZ1bmN0aW9uIGlzIGludGVuZGVkIGZvciBicm9hZGVyIHVzYWdlLCBwb3NzaWJseSBiZXlvbmQgdGhlIGltbWVkaWF0ZSBzY29wZSBvZiBpdHMgZGVmaW5pbmcgZmlsZS4gSSdsbCBuZWVkIHRvIHJlbWVtYmVyIHRoYXQgd2hlbiB0cmFjaW5nIGRlcGVuZGVuY2llcy4gR2l2ZW4gaXRzIG5hbWluZywgaXQgbGlrZWx5IGRlYWxzIHdpdGggRE1BIGJ1ZmZlciBiaW5kaW5nLCBwcm9iYWJseSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgbmV0d29yayBkZXZpY2VzLiBUaGF0IG5vbi1zdGF0aWMgZGVjbGFyYXRpb24gY291bGQgbWVhbiBpdCdzIGNhbGxlZCBmcm9tIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwuIEknbGwgbWFrZSBhIG1lbnRhbCBub3RlIHRvIGNoZWNrIHRoZSBjcm9zcy1yZWZlcmVuY2VzIGxhdGVyLiBJIGFsc28gd2FudCB0byBjaGVjayB3aGVyZSBpdCBpcyBjYWxsZWQgdG8gaWRlbnRpZnkgYW55IGV4dGVybmFsIGNhbGxlcnMuXG5cbk5vdywgbGV0IG1lIHNoaWZ0IGdlYXJzIHNsaWdodGx5LiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIG5ldHdvcmsgZGV2aWNlIGNvbnRleHQuIExldCdzIGRlbHZlIGludG8gYG5ldGRldl9ubF9zb2NrX3ByaXZfaW5pdGAuIFVuZGVyc3RhbmRpbmcgaG93IG5ldHdvcmsgZGV2aWNlIHByaXZhdGUgZGF0YSBpcyBpbml0aWFsaXplZCB2aWEgdGhlIG5ldGxpbmsgc29ja2V0IHdpbGwgcHJvdmlkZSBjcml0aWNhbCBjb250ZXh0LiBJIGNhbid0IGJlIHN1cmUgdGhhdCB0aGlzIHdpbGwgcHJvdmlkZSB1c2VmdWwgaW5mb3JtYXRpb24gaW4gdGhpcyBzaXR1YXRpb24sIGJ1dCBpdCBpcyBhbHdheXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJIGtub3cgaXQgaGFuZGxlcyB0aGUgYWxsb2NhdGlvbiBhbmQgc2V0dXAgb2YgdGhlIHByaXZhdGUgZGF0YSBzdHJ1Y3R1cmVzIGFzc29jaWF0ZWQgd2l0aCBuZXRsaW5rIHNvY2tldHMsIHdoaWNoIGlzIGFuIGltcG9ydGFudCBwYXJ0IG9mIG5ldHdvcmsgZGV2aWNlIG1hbmFnZW1lbnQgYW5kIGNvbmZpZ3VyYXRpb24uIFRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGF0IHNvY2tldCB3aWxsIGxpa2VseSBpbnRlcmFjdCB3aXRoIHRoZSBETUEgYnVmZmVyIGJpbmRpbmcgZnVuY3Rpb24gSSB3YXMgbG9va2luZyBhdCBlYXJsaWVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4ODkwLCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTU6MTE6MDMuMTE2NDU5ODAyWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDY1NTY3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZXRkZXZfbmxfc29ja19wcml2X2luaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvbmV0ZGV2LWdlbmwuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9uZXRkZXYtZ2VubC5jPTEyNDE9aW50IG5ldGRldl9ubF9xdWV1ZV9jcmVhdGVfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYy0xNDA3LVxcbm5ldC9jb3JlL25ldGRldi1nZW5sLmM6MTQwODp2b2lkIG5ldGRldl9ubF9zb2NrX3ByaXZfaW5pdChzdHJ1Y3QgbmV0ZGV2X25sX3NvY2sgKnByaXYpXFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYy0xNDA5LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTU6MTE6MDMuMTYxMTIwOTE3WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MjAxOTA2MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aGUgdGhvdWdodCBwcm9jZXNzIHVuZm9sZHM6XG5cbioqSW50ZXJuYWwgdnMuIEV4dGVybmFsOiBBIFF1aWNrIERpdmUgaW50byBgbmV0ZGV2X25sX3NvY2tfcHJpdmAgRnVuY3Rpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgYG5ldGRldl9ubF9zb2NrX3ByaXZfaW5pdGAgYW5kIGBuZXRkZXZfbmxfc29ja19wcml2X2Rlc3Ryb3lgIGZ1bmN0aW9ucy4gVGhlIGZhY3QgdGhhdCB0aGV5J3JlICpub3QqIGRlY2xhcmVkIGFzIGBzdGF0aWNgIGltbWVkaWF0ZWx5IHNldHMgb2ZmIGEgbWVudGFsIGZsYWcuIFRoYXQgdXN1YWxseSBtZWFucyB0aGV5ICpjb3VsZCogYmUgaW50ZW5kZWQgZm9yIGV4dGVybmFsIHVzZSwgb3V0c2lkZSB0aGUgY3VycmVudCBjb21waWxhdGlvbiB1bml0LiBCdXQgdGhhdCdzIGp1c3QgYW4gYXNzdW1wdGlvbi5cblxuSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciB0aGV5J3JlIGFjdHVhbGx5IGV4cG9ydGVkIGFuZCBkZXNpZ25lZCB0byBiZSBwYXJ0IG9mIHRoZSBwdWJsaWMgQVBJLCBvciBpZiB0aGV5J3JlIGp1c3QgdXNlZCBpbnRlcm5hbGx5IHdpdGhpbiB0aGUgbmV0d29ya2luZyBzdWJzeXN0ZW0uIEl0J3MgYSBrZXkgZGlzdGluY3Rpb24uIFRoZSBpbXBsaWNhdGlvbnMgYXJlIHNpZ25pZmljYW50OiBpZiB0aGV5IGFyZSBwYXJ0IG9mIHRoZSBwdWJsaWMgQVBJLCBhbnkgY2hhbmdlcyB0byB0aGVtIHJlcXVpcmUgZXh0cmEgY29uc2lkZXJhdGlvbiBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgYW5kIGV4dGVybmFsIGRlcGVuZGVuY3kgbWFuYWdlbWVudC4gQ29udmVyc2VseSwgaWYgdGhleSBhcmUgaW50ZXJuYWwsIHRoZWlyIGltcGxlbWVudGF0aW9uIGNhbiBiZSByZWZhY3RvcmVkIG9yIG1vZGlmaWVkIHdpdGggcmVsYXRpdmUgZnJlZWRvbS4gU28sIGxldCdzIHRha2UgYSBsb29rLiBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGV5J3JlIGJlaW5nIHVzZWQgYW5kIGRlY2xhcmVkLCBtYXliZSBncmVwIHRocm91Z2ggdGhlIGNvZGUgb3IgdXNlIHNvbWUga2luZCBvZiBzeW1ib2wgbG9va3VwIHRvIHF1aWNrbHkgY2hlY2suIFRoZSBnb2FsIGlzIHRvIGRldGVybWluZSB0aGUgc2NvcGUgb2YgdGhlaXIgaW50ZW5kZWQgdXNlLCBhbmQgZGVjaWRlIGhvdyBpdCBlZmZlY3RzIGZ1dHVyZSBkZXZlbG9wbWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTQwMywiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE1OjExOjA2Ljg4MTMxMzc0M1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY5NDY0NDQ3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZXRkZXZfbmxfc29ja19wcml2X2luaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL25ldGRldi1nZW5sLWdlbi5jPTI0OD1zdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfbXVsdGljYXN0X2dyb3VwIG5ldGRldl9ubF9tY2dycHNbXSA9IHtcXG4tLVxcbm5ldC9jb3JlL25ldGRldi1nZW5sLWdlbi5jLTI1Mi1cXG5uZXQvY29yZS9uZXRkZXYtZ2VubC1nZW4uYzoyNTM6c3RhdGljIHZvaWQgX19uZXRkZXZfbmxfc29ja19wcml2X2luaXQodm9pZCAqcHJpdilcXG5uZXQvY29yZS9uZXRkZXYtZ2VubC1nZW4uYy0yNTQte1xcbm5ldC9jb3JlL25ldGRldi1nZW5sLWdlbi5jOjI1NTpcXHRuZXRkZXZfbmxfc29ja19wcml2X2luaXQocHJpdik7XFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwtZ2VuLmMtMjU2LX1cXG4tLVxcbm5ldC9jb3JlL25ldGRldi1nZW5sLWdlbi5jPTI2Mz1zdHJ1Y3QgZ2VubF9mYW1pbHkgbmV0ZGV2X25sX2ZhbWlseSBfX3JvX2FmdGVyX2luaXQgPSB7XFxuLS1cXG5uZXQvY29yZS9uZXRkZXYtZ2VubC1nZW4uYy0yNzMtXFx0LnNvY2tfcHJpdl9zaXplXFx0PSBzaXplb2Yoc3RydWN0IG5ldGRldl9ubF9zb2NrKSxcXG5uZXQvY29yZS9uZXRkZXYtZ2VubC1nZW4uYzoyNzQ6XFx0LnNvY2tfcHJpdl9pbml0XFx0PSBfX25ldGRldl9ubF9zb2NrX3ByaXZfaW5pdCxcXG5uZXQvY29yZS9uZXRkZXYtZ2VubC1nZW4uYy0yNzUtXFx0LnNvY2tfcHJpdl9kZXN0cm95ID0gX19uZXRkZXZfbmxfc29ja19wcml2X2Rlc3Ryb3ksXFxuLS1cXG5uZXQvY29yZS9uZXRkZXYtZ2VubC1nZW4uaD00Nz1leHRlcm4gc3RydWN0IGdlbmxfZmFtaWx5IG5ldGRldl9ubF9mYW1pbHk7XFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwtZ2VuLmgtNDgtXFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwtZ2VuLmg6NDk6dm9pZCBuZXRkZXZfbmxfc29ja19wcml2X2luaXQoc3RydWN0IG5ldGRldl9ubF9zb2NrICpwcml2KTtcXG5uZXQvY29yZS9uZXRkZXYtZ2VubC1nZW4uaC01MC12b2lkIG5ldGRldl9ubF9zb2NrX3ByaXZfZGVzdHJveShzdHJ1Y3QgbmV0ZGV2X25sX3NvY2sgKnByaXYpO1xcbi0tXFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYz0xMjQxPWludCBuZXRkZXZfbmxfcXVldWVfY3JlYXRlX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4tLVxcbm5ldC9jb3JlL25ldGRldi1nZW5sLmMtMTQwNy1cXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jOjE0MDg6dm9pZCBuZXRkZXZfbmxfc29ja19wcml2X2luaXQoc3RydWN0IG5ldGRldl9ubF9zb2NrICpwcml2KVxcbm5ldC9jb3JlL25ldGRldi1nZW5sLmMtMTQwOS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE1OjExOjA4LjU3NTk2NjU5OFoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDIzNjMxMDk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgTmV0bGluayBGYW1pbHkgU29ja2V0IEluaXRpYWxpemF0aW9uIGFuZCBEZXN0cnVjdGlvbiBDYWxsYmFja3MqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEl0IHNlZW1zIHdlJ3JlIGxvb2tpbmcgYXQgZnVuY3Rpb25zIHVzZWQgYXMgY2FsbGJhY2tzIGR1cmluZyB0aGUgaW5pdGlhbGl6YXRpb24gYW5kIGRlc3RydWN0aW9uIG9mIG5ldGxpbmsgZmFtaWx5IHNvY2tldHMuIFNwZWNpZmljYWxseSwgdGhlIGFyZWFzIG9mIGludGVyZXN0IGZvciBmdXp6aW5nIGFwcGVhciB0byBiZSBjZW50ZXJlZCBhcm91bmQgc2V2ZXJhbCBjb3JlIGZ1bmN0aW9ucy4gSSBzZWUgYG5ldGRldl9ubF9iaW5kX3J4X2RvaXRgLCBgbmV0ZGV2X25sX2JpbmRfdHhfZG9pdGAsIGBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmYCwgYG5ldF9kZXZtZW1fdW5iaW5kX2RtYWJ1ZmAsIGBuZXRkZXZfbmxfc29ja19wcml2X2luaXRgLCBhbmQgYG5ldGRldl9ubF9zb2NrX3ByaXZfZGVzdHJveWAuIFRob3NlIGFsbCBsb29rIGxpa2UgcG90ZW50aWFsIGVudHJ5IHBvaW50cyBmb3Igc29tZSBmdXp6aW5nLiBHaXZlbiB0aGUgY29udGV4dCwgbXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhlc2UgZnVuY3Rpb25zIGxpa2VseSBoYW5kbGUgaW50ZXJhY3Rpb25zIGJldHdlZW4gbmV0d29yayBkZXZpY2VzIGFuZCB0aGUgbmV0bGluayBpbnRlcmZhY2UsIGluY2x1ZGluZyBtZW1vcnkgbWFuYWdlbWVudC5cblxuTXkgZmlyc3QgdGhvdWdodCBpcyB0byBjaGVjayBmb3IgdGhlIHByZXNlbmNlIG9mIGBuZXRkZXZfbmxfYmluZF90eF9kb2l0YCwgSSB0aGluayB0aGF0IGlzIGEgbG9naWNhbCBwbGFjZSB0byBzdGFydCBhbmQgd2lsbCBvZmZlciBzb21lIHVuZGVyc3RhbmRpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMzQ3LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE1OjExOjEyLjU5OTYwMDIyM1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzcxMjcxNDIyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5ldGRldl9ubF9iaW5kX3R4X2RvaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvbmV0ZGV2LWdlbmwuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9uZXRkZXYtZ2VubC5jPTExMjM9bmV0ZGV2X2ZpbmRfbmV0bWVtX3R4X2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYy0xMTQ4LVxcbm5ldC9jb3JlL25ldGRldi1nZW5sLmM6MTE0OTppbnQgbmV0ZGV2X25sX2JpbmRfdHhfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbm5ldC9jb3JlL25ldGRldi1nZW5sLmMtMTE1MC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE1OjExOjEyLjk3MDg4MTYzNVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MjMxMjE1MTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIE5ldHdvcmsgRGV2aWNlIE1lbW9yeSBNYW5hZ2VtZW50IENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ3ZlIGlkZW50aWZpZWQgdGhlIGtleSBzeW1ib2xzIHJlbGF0ZWQgdG8gdGhpcyBuZXR3b3JrIGRldmljZSBtZW1vcnkgbWFuYWdlbWVudCBmZWF0dXJlOiBgbmV0ZGV2X25sX2JpbmRfcnhfZG9pdGAsIGBuZXRkZXZfbmxfYmluZF90eF9kb2l0YCwgYG5ldF9kZXZtZW1fYmluZF9kbWFidWZgLCBgbmV0X2Rldm1lbV91bmJpbmRfZG1hYnVmYCwgYG5ldGRldl9ubF9zb2NrX3ByaXZfaW5pdGAsIGFuZCBgbmV0ZGV2X25sX3NvY2tfcHJpdl9kZXN0cm95YC4gVGhlc2UgY2xlYXJseSByZXByZXNlbnQgdGhlIGNvcmUgZnVuY3Rpb25zIGZvciBiaW5kaW5nIGFuZCB1bmJpbmRpbmcgRE1BIGJ1ZmZlcnMsIGFuZCBpbml0aWFsaXppbmcvZGVzdHJveWluZyB0aGUgcmVsZXZhbnQgc29ja2V0IHByaXZhdGUgZGF0YSBzdHJ1Y3R1cmVzLlxuXG5Ob3csIGZvciB0aGUgZW5hYmxpbmcgY29uZmlndXJhdGlvbnMuIEkndmUgZ290IGBORVRfREVWTUVNYCwgYERNQV9TSEFSRURfQlVGRkVSYCwgYW5kIGBQQUdFX1BPT0xgLiBJbml0aWFsbHksIEkgY29uc2lkZXJlZCBpZiBgTkVUX0RFVk1FTWAgd2FzIHRoZSBvbmx5IG5lY2Vzc2FyeSBjb25maWcuIEJ1dCwgd2FpdCwgYSBjbG9zZXIgbG9vayByZXZlYWxzIGBORVRfREVWTUVNYCBpcyBkZWZpbmVkIGFzIGBkZWZfYm9vbCB5YCwgYnV0ICpkZXBlbmRzKiBvbiBib3RoIGBETUFfU0hBUkVEX0JVRkZFUmAgYW5kIGBQQUdFX1BPT0xgLiBUaGF0J3MgaW1wb3J0YW50LlxuXG5Tbywgd2hpbGUgZW5hYmxpbmcgYERNQV9TSEFSRURfQlVGRkVSYCBhbmQgYFBBR0VfUE9PTGAgKndpbGwqIGF1dG9tYXRpY2FsbHkgZW5hYmxlIGBORVRfREVWTUVNYCwgZm9yIGNsYXJpdHkgYW5kIGV4cGxpY2l0IGNvbmZpZ3VyYXRpb24sIGl0J3Mgc2FmZXN0IHRvIGxpc3QgYWxsIHRocmVlOiBgTkVUX0RFVk1FTWAsIGBETUFfU0hBUkVEX0JVRkZFUmAsIGFuZCBgUEFHRV9QT09MYC4gVGhpcyBlbnN1cmVzIHRoYXQgYWxsIHRoZSBkZXBlbmRlbmNpZXMgYXJlIGNsZWFybHkgc2V0LlxuXG5CZWZvcmUgSSBmaW5hbGl6ZSB0aGlzLCBJIHNob3VsZCB2ZXJpZnkgd2hldGhlciBgUEFHRV9QT09MYCBpdHNlbGYgaGFzIGFueSBkZXBlbmRlbmNpZXMgdGhhdCBJIG1heSBuZWVkIHRvIHRha2UgaW50byBjb25zaWRlcmF0aW9uLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwODYzLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQ5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE1OjExOjE4LjIwMjA5OTc1NVoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY5Mzc4MzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFBBR0VfUE9PTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvS2NvbmZpZz00ODc9Y29uZmlnIE5FVF9ERVZMSU5LXFxuLS1cXG5uZXQvS2NvbmZpZy00OTAtXFxubmV0L0tjb25maWc6NDkxOmNvbmZpZyBQQUdFX1BPT0xcXG5uZXQvS2NvbmZpZy00OTItXFx0Ym9vbFxcbm5ldC9LY29uZmlnLTQ5My1cXG5uZXQvS2NvbmZpZzo0OTQ6Y29uZmlnIFBBR0VfUE9PTF9TVEFUU1xcbm5ldC9LY29uZmlnLTQ5NS1cXHRkZWZhdWx0IG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTU6MTE6MTguMjQ5MDQzMTZaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzEzNjM5MjYyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcml6ZWQgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkludGVybmFsIENvZGUgQXVkaXQgLSBTaW1wbGUgQ2hlY2tzKipcblxuUmlnaHQsIGxldCdzIGp1c3QgbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBzb21ldGhpbmcgb2J2aW91cyBpbiB0aGlzIGNvZGViYXNlLiBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgdGhlIGltcGFjdCBvZiB0aGVzZSB2YXJpYWJsZXMuIEhtbSwgc28gYFBBR0VfUE9PTGAgaXMganVzdCBhIGJvb2xlYW4uIE9rYXksIHRoYXQncyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLCBJIGNhbiBoYW5kbGUgdGhhdC4gTm93LCBJIG5lZWQgdG8gY2hlY2sgc29tZXRoaW5nIGVsc2UuIExldCdzIHNlZS4uLiBgRE1BX1NIQVJFRF9CVUZGRVJgLiBJIHNob3VsZCB2ZXJpZnkgaWYgdGhhdCBoYXMgYW55IGRlcGVuZGVuY2llcyBmaXJzdC4gR290dGEgdGhpbmsgYWJvdXQgYWxsIHRoZSBwbGFjZXMgdGhpcyBtaWdodCBiZSB1c2VkIGFuZCBhbnkgZG93bnN0cmVhbSBpbXBhY3QuIEdvdCBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE1ODksIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNToxMToyMS4zODU0MzgwNzZaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2OTU1NDA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBETUFfU0hBUkVEX0JVRkZFUlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jhc2UvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jhc2UvS2NvbmZpZz0yMTM9c291cmNlIFxcXCJkcml2ZXJzL2Jhc2UvcmVnbWFwL0tjb25maWdcXFwiXFxuZHJpdmVycy9iYXNlL0tjb25maWctMjE0LVxcbmRyaXZlcnMvYmFzZS9LY29uZmlnOjIxNTpjb25maWcgRE1BX1NIQVJFRF9CVUZGRVJcXG5kcml2ZXJzL2Jhc2UvS2NvbmZpZy0yMTYtXFx0Ym9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNToxMToyMS40MzI0MDEwMzFaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQ0NTcyODg4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqU2ltcGxpZnlpbmcgdGhlIENvbmZpZ3VyYXRpb24gTG9naWMqKlxuXG5SaWdodCwgaXQncyBqdXN0IGEgYm9vbGVhbiBmbGFnLCBmdW5kYW1lbnRhbGx5LiBUaGlua2luZyBhYm91dCBgRW5hYmxlQ29uZmlnc2AsIGl0IHNlZW1zIGxpa2UgaXQgY2FuIGJlIHN0cmVhbWxpbmVkLiBCYXNlZCBvbiB3aGF0IEkgaGF2ZSwgSSdtIGdvaW5nIHRvIHN0YXJ0IHdpdGggYSBsaXN0IG9mIHRoZSBrZXkgY29uZmlndXJhdGlvbnM6IGBbXCJORVRfREVWTUVNXCIsIFwiRE1BX1NIQVJFRF9CVUZGRVJcIiwgXCJQQUdFX1BPT0xcIl1gLlxuXG5CdXQgd2FpdCwgaG9sZCBvbi4gSSBuZWVkIHRvIHJlbWVtYmVyIHRoYXQgYE5FVF9ERVZNRU1gIGlzIGRlZmluZWQgYXMgYSBgZGVmX2Jvb2wgeWAuIFRoYXQgbWVhbnMgaXQncyBlbmFibGVkIGNvbmRpdGlvbmFsbHksIGRlcGVuZGluZyBvbiBpdHMgZGVwZW5kZW5jaWVzLiBJIGNhbid0IGp1c3QgYXNzdW1lIGl0J3MgYWx3YXlzIFwib25cIiBiZWNhdXNlIG9mIHRoZSB3YXkgdGhlIGtlcm5lbCBjb25maWcgc3lzdGVtIHdvcmtzLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGF0IGl0IGlzIGV2ZW4gdXNlZCB0byBjb21waWxlIGBkZXZtZW0ub2AsIGJlY2F1c2UgaWYgbm90LCBJIG1pZ2h0IGJlIGluY2x1ZGluZyB0aGF0IGluIHRoZSBsaXN0IGZvciBubyByZWFzb24uIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCB0aGlzIG9wdGlvbiBoYXMgYW4gaW1wYWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTg1NCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE1OjExOjI1Ljg3ODEzMjk2M1oiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ4NzAwNzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTkVUX0RFVk1FTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9NYWtlZmlsZT00OD1vYmotJChDT05GSUdfTkVUX1RFU1QpICs9IG5ldF90ZXN0Lm9cXG5uZXQvY29yZS9NYWtlZmlsZTo0OTpvYmotJChDT05GSUdfTkVUX0RFVk1FTSkgKz0gZGV2bWVtLm9cXG5uZXQvY29yZS9NYWtlZmlsZS01MC1vYmotJChDT05GSUdfREVCVUdfTkVUKSArPSBsb2NrX2RlYnVnLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTU6MTE6MjUuOTIzMDEzODY4WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5ODU3MjYwNTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQ2hlY2tpbmcgdGhlIGBuZXRkZXZfbmxfYmluZF9yeF9kb2l0YCBDb21waWxhdGlvbioqXG5cblllcy4gT2theSwgSSBuZWVkIHRvIHZlcmlmeSBzb21ldGhpbmcgcXVpY2tseS4gTGV0IG1lIHNlZS4uLiBJIHdhbnQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYG5ldGRldl9ubF9iaW5kX3J4X2RvaXRgIGlzIG9ubHkgY29tcGlsZWQgd2hlbiBgQ09ORklHX05FVF9ERVZNRU1gIGlzIGVuYWJsZWQsIG9yIGlmIGl0J3MgaW5jbHVkZWQgcmVnYXJkbGVzcy4gVGhpcyBpcyBzb21ldGhpbmcgdGhhdCBJIG5lZWQgdG8gY2xhcmlmeSB0byBlbnN1cmUgdGhhdCBzb21ldGhpbmcgZXhwZWN0ZWQgaXMgaGFwcGVuaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjI2NiwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE1OjExOjI5LjkwODc0MjMyN1oiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY5NjQ5ODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmV0ZGV2X25sX2JpbmRfcnhfZG9pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9uZXRkZXYtZ2VubC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL25ldGRldi1nZW5sLmM9OTg5PW5ldGRldl9ubF9nZXRfZG1hX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1bnNpZ25lZCBsb25nICpyeHFfYml0bWFwLFxcbi0tXFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYy0xMDEyLVxcbm5ldC9jb3JlL25ldGRldi1nZW5sLmM6MTAxMzppbnQgbmV0ZGV2X25sX2JpbmRfcnhfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbm5ldC9jb3JlL25ldGRldi1nZW5sLmMtMTAxNC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE1OjExOjI5Ljk1NTcxMzAxMloiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjEwNTI3MzU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBQb3RlbnRpYWwgYENPTkZJR19ORVRfREVWTUVNYCBEZXBlbmRlbmNpZXMqKlxuXG5SaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgYSBwaWVjZSBvZiBjb2RlIGFuZCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyB0byBtaW5kIGlzLCBcIklzIHRoaXMgZnVuY3Rpb25hbGl0eSBjb25kaXRpb25hbCBvbiBgQ09ORklHX05FVF9ERVZNRU1gP1wiIEkgbmVlZCB0byBxdWlja2x5IGVzdGFibGlzaCBpZiB0aGUgc2VjdGlvbiBJJ20gcmV2aWV3aW5nIHJlbGllcyBvbiB0aGF0IGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBJJ20gZ29pbmcgdG8gc2NhbiB0aGUgc3Vycm91bmRpbmcgY29kZSBmb3IgYCNpZmRlZiBDT05GSUdfTkVUX0RFVk1FTWAgZGlyZWN0aXZlcy4gVGhhdCdzIHRoZSBtb3N0IGRpcmVjdCB3YXkgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93LiBEZXBlbmRpbmcgb24gaG93IHdpZGVzcHJlYWQgdGhhdCBkZWZpbmUgaXMsIEknbGwgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGNvZGUsIGFuZCBvdGhlciBkZWZpbmVzLCB0byBkZXRlcm1pbmUgaG93IHRoYXQgaW50ZXJhY3RzLiBUaW1lIHRvIGdldCB0aGUgZ3JlcCBjb21tYW5kIHJ1bm5pbmcgb3IgZmlyZSB1cCB0aGUgSURFIHNlYXJjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI1NzksIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNToxMTozMy41NjYyNDM1MTlaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MDUzMjI2LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfTkVUX0RFVk1FTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9uZXRkZXYtZ2VubC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNToxMTozMy42MTAzMDM3MjVaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA0NDM4MDUyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRoZSB0aG91Z2h0IHByb2Nlc3MgdW5mb2xkczpcblxuKipXYWl0IGEgTWludXRlLi4uIFdoZXJlJ3MgdGhlIGBDT05GSUdfTkVUX0RFVk1FTWAgQ2hlY2s/KipcblxuT2theSwgaG9sZCBvbi4gSSdtIGxvb2tpbmcgYXQgYG5ldGRldi1nZW5sLmNgLCBhbmQgSSB3YXMgKmNlcnRhaW4qIHRoZXJlIHdhcyBhIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGJsb2NrIGluIHRoZXJlIHNvbWV3aGVyZSByZWxhdGVkIHRvIGBDT05GSUdfTkVUX0RFVk1FTWAuIEJ1dCBJJ20gbm90IHNlZWluZyBpdC4gVGhhdCdzIG9kZC4gSXQncyByZWFsbHkgdW5leHBlY3RlZCwgZ2l2ZW4gaG93IHRoaXMgY29kZSB1c3VhbGx5IGludGVyYWN0cyB3aXRoIGRpcmVjdCBtZW1vcnkgYWNjZXNzIGFuZCBwb3RlbnRpYWwgc2VjdXJpdHkgaW1wbGljYXRpb25zLlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBzcGVjaWZpYy4gSSBuZWVkIHRvIHplcm8gaW4gb24gdGhlIHJlbGV2YW50IGZ1bmN0aW9uIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQuIExldCdzIGRyaWxsIGludG8gYG5ldGRldl9ubF9iaW5kX3J4X2RvaXRgIHdpdGhpbiBgbmV0ZGV2LWdlbmwuY2AuIFRoYXQncyB3aGVyZSBJIG5lZWQgdG8gc3RhcnQsIGFuZCBzZWUgaG93IHRoZSByZWxldmFudCBmdW5jdGlvbmFsaXR5IGlzIGltcGxlbWVudGVkIHdpdGhvdXQgYENPTkZJR19ORVRfREVWTUVNYCBndWFyZGluZyBpdC4gVGhpcyBpcyBnb2luZyB0byBiZSBpbnRlcmVzdGluZy4uLiBhbmQgcG90ZW50aWFsbHkgYSBjcml0aWNhbCBwb2ludCBmb3IgdnVsbmVyYWJpbGl0eSBhbmFseXNpcywgaWYgaXQncyBvcGVyYXRpbmcgd2l0aG91dCB0aGUgdXN1YWwgZ3VhcmRyYWlscy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBhY2Nlc3MgdG8gdGhhdCBtZW1vcnkgaXMgZ3JhbnRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI4MjEsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNToxMTozNy42NTQ2ODY5NjdaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE5NzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL25ldGRldi1nZW5sLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTAwMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTAwMDpcXHRcXHRcXHRpZiAoZG1hX2RldiBcXHUwMDI2XFx1MDAyNiByeHFfZG1hX2RldiAhPSBkbWFfZGV2KSB7XFxuMTAwMTpcXHRcXHRcXHRcXHROTF9TRVRfRVJSX01TR19GTVQoZXh0YWNrLCBcXFwiRE1BIGRldmljZSBtaXNtYXRjaCBiZXR3ZWVuIHF1ZXVlICV1IGFuZCAldSAobXVsdGktUEYgZGV2aWNlPylcXFwiLFxcbjEwMDI6XFx0XFx0XFx0XFx0XFx0XFx0ICAgcnhxX2lkeCwgcHJldl9yeHFfaWR4KTtcXG4xMDAzOlxcdFxcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FT1BOT1RTVVBQKTtcXG4xMDA0OlxcdFxcdFxcdH1cXG4xMDA1OlxcdFxcbjEwMDY6XFx0XFx0XFx0ZG1hX2RldiA9IHJ4cV9kbWFfZGV2O1xcbjEwMDc6XFx0XFx0XFx0cHJldl9yeHFfaWR4ID0gcnhxX2lkeDtcXG4xMDA4OlxcdFxcdH1cXG4xMDA5OlxcdFxcbjEwMTA6XFx0XFx0cmV0dXJuIGRtYV9kZXY7XFxuMTAxMTpcXHR9XFxuMTAxMjpcXHRcXG4xMDEzOlxcdGludCBuZXRkZXZfbmxfYmluZF9yeF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuMTAxNDpcXHR7XFxuMTAxNTpcXHRcXHRzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqYmluZGluZztcXG4xMDE2OlxcdFxcdHUzMiBpZmluZGV4LCBkbWFidWZfZmQsIHJ4cV9pZHg7XFxuMTAxNzpcXHRcXHRzdHJ1Y3QgbmV0ZGV2X25sX3NvY2sgKnByaXY7XFxuMTAxODpcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2O1xcbjEwMTk6XFx0XFx0dW5zaWduZWQgbG9uZyAqcnhxX2JpdG1hcDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTU6MTE6MzcuNjU0ODA4MDQ3WiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNzk4NDUyNjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgYSBgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZ2AqKlxuXG5BbHJpZ2h0LCBJIHNlZSB0aGlzIGNvZGUgaXMgdXNpbmcgYHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nYC4gVGhhdCByaW5ncyBhIGJlbGwuLi4gaXQncyBwcm9iYWJseSBkZWZpbmVkIGluIGBuZXQvY29yZS9kZXZtZW0uaGAuIFRpbWUgdG8gZG91YmxlIGNoZWNrLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyB0aGlzIGJpbmRpbmcgaXMgYmVpbmcgdXNlZDsgd2hhdCdzIGl0cyBwdXJwb3NlIHdpdGhpbiB0aGUgY29udGV4dCBvZiB0aGUgbmV0d29ya2luZyBkZXZpY2UgbWVtb3J5IG1hbmFnZW1lbnQuIExldCdzIGRpdmUgaW50byB0aGF0IGhlYWRlciBmaWxlIGFuZCBzZWUgd2hhdCdzIHdoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNTAxLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNToxMTo0MC45MzQ2NTU0NzlaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4NjAwNzM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19ORVRfREVWTUVNXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL2Rldm1lbS5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2Rldm1lbS5oPTE4PXN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nIHtcXG4tLVxcbm5ldC9jb3JlL2Rldm1lbS5oLTc2LVxcbm5ldC9jb3JlL2Rldm1lbS5oOjc3OiNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWTUVNKVxcbm5ldC9jb3JlL2Rldm1lbS5oLTc4LS8qIE93bmVyIG9mIHRoZSBkbWEtYnVmIGNodW5rcyBpbnNlcnRlZCBpbnRvIHRoZSBnZW4gcG9vbC4gRWFjaCBzY2F0dGVybGlzdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNToxMTo0MC45ODMyNjIyOTRaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUzNjY0MTYzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIG15c2VsZjpcblxuKipJbnZlc3RpZ2F0aW5nIGBuZXRkZXZfbmxfYmluZF9yeF9kb2l0YCBhbmQgQ09ORklHX05FVF9ERVZNRU0qKlxuXG5Pa2F5LCBzbyBJJ20gcHJldHR5IHN1cmUgYG5ldGRldl9ubF9iaW5kX3J4X2RvaXRgIGlzIGFsd2F5cyBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwuIFRoZSBpbnRlcmVzdGluZyBxdWVzdGlvbiBpcyB3aGV0aGVyIGl0IGp1c3Qgc2lsZW50bHkgZmFpbHMsIG9yIGFjdGl2ZWx5IHJldHVybnMgYW4gZXJyb3IgaWYgYENPTkZJR19ORVRfREVWTUVNYCAqaXNuJ3QqIGRlZmluZWQuIEkgbmVlZCB0byBjb25maXJtIHRoYXQgYmVoYXZpb3IuIFRvIGRvIHRoYXQgSSBuZWVkIHRvIGRpdmUgaW50byB0aGUgc291cmNlLCBzcGVjaWZpY2FsbHkgYG5ldC9jb3JlL2Rldm1lbS5oYC4gTGV0J3MgdGFrZSBhIGxvb2sgYXJvdW5kIGxpbmUgNzcsIHRoYXQncyB1c3VhbGx5IHdoZXJlIHRoZXNlIHR5cGVzIG9mIGNvbmRpdGlvbmFsIGRlZmluZXMgYXJlIGhhbmRsZWQuIEkgZXhwZWN0IHRvIGZpbmQgc29tZSBgI2lmZGVmIENPTkZJR19ORVRfREVWTUVNYCBvciBzb21ldGhpbmcgc2ltaWxhciB0aGF0IGVpdGhlciBlbmFibGVzIG9yIGRpc2FibGVzIHBhcnRzIG9mIHRoZSBmdW5jdGlvbidzIGxvZ2ljLiBUaGF0IHNob3VsZCB0ZWxsIHRoZSB0YWxlIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzgxNiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE1OjExOjQ0LjUxOTkwNzMzOVoiLCJTZXEiOjQ0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MzcxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9kZXZtZW0uaFwiLFxuICBcIkZpcnN0TGluZVwiOiA3MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA3MDpcXHRcXHQgKiBuZXRfaW92cyBpbiB0aGUgVFggcGF0aC5cXG4gIDcxOlxcdFxcdCAqL1xcbiAgNzI6XFx0XFx0c3RydWN0IG5ldF9pb3YgKip0eF92ZWM7XFxuICA3MzpcXHRcXG4gIDc0OlxcdFxcdHN0cnVjdCB3b3JrX3N0cnVjdCB1bmJpbmRfdztcXG4gIDc1OlxcdH07XFxuICA3NjpcXHRcXG4gIDc3OlxcdCNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWTUVNKVxcbiAgNzg6XFx0LyogT3duZXIgb2YgdGhlIGRtYS1idWYgY2h1bmtzIGluc2VydGVkIGludG8gdGhlIGdlbiBwb29sLiBFYWNoIHNjYXR0ZXJsaXN0XFxuICA3OTpcXHQgKiBlbnRyeSBmcm9tIHRoZSBkbWFidWYgaXMgaW5zZXJ0ZWQgaW50byB0aGUgZ2VucG9vbCBhcyBhIGNodW5rLCBhbmQgbmVlZHNcXG4gIDgwOlxcdCAqIHRoaXMgb3duZXIgc3RydWN0IHRvIGtlZXAgdHJhY2sgb2Ygc29tZSBtZXRhZGF0YSBuZWNlc3NhcnkgdG8gY3JlYXRlXFxuICA4MTpcXHQgKiBhbGxvY2F0aW9ucyBmcm9tIHRoaXMgY2h1bmsuXFxuICA4MjpcXHQgKi9cXG4gIDgzOlxcdHN0cnVjdCBkbWFidWZfZ2VucG9vbF9jaHVua19vd25lciB7XFxuICA4NDpcXHRcXHRzdHJ1Y3QgbmV0X2lvdl9hcmVhIGFyZWE7XFxuICA4NTpcXHRcXHRzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqYmluZGluZztcXG4gIDg2OlxcdFxcbiAgODc6XFx0XFx0LyogZG1hX2FkZHIgb2YgdGhlIHN0YXJ0IG9mIHRoZSBjaHVuay4gICovXFxuICA4ODpcXHRcXHRkbWFfYWRkcl90IGJhc2VfZG1hX2FkZHI7XFxuICA4OTpcXHR9O1xcbiAgOTA6XFx0XFxuICA5MTpcXHR2b2lkIF9fbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZ19mcmVlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd3EpO1xcbiAgOTI6XFx0c3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKlxcbiAgOTM6XFx0bmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICp2ZGV2LFxcbiAgOTQ6XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBkZXZpY2UgKmRtYV9kZXYsXFxuICA5NTpcXHRcXHRcXHQgICAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uLFxcbiAgOTY6XFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGludCBkbWFidWZfZmQsIHN0cnVjdCBuZXRkZXZfbmxfc29jayAqcHJpdixcXG4gIDk3OlxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xcbiAgOTg6XFx0c3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKm5ldF9kZXZtZW1fbG9va3VwX2RtYWJ1Zih1MzIgaWQpO1xcbiAgOTk6XFx0dm9pZCBuZXRfZGV2bWVtX3VuYmluZF9kbWFidWYoc3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKmJpbmRpbmcpO1xcbiAxMDA6XFx0aW50IG5ldF9kZXZtZW1fYmluZF9kbWFidWZfdG9fcXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHJ4cV9pZHgsXFxuIDEwMTpcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKmJpbmRpbmcsXFxuIDEwMjpcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcXG4gMTAzOlxcdFxcbiAxMDQ6XFx0c3RhdGljIGlubGluZSBzdHJ1Y3QgZG1hYnVmX2dlbnBvb2xfY2h1bmtfb3duZXIgKlxcbiAxMDU6XFx0bmV0X2Rldm1lbV9pb3ZfdG9fY2h1bmtfb3duZXIoY29uc3Qgc3RydWN0IG5ldF9pb3YgKm5pb3YpXFxuIDEwNjpcXHR7XFxuIDEwNzpcXHRcXHRzdHJ1Y3QgbmV0X2lvdl9hcmVhICpvd25lciA9IG5ldF9pb3Zfb3duZXIobmlvdik7XFxuIDEwODpcXHRcXG4gMTA5OlxcdFxcdHJldHVybiBjb250YWluZXJfb2Yob3duZXIsIHN0cnVjdCBkbWFidWZfZ2VucG9vbF9jaHVua19vd25lciwgYXJlYSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE1OjExOjQ0LjUxOTk4MjE0OVoiLCJTZXEiOjQ1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDQ3OTg2NTkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHVuZGVyc3RhbmRpbmcsIHByZXNlbnRlZCBhcyBhIGZpcnN0LXBlcnNvbiBhY2NvdW50LCB0YWlsb3JlZCBmb3Igc29tZW9uZSB3aG8ga25vd3MgdGhlaXIgd2F5IGFyb3VuZCB0aGVzZSBzb3J0cyBvZiBzeXN0ZW1zOlxuXG4qKlVuZGVmaW5pbmcgQ09ORklHX05FVF9ERVZNRU06IFdoYXQgTm93PyoqXG5cblJpZ2h0LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucyBvZiAqbm90KiBkZWZpbmluZyBgQ09ORklHX05FVF9ERVZNRU1gLiBJIGltbWVkaWF0ZWx5IHN0YXJ0IHRvIHBpY3R1cmUgdGhlIG5ldHdvcmsgZGV2aWNlIG1lbW9yeSBtYXBwaW5nIHByb2Nlc3MuIEl0J3MgYSBjcml0aWNhbCBwaWVjZSwgaXNuJ3QgaXQ/IFdpdGhvdXQgaXQsIEknbSBleHBlY3Rpbmcgc29tZSBwcmV0dHkgc2lnbmlmaWNhbnQgY2hhbmdlcyBpbiBob3cgdGhlIGtlcm5lbCBpbnRlcmFjdHMgd2l0aCB0aGUgaGFyZHdhcmUuIEkga25vdyB0aGlzIHR5cGljYWxseSBpbXBhY3RzIGhvdyB0aGUgZHJpdmVyIGhhbmRsZXMgRE1BIGJ1ZmZlcnMsIGhvdyBpdCBhY2Nlc3NlcyB0aGUgaGFyZHdhcmUgcmVnaXN0ZXJzLCBhbmQgZ2VuZXJhbGx5IGhvdyBpdCB3b3JrcyB3aXRoIG1lbW9yeS5cblxuSSdtIHN0YXJ0aW5nIHRvIHRoaW5rIGFib3V0IHRoZSBkaWZmZXJlbnQgbmV0d29yayBkcml2ZXJzIGFuZCBob3cgdGhleSBhcmUgY29uZmlndXJlZC4gSSB3aWxsIG5lZWQgdG8gY29uc2lkZXIgd2hldGhlciBpdCdzIGVuYWJsZWQgb3IgZGlzYWJsZWQsIGFuZCBob3cgaXQgZGVhbHMgd2l0aCBhY2Nlc3NpbmcgdGhlIG5ldHdvcmsgZGV2aWNlJ3MgbWVtb3J5LiBNeSBleHBlY3RhdGlvbiBpcyB0aGF0IHRoZSBjb2RlIHBhdGhzIHJlbGF0ZWQgdG8gcGh5c2ljYWwgbWVtb3J5IGFjY2VzcyB0aHJvdWdoIGRldmljZSBtZW1vcnkgd2lsbCBiZSBkaXNhYmxlZCwgcGVyaGFwcyByZXBsYWNlZCB3aXRoIHNvbWV0aGluZyB0aGF0IGludGVyYWN0cyB3aXRoIHRoZSBkZXZpY2UgdmlhIGRpZmZlcmVudCBtZXRob2RzLiBNYXliZSB0aGVyZSdzIHNvbWUga2luZCBvZiBmYWxsYmFjayBvciBhIGRpZmZlcmVudCBtZWNoYW5pc20g4oCTIHBvdGVudGlhbGx5IHNvbWV0aGluZyB1c2luZyBJL08gbWVtb3J5IG1hcHBlZCBpbnRvIHRoZSBrZXJuZWwncyB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UsIG9yIG1heWJlIHNvbWUgb3RoZXIga2luZCBvZiBtZWNoYW5pc20uIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoLiBcblxuSSdtIGFudGljaXBhdGluZyB0aGF0IGFueSBleGlzdGluZyBuZXR3b3JrIGRyaXZlciBjb2RlIHRoYXQgZGlyZWN0bHkgYWNjZXNzZXMgZGV2aWNlIG1lbW9yeSwgYXMgaWYgaXQgd2VyZSByZWd1bGFyIFJBTSwgd2lsbCBsaWtlbHkgYnJlYWsuIEknbGwgbmVlZCB0byBsb29rIGNsb3NlbHkgYXQgdGhlIGRyaXZlciBjb2RlIHRoYXQgdXNlcyBgaW9yZW1hcGAsIG9yIGFueSBvZiB0aG9zZSBkZXZpY2UgbWVtb3J5IGFjY2VzcyBmdW5jdGlvbnMuIEknbGwgbmVlZCB0byBmaW5kIG91dCB3aGF0IGhhcHBlbnMgd2l0aCB0aGUgY29kZSB0aGF0IGRlcGVuZHMgb24gdGhlc2UgbWFjcm9zIGFuZCwgaWYgdGhlcmUgYXJlIGFueSwgd2hldGhlciB0aGVyZSdzIGFuIGFsdGVybmF0aXZlIHRvIHRoZXNlIGZ1bmN0aW9ucyB0byBkZWFsIHdpdGggdGhlIG1lbW9yeS5cblxuRXNzZW50aWFsbHksIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGUgc3lzdGVtIGhhbmRsZXMgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IG9mIHRoZSBuZXR3b3JrIGRldmljZXMgd2hlbiBgQ09ORklHX05FVF9ERVZNRU1gIGlzIG5vdCBhY3RpdmUsIGFuZCBJIG5lZWQgdG8gcHJlZGljdCBob3cgaXQgbWlnaHQgYmVoYXZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDgyNSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTU6MTE6NDguOTY3OTcyMDJaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQwMjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvZGV2bWVtLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMTEwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTEwOlxcdH1cXG4gMTExOlxcdFxcbiAxMTI6XFx0c3RhdGljIGlubGluZSBzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqXFxuIDExMzpcXHRuZXRfZGV2bWVtX2lvdl9iaW5kaW5nKGNvbnN0IHN0cnVjdCBuZXRfaW92ICpuaW92KVxcbiAxMTQ6XFx0e1xcbiAxMTU6XFx0XFx0cmV0dXJuIG5ldF9kZXZtZW1faW92X3RvX2NodW5rX293bmVyKG5pb3YpLVxcdTAwM2ViaW5kaW5nO1xcbiAxMTY6XFx0fVxcbiAxMTc6XFx0XFxuIDExODpcXHRzdGF0aWMgaW5saW5lIHUzMiBuZXRfZGV2bWVtX2lvdl9iaW5kaW5nX2lkKGNvbnN0IHN0cnVjdCBuZXRfaW92ICpuaW92KVxcbiAxMTk6XFx0e1xcbiAxMjA6XFx0XFx0cmV0dXJuIG5ldF9kZXZtZW1faW92X2JpbmRpbmcobmlvdiktXFx1MDAzZWlkO1xcbiAxMjE6XFx0fVxcbiAxMjI6XFx0XFxuIDEyMzpcXHRzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbmV0X2lvdl92aXJ0dWFsX2FkZHIoY29uc3Qgc3RydWN0IG5ldF9pb3YgKm5pb3YpXFxuIDEyNDpcXHR7XFxuIDEyNTpcXHRcXHRzdHJ1Y3QgbmV0X2lvdl9hcmVhICpvd25lciA9IG5ldF9pb3Zfb3duZXIobmlvdik7XFxuIDEyNjpcXHRcXG4gMTI3OlxcdFxcdHJldHVybiBvd25lci1cXHUwMDNlYmFzZV92aXJ0dWFsICtcXG4gMTI4OlxcdFxcdCAgICAgICAoKHVuc2lnbmVkIGxvbmcpbmV0X2lvdl9pZHgobmlvdikgXFx1MDAzY1xcdTAwM2MgUEFHRV9TSElGVCk7XFxuIDEyOTpcXHR9XFxuIDEzMDpcXHRcXG4gMTMxOlxcdHN0YXRpYyBpbmxpbmUgYm9vbFxcbiAxMzI6XFx0bmV0X2Rldm1lbV9kbWFidWZfYmluZGluZ19nZXQoc3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKmJpbmRpbmcpXFxuIDEzMzpcXHR7XFxuIDEzNDpcXHRcXHRyZXR1cm4gcGVyY3B1X3JlZl90cnlnZXQoXFx1MDAyNmJpbmRpbmctXFx1MDAzZXJlZik7XFxuIDEzNTpcXHR9XFxuIDEzNjpcXHRcXG4gMTM3OlxcdHN0YXRpYyBpbmxpbmUgdm9pZFxcbiAxMzg6XFx0bmV0X2Rldm1lbV9kbWFidWZfYmluZGluZ19wdXQoc3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKmJpbmRpbmcpXFxuIDEzOTpcXHR7XFxuIDE0MDpcXHRcXHRwZXJjcHVfcmVmX3B1dChcXHUwMDI2YmluZGluZy1cXHUwMDNlcmVmKTtcXG4gMTQxOlxcdH1cXG4gMTQyOlxcdFxcbiAxNDM6XFx0dm9pZCBuZXRfZGV2bWVtX2dldF9uZXRfaW92KHN0cnVjdCBuZXRfaW92ICpuaW92KTtcXG4gMTQ0OlxcdHZvaWQgbmV0X2Rldm1lbV9wdXRfbmV0X2lvdihzdHJ1Y3QgbmV0X2lvdiAqbmlvdik7XFxuIDE0NTpcXHRcXG4gMTQ2OlxcdHN0cnVjdCBuZXRfaW92ICpcXG4gMTQ3OlxcdG5ldF9kZXZtZW1fYWxsb2NfZG1hYnVmKHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpiaW5kaW5nKTtcXG4gMTQ4OlxcdHZvaWQgbmV0X2Rldm1lbV9mcmVlX2RtYWJ1ZihzdHJ1Y3QgbmV0X2lvdiAqcHBpb3YpO1xcbiAxNDk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE1OjExOjQ4Ljk2ODA0NzgyWiIsIlNlcSI6NDcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3MTEwMzExMzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKk1pc3NpbmcgYCNlbHNlYD8gQSBTdXNwZWN0IENvbmRpdGlvbmFsIENvbXBpbGF0aW9uKipcblxuQWxyaWdodCwgbGV0IG1lIGp1c3QgcGFyc2UgdGhpcyBjb2RlLi4uIEhhbmcgb24gYSBzZWNvbmQuIEknbSBzY2FubmluZyB0aGlzIGNvbmRpdGlvbmFsIGJsb2NrIHdpdGggdGhlIGAjaWYgZGVmaW5lZChDT05GSUdfTkVUX0RFVk1FTSlgIHByZXByb2Nlc3NvciBkaXJlY3RpdmUgYW5kLi4uIHdoZXJlJ3MgdGhlIGNvcnJlc3BvbmRpbmcgYCNlbHNlYCBjbGF1c2U/IFRoaXMgaXMgaW1tZWRpYXRlbHkgYSByZWQgZmxhZy4gQ29uZGl0aW9uYWwgY29tcGlsYXRpb24gaXMgY3JpdGljYWwgZm9yIHBvcnRhYmlsaXR5IGFuZCBlZmZpY2llbnQgcmVzb3VyY2UgdXNhZ2UsIGVzcGVjaWFsbHkgaW4gZW1iZWRkZWQgc3lzdGVtcy4gV2l0aG91dCBhbiBgI2Vsc2VgLCB0aGUgY29kZSB1bmRlciB0aGUgYCNpZmAgZWl0aGVyIGV4ZWN1dGVzIG9yIGlzIGNvbXBsZXRlbHkgZXhjbHVkZWQuXG5cbk15IGd1dCBmZWVsaW5nIGlzIHRoYXQgc29tZXRoaW5nJ3MgbWlzc2luZyBoZXJlLiBJdCdzIHBvc3NpYmxlIHRoZSBjb2RlIGlzIGludGVudGlvbmFsbHkgc3RydWN0dXJlZCB0aGlzIHdheSwgYnV0IHRoZSBsYWNrIG9mIGFuIGBlbHNlYCBzdHJvbmdseSBzdWdnZXN0cyB0aGF0IGVpdGhlcjpcblxuMS4gICoqQSBjcml0aWNhbCBwYXRoIGlzIHVuaGFuZGxlZDoqKiBJZiBgQ09ORklHX05FVF9ERVZNRU1gIGlzICpub3QqIGRlZmluZWQsIHdoYXQgc2hvdWxkIGhhcHBlbj8gSXMgdGhlcmUgYSBkZWZhdWx0IGJlaGF2aW9yIGJha2VkIGluIHNvbWV3aGVyZSBlbHNlIHRoYXQncyBpbXBsaWNpdGx5IHJlbGllZCB1cG9uPyBUaGlzIGlzIHNsb3BweSBhbmQgY2FuIGxlYWQgdG8gdW5leHBlY3RlZCBiZWhhdmlvciBvciBldmVuIGNvbXBpbGF0aW9uIGVycm9ycyBkb3duIHRoZSBsaW5lIGlmIHRoZSBidWlsZCBjb25maWd1cmF0aW9uIGNoYW5nZXMuXG4yLiAgKipSZWR1bmRhbnQgQ29kZSBvciBhIExvZ2ljIEVycm9yOioqIE1heWJlIHRoZSBjb2RlICppbnRlbmRlZCogdG8gaGFuZGxlIHRoZSBhYnNlbmNlIG9mIGBDT05GSUdfTkVUX0RFVk1FTWAgaXMgaW4gZmFjdCBleGVjdXRlZCBldmVyeSB0aW1lLCBidXQgY29uZGl0aW9uYWxseS5cbjMuICAqKkEgcG90ZW50aWFsIGJ1ZzoqKiBBbiBpbnRlbmRlZCBzZWN0aW9uIG9mIGNvZGUgd2FzIGZvcmdvdHRlbi5cblxuSSBuZWVkIHRvIGRpZyBkZWVwZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbnRlbnQgb2YgdGhpcyBlbnRpcmUgc2VjdGlvbi4gSXMgYENPTkZJR19ORVRfREVWTUVNYCBhIGhhcmR3YXJlIGFic3RyYWN0aW9uPyBJcyB0aGUgY29kZSB3aXRoaW4gdGhpcyBgI2lmYCBzZWN0aW9uIHNwZWNpZmljIHRvIGEgcGFydGljdWxhciBtZW1vcnkgbWFwcGluZyBvciBoYXJkd2FyZSBpbnRlcmZhY2U/IERlcGVuZGluZyBvbiB0aGUgY29udGV4dCwgdGhpcyBjb3VsZCBoYXZlIHNlcmlvdXMgaW1wbGljYXRpb25zIGZvciBwb3J0YWJpbGl0eSwgZHJpdmVyIHNlbGVjdGlvbiwgb3IgZXZlbiBzZWN1cml0eSwgaWYgaXQncyBtaXNzaW5nIGNyaXRpY2FsIGJvdW5kYXJ5IGNoZWNrcyB3aXRob3V0IHRoZSBlbHNlLiBJIG5lZWQgdG8gdHJhY2UgdGhpcyBiYWNrIHRvIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMsIHRoZSBzdXJyb3VuZGluZyBjb2RlLCBhbmQgYW55IHJlbGF0ZWQgZG9jdW1lbnRhdGlvbi4gQSBtaXNzaW5nIGBlbHNlYCBjbGF1c2UgaW4gYSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlIGlzIG9mdGVuIGEgc3ltcHRvbSBvZiBzb21ldGhpbmcgZGVlcGVyLCBhbmQgaXQncyBzb21ldGhpbmcgSSBuZWVkIHRvIGZ1bGx5IHVuZGVyc3RhbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1OTI1LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNToxMTo1My42NzkwODExMzNaIiwiU2VxIjo0OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQ0MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvZGV2bWVtLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMTUwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTUwOlxcdFxcbiAxNTE6XFx0c3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKlxcbiAxNTI6XFx0bmV0X2Rldm1lbV9nZXRfYmluZGluZyhzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCBkbWFidWZfaWQpO1xcbiAxNTM6XFx0c3RydWN0IG5ldF9pb3YgKlxcbiAxNTQ6XFx0bmV0X2Rldm1lbV9nZXRfbmlvdl9hdChzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqYmluZGluZywgc2l6ZV90IGFkZHIsXFxuIDE1NTpcXHRcXHRcXHQgICAgICAgc2l6ZV90ICpvZmYsIHNpemVfdCAqc2l6ZSk7XFxuIDE1NjpcXHRcXG4gMTU3OlxcdCNlbHNlXFxuIDE1ODpcXHRzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZztcXG4gMTU5OlxcdFxcbiAxNjA6XFx0c3RhdGljIGlubGluZSB2b2lkXFxuIDE2MTpcXHRuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nX3B1dChzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqYmluZGluZylcXG4gMTYyOlxcdHtcXG4gMTYzOlxcdH1cXG4gMTY0OlxcdFxcbiAxNjU6XFx0c3RhdGljIGlubGluZSB2b2lkIG5ldF9kZXZtZW1fZ2V0X25ldF9pb3Yoc3RydWN0IG5ldF9pb3YgKm5pb3YpXFxuIDE2NjpcXHR7XFxuIDE2NzpcXHR9XFxuIDE2ODpcXHRcXG4gMTY5OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBuZXRfZGV2bWVtX3B1dF9uZXRfaW92KHN0cnVjdCBuZXRfaW92ICpuaW92KVxcbiAxNzA6XFx0e1xcbiAxNzE6XFx0fVxcbiAxNzI6XFx0XFxuIDE3MzpcXHRzdGF0aWMgaW5saW5lIHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpcXG4gMTc0OlxcdG5ldF9kZXZtZW1fYmluZF9kbWFidWYoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqdmRldixcXG4gMTc1OlxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgZGV2aWNlICpkbWFfZGV2LFxcbiAxNzY6XFx0XFx0XFx0ICAgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbixcXG4gMTc3OlxcdFxcdFxcdCAgICAgICB1bnNpZ25lZCBpbnQgZG1hYnVmX2ZkLFxcbiAxNzg6XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBuZXRkZXZfbmxfc29jayAqcHJpdixcXG4gMTc5OlxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuIDE4MDpcXHR7XFxuIDE4MTpcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU9QTk9UU1VQUCk7XFxuIDE4MjpcXHR9XFxuIDE4MzpcXHRcXG4gMTg0OlxcdHN0YXRpYyBpbmxpbmUgc3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKm5ldF9kZXZtZW1fbG9va3VwX2RtYWJ1Zih1MzIgaWQpXFxuIDE4NTpcXHR7XFxuIDE4NjpcXHRcXHRyZXR1cm4gTlVMTDtcXG4gMTg3OlxcdH1cXG4gMTg4OlxcdFxcbiAxODk6XFx0c3RhdGljIGlubGluZSB2b2lkXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE1OjExOjUzLjY3OTE1NjgyM1oiLCJTZXEiOjQ5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjE4NTMxMzk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRGVwZW5kZW5jeSBDaGFpbiBmb3IgTmV0bGluayBUZXN0aW5nKipcblxuT2theSwgc28gSSBzZWUgdGhhdCBgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZmAgaXMgZ29pbmcgdG8gY3JhcCBvdXQgd2l0aCBgLUVPUE5PVFNVUFBgIGlmIGBDT05GSUdfTkVUX0RFVk1FTWAgaXNuJ3Qgc2V0LiBUaGF0J3Mgbm8gZ29vZCBmb3IgYWN0dWFsbHkgdGVzdGluZyB0aGUgaW50ZW5kZWQgZnVuY3Rpb25hbGl0eS4gSG93ZXZlciwgYG5ldGRldl9ubF9iaW5kX3J4X2RvaXRgIGlzIGFsd2F5cyBjb21waWxlZCwgd2hpY2ggaXMgZ3JlYXQgYmVjYXVzZSBpdCBtZWFucyB0aGVyZSdzIHNvbWV0aGluZyB0byBob29rIGludG8uXG5cblNvLCB0byBwcm9wZXJseSB0ZXN0IHRoZSBjb3JlIGxvZ2ljIG9mIHdoYXQgSSdtIGFmdGVyLCBJIGFic29sdXRlbHkgKm5lZWQqIGBDT05GSUdfTkVUX0RFVk1FTWAgZW5hYmxlZC4gTm8gd2F5IGFyb3VuZCBpdC5cblxuTm93LCBsZXQncyB0cmFjZSB0aGlzIGRlcGVuZGVuY3kuIFJpZ2h0LCBgQ09ORklHX05FVF9ERVZNRU1gIHJlbGllcyBvbiBib3RoIGBETUFfU0hBUkVEX0JVRkZFUmAgYW5kIGBQQUdFX1BPT0xgLiBUaGF0J3MgdGhlIGZ1bGwgY2hhaW4uXG5cblRoZXJlZm9yZSwgZm9yIG15IGBFbmFibGVDb25maWdzYCBsaXN0LCBJJ20gZ29pbmcgdG8gbmVlZDogYFtcIk5FVF9ERVZNRU1cIiwgXCJETUFfU0hBUkVEX0JVRkZFUlwiLCBcIlBBR0VfUE9PTFwiXWAuIFRob3NlIHRocmVlIGFyZSBlc3NlbnRpYWwgdG8gcHJvcGVybHkgZW5hYmxlIGFuZCB0ZXN0IHRoZSByZWxldmFudCBjb21wb25lbnRzLlxuXG5Ob3csIGEgcXVpY2sgY2hlY2sgdG8gY29uZmlybTogSXMgYG5ldGRldl9ubF9iaW5kX3J4X2RvaXRgIGFjdHVhbGx5IHJlYWNoYWJsZT8gSXQncyBhIG5ldGxpbmsgaGFuZGxlciwgYW5kIGl0J3MgbGlrZWx5IHBhcnQgb2YgdGhlIGBuZXRkZXZfbmxfZmFtaWx5YC4gTGV0IG1lIGp1c3QgdmVyaWZ5IHRoYXQgbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzAxNiwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE1OjExOjU4LjI5NzY5MDg3N1oiLCJTZXEiOjUwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc5ODY3OTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmV0ZGV2X25sX2JpbmRfcnhfZG9pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9uZXRkZXYtZ2VubC1nZW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9uZXRkZXYtZ2VubC1nZW4uYz0xMzg9c3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX3NwbGl0X29wcyBuZXRkZXZfbmxfb3BzW10gPSB7XFxuLS1cXG5uZXQvY29yZS9uZXRkZXYtZ2VubC1nZW4uYy0yMTktXFx0XFx0LmNtZFxcdFxcdD0gTkVUREVWX0NNRF9CSU5EX1JYLFxcbm5ldC9jb3JlL25ldGRldi1nZW5sLWdlbi5jOjIyMDpcXHRcXHQuZG9pdFxcdFxcdD0gbmV0ZGV2X25sX2JpbmRfcnhfZG9pdCxcXG5uZXQvY29yZS9uZXRkZXYtZ2VubC1nZW4uYy0yMjEtXFx0XFx0LnBvbGljeVxcdFxcdD0gbmV0ZGV2X2JpbmRfcnhfbmxfcG9saWN5LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNToxMTo1OC4zNDU2ODE4MDJaIiwiU2VxIjo1MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODM2OTYxNTA4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE5ldGxpbmsgSGFuZGxlcioqXG5cbk9rYXksIHNvIHRoaXMgaXMgZGVmaW5pdGVseSBhIG5ldGxpbmsgaGFuZGxlci4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGNvbmZpcm0gdGhlIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlLiBJJ2xsIHN0YXJ0IGJ5IHZlcmlmeWluZyB0aGF0IGBuZXRkZXZfbmxfc29ja19wcml2X2luaXRgIGlzIGNhbGxlZCwgd2hpY2ggaXQgYXBwZWFycyB0byBiZS4gSXQncyByZWdpc3RlcmVkIHdpdGhpbiBgbmV0ZGV2X25sX2ZhbWlseWAsIGFuZCBgc29ja19wcml2X2luaXRgIGlzIGluZGVlZCBjYWxsZWQgd2hlbiBhIG5ldGxpbmsgc29ja2V0IGlzIGNyZWF0ZWQgZm9yIHRoaXMgZmFtaWx5LCBjb25maXJtaW5nIHRoZSBmdW5jdGlvbmFsIHJlYWNoYWJpbGl0eSBvZiB0aGVzZSBjaGFuZ2VzLlxuXG5HaXZlbiB0aGF0LCBJIG5lZWQgdG8gZm9jdXMgbXkgYXR0ZW50aW9uIG9uIHNldmVyYWwga2V5IHN5bWJvbHM6IGBuZXRkZXZfbmxfYmluZF9yeF9kb2l0YCwgYG5ldGRldl9ubF9iaW5kX3R4X2RvaXRgLCBgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZmAsIGBuZXRfZGV2bWVtX3VuYmluZF9kbWFidWZgLCBgbmV0ZGV2X25sX3NvY2tfcHJpdl9pbml0YCwgYW5kIGBuZXRkZXZfbmxfc29ja19wcml2X2Rlc3Ryb3lgLiBJIG5lZWQgdG8gcmV2aWV3IHRoZXNlIGZ1bmN0aW9ucyBpbiBkZXRhaWwuXG5cbk5vdywgbGV0IG1lIGRvdWJsZS1jaGVjayB0aGUgdmlzaWJpbGl0eSBvZiB0aGVzZSBmdW5jdGlvbnMuIENoZWNraW5nIGBuZXQvY29yZS9uZXRkZXYtZ2VubC5jYCwgYm90aCBgbmV0ZGV2X25sX3NvY2tfcHJpdl9pbml0YCBhbmQgYG5ldGRldl9ubF9zb2NrX3ByaXZfZGVzdHJveWAgYXJlIGRlY2xhcmVkIGFzIG5vbi1zdGF0aWMsIHdoaWNoIGlzIHdoYXQgSSBleHBlY3RlZC4gU2ltaWxhcmx5LCBpbiBgbmV0L2NvcmUvZGV2bWVtLmNgLCBJIHNlZSB0aGF0IGBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmYCBhbmQgYG5ldF9kZXZtZW1fdW5iaW5kX2RtYWJ1ZmAgYXJlIGFsc28gbm90IHN0YXRpYy4gRmluYWxseSwgbG9va2luZyBiYWNrIGF0IGBuZXQvY29yZS9uZXRkZXYtZ2VubC5jYCwgYm90aCBgbmV0ZGV2X25sX2JpbmRfcnhfZG9pdGAgYW5kIGBuZXRkZXZfbmxfYmluZF90eF9kb2l0YCBhcmUgYWxzbyBub24tc3RhdGljLCBhcyBleHBlY3RlZC5cblxuSSBuZWVkIHRvIGNvbmZpcm0gaWYgdGhlcmUgYXJlIGFueSBvdGhlciByZWxhdGVkIGZ1bmN0aW9ucy4gTGV0IG1lIHJldmlldyB0aGF0IHF1aWNrbHkuIE5vLCB0aGVyZSBhcmVuJ3QuXG5cbkxhc3RseSwgSSBzaG91bGQgY2hlY2sgd2hldGhlciBhbnkgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBpcyByZXF1aXJlZCwgbG9va2luZyBhdCB0aGUgYERNQV9TSEFSRURfQlVGRkVSYCBjb25maWd1cmF0aW9uIG9wdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc2ODQsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTU6MTI6MDYuNzE1Mjk5NDY4WiIsIlNlcSI6NTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzEzMzg2MDkzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBETUFfU0hBUkVEX0JVRkZFUlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9iYXNlL0tjb25maWc9MjEzPXNvdXJjZSBcXFwiZHJpdmVycy9iYXNlL3JlZ21hcC9LY29uZmlnXFxcIlxcbmRyaXZlcnMvYmFzZS9LY29uZmlnLTIxNC1cXG5kcml2ZXJzL2Jhc2UvS2NvbmZpZzoyMTU6Y29uZmlnIERNQV9TSEFSRURfQlVGRkVSXFxuZHJpdmVycy9iYXNlL0tjb25maWctMjE2LVxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTU6MTI6MDguNDI4NjkyNTUxWiIsIlNlcSI6NTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY0OTA2MzE3NDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqSW5zcGVjdGluZyB0aGUgYFBBR0VfUE9PTGAqKlxuXG5BbHJpZ2h0LCBiZWZvcmUgZGl2aW5nIHRvbyBkZWVwLCBJIG5lZWQgdG8gdGFrZSBhIHF1aWNrIGxvb2sgYXQgdGhlIGBQQUdFX1BPT0xgLiBJdOKAmXMgdGhlIGxpa2VseSBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBtZW1vcnkgYWxsb2NhdGlvbiBhbmQgcG90ZW50aWFsIGlzc3Vlcy4gRGVwZW5kaW5nIG9uIHRoZSBzeXN0ZW0gYXJjaGl0ZWN0dXJlIGFuZCB0aGUgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24sIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQgd2l0aGluIHRoZSBgUEFHRV9QT09MYCBnaXZlcyBtZSBhIGhpZ2gtbGV2ZWwgdmlldyBvZiBob3cgYXZhaWxhYmxlIG1lbW9yeSBpcyBvcmdhbml6ZWQuIElzIGl0IGEgYnVkZHkgc3lzdGVtLCBhIHNsYWIgYWxsb2NhdG9yLCBvciBzb21ldGhpbmcgbW9yZSBzcGVjaWFsaXplZD8gVGhlIHByZXNlbmNlIG9mIGZyZWUgcGFnZSBsaXN0cywgdXNhZ2UgY291bnRzLCBhbmQgcG9zc2libHkgZXZlbiBmcmFnbWVudGF0aW9uIG1ldHJpY3Mgd2lsbCBxdWlja2x5IGdpdmUgbWUgdGhlIGxheSBvZiB0aGUgbGFuZC4gSSBuZWVkIHRvIGNoZWNrIHRoZSBkYXRhIHN0cnVjdHVyZXMsIHNwZWNpZmljYWxseSB0aGUgaGVhZGVycywgdGhlIHBvaW50ZXJzLCBhbmQgYW55IGFzc29jaWF0ZWQgbWV0YWRhdGEsIHRvIGdldCBhIHNlbnNlIG9mIGhvdyByZXF1ZXN0cyBhcmUgaGFuZGxlZCBhbmQgaWYgdGhlcmUgYXJlIGFueSBvYnZpb3VzIGJvdHRsZW5lY2tzIG9yIHJlZCBmbGFncy4gSSdsbCBiZSBsb29raW5nIGZvciBpbmNvbnNpc3RlbmNpZXMsIHBhcnRpY3VsYXJseSBhcm91bmQgdGhlIGJvdW5kYXJpZXMgb2YgYWxsb2NhdGVkIHBhZ2VzLiBBcmUgdGhlcmUgYW55IHVudXN1YWwgcGF0dGVybnM/IElzIGl0IGdyb3dpbmcvc2hyaW5raW5nIGFzIGV4cGVjdGVkPyBJIG5lZWQgdG8gYW5hbHl6ZSBpdHMgY3VycmVudCBzdGF0ZSwgY3Jvc3MtcmVmZXJlbmNlIGl0IHdpdGggcmVjZW50IG9wZXJhdGlvbnMsIGFuZCBkZXRlcm1pbmUgaWYgaXQncyBjb250cmlidXRpbmcgdG8gdGhlIG9ic2VydmVkIGJlaGF2aW9yIG9yIHBlcmZvcm1hbmNlIHByb2JsZW1zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODg0MSwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTU6MTI6MTQuOTE5MzI3MzcxWiIsIlNlcSI6NTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDY0MDY3OTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBQQUdFX1BPT0xcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9LY29uZmlnPTQ4Nz1jb25maWcgTkVUX0RFVkxJTktcXG4tLVxcbm5ldC9LY29uZmlnLTQ5MC1cXG5uZXQvS2NvbmZpZzo0OTE6Y29uZmlnIFBBR0VfUE9PTFxcbm5ldC9LY29uZmlnLTQ5Mi1cXHRib29sXFxubmV0L0tjb25maWctNDkzLVxcbm5ldC9LY29uZmlnOjQ5NDpjb25maWcgUEFHRV9QT09MX1NUQVRTXFxubmV0L0tjb25maWctNDk1LVxcdGRlZmF1bHQgblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNToxMjoxNi45ODM0MDYyMThaIiwiU2VxIjo1NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUwOTgxNjM0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkluaXRpYWwgRGlhZ25vc3RpYyBRdWVyeSoqXG5cblJpZ2h0LCBsZXQncyBzdGFydCB3aXRoIGEgcXVpY2sgY2hlY2sgb24gYE5FVF9ERVZNRU1gLiBUaGF0J3MgdXN1YWxseSB0aGUgZmlyc3QgcGxhY2UgSSBsb29rIHdoZW4gZGVhbGluZyB3aXRoIG5ldHdvcmsgZGV2aWNlIGRyaXZlciBpc3N1ZXMsIGVzcGVjaWFsbHkgYW55dGhpbmcgcmVsYXRlZCB0byBtZW1vcnkgYWxsb2NhdGlvbiBvciBhY2Nlc3MuIFRoaXMgY29tbWFuZCBpcyBwcmV0dHkgbXVjaCBhIGZ1bmRhbWVudGFsIHN0YXJ0aW5nIHBvaW50LiBJdCBwcm92aWRlcyBhIHF1aWNrIGFuZCBkaXJ0eSB3YXkgdG8gZGlhZ25vc2UgaGFyZHdhcmUgYWRkcmVzcyBtYXBwaW5nIHByb2JsZW1zLCBvciBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZXMuIENoZWNraW5nIGl0IHdvbid0IHNvbHZlIGV2ZXJ5dGhpbmcsIG9mIGNvdXJzZSwgYnV0IGl0J3MgYSB2ZXJ5IGZhc3QgZGlhZ25vc3RpYyB0aGF0IGhhcyBwcm92ZW4gdXNlZnVsIGluIHRoZSBwYXN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTIyOSwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE1OjEyOjIwLjQ5MzIyNTY3NloiLCJTZXEiOjU2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcyNDY1NzgyMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkVUX0RFVk1FTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L0tjb25maWc9NjY9Y29uZmlnIFNLQl9FWFRFTlNJT05TXFxuLS1cXG5uZXQvS2NvbmZpZy02OC1cXG5uZXQvS2NvbmZpZzo2OTpjb25maWcgTkVUX0RFVk1FTVxcbm5ldC9LY29uZmlnLTcwLVxcdGRlZl9ib29sIHlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTU6MTI6MjIuMjE3ODg4NDY4WiIsIlNlcSI6NTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYzMjQyODY5MDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBOZXRkZXYgTmV0bGluayBTb2NrZXQgQmluZGluZyBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBJIHNlZSBpdCdzIHRvdWNoaW5nIHRoZSBuZXRkZXYgbmV0bGluayBzb2NrZXQgYmluZGluZ3MgaGFuZGxpbmcuIFNwZWNpZmljYWxseSwgaXQncyBzd2FwcGluZyB0aGUgYGJpbmRpbmdzYCBsaXN0IGZvciBhbiBgeGFycmF5YCBhbmQgZ2V0dGluZyByaWQgb2YgdGhlIGBsb2NrYCBtdXRleCB3aXRoaW4gdGhlIGBzdHJ1Y3QgbmV0ZGV2X25sX3NvY2tgLiBNeSBleHBlcnQgaW5zdGluY3RzIHRlbGwgbWUgdGhpcyBpcyBhIHBvdGVudGlhbGx5IHNpZ25pZmljYW50IGFyZWEgZm9yIGV4cGxvcmF0aW9uLCBzcGVjaWZpY2FsbHkgYmVjYXVzZSBpdCdzIGFsdGVyaW5nIGNvcmUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBjb25jdXJyZW5jeSBtZWNoYW5pc21zLiBJdCBpbXBhY3RzIGhvdyB0aGUgc3lzdGVtIGRlYWxzIHdpdGggbmV0bGluayBjb21tYW5kcywgYWZmZWN0aW5nIGZ1bmN0aW9ucyBzdWNoIGFzIGBuZXRkZXZfbmxfYmluZF9yeF9kb2l0YCwgYG5ldGRldl9ubF9iaW5kX3R4X2RvaXRgLCBgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZmAsIGFuZCBgbmV0X2Rldm1lbV91bmJpbmRfZG1hYnVmYC4gVGhlc2UgYXJlIGFsbCBjcnVjaWFsIHBvaW50cyBvZiBpbnRlcmFjdGlvbiBmb3IgYmluZGluZyBhbmQgdW5iaW5kaW5nIGRldmljZXMsIGFuZCwgdGhlcmVmb3JlLCB0aGV5IGFyZSB3b3J0aCBhIGRlZXBlciBpbnZlc3RpZ2F0aW9uLlxuXG5UaGUgcGF0Y2ggaXRzZWxmIGFwcGVhcnMgZnVuY3Rpb25hbGx5IHNvdW5kLCBmb2N1c2luZyBvbiBtZW1vcnkgbWFuYWdlbWVudCBhbmQgc3luY2hyb25pemF0aW9uLCB3aGljaCBpcyBhbHdheXMgYW4gaW50ZXJlc3RpbmcgdGFyZ2V0IGZvciBmdXp6aW5nLiBUbyByZWFsbHkgdGVzdCB0aGlzIHByb3Blcmx5LCBJJ2xsIG5lZWQgdG8gbWFrZSBzdXJlIGBORVRfREVWTUVNYCBpcyBlbmFibGVkLCBnaXZlbiBpdHMgcm9sZSBpbiB0aGUgbmV0ZGV2IG1lbW9yeSBzcGFjZSBhbGxvY2F0aW9uLiBJIHNob3VsZCBhbHNvIGJlIG1pbmRmdWwgb2YgaXRzIGRlcGVuZGVuY2llcywgcGFydGljdWxhcmx5IGBETUFfU0hBUkVEX0JVRkZFUmAgYW5kIGBQQUdFX1BPT0xgLCBhcyB0aGVzZSB3aWxsIGxpa2VseSBiZSBjcml0aWNhbCBmb3IgZW5hYmxpbmcgdGhlIHJlbGV2YW50IGNvZGUgcGF0aHMuXG5cbkkgc2hvdWxkIGFsc28gbWFrZSBhIG5vdGUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTQ2NiwiT3V0cHV0VG9rZW5zIjoyODgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTU6MTI6MjguNTQyMTc4ODk0WiIsIlNlcSI6NTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzg1NDU5NTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9ERVZNRU1cIixcbiAgICBcIkRNQV9TSEFSRURfQlVGRkVSXCIsXG4gICAgXCJQQUdFX1BPT0xcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZXRkZXZfbmxfYmluZF9yeF9kb2l0XCIsXG4gICAgXCJuZXRkZXZfbmxfYmluZF90eF9kb2l0XCIsXG4gICAgXCJuZXRfZGV2bWVtX2JpbmRfZG1hYnVmXCIsXG4gICAgXCJuZXRfZGV2bWVtX3VuYmluZF9kbWFidWZcIixcbiAgICBcIm5ldGRldl9ubF9zb2NrX3ByaXZfaW5pdFwiLFxuICAgIFwibmV0ZGV2X25sX3NvY2tfcHJpdl9kZXN0cm95XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG5ldGRldiBuZXRsaW5rIHNvY2tldCBiaW5kaW5ncyBoYW5kbGluZywgY2hhbmdpbmcgdGhlIGBiaW5kaW5nc2AgbGlzdCB0byBhbiBgeGFycmF5YCBhbmQgcmVtb3ZpbmcgdGhlIGBsb2NrYCBtdXRleCBmcm9tIGBzdHJ1Y3QgbmV0ZGV2X25sX3NvY2tgLiBUaGlzIGFmZmVjdHMgdGhlIGBuZXRkZXZfbmxfYmluZF9yeF9kb2l0YCwgYG5ldGRldl9ubF9iaW5kX3R4X2RvaXRgLCBgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZmAsIGFuZCBgbmV0X2Rldm1lbV91bmJpbmRfZG1hYnVmYCBmdW5jdGlvbnMsIHdoaWNoIGFyZSByZWFjaGFibGUgdmlhIG5ldGxpbmsgY29tbWFuZHMuIFRoZSBjaGFuZ2VzIGFyZSBmdW5jdGlvbmFsIGFuZCBpbnZvbHZlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBzeW5jaHJvbml6YXRpb24sIG1ha2luZyB0aGVtIHdvcnRoIGZ1enppbmcuIFRoZSBgTkVUX0RFVk1FTWAgZmVhdHVyZSBhbmQgaXRzIGRlcGVuZGVuY2llcyAoYERNQV9TSEFSRURfQlVGRkVSYCBhbmQgYFBBR0VfUE9PTGApIG11c3QgYmUgZW5hYmxlZCB0byB0ZXN0IHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9ERVZNRU1cIixcbiAgICBcIkRNQV9TSEFSRURfQlVGRkVSXCIsXG4gICAgXCJQQUdFX1BPT0xcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZXRkZXZfbmxfYmluZF9yeF9kb2l0XCIsXG4gICAgXCJuZXRkZXZfbmxfYmluZF90eF9kb2l0XCIsXG4gICAgXCJuZXRfZGV2bWVtX2JpbmRfZG1hYnVmXCIsXG4gICAgXCJuZXRfZGV2bWVtX3VuYmluZF9kbWFidWZcIixcbiAgICBcIm5ldGRldl9ubF9zb2NrX3ByaXZfaW5pdFwiLFxuICAgIFwibmV0ZGV2X25sX3NvY2tfcHJpdl9kZXN0cm95XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG5ldGRldiBuZXRsaW5rIHNvY2tldCBiaW5kaW5ncyBoYW5kbGluZywgY2hhbmdpbmcgdGhlIGBiaW5kaW5nc2AgbGlzdCB0byBhbiBgeGFycmF5YCBhbmQgcmVtb3ZpbmcgdGhlIGBsb2NrYCBtdXRleCBmcm9tIGBzdHJ1Y3QgbmV0ZGV2X25sX3NvY2tgLiBUaGlzIGFmZmVjdHMgdGhlIGBuZXRkZXZfbmxfYmluZF9yeF9kb2l0YCwgYG5ldGRldl9ubF9iaW5kX3R4X2RvaXRgLCBgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZmAsIGFuZCBgbmV0X2Rldm1lbV91bmJpbmRfZG1hYnVmYCBmdW5jdGlvbnMsIHdoaWNoIGFyZSByZWFjaGFibGUgdmlhIG5ldGxpbmsgY29tbWFuZHMuIFRoZSBjaGFuZ2VzIGFyZSBmdW5jdGlvbmFsIGFuZCBpbnZvbHZlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBzeW5jaHJvbml6YXRpb24sIG1ha2luZyB0aGVtIHdvcnRoIGZ1enppbmcuIFRoZSBgTkVUX0RFVk1FTWAgZmVhdHVyZSBhbmQgaXRzIGRlcGVuZGVuY2llcyAoYERNQV9TSEFSRURfQlVGRkVSYCBhbmQgYFBBR0VfUE9PTGApIG11c3QgYmUgZW5hYmxlZCB0byB0ZXN0IHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNToxMjoyOC42MjA3MzI5MTZaIiwiU2VxIjo1OSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg1NzgzNjIzNzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNToxMjoyOC42MjE0MzAwODZaIiwiU2VxIjo2MCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6ODU3NzY2MDE3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVwbGFjZXMgYSBsaW5rZWQgbGlzdCBhbmQgYSBtdXRleCB3aXRoIGFuIHhhcnJheSBmb3IgbWFuYWdpbmcgZG1hYnVmIGJpbmRpbmdzIGluIGBzdHJ1Y3QgbmV0ZGV2X25sX3NvY2tgLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgYWxsb2NhdGUgbmV3IGJ1ZmZlcnMgdGhhdCBjb3VsZCBiZSBsZWZ0IHVuaW5pdGlhbGl6ZWQuIEFueSBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyAoc3VjaCBhcyByYWNlIGNvbmRpdGlvbnMgZnJvbSB0aGUgcmVtb3ZlZCBtdXRleCwgdXNlLWFmdGVyLWZyZWUsIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMpIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3ZTViYzVmNjc0MzIxNmJiMjRmMzgxYzViZGE5NjE0YTA3NGFhMDg2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMTEgMTU6MTA6MTIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRkZXZfbmV0bGluay5oIGIvaW5jbHVkZS9uZXQvbmV0ZGV2X25ldGxpbmsuaFxuaW5kZXggMDc1OTYyZGJlNzQzYi4uNDVhNGE0ODJkNDJlNCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L25ldGRldl9uZXRsaW5rLmhcbisrKyBiL2luY2x1ZGUvbmV0L25ldGRldl9uZXRsaW5rLmhcbkBAIC0yLDExICsyLDEwIEBAXG4gI2lmbmRlZiBfX05FVF9ORVRERVZfTkVUTElOS19IXG4gI2RlZmluZSBfX05FVF9ORVRERVZfTkVUTElOS19IXG4gXG4tI2luY2x1ZGUgXHUwMDNjbGludXgvbGlzdC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgveGFycmF5LmhcdTAwM2VcbiBcbiBzdHJ1Y3QgbmV0ZGV2X25sX3NvY2sge1xuLVx0c3RydWN0IG11dGV4IGxvY2s7XG4tXHRzdHJ1Y3QgbGlzdF9oZWFkIGJpbmRpbmdzO1xuK1x0c3RydWN0IHhhcnJheSBiaW5kaW5ncztcbiB9O1xuIFxuICNlbmRpZlx0LyogX19ORVRfTkVUREVWX05FVExJTktfSCAqL1xuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Rldm1lbS5jIGIvbmV0L2NvcmUvZGV2bWVtLmNcbmluZGV4IDk1N2Q2Yjk2MjE2YjMuLmJkZjhhMDc5OWE0MjcgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9kZXZtZW0uY1xuKysrIGIvbmV0L2NvcmUvZGV2bWVtLmNcbkBAIC0xMzQsOCArMTM0LDggQEAgdm9pZCBuZXRfZGV2bWVtX3VuYmluZF9kbWFidWYoc3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKmJpbmRpbmcpXG4gXHQgKi9cbiBcdHN5bmNocm9uaXplX25ldCgpO1xuIFxuLVx0aWYgKGJpbmRpbmctXHUwMDNlbGlzdC5uZXh0KVxuLVx0XHRsaXN0X2RlbChcdTAwMjZiaW5kaW5nLVx1MDAzZWxpc3QpO1xuK1x0aWYgKGJpbmRpbmctXHUwMDNlc29ja19wcml2KVxuK1x0XHR4YV9lcmFzZShcdTAwMjZiaW5kaW5nLVx1MDAzZXNvY2tfcHJpdi1cdTAwM2ViaW5kaW5ncywgYmluZGluZy1cdTAwM2VpZCk7XG4gXG4gXHR4YV9mb3JfZWFjaChcdTAwMjZiaW5kaW5nLVx1MDAzZWJvdW5kX3J4cXMsIHhhX2lkeCwgcnhxKSB7XG4gXHRcdGNvbnN0IHN0cnVjdCBwcF9tZW1vcnlfcHJvdmlkZXJfcGFyYW1zIG1wX3BhcmFtcyA9IHtcbkBAIC0xOTMsNiArMTkzLDcgQEAgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICp2ZGV2LFxuIFx0c3RydWN0IGRtYV9idWYgKmRtYWJ1ZjtcbiBcdHVuc2lnbmVkIGludCBzZ19pZHgsIGk7XG4gXHR1bnNpZ25lZCBsb25nIHZpcnR1YWw7XG4rXHR2b2lkICpyZXM7XG4gXHRpbnQgZXJyO1xuIFxuIFx0aWYgKCFkbWFfZGV2KSB7XG5AQCAtMzI1LDEwICszMjYsMTcgQEAgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICp2ZGV2LFxuIFx0aWYgKGVyciBcdTAwM2MgMClcbiBcdFx0Z290byBlcnJfZnJlZV9jaHVua3M7XG4gXG4tXHRsaXN0X2FkZChcdTAwMjZiaW5kaW5nLVx1MDAzZWxpc3QsIFx1MDAyNnByaXYtXHUwMDNlYmluZGluZ3MpO1xuK1x0YmluZGluZy1cdTAwM2Vzb2NrX3ByaXYgPSBwcml2O1xuK1x0cmVzID0geGFfc3RvcmUoXHUwMDI2cHJpdi1cdTAwM2ViaW5kaW5ncywgYmluZGluZy1cdTAwM2VpZCwgYmluZGluZywgR0ZQX0tFUk5FTCk7XG4rXHRpZiAoeGFfaXNfZXJyKHJlcykpIHtcbitcdFx0ZXJyID0geGFfZXJyKHJlcyk7XG4rXHRcdGdvdG8gZXJyX2VyYXNlX2RtYWJ1Zl9iaW5kaW5ncztcbitcdH1cbiBcbiBcdHJldHVybiBiaW5kaW5nO1xuIFxuK2Vycl9lcmFzZV9kbWFidWZfYmluZGluZ3M6XG4rXHR4YV9lcmFzZShcdTAwMjZuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5ncywgYmluZGluZy1cdTAwM2VpZCk7XG4gZXJyX2ZyZWVfY2h1bmtzOlxuIFx0Z2VuX3Bvb2xfZm9yX2VhY2hfY2h1bmsoYmluZGluZy1cdTAwM2VjaHVua19wb29sLFxuIFx0XHRcdFx0bmV0X2Rldm1lbV9kbWFidWZfZnJlZV9jaHVua19vd25lciwgTlVMTCk7XG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2bWVtLmggYi9uZXQvY29yZS9kZXZtZW0uaFxuaW5kZXggMzg1MmE1NjAzNmNiNC4uYmY3N2U1YTlhOGZlNyAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL2Rldm1lbS5oXG4rKysgYi9uZXQvY29yZS9kZXZtZW0uaFxuQEAgLTQ5LDEwICs0OSwxMCBAQCBzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyB7XG4gXHQgKi9cbiBcdHN0cnVjdCBwZXJjcHVfcmVmIHJlZjtcbiBcbi1cdC8qIFRoZSBsaXN0IG9mIGJpbmRpbmdzIGN1cnJlbnRseSBhY3RpdmUuIFVzZWQgZm9yIG5ldGxpbmsgdG8gbm90aWZ5IHVzXG4rXHQvKiBUaGUgc29ja2V0IHByaXYgdGhpcyBiaW5kaW5nIGJlbG9uZ3MgdG8uIFVzZWQgZm9yIG5ldGxpbmsgdG8gbm90aWZ5IHVzXG4gXHQgKiBvZiB0aGUgdXNlciBkcm9wcGluZyB0aGUgYmluZC5cbiBcdCAqL1xuLVx0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xuK1x0c3RydWN0IG5ldGRldl9ubF9zb2NrICpzb2NrX3ByaXY7XG4gXG4gXHQvKiByeHEncyB0aGlzIGJpbmRpbmcgaXMgYWN0aXZlIG9uLiAqL1xuIFx0c3RydWN0IHhhcnJheSBib3VuZF9yeHFzO1xuZGlmZiAtLWdpdCBhL25ldC9jb3JlL25ldGRldi1nZW5sLmMgYi9uZXQvY29yZS9uZXRkZXYtZ2VubC5jXG5pbmRleCBjMTVkOGQ0Y2ExZjhmLi5kM2YzYTkxYTZkOTMyIDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvbmV0ZGV2LWdlbmwuY1xuKysrIGIvbmV0L2NvcmUvbmV0ZGV2LWdlbmwuY1xuQEAgLTEwNDQsMTMgKzEwNDQsMTEgQEAgaW50IG5ldGRldl9ubF9iaW5kX3J4X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdFx0Z290byBlcnJfZ2VubG1zZ19mcmVlO1xuIFx0fVxuIFxuLVx0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZWxvY2spO1xuLVxuIFx0ZXJyID0gMDtcbiBcdG5ldGRldiA9IG5ldGRldl9nZXRfYnlfaW5kZXhfbG9jayhnZW5sX2luZm9fbmV0KGluZm8pLCBpZmluZGV4KTtcbiBcdGlmICghbmV0ZGV2KSB7XG4gXHRcdGVyciA9IC1FTk9ERVY7XG4tXHRcdGdvdG8gZXJyX3VubG9ja19zb2NrO1xuK1x0XHRnb3RvIGVycl9nZW5sbXNnX2ZyZWU7XG4gXHR9XG4gXHRpZiAoIW5ldGlmX2RldmljZV9wcmVzZW50KG5ldGRldikpXG4gXHRcdGVyciA9IC1FTk9ERVY7XG5AQCAtMTEwMiw4ICsxMTAwLDYgQEAgaW50IG5ldGRldl9ubF9iaW5kX3J4X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcbiBcdG5ldGRldl91bmxvY2sobmV0ZGV2KTtcbiBcbi1cdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZWxvY2spO1xuLVxuIFx0cmV0dXJuIGVyciBcdTAwM2MgMCA/IGVyciA6IDA7XG4gXG4gZXJyX3VuYmluZDpcbkBAIC0xMTEyLDggKzExMDgsNiBAQCBpbnQgbmV0ZGV2X25sX2JpbmRfcnhfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0Yml0bWFwX2ZyZWUocnhxX2JpdG1hcCk7XG4gZXJyX3VubG9jazpcbiBcdG5ldGRldl91bmxvY2sobmV0ZGV2KTtcbi1lcnJfdW5sb2NrX3NvY2s6XG4tXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2Vsb2NrKTtcbiBlcnJfZ2VubG1zZ19mcmVlOlxuIFx0bmxtc2dfZnJlZShyc3ApO1xuIFx0cmV0dXJuIGVycjtcbkBAIC0xMTg1LDEyICsxMTc5LDEwIEBAIGludCBuZXRkZXZfbmxfYmluZF90eF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRcdGdvdG8gZXJyX2dlbmxtc2dfZnJlZTtcbiBcdH1cbiBcbi1cdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2Vsb2NrKTtcbi1cbiBcdG5ldGRldiA9IG5ldGRldl9nZXRfYnlfaW5kZXhfbG9jayhnZW5sX2luZm9fbmV0KGluZm8pLCBpZmluZGV4KTtcbiBcdGlmICghbmV0ZGV2KSB7XG4gXHRcdGVyciA9IC1FTk9ERVY7XG4tXHRcdGdvdG8gZXJyX3VubG9ja19zb2NrO1xuK1x0XHRnb3RvIGVycl9nZW5sbXNnX2ZyZWU7XG4gXHR9XG4gXG4gXHRpZiAoIW5ldGlmX2RldmljZV9wcmVzZW50KG5ldGRldikpIHtcbkBAIC0xMjMzLDcgKzEyMjUsNiBAQCBpbnQgbmV0ZGV2X25sX2JpbmRfdHhfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0aWYgKGJpbmRfZGV2ICE9IG5ldGRldilcbiBcdFx0bmV0ZGV2X3VubG9jayhiaW5kX2Rldik7XG4gXHRuZXRkZXZfdW5sb2NrKG5ldGRldik7XG4tXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2Vsb2NrKTtcbiBcbiBcdHJldHVybiBnZW5sbXNnX3JlcGx5KHJzcCwgaW5mbyk7XG4gXG5AQCAtMTI0Miw4ICsxMjMzLDYgQEAgaW50IG5ldGRldl9ubF9iaW5kX3R4X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdFx0bmV0ZGV2X3VubG9jayhiaW5kX2Rldik7XG4gZXJyX3VubG9ja19uZXRkZXY6XG4gXHRuZXRkZXZfdW5sb2NrKG5ldGRldik7XG4tZXJyX3VubG9ja19zb2NrOlxuLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlbG9jayk7XG4gZXJyX2dlbmxtc2dfZnJlZTpcbiBcdG5sbXNnX2ZyZWUocnNwKTtcbiBcdHJldHVybiBlcnI7XG5AQCAtMTQxOCwxOSArMTQwNywxNyBAQCBpbnQgbmV0ZGV2X25sX3F1ZXVlX2NyZWF0ZV9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXG4gdm9pZCBuZXRkZXZfbmxfc29ja19wcml2X2luaXQoc3RydWN0IG5ldGRldl9ubF9zb2NrICpwcml2KVxuIHtcbi1cdElOSVRfTElTVF9IRUFEKFx1MDAyNnByaXYtXHUwMDNlYmluZGluZ3MpO1xuLVx0bXV0ZXhfaW5pdChcdTAwMjZwcml2LVx1MDAzZWxvY2spO1xuK1x0eGFfaW5pdChcdTAwMjZwcml2LVx1MDAzZWJpbmRpbmdzKTtcbiB9XG4gXG4gdm9pZCBuZXRkZXZfbmxfc29ja19wcml2X2Rlc3Ryb3koc3RydWN0IG5ldGRldl9ubF9zb2NrICpwcml2KVxuIHtcbiBcdHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpiaW5kaW5nO1xuLVx0c3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKnRlbXA7XG4gXHRuZXRkZXZpY2VfdHJhY2tlciBkZXZfdHJhY2tlcjtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XG4rXHR1bnNpZ25lZCBsb25nIHhhX2lkeDtcbiBcbi1cdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2Vsb2NrKTtcbi1cdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShiaW5kaW5nLCB0ZW1wLCBcdTAwMjZwcml2LVx1MDAzZWJpbmRpbmdzLCBsaXN0KSB7XG4rXHR4YV9mb3JfZWFjaChcdTAwMjZwcml2LVx1MDAzZWJpbmRpbmdzLCB4YV9pZHgsIGJpbmRpbmcpIHtcbiBcdFx0bXV0ZXhfbG9jayhcdTAwMjZiaW5kaW5nLVx1MDAzZWxvY2spO1xuIFx0XHRkZXYgPSBiaW5kaW5nLVx1MDAzZWRldjtcbiBcdFx0aWYgKCFkZXYpIHtcbkBAIC0xNDQ2LDcgKzE0MzMsNyBAQCB2b2lkIG5ldGRldl9ubF9zb2NrX3ByaXZfZGVzdHJveShzdHJ1Y3QgbmV0ZGV2X25sX3NvY2sgKnByaXYpXG4gXHRcdG5ldGRldl91bmxvY2soZGV2KTtcbiBcdFx0bmV0ZGV2X3B1dChkZXYsIFx1MDAyNmRldl90cmFja2VyKTtcbiBcdH1cbi1cdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZWxvY2spO1xuK1x0eGFfZGVzdHJveShcdTAwMjZwcml2LVx1MDAzZWJpbmRpbmdzKTtcbiB9XG4gXG4gc3RhdGljIGludCBuZXRkZXZfZ2VubF9uZXRkZXZpY2VfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYixcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE1OjEyOjI4LjYyMTQzMTMyNloiLCJTZXEiOjYxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NTc3NjI4OTM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIE5ldGRldiBOTCBTb2NrZXQgUmVmYWN0b3JpbmcqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayBkb3duIHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSBpbXByZXNzaW9uIGlzIHRoYXQgaXQncyBhIHJlbGF0aXZlbHkgZm9jdXNlZCByZWZhY3RvcmluZywgcHJpbWFyaWx5IGNlbnRlcmVkIGFyb3VuZCBhIGNoYW5nZSBpbiBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZXMuIFRoZSBjb3JlIG9mIHRoZSBtb2RpZmljYXRpb24gaXMgc2hpZnRpbmcgZnJvbSB0aGUgZXhpc3RpbmcgYGxpc3RfaGVhZGAgYW5kIG11dGV4IGFwcHJvYWNoIGZvciBtYW5hZ2luZyBuZXR3b3JrIGRldmljZSBiaW5kaW5ncyB3aXRoaW4gYHN0cnVjdCBuZXRkZXZfbmxfc29ja2AgdG8gYW4gYHhhcnJheWAuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0aGlzIGlzIGEgZ29vZCBtb3ZlLiBYYXJyYXlzIGFyZSBvZnRlbiBhIG1vcmUgZWZmaWNpZW50IGFuZCBzY2FsYWJsZSB3YXkgdG8gbWFuYWdlIGluZGV4ZWQgZGF0YSB0aGFuIGxpbmtlZCBsaXN0cywgZXNwZWNpYWxseSBpbiBhIGtlcm5lbCBjb250ZXh0IHdoZXJlIHBlcmZvcm1hbmNlIGFuZCBjb25jdXJyZW5jeSBhcmUgY3JpdGljYWwuIFRoZSBwYXRjaCB0b3VjaGVzIHRoZSBzdGFuZGFyZCBmdW5jdGlvbnMgYXNzb2NpYXRlZCB3aXRoIGJpbmRpbmcgYW5kIHVuYmluZGluZyBETUEgYnVmZmVycyBhbmQgdGhlIE5ldGxpbmsgc29ja2V0J3MgbGlmZWN5Y2xlIOKAkyBgbmV0X2Rldm1lbV91bmJpbmRfZG1hYnVmYCwgYG5ldF9kZXZtZW1fYmluZF9kbWFidWZgLCBgbmV0ZGV2X25sX2JpbmRfcnhfZG9pdGAsIGBuZXRkZXZfbmxfYmluZF90eF9kb2l0YCwgYG5ldGRldl9ubF9zb2NrX3ByaXZfaW5pdGAsIGFuZCBgbmV0ZGV2X25sX3NvY2tfcHJpdl9kZXN0cm95YC4gVGhhdCdzIHRvIGJlIGV4cGVjdGVkLCB0aGV5IHdvdWxkIG5lZWQgdG8gYmUgdXBkYXRlZCB0byB1c2UgdGhlIG5ldyBkYXRhIHN0cnVjdHVyZS5cblxuVGhlIGRpZmYgaXRzZWxmIHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCDigJMgYmFzaWNhbGx5LCBsaXN0IG1hbmlwdWxhdGlvbnMgZ2V0IHJlcGxhY2VkIHdpdGggY29ycmVzcG9uZGluZyB4YXJyYXkgb3BlcmF0aW9ucywgYW5kIHRoZSBtdXRleCBpcyBnb25lLiBDcnVjaWFsbHksIHRoZXJlJ3Mgbm8gYWRkaXRpb24gb2YgbmV3IGRhdGEgc3RydWN0dXJlcyB0aGF0IHdvdWxkIGJlIGV4cG9zZWQgdG8gdXNlcnNwYWNlLCBhbmQgbm8gbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyB0aGF0IGNvdWxkIGxlYWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIEZ1cnRoZXJtb3JlLCBJIHNlZSBubyBjaGFuZ2VzIHJlbGF0ZWQgdG8gYm91bmRzIGNoZWNraW5nIG9yIHRoZSBsZW5ndGhzIG9mIGFueXRoaW5nLiBUaGlzIGlzIGltcG9ydGFudDogYSBjbGVhbiByZWZhY3RvciBsaWtlIHRoaXMgaXMgbGVzcyBsaWtlbHkgdG8gaW50cm9kdWNlIHN1YnRsZSBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMuXG5cbk15IGNvbmNlcm4gbmF0dXJhbGx5IHNoaWZ0cyB0byB3aGF0ICpjb3VsZCogZ28gd3Jvbmcgd2l0aCBzdWNoIGEgY2hhbmdlLiBBbnkgaW50cm9kdWNlZCBidWdzIHdpbGwgbGlrZWx5IG1hbmlmZXN0IGFzIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMsIGRvdWJsZSBmcmVlcywgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlcywgb3IgcmFjZSBjb25kaXRpb25zIHN0ZW1taW5nIGZyb20gdGhlIHJlbW92YWwgb2YgdGhlIG11dGV4LiBIb3dldmVyLCB0aGF04oCZcyB3aGVyZSB0aGUga2VybmVsJ3MgbWVtb3J5IHNhZmV0eSBhbmQgY29uY3VycmVuY3kgdG9vbHMgY29tZSBpbnRvIHBsYXk6IEtBU0FOIGFuZCBMT0NLREVQIHNob3VsZCBjYXRjaCB0aG9zZSBpc3N1ZXMuIEknbSByZWFzb25hYmx5IGNvbmZpZGVudCBpbiB0aGlzIGNhc2UuXG5cbkkgaGF2ZSBqdXN0IHJ1biBvdmVyIHRoZSBjb2RlIGxvb2tpbmcgZm9yIGFueSBhcmVhcyB3aGVyZSBtZW1vcnkgbWlnaHQgYmUgdW5pbml0aWFsaXplZC4gU3BlY2lmaWNhbGx5LCBteSBxdWljayByZXZpZXcgaW5jbHVkZWQgYHhhX3N0b3JlYCBhbmQgYHhhX2VyYXNlYCwgaG93ZXZlciwgdGhvc2UgYXJlIGludGVybmFsIHhhcnJheSBmdW5jdGlvbnMsIHdoaWNoIG1pbmltaXplcyB0aGUgcHJvYmFiaWxpdHkgb2YgYSBsZWFrLiBUaGUgc29ja2V0IGl0c2VsZiBpcyBhbGxvY2F0ZWQgZWxzZXdoZXJlOyB0aGUgcGF0Y2ggb25seSBtb2RpZmllcyB0aGUgaW5pdGlhbGl6YXRpb24gcHJvY2VzcyBvZiB0aGUgYG5ldGRldl9ubF9zb2NrYCBzdHJ1Y3QgLSBgeGFfaW5pdGAgcmVwbGFjZXMgYElOSVRfTElTVF9IRUFEYCBhbmQgYG11dGV4X2luaXRgLiBUaGUgc2FtZSBhcHBsaWVzIHRvIHRoZSBgYmluZGluZ2Agc3RydWN0OiBgc29ja19wcml2YCByZXBsYWNlcyBgbGlzdGAuIE5vIHdvcnJpZXMgdGhlcmUsIGVpdGhlci5cblxuQmFzZWQgb24gdGhpcyBhc3Nlc3NtZW50LCBJJ2xsIGZsYWcgdGhpcyBhcyBgTmVlZHNLTVNBTj1mYWxzZWAuIEl0IGxvb2tzIGxpa2UgYSBzYWZlIGFuZCBzZW5zaWJsZSByZWZhY3RvcmluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDA5MywiT3V0cHV0VG9rZW5zIjoxNDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNTEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNToxMjozNy4xOTkwNjQwNjFaIiwiU2VxIjo2MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDI3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlcGxhY2VzIGEgbGlua2VkIGxpc3QgYW5kIGEgbXV0ZXggd2l0aCBhbiB4YXJyYXkgZm9yIG1hbmFnaW5nIGRtYWJ1ZiBiaW5kaW5ncyBpbiBgc3RydWN0IG5ldGRldl9ubF9zb2NrYC4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGFsbG9jYXRlIG5ldyBidWZmZXJzIHRoYXQgY291bGQgYmUgbGVmdCB1bmluaXRpYWxpemVkLiBBbnkgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgcmFjZSBjb25kaXRpb25zIGZyb20gdGhlIHJlbW92ZWQgbXV0ZXgsIHVzZS1hZnRlci1mcmVlLCBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzKSB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVwbGFjZXMgYSBsaW5rZWQgbGlzdCBhbmQgYSBtdXRleCB3aXRoIGFuIHhhcnJheSBmb3IgbWFuYWdpbmcgZG1hYnVmIGJpbmRpbmdzIGluIGBzdHJ1Y3QgbmV0ZGV2X25sX3NvY2tgLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgYWxsb2NhdGUgbmV3IGJ1ZmZlcnMgdGhhdCBjb3VsZCBiZSBsZWZ0IHVuaW5pdGlhbGl6ZWQuIEFueSBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyAoc3VjaCBhcyByYWNlIGNvbmRpdGlvbnMgZnJvbSB0aGUgcmVtb3ZlZCBtdXRleCwgdXNlLWFmdGVyLWZyZWUsIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMpIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowwsk9h[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-11 14:46:27 +0000 UTC FinishedAt: 2026-08-11 15:12:38 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "55d20f50a221bdd7b19befc6e3685a2ef5d4c07b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_DEVMEM", "DMA_SHARED_BUFFER", "PAGE_POOL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "55d20f50a221bdd7b19befc6e3685a2ef5d4c07b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_DEVMEM", "DMA_SHARED_BUFFER", "PAGE_POOL" ], "series_id": "75d14da5-9883-4432-b1bb-ff0dc993fc5d" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "netdev_nl_bind_rx_doit", "netdev_nl_bind_tx_doit", "net_devmem_bind_dmabuf", "net_devmem_unbind_dmabuf", "netdev_nl_sock_priv_init", "netdev_nl_sock_priv_destroy" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE1OjEwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9ERVZNRU0mIzM0OywKICAgICYjMzQ7RE1BX1NIQVJFRF9CVUZGRVImIzM0OywKICAgICYjMzQ7UEFHRV9QT09MJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmV0ZGV2X25sX2JpbmRfcnhfZG9pdCYjMzQ7LAogICAgJiMzNDtuZXRkZXZfbmxfYmluZF90eF9kb2l0JiMzNDssCiAgICAmIzM0O25ldF9kZXZtZW1fYmluZF9kbWFidWYmIzM0OywKICAgICYjMzQ7bmV0X2Rldm1lbV91bmJpbmRfZG1hYnVmJiMzNDssCiAgICAmIzM0O25ldGRldl9ubF9zb2NrX3ByaXZfaW5pdCYjMzQ7LAogICAgJiMzNDtuZXRkZXZfbmxfc29ja19wcml2X2Rlc3Ryb3kmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZXBsYWNlcyBhIGxpbmtlZCBsaXN0IGFuZCBhIG11dGV4IHdpdGggYW4geGFycmF5IGZvciBtYW5hZ2luZyBkbWFidWYgYmluZGluZ3MgaW4gYHN0cnVjdCBuZXRkZXZfbmxfc29ja2AuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBhbGxvY2F0ZSBuZXcgYnVmZmVycyB0aGF0IGNvdWxkIGJlIGxlZnQgdW5pbml0aWFsaXplZC4gQW55IGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChzdWNoIGFzIHJhY2UgY29uZGl0aW9ucyBmcm9tIHRoZSByZW1vdmVkIG11dGV4LCB1c2UtYWZ0ZXItZnJlZSwgb3IgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcykgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbmV0ZGV2IG5ldGxpbmsgc29ja2V0IGJpbmRpbmdzIGhhbmRsaW5nLCBjaGFuZ2luZyB0aGUgYGJpbmRpbmdzYCBsaXN0IHRvIGFuIGB4YXJyYXlgIGFuZCByZW1vdmluZyB0aGUgYGxvY2tgIG11dGV4IGZyb20gYHN0cnVjdCBuZXRkZXZfbmxfc29ja2AuIFRoaXMgYWZmZWN0cyB0aGUgYG5ldGRldl9ubF9iaW5kX3J4X2RvaXRgLCBgbmV0ZGV2X25sX2JpbmRfdHhfZG9pdGAsIGBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmYCwgYW5kIGBuZXRfZGV2bWVtX3VuYmluZF9kbWFidWZgIGZ1bmN0aW9ucywgd2hpY2ggYXJlIHJlYWNoYWJsZSB2aWEgbmV0bGluayBjb21tYW5kcy4gVGhlIGNoYW5nZXMgYXJlIGZ1bmN0aW9uYWwgYW5kIGludm9sdmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHN5bmNocm9uaXphdGlvbiwgbWFraW5nIHRoZW0gd29ydGggZnV6emluZy4gVGhlIGBORVRfREVWTUVNYCBmZWF0dXJlIGFuZCBpdHMgZGVwZW5kZW5jaWVzIChgRE1BX1NIQVJFRF9CVUZGRVJgIGFuZCBgUEFHRV9QT09MYCkgbXVzdCBiZSBlbmFibGVkIHRvIHRlc3QgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTU6MTA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA3ZTViYzVmNjc0MzIxNmJiMjRmMzgxYzViZGE5NjE0YTA3NGFhMDg2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMTEgMTU6MTA6MTIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0ZGV2X25ldGxpbmsuaCBiL2luY2x1ZGUvbmV0L25ldGRldl9uZXRsaW5rLmhcbmluZGV4IDA3NTk2MmRiZTc0M2IuLjQ1YTRhNDgyZDQyZTQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9uZXRkZXZfbmV0bGluay5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9uZXRkZXZfbmV0bGluay5oXG5AQCAtMiwxMSAmIzQzOzIsMTAgQEBcbiAjaWZuZGVmIF9fTkVUX05FVERFVl9ORVRMSU5LX0hcbiAjZGVmaW5lIF9fTkVUX05FVERFVl9ORVRMSU5LX0hcbiBcbi0jaW5jbHVkZSBcdTAwM2NsaW51eC9saXN0LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgveGFycmF5LmhcdTAwM2VcbiBcbiBzdHJ1Y3QgbmV0ZGV2X25sX3NvY2sge1xuLVx0c3RydWN0IG11dGV4IGxvY2s7XG4tXHRzdHJ1Y3QgbGlzdF9oZWFkIGJpbmRpbmdzO1xuJiM0MztcdHN0cnVjdCB4YXJyYXkgYmluZGluZ3M7XG4gfTtcbiBcbiAjZW5kaWZcdC8qIF9fTkVUX05FVERFVl9ORVRMSU5LX0ggKi9cbmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXZtZW0uYyBiL25ldC9jb3JlL2Rldm1lbS5jXG5pbmRleCA5NTdkNmI5NjIxNmIzLi5iZGY4YTA3OTlhNDI3IDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvZGV2bWVtLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2Rldm1lbS5jXG5AQCAtMTM0LDggJiM0MzsxMzQsOCBAQCB2b2lkIG5ldF9kZXZtZW1fdW5iaW5kX2RtYWJ1ZihzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqYmluZGluZylcbiBcdCAqL1xuIFx0c3luY2hyb25pemVfbmV0KCk7XG4gXG4tXHRpZiAoYmluZGluZy1cdTAwM2VsaXN0Lm5leHQpXG4tXHRcdGxpc3RfZGVsKFx1MDAyNmJpbmRpbmctXHUwMDNlbGlzdCk7XG4mIzQzO1x0aWYgKGJpbmRpbmctXHUwMDNlc29ja19wcml2KVxuJiM0MztcdFx0eGFfZXJhc2UoXHUwMDI2YmluZGluZy1cdTAwM2Vzb2NrX3ByaXYtXHUwMDNlYmluZGluZ3MsIGJpbmRpbmctXHUwMDNlaWQpO1xuIFxuIFx0eGFfZm9yX2VhY2goXHUwMDI2YmluZGluZy1cdTAwM2Vib3VuZF9yeHFzLCB4YV9pZHgsIHJ4cSkge1xuIFx0XHRjb25zdCBzdHJ1Y3QgcHBfbWVtb3J5X3Byb3ZpZGVyX3BhcmFtcyBtcF9wYXJhbXMgPSB7XG5AQCAtMTkzLDYgJiM0MzsxOTMsNyBAQCBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKnZkZXYsXG4gXHRzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmO1xuIFx0dW5zaWduZWQgaW50IHNnX2lkeCwgaTtcbiBcdHVuc2lnbmVkIGxvbmcgdmlydHVhbDtcbiYjNDM7XHR2b2lkICpyZXM7XG4gXHRpbnQgZXJyO1xuIFxuIFx0aWYgKCFkbWFfZGV2KSB7XG5AQCAtMzI1LDEwICYjNDM7MzI2LDE3IEBAIG5ldF9kZXZtZW1fYmluZF9kbWFidWYoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqdmRldixcbiBcdGlmIChlcnIgXHUwMDNjIDApXG4gXHRcdGdvdG8gZXJyX2ZyZWVfY2h1bmtzO1xuIFxuLVx0bGlzdF9hZGQoXHUwMDI2YmluZGluZy1cdTAwM2VsaXN0LCBcdTAwMjZwcml2LVx1MDAzZWJpbmRpbmdzKTtcbiYjNDM7XHRiaW5kaW5nLVx1MDAzZXNvY2tfcHJpdiA9IHByaXY7XG4mIzQzO1x0cmVzID0geGFfc3RvcmUoXHUwMDI2cHJpdi1cdTAwM2ViaW5kaW5ncywgYmluZGluZy1cdTAwM2VpZCwgYmluZGluZywgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKHhhX2lzX2VycihyZXMpKSB7XG4mIzQzO1x0XHRlcnIgPSB4YV9lcnIocmVzKTtcbiYjNDM7XHRcdGdvdG8gZXJyX2VyYXNlX2RtYWJ1Zl9iaW5kaW5ncztcbiYjNDM7XHR9XG4gXG4gXHRyZXR1cm4gYmluZGluZztcbiBcbiYjNDM7ZXJyX2VyYXNlX2RtYWJ1Zl9iaW5kaW5nczpcbiYjNDM7XHR4YV9lcmFzZShcdTAwMjZuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5ncywgYmluZGluZy1cdTAwM2VpZCk7XG4gZXJyX2ZyZWVfY2h1bmtzOlxuIFx0Z2VuX3Bvb2xfZm9yX2VhY2hfY2h1bmsoYmluZGluZy1cdTAwM2VjaHVua19wb29sLFxuIFx0XHRcdFx0bmV0X2Rldm1lbV9kbWFidWZfZnJlZV9jaHVua19vd25lciwgTlVMTCk7XG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2bWVtLmggYi9uZXQvY29yZS9kZXZtZW0uaFxuaW5kZXggMzg1MmE1NjAzNmNiNC4uYmY3N2U1YTlhOGZlNyAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL2Rldm1lbS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9kZXZtZW0uaFxuQEAgLTQ5LDEwICYjNDM7NDksMTAgQEAgc3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcge1xuIFx0ICovXG4gXHRzdHJ1Y3QgcGVyY3B1X3JlZiByZWY7XG4gXG4tXHQvKiBUaGUgbGlzdCBvZiBiaW5kaW5ncyBjdXJyZW50bHkgYWN0aXZlLiBVc2VkIGZvciBuZXRsaW5rIHRvIG5vdGlmeSB1c1xuJiM0MztcdC8qIFRoZSBzb2NrZXQgcHJpdiB0aGlzIGJpbmRpbmcgYmVsb25ncyB0by4gVXNlZCBmb3IgbmV0bGluayB0byBub3RpZnkgdXNcbiBcdCAqIG9mIHRoZSB1c2VyIGRyb3BwaW5nIHRoZSBiaW5kLlxuIFx0ICovXG4tXHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XG4mIzQzO1x0c3RydWN0IG5ldGRldl9ubF9zb2NrICpzb2NrX3ByaXY7XG4gXG4gXHQvKiByeHEmIzM5O3MgdGhpcyBiaW5kaW5nIGlzIGFjdGl2ZSBvbi4gKi9cbiBcdHN0cnVjdCB4YXJyYXkgYm91bmRfcnhxcztcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9uZXRkZXYtZ2VubC5jIGIvbmV0L2NvcmUvbmV0ZGV2LWdlbmwuY1xuaW5kZXggYzE1ZDhkNGNhMWY4Zi4uZDNmM2E5MWE2ZDkzMiAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL25ldGRldi1nZW5sLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL25ldGRldi1nZW5sLmNcbkBAIC0xMDQ0LDEzICYjNDM7MTA0NCwxMSBAQCBpbnQgbmV0ZGV2X25sX2JpbmRfcnhfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0XHRnb3RvIGVycl9nZW5sbXNnX2ZyZWU7XG4gXHR9XG4gXG4tXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlbG9jayk7XG4tXG4gXHRlcnIgPSAwO1xuIFx0bmV0ZGV2ID0gbmV0ZGV2X2dldF9ieV9pbmRleF9sb2NrKGdlbmxfaW5mb19uZXQoaW5mbyksIGlmaW5kZXgpO1xuIFx0aWYgKCFuZXRkZXYpIHtcbiBcdFx0ZXJyID0gLUVOT0RFVjtcbi1cdFx0Z290byBlcnJfdW5sb2NrX3NvY2s7XG4mIzQzO1x0XHRnb3RvIGVycl9nZW5sbXNnX2ZyZWU7XG4gXHR9XG4gXHRpZiAoIW5ldGlmX2RldmljZV9wcmVzZW50KG5ldGRldikpXG4gXHRcdGVyciA9IC1FTk9ERVY7XG5AQCAtMTEwMiw4ICYjNDM7MTEwMCw2IEBAIGludCBuZXRkZXZfbmxfYmluZF9yeF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXG4gXHRuZXRkZXZfdW5sb2NrKG5ldGRldik7XG4gXG4tXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2Vsb2NrKTtcbi1cbiBcdHJldHVybiBlcnIgXHUwMDNjIDAgPyBlcnIgOiAwO1xuIFxuIGVycl91bmJpbmQ6XG5AQCAtMTExMiw4ICYjNDM7MTEwOCw2IEBAIGludCBuZXRkZXZfbmxfYmluZF9yeF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRiaXRtYXBfZnJlZShyeHFfYml0bWFwKTtcbiBlcnJfdW5sb2NrOlxuIFx0bmV0ZGV2X3VubG9jayhuZXRkZXYpO1xuLWVycl91bmxvY2tfc29jazpcbi1cdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZWxvY2spO1xuIGVycl9nZW5sbXNnX2ZyZWU6XG4gXHRubG1zZ19mcmVlKHJzcCk7XG4gXHRyZXR1cm4gZXJyO1xuQEAgLTExODUsMTIgJiM0MzsxMTc5LDEwIEBAIGludCBuZXRkZXZfbmxfYmluZF90eF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRcdGdvdG8gZXJyX2dlbmxtc2dfZnJlZTtcbiBcdH1cbiBcbi1cdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2Vsb2NrKTtcbi1cbiBcdG5ldGRldiA9IG5ldGRldl9nZXRfYnlfaW5kZXhfbG9jayhnZW5sX2luZm9fbmV0KGluZm8pLCBpZmluZGV4KTtcbiBcdGlmICghbmV0ZGV2KSB7XG4gXHRcdGVyciA9IC1FTk9ERVY7XG4tXHRcdGdvdG8gZXJyX3VubG9ja19zb2NrO1xuJiM0MztcdFx0Z290byBlcnJfZ2VubG1zZ19mcmVlO1xuIFx0fVxuIFxuIFx0aWYgKCFuZXRpZl9kZXZpY2VfcHJlc2VudChuZXRkZXYpKSB7XG5AQCAtMTIzMyw3ICYjNDM7MTIyNSw2IEBAIGludCBuZXRkZXZfbmxfYmluZF90eF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRpZiAoYmluZF9kZXYgIT0gbmV0ZGV2KVxuIFx0XHRuZXRkZXZfdW5sb2NrKGJpbmRfZGV2KTtcbiBcdG5ldGRldl91bmxvY2sobmV0ZGV2KTtcbi1cdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZWxvY2spO1xuIFxuIFx0cmV0dXJuIGdlbmxtc2dfcmVwbHkocnNwLCBpbmZvKTtcbiBcbkBAIC0xMjQyLDggJiM0MzsxMjMzLDYgQEAgaW50IG5ldGRldl9ubF9iaW5kX3R4X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdFx0bmV0ZGV2X3VubG9jayhiaW5kX2Rldik7XG4gZXJyX3VubG9ja19uZXRkZXY6XG4gXHRuZXRkZXZfdW5sb2NrKG5ldGRldik7XG4tZXJyX3VubG9ja19zb2NrOlxuLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlbG9jayk7XG4gZXJyX2dlbmxtc2dfZnJlZTpcbiBcdG5sbXNnX2ZyZWUocnNwKTtcbiBcdHJldHVybiBlcnI7XG5AQCAtMTQxOCwxOSAmIzQzOzE0MDcsMTcgQEAgaW50IG5ldGRldl9ubF9xdWV1ZV9jcmVhdGVfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFxuIHZvaWQgbmV0ZGV2X25sX3NvY2tfcHJpdl9pbml0KHN0cnVjdCBuZXRkZXZfbmxfc29jayAqcHJpdilcbiB7XG4tXHRJTklUX0xJU1RfSEVBRChcdTAwMjZwcml2LVx1MDAzZWJpbmRpbmdzKTtcbi1cdG11dGV4X2luaXQoXHUwMDI2cHJpdi1cdTAwM2Vsb2NrKTtcbiYjNDM7XHR4YV9pbml0KFx1MDAyNnByaXYtXHUwMDNlYmluZGluZ3MpO1xuIH1cbiBcbiB2b2lkIG5ldGRldl9ubF9zb2NrX3ByaXZfZGVzdHJveShzdHJ1Y3QgbmV0ZGV2X25sX3NvY2sgKnByaXYpXG4ge1xuIFx0c3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKmJpbmRpbmc7XG4tXHRzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqdGVtcDtcbiBcdG5ldGRldmljZV90cmFja2VyIGRldl90cmFja2VyO1xuIFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldjtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHhhX2lkeDtcbiBcbi1cdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2Vsb2NrKTtcbi1cdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShiaW5kaW5nLCB0ZW1wLCBcdTAwMjZwcml2LVx1MDAzZWJpbmRpbmdzLCBsaXN0KSB7XG4mIzQzO1x0eGFfZm9yX2VhY2goXHUwMDI2cHJpdi1cdTAwM2ViaW5kaW5ncywgeGFfaWR4LCBiaW5kaW5nKSB7XG4gXHRcdG11dGV4X2xvY2soXHUwMDI2YmluZGluZy1cdTAwM2Vsb2NrKTtcbiBcdFx0ZGV2ID0gYmluZGluZy1cdTAwM2VkZXY7XG4gXHRcdGlmICghZGV2KSB7XG5AQCAtMTQ0Niw3ICYjNDM7MTQzMyw3IEBAIHZvaWQgbmV0ZGV2X25sX3NvY2tfcHJpdl9kZXN0cm95KHN0cnVjdCBuZXRkZXZfbmxfc29jayAqcHJpdilcbiBcdFx0bmV0ZGV2X3VubG9jayhkZXYpO1xuIFx0XHRuZXRkZXZfcHV0KGRldiwgXHUwMDI2ZGV2X3RyYWNrZXIpO1xuIFx0fVxuLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlbG9jayk7XG4mIzQzO1x0eGFfZGVzdHJveShcdTAwMjZwcml2LVx1MDAzZWJpbmRpbmdzKTtcbiB9XG4gXG4gc3RhdGljIGludCBuZXRkZXZfZ2VubF9uZXRkZXZpY2VfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNToxMDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX0RFVk1FTSYjMzQ7LAogICAgJiMzNDtETUFfU0hBUkVEX0JVRkZFUiYjMzQ7LAogICAgJiMzNDtQQUdFX1BPT0wmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZXRkZXZfbmxfYmluZF9yeF9kb2l0JiMzNDssCiAgICAmIzM0O25ldGRldl9ubF9iaW5kX3R4X2RvaXQmIzM0OywKICAgICYjMzQ7bmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZiYjMzQ7LAogICAgJiMzNDtuZXRfZGV2bWVtX3VuYmluZF9kbWFidWYmIzM0OywKICAgICYjMzQ7bmV0ZGV2X25sX3NvY2tfcHJpdl9pbml0JiMzNDssCiAgICAmIzM0O25ldGRldl9ubF9zb2NrX3ByaXZfZGVzdHJveSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbmV0ZGV2IG5ldGxpbmsgc29ja2V0IGJpbmRpbmdzIGhhbmRsaW5nLCBjaGFuZ2luZyB0aGUgYGJpbmRpbmdzYCBsaXN0IHRvIGFuIGB4YXJyYXlgIGFuZCByZW1vdmluZyB0aGUgYGxvY2tgIG11dGV4IGZyb20gYHN0cnVjdCBuZXRkZXZfbmxfc29ja2AuIFRoaXMgYWZmZWN0cyB0aGUgYG5ldGRldl9ubF9iaW5kX3J4X2RvaXRgLCBgbmV0ZGV2X25sX2JpbmRfdHhfZG9pdGAsIGBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmYCwgYW5kIGBuZXRfZGV2bWVtX3VuYmluZF9kbWFidWZgIGZ1bmN0aW9ucywgd2hpY2ggYXJlIHJlYWNoYWJsZSB2aWEgbmV0bGluayBjb21tYW5kcy4gVGhlIGNoYW5nZXMgYXJlIGZ1bmN0aW9uYWwgYW5kIGludm9sdmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHN5bmNocm9uaXphdGlvbiwgbWFraW5nIHRoZW0gd29ydGggZnV6emluZy4gVGhlIGBORVRfREVWTUVNYCBmZWF0dXJlIGFuZCBpdHMgZGVwZW5kZW5jaWVzIChgRE1BX1NIQVJFRF9CVUZGRVJgIGFuZCBgUEFHRV9QT09MYCkgbXVzdCBiZSBlbmFibGVkIHRvIHRlc3QgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3ZTViYzVmNjc0MzIxNmJiMjRmMzgxYzViZGE5NjE0YTA3NGFhMDg2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgMTEgMTU6MTA6MTIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRkZXZfbmV0bGluay5oIGIvaW5jbHVkZS9uZXQvbmV0ZGV2X25ldGxpbmsuaAppbmRleCAwNzU5NjJkYmU3NDNiLi40NWE0YTQ4MmQ0MmU0IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9uZXRkZXZfbmV0bGluay5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L25ldGRldl9uZXRsaW5rLmgKQEAgLTIsMTEgJiM0MzsyLDEwIEBACiAjaWZuZGVmIF9fTkVUX05FVERFVl9ORVRMSU5LX0gKICNkZWZpbmUgX19ORVRfTkVUREVWX05FVExJTktfSAogCi0jaW5jbHVkZSAmbHQ7bGludXgvbGlzdC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC94YXJyYXkuaCZndDsKIAogc3RydWN0IG5ldGRldl9ubF9zb2NrIHsKLQlzdHJ1Y3QgbXV0ZXggbG9jazsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGJpbmRpbmdzOwomIzQzOwlzdHJ1Y3QgeGFycmF5IGJpbmRpbmdzOwogfTsKIAogI2VuZGlmCS8qIF9fTkVUX05FVERFVl9ORVRMSU5LX0ggKi8KZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Rldm1lbS5jIGIvbmV0L2NvcmUvZGV2bWVtLmMKaW5kZXggOTU3ZDZiOTYyMTZiMy4uYmRmOGEwNzk5YTQyNyAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZGV2bWVtLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvZGV2bWVtLmMKQEAgLTEzNCw4ICYjNDM7MTM0LDggQEAgdm9pZCBuZXRfZGV2bWVtX3VuYmluZF9kbWFidWYoc3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKmJpbmRpbmcpCiAJICovCiAJc3luY2hyb25pemVfbmV0KCk7CiAKLQlpZiAoYmluZGluZy0mZ3Q7bGlzdC5uZXh0KQotCQlsaXN0X2RlbCgmYW1wO2JpbmRpbmctJmd0O2xpc3QpOwomIzQzOwlpZiAoYmluZGluZy0mZ3Q7c29ja19wcml2KQomIzQzOwkJeGFfZXJhc2UoJmFtcDtiaW5kaW5nLSZndDtzb2NrX3ByaXYtJmd0O2JpbmRpbmdzLCBiaW5kaW5nLSZndDtpZCk7CiAKIAl4YV9mb3JfZWFjaCgmYW1wO2JpbmRpbmctJmd0O2JvdW5kX3J4cXMsIHhhX2lkeCwgcnhxKSB7CiAJCWNvbnN0IHN0cnVjdCBwcF9tZW1vcnlfcHJvdmlkZXJfcGFyYW1zIG1wX3BhcmFtcyA9IHsKQEAgLTE5Myw2ICYjNDM7MTkzLDcgQEAgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICp2ZGV2LAogCXN0cnVjdCBkbWFfYnVmICpkbWFidWY7CiAJdW5zaWduZWQgaW50IHNnX2lkeCwgaTsKIAl1bnNpZ25lZCBsb25nIHZpcnR1YWw7CiYjNDM7CXZvaWQgKnJlczsKIAlpbnQgZXJyOwogCiAJaWYgKCFkbWFfZGV2KSB7CkBAIC0zMjUsMTAgJiM0MzszMjYsMTcgQEAgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICp2ZGV2LAogCWlmIChlcnIgJmx0OyAwKQogCQlnb3RvIGVycl9mcmVlX2NodW5rczsKIAotCWxpc3RfYWRkKCZhbXA7YmluZGluZy0mZ3Q7bGlzdCwgJmFtcDtwcml2LSZndDtiaW5kaW5ncyk7CiYjNDM7CWJpbmRpbmctJmd0O3NvY2tfcHJpdiA9IHByaXY7CiYjNDM7CXJlcyA9IHhhX3N0b3JlKCZhbXA7cHJpdi0mZ3Q7YmluZGluZ3MsIGJpbmRpbmctJmd0O2lkLCBiaW5kaW5nLCBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKHhhX2lzX2VycihyZXMpKSB7CiYjNDM7CQllcnIgPSB4YV9lcnIocmVzKTsKJiM0MzsJCWdvdG8gZXJyX2VyYXNlX2RtYWJ1Zl9iaW5kaW5nczsKJiM0MzsJfQogCiAJcmV0dXJuIGJpbmRpbmc7CiAKJiM0MztlcnJfZXJhc2VfZG1hYnVmX2JpbmRpbmdzOgomIzQzOwl4YV9lcmFzZSgmYW1wO25ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmdzLCBiaW5kaW5nLSZndDtpZCk7CiBlcnJfZnJlZV9jaHVua3M6CiAJZ2VuX3Bvb2xfZm9yX2VhY2hfY2h1bmsoYmluZGluZy0mZ3Q7Y2h1bmtfcG9vbCwKIAkJCQluZXRfZGV2bWVtX2RtYWJ1Zl9mcmVlX2NodW5rX293bmVyLCBOVUxMKTsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Rldm1lbS5oIGIvbmV0L2NvcmUvZGV2bWVtLmgKaW5kZXggMzg1MmE1NjAzNmNiNC4uYmY3N2U1YTlhOGZlNyAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZGV2bWVtLmgKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvZGV2bWVtLmgKQEAgLTQ5LDEwICYjNDM7NDksMTAgQEAgc3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgewogCSAqLwogCXN0cnVjdCBwZXJjcHVfcmVmIHJlZjsKIAotCS8qIFRoZSBsaXN0IG9mIGJpbmRpbmdzIGN1cnJlbnRseSBhY3RpdmUuIFVzZWQgZm9yIG5ldGxpbmsgdG8gbm90aWZ5IHVzCiYjNDM7CS8qIFRoZSBzb2NrZXQgcHJpdiB0aGlzIGJpbmRpbmcgYmVsb25ncyB0by4gVXNlZCBmb3IgbmV0bGluayB0byBub3RpZnkgdXMKIAkgKiBvZiB0aGUgdXNlciBkcm9wcGluZyB0aGUgYmluZC4KIAkgKi8KLQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiYjNDM7CXN0cnVjdCBuZXRkZXZfbmxfc29jayAqc29ja19wcml2OwogCiAJLyogcnhxJiMzOTtzIHRoaXMgYmluZGluZyBpcyBhY3RpdmUgb24uICovCiAJc3RydWN0IHhhcnJheSBib3VuZF9yeHFzOwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvbmV0ZGV2LWdlbmwuYyBiL25ldC9jb3JlL25ldGRldi1nZW5sLmMKaW5kZXggYzE1ZDhkNGNhMWY4Zi4uZDNmM2E5MWE2ZDkzMiAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvbmV0ZGV2LWdlbmwuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9uZXRkZXYtZ2VubC5jCkBAIC0xMDQ0LDEzICYjNDM7MTA0NCwxMSBAQCBpbnQgbmV0ZGV2X25sX2JpbmRfcnhfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogCQlnb3RvIGVycl9nZW5sbXNnX2ZyZWU7CiAJfQogCi0JbXV0ZXhfbG9jaygmYW1wO3ByaXYtJmd0O2xvY2spOwotCiAJZXJyID0gMDsKIAluZXRkZXYgPSBuZXRkZXZfZ2V0X2J5X2luZGV4X2xvY2soZ2VubF9pbmZvX25ldChpbmZvKSwgaWZpbmRleCk7CiAJaWYgKCFuZXRkZXYpIHsKIAkJZXJyID0gLUVOT0RFVjsKLQkJZ290byBlcnJfdW5sb2NrX3NvY2s7CiYjNDM7CQlnb3RvIGVycl9nZW5sbXNnX2ZyZWU7CiAJfQogCWlmICghbmV0aWZfZGV2aWNlX3ByZXNlbnQobmV0ZGV2KSkKIAkJZXJyID0gLUVOT0RFVjsKQEAgLTExMDIsOCAmIzQzOzExMDAsNiBAQCBpbnQgbmV0ZGV2X25sX2JpbmRfcnhfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogCiAJbmV0ZGV2X3VubG9jayhuZXRkZXYpOwogCi0JbXV0ZXhfdW5sb2NrKCZhbXA7cHJpdi0mZ3Q7bG9jayk7Ci0KIAlyZXR1cm4gZXJyICZsdDsgMCA/IGVyciA6IDA7CiAKIGVycl91bmJpbmQ6CkBAIC0xMTEyLDggJiM0MzsxMTA4LDYgQEAgaW50IG5ldGRldl9ubF9iaW5kX3J4X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIAliaXRtYXBfZnJlZShyeHFfYml0bWFwKTsKIGVycl91bmxvY2s6CiAJbmV0ZGV2X3VubG9jayhuZXRkZXYpOwotZXJyX3VubG9ja19zb2NrOgotCW11dGV4X3VubG9jaygmYW1wO3ByaXYtJmd0O2xvY2spOwogZXJyX2dlbmxtc2dfZnJlZToKIAlubG1zZ19mcmVlKHJzcCk7CiAJcmV0dXJuIGVycjsKQEAgLTExODUsMTIgJiM0MzsxMTc5LDEwIEBAIGludCBuZXRkZXZfbmxfYmluZF90eF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiAJCWdvdG8gZXJyX2dlbmxtc2dfZnJlZTsKIAl9CiAKLQltdXRleF9sb2NrKCZhbXA7cHJpdi0mZ3Q7bG9jayk7Ci0KIAluZXRkZXYgPSBuZXRkZXZfZ2V0X2J5X2luZGV4X2xvY2soZ2VubF9pbmZvX25ldChpbmZvKSwgaWZpbmRleCk7CiAJaWYgKCFuZXRkZXYpIHsKIAkJZXJyID0gLUVOT0RFVjsKLQkJZ290byBlcnJfdW5sb2NrX3NvY2s7CiYjNDM7CQlnb3RvIGVycl9nZW5sbXNnX2ZyZWU7CiAJfQogCiAJaWYgKCFuZXRpZl9kZXZpY2VfcHJlc2VudChuZXRkZXYpKSB7CkBAIC0xMjMzLDcgJiM0MzsxMjI1LDYgQEAgaW50IG5ldGRldl9ubF9iaW5kX3R4X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIAlpZiAoYmluZF9kZXYgIT0gbmV0ZGV2KQogCQluZXRkZXZfdW5sb2NrKGJpbmRfZGV2KTsKIAluZXRkZXZfdW5sb2NrKG5ldGRldik7Ci0JbXV0ZXhfdW5sb2NrKCZhbXA7cHJpdi0mZ3Q7bG9jayk7CiAKIAlyZXR1cm4gZ2VubG1zZ19yZXBseShyc3AsIGluZm8pOwogCkBAIC0xMjQyLDggJiM0MzsxMjMzLDYgQEAgaW50IG5ldGRldl9ubF9iaW5kX3R4X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIAkJbmV0ZGV2X3VubG9jayhiaW5kX2Rldik7CiBlcnJfdW5sb2NrX25ldGRldjoKIAluZXRkZXZfdW5sb2NrKG5ldGRldik7Ci1lcnJfdW5sb2NrX3NvY2s6Ci0JbXV0ZXhfdW5sb2NrKCZhbXA7cHJpdi0mZ3Q7bG9jayk7CiBlcnJfZ2VubG1zZ19mcmVlOgogCW5sbXNnX2ZyZWUocnNwKTsKIAlyZXR1cm4gZXJyOwpAQCAtMTQxOCwxOSAmIzQzOzE0MDcsMTcgQEAgaW50IG5ldGRldl9ubF9xdWV1ZV9jcmVhdGVfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogCiB2b2lkIG5ldGRldl9ubF9zb2NrX3ByaXZfaW5pdChzdHJ1Y3QgbmV0ZGV2X25sX3NvY2sgKnByaXYpCiB7Ci0JSU5JVF9MSVNUX0hFQUQoJmFtcDtwcml2LSZndDtiaW5kaW5ncyk7Ci0JbXV0ZXhfaW5pdCgmYW1wO3ByaXYtJmd0O2xvY2spOwomIzQzOwl4YV9pbml0KCZhbXA7cHJpdi0mZ3Q7YmluZGluZ3MpOwogfQogCiB2b2lkIG5ldGRldl9ubF9zb2NrX3ByaXZfZGVzdHJveShzdHJ1Y3QgbmV0ZGV2X25sX3NvY2sgKnByaXYpCiB7CiAJc3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKmJpbmRpbmc7Ci0Jc3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKnRlbXA7CiAJbmV0ZGV2aWNlX3RyYWNrZXIgZGV2X3RyYWNrZXI7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKJiM0MzsJdW5zaWduZWQgbG9uZyB4YV9pZHg7CiAKLQltdXRleF9sb2NrKCZhbXA7cHJpdi0mZ3Q7bG9jayk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGJpbmRpbmcsIHRlbXAsICZhbXA7cHJpdi0mZ3Q7YmluZGluZ3MsIGxpc3QpIHsKJiM0MzsJeGFfZm9yX2VhY2goJmFtcDtwcml2LSZndDtiaW5kaW5ncywgeGFfaWR4LCBiaW5kaW5nKSB7CiAJCW11dGV4X2xvY2soJmFtcDtiaW5kaW5nLSZndDtsb2NrKTsKIAkJZGV2ID0gYmluZGluZy0mZ3Q7ZGV2OwogCQlpZiAoIWRldikgewpAQCAtMTQ0Niw3ICYjNDM7MTQzMyw3IEBAIHZvaWQgbmV0ZGV2X25sX3NvY2tfcHJpdl9kZXN0cm95KHN0cnVjdCBuZXRkZXZfbmxfc29jayAqcHJpdikKIAkJbmV0ZGV2X3VubG9jayhkZXYpOwogCQluZXRkZXZfcHV0KGRldiwgJmFtcDtkZXZfdHJhY2tlcik7CiAJfQotCW11dGV4X3VubG9jaygmYW1wO3ByaXYtJmd0O2xvY2spOwomIzQzOwl4YV9kZXN0cm95KCZhbXA7cHJpdi0mZ3Q7YmluZGluZ3MpOwogfQogCiBzdGF0aWMgaW50IG5ldGRldl9nZW5sX25ldGRldmljZV9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNToxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDk2CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMzEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIE5ldGRldiBOZXRsaW5rIEJpbmRpbmcgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggaGVyZSwgYW5kIGl0JiMzOTtzIG1ha2luZyBzb21lIHByZXR0eSBzaWduaWZpY2FudCBjaGFuZ2VzIHRvIGhvdyBuZXRkZXYgbmV0bGluayBzb2NrZXQgYmluZGluZ3MgYXJlIGhhbmRsZWQuIFNwZWNpZmljYWxseSwgaXQgc2VlbXMgdG8gYmUgaW4gYG5ldC9jb3JlL2Rldm1lbS5jYCwgYG5ldC9jb3JlL25ldGRldi1nZW5sLmNgLCBhbmQgYGluY2x1ZGUvbmV0L25ldGRldl9uZXRsaW5rLmhgLiBUaGV5JiMzOTtyZSBzd2FwcGluZyBvdXQgdGhlIGBiaW5kaW5nc2AgbGlzdCBmb3IgYW4gYHhhcnJheWAgYW5kLCBpbnRlcmVzdGluZywgcmVtb3ZpbmcgdGhlIGBsb2NrYCBtdXRleCBmcm9tIGBzdHJ1Y3QgbmV0ZGV2X25sX3NvY2tgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMuCgpUaGlzIHBhdGNoIHRvdWNoZXMgdGhlc2UgZnVuY3Rpb25zIGRpcmVjdGx5OiBgbmV0ZGV2X25sX2JpbmRfcnhfZG9pdGAsIGBuZXRkZXZfbmxfYmluZF90eF9kb2l0YCwgYG5ldGRldl9ubF9zb2NrX3ByaXZfaW5pdGAsIGBuZXRkZXZfbmxfc29ja19wcml2X2Rlc3Ryb3lgLCBgbmV0X2Rldm1lbV91bmJpbmRfZG1hYnVmYCwgYW5kIGBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmYC4gVGhlc2UgYWxsIGxvb2sgbGlrZSBuZXRsaW5rIGhhbmRsZXJzIGZvciB0aGUgbmV0ZGV2IGZhbWlseS4gUmlnaHQsIHNvIGl0JiMzOTtzIGEgbmV0bGluay1mb2N1c2VkIGNoYW5nZS4KCk15IGltbWVkaWF0ZSBxdWVzdGlvbiBpczogaXMgdGhpcyByZWFjaGFibGU/IElzIGl0IHdvcnRoIGZ1enppbmc/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IHRyaWdnZXJlZC4gSSBzaG91bGQgYWxzbyB0cmFjayBkb3duIHRoZSBhc3NvY2lhdGVkIGNvbmZpZyBvcHRpb25zIGZvciBkZXZtZW0uIGBuZXQvY29yZS9kZXZtZW0uY2AgaXMgdGhlIHByaW1lIHN1c3BlY3QgZm9yIGNvbmZpZyBjaGVja3MuIE9uY2UgSSBoYXZlIHRoZSByZWxldmFudCBjb25maWcgb3B0aW9ucywgSSBjYW4gZGV0ZXJtaW5lIHRoZSBsaWtlbGlob29kIG9mIHRyaWdnZXJpbmcgdGhpcyBjb2RlIHBhdGguIEkgd2lsbCBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGUgb2xkIGFuZCBuZXcgbWV0aG9kcyBkbyBhbmQgaWYgdGhpcyBpcyBhIGdvb2QgcGxhY2UgdG8gY29uY2VudHJhdGUgbXkgZWZmb3J0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNToxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZXZtZW1cXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvTWFrZWZpbGU9NDg9b2JqLSQoQ09ORklHX05FVF9URVNUKSAmIzQzOz0gbmV0X3Rlc3Qub1xubmV0L2NvcmUvTWFrZWZpbGU6NDk6b2JqLSQoQ09ORklHX05FVF9ERVZNRU0pICYjNDM7PSBkZXZtZW0ub1xubmV0L2NvcmUvTWFrZWZpbGUtNTAtb2JqLSQoQ09ORklHX0RFQlVHX05FVCkgJiM0Mzs9IGxvY2tfZGVidWcub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE1OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ4NjkKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBgQ09ORklHX05FVF9ERVZNRU1gIERlcGVuZGVuY3kqKgoKUmlnaHQsIHNvIHdlJiMzOTtyZSBzZWVpbmcgdGhhdCBgQ09ORklHX05FVF9ERVZNRU1gIGlzIGEgaGFyZCByZXF1aXJlbWVudCBzb21ld2hlcmUuIE1ha2VzIHNlbnNlLCBnaXZlbiB0aGUgcG90ZW50aWFsIGZvciBkaXJlY3QgZGV2aWNlIG1lbW9yeSBhY2Nlc3MuIE15IGluaXRpYWwgbW92ZSBoZXJlIGlzIGFsd2F5cyB0byBkaXZlIHN0cmFpZ2h0IGludG8gdGhlIEtjb25maWcgZmlsZXMuIFRpbWUgdG8gY2hlY2sgdGhlIGRlcGVuZGVuY2llcy4gVGhpcyBuZWVkcyB0byBiZSBjaGVja2VkIGNhcmVmdWxseS4gSSYjMzk7bGwgbmVlZCB0byBsb2NhdGUgd2hlcmUgYENPTkZJR19ORVRfREVWTUVNYCBpcyBkZWZpbmVkLCBmaWd1cmUgb3V0ICp3aHkqIGl0JiMzOTtzIG5lZWRlZCwgYW5kIHdoYXQgb3RoZXIgY29uZmlndXJhdGlvbnMgaXQgbWlnaHQgaW5mbHVlbmNlLiBVbmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0IG9mIHRoaXMgY29uZmlndXJhdGlvbiB3aWxsIGJlIGtleS4gSXMgaXQgYSBjb3JlIG5ldHdvcmtpbmcgZmVhdHVyZSwgb3IgYSBtb3JlIG5pY2hlLCBwZXJmb3JtYW5jZS1vcmllbnRlZCBvcHRpb24/IFRoaXMgbmVlZHMgdGhvcm91Z2ggaW52ZXN0aWdhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNToxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVUX0RFVk1FTSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9LY29uZmlnPTY2PWNvbmZpZyBTS0JfRVhURU5TSU9OU1xuLS1cbm5ldC9LY29uZmlnLTY4LVxubmV0L0tjb25maWc6Njk6Y29uZmlnIE5FVF9ERVZNRU1cbm5ldC9LY29uZmlnLTcwLVx0ZGVmX2Jvb2wgeVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE1OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxNjMKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqSW52ZXN0aWdhdGluZyBhIEtlcm5lbCBDb25maWd1cmF0aW9uIEZsYWcqKgoKT2theSwgc28gYE5FVF9ERVZNRU1gIGlzIGRlZmluZWQgYXMgYGRlZl9ib29sIHlgLiBUaGF0IG1lYW5zIGl0JiMzOTtzIGVuYWJsZWQgYnkgZGVmYXVsdCwgd2hpY2ggaXMgaW1wb3J0YW50IHRvIGtub3cuIEJ1dCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgc2NvcGUgYW5kIGltcGFjdC4gQmVmb3JlIEkganVtcCB0byBjb25jbHVzaW9ucywgSSBuZWVkIHRvIHNlZSB3aGF0IG90aGVyIGNvbmZpZ3VyYXRpb25zIGRlcGVuZCBvbiBpdC4gS25vd2luZyBpdHMgZGVwZW5kZW5jaWVzIHdpbGwgaWxsdW1pbmF0ZSB3aGljaCBmZWF0dXJlcyBvciBmdW5jdGlvbmFsaXRpZXMgYXJlIGFmZmVjdGVkIGlmIEkgd2VyZSB0byBjaGFuZ2UgaXRzIHN0YXRlLiBUaGlzIHdpbGwgYWxzbyBoZWxwIG1lIG5hcnJvdyBkb3duIHdoZXJlIHRvIGxvb2sgaWYgdGhlcmUgYXJlIGFueSBzaWRlIGVmZmVjdHMgb3IgcG90ZW50aWFsIGNvbmZsaWN0cy4gVGltZSB0byBkaWcgaW4gYW5kIHRyYWNlIHRoZSByZWxhdGlvbnNoaXBzLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGRlcGVuZGVuY3kgdHJlZSBsb29rcyBsaWtlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE1OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRfREVWTUVNJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9LY29uZmlnPTY2PWNvbmZpZyBTS0JfRVhURU5TSU9OU1xuLS1cbm5ldC9LY29uZmlnLTY4LVxubmV0L0tjb25maWc6Njk6Y29uZmlnIE5FVF9ERVZNRU1cbm5ldC9LY29uZmlnLTcwLVx0ZGVmX2Jvb2wgeVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE1OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0MjMKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZywgd2hlcmUmIzM5O3MgdGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQgdW50YW5nbGluZyB0aGlzIGNvbmZpZ3VyYXRpb24gbXlzdGVyeT8gUmlnaHQsIHRoZSBgbmV0L0tjb25maWdgIGZpbGUuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBnb2luZyB0byBqdW1wIGluIGFyb3VuZCBsaW5lIDY5LiBUaGF0JiMzOTtzIHVzdWFsbHkgYSBnb29kIHNwb3QgdG8gZ2V0IGEgc2Vuc2Ugb2YgdGhlIGhpZ2hlci1sZXZlbCBuZXR3b3JrIGNvbmZpZ3VyYXRpb25zIGFuZCBkZXBlbmRlbmNpZXMuIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSBzb21lIGNyaXRpY2FsIGRlZmluaXRpb25zLCBtYXliZSBzb21lIGVhcmx5IG1lbnUgc3RydWN0dXJlcyB0aGF0IGxheSBvdXQgdGhlIGJ1aWxkaW5nIGJsb2NrcyBmb3IgdGhlIG1vcmUgZ3JhbnVsYXIgb3B0aW9ucyBmdXJ0aGVyIGRvd24uIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIG9uIGhvdyB0aGUgdmFyaW91cyBuZXR3b3JrIHN1YnN5c3RlbXMgYXJlIGJyb3VnaHQgdG9nZXRoZXIgYXQgdGhlIGNvbmZpZ3VyYXRpb24gbGV2ZWwuIEkmIzM5O20gaG9waW5nIHRvIGdldCBhIHF1aWNrIG92ZXJ2aWV3IG9mIHRoZSBvcmdhbml6YXRpb25hbCBhcHByb2FjaCB1c2VkIGluIHRoZSBgbmV0L2AgZGlyZWN0b3J5JiMzOTtzIGNvbmZpZ3VyYXRpb24gZmlsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTU6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNjA6XHRjb25maWcgTkVUX1JFRElSRUNUXG4gIDYxOlx0XHRib29sXG4gIDYyOlx0XG4gIDYzOlx0Y29uZmlnIFNLQl9ERUNSWVBURURcbiAgNjQ6XHRcdGJvb2xcbiAgNjU6XHRcbiAgNjY6XHRjb25maWcgU0tCX0VYVEVOU0lPTlNcbiAgNjc6XHRcdGJvb2xcbiAgNjg6XHRcbiAgNjk6XHRjb25maWcgTkVUX0RFVk1FTVxuICA3MDpcdFx0ZGVmX2Jvb2wgeVxuICA3MTpcdFx0c2VsZWN0IEdFTkVSSUNfQUxMT0NBVE9SXG4gIDcyOlx0XHRkZXBlbmRzIG9uIERNQV9TSEFSRURfQlVGRkVSXG4gIDczOlx0XHRkZXBlbmRzIG9uIFBBR0VfUE9PTFxuICA3NDpcdFxuICA3NTpcdGNvbmZpZyBORVRfU0hBUEVSXG4gIDc2Olx0XHRib29sXG4gIDc3Olx0XG4gIDc4Olx0Y29uZmlnIE5FVF9DUkMzMkNcbiAgNzk6XHRcdGJvb2xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTU6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTgzOQoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDQ1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyB0aGUgRGVwZW5kZW5jaWVzIG9mIGBORVRfREVWTUVNYCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYE5FVF9ERVZNRU1gIGFuZCBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHByZXJlcXVpc2l0ZXMuIFJpZ2h0IG9mZiB0aGUgYmF0LCBpdCYjMzk7cyB0ZWxsaW5nIG1lIGl0IGRlcGVuZHMgb24gYm90aCBgRE1BX1NIQVJFRF9CVUZGRVJgIGFuZCBgUEFHRV9QT09MYC4gVGhhdCBtYWtlcyBzZW5zZTsgd2UgbmVlZCBhIHNoYXJlZCBtZW1vcnkgc3BhY2UgYW5kIGEgbWVjaGFuaXNtIHRvIG1hbmFnZSBtZW1vcnkgcGFnZXMuIE15IG5leHQgc3RlcCBpcyB0byBxdWlja2x5IHZlcmlmeSB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIGZvciBgRE1BX1NIQVJFRF9CVUZGRVJgLiBJcyBpdCBlbmFibGVkIGJ5IGRlZmF1bHQgaW4gdGhlIGtlcm5lbCBvciBkb2VzIGl0IG5lZWQgdG8gYmUgZXhwbGljaXRseSBzZWxlY3RlZCBpbiB0aGUgY29uZmlndXJhdGlvbj8gSSBuZWVkIHRvIGtub3cgaWYgdGhpcyBpcyBzb21ldGhpbmcgdGhhdCBtaWdodCBiZSBhIGNvbW1vbiBzb3VyY2Ugb2YgcHJvYmxlbXMgZHVyaW5nIGJ1aWxkLCBhbmQgSSBkb24mIzM5O3Qgd2FudCB0byBtYWtlIGFzc3VtcHRpb25zLiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBjb25maWcgYW5kIHNlZSB3aGF0JiMzOTtzIHdoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE1OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBETUFfU0hBUkVEX0JVRkZFUiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jhc2UvS2NvbmZpZz0yMTM9c291cmNlIFwmIzM0O2RyaXZlcnMvYmFzZS9yZWdtYXAvS2NvbmZpZ1wmIzM0O1xuZHJpdmVycy9iYXNlL0tjb25maWctMjE0LVxuZHJpdmVycy9iYXNlL0tjb25maWc6MjE1OmNvbmZpZyBETUFfU0hBUkVEX0JVRkZFUlxuZHJpdmVycy9iYXNlL0tjb25maWctMjE2LVx0Ym9vbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNToxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTU2CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IHNvbWV0aGluZyBpcyBjb25maWd1cmVkIGluIHRoZSBrZXJuZWwsIGFuZCB0aGUgYGRyaXZlcnMvYmFzZS9LY29uZmlnYCBmaWxlIHNlZW1zIGxpa2UgYSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0LiBHaXZlbiBteSBleHBlcmllbmNlLCBsaW5lIDIxNSBzb3VuZHMgbGlrZSBhIGdvb2QgcG9pbnQgdG8gemVybyBpbiBvbi4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBzb21ldGhpbmcgZnVuZGFtZW50YWwsIHByb2JhYmx5IGEgY29yZSBvcHRpb24gcmVsYXRlZCB0byBzb21lIGRyaXZlciBvciBiYXNlIGZ1bmN0aW9uYWxpdHksIG9yIG1heWJlIGV2ZW4gYSBtYWNybyBkZWZpbml0aW9uLiBMZXQgbWUgcHVsbCB0aGF0IGZpbGUgYW5kIGdldCB0byBsaW5lIDIxNSwgSSBzdXNwZWN0IEkgY2FuIHF1aWNrbHkgcGlucG9pbnQgdGhlIHJlbGV2YW50IGNvbmZpZyBvcHRpb24sIGFuZCB1bmRlcnN0YW5kIGl0cyBjb250ZXh0IHdpdGhpbiB0aGUgd2lkZXIgY29uZmlndXJhdGlvbiBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE1OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9iYXNlL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDIxMDpcdFx0Ym9vbFxuIDIxMTpcdFx0c2VsZWN0IEdMT0JcbiAyMTI6XHRcbiAyMTM6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy9iYXNlL3JlZ21hcC9LY29uZmlnXCYjMzQ7XG4gMjE0Olx0XG4gMjE1Olx0Y29uZmlnIERNQV9TSEFSRURfQlVGRkVSXG4gMjE2Olx0XHRib29sXG4gMjE3Olx0XHRkZWZhdWx0IG5cbiAyMTg6XHRcdHNlbGVjdCBJUlFfV09SS1xuIDIxOTpcdFx0aGVscFxuIDIyMDpcdFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBmcmFtZXdvcmsgZm9yIGJ1ZmZlci1zaGFyaW5nIGJldHdlZW5cbiAyMjE6XHRcdCAgbXVsdGlwbGUgZHJpdmVycy4gQSBidWZmZXIgaXMgYXNzb2NpYXRlZCB3aXRoIGEgZmlsZSB1c2luZyBkcml2ZXJcbiAyMjI6XHRcdCAgQVBJcyBleHRlbnNpb247IHRoZSBmaWxlJiMzOTtzIGRlc2NyaXB0b3IgY2FuIHRoZW4gYmUgcGFzc2VkIG9uIHRvIG90aGVyXG4gMjIzOlx0XHQgIGRyaXZlci5cbiAyMjQ6XHRcbiAyMjU6XHRjb25maWcgRE1BX0ZFTkNFX1RSQUNFXG4gMjI2Olx0XHRib29sIFwmIzM0O0VuYWJsZSB2ZXJib3NlIERNQV9GRU5DRV9UUkFDRSBtZXNzYWdlc1wmIzM0O1xuIDIyNzpcdFx0ZGVwZW5kcyBvbiBETUFfU0hBUkVEX0JVRkZFUlxuIDIyODpcdFx0aGVscFxuIDIyOTpcdFx0ICBFbmFibGUgdGhlIERNQV9GRU5DRV9UUkFDRSBwcmludGtzLiBUaGlzIHdpbGwgYWRkIGV4dHJhXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE1OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY2MjcKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiA0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nOgoKKipUaGlua2luZyBUaHJvdWdoIENvbmZpZ3VyYXRpb24gRGVmYXVsdHMqKgoKUmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBETUFfU0hBUkVEX0JVRkZFUmAgdGhpbmcuIEl0JiMzOTtzIGEgQm9vbGVhbiwgZGVmYXVsdGVkIHRvICYjMzk7biYjMzk7IGlmIG5vdCBzcGVjaWZpZWQsIHdoaWNoIHRlbGxzIG1lIGl0JiMzOTtzIGxpa2VseSBhIGNvbmZpZ3VyYXRpb24gdG9nZ2xlLiBHaXZlbiB0aGF0LCBpdCAqZGVmaW5pdGVseSogc2hvdWxkIGJlIHBhcnQgb2YgdGhlIGBFbmFibGVDb25maWdzYCBsaXN0LiBObyBxdWVzdGlvbiB0aGVyZS4gV2UgbmVlZCB0byBleHBsaWNpdGx5IGFja25vd2xlZGdlIGFuZCBtYW5hZ2UgdGhhdCBzZXR0aW5nLgoKTm93LCByZWdhcmRpbmcgYFBBR0VfUE9PTGAuLi4gbXkgZ3V0IGZlZWxpbmcsIGJhc2VkIG9uIHByZXZpb3VzIGV4cGVyaWVuY2UsIGlzIHRoYXQgaXQmIzM5O3MgcHJvYmFibHkgZW5hYmxlZCBieSBkZWZhdWx0LCBlc3BlY2lhbGx5IGluIGEgbmV0d29ya2luZyBjb250ZXh0LiBIb3dldmVyLCBndXQgZmVlbGluZ3MgYXJlbiYjMzk7dCBlbm91Z2guIEkmIzM5O20gZ29pbmcgdG8gZG91YmxlLWNoZWNrIHRoZSBgUEFHRV9QT09MYCBjb25maWd1cmF0aW9uIGRlZmluaXRpb24gdG8gY29uZmlybSB0aGlzIGFzc3VtcHRpb24uIExldCYjMzk7cyBtYWtlIHN1cmUgb3VyIGFzc3VtcHRpb25zIGFyZSBjb3JyZWN0IGJlZm9yZSB3ZSBnbyBmdXJ0aGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNToxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgUEFHRV9QT09MJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9LY29uZmlnPTQ4Nz1jb25maWcgTkVUX0RFVkxJTktcbi0tXG5uZXQvS2NvbmZpZy00OTAtXG5uZXQvS2NvbmZpZzo0OTE6Y29uZmlnIFBBR0VfUE9PTFxubmV0L0tjb25maWctNDkyLVx0Ym9vbFxubmV0L0tjb25maWctNDkzLVxubmV0L0tjb25maWc6NDk0OmNvbmZpZyBQQUdFX1BPT0xfU1RBVFNcbm5ldC9LY29uZmlnLTQ5NS1cdGRlZmF1bHQgblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNToxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2OTg3CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHNvbWV0aGluZyByZWxhdGVkIHRvIHRoZSBuZXR3b3JrIGNvbmZpZ3VyYXRpb24gd2l0aGluIHRoZSBrZXJuZWwuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHplcm8gaW4gb24gYG5ldC9LY29uZmlnYCwgd2hpY2ggaXMgdGhlIGRlIGZhY3RvIHN0YW5kYXJkIGZvciB0aGlzIGtpbmQgb2YgaW5mb3JtYXRpb24sIGVzcGVjaWFsbHkgZ2l2ZW4gdGhlIGtlcm5lbCYjMzk7cyBLY29uZmlnIHN0cnVjdHVyZS4gSSYjMzk7bSBhc3N1bWluZyB0aGF0IHRoZSBzcGVjaWZpY3MgSSYjMzk7bSBhZnRlciBhcmUgbGlrZWx5IGluIHRoZSBnZW5lcmFsIG5ldHdvcmsgY29uZmlndXJhdGlvbiBzZWN0aW9uLCBhbmQgYmFzZWQgb24gcGFzdCBleHBlcmllbmNlIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYXJvdW5kIGxpbmUgNDkxIHRvIHNlZSBpZiB0aGF0IHJpbmdzIGEgYmVsbC4gVGhpcyBpcyBhIGNvbW1vbiBwYXR0ZXJuIOKAkyB0aGUgS2NvbmZpZyBmaWxlcyBhcmUgb2Z0ZW4gb3JnYW5pemVkIGxvZ2ljYWxseSwgYW5kIHRoYXQgcG9zaXRpb24gZmVlbHMgbGlrZSBhIGdvb2QgaW5pdGlhbCBiZXQuIEZyb20gdGhlcmUgSSYjMzk7bGwgYmUgYWJsZSB0byB0cmFjZSBkZXBlbmRlbmNpZXMsIHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbmFsIGxvZ2ljLCBhbmQgcXVpY2tseSBpc29sYXRlIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIHN5bWJvbHMgYW5kIHRoZWlyIGFzc29jaWF0ZWQgb3B0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTU6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ4NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDg1Olx0XHQgIHdpdGggdGhlIGhlbHAgb2YgQlBGIHByb2dyYW1zLlxuIDQ4NjpcdFxuIDQ4NzpcdGNvbmZpZyBORVRfREVWTElOS1xuIDQ4ODpcdFx0Ym9vbFxuIDQ4OTpcdFx0ZGVmYXVsdCBuXG4gNDkwOlx0XG4gNDkxOlx0Y29uZmlnIFBBR0VfUE9PTFxuIDQ5MjpcdFx0Ym9vbFxuIDQ5MzpcdFxuIDQ5NDpcdGNvbmZpZyBQQUdFX1BPT0xfU1RBVFNcbiA0OTU6XHRcdGRlZmF1bHQgblxuIDQ5NjpcdFx0Ym9vbCBcJiMzNDtQYWdlIHBvb2wgc3RhdHNcJiMzNDtcbiA0OTc6XHRcdGRlcGVuZHMgb24gUEFHRV9QT09MXG4gNDk4Olx0XHRoZWxwXG4gNDk5Olx0XHQgIEVuYWJsZSBwYWdlIHBvb2wgc3RhdGlzdGljcyB0byB0cmFjayBwYWdlIGFsbG9jYXRpb24gYW5kIHJlY3ljbGluZ1xuIDUwMDpcdFx0ICBpbiBwYWdlIHBvb2xzLiBUaGlzIG9wdGlvbiBpbmN1cnMgYWRkaXRpb25hbCBDUFUgY29zdCBpbiBhbGxvY2F0aW9uXG4gNTAxOlx0XHQgIGFuZCByZWN5Y2xlIHBhdGhzIGFuZCBhZGRpdGlvbmFsIG1lbW9yeSBjb3N0IHRvIHN0b3JlIHRoZSBzdGF0aXN0aWNzLlxuIDUwMjpcdFx0ICBUaGVzZSBzdGF0aXN0aWNzIGFyZSBvbmx5IGF2YWlsYWJsZSBpZiB0aGlzIG9wdGlvbiBpcyBlbmFibGVkIGFuZCBpZlxuIDUwMzpcdFx0ICB0aGUgZHJpdmVyIHVzaW5nIHRoZSBwYWdlIHBvb2wgc3VwcG9ydHMgZXhwb3J0aW5nIHRoaXMgZGF0YS5cbiA1MDQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTU6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzQ3MwoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDI4MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgQ29uZmlndXJhdGlvbiBDaGFuZ2VzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSBzZWUgYSBkZXBlbmRlbmN5IGlzc3VlIHdpdGggYE5FVF9ERVZNRU1gLiBJdCBzZWVtcyBgUEFHRV9QT09MYCBpcyBhIGJvb2xlYW4gb3B0aW9uIHdpdGhvdXQgYSBkZWZhdWx0LCBidXQgZHJpdmVycyBnZW5lcmFsbHkgZW5hYmxlIGl0LiBUaGUgY29yZSBvZiB0aGUgcHJvYmxlbSBoZXJlIGlzIHRoYXQgaWYgd2Ugd2FudCBgTkVUX0RFVk1FTWAgZW5hYmxlZCwgd2UgKmFsc28qIG5lZWQgdG8gZW5zdXJlIGBETUFfU0hBUkVEX0JVRkZFUmAgYW5kIGBQQUdFX1BPT0xgIGFyZSBzZXQuIE1ha2VzIHBlcmZlY3Qgc2Vuc2U7IHNoYXJlZCBidWZmZXIgaW1wbGllcyB0aGUgbmVlZCBmb3IgYSBwYWdlIHBvb2wsIGFuZCB3ZSBoYXZlIHRvIGV4cGxpY2l0bHkgcmVxdWVzdCBpdC4gU28sIEkgbmVlZCB0byBhZGQgdGhvc2UgdG8gYEVuYWJsZUNvbmZpZ3NgLiBUaGlzIGlzIHRoZSBmaXJzdCBhY3Rpb24sIHNpbmNlIGl0IGVuc3VyZXMgdGhlIHByZS1yZXF1aXNpdGVzIGFyZSBtZXQuCgpOb3csIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9mIHRoZXNlIGNoYW5nZXMuIEkmIzM5O2xsIG5lZWQgdG8gcmV2aWV3IHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgYmVpbmcgbW9kaWZpZWQuIExldCYjMzk7cyBzZWUuLi4gdGhlIHBhdGNoIGlzIHRvdWNoaW5nIGBuZXRkZXZfbmxfYmluZF9yeF9kb2l0YCwgYG5ldGRldl9ubF9iaW5kX3R4X2RvaXRgLCBgbmV0ZGV2X25sX3NvY2tfcHJpdl9pbml0YCwgYG5ldGRldl9ubF9zb2NrX3ByaXZfZGVzdHJveWAsIGBuZXRfZGV2bWVtX3VuYmluZF9kbWFidWZgLCBhbmQgYG5ldF9kZXZtZW1fYmluZF9kbWFidWZgLgoKQWgsIHJpZ2h0LCBzbyBgbmV0ZGV2X25sX2JpbmRfcnhfZG9pdGAgYW5kIGBuZXRkZXZfbmxfYmluZF90eF9kb2l0YCBhcmUgb2J2aW91c2x5IG5ldGxpbmsgaGFuZGxlcnMuIFRoZXkgYXJlIGxpa2VseSByZXNwb25zaWJsZSBmb3IgcmVjZWl2aW5nIHRoZSBtZXNzYWdlcyBmcm9tIHVzZXJzcGFjZS4gYG5ldF9kZXZtZW1fYmluZF9kbWFidWZgIGFuZCBgbmV0X2Rldm1lbV91bmJpbmRfZG1hYnVmYCBhcmUgaW50ZXJlc3Rpbmc7IHRoZXkmIzM5O3JlIGNhbGxlZCBlaXRoZXIgZnJvbSB0aGUgbmV0bGluayBoYW5kbGVycyBvciBkaXJlY3RseSBieSB0aGUgZHJpdmVyIGNvZGUsIGJhc2VkIG9uIHRoZSBjYWxscy4gVGhlIGJpbmRpbmcgZnVuY3Rpb25zIHNvdW5kIGNyaXRpY2FsLgoKTXkgaW1tZWRpYXRlIGZvbGxvdy11cCB3aWxsIGJlIHRvIGNvbmZpcm0gd2hldGhlciB0aG9zZSBuZXRsaW5rIGhhbmRsZXJzIGFyZSBzdGF0aWMgb3Igbm90LiBLbm93aW5nIHRoZWlyIHNjb3BlIGlzIGltcG9ydGFudCBmb3IgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgc3lzdGVtIGFyY2hpdGVjdHVyZSBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNToxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZXRkZXZfbmxfYmluZF9yeF9kb2l0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvbmV0ZGV2LWdlbmwuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9uZXRkZXYtZ2VubC5jPTk4OT1uZXRkZXZfbmxfZ2V0X2RtYV9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdW5zaWduZWQgbG9uZyAqcnhxX2JpdG1hcCxcbi0tXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jLTEwMTItXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jOjEwMTM6aW50IG5ldGRldl9ubF9iaW5kX3J4X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbm5ldC9jb3JlL25ldGRldi1nZW5sLmMtMTAxNC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE1OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgzNDEKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIER5bmFtaWMgTmF0dXJlIGFuZCBMb2NhdGluZyB0aGUgUmVsZXZhbnQgRnVuY3Rpb24qKgoKUmlnaHQsIHNvIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggc29tZXRoaW5nIG5vbi1zdGF0aWMsIGluaGVyZW50bHkgZHluYW1pYy4gVGhhdCYjMzk7cyB0aGUga2V5IGFzc3VtcHRpb24uIE5vdywgZ2l2ZW4gdGhhdCwgbGV0JiMzOTtzIGRyaWxsIGRvd24gaW50byB0aGUgcG90ZW50aWFsIGNvZGUgcGF0aC4gVG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb24gb2YgdGhpcyBub24tc3RhdGljIHZhbHVlLCBJIG5lZWQgdG8ga25vdyAqd2hlcmUqIGl0JiMzOTtzIGJlaW5nIHVzZWQgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgc3lzdGVtLiBNeSBpbml0aWFsIGluc3RpbmN0LCBnaXZlbiB3aGF0IHdlJiMzOTtyZSBsaWtlbHkgZGVhbGluZyB3aXRoIChsaWtlbHkga2VybmVsIGNvZGUgcmVsYXRlZCB0byBtZW1vcnkgb3IgZGV2aWNlIGludGVyYWN0aW9uKSwgaXMgdG8gdHJhY2UgaXQgYmFjayB0byBzb21ldGhpbmcgbGlrZSBgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZmAuIFRoYXQgZnVuY3Rpb24gaXMgb2Z0ZW4gYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBleHBsb3JpbmcgdGhlc2UgdHlwZXMgb2Ygc2NlbmFyaW9zLiBJIHdhbnQgdG8gY2hlY2sgaXRzIGltcGxlbWVudGF0aW9uLCBhbmQgaG93IHRoZSB2YWx1ZSB3ZSYjMzk7dmUgYmVlbiBkaXNjdXNzaW5nIGZhY3RvcnMgaW50byBpdC4gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zIGZvciBtZW1vcnkgbWFuYWdlbWVudCwgRE1BLCBhbmQgZGF0YSB0cmFuc2Zlci4gVW5kZXJzdGFuZGluZyB0aGUgc3BlY2lmaWNzIG9mIGBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmYCB3aWxsIGhvcGVmdWxseSBnaXZlIG1lIHRoZSBjb250ZXh0IEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBzaWduaWZpY2FuY2UgYW5kIGltcGFjdCBvZiB0aGlzICYjMzQ7bm9uLXN0YXRpYyYjMzQ7IHByb3BlcnR5LiBJdCYjMzk7cyBhIGh5cG90aGVzaXMsIGJ1dCBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gdmFsaWRhdGUgbXkgaW5pdGlhbCBhc3N1bXB0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNToxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZXRfZGV2bWVtX2JpbmRfZG1hYnVmJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZGV2bWVtLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZGV2bWVtLmM9MTI0PXZvaWQgbmV0X2Rldm1lbV91bmJpbmRfZG1hYnVmKHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpiaW5kaW5nKVxuLS1cbm5ldC9jb3JlL2Rldm1lbS5jLTE1My1cbm5ldC9jb3JlL2Rldm1lbS5jOjE1NDppbnQgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1Zl90b19xdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgcnhxX2lkeCxcbm5ldC9jb3JlL2Rldm1lbS5jLTE1NS1cdFx0XHRcdCAgICBzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqYmluZGluZyxcbi0tXG5uZXQvY29yZS9kZXZtZW0uYz0xODM9c3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKlxubmV0L2NvcmUvZGV2bWVtLmM6MTg0Om5ldF9kZXZtZW1fYmluZF9kbWFidWYoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqdmRldixcbm5ldC9jb3JlL2Rldm1lbS5jLTE4NS1cdFx0ICAgICAgIHN0cnVjdCBkZXZpY2UgKmRtYV9kZXYsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE1OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg4OTAKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZmAgYW5kIFNvY2tldCBJbml0aWFsaXphdGlvbioqCgpIbW0sIHNvIGBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmYCBpc24mIzM5O3QgZGVjbGFyZWQgc3RhdGljLiBUaGF0IGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdC4gSXQgaW1wbGllcyB0aGlzIGZ1bmN0aW9uIGlzIGludGVuZGVkIGZvciBicm9hZGVyIHVzYWdlLCBwb3NzaWJseSBiZXlvbmQgdGhlIGltbWVkaWF0ZSBzY29wZSBvZiBpdHMgZGVmaW5pbmcgZmlsZS4gSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciB0aGF0IHdoZW4gdHJhY2luZyBkZXBlbmRlbmNpZXMuIEdpdmVuIGl0cyBuYW1pbmcsIGl0IGxpa2VseSBkZWFscyB3aXRoIERNQSBidWZmZXIgYmluZGluZywgcHJvYmFibHkgd2l0aGluIHRoZSBjb250ZXh0IG9mIG5ldHdvcmsgZGV2aWNlcy4gVGhhdCBub24tc3RhdGljIGRlY2xhcmF0aW9uIGNvdWxkIG1lYW4gaXQmIzM5O3MgY2FsbGVkIGZyb20gb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbC4gSSYjMzk7bGwgbWFrZSBhIG1lbnRhbCBub3RlIHRvIGNoZWNrIHRoZSBjcm9zcy1yZWZlcmVuY2VzIGxhdGVyLiBJIGFsc28gd2FudCB0byBjaGVjayB3aGVyZSBpdCBpcyBjYWxsZWQgdG8gaWRlbnRpZnkgYW55IGV4dGVybmFsIGNhbGxlcnMuCgpOb3csIGxldCBtZSBzaGlmdCBnZWFycyBzbGlnaHRseS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBuZXR3b3JrIGRldmljZSBjb250ZXh0LiBMZXQmIzM5O3MgZGVsdmUgaW50byBgbmV0ZGV2X25sX3NvY2tfcHJpdl9pbml0YC4gVW5kZXJzdGFuZGluZyBob3cgbmV0d29yayBkZXZpY2UgcHJpdmF0ZSBkYXRhIGlzIGluaXRpYWxpemVkIHZpYSB0aGUgbmV0bGluayBzb2NrZXQgd2lsbCBwcm92aWRlIGNyaXRpY2FsIGNvbnRleHQuIEkgY2FuJiMzOTt0IGJlIHN1cmUgdGhhdCB0aGlzIHdpbGwgcHJvdmlkZSB1c2VmdWwgaW5mb3JtYXRpb24gaW4gdGhpcyBzaXR1YXRpb24sIGJ1dCBpdCBpcyBhbHdheXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJIGtub3cgaXQgaGFuZGxlcyB0aGUgYWxsb2NhdGlvbiBhbmQgc2V0dXAgb2YgdGhlIHByaXZhdGUgZGF0YSBzdHJ1Y3R1cmVzIGFzc29jaWF0ZWQgd2l0aCBuZXRsaW5rIHNvY2tldHMsIHdoaWNoIGlzIGFuIGltcG9ydGFudCBwYXJ0IG9mIG5ldHdvcmsgZGV2aWNlIG1hbmFnZW1lbnQgYW5kIGNvbmZpZ3VyYXRpb24uIFRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGF0IHNvY2tldCB3aWxsIGxpa2VseSBpbnRlcmFjdCB3aXRoIHRoZSBETUEgYnVmZmVyIGJpbmRpbmcgZnVuY3Rpb24gSSB3YXMgbG9va2luZyBhdCBlYXJsaWVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNToxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZXRkZXZfbmxfc29ja19wcml2X2luaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9uZXRkZXYtZ2VubC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL25ldGRldi1nZW5sLmM9MTI0MT1pbnQgbmV0ZGV2X25sX3F1ZXVlX2NyZWF0ZV9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYy0xNDA3LVxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYzoxNDA4OnZvaWQgbmV0ZGV2X25sX3NvY2tfcHJpdl9pbml0KHN0cnVjdCBuZXRkZXZfbmxfc29jayAqcHJpdilcbm5ldC9jb3JlL25ldGRldi1nZW5sLmMtMTQwOS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE1OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk0MDMKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aGUgdGhvdWdodCBwcm9jZXNzIHVuZm9sZHM6CgoqKkludGVybmFsIHZzLiBFeHRlcm5hbDogQSBRdWljayBEaXZlIGludG8gYG5ldGRldl9ubF9zb2NrX3ByaXZgIEZ1bmN0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgYG5ldGRldl9ubF9zb2NrX3ByaXZfaW5pdGAgYW5kIGBuZXRkZXZfbmxfc29ja19wcml2X2Rlc3Ryb3lgIGZ1bmN0aW9ucy4gVGhlIGZhY3QgdGhhdCB0aGV5JiMzOTtyZSAqbm90KiBkZWNsYXJlZCBhcyBgc3RhdGljYCBpbW1lZGlhdGVseSBzZXRzIG9mZiBhIG1lbnRhbCBmbGFnLiBUaGF0IHVzdWFsbHkgbWVhbnMgdGhleSAqY291bGQqIGJlIGludGVuZGVkIGZvciBleHRlcm5hbCB1c2UsIG91dHNpZGUgdGhlIGN1cnJlbnQgY29tcGlsYXRpb24gdW5pdC4gQnV0IHRoYXQmIzM5O3MganVzdCBhbiBhc3N1bXB0aW9uLgoKSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciB0aGV5JiMzOTtyZSBhY3R1YWxseSBleHBvcnRlZCBhbmQgZGVzaWduZWQgdG8gYmUgcGFydCBvZiB0aGUgcHVibGljIEFQSSwgb3IgaWYgdGhleSYjMzk7cmUganVzdCB1c2VkIGludGVybmFsbHkgd2l0aGluIHRoZSBuZXR3b3JraW5nIHN1YnN5c3RlbS4gSXQmIzM5O3MgYSBrZXkgZGlzdGluY3Rpb24uIFRoZSBpbXBsaWNhdGlvbnMgYXJlIHNpZ25pZmljYW50OiBpZiB0aGV5IGFyZSBwYXJ0IG9mIHRoZSBwdWJsaWMgQVBJLCBhbnkgY2hhbmdlcyB0byB0aGVtIHJlcXVpcmUgZXh0cmEgY29uc2lkZXJhdGlvbiBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgYW5kIGV4dGVybmFsIGRlcGVuZGVuY3kgbWFuYWdlbWVudC4gQ29udmVyc2VseSwgaWYgdGhleSBhcmUgaW50ZXJuYWwsIHRoZWlyIGltcGxlbWVudGF0aW9uIGNhbiBiZSByZWZhY3RvcmVkIG9yIG1vZGlmaWVkIHdpdGggcmVsYXRpdmUgZnJlZWRvbS4gU28sIGxldCYjMzk7cyB0YWtlIGEgbG9vay4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoZXkmIzM5O3JlIGJlaW5nIHVzZWQgYW5kIGRlY2xhcmVkLCBtYXliZSBncmVwIHRocm91Z2ggdGhlIGNvZGUgb3IgdXNlIHNvbWUga2luZCBvZiBzeW1ib2wgbG9va3VwIHRvIHF1aWNrbHkgY2hlY2suIFRoZSBnb2FsIGlzIHRvIGRldGVybWluZSB0aGUgc2NvcGUgb2YgdGhlaXIgaW50ZW5kZWQgdXNlLCBhbmQgZGVjaWRlIGhvdyBpdCBlZmZlY3RzIGZ1dHVyZSBkZXZlbG9wbWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTU6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmV0ZGV2X25sX3NvY2tfcHJpdl9pbml0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL25ldGRldi1nZW5sLWdlbi5jPTI0OD1zdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfbXVsdGljYXN0X2dyb3VwIG5ldGRldl9ubF9tY2dycHNbXSA9IHtcbi0tXG5uZXQvY29yZS9uZXRkZXYtZ2VubC1nZW4uYy0yNTItXG5uZXQvY29yZS9uZXRkZXYtZ2VubC1nZW4uYzoyNTM6c3RhdGljIHZvaWQgX19uZXRkZXZfbmxfc29ja19wcml2X2luaXQodm9pZCAqcHJpdilcbm5ldC9jb3JlL25ldGRldi1nZW5sLWdlbi5jLTI1NC17XG5uZXQvY29yZS9uZXRkZXYtZ2VubC1nZW4uYzoyNTU6XHRuZXRkZXZfbmxfc29ja19wcml2X2luaXQocHJpdik7XG5uZXQvY29yZS9uZXRkZXYtZ2VubC1nZW4uYy0yNTYtfVxuLS1cbm5ldC9jb3JlL25ldGRldi1nZW5sLWdlbi5jPTI2Mz1zdHJ1Y3QgZ2VubF9mYW1pbHkgbmV0ZGV2X25sX2ZhbWlseSBfX3JvX2FmdGVyX2luaXQgPSB7XG4tLVxubmV0L2NvcmUvbmV0ZGV2LWdlbmwtZ2VuLmMtMjczLVx0LnNvY2tfcHJpdl9zaXplXHQ9IHNpemVvZihzdHJ1Y3QgbmV0ZGV2X25sX3NvY2spLFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwtZ2VuLmM6Mjc0Olx0LnNvY2tfcHJpdl9pbml0XHQ9IF9fbmV0ZGV2X25sX3NvY2tfcHJpdl9pbml0LFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwtZ2VuLmMtMjc1LVx0LnNvY2tfcHJpdl9kZXN0cm95ID0gX19uZXRkZXZfbmxfc29ja19wcml2X2Rlc3Ryb3ksXG4tLVxubmV0L2NvcmUvbmV0ZGV2LWdlbmwtZ2VuLmg9NDc9ZXh0ZXJuIHN0cnVjdCBnZW5sX2ZhbWlseSBuZXRkZXZfbmxfZmFtaWx5O1xubmV0L2NvcmUvbmV0ZGV2LWdlbmwtZ2VuLmgtNDgtXG5uZXQvY29yZS9uZXRkZXYtZ2VubC1nZW4uaDo0OTp2b2lkIG5ldGRldl9ubF9zb2NrX3ByaXZfaW5pdChzdHJ1Y3QgbmV0ZGV2X25sX3NvY2sgKnByaXYpO1xubmV0L2NvcmUvbmV0ZGV2LWdlbmwtZ2VuLmgtNTAtdm9pZCBuZXRkZXZfbmxfc29ja19wcml2X2Rlc3Ryb3koc3RydWN0IG5ldGRldl9ubF9zb2NrICpwcml2KTtcbi0tXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jPTEyNDE9aW50IG5ldGRldl9ubF9xdWV1ZV9jcmVhdGVfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbm5ldC9jb3JlL25ldGRldi1nZW5sLmMtMTQwNy1cbm5ldC9jb3JlL25ldGRldi1nZW5sLmM6MTQwODp2b2lkIG5ldGRldl9ubF9zb2NrX3ByaXZfaW5pdChzdHJ1Y3QgbmV0ZGV2X25sX3NvY2sgKnByaXYpXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jLTE0MDkte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNToxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDM0NwoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDExOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIE5ldGxpbmsgRmFtaWx5IFNvY2tldCBJbml0aWFsaXphdGlvbiBhbmQgRGVzdHJ1Y3Rpb24gQ2FsbGJhY2tzKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEl0IHNlZW1zIHdlJiMzOTtyZSBsb29raW5nIGF0IGZ1bmN0aW9ucyB1c2VkIGFzIGNhbGxiYWNrcyBkdXJpbmcgdGhlIGluaXRpYWxpemF0aW9uIGFuZCBkZXN0cnVjdGlvbiBvZiBuZXRsaW5rIGZhbWlseSBzb2NrZXRzLiBTcGVjaWZpY2FsbHksIHRoZSBhcmVhcyBvZiBpbnRlcmVzdCBmb3IgZnV6emluZyBhcHBlYXIgdG8gYmUgY2VudGVyZWQgYXJvdW5kIHNldmVyYWwgY29yZSBmdW5jdGlvbnMuIEkgc2VlIGBuZXRkZXZfbmxfYmluZF9yeF9kb2l0YCwgYG5ldGRldl9ubF9iaW5kX3R4X2RvaXRgLCBgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZmAsIGBuZXRfZGV2bWVtX3VuYmluZF9kbWFidWZgLCBgbmV0ZGV2X25sX3NvY2tfcHJpdl9pbml0YCwgYW5kIGBuZXRkZXZfbmxfc29ja19wcml2X2Rlc3Ryb3lgLiBUaG9zZSBhbGwgbG9vayBsaWtlIHBvdGVudGlhbCBlbnRyeSBwb2ludHMgZm9yIHNvbWUgZnV6emluZy4gR2l2ZW4gdGhlIGNvbnRleHQsIG15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoZXNlIGZ1bmN0aW9ucyBsaWtlbHkgaGFuZGxlIGludGVyYWN0aW9ucyBiZXR3ZWVuIG5ldHdvcmsgZGV2aWNlcyBhbmQgdGhlIG5ldGxpbmsgaW50ZXJmYWNlLCBpbmNsdWRpbmcgbWVtb3J5IG1hbmFnZW1lbnQuCgpNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIGNoZWNrIGZvciB0aGUgcHJlc2VuY2Ugb2YgYG5ldGRldl9ubF9iaW5kX3R4X2RvaXRgLCBJIHRoaW5rIHRoYXQgaXMgYSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGFuZCB3aWxsIG9mZmVyIHNvbWUgdW5kZXJzdGFuZGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTU6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmV0ZGV2X25sX2JpbmRfdHhfZG9pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL25ldGRldi1nZW5sLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvbmV0ZGV2LWdlbmwuYz0xMTIzPW5ldGRldl9maW5kX25ldG1lbV90eF9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jLTExNDgtXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jOjExNDk6aW50IG5ldGRldl9ubF9iaW5kX3R4X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbm5ldC9jb3JlL25ldGRldi1nZW5sLmMtMTE1MC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE1OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwODYzCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMjQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIE5ldHdvcmsgRGV2aWNlIE1lbW9yeSBNYW5hZ2VtZW50IENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7dmUgaWRlbnRpZmllZCB0aGUga2V5IHN5bWJvbHMgcmVsYXRlZCB0byB0aGlzIG5ldHdvcmsgZGV2aWNlIG1lbW9yeSBtYW5hZ2VtZW50IGZlYXR1cmU6IGBuZXRkZXZfbmxfYmluZF9yeF9kb2l0YCwgYG5ldGRldl9ubF9iaW5kX3R4X2RvaXRgLCBgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZmAsIGBuZXRfZGV2bWVtX3VuYmluZF9kbWFidWZgLCBgbmV0ZGV2X25sX3NvY2tfcHJpdl9pbml0YCwgYW5kIGBuZXRkZXZfbmxfc29ja19wcml2X2Rlc3Ryb3lgLiBUaGVzZSBjbGVhcmx5IHJlcHJlc2VudCB0aGUgY29yZSBmdW5jdGlvbnMgZm9yIGJpbmRpbmcgYW5kIHVuYmluZGluZyBETUEgYnVmZmVycywgYW5kIGluaXRpYWxpemluZy9kZXN0cm95aW5nIHRoZSByZWxldmFudCBzb2NrZXQgcHJpdmF0ZSBkYXRhIHN0cnVjdHVyZXMuCgpOb3csIGZvciB0aGUgZW5hYmxpbmcgY29uZmlndXJhdGlvbnMuIEkmIzM5O3ZlIGdvdCBgTkVUX0RFVk1FTWAsIGBETUFfU0hBUkVEX0JVRkZFUmAsIGFuZCBgUEFHRV9QT09MYC4gSW5pdGlhbGx5LCBJIGNvbnNpZGVyZWQgaWYgYE5FVF9ERVZNRU1gIHdhcyB0aGUgb25seSBuZWNlc3NhcnkgY29uZmlnLiBCdXQsIHdhaXQsIGEgY2xvc2VyIGxvb2sgcmV2ZWFscyBgTkVUX0RFVk1FTWAgaXMgZGVmaW5lZCBhcyBgZGVmX2Jvb2wgeWAsIGJ1dCAqZGVwZW5kcyogb24gYm90aCBgRE1BX1NIQVJFRF9CVUZGRVJgIGFuZCBgUEFHRV9QT09MYC4gVGhhdCYjMzk7cyBpbXBvcnRhbnQuCgpTbywgd2hpbGUgZW5hYmxpbmcgYERNQV9TSEFSRURfQlVGRkVSYCBhbmQgYFBBR0VfUE9PTGAgKndpbGwqIGF1dG9tYXRpY2FsbHkgZW5hYmxlIGBORVRfREVWTUVNYCwgZm9yIGNsYXJpdHkgYW5kIGV4cGxpY2l0IGNvbmZpZ3VyYXRpb24sIGl0JiMzOTtzIHNhZmVzdCB0byBsaXN0IGFsbCB0aHJlZTogYE5FVF9ERVZNRU1gLCBgRE1BX1NIQVJFRF9CVUZGRVJgLCBhbmQgYFBBR0VfUE9PTGAuIFRoaXMgZW5zdXJlcyB0aGF0IGFsbCB0aGUgZGVwZW5kZW5jaWVzIGFyZSBjbGVhcmx5IHNldC4KCkJlZm9yZSBJIGZpbmFsaXplIHRoaXMsIEkgc2hvdWxkIHZlcmlmeSB3aGV0aGVyIGBQQUdFX1BPT0xgIGl0c2VsZiBoYXMgYW55IGRlcGVuZGVuY2llcyB0aGF0IEkgbWF5IG5lZWQgdG8gdGFrZSBpbnRvIGNvbnNpZGVyYXRpb24uIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE1OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBQQUdFX1BPT0wmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvS2NvbmZpZz00ODc9Y29uZmlnIE5FVF9ERVZMSU5LXG4tLVxubmV0L0tjb25maWctNDkwLVxubmV0L0tjb25maWc6NDkxOmNvbmZpZyBQQUdFX1BPT0xcbm5ldC9LY29uZmlnLTQ5Mi1cdGJvb2xcbm5ldC9LY29uZmlnLTQ5My1cbm5ldC9LY29uZmlnOjQ5NDpjb25maWcgUEFHRV9QT09MX1NUQVRTXG5uZXQvS2NvbmZpZy00OTUtXHRkZWZhdWx0IG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTU6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE1ODkKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJpemVkIHRob3VnaHQgcHJvY2VzczoKCioqSW50ZXJuYWwgQ29kZSBBdWRpdCAtIFNpbXBsZSBDaGVja3MqKgoKUmlnaHQsIGxldCYjMzk7cyBqdXN0IG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIHNvbWV0aGluZyBvYnZpb3VzIGluIHRoaXMgY29kZWJhc2UuIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSB0aGUgaW1wYWN0IG9mIHRoZXNlIHZhcmlhYmxlcy4gSG1tLCBzbyBgUEFHRV9QT09MYCBpcyBqdXN0IGEgYm9vbGVhbi4gT2theSwgdGhhdCYjMzk7cyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLCBJIGNhbiBoYW5kbGUgdGhhdC4gTm93LCBJIG5lZWQgdG8gY2hlY2sgc29tZXRoaW5nIGVsc2UuIExldCYjMzk7cyBzZWUuLi4gYERNQV9TSEFSRURfQlVGRkVSYC4gSSBzaG91bGQgdmVyaWZ5IGlmIHRoYXQgaGFzIGFueSBkZXBlbmRlbmNpZXMgZmlyc3QuIEdvdHRhIHRoaW5rIGFib3V0IGFsbCB0aGUgcGxhY2VzIHRoaXMgbWlnaHQgYmUgdXNlZCBhbmQgYW55IGRvd25zdHJlYW0gaW1wYWN0LiBHb3QgaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE1OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBETUFfU0hBUkVEX0JVRkZFUiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmFzZS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmFzZS9LY29uZmlnPTIxMz1zb3VyY2UgXCYjMzQ7ZHJpdmVycy9iYXNlL3JlZ21hcC9LY29uZmlnXCYjMzQ7XG5kcml2ZXJzL2Jhc2UvS2NvbmZpZy0yMTQtXG5kcml2ZXJzL2Jhc2UvS2NvbmZpZzoyMTU6Y29uZmlnIERNQV9TSEFSRURfQlVGRkVSXG5kcml2ZXJzL2Jhc2UvS2NvbmZpZy0yMTYtXHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE1OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExODU0CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogODkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqU2ltcGxpZnlpbmcgdGhlIENvbmZpZ3VyYXRpb24gTG9naWMqKgoKUmlnaHQsIGl0JiMzOTtzIGp1c3QgYSBib29sZWFuIGZsYWcsIGZ1bmRhbWVudGFsbHkuIFRoaW5raW5nIGFib3V0IGBFbmFibGVDb25maWdzYCwgaXQgc2VlbXMgbGlrZSBpdCBjYW4gYmUgc3RyZWFtbGluZWQuIEJhc2VkIG9uIHdoYXQgSSBoYXZlLCBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IHdpdGggYSBsaXN0IG9mIHRoZSBrZXkgY29uZmlndXJhdGlvbnM6IGBbJiMzNDtORVRfREVWTUVNJiMzNDssICYjMzQ7RE1BX1NIQVJFRF9CVUZGRVImIzM0OywgJiMzNDtQQUdFX1BPT0wmIzM0O11gLgoKQnV0IHdhaXQsIGhvbGQgb24uIEkgbmVlZCB0byByZW1lbWJlciB0aGF0IGBORVRfREVWTUVNYCBpcyBkZWZpbmVkIGFzIGEgYGRlZl9ib29sIHlgLiBUaGF0IG1lYW5zIGl0JiMzOTtzIGVuYWJsZWQgY29uZGl0aW9uYWxseSwgZGVwZW5kaW5nIG9uIGl0cyBkZXBlbmRlbmNpZXMuIEkgY2FuJiMzOTt0IGp1c3QgYXNzdW1lIGl0JiMzOTtzIGFsd2F5cyAmIzM0O29uJiMzNDsgYmVjYXVzZSBvZiB0aGUgd2F5IHRoZSBrZXJuZWwgY29uZmlnIHN5c3RlbSB3b3Jrcy4gSSBuZWVkIHRvIGJlIHN1cmUgdGhhdCBpdCBpcyBldmVuIHVzZWQgdG8gY29tcGlsZSBgZGV2bWVtLm9gLCBiZWNhdXNlIGlmIG5vdCwgSSBtaWdodCBiZSBpbmNsdWRpbmcgdGhhdCBpbiB0aGUgbGlzdCBmb3Igbm8gcmVhc29uLiBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgdGhpcyBvcHRpb24gaGFzIGFuIGltcGFjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTU6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TkVUX0RFVk1FTSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL01ha2VmaWxlPTQ4PW9iai0kKENPTkZJR19ORVRfVEVTVCkgJiM0Mzs9IG5ldF90ZXN0Lm9cbm5ldC9jb3JlL01ha2VmaWxlOjQ5Om9iai0kKENPTkZJR19ORVRfREVWTUVNKSAmIzQzOz0gZGV2bWVtLm9cbm5ldC9jb3JlL01ha2VmaWxlLTUwLW9iai0kKENPTkZJR19ERUJVR19ORVQpICYjNDM7PSBsb2NrX2RlYnVnLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTU6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIyNjYKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipDaGVja2luZyB0aGUgYG5ldGRldl9ubF9iaW5kX3J4X2RvaXRgIENvbXBpbGF0aW9uKioKClllcy4gT2theSwgSSBuZWVkIHRvIHZlcmlmeSBzb21ldGhpbmcgcXVpY2tseS4gTGV0IG1lIHNlZS4uLiBJIHdhbnQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYG5ldGRldl9ubF9iaW5kX3J4X2RvaXRgIGlzIG9ubHkgY29tcGlsZWQgd2hlbiBgQ09ORklHX05FVF9ERVZNRU1gIGlzIGVuYWJsZWQsIG9yIGlmIGl0JiMzOTtzIGluY2x1ZGVkIHJlZ2FyZGxlc3MuIFRoaXMgaXMgc29tZXRoaW5nIHRoYXQgSSBuZWVkIHRvIGNsYXJpZnkgdG8gZW5zdXJlIHRoYXQgc29tZXRoaW5nIGV4cGVjdGVkIGlzIGhhcHBlbmluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTU6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmV0ZGV2X25sX2JpbmRfcnhfZG9pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL25ldGRldi1nZW5sLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvbmV0ZGV2LWdlbmwuYz05ODk9bmV0ZGV2X25sX2dldF9kbWFfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHVuc2lnbmVkIGxvbmcgKnJ4cV9iaXRtYXAsXG4tLVxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYy0xMDEyLVxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYzoxMDEzOmludCBuZXRkZXZfbmxfYmluZF9yeF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jLTEwMTQte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNToxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjU3OQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIFBvdGVudGlhbCBgQ09ORklHX05FVF9ERVZNRU1gIERlcGVuZGVuY2llcyoqCgpSaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGllY2Ugb2YgY29kZSBhbmQgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgdG8gbWluZCBpcywgJiMzNDtJcyB0aGlzIGZ1bmN0aW9uYWxpdHkgY29uZGl0aW9uYWwgb24gYENPTkZJR19ORVRfREVWTUVNYD8mIzM0OyBJIG5lZWQgdG8gcXVpY2tseSBlc3RhYmxpc2ggaWYgdGhlIHNlY3Rpb24gSSYjMzk7bSByZXZpZXdpbmcgcmVsaWVzIG9uIHRoYXQgY29uZmlndXJhdGlvbiBvcHRpb24uIEkmIzM5O20gZ29pbmcgdG8gc2NhbiB0aGUgc3Vycm91bmRpbmcgY29kZSBmb3IgYCNpZmRlZiBDT05GSUdfTkVUX0RFVk1FTWAgZGlyZWN0aXZlcy4gVGhhdCYjMzk7cyB0aGUgbW9zdCBkaXJlY3Qgd2F5IHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdy4gRGVwZW5kaW5nIG9uIGhvdyB3aWRlc3ByZWFkIHRoYXQgZGVmaW5lIGlzLCBJJiMzOTtsbCBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgY29kZSwgYW5kIG90aGVyIGRlZmluZXMsIHRvIGRldGVybWluZSBob3cgdGhhdCBpbnRlcmFjdHMuIFRpbWUgdG8gZ2V0IHRoZSBncmVwIGNvbW1hbmQgcnVubmluZyBvciBmaXJlIHVwIHRoZSBJREUgc2VhcmNoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNToxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19ORVRfREVWTUVNJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvbmV0ZGV2LWdlbmwuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE1OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyODIxCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhlIHRob3VnaHQgcHJvY2VzcyB1bmZvbGRzOgoKKipXYWl0IGEgTWludXRlLi4uIFdoZXJlJiMzOTtzIHRoZSBgQ09ORklHX05FVF9ERVZNRU1gIENoZWNrPyoqCgpPa2F5LCBob2xkIG9uLiBJJiMzOTttIGxvb2tpbmcgYXQgYG5ldGRldi1nZW5sLmNgLCBhbmQgSSB3YXMgKmNlcnRhaW4qIHRoZXJlIHdhcyBhIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGJsb2NrIGluIHRoZXJlIHNvbWV3aGVyZSByZWxhdGVkIHRvIGBDT05GSUdfTkVUX0RFVk1FTWAuIEJ1dCBJJiMzOTttIG5vdCBzZWVpbmcgaXQuIFRoYXQmIzM5O3Mgb2RkLiBJdCYjMzk7cyByZWFsbHkgdW5leHBlY3RlZCwgZ2l2ZW4gaG93IHRoaXMgY29kZSB1c3VhbGx5IGludGVyYWN0cyB3aXRoIGRpcmVjdCBtZW1vcnkgYWNjZXNzIGFuZCBwb3RlbnRpYWwgc2VjdXJpdHkgaW1wbGljYXRpb25zLgoKQWxyaWdodCwgdGltZSB0byBnZXQgc3BlY2lmaWMuIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBmdW5jdGlvbiB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiBMZXQmIzM5O3MgZHJpbGwgaW50byBgbmV0ZGV2X25sX2JpbmRfcnhfZG9pdGAgd2l0aGluIGBuZXRkZXYtZ2VubC5jYC4gVGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gc3RhcnQsIGFuZCBzZWUgaG93IHRoZSByZWxldmFudCBmdW5jdGlvbmFsaXR5IGlzIGltcGxlbWVudGVkIHdpdGhvdXQgYENPTkZJR19ORVRfREVWTUVNYCBndWFyZGluZyBpdC4gVGhpcyBpcyBnb2luZyB0byBiZSBpbnRlcmVzdGluZy4uLiBhbmQgcG90ZW50aWFsbHkgYSBjcml0aWNhbCBwb2ludCBmb3IgdnVsbmVyYWJpbGl0eSBhbmFseXNpcywgaWYgaXQmIzM5O3Mgb3BlcmF0aW5nIHdpdGhvdXQgdGhlIHVzdWFsIGd1YXJkcmFpbHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYWNjZXNzIHRvIHRoYXQgbWVtb3J5IGlzIGdyYW50ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE1OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvbmV0ZGV2LWdlbmwuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTAwMDpcdFx0XHRpZiAoZG1hX2RldiBcdTAwMjZcdTAwMjYgcnhxX2RtYV9kZXYgIT0gZG1hX2Rldikge1xuMTAwMTpcdFx0XHRcdE5MX1NFVF9FUlJfTVNHX0ZNVChleHRhY2ssIFwmIzM0O0RNQSBkZXZpY2UgbWlzbWF0Y2ggYmV0d2VlbiBxdWV1ZSAldSBhbmQgJXUgKG11bHRpLVBGIGRldmljZT8pXCYjMzQ7LFxuMTAwMjpcdFx0XHRcdFx0XHQgICByeHFfaWR4LCBwcmV2X3J4cV9pZHgpO1xuMTAwMzpcdFx0XHRcdHJldHVybiBFUlJfUFRSKC1FT1BOT1RTVVBQKTtcbjEwMDQ6XHRcdFx0fVxuMTAwNTpcdFxuMTAwNjpcdFx0XHRkbWFfZGV2ID0gcnhxX2RtYV9kZXY7XG4xMDA3Olx0XHRcdHByZXZfcnhxX2lkeCA9IHJ4cV9pZHg7XG4xMDA4Olx0XHR9XG4xMDA5Olx0XG4xMDEwOlx0XHRyZXR1cm4gZG1hX2RldjtcbjEwMTE6XHR9XG4xMDEyOlx0XG4xMDEzOlx0aW50IG5ldGRldl9ubF9iaW5kX3J4X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbjEwMTQ6XHR7XG4xMDE1Olx0XHRzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqYmluZGluZztcbjEwMTY6XHRcdHUzMiBpZmluZGV4LCBkbWFidWZfZmQsIHJ4cV9pZHg7XG4xMDE3Olx0XHRzdHJ1Y3QgbmV0ZGV2X25sX3NvY2sgKnByaXY7XG4xMDE4Olx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2O1xuMTAxOTpcdFx0dW5zaWduZWQgbG9uZyAqcnhxX2JpdG1hcDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTU6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM1MDEKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBhIGBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nYCoqCgpBbHJpZ2h0LCBJIHNlZSB0aGlzIGNvZGUgaXMgdXNpbmcgYHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nYC4gVGhhdCByaW5ncyBhIGJlbGwuLi4gaXQmIzM5O3MgcHJvYmFibHkgZGVmaW5lZCBpbiBgbmV0L2NvcmUvZGV2bWVtLmhgLiBUaW1lIHRvIGRvdWJsZSBjaGVjay4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhpcyBiaW5kaW5nIGlzIGJlaW5nIHVzZWQ7IHdoYXQmIzM5O3MgaXRzIHB1cnBvc2Ugd2l0aGluIHRoZSBjb250ZXh0IG9mIHRoZSBuZXR3b3JraW5nIGRldmljZSBtZW1vcnkgbWFuYWdlbWVudC4gTGV0JiMzOTtzIGRpdmUgaW50byB0aGF0IGhlYWRlciBmaWxlIGFuZCBzZWUgd2hhdCYjMzk7cyB3aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNToxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfTkVUX0RFVk1FTSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL2Rldm1lbS5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL2Rldm1lbS5oPTE4PXN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nIHtcbi0tXG5uZXQvY29yZS9kZXZtZW0uaC03Ni1cbm5ldC9jb3JlL2Rldm1lbS5oOjc3OiNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWTUVNKVxubmV0L2NvcmUvZGV2bWVtLmgtNzgtLyogT3duZXIgb2YgdGhlIGRtYS1idWYgY2h1bmtzIGluc2VydGVkIGludG8gdGhlIGdlbiBwb29sLiBFYWNoIHNjYXR0ZXJsaXN0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE1OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzODE2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIG15c2VsZjoKCioqSW52ZXN0aWdhdGluZyBgbmV0ZGV2X25sX2JpbmRfcnhfZG9pdGAgYW5kIENPTkZJR19ORVRfREVWTUVNKioKCk9rYXksIHNvIEkmIzM5O20gcHJldHR5IHN1cmUgYG5ldGRldl9ubF9iaW5kX3J4X2RvaXRgIGlzIGFsd2F5cyBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwuIFRoZSBpbnRlcmVzdGluZyBxdWVzdGlvbiBpcyB3aGV0aGVyIGl0IGp1c3Qgc2lsZW50bHkgZmFpbHMsIG9yIGFjdGl2ZWx5IHJldHVybnMgYW4gZXJyb3IgaWYgYENPTkZJR19ORVRfREVWTUVNYCAqaXNuJiMzOTt0KiBkZWZpbmVkLiBJIG5lZWQgdG8gY29uZmlybSB0aGF0IGJlaGF2aW9yLiBUbyBkbyB0aGF0IEkgbmVlZCB0byBkaXZlIGludG8gdGhlIHNvdXJjZSwgc3BlY2lmaWNhbGx5IGBuZXQvY29yZS9kZXZtZW0uaGAuIExldCYjMzk7cyB0YWtlIGEgbG9vayBhcm91bmQgbGluZSA3NywgdGhhdCYjMzk7cyB1c3VhbGx5IHdoZXJlIHRoZXNlIHR5cGVzIG9mIGNvbmRpdGlvbmFsIGRlZmluZXMgYXJlIGhhbmRsZWQuIEkgZXhwZWN0IHRvIGZpbmQgc29tZSBgI2lmZGVmIENPTkZJR19ORVRfREVWTUVNYCBvciBzb21ldGhpbmcgc2ltaWxhciB0aGF0IGVpdGhlciBlbmFibGVzIG9yIGRpc2FibGVzIHBhcnRzIG9mIHRoZSBmdW5jdGlvbiYjMzk7cyBsb2dpYy4gVGhhdCBzaG91bGQgdGVsbCB0aGUgdGFsZSEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTU6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9kZXZtZW0uaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNzA6XHRcdCAqIG5ldF9pb3ZzIGluIHRoZSBUWCBwYXRoLlxuICA3MTpcdFx0ICovXG4gIDcyOlx0XHRzdHJ1Y3QgbmV0X2lvdiAqKnR4X3ZlYztcbiAgNzM6XHRcbiAgNzQ6XHRcdHN0cnVjdCB3b3JrX3N0cnVjdCB1bmJpbmRfdztcbiAgNzU6XHR9O1xuICA3NjpcdFxuICA3NzpcdCNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWTUVNKVxuICA3ODpcdC8qIE93bmVyIG9mIHRoZSBkbWEtYnVmIGNodW5rcyBpbnNlcnRlZCBpbnRvIHRoZSBnZW4gcG9vbC4gRWFjaCBzY2F0dGVybGlzdFxuICA3OTpcdCAqIGVudHJ5IGZyb20gdGhlIGRtYWJ1ZiBpcyBpbnNlcnRlZCBpbnRvIHRoZSBnZW5wb29sIGFzIGEgY2h1bmssIGFuZCBuZWVkc1xuICA4MDpcdCAqIHRoaXMgb3duZXIgc3RydWN0IHRvIGtlZXAgdHJhY2sgb2Ygc29tZSBtZXRhZGF0YSBuZWNlc3NhcnkgdG8gY3JlYXRlXG4gIDgxOlx0ICogYWxsb2NhdGlvbnMgZnJvbSB0aGlzIGNodW5rLlxuICA4MjpcdCAqL1xuICA4MzpcdHN0cnVjdCBkbWFidWZfZ2VucG9vbF9jaHVua19vd25lciB7XG4gIDg0Olx0XHRzdHJ1Y3QgbmV0X2lvdl9hcmVhIGFyZWE7XG4gIDg1Olx0XHRzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqYmluZGluZztcbiAgODY6XHRcbiAgODc6XHRcdC8qIGRtYV9hZGRyIG9mIHRoZSBzdGFydCBvZiB0aGUgY2h1bmsuICAqL1xuICA4ODpcdFx0ZG1hX2FkZHJfdCBiYXNlX2RtYV9hZGRyO1xuICA4OTpcdH07XG4gIDkwOlx0XG4gIDkxOlx0dm9pZCBfX25ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmdfZnJlZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndxKTtcbiAgOTI6XHRzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqXG4gIDkzOlx0bmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICp2ZGV2LFxuICA5NDpcdFx0XHQgICAgICAgc3RydWN0IGRldmljZSAqZG1hX2RldixcbiAgOTU6XHRcdFx0ICAgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbixcbiAgOTY6XHRcdFx0ICAgICAgIHVuc2lnbmVkIGludCBkbWFidWZfZmQsIHN0cnVjdCBuZXRkZXZfbmxfc29jayAqcHJpdixcbiAgOTc6XHRcdFx0ICAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG4gIDk4Olx0c3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKm5ldF9kZXZtZW1fbG9va3VwX2RtYWJ1Zih1MzIgaWQpO1xuICA5OTpcdHZvaWQgbmV0X2Rldm1lbV91bmJpbmRfZG1hYnVmKHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpiaW5kaW5nKTtcbiAxMDA6XHRpbnQgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1Zl90b19xdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgcnhxX2lkeCxcbiAxMDE6XHRcdFx0XHRcdCAgICBzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqYmluZGluZyxcbiAxMDI6XHRcdFx0XHRcdCAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xuIDEwMzpcdFxuIDEwNDpcdHN0YXRpYyBpbmxpbmUgc3RydWN0IGRtYWJ1Zl9nZW5wb29sX2NodW5rX293bmVyICpcbiAxMDU6XHRuZXRfZGV2bWVtX2lvdl90b19jaHVua19vd25lcihjb25zdCBzdHJ1Y3QgbmV0X2lvdiAqbmlvdilcbiAxMDY6XHR7XG4gMTA3Olx0XHRzdHJ1Y3QgbmV0X2lvdl9hcmVhICpvd25lciA9IG5ldF9pb3Zfb3duZXIobmlvdik7XG4gMTA4Olx0XG4gMTA5Olx0XHRyZXR1cm4gY29udGFpbmVyX29mKG93bmVyLCBzdHJ1Y3QgZG1hYnVmX2dlbnBvb2xfY2h1bmtfb3duZXIsIGFyZWEpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNToxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDgyNQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdW5kZXJzdGFuZGluZywgcHJlc2VudGVkIGFzIGEgZmlyc3QtcGVyc29uIGFjY291bnQsIHRhaWxvcmVkIGZvciBzb21lb25lIHdobyBrbm93cyB0aGVpciB3YXkgYXJvdW5kIHRoZXNlIHNvcnRzIG9mIHN5c3RlbXM6CgoqKlVuZGVmaW5pbmcgQ09ORklHX05FVF9ERVZNRU06IFdoYXQgTm93PyoqCgpSaWdodCwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zIG9mICpub3QqIGRlZmluaW5nIGBDT05GSUdfTkVUX0RFVk1FTWAuIEkgaW1tZWRpYXRlbHkgc3RhcnQgdG8gcGljdHVyZSB0aGUgbmV0d29yayBkZXZpY2UgbWVtb3J5IG1hcHBpbmcgcHJvY2Vzcy4gSXQmIzM5O3MgYSBjcml0aWNhbCBwaWVjZSwgaXNuJiMzOTt0IGl0PyBXaXRob3V0IGl0LCBJJiMzOTttIGV4cGVjdGluZyBzb21lIHByZXR0eSBzaWduaWZpY2FudCBjaGFuZ2VzIGluIGhvdyB0aGUga2VybmVsIGludGVyYWN0cyB3aXRoIHRoZSBoYXJkd2FyZS4gSSBrbm93IHRoaXMgdHlwaWNhbGx5IGltcGFjdHMgaG93IHRoZSBkcml2ZXIgaGFuZGxlcyBETUEgYnVmZmVycywgaG93IGl0IGFjY2Vzc2VzIHRoZSBoYXJkd2FyZSByZWdpc3RlcnMsIGFuZCBnZW5lcmFsbHkgaG93IGl0IHdvcmtzIHdpdGggbWVtb3J5LgoKSSYjMzk7bSBzdGFydGluZyB0byB0aGluayBhYm91dCB0aGUgZGlmZmVyZW50IG5ldHdvcmsgZHJpdmVycyBhbmQgaG93IHRoZXkgYXJlIGNvbmZpZ3VyZWQuIEkgd2lsbCBuZWVkIHRvIGNvbnNpZGVyIHdoZXRoZXIgaXQmIzM5O3MgZW5hYmxlZCBvciBkaXNhYmxlZCwgYW5kIGhvdyBpdCBkZWFscyB3aXRoIGFjY2Vzc2luZyB0aGUgbmV0d29yayBkZXZpY2UmIzM5O3MgbWVtb3J5LiBNeSBleHBlY3RhdGlvbiBpcyB0aGF0IHRoZSBjb2RlIHBhdGhzIHJlbGF0ZWQgdG8gcGh5c2ljYWwgbWVtb3J5IGFjY2VzcyB0aHJvdWdoIGRldmljZSBtZW1vcnkgd2lsbCBiZSBkaXNhYmxlZCwgcGVyaGFwcyByZXBsYWNlZCB3aXRoIHNvbWV0aGluZyB0aGF0IGludGVyYWN0cyB3aXRoIHRoZSBkZXZpY2UgdmlhIGRpZmZlcmVudCBtZXRob2RzLiBNYXliZSB0aGVyZSYjMzk7cyBzb21lIGtpbmQgb2YgZmFsbGJhY2sgb3IgYSBkaWZmZXJlbnQgbWVjaGFuaXNtIOKAkyBwb3RlbnRpYWxseSBzb21ldGhpbmcgdXNpbmcgSS9PIG1lbW9yeSBtYXBwZWQgaW50byB0aGUga2VybmVsJiMzOTtzIHZpcnR1YWwgYWRkcmVzcyBzcGFjZSwgb3IgbWF5YmUgc29tZSBvdGhlciBraW5kIG9mIG1lY2hhbmlzbS4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoLiAKCkkmIzM5O20gYW50aWNpcGF0aW5nIHRoYXQgYW55IGV4aXN0aW5nIG5ldHdvcmsgZHJpdmVyIGNvZGUgdGhhdCBkaXJlY3RseSBhY2Nlc3NlcyBkZXZpY2UgbWVtb3J5LCBhcyBpZiBpdCB3ZXJlIHJlZ3VsYXIgUkFNLCB3aWxsIGxpa2VseSBicmVhay4gSSYjMzk7bGwgbmVlZCB0byBsb29rIGNsb3NlbHkgYXQgdGhlIGRyaXZlciBjb2RlIHRoYXQgdXNlcyBgaW9yZW1hcGAsIG9yIGFueSBvZiB0aG9zZSBkZXZpY2UgbWVtb3J5IGFjY2VzcyBmdW5jdGlvbnMuIEkmIzM5O2xsIG5lZWQgdG8gZmluZCBvdXQgd2hhdCBoYXBwZW5zIHdpdGggdGhlIGNvZGUgdGhhdCBkZXBlbmRzIG9uIHRoZXNlIG1hY3JvcyBhbmQsIGlmIHRoZXJlIGFyZSBhbnksIHdoZXRoZXIgdGhlcmUmIzM5O3MgYW4gYWx0ZXJuYXRpdmUgdG8gdGhlc2UgZnVuY3Rpb25zIHRvIGRlYWwgd2l0aCB0aGUgbWVtb3J5LgoKRXNzZW50aWFsbHksIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGUgc3lzdGVtIGhhbmRsZXMgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IG9mIHRoZSBuZXR3b3JrIGRldmljZXMgd2hlbiBgQ09ORklHX05FVF9ERVZNRU1gIGlzIG5vdCBhY3RpdmUsIGFuZCBJIG5lZWQgdG8gcHJlZGljdCBob3cgaXQgbWlnaHQgYmVoYXZlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNToxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL2Rldm1lbS5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTEwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMTA6XHR9XG4gMTExOlx0XG4gMTEyOlx0c3RhdGljIGlubGluZSBzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqXG4gMTEzOlx0bmV0X2Rldm1lbV9pb3ZfYmluZGluZyhjb25zdCBzdHJ1Y3QgbmV0X2lvdiAqbmlvdilcbiAxMTQ6XHR7XG4gMTE1Olx0XHRyZXR1cm4gbmV0X2Rldm1lbV9pb3ZfdG9fY2h1bmtfb3duZXIobmlvdiktXHUwMDNlYmluZGluZztcbiAxMTY6XHR9XG4gMTE3Olx0XG4gMTE4Olx0c3RhdGljIGlubGluZSB1MzIgbmV0X2Rldm1lbV9pb3ZfYmluZGluZ19pZChjb25zdCBzdHJ1Y3QgbmV0X2lvdiAqbmlvdilcbiAxMTk6XHR7XG4gMTIwOlx0XHRyZXR1cm4gbmV0X2Rldm1lbV9pb3ZfYmluZGluZyhuaW92KS1cdTAwM2VpZDtcbiAxMjE6XHR9XG4gMTIyOlx0XG4gMTIzOlx0c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG5ldF9pb3ZfdmlydHVhbF9hZGRyKGNvbnN0IHN0cnVjdCBuZXRfaW92ICpuaW92KVxuIDEyNDpcdHtcbiAxMjU6XHRcdHN0cnVjdCBuZXRfaW92X2FyZWEgKm93bmVyID0gbmV0X2lvdl9vd25lcihuaW92KTtcbiAxMjY6XHRcbiAxMjc6XHRcdHJldHVybiBvd25lci1cdTAwM2ViYXNlX3ZpcnR1YWwgJiM0MztcbiAxMjg6XHRcdCAgICAgICAoKHVuc2lnbmVkIGxvbmcpbmV0X2lvdl9pZHgobmlvdikgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQpO1xuIDEyOTpcdH1cbiAxMzA6XHRcbiAxMzE6XHRzdGF0aWMgaW5saW5lIGJvb2xcbiAxMzI6XHRuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nX2dldChzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqYmluZGluZylcbiAxMzM6XHR7XG4gMTM0Olx0XHRyZXR1cm4gcGVyY3B1X3JlZl90cnlnZXQoXHUwMDI2YmluZGluZy1cdTAwM2VyZWYpO1xuIDEzNTpcdH1cbiAxMzY6XHRcbiAxMzc6XHRzdGF0aWMgaW5saW5lIHZvaWRcbiAxMzg6XHRuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nX3B1dChzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqYmluZGluZylcbiAxMzk6XHR7XG4gMTQwOlx0XHRwZXJjcHVfcmVmX3B1dChcdTAwMjZiaW5kaW5nLVx1MDAzZXJlZik7XG4gMTQxOlx0fVxuIDE0MjpcdFxuIDE0MzpcdHZvaWQgbmV0X2Rldm1lbV9nZXRfbmV0X2lvdihzdHJ1Y3QgbmV0X2lvdiAqbmlvdik7XG4gMTQ0Olx0dm9pZCBuZXRfZGV2bWVtX3B1dF9uZXRfaW92KHN0cnVjdCBuZXRfaW92ICpuaW92KTtcbiAxNDU6XHRcbiAxNDY6XHRzdHJ1Y3QgbmV0X2lvdiAqXG4gMTQ3Olx0bmV0X2Rldm1lbV9hbGxvY19kbWFidWYoc3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKmJpbmRpbmcpO1xuIDE0ODpcdHZvaWQgbmV0X2Rldm1lbV9mcmVlX2RtYWJ1ZihzdHJ1Y3QgbmV0X2lvdiAqcHBpb3YpO1xuIDE0OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNToxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTkyNQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKk1pc3NpbmcgYCNlbHNlYD8gQSBTdXNwZWN0IENvbmRpdGlvbmFsIENvbXBpbGF0aW9uKioKCkFscmlnaHQsIGxldCBtZSBqdXN0IHBhcnNlIHRoaXMgY29kZS4uLiBIYW5nIG9uIGEgc2Vjb25kLiBJJiMzOTttIHNjYW5uaW5nIHRoaXMgY29uZGl0aW9uYWwgYmxvY2sgd2l0aCB0aGUgYCNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWTUVNKWAgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZSBhbmQuLi4gd2hlcmUmIzM5O3MgdGhlIGNvcnJlc3BvbmRpbmcgYCNlbHNlYCBjbGF1c2U/IFRoaXMgaXMgaW1tZWRpYXRlbHkgYSByZWQgZmxhZy4gQ29uZGl0aW9uYWwgY29tcGlsYXRpb24gaXMgY3JpdGljYWwgZm9yIHBvcnRhYmlsaXR5IGFuZCBlZmZpY2llbnQgcmVzb3VyY2UgdXNhZ2UsIGVzcGVjaWFsbHkgaW4gZW1iZWRkZWQgc3lzdGVtcy4gV2l0aG91dCBhbiBgI2Vsc2VgLCB0aGUgY29kZSB1bmRlciB0aGUgYCNpZmAgZWl0aGVyIGV4ZWN1dGVzIG9yIGlzIGNvbXBsZXRlbHkgZXhjbHVkZWQuCgpNeSBndXQgZmVlbGluZyBpcyB0aGF0IHNvbWV0aGluZyYjMzk7cyBtaXNzaW5nIGhlcmUuIEl0JiMzOTtzIHBvc3NpYmxlIHRoZSBjb2RlIGlzIGludGVudGlvbmFsbHkgc3RydWN0dXJlZCB0aGlzIHdheSwgYnV0IHRoZSBsYWNrIG9mIGFuIGBlbHNlYCBzdHJvbmdseSBzdWdnZXN0cyB0aGF0IGVpdGhlcjoKCjEuICAqKkEgY3JpdGljYWwgcGF0aCBpcyB1bmhhbmRsZWQ6KiogSWYgYENPTkZJR19ORVRfREVWTUVNYCBpcyAqbm90KiBkZWZpbmVkLCB3aGF0IHNob3VsZCBoYXBwZW4/IElzIHRoZXJlIGEgZGVmYXVsdCBiZWhhdmlvciBiYWtlZCBpbiBzb21ld2hlcmUgZWxzZSB0aGF0JiMzOTtzIGltcGxpY2l0bHkgcmVsaWVkIHVwb24/IFRoaXMgaXMgc2xvcHB5IGFuZCBjYW4gbGVhZCB0byB1bmV4cGVjdGVkIGJlaGF2aW9yIG9yIGV2ZW4gY29tcGlsYXRpb24gZXJyb3JzIGRvd24gdGhlIGxpbmUgaWYgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24gY2hhbmdlcy4KMi4gICoqUmVkdW5kYW50IENvZGUgb3IgYSBMb2dpYyBFcnJvcjoqKiBNYXliZSB0aGUgY29kZSAqaW50ZW5kZWQqIHRvIGhhbmRsZSB0aGUgYWJzZW5jZSBvZiBgQ09ORklHX05FVF9ERVZNRU1gIGlzIGluIGZhY3QgZXhlY3V0ZWQgZXZlcnkgdGltZSwgYnV0IGNvbmRpdGlvbmFsbHkuCjMuICAqKkEgcG90ZW50aWFsIGJ1ZzoqKiBBbiBpbnRlbmRlZCBzZWN0aW9uIG9mIGNvZGUgd2FzIGZvcmdvdHRlbi4KCkkgbmVlZCB0byBkaWcgZGVlcGVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZW50IG9mIHRoaXMgZW50aXJlIHNlY3Rpb24uIElzIGBDT05GSUdfTkVUX0RFVk1FTWAgYSBoYXJkd2FyZSBhYnN0cmFjdGlvbj8gSXMgdGhlIGNvZGUgd2l0aGluIHRoaXMgYCNpZmAgc2VjdGlvbiBzcGVjaWZpYyB0byBhIHBhcnRpY3VsYXIgbWVtb3J5IG1hcHBpbmcgb3IgaGFyZHdhcmUgaW50ZXJmYWNlPyBEZXBlbmRpbmcgb24gdGhlIGNvbnRleHQsIHRoaXMgY291bGQgaGF2ZSBzZXJpb3VzIGltcGxpY2F0aW9ucyBmb3IgcG9ydGFiaWxpdHksIGRyaXZlciBzZWxlY3Rpb24sIG9yIGV2ZW4gc2VjdXJpdHksIGlmIGl0JiMzOTtzIG1pc3NpbmcgY3JpdGljYWwgYm91bmRhcnkgY2hlY2tzIHdpdGhvdXQgdGhlIGVsc2UuIEkgbmVlZCB0byB0cmFjZSB0aGlzIGJhY2sgdG8gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgdGhlIHN1cnJvdW5kaW5nIGNvZGUsIGFuZCBhbnkgcmVsYXRlZCBkb2N1bWVudGF0aW9uLiBBIG1pc3NpbmcgYGVsc2VgIGNsYXVzZSBpbiBhIHByZXByb2Nlc3NvciBkaXJlY3RpdmUgaXMgb2Z0ZW4gYSBzeW1wdG9tIG9mIHNvbWV0aGluZyBkZWVwZXIsIGFuZCBpdCYjMzk7cyBzb21ldGhpbmcgSSBuZWVkIHRvIGZ1bGx5IHVuZGVyc3RhbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE1OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvZGV2bWVtLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE1MDpcdFxuIDE1MTpcdHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpcbiAxNTI6XHRuZXRfZGV2bWVtX2dldF9iaW5kaW5nKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IGRtYWJ1Zl9pZCk7XG4gMTUzOlx0c3RydWN0IG5ldF9pb3YgKlxuIDE1NDpcdG5ldF9kZXZtZW1fZ2V0X25pb3ZfYXQoc3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKmJpbmRpbmcsIHNpemVfdCBhZGRyLFxuIDE1NTpcdFx0XHQgICAgICAgc2l6ZV90ICpvZmYsIHNpemVfdCAqc2l6ZSk7XG4gMTU2Olx0XG4gMTU3Olx0I2Vsc2VcbiAxNTg6XHRzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZztcbiAxNTk6XHRcbiAxNjA6XHRzdGF0aWMgaW5saW5lIHZvaWRcbiAxNjE6XHRuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nX3B1dChzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqYmluZGluZylcbiAxNjI6XHR7XG4gMTYzOlx0fVxuIDE2NDpcdFxuIDE2NTpcdHN0YXRpYyBpbmxpbmUgdm9pZCBuZXRfZGV2bWVtX2dldF9uZXRfaW92KHN0cnVjdCBuZXRfaW92ICpuaW92KVxuIDE2NjpcdHtcbiAxNjc6XHR9XG4gMTY4Olx0XG4gMTY5Olx0c3RhdGljIGlubGluZSB2b2lkIG5ldF9kZXZtZW1fcHV0X25ldF9pb3Yoc3RydWN0IG5ldF9pb3YgKm5pb3YpXG4gMTcwOlx0e1xuIDE3MTpcdH1cbiAxNzI6XHRcbiAxNzM6XHRzdGF0aWMgaW5saW5lIHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpcbiAxNzQ6XHRuZXRfZGV2bWVtX2JpbmRfZG1hYnVmKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKnZkZXYsXG4gMTc1Olx0XHRcdCAgICAgICBzdHJ1Y3QgZGV2aWNlICpkbWFfZGV2LFxuIDE3NjpcdFx0XHQgICAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uLFxuIDE3NzpcdFx0XHQgICAgICAgdW5zaWduZWQgaW50IGRtYWJ1Zl9mZCxcbiAxNzg6XHRcdFx0ICAgICAgIHN0cnVjdCBuZXRkZXZfbmxfc29jayAqcHJpdixcbiAxNzk6XHRcdFx0ICAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiAxODA6XHR7XG4gMTgxOlx0XHRyZXR1cm4gRVJSX1BUUigtRU9QTk9UU1VQUCk7XG4gMTgyOlx0fVxuIDE4MzpcdFxuIDE4NDpcdHN0YXRpYyBpbmxpbmUgc3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKm5ldF9kZXZtZW1fbG9va3VwX2RtYWJ1Zih1MzIgaWQpXG4gMTg1Olx0e1xuIDE4NjpcdFx0cmV0dXJuIE5VTEw7XG4gMTg3Olx0fVxuIDE4ODpcdFxuIDE4OTpcdHN0YXRpYyBpbmxpbmUgdm9pZFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNToxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzAxNgoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDE3NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIERlcGVuZGVuY3kgQ2hhaW4gZm9yIE5ldGxpbmsgVGVzdGluZyoqCgpPa2F5LCBzbyBJIHNlZSB0aGF0IGBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmYCBpcyBnb2luZyB0byBjcmFwIG91dCB3aXRoIGAtRU9QTk9UU1VQUGAgaWYgYENPTkZJR19ORVRfREVWTUVNYCBpc24mIzM5O3Qgc2V0LiBUaGF0JiMzOTtzIG5vIGdvb2QgZm9yIGFjdHVhbGx5IHRlc3RpbmcgdGhlIGludGVuZGVkIGZ1bmN0aW9uYWxpdHkuIEhvd2V2ZXIsIGBuZXRkZXZfbmxfYmluZF9yeF9kb2l0YCBpcyBhbHdheXMgY29tcGlsZWQsIHdoaWNoIGlzIGdyZWF0IGJlY2F1c2UgaXQgbWVhbnMgdGhlcmUmIzM5O3Mgc29tZXRoaW5nIHRvIGhvb2sgaW50by4KClNvLCB0byBwcm9wZXJseSB0ZXN0IHRoZSBjb3JlIGxvZ2ljIG9mIHdoYXQgSSYjMzk7bSBhZnRlciwgSSBhYnNvbHV0ZWx5ICpuZWVkKiBgQ09ORklHX05FVF9ERVZNRU1gIGVuYWJsZWQuIE5vIHdheSBhcm91bmQgaXQuCgpOb3csIGxldCYjMzk7cyB0cmFjZSB0aGlzIGRlcGVuZGVuY3kuIFJpZ2h0LCBgQ09ORklHX05FVF9ERVZNRU1gIHJlbGllcyBvbiBib3RoIGBETUFfU0hBUkVEX0JVRkZFUmAgYW5kIGBQQUdFX1BPT0xgLiBUaGF0JiMzOTtzIHRoZSBmdWxsIGNoYWluLgoKVGhlcmVmb3JlLCBmb3IgbXkgYEVuYWJsZUNvbmZpZ3NgIGxpc3QsIEkmIzM5O20gZ29pbmcgdG8gbmVlZDogYFsmIzM0O05FVF9ERVZNRU0mIzM0OywgJiMzNDtETUFfU0hBUkVEX0JVRkZFUiYjMzQ7LCAmIzM0O1BBR0VfUE9PTCYjMzQ7XWAuIFRob3NlIHRocmVlIGFyZSBlc3NlbnRpYWwgdG8gcHJvcGVybHkgZW5hYmxlIGFuZCB0ZXN0IHRoZSByZWxldmFudCBjb21wb25lbnRzLgoKTm93LCBhIHF1aWNrIGNoZWNrIHRvIGNvbmZpcm06IElzIGBuZXRkZXZfbmxfYmluZF9yeF9kb2l0YCBhY3R1YWxseSByZWFjaGFibGU/IEl0JiMzOTtzIGEgbmV0bGluayBoYW5kbGVyLCBhbmQgaXQmIzM5O3MgbGlrZWx5IHBhcnQgb2YgdGhlIGBuZXRkZXZfbmxfZmFtaWx5YC4gTGV0IG1lIGp1c3QgdmVyaWZ5IHRoYXQgbm93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNToxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZXRkZXZfbmxfYmluZF9yeF9kb2l0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvbmV0ZGV2LWdlbmwtZ2VuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvbmV0ZGV2LWdlbmwtZ2VuLmM9MTM4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9zcGxpdF9vcHMgbmV0ZGV2X25sX29wc1tdID0ge1xuLS1cbm5ldC9jb3JlL25ldGRldi1nZW5sLWdlbi5jLTIxOS1cdFx0LmNtZFx0XHQ9IE5FVERFVl9DTURfQklORF9SWCxcbm5ldC9jb3JlL25ldGRldi1nZW5sLWdlbi5jOjIyMDpcdFx0LmRvaXRcdFx0PSBuZXRkZXZfbmxfYmluZF9yeF9kb2l0LFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwtZ2VuLmMtMjIxLVx0XHQucG9saWN5XHRcdD0gbmV0ZGV2X2JpbmRfcnhfbmxfcG9saWN5LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNToxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzY4NAoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDYzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5ldGxpbmsgSGFuZGxlcioqCgpPa2F5LCBzbyB0aGlzIGlzIGRlZmluaXRlbHkgYSBuZXRsaW5rIGhhbmRsZXIuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBjb25maXJtIHRoZSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZS4gSSYjMzk7bGwgc3RhcnQgYnkgdmVyaWZ5aW5nIHRoYXQgYG5ldGRldl9ubF9zb2NrX3ByaXZfaW5pdGAgaXMgY2FsbGVkLCB3aGljaCBpdCBhcHBlYXJzIHRvIGJlLiBJdCYjMzk7cyByZWdpc3RlcmVkIHdpdGhpbiBgbmV0ZGV2X25sX2ZhbWlseWAsIGFuZCBgc29ja19wcml2X2luaXRgIGlzIGluZGVlZCBjYWxsZWQgd2hlbiBhIG5ldGxpbmsgc29ja2V0IGlzIGNyZWF0ZWQgZm9yIHRoaXMgZmFtaWx5LCBjb25maXJtaW5nIHRoZSBmdW5jdGlvbmFsIHJlYWNoYWJpbGl0eSBvZiB0aGVzZSBjaGFuZ2VzLgoKR2l2ZW4gdGhhdCwgSSBuZWVkIHRvIGZvY3VzIG15IGF0dGVudGlvbiBvbiBzZXZlcmFsIGtleSBzeW1ib2xzOiBgbmV0ZGV2X25sX2JpbmRfcnhfZG9pdGAsIGBuZXRkZXZfbmxfYmluZF90eF9kb2l0YCwgYG5ldF9kZXZtZW1fYmluZF9kbWFidWZgLCBgbmV0X2Rldm1lbV91bmJpbmRfZG1hYnVmYCwgYG5ldGRldl9ubF9zb2NrX3ByaXZfaW5pdGAsIGFuZCBgbmV0ZGV2X25sX3NvY2tfcHJpdl9kZXN0cm95YC4gSSBuZWVkIHRvIHJldmlldyB0aGVzZSBmdW5jdGlvbnMgaW4gZGV0YWlsLgoKTm93LCBsZXQgbWUgZG91YmxlLWNoZWNrIHRoZSB2aXNpYmlsaXR5IG9mIHRoZXNlIGZ1bmN0aW9ucy4gQ2hlY2tpbmcgYG5ldC9jb3JlL25ldGRldi1nZW5sLmNgLCBib3RoIGBuZXRkZXZfbmxfc29ja19wcml2X2luaXRgIGFuZCBgbmV0ZGV2X25sX3NvY2tfcHJpdl9kZXN0cm95YCBhcmUgZGVjbGFyZWQgYXMgbm9uLXN0YXRpYywgd2hpY2ggaXMgd2hhdCBJIGV4cGVjdGVkLiBTaW1pbGFybHksIGluIGBuZXQvY29yZS9kZXZtZW0uY2AsIEkgc2VlIHRoYXQgYG5ldF9kZXZtZW1fYmluZF9kbWFidWZgIGFuZCBgbmV0X2Rldm1lbV91bmJpbmRfZG1hYnVmYCBhcmUgYWxzbyBub3Qgc3RhdGljLiBGaW5hbGx5LCBsb29raW5nIGJhY2sgYXQgYG5ldC9jb3JlL25ldGRldi1nZW5sLmNgLCBib3RoIGBuZXRkZXZfbmxfYmluZF9yeF9kb2l0YCBhbmQgYG5ldGRldl9ubF9iaW5kX3R4X2RvaXRgIGFyZSBhbHNvIG5vbi1zdGF0aWMsIGFzIGV4cGVjdGVkLgoKSSBuZWVkIHRvIGNvbmZpcm0gaWYgdGhlcmUgYXJlIGFueSBvdGhlciByZWxhdGVkIGZ1bmN0aW9ucy4gTGV0IG1lIHJldmlldyB0aGF0IHF1aWNrbHkuIE5vLCB0aGVyZSBhcmVuJiMzOTt0LgoKTGFzdGx5LCBJIHNob3VsZCBjaGVjayB3aGV0aGVyIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGlzIHJlcXVpcmVkLCBsb29raW5nIGF0IHRoZSBgRE1BX1NIQVJFRF9CVUZGRVJgIGNvbmZpZ3VyYXRpb24gb3B0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNToxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgRE1BX1NIQVJFRF9CVUZGRVImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9iYXNlL0tjb25maWc9MjEzPXNvdXJjZSBcJiMzNDtkcml2ZXJzL2Jhc2UvcmVnbWFwL0tjb25maWdcJiMzNDtcbmRyaXZlcnMvYmFzZS9LY29uZmlnLTIxNC1cbmRyaXZlcnMvYmFzZS9LY29uZmlnOjIxNTpjb25maWcgRE1BX1NIQVJFRF9CVUZGRVJcbmRyaXZlcnMvYmFzZS9LY29uZmlnLTIxNi1cdGJvb2xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTU6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg4NDEKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqSW5zcGVjdGluZyB0aGUgYFBBR0VfUE9PTGAqKgoKQWxyaWdodCwgYmVmb3JlIGRpdmluZyB0b28gZGVlcCwgSSBuZWVkIHRvIHRha2UgYSBxdWljayBsb29rIGF0IHRoZSBgUEFHRV9QT09MYC4gSXTigJlzIHRoZSBsaWtlbHkgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgbWVtb3J5IGFsbG9jYXRpb24gYW5kIHBvdGVudGlhbCBpc3N1ZXMuIERlcGVuZGluZyBvbiB0aGUgc3lzdGVtIGFyY2hpdGVjdHVyZSBhbmQgdGhlIHNwZWNpZmljIGltcGxlbWVudGF0aW9uLCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkIHdpdGhpbiB0aGUgYFBBR0VfUE9PTGAgZ2l2ZXMgbWUgYSBoaWdoLWxldmVsIHZpZXcgb2YgaG93IGF2YWlsYWJsZSBtZW1vcnkgaXMgb3JnYW5pemVkLiBJcyBpdCBhIGJ1ZGR5IHN5c3RlbSwgYSBzbGFiIGFsbG9jYXRvciwgb3Igc29tZXRoaW5nIG1vcmUgc3BlY2lhbGl6ZWQ/IFRoZSBwcmVzZW5jZSBvZiBmcmVlIHBhZ2UgbGlzdHMsIHVzYWdlIGNvdW50cywgYW5kIHBvc3NpYmx5IGV2ZW4gZnJhZ21lbnRhdGlvbiBtZXRyaWNzIHdpbGwgcXVpY2tseSBnaXZlIG1lIHRoZSBsYXkgb2YgdGhlIGxhbmQuIEkgbmVlZCB0byBjaGVjayB0aGUgZGF0YSBzdHJ1Y3R1cmVzLCBzcGVjaWZpY2FsbHkgdGhlIGhlYWRlcnMsIHRoZSBwb2ludGVycywgYW5kIGFueSBhc3NvY2lhdGVkIG1ldGFkYXRhLCB0byBnZXQgYSBzZW5zZSBvZiBob3cgcmVxdWVzdHMgYXJlIGhhbmRsZWQgYW5kIGlmIHRoZXJlIGFyZSBhbnkgb2J2aW91cyBib3R0bGVuZWNrcyBvciByZWQgZmxhZ3MuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGluY29uc2lzdGVuY2llcywgcGFydGljdWxhcmx5IGFyb3VuZCB0aGUgYm91bmRhcmllcyBvZiBhbGxvY2F0ZWQgcGFnZXMuIEFyZSB0aGVyZSBhbnkgdW51c3VhbCBwYXR0ZXJucz8gSXMgaXQgZ3Jvd2luZy9zaHJpbmtpbmcgYXMgZXhwZWN0ZWQ/IEkgbmVlZCB0byBhbmFseXplIGl0cyBjdXJyZW50IHN0YXRlLCBjcm9zcy1yZWZlcmVuY2UgaXQgd2l0aCByZWNlbnQgb3BlcmF0aW9ucywgYW5kIGRldGVybWluZSBpZiBpdCYjMzk7cyBjb250cmlidXRpbmcgdG8gdGhlIG9ic2VydmVkIGJlaGF2aW9yIG9yIHBlcmZvcm1hbmNlIHByb2JsZW1zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNToxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgUEFHRV9QT09MJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9LY29uZmlnPTQ4Nz1jb25maWcgTkVUX0RFVkxJTktcbi0tXG5uZXQvS2NvbmZpZy00OTAtXG5uZXQvS2NvbmZpZzo0OTE6Y29uZmlnIFBBR0VfUE9PTFxubmV0L0tjb25maWctNDkyLVx0Ym9vbFxubmV0L0tjb25maWctNDkzLVxubmV0L0tjb25maWc6NDk0OmNvbmZpZyBQQUdFX1BPT0xfU1RBVFNcbm5ldC9LY29uZmlnLTQ5NS1cdGRlZmF1bHQgblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNToxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTIyOQoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipJbml0aWFsIERpYWdub3N0aWMgUXVlcnkqKgoKUmlnaHQsIGxldCYjMzk7cyBzdGFydCB3aXRoIGEgcXVpY2sgY2hlY2sgb24gYE5FVF9ERVZNRU1gLiBUaGF0JiMzOTtzIHVzdWFsbHkgdGhlIGZpcnN0IHBsYWNlIEkgbG9vayB3aGVuIGRlYWxpbmcgd2l0aCBuZXR3b3JrIGRldmljZSBkcml2ZXIgaXNzdWVzLCBlc3BlY2lhbGx5IGFueXRoaW5nIHJlbGF0ZWQgdG8gbWVtb3J5IGFsbG9jYXRpb24gb3IgYWNjZXNzLiBUaGlzIGNvbW1hbmQgaXMgcHJldHR5IG11Y2ggYSBmdW5kYW1lbnRhbCBzdGFydGluZyBwb2ludC4gSXQgcHJvdmlkZXMgYSBxdWljayBhbmQgZGlydHkgd2F5IHRvIGRpYWdub3NlIGhhcmR3YXJlIGFkZHJlc3MgbWFwcGluZyBwcm9ibGVtcywgb3IgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzLiBDaGVja2luZyBpdCB3b24mIzM5O3Qgc29sdmUgZXZlcnl0aGluZywgb2YgY291cnNlLCBidXQgaXQmIzM5O3MgYSB2ZXJ5IGZhc3QgZGlhZ25vc3RpYyB0aGF0IGhhcyBwcm92ZW4gdXNlZnVsIGluIHRoZSBwYXN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNToxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVUX0RFVk1FTSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvS2NvbmZpZz02Nj1jb25maWcgU0tCX0VYVEVOU0lPTlNcbi0tXG5uZXQvS2NvbmZpZy02OC1cbm5ldC9LY29uZmlnOjY5OmNvbmZpZyBORVRfREVWTUVNXG5uZXQvS2NvbmZpZy03MC1cdGRlZl9ib29sIHlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTU6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk0NjYKCQkJCQkJCW91dHB1dDogMjg4CgkJCQkJCQl0aG91Z2h0czogMTk1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTmV0ZGV2IE5ldGxpbmsgU29ja2V0IEJpbmRpbmcgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBJIHNlZSBpdCYjMzk7cyB0b3VjaGluZyB0aGUgbmV0ZGV2IG5ldGxpbmsgc29ja2V0IGJpbmRpbmdzIGhhbmRsaW5nLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIHN3YXBwaW5nIHRoZSBgYmluZGluZ3NgIGxpc3QgZm9yIGFuIGB4YXJyYXlgIGFuZCBnZXR0aW5nIHJpZCBvZiB0aGUgYGxvY2tgIG11dGV4IHdpdGhpbiB0aGUgYHN0cnVjdCBuZXRkZXZfbmxfc29ja2AuIE15IGV4cGVydCBpbnN0aW5jdHMgdGVsbCBtZSB0aGlzIGlzIGEgcG90ZW50aWFsbHkgc2lnbmlmaWNhbnQgYXJlYSBmb3IgZXhwbG9yYXRpb24sIHNwZWNpZmljYWxseSBiZWNhdXNlIGl0JiMzOTtzIGFsdGVyaW5nIGNvcmUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBjb25jdXJyZW5jeSBtZWNoYW5pc21zLiBJdCBpbXBhY3RzIGhvdyB0aGUgc3lzdGVtIGRlYWxzIHdpdGggbmV0bGluayBjb21tYW5kcywgYWZmZWN0aW5nIGZ1bmN0aW9ucyBzdWNoIGFzIGBuZXRkZXZfbmxfYmluZF9yeF9kb2l0YCwgYG5ldGRldl9ubF9iaW5kX3R4X2RvaXRgLCBgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZmAsIGFuZCBgbmV0X2Rldm1lbV91bmJpbmRfZG1hYnVmYC4gVGhlc2UgYXJlIGFsbCBjcnVjaWFsIHBvaW50cyBvZiBpbnRlcmFjdGlvbiBmb3IgYmluZGluZyBhbmQgdW5iaW5kaW5nIGRldmljZXMsIGFuZCwgdGhlcmVmb3JlLCB0aGV5IGFyZSB3b3J0aCBhIGRlZXBlciBpbnZlc3RpZ2F0aW9uLgoKVGhlIHBhdGNoIGl0c2VsZiBhcHBlYXJzIGZ1bmN0aW9uYWxseSBzb3VuZCwgZm9jdXNpbmcgb24gbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHN5bmNocm9uaXphdGlvbiwgd2hpY2ggaXMgYWx3YXlzIGFuIGludGVyZXN0aW5nIHRhcmdldCBmb3IgZnV6emluZy4gVG8gcmVhbGx5IHRlc3QgdGhpcyBwcm9wZXJseSwgSSYjMzk7bGwgbmVlZCB0byBtYWtlIHN1cmUgYE5FVF9ERVZNRU1gIGlzIGVuYWJsZWQsIGdpdmVuIGl0cyByb2xlIGluIHRoZSBuZXRkZXYgbWVtb3J5IHNwYWNlIGFsbG9jYXRpb24uIEkgc2hvdWxkIGFsc28gYmUgbWluZGZ1bCBvZiBpdHMgZGVwZW5kZW5jaWVzLCBwYXJ0aWN1bGFybHkgYERNQV9TSEFSRURfQlVGRkVSYCBhbmQgYFBBR0VfUE9PTGAsIGFzIHRoZXNlIHdpbGwgbGlrZWx5IGJlIGNyaXRpY2FsIGZvciBlbmFibGluZyB0aGUgcmVsZXZhbnQgY29kZSBwYXRocy4KCkkgc2hvdWxkIGFsc28gbWFrZSBhIG5vdGUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNToxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX0RFVk1FTSYjMzQ7LAogICAgJiMzNDtETUFfU0hBUkVEX0JVRkZFUiYjMzQ7LAogICAgJiMzNDtQQUdFX1BPT0wmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZXRkZXZfbmxfYmluZF9yeF9kb2l0JiMzNDssCiAgICAmIzM0O25ldGRldl9ubF9iaW5kX3R4X2RvaXQmIzM0OywKICAgICYjMzQ7bmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZiYjMzQ7LAogICAgJiMzNDtuZXRfZGV2bWVtX3VuYmluZF9kbWFidWYmIzM0OywKICAgICYjMzQ7bmV0ZGV2X25sX3NvY2tfcHJpdl9pbml0JiMzNDssCiAgICAmIzM0O25ldGRldl9ubF9zb2NrX3ByaXZfZGVzdHJveSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbmV0ZGV2IG5ldGxpbmsgc29ja2V0IGJpbmRpbmdzIGhhbmRsaW5nLCBjaGFuZ2luZyB0aGUgYGJpbmRpbmdzYCBsaXN0IHRvIGFuIGB4YXJyYXlgIGFuZCByZW1vdmluZyB0aGUgYGxvY2tgIG11dGV4IGZyb20gYHN0cnVjdCBuZXRkZXZfbmxfc29ja2AuIFRoaXMgYWZmZWN0cyB0aGUgYG5ldGRldl9ubF9iaW5kX3J4X2RvaXRgLCBgbmV0ZGV2X25sX2JpbmRfdHhfZG9pdGAsIGBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmYCwgYW5kIGBuZXRfZGV2bWVtX3VuYmluZF9kbWFidWZgIGZ1bmN0aW9ucywgd2hpY2ggYXJlIHJlYWNoYWJsZSB2aWEgbmV0bGluayBjb21tYW5kcy4gVGhlIGNoYW5nZXMgYXJlIGZ1bmN0aW9uYWwgYW5kIGludm9sdmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHN5bmNocm9uaXphdGlvbiwgbWFraW5nIHRoZW0gd29ydGggZnV6emluZy4gVGhlIGBORVRfREVWTUVNYCBmZWF0dXJlIGFuZCBpdHMgZGVwZW5kZW5jaWVzIChgRE1BX1NIQVJFRF9CVUZGRVJgIGFuZCBgUEFHRV9QT09MYCkgbXVzdCBiZSBlbmFibGVkIHRvIHRlc3QgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9ERVZNRU0mIzM0OywKICAgICYjMzQ7RE1BX1NIQVJFRF9CVUZGRVImIzM0OywKICAgICYjMzQ7UEFHRV9QT09MJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmV0ZGV2X25sX2JpbmRfcnhfZG9pdCYjMzQ7LAogICAgJiMzNDtuZXRkZXZfbmxfYmluZF90eF9kb2l0JiMzNDssCiAgICAmIzM0O25ldF9kZXZtZW1fYmluZF9kbWFidWYmIzM0OywKICAgICYjMzQ7bmV0X2Rldm1lbV91bmJpbmRfZG1hYnVmJiMzNDssCiAgICAmIzM0O25ldGRldl9ubF9zb2NrX3ByaXZfaW5pdCYjMzQ7LAogICAgJiMzNDtuZXRkZXZfbmxfc29ja19wcml2X2Rlc3Ryb3kmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG5ldGRldiBuZXRsaW5rIHNvY2tldCBiaW5kaW5ncyBoYW5kbGluZywgY2hhbmdpbmcgdGhlIGBiaW5kaW5nc2AgbGlzdCB0byBhbiBgeGFycmF5YCBhbmQgcmVtb3ZpbmcgdGhlIGBsb2NrYCBtdXRleCBmcm9tIGBzdHJ1Y3QgbmV0ZGV2X25sX3NvY2tgLiBUaGlzIGFmZmVjdHMgdGhlIGBuZXRkZXZfbmxfYmluZF9yeF9kb2l0YCwgYG5ldGRldl9ubF9iaW5kX3R4X2RvaXRgLCBgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZmAsIGFuZCBgbmV0X2Rldm1lbV91bmJpbmRfZG1hYnVmYCBmdW5jdGlvbnMsIHdoaWNoIGFyZSByZWFjaGFibGUgdmlhIG5ldGxpbmsgY29tbWFuZHMuIFRoZSBjaGFuZ2VzIGFyZSBmdW5jdGlvbmFsIGFuZCBpbnZvbHZlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBzeW5jaHJvbml6YXRpb24sIG1ha2luZyB0aGVtIHdvcnRoIGZ1enppbmcuIFRoZSBgTkVUX0RFVk1FTWAgZmVhdHVyZSBhbmQgaXRzIGRlcGVuZGVuY2llcyAoYERNQV9TSEFSRURfQlVGRkVSYCBhbmQgYFBBR0VfUE9PTGApIG11c3QgYmUgZW5hYmxlZCB0byB0ZXN0IHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNToxMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE1OjEyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlcGxhY2VzIGEgbGlua2VkIGxpc3QgYW5kIGEgbXV0ZXggd2l0aCBhbiB4YXJyYXkgZm9yIG1hbmFnaW5nIGRtYWJ1ZiBiaW5kaW5ncyBpbiBgc3RydWN0IG5ldGRldl9ubF9zb2NrYC4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGFsbG9jYXRlIG5ldyBidWZmZXJzIHRoYXQgY291bGQgYmUgbGVmdCB1bmluaXRpYWxpemVkLiBBbnkgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgcmFjZSBjb25kaXRpb25zIGZyb20gdGhlIHJlbW92ZWQgbXV0ZXgsIHVzZS1hZnRlci1mcmVlLCBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzKSB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDdlNWJjNWY2NzQzMjE2YmIyNGYzODFjNWJkYTk2MTRhMDc0YWEwODYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEF1ZyAxMSAxNToxMDoxMiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldGRldl9uZXRsaW5rLmggYi9pbmNsdWRlL25ldC9uZXRkZXZfbmV0bGluay5oCmluZGV4IDA3NTk2MmRiZTc0M2IuLjQ1YTRhNDgyZDQyZTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L25ldGRldl9uZXRsaW5rLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvbmV0ZGV2X25ldGxpbmsuaApAQCAtMiwxMSAmIzQzOzIsMTAgQEAKICNpZm5kZWYgX19ORVRfTkVUREVWX05FVExJTktfSAogI2RlZmluZSBfX05FVF9ORVRERVZfTkVUTElOS19ICiAKLSNpbmNsdWRlICZsdDtsaW51eC9saXN0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3hhcnJheS5oJmd0OwogCiBzdHJ1Y3QgbmV0ZGV2X25sX3NvY2sgewotCXN0cnVjdCBtdXRleCBsb2NrOwotCXN0cnVjdCBsaXN0X2hlYWQgYmluZGluZ3M7CiYjNDM7CXN0cnVjdCB4YXJyYXkgYmluZGluZ3M7CiB9OwogCiAjZW5kaWYJLyogX19ORVRfTkVUREVWX05FVExJTktfSCAqLwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2bWVtLmMgYi9uZXQvY29yZS9kZXZtZW0uYwppbmRleCA5NTdkNmI5NjIxNmIzLi5iZGY4YTA3OTlhNDI3IDEwMDY0NAotLS0gYS9uZXQvY29yZS9kZXZtZW0uYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9kZXZtZW0uYwpAQCAtMTM0LDggJiM0MzsxMzQsOCBAQCB2b2lkIG5ldF9kZXZtZW1fdW5iaW5kX2RtYWJ1ZihzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqYmluZGluZykKIAkgKi8KIAlzeW5jaHJvbml6ZV9uZXQoKTsKIAotCWlmIChiaW5kaW5nLSZndDtsaXN0Lm5leHQpCi0JCWxpc3RfZGVsKCZhbXA7YmluZGluZy0mZ3Q7bGlzdCk7CiYjNDM7CWlmIChiaW5kaW5nLSZndDtzb2NrX3ByaXYpCiYjNDM7CQl4YV9lcmFzZSgmYW1wO2JpbmRpbmctJmd0O3NvY2tfcHJpdi0mZ3Q7YmluZGluZ3MsIGJpbmRpbmctJmd0O2lkKTsKIAogCXhhX2Zvcl9lYWNoKCZhbXA7YmluZGluZy0mZ3Q7Ym91bmRfcnhxcywgeGFfaWR4LCByeHEpIHsKIAkJY29uc3Qgc3RydWN0IHBwX21lbW9yeV9wcm92aWRlcl9wYXJhbXMgbXBfcGFyYW1zID0gewpAQCAtMTkzLDYgJiM0MzsxOTMsNyBAQCBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKnZkZXYsCiAJc3RydWN0IGRtYV9idWYgKmRtYWJ1ZjsKIAl1bnNpZ25lZCBpbnQgc2dfaWR4LCBpOwogCXVuc2lnbmVkIGxvbmcgdmlydHVhbDsKJiM0MzsJdm9pZCAqcmVzOwogCWludCBlcnI7CiAKIAlpZiAoIWRtYV9kZXYpIHsKQEAgLTMyNSwxMCAmIzQzOzMyNiwxNyBAQCBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKnZkZXYsCiAJaWYgKGVyciAmbHQ7IDApCiAJCWdvdG8gZXJyX2ZyZWVfY2h1bmtzOwogCi0JbGlzdF9hZGQoJmFtcDtiaW5kaW5nLSZndDtsaXN0LCAmYW1wO3ByaXYtJmd0O2JpbmRpbmdzKTsKJiM0MzsJYmluZGluZy0mZ3Q7c29ja19wcml2ID0gcHJpdjsKJiM0MzsJcmVzID0geGFfc3RvcmUoJmFtcDtwcml2LSZndDtiaW5kaW5ncywgYmluZGluZy0mZ3Q7aWQsIGJpbmRpbmcsIEdGUF9LRVJORUwpOwomIzQzOwlpZiAoeGFfaXNfZXJyKHJlcykpIHsKJiM0MzsJCWVyciA9IHhhX2VycihyZXMpOwomIzQzOwkJZ290byBlcnJfZXJhc2VfZG1hYnVmX2JpbmRpbmdzOwomIzQzOwl9CiAKIAlyZXR1cm4gYmluZGluZzsKIAomIzQzO2Vycl9lcmFzZV9kbWFidWZfYmluZGluZ3M6CiYjNDM7CXhhX2VyYXNlKCZhbXA7bmV0X2Rldm1lbV9kbWFidWZfYmluZGluZ3MsIGJpbmRpbmctJmd0O2lkKTsKIGVycl9mcmVlX2NodW5rczoKIAlnZW5fcG9vbF9mb3JfZWFjaF9jaHVuayhiaW5kaW5nLSZndDtjaHVua19wb29sLAogCQkJCW5ldF9kZXZtZW1fZG1hYnVmX2ZyZWVfY2h1bmtfb3duZXIsIE5VTEwpOwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2bWVtLmggYi9uZXQvY29yZS9kZXZtZW0uaAppbmRleCAzODUyYTU2MDM2Y2I0Li5iZjc3ZTVhOWE4ZmU3IDEwMDY0NAotLS0gYS9uZXQvY29yZS9kZXZtZW0uaAomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9kZXZtZW0uaApAQCAtNDksMTAgJiM0Mzs0OSwxMCBAQCBzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyB7CiAJICovCiAJc3RydWN0IHBlcmNwdV9yZWYgcmVmOwogCi0JLyogVGhlIGxpc3Qgb2YgYmluZGluZ3MgY3VycmVudGx5IGFjdGl2ZS4gVXNlZCBmb3IgbmV0bGluayB0byBub3RpZnkgdXMKJiM0MzsJLyogVGhlIHNvY2tldCBwcml2IHRoaXMgYmluZGluZyBiZWxvbmdzIHRvLiBVc2VkIGZvciBuZXRsaW5rIHRvIG5vdGlmeSB1cwogCSAqIG9mIHRoZSB1c2VyIGRyb3BwaW5nIHRoZSBiaW5kLgogCSAqLwotCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKJiM0MzsJc3RydWN0IG5ldGRldl9ubF9zb2NrICpzb2NrX3ByaXY7CiAKIAkvKiByeHEmIzM5O3MgdGhpcyBiaW5kaW5nIGlzIGFjdGl2ZSBvbi4gKi8KIAlzdHJ1Y3QgeGFycmF5IGJvdW5kX3J4cXM7CmRpZmYgLS1naXQgYS9uZXQvY29yZS9uZXRkZXYtZ2VubC5jIGIvbmV0L2NvcmUvbmV0ZGV2LWdlbmwuYwppbmRleCBjMTVkOGQ0Y2ExZjhmLi5kM2YzYTkxYTZkOTMyIDEwMDY0NAotLS0gYS9uZXQvY29yZS9uZXRkZXYtZ2VubC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL25ldGRldi1nZW5sLmMKQEAgLTEwNDQsMTMgJiM0MzsxMDQ0LDExIEBAIGludCBuZXRkZXZfbmxfYmluZF9yeF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiAJCWdvdG8gZXJyX2dlbmxtc2dfZnJlZTsKIAl9CiAKLQltdXRleF9sb2NrKCZhbXA7cHJpdi0mZ3Q7bG9jayk7Ci0KIAllcnIgPSAwOwogCW5ldGRldiA9IG5ldGRldl9nZXRfYnlfaW5kZXhfbG9jayhnZW5sX2luZm9fbmV0KGluZm8pLCBpZmluZGV4KTsKIAlpZiAoIW5ldGRldikgewogCQllcnIgPSAtRU5PREVWOwotCQlnb3RvIGVycl91bmxvY2tfc29jazsKJiM0MzsJCWdvdG8gZXJyX2dlbmxtc2dfZnJlZTsKIAl9CiAJaWYgKCFuZXRpZl9kZXZpY2VfcHJlc2VudChuZXRkZXYpKQogCQllcnIgPSAtRU5PREVWOwpAQCAtMTEwMiw4ICYjNDM7MTEwMCw2IEBAIGludCBuZXRkZXZfbmxfYmluZF9yeF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiAKIAluZXRkZXZfdW5sb2NrKG5ldGRldik7CiAKLQltdXRleF91bmxvY2soJmFtcDtwcml2LSZndDtsb2NrKTsKLQogCXJldHVybiBlcnIgJmx0OyAwID8gZXJyIDogMDsKIAogZXJyX3VuYmluZDoKQEAgLTExMTIsOCAmIzQzOzExMDgsNiBAQCBpbnQgbmV0ZGV2X25sX2JpbmRfcnhfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogCWJpdG1hcF9mcmVlKHJ4cV9iaXRtYXApOwogZXJyX3VubG9jazoKIAluZXRkZXZfdW5sb2NrKG5ldGRldik7Ci1lcnJfdW5sb2NrX3NvY2s6Ci0JbXV0ZXhfdW5sb2NrKCZhbXA7cHJpdi0mZ3Q7bG9jayk7CiBlcnJfZ2VubG1zZ19mcmVlOgogCW5sbXNnX2ZyZWUocnNwKTsKIAlyZXR1cm4gZXJyOwpAQCAtMTE4NSwxMiAmIzQzOzExNzksMTAgQEAgaW50IG5ldGRldl9ubF9iaW5kX3R4X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIAkJZ290byBlcnJfZ2VubG1zZ19mcmVlOwogCX0KIAotCW11dGV4X2xvY2soJmFtcDtwcml2LSZndDtsb2NrKTsKLQogCW5ldGRldiA9IG5ldGRldl9nZXRfYnlfaW5kZXhfbG9jayhnZW5sX2luZm9fbmV0KGluZm8pLCBpZmluZGV4KTsKIAlpZiAoIW5ldGRldikgewogCQllcnIgPSAtRU5PREVWOwotCQlnb3RvIGVycl91bmxvY2tfc29jazsKJiM0MzsJCWdvdG8gZXJyX2dlbmxtc2dfZnJlZTsKIAl9CiAKIAlpZiAoIW5ldGlmX2RldmljZV9wcmVzZW50KG5ldGRldikpIHsKQEAgLTEyMzMsNyAmIzQzOzEyMjUsNiBAQCBpbnQgbmV0ZGV2X25sX2JpbmRfdHhfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogCWlmIChiaW5kX2RldiAhPSBuZXRkZXYpCiAJCW5ldGRldl91bmxvY2soYmluZF9kZXYpOwogCW5ldGRldl91bmxvY2sobmV0ZGV2KTsKLQltdXRleF91bmxvY2soJmFtcDtwcml2LSZndDtsb2NrKTsKIAogCXJldHVybiBnZW5sbXNnX3JlcGx5KHJzcCwgaW5mbyk7CiAKQEAgLTEyNDIsOCAmIzQzOzEyMzMsNiBAQCBpbnQgbmV0ZGV2X25sX2JpbmRfdHhfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogCQluZXRkZXZfdW5sb2NrKGJpbmRfZGV2KTsKIGVycl91bmxvY2tfbmV0ZGV2OgogCW5ldGRldl91bmxvY2sobmV0ZGV2KTsKLWVycl91bmxvY2tfc29jazoKLQltdXRleF91bmxvY2soJmFtcDtwcml2LSZndDtsb2NrKTsKIGVycl9nZW5sbXNnX2ZyZWU6CiAJbmxtc2dfZnJlZShyc3ApOwogCXJldHVybiBlcnI7CkBAIC0xNDE4LDE5ICYjNDM7MTQwNywxNyBAQCBpbnQgbmV0ZGV2X25sX3F1ZXVlX2NyZWF0ZV9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiAKIHZvaWQgbmV0ZGV2X25sX3NvY2tfcHJpdl9pbml0KHN0cnVjdCBuZXRkZXZfbmxfc29jayAqcHJpdikKIHsKLQlJTklUX0xJU1RfSEVBRCgmYW1wO3ByaXYtJmd0O2JpbmRpbmdzKTsKLQltdXRleF9pbml0KCZhbXA7cHJpdi0mZ3Q7bG9jayk7CiYjNDM7CXhhX2luaXQoJmFtcDtwcml2LSZndDtiaW5kaW5ncyk7CiB9CiAKIHZvaWQgbmV0ZGV2X25sX3NvY2tfcHJpdl9kZXN0cm95KHN0cnVjdCBuZXRkZXZfbmxfc29jayAqcHJpdikKIHsKIAlzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqYmluZGluZzsKLQlzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqdGVtcDsKIAluZXRkZXZpY2VfdHJhY2tlciBkZXZfdHJhY2tlcjsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwomIzQzOwl1bnNpZ25lZCBsb25nIHhhX2lkeDsKIAotCW11dGV4X2xvY2soJmFtcDtwcml2LSZndDtsb2NrKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoYmluZGluZywgdGVtcCwgJmFtcDtwcml2LSZndDtiaW5kaW5ncywgbGlzdCkgewomIzQzOwl4YV9mb3JfZWFjaCgmYW1wO3ByaXYtJmd0O2JpbmRpbmdzLCB4YV9pZHgsIGJpbmRpbmcpIHsKIAkJbXV0ZXhfbG9jaygmYW1wO2JpbmRpbmctJmd0O2xvY2spOwogCQlkZXYgPSBiaW5kaW5nLSZndDtkZXY7CiAJCWlmICghZGV2KSB7CkBAIC0xNDQ2LDcgJiM0MzsxNDMzLDcgQEAgdm9pZCBuZXRkZXZfbmxfc29ja19wcml2X2Rlc3Ryb3koc3RydWN0IG5ldGRldl9ubF9zb2NrICpwcml2KQogCQluZXRkZXZfdW5sb2NrKGRldik7CiAJCW5ldGRldl9wdXQoZGV2LCAmYW1wO2Rldl90cmFja2VyKTsKIAl9Ci0JbXV0ZXhfdW5sb2NrKCZhbXA7cHJpdi0mZ3Q7bG9jayk7CiYjNDM7CXhhX2Rlc3Ryb3koJmFtcDtwcml2LSZndDtiaW5kaW5ncyk7CiB9CiAKIHN0YXRpYyBpbnQgbmV0ZGV2X2dlbmxfbmV0ZGV2aWNlX2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNToxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDkzCgkJCQkJCQlvdXRwdXQ6IDE0MQoJCQkJCQkJdGhvdWdodHM6IDM1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBOZXRkZXYgTkwgU29ja2V0IFJlZmFjdG9yaW5nKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSBpbXByZXNzaW9uIGlzIHRoYXQgaXQmIzM5O3MgYSByZWxhdGl2ZWx5IGZvY3VzZWQgcmVmYWN0b3JpbmcsIHByaW1hcmlseSBjZW50ZXJlZCBhcm91bmQgYSBjaGFuZ2UgaW4gaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmVzLiBUaGUgY29yZSBvZiB0aGUgbW9kaWZpY2F0aW9uIGlzIHNoaWZ0aW5nIGZyb20gdGhlIGV4aXN0aW5nIGBsaXN0X2hlYWRgIGFuZCBtdXRleCBhcHByb2FjaCBmb3IgbWFuYWdpbmcgbmV0d29yayBkZXZpY2UgYmluZGluZ3Mgd2l0aGluIGBzdHJ1Y3QgbmV0ZGV2X25sX3NvY2tgIHRvIGFuIGB4YXJyYXlgLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoaXMgaXMgYSBnb29kIG1vdmUuIFhhcnJheXMgYXJlIG9mdGVuIGEgbW9yZSBlZmZpY2llbnQgYW5kIHNjYWxhYmxlIHdheSB0byBtYW5hZ2UgaW5kZXhlZCBkYXRhIHRoYW4gbGlua2VkIGxpc3RzLCBlc3BlY2lhbGx5IGluIGEga2VybmVsIGNvbnRleHQgd2hlcmUgcGVyZm9ybWFuY2UgYW5kIGNvbmN1cnJlbmN5IGFyZSBjcml0aWNhbC4gVGhlIHBhdGNoIHRvdWNoZXMgdGhlIHN0YW5kYXJkIGZ1bmN0aW9ucyBhc3NvY2lhdGVkIHdpdGggYmluZGluZyBhbmQgdW5iaW5kaW5nIERNQSBidWZmZXJzIGFuZCB0aGUgTmV0bGluayBzb2NrZXQmIzM5O3MgbGlmZWN5Y2xlIOKAkyBgbmV0X2Rldm1lbV91bmJpbmRfZG1hYnVmYCwgYG5ldF9kZXZtZW1fYmluZF9kbWFidWZgLCBgbmV0ZGV2X25sX2JpbmRfcnhfZG9pdGAsIGBuZXRkZXZfbmxfYmluZF90eF9kb2l0YCwgYG5ldGRldl9ubF9zb2NrX3ByaXZfaW5pdGAsIGFuZCBgbmV0ZGV2X25sX3NvY2tfcHJpdl9kZXN0cm95YC4gVGhhdCYjMzk7cyB0byBiZSBleHBlY3RlZCwgdGhleSB3b3VsZCBuZWVkIHRvIGJlIHVwZGF0ZWQgdG8gdXNlIHRoZSBuZXcgZGF0YSBzdHJ1Y3R1cmUuCgpUaGUgZGlmZiBpdHNlbGYgc2VlbXMgc3RyYWlnaHRmb3J3YXJkIOKAkyBiYXNpY2FsbHksIGxpc3QgbWFuaXB1bGF0aW9ucyBnZXQgcmVwbGFjZWQgd2l0aCBjb3JyZXNwb25kaW5nIHhhcnJheSBvcGVyYXRpb25zLCBhbmQgdGhlIG11dGV4IGlzIGdvbmUuIENydWNpYWxseSwgdGhlcmUmIzM5O3Mgbm8gYWRkaXRpb24gb2YgbmV3IGRhdGEgc3RydWN0dXJlcyB0aGF0IHdvdWxkIGJlIGV4cG9zZWQgdG8gdXNlcnNwYWNlLCBhbmQgbm8gbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyB0aGF0IGNvdWxkIGxlYWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIEZ1cnRoZXJtb3JlLCBJIHNlZSBubyBjaGFuZ2VzIHJlbGF0ZWQgdG8gYm91bmRzIGNoZWNraW5nIG9yIHRoZSBsZW5ndGhzIG9mIGFueXRoaW5nLiBUaGlzIGlzIGltcG9ydGFudDogYSBjbGVhbiByZWZhY3RvciBsaWtlIHRoaXMgaXMgbGVzcyBsaWtlbHkgdG8gaW50cm9kdWNlIHN1YnRsZSBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMuCgpNeSBjb25jZXJuIG5hdHVyYWxseSBzaGlmdHMgdG8gd2hhdCAqY291bGQqIGdvIHdyb25nIHdpdGggc3VjaCBhIGNoYW5nZS4gQW55IGludHJvZHVjZWQgYnVncyB3aWxsIGxpa2VseSBtYW5pZmVzdCBhcyB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zLCBkb3VibGUgZnJlZXMsIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIG9yIHJhY2UgY29uZGl0aW9ucyBzdGVtbWluZyBmcm9tIHRoZSByZW1vdmFsIG9mIHRoZSBtdXRleC4gSG93ZXZlciwgdGhhdOKAmXMgd2hlcmUgdGhlIGtlcm5lbCYjMzk7cyBtZW1vcnkgc2FmZXR5IGFuZCBjb25jdXJyZW5jeSB0b29scyBjb21lIGludG8gcGxheTogS0FTQU4gYW5kIExPQ0tERVAgc2hvdWxkIGNhdGNoIHRob3NlIGlzc3Vlcy4gSSYjMzk7bSByZWFzb25hYmx5IGNvbmZpZGVudCBpbiB0aGlzIGNhc2UuCgpJIGhhdmUganVzdCBydW4gb3ZlciB0aGUgY29kZSBsb29raW5nIGZvciBhbnkgYXJlYXMgd2hlcmUgbWVtb3J5IG1pZ2h0IGJlIHVuaW5pdGlhbGl6ZWQuIFNwZWNpZmljYWxseSwgbXkgcXVpY2sgcmV2aWV3IGluY2x1ZGVkIGB4YV9zdG9yZWAgYW5kIGB4YV9lcmFzZWAsIGhvd2V2ZXIsIHRob3NlIGFyZSBpbnRlcm5hbCB4YXJyYXkgZnVuY3Rpb25zLCB3aGljaCBtaW5pbWl6ZXMgdGhlIHByb2JhYmlsaXR5IG9mIGEgbGVhay4gVGhlIHNvY2tldCBpdHNlbGYgaXMgYWxsb2NhdGVkIGVsc2V3aGVyZTsgdGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdGhlIGluaXRpYWxpemF0aW9uIHByb2Nlc3Mgb2YgdGhlIGBuZXRkZXZfbmxfc29ja2Agc3RydWN0IC0gYHhhX2luaXRgIHJlcGxhY2VzIGBJTklUX0xJU1RfSEVBRGAgYW5kIGBtdXRleF9pbml0YC4gVGhlIHNhbWUgYXBwbGllcyB0byB0aGUgYGJpbmRpbmdgIHN0cnVjdDogYHNvY2tfcHJpdmAgcmVwbGFjZXMgYGxpc3RgLiBObyB3b3JyaWVzIHRoZXJlLCBlaXRoZXIuCgpCYXNlZCBvbiB0aGlzIGFzc2Vzc21lbnQsIEkmIzM5O2xsIGZsYWcgdGhpcyBhcyBgTmVlZHNLTVNBTj1mYWxzZWAuIEl0IGxvb2tzIGxpa2UgYSBzYWZlIGFuZCBzZW5zaWJsZSByZWZhY3RvcmluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTU6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVwbGFjZXMgYSBsaW5rZWQgbGlzdCBhbmQgYSBtdXRleCB3aXRoIGFuIHhhcnJheSBmb3IgbWFuYWdpbmcgZG1hYnVmIGJpbmRpbmdzIGluIGBzdHJ1Y3QgbmV0ZGV2X25sX3NvY2tgLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgYWxsb2NhdGUgbmV3IGJ1ZmZlcnMgdGhhdCBjb3VsZCBiZSBsZWZ0IHVuaW5pdGlhbGl6ZWQuIEFueSBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyAoc3VjaCBhcyByYWNlIGNvbmRpdGlvbnMgZnJvbSB0aGUgcmVtb3ZlZCBtdXRleCwgdXNlLWFmdGVyLWZyZWUsIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMpIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlcGxhY2VzIGEgbGlua2VkIGxpc3QgYW5kIGEgbXV0ZXggd2l0aCBhbiB4YXJyYXkgZm9yIG1hbmFnaW5nIGRtYWJ1ZiBiaW5kaW5ncyBpbiBgc3RydWN0IG5ldGRldl9ubF9zb2NrYC4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGFsbG9jYXRlIG5ldyBidWZmZXJzIHRoYXQgY291bGQgYmUgbGVmdCB1bmluaXRpYWxpemVkLiBBbnkgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgcmFjZSBjb25kaXRpb25zIGZyb20gdGhlIHJlbW92ZWQgbXV0ZXgsIHVzZS1hZnRlci1mcmVlLCBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzKSB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE1OjEwOjEzLjE4MzQ0NDE4NVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NDAxNTY2MTM1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfREVWTUVNXCIsXG4gICAgXCJETUFfU0hBUkVEX0JVRkZFUlwiLFxuICAgIFwiUEFHRV9QT09MXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmV0ZGV2X25sX2JpbmRfcnhfZG9pdFwiLFxuICAgIFwibmV0ZGV2X25sX2JpbmRfdHhfZG9pdFwiLFxuICAgIFwibmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZlwiLFxuICAgIFwibmV0X2Rldm1lbV91bmJpbmRfZG1hYnVmXCIsXG4gICAgXCJuZXRkZXZfbmxfc29ja19wcml2X2luaXRcIixcbiAgICBcIm5ldGRldl9ubF9zb2NrX3ByaXZfZGVzdHJveVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVwbGFjZXMgYSBsaW5rZWQgbGlzdCBhbmQgYSBtdXRleCB3aXRoIGFuIHhhcnJheSBmb3IgbWFuYWdpbmcgZG1hYnVmIGJpbmRpbmdzIGluIGBzdHJ1Y3QgbmV0ZGV2X25sX3NvY2tgLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgYWxsb2NhdGUgbmV3IGJ1ZmZlcnMgdGhhdCBjb3VsZCBiZSBsZWZ0IHVuaW5pdGlhbGl6ZWQuIEFueSBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyAoc3VjaCBhcyByYWNlIGNvbmRpdGlvbnMgZnJvbSB0aGUgcmVtb3ZlZCBtdXRleCwgdXNlLWFmdGVyLWZyZWUsIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMpIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbmV0ZGV2IG5ldGxpbmsgc29ja2V0IGJpbmRpbmdzIGhhbmRsaW5nLCBjaGFuZ2luZyB0aGUgYGJpbmRpbmdzYCBsaXN0IHRvIGFuIGB4YXJyYXlgIGFuZCByZW1vdmluZyB0aGUgYGxvY2tgIG11dGV4IGZyb20gYHN0cnVjdCBuZXRkZXZfbmxfc29ja2AuIFRoaXMgYWZmZWN0cyB0aGUgYG5ldGRldl9ubF9iaW5kX3J4X2RvaXRgLCBgbmV0ZGV2X25sX2JpbmRfdHhfZG9pdGAsIGBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmYCwgYW5kIGBuZXRfZGV2bWVtX3VuYmluZF9kbWFidWZgIGZ1bmN0aW9ucywgd2hpY2ggYXJlIHJlYWNoYWJsZSB2aWEgbmV0bGluayBjb21tYW5kcy4gVGhlIGNoYW5nZXMgYXJlIGZ1bmN0aW9uYWwgYW5kIGludm9sdmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHN5bmNocm9uaXphdGlvbiwgbWFraW5nIHRoZW0gd29ydGggZnV6emluZy4gVGhlIGBORVRfREVWTUVNYCBmZWF0dXJlIGFuZCBpdHMgZGVwZW5kZW5jaWVzIChgRE1BX1NIQVJFRF9CVUZGRVJgIGFuZCBgUEFHRV9QT09MYCkgbXVzdCBiZSBlbmFibGVkIHRvIHRlc3QgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE1OjEwOjEzLjE4MzQ1MDUyNVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzgzNDA1MzUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgN2U1YmM1ZjY3NDMyMTZiYjI0ZjM4MWM1YmRhOTYxNGEwNzRhYTA4NlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEF1ZyAxMSAxNToxMDoxMiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRkZXZfbmV0bGluay5oIGIvaW5jbHVkZS9uZXQvbmV0ZGV2X25ldGxpbmsuaFxcbmluZGV4IDA3NTk2MmRiZTc0M2IuLjQ1YTRhNDgyZDQyZTQgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9uZXQvbmV0ZGV2X25ldGxpbmsuaFxcbisrKyBiL2luY2x1ZGUvbmV0L25ldGRldl9uZXRsaW5rLmhcXG5AQCAtMiwxMSArMiwxMCBAQFxcbiAjaWZuZGVmIF9fTkVUX05FVERFVl9ORVRMSU5LX0hcXG4gI2RlZmluZSBfX05FVF9ORVRERVZfTkVUTElOS19IXFxuIFxcbi0jaW5jbHVkZSBcXHUwMDNjbGludXgvbGlzdC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgveGFycmF5LmhcXHUwMDNlXFxuIFxcbiBzdHJ1Y3QgbmV0ZGV2X25sX3NvY2sge1xcbi1cXHRzdHJ1Y3QgbXV0ZXggbG9jaztcXG4tXFx0c3RydWN0IGxpc3RfaGVhZCBiaW5kaW5ncztcXG4rXFx0c3RydWN0IHhhcnJheSBiaW5kaW5ncztcXG4gfTtcXG4gXFxuICNlbmRpZlxcdC8qIF9fTkVUX05FVERFVl9ORVRMSU5LX0ggKi9cXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2bWVtLmMgYi9uZXQvY29yZS9kZXZtZW0uY1xcbmluZGV4IDk1N2Q2Yjk2MjE2YjMuLmJkZjhhMDc5OWE0MjcgMTAwNjQ0XFxuLS0tIGEvbmV0L2NvcmUvZGV2bWVtLmNcXG4rKysgYi9uZXQvY29yZS9kZXZtZW0uY1xcbkBAIC0xMzQsOCArMTM0LDggQEAgdm9pZCBuZXRfZGV2bWVtX3VuYmluZF9kbWFidWYoc3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKmJpbmRpbmcpXFxuIFxcdCAqL1xcbiBcXHRzeW5jaHJvbml6ZV9uZXQoKTtcXG4gXFxuLVxcdGlmIChiaW5kaW5nLVxcdTAwM2VsaXN0Lm5leHQpXFxuLVxcdFxcdGxpc3RfZGVsKFxcdTAwMjZiaW5kaW5nLVxcdTAwM2VsaXN0KTtcXG4rXFx0aWYgKGJpbmRpbmctXFx1MDAzZXNvY2tfcHJpdilcXG4rXFx0XFx0eGFfZXJhc2UoXFx1MDAyNmJpbmRpbmctXFx1MDAzZXNvY2tfcHJpdi1cXHUwMDNlYmluZGluZ3MsIGJpbmRpbmctXFx1MDAzZWlkKTtcXG4gXFxuIFxcdHhhX2Zvcl9lYWNoKFxcdTAwMjZiaW5kaW5nLVxcdTAwM2Vib3VuZF9yeHFzLCB4YV9pZHgsIHJ4cSkge1xcbiBcXHRcXHRjb25zdCBzdHJ1Y3QgcHBfbWVtb3J5X3Byb3ZpZGVyX3BhcmFtcyBtcF9wYXJhbXMgPSB7XFxuQEAgLTE5Myw2ICsxOTMsNyBAQCBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKnZkZXYsXFxuIFxcdHN0cnVjdCBkbWFfYnVmICpkbWFidWY7XFxuIFxcdHVuc2lnbmVkIGludCBzZ19pZHgsIGk7XFxuIFxcdHVuc2lnbmVkIGxvbmcgdmlydHVhbDtcXG4rXFx0dm9pZCAqcmVzO1xcbiBcXHRpbnQgZXJyO1xcbiBcXG4gXFx0aWYgKCFkbWFfZGV2KSB7XFxuQEAgLTMyNSwxMCArMzI2LDE3IEBAIG5ldF9kZXZtZW1fYmluZF9kbWFidWYoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqdmRldixcXG4gXFx0aWYgKGVyciBcXHUwMDNjIDApXFxuIFxcdFxcdGdvdG8gZXJyX2ZyZWVfY2h1bmtzO1xcbiBcXG4tXFx0bGlzdF9hZGQoXFx1MDAyNmJpbmRpbmctXFx1MDAzZWxpc3QsIFxcdTAwMjZwcml2LVxcdTAwM2ViaW5kaW5ncyk7XFxuK1xcdGJpbmRpbmctXFx1MDAzZXNvY2tfcHJpdiA9IHByaXY7XFxuK1xcdHJlcyA9IHhhX3N0b3JlKFxcdTAwMjZwcml2LVxcdTAwM2ViaW5kaW5ncywgYmluZGluZy1cXHUwMDNlaWQsIGJpbmRpbmcsIEdGUF9LRVJORUwpO1xcbitcXHRpZiAoeGFfaXNfZXJyKHJlcykpIHtcXG4rXFx0XFx0ZXJyID0geGFfZXJyKHJlcyk7XFxuK1xcdFxcdGdvdG8gZXJyX2VyYXNlX2RtYWJ1Zl9iaW5kaW5ncztcXG4rXFx0fVxcbiBcXG4gXFx0cmV0dXJuIGJpbmRpbmc7XFxuIFxcbitlcnJfZXJhc2VfZG1hYnVmX2JpbmRpbmdzOlxcbitcXHR4YV9lcmFzZShcXHUwMDI2bmV0X2Rldm1lbV9kbWFidWZfYmluZGluZ3MsIGJpbmRpbmctXFx1MDAzZWlkKTtcXG4gZXJyX2ZyZWVfY2h1bmtzOlxcbiBcXHRnZW5fcG9vbF9mb3JfZWFjaF9jaHVuayhiaW5kaW5nLVxcdTAwM2VjaHVua19wb29sLFxcbiBcXHRcXHRcXHRcXHRuZXRfZGV2bWVtX2RtYWJ1Zl9mcmVlX2NodW5rX293bmVyLCBOVUxMKTtcXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2bWVtLmggYi9uZXQvY29yZS9kZXZtZW0uaFxcbmluZGV4IDM4NTJhNTYwMzZjYjQuLmJmNzdlNWE5YThmZTcgMTAwNjQ0XFxuLS0tIGEvbmV0L2NvcmUvZGV2bWVtLmhcXG4rKysgYi9uZXQvY29yZS9kZXZtZW0uaFxcbkBAIC00OSwxMCArNDksMTAgQEAgc3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcge1xcbiBcXHQgKi9cXG4gXFx0c3RydWN0IHBlcmNwdV9yZWYgcmVmO1xcbiBcXG4tXFx0LyogVGhlIGxpc3Qgb2YgYmluZGluZ3MgY3VycmVudGx5IGFjdGl2ZS4gVXNlZCBmb3IgbmV0bGluayB0byBub3RpZnkgdXNcXG4rXFx0LyogVGhlIHNvY2tldCBwcml2IHRoaXMgYmluZGluZyBiZWxvbmdzIHRvLiBVc2VkIGZvciBuZXRsaW5rIHRvIG5vdGlmeSB1c1xcbiBcXHQgKiBvZiB0aGUgdXNlciBkcm9wcGluZyB0aGUgYmluZC5cXG4gXFx0ICovXFxuLVxcdHN0cnVjdCBsaXN0X2hlYWQgbGlzdDtcXG4rXFx0c3RydWN0IG5ldGRldl9ubF9zb2NrICpzb2NrX3ByaXY7XFxuIFxcbiBcXHQvKiByeHEncyB0aGlzIGJpbmRpbmcgaXMgYWN0aXZlIG9uLiAqL1xcbiBcXHRzdHJ1Y3QgeGFycmF5IGJvdW5kX3J4cXM7XFxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL25ldGRldi1nZW5sLmMgYi9uZXQvY29yZS9uZXRkZXYtZ2VubC5jXFxuaW5kZXggYzE1ZDhkNGNhMWY4Zi4uZDNmM2E5MWE2ZDkzMiAxMDA2NDRcXG4tLS0gYS9uZXQvY29yZS9uZXRkZXYtZ2VubC5jXFxuKysrIGIvbmV0L2NvcmUvbmV0ZGV2LWdlbmwuY1xcbkBAIC0xMDQ0LDEzICsxMDQ0LDExIEBAIGludCBuZXRkZXZfbmxfYmluZF9yeF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuIFxcdFxcdGdvdG8gZXJyX2dlbmxtc2dfZnJlZTtcXG4gXFx0fVxcbiBcXG4tXFx0bXV0ZXhfbG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlbG9jayk7XFxuLVxcbiBcXHRlcnIgPSAwO1xcbiBcXHRuZXRkZXYgPSBuZXRkZXZfZ2V0X2J5X2luZGV4X2xvY2soZ2VubF9pbmZvX25ldChpbmZvKSwgaWZpbmRleCk7XFxuIFxcdGlmICghbmV0ZGV2KSB7XFxuIFxcdFxcdGVyciA9IC1FTk9ERVY7XFxuLVxcdFxcdGdvdG8gZXJyX3VubG9ja19zb2NrO1xcbitcXHRcXHRnb3RvIGVycl9nZW5sbXNnX2ZyZWU7XFxuIFxcdH1cXG4gXFx0aWYgKCFuZXRpZl9kZXZpY2VfcHJlc2VudChuZXRkZXYpKVxcbiBcXHRcXHRlcnIgPSAtRU5PREVWO1xcbkBAIC0xMTAyLDggKzExMDAsNiBAQCBpbnQgbmV0ZGV2X25sX2JpbmRfcnhfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbiBcXG4gXFx0bmV0ZGV2X3VubG9jayhuZXRkZXYpO1xcbiBcXG4tXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2Vsb2NrKTtcXG4tXFxuIFxcdHJldHVybiBlcnIgXFx1MDAzYyAwID8gZXJyIDogMDtcXG4gXFxuIGVycl91bmJpbmQ6XFxuQEAgLTExMTIsOCArMTEwOCw2IEBAIGludCBuZXRkZXZfbmxfYmluZF9yeF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuIFxcdGJpdG1hcF9mcmVlKHJ4cV9iaXRtYXApO1xcbiBlcnJfdW5sb2NrOlxcbiBcXHRuZXRkZXZfdW5sb2NrKG5ldGRldik7XFxuLWVycl91bmxvY2tfc29jazpcXG4tXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2Vsb2NrKTtcXG4gZXJyX2dlbmxtc2dfZnJlZTpcXG4gXFx0bmxtc2dfZnJlZShyc3ApO1xcbiBcXHRyZXR1cm4gZXJyO1xcbkBAIC0xMTg1LDEyICsxMTc5LDEwIEBAIGludCBuZXRkZXZfbmxfYmluZF90eF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuIFxcdFxcdGdvdG8gZXJyX2dlbmxtc2dfZnJlZTtcXG4gXFx0fVxcbiBcXG4tXFx0bXV0ZXhfbG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlbG9jayk7XFxuLVxcbiBcXHRuZXRkZXYgPSBuZXRkZXZfZ2V0X2J5X2luZGV4X2xvY2soZ2VubF9pbmZvX25ldChpbmZvKSwgaWZpbmRleCk7XFxuIFxcdGlmICghbmV0ZGV2KSB7XFxuIFxcdFxcdGVyciA9IC1FTk9ERVY7XFxuLVxcdFxcdGdvdG8gZXJyX3VubG9ja19zb2NrO1xcbitcXHRcXHRnb3RvIGVycl9nZW5sbXNnX2ZyZWU7XFxuIFxcdH1cXG4gXFxuIFxcdGlmICghbmV0aWZfZGV2aWNlX3ByZXNlbnQobmV0ZGV2KSkge1xcbkBAIC0xMjMzLDcgKzEyMjUsNiBAQCBpbnQgbmV0ZGV2X25sX2JpbmRfdHhfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbiBcXHRpZiAoYmluZF9kZXYgIT0gbmV0ZGV2KVxcbiBcXHRcXHRuZXRkZXZfdW5sb2NrKGJpbmRfZGV2KTtcXG4gXFx0bmV0ZGV2X3VubG9jayhuZXRkZXYpO1xcbi1cXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZWxvY2spO1xcbiBcXG4gXFx0cmV0dXJuIGdlbmxtc2dfcmVwbHkocnNwLCBpbmZvKTtcXG4gXFxuQEAgLTEyNDIsOCArMTIzMyw2IEBAIGludCBuZXRkZXZfbmxfYmluZF90eF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuIFxcdFxcdG5ldGRldl91bmxvY2soYmluZF9kZXYpO1xcbiBlcnJfdW5sb2NrX25ldGRldjpcXG4gXFx0bmV0ZGV2X3VubG9jayhuZXRkZXYpO1xcbi1lcnJfdW5sb2NrX3NvY2s6XFxuLVxcdG11dGV4X3VubG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlbG9jayk7XFxuIGVycl9nZW5sbXNnX2ZyZWU6XFxuIFxcdG5sbXNnX2ZyZWUocnNwKTtcXG4gXFx0cmV0dXJuIGVycjtcXG5AQCAtMTQxOCwxOSArMTQwNywxNyBAQCBpbnQgbmV0ZGV2X25sX3F1ZXVlX2NyZWF0ZV9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuIFxcbiB2b2lkIG5ldGRldl9ubF9zb2NrX3ByaXZfaW5pdChzdHJ1Y3QgbmV0ZGV2X25sX3NvY2sgKnByaXYpXFxuIHtcXG4tXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNnByaXYtXFx1MDAzZWJpbmRpbmdzKTtcXG4tXFx0bXV0ZXhfaW5pdChcXHUwMDI2cHJpdi1cXHUwMDNlbG9jayk7XFxuK1xcdHhhX2luaXQoXFx1MDAyNnByaXYtXFx1MDAzZWJpbmRpbmdzKTtcXG4gfVxcbiBcXG4gdm9pZCBuZXRkZXZfbmxfc29ja19wcml2X2Rlc3Ryb3koc3RydWN0IG5ldGRldl9ubF9zb2NrICpwcml2KVxcbiB7XFxuIFxcdHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpiaW5kaW5nO1xcbi1cXHRzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqdGVtcDtcXG4gXFx0bmV0ZGV2aWNlX3RyYWNrZXIgZGV2X3RyYWNrZXI7XFxuIFxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XFxuK1xcdHVuc2lnbmVkIGxvbmcgeGFfaWR4O1xcbiBcXG4tXFx0bXV0ZXhfbG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlbG9jayk7XFxuLVxcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShiaW5kaW5nLCB0ZW1wLCBcXHUwMDI2cHJpdi1cXHUwMDNlYmluZGluZ3MsIGxpc3QpIHtcXG4rXFx0eGFfZm9yX2VhY2goXFx1MDAyNnByaXYtXFx1MDAzZWJpbmRpbmdzLCB4YV9pZHgsIGJpbmRpbmcpIHtcXG4gXFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2YmluZGluZy1cXHUwMDNlbG9jayk7XFxuIFxcdFxcdGRldiA9IGJpbmRpbmctXFx1MDAzZWRldjtcXG4gXFx0XFx0aWYgKCFkZXYpIHtcXG5AQCAtMTQ0Niw3ICsxNDMzLDcgQEAgdm9pZCBuZXRkZXZfbmxfc29ja19wcml2X2Rlc3Ryb3koc3RydWN0IG5ldGRldl9ubF9zb2NrICpwcml2KVxcbiBcXHRcXHRuZXRkZXZfdW5sb2NrKGRldik7XFxuIFxcdFxcdG5ldGRldl9wdXQoZGV2LCBcXHUwMDI2ZGV2X3RyYWNrZXIpO1xcbiBcXHR9XFxuLVxcdG11dGV4X3VubG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlbG9jayk7XFxuK1xcdHhhX2Rlc3Ryb3koXFx1MDAyNnByaXYtXFx1MDAzZWJpbmRpbmdzKTtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBuZXRkZXZfZ2VubF9uZXRkZXZpY2VfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTU6MTA6MTMuNTY3NzY1NjM2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTM1MDUyOTYyNDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9ERVZNRU1cIixcbiAgICBcIkRNQV9TSEFSRURfQlVGRkVSXCIsXG4gICAgXCJQQUdFX1BPT0xcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZXRkZXZfbmxfYmluZF9yeF9kb2l0XCIsXG4gICAgXCJuZXRkZXZfbmxfYmluZF90eF9kb2l0XCIsXG4gICAgXCJuZXRfZGV2bWVtX2JpbmRfZG1hYnVmXCIsXG4gICAgXCJuZXRfZGV2bWVtX3VuYmluZF9kbWFidWZcIixcbiAgICBcIm5ldGRldl9ubF9zb2NrX3ByaXZfaW5pdFwiLFxuICAgIFwibmV0ZGV2X25sX3NvY2tfcHJpdl9kZXN0cm95XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG5ldGRldiBuZXRsaW5rIHNvY2tldCBiaW5kaW5ncyBoYW5kbGluZywgY2hhbmdpbmcgdGhlIGBiaW5kaW5nc2AgbGlzdCB0byBhbiBgeGFycmF5YCBhbmQgcmVtb3ZpbmcgdGhlIGBsb2NrYCBtdXRleCBmcm9tIGBzdHJ1Y3QgbmV0ZGV2X25sX3NvY2tgLiBUaGlzIGFmZmVjdHMgdGhlIGBuZXRkZXZfbmxfYmluZF9yeF9kb2l0YCwgYG5ldGRldl9ubF9iaW5kX3R4X2RvaXRgLCBgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZmAsIGFuZCBgbmV0X2Rldm1lbV91bmJpbmRfZG1hYnVmYCBmdW5jdGlvbnMsIHdoaWNoIGFyZSByZWFjaGFibGUgdmlhIG5ldGxpbmsgY29tbWFuZHMuIFRoZSBjaGFuZ2VzIGFyZSBmdW5jdGlvbmFsIGFuZCBpbnZvbHZlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBzeW5jaHJvbml6YXRpb24sIG1ha2luZyB0aGVtIHdvcnRoIGZ1enppbmcuIFRoZSBgTkVUX0RFVk1FTWAgZmVhdHVyZSBhbmQgaXRzIGRlcGVuZGVuY2llcyAoYERNQV9TSEFSRURfQlVGRkVSYCBhbmQgYFBBR0VfUE9PTGApIG11c3QgYmUgZW5hYmxlZCB0byB0ZXN0IHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3ZTViYzVmNjc0MzIxNmJiMjRmMzgxYzViZGE5NjE0YTA3NGFhMDg2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMTEgMTU6MTA6MTIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRkZXZfbmV0bGluay5oIGIvaW5jbHVkZS9uZXQvbmV0ZGV2X25ldGxpbmsuaFxuaW5kZXggMDc1OTYyZGJlNzQzYi4uNDVhNGE0ODJkNDJlNCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L25ldGRldl9uZXRsaW5rLmhcbisrKyBiL2luY2x1ZGUvbmV0L25ldGRldl9uZXRsaW5rLmhcbkBAIC0yLDExICsyLDEwIEBAXG4gI2lmbmRlZiBfX05FVF9ORVRERVZfTkVUTElOS19IXG4gI2RlZmluZSBfX05FVF9ORVRERVZfTkVUTElOS19IXG4gXG4tI2luY2x1ZGUgXHUwMDNjbGludXgvbGlzdC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgveGFycmF5LmhcdTAwM2VcbiBcbiBzdHJ1Y3QgbmV0ZGV2X25sX3NvY2sge1xuLVx0c3RydWN0IG11dGV4IGxvY2s7XG4tXHRzdHJ1Y3QgbGlzdF9oZWFkIGJpbmRpbmdzO1xuK1x0c3RydWN0IHhhcnJheSBiaW5kaW5ncztcbiB9O1xuIFxuICNlbmRpZlx0LyogX19ORVRfTkVUREVWX05FVExJTktfSCAqL1xuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Rldm1lbS5jIGIvbmV0L2NvcmUvZGV2bWVtLmNcbmluZGV4IDk1N2Q2Yjk2MjE2YjMuLmJkZjhhMDc5OWE0MjcgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9kZXZtZW0uY1xuKysrIGIvbmV0L2NvcmUvZGV2bWVtLmNcbkBAIC0xMzQsOCArMTM0LDggQEAgdm9pZCBuZXRfZGV2bWVtX3VuYmluZF9kbWFidWYoc3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKmJpbmRpbmcpXG4gXHQgKi9cbiBcdHN5bmNocm9uaXplX25ldCgpO1xuIFxuLVx0aWYgKGJpbmRpbmctXHUwMDNlbGlzdC5uZXh0KVxuLVx0XHRsaXN0X2RlbChcdTAwMjZiaW5kaW5nLVx1MDAzZWxpc3QpO1xuK1x0aWYgKGJpbmRpbmctXHUwMDNlc29ja19wcml2KVxuK1x0XHR4YV9lcmFzZShcdTAwMjZiaW5kaW5nLVx1MDAzZXNvY2tfcHJpdi1cdTAwM2ViaW5kaW5ncywgYmluZGluZy1cdTAwM2VpZCk7XG4gXG4gXHR4YV9mb3JfZWFjaChcdTAwMjZiaW5kaW5nLVx1MDAzZWJvdW5kX3J4cXMsIHhhX2lkeCwgcnhxKSB7XG4gXHRcdGNvbnN0IHN0cnVjdCBwcF9tZW1vcnlfcHJvdmlkZXJfcGFyYW1zIG1wX3BhcmFtcyA9IHtcbkBAIC0xOTMsNiArMTkzLDcgQEAgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICp2ZGV2LFxuIFx0c3RydWN0IGRtYV9idWYgKmRtYWJ1ZjtcbiBcdHVuc2lnbmVkIGludCBzZ19pZHgsIGk7XG4gXHR1bnNpZ25lZCBsb25nIHZpcnR1YWw7XG4rXHR2b2lkICpyZXM7XG4gXHRpbnQgZXJyO1xuIFxuIFx0aWYgKCFkbWFfZGV2KSB7XG5AQCAtMzI1LDEwICszMjYsMTcgQEAgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICp2ZGV2LFxuIFx0aWYgKGVyciBcdTAwM2MgMClcbiBcdFx0Z290byBlcnJfZnJlZV9jaHVua3M7XG4gXG4tXHRsaXN0X2FkZChcdTAwMjZiaW5kaW5nLVx1MDAzZWxpc3QsIFx1MDAyNnByaXYtXHUwMDNlYmluZGluZ3MpO1xuK1x0YmluZGluZy1cdTAwM2Vzb2NrX3ByaXYgPSBwcml2O1xuK1x0cmVzID0geGFfc3RvcmUoXHUwMDI2cHJpdi1cdTAwM2ViaW5kaW5ncywgYmluZGluZy1cdTAwM2VpZCwgYmluZGluZywgR0ZQX0tFUk5FTCk7XG4rXHRpZiAoeGFfaXNfZXJyKHJlcykpIHtcbitcdFx0ZXJyID0geGFfZXJyKHJlcyk7XG4rXHRcdGdvdG8gZXJyX2VyYXNlX2RtYWJ1Zl9iaW5kaW5ncztcbitcdH1cbiBcbiBcdHJldHVybiBiaW5kaW5nO1xuIFxuK2Vycl9lcmFzZV9kbWFidWZfYmluZGluZ3M6XG4rXHR4YV9lcmFzZShcdTAwMjZuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5ncywgYmluZGluZy1cdTAwM2VpZCk7XG4gZXJyX2ZyZWVfY2h1bmtzOlxuIFx0Z2VuX3Bvb2xfZm9yX2VhY2hfY2h1bmsoYmluZGluZy1cdTAwM2VjaHVua19wb29sLFxuIFx0XHRcdFx0bmV0X2Rldm1lbV9kbWFidWZfZnJlZV9jaHVua19vd25lciwgTlVMTCk7XG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2bWVtLmggYi9uZXQvY29yZS9kZXZtZW0uaFxuaW5kZXggMzg1MmE1NjAzNmNiNC4uYmY3N2U1YTlhOGZlNyAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL2Rldm1lbS5oXG4rKysgYi9uZXQvY29yZS9kZXZtZW0uaFxuQEAgLTQ5LDEwICs0OSwxMCBAQCBzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyB7XG4gXHQgKi9cbiBcdHN0cnVjdCBwZXJjcHVfcmVmIHJlZjtcbiBcbi1cdC8qIFRoZSBsaXN0IG9mIGJpbmRpbmdzIGN1cnJlbnRseSBhY3RpdmUuIFVzZWQgZm9yIG5ldGxpbmsgdG8gbm90aWZ5IHVzXG4rXHQvKiBUaGUgc29ja2V0IHByaXYgdGhpcyBiaW5kaW5nIGJlbG9uZ3MgdG8uIFVzZWQgZm9yIG5ldGxpbmsgdG8gbm90aWZ5IHVzXG4gXHQgKiBvZiB0aGUgdXNlciBkcm9wcGluZyB0aGUgYmluZC5cbiBcdCAqL1xuLVx0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xuK1x0c3RydWN0IG5ldGRldl9ubF9zb2NrICpzb2NrX3ByaXY7XG4gXG4gXHQvKiByeHEncyB0aGlzIGJpbmRpbmcgaXMgYWN0aXZlIG9uLiAqL1xuIFx0c3RydWN0IHhhcnJheSBib3VuZF9yeHFzO1xuZGlmZiAtLWdpdCBhL25ldC9jb3JlL25ldGRldi1nZW5sLmMgYi9uZXQvY29yZS9uZXRkZXYtZ2VubC5jXG5pbmRleCBjMTVkOGQ0Y2ExZjhmLi5kM2YzYTkxYTZkOTMyIDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvbmV0ZGV2LWdlbmwuY1xuKysrIGIvbmV0L2NvcmUvbmV0ZGV2LWdlbmwuY1xuQEAgLTEwNDQsMTMgKzEwNDQsMTEgQEAgaW50IG5ldGRldl9ubF9iaW5kX3J4X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdFx0Z290byBlcnJfZ2VubG1zZ19mcmVlO1xuIFx0fVxuIFxuLVx0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZWxvY2spO1xuLVxuIFx0ZXJyID0gMDtcbiBcdG5ldGRldiA9IG5ldGRldl9nZXRfYnlfaW5kZXhfbG9jayhnZW5sX2luZm9fbmV0KGluZm8pLCBpZmluZGV4KTtcbiBcdGlmICghbmV0ZGV2KSB7XG4gXHRcdGVyciA9IC1FTk9ERVY7XG4tXHRcdGdvdG8gZXJyX3VubG9ja19zb2NrO1xuK1x0XHRnb3RvIGVycl9nZW5sbXNnX2ZyZWU7XG4gXHR9XG4gXHRpZiAoIW5ldGlmX2RldmljZV9wcmVzZW50KG5ldGRldikpXG4gXHRcdGVyciA9IC1FTk9ERVY7XG5AQCAtMTEwMiw4ICsxMTAwLDYgQEAgaW50IG5ldGRldl9ubF9iaW5kX3J4X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcbiBcdG5ldGRldl91bmxvY2sobmV0ZGV2KTtcbiBcbi1cdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZWxvY2spO1xuLVxuIFx0cmV0dXJuIGVyciBcdTAwM2MgMCA/IGVyciA6IDA7XG4gXG4gZXJyX3VuYmluZDpcbkBAIC0xMTEyLDggKzExMDgsNiBAQCBpbnQgbmV0ZGV2X25sX2JpbmRfcnhfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0Yml0bWFwX2ZyZWUocnhxX2JpdG1hcCk7XG4gZXJyX3VubG9jazpcbiBcdG5ldGRldl91bmxvY2sobmV0ZGV2KTtcbi1lcnJfdW5sb2NrX3NvY2s6XG4tXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2Vsb2NrKTtcbiBlcnJfZ2VubG1zZ19mcmVlOlxuIFx0bmxtc2dfZnJlZShyc3ApO1xuIFx0cmV0dXJuIGVycjtcbkBAIC0xMTg1LDEyICsxMTc5LDEwIEBAIGludCBuZXRkZXZfbmxfYmluZF90eF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRcdGdvdG8gZXJyX2dlbmxtc2dfZnJlZTtcbiBcdH1cbiBcbi1cdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2Vsb2NrKTtcbi1cbiBcdG5ldGRldiA9IG5ldGRldl9nZXRfYnlfaW5kZXhfbG9jayhnZW5sX2luZm9fbmV0KGluZm8pLCBpZmluZGV4KTtcbiBcdGlmICghbmV0ZGV2KSB7XG4gXHRcdGVyciA9IC1FTk9ERVY7XG4tXHRcdGdvdG8gZXJyX3VubG9ja19zb2NrO1xuK1x0XHRnb3RvIGVycl9nZW5sbXNnX2ZyZWU7XG4gXHR9XG4gXG4gXHRpZiAoIW5ldGlmX2RldmljZV9wcmVzZW50KG5ldGRldikpIHtcbkBAIC0xMjMzLDcgKzEyMjUsNiBAQCBpbnQgbmV0ZGV2X25sX2JpbmRfdHhfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0aWYgKGJpbmRfZGV2ICE9IG5ldGRldilcbiBcdFx0bmV0ZGV2X3VubG9jayhiaW5kX2Rldik7XG4gXHRuZXRkZXZfdW5sb2NrKG5ldGRldik7XG4tXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2Vsb2NrKTtcbiBcbiBcdHJldHVybiBnZW5sbXNnX3JlcGx5KHJzcCwgaW5mbyk7XG4gXG5AQCAtMTI0Miw4ICsxMjMzLDYgQEAgaW50IG5ldGRldl9ubF9iaW5kX3R4X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdFx0bmV0ZGV2X3VubG9jayhiaW5kX2Rldik7XG4gZXJyX3VubG9ja19uZXRkZXY6XG4gXHRuZXRkZXZfdW5sb2NrKG5ldGRldik7XG4tZXJyX3VubG9ja19zb2NrOlxuLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlbG9jayk7XG4gZXJyX2dlbmxtc2dfZnJlZTpcbiBcdG5sbXNnX2ZyZWUocnNwKTtcbiBcdHJldHVybiBlcnI7XG5AQCAtMTQxOCwxOSArMTQwNywxNyBAQCBpbnQgbmV0ZGV2X25sX3F1ZXVlX2NyZWF0ZV9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXG4gdm9pZCBuZXRkZXZfbmxfc29ja19wcml2X2luaXQoc3RydWN0IG5ldGRldl9ubF9zb2NrICpwcml2KVxuIHtcbi1cdElOSVRfTElTVF9IRUFEKFx1MDAyNnByaXYtXHUwMDNlYmluZGluZ3MpO1xuLVx0bXV0ZXhfaW5pdChcdTAwMjZwcml2LVx1MDAzZWxvY2spO1xuK1x0eGFfaW5pdChcdTAwMjZwcml2LVx1MDAzZWJpbmRpbmdzKTtcbiB9XG4gXG4gdm9pZCBuZXRkZXZfbmxfc29ja19wcml2X2Rlc3Ryb3koc3RydWN0IG5ldGRldl9ubF9zb2NrICpwcml2KVxuIHtcbiBcdHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpiaW5kaW5nO1xuLVx0c3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKnRlbXA7XG4gXHRuZXRkZXZpY2VfdHJhY2tlciBkZXZfdHJhY2tlcjtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XG4rXHR1bnNpZ25lZCBsb25nIHhhX2lkeDtcbiBcbi1cdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2Vsb2NrKTtcbi1cdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShiaW5kaW5nLCB0ZW1wLCBcdTAwMjZwcml2LVx1MDAzZWJpbmRpbmdzLCBsaXN0KSB7XG4rXHR4YV9mb3JfZWFjaChcdTAwMjZwcml2LVx1MDAzZWJpbmRpbmdzLCB4YV9pZHgsIGJpbmRpbmcpIHtcbiBcdFx0bXV0ZXhfbG9jayhcdTAwMjZiaW5kaW5nLVx1MDAzZWxvY2spO1xuIFx0XHRkZXYgPSBiaW5kaW5nLVx1MDAzZWRldjtcbiBcdFx0aWYgKCFkZXYpIHtcbkBAIC0xNDQ2LDcgKzE0MzMsNyBAQCB2b2lkIG5ldGRldl9ubF9zb2NrX3ByaXZfZGVzdHJveShzdHJ1Y3QgbmV0ZGV2X25sX3NvY2sgKnByaXYpXG4gXHRcdG5ldGRldl91bmxvY2soZGV2KTtcbiBcdFx0bmV0ZGV2X3B1dChkZXYsIFx1MDAyNmRldl90cmFja2VyKTtcbiBcdH1cbi1cdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZWxvY2spO1xuK1x0eGFfZGVzdHJveShcdTAwMjZwcml2LVx1MDAzZWJpbmRpbmdzKTtcbiB9XG4gXG4gc3RhdGljIGludCBuZXRkZXZfZ2VubF9uZXRkZXZpY2VfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYixcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE1OjEwOjEzLjU2Nzc2NzI2NloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY0MDgzMjI0MDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgTmV0ZGV2IE5ldGxpbmsgQmluZGluZyBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggaGVyZSwgYW5kIGl0J3MgbWFraW5nIHNvbWUgcHJldHR5IHNpZ25pZmljYW50IGNoYW5nZXMgdG8gaG93IG5ldGRldiBuZXRsaW5rIHNvY2tldCBiaW5kaW5ncyBhcmUgaGFuZGxlZC4gU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyB0byBiZSBpbiBgbmV0L2NvcmUvZGV2bWVtLmNgLCBgbmV0L2NvcmUvbmV0ZGV2LWdlbmwuY2AsIGFuZCBgaW5jbHVkZS9uZXQvbmV0ZGV2X25ldGxpbmsuaGAuIFRoZXkncmUgc3dhcHBpbmcgb3V0IHRoZSBgYmluZGluZ3NgIGxpc3QgZm9yIGFuIGB4YXJyYXlgIGFuZCwgaW50ZXJlc3RpbmcsIHJlbW92aW5nIHRoZSBgbG9ja2AgbXV0ZXggZnJvbSBgc3RydWN0IG5ldGRldl9ubF9zb2NrYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzLlxuXG5UaGlzIHBhdGNoIHRvdWNoZXMgdGhlc2UgZnVuY3Rpb25zIGRpcmVjdGx5OiBgbmV0ZGV2X25sX2JpbmRfcnhfZG9pdGAsIGBuZXRkZXZfbmxfYmluZF90eF9kb2l0YCwgYG5ldGRldl9ubF9zb2NrX3ByaXZfaW5pdGAsIGBuZXRkZXZfbmxfc29ja19wcml2X2Rlc3Ryb3lgLCBgbmV0X2Rldm1lbV91bmJpbmRfZG1hYnVmYCwgYW5kIGBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmYC4gVGhlc2UgYWxsIGxvb2sgbGlrZSBuZXRsaW5rIGhhbmRsZXJzIGZvciB0aGUgbmV0ZGV2IGZhbWlseS4gUmlnaHQsIHNvIGl0J3MgYSBuZXRsaW5rLWZvY3VzZWQgY2hhbmdlLlxuXG5NeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXM6IGlzIHRoaXMgcmVhY2hhYmxlPyBJcyBpdCB3b3J0aCBmdXp6aW5nPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSB0cmlnZ2VyZWQuIEkgc2hvdWxkIGFsc28gdHJhY2sgZG93biB0aGUgYXNzb2NpYXRlZCBjb25maWcgb3B0aW9ucyBmb3IgZGV2bWVtLiBgbmV0L2NvcmUvZGV2bWVtLmNgIGlzIHRoZSBwcmltZSBzdXNwZWN0IGZvciBjb25maWcgY2hlY2tzLiBPbmNlIEkgaGF2ZSB0aGUgcmVsZXZhbnQgY29uZmlnIG9wdGlvbnMsIEkgY2FuIGRldGVybWluZSB0aGUgbGlrZWxpaG9vZCBvZiB0cmlnZ2VyaW5nIHRoaXMgY29kZSBwYXRoLiBJIHdpbGwgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhlIG9sZCBhbmQgbmV3IG1ldGhvZHMgZG8gYW5kIGlmIHRoaXMgaXMgYSBnb29kIHBsYWNlIHRvIGNvbmNlbnRyYXRlIG15IGVmZm9ydHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwOTYsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMTMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNToxMDoxOS45NzYwOTE4MzRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYyNDAzNTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGV2bWVtXFxcXC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL01ha2VmaWxlPTQ4PW9iai0kKENPTkZJR19ORVRfVEVTVCkgKz0gbmV0X3Rlc3Qub1xcbm5ldC9jb3JlL01ha2VmaWxlOjQ5Om9iai0kKENPTkZJR19ORVRfREVWTUVNKSArPSBkZXZtZW0ub1xcbm5ldC9jb3JlL01ha2VmaWxlLTUwLW9iai0kKENPTkZJR19ERUJVR19ORVQpICs9IGxvY2tfZGVidWcub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNToxMDoyMC4wMjIzMzgwOFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NTcxOTkzNDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIGBDT05GSUdfTkVUX0RFVk1FTWAgRGVwZW5kZW5jeSoqXG5cblJpZ2h0LCBzbyB3ZSdyZSBzZWVpbmcgdGhhdCBgQ09ORklHX05FVF9ERVZNRU1gIGlzIGEgaGFyZCByZXF1aXJlbWVudCBzb21ld2hlcmUuIE1ha2VzIHNlbnNlLCBnaXZlbiB0aGUgcG90ZW50aWFsIGZvciBkaXJlY3QgZGV2aWNlIG1lbW9yeSBhY2Nlc3MuIE15IGluaXRpYWwgbW92ZSBoZXJlIGlzIGFsd2F5cyB0byBkaXZlIHN0cmFpZ2h0IGludG8gdGhlIEtjb25maWcgZmlsZXMuIFRpbWUgdG8gY2hlY2sgdGhlIGRlcGVuZGVuY2llcy4gVGhpcyBuZWVkcyB0byBiZSBjaGVja2VkIGNhcmVmdWxseS4gSSdsbCBuZWVkIHRvIGxvY2F0ZSB3aGVyZSBgQ09ORklHX05FVF9ERVZNRU1gIGlzIGRlZmluZWQsIGZpZ3VyZSBvdXQgKndoeSogaXQncyBuZWVkZWQsIGFuZCB3aGF0IG90aGVyIGNvbmZpZ3VyYXRpb25zIGl0IG1pZ2h0IGluZmx1ZW5jZS4gVW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCBvZiB0aGlzIGNvbmZpZ3VyYXRpb24gd2lsbCBiZSBrZXkuIElzIGl0IGEgY29yZSBuZXR3b3JraW5nIGZlYXR1cmUsIG9yIGEgbW9yZSBuaWNoZSwgcGVyZm9ybWFuY2Utb3JpZW50ZWQgb3B0aW9uPyBUaGlzIG5lZWRzIHRob3JvdWdoIGludmVzdGlnYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ4NjksIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNToxMDoyMy40Nzk1NDAzNjNaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY4MTI1NzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVF9ERVZNRU1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L0tjb25maWc9NjY9Y29uZmlnIFNLQl9FWFRFTlNJT05TXFxuLS1cXG5uZXQvS2NvbmZpZy02OC1cXG5uZXQvS2NvbmZpZzo2OTpjb25maWcgTkVUX0RFVk1FTVxcbm5ldC9LY29uZmlnLTcwLVxcdGRlZl9ib29sIHlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTU6MTA6MjMuNTI2MzU5MTI4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDEwOTY5OTg0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKkludmVzdGlnYXRpbmcgYSBLZXJuZWwgQ29uZmlndXJhdGlvbiBGbGFnKipcblxuT2theSwgc28gYE5FVF9ERVZNRU1gIGlzIGRlZmluZWQgYXMgYGRlZl9ib29sIHlgLiBUaGF0IG1lYW5zIGl0J3MgZW5hYmxlZCBieSBkZWZhdWx0LCB3aGljaCBpcyBpbXBvcnRhbnQgdG8ga25vdy4gQnV0IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBzY29wZSBhbmQgaW1wYWN0LiBCZWZvcmUgSSBqdW1wIHRvIGNvbmNsdXNpb25zLCBJIG5lZWQgdG8gc2VlIHdoYXQgb3RoZXIgY29uZmlndXJhdGlvbnMgZGVwZW5kIG9uIGl0LiBLbm93aW5nIGl0cyBkZXBlbmRlbmNpZXMgd2lsbCBpbGx1bWluYXRlIHdoaWNoIGZlYXR1cmVzIG9yIGZ1bmN0aW9uYWxpdGllcyBhcmUgYWZmZWN0ZWQgaWYgSSB3ZXJlIHRvIGNoYW5nZSBpdHMgc3RhdGUuIFRoaXMgd2lsbCBhbHNvIGhlbHAgbWUgbmFycm93IGRvd24gd2hlcmUgdG8gbG9vayBpZiB0aGVyZSBhcmUgYW55IHNpZGUgZWZmZWN0cyBvciBwb3RlbnRpYWwgY29uZmxpY3RzLiBUaW1lIHRvIGRpZyBpbiBhbmQgdHJhY2UgdGhlIHJlbGF0aW9uc2hpcHMuIExldCdzIHNlZSB3aGF0IHRoZSBkZXBlbmRlbmN5IHRyZWUgbG9va3MgbGlrZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTE2MywiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE1OjEwOjI3LjYzNjA2MzIwNFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTQ2Mjk5NDA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORVRfREVWTUVNXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvS2NvbmZpZz02Nj1jb25maWcgU0tCX0VYVEVOU0lPTlNcXG4tLVxcbm5ldC9LY29uZmlnLTY4LVxcbm5ldC9LY29uZmlnOjY5OmNvbmZpZyBORVRfREVWTUVNXFxubmV0L0tjb25maWctNzAtXFx0ZGVmX2Jvb2wgeVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNToxMDoyOS41ODIzNzIzNjNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTM5NzMzNTg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcsIHdoZXJlJ3MgdGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQgdW50YW5nbGluZyB0aGlzIGNvbmZpZ3VyYXRpb24gbXlzdGVyeT8gUmlnaHQsIHRoZSBgbmV0L0tjb25maWdgIGZpbGUuIFNwZWNpZmljYWxseSwgSSdtIGdvaW5nIHRvIGp1bXAgaW4gYXJvdW5kIGxpbmUgNjkuIFRoYXQncyB1c3VhbGx5IGEgZ29vZCBzcG90IHRvIGdldCBhIHNlbnNlIG9mIHRoZSBoaWdoZXItbGV2ZWwgbmV0d29yayBjb25maWd1cmF0aW9ucyBhbmQgZGVwZW5kZW5jaWVzLiBJJ20gZXhwZWN0aW5nIHRvIHNlZSBzb21lIGNyaXRpY2FsIGRlZmluaXRpb25zLCBtYXliZSBzb21lIGVhcmx5IG1lbnUgc3RydWN0dXJlcyB0aGF0IGxheSBvdXQgdGhlIGJ1aWxkaW5nIGJsb2NrcyBmb3IgdGhlIG1vcmUgZ3JhbnVsYXIgb3B0aW9ucyBmdXJ0aGVyIGRvd24uIEknbGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgb24gaG93IHRoZSB2YXJpb3VzIG5ldHdvcmsgc3Vic3lzdGVtcyBhcmUgYnJvdWdodCB0b2dldGhlciBhdCB0aGUgY29uZmlndXJhdGlvbiBsZXZlbC4gSSdtIGhvcGluZyB0byBnZXQgYSBxdWljayBvdmVydmlldyBvZiB0aGUgb3JnYW5pemF0aW9uYWwgYXBwcm9hY2ggdXNlZCBpbiB0aGUgYG5ldC9gIGRpcmVjdG9yeSdzIGNvbmZpZ3VyYXRpb24gZmlsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTQyMywiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE1OjEwOjMyLjcyMjEwODkxOVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MjEyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA2MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA2MDpcXHRjb25maWcgTkVUX1JFRElSRUNUXFxuICA2MTpcXHRcXHRib29sXFxuICA2MjpcXHRcXG4gIDYzOlxcdGNvbmZpZyBTS0JfREVDUllQVEVEXFxuICA2NDpcXHRcXHRib29sXFxuICA2NTpcXHRcXG4gIDY2OlxcdGNvbmZpZyBTS0JfRVhURU5TSU9OU1xcbiAgNjc6XFx0XFx0Ym9vbFxcbiAgNjg6XFx0XFxuICA2OTpcXHRjb25maWcgTkVUX0RFVk1FTVxcbiAgNzA6XFx0XFx0ZGVmX2Jvb2wgeVxcbiAgNzE6XFx0XFx0c2VsZWN0IEdFTkVSSUNfQUxMT0NBVE9SXFxuICA3MjpcXHRcXHRkZXBlbmRzIG9uIERNQV9TSEFSRURfQlVGRkVSXFxuICA3MzpcXHRcXHRkZXBlbmRzIG9uIFBBR0VfUE9PTFxcbiAgNzQ6XFx0XFxuICA3NTpcXHRjb25maWcgTkVUX1NIQVBFUlxcbiAgNzY6XFx0XFx0Ym9vbFxcbiAgNzc6XFx0XFxuICA3ODpcXHRjb25maWcgTkVUX0NSQzMyQ1xcbiAgNzk6XFx0XFx0Ym9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNToxMDozMi43MjIxODQ1MDlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzEzMTI1ODQ4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgdGhlIERlcGVuZGVuY2llcyBvZiBgTkVUX0RFVk1FTWAqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgTkVUX0RFVk1FTWAgYW5kIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcHJlcmVxdWlzaXRlcy4gUmlnaHQgb2ZmIHRoZSBiYXQsIGl0J3MgdGVsbGluZyBtZSBpdCBkZXBlbmRzIG9uIGJvdGggYERNQV9TSEFSRURfQlVGRkVSYCBhbmQgYFBBR0VfUE9PTGAuIFRoYXQgbWFrZXMgc2Vuc2U7IHdlIG5lZWQgYSBzaGFyZWQgbWVtb3J5IHNwYWNlIGFuZCBhIG1lY2hhbmlzbSB0byBtYW5hZ2UgbWVtb3J5IHBhZ2VzLiBNeSBuZXh0IHN0ZXAgaXMgdG8gcXVpY2tseSB2ZXJpZnkgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBmb3IgYERNQV9TSEFSRURfQlVGRkVSYC4gSXMgaXQgZW5hYmxlZCBieSBkZWZhdWx0IGluIHRoZSBrZXJuZWwgb3IgZG9lcyBpdCBuZWVkIHRvIGJlIGV4cGxpY2l0bHkgc2VsZWN0ZWQgaW4gdGhlIGNvbmZpZ3VyYXRpb24/IEkgbmVlZCB0byBrbm93IGlmIHRoaXMgaXMgc29tZXRoaW5nIHRoYXQgbWlnaHQgYmUgYSBjb21tb24gc291cmNlIG9mIHByb2JsZW1zIGR1cmluZyBidWlsZCwgYW5kIEkgZG9uJ3Qgd2FudCB0byBtYWtlIGFzc3VtcHRpb25zLiBJJ2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIGNvbmZpZyBhbmQgc2VlIHdoYXQncyB3aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1ODM5LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNToxMDozNS44NTM0NDU4NzVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NzEyMjAyODYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIERNQV9TSEFSRURfQlVGRkVSXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jhc2UvS2NvbmZpZz0yMTM9c291cmNlIFxcXCJkcml2ZXJzL2Jhc2UvcmVnbWFwL0tjb25maWdcXFwiXFxuZHJpdmVycy9iYXNlL0tjb25maWctMjE0LVxcbmRyaXZlcnMvYmFzZS9LY29uZmlnOjIxNTpjb25maWcgRE1BX1NIQVJFRF9CVUZGRVJcXG5kcml2ZXJzL2Jhc2UvS2NvbmZpZy0yMTYtXFx0Ym9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNToxMDozNy44MjQ2NzM1NTJaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI1MjAxMDk3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgc29tZXRoaW5nIGlzIGNvbmZpZ3VyZWQgaW4gdGhlIGtlcm5lbCwgYW5kIHRoZSBgZHJpdmVycy9iYXNlL0tjb25maWdgIGZpbGUgc2VlbXMgbGlrZSBhIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQuIEdpdmVuIG15IGV4cGVyaWVuY2UsIGxpbmUgMjE1IHNvdW5kcyBsaWtlIGEgZ29vZCBwb2ludCB0byB6ZXJvIGluIG9uLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgc29tZXRoaW5nIGZ1bmRhbWVudGFsLCBwcm9iYWJseSBhIGNvcmUgb3B0aW9uIHJlbGF0ZWQgdG8gc29tZSBkcml2ZXIgb3IgYmFzZSBmdW5jdGlvbmFsaXR5LCBvciBtYXliZSBldmVuIGEgbWFjcm8gZGVmaW5pdGlvbi4gTGV0IG1lIHB1bGwgdGhhdCBmaWxlIGFuZCBnZXQgdG8gbGluZSAyMTUsIEkgc3VzcGVjdCBJIGNhbiBxdWlja2x5IHBpbnBvaW50IHRoZSByZWxldmFudCBjb25maWcgb3B0aW9uLCBhbmQgdW5kZXJzdGFuZCBpdHMgY29udGV4dCB3aXRoaW4gdGhlIHdpZGVyIGNvbmZpZ3VyYXRpb24gc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MTU2LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTU6MTA6NDEuMDc2Njg3NDQ3WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4MzExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvYmFzZS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIxMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDIxMDpcXHRcXHRib29sXFxuIDIxMTpcXHRcXHRzZWxlY3QgR0xPQlxcbiAyMTI6XFx0XFxuIDIxMzpcXHRzb3VyY2UgXFxcImRyaXZlcnMvYmFzZS9yZWdtYXAvS2NvbmZpZ1xcXCJcXG4gMjE0OlxcdFxcbiAyMTU6XFx0Y29uZmlnIERNQV9TSEFSRURfQlVGRkVSXFxuIDIxNjpcXHRcXHRib29sXFxuIDIxNzpcXHRcXHRkZWZhdWx0IG5cXG4gMjE4OlxcdFxcdHNlbGVjdCBJUlFfV09SS1xcbiAyMTk6XFx0XFx0aGVscFxcbiAyMjA6XFx0XFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBmcmFtZXdvcmsgZm9yIGJ1ZmZlci1zaGFyaW5nIGJldHdlZW5cXG4gMjIxOlxcdFxcdCAgbXVsdGlwbGUgZHJpdmVycy4gQSBidWZmZXIgaXMgYXNzb2NpYXRlZCB3aXRoIGEgZmlsZSB1c2luZyBkcml2ZXJcXG4gMjIyOlxcdFxcdCAgQVBJcyBleHRlbnNpb247IHRoZSBmaWxlJ3MgZGVzY3JpcHRvciBjYW4gdGhlbiBiZSBwYXNzZWQgb24gdG8gb3RoZXJcXG4gMjIzOlxcdFxcdCAgZHJpdmVyLlxcbiAyMjQ6XFx0XFxuIDIyNTpcXHRjb25maWcgRE1BX0ZFTkNFX1RSQUNFXFxuIDIyNjpcXHRcXHRib29sIFxcXCJFbmFibGUgdmVyYm9zZSBETUFfRkVOQ0VfVFJBQ0UgbWVzc2FnZXNcXFwiXFxuIDIyNzpcXHRcXHRkZXBlbmRzIG9uIERNQV9TSEFSRURfQlVGRkVSXFxuIDIyODpcXHRcXHRoZWxwXFxuIDIyOTpcXHRcXHQgIEVuYWJsZSB0aGUgRE1BX0ZFTkNFX1RSQUNFIHByaW50a3MuIFRoaXMgd2lsbCBhZGQgZXh0cmFcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTU6MTA6NDEuMDc2NzY2OTI3WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NDQ5ODI3MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nOlxuXG4qKlRoaW5raW5nIFRocm91Z2ggQ29uZmlndXJhdGlvbiBEZWZhdWx0cyoqXG5cblJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBETUFfU0hBUkVEX0JVRkZFUmAgdGhpbmcuIEl0J3MgYSBCb29sZWFuLCBkZWZhdWx0ZWQgdG8gJ24nIGlmIG5vdCBzcGVjaWZpZWQsIHdoaWNoIHRlbGxzIG1lIGl0J3MgbGlrZWx5IGEgY29uZmlndXJhdGlvbiB0b2dnbGUuIEdpdmVuIHRoYXQsIGl0ICpkZWZpbml0ZWx5KiBzaG91bGQgYmUgcGFydCBvZiB0aGUgYEVuYWJsZUNvbmZpZ3NgIGxpc3QuIE5vIHF1ZXN0aW9uIHRoZXJlLiBXZSBuZWVkIHRvIGV4cGxpY2l0bHkgYWNrbm93bGVkZ2UgYW5kIG1hbmFnZSB0aGF0IHNldHRpbmcuXG5cbk5vdywgcmVnYXJkaW5nIGBQQUdFX1BPT0xgLi4uIG15IGd1dCBmZWVsaW5nLCBiYXNlZCBvbiBwcmV2aW91cyBleHBlcmllbmNlLCBpcyB0aGF0IGl0J3MgcHJvYmFibHkgZW5hYmxlZCBieSBkZWZhdWx0LCBlc3BlY2lhbGx5IGluIGEgbmV0d29ya2luZyBjb250ZXh0LiBIb3dldmVyLCBndXQgZmVlbGluZ3MgYXJlbid0IGVub3VnaC4gSSdtIGdvaW5nIHRvIGRvdWJsZS1jaGVjayB0aGUgYFBBR0VfUE9PTGAgY29uZmlndXJhdGlvbiBkZWZpbml0aW9uIHRvIGNvbmZpcm0gdGhpcyBhc3N1bXB0aW9uLiBMZXQncyBtYWtlIHN1cmUgb3VyIGFzc3VtcHRpb25zIGFyZSBjb3JyZWN0IGJlZm9yZSB3ZSBnbyBmdXJ0aGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NjI3LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNToxMDo0NC43MjE3NTI5NFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc1MzY3NjYzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgUEFHRV9QT09MXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvS2NvbmZpZz00ODc9Y29uZmlnIE5FVF9ERVZMSU5LXFxuLS1cXG5uZXQvS2NvbmZpZy00OTAtXFxubmV0L0tjb25maWc6NDkxOmNvbmZpZyBQQUdFX1BPT0xcXG5uZXQvS2NvbmZpZy00OTItXFx0Ym9vbFxcbm5ldC9LY29uZmlnLTQ5My1cXG5uZXQvS2NvbmZpZzo0OTQ6Y29uZmlnIFBBR0VfUE9PTF9TVEFUU1xcbm5ldC9LY29uZmlnLTQ5NS1cXHRkZWZhdWx0IG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTU6MTA6NDYuNDc1NDM1ODM5WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNDI0MjU1MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHNvbWV0aGluZyByZWxhdGVkIHRvIHRoZSBuZXR3b3JrIGNvbmZpZ3VyYXRpb24gd2l0aGluIHRoZSBrZXJuZWwuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHplcm8gaW4gb24gYG5ldC9LY29uZmlnYCwgd2hpY2ggaXMgdGhlIGRlIGZhY3RvIHN0YW5kYXJkIGZvciB0aGlzIGtpbmQgb2YgaW5mb3JtYXRpb24sIGVzcGVjaWFsbHkgZ2l2ZW4gdGhlIGtlcm5lbCdzIEtjb25maWcgc3RydWN0dXJlLiBJJ20gYXNzdW1pbmcgdGhhdCB0aGUgc3BlY2lmaWNzIEknbSBhZnRlciBhcmUgbGlrZWx5IGluIHRoZSBnZW5lcmFsIG5ldHdvcmsgY29uZmlndXJhdGlvbiBzZWN0aW9uLCBhbmQgYmFzZWQgb24gcGFzdCBleHBlcmllbmNlIEknbSBnb2luZyB0byBzdGFydCBhcm91bmQgbGluZSA0OTEgdG8gc2VlIGlmIHRoYXQgcmluZ3MgYSBiZWxsLiBUaGlzIGlzIGEgY29tbW9uIHBhdHRlcm4g4oCTIHRoZSBLY29uZmlnIGZpbGVzIGFyZSBvZnRlbiBvcmdhbml6ZWQgbG9naWNhbGx5LCBhbmQgdGhhdCBwb3NpdGlvbiBmZWVscyBsaWtlIGEgZ29vZCBpbml0aWFsIGJldC4gRnJvbSB0aGVyZSBJJ2xsIGJlIGFibGUgdG8gdHJhY2UgZGVwZW5kZW5jaWVzLCB1bmRlcnN0YW5kIHRoZSBjb25kaXRpb25hbCBsb2dpYywgYW5kIHF1aWNrbHkgaXNvbGF0ZSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBzeW1ib2xzIGFuZCB0aGVpciBhc3NvY2lhdGVkIG9wdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY5ODcsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNToxMDo0OS43MTc4NjUwNzVaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzM3MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNDg1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDg1OlxcdFxcdCAgd2l0aCB0aGUgaGVscCBvZiBCUEYgcHJvZ3JhbXMuXFxuIDQ4NjpcXHRcXG4gNDg3OlxcdGNvbmZpZyBORVRfREVWTElOS1xcbiA0ODg6XFx0XFx0Ym9vbFxcbiA0ODk6XFx0XFx0ZGVmYXVsdCBuXFxuIDQ5MDpcXHRcXG4gNDkxOlxcdGNvbmZpZyBQQUdFX1BPT0xcXG4gNDkyOlxcdFxcdGJvb2xcXG4gNDkzOlxcdFxcbiA0OTQ6XFx0Y29uZmlnIFBBR0VfUE9PTF9TVEFUU1xcbiA0OTU6XFx0XFx0ZGVmYXVsdCBuXFxuIDQ5NjpcXHRcXHRib29sIFxcXCJQYWdlIHBvb2wgc3RhdHNcXFwiXFxuIDQ5NzpcXHRcXHRkZXBlbmRzIG9uIFBBR0VfUE9PTFxcbiA0OTg6XFx0XFx0aGVscFxcbiA0OTk6XFx0XFx0ICBFbmFibGUgcGFnZSBwb29sIHN0YXRpc3RpY3MgdG8gdHJhY2sgcGFnZSBhbGxvY2F0aW9uIGFuZCByZWN5Y2xpbmdcXG4gNTAwOlxcdFxcdCAgaW4gcGFnZSBwb29scy4gVGhpcyBvcHRpb24gaW5jdXJzIGFkZGl0aW9uYWwgQ1BVIGNvc3QgaW4gYWxsb2NhdGlvblxcbiA1MDE6XFx0XFx0ICBhbmQgcmVjeWNsZSBwYXRocyBhbmQgYWRkaXRpb25hbCBtZW1vcnkgY29zdCB0byBzdG9yZSB0aGUgc3RhdGlzdGljcy5cXG4gNTAyOlxcdFxcdCAgVGhlc2Ugc3RhdGlzdGljcyBhcmUgb25seSBhdmFpbGFibGUgaWYgdGhpcyBvcHRpb24gaXMgZW5hYmxlZCBhbmQgaWZcXG4gNTAzOlxcdFxcdCAgdGhlIGRyaXZlciB1c2luZyB0aGUgcGFnZSBwb29sIHN1cHBvcnRzIGV4cG9ydGluZyB0aGlzIGRhdGEuXFxuIDUwNDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTU6MTA6NDkuNzE3OTQyOTk1WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU1NjAzMDM0ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIENvbmZpZ3VyYXRpb24gQ2hhbmdlcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5IHNlZSBhIGRlcGVuZGVuY3kgaXNzdWUgd2l0aCBgTkVUX0RFVk1FTWAuIEl0IHNlZW1zIGBQQUdFX1BPT0xgIGlzIGEgYm9vbGVhbiBvcHRpb24gd2l0aG91dCBhIGRlZmF1bHQsIGJ1dCBkcml2ZXJzIGdlbmVyYWxseSBlbmFibGUgaXQuIFRoZSBjb3JlIG9mIHRoZSBwcm9ibGVtIGhlcmUgaXMgdGhhdCBpZiB3ZSB3YW50IGBORVRfREVWTUVNYCBlbmFibGVkLCB3ZSAqYWxzbyogbmVlZCB0byBlbnN1cmUgYERNQV9TSEFSRURfQlVGRkVSYCBhbmQgYFBBR0VfUE9PTGAgYXJlIHNldC4gTWFrZXMgcGVyZmVjdCBzZW5zZTsgc2hhcmVkIGJ1ZmZlciBpbXBsaWVzIHRoZSBuZWVkIGZvciBhIHBhZ2UgcG9vbCwgYW5kIHdlIGhhdmUgdG8gZXhwbGljaXRseSByZXF1ZXN0IGl0LiBTbywgSSBuZWVkIHRvIGFkZCB0aG9zZSB0byBgRW5hYmxlQ29uZmlnc2AuIFRoaXMgaXMgdGhlIGZpcnN0IGFjdGlvbiwgc2luY2UgaXQgZW5zdXJlcyB0aGUgcHJlLXJlcXVpc2l0ZXMgYXJlIG1ldC5cblxuTm93LCBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9mIHRoZXNlIGNoYW5nZXMuIEknbGwgbmVlZCB0byByZXZpZXcgdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyBiZWluZyBtb2RpZmllZC4gTGV0J3Mgc2VlLi4uIHRoZSBwYXRjaCBpcyB0b3VjaGluZyBgbmV0ZGV2X25sX2JpbmRfcnhfZG9pdGAsIGBuZXRkZXZfbmxfYmluZF90eF9kb2l0YCwgYG5ldGRldl9ubF9zb2NrX3ByaXZfaW5pdGAsIGBuZXRkZXZfbmxfc29ja19wcml2X2Rlc3Ryb3lgLCBgbmV0X2Rldm1lbV91bmJpbmRfZG1hYnVmYCwgYW5kIGBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmYC5cblxuQWgsIHJpZ2h0LCBzbyBgbmV0ZGV2X25sX2JpbmRfcnhfZG9pdGAgYW5kIGBuZXRkZXZfbmxfYmluZF90eF9kb2l0YCBhcmUgb2J2aW91c2x5IG5ldGxpbmsgaGFuZGxlcnMuIFRoZXkgYXJlIGxpa2VseSByZXNwb25zaWJsZSBmb3IgcmVjZWl2aW5nIHRoZSBtZXNzYWdlcyBmcm9tIHVzZXJzcGFjZS4gYG5ldF9kZXZtZW1fYmluZF9kbWFidWZgIGFuZCBgbmV0X2Rldm1lbV91bmJpbmRfZG1hYnVmYCBhcmUgaW50ZXJlc3Rpbmc7IHRoZXkncmUgY2FsbGVkIGVpdGhlciBmcm9tIHRoZSBuZXRsaW5rIGhhbmRsZXJzIG9yIGRpcmVjdGx5IGJ5IHRoZSBkcml2ZXIgY29kZSwgYmFzZWQgb24gdGhlIGNhbGxzLiBUaGUgYmluZGluZyBmdW5jdGlvbnMgc291bmQgY3JpdGljYWwuXG5cbk15IGltbWVkaWF0ZSBmb2xsb3ctdXAgd2lsbCBiZSB0byBjb25maXJtIHdoZXRoZXIgdGhvc2UgbmV0bGluayBoYW5kbGVycyBhcmUgc3RhdGljIG9yIG5vdC4gS25vd2luZyB0aGVpciBzY29wZSBpcyBpbXBvcnRhbnQgZm9yIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHN5c3RlbSBhcmNoaXRlY3R1cmUgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzQ3MywiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE1OjEwOjU1LjI3ODI0OTI3MVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgxMDI0MDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmV0ZGV2X25sX2JpbmRfcnhfZG9pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9uZXRkZXYtZ2VubC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL25ldGRldi1nZW5sLmM9OTg5PW5ldGRldl9ubF9nZXRfZG1hX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1bnNpZ25lZCBsb25nICpyeHFfYml0bWFwLFxcbi0tXFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYy0xMDEyLVxcbm5ldC9jb3JlL25ldGRldi1nZW5sLmM6MTAxMzppbnQgbmV0ZGV2X25sX2JpbmRfcnhfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbm5ldC9jb3JlL25ldGRldi1nZW5sLmMtMTAxNC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE1OjEwOjU1LjMyNjM1NzQ5NloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODE2ODQwNDM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIER5bmFtaWMgTmF0dXJlIGFuZCBMb2NhdGluZyB0aGUgUmVsZXZhbnQgRnVuY3Rpb24qKlxuXG5SaWdodCwgc28gd2UncmUgZGVhbGluZyB3aXRoIHNvbWV0aGluZyBub24tc3RhdGljLCBpbmhlcmVudGx5IGR5bmFtaWMuIFRoYXQncyB0aGUga2V5IGFzc3VtcHRpb24uIE5vdywgZ2l2ZW4gdGhhdCwgbGV0J3MgZHJpbGwgZG93biBpbnRvIHRoZSBwb3RlbnRpYWwgY29kZSBwYXRoLiBUbyB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbiBvZiB0aGlzIG5vbi1zdGF0aWMgdmFsdWUsIEkgbmVlZCB0byBrbm93ICp3aGVyZSogaXQncyBiZWluZyB1c2VkIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHN5c3RlbS4gTXkgaW5pdGlhbCBpbnN0aW5jdCwgZ2l2ZW4gd2hhdCB3ZSdyZSBsaWtlbHkgZGVhbGluZyB3aXRoIChsaWtlbHkga2VybmVsIGNvZGUgcmVsYXRlZCB0byBtZW1vcnkgb3IgZGV2aWNlIGludGVyYWN0aW9uKSwgaXMgdG8gdHJhY2UgaXQgYmFjayB0byBzb21ldGhpbmcgbGlrZSBgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZmAuIFRoYXQgZnVuY3Rpb24gaXMgb2Z0ZW4gYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBleHBsb3JpbmcgdGhlc2UgdHlwZXMgb2Ygc2NlbmFyaW9zLiBJIHdhbnQgdG8gY2hlY2sgaXRzIGltcGxlbWVudGF0aW9uLCBhbmQgaG93IHRoZSB2YWx1ZSB3ZSd2ZSBiZWVuIGRpc2N1c3NpbmcgZmFjdG9ycyBpbnRvIGl0LiBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucyBmb3IgbWVtb3J5IG1hbmFnZW1lbnQsIERNQSwgYW5kIGRhdGEgdHJhbnNmZXIuIFVuZGVyc3RhbmRpbmcgdGhlIHNwZWNpZmljcyBvZiBgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZmAgd2lsbCBob3BlZnVsbHkgZ2l2ZSBtZSB0aGUgY29udGV4dCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgc2lnbmlmaWNhbmNlIGFuZCBpbXBhY3Qgb2YgdGhpcyBcIm5vbi1zdGF0aWNcIiBwcm9wZXJ0eS4gSXQncyBhIGh5cG90aGVzaXMsIGJ1dCBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gdmFsaWRhdGUgbXkgaW5pdGlhbCBhc3N1bXB0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MzQxLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTU6MTA6NTkuMTQzMjAwOTQyWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTkzMTgzNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZXRfZGV2bWVtX2JpbmRfZG1hYnVmXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL2Rldm1lbS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2Rldm1lbS5jPTEyND12b2lkIG5ldF9kZXZtZW1fdW5iaW5kX2RtYWJ1ZihzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqYmluZGluZylcXG4tLVxcbm5ldC9jb3JlL2Rldm1lbS5jLTE1My1cXG5uZXQvY29yZS9kZXZtZW0uYzoxNTQ6aW50IG5ldF9kZXZtZW1fYmluZF9kbWFidWZfdG9fcXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHJ4cV9pZHgsXFxubmV0L2NvcmUvZGV2bWVtLmMtMTU1LVxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqYmluZGluZyxcXG4tLVxcbm5ldC9jb3JlL2Rldm1lbS5jPTE4Mz1zdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqXFxubmV0L2NvcmUvZGV2bWVtLmM6MTg0Om5ldF9kZXZtZW1fYmluZF9kbWFidWYoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqdmRldixcXG5uZXQvY29yZS9kZXZtZW0uYy0xODUtXFx0XFx0ICAgICAgIHN0cnVjdCBkZXZpY2UgKmRtYV9kZXYsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE1OjEwOjU5LjE4OTEzNzE1N1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTI3MzE5NDE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIGBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmYCBhbmQgU29ja2V0IEluaXRpYWxpemF0aW9uKipcblxuSG1tLCBzbyBgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZmAgaXNuJ3QgZGVjbGFyZWQgc3RhdGljLiBUaGF0IGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdC4gSXQgaW1wbGllcyB0aGlzIGZ1bmN0aW9uIGlzIGludGVuZGVkIGZvciBicm9hZGVyIHVzYWdlLCBwb3NzaWJseSBiZXlvbmQgdGhlIGltbWVkaWF0ZSBzY29wZSBvZiBpdHMgZGVmaW5pbmcgZmlsZS4gSSdsbCBuZWVkIHRvIHJlbWVtYmVyIHRoYXQgd2hlbiB0cmFjaW5nIGRlcGVuZGVuY2llcy4gR2l2ZW4gaXRzIG5hbWluZywgaXQgbGlrZWx5IGRlYWxzIHdpdGggRE1BIGJ1ZmZlciBiaW5kaW5nLCBwcm9iYWJseSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgbmV0d29yayBkZXZpY2VzLiBUaGF0IG5vbi1zdGF0aWMgZGVjbGFyYXRpb24gY291bGQgbWVhbiBpdCdzIGNhbGxlZCBmcm9tIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwuIEknbGwgbWFrZSBhIG1lbnRhbCBub3RlIHRvIGNoZWNrIHRoZSBjcm9zcy1yZWZlcmVuY2VzIGxhdGVyLiBJIGFsc28gd2FudCB0byBjaGVjayB3aGVyZSBpdCBpcyBjYWxsZWQgdG8gaWRlbnRpZnkgYW55IGV4dGVybmFsIGNhbGxlcnMuXG5cbk5vdywgbGV0IG1lIHNoaWZ0IGdlYXJzIHNsaWdodGx5LiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIG5ldHdvcmsgZGV2aWNlIGNvbnRleHQuIExldCdzIGRlbHZlIGludG8gYG5ldGRldl9ubF9zb2NrX3ByaXZfaW5pdGAuIFVuZGVyc3RhbmRpbmcgaG93IG5ldHdvcmsgZGV2aWNlIHByaXZhdGUgZGF0YSBpcyBpbml0aWFsaXplZCB2aWEgdGhlIG5ldGxpbmsgc29ja2V0IHdpbGwgcHJvdmlkZSBjcml0aWNhbCBjb250ZXh0LiBJIGNhbid0IGJlIHN1cmUgdGhhdCB0aGlzIHdpbGwgcHJvdmlkZSB1c2VmdWwgaW5mb3JtYXRpb24gaW4gdGhpcyBzaXR1YXRpb24sIGJ1dCBpdCBpcyBhbHdheXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJIGtub3cgaXQgaGFuZGxlcyB0aGUgYWxsb2NhdGlvbiBhbmQgc2V0dXAgb2YgdGhlIHByaXZhdGUgZGF0YSBzdHJ1Y3R1cmVzIGFzc29jaWF0ZWQgd2l0aCBuZXRsaW5rIHNvY2tldHMsIHdoaWNoIGlzIGFuIGltcG9ydGFudCBwYXJ0IG9mIG5ldHdvcmsgZGV2aWNlIG1hbmFnZW1lbnQgYW5kIGNvbmZpZ3VyYXRpb24uIFRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGF0IHNvY2tldCB3aWxsIGxpa2VseSBpbnRlcmFjdCB3aXRoIHRoZSBETUEgYnVmZmVyIGJpbmRpbmcgZnVuY3Rpb24gSSB3YXMgbG9va2luZyBhdCBlYXJsaWVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4ODkwLCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTU6MTE6MDMuMTE2NDU5ODAyWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDY1NTY3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZXRkZXZfbmxfc29ja19wcml2X2luaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvbmV0ZGV2LWdlbmwuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9uZXRkZXYtZ2VubC5jPTEyNDE9aW50IG5ldGRldl9ubF9xdWV1ZV9jcmVhdGVfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYy0xNDA3LVxcbm5ldC9jb3JlL25ldGRldi1nZW5sLmM6MTQwODp2b2lkIG5ldGRldl9ubF9zb2NrX3ByaXZfaW5pdChzdHJ1Y3QgbmV0ZGV2X25sX3NvY2sgKnByaXYpXFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYy0xNDA5LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTU6MTE6MDMuMTYxMTIwOTE3WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MjAxOTA2MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aGUgdGhvdWdodCBwcm9jZXNzIHVuZm9sZHM6XG5cbioqSW50ZXJuYWwgdnMuIEV4dGVybmFsOiBBIFF1aWNrIERpdmUgaW50byBgbmV0ZGV2X25sX3NvY2tfcHJpdmAgRnVuY3Rpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgYG5ldGRldl9ubF9zb2NrX3ByaXZfaW5pdGAgYW5kIGBuZXRkZXZfbmxfc29ja19wcml2X2Rlc3Ryb3lgIGZ1bmN0aW9ucy4gVGhlIGZhY3QgdGhhdCB0aGV5J3JlICpub3QqIGRlY2xhcmVkIGFzIGBzdGF0aWNgIGltbWVkaWF0ZWx5IHNldHMgb2ZmIGEgbWVudGFsIGZsYWcuIFRoYXQgdXN1YWxseSBtZWFucyB0aGV5ICpjb3VsZCogYmUgaW50ZW5kZWQgZm9yIGV4dGVybmFsIHVzZSwgb3V0c2lkZSB0aGUgY3VycmVudCBjb21waWxhdGlvbiB1bml0LiBCdXQgdGhhdCdzIGp1c3QgYW4gYXNzdW1wdGlvbi5cblxuSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciB0aGV5J3JlIGFjdHVhbGx5IGV4cG9ydGVkIGFuZCBkZXNpZ25lZCB0byBiZSBwYXJ0IG9mIHRoZSBwdWJsaWMgQVBJLCBvciBpZiB0aGV5J3JlIGp1c3QgdXNlZCBpbnRlcm5hbGx5IHdpdGhpbiB0aGUgbmV0d29ya2luZyBzdWJzeXN0ZW0uIEl0J3MgYSBrZXkgZGlzdGluY3Rpb24uIFRoZSBpbXBsaWNhdGlvbnMgYXJlIHNpZ25pZmljYW50OiBpZiB0aGV5IGFyZSBwYXJ0IG9mIHRoZSBwdWJsaWMgQVBJLCBhbnkgY2hhbmdlcyB0byB0aGVtIHJlcXVpcmUgZXh0cmEgY29uc2lkZXJhdGlvbiBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgYW5kIGV4dGVybmFsIGRlcGVuZGVuY3kgbWFuYWdlbWVudC4gQ29udmVyc2VseSwgaWYgdGhleSBhcmUgaW50ZXJuYWwsIHRoZWlyIGltcGxlbWVudGF0aW9uIGNhbiBiZSByZWZhY3RvcmVkIG9yIG1vZGlmaWVkIHdpdGggcmVsYXRpdmUgZnJlZWRvbS4gU28sIGxldCdzIHRha2UgYSBsb29rLiBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGV5J3JlIGJlaW5nIHVzZWQgYW5kIGRlY2xhcmVkLCBtYXliZSBncmVwIHRocm91Z2ggdGhlIGNvZGUgb3IgdXNlIHNvbWUga2luZCBvZiBzeW1ib2wgbG9va3VwIHRvIHF1aWNrbHkgY2hlY2suIFRoZSBnb2FsIGlzIHRvIGRldGVybWluZSB0aGUgc2NvcGUgb2YgdGhlaXIgaW50ZW5kZWQgdXNlLCBhbmQgZGVjaWRlIGhvdyBpdCBlZmZlY3RzIGZ1dHVyZSBkZXZlbG9wbWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTQwMywiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE1OjExOjA2Ljg4MTMxMzc0M1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY5NDY0NDQ3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZXRkZXZfbmxfc29ja19wcml2X2luaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL25ldGRldi1nZW5sLWdlbi5jPTI0OD1zdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfbXVsdGljYXN0X2dyb3VwIG5ldGRldl9ubF9tY2dycHNbXSA9IHtcXG4tLVxcbm5ldC9jb3JlL25ldGRldi1nZW5sLWdlbi5jLTI1Mi1cXG5uZXQvY29yZS9uZXRkZXYtZ2VubC1nZW4uYzoyNTM6c3RhdGljIHZvaWQgX19uZXRkZXZfbmxfc29ja19wcml2X2luaXQodm9pZCAqcHJpdilcXG5uZXQvY29yZS9uZXRkZXYtZ2VubC1nZW4uYy0yNTQte1xcbm5ldC9jb3JlL25ldGRldi1nZW5sLWdlbi5jOjI1NTpcXHRuZXRkZXZfbmxfc29ja19wcml2X2luaXQocHJpdik7XFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwtZ2VuLmMtMjU2LX1cXG4tLVxcbm5ldC9jb3JlL25ldGRldi1nZW5sLWdlbi5jPTI2Mz1zdHJ1Y3QgZ2VubF9mYW1pbHkgbmV0ZGV2X25sX2ZhbWlseSBfX3JvX2FmdGVyX2luaXQgPSB7XFxuLS1cXG5uZXQvY29yZS9uZXRkZXYtZ2VubC1nZW4uYy0yNzMtXFx0LnNvY2tfcHJpdl9zaXplXFx0PSBzaXplb2Yoc3RydWN0IG5ldGRldl9ubF9zb2NrKSxcXG5uZXQvY29yZS9uZXRkZXYtZ2VubC1nZW4uYzoyNzQ6XFx0LnNvY2tfcHJpdl9pbml0XFx0PSBfX25ldGRldl9ubF9zb2NrX3ByaXZfaW5pdCxcXG5uZXQvY29yZS9uZXRkZXYtZ2VubC1nZW4uYy0yNzUtXFx0LnNvY2tfcHJpdl9kZXN0cm95ID0gX19uZXRkZXZfbmxfc29ja19wcml2X2Rlc3Ryb3ksXFxuLS1cXG5uZXQvY29yZS9uZXRkZXYtZ2VubC1nZW4uaD00Nz1leHRlcm4gc3RydWN0IGdlbmxfZmFtaWx5IG5ldGRldl9ubF9mYW1pbHk7XFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwtZ2VuLmgtNDgtXFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwtZ2VuLmg6NDk6dm9pZCBuZXRkZXZfbmxfc29ja19wcml2X2luaXQoc3RydWN0IG5ldGRldl9ubF9zb2NrICpwcml2KTtcXG5uZXQvY29yZS9uZXRkZXYtZ2VubC1nZW4uaC01MC12b2lkIG5ldGRldl9ubF9zb2NrX3ByaXZfZGVzdHJveShzdHJ1Y3QgbmV0ZGV2X25sX3NvY2sgKnByaXYpO1xcbi0tXFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYz0xMjQxPWludCBuZXRkZXZfbmxfcXVldWVfY3JlYXRlX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4tLVxcbm5ldC9jb3JlL25ldGRldi1nZW5sLmMtMTQwNy1cXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jOjE0MDg6dm9pZCBuZXRkZXZfbmxfc29ja19wcml2X2luaXQoc3RydWN0IG5ldGRldl9ubF9zb2NrICpwcml2KVxcbm5ldC9jb3JlL25ldGRldi1nZW5sLmMtMTQwOS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE1OjExOjA4LjU3NTk2NjU5OFoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDIzNjMxMDk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgTmV0bGluayBGYW1pbHkgU29ja2V0IEluaXRpYWxpemF0aW9uIGFuZCBEZXN0cnVjdGlvbiBDYWxsYmFja3MqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEl0IHNlZW1zIHdlJ3JlIGxvb2tpbmcgYXQgZnVuY3Rpb25zIHVzZWQgYXMgY2FsbGJhY2tzIGR1cmluZyB0aGUgaW5pdGlhbGl6YXRpb24gYW5kIGRlc3RydWN0aW9uIG9mIG5ldGxpbmsgZmFtaWx5IHNvY2tldHMuIFNwZWNpZmljYWxseSwgdGhlIGFyZWFzIG9mIGludGVyZXN0IGZvciBmdXp6aW5nIGFwcGVhciB0byBiZSBjZW50ZXJlZCBhcm91bmQgc2V2ZXJhbCBjb3JlIGZ1bmN0aW9ucy4gSSBzZWUgYG5ldGRldl9ubF9iaW5kX3J4X2RvaXRgLCBgbmV0ZGV2X25sX2JpbmRfdHhfZG9pdGAsIGBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmYCwgYG5ldF9kZXZtZW1fdW5iaW5kX2RtYWJ1ZmAsIGBuZXRkZXZfbmxfc29ja19wcml2X2luaXRgLCBhbmQgYG5ldGRldl9ubF9zb2NrX3ByaXZfZGVzdHJveWAuIFRob3NlIGFsbCBsb29rIGxpa2UgcG90ZW50aWFsIGVudHJ5IHBvaW50cyBmb3Igc29tZSBmdXp6aW5nLiBHaXZlbiB0aGUgY29udGV4dCwgbXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhlc2UgZnVuY3Rpb25zIGxpa2VseSBoYW5kbGUgaW50ZXJhY3Rpb25zIGJldHdlZW4gbmV0d29yayBkZXZpY2VzIGFuZCB0aGUgbmV0bGluayBpbnRlcmZhY2UsIGluY2x1ZGluZyBtZW1vcnkgbWFuYWdlbWVudC5cblxuTXkgZmlyc3QgdGhvdWdodCBpcyB0byBjaGVjayBmb3IgdGhlIHByZXNlbmNlIG9mIGBuZXRkZXZfbmxfYmluZF90eF9kb2l0YCwgSSB0aGluayB0aGF0IGlzIGEgbG9naWNhbCBwbGFjZSB0byBzdGFydCBhbmQgd2lsbCBvZmZlciBzb21lIHVuZGVyc3RhbmRpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMzQ3LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE1OjExOjEyLjU5OTYwMDIyM1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzcxMjcxNDIyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5ldGRldl9ubF9iaW5kX3R4X2RvaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvbmV0ZGV2LWdlbmwuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9uZXRkZXYtZ2VubC5jPTExMjM9bmV0ZGV2X2ZpbmRfbmV0bWVtX3R4X2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYy0xMTQ4LVxcbm5ldC9jb3JlL25ldGRldi1nZW5sLmM6MTE0OTppbnQgbmV0ZGV2X25sX2JpbmRfdHhfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbm5ldC9jb3JlL25ldGRldi1nZW5sLmMtMTE1MC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE1OjExOjEyLjk3MDg4MTYzNVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MjMxMjE1MTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIE5ldHdvcmsgRGV2aWNlIE1lbW9yeSBNYW5hZ2VtZW50IENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ3ZlIGlkZW50aWZpZWQgdGhlIGtleSBzeW1ib2xzIHJlbGF0ZWQgdG8gdGhpcyBuZXR3b3JrIGRldmljZSBtZW1vcnkgbWFuYWdlbWVudCBmZWF0dXJlOiBgbmV0ZGV2X25sX2JpbmRfcnhfZG9pdGAsIGBuZXRkZXZfbmxfYmluZF90eF9kb2l0YCwgYG5ldF9kZXZtZW1fYmluZF9kbWFidWZgLCBgbmV0X2Rldm1lbV91bmJpbmRfZG1hYnVmYCwgYG5ldGRldl9ubF9zb2NrX3ByaXZfaW5pdGAsIGFuZCBgbmV0ZGV2X25sX3NvY2tfcHJpdl9kZXN0cm95YC4gVGhlc2UgY2xlYXJseSByZXByZXNlbnQgdGhlIGNvcmUgZnVuY3Rpb25zIGZvciBiaW5kaW5nIGFuZCB1bmJpbmRpbmcgRE1BIGJ1ZmZlcnMsIGFuZCBpbml0aWFsaXppbmcvZGVzdHJveWluZyB0aGUgcmVsZXZhbnQgc29ja2V0IHByaXZhdGUgZGF0YSBzdHJ1Y3R1cmVzLlxuXG5Ob3csIGZvciB0aGUgZW5hYmxpbmcgY29uZmlndXJhdGlvbnMuIEkndmUgZ290IGBORVRfREVWTUVNYCwgYERNQV9TSEFSRURfQlVGRkVSYCwgYW5kIGBQQUdFX1BPT0xgLiBJbml0aWFsbHksIEkgY29uc2lkZXJlZCBpZiBgTkVUX0RFVk1FTWAgd2FzIHRoZSBvbmx5IG5lY2Vzc2FyeSBjb25maWcuIEJ1dCwgd2FpdCwgYSBjbG9zZXIgbG9vayByZXZlYWxzIGBORVRfREVWTUVNYCBpcyBkZWZpbmVkIGFzIGBkZWZfYm9vbCB5YCwgYnV0ICpkZXBlbmRzKiBvbiBib3RoIGBETUFfU0hBUkVEX0JVRkZFUmAgYW5kIGBQQUdFX1BPT0xgLiBUaGF0J3MgaW1wb3J0YW50LlxuXG5Tbywgd2hpbGUgZW5hYmxpbmcgYERNQV9TSEFSRURfQlVGRkVSYCBhbmQgYFBBR0VfUE9PTGAgKndpbGwqIGF1dG9tYXRpY2FsbHkgZW5hYmxlIGBORVRfREVWTUVNYCwgZm9yIGNsYXJpdHkgYW5kIGV4cGxpY2l0IGNvbmZpZ3VyYXRpb24sIGl0J3Mgc2FmZXN0IHRvIGxpc3QgYWxsIHRocmVlOiBgTkVUX0RFVk1FTWAsIGBETUFfU0hBUkVEX0JVRkZFUmAsIGFuZCBgUEFHRV9QT09MYC4gVGhpcyBlbnN1cmVzIHRoYXQgYWxsIHRoZSBkZXBlbmRlbmNpZXMgYXJlIGNsZWFybHkgc2V0LlxuXG5CZWZvcmUgSSBmaW5hbGl6ZSB0aGlzLCBJIHNob3VsZCB2ZXJpZnkgd2hldGhlciBgUEFHRV9QT09MYCBpdHNlbGYgaGFzIGFueSBkZXBlbmRlbmNpZXMgdGhhdCBJIG1heSBuZWVkIHRvIHRha2UgaW50byBjb25zaWRlcmF0aW9uLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwODYzLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQ5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE1OjExOjE4LjIwMjA5OTc1NVoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY5Mzc4MzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFBBR0VfUE9PTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvS2NvbmZpZz00ODc9Y29uZmlnIE5FVF9ERVZMSU5LXFxuLS1cXG5uZXQvS2NvbmZpZy00OTAtXFxubmV0L0tjb25maWc6NDkxOmNvbmZpZyBQQUdFX1BPT0xcXG5uZXQvS2NvbmZpZy00OTItXFx0Ym9vbFxcbm5ldC9LY29uZmlnLTQ5My1cXG5uZXQvS2NvbmZpZzo0OTQ6Y29uZmlnIFBBR0VfUE9PTF9TVEFUU1xcbm5ldC9LY29uZmlnLTQ5NS1cXHRkZWZhdWx0IG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTU6MTE6MTguMjQ5MDQzMTZaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzEzNjM5MjYyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcml6ZWQgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkludGVybmFsIENvZGUgQXVkaXQgLSBTaW1wbGUgQ2hlY2tzKipcblxuUmlnaHQsIGxldCdzIGp1c3QgbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBzb21ldGhpbmcgb2J2aW91cyBpbiB0aGlzIGNvZGViYXNlLiBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgdGhlIGltcGFjdCBvZiB0aGVzZSB2YXJpYWJsZXMuIEhtbSwgc28gYFBBR0VfUE9PTGAgaXMganVzdCBhIGJvb2xlYW4uIE9rYXksIHRoYXQncyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLCBJIGNhbiBoYW5kbGUgdGhhdC4gTm93LCBJIG5lZWQgdG8gY2hlY2sgc29tZXRoaW5nIGVsc2UuIExldCdzIHNlZS4uLiBgRE1BX1NIQVJFRF9CVUZGRVJgLiBJIHNob3VsZCB2ZXJpZnkgaWYgdGhhdCBoYXMgYW55IGRlcGVuZGVuY2llcyBmaXJzdC4gR290dGEgdGhpbmsgYWJvdXQgYWxsIHRoZSBwbGFjZXMgdGhpcyBtaWdodCBiZSB1c2VkIGFuZCBhbnkgZG93bnN0cmVhbSBpbXBhY3QuIEdvdCBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE1ODksIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNToxMToyMS4zODU0MzgwNzZaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2OTU1NDA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBETUFfU0hBUkVEX0JVRkZFUlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jhc2UvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jhc2UvS2NvbmZpZz0yMTM9c291cmNlIFxcXCJkcml2ZXJzL2Jhc2UvcmVnbWFwL0tjb25maWdcXFwiXFxuZHJpdmVycy9iYXNlL0tjb25maWctMjE0LVxcbmRyaXZlcnMvYmFzZS9LY29uZmlnOjIxNTpjb25maWcgRE1BX1NIQVJFRF9CVUZGRVJcXG5kcml2ZXJzL2Jhc2UvS2NvbmZpZy0yMTYtXFx0Ym9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNToxMToyMS40MzI0MDEwMzFaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQ0NTcyODg4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqU2ltcGxpZnlpbmcgdGhlIENvbmZpZ3VyYXRpb24gTG9naWMqKlxuXG5SaWdodCwgaXQncyBqdXN0IGEgYm9vbGVhbiBmbGFnLCBmdW5kYW1lbnRhbGx5LiBUaGlua2luZyBhYm91dCBgRW5hYmxlQ29uZmlnc2AsIGl0IHNlZW1zIGxpa2UgaXQgY2FuIGJlIHN0cmVhbWxpbmVkLiBCYXNlZCBvbiB3aGF0IEkgaGF2ZSwgSSdtIGdvaW5nIHRvIHN0YXJ0IHdpdGggYSBsaXN0IG9mIHRoZSBrZXkgY29uZmlndXJhdGlvbnM6IGBbXCJORVRfREVWTUVNXCIsIFwiRE1BX1NIQVJFRF9CVUZGRVJcIiwgXCJQQUdFX1BPT0xcIl1gLlxuXG5CdXQgd2FpdCwgaG9sZCBvbi4gSSBuZWVkIHRvIHJlbWVtYmVyIHRoYXQgYE5FVF9ERVZNRU1gIGlzIGRlZmluZWQgYXMgYSBgZGVmX2Jvb2wgeWAuIFRoYXQgbWVhbnMgaXQncyBlbmFibGVkIGNvbmRpdGlvbmFsbHksIGRlcGVuZGluZyBvbiBpdHMgZGVwZW5kZW5jaWVzLiBJIGNhbid0IGp1c3QgYXNzdW1lIGl0J3MgYWx3YXlzIFwib25cIiBiZWNhdXNlIG9mIHRoZSB3YXkgdGhlIGtlcm5lbCBjb25maWcgc3lzdGVtIHdvcmtzLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGF0IGl0IGlzIGV2ZW4gdXNlZCB0byBjb21waWxlIGBkZXZtZW0ub2AsIGJlY2F1c2UgaWYgbm90LCBJIG1pZ2h0IGJlIGluY2x1ZGluZyB0aGF0IGluIHRoZSBsaXN0IGZvciBubyByZWFzb24uIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCB0aGlzIG9wdGlvbiBoYXMgYW4gaW1wYWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTg1NCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE1OjExOjI1Ljg3ODEzMjk2M1oiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ4NzAwNzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTkVUX0RFVk1FTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9NYWtlZmlsZT00OD1vYmotJChDT05GSUdfTkVUX1RFU1QpICs9IG5ldF90ZXN0Lm9cXG5uZXQvY29yZS9NYWtlZmlsZTo0OTpvYmotJChDT05GSUdfTkVUX0RFVk1FTSkgKz0gZGV2bWVtLm9cXG5uZXQvY29yZS9NYWtlZmlsZS01MC1vYmotJChDT05GSUdfREVCVUdfTkVUKSArPSBsb2NrX2RlYnVnLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTU6MTE6MjUuOTIzMDEzODY4WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5ODU3MjYwNTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQ2hlY2tpbmcgdGhlIGBuZXRkZXZfbmxfYmluZF9yeF9kb2l0YCBDb21waWxhdGlvbioqXG5cblllcy4gT2theSwgSSBuZWVkIHRvIHZlcmlmeSBzb21ldGhpbmcgcXVpY2tseS4gTGV0IG1lIHNlZS4uLiBJIHdhbnQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYG5ldGRldl9ubF9iaW5kX3J4X2RvaXRgIGlzIG9ubHkgY29tcGlsZWQgd2hlbiBgQ09ORklHX05FVF9ERVZNRU1gIGlzIGVuYWJsZWQsIG9yIGlmIGl0J3MgaW5jbHVkZWQgcmVnYXJkbGVzcy4gVGhpcyBpcyBzb21ldGhpbmcgdGhhdCBJIG5lZWQgdG8gY2xhcmlmeSB0byBlbnN1cmUgdGhhdCBzb21ldGhpbmcgZXhwZWN0ZWQgaXMgaGFwcGVuaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjI2NiwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE1OjExOjI5LjkwODc0MjMyN1oiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY5NjQ5ODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmV0ZGV2X25sX2JpbmRfcnhfZG9pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9uZXRkZXYtZ2VubC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL25ldGRldi1nZW5sLmM9OTg5PW5ldGRldl9ubF9nZXRfZG1hX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1bnNpZ25lZCBsb25nICpyeHFfYml0bWFwLFxcbi0tXFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYy0xMDEyLVxcbm5ldC9jb3JlL25ldGRldi1nZW5sLmM6MTAxMzppbnQgbmV0ZGV2X25sX2JpbmRfcnhfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbm5ldC9jb3JlL25ldGRldi1nZW5sLmMtMTAxNC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE1OjExOjI5Ljk1NTcxMzAxMloiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjEwNTI3MzU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBQb3RlbnRpYWwgYENPTkZJR19ORVRfREVWTUVNYCBEZXBlbmRlbmNpZXMqKlxuXG5SaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgYSBwaWVjZSBvZiBjb2RlIGFuZCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyB0byBtaW5kIGlzLCBcIklzIHRoaXMgZnVuY3Rpb25hbGl0eSBjb25kaXRpb25hbCBvbiBgQ09ORklHX05FVF9ERVZNRU1gP1wiIEkgbmVlZCB0byBxdWlja2x5IGVzdGFibGlzaCBpZiB0aGUgc2VjdGlvbiBJJ20gcmV2aWV3aW5nIHJlbGllcyBvbiB0aGF0IGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBJJ20gZ29pbmcgdG8gc2NhbiB0aGUgc3Vycm91bmRpbmcgY29kZSBmb3IgYCNpZmRlZiBDT05GSUdfTkVUX0RFVk1FTWAgZGlyZWN0aXZlcy4gVGhhdCdzIHRoZSBtb3N0IGRpcmVjdCB3YXkgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93LiBEZXBlbmRpbmcgb24gaG93IHdpZGVzcHJlYWQgdGhhdCBkZWZpbmUgaXMsIEknbGwgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGNvZGUsIGFuZCBvdGhlciBkZWZpbmVzLCB0byBkZXRlcm1pbmUgaG93IHRoYXQgaW50ZXJhY3RzLiBUaW1lIHRvIGdldCB0aGUgZ3JlcCBjb21tYW5kIHJ1bm5pbmcgb3IgZmlyZSB1cCB0aGUgSURFIHNlYXJjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI1NzksIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNToxMTozMy41NjYyNDM1MTlaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MDUzMjI2LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfTkVUX0RFVk1FTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9uZXRkZXYtZ2VubC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNToxMTozMy42MTAzMDM3MjVaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA0NDM4MDUyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRoZSB0aG91Z2h0IHByb2Nlc3MgdW5mb2xkczpcblxuKipXYWl0IGEgTWludXRlLi4uIFdoZXJlJ3MgdGhlIGBDT05GSUdfTkVUX0RFVk1FTWAgQ2hlY2s/KipcblxuT2theSwgaG9sZCBvbi4gSSdtIGxvb2tpbmcgYXQgYG5ldGRldi1nZW5sLmNgLCBhbmQgSSB3YXMgKmNlcnRhaW4qIHRoZXJlIHdhcyBhIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGJsb2NrIGluIHRoZXJlIHNvbWV3aGVyZSByZWxhdGVkIHRvIGBDT05GSUdfTkVUX0RFVk1FTWAuIEJ1dCBJJ20gbm90IHNlZWluZyBpdC4gVGhhdCdzIG9kZC4gSXQncyByZWFsbHkgdW5leHBlY3RlZCwgZ2l2ZW4gaG93IHRoaXMgY29kZSB1c3VhbGx5IGludGVyYWN0cyB3aXRoIGRpcmVjdCBtZW1vcnkgYWNjZXNzIGFuZCBwb3RlbnRpYWwgc2VjdXJpdHkgaW1wbGljYXRpb25zLlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBzcGVjaWZpYy4gSSBuZWVkIHRvIHplcm8gaW4gb24gdGhlIHJlbGV2YW50IGZ1bmN0aW9uIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQuIExldCdzIGRyaWxsIGludG8gYG5ldGRldl9ubF9iaW5kX3J4X2RvaXRgIHdpdGhpbiBgbmV0ZGV2LWdlbmwuY2AuIFRoYXQncyB3aGVyZSBJIG5lZWQgdG8gc3RhcnQsIGFuZCBzZWUgaG93IHRoZSByZWxldmFudCBmdW5jdGlvbmFsaXR5IGlzIGltcGxlbWVudGVkIHdpdGhvdXQgYENPTkZJR19ORVRfREVWTUVNYCBndWFyZGluZyBpdC4gVGhpcyBpcyBnb2luZyB0byBiZSBpbnRlcmVzdGluZy4uLiBhbmQgcG90ZW50aWFsbHkgYSBjcml0aWNhbCBwb2ludCBmb3IgdnVsbmVyYWJpbGl0eSBhbmFseXNpcywgaWYgaXQncyBvcGVyYXRpbmcgd2l0aG91dCB0aGUgdXN1YWwgZ3VhcmRyYWlscy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBhY2Nlc3MgdG8gdGhhdCBtZW1vcnkgaXMgZ3JhbnRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI4MjEsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNToxMTozNy42NTQ2ODY5NjdaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE5NzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL25ldGRldi1nZW5sLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTAwMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTAwMDpcXHRcXHRcXHRpZiAoZG1hX2RldiBcXHUwMDI2XFx1MDAyNiByeHFfZG1hX2RldiAhPSBkbWFfZGV2KSB7XFxuMTAwMTpcXHRcXHRcXHRcXHROTF9TRVRfRVJSX01TR19GTVQoZXh0YWNrLCBcXFwiRE1BIGRldmljZSBtaXNtYXRjaCBiZXR3ZWVuIHF1ZXVlICV1IGFuZCAldSAobXVsdGktUEYgZGV2aWNlPylcXFwiLFxcbjEwMDI6XFx0XFx0XFx0XFx0XFx0XFx0ICAgcnhxX2lkeCwgcHJldl9yeHFfaWR4KTtcXG4xMDAzOlxcdFxcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FT1BOT1RTVVBQKTtcXG4xMDA0OlxcdFxcdFxcdH1cXG4xMDA1OlxcdFxcbjEwMDY6XFx0XFx0XFx0ZG1hX2RldiA9IHJ4cV9kbWFfZGV2O1xcbjEwMDc6XFx0XFx0XFx0cHJldl9yeHFfaWR4ID0gcnhxX2lkeDtcXG4xMDA4OlxcdFxcdH1cXG4xMDA5OlxcdFxcbjEwMTA6XFx0XFx0cmV0dXJuIGRtYV9kZXY7XFxuMTAxMTpcXHR9XFxuMTAxMjpcXHRcXG4xMDEzOlxcdGludCBuZXRkZXZfbmxfYmluZF9yeF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuMTAxNDpcXHR7XFxuMTAxNTpcXHRcXHRzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqYmluZGluZztcXG4xMDE2OlxcdFxcdHUzMiBpZmluZGV4LCBkbWFidWZfZmQsIHJ4cV9pZHg7XFxuMTAxNzpcXHRcXHRzdHJ1Y3QgbmV0ZGV2X25sX3NvY2sgKnByaXY7XFxuMTAxODpcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2O1xcbjEwMTk6XFx0XFx0dW5zaWduZWQgbG9uZyAqcnhxX2JpdG1hcDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTU6MTE6MzcuNjU0ODA4MDQ3WiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNzk4NDUyNjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgYSBgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZ2AqKlxuXG5BbHJpZ2h0LCBJIHNlZSB0aGlzIGNvZGUgaXMgdXNpbmcgYHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nYC4gVGhhdCByaW5ncyBhIGJlbGwuLi4gaXQncyBwcm9iYWJseSBkZWZpbmVkIGluIGBuZXQvY29yZS9kZXZtZW0uaGAuIFRpbWUgdG8gZG91YmxlIGNoZWNrLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyB0aGlzIGJpbmRpbmcgaXMgYmVpbmcgdXNlZDsgd2hhdCdzIGl0cyBwdXJwb3NlIHdpdGhpbiB0aGUgY29udGV4dCBvZiB0aGUgbmV0d29ya2luZyBkZXZpY2UgbWVtb3J5IG1hbmFnZW1lbnQuIExldCdzIGRpdmUgaW50byB0aGF0IGhlYWRlciBmaWxlIGFuZCBzZWUgd2hhdCdzIHdoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNTAxLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNToxMTo0MC45MzQ2NTU0NzlaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4NjAwNzM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19ORVRfREVWTUVNXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL2Rldm1lbS5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2Rldm1lbS5oPTE4PXN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nIHtcXG4tLVxcbm5ldC9jb3JlL2Rldm1lbS5oLTc2LVxcbm5ldC9jb3JlL2Rldm1lbS5oOjc3OiNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWTUVNKVxcbm5ldC9jb3JlL2Rldm1lbS5oLTc4LS8qIE93bmVyIG9mIHRoZSBkbWEtYnVmIGNodW5rcyBpbnNlcnRlZCBpbnRvIHRoZSBnZW4gcG9vbC4gRWFjaCBzY2F0dGVybGlzdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNToxMTo0MC45ODMyNjIyOTRaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUzNjY0MTYzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIG15c2VsZjpcblxuKipJbnZlc3RpZ2F0aW5nIGBuZXRkZXZfbmxfYmluZF9yeF9kb2l0YCBhbmQgQ09ORklHX05FVF9ERVZNRU0qKlxuXG5Pa2F5LCBzbyBJJ20gcHJldHR5IHN1cmUgYG5ldGRldl9ubF9iaW5kX3J4X2RvaXRgIGlzIGFsd2F5cyBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwuIFRoZSBpbnRlcmVzdGluZyBxdWVzdGlvbiBpcyB3aGV0aGVyIGl0IGp1c3Qgc2lsZW50bHkgZmFpbHMsIG9yIGFjdGl2ZWx5IHJldHVybnMgYW4gZXJyb3IgaWYgYENPTkZJR19ORVRfREVWTUVNYCAqaXNuJ3QqIGRlZmluZWQuIEkgbmVlZCB0byBjb25maXJtIHRoYXQgYmVoYXZpb3IuIFRvIGRvIHRoYXQgSSBuZWVkIHRvIGRpdmUgaW50byB0aGUgc291cmNlLCBzcGVjaWZpY2FsbHkgYG5ldC9jb3JlL2Rldm1lbS5oYC4gTGV0J3MgdGFrZSBhIGxvb2sgYXJvdW5kIGxpbmUgNzcsIHRoYXQncyB1c3VhbGx5IHdoZXJlIHRoZXNlIHR5cGVzIG9mIGNvbmRpdGlvbmFsIGRlZmluZXMgYXJlIGhhbmRsZWQuIEkgZXhwZWN0IHRvIGZpbmQgc29tZSBgI2lmZGVmIENPTkZJR19ORVRfREVWTUVNYCBvciBzb21ldGhpbmcgc2ltaWxhciB0aGF0IGVpdGhlciBlbmFibGVzIG9yIGRpc2FibGVzIHBhcnRzIG9mIHRoZSBmdW5jdGlvbidzIGxvZ2ljLiBUaGF0IHNob3VsZCB0ZWxsIHRoZSB0YWxlIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzgxNiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE1OjExOjQ0LjUxOTkwNzMzOVoiLCJTZXEiOjQ0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MzcxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9kZXZtZW0uaFwiLFxuICBcIkZpcnN0TGluZVwiOiA3MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA3MDpcXHRcXHQgKiBuZXRfaW92cyBpbiB0aGUgVFggcGF0aC5cXG4gIDcxOlxcdFxcdCAqL1xcbiAgNzI6XFx0XFx0c3RydWN0IG5ldF9pb3YgKip0eF92ZWM7XFxuICA3MzpcXHRcXG4gIDc0OlxcdFxcdHN0cnVjdCB3b3JrX3N0cnVjdCB1bmJpbmRfdztcXG4gIDc1OlxcdH07XFxuICA3NjpcXHRcXG4gIDc3OlxcdCNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWTUVNKVxcbiAgNzg6XFx0LyogT3duZXIgb2YgdGhlIGRtYS1idWYgY2h1bmtzIGluc2VydGVkIGludG8gdGhlIGdlbiBwb29sLiBFYWNoIHNjYXR0ZXJsaXN0XFxuICA3OTpcXHQgKiBlbnRyeSBmcm9tIHRoZSBkbWFidWYgaXMgaW5zZXJ0ZWQgaW50byB0aGUgZ2VucG9vbCBhcyBhIGNodW5rLCBhbmQgbmVlZHNcXG4gIDgwOlxcdCAqIHRoaXMgb3duZXIgc3RydWN0IHRvIGtlZXAgdHJhY2sgb2Ygc29tZSBtZXRhZGF0YSBuZWNlc3NhcnkgdG8gY3JlYXRlXFxuICA4MTpcXHQgKiBhbGxvY2F0aW9ucyBmcm9tIHRoaXMgY2h1bmsuXFxuICA4MjpcXHQgKi9cXG4gIDgzOlxcdHN0cnVjdCBkbWFidWZfZ2VucG9vbF9jaHVua19vd25lciB7XFxuICA4NDpcXHRcXHRzdHJ1Y3QgbmV0X2lvdl9hcmVhIGFyZWE7XFxuICA4NTpcXHRcXHRzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqYmluZGluZztcXG4gIDg2OlxcdFxcbiAgODc6XFx0XFx0LyogZG1hX2FkZHIgb2YgdGhlIHN0YXJ0IG9mIHRoZSBjaHVuay4gICovXFxuICA4ODpcXHRcXHRkbWFfYWRkcl90IGJhc2VfZG1hX2FkZHI7XFxuICA4OTpcXHR9O1xcbiAgOTA6XFx0XFxuICA5MTpcXHR2b2lkIF9fbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZ19mcmVlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd3EpO1xcbiAgOTI6XFx0c3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKlxcbiAgOTM6XFx0bmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICp2ZGV2LFxcbiAgOTQ6XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBkZXZpY2UgKmRtYV9kZXYsXFxuICA5NTpcXHRcXHRcXHQgICAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uLFxcbiAgOTY6XFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGludCBkbWFidWZfZmQsIHN0cnVjdCBuZXRkZXZfbmxfc29jayAqcHJpdixcXG4gIDk3OlxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xcbiAgOTg6XFx0c3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKm5ldF9kZXZtZW1fbG9va3VwX2RtYWJ1Zih1MzIgaWQpO1xcbiAgOTk6XFx0dm9pZCBuZXRfZGV2bWVtX3VuYmluZF9kbWFidWYoc3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKmJpbmRpbmcpO1xcbiAxMDA6XFx0aW50IG5ldF9kZXZtZW1fYmluZF9kbWFidWZfdG9fcXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHJ4cV9pZHgsXFxuIDEwMTpcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKmJpbmRpbmcsXFxuIDEwMjpcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcXG4gMTAzOlxcdFxcbiAxMDQ6XFx0c3RhdGljIGlubGluZSBzdHJ1Y3QgZG1hYnVmX2dlbnBvb2xfY2h1bmtfb3duZXIgKlxcbiAxMDU6XFx0bmV0X2Rldm1lbV9pb3ZfdG9fY2h1bmtfb3duZXIoY29uc3Qgc3RydWN0IG5ldF9pb3YgKm5pb3YpXFxuIDEwNjpcXHR7XFxuIDEwNzpcXHRcXHRzdHJ1Y3QgbmV0X2lvdl9hcmVhICpvd25lciA9IG5ldF9pb3Zfb3duZXIobmlvdik7XFxuIDEwODpcXHRcXG4gMTA5OlxcdFxcdHJldHVybiBjb250YWluZXJfb2Yob3duZXIsIHN0cnVjdCBkbWFidWZfZ2VucG9vbF9jaHVua19vd25lciwgYXJlYSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE1OjExOjQ0LjUxOTk4MjE0OVoiLCJTZXEiOjQ1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDQ3OTg2NTkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHVuZGVyc3RhbmRpbmcsIHByZXNlbnRlZCBhcyBhIGZpcnN0LXBlcnNvbiBhY2NvdW50LCB0YWlsb3JlZCBmb3Igc29tZW9uZSB3aG8ga25vd3MgdGhlaXIgd2F5IGFyb3VuZCB0aGVzZSBzb3J0cyBvZiBzeXN0ZW1zOlxuXG4qKlVuZGVmaW5pbmcgQ09ORklHX05FVF9ERVZNRU06IFdoYXQgTm93PyoqXG5cblJpZ2h0LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucyBvZiAqbm90KiBkZWZpbmluZyBgQ09ORklHX05FVF9ERVZNRU1gLiBJIGltbWVkaWF0ZWx5IHN0YXJ0IHRvIHBpY3R1cmUgdGhlIG5ldHdvcmsgZGV2aWNlIG1lbW9yeSBtYXBwaW5nIHByb2Nlc3MuIEl0J3MgYSBjcml0aWNhbCBwaWVjZSwgaXNuJ3QgaXQ/IFdpdGhvdXQgaXQsIEknbSBleHBlY3Rpbmcgc29tZSBwcmV0dHkgc2lnbmlmaWNhbnQgY2hhbmdlcyBpbiBob3cgdGhlIGtlcm5lbCBpbnRlcmFjdHMgd2l0aCB0aGUgaGFyZHdhcmUuIEkga25vdyB0aGlzIHR5cGljYWxseSBpbXBhY3RzIGhvdyB0aGUgZHJpdmVyIGhhbmRsZXMgRE1BIGJ1ZmZlcnMsIGhvdyBpdCBhY2Nlc3NlcyB0aGUgaGFyZHdhcmUgcmVnaXN0ZXJzLCBhbmQgZ2VuZXJhbGx5IGhvdyBpdCB3b3JrcyB3aXRoIG1lbW9yeS5cblxuSSdtIHN0YXJ0aW5nIHRvIHRoaW5rIGFib3V0IHRoZSBkaWZmZXJlbnQgbmV0d29yayBkcml2ZXJzIGFuZCBob3cgdGhleSBhcmUgY29uZmlndXJlZC4gSSB3aWxsIG5lZWQgdG8gY29uc2lkZXIgd2hldGhlciBpdCdzIGVuYWJsZWQgb3IgZGlzYWJsZWQsIGFuZCBob3cgaXQgZGVhbHMgd2l0aCBhY2Nlc3NpbmcgdGhlIG5ldHdvcmsgZGV2aWNlJ3MgbWVtb3J5LiBNeSBleHBlY3RhdGlvbiBpcyB0aGF0IHRoZSBjb2RlIHBhdGhzIHJlbGF0ZWQgdG8gcGh5c2ljYWwgbWVtb3J5IGFjY2VzcyB0aHJvdWdoIGRldmljZSBtZW1vcnkgd2lsbCBiZSBkaXNhYmxlZCwgcGVyaGFwcyByZXBsYWNlZCB3aXRoIHNvbWV0aGluZyB0aGF0IGludGVyYWN0cyB3aXRoIHRoZSBkZXZpY2UgdmlhIGRpZmZlcmVudCBtZXRob2RzLiBNYXliZSB0aGVyZSdzIHNvbWUga2luZCBvZiBmYWxsYmFjayBvciBhIGRpZmZlcmVudCBtZWNoYW5pc20g4oCTIHBvdGVudGlhbGx5IHNvbWV0aGluZyB1c2luZyBJL08gbWVtb3J5IG1hcHBlZCBpbnRvIHRoZSBrZXJuZWwncyB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UsIG9yIG1heWJlIHNvbWUgb3RoZXIga2luZCBvZiBtZWNoYW5pc20uIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoLiBcblxuSSdtIGFudGljaXBhdGluZyB0aGF0IGFueSBleGlzdGluZyBuZXR3b3JrIGRyaXZlciBjb2RlIHRoYXQgZGlyZWN0bHkgYWNjZXNzZXMgZGV2aWNlIG1lbW9yeSwgYXMgaWYgaXQgd2VyZSByZWd1bGFyIFJBTSwgd2lsbCBsaWtlbHkgYnJlYWsuIEknbGwgbmVlZCB0byBsb29rIGNsb3NlbHkgYXQgdGhlIGRyaXZlciBjb2RlIHRoYXQgdXNlcyBgaW9yZW1hcGAsIG9yIGFueSBvZiB0aG9zZSBkZXZpY2UgbWVtb3J5IGFjY2VzcyBmdW5jdGlvbnMuIEknbGwgbmVlZCB0byBmaW5kIG91dCB3aGF0IGhhcHBlbnMgd2l0aCB0aGUgY29kZSB0aGF0IGRlcGVuZHMgb24gdGhlc2UgbWFjcm9zIGFuZCwgaWYgdGhlcmUgYXJlIGFueSwgd2hldGhlciB0aGVyZSdzIGFuIGFsdGVybmF0aXZlIHRvIHRoZXNlIGZ1bmN0aW9ucyB0byBkZWFsIHdpdGggdGhlIG1lbW9yeS5cblxuRXNzZW50aWFsbHksIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGUgc3lzdGVtIGhhbmRsZXMgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IG9mIHRoZSBuZXR3b3JrIGRldmljZXMgd2hlbiBgQ09ORklHX05FVF9ERVZNRU1gIGlzIG5vdCBhY3RpdmUsIGFuZCBJIG5lZWQgdG8gcHJlZGljdCBob3cgaXQgbWlnaHQgYmVoYXZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDgyNSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTU6MTE6NDguOTY3OTcyMDJaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQwMjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvZGV2bWVtLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMTEwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTEwOlxcdH1cXG4gMTExOlxcdFxcbiAxMTI6XFx0c3RhdGljIGlubGluZSBzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqXFxuIDExMzpcXHRuZXRfZGV2bWVtX2lvdl9iaW5kaW5nKGNvbnN0IHN0cnVjdCBuZXRfaW92ICpuaW92KVxcbiAxMTQ6XFx0e1xcbiAxMTU6XFx0XFx0cmV0dXJuIG5ldF9kZXZtZW1faW92X3RvX2NodW5rX293bmVyKG5pb3YpLVxcdTAwM2ViaW5kaW5nO1xcbiAxMTY6XFx0fVxcbiAxMTc6XFx0XFxuIDExODpcXHRzdGF0aWMgaW5saW5lIHUzMiBuZXRfZGV2bWVtX2lvdl9iaW5kaW5nX2lkKGNvbnN0IHN0cnVjdCBuZXRfaW92ICpuaW92KVxcbiAxMTk6XFx0e1xcbiAxMjA6XFx0XFx0cmV0dXJuIG5ldF9kZXZtZW1faW92X2JpbmRpbmcobmlvdiktXFx1MDAzZWlkO1xcbiAxMjE6XFx0fVxcbiAxMjI6XFx0XFxuIDEyMzpcXHRzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbmV0X2lvdl92aXJ0dWFsX2FkZHIoY29uc3Qgc3RydWN0IG5ldF9pb3YgKm5pb3YpXFxuIDEyNDpcXHR7XFxuIDEyNTpcXHRcXHRzdHJ1Y3QgbmV0X2lvdl9hcmVhICpvd25lciA9IG5ldF9pb3Zfb3duZXIobmlvdik7XFxuIDEyNjpcXHRcXG4gMTI3OlxcdFxcdHJldHVybiBvd25lci1cXHUwMDNlYmFzZV92aXJ0dWFsICtcXG4gMTI4OlxcdFxcdCAgICAgICAoKHVuc2lnbmVkIGxvbmcpbmV0X2lvdl9pZHgobmlvdikgXFx1MDAzY1xcdTAwM2MgUEFHRV9TSElGVCk7XFxuIDEyOTpcXHR9XFxuIDEzMDpcXHRcXG4gMTMxOlxcdHN0YXRpYyBpbmxpbmUgYm9vbFxcbiAxMzI6XFx0bmV0X2Rldm1lbV9kbWFidWZfYmluZGluZ19nZXQoc3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKmJpbmRpbmcpXFxuIDEzMzpcXHR7XFxuIDEzNDpcXHRcXHRyZXR1cm4gcGVyY3B1X3JlZl90cnlnZXQoXFx1MDAyNmJpbmRpbmctXFx1MDAzZXJlZik7XFxuIDEzNTpcXHR9XFxuIDEzNjpcXHRcXG4gMTM3OlxcdHN0YXRpYyBpbmxpbmUgdm9pZFxcbiAxMzg6XFx0bmV0X2Rldm1lbV9kbWFidWZfYmluZGluZ19wdXQoc3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKmJpbmRpbmcpXFxuIDEzOTpcXHR7XFxuIDE0MDpcXHRcXHRwZXJjcHVfcmVmX3B1dChcXHUwMDI2YmluZGluZy1cXHUwMDNlcmVmKTtcXG4gMTQxOlxcdH1cXG4gMTQyOlxcdFxcbiAxNDM6XFx0dm9pZCBuZXRfZGV2bWVtX2dldF9uZXRfaW92KHN0cnVjdCBuZXRfaW92ICpuaW92KTtcXG4gMTQ0OlxcdHZvaWQgbmV0X2Rldm1lbV9wdXRfbmV0X2lvdihzdHJ1Y3QgbmV0X2lvdiAqbmlvdik7XFxuIDE0NTpcXHRcXG4gMTQ2OlxcdHN0cnVjdCBuZXRfaW92ICpcXG4gMTQ3OlxcdG5ldF9kZXZtZW1fYWxsb2NfZG1hYnVmKHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpiaW5kaW5nKTtcXG4gMTQ4OlxcdHZvaWQgbmV0X2Rldm1lbV9mcmVlX2RtYWJ1ZihzdHJ1Y3QgbmV0X2lvdiAqcHBpb3YpO1xcbiAxNDk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE1OjExOjQ4Ljk2ODA0NzgyWiIsIlNlcSI6NDcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3MTEwMzExMzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKk1pc3NpbmcgYCNlbHNlYD8gQSBTdXNwZWN0IENvbmRpdGlvbmFsIENvbXBpbGF0aW9uKipcblxuQWxyaWdodCwgbGV0IG1lIGp1c3QgcGFyc2UgdGhpcyBjb2RlLi4uIEhhbmcgb24gYSBzZWNvbmQuIEknbSBzY2FubmluZyB0aGlzIGNvbmRpdGlvbmFsIGJsb2NrIHdpdGggdGhlIGAjaWYgZGVmaW5lZChDT05GSUdfTkVUX0RFVk1FTSlgIHByZXByb2Nlc3NvciBkaXJlY3RpdmUgYW5kLi4uIHdoZXJlJ3MgdGhlIGNvcnJlc3BvbmRpbmcgYCNlbHNlYCBjbGF1c2U/IFRoaXMgaXMgaW1tZWRpYXRlbHkgYSByZWQgZmxhZy4gQ29uZGl0aW9uYWwgY29tcGlsYXRpb24gaXMgY3JpdGljYWwgZm9yIHBvcnRhYmlsaXR5IGFuZCBlZmZpY2llbnQgcmVzb3VyY2UgdXNhZ2UsIGVzcGVjaWFsbHkgaW4gZW1iZWRkZWQgc3lzdGVtcy4gV2l0aG91dCBhbiBgI2Vsc2VgLCB0aGUgY29kZSB1bmRlciB0aGUgYCNpZmAgZWl0aGVyIGV4ZWN1dGVzIG9yIGlzIGNvbXBsZXRlbHkgZXhjbHVkZWQuXG5cbk15IGd1dCBmZWVsaW5nIGlzIHRoYXQgc29tZXRoaW5nJ3MgbWlzc2luZyBoZXJlLiBJdCdzIHBvc3NpYmxlIHRoZSBjb2RlIGlzIGludGVudGlvbmFsbHkgc3RydWN0dXJlZCB0aGlzIHdheSwgYnV0IHRoZSBsYWNrIG9mIGFuIGBlbHNlYCBzdHJvbmdseSBzdWdnZXN0cyB0aGF0IGVpdGhlcjpcblxuMS4gICoqQSBjcml0aWNhbCBwYXRoIGlzIHVuaGFuZGxlZDoqKiBJZiBgQ09ORklHX05FVF9ERVZNRU1gIGlzICpub3QqIGRlZmluZWQsIHdoYXQgc2hvdWxkIGhhcHBlbj8gSXMgdGhlcmUgYSBkZWZhdWx0IGJlaGF2aW9yIGJha2VkIGluIHNvbWV3aGVyZSBlbHNlIHRoYXQncyBpbXBsaWNpdGx5IHJlbGllZCB1cG9uPyBUaGlzIGlzIHNsb3BweSBhbmQgY2FuIGxlYWQgdG8gdW5leHBlY3RlZCBiZWhhdmlvciBvciBldmVuIGNvbXBpbGF0aW9uIGVycm9ycyBkb3duIHRoZSBsaW5lIGlmIHRoZSBidWlsZCBjb25maWd1cmF0aW9uIGNoYW5nZXMuXG4yLiAgKipSZWR1bmRhbnQgQ29kZSBvciBhIExvZ2ljIEVycm9yOioqIE1heWJlIHRoZSBjb2RlICppbnRlbmRlZCogdG8gaGFuZGxlIHRoZSBhYnNlbmNlIG9mIGBDT05GSUdfTkVUX0RFVk1FTWAgaXMgaW4gZmFjdCBleGVjdXRlZCBldmVyeSB0aW1lLCBidXQgY29uZGl0aW9uYWxseS5cbjMuICAqKkEgcG90ZW50aWFsIGJ1ZzoqKiBBbiBpbnRlbmRlZCBzZWN0aW9uIG9mIGNvZGUgd2FzIGZvcmdvdHRlbi5cblxuSSBuZWVkIHRvIGRpZyBkZWVwZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbnRlbnQgb2YgdGhpcyBlbnRpcmUgc2VjdGlvbi4gSXMgYENPTkZJR19ORVRfREVWTUVNYCBhIGhhcmR3YXJlIGFic3RyYWN0aW9uPyBJcyB0aGUgY29kZSB3aXRoaW4gdGhpcyBgI2lmYCBzZWN0aW9uIHNwZWNpZmljIHRvIGEgcGFydGljdWxhciBtZW1vcnkgbWFwcGluZyBvciBoYXJkd2FyZSBpbnRlcmZhY2U/IERlcGVuZGluZyBvbiB0aGUgY29udGV4dCwgdGhpcyBjb3VsZCBoYXZlIHNlcmlvdXMgaW1wbGljYXRpb25zIGZvciBwb3J0YWJpbGl0eSwgZHJpdmVyIHNlbGVjdGlvbiwgb3IgZXZlbiBzZWN1cml0eSwgaWYgaXQncyBtaXNzaW5nIGNyaXRpY2FsIGJvdW5kYXJ5IGNoZWNrcyB3aXRob3V0IHRoZSBlbHNlLiBJIG5lZWQgdG8gdHJhY2UgdGhpcyBiYWNrIHRvIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMsIHRoZSBzdXJyb3VuZGluZyBjb2RlLCBhbmQgYW55IHJlbGF0ZWQgZG9jdW1lbnRhdGlvbi4gQSBtaXNzaW5nIGBlbHNlYCBjbGF1c2UgaW4gYSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlIGlzIG9mdGVuIGEgc3ltcHRvbSBvZiBzb21ldGhpbmcgZGVlcGVyLCBhbmQgaXQncyBzb21ldGhpbmcgSSBuZWVkIHRvIGZ1bGx5IHVuZGVyc3RhbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1OTI1LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNToxMTo1My42NzkwODExMzNaIiwiU2VxIjo0OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQ0MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvZGV2bWVtLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMTUwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTUwOlxcdFxcbiAxNTE6XFx0c3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKlxcbiAxNTI6XFx0bmV0X2Rldm1lbV9nZXRfYmluZGluZyhzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCBkbWFidWZfaWQpO1xcbiAxNTM6XFx0c3RydWN0IG5ldF9pb3YgKlxcbiAxNTQ6XFx0bmV0X2Rldm1lbV9nZXRfbmlvdl9hdChzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqYmluZGluZywgc2l6ZV90IGFkZHIsXFxuIDE1NTpcXHRcXHRcXHQgICAgICAgc2l6ZV90ICpvZmYsIHNpemVfdCAqc2l6ZSk7XFxuIDE1NjpcXHRcXG4gMTU3OlxcdCNlbHNlXFxuIDE1ODpcXHRzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZztcXG4gMTU5OlxcdFxcbiAxNjA6XFx0c3RhdGljIGlubGluZSB2b2lkXFxuIDE2MTpcXHRuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nX3B1dChzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqYmluZGluZylcXG4gMTYyOlxcdHtcXG4gMTYzOlxcdH1cXG4gMTY0OlxcdFxcbiAxNjU6XFx0c3RhdGljIGlubGluZSB2b2lkIG5ldF9kZXZtZW1fZ2V0X25ldF9pb3Yoc3RydWN0IG5ldF9pb3YgKm5pb3YpXFxuIDE2NjpcXHR7XFxuIDE2NzpcXHR9XFxuIDE2ODpcXHRcXG4gMTY5OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBuZXRfZGV2bWVtX3B1dF9uZXRfaW92KHN0cnVjdCBuZXRfaW92ICpuaW92KVxcbiAxNzA6XFx0e1xcbiAxNzE6XFx0fVxcbiAxNzI6XFx0XFxuIDE3MzpcXHRzdGF0aWMgaW5saW5lIHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpcXG4gMTc0OlxcdG5ldF9kZXZtZW1fYmluZF9kbWFidWYoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqdmRldixcXG4gMTc1OlxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgZGV2aWNlICpkbWFfZGV2LFxcbiAxNzY6XFx0XFx0XFx0ICAgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbixcXG4gMTc3OlxcdFxcdFxcdCAgICAgICB1bnNpZ25lZCBpbnQgZG1hYnVmX2ZkLFxcbiAxNzg6XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBuZXRkZXZfbmxfc29jayAqcHJpdixcXG4gMTc5OlxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuIDE4MDpcXHR7XFxuIDE4MTpcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU9QTk9UU1VQUCk7XFxuIDE4MjpcXHR9XFxuIDE4MzpcXHRcXG4gMTg0OlxcdHN0YXRpYyBpbmxpbmUgc3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKm5ldF9kZXZtZW1fbG9va3VwX2RtYWJ1Zih1MzIgaWQpXFxuIDE4NTpcXHR7XFxuIDE4NjpcXHRcXHRyZXR1cm4gTlVMTDtcXG4gMTg3OlxcdH1cXG4gMTg4OlxcdFxcbiAxODk6XFx0c3RhdGljIGlubGluZSB2b2lkXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE1OjExOjUzLjY3OTE1NjgyM1oiLCJTZXEiOjQ5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjE4NTMxMzk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRGVwZW5kZW5jeSBDaGFpbiBmb3IgTmV0bGluayBUZXN0aW5nKipcblxuT2theSwgc28gSSBzZWUgdGhhdCBgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZmAgaXMgZ29pbmcgdG8gY3JhcCBvdXQgd2l0aCBgLUVPUE5PVFNVUFBgIGlmIGBDT05GSUdfTkVUX0RFVk1FTWAgaXNuJ3Qgc2V0LiBUaGF0J3Mgbm8gZ29vZCBmb3IgYWN0dWFsbHkgdGVzdGluZyB0aGUgaW50ZW5kZWQgZnVuY3Rpb25hbGl0eS4gSG93ZXZlciwgYG5ldGRldl9ubF9iaW5kX3J4X2RvaXRgIGlzIGFsd2F5cyBjb21waWxlZCwgd2hpY2ggaXMgZ3JlYXQgYmVjYXVzZSBpdCBtZWFucyB0aGVyZSdzIHNvbWV0aGluZyB0byBob29rIGludG8uXG5cblNvLCB0byBwcm9wZXJseSB0ZXN0IHRoZSBjb3JlIGxvZ2ljIG9mIHdoYXQgSSdtIGFmdGVyLCBJIGFic29sdXRlbHkgKm5lZWQqIGBDT05GSUdfTkVUX0RFVk1FTWAgZW5hYmxlZC4gTm8gd2F5IGFyb3VuZCBpdC5cblxuTm93LCBsZXQncyB0cmFjZSB0aGlzIGRlcGVuZGVuY3kuIFJpZ2h0LCBgQ09ORklHX05FVF9ERVZNRU1gIHJlbGllcyBvbiBib3RoIGBETUFfU0hBUkVEX0JVRkZFUmAgYW5kIGBQQUdFX1BPT0xgLiBUaGF0J3MgdGhlIGZ1bGwgY2hhaW4uXG5cblRoZXJlZm9yZSwgZm9yIG15IGBFbmFibGVDb25maWdzYCBsaXN0LCBJJ20gZ29pbmcgdG8gbmVlZDogYFtcIk5FVF9ERVZNRU1cIiwgXCJETUFfU0hBUkVEX0JVRkZFUlwiLCBcIlBBR0VfUE9PTFwiXWAuIFRob3NlIHRocmVlIGFyZSBlc3NlbnRpYWwgdG8gcHJvcGVybHkgZW5hYmxlIGFuZCB0ZXN0IHRoZSByZWxldmFudCBjb21wb25lbnRzLlxuXG5Ob3csIGEgcXVpY2sgY2hlY2sgdG8gY29uZmlybTogSXMgYG5ldGRldl9ubF9iaW5kX3J4X2RvaXRgIGFjdHVhbGx5IHJlYWNoYWJsZT8gSXQncyBhIG5ldGxpbmsgaGFuZGxlciwgYW5kIGl0J3MgbGlrZWx5IHBhcnQgb2YgdGhlIGBuZXRkZXZfbmxfZmFtaWx5YC4gTGV0IG1lIGp1c3QgdmVyaWZ5IHRoYXQgbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzAxNiwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE1OjExOjU4LjI5NzY5MDg3N1oiLCJTZXEiOjUwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc5ODY3OTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmV0ZGV2X25sX2JpbmRfcnhfZG9pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9uZXRkZXYtZ2VubC1nZW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9uZXRkZXYtZ2VubC1nZW4uYz0xMzg9c3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX3NwbGl0X29wcyBuZXRkZXZfbmxfb3BzW10gPSB7XFxuLS1cXG5uZXQvY29yZS9uZXRkZXYtZ2VubC1nZW4uYy0yMTktXFx0XFx0LmNtZFxcdFxcdD0gTkVUREVWX0NNRF9CSU5EX1JYLFxcbm5ldC9jb3JlL25ldGRldi1nZW5sLWdlbi5jOjIyMDpcXHRcXHQuZG9pdFxcdFxcdD0gbmV0ZGV2X25sX2JpbmRfcnhfZG9pdCxcXG5uZXQvY29yZS9uZXRkZXYtZ2VubC1nZW4uYy0yMjEtXFx0XFx0LnBvbGljeVxcdFxcdD0gbmV0ZGV2X2JpbmRfcnhfbmxfcG9saWN5LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNToxMTo1OC4zNDU2ODE4MDJaIiwiU2VxIjo1MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODM2OTYxNTA4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE5ldGxpbmsgSGFuZGxlcioqXG5cbk9rYXksIHNvIHRoaXMgaXMgZGVmaW5pdGVseSBhIG5ldGxpbmsgaGFuZGxlci4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGNvbmZpcm0gdGhlIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlLiBJJ2xsIHN0YXJ0IGJ5IHZlcmlmeWluZyB0aGF0IGBuZXRkZXZfbmxfc29ja19wcml2X2luaXRgIGlzIGNhbGxlZCwgd2hpY2ggaXQgYXBwZWFycyB0byBiZS4gSXQncyByZWdpc3RlcmVkIHdpdGhpbiBgbmV0ZGV2X25sX2ZhbWlseWAsIGFuZCBgc29ja19wcml2X2luaXRgIGlzIGluZGVlZCBjYWxsZWQgd2hlbiBhIG5ldGxpbmsgc29ja2V0IGlzIGNyZWF0ZWQgZm9yIHRoaXMgZmFtaWx5LCBjb25maXJtaW5nIHRoZSBmdW5jdGlvbmFsIHJlYWNoYWJpbGl0eSBvZiB0aGVzZSBjaGFuZ2VzLlxuXG5HaXZlbiB0aGF0LCBJIG5lZWQgdG8gZm9jdXMgbXkgYXR0ZW50aW9uIG9uIHNldmVyYWwga2V5IHN5bWJvbHM6IGBuZXRkZXZfbmxfYmluZF9yeF9kb2l0YCwgYG5ldGRldl9ubF9iaW5kX3R4X2RvaXRgLCBgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZmAsIGBuZXRfZGV2bWVtX3VuYmluZF9kbWFidWZgLCBgbmV0ZGV2X25sX3NvY2tfcHJpdl9pbml0YCwgYW5kIGBuZXRkZXZfbmxfc29ja19wcml2X2Rlc3Ryb3lgLiBJIG5lZWQgdG8gcmV2aWV3IHRoZXNlIGZ1bmN0aW9ucyBpbiBkZXRhaWwuXG5cbk5vdywgbGV0IG1lIGRvdWJsZS1jaGVjayB0aGUgdmlzaWJpbGl0eSBvZiB0aGVzZSBmdW5jdGlvbnMuIENoZWNraW5nIGBuZXQvY29yZS9uZXRkZXYtZ2VubC5jYCwgYm90aCBgbmV0ZGV2X25sX3NvY2tfcHJpdl9pbml0YCBhbmQgYG5ldGRldl9ubF9zb2NrX3ByaXZfZGVzdHJveWAgYXJlIGRlY2xhcmVkIGFzIG5vbi1zdGF0aWMsIHdoaWNoIGlzIHdoYXQgSSBleHBlY3RlZC4gU2ltaWxhcmx5LCBpbiBgbmV0L2NvcmUvZGV2bWVtLmNgLCBJIHNlZSB0aGF0IGBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmYCBhbmQgYG5ldF9kZXZtZW1fdW5iaW5kX2RtYWJ1ZmAgYXJlIGFsc28gbm90IHN0YXRpYy4gRmluYWxseSwgbG9va2luZyBiYWNrIGF0IGBuZXQvY29yZS9uZXRkZXYtZ2VubC5jYCwgYm90aCBgbmV0ZGV2X25sX2JpbmRfcnhfZG9pdGAgYW5kIGBuZXRkZXZfbmxfYmluZF90eF9kb2l0YCBhcmUgYWxzbyBub24tc3RhdGljLCBhcyBleHBlY3RlZC5cblxuSSBuZWVkIHRvIGNvbmZpcm0gaWYgdGhlcmUgYXJlIGFueSBvdGhlciByZWxhdGVkIGZ1bmN0aW9ucy4gTGV0IG1lIHJldmlldyB0aGF0IHF1aWNrbHkuIE5vLCB0aGVyZSBhcmVuJ3QuXG5cbkxhc3RseSwgSSBzaG91bGQgY2hlY2sgd2hldGhlciBhbnkgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBpcyByZXF1aXJlZCwgbG9va2luZyBhdCB0aGUgYERNQV9TSEFSRURfQlVGRkVSYCBjb25maWd1cmF0aW9uIG9wdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc2ODQsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTU6MTI6MDYuNzE1Mjk5NDY4WiIsIlNlcSI6NTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzEzMzg2MDkzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBETUFfU0hBUkVEX0JVRkZFUlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9iYXNlL0tjb25maWc9MjEzPXNvdXJjZSBcXFwiZHJpdmVycy9iYXNlL3JlZ21hcC9LY29uZmlnXFxcIlxcbmRyaXZlcnMvYmFzZS9LY29uZmlnLTIxNC1cXG5kcml2ZXJzL2Jhc2UvS2NvbmZpZzoyMTU6Y29uZmlnIERNQV9TSEFSRURfQlVGRkVSXFxuZHJpdmVycy9iYXNlL0tjb25maWctMjE2LVxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTU6MTI6MDguNDI4NjkyNTUxWiIsIlNlcSI6NTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY0OTA2MzE3NDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqSW5zcGVjdGluZyB0aGUgYFBBR0VfUE9PTGAqKlxuXG5BbHJpZ2h0LCBiZWZvcmUgZGl2aW5nIHRvbyBkZWVwLCBJIG5lZWQgdG8gdGFrZSBhIHF1aWNrIGxvb2sgYXQgdGhlIGBQQUdFX1BPT0xgLiBJdOKAmXMgdGhlIGxpa2VseSBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBtZW1vcnkgYWxsb2NhdGlvbiBhbmQgcG90ZW50aWFsIGlzc3Vlcy4gRGVwZW5kaW5nIG9uIHRoZSBzeXN0ZW0gYXJjaGl0ZWN0dXJlIGFuZCB0aGUgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24sIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQgd2l0aGluIHRoZSBgUEFHRV9QT09MYCBnaXZlcyBtZSBhIGhpZ2gtbGV2ZWwgdmlldyBvZiBob3cgYXZhaWxhYmxlIG1lbW9yeSBpcyBvcmdhbml6ZWQuIElzIGl0IGEgYnVkZHkgc3lzdGVtLCBhIHNsYWIgYWxsb2NhdG9yLCBvciBzb21ldGhpbmcgbW9yZSBzcGVjaWFsaXplZD8gVGhlIHByZXNlbmNlIG9mIGZyZWUgcGFnZSBsaXN0cywgdXNhZ2UgY291bnRzLCBhbmQgcG9zc2libHkgZXZlbiBmcmFnbWVudGF0aW9uIG1ldHJpY3Mgd2lsbCBxdWlja2x5IGdpdmUgbWUgdGhlIGxheSBvZiB0aGUgbGFuZC4gSSBuZWVkIHRvIGNoZWNrIHRoZSBkYXRhIHN0cnVjdHVyZXMsIHNwZWNpZmljYWxseSB0aGUgaGVhZGVycywgdGhlIHBvaW50ZXJzLCBhbmQgYW55IGFzc29jaWF0ZWQgbWV0YWRhdGEsIHRvIGdldCBhIHNlbnNlIG9mIGhvdyByZXF1ZXN0cyBhcmUgaGFuZGxlZCBhbmQgaWYgdGhlcmUgYXJlIGFueSBvYnZpb3VzIGJvdHRsZW5lY2tzIG9yIHJlZCBmbGFncy4gSSdsbCBiZSBsb29raW5nIGZvciBpbmNvbnNpc3RlbmNpZXMsIHBhcnRpY3VsYXJseSBhcm91bmQgdGhlIGJvdW5kYXJpZXMgb2YgYWxsb2NhdGVkIHBhZ2VzLiBBcmUgdGhlcmUgYW55IHVudXN1YWwgcGF0dGVybnM/IElzIGl0IGdyb3dpbmcvc2hyaW5raW5nIGFzIGV4cGVjdGVkPyBJIG5lZWQgdG8gYW5hbHl6ZSBpdHMgY3VycmVudCBzdGF0ZSwgY3Jvc3MtcmVmZXJlbmNlIGl0IHdpdGggcmVjZW50IG9wZXJhdGlvbnMsIGFuZCBkZXRlcm1pbmUgaWYgaXQncyBjb250cmlidXRpbmcgdG8gdGhlIG9ic2VydmVkIGJlaGF2aW9yIG9yIHBlcmZvcm1hbmNlIHByb2JsZW1zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODg0MSwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTU6MTI6MTQuOTE5MzI3MzcxWiIsIlNlcSI6NTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDY0MDY3OTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBQQUdFX1BPT0xcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9LY29uZmlnPTQ4Nz1jb25maWcgTkVUX0RFVkxJTktcXG4tLVxcbm5ldC9LY29uZmlnLTQ5MC1cXG5uZXQvS2NvbmZpZzo0OTE6Y29uZmlnIFBBR0VfUE9PTFxcbm5ldC9LY29uZmlnLTQ5Mi1cXHRib29sXFxubmV0L0tjb25maWctNDkzLVxcbm5ldC9LY29uZmlnOjQ5NDpjb25maWcgUEFHRV9QT09MX1NUQVRTXFxubmV0L0tjb25maWctNDk1LVxcdGRlZmF1bHQgblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNToxMjoxNi45ODM0MDYyMThaIiwiU2VxIjo1NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUwOTgxNjM0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkluaXRpYWwgRGlhZ25vc3RpYyBRdWVyeSoqXG5cblJpZ2h0LCBsZXQncyBzdGFydCB3aXRoIGEgcXVpY2sgY2hlY2sgb24gYE5FVF9ERVZNRU1gLiBUaGF0J3MgdXN1YWxseSB0aGUgZmlyc3QgcGxhY2UgSSBsb29rIHdoZW4gZGVhbGluZyB3aXRoIG5ldHdvcmsgZGV2aWNlIGRyaXZlciBpc3N1ZXMsIGVzcGVjaWFsbHkgYW55dGhpbmcgcmVsYXRlZCB0byBtZW1vcnkgYWxsb2NhdGlvbiBvciBhY2Nlc3MuIFRoaXMgY29tbWFuZCBpcyBwcmV0dHkgbXVjaCBhIGZ1bmRhbWVudGFsIHN0YXJ0aW5nIHBvaW50LiBJdCBwcm92aWRlcyBhIHF1aWNrIGFuZCBkaXJ0eSB3YXkgdG8gZGlhZ25vc2UgaGFyZHdhcmUgYWRkcmVzcyBtYXBwaW5nIHByb2JsZW1zLCBvciBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZXMuIENoZWNraW5nIGl0IHdvbid0IHNvbHZlIGV2ZXJ5dGhpbmcsIG9mIGNvdXJzZSwgYnV0IGl0J3MgYSB2ZXJ5IGZhc3QgZGlhZ25vc3RpYyB0aGF0IGhhcyBwcm92ZW4gdXNlZnVsIGluIHRoZSBwYXN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTIyOSwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE1OjEyOjIwLjQ5MzIyNTY3NloiLCJTZXEiOjU2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcyNDY1NzgyMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkVUX0RFVk1FTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L0tjb25maWc9NjY9Y29uZmlnIFNLQl9FWFRFTlNJT05TXFxuLS1cXG5uZXQvS2NvbmZpZy02OC1cXG5uZXQvS2NvbmZpZzo2OTpjb25maWcgTkVUX0RFVk1FTVxcbm5ldC9LY29uZmlnLTcwLVxcdGRlZl9ib29sIHlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTU6MTI6MjIuMjE3ODg4NDY4WiIsIlNlcSI6NTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYzMjQyODY5MDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBOZXRkZXYgTmV0bGluayBTb2NrZXQgQmluZGluZyBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBJIHNlZSBpdCdzIHRvdWNoaW5nIHRoZSBuZXRkZXYgbmV0bGluayBzb2NrZXQgYmluZGluZ3MgaGFuZGxpbmcuIFNwZWNpZmljYWxseSwgaXQncyBzd2FwcGluZyB0aGUgYGJpbmRpbmdzYCBsaXN0IGZvciBhbiBgeGFycmF5YCBhbmQgZ2V0dGluZyByaWQgb2YgdGhlIGBsb2NrYCBtdXRleCB3aXRoaW4gdGhlIGBzdHJ1Y3QgbmV0ZGV2X25sX3NvY2tgLiBNeSBleHBlcnQgaW5zdGluY3RzIHRlbGwgbWUgdGhpcyBpcyBhIHBvdGVudGlhbGx5IHNpZ25pZmljYW50IGFyZWEgZm9yIGV4cGxvcmF0aW9uLCBzcGVjaWZpY2FsbHkgYmVjYXVzZSBpdCdzIGFsdGVyaW5nIGNvcmUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBjb25jdXJyZW5jeSBtZWNoYW5pc21zLiBJdCBpbXBhY3RzIGhvdyB0aGUgc3lzdGVtIGRlYWxzIHdpdGggbmV0bGluayBjb21tYW5kcywgYWZmZWN0aW5nIGZ1bmN0aW9ucyBzdWNoIGFzIGBuZXRkZXZfbmxfYmluZF9yeF9kb2l0YCwgYG5ldGRldl9ubF9iaW5kX3R4X2RvaXRgLCBgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZmAsIGFuZCBgbmV0X2Rldm1lbV91bmJpbmRfZG1hYnVmYC4gVGhlc2UgYXJlIGFsbCBjcnVjaWFsIHBvaW50cyBvZiBpbnRlcmFjdGlvbiBmb3IgYmluZGluZyBhbmQgdW5iaW5kaW5nIGRldmljZXMsIGFuZCwgdGhlcmVmb3JlLCB0aGV5IGFyZSB3b3J0aCBhIGRlZXBlciBpbnZlc3RpZ2F0aW9uLlxuXG5UaGUgcGF0Y2ggaXRzZWxmIGFwcGVhcnMgZnVuY3Rpb25hbGx5IHNvdW5kLCBmb2N1c2luZyBvbiBtZW1vcnkgbWFuYWdlbWVudCBhbmQgc3luY2hyb25pemF0aW9uLCB3aGljaCBpcyBhbHdheXMgYW4gaW50ZXJlc3RpbmcgdGFyZ2V0IGZvciBmdXp6aW5nLiBUbyByZWFsbHkgdGVzdCB0aGlzIHByb3Blcmx5LCBJJ2xsIG5lZWQgdG8gbWFrZSBzdXJlIGBORVRfREVWTUVNYCBpcyBlbmFibGVkLCBnaXZlbiBpdHMgcm9sZSBpbiB0aGUgbmV0ZGV2IG1lbW9yeSBzcGFjZSBhbGxvY2F0aW9uLiBJIHNob3VsZCBhbHNvIGJlIG1pbmRmdWwgb2YgaXRzIGRlcGVuZGVuY2llcywgcGFydGljdWxhcmx5IGBETUFfU0hBUkVEX0JVRkZFUmAgYW5kIGBQQUdFX1BPT0xgLCBhcyB0aGVzZSB3aWxsIGxpa2VseSBiZSBjcml0aWNhbCBmb3IgZW5hYmxpbmcgdGhlIHJlbGV2YW50IGNvZGUgcGF0aHMuXG5cbkkgc2hvdWxkIGFsc28gbWFrZSBhIG5vdGUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTQ2NiwiT3V0cHV0VG9rZW5zIjoyODgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTU6MTI6MjguNTQyMTc4ODk0WiIsIlNlcSI6NTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzg1NDU5NTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9ERVZNRU1cIixcbiAgICBcIkRNQV9TSEFSRURfQlVGRkVSXCIsXG4gICAgXCJQQUdFX1BPT0xcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZXRkZXZfbmxfYmluZF9yeF9kb2l0XCIsXG4gICAgXCJuZXRkZXZfbmxfYmluZF90eF9kb2l0XCIsXG4gICAgXCJuZXRfZGV2bWVtX2JpbmRfZG1hYnVmXCIsXG4gICAgXCJuZXRfZGV2bWVtX3VuYmluZF9kbWFidWZcIixcbiAgICBcIm5ldGRldl9ubF9zb2NrX3ByaXZfaW5pdFwiLFxuICAgIFwibmV0ZGV2X25sX3NvY2tfcHJpdl9kZXN0cm95XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG5ldGRldiBuZXRsaW5rIHNvY2tldCBiaW5kaW5ncyBoYW5kbGluZywgY2hhbmdpbmcgdGhlIGBiaW5kaW5nc2AgbGlzdCB0byBhbiBgeGFycmF5YCBhbmQgcmVtb3ZpbmcgdGhlIGBsb2NrYCBtdXRleCBmcm9tIGBzdHJ1Y3QgbmV0ZGV2X25sX3NvY2tgLiBUaGlzIGFmZmVjdHMgdGhlIGBuZXRkZXZfbmxfYmluZF9yeF9kb2l0YCwgYG5ldGRldl9ubF9iaW5kX3R4X2RvaXRgLCBgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZmAsIGFuZCBgbmV0X2Rldm1lbV91bmJpbmRfZG1hYnVmYCBmdW5jdGlvbnMsIHdoaWNoIGFyZSByZWFjaGFibGUgdmlhIG5ldGxpbmsgY29tbWFuZHMuIFRoZSBjaGFuZ2VzIGFyZSBmdW5jdGlvbmFsIGFuZCBpbnZvbHZlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBzeW5jaHJvbml6YXRpb24sIG1ha2luZyB0aGVtIHdvcnRoIGZ1enppbmcuIFRoZSBgTkVUX0RFVk1FTWAgZmVhdHVyZSBhbmQgaXRzIGRlcGVuZGVuY2llcyAoYERNQV9TSEFSRURfQlVGRkVSYCBhbmQgYFBBR0VfUE9PTGApIG11c3QgYmUgZW5hYmxlZCB0byB0ZXN0IHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9ERVZNRU1cIixcbiAgICBcIkRNQV9TSEFSRURfQlVGRkVSXCIsXG4gICAgXCJQQUdFX1BPT0xcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZXRkZXZfbmxfYmluZF9yeF9kb2l0XCIsXG4gICAgXCJuZXRkZXZfbmxfYmluZF90eF9kb2l0XCIsXG4gICAgXCJuZXRfZGV2bWVtX2JpbmRfZG1hYnVmXCIsXG4gICAgXCJuZXRfZGV2bWVtX3VuYmluZF9kbWFidWZcIixcbiAgICBcIm5ldGRldl9ubF9zb2NrX3ByaXZfaW5pdFwiLFxuICAgIFwibmV0ZGV2X25sX3NvY2tfcHJpdl9kZXN0cm95XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG5ldGRldiBuZXRsaW5rIHNvY2tldCBiaW5kaW5ncyBoYW5kbGluZywgY2hhbmdpbmcgdGhlIGBiaW5kaW5nc2AgbGlzdCB0byBhbiBgeGFycmF5YCBhbmQgcmVtb3ZpbmcgdGhlIGBsb2NrYCBtdXRleCBmcm9tIGBzdHJ1Y3QgbmV0ZGV2X25sX3NvY2tgLiBUaGlzIGFmZmVjdHMgdGhlIGBuZXRkZXZfbmxfYmluZF9yeF9kb2l0YCwgYG5ldGRldl9ubF9iaW5kX3R4X2RvaXRgLCBgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZmAsIGFuZCBgbmV0X2Rldm1lbV91bmJpbmRfZG1hYnVmYCBmdW5jdGlvbnMsIHdoaWNoIGFyZSByZWFjaGFibGUgdmlhIG5ldGxpbmsgY29tbWFuZHMuIFRoZSBjaGFuZ2VzIGFyZSBmdW5jdGlvbmFsIGFuZCBpbnZvbHZlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBzeW5jaHJvbml6YXRpb24sIG1ha2luZyB0aGVtIHdvcnRoIGZ1enppbmcuIFRoZSBgTkVUX0RFVk1FTWAgZmVhdHVyZSBhbmQgaXRzIGRlcGVuZGVuY2llcyAoYERNQV9TSEFSRURfQlVGRkVSYCBhbmQgYFBBR0VfUE9PTGApIG11c3QgYmUgZW5hYmxlZCB0byB0ZXN0IHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNToxMjoyOC42MjA3MzI5MTZaIiwiU2VxIjo1OSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg1NzgzNjIzNzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNToxMjoyOC42MjE0MzAwODZaIiwiU2VxIjo2MCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6ODU3NzY2MDE3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVwbGFjZXMgYSBsaW5rZWQgbGlzdCBhbmQgYSBtdXRleCB3aXRoIGFuIHhhcnJheSBmb3IgbWFuYWdpbmcgZG1hYnVmIGJpbmRpbmdzIGluIGBzdHJ1Y3QgbmV0ZGV2X25sX3NvY2tgLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgYWxsb2NhdGUgbmV3IGJ1ZmZlcnMgdGhhdCBjb3VsZCBiZSBsZWZ0IHVuaW5pdGlhbGl6ZWQuIEFueSBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyAoc3VjaCBhcyByYWNlIGNvbmRpdGlvbnMgZnJvbSB0aGUgcmVtb3ZlZCBtdXRleCwgdXNlLWFmdGVyLWZyZWUsIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMpIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3ZTViYzVmNjc0MzIxNmJiMjRmMzgxYzViZGE5NjE0YTA3NGFhMDg2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMTEgMTU6MTA6MTIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRkZXZfbmV0bGluay5oIGIvaW5jbHVkZS9uZXQvbmV0ZGV2X25ldGxpbmsuaFxuaW5kZXggMDc1OTYyZGJlNzQzYi4uNDVhNGE0ODJkNDJlNCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L25ldGRldl9uZXRsaW5rLmhcbisrKyBiL2luY2x1ZGUvbmV0L25ldGRldl9uZXRsaW5rLmhcbkBAIC0yLDExICsyLDEwIEBAXG4gI2lmbmRlZiBfX05FVF9ORVRERVZfTkVUTElOS19IXG4gI2RlZmluZSBfX05FVF9ORVRERVZfTkVUTElOS19IXG4gXG4tI2luY2x1ZGUgXHUwMDNjbGludXgvbGlzdC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgveGFycmF5LmhcdTAwM2VcbiBcbiBzdHJ1Y3QgbmV0ZGV2X25sX3NvY2sge1xuLVx0c3RydWN0IG11dGV4IGxvY2s7XG4tXHRzdHJ1Y3QgbGlzdF9oZWFkIGJpbmRpbmdzO1xuK1x0c3RydWN0IHhhcnJheSBiaW5kaW5ncztcbiB9O1xuIFxuICNlbmRpZlx0LyogX19ORVRfTkVUREVWX05FVExJTktfSCAqL1xuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Rldm1lbS5jIGIvbmV0L2NvcmUvZGV2bWVtLmNcbmluZGV4IDk1N2Q2Yjk2MjE2YjMuLmJkZjhhMDc5OWE0MjcgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9kZXZtZW0uY1xuKysrIGIvbmV0L2NvcmUvZGV2bWVtLmNcbkBAIC0xMzQsOCArMTM0LDggQEAgdm9pZCBuZXRfZGV2bWVtX3VuYmluZF9kbWFidWYoc3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKmJpbmRpbmcpXG4gXHQgKi9cbiBcdHN5bmNocm9uaXplX25ldCgpO1xuIFxuLVx0aWYgKGJpbmRpbmctXHUwMDNlbGlzdC5uZXh0KVxuLVx0XHRsaXN0X2RlbChcdTAwMjZiaW5kaW5nLVx1MDAzZWxpc3QpO1xuK1x0aWYgKGJpbmRpbmctXHUwMDNlc29ja19wcml2KVxuK1x0XHR4YV9lcmFzZShcdTAwMjZiaW5kaW5nLVx1MDAzZXNvY2tfcHJpdi1cdTAwM2ViaW5kaW5ncywgYmluZGluZy1cdTAwM2VpZCk7XG4gXG4gXHR4YV9mb3JfZWFjaChcdTAwMjZiaW5kaW5nLVx1MDAzZWJvdW5kX3J4cXMsIHhhX2lkeCwgcnhxKSB7XG4gXHRcdGNvbnN0IHN0cnVjdCBwcF9tZW1vcnlfcHJvdmlkZXJfcGFyYW1zIG1wX3BhcmFtcyA9IHtcbkBAIC0xOTMsNiArMTkzLDcgQEAgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICp2ZGV2LFxuIFx0c3RydWN0IGRtYV9idWYgKmRtYWJ1ZjtcbiBcdHVuc2lnbmVkIGludCBzZ19pZHgsIGk7XG4gXHR1bnNpZ25lZCBsb25nIHZpcnR1YWw7XG4rXHR2b2lkICpyZXM7XG4gXHRpbnQgZXJyO1xuIFxuIFx0aWYgKCFkbWFfZGV2KSB7XG5AQCAtMzI1LDEwICszMjYsMTcgQEAgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICp2ZGV2LFxuIFx0aWYgKGVyciBcdTAwM2MgMClcbiBcdFx0Z290byBlcnJfZnJlZV9jaHVua3M7XG4gXG4tXHRsaXN0X2FkZChcdTAwMjZiaW5kaW5nLVx1MDAzZWxpc3QsIFx1MDAyNnByaXYtXHUwMDNlYmluZGluZ3MpO1xuK1x0YmluZGluZy1cdTAwM2Vzb2NrX3ByaXYgPSBwcml2O1xuK1x0cmVzID0geGFfc3RvcmUoXHUwMDI2cHJpdi1cdTAwM2ViaW5kaW5ncywgYmluZGluZy1cdTAwM2VpZCwgYmluZGluZywgR0ZQX0tFUk5FTCk7XG4rXHRpZiAoeGFfaXNfZXJyKHJlcykpIHtcbitcdFx0ZXJyID0geGFfZXJyKHJlcyk7XG4rXHRcdGdvdG8gZXJyX2VyYXNlX2RtYWJ1Zl9iaW5kaW5ncztcbitcdH1cbiBcbiBcdHJldHVybiBiaW5kaW5nO1xuIFxuK2Vycl9lcmFzZV9kbWFidWZfYmluZGluZ3M6XG4rXHR4YV9lcmFzZShcdTAwMjZuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5ncywgYmluZGluZy1cdTAwM2VpZCk7XG4gZXJyX2ZyZWVfY2h1bmtzOlxuIFx0Z2VuX3Bvb2xfZm9yX2VhY2hfY2h1bmsoYmluZGluZy1cdTAwM2VjaHVua19wb29sLFxuIFx0XHRcdFx0bmV0X2Rldm1lbV9kbWFidWZfZnJlZV9jaHVua19vd25lciwgTlVMTCk7XG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2bWVtLmggYi9uZXQvY29yZS9kZXZtZW0uaFxuaW5kZXggMzg1MmE1NjAzNmNiNC4uYmY3N2U1YTlhOGZlNyAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL2Rldm1lbS5oXG4rKysgYi9uZXQvY29yZS9kZXZtZW0uaFxuQEAgLTQ5LDEwICs0OSwxMCBAQCBzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyB7XG4gXHQgKi9cbiBcdHN0cnVjdCBwZXJjcHVfcmVmIHJlZjtcbiBcbi1cdC8qIFRoZSBsaXN0IG9mIGJpbmRpbmdzIGN1cnJlbnRseSBhY3RpdmUuIFVzZWQgZm9yIG5ldGxpbmsgdG8gbm90aWZ5IHVzXG4rXHQvKiBUaGUgc29ja2V0IHByaXYgdGhpcyBiaW5kaW5nIGJlbG9uZ3MgdG8uIFVzZWQgZm9yIG5ldGxpbmsgdG8gbm90aWZ5IHVzXG4gXHQgKiBvZiB0aGUgdXNlciBkcm9wcGluZyB0aGUgYmluZC5cbiBcdCAqL1xuLVx0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xuK1x0c3RydWN0IG5ldGRldl9ubF9zb2NrICpzb2NrX3ByaXY7XG4gXG4gXHQvKiByeHEncyB0aGlzIGJpbmRpbmcgaXMgYWN0aXZlIG9uLiAqL1xuIFx0c3RydWN0IHhhcnJheSBib3VuZF9yeHFzO1xuZGlmZiAtLWdpdCBhL25ldC9jb3JlL25ldGRldi1nZW5sLmMgYi9uZXQvY29yZS9uZXRkZXYtZ2VubC5jXG5pbmRleCBjMTVkOGQ0Y2ExZjhmLi5kM2YzYTkxYTZkOTMyIDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvbmV0ZGV2LWdlbmwuY1xuKysrIGIvbmV0L2NvcmUvbmV0ZGV2LWdlbmwuY1xuQEAgLTEwNDQsMTMgKzEwNDQsMTEgQEAgaW50IG5ldGRldl9ubF9iaW5kX3J4X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdFx0Z290byBlcnJfZ2VubG1zZ19mcmVlO1xuIFx0fVxuIFxuLVx0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZWxvY2spO1xuLVxuIFx0ZXJyID0gMDtcbiBcdG5ldGRldiA9IG5ldGRldl9nZXRfYnlfaW5kZXhfbG9jayhnZW5sX2luZm9fbmV0KGluZm8pLCBpZmluZGV4KTtcbiBcdGlmICghbmV0ZGV2KSB7XG4gXHRcdGVyciA9IC1FTk9ERVY7XG4tXHRcdGdvdG8gZXJyX3VubG9ja19zb2NrO1xuK1x0XHRnb3RvIGVycl9nZW5sbXNnX2ZyZWU7XG4gXHR9XG4gXHRpZiAoIW5ldGlmX2RldmljZV9wcmVzZW50KG5ldGRldikpXG4gXHRcdGVyciA9IC1FTk9ERVY7XG5AQCAtMTEwMiw4ICsxMTAwLDYgQEAgaW50IG5ldGRldl9ubF9iaW5kX3J4X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcbiBcdG5ldGRldl91bmxvY2sobmV0ZGV2KTtcbiBcbi1cdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZWxvY2spO1xuLVxuIFx0cmV0dXJuIGVyciBcdTAwM2MgMCA/IGVyciA6IDA7XG4gXG4gZXJyX3VuYmluZDpcbkBAIC0xMTEyLDggKzExMDgsNiBAQCBpbnQgbmV0ZGV2X25sX2JpbmRfcnhfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0Yml0bWFwX2ZyZWUocnhxX2JpdG1hcCk7XG4gZXJyX3VubG9jazpcbiBcdG5ldGRldl91bmxvY2sobmV0ZGV2KTtcbi1lcnJfdW5sb2NrX3NvY2s6XG4tXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2Vsb2NrKTtcbiBlcnJfZ2VubG1zZ19mcmVlOlxuIFx0bmxtc2dfZnJlZShyc3ApO1xuIFx0cmV0dXJuIGVycjtcbkBAIC0xMTg1LDEyICsxMTc5LDEwIEBAIGludCBuZXRkZXZfbmxfYmluZF90eF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRcdGdvdG8gZXJyX2dlbmxtc2dfZnJlZTtcbiBcdH1cbiBcbi1cdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2Vsb2NrKTtcbi1cbiBcdG5ldGRldiA9IG5ldGRldl9nZXRfYnlfaW5kZXhfbG9jayhnZW5sX2luZm9fbmV0KGluZm8pLCBpZmluZGV4KTtcbiBcdGlmICghbmV0ZGV2KSB7XG4gXHRcdGVyciA9IC1FTk9ERVY7XG4tXHRcdGdvdG8gZXJyX3VubG9ja19zb2NrO1xuK1x0XHRnb3RvIGVycl9nZW5sbXNnX2ZyZWU7XG4gXHR9XG4gXG4gXHRpZiAoIW5ldGlmX2RldmljZV9wcmVzZW50KG5ldGRldikpIHtcbkBAIC0xMjMzLDcgKzEyMjUsNiBAQCBpbnQgbmV0ZGV2X25sX2JpbmRfdHhfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0aWYgKGJpbmRfZGV2ICE9IG5ldGRldilcbiBcdFx0bmV0ZGV2X3VubG9jayhiaW5kX2Rldik7XG4gXHRuZXRkZXZfdW5sb2NrKG5ldGRldik7XG4tXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2Vsb2NrKTtcbiBcbiBcdHJldHVybiBnZW5sbXNnX3JlcGx5KHJzcCwgaW5mbyk7XG4gXG5AQCAtMTI0Miw4ICsxMjMzLDYgQEAgaW50IG5ldGRldl9ubF9iaW5kX3R4X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdFx0bmV0ZGV2X3VubG9jayhiaW5kX2Rldik7XG4gZXJyX3VubG9ja19uZXRkZXY6XG4gXHRuZXRkZXZfdW5sb2NrKG5ldGRldik7XG4tZXJyX3VubG9ja19zb2NrOlxuLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlbG9jayk7XG4gZXJyX2dlbmxtc2dfZnJlZTpcbiBcdG5sbXNnX2ZyZWUocnNwKTtcbiBcdHJldHVybiBlcnI7XG5AQCAtMTQxOCwxOSArMTQwNywxNyBAQCBpbnQgbmV0ZGV2X25sX3F1ZXVlX2NyZWF0ZV9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXG4gdm9pZCBuZXRkZXZfbmxfc29ja19wcml2X2luaXQoc3RydWN0IG5ldGRldl9ubF9zb2NrICpwcml2KVxuIHtcbi1cdElOSVRfTElTVF9IRUFEKFx1MDAyNnByaXYtXHUwMDNlYmluZGluZ3MpO1xuLVx0bXV0ZXhfaW5pdChcdTAwMjZwcml2LVx1MDAzZWxvY2spO1xuK1x0eGFfaW5pdChcdTAwMjZwcml2LVx1MDAzZWJpbmRpbmdzKTtcbiB9XG4gXG4gdm9pZCBuZXRkZXZfbmxfc29ja19wcml2X2Rlc3Ryb3koc3RydWN0IG5ldGRldl9ubF9zb2NrICpwcml2KVxuIHtcbiBcdHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpiaW5kaW5nO1xuLVx0c3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKnRlbXA7XG4gXHRuZXRkZXZpY2VfdHJhY2tlciBkZXZfdHJhY2tlcjtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XG4rXHR1bnNpZ25lZCBsb25nIHhhX2lkeDtcbiBcbi1cdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2Vsb2NrKTtcbi1cdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShiaW5kaW5nLCB0ZW1wLCBcdTAwMjZwcml2LVx1MDAzZWJpbmRpbmdzLCBsaXN0KSB7XG4rXHR4YV9mb3JfZWFjaChcdTAwMjZwcml2LVx1MDAzZWJpbmRpbmdzLCB4YV9pZHgsIGJpbmRpbmcpIHtcbiBcdFx0bXV0ZXhfbG9jayhcdTAwMjZiaW5kaW5nLVx1MDAzZWxvY2spO1xuIFx0XHRkZXYgPSBiaW5kaW5nLVx1MDAzZWRldjtcbiBcdFx0aWYgKCFkZXYpIHtcbkBAIC0xNDQ2LDcgKzE0MzMsNyBAQCB2b2lkIG5ldGRldl9ubF9zb2NrX3ByaXZfZGVzdHJveShzdHJ1Y3QgbmV0ZGV2X25sX3NvY2sgKnByaXYpXG4gXHRcdG5ldGRldl91bmxvY2soZGV2KTtcbiBcdFx0bmV0ZGV2X3B1dChkZXYsIFx1MDAyNmRldl90cmFja2VyKTtcbiBcdH1cbi1cdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZWxvY2spO1xuK1x0eGFfZGVzdHJveShcdTAwMjZwcml2LVx1MDAzZWJpbmRpbmdzKTtcbiB9XG4gXG4gc3RhdGljIGludCBuZXRkZXZfZ2VubF9uZXRkZXZpY2VfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYixcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE1OjEyOjI4LjYyMTQzMTMyNloiLCJTZXEiOjYxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NTc3NjI4OTM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIE5ldGRldiBOTCBTb2NrZXQgUmVmYWN0b3JpbmcqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayBkb3duIHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSBpbXByZXNzaW9uIGlzIHRoYXQgaXQncyBhIHJlbGF0aXZlbHkgZm9jdXNlZCByZWZhY3RvcmluZywgcHJpbWFyaWx5IGNlbnRlcmVkIGFyb3VuZCBhIGNoYW5nZSBpbiBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZXMuIFRoZSBjb3JlIG9mIHRoZSBtb2RpZmljYXRpb24gaXMgc2hpZnRpbmcgZnJvbSB0aGUgZXhpc3RpbmcgYGxpc3RfaGVhZGAgYW5kIG11dGV4IGFwcHJvYWNoIGZvciBtYW5hZ2luZyBuZXR3b3JrIGRldmljZSBiaW5kaW5ncyB3aXRoaW4gYHN0cnVjdCBuZXRkZXZfbmxfc29ja2AgdG8gYW4gYHhhcnJheWAuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0aGlzIGlzIGEgZ29vZCBtb3ZlLiBYYXJyYXlzIGFyZSBvZnRlbiBhIG1vcmUgZWZmaWNpZW50IGFuZCBzY2FsYWJsZSB3YXkgdG8gbWFuYWdlIGluZGV4ZWQgZGF0YSB0aGFuIGxpbmtlZCBsaXN0cywgZXNwZWNpYWxseSBpbiBhIGtlcm5lbCBjb250ZXh0IHdoZXJlIHBlcmZvcm1hbmNlIGFuZCBjb25jdXJyZW5jeSBhcmUgY3JpdGljYWwuIFRoZSBwYXRjaCB0b3VjaGVzIHRoZSBzdGFuZGFyZCBmdW5jdGlvbnMgYXNzb2NpYXRlZCB3aXRoIGJpbmRpbmcgYW5kIHVuYmluZGluZyBETUEgYnVmZmVycyBhbmQgdGhlIE5ldGxpbmsgc29ja2V0J3MgbGlmZWN5Y2xlIOKAkyBgbmV0X2Rldm1lbV91bmJpbmRfZG1hYnVmYCwgYG5ldF9kZXZtZW1fYmluZF9kbWFidWZgLCBgbmV0ZGV2X25sX2JpbmRfcnhfZG9pdGAsIGBuZXRkZXZfbmxfYmluZF90eF9kb2l0YCwgYG5ldGRldl9ubF9zb2NrX3ByaXZfaW5pdGAsIGFuZCBgbmV0ZGV2X25sX3NvY2tfcHJpdl9kZXN0cm95YC4gVGhhdCdzIHRvIGJlIGV4cGVjdGVkLCB0aGV5IHdvdWxkIG5lZWQgdG8gYmUgdXBkYXRlZCB0byB1c2UgdGhlIG5ldyBkYXRhIHN0cnVjdHVyZS5cblxuVGhlIGRpZmYgaXRzZWxmIHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCDigJMgYmFzaWNhbGx5LCBsaXN0IG1hbmlwdWxhdGlvbnMgZ2V0IHJlcGxhY2VkIHdpdGggY29ycmVzcG9uZGluZyB4YXJyYXkgb3BlcmF0aW9ucywgYW5kIHRoZSBtdXRleCBpcyBnb25lLiBDcnVjaWFsbHksIHRoZXJlJ3Mgbm8gYWRkaXRpb24gb2YgbmV3IGRhdGEgc3RydWN0dXJlcyB0aGF0IHdvdWxkIGJlIGV4cG9zZWQgdG8gdXNlcnNwYWNlLCBhbmQgbm8gbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyB0aGF0IGNvdWxkIGxlYWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIEZ1cnRoZXJtb3JlLCBJIHNlZSBubyBjaGFuZ2VzIHJlbGF0ZWQgdG8gYm91bmRzIGNoZWNraW5nIG9yIHRoZSBsZW5ndGhzIG9mIGFueXRoaW5nLiBUaGlzIGlzIGltcG9ydGFudDogYSBjbGVhbiByZWZhY3RvciBsaWtlIHRoaXMgaXMgbGVzcyBsaWtlbHkgdG8gaW50cm9kdWNlIHN1YnRsZSBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMuXG5cbk15IGNvbmNlcm4gbmF0dXJhbGx5IHNoaWZ0cyB0byB3aGF0ICpjb3VsZCogZ28gd3Jvbmcgd2l0aCBzdWNoIGEgY2hhbmdlLiBBbnkgaW50cm9kdWNlZCBidWdzIHdpbGwgbGlrZWx5IG1hbmlmZXN0IGFzIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMsIGRvdWJsZSBmcmVlcywgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlcywgb3IgcmFjZSBjb25kaXRpb25zIHN0ZW1taW5nIGZyb20gdGhlIHJlbW92YWwgb2YgdGhlIG11dGV4LiBIb3dldmVyLCB0aGF04oCZcyB3aGVyZSB0aGUga2VybmVsJ3MgbWVtb3J5IHNhZmV0eSBhbmQgY29uY3VycmVuY3kgdG9vbHMgY29tZSBpbnRvIHBsYXk6IEtBU0FOIGFuZCBMT0NLREVQIHNob3VsZCBjYXRjaCB0aG9zZSBpc3N1ZXMuIEknbSByZWFzb25hYmx5IGNvbmZpZGVudCBpbiB0aGlzIGNhc2UuXG5cbkkgaGF2ZSBqdXN0IHJ1biBvdmVyIHRoZSBjb2RlIGxvb2tpbmcgZm9yIGFueSBhcmVhcyB3aGVyZSBtZW1vcnkgbWlnaHQgYmUgdW5pbml0aWFsaXplZC4gU3BlY2lmaWNhbGx5LCBteSBxdWljayByZXZpZXcgaW5jbHVkZWQgYHhhX3N0b3JlYCBhbmQgYHhhX2VyYXNlYCwgaG93ZXZlciwgdGhvc2UgYXJlIGludGVybmFsIHhhcnJheSBmdW5jdGlvbnMsIHdoaWNoIG1pbmltaXplcyB0aGUgcHJvYmFiaWxpdHkgb2YgYSBsZWFrLiBUaGUgc29ja2V0IGl0c2VsZiBpcyBhbGxvY2F0ZWQgZWxzZXdoZXJlOyB0aGUgcGF0Y2ggb25seSBtb2RpZmllcyB0aGUgaW5pdGlhbGl6YXRpb24gcHJvY2VzcyBvZiB0aGUgYG5ldGRldl9ubF9zb2NrYCBzdHJ1Y3QgLSBgeGFfaW5pdGAgcmVwbGFjZXMgYElOSVRfTElTVF9IRUFEYCBhbmQgYG11dGV4X2luaXRgLiBUaGUgc2FtZSBhcHBsaWVzIHRvIHRoZSBgYmluZGluZ2Agc3RydWN0OiBgc29ja19wcml2YCByZXBsYWNlcyBgbGlzdGAuIE5vIHdvcnJpZXMgdGhlcmUsIGVpdGhlci5cblxuQmFzZWQgb24gdGhpcyBhc3Nlc3NtZW50LCBJJ2xsIGZsYWcgdGhpcyBhcyBgTmVlZHNLTVNBTj1mYWxzZWAuIEl0IGxvb2tzIGxpa2UgYSBzYWZlIGFuZCBzZW5zaWJsZSByZWZhY3RvcmluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDA5MywiT3V0cHV0VG9rZW5zIjoxNDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNTEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNToxMjozNy4xOTkwNjQwNjFaIiwiU2VxIjo2MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDI3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlcGxhY2VzIGEgbGlua2VkIGxpc3QgYW5kIGEgbXV0ZXggd2l0aCBhbiB4YXJyYXkgZm9yIG1hbmFnaW5nIGRtYWJ1ZiBiaW5kaW5ncyBpbiBgc3RydWN0IG5ldGRldl9ubF9zb2NrYC4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGFsbG9jYXRlIG5ldyBidWZmZXJzIHRoYXQgY291bGQgYmUgbGVmdCB1bmluaXRpYWxpemVkLiBBbnkgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgcmFjZSBjb25kaXRpb25zIGZyb20gdGhlIHJlbW92ZWQgbXV0ZXgsIHVzZS1hZnRlci1mcmVlLCBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzKSB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVwbGFjZXMgYSBsaW5rZWQgbGlzdCBhbmQgYSBtdXRleCB3aXRoIGFuIHhhcnJheSBmb3IgbWFuYWdpbmcgZG1hYnVmIGJpbmRpbmdzIGluIGBzdHJ1Y3QgbmV0ZGV2X25sX3NvY2tgLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgYWxsb2NhdGUgbmV3IGJ1ZmZlcnMgdGhhdCBjb3VsZCBiZSBsZWZ0IHVuaW5pdGlhbGl6ZWQuIEFueSBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyAoc3VjaCBhcyByYWNlIGNvbmRpdGlvbnMgZnJvbSB0aGUgcmVtb3ZlZCBtdXRleCwgdXNlLWFmdGVyLWZyZWUsIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMpIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowwsk9h[1] Phase: Succeeded StartedAt: 2026-08-11 15:12:48 +0000 UTC FinishedAt: 2026-08-11 15:12:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwsk9h[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-11 15:12:48 +0000 UTC FinishedAt: 2026-08-11 15:12:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwsk9h[2] Phase: Succeeded StartedAt: 2026-08-11 15:12:48 +0000 UTC FinishedAt: 2026-08-11 18:54:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwsk9h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55d20f50a221bdd7b19befc6e3685a2ef5d4c07b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_nl_bind_rx_doit","netdev_nl_bind_tx_doit","net_devmem_bind_dmabuf","net_devmem_unbind_dmabuf","netdev_nl_sock_priv_init","netdev_nl_sock_priv_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"55d20f50a221bdd7b19befc6e3685a2ef5d4c07b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"75d14da5-9883-4432-b1bb-ff0dc993fc5d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-11 15:12:48 +0000 UTC FinishedAt: 2026-08-11 18:54:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"55d20f50a221bdd7b19befc6e3685a2ef5d4c07b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_nl_bind_rx_doit","netdev_nl_bind_tx_doit","net_devmem_bind_dmabuf","net_devmem_unbind_dmabuf","netdev_nl_sock_priv_init","netdev_nl_sock_priv_destroy"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"55d20f50a221bdd7b19befc6e3685a2ef5d4c07b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"75d14da5-9883-4432-b1bb-ff0dc993fc5d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowwsk9h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55d20f50a221bdd7b19befc6e3685a2ef5d4c07b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_nl_bind_rx_doit","netdev_nl_bind_tx_doit","net_devmem_bind_dmabuf","net_devmem_unbind_dmabuf","netdev_nl_sock_priv_init","netdev_nl_sock_priv_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"55d20f50a221bdd7b19befc6e3685a2ef5d4c07b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"75d14da5-9883-4432-b1bb-ff0dc993fc5d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-11 15:12:48 +0000 UTC FinishedAt: 2026-08-11 15:12:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwsk9h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55d20f50a221bdd7b19befc6e3685a2ef5d4c07b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_nl_bind_rx_doit","netdev_nl_bind_tx_doit","net_devmem_bind_dmabuf","net_devmem_unbind_dmabuf","netdev_nl_sock_priv_init","netdev_nl_sock_priv_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"55d20f50a221bdd7b19befc6e3685a2ef5d4c07b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"75d14da5-9883-4432-b1bb-ff0dc993fc5d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-11 15:12:48 +0000 UTC FinishedAt: 2026-08-11 15:12:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"55d20f50a221bdd7b19befc6e3685a2ef5d4c07b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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-workflowwsk9h/series-workflowwsk9h-convert-artifact-651390561/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwsk9h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55d20f50a221bdd7b19befc6e3685a2ef5d4c07b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_nl_bind_rx_doit","netdev_nl_bind_tx_doit","net_devmem_bind_dmabuf","net_devmem_unbind_dmabuf","netdev_nl_sock_priv_init","netdev_nl_sock_priv_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"55d20f50a221bdd7b19befc6e3685a2ef5d4c07b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"75d14da5-9883-4432-b1bb-ff0dc993fc5d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-11 15:12:58 +0000 UTC FinishedAt: 2026-08-11 15:30:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwsk9h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55d20f50a221bdd7b19befc6e3685a2ef5d4c07b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_nl_bind_rx_doit","netdev_nl_bind_tx_doit","net_devmem_bind_dmabuf","net_devmem_unbind_dmabuf","netdev_nl_sock_priv_init","netdev_nl_sock_priv_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"55d20f50a221bdd7b19befc6e3685a2ef5d4c07b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"75d14da5-9883-4432-b1bb-ff0dc993fc5d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-11 15:12:58 +0000 UTC FinishedAt: 2026-08-11 15:30:39 +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:*e38d997d-a11f-4a19-8946-73e12dcc4980,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-workflowwsk9h/series-workflowwsk9h-convert-artifact-651390561/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": "9eb22b1f-5c03-447d-9ee9-fc908c450ec1", "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-workflowwsk9h/series-workflowwsk9h-build-action-1737702287/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwsk9h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55d20f50a221bdd7b19befc6e3685a2ef5d4c07b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_nl_bind_rx_doit","netdev_nl_bind_tx_doit","net_devmem_bind_dmabuf","net_devmem_unbind_dmabuf","netdev_nl_sock_priv_init","netdev_nl_sock_priv_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"55d20f50a221bdd7b19befc6e3685a2ef5d4c07b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"75d14da5-9883-4432-b1bb-ff0dc993fc5d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-11 15:12:58 +0000 UTC FinishedAt: 2026-08-11 15:30: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:*e38d997d-a11f-4a19-8946-73e12dcc4980,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-workflowwsk9h/series-workflowwsk9h-convert-artifact-651390561/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": "9eb22b1f-5c03-447d-9ee9-fc908c450ec1", "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-workflowwsk9h/series-workflowwsk9h-build-action-1737702287/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwsk9h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55d20f50a221bdd7b19befc6e3685a2ef5d4c07b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_nl_bind_rx_doit","netdev_nl_bind_tx_doit","net_devmem_bind_dmabuf","net_devmem_unbind_dmabuf","netdev_nl_sock_priv_init","netdev_nl_sock_priv_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"55d20f50a221bdd7b19befc6e3685a2ef5d4c07b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"75d14da5-9883-4432-b1bb-ff0dc993fc5d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-11 15:30:39 +0000 UTC FinishedAt: 2026-08-11 15:30:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwsk9h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55d20f50a221bdd7b19befc6e3685a2ef5d4c07b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_nl_bind_rx_doit","netdev_nl_bind_tx_doit","net_devmem_bind_dmabuf","net_devmem_unbind_dmabuf","netdev_nl_sock_priv_init","netdev_nl_sock_priv_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"55d20f50a221bdd7b19befc6e3685a2ef5d4c07b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"75d14da5-9883-4432-b1bb-ff0dc993fc5d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-11 15:30:39 +0000 UTC FinishedAt: 2026-08-11 15:30:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwsk9h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55d20f50a221bdd7b19befc6e3685a2ef5d4c07b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_nl_bind_rx_doit","netdev_nl_bind_tx_doit","net_devmem_bind_dmabuf","net_devmem_unbind_dmabuf","netdev_nl_sock_priv_init","netdev_nl_sock_priv_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"55d20f50a221bdd7b19befc6e3685a2ef5d4c07b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"75d14da5-9883-4432-b1bb-ff0dc993fc5d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-11 15:30:39 +0000 UTC FinishedAt: 2026-08-11 15:30:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwsk9h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55d20f50a221bdd7b19befc6e3685a2ef5d4c07b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_nl_bind_rx_doit","netdev_nl_bind_tx_doit","net_devmem_bind_dmabuf","net_devmem_unbind_dmabuf","netdev_nl_sock_priv_init","netdev_nl_sock_priv_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"55d20f50a221bdd7b19befc6e3685a2ef5d4c07b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"75d14da5-9883-4432-b1bb-ff0dc993fc5d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-11 15:30:39 +0000 UTC FinishedAt: 2026-08-11 15:30:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"55d20f50a221bdd7b19befc6e3685a2ef5d4c07b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"75d14da5-9883-4432-b1bb-ff0dc993fc5d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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-workflowwsk9h/series-workflowwsk9h-convert-artifact-1841331636/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwsk9h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55d20f50a221bdd7b19befc6e3685a2ef5d4c07b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_nl_bind_rx_doit","netdev_nl_bind_tx_doit","net_devmem_bind_dmabuf","net_devmem_unbind_dmabuf","netdev_nl_sock_priv_init","netdev_nl_sock_priv_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"55d20f50a221bdd7b19befc6e3685a2ef5d4c07b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"75d14da5-9883-4432-b1bb-ff0dc993fc5d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-11 15:30:49 +0000 UTC FinishedAt: 2026-08-11 15:33:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwsk9h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55d20f50a221bdd7b19befc6e3685a2ef5d4c07b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_nl_bind_rx_doit","netdev_nl_bind_tx_doit","net_devmem_bind_dmabuf","net_devmem_unbind_dmabuf","netdev_nl_sock_priv_init","netdev_nl_sock_priv_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"55d20f50a221bdd7b19befc6e3685a2ef5d4c07b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"75d14da5-9883-4432-b1bb-ff0dc993fc5d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-11 15:30:49 +0000 UTC FinishedAt: 2026-08-11 15:32:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*9eb22b1f-5c03-447d-9ee9-fc908c450ec1,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-workflowwsk9h/series-workflowwsk9h-build-action-1737702287/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-workflowwsk9h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55d20f50a221bdd7b19befc6e3685a2ef5d4c07b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_nl_bind_rx_doit","netdev_nl_bind_tx_doit","net_devmem_bind_dmabuf","net_devmem_unbind_dmabuf","netdev_nl_sock_priv_init","netdev_nl_sock_priv_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"55d20f50a221bdd7b19befc6e3685a2ef5d4c07b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"75d14da5-9883-4432-b1bb-ff0dc993fc5d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-11 15:33:06 +0000 UTC FinishedAt: 2026-08-11 15:33:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwsk9h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55d20f50a221bdd7b19befc6e3685a2ef5d4c07b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_nl_bind_rx_doit","netdev_nl_bind_tx_doit","net_devmem_bind_dmabuf","net_devmem_unbind_dmabuf","netdev_nl_sock_priv_init","netdev_nl_sock_priv_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"55d20f50a221bdd7b19befc6e3685a2ef5d4c07b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"75d14da5-9883-4432-b1bb-ff0dc993fc5d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-11 15:33:06 +0000 UTC FinishedAt: 2026-08-11 15:33:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwsk9h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55d20f50a221bdd7b19befc6e3685a2ef5d4c07b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_nl_bind_rx_doit","netdev_nl_bind_tx_doit","net_devmem_bind_dmabuf","net_devmem_unbind_dmabuf","netdev_nl_sock_priv_init","netdev_nl_sock_priv_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"55d20f50a221bdd7b19befc6e3685a2ef5d4c07b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"75d14da5-9883-4432-b1bb-ff0dc993fc5d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-11 15:33:06 +0000 UTC FinishedAt: 2026-08-11 15:50:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwsk9h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55d20f50a221bdd7b19befc6e3685a2ef5d4c07b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_nl_bind_rx_doit","netdev_nl_bind_tx_doit","net_devmem_bind_dmabuf","net_devmem_unbind_dmabuf","netdev_nl_sock_priv_init","netdev_nl_sock_priv_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"55d20f50a221bdd7b19befc6e3685a2ef5d4c07b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"75d14da5-9883-4432-b1bb-ff0dc993fc5d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-11 15:33:06 +0000 UTC FinishedAt: 2026-08-11 15:50:40 +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:*e38d997d-a11f-4a19-8946-73e12dcc4980,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-workflowwsk9h/series-workflowwsk9h-convert-artifact-1841331636/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": "57b51597-0316-472b-be16-39d7e209925f", "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-workflowwsk9h/series-workflowwsk9h-build-action-3725254528/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwsk9h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55d20f50a221bdd7b19befc6e3685a2ef5d4c07b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_nl_bind_rx_doit","netdev_nl_bind_tx_doit","net_devmem_bind_dmabuf","net_devmem_unbind_dmabuf","netdev_nl_sock_priv_init","netdev_nl_sock_priv_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"55d20f50a221bdd7b19befc6e3685a2ef5d4c07b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"75d14da5-9883-4432-b1bb-ff0dc993fc5d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-11 15:33:06 +0000 UTC FinishedAt: 2026-08-11 15:50:30 +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:*e38d997d-a11f-4a19-8946-73e12dcc4980,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-workflowwsk9h/series-workflowwsk9h-convert-artifact-1841331636/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": "57b51597-0316-472b-be16-39d7e209925f", "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-workflowwsk9h/series-workflowwsk9h-build-action-3725254528/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwsk9h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55d20f50a221bdd7b19befc6e3685a2ef5d4c07b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_nl_bind_rx_doit","netdev_nl_bind_tx_doit","net_devmem_bind_dmabuf","net_devmem_unbind_dmabuf","netdev_nl_sock_priv_init","netdev_nl_sock_priv_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"55d20f50a221bdd7b19befc6e3685a2ef5d4c07b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"75d14da5-9883-4432-b1bb-ff0dc993fc5d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-11 15:50:40 +0000 UTC FinishedAt: 2026-08-11 15:50:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwsk9h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55d20f50a221bdd7b19befc6e3685a2ef5d4c07b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_nl_bind_rx_doit","netdev_nl_bind_tx_doit","net_devmem_bind_dmabuf","net_devmem_unbind_dmabuf","netdev_nl_sock_priv_init","netdev_nl_sock_priv_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"55d20f50a221bdd7b19befc6e3685a2ef5d4c07b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"75d14da5-9883-4432-b1bb-ff0dc993fc5d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-11 15:50:40 +0000 UTC FinishedAt: 2026-08-11 15:50:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwsk9h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55d20f50a221bdd7b19befc6e3685a2ef5d4c07b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_nl_bind_rx_doit","netdev_nl_bind_tx_doit","net_devmem_bind_dmabuf","net_devmem_unbind_dmabuf","netdev_nl_sock_priv_init","netdev_nl_sock_priv_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"55d20f50a221bdd7b19befc6e3685a2ef5d4c07b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"75d14da5-9883-4432-b1bb-ff0dc993fc5d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-11 15:50:40 +0000 UTC FinishedAt: 2026-08-11 15:52:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwsk9h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55d20f50a221bdd7b19befc6e3685a2ef5d4c07b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_nl_bind_rx_doit","netdev_nl_bind_tx_doit","net_devmem_bind_dmabuf","net_devmem_unbind_dmabuf","netdev_nl_sock_priv_init","netdev_nl_sock_priv_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"55d20f50a221bdd7b19befc6e3685a2ef5d4c07b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"75d14da5-9883-4432-b1bb-ff0dc993fc5d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-11 15:50:40 +0000 UTC FinishedAt: 2026-08-11 15:52:48 +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:*57b51597-0316-472b-be16-39d7e209925f,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-workflowwsk9h/series-workflowwsk9h-build-action-3725254528/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-workflowwsk9h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55d20f50a221bdd7b19befc6e3685a2ef5d4c07b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_nl_bind_rx_doit","netdev_nl_bind_tx_doit","net_devmem_bind_dmabuf","net_devmem_unbind_dmabuf","netdev_nl_sock_priv_init","netdev_nl_sock_priv_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"55d20f50a221bdd7b19befc6e3685a2ef5d4c07b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"75d14da5-9883-4432-b1bb-ff0dc993fc5d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-11 15:52:58 +0000 UTC FinishedAt: 2026-08-11 18:54:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwsk9h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55d20f50a221bdd7b19befc6e3685a2ef5d4c07b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_nl_bind_rx_doit","netdev_nl_bind_tx_doit","net_devmem_bind_dmabuf","net_devmem_unbind_dmabuf","netdev_nl_sock_priv_init","netdev_nl_sock_priv_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"55d20f50a221bdd7b19befc6e3685a2ef5d4c07b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"75d14da5-9883-4432-b1bb-ff0dc993fc5d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-11 15:52:58 +0000 UTC FinishedAt: 2026-08-11 18:54:30 +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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_nl_bind_rx_doit","netdev_nl_bind_tx_doit","net_devmem_bind_dmabuf","net_devmem_unbind_dmabuf","netdev_nl_sock_priv_init","netdev_nl_sock_priv_destroy"],"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:*9eb22b1f-5c03-447d-9ee9-fc908c450ec1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*57b51597-0316-472b-be16-39d7e209925f,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-workflowwsk9h/series-workflowwsk9h-build-action-1737702287/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-workflowwsk9h/series-workflowwsk9h-build-action-3725254528/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowwsk9h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55d20f50a221bdd7b19befc6e3685a2ef5d4c07b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_nl_bind_rx_doit","netdev_nl_bind_tx_doit","net_devmem_bind_dmabuf","net_devmem_unbind_dmabuf","netdev_nl_sock_priv_init","netdev_nl_sock_priv_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"55d20f50a221bdd7b19befc6e3685a2ef5d4c07b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"75d14da5-9883-4432-b1bb-ff0dc993fc5d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-11 15:52:58 +0000 UTC FinishedAt: 2026-08-11 15:53:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwsk9h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55d20f50a221bdd7b19befc6e3685a2ef5d4c07b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_nl_bind_rx_doit","netdev_nl_bind_tx_doit","net_devmem_bind_dmabuf","net_devmem_unbind_dmabuf","netdev_nl_sock_priv_init","netdev_nl_sock_priv_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"55d20f50a221bdd7b19befc6e3685a2ef5d4c07b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"75d14da5-9883-4432-b1bb-ff0dc993fc5d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-11 15:52:58 +0000 UTC FinishedAt: 2026-08-11 15:53:03 +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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_nl_bind_rx_doit","netdev_nl_bind_tx_doit","net_devmem_bind_dmabuf","net_devmem_unbind_dmabuf","netdev_nl_sock_priv_init","netdev_nl_sock_priv_destroy"],"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-workflowwsk9h/series-workflowwsk9h-convert-artifact-1831807197/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwsk9h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55d20f50a221bdd7b19befc6e3685a2ef5d4c07b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_nl_bind_rx_doit","netdev_nl_bind_tx_doit","net_devmem_bind_dmabuf","net_devmem_unbind_dmabuf","netdev_nl_sock_priv_init","netdev_nl_sock_priv_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"55d20f50a221bdd7b19befc6e3685a2ef5d4c07b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"75d14da5-9883-4432-b1bb-ff0dc993fc5d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-11 15:52:58 +0000 UTC FinishedAt: 2026-08-11 15:52:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwsk9h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55d20f50a221bdd7b19befc6e3685a2ef5d4c07b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_nl_bind_rx_doit","netdev_nl_bind_tx_doit","net_devmem_bind_dmabuf","net_devmem_unbind_dmabuf","netdev_nl_sock_priv_init","netdev_nl_sock_priv_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"55d20f50a221bdd7b19befc6e3685a2ef5d4c07b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"75d14da5-9883-4432-b1bb-ff0dc993fc5d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-11 15:52:58 +0000 UTC FinishedAt: 2026-08-11 15:52:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwsk9h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55d20f50a221bdd7b19befc6e3685a2ef5d4c07b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_nl_bind_rx_doit","netdev_nl_bind_tx_doit","net_devmem_bind_dmabuf","net_devmem_unbind_dmabuf","netdev_nl_sock_priv_init","netdev_nl_sock_priv_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"55d20f50a221bdd7b19befc6e3685a2ef5d4c07b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"75d14da5-9883-4432-b1bb-ff0dc993fc5d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-11 15:52:58 +0000 UTC FinishedAt: 2026-08-11 15:52:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwsk9h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55d20f50a221bdd7b19befc6e3685a2ef5d4c07b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_nl_bind_rx_doit","netdev_nl_bind_tx_doit","net_devmem_bind_dmabuf","net_devmem_unbind_dmabuf","netdev_nl_sock_priv_init","netdev_nl_sock_priv_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"55d20f50a221bdd7b19befc6e3685a2ef5d4c07b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"75d14da5-9883-4432-b1bb-ff0dc993fc5d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-11 15:53:08 +0000 UTC FinishedAt: 2026-08-11 18:54:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwsk9h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55d20f50a221bdd7b19befc6e3685a2ef5d4c07b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_nl_bind_rx_doit","netdev_nl_bind_tx_doit","net_devmem_bind_dmabuf","net_devmem_unbind_dmabuf","netdev_nl_sock_priv_init","netdev_nl_sock_priv_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"55d20f50a221bdd7b19befc6e3685a2ef5d4c07b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"75d14da5-9883-4432-b1bb-ff0dc993fc5d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-11 15:53:08 +0000 UTC FinishedAt: 2026-08-11 18:54:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*9eb22b1f-5c03-447d-9ee9-fc908c450ec1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*57b51597-0316-472b-be16-39d7e209925f,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-workflowwsk9h/series-workflowwsk9h-build-action-1737702287/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-workflowwsk9h/series-workflowwsk9h-build-action-3725254528/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-workflowwsk9h/series-workflowwsk9h-convert-artifact-1831807197/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,}