Name: series-workflowttn4t Phase: Running StartedAt: 2026-08-07 18:29:56 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowttn4t[0] Phase: Running StartedAt: 2026-08-07 18:29:56 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowttn4t[0].run-triage Phase: Running StartedAt: 2026-08-07 18:29:56 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowttn4t[0].run-triage(0) Phase: Running StartedAt: 2026-08-07 18:29:56 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "wireless-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git", "commit_hash": "4f25071afe9218aaae1c63fbf75e229aa6405319", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CFG80211", "BRCMFMAC", "BRCMFMAC_PCIE", "BRCMFMAC_USB", "BRCMFMAC_SDIO" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "wireless-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git", "commit_hash": "4f25071afe9218aaae1c63fbf75e229aa6405319", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CFG80211", "BRCMFMAC", "BRCMFMAC_PCIE", "BRCMFMAC_USB", "BRCMFMAC_SDIO" ], "series_id": "fa6af8b5-e3d1-48bb-babd-63cd4e982254" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "brcmf_cyw_external_auth", "nl80211_external_auth" ], "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+CgkJCTx0ZD4yMDI2LzA4LzA3IDE4OjQ5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MTVtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDRkc4MDIxMSYjMzQ7LAogICAgJiMzNDtCUkNNRk1BQyYjMzQ7LAogICAgJiMzNDtCUkNNRk1BQ19QQ0lFJiMzNDssCiAgICAmIzM0O0JSQ01GTUFDX1VTQiYjMzQ7LAogICAgJiMzNDtCUkNNRk1BQ19TRElPJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnJjbWZfY3l3X2V4dGVybmFsX2F1dGgmIzM0OywKICAgICYjMzQ7bmw4MDIxMV9leHRlcm5hbF9hdXRoJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgbGVhayB0byB0aGUgZGV2aWNlIGZpcm13YXJlIGJ5IGZ1bGx5IHplcm8taW5pdGlhbGl6aW5nIHRoZSBgYXV0aF9zdGF0dXNgIHN0YWNrIHN0cnVjdHVyZSAoYD0ge31gKSBiZWZvcmUgaXQgaXMgcGFzc2VkIHRvIGBicmNtZl9maWxfaW92YXJfZGF0YV9zZXQoKWAuIEl0IGFsc28gY29uZGl0aW9uYWxseSBjb3BpZXMgYHBhcmFtcy1cdTAwM2VwbWtpZGAgaW50byB0aGUgc3RydWN0dXJlLCB3aGljaCBpcyBndWFyYW50ZWVkIHRvIGJlIGZ1bGx5IGluaXRpYWxpemVkIGFuZCBvZiB0aGUgY29ycmVjdCBsZW5ndGggKGBXTEFOX1BNS0lEX0xFTmApIGR1ZSB0byBuZXRsaW5rIGF0dHJpYnV0ZSB2YWxpZGF0aW9uIChgTkxBX1BPTElDWV9FWEFDVF9MRU5fV0FSTmAgb24gYE5MODAyMTFfQVRUUl9QTUtJRGApLiBTaW5jZSBhbGwgc3RhY2sgc3RydWN0dXJlcyB0b3VjaGVkIGJ5IHRoZSBwYXRjaCBhcmUgbm93IGZ1bGx5IHplcm9lZCBhbmQgaW5pdGlhbGl6ZWQsIHRoZSBwYXRjaCBjb21wbGV0ZWx5IHJlc29sdmVzIHRoZSB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZSBhbmQgZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIHVuaW5pdGlhbGl6ZWQgc3RhY2sgbWVtb3J5IGxlYWsgaW4gYGJyY21mX2N5d19leHRlcm5hbF9hdXRoYCBieSB6ZXJvLWluaXRpYWxpemluZyBgYXV0aF9zdGF0dXNgIGFuZCBwcm9wZXJseSBjb3B5aW5nIGBwbWtpZGAuIFRoZSBmdW5jdGlvbiBpcyByZWFjaGFibGUgdmlhIHRoZSBgTkw4MDIxMV9DTURfRVhURVJOQUxfQVVUSGAgbmV0bGluayBjb21tYW5kIHdoZW4gYSBCcm9hZGNvbSBGdWxsTUFDIGRldmljZSAoZS5nLiwgZW11bGF0ZWQgdmlhIFBDSSBvciBVU0IpIGlzIHJlZ2lzdGVyZWQuIFRoZSBkcml2ZXIgY2FuIGJlIGZ1enplZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdXNpbmcgc3l6a2FsbGVyJiMzOTtzIFBDSS9VU0IgZW11bGF0aW9uIGNhcGFiaWxpdGllcywgd2hpY2ggY2FuIG1vY2sgdGhlIGZpcm13YXJlIGxvYWRpbmcgcHJvY2VzcyBhbmQgZGV2aWNlIGluaXRpYWxpemF0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE4OjQ5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMjMzMDIzMDAyOGViMDk1MjkwNDM2ZjYyNTM0ZTRlNTY1YjgyODI2ZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDcgMTg6NDk6MDAgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L2NvcmUuY1xuaW5kZXggODczNzU0YmU1MTc0Yi4uYzg2ZDBiZGRlODMyNiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvY29yZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L2NvcmUuY1xuQEAgLTIwMCw3ICYjNDM7MjAwLDcgQEAgYnJjbWZfY3l3X2V4dGVybmFsX2F1dGgoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiB7XG4gXHRzdHJ1Y3QgYnJjbWZfaWYgKmlmcDtcbiBcdHN0cnVjdCBicmNtZl9wdWIgKmRydnI7XG4tXHRzdHJ1Y3QgYnJjbWZfYXV0aF9yZXFfc3RhdHVzX2xlIGF1dGhfc3RhdHVzO1xuJiM0MztcdHN0cnVjdCBicmNtZl9hdXRoX3JlcV9zdGF0dXNfbGUgYXV0aF9zdGF0dXMgPSB7fTtcbiBcdGludCByZXQgPSAwO1xuIFxuIFx0YnJjbWZfZGJnKFRSQUNFLCBcJiMzNDtFbnRlclxcblwmIzM0Oyk7XG5AQCAtMjA4LDYgJiM0MzsyMDgsOSBAQCBicmNtZl9jeXdfZXh0ZXJuYWxfYXV0aChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0aWZwID0gbmV0ZGV2X3ByaXYoZGV2KTtcbiBcdGRydnIgPSBpZnAtXHUwMDNlZHJ2cjtcbiBcdGlmIChwYXJhbXMtXHUwMDNlc3RhdHVzID09IFdMQU5fU1RBVFVTX1NVQ0NFU1MpIHtcbiYjNDM7XHRcdGlmIChwYXJhbXMtXHUwMDNlcG1raWQpXG4mIzQzO1x0XHRcdG1lbWNweShhdXRoX3N0YXR1cy5wbWtpZCwgcGFyYW1zLVx1MDAzZXBta2lkLFxuJiM0MztcdFx0XHQgICAgICAgV0xBTl9QTUtJRF9MRU4pO1xuIFx0XHRhdXRoX3N0YXR1cy5mbGFncyA9IGNwdV90b19sZTE2KEJSQ01GX0VYVEFVVEhfU1VDQ0VTUyk7XG4gXHR9IGVsc2Uge1xuIFx0XHRicGh5X2VycihkcnZyLCBcJiMzNDtFeHRlcm5hbCBhdXRoZW50aWNhdGlvbiBmYWlsZWQ6IHN0YXR1cz0lZFxcblwmIzM0OyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxODo0OTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xM208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NGRzgwMjExJiMzNDssCiAgICAmIzM0O0JSQ01GTUFDJiMzNDssCiAgICAmIzM0O0JSQ01GTUFDX1BDSUUmIzM0OywKICAgICYjMzQ7QlJDTUZNQUNfVVNCJiMzNDssCiAgICAmIzM0O0JSQ01GTUFDX1NESU8mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticmNtZl9jeXdfZXh0ZXJuYWxfYXV0aCYjMzQ7LAogICAgJiMzNDtubDgwMjExX2V4dGVybmFsX2F1dGgmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gdW5pbml0aWFsaXplZCBzdGFjayBtZW1vcnkgbGVhayBpbiBgYnJjbWZfY3l3X2V4dGVybmFsX2F1dGhgIGJ5IHplcm8taW5pdGlhbGl6aW5nIGBhdXRoX3N0YXR1c2AgYW5kIHByb3Blcmx5IGNvcHlpbmcgYHBta2lkYC4gVGhlIGZ1bmN0aW9uIGlzIHJlYWNoYWJsZSB2aWEgdGhlIGBOTDgwMjExX0NNRF9FWFRFUk5BTF9BVVRIYCBuZXRsaW5rIGNvbW1hbmQgd2hlbiBhIEJyb2FkY29tIEZ1bGxNQUMgZGV2aWNlIChlLmcuLCBlbXVsYXRlZCB2aWEgUENJIG9yIFVTQikgaXMgcmVnaXN0ZXJlZC4gVGhlIGRyaXZlciBjYW4gYmUgZnV6emVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB1c2luZyBzeXprYWxsZXImIzM5O3MgUENJL1VTQiBlbXVsYXRpb24gY2FwYWJpbGl0aWVzLCB3aGljaCBjYW4gbW9jayB0aGUgZmlybXdhcmUgbG9hZGluZyBwcm9jZXNzIGFuZCBkZXZpY2UgaW5pdGlhbGl6YXRpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAyMzMwMjMwMDI4ZWIwOTUyOTA0MzZmNjI1MzRlNGU1NjViODI4MjZmCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBBdWcgNyAxODo0OTowMCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvY29yZS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmMKaW5kZXggODczNzU0YmU1MTc0Yi4uYzg2ZDBiZGRlODMyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmMKQEAgLTIwMCw3ICYjNDM7MjAwLDcgQEAgYnJjbWZfY3l3X2V4dGVybmFsX2F1dGgoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIHsKIAlzdHJ1Y3QgYnJjbWZfaWYgKmlmcDsKIAlzdHJ1Y3QgYnJjbWZfcHViICpkcnZyOwotCXN0cnVjdCBicmNtZl9hdXRoX3JlcV9zdGF0dXNfbGUgYXV0aF9zdGF0dXM7CiYjNDM7CXN0cnVjdCBicmNtZl9hdXRoX3JlcV9zdGF0dXNfbGUgYXV0aF9zdGF0dXMgPSB7fTsKIAlpbnQgcmV0ID0gMDsKIAogCWJyY21mX2RiZyhUUkFDRSwgJiMzNDtFbnRlclxuJiMzNDspOwpAQCAtMjA4LDYgJiM0MzsyMDgsOSBAQCBicmNtZl9jeXdfZXh0ZXJuYWxfYXV0aChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCWlmcCA9IG5ldGRldl9wcml2KGRldik7CiAJZHJ2ciA9IGlmcC0mZ3Q7ZHJ2cjsKIAlpZiAocGFyYW1zLSZndDtzdGF0dXMgPT0gV0xBTl9TVEFUVVNfU1VDQ0VTUykgewomIzQzOwkJaWYgKHBhcmFtcy0mZ3Q7cG1raWQpCiYjNDM7CQkJbWVtY3B5KGF1dGhfc3RhdHVzLnBta2lkLCBwYXJhbXMtJmd0O3Bta2lkLAomIzQzOwkJCSAgICAgICBXTEFOX1BNS0lEX0xFTik7CiAJCWF1dGhfc3RhdHVzLmZsYWdzID0gY3B1X3RvX2xlMTYoQlJDTUZfRVhUQVVUSF9TVUNDRVNTKTsKIAl9IGVsc2UgewogCQlicGh5X2VycihkcnZyLCAmIzM0O0V4dGVybmFsIGF1dGhlbnRpY2F0aW9uIGZhaWxlZDogc3RhdHVzPSVkXG4mIzM0OywKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTg6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI1MwoJCQkJCQkJb3V0cHV0OiA1MgoJCQkJCQkJdGhvdWdodHM6IDI2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBCcm9hZGNvbSBXaS1GaSBEcml2ZXIgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggdGhhdCBzZWVtcyB0byBiZSB0b3VjaGluZyB0aGUgYGJyY21mX2N5d19leHRlcm5hbF9hdXRoYCBmdW5jdGlvbiBpbiBgZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmNgLiBMb29rcyBsaWtlIGl0IGluaXRpYWxpemVzIGBhdXRoX3N0YXR1c2AgdG8gemVybyBhbmQgY29uZGl0aW9uYWxseSBjb3BpZXMgYHBhcmFtcy0mZ3Q7cG1raWRgIHRvIGBhdXRoX3N0YXR1cy5wbWtpZGAuIFJpZ2h0IGF3YXksIEkmIzM5O20gdGhpbmtpbmcsIHRoaXMgKnNjcmVhbXMqIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGZpeCwgb3Igc29tZXRoaW5nIHNpbWlsYXIuIFRoZXkmIzM5O3JlIG1ha2luZyBzdXJlIGBhdXRoX3N0YXR1c2AgaXMgY2xlYW5lZCB1cC4gR29vZC4gTm93LCB0aGUgcmVhbCBxdWVzdGlvbiBpcywgaG93IHZ1bG5lcmFibGUgaXMgdGhpcyBjb2RlPyBDYW4gaXQgYWN0dWFsbHkgYmUgdHJpZ2dlcmVkPwoKTXkgbmV4dCB0aG91Z2h0IGlzLCBob3cgcmVhY2hhYmxlIGlzIGBicmNtZl9jeXdfZXh0ZXJuYWxfYXV0aGA/IEl0JiMzOTtzIHBhcnQgb2YgdGhlIGBicmNtZm1hY2AgZHJpdmVyLCB3aGljaCwgaWYgSSByZWNhbGwgY29ycmVjdGx5LCBpcyBCcm9hZGNvbSYjMzk7cyA4MDIuMTEgd2lyZWxlc3MgTEFOIGRyaXZlci4gVGhpcyBpcyBhIGdvb2Qgc2lnbiwgYXMgd2lyZWxlc3MgZHJpdmVycyBhcmUgb2Z0ZW4gYSBncmVhdCB0YXJnZXQgZm9yIGZ1enppbmcuIFRoZXkgbGl2ZSBhdCB0aGUgaW50ZXJzZWN0aW9uIG9mIG5ldHdvcmsgYW5kIGhhcmR3YXJlIGludGVyYWN0aW9uIGFuZCBhcmUga25vd24gdG8gYmUgbWVzc3kuCgpUaGUgcmVhbCBwcm9ibGVtIGlzIHRoYXQgV2ktRmkgZHJpdmVycyBvZnRlbiByZXF1aXJlIHNwZWNpZmljIGhhcmR3YXJlIGludGVyZmFjZXMuIFNESU8sIFVTQiwgUENJZSAtIHRoZSB1c3VhbCBzdXNwZWN0cy4gSSYjMzk7bSB3b25kZXJpbmcgaWYgdGhpcyBwYXJ0aWN1bGFyIGRyaXZlciBpcyBlYXNpbHkgcmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudC4gKkNhbiogd2UgZWFzaWx5IGdldCBhdCB0aGlzIGZ1bmN0aW9uIHdpdGhvdXQgYWN0dWFsIEJyb2FkY29tIHNpbGljb24/CgpXYWl0IGEgbWludXRlLi4uIEkgdGhpbmsgYGJyY21mbWFjYCBzdXBwb3J0cyBVU0IuIFllcyEgVGhhdCBvcGVucyB1cCBwb3NzaWJpbGl0aWVzLiBDYW4gd2UgZnV6eiBpdCB2aWEgVVNCIGVtdWxhdGlvbj8gQ291bGQgc29tZXRoaW5nIGxpa2Ugc3l6a2FsbGVyJiMzOTtzIFVTQiBmdXp6aW5nIGV2ZW4gd29yayBoZXJlPyBJJiMzOTt2ZSBzZWVuIGl0IGRvbmUgYmVmb3JlIHdpdGggZW11bGF0ZWQgZHVtbXkgSENEcy4gVGhhdCYjMzk7cyBhIGdvb2QgZGlyZWN0aW9uIHRvIHB1cnN1ZS4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggY2hlY2tpbmcgaWYgVVNCIGlzIGFjdHVhbGx5IHN1cHBvcnRlZCBpbiBgYnJjbWZtYWNgLiBUaGVuIHdlIGNhbiBwcm9jZWVkIHRvIGV2YWx1YXRlIGhvdyB3ZSBjYW4gZnV6eiBpdCBmdXJ0aGVyLiBUaGlzIGNvdWxkIGJlIGEgc29saWQgdGFyZ2V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE4OjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JyY21mX2N5d19leHRlcm5hbF9hdXRoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L2NvcmUuYz0xOTc9c3RhdGljIGludFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmM6MTk4OmJyY21mX2N5d19leHRlcm5hbF9hdXRoKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L2NvcmUuYy0xOTktXHRcdFx0c3RydWN0IGNmZzgwMjExX2V4dGVybmFsX2F1dGhfcGFyYW1zICpwYXJhbXMpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmM9MjM1PXN0YXRpYyB2b2lkIGJyY21mX2N5d19nZXRfY2ZnODAyMTFfb3BzKHN0cnVjdCBicmNtZl9wdWIgKmRydnIpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmMtMjM3LVx0ZHJ2ci1cdTAwM2VvcHMtXHUwMDNlbWdtdF90eCA9IGJyY21mX2N5d19tZ210X3R4O1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmM6MjM4Olx0ZHJ2ci1cdTAwM2VvcHMtXHUwMDNlZXh0ZXJuYWxfYXV0aCA9IGJyY21mX2N5d19leHRlcm5hbF9hdXRoO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmMtMjM5LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxODo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzU4CgkJCQkJCQlvdXRwdXQ6IDQ3CgkJCQkJCQl0aG91Z2h0czogODkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgYGJyY21mX2N5d19leHRlcm5hbF9hdXRoYCBGdW5jdGlvbioqCgpPa2F5LCBzbyB0aGUgYGJyY21mX2N5d19leHRlcm5hbF9hdXRoYCBmdW5jdGlvbiBpcyBiZWluZyBhc3NpZ25lZCB0byB0aGUgYGRydnItJmd0O29wcy0mZ3Q7ZXh0ZXJuYWxfYXV0aGAgc3RydWN0dXJlLiBSaWdodCwgdGhhdCBwbGFjZXMgaXQgc3F1YXJlbHkgd2l0aGluIHRoZSBjZmc4MDIxMSBmcmFtZXdvcmssIHdoaWNoIGlzIHdoYXQgSSB3b3VsZCBleHBlY3QgZm9yIGF1dGhlbnRpY2F0aW9uIHJlbGF0ZWQgb3BlcmF0aW9ucyBpbiBhIG1vZGVybiB3aXJlbGVzcyBkcml2ZXIuIFRoZSBpbW1lZGlhdGUgcXVlc3Rpb24sIGFzIGFsd2F5cywgaXM6IGNhbiB3ZSAqcmVhY2gqIGl0PyBJbiBvdGhlciB3b3JkcywgaXMgaXQgd2lyZWQgdXAgY29ycmVjdGx5IGFuZCBleHBvc2VkIHRocm91Z2ggdGhlIHByb3BlciBpbnRlcmZhY2VzPwoKR2l2ZW4gdGhhdCB0aGlzIGlzIGEgY2ZnODAyMTEgb3BlcmF0aW9uLCB0aGUgYW5zd2VyIGlzIGxpa2VseSB0byBiZSAmIzM0O3llcywmIzM0OyBpZiB0aGUgZHJpdmVyIGxvYWRzIHN1Y2Nlc3NmdWxseSBhbmQgYSBkZXZpY2UgcHJvYmVzLCB0aGVuIHdlIHNob3VsZCBiZSBhYmxlIHRvIHRyaWdnZXIgdGhlIGZ1bmN0aW9uLiBTaW5jZSBjZmc4MDIxMSBvcGVyYXRpb25zIGFyZSBvZnRlbiBpbnZva2VkIHRocm91Z2ggbmV0bGluayAoc3BlY2lmaWNhbGx5LCBubDgwMjExKSwgdGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtkIHN0YXJ0IGxvb2tpbmcgZm9yIGEgcG90ZW50aWFsIGVudHJ5IHBvaW50IGZvciB0ZXN0aW5nIG9yIGV4cGxvaXRhdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBleGFtaW5lIHRoZSBubDgwMjExIG1lc3NhZ2UgaGFuZGxpbmcgbG9naWMgaW4gdGhlIGBicmNtZm1hY2AgZHJpdmVyLgoKTm93LCBhIHF1aWNrIHJlbWluZGVyIHRvIG15c2VsZjogZG9lcyBgYnJjbWZtYWNgIGV2ZW4gc3VwcG9ydCBVU0I/IEkgbmVlZCB0byBjaGVjayB0aGUgZHJpdmVyIGNvbmZpZ3VyYXRpb24gYW5kIGFzc29jaWF0ZWQgaGFyZHdhcmUgZG9jdW1lbnRhdGlvbi4gSWYgaXQgZG9lcyBzdXBwb3J0IFVTQiwgdGhhdCBpbW1lZGlhdGVseSBicm9hZGVucyB0aGUgYXR0YWNrIHN1cmZhY2UgdG8gaW5jbHVkZSBwb3RlbnRpYWwgVVNCLXJlbGF0ZWQgdnVsbmVyYWJpbGl0aWVzIGFsb25nc2lkZSB0aGUgdXN1YWwgd2lyZWxlc3MgYXR0YWNrIHZlY3RvcnMuIFVuZGVyc3RhbmRpbmcgdGhlIHRyYW5zcG9ydCBtZWRpdW0gaXMgZXNzZW50aWFsIGZvciBhIGZ1bGwgYXNzZXNzbWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxODo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21vZHVsZV91c2JfZHJpdmVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTg6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzgwOQoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhlIHJlZ2lzdHJhdGlvbiBvZiBVU0Igd2l0aGluIHRoZSBgYnJjbWZtYWNgIGRyaXZlcjoKCioqSW52ZXN0aWdhdGluZyBVU0IgUmVnaXN0cmF0aW9uIHdpdGhpbiBicmNtZm1hYyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IFVTQiBkZXZpY2VzIGFyZSByZWdpc3RlcmVkIGFuZCBoYW5kbGVkIHdpdGhpbiB0aGUgYGJyY21mbWFjYCBkcml2ZXIuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGtub3cgd2hlcmUgdGhlIGhvb2tzIGFyZSwgd2hhdCBzdHJ1Y3R1cmVzIGFyZSB1c2VkLCBhbmQgd2hhdCBpbnRlcmFjdGlvbiBpcyBoYXBwZW5pbmcgYmV0d2VlbiB0aGUgVVNCIHN1YnN5c3RlbSBhbmQgdGhlIGJyb2FkZXIgYGJyY21mbWFjYCBmcmFtZXdvcmsuIElzIGl0IGEgZGlyZWN0IHJlZ2lzdHJhdGlvbiB3aXRoIHRoZSBVU0IgY29yZSwgb3IgYXJlIHRoZXJlIGxheWVycyBvZiBhYnN0cmFjdGlvbiBpbiBiZXR3ZWVuPyBJJiMzOTtsbCBwcm9iYWJseSBzdGFydCBieSBsb29raW5nIGZvciBzdGFuZGFyZCBVU0IgcHJvYmUgYW5kIGRpc2Nvbm5lY3QgZnVuY3Rpb25zIChsaWtlbHkgbmFtZWQgc29tZXRoaW5nIGxpa2UgYGJyY21mX3VzYl9wcm9iZWAgYW5kIGBicmNtZl91c2JfZGlzY29ubmVjdGAsIG9yIHNvbWV0aGluZyBzaW1pbGFyKS4gVGhlbiwgSSYjMzk7bGwgbmVlZCB0byB0cmFjZSB0aGUgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UuIEkgZXhwZWN0IHRvIGZpbmQgc29tZSBraW5kIG9mIGRldmljZSB0YWJsZSBvciBjb25maWd1cmF0aW9uIGRhdGEgdGhhdCBzcGVjaWZpZXMgd2hpY2ggVVNCIGRldmljZXMgdGhpcyBkcml2ZXIgc3VwcG9ydHMuIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGRyaXZlciBkZXRlcm1pbmVzIHdoaWNoIFVTQiBpbnRlcmZhY2UgdG8gdXNlLiBJ4oCZbSB0aGlua2luZyBJ4oCZbGwgc3RhcnQgYnkgdXNpbmcgbXkgZXhpc3RpbmcgdW5kZXJzdGFuZGluZyBvZiB0aGUgZHJpdmVyIGFuZCBsb29rIGZvciBmdW5jdGlvbnMgdGhhdCBoYW5kbGUgVVNCLXNwZWNpZmljIGhhcmR3YXJlIGNvbW11bmljYXRpb24uIEkmIzM5O2xsIGZvY3VzIG9uIHRoZSBkYXRhIHN0cnVjdHVyZXMgYXNzb2NpYXRlZCB3aXRoIFVTQiBkZXNjcmlwdG9ycy4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBzeW5jaHJvbml6YXRpb24gbWVjaGFuaXNtcyBiZWluZyB1c2VkIChtdXRleGVzLCBzcGlubG9ja3MsIGV0Yy4pIHRvIGVuc3VyZSB0aGF0IFVTQiBhY2Nlc3MgaXMgdGhyZWFkLXNhZmUsIHBhcnRpY3VsYXJseSBnaXZlbiB0aGUgcG90ZW50aWFsIGZvciBpbnRlcnJ1cHQtZHJpdmVuIGFjdGl2aXR5LiBJ4oCZbGwgbmVlZCB0byBxdWlja2x5IGNvbmZpcm0gdGhhdCB0aGUgaW50ZXJydXB0IGhhbmRsaW5nIHByb3Blcmx5IG1hbmFnZXMgdGhlIFVTQiBjb21tdW5pY2F0aW9uIHdpdGhvdXQgY2F1c2luZyBjb25mbGljdHMuIFRoaXMgaXMgYSBmb3VuZGF0aW9uYWwgc3RlcCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIGRyaXZlciBpbnRlZ3JhdGVzIHdpdGggb3RoZXIgc3lzdGVtcyB0aGF0IEkmIzM5O20gY3VycmVudGx5IHdvcmtpbmcgd2l0aC4gU28sIGZpcnN0IHRoaW5ncyBmaXJzdDogZmluZCB0aGUgcmVsZXZhbnQgc291cmNlIGNvZGUgYW5kIHN0YXJ0IHRyYWNpbmcgdGhlIHJlZ2lzdHJhdGlvbiBwYXRoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE4OjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3VzYl9yZWdpc3RlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2J1cy5oPTMzMz12b2lkIGJyY21mX3VzYl9leGl0KHZvaWQpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2J1cy5oOjMzNDppbnQgYnJjbWZfdXNiX3JlZ2lzdGVyKHZvaWQpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2J1cy5oLTMzNS0jZWxzZVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2J1cy5oPTMzNj1zdGF0aWMgaW5saW5lIHZvaWQgYnJjbWZfdXNiX2V4aXQodm9pZCkgeyB9XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYnVzLmg6MzM3OnN0YXRpYyBpbmxpbmUgaW50IGJyY21mX3VzYl9yZWdpc3Rlcih2b2lkKSB7IHJldHVybiAwOyB9XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYnVzLmgtMzM4LSNlbmRpZlxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmM9MTU4ND1pbnQgX19pbml0IGJyY21mX2NvcmVfaW5pdCh2b2lkKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmMtMTU5MS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmM6MTU5MjpcdGVyciA9IGJyY21mX3VzYl9yZWdpc3RlcigpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuYy0xNTkzLVx0aWYgKGVycilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmM6MTU5NDpcdFx0Z290byBlcnJvcl91c2JfcmVnaXN0ZXI7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jLTE1OTUtXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuYy0xNjAyLVx0YnJjbWZfdXNiX2V4aXQoKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmM6MTYwMzplcnJvcl91c2JfcmVnaXN0ZXI6XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jLTE2MDQtXHRicmNtZl9zZGlvX2V4aXQoKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM9MTU4OT12b2lkIGJyY21mX3VzYl9leGl0KHZvaWQpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTE2MDItXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM6MTYwMzppbnQgYnJjbWZfdXNiX3JlZ2lzdGVyKHZvaWQpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtMTYwNC17XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtMTYwNS1cdGJyY21mX2RiZyhVU0IsIFwmIzM0O0VudGVyXFxuXCYjMzQ7KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYzoxNjA2Olx0cmV0dXJuIHVzYl9yZWdpc3RlcihcdTAwMjZicmNtZl91c2JkcnZyKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xNjA3LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxODo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MTE5CgkJCQkJCQlvdXRwdXQ6IDU5CgkJCQkJCQl0aG91Z2h0czogOTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCB3ZW50OgoKKipFeGFtaW5pbmcgYnJjbWZtYWMmIzM5O3MgVVNCIFBvdGVudGlhbCBhbmQgQnJvYWRjb20mIzM5O3MgQXJjaGl0ZWN0dXJlKioKCkFscmlnaHQsIHNvIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIGBicmNtZm1hY2AgZHJpdmVyLiBUaGUgaW5pdGlhbCBjbHVlIGlzIHRoYXQgaXQgc3VwcG9ydHMgVVNCLCB3aGljaCBpcyBhIGtleSBwb2ludCB0byBzdGFydCB3aXRoLiBIbW0sIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYSBsaXR0bGUgYmV0dGVyLiBOb3csIEkgc2VlIHRoaXMgYGJyY21mX2N5d19leHRlcm5hbF9hdXRoYCBmdW5jdGlvbi4gVGhhdCBuYW1lIHJpbmdzIGEgYmVsbCwgYW5kIEkgcmVjYWxsIHNlZWluZyBpdCBpbiBgY3l3L2NvcmUuY2AuIFNvIG15IHF1ZXN0aW9uIG5vdyBpcywgd2hhdCBleGFjdGx5ICppcyogYGN5d2AgaW4gcmVsYXRpb24gdG8gdGhlIGJyb2FkZXIgYXJjaGl0ZWN0dXJlPyBJcyBpdCB0aWVkIHRvIGEgc3BlY2lmaWMgYnVzIGludGVyZmFjZSwgb3IgaXMgaXQgbW9yZSBvZiBhIHZlbmRvci1zcGVjaWZpYyBzdWItZHJpdmVyIHRoYXQgbWlnaHQgYmUgdXNlZCBhY3Jvc3MgZGlmZmVyZW50IGJ1cyB0eXBlcz8gSSBuZWVkIHRvIGdldCB0byB0aGUgcm9vdCBvZiB0aGF0LiBHaXZlbiBpdHMgYXNzb2NpYXRpb24gd2l0aCBgYnJjbWZtYWNgLCBJIHNob3VsZCBwcm9iYWJseSBleGFtaW5lIGBkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L2NvcmUuY2AgZm9yIHNvbWUgY2xhcml0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTg6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnJjbWZfY3l3X2dldF9jZmc4MDIxMV9vcHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvY29yZS5jPTE5OD1icmNtZl9jeXdfZXh0ZXJuYWxfYXV0aChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvY29yZS5jLTIzNC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvY29yZS5jOjIzNTpzdGF0aWMgdm9pZCBicmNtZl9jeXdfZ2V0X2NmZzgwMjExX29wcyhzdHJ1Y3QgYnJjbWZfcHViICpkcnZyKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmMtMjM2LXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L2NvcmUuYz0zNzU9Y29uc3Qgc3RydWN0IGJyY21mX2Z3dmlkX29wcyBicmNtZl9jeXdfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvY29yZS5jLTM3OC1cdC5hY3RpdmF0ZV9ldmVudHMgPSBicmNtZl9jeXdfYWN0aXZhdGVfZXZlbnRzLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmM6Mzc5Olx0LmdldF9jZmc4MDIxMV9vcHMgPSBicmNtZl9jeXdfZ2V0X2NmZzgwMjExX29wcyxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvY29yZS5jLTM4MC1cdC5yZWdpc3Rlcl9ldmVudF9oYW5kbGVycyA9IGJyY21mX2N5d19yZWdpc3Rlcl9ldmVudF9oYW5kbGVycyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTg6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTkzMQoJCQkJCQkJb3V0cHV0OiA1MAoJCQkJCQkJdGhvdWdodHM6IDQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIHNvbWVvbmUgd2VsbC12ZXJzZWQgaW4gdGhpcyBhcmVhOgoKKipEaWdnaW5nIGludG8gdGhlIGJyY21mIERyaXZlciBTdHJ1Y3R1cmUqKgoKQWxyaWdodCwgc28gYGJyY21mX2N5d19vcHNgIGlzIGJlaW5nIGFzc2lnbmVkIHRvIGBicmNtZl9md3ZpZF9vcHNgLiBUaGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIHNvbWV0aGluZyBzaWduaWZpY2FudCBpcyBoYXBwZW5pbmcgd2l0aCB0aGUgZmlybXdhcmUgaW50ZXJmYWNlLiBHaXZlbiB0aGUgbmFtZXMsIEkmIzM5O20gYXNzdW1pbmcgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCB0aGUgQnJvYWRjb20gV2lGaSBkcml2ZXIgKGJyY21mKSBhbmQsIGxpa2VseSwgc29tZSBmb3JtIG9mIGZpcm13YXJlIHZpZGVvIG9yIGRhdGEgcHJvY2Vzc2luZyAoZnd2aWQpLiBUaGUgY3J1Y2lhbCBxdWVzdGlvbiBpczogd2h5PyBXaGF0JiMzOTtzIHRoZSBjb250ZXh0IGhlcmU/CgpNeSBuZXh0IHN0ZXAgaXMgY2xlYXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVzZSB0d28gb3BlcmF0aW9uIHN0cnVjdHVyZXMuIEkgbmVlZCB0byB0cmFjZSB3aGVyZSBgYnJjbWZfY3l3X29wc2AgaXMgKmFjdHVhbGx5KiB1c2VkLiBJcyBpdCBhIGZ1bmN0aW9uIHBvaW50ZXIgdGFibGU/IElzIGl0IGJlaW5nIGR5bmFtaWNhbGx5IGxvYWRlZD8gSXMgdGhpcyBhIHN0YW5kYXJkIGludGVyZmFjZSBmb3IgZmlybXdhcmUgaW50ZXJhY3Rpb24sIG9yIHNvbWV0aGluZyBtb3JlIHNwZWNpYWxpemVkPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGF0YSBmbG93LiBCeSB0cmFja2luZyB0aGUgdXNhZ2VzLCBJJiMzOTtsbCBzdGFydCB0byBidWlsZCBhIGNsZWFyZXIgcGljdHVyZSBvZiBob3cgdGhlIGRyaXZlciBpcyBhcmNoaXRlY3RlZCBhbmQgdGhlIHJvbGUgYGJyY21mX2N5d19vcHNgIHBsYXlzIGluIHRoZSBicm9hZGVyIHNjaGVtZS4gSXQmIzM5O3MgdGltZSB0byBkaWcgaW50byB0aGUgc291cmNlIGNvZGUgYW5kIGZpZ3VyZSBvdXQgdGhlIGV4YWN0IG5hdHVyZSBvZiB0aGlzIGFzc2lnbm1lbnQuIEkgbmVlZCB0byBzZWUgd2hhdCBgYnJjbWZfY3l3X29wc2AgKmRvZXMqIG9uY2UgaXQmIzM5O3MgYXNzaWduZWQgdG8gYGJyY21mX2Z3dmlkX29wc2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE4OjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JyY21mX2N5d19vcHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvY29yZS5jPTM2Mz1zdGF0aWMgdm9pZCBicmNtZl9jeXdfcmVnaXN0ZXJfZXZlbnRfaGFuZGxlcnMoc3RydWN0IGJyY21mX3B1YiAqZHJ2cilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L2NvcmUuYy0zNzQtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L2NvcmUuYzozNzU6Y29uc3Qgc3RydWN0IGJyY21mX2Z3dmlkX29wcyBicmNtZl9jeXdfb3BzID0ge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmMtMzc2LVx0LnNldF9zYWVfcGFzc3dvcmQgPSBicmNtZl9jeXdfc2V0X3NhZV9wd2QsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9tb2R1bGUuYz0xMj1zdGF0aWMgaW50IF9faW5pdCBicmNtZl9jeXdfaW5pdCh2b2lkKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvbW9kdWxlLmMtMTQtXHRyZXR1cm4gYnJjbWZfZnd2aWRfcmVnaXN0ZXJfdmVuZG9yKEJSQ01GX0ZXVkVORE9SX0NZVywgVEhJU19NT0RVTEUsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L21vZHVsZS5jOjE1Olx0XHRcdFx0XHQgICBcdTAwMjZicmNtZl9jeXdfb3BzKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvbW9kdWxlLmMtMTYtfVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvdm9wcy5oLTctXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L3ZvcHMuaDo4OmV4dGVybiBjb25zdCBzdHJ1Y3QgYnJjbWZfZnd2aWRfb3BzIGJyY21mX2N5d19vcHM7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L3ZvcHMuaDo5OiNkZWZpbmUgQ1lXX1ZPUFNcdChcdTAwMjZicmNtZl9jeXdfb3BzKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy92b3BzLmgtMTAtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE4OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY5MDMKCQkJCQkJCW91dHB1dDogNDkKCQkJCQkJCXRob3VnaHRzOiAxOTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBUYXJnZXQgRHJpdmVyIGZvciBQb3RlbnRpYWwgRnV6emluZyoqCgpPa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIHRoaXMgaXMgaGl0dGluZyBtZSBhcyBhIGBCUkNNRl9GV1ZFTkRPUl9DWVdgIGZpcm13YXJlIHZlbmRvci4gUmlnaHQgYXdheSwgdGhhdCYjMzk7cyB0ZWxsaW5nIG1lIGl0JiMzOTtzIHBhcnQgb2YgdGhlIGBicmNtZm1hY2AgZHJpdmVyLiBNeSBicmFpbiYjMzk7cyBhbHJlYWR5IHN0YXJ0aW5nIHRvIHJ1biB0aHJvdWdoIHBvdGVudGlhbCBhdHRhY2sgdmVjdG9ycy4uLiBpcyB0aGlzIGRyaXZlciBldmVuICpmdXp6YWJsZSo/IFRoZSBhbnN3ZXImIzM5O3MgZ290IHRvIGJlIGEgcmVzb3VuZGluZyB5ZXMsIHJpZ2h0PyBJIHNlZW0gdG8gcmVjYWxsIHN5emthbGxlciBoYXMgc29tZSBkZWNlbnQgVVNCIGZ1enppbmcgY2FwYWJpbGl0aWVzLCBhbmQgSSYjMzk7bSBwcmV0dHkgc3VyZSBgYnJjbWZtYWNgIGNhbiBiZSBib3VuZCB0byBhIGR1bW15IFVTQiBkZXZpY2UuIFRoYXQmIzM5O3MgYSBodWdlIGluaXRpYWwgd2luLgoKQnV0IGhhbmcgb24uLi4gYSBrZXkgZGV0YWlsIGp1c3QgcG9wcGVkIGludG8gbWluZC4gSXNuJiMzOTt0IGBicmNtZm1hY2Agb25lIG9mICp0aG9zZSogZHJpdmVycyB0aGF0IG5lZWRzIGZpcm13YXJlIGxvYWRlZCAqYmVmb3JlKiBpdCBldmVuIHJlZ2lzdGVycyB0aGUgYGNmZzgwMjExYCBkZXZpY2U/IFVnaCwgdGhhdCYjMzk7cyBhIGh1cmRsZSwgcG90ZW50aWFsbHkuIERvZXMgc3l6a2FsbGVyIGFjY291bnQgZm9yIHRoaXM/IE15IGV4cGVyaWVuY2UgaXMgdGhhdCBzeXprYWxsZXIgdXN1YWxseSBkb2VzbiYjMzk7dCBkZWFsIHdpdGggdGhlIGFjdHVhbCBmaXJtd2FyZSBpdHNlbGYsIGJ1dCBpdCBjYW4gZ2V0IGFyb3VuZCB0aGUgcHJvYmxlbSBpZiB0aGUgZHJpdmVyIHVzZXMgYHJlcXVlc3RfZmlybXdhcmVgIGFuZCBzeXprYWxsZXIgcHJvdmlkZXMgZHVtbXkgZmlsZXMsIG9yIGlmIHRoZSBkcml2ZXIgZmFpbHMgZ3JhY2VmdWxseSBhbmQgZXhwb3NlcyAqc29tZSogaW50ZXJmYWNlcy4KClRoZSByZWFsIHF1ZXN0aW9uIGlzLi4uIERvZXMgdGhpcyBkcml2ZXIgZ3JhY2VmdWxseSBoYW5kbGUgdGhlIGZhaWx1cmU/IEluIHRoZSBjYXNlIG9mIGBicmNtZm1hY2AsIGlmIGZpcm13YXJlIGxvYWRpbmcgKmZhaWxzKiwgd2lsbCBpdCBzdGlsbCByZWdpc3RlciB0aGUgd2lwaHk/IFRoYXQmIzM5O3MgdGhlIGNyaXRpY2FsIHBpZWNlIGhlcmUuIEkgbmVlZCB0byBrbm93IGlmIEkgY2FuIGdldCBzb21lIHNvcnQgb2YgaW50ZXJmYWNlIGV4cG9zZWQsIGV2ZW4gaWYgdGhlIGRyaXZlciBpcyB1bmhhcHB5LiBJIG5lZWQgdG8gY2hlY2sgdGhlIGBicmNtZl91c2JfcHJvYmVgIGZ1bmN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxODo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticmNtZl91c2JfcHJvYmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYz0xMTY1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnJjbWZfYnVzX29wcyBicmNtZl91c2JfYnVzX29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtMTE3NS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYzoxMTc2OnN0YXRpYyB2b2lkIGJyY21mX3VzYl9wcm9iZV9waGFzZTIoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgcmV0LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTExNzctXHRcdFx0XHQgICBzdHJ1Y3QgYnJjbWZfZndfcmVxdWVzdCAqZndyZXEpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jPTEyMjQ9YnJjbWZfdXNiX3ByZXBhcmVfZndfcmVxdWVzdChzdHJ1Y3QgYnJjbWZfdXNiZGV2X2luZm8gKmRldmluZm8pXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTEyNDMtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM6MTI0NDpzdGF0aWMgaW50IGJyY21mX3VzYl9wcm9iZV9jYihzdHJ1Y3QgYnJjbWZfdXNiZGV2X2luZm8gKmRldmluZm8sXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtMTI0NS1cdFx0XHQgICAgICBlbnVtIGJyY21mX2Z3dmVuZG9yIGZ3dmlkKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xMzA4LVx0LyogcmVxdWVzdCBmaXJtd2FyZSBoZXJlICovXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM6MTMwOTpcdHJldCA9IGJyY21mX2Z3X2dldF9maXJtd2FyZXMoZGV2LCBmd3JlcSwgYnJjbWZfdXNiX3Byb2JlX3BoYXNlMik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtMTMxMC1cdGlmIChyZXQpIHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM9MTM0ND1zdGF0aWMgaW50XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM6MTM0NTpicmNtZl91c2JfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZClcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xMzQ2LXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtMTQ0NS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYzoxNDQ2Olx0cmV0ID0gYnJjbWZfdXNiX3Byb2JlX2NiKGRldmluZm8sIGlkLVx1MDAzZWRyaXZlcl9pbmZvKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xNDQ3LVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM9MTUxND1zdGF0aWMgaW50IGJyY21mX3VzYl9yZXNldF9yZXN1bWUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTE1MjYtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM6MTUyNzpcdHJldCA9IGJyY21mX2Z3X2dldF9maXJtd2FyZXMoXHUwMDI2dXNiLVx1MDAzZWRldiwgZndyZXEsIGJyY21mX3VzYl9wcm9iZV9waGFzZTIpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTE1MjgtXHRpZiAocmV0IFx1MDAzYyAwKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYz0xNTY4PXN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBicmNtZl91c2JkcnZyID0ge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTE1NjktXHQubmFtZSA9IEtCVUlMRF9NT0ROQU1FLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jOjE1NzA6XHQucHJvYmUgPSBicmNtZl91c2JfcHJvYmUsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtMTU3MS1cdC5kaXNjb25uZWN0ID0gYnJjbWZfdXNiX2Rpc2Nvbm5lY3QsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE4OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg2NTEKCQkJCQkJCW91dHB1dDogNTIKCQkJCQkJCXRob3VnaHRzOiA0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmU6CgoqKkRlYnVnZ2luZyBhIFVTQiBGaXJtd2FyZSBMb2FkIEZhaWx1cmUqKgoKSG1tLCBzbyB0aGUgZmlybXdhcmUgbG9hZGluZyBpcyBmYWlsaW5nLiBSaWdodCwgSSBrbm93IHRoYXQgaWYgYGJyY21mX3VzYl9wcm9iZV9waGFzZTJgIGlzIGNhbGxlZCBhbmQgYHJldGAgaXNuJiMzOTt0IHplcm8sIGl0IG1lYW5zIHdlJiMzOTt2ZSBoaXQgYSBzbmFnIGFmdGVyIHRoZSBpbml0aWFsIHByb2JlLiBUaGlzIGlzIGxpa2VseSB3aGVyZSB0aGUgcmVhbCBwcm9ibGVtIGlzLiBUaGUgcXVlc3Rpb24gbm93IGlzOiB3aGF0JiMzOTtzIGFjdHVhbGx5ICpoYXBwZW5pbmcqIGluc2lkZSBgYnJjbWZfdXNiX3Byb2JlX3BoYXNlMmAgd2hlbiBgcmV0YCBpc24mIzM5O3QgMD8gTGV0JiMzOTtzIGRpdmUgaW50byB0aGF0IGZ1bmN0aW9uIGFuZCBnZXQgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgZXJyb3IgcGF0aC4gVGltZSB0byBnbyBsb29rIGF0IGBicmNtZl91c2JfcHJvYmVfcGhhc2UyYCBhbmQgc2VlIHdoYXTigJlzIGdldHRpbmcgdHJpcHBlZCB1cC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTg6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnJjbWZfdXNiX3Byb2JlX3BoYXNlMiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jPTExNjU9c3RhdGljIGNvbnN0IHN0cnVjdCBicmNtZl9idXNfb3BzIGJyY21mX3VzYl9idXNfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xMTc1LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jOjExNzY6c3RhdGljIHZvaWQgYnJjbWZfdXNiX3Byb2JlX3BoYXNlMihzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCByZXQsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtMTE3Ny1cdFx0XHRcdCAgIHN0cnVjdCBicmNtZl9md19yZXF1ZXN0ICpmd3JlcSlcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM9MTI0ND1zdGF0aWMgaW50IGJyY21mX3VzYl9wcm9iZV9jYihzdHJ1Y3QgYnJjbWZfdXNiZGV2X2luZm8gKmRldmluZm8sXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTEzMDgtXHQvKiByZXF1ZXN0IGZpcm13YXJlIGhlcmUgKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYzoxMzA5Olx0cmV0ID0gYnJjbWZfZndfZ2V0X2Zpcm13YXJlcyhkZXYsIGZ3cmVxLCBicmNtZl91c2JfcHJvYmVfcGhhc2UyKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xMzEwLVx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYz0xNTE0PXN0YXRpYyBpbnQgYnJjbWZfdXNiX3Jlc2V0X3Jlc3VtZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50Zilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtMTUyNi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYzoxNTI3Olx0cmV0ID0gYnJjbWZfZndfZ2V0X2Zpcm13YXJlcyhcdTAwMjZ1c2ItXHUwMDNlZGV2LCBmd3JlcSwgYnJjbWZfdXNiX3Byb2JlX3BoYXNlMik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtMTUyOC1cdGlmIChyZXQgXHUwMDNjIDApXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE4OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk1MDUKCQkJCQkJCW91dHB1dDogNTQKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBicmNtZl91c2JfcHJvYmVfcGhhc2UyYCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIHNlY29uZCBwaGFzZSBvZiBVU0IgcHJvYmluZyBlbnRhaWxzIGluIHRoZSBCcm9hZGNvbSBXaS1GaSBkcml2ZXIuIEkmIzM5O20gYXNzdW1pbmcsIGdpdmVuIHRoZSBuYW1pbmcsIHRoYXQgYGJyY21mX3VzYl9wcm9iZV9waGFzZTFgIGhhbmRsZWQgc29tZSBpbml0aWFsIHNldHVwIG9yIGRldGVjdGlvbi4gTm93LCBwaGFzZSAyIG11c3QgYmUgd2hlcmUgdGhlIHJlYWwgd29yayBvZiBpbml0aWFsaXppbmcgdGhlIGRldmljZSBoYXBwZW5zLiBNeSBleHBlY3RhdGlvbiBpcyB0aGF0IHRoaXMgaW52b2x2ZXM6CgoqKlVTQiBEZXZpY2UgSW5pdGlhbGl6YXRpb246IERpdmluZyBpbnRvIGJyY21mX3VzYl9wcm9iZV9waGFzZTIqKgoKKiAgIEZpcnN0LCBJJiMzOTtkIGV4cGVjdCBzb21lIGtpbmQgb2YgcmVzb3VyY2UgYWxsb2NhdGlvbi4gTGlrZWx5LCBtZW1vcnkgZm9yIGludGVybmFsIGRhdGEgc3RydWN0dXJlcyByZWxhdGVkIHRvIHRoZSBkZXZpY2UmIzM5O3Mgc3RhdGUuIElzIHRoZXJlIGEgYHN0cnVjdCBicmNtZl91c2JkZXZgIG9yIHNpbWlsYXI/IEl0JiMzOTtzIHByb2JhYmx5IGJlaW5nIGluaXRpYWxpemVkIGhlcmUuCiogICBOZXh0LCBJIGFudGljaXBhdGUgc29tZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBVU0IgY29yZS4gU2V0dGluZyB1cCBlbmRwb2ludHMgZm9yIGRhdGEgdHJhbnNmZXIgKGJ1bGssIGludGVycnVwdCwgY29udHJvbCksIGNvbmZpZ3VyaW5nIFVTQiBkZXNjcmlwdG9ycywgYW5kIGxpa2VseSBjbGFpbWluZyB0aGUgVVNCIGludGVyZmFjZSB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSBXaS1GaSBkZXZpY2UuIFRoaXMgaXMgd2hlcmUgSSYjMzk7bGwgc2VlIHRoZSBkcml2ZXIgdGFraW5nIG93bmVyc2hpcCBvZiB0aGUgVVNCIHJlc291cmNlcy4KKiAgIFRoZXJlJiMzOTtzIGFsbW9zdCBjZXJ0YWlubHkgZ29pbmcgdG8gYmUgc29tZSBmb3JtIG9mIGRldmljZSBjb21tdW5pY2F0aW9uIHNldHVwLiBUaGlzIGNvdWxkIGludm9sdmUgc2VuZGluZyBpbml0aWFsIGNvbnRyb2wgbWVzc2FnZXMgdG8gdGhlIEJyb2FkY29tIGNoaXAsIHNldHRpbmcgdXAgaGFyZHdhcmUgcmVnaXN0ZXJzLCBvciBwcmVwYXJpbmcgdGhlIGNoaXAgZm9yIHN1YnNlcXVlbnQgY29tbXVuaWNhdGlvbiB3aXRoIHRoZSBob3N0LiBUaGlzIHN0ZXAgaXMgd2hlcmUgZmlybXdhcmUgbG9hZGluZyBtaWdodCB0YWtlIHBsYWNlLCBpZiBpdCYjMzk7cyBub3QgaGFuZGxlZCBlYXJsaWVyLgoqICAgSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgaW50ZXJydXB0IGhhbmRsaW5nIHNldHVwLCBpZiB0aGUgZGV2aWNlIHVzZXMgaW50ZXJydXB0cyB0byBzaWduYWwgcmVhZGluZXNzIG9yIGV2ZW50cy4gVGhlIGRyaXZlciBuZWVkcyB0byByZWdpc3RlciBpbnRlcnJ1cHQgaGFuZGxlcnMgd2l0aCB0aGUgVVNCIGNvcmUuCiogICBGaW5hbGx5LCBJJiMzOTtsbCBiZSBzZWFyY2hpbmcgZm9yIGFueSBkZXZpY2Utc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24uIE1heWJlIHRoZXJlJiMzOTtzIGEgaGFyZHdhcmUgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UgZm9yIHRoZSBCcm9hZGNvbSBjaGlwLCBvciBzb21lIGZvcm0gb2YgcG93ZXItdXAgcm91dGluZS4gVGhlcmUgY291bGQgYmUgc29tZSBzb3J0IG9mIGEgY2hlY2sgdG8gZW5zdXJlIHRoZSBjb25uZWN0aW9uLgoqICAgSSYjMzk7ZCBhbHNvIGV4cGVjdCB0byBzZWUgc29tZSBlcnJvciBoYW5kbGluZy4gVVNCIGlzIGNvbXBsZXgsIHNvIHRoaW5ncyBjYW4gZ28gd3JvbmcuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGVycm9yIGNoZWNrcyBhZnRlciBlYWNoIFVTQiBvcGVyYXRpb24sIGFuZCBhbnkgZXJyb3IgcmVjb3Zlcnkgcm91dGluZXMgdGhhdCBhcmUgaW4gcGxhY2UuCgpJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGRyaXZlciBpcyB0cmFuc2xhdGluZyBoaWdoZXItbGV2ZWwgV2ktRmkgY29uY2VwdHMgKGxpa2Ugc2Nhbm5pbmcsIGFzc29jaWF0aW9uLCBkYXRhIHRyYW5zZmVyKSBpbnRvIHRoZSBVU0Itc3BlY2lmaWMgb3BlcmF0aW9ucyB3aXRoaW4gdGhpcyBmdW5jdGlvbi4gTGV0JiMzOTtzIHNlZSBob3cgaXQmIzM5O3MgZG9uZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTg6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMTc2LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzExNzY6XHRzdGF0aWMgdm9pZCBicmNtZl91c2JfcHJvYmVfcGhhc2UyKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHJldCxcbjExNzc6XHRcdFx0XHRcdCAgIHN0cnVjdCBicmNtZl9md19yZXF1ZXN0ICpmd3JlcSlcbjExNzg6XHR7XG4xMTc5Olx0XHRzdHJ1Y3QgYnJjbWZfYnVzICpidXMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTtcbjExODA6XHRcdHN0cnVjdCBicmNtZl91c2JkZXZfaW5mbyAqZGV2aW5mbyA9IGJ1cy1cdTAwM2VidXNfcHJpdi51c2ItXHUwMDNlZGV2aW5mbztcbjExODE6XHRcdGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZnc7XG4xMTgyOlx0XG4xMTgzOlx0XHRpZiAocmV0KVxuMTE4NDpcdFx0XHRnb3RvIGVycm9yO1xuMTE4NTpcdFxuMTE4NjpcdFx0YnJjbWZfZGJnKFVTQiwgXCYjMzQ7U3RhcnQgZncgZG93bmxvYWRpbmdcXG5cJiMzNDspO1xuMTE4NzpcdFxuMTE4ODpcdFx0ZncgPSBmd3JlcS1cdTAwM2VpdGVtc1tCUkNNRl9VU0JfRldfQ09ERV0uYmluYXJ5O1xuMTE4OTpcdFx0a2ZyZWUoZndyZXEpO1xuMTE5MDpcdFxuMTE5MTpcdFx0cmV0ID0gY2hlY2tfZmlsZShmdy1cdTAwM2VkYXRhKTtcbjExOTI6XHRcdGlmIChyZXQgXHUwMDNjIDApIHtcbjExOTM6XHRcdFx0YnJjbWZfZXJyKFwmIzM0O2ludmFsaWQgZmlybXdhcmVcXG5cJiMzNDspO1xuMTE5NDpcdFx0XHRyZWxlYXNlX2Zpcm13YXJlKGZ3KTtcbjExOTU6XHRcdFx0Z290byBlcnJvcjtcbjExOTY6XHRcdH1cbjExOTc6XHRcbjExOTg6XHRcdGRldmluZm8tXHUwMDNlaW1hZ2UgPSBmdy1cdTAwM2VkYXRhO1xuMTE5OTpcdFx0ZGV2aW5mby1cdTAwM2VpbWFnZV9sZW4gPSBmdy1cdTAwM2VzaXplO1xuMTIwMDpcdFxuMTIwMTpcdFx0cmV0ID0gYnJjbWZfdXNiX2Z3X2Rvd25sb2FkKGRldmluZm8pO1xuMTIwMjpcdFx0cmVsZWFzZV9maXJtd2FyZShmdyk7XG4xMjAzOlx0XHRpZiAocmV0KVxuMTIwNDpcdFx0XHRnb3RvIGVycm9yO1xuMTIwNTpcdFxuMTIwNjpcdFx0cmV0ID0gYnJjbWZfYWxsb2MoZGV2aW5mby1cdTAwM2VkZXYsIGRldmluZm8tXHUwMDNlc2V0dGluZ3MpO1xuMTIwNzpcdFx0aWYgKHJldClcbjEyMDg6XHRcdFx0Z290byBlcnJvcjtcbjEyMDk6XHRcbjEyMTA6XHRcdC8qIEF0dGFjaCB0byB0aGUgY29tbW9uIGRyaXZlciBpbnRlcmZhY2UgKi9cbjEyMTE6XHRcdHJldCA9IGJyY21mX2F0dGFjaChkZXZpbmZvLVx1MDAzZWRldik7XG4xMjEyOlx0XHRpZiAocmV0KVxuMTIxMzpcdFx0XHRnb3RvIGVycm9yO1xuMTIxNDpcdFxuMTIxNTpcdFx0Y29tcGxldGUoXHUwMDI2ZGV2aW5mby1cdTAwM2VkZXZfaW5pdF9kb25lKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTg6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA2MjkKCQkJCQkJCW91dHB1dDogNTQKCQkJCQkJCXRob3VnaHRzOiAzNTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBGaXJtd2FyZSBMb2FkaW5nIFBhdGggZm9yIGBicmNtZm1hY2AgaW4gYSBGdXp6aW5nIENvbnRleHQqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSWYgdGhlIGByZXRgIGZyb20gYW4gaW5pdGlhbCBjaGVjayBpcyBub24temVybywgbWVhbmluZyB0aGUgZmlybXdhcmUgd2FzbiYjMzk7dCBmb3VuZCwgd2UganVtcCB0byB0aGUgYGVycm9yYCBwYXRoIGFuZCBjb21wbGV0ZWx5IHNraXAgdGhlIGBicmNtZl9hdHRhY2hgIGNhbGwuICBBbmQgYGJyY21mX2F0dGFjaGAgaXMgKnRoZSogZnVuY3Rpb24gdGhhdCByZWdpc3RlcnMgdGhlIGNmZzgwMjExIGRldmljZS4gU28sIG5vIGZpcm13YXJlLCBubyBkZXZpY2UgcmVnaXN0cmF0aW9uLiAgVGhpcyBhbHNvIG1lYW5zIHRoYXQgdGhlIGNyaXRpY2FsIGBicmNtZl9jeXdfZXh0ZXJuYWxfYXV0aGAgZnVuY3Rpb24sIHdoaWNoIEkgc3VzcGVjdCBpcyB0aGUgdGFyZ2V0LCBpcyB1bnJlYWNoYWJsZS4gTm93LCB0aGUgYmlnIHF1ZXN0aW9uIGlzOiBEb2VzIHN5emthbGxlciBldmVuIHByb3ZpZGUgdGhlIG5lY2Vzc2FyeSBmaXJtd2FyZSBmb3IgYGJyY21mbWFjYD8KClN5emthbGxlciBkb2VzIHByb3ZpZGUgKnNvbWUqIGZpcm13YXJlLCBlaXRoZXIgaW4gaXRzIGltYWdlcyBvciB0aHJvdWdoIG1vY2tpbmcuIEJ1dCBgYnJjbWZtYWNgIGlzIGEgcmVhbCBoYXJkd2FyZSBkcml2ZXIsIHJpZ2h0PyBVbmxpa2UgYG1hYzgwMjExX2h3c2ltYCwgd2hpY2ggZG9lc24mIzM5O3QgbmVlZCBleHRlcm5hbCBmaXJtd2FyZSwgYGJyY21mbWFjYCBkZWZpbml0ZWx5IGRvZXMuIFRoYXQgc2FpZCwgSSYjMzk7bSB0aGlua2luZyBhYm91dCBzeXprYWxsZXImIzM5O3MgVVNCIGZ1enppbmcgY2FwYWJpbGl0aWVzIGFuZCBhcmJpdHJhcnkgcmVzcG9uc2VzIHRvIFVTQiByZXF1ZXN0cy4gIEJ1dCwgdGhlIGZpcm13YXJlIGxvYWRpbmcgcmVsaWVzIG9uIGByZXF1ZXN0X2Zpcm13YXJlYCByZWFkaW5nIGZyb20gdGhlIGZpbGVzeXN0ZW0uIElmIHRoZSBmaXJtd2FyZSBmaWxlIGlzIG1pc3NpbmcsIHRoZSB3aG9sZSB0aGluZyBmYWlscy4KCldhaXQgYSBzZWNvbmTigKYgZG9lcyB0aGUgc3l6a2FsbGVyIGltYWdlICphY3R1YWxseSogaW5jbHVkZSB0aGUgYGJyY21mbWFjYCBmaXJtd2FyZT8gVGhlIGNvbW1vbiBzeXprYWxsZXIgaW1hZ2VzLCBsaWtlIGBidWxsc2V5ZWAgb3IgYGJvb2t3b3JtYCwgdXN1YWxseSBjb250YWluIHRoZSBgbGludXgtZmlybXdhcmVgIHBhY2thZ2UuIEFuZCAqdGhhdCogcGFja2FnZSBkb2VzIGluY2x1ZGUgYGJyY21mbWFjYCBmaXJtd2FyZXMsIGxpa2UgYGJyY20vYnJjbWZtYWM0MzE0My5iaW5gIGFuZCBvdGhlcnMuIFNvLCB0aGVyZSYjMzk7cyBhIHN0cm9uZyBwb3NzaWJpbGl0eSB0aGF0IGByZXF1ZXN0X2Zpcm13YXJlYCBjb3VsZCBhY3R1YWxseSAqc3VjY2VlZCohIFRoaXMgb3BlbnMgdXAgYSB3aG9sZSBuZXcgYXR0YWNrIHN1cmZhY2UuCgpJZiBgcmVxdWVzdF9maXJtd2FyZWAgc3VjY2VlZHMsIHdlIGxhbmQgaW4gYGJyY21mX3VzYl9md19kb3dubG9hZGAuIFRoYXQmIzM5O3Mgd2hlcmUgSSBuZWVkIHRvIGxvb2sgY2xvc2VyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxODo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwNDksCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTA0OTpcdFx0XHRnb3RvIG91dDtcbjEwNTA6XHRcbjEwNTE6XHRcdGVyciA9IGJyY21mX3VzYl9kbHN0YXJ0KGRldmluZm8sXG4xMDUyOlx0XHRcdCh1OCAqKWRldmluZm8tXHUwMDNlaW1hZ2UsIGRldmluZm8tXHUwMDNlaW1hZ2VfbGVuKTtcbjEwNTM6XHRcdGlmIChlcnIgPT0gMClcbjEwNTQ6XHRcdFx0ZXJyID0gYnJjbWZfdXNiX2RscnVuKGRldmluZm8pO1xuMTA1NTpcdFxuMTA1NjpcdFx0dXNiX2F1dG9wbV9wdXRfaW50ZXJmYWNlKGludGYpO1xuMTA1NzpcdG91dDpcbjEwNTg6XHRcdHJldHVybiBlcnI7XG4xMDU5Olx0fVxuMTA2MDpcdFxuMTA2MTpcdFxuMTA2MjpcdHN0YXRpYyB2b2lkIGJyY21mX3VzYl9kZXRhY2goc3RydWN0IGJyY21mX3VzYmRldl9pbmZvICpkZXZpbmZvKVxuMTA2MzpcdHtcbjEwNjQ6XHRcdGJyY21mX2RiZyhVU0IsIFwmIzM0O0VudGVyLCBkZXZpbmZvICVwXFxuXCYjMzQ7LCBkZXZpbmZvKTtcbjEwNjU6XHRcbjEwNjY6XHRcdC8qIGZyZWUgdGhlIFVSQlMgKi9cbjEwNjc6XHRcdGJyY21mX3VzYl9mcmVlX3EoXHUwMDI2ZGV2aW5mby1cdTAwM2VyeF9mcmVlcSk7XG4xMDY4Olx0XHRicmNtZl91c2JfZnJlZV9xKFx1MDAyNmRldmluZm8tXHUwMDNldHhfZnJlZXEpO1xuMTA2OTpcdFxuMTA3MDpcdFx0dXNiX2ZyZWVfdXJiKGRldmluZm8tXHUwMDNlY3RsX3VyYik7XG4xMDcxOlx0XHR1c2JfZnJlZV91cmIoZGV2aW5mby1cdTAwM2VidWxrX3VyYik7XG4xMDcyOlx0XG4xMDczOlx0XHRrZnJlZShkZXZpbmZvLVx1MDAzZXR4X3JlcXMpO1xuMTA3NDpcdFx0a2ZyZWUoZGV2aW5mby1cdTAwM2VyeF9yZXFzKTtcbjEwNzU6XHRcbjEwNzY6XHRcdGlmIChkZXZpbmZvLVx1MDAzZXNldHRpbmdzKVxuMTA3NzpcdFx0XHRicmNtZl9yZWxlYXNlX21vZHVsZV9wYXJhbShkZXZpbmZvLVx1MDAzZXNldHRpbmdzKTtcbjEwNzg6XHR9XG4xMDc5Olx0XG4xMDgwOlx0XG4xMDgxOlx0c3RhdGljIGludCBjaGVja19maWxlKGNvbnN0IHU4ICpoZWFkZXJzKVxuMTA4MjpcdHtcbjEwODM6XHRcdHN0cnVjdCB0cnhfaGVhZGVyX2xlICp0cng7XG4xMDg0Olx0XHRpbnQgYWN0dWFsX2xlbiA9IC0xO1xuMTA4NTpcdFxuMTA4NjpcdFx0YnJjbWZfZGJnKFVTQiwgXCYjMzQ7RW50ZXJcXG5cJiMzNDspO1xuMTA4NzpcdFx0LyogRXh0cmFjdCB0cnggaGVhZGVyICovXG4xMDg4Olx0XHR0cnggPSAoc3RydWN0IHRyeF9oZWFkZXJfbGUgKikgaGVhZGVycztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTg6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIwNTQKCQkJCQkJCW91dHB1dDogNTEKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgRmlybXdhcmUgRG93bmxvYWQgRnVuY3Rpb24qKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZC4gQmVmb3JlIEkgcHJvY2VlZCBhbnkgZnVydGhlciB3aXRoIHRoZSBkZWJ1Z2dpbmcsIEkgbmVlZCB0byBnZXQgYSByZWFsbHkgc29saWQgZ3Jhc3Agb24gdGhlIGNvcmUgb2YgdGhpcyBpc3N1ZS4gSSBuZWVkIHRvIGRpdmUgc3RyYWlnaHQgaW50byB0aGUgY29kZS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gZXhhbWluZSB0aGUgYGJyY21mX3VzYl9md19kb3dubG9hZGAgZnVuY3Rpb24uIEl0JiMzOTtzIHRoZSBjcml0aWNhbCBwb2ludCB3aGVyZSB0aGUgZmlybXdhcmUgaXMgYWN0dWFsbHkgdHJhbnNmZXJyZWQgb3ZlciBVU0IuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjb250cm9sIGZsb3csIHRoZSBkYXRhIHN0cnVjdHVyZXMgaXQmIzM5O3MgaW50ZXJhY3Rpbmcgd2l0aCwgYW5kIGFueSBwb3RlbnRpYWwgcG9pbnRzIG9mIGZhaWx1cmUgd2l0aGluIGl0cyBleGVjdXRpb24uIFNlZWluZyB0aGUgZGlyZWN0IGltcGxlbWVudGF0aW9uIGlzIGNydWNpYWwgdG8gdW5kZXJzdGFuZGluZyB0aGUgcHJvYmxlbS4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGhhcHBlbmluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTg6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnJjbWZfdXNiX2Z3X2Rvd25sb2FkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM9MTAyOD1zdGF0aWMgaW50XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM6MTAyOTpicmNtZl91c2JfZndfZG93bmxvYWQoc3RydWN0IGJyY21mX3VzYmRldl9pbmZvICpkZXZpbmZvKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTEwMzAte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYz0xMTc2PXN0YXRpYyB2b2lkIGJyY21mX3VzYl9wcm9iZV9waGFzZTIoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgcmV0LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xMjAwLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jOjEyMDE6XHRyZXQgPSBicmNtZl91c2JfZndfZG93bmxvYWQoZGV2aW5mbyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtMTIwMi1cdHJlbGVhc2VfZmlybXdhcmUoZncpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxODo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjU4MwoJCQkJCQkJb3V0cHV0OiA1NAoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHdoYXQmIzM5O3MgZ29pbmcgdGhyb3VnaCBteSBtaW5kIGFzIEkgYXBwcm9hY2ggdGhpcyBwaWVjZSBvZiBjb2RlLCByZW5kZXJlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEaXZpbmcgaW50byBgYnJjbWZfdXNiX2Z3X2Rvd25sb2FkYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGBicmNtZl91c2JfZndfZG93bmxvYWRgIGZ1bmN0aW9uIGFjdHVhbGx5IHdvcmtzLiBNeSBndXQgdGVsbHMgbWUgdGhpcyBpcyB0aGUgY29yZSBvZiBob3cgZmlybXdhcmUgZ2V0cyBmcm9tIHRoZSBob3N0IHRvIHRoZSBCcm9hZGNvbSBVU0IgV2ktRmkgYWRhcHRlci4gR2l2ZW4gdGhlIG5hbWUsIGl0JiMzOTtzIHByZXR0eSBzZWxmLWV4cGxhbmF0b3J5LCBidXQgbGV0JiMzOTtzIG5vdCBtYWtlIGFzc3VtcHRpb25zLiBJJiMzOTtsbCBuZWVkIHRvIHNlZSBwcmVjaXNlbHkgaG93IGl0IGludGVyZmFjZXMgd2l0aCB0aGUgVVNCIGJ1cy4KCk15IGluaXRpYWwgcXVlc3Rpb25zIGFyZTogV2hhdCBhcmd1bWVudHMgZG9lcyBpdCB0YWtlPyBEb2VzIGl0IGhhbmRsZSB0aGUgdHJhbnNmZXIgaW4gcmF3IFVTQiB0cmFuc2FjdGlvbnM/IElzIHRoZXJlIGFueSBhYnN0cmFjdGlvbiBsYXllcj8gV2hhdCBraW5kIG9mIGVycm9yIGhhbmRsaW5nIGlzIGltcGxlbWVudGVkPyBEb2VzIGl0IHVzZSBjb250cm9sIHRyYW5zZmVycywgYnVsayB0cmFuc2ZlcnMsIG9yIGJvdGg/IEFyZSB0aGVyZSBhbnkgc3BlY2lmaWMgVVNCIGRlc2NyaXB0b3JzIG9yIGNvbW1hbmRzIHRoYXQgaXQgdXNlcyB0byBpbml0aWFsaXplIHRoZSBkZXZpY2Ugb3Igc2lnbmFsIHJlYWRpbmVzcyBmb3IgdGhlIGZpcm13YXJlIGRvd25sb2FkPyBBcmUgdGhlcmUgYW55IHNpemUgbGltaXRzIG9yIGFsaWdubWVudCByZXF1aXJlbWVudHMgaW1wb3NlZCBvbiB0aGUgZmlybXdhcmUgaW1hZ2U/CgpJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZTogbWVtb3J5IGFsbG9jYXRpb24gZm9yIGJ1ZmZlcnMsIHRoZSBVU0IgZGV2aWNlIGhhbmRsZSwgYW55IHN5bmNocm9uaXphdGlvbiBtZWNoYW5pc21zIHVzZWQgdG8gcHJldmVudCByYWNlIGNvbmRpdGlvbnMsIGFuZCBhbnkgcG90ZW50aWFsIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcyBsaWtlIGJ1ZmZlciBvdmVyZmxvd3MuIEkmIzM5O2xsIGJlIGludGVyZXN0ZWQgaW4gaG93IHRoZSBmdW5jdGlvbiBoYW5kbGVzIGRpZmZlcmVudCBmaXJtd2FyZSBzaXplcywgcG90ZW50aWFsIGRvd25sb2FkIGZhaWx1cmVzLCBhbmQgYW55IHJldHJ5IG1lY2hhbmlzbXMgaXQgZW1wbG95cy4gSSBrbm93IGZyb20gZXhwZXJpZW5jZSB0aGF0IFVTQiBmaXJtd2FyZSBkb3dubG9hZHMgY2FuIGJlIHRyaWNreSBiZWNhdXNlIG9mIHBvdGVudGlhbCBidXMgY29udGVudGlvbiBvciBwb3dlciBpc3N1ZXMsIHNvIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHJvYnVzdG5lc3MuIEkmIzM5O2xsIG5lZWQgdG8ga2VlcCBhbiBleWUgb3V0IGZvciBob3cgdGhpcyBkb3dubG9hZCBwcm9jZXNzIGZpdHMgaW50byB0aGUgb3ZlcmFsbCBkcml2ZXIgYXJjaGl0ZWN0dXJlLiBXaGVyZSBpcyB0aGlzIGZ1bmN0aW9uIGNhbGxlZCBmcm9tPyBXaGF0IHByZXJlcXVpc2l0ZXMgZG9lcyBpdCBoYXZlPyBJJiMzOTttIGFudGljaXBhdGluZyB0aGF0IGl0JiMzOTtzIGdvaW5nIHRvIGJlIGNhbGxlZCBkdXJpbmcgZGV2aWNlIGluaXRpYWxpemF0aW9uLCBidXQgbGV0JiMzOTtzIGNvbmZpcm0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE4OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTAyOCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMDI4Olx0c3RhdGljIGludFxuMTAyOTpcdGJyY21mX3VzYl9md19kb3dubG9hZChzdHJ1Y3QgYnJjbWZfdXNiZGV2X2luZm8gKmRldmluZm8pXG4xMDMwOlx0e1xuMTAzMTpcdFx0aW50IGVycjtcbjEwMzI6XHRcdHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmO1xuMTAzMzpcdFxuMTAzNDpcdFx0YnJjbWZfZGJnKFVTQiwgXCYjMzQ7RW50ZXJcXG5cJiMzNDspO1xuMTAzNTpcdFx0aWYgKCFkZXZpbmZvKSB7XG4xMDM2Olx0XHRcdGVyciA9IC1FTk9ERVY7XG4xMDM3Olx0XHRcdGdvdG8gb3V0O1xuMTAzODpcdFx0fVxuMTAzOTpcdFxuMTA0MDpcdFx0aWYgKCFkZXZpbmZvLVx1MDAzZWltYWdlKSB7XG4xMDQxOlx0XHRcdGJyY21mX2VycihcJiMzNDtObyBmaXJtd2FyZSFcXG5cJiMzNDspO1xuMTA0MjpcdFx0XHRlcnIgPSAtRU5PRU5UO1xuMTA0MzpcdFx0XHRnb3RvIG91dDtcbjEwNDQ6XHRcdH1cbjEwNDU6XHRcbjEwNDY6XHRcdGludGYgPSB0b191c2JfaW50ZXJmYWNlKGRldmluZm8tXHUwMDNlZGV2KTtcbjEwNDc6XHRcdGVyciA9IHVzYl9hdXRvcG1fZ2V0X2ludGVyZmFjZShpbnRmKTtcbjEwNDg6XHRcdGlmIChlcnIpXG4xMDQ5Olx0XHRcdGdvdG8gb3V0O1xuMTA1MDpcdFxuMTA1MTpcdFx0ZXJyID0gYnJjbWZfdXNiX2Rsc3RhcnQoZGV2aW5mbyxcbjEwNTI6XHRcdFx0KHU4ICopZGV2aW5mby1cdTAwM2VpbWFnZSwgZGV2aW5mby1cdTAwM2VpbWFnZV9sZW4pO1xuMTA1MzpcdFx0aWYgKGVyciA9PSAwKVxuMTA1NDpcdFx0XHRlcnIgPSBicmNtZl91c2JfZGxydW4oZGV2aW5mbyk7XG4xMDU1Olx0XG4xMDU2Olx0XHR1c2JfYXV0b3BtX3B1dF9pbnRlcmZhY2UoaW50Zik7XG4xMDU3Olx0b3V0OlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxODo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzQ0NQoJCQkJCQkJb3V0cHV0OiA0NwoJCQkJCQkJdGhvdWdodHM6IDkyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGJyZWFrZG93biBvZiB3aGF0JiMzOTtzIGdvaW5nIG9uLCB0aGlua2luZyB0aHJvdWdoIHRoaXMgYXMgYW4gZXhwZXJ0IGluIHRoZSBmaWVsZDoKCioqQW5hbHl6aW5nIHRoZSBVU0IgRmlybXdhcmUgRG93bmxvYWQgU2VxdWVuY2UqKgoKUmlnaHQsIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IHRoZSBmaXJtd2FyZSBkb3dubG9hZCBwcm9jZXNzIG92ZXIgVVNCIGZvciB0aGlzIEJyb2FkY29tIFdpLUZpIGRyaXZlciwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBhIHNpbXVsYXRlZCBVU0IgZGV2aWNlLCBsaWtlbHkgd2l0aGluIGEgZnV6emluZyBjb250ZXh0IGxpa2Ugc3l6a2FsbGVyLiBUaGUgaW5pdGlhbCBzdGVwcyBhcmUgcHJldHR5IGNsZWFyLiBgYnJjbWZfdXNiX2Rsc3RhcnRgIGFuZCBgYnJjbWZfdXNiX2RscnVuYCBhcmUgdGhlIGtleSBmdW5jdGlvbnMgaGVyZSwgdGhleSYjMzk7cmUgcmVzcG9uc2libGUgZm9yIHNlbmRpbmcgdGhlIGFjdHVhbCBVU0IgY29udHJvbCBtZXNzYWdlcyB0byB0aGUgZGV2aWNlIHRvIGtpY2sgb2ZmIHRoZSBmaXJtd2FyZSBsb2FkaW5nLiBHb29kLCBtYWtlcyBzZW5zZS4gQW5kIGJlY2F1c2Ugd2UmIzM5O3JlIGZ1enppbmcsIHRoYXQgZW11bGF0ZWQgVVNCIGRldmljZSBpcyBjYXBhYmxlIG9mIGFja25vd2xlZGdpbmcgdGhvc2UgY29udHJvbCBtZXNzYWdlcy4gVGhpcyBpcyBjcnVjaWFsIGZvciBrZWVwaW5nIHRoZSBmaXJtd2FyZSBkb3dubG9hZCBwcm9jZXNzIG1vdmluZyBmb3J3YXJkIGluIHRoZSBmdXp6aW5nIGVudmlyb25tZW50LgoKVGhlIHRoaW5nIHRoYXQgcGlxdWVzIG15IGludGVyZXN0IGlzIHRoZSBuZXh0IHN0YWdlLiBJZiB0aGUgaW5pdGlhbCBkb3dubG9hZCB2aWEgYGJyY21mX3VzYl9md19kb3dubG9hZGAgY29tcGxldGVzIHN1Y2Nlc3NmdWxseSwgdGhlIGNvZGUgYnJhbmNoZXMgaW50byBgYnJjbWZfYWxsb2NgIGFuZCBgYnJjbWZfYXR0YWNoYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgcmVhbCBkcml2ZXIgaW5pdGlhbGl6YXRpb24gYW5kIGRldmljZSBhdHRhY2htZW50IHRha2VzIHBsYWNlLiBgYnJjbWZfYWxsb2NgIGlzIHByb2JhYmx5IHNldHRpbmcgdXAgc29tZSBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZXMsIGFuZCB0aGVuLCBgYnJjbWZfYXR0YWNoYCBpcyB3aGVyZSB0aGUgZGV2aWNlLXNwZWNpZmljIGluaXRpYWxpemF0aW9uIGlzIGhhbmRsZWQsIHRoZSBoYXJkd2FyZSBpbnRlcmZhY2UgZXN0YWJsaXNoZWQuIFRoZSByZWFsIG1lYXQgb2YgdGhlIGRyaXZlciBpbnRlcmFjdGlvbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gcmVhbGx5IGRlbHZlIGludG8gaG93IGBicmNtZl9hdHRhY2hgIHdvcmtzLiBUaGF0JiMzOTtzIHdoZXJlIHdlJiMzOTtyZSBtb3N0IGxpa2VseSB0byBmaW5kIGludGVyZXN0aW5nIGF0dGFjayBzdXJmYWNlcyBvciBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIGlmIHRoZSBkb3dubG9hZCBpdHNlbGYgaGFzIGFscmVhZHkgd29ya2VkLiBJJiMzOTtsbCBuZWVkIHRvIGdvIGxvb2sgaW50byBpdHMgaW1wbGVtZW50YXRpb24gbm93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxODo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticmNtZl9hdHRhY2gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9idXMuaD0zMDU9aW50IGJyY21mX2FsbG9jKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGJyY21mX21wX2RldmljZSAqc2V0dGluZ3MpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2J1cy5oLTMwNi0vKiBJbmRpY2F0aW9uIGZyb20gYnVzIG1vZHVsZSByZWdhcmRpbmcgcHJlc2VuY2UvaW5zZXJ0aW9uIG9mIGRvbmdsZS4gKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9idXMuaDozMDc6aW50IGJyY21mX2F0dGFjaChzdHJ1Y3QgZGV2aWNlICpkZXYpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2J1cy5oLTMwOC0vKiBJbmRpY2F0aW9uIGZyb20gYnVzIG1vZHVsZSByZWdhcmRpbmcgcmVtb3ZhbC9hYnNlbmNlIG9mIGRvbmdsZSAqL1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb21tb24uaC0xOC0gKiAobW9kdWxlKSBpbml0aWxpYXphdGlvbiB0YWtlcyBwbGFjZS4gVGhlIGRldmljZSBzcGVjaWZpYyBzZXR0aW5ncyBpcyBwYXJ0XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29tbW9uLmg6MTk6ICogb2YgdGhlIGRydnIgc3RydWN0IGFuZCBzaG91bGQgYmUgaW5pdGlhbGl6ZWQgb24gZXZlcnkgYnJjbWZfYXR0YWNoLlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvbW1vbi5oLTIwLSAqL1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmM9MTMzMD1pbnQgYnJjbWZfYWxsb2Moc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgYnJjbWZfbXBfZGV2aWNlICpzZXR0aW5ncylcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jLTEzNTgtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jOjEzNTk6aW50IGJyY21mX2F0dGFjaChzdHJ1Y3QgZGV2aWNlICpkZXYpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jLTEzNjAte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmM9MTQ0Nj12b2lkIGJyY21mX2Z3X2NyYXNoZWQoc3RydWN0IGRldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmMtMTQ1MC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmM6MTQ1MTpcdC8qIE1heSBmaXJlIGJlZm9yZSBicmNtZl9hdHRhY2goKSB3aXJlcyB1cCBkcnZyLCBvciBhZnRlciByZW1vdmFsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jLTE0NTItXHQgKiBoYXMgY2xlYXJlZCBpdDsgZ3VhcmQgdGhlIGRlcmVmcyBiZWxvdyAoYW5kIHRoZSBhcm1pbmcgZ2F0ZSBpblxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmM9MjEzOT1zdGF0aWMgdm9pZCBicmNtZl9wY2llX3NldHVwKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHJldCxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jLTIyMTktXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jOjIyMjA6XHRyZXQgPSBicmNtZl9hdHRhY2goXHUwMDI2ZGV2aW5mby1cdTAwM2VwZGV2LVx1MDAzZWRldik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jLTIyMjEtXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9zZGlvLmM9NDIwOT1zdGF0aWMgdm9pZCBicmNtZl9zZGlvX2Zpcm13YXJlX2NhbGxiYWNrKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IGVycixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvc2Rpby5jLTQzOTktXHQvKiBBdHRhY2ggdG8gdGhlIGNvbW1vbiBsYXllciwgcmVzZXJ2ZSBoZHIgc3BhY2UgKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9zZGlvLmM6NDQwMDpcdGVyciA9IGJyY21mX2F0dGFjaChzZGlvZC1cdTAwM2VkZXYpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3NkaW8uYy00NDAxLVx0aWYgKGVyciAhPSAwKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvc2Rpby5jOjQ0MDI6XHRcdGJyY21mX2VycihcJiMzNDticmNtZl9hdHRhY2ggZmFpbGVkXFxuXCYjMzQ7KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9zZGlvLmMtNDQwMy1cdFx0Z290byBmcmVlO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYz0xMTc2PXN0YXRpYyB2b2lkIGJyY21mX3VzYl9wcm9iZV9waGFzZTIoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgcmV0LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xMjEwLVx0LyogQXR0YWNoIHRvIHRoZSBjb21tb24gZHJpdmVyIGludGVyZmFjZSAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jOjEyMTE6XHRyZXQgPSBicmNtZl9hdHRhY2goZGV2aW5mby1cdTAwM2VkZXYpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTEyMTItXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYz0xMjQ0PXN0YXRpYyBpbnQgYnJjbWZfdXNiX3Byb2JlX2NiKHN0cnVjdCBicmNtZl91c2JkZXZfaW5mbyAqZGV2aW5mbyxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtMTI5MS1cdFx0XHRnb3RvIGZhaWw7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM6MTI5MjpcdFx0cmV0ID0gYnJjbWZfYXR0YWNoKGRldmluZm8tXHUwMDNlZGV2KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xMjkzLVx0XHRpZiAocmV0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxODo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTQyOAoJCQkJCQkJb3V0cHV0OiA1NAoJCQkJCQkJdGhvdWdodHM6IDEyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFVTQiBQcm9iZSBDYWxsYmFjayoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgYnJjbWZfdXNiX3Byb2JlX2NiYCBmdW5jdGlvbiBhbmQgaW1tZWRpYXRlbHksIG15IGV5ZXMgYXJlIGRyYXduIHRvIHRoaXMgY29uZGl0aW9uYWwgc3RhdGVtZW50LiBJdCBzdGFydHMgd2l0aCBhIGNhbGwgdG8gYGJyY21mX3VzYl9kbG5lZWRlZChkZXZpbmZvKWAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgdGhpcyBmdW5jdGlvbiBkb2VzIGJlY2F1c2UgaXRzIHJldHVybiB2YWx1ZSBkaWN0YXRlcyB0aGUgZW50aXJlIHN1YnNlcXVlbnQgZmxvdy4gSWYgaXQgcmV0dXJucyBmYWxzZSwgbWVhbmluZyB0aGUgZG93bmxvYWQgaXNuJiMzOTt0IG5lZWRlZCwgdGhlbiB0aGUgbmV4dCBzdGVwcyBpbnZvbHZlIGFsbG9jYXRpb24sIGF0dGFjaG1lbnQsIGFuZCBob3BlZnVsbHksIHN1Y2Nlc3MuIENvbnZlcnNlbHksIGlmIGBicmNtZl91c2JfZGxuZWVkZWRgIHJldHVybnMgdHJ1ZSwgdGhlbiB0aGUgY29kZSBwYXRoIHdvdWxkIGRpdmVyZ2U7IHdoaWNoIHRoaXMgY29kZSBzbmlwcGV0IGRvZXNuJiMzOTt0IHNob3cuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIGRlZmluaXRpb24gb2YgYGJyY21mX3VzYl9kbG5lZWRlZGAgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgbG9naWMgYW5kIGhvdyB0aGlzIHByb2JlIGNhbGxiYWNrIGhhbmRsZXMgZGlmZmVyZW50IHNjZW5hcmlvcywgcGFydGljdWxhcmx5IGluIHJlbGF0aW9uIHRvIHRoZSBzdGF0ZSBvZiB0aGUgZGV2aWNlIGFuZCBhbnkgbmVjZXNzYXJ5IGZpcm13YXJlIGxvYWRpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE4OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTI0NCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjQ0Olx0c3RhdGljIGludCBicmNtZl91c2JfcHJvYmVfY2Ioc3RydWN0IGJyY21mX3VzYmRldl9pbmZvICpkZXZpbmZvLFxuMTI0NTpcdFx0XHRcdCAgICAgIGVudW0gYnJjbWZfZnd2ZW5kb3IgZnd2aWQpXG4xMjQ2Olx0e1xuMTI0NzpcdFx0c3RydWN0IGJyY21mX2J1cyAqYnVzO1xuMTI0ODpcdFx0c3RydWN0IGJyY21mX3VzYmRldiAqYnVzX3B1YjtcbjEyNDk6XHRcdHN0cnVjdCBkZXZpY2UgKmRldiA9IGRldmluZm8tXHUwMDNlZGV2O1xuMTI1MDpcdFx0c3RydWN0IGJyY21mX2Z3X3JlcXVlc3QgKmZ3cmVxO1xuMTI1MTpcdFx0aW50IHJldDtcbjEyNTI6XHRcbjEyNTM6XHRcdGJyY21mX2RiZyhVU0IsIFwmIzM0O0VudGVyXFxuXCYjMzQ7KTtcbjEyNTQ6XHRcdGJ1c19wdWIgPSBicmNtZl91c2JfYXR0YWNoKGRldmluZm8sIEJSQ01GX1VTQl9OUlhRLCBCUkNNRl9VU0JfTlRYUSk7XG4xMjU1Olx0XHRpZiAoIWJ1c19wdWIpXG4xMjU2Olx0XHRcdHJldHVybiAtRU5PREVWO1xuMTI1NzpcdFxuMTI1ODpcdFx0YnVzID0ga3phbGxvY19vYmooKmJ1cywgR0ZQX0FUT01JQyk7XG4xMjU5Olx0XHRpZiAoIWJ1cykge1xuMTI2MDpcdFx0XHRyZXQgPSAtRU5PTUVNO1xuMTI2MTpcdFx0XHRnb3RvIGZhaWw7XG4xMjYyOlx0XHR9XG4xMjYzOlx0XHRtdXRleF9pbml0KFx1MDAyNmJ1cy1cdTAwM2VidXNfcmVzZXRfbG9jayk7XG4xMjY0Olx0XG4xMjY1Olx0XHRidXMtXHUwMDNlZGV2ID0gZGV2O1xuMTI2NjpcdFx0YnVzX3B1Yi1cdTAwM2VidXMgPSBidXM7XG4xMjY3Olx0XHRidXMtXHUwMDNlYnVzX3ByaXYudXNiID0gYnVzX3B1YjtcbjEyNjg6XHRcdGRldl9zZXRfZHJ2ZGF0YShkZXYsIGJ1cyk7XG4xMjY5Olx0XHRidXMtXHUwMDNlb3BzID0gXHUwMDI2YnJjbWZfdXNiX2J1c19vcHM7XG4xMjcwOlx0XHRidXMtXHUwMDNlcHJvdG9fdHlwZSA9IEJSQ01GX1BST1RPX0JDREM7XG4xMjcxOlx0XHRidXMtXHUwMDNlZnd2aWQgPSBmd3ZpZDtcbjEyNzI6XHRcdGJ1cy1cdTAwM2VhbHdheXNfdXNlX2Z3c19xdWV1ZSA9IHRydWU7XG4xMjczOlx0I2lmZGVmIENPTkZJR19QTVxuMTI3NDpcdFx0YnVzLVx1MDAzZXdvd2xfc3VwcG9ydGVkID0gdHJ1ZTtcbjEyNzU6XHQjZW5kaWZcbjEyNzY6XHRcbjEyNzc6XHRcdGRldmluZm8tXHUwMDNlc2V0dGluZ3MgPSBicmNtZl9nZXRfbW9kdWxlX3BhcmFtKGJ1cy1cdTAwM2VkZXYsIEJSQ01GX0JVU1RZUEVfVVNCLFxuMTI3ODpcdFx0XHRcdFx0XHRcdCAgIGJ1c19wdWItXHUwMDNlZGV2aWQsXG4xMjc5Olx0XHRcdFx0XHRcdFx0ICAgYnVzX3B1Yi1cdTAwM2VjaGlwcmV2KTtcbjEyODA6XHRcdGlmICghZGV2aW5mby1cdTAwM2VzZXR0aW5ncykge1xuMTI4MTpcdFx0XHRyZXQgPSAtRU5PTUVNO1xuMTI4MjpcdFx0XHRnb3RvIGZhaWw7XG4xMjgzOlx0XHR9XG4xMjg0Olx0XHRyZXQgPSBQVFJfRVJSX09SX1pFUk8oZGV2aW5mby1cdTAwM2VzZXR0aW5ncyk7XG4xMjg1Olx0XHRpZiAocmV0IFx1MDAzYyAwKVxuMTI4NjpcdFx0XHRnb3RvIGZhaWw7XG4xMjg3Olx0XG4xMjg4Olx0XHRpZiAoIWJyY21mX3VzYl9kbG5lZWRlZChkZXZpbmZvKSkge1xuMTI4OTpcdFx0XHRyZXQgPSBicmNtZl9hbGxvYyhkZXZpbmZvLVx1MDAzZWRldiwgZGV2aW5mby1cdTAwM2VzZXR0aW5ncyk7XG4xMjkwOlx0XHRcdGlmIChyZXQpXG4xMjkxOlx0XHRcdFx0Z290byBmYWlsO1xuMTI5MjpcdFx0XHRyZXQgPSBicmNtZl9hdHRhY2goZGV2aW5mby1cdTAwM2VkZXYpO1xuMTI5MzpcdFx0XHRpZiAocmV0KVxuMTI5NDpcdFx0XHRcdGdvdG8gZmFpbDtcbjEyOTU6XHRcdFx0Lyogd2UgYXJlIGRvbmUgKi9cbjEyOTY6XHRcdFx0Y29tcGxldGUoXHUwMDI2ZGV2aW5mby1cdTAwM2VkZXZfaW5pdF9kb25lKTtcbjEyOTc6XHRcdFx0cmV0dXJuIDA7XG4xMjk4Olx0XHR9XG4xMjk5Olx0XHRidXMtXHUwMDNlY2hpcCA9IGJ1c19wdWItXHUwMDNlZGV2aWQ7XG4xMzAwOlx0XHRidXMtXHUwMDNlY2hpcHJldiA9IGJ1c19wdWItXHUwMDNlY2hpcHJldjtcbjEzMDE6XHRcbjEzMDI6XHRcdGZ3cmVxID0gYnJjbWZfdXNiX3ByZXBhcmVfZndfcmVxdWVzdChkZXZpbmZvKTtcbjEzMDM6XHRcdGlmICghZndyZXEpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTg6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY3MzEKCQkJCQkJCW91dHB1dDogNTAKCQkJCQkJCXRob3VnaHRzOiA0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmU6CgoqKkRpdmluZyBpbnRvIHRoZSBGaXJtd2FyZSBEb3dubG9hZCBMb2dpYyoqCgpBbHJpZ2h0LCBzbyB0aGUgY29yZSBvZiB0aGlzIHNlZW1zIHRvIGJlIGFib3V0IGhvdyB0aGUgQnJvYWRjb20gVVNCIGRyaXZlciBoYW5kbGVzIGZpcm13YXJlIGxvYWRpbmcuIElmIGBicmNtZl91c2JfZGxuZWVkZWRgIHJldHVybnMgYGZhbHNlYCwgdGhhdCB0ZWxscyB1cyB3ZSAqZG9uJiMzOTt0KiBuZWVkIHRvIGRvd25sb2FkIGZpcm13YXJlLCB3aGljaCBpcyBpbXBvcnRhbnQgZm9yIGVmZmljaWVuY3kgYW5kIGF2b2lkaW5nIHVubmVjZXNzYXJ5IHN0ZXBzLiBUaGF0IG1lYW5zIHRoZSBkcml2ZXIgYnlwYXNzZXMgdGhlIGRvd25sb2FkIHN0YWdlIGVudGlyZWx5IGFuZCBqdW1wcyByaWdodCBpbnRvIGNhbGxpbmcgYGJyY21mX2F0dGFjaGAuCgpNeSBmaXJzdCBpbmNsaW5hdGlvbiB3aGVuIHNlZWluZyB0aGlzIGlzIHRvIGRpZyBkZWVwZXIgaW50byB0aGF0IGBicmNtZl91c2JfZGxuZWVkZWRgIGZ1bmN0aW9uLiBVbmRlcnN0YW5kaW5nIGl0cyBsb2dpYyBpcyBjcnVjaWFsLiBXaGF0IGNvbmRpdGlvbnMgZG9lcyBpdCBjaGVjaz8gV2hhdCBjcml0ZXJpYSBkZXRlcm1pbmUgd2hldGhlciBhIGZpcm13YXJlIGRvd25sb2FkIGlzIGFjdHVhbGx5IG5lY2Vzc2FyeT8gSXMgaXQgYmFzZWQgb24gdGhlIGhhcmR3YXJlIHJldmlzaW9uLCB0aGUgcHJlc2VuY2Ugb2YgcHJlLWxvYWRlZCBmaXJtd2FyZSwgb3Igc29tZSBvdGhlciBmYWN0b3I/IFRoZSBkZXNpZ24gaGVyZSBzZWVtcyBsaWtlIGFuIG9wdGltaXphdGlvbi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbmRpdGlvbnMgdGhhdCB0cmlnZ2VyIHRoZSBvcHRpbWl6YXRpb24gLSB0aGUgY29uZGl0aW9ucyB3aGVyZSBkb3dubG9hZGluZyBpcyBza2lwcGVkLiBUaGUgZ29hbCBpcyB0byBzZWUgaWYgYW55IHBvdGVudGlhbCBpc3N1ZXMgY291bGQgYXJpc2UgZnJvbSBkaXJlY3RseSBhdHRhY2hpbmcgaW4gdGhvc2Ugc2NlbmFyaW9zLCBvciBpZiB0aGlzIGlzIGEgd2VsbC1jb25zaWRlcmVkIG9wdGltaXphdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxvZ2ljIGZsb3cgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTg6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnJjbWZfdXNiX2RsbmVlZGVkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM9Nzk3PXN0YXRpYyBib29sXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM6Nzk4OmJyY21mX3VzYl9kbG5lZWRlZChzdHJ1Y3QgYnJjbWZfdXNiZGV2X2luZm8gKmRldmluZm8pXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtNzk5LXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM9MTI0ND1zdGF0aWMgaW50IGJyY21mX3VzYl9wcm9iZV9jYihzdHJ1Y3QgYnJjbWZfdXNiZGV2X2luZm8gKmRldmluZm8sXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTEyODctXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM6MTI4ODpcdGlmICghYnJjbWZfdXNiX2RsbmVlZGVkKGRldmluZm8pKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtMTI4OS1cdFx0cmV0ID0gYnJjbWZfYWxsb2MoZGV2aW5mby1cdTAwM2VkZXYsIGRldmluZm8tXHUwMDNlc2V0dGluZ3MpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxODo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzM5MgoJCQkJCQkJb3V0cHV0OiA1MwoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiBgYnJjbWZfdXNiX2RsbmVlZGVkYDoKCioqQW5hbHl6aW5nIGJyY21mX3VzYl9kbG5lZWRlZCoqCgpBbHJpZ2h0LCBJJiMzOTttIGdvaW5nIHRvIHRha2UgYSBsb29rIGF0IHRoZSBgYnJjbWZfdXNiX2RsbmVlZGVkYCBmdW5jdGlvbi4gSSBpbW1lZGlhdGVseSB3YW50IHRvIHVuZGVyc3RhbmQgaXRzIHB1cnBvc2Ugd2l0aGluIHRoZSBicm9hZGVyIFVTQiB3aXJlbGVzcyBkcml2ZXIgY29udGV4dC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIGl0IGxpa2VseSBkZXRlcm1pbmVzIGlmIGEgZmlybXdhcmUgZG93bmxvYWQgaXMgcmVxdWlyZWQgZm9yIGEgcGFydGljdWxhciBCcm9hZGNvbSBVU0Igd2lyZWxlc3MgZGV2aWNlLiBUaGUgJiMzNDtkbCYjMzQ7IGRlZmluaXRlbHkgc3VnZ2VzdHMgJiMzNDtkb3dubG9hZCwmIzM0OyBhbmQgJiMzNDtuZWVkZWQmIzM0OyBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBJJiMzOTttIGdvaW5nIHRvIGJlIGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IHRoZSBkZXZpY2UmIzM5O3MgY2FwYWJpbGl0aWVzLCBpdHMgY3VycmVudCBzdGF0ZSwgYW5kIHBlcmhhcHMgaW5mb3JtYXRpb24gaW5kaWNhdGluZyBpZiB0aGUgZmlybXdhcmUgaXMgYWxyZWFkeSBwcmVzZW50IG9yIGlmIHRoZSBkcml2ZXIgbmVlZHMgdG8gaW5pdGlhdGUgYSBkb3dubG9hZCBzZXF1ZW5jZS4gSSBleHBlY3QgdG8gc2VlIGNoZWNrcyByZWxhdGVkIHRvIGRldmljZSBJRHMsIGZpcm13YXJlIHZlcnNpb24gY29tcGF0aWJpbGl0eSwgYW5kIHBlcmhhcHMgZXZlbiBzb21lIG5lZ290aWF0aW9uIHdpdGggdGhlIGRldmljZSBpdHNlbGYuIEkmIzM5O2xsIGJlIHdhdGNoaW5nIGNsb3NlbHkgZm9yIGFueSBlcnJvciBoYW5kbGluZzsgZGV0ZXJtaW5pbmcgd2hlbiBhbmQgaG93IHRoZSBmdW5jdGlvbiBkZWNpZGVzIHRoYXQgYSBkb3dubG9hZCBpcyAqbm90KiBuZWVkZWQgaXMganVzdCBhcyBpbXBvcnRhbnQgYXMgd2hlbiBpdCBkZWNpZGVzIHRoYXQgaXQgKmlzKi4gSSYjMzk7bSBhbnRpY2lwYXRpbmcgdGhhdCBpdCYjMzk7cyBwcm9iYWJseSB1c2luZyBhIHNldCBvZiBjcml0ZXJpYSB0byBjb21wYXJlIHRoZSBydW5uaW5nIGRyaXZlciB0byB0aGUgaGFyZHdhcmUgaW4gcXVlc3Rpb24sIGFuZCBiYXNlZCBvbiBzb21lIGxvZ2ljIHdpdGhpbiB0aGUgZnVuY3Rpb24gaXQgd2lsbCBlaXRoZXIga2ljayBvZmYgYSBmaXJtd2FyZSBkb3dubG9hZCBvciBkZWNsYXJlIHRoYXQgaXQgaXNuJiMzOTt0IG5lY2Vzc2FyeS4gSSYjMzk7bGwgYWxzbyBiZSBsb29raW5nIGZvciBhbnkgaW5kaWNhdGlvbnMgb2YgcmFjZSBjb25kaXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxODo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDc5NywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNzk3Olx0c3RhdGljIGJvb2xcbiA3OTg6XHRicmNtZl91c2JfZGxuZWVkZWQoc3RydWN0IGJyY21mX3VzYmRldl9pbmZvICpkZXZpbmZvKVxuIDc5OTpcdHtcbiA4MDA6XHRcdHN0cnVjdCBib290cm9tX2lkX2xlIGlkO1xuIDgwMTpcdFx0dTMyIGNoaXBpZCwgY2hpcHJldjtcbiA4MDI6XHRcbiA4MDM6XHRcdGJyY21mX2RiZyhVU0IsIFwmIzM0O0VudGVyXFxuXCYjMzQ7KTtcbiA4MDQ6XHRcbiA4MDU6XHRcdGlmIChkZXZpbmZvID09IE5VTEwpXG4gODA2Olx0XHRcdHJldHVybiBmYWxzZTtcbiA4MDc6XHRcbiA4MDg6XHRcdC8qIENoZWNrIGlmIGZpcm13YXJlIGRvd25sb2FkZWQgYWxyZWFkeSBieSBxdWVyeWluZyBydW50aW1lIElEICovXG4gODA5Olx0XHRpZC5jaGlwID0gY3B1X3RvX2xlMzIoMHhERUFEKTtcbiA4MTA6XHRcdGJyY21mX3VzYl9kbF9jbWQoZGV2aW5mbywgRExfR0VUVkVSLCBcdTAwMjZpZCwgc2l6ZW9mKGlkKSk7XG4gODExOlx0XG4gODEyOlx0XHRjaGlwaWQgPSBsZTMyX3RvX2NwdShpZC5jaGlwKTtcbiA4MTM6XHRcdGNoaXByZXYgPSBsZTMyX3RvX2NwdShpZC5jaGlwcmV2KTtcbiA4MTQ6XHRcbiA4MTU6XHRcdGlmICgoY2hpcGlkIFx1MDAyNiAweDQzMDApID09IDB4NDMwMClcbiA4MTY6XHRcdFx0YnJjbWZfZGJnKFVTQiwgXCYjMzQ7Y2hpcCAleCByZXYgMHgleFxcblwmIzM0OywgY2hpcGlkLCBjaGlwcmV2KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTg6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgwOTQKCQkJCQkJCW91dHB1dDogNTMKCQkJCQkJCXRob3VnaHRzOiA3MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi4KCioqQW5hbHl6aW5nIHRoZSBGaXJtd2FyZSBEb3dubG9hZCBDaGVjayBpbiBgYnJjbWZfdXNiX2RsbmVlZGVkYCoqCgpSaWdodCwgc28gYGJyY21mX3VzYl9kbG5lZWRlZGAgaXMgdGhlIGZ1bmN0aW9uIHdlJiMzOTtyZSBsb29raW5nIGF0LiBUaGUgY29yZSBpZGVhIHNlZW1zIHRvIGJlIHdoZXRoZXIgb3Igbm90IGZpcm13YXJlIG5lZWRzIHRvIGJlIGRvd25sb2FkZWQsIGFuZCBpdCYjMzk7cyBkb2luZyB0aGlzIGJ5IHRhbGtpbmcgdG8gdGhlIGRldmljZSBpdHNlbGYuIEludGVyZXN0aW5nLiBTbywgaXQmIzM5O3Mgbm90IHJlbHlpbmcgc29sZWx5IG9uIHNvbWUgaW50ZXJuYWwgZmxhZyBvciBzdGF0ZTsgaXQmIzM5O3MgYWN0aXZlbHkgcXVlcnlpbmcgdGhlIGVtdWxhdGVkIGRldmljZSwgaW4gdGhpcyBjYXNlIHN5emthbGxlci4KCkFuZCBoZXJlJiMzOTtzIHdoZXJlIHRoZSBudWFuY2UgY29tZXMgaW4gLSB0aGUgZGV2aWNlJiMzOTtzIHJlc3BvbnNlIGNhbiBhY3R1YWxseSAqdHJpY2sqIGBicmNtZl91c2JfZGxuZWVkZWRgIGludG8gdGhpbmtpbmcgdGhlIGZpcm13YXJlIGlzIGFscmVhZHkgdGhlcmUuIElmIHN5emthbGxlciwgaW4gaXRzIGVtdWxhdGlvbiwgcmV0dXJucyBhIHBhcnRpY3VsYXIgdmFsdWUgaW4gcmVzcG9uc2UgdG8gdGhlIHF1ZXJ5LCBgYnJjbWZfdXNiX2RsbmVlZGVkYCBjYW4gcHJlbWF0dXJlbHkgcmV0dXJuIGBmYWxzZWAuIFRoYXQgaXMgYSBjcml0aWNhbCBwb2ludC4KCk5vdywgSSYjMzk7bSBnb2luZyB0byBkaWcgZGVlcGVyIGludG8gdGhlIGFjdHVhbCBjb2RlIG9mIGBicmNtZl91c2JfZGxuZWVkZWRgIGFuZCBwaW5wb2ludCBleGFjdGx5IGhvdyB0aGlzIGNoZWNrIHdvcmtzLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSByZWFsIHBvdGVudGlhbCBmb3IgZXhwbG9pdGF0aW9uIGxpZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXRhaWxzIG9mIHRoYXQgcXVlcnkgYW5kIHRoZSBzcGVjaWZpYyB2YWx1ZSB0aGF0IGNhdXNlcyB0aGlzIGJlaGF2aW9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxODo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDgxNywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgODE3Olx0XHRlbHNlXG4gODE4Olx0XHRcdGJyY21mX2RiZyhVU0IsIFwmIzM0O2NoaXAgJWQgcmV2IDB4JXhcXG5cJiMzNDssIGNoaXBpZCwgY2hpcHJldik7XG4gODE5Olx0XHRpZiAoY2hpcGlkID09IEJSQ01GX1BPU1RCT09UX0lEKSB7XG4gODIwOlx0XHRcdGJyY21mX2RiZyhVU0IsIFwmIzM0O2Zpcm13YXJlIGFscmVhZHkgZG93bmxvYWRlZFxcblwmIzM0Oyk7XG4gODIxOlx0XHRcdGJyY21mX3VzYl9kbF9jbWQoZGV2aW5mbywgRExfUkVTRVRDRkcsIFx1MDAyNmlkLCBzaXplb2YoaWQpKTtcbiA4MjI6XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDgyMzpcdFx0fSBlbHNlIHtcbiA4MjQ6XHRcdFx0ZGV2aW5mby1cdTAwM2VidXNfcHViLmRldmlkID0gY2hpcGlkO1xuIDgyNTpcdFx0XHRkZXZpbmZvLVx1MDAzZWJ1c19wdWIuY2hpcHJldiA9IGNoaXByZXY7XG4gODI2Olx0XHR9XG4gODI3Olx0XHRyZXR1cm4gdHJ1ZTtcbiA4Mjg6XHR9XG4gODI5Olx0XG4gODMwOlx0c3RhdGljIGludFxuIDgzMTpcdGJyY21mX3VzYl9yZXNldGNmZyhzdHJ1Y3QgYnJjbWZfdXNiZGV2X2luZm8gKmRldmluZm8pXG4gODMyOlx0e1xuIDgzMzpcdFx0c3RydWN0IGJvb3Ryb21faWRfbGUgaWQ7XG4gODM0Olx0XHR1MzIgbG9vcF9jbnQ7XG4gODM1Olx0XHRpbnQgZXJyO1xuIDgzNjpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxODo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODc5NAoJCQkJCQkJb3V0cHV0OiA1MgoJCQkJCQkJdGhvdWdodHM6IDE3NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipVU0IgRW11bGF0aW9uIGFuZCBicmNtZm1hYyBGdXp6aW5nIFBvc3NpYmlsaXRpZXMqKgoKT2theSwgdGhpcyBpcyBwcm9taXNpbmchIFRoZSBmYWN0IHRoYXQgaWYgdGhlIGVtdWxhdGVkIFVTQiBkZXZpY2UgcmVwbGllcyB0byBgRExfR0VUVkVSYCB3aXRoIGBCUkNNRl9QT1NUQk9PVF9JRGAsIGBicmNtZl91c2JfZGxuZWVkZWRgIHdpbGwgcmV0dXJuIGZhbHNlIGlzIGEgaHVnZSB3aW4uIFRoaXMgbWVhbnMgdGhlIGRyaXZlciB3aWxsIGJ5cGFzcyB0aGUgZmlybXdhcmUgZG93bmxvYWQgYW5kIGRpcmVjdGx5IGhpdCBgYnJjbWZfYXR0YWNoYC4gVGhhdOKAmXMgYSBrZXkgc3RlcCB0byBiZWluZyBhYmxlIHRvIGZ1enogYGJyY21mbWFjYCBvdmVyIFVTQiB3aXRoIHN5emthbGxlci4KCk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBgYnJjbWZfY3l3X2V4dGVybmFsX2F1dGhgIGZ1bmN0aW9uIGZpdHMgaW50byB0aGlzLiBJdCYjMzk7cyByZWdpc3RlcmVkIGFzIGBkcnZyLSZndDtvcHMtJmd0O2V4dGVybmFsX2F1dGhgIGluIGBicmNtZl9jeXdfZ2V0X2NmZzgwMjExX29wc2AsIHNvIGl0JiMzOTtzIGNyaXRpY2FsIHRvIGRldGVybWluZSBpZiB0aGF0IGZ1bmN0aW9uIGlzIGV2ZW4gY2FsbGVkLiBMZXTigJlzIGZpZ3VyZSBvdXQgd2hlcmUgYGdldF9jZmc4MDIxMV9vcHNgIGdldHMgY2FsbGVkIGFuZCB0aGF0IHNob3VsZCB0ZWxsIG1lIHdoZXRoZXIgYGJyY21mX2N5d19leHRlcm5hbF9hdXRoYCBpcyBhIHRhcmdldC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTg6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z2V0X2NmZzgwMjExX29wcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuYz0xMzU5PWludCBicmNtZl9hdHRhY2goc3RydWN0IGRldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmMtMTM5OS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmM6MTQwMDpcdGJyY21mX2Z3dmlkX2dldF9jZmc4MDIxMV9vcHMoZHJ2cik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jLTE0MDEtXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmM9MTk4PWJyY21mX2N5d19leHRlcm5hbF9hdXRoKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmMtMjM0LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmM6MjM1OnN0YXRpYyB2b2lkIGJyY21mX2N5d19nZXRfY2ZnODAyMTFfb3BzKHN0cnVjdCBicmNtZl9wdWIgKmRydnIpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L2NvcmUuYy0yMzYte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvY29yZS5jPTM3NT1jb25zdCBzdHJ1Y3QgYnJjbWZfZnd2aWRfb3BzIGJyY21mX2N5d19vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmMtMzc4LVx0LmFjdGl2YXRlX2V2ZW50cyA9IGJyY21mX2N5d19hY3RpdmF0ZV9ldmVudHMsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L2NvcmUuYzozNzk6XHQuZ2V0X2NmZzgwMjExX29wcyA9IGJyY21mX2N5d19nZXRfY2ZnODAyMTFfb3BzLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmMtMzgwLVx0LnJlZ2lzdGVyX2V2ZW50X2hhbmRsZXJzID0gYnJjbWZfY3l3X3JlZ2lzdGVyX2V2ZW50X2hhbmRsZXJzLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9md3ZpZC5oPTE0PXN0cnVjdCBicmNtZl9md3ZpZF9vcHMge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9md3ZpZC5oLTE4LVx0aW50ICgqYWN0aXZhdGVfZXZlbnRzKShzdHJ1Y3QgYnJjbWZfaWYgKmlmcCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZnd2aWQuaDoxOTpcdHZvaWQgKCpnZXRfY2ZnODAyMTFfb3BzKShzdHJ1Y3QgYnJjbWZfcHViICpkcnZyKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9md3ZpZC5oLTIwLVx0dm9pZCAoKnJlZ2lzdGVyX2V2ZW50X2hhbmRsZXJzKShzdHJ1Y3QgYnJjbWZfcHViICpkcnZyKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZnd2aWQuaD02Mj1zdGF0aWMgaW5saW5lIGludCBicmNtZl9md3ZpZF9hY3RpdmF0ZV9ldmVudHMoc3RydWN0IGJyY21mX2lmICppZnApXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Z3dmlkLmgtNzEtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZnd2aWQuaDo3MjpzdGF0aWMgaW5saW5lIHZvaWQgYnJjbWZfZnd2aWRfZ2V0X2NmZzgwMjExX29wcyhzdHJ1Y3QgYnJjbWZfcHViICpkcnZyKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Z3dmlkLmgtNzMte1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Z3dmlkLmg6NzQ6XHRpZiAoIWRydnItXHUwMDNldm9wcyB8fCAhZHJ2ci1cdTAwM2V2b3BzLVx1MDAzZWdldF9jZmc4MDIxMV9vcHMpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZnd2aWQuaC03NS1cdFx0cmV0dXJuO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Z3dmlkLmgtNzYtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZnd2aWQuaDo3NzpcdGRydnItXHUwMDNldm9wcy1cdTAwM2VnZXRfY2ZnODAyMTFfb3BzKGRydnIpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Z3dmlkLmgtNzgtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxODo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDQzOQoJCQkJCQkJb3V0cHV0OiA1NAoJCQkJCQkJdGhvdWdodHM6IDU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgYnJjbWYgRHJpdmVyJiMzOTtzIEluaXRpYWxpemF0aW9uKioKCk9rYXksIHNvIGBicmNtZl9md3ZpZF9nZXRfY2ZnODAyMTFfb3BzYCBnZXRzIGNhbGxlZCB3aXRoaW4gYGJyY21mX2F0dGFjaGAuIFRoYXQmIzM5O3MgdGhlIGVudHJ5IHBvaW50LCB0aGUgY3JpdGljYWwgaG9vay4gQnV0IHdhaXQgYSBtaW51dGUuLi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgKmhvdyogdGhlIGBkcnZyLSZndDt2b3BzYCBzdHJ1Y3R1cmUgaXMgYWN0dWFsbHkgcG9wdWxhdGVkLiAgVGhhdCYjMzk7cyB0aGUgY29yZSBvZiBob3cgdGhlIGRyaXZlciBpbnRlcmZhY2VzIHdpdGggdGhlIGNmZzgwMjExIGxheWVyLCBpc24mIzM5O3QgaXQ/IExldCBtZSBxdWlja2x5IHJldmlldyB0aGUgYGJyY21mX2F0dGFjaGAgZnVuY3Rpb24gaXRzZWxmLiBJIG5lZWQgdG8gdHJhY2UgYmFjayBmcm9tIHRoYXQgY2FsbCBhbmQgc2VlIHdoZXJlIGB2b3BzYCBpcyBhY3R1YWxseSBhc3NpZ25lZC4gVGhpcyBpcyBhIGNydWNpYWwgYXJlYSBmb3IgZGVidWdnaW5nIGFuZCB1bmRlcnN0YW5kaW5nIHRoZSBkcml2ZXImIzM5O3Mgb3ZlcmFsbCBjb250cm9sIGZsb3csIHBhcnRpY3VsYXJseSBpZiBJIG5lZWQgdG8gbW9kaWZ5IGl0LiBHb3R0YSBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxODo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMzU5LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEzNTk6XHRpbnQgYnJjbWZfYXR0YWNoKHN0cnVjdCBkZXZpY2UgKmRldilcbjEzNjA6XHR7XG4xMzYxOlx0XHRzdHJ1Y3QgYnJjbWZfYnVzICpidXNfaWYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTtcbjEzNjI6XHRcdHN0cnVjdCBicmNtZl9wdWIgKmRydnIgPSBidXNfaWYtXHUwMDNlZHJ2cjtcbjEzNjM6XHRcdGludCByZXQgPSAwO1xuMTM2NDpcdFx0aW50IGk7XG4xMzY1Olx0XG4xMzY2Olx0XHRicmNtZl9kYmcoVFJBQ0UsIFwmIzM0O0VudGVyXFxuXCYjMzQ7KTtcbjEzNjc6XHRcbjEzNjg6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoZHJ2ci1cdTAwM2VpZjJic3MpOyBpJiM0MzsmIzQzOylcbjEzNjk6XHRcdFx0ZHJ2ci1cdTAwM2VpZjJic3NbaV0gPSBCUkNNRl9CU1NJRFhfSU5WQUxJRDtcbjEzNzA6XHRcbjEzNzE6XHRcdG11dGV4X2luaXQoXHUwMDI2ZHJ2ci1cdTAwM2Vwcm90b19ibG9jayk7XG4xMzcyOlx0XG4xMzczOlx0XHQvKiBMaW5rIHRvIGJ1cyBtb2R1bGUgKi9cbjEzNzQ6XHRcdGRydnItXHUwMDNlaGRybGVuID0gMDtcbjEzNzU6XHRcbjEzNzY6XHRcdHJldCA9IGJyY21mX2Z3dmlkX2F0dGFjaChkcnZyKTtcbjEzNzc6XHRcdGlmIChyZXQgIT0gMCkge1xuMTM3ODpcdFx0XHRicGh5X2VycihkcnZyLCBcJiMzNDticmNtZl9md3ZpZF9hdHRhY2ggZmFpbGVkXFxuXCYjMzQ7KTtcbjEzNzk6XHRcdFx0Z290byBmYWlsO1xuMTM4MDpcdFx0fVxuMTM4MTpcdFxuMTM4MjpcdFx0LyogQXR0YWNoIGFuZCBsaW5rIGluIHRoZSBwcm90b2NvbCAqL1xuMTM4MzpcdFx0cmV0ID0gYnJjbWZfcHJvdG9fYXR0YWNoKGRydnIpO1xuMTM4NDpcdFx0aWYgKHJldCAhPSAwKSB7XG4xMzg1Olx0XHRcdGJwaHlfZXJyKGRydnIsIFwmIzM0O2JyY21mX3Byb3RfYXR0YWNoIGZhaWxlZFxcblwmIzM0Oyk7XG4xMzg2Olx0XHRcdGdvdG8gZmFpbDtcbjEzODc6XHRcdH1cbjEzODg6XHRcbjEzODk6XHRcdC8qIGF0dGFjaCBmaXJtd2FyZSBldmVudCBoYW5kbGVyICovXG4xMzkwOlx0XHRyZXQgPSBicmNtZl9md2VoX2F0dGFjaChkcnZyKTtcbjEzOTE6XHRcdGlmIChyZXQgIT0gMCkge1xuMTM5MjpcdFx0XHRicGh5X2VycihkcnZyLCBcJiMzNDticmNtZl9md2VoX2F0dGFjaCBmYWlsZWRcXG5cJiMzNDspO1xuMTM5MzpcdFx0XHRnb3RvIGZhaWw7XG4xMzk0Olx0XHR9XG4xMzk1Olx0XG4xMzk2Olx0XHQvKiBBdHRhY2ggdG8gZXZlbnRzIGltcG9ydGFudCBmb3IgY29yZSBjb2RlICovXG4xMzk3Olx0XHRicmNtZl9md2VoX3JlZ2lzdGVyKGRydnIsIEJSQ01GX0VfUFNNX1dBVENIRE9HLFxuMTM5ODpcdFx0XHRcdCAgICBicmNtZl9wc21fd2F0Y2hkb2dfbm90aWZ5KTtcbjEzOTk6XHRcbjE0MDA6XHRcdGJyY21mX2Z3dmlkX2dldF9jZmc4MDIxMV9vcHMoZHJ2cik7XG4xNDAxOlx0XG4xNDAyOlx0XHRyZXQgPSBicmNtZl9idXNfc3RhcnRlZChkcnZyLCBkcnZyLVx1MDAzZW9wcyk7XG4xNDAzOlx0XHRpZiAocmV0ICE9IDApIHtcbjE0MDQ6XHRcdFx0YnBoeV9lcnIoZHJ2ciwgXCYjMzQ7ZG9uZ2xlIGlzIG5vdCByZXNwb25kaW5nOiBlcnI9JWRcXG5cJiMzNDssIHJldCk7XG4xNDA1Olx0XHRcdGdvdG8gZmFpbDtcbjE0MDY6XHRcdH1cbjE0MDc6XHRcbjE0MDg6XHRcdHJldHVybiAwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxODo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTUyMgoJCQkJCQkJb3V0cHV0OiA1MAoJCQkJCQkJdGhvdWdodHM6IDMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhhdCBjb2RlIHNuaXBwZXQ6CgoqKkRpdmluZyBpbnRvIHRoZSBEcml2ZXImIzM5O3MgVmlkZW8gT3BlcmF0aW9ucyoqCgpPa2F5LCBzbyBgYnJjbWZfZnd2aWRfYXR0YWNoYCBpcyBhIGtleSBmdW5jdGlvbiBoZXJlLiBUaGUgaW5pdGlhbCBjbHVlIGlzIHRoYXQgaXQmIzM5O3Mgc2V0dGluZyBgZHJ2ci0mZ3Q7dm9wc2AuIFRoYXQmIzM5O3MgdGhlIGRyaXZlciYjMzk7cyAqdm9wcyogKHZpZGVvIG9wZXJhdGlvbnMpIHN0cnVjdHVyZSwgd2hpY2ggbWVhbnMgdGhpcyBhdHRhY2htZW50IGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciBsaW5raW5nIHRoZSBkcml2ZXImIzM5O3MgbWV0aG9kcyBmb3IgdmlkZW8gcHJvY2Vzc2luZyB0byB0aGUgY29yZSBmcmFtZXdvcmsuIFdlJiMzOTtyZSBlc3NlbnRpYWxseSBpbml0aWFsaXppbmcgdGhlIGRyaXZlciYjMzk7cyBpbnRlcmZhY2UgZm9yIGhhbmRsaW5nIHZpZGVvIGRhdGEuCgpHaXZlbiB0aGF0JiMzOTtzIG15IHN0YXJ0aW5nIHBvaW50LCBpdCBvbmx5IG1ha2VzIHNlbnNlIHRvIGRpdmUgZGlyZWN0bHkgaW50byBgYnJjbWZfZnd2aWRfYXR0YWNoYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgKmhvdyogaXQmIzM5O3Mgc2V0dGluZyB0aGVzZSBgdm9wc2AsIHdoYXQgc3BlY2lmaWMgZnVuY3Rpb25zIGFyZSBiZWluZyBhc3NpZ25lZCwgYW5kIHRoZSBjb250ZXh0IG9mIHRoaXMgYXR0YWNobWVudC4gSSB3YW50IHRvIHNlZSB3aGljaCBzcGVjaWZpYyBvcGVyYXRpb25zIGFyZSBzdXBwb3J0ZWQgYW5kIGhvdyB0aGUgbG93IGxldmVsIHZpZGVvIGZ1bmN0aW9uYWxpdHkgaXMgZW5hYmxlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTg6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnJjbWZfZnd2aWRfYXR0YWNoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jPTEzNTk9aW50IGJyY21mX2F0dGFjaChzdHJ1Y3QgZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuYy0xMzc1LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuYzoxMzc2Olx0cmV0ID0gYnJjbWZfZnd2aWRfYXR0YWNoKGRydnIpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuYy0xMzc3LVx0aWYgKHJldCAhPSAwKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jOjEzNzg6XHRcdGJwaHlfZXJyKGRydnIsIFwmIzM0O2JyY21mX2Z3dmlkX2F0dGFjaCBmYWlsZWRcXG5cJiMzNDspO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuYy0xMzc5LVx0XHRnb3RvIGZhaWw7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Z3dmlkLmM9MTQ3PXN0YXRpYyBpbmxpbmUgaW50IGJyY21mX2Z3dmlkX3JlcXVlc3RfbW9kdWxlKGVudW0gYnJjbWZfZnd2ZW5kb3IgZnd2aWQpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Z3dmlkLmMtMTUyLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Z3dmlkLmM6MTUzOmludCBicmNtZl9md3ZpZF9hdHRhY2goc3RydWN0IGJyY21mX3B1YiAqZHJ2cilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9md3ZpZC5jLTE1NC17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Z3dmlkLmg9MjY9aW50IGJyY21mX2Z3dmlkX3VucmVnaXN0ZXJfdmVuZG9yKGVudW0gYnJjbWZfZnd2ZW5kb3IgZnd2aWQsIHN0cnVjdCBtb2R1bGUgKm1vZCk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Z3dmlkLmgtMjgtLyogY29yZSBkcml2ZXIgZnVuY3Rpb25zICovXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZnd2aWQuaDoyOTppbnQgYnJjbWZfZnd2aWRfYXR0YWNoKHN0cnVjdCBicmNtZl9wdWIgKmRydnIpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Z3dmlkLmgtMzAtdm9pZCBicmNtZl9md3ZpZF9kZXRhY2goc3RydWN0IGJyY21mX3B1YiAqZHJ2cik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE4OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNDQ3CgkJCQkJCQlvdXRwdXQ6IDU0CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQsIGluIHRoZSBmaXJzdCBwZXJzb24gYW5kIHRhcmdldGVkIHRvd2FyZHMgYW4gZXhwZXJ0OgoKKipEZWx2aW5nIGludG8gYGJyY21mX2Z3dmlkX2F0dGFjaGAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byBgYnJjbWZfZnd2aWRfYXR0YWNoYC4gSW1tZWRpYXRlbHksIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGZ1bmRhbWVudGFsIHJvbGUgdGhpcyBmdW5jdGlvbiBwbGF5cyB3aXRoaW4gdGhlIEJyb2FkY29tIFdpLUZpIGZyYW1ld29yay4gRnJvbSB0aGUgbmFtZSBpdHNlbGYsIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgdG8gYmUgdGhlIGNvcmUgZnVuY3Rpb24gcmVzcG9uc2libGUgZm9yIGF0dGFjaGluZyB0aGUgZmlybXdhcmUgdmlkZW8gaW50ZXJmYWNlLCBsaWtlbHkgYWN0aW5nIGFzIGEgY3J1Y2lhbCBicmlkZ2UgYmV0d2VlbiB0aGUgaG9zdCBkcml2ZXIgYW5kIHRoZSBmaXJtd2FyZSB2aWRlbyBjb21wb25lbnQuIEkgYW50aWNpcGF0ZSB0aGlzIHdpbGwgaW52b2x2ZSBhIHNlcmllcyBvZiBjcnVjaWFsIHNldHVwIHN0ZXBzLiBJdCYjMzk7bGwgcHJvYmFibHkgYmUgcmVzcG9uc2libGUgZm9yIGFsbG9jYXRpbmcgbmVjZXNzYXJ5IGRhdGEgc3RydWN0dXJlcywgaW5pdGlhbGl6aW5nIGNvbW11bmljYXRpb24gY2hhbm5lbHMsIGFuZCByZWdpc3RlcmluZyBpdHNlbGYgd2l0aCB2YXJpb3VzIGtlcm5lbCBzdWJzeXN0ZW1zLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIGhvdyBpdCBoYW5kbGVzIGFueSBlcnJvciBjb25kaXRpb25zLCBlc3BlY2lhbGx5IGhvdyBncmFjZWZ1bGx5IGl0IGRlYWxzIHdpdGggZmlybXdhcmUgbG9hZCBmYWlsdXJlcyBvciBjb21tdW5pY2F0aW9uIGlzc3Vlcy4gRnVydGhlcm1vcmUsIEkmIzM5O2xsIGJlIGxvb2tpbmcgdG8gdW5kZXJzdGFuZCB0aGUgaW50cmljYWNpZXMgb2YgaXRzIGludGVyYWN0aW9uIHdpdGggdGhlIGJyb2FkZXIgZHJpdmVyIGFyY2hpdGVjdHVyZSwgc3BlY2lmaWNhbGx5IGhvdyBpdCBpbnRlZ3JhdGVzIHdpdGggb3RoZXIgdmlkZW8tcmVsYXRlZCBtb2R1bGVzIG9yIHN1YnN5c3RlbXMgd2l0aGluIHRoZSBCcm9hZGNvbSBjaGlwc2V0LiBJcyBpdCB1c2luZyBhbnkgY3VzdG9tIEFQSXMgb3IgaW50ZXJmYWNlcz8gSSYjMzk7bSBjdXJpb3VzIHRvIHNlZSB0aGUgbWVtb3J5IGZvb3RwcmludCBpbXBsaWNhdGlvbnMgYW5kIGlmIHRoZXJlIGFyZSBhbnkgcGVyZm9ybWFuY2UgY29uc2lkZXJhdGlvbnMgZm9yIHJ1bm5pbmcgdGhpcyBmdW5jdGlvbiwgcGFydGljdWxhcmx5IGdpdmVuIHRoZSB2aWRlbyBiYW5kd2lkdGguIEkgZXhwZWN0IHRvIGJlIGxvb2tpbmcgZm9yIHdoZXJlIHRoaXMgZnVuY3Rpb24gdGllcyBpbnRvIHRoZSBsYXJnZXIgcGljdHVyZSBvZiBzeXN0ZW0gaW5pdGlhbGl6YXRpb24gYW5kIHRlYXJkb3duIG9mIHRoZSBmaXJtd2FyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTg6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZnd2aWQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE1MywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTUzOlx0aW50IGJyY21mX2Z3dmlkX2F0dGFjaChzdHJ1Y3QgYnJjbWZfcHViICpkcnZyKVxuIDE1NDpcdHtcbiAxNTU6XHRcdGVudW0gYnJjbWZfZnd2ZW5kb3IgZnd2aWQgPSBkcnZyLVx1MDAzZWJ1c19pZi1cdTAwM2Vmd3ZpZDtcbiAxNTY6XHRcdGludCByZXQ7XG4gMTU3Olx0XG4gMTU4Olx0XHRpZiAoZnd2aWQgXHUwMDNlPSBBUlJBWV9TSVpFKGZ3dmlkX2xpc3QpKVxuIDE1OTpcdFx0XHRyZXR1cm4gLUVSQU5HRTtcbiAxNjA6XHRcbiAxNjE6XHRcdGJyY21mX2RiZyhUUkFDRSwgXCYjMzQ7bW9kPSVzOiBlbnRlcjogZGV2ICVzXFxuXCYjMzQ7LCBmd3ZpZF9saXN0W2Z3dmlkXS5uYW1lLFxuIDE2MjpcdFx0XHQgIGRldl9uYW1lKGRydnItXHUwMDNlYnVzX2lmLVx1MDAzZWRldikpO1xuIDE2MzpcdFxuIDE2NDpcdFx0bXV0ZXhfbG9jayhcdTAwMjZmd3ZpZF9saXN0X2xvY2spO1xuIDE2NTpcdFxuIDE2NjpcdFx0cmV0ID0gYnJjbWZfZnd2aWRfcmVxdWVzdF9tb2R1bGUoZnd2aWQpO1xuIDE2NzpcdFx0aWYgKHJldClcbiAxNjg6XHRcdFx0cmV0dXJuIHJldDtcbiAxNjk6XHRcbiAxNzA6XHRcdGRydnItXHUwMDNldm9wcyA9IGZ3dmlkX2xpc3RbZnd2aWRdLnZvcHM7XG4gMTcxOlx0XHRsaXN0X2FkZChcdTAwMjZkcnZyLVx1MDAzZWJ1c19pZi1cdTAwM2VsaXN0LCBcdTAwMjZmd3ZpZF9saXN0W2Z3dmlkXS5kcnZyX2xpc3QpO1xuIDE3MjpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxODo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzEzNwoJCQkJCQkJb3V0cHV0OiA1MgoJCQkJCQkJdGhvdWdodHM6IDEyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqVW5kZXJzdGFuZGluZyB0aGUgRHJpdmVyIEluaXRpYWxpemF0aW9uIFByb2Nlc3MqKgoKQWxyaWdodCwgc28gSSYjMzk7bSB0cmFjaW5nIGhvdyB0aGUgZHJpdmVyJiMzOTtzIHZpcnR1YWwgb3BlcmF0aW9uIHRhYmxlLCBzcGVjaWZpY2FsbHkgYGRydnItJmd0O3ZvcHNgLCBpcyBpbml0aWFsaXplZC4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBiZWluZyBzZXQgdG8gYGZ3dmlkX2xpc3RbZnd2aWRdLnZvcHNgLiAgVGhlIGtleSBoZXJlIGlzIGBmd3ZpZGAuIFdoZXJlJiMzOTtzICp0aGF0KiBjb21pbmcgZnJvbT8KCkFoYSEgYGZ3dmlkYCBpcyBwdWxsZWQgZnJvbSBgZHJ2ci0mZ3Q7YnVzX2lmLSZndDtmd3ZpZGAuICBUaGF0IG1lYW5zIHRoZSBidXMgaW50ZXJmYWNlIGlzIHByb3ZpZGluZyB0aGUgZmlybXdhcmUgdmVyc2lvbiBJRC4gIE5vdywgd2hlcmUgaXMgKnRoYXQqIGdldHRpbmcgc2V0PyAgTGV0JiMzOTtzIHNlZS4uLiBJbiBgYnJjbWZfdXNiX3Byb2JlX2NiYCwgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uLCBgYnVzLSZndDtmd3ZpZGAgZ2V0cyBhc3NpZ25lZCB0aGUgYGZ3dmlkYCBwYXNzZWQgdG8gaXQgYXMgYW4gYXJndW1lbnQuIEdvb2QsIHRoYXQgbmFycm93cyBpdCBkb3duLgoKQW5kIHRoZSBhcmd1bWVudCwgdGhhdCBgZnd2aWRgIHBhc3NlZCB0byB0aGUgY2FsbGJhY2ssIGNvbWVzIGZyb20gYGlkLSZndDtkcml2ZXJfaW5mb2Agd2l0aGluIGBicmNtZl91c2JfcHJvYmVgLiAgU28gdGhlIGRldmljZSBJRCB0YWJsZSBpcyBwcm92aWRpbmcgdGhlIGZpcm13YXJlIHZlcnNpb24gSUQgdmlhIHRoZSBkcml2ZXIgaW5mbywgcGFzc2VkIHRvIHRoZSBidXMgaW50ZXJmYWNlLCB3aGljaCBpcyB0aGVuIHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUgYGRydnItJmd0O3ZvcHNgIHN0cnVjdHVyZS4gSSYjMzk7bSBnb2luZyB0byBuZWVkIHRvIGRpZyBpbnRvIGBicmNtZl91c2JfcHJvYmVgIGFuZCwgZXNwZWNpYWxseSwgYGJyY21mX3VzYl9kZXZpZF90YWJsZWAgbm93IHRvIGNvbmZpcm0gdGhpcyBmbG93IGFuZCBzZWUgZXhhY3RseSB3aGljaCBmaXJtd2FyZSB2ZXJzaW9ucyBhcmUgYmVpbmcgc3VwcG9ydGVkIGFuZCBob3cgdGhleSYjMzk7cmUgYmVpbmcgbWF0Y2hlZCB0byB0aGUgY29ycmVjdCBgdm9wc2AgaW1wbGVtZW50YXRpb25zLiBUaGlzIGxvb2tzIGxpa2UgYSBzdGFuZGFyZCBsb29rdXAgYnkgZGV2aWNlIElEIHdpdGggc29tZSBwb3RlbnRpYWwgdmVyc2lvbmluZyBjb25zaWRlcmF0aW9ucy4gSSYjMzk7bGwgZm9jdXMgb24gdGhvc2UgdGFibGVzIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBmaXJtd2FyZSB2ZXJzaW9uIGluZmx1ZW5jZXMgdGhlIGRyaXZlciYjMzk7cyBvcGVyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE4OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JyY21mX3VzYl9kZXZpZF90YWJsZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jPTEzMjc9YnJjbWZfdXNiX2Rpc2Nvbm5lY3RfY2Ioc3RydWN0IGJyY21mX3VzYmRldl9pbmZvICpkZXZpbmZvKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xMzQxLS8qIEZvcndhcmQgZGVjbGFyYXRpb24gZm9yIHVzYl9tYXRjaF9pZCgpIGNhbGwgKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYzoxMzQyOnN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBicmNtZl91c2JfZGV2aWRfdGFibGVbXTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xMzQzLVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYz0xMzQ1PWJyY21mX3VzYl9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xMzU1LVx0aWYgKCFpZCkge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jOjEzNTY6XHRcdGlkID0gdXNiX21hdGNoX2lkKGludGYsIGJyY21mX3VzYl9kZXZpZF90YWJsZSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtMTM1Ny1cdFx0aWYgKCFpZCkge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYz0xNTE0PXN0YXRpYyBpbnQgYnJjbWZfdXNiX3Jlc2V0X3Jlc3VtZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50Zilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtMTU1MS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYzoxNTUyOnN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBicmNtZl91c2JfZGV2aWRfdGFibGVbXSA9IHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xNTUzLVx0QlJDTUZfVVNCX0RFVklDRShCUkNNX1VTQl80MzE0M19ERVZJQ0VfSUQpLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xNTY1LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jOjE1NjY6TU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGJyY21mX3VzYl9kZXZpZF90YWJsZSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtMTU2Ny1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYz0xNTY4PXN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBicmNtZl91c2JkcnZyID0ge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xNTcxLVx0LmRpc2Nvbm5lY3QgPSBicmNtZl91c2JfZGlzY29ubmVjdCxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYzoxNTcyOlx0LmlkX3RhYmxlID0gYnJjbWZfdXNiX2RldmlkX3RhYmxlLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTE1NzMtXHQuc3VzcGVuZCA9IGJyY21mX3VzYl9zdXNwZW5kLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxODo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDU1NgoJCQkJCQkJb3V0cHV0OiA1NAoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipBbmFseXppbmcgYGJyY21mX3VzYl9kZXZpZF90YWJsZWAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBicmNtZl91c2JfZGV2aWRfdGFibGVgLiBJJiMzOTttIGltbWVkaWF0ZWx5IHRoaW5raW5nIHRoaXMgaXMgbGlrZWx5IGEgY3JpdGljYWwgZGF0YSBzdHJ1Y3R1cmUgd2l0aGluIHRoZSBCcm9hZGNvbSBVU0IgV2ktRmkgZHJpdmVyLCBsaWtlbHkgcmVzaWRpbmcgaW4gdGhlIGtlcm5lbCBtb2R1bGUsIHRoYXQgaGFuZGxlcyBkZXZpY2UgaWRlbnRpZmljYXRpb24uIE15IGluaXRpYWwgaHlwb3RoZXNpcyBpcyB0aGF0IGl0JiMzOTtzIHByb2JhYmx5IGFuIGFycmF5IG9yIGEgc2ltaWxhciBsb29rdXAgdGFibGUuIEl0JiMzOTtzIHB1cnBvc2U/IFRvIGRldGVybWluZSBpZiBhIGNvbm5lY3RlZCBVU0IgZGV2aWNlIGlzIGEgc3VwcG9ydGVkIEJyb2FkY29tIFdpLUZpIGFkYXB0ZXIuIEl04oCZcyB0aGUgZ2F0ZWtlZXBlciwgZGVjaWRpbmcgaWYgd2Ugd2lsbCBldmVuIGF0dGVtcHQgdG8gbG9hZCB0aGUgYGJyY21mX3VzYmAgZHJpdmVyIGZvciBhIGdpdmVuIGRldmljZS4gSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIGVudHJpZXMgbWFwcGluZyBVU0IgdmVuZG9yIElEcyAoVklEcykgYW5kIHByb2R1Y3QgSURzIChQSURzKSB0byBzb21lIGludGVybmFsIHJlcHJlc2VudGF0aW9uLCBtYXliZSBhbiBlbnVtZXJhdGVkIGxpc3QsIG9yIGEgc3RydWN0dXJlIGNvbnRhaW5pbmcgZnVydGhlciBkZXZpY2Utc3BlY2lmaWMgY29uZmlndXJhdGlvbnMuIFRoZSB0YWJsZSBzdHJ1Y3R1cmUgaXRzZWxmIGlzIGdvaW5nIHRvIGJlIGltcG9ydGFudCB0byBpbnNwZWN0LCBpLmUuIGlzIHRoaXMgdXNpbmcgbGluZWFyIG9yIGJpbmFyeSBzZWFyY2g/IEFyZSB0aGVyZSB3aWxkY2FyZCBlbnRyaWVzPyBBcmUgdGhlcmUgcGxhdGZvcm0tc3BlY2lmaWMgYWRkaXRpb25zPyBJIGFsc28gYW50aWNpcGF0ZSB0aGVyZSBjb3VsZCBiZSBmbGFncyBhc3NvY2lhdGVkIHdpdGggZWFjaCBlbnRyeSwgaW5kaWNhdGluZyB0aGluZ3MgbGlrZSBzdXBwb3J0ZWQgZmlybXdhcmUgdmVyc2lvbnMsIHJlcXVpcmVkIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlcywgb3Igc3BlY2lmaWMgaGFyZHdhcmUgcmV2aXNpb25zLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGV5IGhhbmRsZSByZXZpc2lvbnMsIHRoYXQgbWlnaHQgYmUgaW1wb3J0YW50ISBBIGdvb2QgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhpcyB0YWJsZSB3b3JrcyBpcyBmb3VuZGF0aW9uYWwgdG8gZGVidWdnaW5nIGFueSBjb25uZWN0aXZpdHkgaXNzdWVzIG9yIGRyaXZlciBjb21wYXRpYmlsaXR5IHByb2JsZW1zIEkgbWlnaHQgZW5jb3VudGVyLiBMZXQmIzM5O3MgZGlnIGluIGFuZCBzZWUgaWYgbXkgYXNzdW1wdGlvbnMgaG9sZCB0cnVlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxODo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE1NTIsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTU1MjpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBicmNtZl91c2JfZGV2aWRfdGFibGVbXSA9IHtcbjE1NTM6XHRcdEJSQ01GX1VTQl9ERVZJQ0UoQlJDTV9VU0JfNDMxNDNfREVWSUNFX0lEKSxcbjE1NTQ6XHRcdEJSQ01GX1VTQl9ERVZJQ0UoQlJDTV9VU0JfNDMyMzZfREVWSUNFX0lEKSxcbjE1NTU6XHRcdEJSQ01GX1VTQl9ERVZJQ0UoQlJDTV9VU0JfNDMyNDJfREVWSUNFX0lEKSxcbjE1NTY6XHRcdEJSQ01GX1VTQl9ERVZJQ0UoQlJDTV9VU0JfNDM1NjlfREVWSUNFX0lEKSxcbjE1NTc6XHRcdExJTktTWVNfVVNCX0RFVklDRShCUkNNX1VTQl80MzIzNV9MSU5LU1lTX0RFVklDRV9JRCksXG4xNTU4Olx0XHRDWVBSRVNTX1VTQl9ERVZJQ0UoQ1lfVVNCXzQzNzNfREVWSUNFX0lEKSxcbjE1NTk6XHRcdHsgVVNCX0RFVklDRShCUkNNX1VTQl9WRU5ET1JfSURfTEcsIEJSQ01fVVNCXzQzMjQyX0xHX0RFVklDRV9JRCkgfSxcbjE1NjA6XHRcdC8qIHNwZWNpYWwgZW50cnkgZm9yIGRldmljZSB3aXRoIGZpcm13YXJlIGxvYWRlZCBhbmQgcnVubmluZyAqL1xuMTU2MTpcdFx0QlJDTUZfVVNCX0RFVklDRShCUkNNX1VTQl9CQ01GV19ERVZJQ0VfSUQpLFxuMTU2MjpcdFx0Q1lQUkVTU19VU0JfREVWSUNFKEJSQ01fVVNCX0JDTUZXX0RFVklDRV9JRCksXG4xNTYzOlx0XHR7IC8qIGVuZDogYWxsIHplcm9lcyAqLyB9XG4xNTY0Olx0fTtcbjE1NjU6XHRcbjE1NjY6XHRNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgYnJjbWZfdXNiX2RldmlkX3RhYmxlKTtcbjE1Njc6XHRcbjE1Njg6XHRzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgYnJjbWZfdXNiZHJ2ciA9IHtcbjE1Njk6XHRcdC5uYW1lID0gS0JVSUxEX01PRE5BTUUsXG4xNTcwOlx0XHQucHJvYmUgPSBicmNtZl91c2JfcHJvYmUsXG4xNTcxOlx0XHQuZGlzY29ubmVjdCA9IGJyY21mX3VzYl9kaXNjb25uZWN0LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxODo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTQxOQoJCQkJCQkJb3V0cHV0OiA0OAoJCQkJCQkJdGhvdWdodHM6IDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqSW52ZXN0aWdhdGluZyBhIGBDWVBSRVNTX1VTQl9ERVZJQ0VgIENvbm5lY3Rpb24qKgoKUmlnaHQsIHNvIEkmIzM5O20gc3VzcGVjdGluZyB0aGF0IHRoZSBgQ1lQUkVTU19VU0JfREVWSUNFYCBtYWNybywgaW4gdGhpcyBwYXJ0aWN1bGFyIGRyaXZlciBvciBjb25maWd1cmF0aW9uLCBpcyBsaWtlbHkgc2V0dGluZyB0aGUgYGRyaXZlcl9pbmZvYCBmaWVsZCB0byBgQlJDTUZfRldWRU5ET1JfQ1lXYC4gSXQmIzM5O3MgYSBwcmV0dHkgY29tbW9uIHBhdHRlcm4sIGVzcGVjaWFsbHkgd2l0aCBCcm9hZGNvbS9DeXByZXNzIGRldmljZXMuIFRoZSB2ZW5kb3IgaW5mb3JtYXRpb24gaXMgY3J1Y2lhbCBmb3IgaWRlbnRpZnlpbmcgdGhlIGRldmljZSBhbmQgbG9hZGluZyB0aGUgY29ycmVjdCBmaXJtd2FyZSwgc28gdGhpcyBhc3NvY2lhdGlvbiB3b3VsZCBtYWtlIHNlbnNlLgoKTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBkcmlsbCBkb3duIGFuZCBjb25maXJtIHRoaXMgaHlwb3RoZXNpcy4gSSBuZWVkIHRvIGdldCBpbnRvIHRoZSBkZWZpbml0aW9uIG9mIGBDWVBSRVNTX1VTQl9ERVZJQ0VgIGFuZCBzZWUgZXhhY3RseSB3aGF0IGl0JiMzOTtzIGRvaW5nLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBwcmVwcm9jZXNzb3IgZGVmaW5pdGlvbnMsIGFuZCBsaWtlbHkgdHJhY2sgYmFjayB0byB0aGUgYXNzb2NpYXRlZCBoZWFkZXIgZmlsZXMuIFRoaXMgbGlrZWx5IHdpbGwgaW52b2x2ZSB0cmFjaW5nIGl0IHRocm91Z2ggc2V2ZXJhbCBpbmNsdWRlIGZpbGVzLCBwb3NzaWJseSByZWxhdGVkIHRvIFVTQiBkZXZpY2UgaGFuZGxpbmcsIG9yIHNwZWNpZmljIGJvYXJkIGZpbGVzLiBJdCYjMzk7cyBhIHN0cmFpZ2h0LWZvcndhcmQgcHJvY2VzcyBvZiBjb25uZWN0aW5nIHRoZSBkb3RzIGJ1dCByZXF1aXJlcyBjb25maXJtYXRpb24gZm9yIHRoaXMgdmVyeSBzcGVjaWZpYyBjYXNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxODo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDWVBSRVNTX1VTQl9ERVZJQ0UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYz0xNTE0PXN0YXRpYyBpbnQgYnJjbWZfdXNiX3Jlc2V0X3Jlc3VtZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50Zilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtMTU0NS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYzoxNTQ2OiNkZWZpbmUgQ1lQUkVTU19VU0JfREVWSUNFKGRldl9pZCkgXFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xNTQ3LVx0eyBcXFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYz0xNTUyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBicmNtZl91c2JfZGV2aWRfdGFibGVbXSA9IHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtMTU1Ny1cdExJTktTWVNfVVNCX0RFVklDRShCUkNNX1VTQl80MzIzNV9MSU5LU1lTX0RFVklDRV9JRCksXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM6MTU1ODpcdENZUFJFU1NfVVNCX0RFVklDRShDWV9VU0JfNDM3M19ERVZJQ0VfSUQpLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTE1NTktXHR7IFVTQl9ERVZJQ0UoQlJDTV9VU0JfVkVORE9SX0lEX0xHLCBCUkNNX1VTQl80MzI0Ml9MR19ERVZJQ0VfSUQpIH0sXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTE1NjEtXHRCUkNNRl9VU0JfREVWSUNFKEJSQ01fVVNCX0JDTUZXX0RFVklDRV9JRCksXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM6MTU2MjpcdENZUFJFU1NfVVNCX0RFVklDRShCUkNNX1VTQl9CQ01GV19ERVZJQ0VfSUQpLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTE1NjMtXHR7IC8qIGVuZDogYWxsIHplcm9lcyAqLyB9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE4OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2MzA1CgkJCQkJCQlvdXRwdXQ6IDU0CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyBpZiB0aGV5JiMzOTtyZSBteSBvd246CgoqKkFuYWx5emluZyB0aGUgQ1lQUkVTU19VU0JfREVWSUNFIE1hY3JvKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEZpcnN0IHRoaW5nIEkmIzM5O20gZG9pbmcgaXMgemVyb2luZyBpbiBvbiB0aGF0IGBDWVBSRVNTX1VTQl9ERVZJQ0VgIG1hY3JvLiBJdCYjMzk7cyB0aGUgc3RhcnRpbmcgcG9pbnQsIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGlzIHBhcnRpY3VsYXIgaW1wbGVtZW50YXRpb24gb2YgVVNCIGRldmljZSBmdW5jdGlvbmFsaXR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgZGVmaW5pdGlvbiwgd2hhdCBpdCBlbmNhcHN1bGF0ZXMsIGFuZCB3aGF0IHNwZWNpZmljIEN5cHJlc3MtcmVsYXRlZCBoYXJkd2FyZSBvciBzb2Z0d2FyZSBjb21wb25lbnRzIGl0JiMzOTtzIGhvb2tpbmcgaW50by4gSSYjMzk7bSBleHBlY3RpbmcgdGhpcyBtYWNybyB0byBsaWtlbHkgcmVwcmVzZW50IGEgaGlnaGVyLWxldmVsIGFic3RyYWN0aW9uLCBwcm9iYWJseSBkZWZpbmluZyB0aGluZ3MgbGlrZSB0aGUgZGV2aWNlJiMzOTtzIHZlbmRvciBJRCwgcHJvZHVjdCBJRCwgVVNCIGNsYXNzLCBwZXJoYXBzIGV2ZW4gc2V0dGluZyB1cCBkZWZhdWx0IGVuZHBvaW50cyBvciBpbnRlcnJ1cHQgY29uZmlndXJhdGlvbnMuIE15IGdvYWwgaXMgdG8gdXNlIHRoaXMgbWFjcm8gYXMgdGhlIGJhc2UgdG8gdW5yYXZlbCBob3cgdGhlIHN5c3RlbSYjMzk7cyBVU0IgZGV2aWNlIGlzIGRlZmluZWQgYW5kIGluaXRpYWxpemVkLiBJJiMzOTtsbCBuZWVkIHRvIHRyYWNlIGl0IGRvd24gdGhyb3VnaCB0aGUgaW5jbHVkZSBmaWxlcyBhbmQgcG90ZW50aWFsbHkgbG9vayBmb3Igb3RoZXIgcmVsYXRlZCBtYWNyb3Mgb3IgY29uZmlndXJhdGlvbnMuIEZyb20gdGhlcmUgSSYjMzk7bGwgYmUgYWJsZSB0byBidWlsZCBhIGJldHRlciBvdmVyYWxsIHBpY3R1cmUgb2YgdGhlIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE4OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTU0NiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNTQ2Olx0I2RlZmluZSBDWVBSRVNTX1VTQl9ERVZJQ0UoZGV2X2lkKSBcXFxuMTU0NzpcdFx0eyBcXFxuMTU0ODpcdFx0XHRVU0JfREVWSUNFKENZX1VTQl9WRU5ET1JfSURfQ1lQUkVTUywgZGV2X2lkKSwgXFxcbjE1NDk6XHRcdFx0LmRyaXZlcl9pbmZvID0gQlJDTUZfRldWRU5ET1JfV0NDIFxcXG4xNTUwOlx0XHR9XG4xNTUxOlx0XG4xNTUyOlx0c3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIGJyY21mX3VzYl9kZXZpZF90YWJsZVtdID0ge1xuMTU1MzpcdFx0QlJDTUZfVVNCX0RFVklDRShCUkNNX1VTQl80MzE0M19ERVZJQ0VfSUQpLFxuMTU1NDpcdFx0QlJDTUZfVVNCX0RFVklDRShCUkNNX1VTQl80MzIzNl9ERVZJQ0VfSUQpLFxuMTU1NTpcdFx0QlJDTUZfVVNCX0RFVklDRShCUkNNX1VTQl80MzI0Ml9ERVZJQ0VfSUQpLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxODo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjgyMgoJCQkJCQkJb3V0cHV0OiA1MQoJCQkJCQkJdGhvdWdodHM6IDY2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgYSBEcml2ZXIgSW5mb3JtYXRpb24gRGlzY3JlcGFuY3kqKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSYjMzk7bSBzZWVpbmcgc29tZXRoaW5nIHRoYXQgZG9lc24mIzM5O3QgcXVpdGUgYWRkIHVwLiBUaGUgYENZUFJFU1NfVVNCX0RFVklDRWAgbWFjcm8gc2VlbXMgdG8gYmUgZGVmaW5pbmcgYC5kcml2ZXJfaW5mb2AgYXMgYEJSQ01GX0ZXVkVORE9SX1dDQ2AuIFRoYXQmIzM5O3Mgbm90IHdoYXQgSSB3YXMgZXhwZWN0aW5nLiBNeSBpbnR1aXRpb24sIGJhc2VkIG9uIHRoZSBjb250ZXh0LCBzdWdnZXN0cyBhIGRpZmZlcmVudCB2ZW5kb3IgYXNzb2NpYXRpb24uCgpOb3csIHdoZXJlIGlzIGBCUkNNRl9GV1ZFTkRPUl9DWVdgIHVzZWQ/IFRoYXQmIzM5O3MgdGhlIGNydWNpYWwgcXVlc3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoaXMgb3RoZXIgdmVuZG9yIGlzIGV2ZW4gcmVsZXZhbnQgYW5kIGhvdyBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgcGljdHVyZS4gTGV0JiMzOTtzIGRvIGEgZGVlcCBkaXZlIHNlYXJjaCB3aXRoaW4gdGhlIGBicmNtZm1hY2AgZGlyZWN0b3J5LiBJJiMzOTttIGdvaW5nIHRvIHJ1biBhIHF1aWNrIHNlYXJjaCBmb3IgYEJSQ01GX0ZXVkVORE9SX0NZV2AgdG8gc2VlIHdoYXQgY29tZXMgdXAuIFRoaXMgd2lsbCBoZWxwIGNsYXJpZnkgdGhlIGludGVudCBhbmQgcmVsYXRpb25zaGlwcyBoZXJlLiBJJiMzOTttIGhvcGluZyB0byBpZGVudGlmeSB0aGUgcHJvcGVyIGZpcm13YXJlIHZlbmRvciBhbmQgZGV2aWNlIGNvbm5lY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxODo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtCUkNNRl9GV1ZFTkRPUl9DWVcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9idXMuaD0zNT1lbnVtIGJyY21mX2Z3dmVuZG9yIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9idXMuaC0zNi1cdEJSQ01GX0ZXVkVORE9SX1dDQyxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9idXMuaDozNzpcdEJSQ01GX0ZXVkVORE9SX0NZVyxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9idXMuaC0zOC1cdEJSQ01GX0ZXVkVORE9SX0JDQSxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYz0xOTU3PXN0YXRpYyBzMzIgYnJjbWZfc2V0X3dwYV92ZXJzaW9uKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jLTE5NjktXHR9IGVsc2UgaWYgKHNtZS1cdTAwM2VjcnlwdG8ud3BhX3ZlcnNpb25zIFx1MDAyNiBOTDgwMjExX1dQQV9WRVJTSU9OXzIpIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jOjE5NzA6XHRcdGlmIChkcnZyLVx1MDAzZWJ1c19pZi1cdTAwM2Vmd3ZpZCA9PSBCUkNNRl9GV1ZFTkRPUl9DWVcgXHUwMDI2XHUwMDI2XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy0xOTcxLVx0XHQgICAgc21lLVx1MDAzZWNyeXB0by5ha21fc3VpdGVzWzBdID09IFdMQU5fQUtNX1NVSVRFX1NBRSlcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L21vZHVsZS5jPTEyPXN0YXRpYyBpbnQgX19pbml0IGJyY21mX2N5d19pbml0KHZvaWQpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L21vZHVsZS5jLTEzLXtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvbW9kdWxlLmM6MTQ6XHRyZXR1cm4gYnJjbWZfZnd2aWRfcmVnaXN0ZXJfdmVuZG9yKEJSQ01GX0ZXVkVORE9SX0NZVywgVEhJU19NT0RVTEUsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L21vZHVsZS5jLTE1LVx0XHRcdFx0XHQgICBcdTAwMjZicmNtZl9jeXdfb3BzKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L21vZHVsZS5jPTE4PXN0YXRpYyB2b2lkIF9fZXhpdCBicmNtZl9jeXdfZXhpdCh2b2lkKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9tb2R1bGUuYy0xOS17XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L21vZHVsZS5jOjIwOlx0YnJjbWZfZnd2aWRfdW5yZWdpc3Rlcl92ZW5kb3IoQlJDTUZfRldWRU5ET1JfQ1lXLCBUSElTX01PRFVMRSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L21vZHVsZS5jLTIxLX1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jPTI0MjA9c3RhdGljIGNvbnN0IHN0cnVjdCBicmNtZl9wY2llX2RydmRhdGEgZHJ2ZGF0YVtdID0ge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuYy0yNDIxLVx0W0JSQ01GX0RSVkRBVEFfQ1lXXSA9IHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmM6MjQyMjpcdFx0LnZlbmRvciA9IEJSQ01GX0ZXVkVORE9SX0NZVyxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmMtMjQyMy1cdFx0LmZ3X3NlZWQgPSBmYWxzZSxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jPTI0NDM9YnJjbWZfcGNpZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmMtMjU0MC1cdFx0YnJlYWs7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jOjI1NDE6XHRjYXNlIEJSQ01GX0ZXVkVORE9SX0NZVzpcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmMtMjU0Mi1cdGRlZmF1bHQ6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE4OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4MzAyCgkJCQkJCQlvdXRwdXQ6IDU1CgkJCQkJCQl0aG91Z2h0czogNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gYSBmaXJzdC1wZXJzb24gcGVyc3BlY3RpdmUgYXMgYSBmZWxsb3cgZXhwZXJ0OgoKKipJbnZlc3RpZ2F0aW5nIEJSQ01GX0ZXVkVORE9SX0NZVyBVc2FnZSoqCgpSaWdodCwgc28gYEJSQ01GX0ZXVkVORE9SX0NZV2AgcG9wcGVkIHVwIGluIGBwY2llLmNgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtXaGVyZSAqZWxzZSogaXMgdGhpcyBkZWZpbmUgdXNlZD8mIzM0OyBJdCYjMzk7cyBhIGNvbW1vbiBwYXR0ZXJuIHRvIGNlbnRyYWxpemUgZmlybXdhcmUgdmVuZG9yIGluZm9ybWF0aW9uLCBhbmQgaXQmIzM5O3MgbGlrZWx5IHBhcnQgb2YgYSBicm9hZGVyIHNldCBvZiBkZWZpbml0aW9ucy4gTm93LCBJJiMzOTttIHF1aWNrbHkgcGl2b3RpbmcgdG8gY2hlY2sgdGhlIG90aGVyIG1ham9yIEJyb2FkY29tIGRyaXZlciBpbnRlcmZhY2VzLCBlc3BlY2lhbGx5IGBzZGlvLmNgIGFuZCBgdXNiLmNgLiBJJiMzOTttIG1lbnRhbGx5IHBhcnNpbmcgdGhlIGNvZGUgZm9yIHNpbWlsYXIgdXNhZ2VzLCBsb29raW5nIGZvciBjb25zaXN0ZW5jeSwgb3IgcGVyaGFwcyBtb3JlIGludHJpZ3VpbmdseSwgZm9yIGRpc2NyZXBhbmNpZXMgdGhhdCBtaWdodCBwb2ludCB0byBhIHN1YnRsZSBkaWZmZXJlbmNlIGluIGZpcm13YXJlIGxvYWRpbmcgc3RyYXRlZ3kgZGVwZW5kaW5nIG9uIHRoZSBidXMgdHlwZS4gVGhpcyBjb3VsZCBiZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIGZpbmRpbmcgc29tZXRoaW5nIGludGVyZXN0aW5nLiBMZXQmIzM5O3MgZGlnIGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxODo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0JSQ01GX0ZXVkVORE9SX0NZVyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9zZGlvLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxODo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODYwOAoJCQkJCQkJb3V0cHV0OiA1NAoJCQkJCQkJdGhvdWdodHM6IDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkluaXRpYWwgQXNzZXNzbWVudDogVVNCIERyaXZlciBEaXZlKioKClJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBVU0IgZHJpdmVyLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZ28gc3RyYWlnaHQgdG8gYHVzYi5jYC4gSXQmIzM5O3MgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgZ2l2ZW4gdGhlIGNvbnRleHQuIEdpdmVuIG15IGV4cGVyaWVuY2UsIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgZmlsZSB0byBiZSB0aGUgY2VudHJhbCBodWIsIHRoZSBwb2ludCB3aGVyZSB0aGUgaGFyZHdhcmUgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIGtlcm5lbCYjMzk7cyBVU0Igc3Vic3lzdGVtLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGUgY29yZSBpbml0aWFsaXphdGlvbiByb3V0aW5lcywgdGhlIGludGVycnVwdCBoYW5kbGVycywgYW5kIHRoZSBiYXNpYyBkYXRhIHN0cnVjdHVyZXMgZGVmaW5pbmcgVVNCIGRldmljZS9lbmRwb2ludCByZXByZXNlbnRhdGlvbi4gVW5kZXJzdGFuZGluZyB0aGUgYXJjaGl0ZWN0dXJlIGRlZmluZWQgaGVyZSBpcyBjcnVjaWFsIGJlZm9yZSBnZXR0aW5nIHRvbyBkZWVwIGludG8gYW55IHNwZWNpZmljIGZ1bmN0aW9uYWxpdHkuIEkmIzM5O20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgdGhhdCB0aGlzIGZpbGUgd2lsbCBiZSBhIGxhcmdlLCBjb21wbGV4IHBpZWNlIG9mIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE4OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7QlJDTUZfRldWRU5ET1JfQ1lXJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTg6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg4NDkKCQkJCQkJCW91dHB1dDogNDgKCQkJCQkJCXRob3VnaHRzOiA1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZS4uLgoKKipFeGFtaW5pbmcgRHJpdmVyIEluaXRpYWxpemF0aW9uIGZvciBCcm9hZGNvbSBXaS1GaSBEcml2ZXJzKioKCkhhbmcgb24gYSBzZWNvbmQuIEkganVzdCByZWFsaXplZCB0aGF0IHRoaXMgYEJSQ01GX0ZXVkVORE9SX0NZV2AgY29uc3RhbnQg4oCTIGlzbiYjMzk7dCB0aGF0ICpvbmx5KiB1c2VkIHdpdGhpbiB0aGUgYHBjaWUuY2AgZmlsZT8gVGhhdCBzZWVtcyBvZGQuIEl0IG1ha2VzIG1lIHdvbmRlciBpZiB0aGVyZSYjMzk7cyBhbiBvdmVyc2lnaHQgc29tZXdoZXJlIG9yIGlmIGl0JiMzOTtzIHNpbXBseSBhIGRlbGliZXJhdGUgZGVzaWduIGNob2ljZS4gSSYjMzk7ZCBiZXR0ZXIgZG91YmxlLWNoZWNrIHRoZSBVU0IgZHJpdmVyJiMzOTtzIGluaXRpYWxpemF0aW9uLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byByZXZpc2l0IGBicmNtZm1hYy91c2IuY2AgYW5kIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGUgZGlmZmVyZW50IGBkcml2ZXJfaW5mb2AgdmFsdWVzIHRoYXQgYXJlIGFjdHVhbGx5IGJlaW5nIHV0aWxpemVkIHRoZXJlLiBJIHdhbnQgdG8gc2VlIGlmIHRoaXMgYEJSQ01GX0ZXVkVORE9SX0NZV2AgdmFsdWUgaGFzIGEgY291bnRlcnBhcnQgaW4gdGhlIFVTQiBjb250ZXh0LiBOZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIHNvbWV0aGluZyBpbiB0aGUgYnJvYWRlciBhcmNoaXRlY3R1cmUgb2YgdGhlIEJyb2FkY29tIFdpLUZpIGRyaXZlciBpbXBsZW1lbnRhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTg6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZHJpdmVyX2luZm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jPTEzNDU9YnJjbWZfdXNiX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTE0NDUtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM6MTQ0NjpcdHJldCA9IGJyY21mX3VzYl9wcm9iZV9jYihkZXZpbmZvLCBpZC1cdTAwM2Vkcml2ZXJfaW5mbyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtMTQ0Ny1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jPTE1MTQ9c3RhdGljIGludCBicmNtZl91c2JfcmVzZXRfcmVzdW1lKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xNTM2LVx0XHRVU0JfREVWSUNFKEJSQ01fVVNCX1ZFTkRPUl9JRF9CUk9BRENPTSwgZGV2X2lkKSwgXFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYzoxNTM3Olx0XHQuZHJpdmVyX2luZm8gPSBCUkNNRl9GV1ZFTkRPUl9XQ0MgXFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xNTM4LVx0fVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xNTQyLVx0XHRVU0JfREVWSUNFKEJSQ01fVVNCX1ZFTkRPUl9JRF9MSU5LU1lTLCBkZXZfaWQpLCBcXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jOjE1NDM6XHRcdC5kcml2ZXJfaW5mbyA9IEJSQ01GX0ZXVkVORE9SX1dDQyBcXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTE1NDQtXHR9XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTE1NDgtXHRcdFVTQl9ERVZJQ0UoQ1lfVVNCX1ZFTkRPUl9JRF9DWVBSRVNTLCBkZXZfaWQpLCBcXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jOjE1NDk6XHRcdC5kcml2ZXJfaW5mbyA9IEJSQ01GX0ZXVkVORE9SX1dDQyBcXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTE1NTAtXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE4OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5ODAzCgkJCQkJCQlvdXRwdXQ6IDQ5CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXNzdW1pbmcgdGhlIGNvbnRleHQgaXMgbXkgZXhwZXJ0IHVuZGVyc3RhbmRpbmcgb2YgZGV2aWNlIGRyaXZlcnM6CgoqKlVTQiBhbmQgU0RJTyBEZXZpY2UgRmlybXdhcmUgQ29uc2lkZXJhdGlvbnMqKgoKUmlnaHQsIHRoYXQmIzM5O3MgaXQhIEkmIzM5O20gcHJldHR5IHN1cmUgSSYjMzk7dmUgZ290IGl0IC0gdGhlIGBCUkNNRl9GV1ZFTkRPUl9XQ0NgIG5hbWluZyBjb252ZW50aW9uLi4uIHRoYXQmIzM5O3MgdGhlIHRlbGwuIEkmIzM5O20gYWxtb3N0IGNlcnRhaW4gSSYjMzk7dmUgc2VlbiB0aGF0IGFzc29jaWF0ZWQgd2l0aCBhbGwgdGhlIFVTQiBkZXZpY2VzLCB3aGljaCBtYWtlcyBwZXJmZWN0IHNlbnNlIGdpdmVuIHRoZSBCcm9hZGNvbSBhcmNoaXRlY3R1cmUuIEJ1dCBhIG5hZ2dpbmcgdGhvdWdodC4uLiB3aGF0IGFib3V0IHRoZSBTeXN0ZW0tb24tQ2hpcCAoU0RJTykgZGV2aWNlcz8gV2UmIzM5O3JlIHNvIHVzZWQgdG8gbG9va2luZyBhdCBVU0Igc29sdXRpb25zLiBJIG5lZWQgdG8gdGFrZSBhIHN0ZXAgYmFjayBhbmQgdGhpbmsgY2FyZWZ1bGx5IHRocm91Z2ggdGhlIFNESU8gY291bnRlcnBhcnRzLiBBcmUgdGhleSByZWxhdGVkIGluIHRoZSBzYW1lIHdheT8gT3IgZG9lcyB0aGlzIG5hbWluZyBzY2hlbWUgbWVhbiBzb21ldGhpbmcgZGlmZmVyZW50IHRoZXJlPyBUaW1lIHRvIHJldmlzaXQgdGhvc2UgZmlybXdhcmUgcmVmZXJlbmNlcy4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxODo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RyaXZlcl9pbmZvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3NkaW8uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE4OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwMDY2CgkJCQkJCQlvdXRwdXQ6IDQ4CgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIEZpcm13YXJlIFZpZGVvIERyaXZlcioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmluZCBzb21ldGhpbmcgcmVsYXRlZCB0byBgZnd2aWRgLCBtb3N0IGxpa2VseSBkZWFsaW5nIHdpdGggZmlybXdhcmUgdmlkZW8gaGFuZGxpbmcuIFRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IGZvciB0aGF0IGlzIHRoZSBgc2Rpby5jYCBmaWxlLiBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIHBhcnQgb2YgdGhlIFNESU8gc3Vic3lzdGVtLCB3aGljaCBpcyBvZnRlbiBpbnZvbHZlZCBpbiBpbnRlcmFjdGlvbnMgd2l0aCBmaXJtd2FyZSwgYW5kIEkgcmVtZW1iZXIgYGZ3dmlkYCBiZWluZyBjb25uZWN0ZWQgdG8gdGhpcyBhcmVhLCBzbyBsZXQmIzM5O3Mgc3RhcnQgdGhlcmUuIEkmIzM5O2xsIG5lZWQgdG8gb3BlbiB0aGF0IGZpbGUgYW5kIHN0YXJ0IGxvb2tpbmcgZm9yIHJlbGV2YW50IGZ1bmN0aW9ucywgdmFyaWFibGVzLCBhbmQgZGF0YSBzdHJ1Y3R1cmVzLiBUaGlzIHNlZW1zIGxpa2UgdGhlIG1vc3QgcHJvbWlzaW5nIHBhdGggdG8gaW52ZXN0aWdhdGUsIGdpdmVuIHRoZSBpbmZvcm1hdGlvbiBJIGhhdmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE4OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Znd2aWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvc2Rpby5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTg6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzAyODEKCQkJCQkJCW91dHB1dDogNTIKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSGVyZSYjMzk7cyBob3cgSSYjMzk7ZCBhcHByb2FjaCB0aGF0IHF1ZXN0aW9uLCB0aGlua2luZyBpdCB0aHJvdWdoIGZyb20gYSB0ZWNobmljYWwgcGVyc3BlY3RpdmU6CgoqKkludmVzdGlnYXRpbmcgYGZ3dmlkYCBpbiBTRElPKioKCk15IGluaXRpYWwgdGhvdWdodCBpcywgJiMzNDtXYWl0LCBob3cgKmlzKiBgZnd2aWRgIGFjdHVhbGx5IHNldCBpbiB0aGUgU0RJTyBjb250ZXh0PyYjMzQ7IEl0JiMzOTtzIGEgZnVuZGFtZW50YWwgcGFyYW1ldGVyLCBhbmQga25vd2luZyBpdHMgc291cmNlIGlzIGNydWNpYWwgZm9yIGRlYnVnZ2luZyBhbmQgb3B0aW1pemF0aW9uLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgcmVsZXZhbnQgc291cmNlIGNvZGUgYW5kIGRvY3VtZW50YXRpb24uIE15IGZvY3VzIHdpbGwgYmUgb24gdGhlIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlcyBhbmQgYW55IHBvdGVudGlhbCBjb25maWd1cmF0aW9uIHJvdXRpbmVzIHdpdGhpbiB0aGUgU0RJTyBkcml2ZXIgaXRzZWxmLCBhcyB3ZWxsIGFzIGFueSBoaWdoZXItbGV2ZWwgZnJhbWV3b3JrcyB0aGF0IG1pZ2h0IGJlIGludGVyYWN0aW5nIHdpdGggaXQuIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgdG8gbG9vayBmb3IgYm90aCB0aGUgb2J2aW91cyBwbGFjZXMsIGxpa2UgdGhlIGRyaXZlciYjMzk7cyBlbnRyeSBwb2ludHMgYW5kIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9ucywgYnV0IGFsc28gbGVzcyBvYnZpb3VzIGFyZWFzLCBwZXJoYXBzIGEgY29uZmlndXJhdGlvbiBkYXRhYmFzZSBvciBhIGJvYXJkLXNwZWNpZmljIGZpbGUuIFRoZSBnb2FsIGlzIHRvIHRyYWNlIHRoZSBsaW5lYWdlIG9mIHRoYXQgdmFyaWFibGUuIElzIGl0IHNldCBzdGF0aWNhbGx5LCByZWFkIGZyb20gYSBkZXZpY2UgZGVzY3JpcHRvciwgb3IgZGV0ZXJtaW5lZCBkeW5hbWljYWxseSBkdXJpbmcgdGhlIFNESU8gZW51bWVyYXRpb24gcHJvY2Vzcz8gT25jZSBJIHRyYWNlIGl0LCBJIG5lZWQgdG8ga25vdyB1bmRlciB3aGF0IGNvbmRpdGlvbnMgZG9lcyB0aGlzIHZhcmlhYmxlIGNoYW5nZS4gQW55IGNvZGUgdXBkYXRlcywgYW5kIGNvbmZpZ3VyYXRpb24gc2hvdWxkIGNvbWUgdG8gbWluZCBhdCB0aGF0IHBvaW50LiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBtZWNoYW5pc20sIHRoZSB0aW1pbmcsIGFuZCBhbnkgcG9zc2libGUgaW5mbHVlbmNpbmcgZmFjdG9ycy4gSSBhbnRpY2lwYXRlIHRoYXQgZGVwZW5kaW5nIG9uIHRoZSBTRElPIGNvbnRyb2xsZXIgYW5kIGhvc3QgaW1wbGVtZW50YXRpb24sIHRoZSBzZXR0aW5nIG1pZ2h0IGludm9sdmUgc2V2ZXJhbCBsYXllcnMgb2YgYWJzdHJhY3Rpb24sIHNvIEkgbmVlZCB0byBiZSBwcmVwYXJlZCB0byB0cmF2ZXJzZSB0aHJvdWdoIG11bHRpcGxlIGZ1bmN0aW9uIGNhbGxzLiBJJiMzOTttIGFzc3VtaW5nLCBvZiBjb3Vyc2UsIHRoYXQgdGhlIGZpcm13YXJlIGlkZW50aWZpZXIgKGBmd3ZpZGApIGlzIGNydWNpYWwgZm9yIGEgcmVhc29uLCBsaWtlbHkgcmVsYXRlZCB0byBpZGVudGlmeWluZyB0aGUgc3BlY2lmaWMgZmlybXdhcmUgcmV2aXNpb24gbG9hZGVkIG9uIHRoZSBTRElPIGRldmljZSwgc28gaXQgd291bGQgYmUgZXNzZW50aWFsIHRvIGVuc3VyZSB0aGF0IGl0IHJlZmxlY3RzIHRoZSBhY3R1YWwgc3RhdGUgb2YgdGhlIGRldmljZS4gVGhpcyBpbnZlc3RpZ2F0aW9uIHdpbGwgbGVhZCBtZSB0byB0aGUgcHJlY2lzZSBsb2NhdGlvbiBvZiB0aGUgY29kZSB0aGF0IGRlZmluZXMsIHJlYWRzLCBvciBvdGhlcndpc2UgaW50ZXJhY3RzIHdpdGggYGZ3dmlkYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTg6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtCUkNNRl9GV1ZFTkRPUiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9zZGlvLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxODo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDczMAoJCQkJCQkJb3V0cHV0OiA1NAoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHdoYXQgd2UmIzM5O3JlIGxvb2tpbmcgYXQsIHN1bW1hcml6ZWQgZnJvbSB0aGF0IGluaXRpYWwgcHJvbXB0OgoKKipBbmFseXppbmcgdGhlIGBicmNtZl9zZGlvX3Byb2JlYCBGdW5jdGlvbioqCgpBbHJpZ2h0LCBzbyB0aGUgdGFzayBhdCBoYW5kIGlzIHRvIHRha2UgYSBsb29rIGF0IGBicmNtZl9zZGlvX3Byb2JlYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHRoaXMgaXMgbGlrZWx5IHdoZXJlIHRoZSBCcm9hZGNvbSBTRElPIFdpLUZpIGRyaXZlciwgb3IgYXQgbGVhc3QgYSBjcnVjaWFsIHBhcnQgb2YgaXQsIGdldHMgaW5pdGlhbGl6ZWQgYW5kLCB3ZWxsLCBwcm9iZWQgd2hlbiB0aGUgc3lzdGVtIGRldGVjdHMgYSBwb3RlbnRpYWwgQnJvYWRjb20gU0RJTyBkZXZpY2UuIGBwcm9iZWAgaXMgYSBwcmV0dHkgc3RhbmRhcmQgbmFtZSBmb3IgdGhpcyBzb3J0IG9mIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGRyaXZlciBoYW5kbGVzIHRoZSBpbml0aWFsIGhhbmRzaGFrZSB3aXRoIHRoZSBoYXJkd2FyZSwgdGhlIHJlc291cmNlIGFsbG9jYXRpb24sIGFuZCBob3cgdGhlIGRyaXZlciBnZXRzIGJvdW5kIHRvIHRoZSBkZXZpY2UuIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgdGhpcyBpcyB0aGUgZnVuY3Rpb24gdGhhdCBkZXRlcm1pbmVzIHdoZXRoZXIgb3Igbm90IHRoZSBzeXN0ZW0gaGFzIGFuIFNESU8gYnVzLiBJdCBpcyBhbHNvIGltcG9ydGFudCB0byBjb25zaWRlciBpZiB0aGlzIGZ1bmN0aW9uIGRldGVybWluZXMgd2hpY2ggcmVzb3VyY2VzIGFyZSBuZWVkZWQgYnkgdGhlIFNESU8gYnVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxODo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticmNtZl9zZGlvX3Byb2JlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3NkaW8uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvc2Rpby5jPTM5NDk9c3RhdGljIGludFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3NkaW8uYzozOTUwOmJyY21mX3NkaW9fcHJvYmVfYXR0YWNoKHN0cnVjdCBicmNtZl9zZGlvICpidXMpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvc2Rpby5jLTM5NTEte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9zZGlvLmM9NDQyND1icmNtZl9zZGlvX3ByZXBhcmVfZndfcmVxdWVzdChzdHJ1Y3QgYnJjbWZfc2RpbyAqYnVzKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9zZGlvLmMtNDQ0OC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9zZGlvLmM6NDQ0OTppbnQgYnJjbWZfc2Rpb19wcm9iZShzdHJ1Y3QgYnJjbWZfc2Rpb19kZXYgKnNkaW9kZXYpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvc2Rpby5jLTQ0NTAte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9zZGlvLmMtNDQ4NS1cdC8qIGF0dGVtcHQgdG8gYXR0YWNoIHRvIHRoZSBkb25nbGUgKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9zZGlvLmM6NDQ4NjpcdHJldCA9IGJyY21mX3NkaW9fcHJvYmVfYXR0YWNoKGJ1cyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvc2Rpby5jLTQ0ODctXHRpZiAocmV0IFx1MDAzYyAwKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvc2Rpby5jOjQ0ODg6XHRcdGJyY21mX2VycihcJiMzNDticmNtZl9zZGlvX3Byb2JlX2F0dGFjaCBmYWlsZWRcXG5cJiMzNDspO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3NkaW8uYy00NDg5LVx0XHRnb3RvIGZhaWw7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE4OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxNTQ2CgkJCQkJCQlvdXRwdXQ6IDU1CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkluaXRpYWwgQXNzZXNzbWVudCBvZiBgYnJjbWZfc2Rpb19wcm9iZWAqKgoKQWxyaWdodCwgc28gdGhlIGZpcnN0IHRoaW5nIEkmIzM5O20gZG9pbmcgaXMgdHVybmluZyBteSBhdHRlbnRpb24gdG8gYGJyY21mX3NkaW9fcHJvYmVgLiBUaGlzIGlzIHRoZSBlbnRyeSBwb2ludCwgdGhlIHByaW1hcnkgZnVuY3Rpb24gb2YgdGhlIFNESU8gcHJvYmUgcm91dGluZSwgd2hpY2ggaXMgbGlrZWx5IHdoZXJlIHRoZSBkcml2ZXIga2lja3Mgb2ZmIGZvciBhIEJyb2FkY29tIFNESU8gV2ktRmkgZGV2aWNlLiBJJiMzOTttIGltbWVkaWF0ZWx5IHRoaW5raW5nLCAmIzM0O09rYXksIHdoYXQmIzM5O3MgdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlIGhlcmU/IFdoYXQmIzM5O3MgdGhlIGRyaXZlciYjMzk7cyByb2xlIGluIHRoZSBzeXN0ZW0/JiMzNDsgSSYjMzk7bSBleHBlY3RpbmcgdGhpcyBmdW5jdGlvbiB0byBoYW5kbGUgdGhlIGluaXRpYWwgZGV2aWNlIGRldGVjdGlvbiwgcG9zc2libHkgc29tZSBiYXNpYyByZXNvdXJjZSBhbGxvY2F0aW9uLCBhbmQgZGVmaW5pdGVseSB0aGUgc2V0dXAgb2YgdGhlIFNESU8gaW50ZXJmYWNlIGZvciBjb21tdW5pY2F0aW9uIHdpdGggdGhlIEJyb2FkY29tIGNoaXAuIEl0JiMzOTtzIHRoZSBsYXVuY2hpbmcgcGFkLCB0aGUgZ2F0ZWtlZXBlciBmb3IgdGhlIHJlc3Qgb2YgdGhlIGRyaXZlciYjMzk7cyBvcGVyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE4OjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3NkaW8uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ0NDksCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NDQ0OTpcdGludCBicmNtZl9zZGlvX3Byb2JlKHN0cnVjdCBicmNtZl9zZGlvX2RldiAqc2Rpb2RldilcbjQ0NTA6XHR7XG40NDUxOlx0XHRpbnQgcmV0O1xuNDQ1MjpcdFx0c3RydWN0IGJyY21mX3NkaW8gKmJ1cztcbjQ0NTM6XHRcdHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp3cTtcbjQ0NTQ6XHRcdHN0cnVjdCBicmNtZl9md19yZXF1ZXN0ICpmd3JlcTtcbjQ0NTU6XHRcbjQ0NTY6XHRcdGJyY21mX2RiZyhUUkFDRSwgXCYjMzQ7RW50ZXJcXG5cJiMzNDspO1xuNDQ1NzpcdFxuNDQ1ODpcdFx0LyogQWxsb2NhdGUgcHJpdmF0ZSBidXMgaW50ZXJmYWNlIHN0YXRlICovXG40NDU5Olx0XHRidXMgPSBremFsbG9jX29iaigqYnVzLCBHRlBfQVRPTUlDKTtcbjQ0NjA6XHRcdGlmICghYnVzKSB7XG40NDYxOlx0XHRcdHJldCA9IC1FTk9NRU07XG40NDYyOlx0XHRcdGdvdG8gZmFpbDtcbjQ0NjM6XHRcdH1cbjQ0NjQ6XHRcbjQ0NjU6XHRcdGJ1cy1cdTAwM2VzZGlvZGV2ID0gc2Rpb2RldjtcbjQ0NjY6XHRcdHNkaW9kZXYtXHUwMDNlYnVzID0gYnVzO1xuNDQ2NzpcdFx0c2tiX3F1ZXVlX2hlYWRfaW5pdChcdTAwMjZidXMtXHUwMDNlZ2xvbSk7XG40NDY4Olx0XHRJTklUX1dPUksoXHUwMDI2YnVzLVx1MDAzZWRhdGF3b3JrLCBicmNtZl9zZGlvX2RhdGF3b3JrZXIpO1xuNDQ2OTpcdFx0YnVzLVx1MDAzZXR4Ym91bmQgPSBCUkNNRl9UWEJPVU5EO1xuNDQ3MDpcdFx0YnVzLVx1MDAzZXJ4Ym91bmQgPSBCUkNNRl9SWEJPVU5EO1xuNDQ3MTpcdFx0YnVzLVx1MDAzZXR4bWlubWF4ID0gQlJDTUZfVFhNSU5NQVg7XG40NDcyOlx0XHRidXMtXHUwMDNldHhfc2VxID0gU0RQQ01fU0VRX1dSQVAgLSAxO1xuNDQ3MzpcdFxuNDQ3NDpcdFx0Lyogc2luZ2xlLXRocmVhZGVkIHdvcmtxdWV1ZSAqL1xuNDQ3NTpcdFx0d3EgPSBhbGxvY19vcmRlcmVkX3dvcmtxdWV1ZShcJiMzNDticmNtZl93cS8lc1wmIzM0OywgV1FfTUVNX1JFQ0xBSU0gfCBXUV9ISUdIUFJJLFxuNDQ3NjpcdFx0XHRcdFx0ICAgICBkZXZfbmFtZShcdTAwMjZzZGlvZGV2LVx1MDAzZWZ1bmMxLVx1MDAzZWRldikpO1xuNDQ3NzpcdFx0aWYgKCF3cSkge1xuNDQ3ODpcdFx0XHRicmNtZl9lcnIoXCYjMzQ7aW5zdWZmaWNpZW50IG1lbW9yeSB0byBjcmVhdGUgdHh3b3JrcXVldWVcXG5cJiMzNDspO1xuNDQ3OTpcdFx0XHRyZXQgPSAtRU5PTUVNO1xuNDQ4MDpcdFx0XHRnb3RvIGZhaWw7XG40NDgxOlx0XHR9XG40NDgyOlx0XHRicmNtZl9zZGlvZF9mcmVlemVyX2NvdW50KHNkaW9kZXYpO1xuNDQ4MzpcdFx0YnVzLVx1MDAzZWJyY21mX3dxID0gd3E7XG40NDg0Olx0XG40NDg1Olx0XHQvKiBhdHRlbXB0IHRvIGF0dGFjaCB0byB0aGUgZG9uZ2xlICovXG40NDg2Olx0XHRyZXQgPSBicmNtZl9zZGlvX3Byb2JlX2F0dGFjaChidXMpO1xuNDQ4NzpcdFx0aWYgKHJldCBcdTAwM2MgMCkge1xuNDQ4ODpcdFx0XHRicmNtZl9lcnIoXCYjMzQ7YnJjbWZfc2Rpb19wcm9iZV9hdHRhY2ggZmFpbGVkXFxuXCYjMzQ7KTtcbjQ0ODk6XHRcdFx0Z290byBmYWlsO1xuNDQ5MDpcdFx0fVxuNDQ5MTpcdFxuNDQ5MjpcdFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2YnVzLVx1MDAzZXJ4Y3RsX2xvY2spO1xuNDQ5MzpcdFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2YnVzLVx1MDAzZXR4cV9sb2NrKTtcbjQ0OTQ6XHRcdGluaXRfd2FpdHF1ZXVlX2hlYWQoXHUwMDI2YnVzLVx1MDAzZWN0cmxfd2FpdCk7XG40NDk1Olx0XHRpbml0X3dhaXRxdWV1ZV9oZWFkKFx1MDAyNmJ1cy1cdTAwM2VkY21kX3Jlc3Bfd2FpdCk7XG40NDk2Olx0XG40NDk3Olx0XHQvKiBTZXQgdXAgdGhlIHdhdGNoZG9nIHRpbWVyICovXG40NDk4Olx0XHR0aW1lcl9zZXR1cChcdTAwMjZidXMtXHUwMDNldGltZXIsIGJyY21mX3NkaW9fd2F0Y2hkb2csIDApO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxODo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjYzNwoJCQkJCQkJb3V0cHV0OiA1NQoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGVidWdnaW5nIFNESU8gRldWSUQgQXNzaWdubWVudCoqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJJiMzOTttIGhpdHRpbmcgYSBzbmFnLiBJJiMzOTttIHRyeWluZyB0byB0cmFjZSB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIFNESU8gaW50ZXJmYWNlLCBzcGVjaWZpY2FsbHkgbG9va2luZyBmb3Igd2hlcmUgdGhlIGBmd3ZpZGAgZmllbGQgaXMgcG9wdWxhdGVkLiBUaGUgc3lzdGVtJiMzOTtzIG5vdCBiZWhhdmluZyBhcyBleHBlY3RlZCwgYW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBpdCYjMzk7cyBnZXR0aW5nIHNldCDigJMgb3IgKmlzbiYjMzk7dCogZ2V0dGluZyBzZXQg4oCTIGNvcnJlY3RseS4gTXkgZ3V0IGZlZWxpbmcgdGVsbHMgbWUgdGhlIHByb2JsZW0gbGllcyBzb21ld2hlcmUgaW4gdGhlIGRyaXZlciYjMzk7cyBlYXJseSBpbml0aWFsaXphdGlvbi4gSSYjMzk7dmUgZ290IGEgbWVudGFsIG1hcCBvZiB0aGUgQnJvYWRjb20gU0RJTyBkcml2ZXIsIGFuZCBJIG5lZWQgdG8gZmluZCB0aGUgcG9pbnQgd2hlcmUgYGZ3dmlkYCBpcyBhc3NpZ25lZCB0byBhIHN0cnVjdCByZXByZXNlbnRpbmcgYW4gU0RJTyBpbnRlcmZhY2UuCgpNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIGBicmNtZl9zZGlvX3Byb2JlX2F0dGFjaGAuIFRoYXQgZnVuY3Rpb24gaXMsIGFzIEkgcmVjYWxsLCB0aGUgY29yZSBvZiB0aGUgU0RJTyBkZXZpY2UgcHJvYmluZyBhbmQgYXR0YWNobWVudCBwcm9jZXNzLCBzbyBpdCYjMzk7cyB0aGUgb2J2aW91cyBwbGFjZSB0byBzdGFydCBkaWdnaW5nLiBUaGlzIGlzIHdoZXJlIHRoZSBoYXJkd2FyZSBpcyBpZGVudGlmaWVkLCBhbmQgdGhlIGRyaXZlciBob29rcyBpdHNlbGYgdXAgdG8gaXQuIFNvLCBJIG5lZWQgdG8gY2hlY2sgdGhlIGZsb3cgd2l0aGluIHRoYXQgZnVuY3Rpb24uIEkmIzM5O20gZ29pbmcgdG8gbG9vayBmb3IgYW55IGV4cGxpY2l0IGFzc2lnbm1lbnQgb2YgYGZ3dmlkYCwgb3IgbWF5YmUgYSBmdW5jdGlvbiBjYWxsIHRoYXQgZG9lcyBpdC4gSSYjMzk7bGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQsIGVuc3VyaW5nIEkgdW5kZXJzdGFuZCB3aGljaCBvbmVzIHRoZSBkcml2ZXIgdXNlcyB0byBjb252ZXkgaW5mb3JtYXRpb24gZnJvbSB0aGUgaGFyZHdhcmUgdG8gdGhlIHNvZnR3YXJlLiBNeSBleHBlY3RhdGlvbiBpcyB0aGUgY29ycmVjdCBhc3NpZ25tZW50IGxvZ2ljIHNob3VsZCBiZSBpbiB0aGVyZSwgb3IgY2xvc2UgdG8gaXQuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE4OjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3NkaW8uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM5NDksCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7Mzk0OTpcdHN0YXRpYyBpbnRcbjM5NTA6XHRicmNtZl9zZGlvX3Byb2JlX2F0dGFjaChzdHJ1Y3QgYnJjbWZfc2RpbyAqYnVzKVxuMzk1MTpcdHtcbjM5NTI6XHRcdHN0cnVjdCBicmNtZl9zZGlvX2RldiAqc2Rpb2RldjtcbjM5NTM6XHRcdHU4IGNsa2N0bCA9IDA7XG4zOTU0Olx0XHRpbnQgZXJyID0gMDtcbjM5NTU6XHRcdGludCByZWdfYWRkcjtcbjM5NTY6XHRcdHUzMiByZWdfdmFsO1xuMzk1NzpcdFx0dTMyIGRyaXZlc3RyZW5ndGg7XG4zOTU4Olx0XHR1MzIgZW51bV9iYXNlO1xuMzk1OTpcdFx0aW50IHJldCA9IC1FQkFERTtcbjM5NjA6XHRcbjM5NjE6XHRcdHNkaW9kZXYgPSBidXMtXHUwMDNlc2Rpb2RldjtcbjM5NjI6XHRcdHNkaW9fY2xhaW1faG9zdChzZGlvZGV2LVx1MDAzZWZ1bmMxKTtcbjM5NjM6XHRcbjM5NjQ6XHRcdGVudW1fYmFzZSA9IGJyY21mX2NoaXBfZW51bV9iYXNlKHNkaW9kZXYtXHUwMDNlZnVuYzEtXHUwMDNlZGV2aWNlKTtcbjM5NjU6XHRcbjM5NjY6XHRcdHByX2RlYnVnKFwmIzM0O0YxIHNpZ25hdHVyZSByZWFkIEAweCUwOHg9MHglNHhcXG5cJiMzNDssIGVudW1fYmFzZSxcbjM5Njc6XHRcdFx0IGJyY21mX3NkaW9kX3JlYWRsKHNkaW9kZXYsIGVudW1fYmFzZSwgTlVMTCkpO1xuMzk2ODpcdFxuMzk2OTpcdFx0LypcbjM5NzA6XHRcdCAqIEZvcmNlIFBMTCBvZmYgdW50aWwgYnJjbWZfY2hpcF9hdHRhY2goKVxuMzk3MTpcdFx0ICogcHJvZ3JhbXMgUExMIGNvbnRyb2wgcmVnc1xuMzk3MjpcdFx0ICovXG4zOTczOlx0XG4zOTc0Olx0XHRicmNtZl9zZGlvZF93cml0ZWIoc2Rpb2RldiwgU0JTRElPX0ZVTkMxX0NISVBDTEtDU1IsIEJSQ01GX0lOSVRfQ0xLQ1RMMSxcbjM5NzU6XHRcdFx0XHQgICBcdTAwMjZlcnIpO1xuMzk3NjpcdFx0aWYgKCFlcnIpXG4zOTc3Olx0XHRcdGNsa2N0bCA9IGJyY21mX3NkaW9kX3JlYWRiKHNkaW9kZXYsIFNCU0RJT19GVU5DMV9DSElQQ0xLQ1NSLFxuMzk3ODpcdFx0XHRcdFx0XHQgICBcdTAwMjZlcnIpO1xuMzk3OTpcdFxuMzk4MDpcdFx0aWYgKGVyciB8fCAoKGNsa2N0bCBcdTAwMjYgflNCU0RJT19BVkJJVFMpICE9IEJSQ01GX0lOSVRfQ0xLQ1RMMSkpIHtcbjM5ODE6XHRcdFx0YnJjbWZfZXJyKFwmIzM0O0NoaXBDbGtDU1IgYWNjZXNzOiBlcnIgJWQgd3JvdGUgMHglMDJ4IHJlYWQgMHglMDJ4XFxuXCYjMzQ7LFxuMzk4MjpcdFx0XHRcdCAgZXJyLCBCUkNNRl9JTklUX0NMS0NUTDEsIGNsa2N0bCk7XG4zOTgzOlx0XHRcdGdvdG8gZmFpbDtcbjM5ODQ6XHRcdH1cbjM5ODU6XHRcbjM5ODY6XHRcdGJ1cy1cdTAwM2VjaSA9IGJyY21mX2NoaXBfYXR0YWNoKHNkaW9kZXYsIHNkaW9kZXYtXHUwMDNlZnVuYzEtXHUwMDNlZGV2aWNlLFxuMzk4NzpcdFx0XHRcdFx0ICAgIFx1MDAyNmJyY21mX3NkaW9fYnVzY29yZV9vcHMpO1xuMzk4ODpcdFx0aWYgKElTX0VSUihidXMtXHUwMDNlY2kpKSB7XG4zOTg5Olx0XHRcdGJyY21mX2VycihcJiMzNDticmNtZl9jaGlwX2F0dGFjaCBmYWlsZWQhXFxuXCYjMzQ7KTtcbjM5OTA6XHRcdFx0YnVzLVx1MDAzZWNpID0gTlVMTDtcbjM5OTE6XHRcdFx0Z290byBmYWlsO1xuMzk5MjpcdFx0fVxuMzk5MzpcdFxuMzk5NDpcdFx0LyogUGljayB1cCB0aGUgU0RJTyBjb3JlIGluZm8gc3RydWN0IGZyb20gY2hpcC5jICovXG4zOTk1Olx0XHRidXMtXHUwMDNlc2Rpb19jb3JlICAgPSBicmNtZl9jaGlwX2dldF9jb3JlKGJ1cy1cdTAwM2VjaSwgQkNNQV9DT1JFX1NESU9fREVWKTtcbjM5OTY6XHRcdGlmICghYnVzLVx1MDAzZXNkaW9fY29yZSlcbjM5OTc6XHRcdFx0Z290byBmYWlsO1xuMzk5ODpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxODo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzkwOAoJCQkJCQkJb3V0cHV0OiA0OAoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEZWx2aW5nIGludG8gdGhlIEZpcm13YXJlIFZlcnNpb24gSW5kaWNhdG9yKioKClJpZ2h0LCAqYnVzLSZndDtzZGlvZGV2LSZndDtmd3ZpZCouLi4gdGhhdCYjMzk7cyByaW5naW5nIGEgYmVsbC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O1dhaXQsIHRoYXQgc3BlY2lmaWMgcGF0aCB0byB0aGUgZmlybXdhcmUgdmVyc2lvbiBpZGVudGlmaWVyPyBJIHNob3VsZCBxdWlja2x5IGNyb3NzIHJlZmVyZW5jZSB0aGF0IHdpdGggdGhlICpicmNtZl9zZGlvX2Rldiogc3RydWN0IGRlZmluaXRpb24sIGFuZCByZWZyZXNoIG15IG1lbnRhbCBtb2RlbCBvZiBob3cgdGhlIFNESU8gZGV2aWNlIHN0cnVjdHVyZSBpcyBzZXQgdXAuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGF0IHBhcnRpY3VsYXIgZmllbGQgYW5kIHdoZXJlIGl0JiMzOTtzIHBvcHVsYXRlZC4gSSBuZWVkIHRvIGdldCB0aGUgY29udGV4dCByaWdodCBiZWZvcmUgbWFraW5nIGFzc3VtcHRpb25zIG9uIGhvdyB0aGlzIGlzIGJlaW5nIHVzZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE4OjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Znd2aWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvc2Rpby5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTg6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQxNTAKCQkJCQkJCW91dHB1dDogNDgKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipQZWVyaW5nIGludG8gdGhlIENvcmU6IGBicmNtZl9zZGlvX2RldmAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgcmlnaHQgaW4uIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gdGFrZSBhIGxvb2sgYXQgYGJyY21mX3NkaW9fZGV2YC4gSSBrbm93IHRoYXQgbmFtZSBmcm9tIHNvbWV3aGVyZS4uLiBpdCYjMzk7cyBhIGtleSBzdHJ1Y3R1cmUgb3IgbWFjcm8sIHByb2JhYmx5IGRlZmluZWQgaW4gYHNkaW8uaGAuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBhbmQgdW5kZXJzdGFuZCB3aGF0IHByZWNpc2VseSBpcyBlbmNhcHN1bGF0ZWQgYnkgdGhpcyBkYXRhIHN0cnVjdHVyZS4gSXQmIzM5O3MgbGlrZWx5IGEgY3JpdGljYWwgcGllY2Ugb2YgdGhlIEJyb2FkY29tIFNESU8gZHJpdmVyIHB1enpsZSwgYnV0IEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyBmaWVsZHMgYW5kIHRoZWlyIGludGVyYWN0aW9ucy4gSSYjMzk7bSBob3BpbmcgdG8gdW5kZXJzdGFuZCBpdHMgcHVycG9zZSB3aXRoaW4gdGhlIFNESU8gZHJpdmVyIGFyY2hpdGVjdHVyZSAtIGlzIGl0IHRoZSBkZXZpY2UgY29udGV4dCwgYSBkZXNjcmlwdG9yLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVGltZSB0byBnZXQgdGhlIGRldGFpbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE4OjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Znd2aWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvc2Rpby5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTg6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQzOTkKCQkJCQkJCW91dHB1dDogNDkKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHN1bW1hcnksIHRha2luZyB0aGUgZmlyc3QtcGVyc29uIHBlcnNwZWN0aXZlIGFzIHJlcXVlc3RlZDoKCioqRGVjb25zdHJ1Y3RpbmcgYGJyY21mX3NkaW9fcmVnaXN0ZXJgKioKCkFscmlnaHQsIGxldCYjMzk7cyBwdWxsIHVwIGBicmNtZl9zZGlvX3JlZ2lzdGVyYC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBCcm9hZGNvbSBTRElPIHJlZ2lzdHJhdGlvbiBwcm9jZXNzLiBJJiMzOTttIGFzc3VtaW5nIGl0JiMzOTtzIHRoZSBjb3JlIGZ1bmN0aW9uIGZvciBpbml0aWFsaXppbmcgdGhlIFNESU8gaW50ZXJmYWNlIGZvciB0aGUgZHJpdmVyLiBMZXQmIzM5O3Mgc3RhcnQgYnkgdW5kZXJzdGFuZGluZyBleGFjdGx5IHdoYXQgbmVlZHMgdG8gYmUgcmVnaXN0ZXJlZCBoZXJlLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIGlzIHdoZXJlIHRoZSBkcml2ZXIgaW50ZXJhY3RzIHdpdGggdGhlIFNESU8gY29yZSwgbGlrZWx5IHJlcXVlc3RpbmcgcmVzb3VyY2VzLCBzZXR0aW5nIHVwIGludGVycnVwdCBoYW5kbGVycywgYW5kIGRlZmluaW5nIHRoZSBvcGVyYXRpb25hbCBjaGFyYWN0ZXJpc3RpY3MgZm9yIHRoZSBkZXZpY2UuIEkga25vdyB0aGF0IFNESU8gaXMgYSBiaXQgZGlmZmVyZW50IGZyb20gdHJhZGl0aW9uYWwgUENJLCBzbyBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZ3Jhc3AgdGhlIFNESU8tc3BlY2lmaWMgbnVhbmNlcywgbGlrZSB0aGUgYmxvY2sgYWRkcmVzc2luZyBzY2hlbWUuIEkmIzM5O2xsIGxpa2VseSBmaW5kIHRoZSBjcnVjaWFsIHNldHVwIGZvciBETUEgdHJhbnNmZXJzIGFuZCBhbnkgcG93ZXIgbWFuYWdlbWVudCBhc3BlY3RzIHdpdGhpbiB0aGlzIGZ1bmN0aW9uIGFzIHdlbGwuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIHJlc291cmNlIGFsbG9jYXRpb24gZm9yIHRoZSBkZXZpY2UsIHJlZ2lzdGVyaW5nIGludGVycnVwdCBoYW5kbGVycywgdGhlIHNldHVwIG9mIGFueSBkYXRhIHRyYW5zZmVyIG1lY2hhbmlzbXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE4OjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Z3dmlkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2JjbXNkaC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9iY21zZGguYz0xMDQxPXN0YXRpYyBpbnQgYnJjbWZfb3BzX3NkaW9fcHJvYmUoc3RydWN0IHNkaW9fZnVuYyAqZnVuYyxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYmNtc2RoLmMtMTA4OC1cdGJ1c19pZi1cdTAwM2Vwcm90b190eXBlID0gQlJDTUZfUFJPVE9fQkNEQztcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9iY21zZGguYzoxMDg5Olx0YnVzX2lmLVx1MDAzZWZ3dmlkID0gaWQtXHUwMDNlZHJpdmVyX2RhdGE7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYmNtc2RoLmMtMTA5MC1cdGRldl9zZXRfZHJ2ZGF0YShcdTAwMjZmdW5jLVx1MDAzZWRldiwgYnVzX2lmKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTg6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQ5MDQKCQkJCQkJCW91dHB1dDogNTYKCQkJCQkJCXRob3VnaHRzOiA0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqRGlnZ2luZyBpbnRvIHRoZSBCQ01TREggRHJpdmVyKioKCkFscmlnaHQsIHNvIEkmIzM5O20gZGVlcCBpbiBgYmNtc2RoLmNgIGFnYWluLCB0cnlpbmcgdG8gdHJhY2sgZG93biB0aGlzIGlzc3VlLCBhbmQgaXQmIzM5O3MgY2xpY2tlZCDigJMgdGhlIGBpZC0mZ3Q7ZHJpdmVyX2RhdGFgIHZhbHVlIGluIHRoaXMgZmlsZSwgc3BlY2lmaWNhbGx5LCBpcyBwb2ludGluZyB0byBgZnd2aWRgLiBUaGF0JiMzOTtzIHRoZSBrZXkuIExldCBtZSBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0IGJ5IGhlYWRpbmcgb3ZlciB0byBgYnJjbWZfc2RtbWNfaWRzYCBhbHNvIHdpdGhpbiBgYmNtc2RoLmNgLiBJIG5lZWQgdG8gZW5zdXJlIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlIHR3byBwaWVjZXMgb2YgZGF0YSBpcyBjb3JyZWN0LiBDb250ZXh0IGlzIGV2ZXJ5dGhpbmcgd2hlbiBkaWFnbm9zaW5nIHRoaXMga2luZCBvZiB0aGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTg6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnJjbWZfc2RtbWNfaWRzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2JjbXNkaC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9iY21zZGguYz05MDA9aW50IGJyY21mX3NkaW9kX3Byb2JlKHN0cnVjdCBicmNtZl9zZGlvX2RldiAqc2Rpb2Rldilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYmNtc2RoLmMtOTc5LS8qIGRldmljZXMgd2Ugc3VwcG9ydCwgbnVsbCB0ZXJtaW5hdGVkICovXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYmNtc2RoLmM6OTgwOnN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2Rpb19kZXZpY2VfaWQgYnJjbWZfc2RtbWNfaWRzW10gPSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYmNtc2RoLmMtOTgxLVx0QlJDTUZfU0RJT19ERVZJQ0UoU0RJT19ERVZJQ0VfSURfQlJPQURDT01fNDMxNDMsIFdDQyksXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2JjbXNkaC5jLTEwMDYtfTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9iY21zZGguYzoxMDA3Ok1PRFVMRV9ERVZJQ0VfVEFCTEUoc2RpbywgYnJjbWZfc2RtbWNfaWRzKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9iY21zZGguYy0xMDA4LVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9iY21zZGguYz0xMjYwPXN0YXRpYyBzdHJ1Y3Qgc2Rpb19kcml2ZXIgYnJjbWZfc2RtbWNfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9iY21zZGguYy0xMjYzLVx0Lm5hbWUgPSBLQlVJTERfTU9ETkFNRSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9iY21zZGguYzoxMjY0Olx0LmlkX3RhYmxlID0gYnJjbWZfc2RtbWNfaWRzLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2JjbXNkaC5jLTEyNjUtXHQuZHJ2ID0ge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjc5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxODo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTY5NAoJCQkJCQkJb3V0cHV0OiA1NQoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIGBicmNtZl9zZG1tY19pZHNgIGZvciBJbnNpZ2h0KioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgYnJjbWZfc2RtbWNfaWRzYCBmaWxlLiBJJiMzOTttIGltbWVkaWF0ZWx5IGxvb2tpbmcgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiB0aGUgQnJvYWRjb20gV2ktRmkgZHJpdmVyLCBwYXJ0aWN1bGFybHkgY29uY2VybmluZyBTRE1NQyBpbnRlcmZhY2UgaW5pdGlhbGl6YXRpb24gYW5kIGRldmljZSBpZGVudGlmaWNhdGlvbi4gTXkgbWVudGFsIGNoZWNrbGlzdCBzdGFydHMgd2l0aCBwYXJzaW5nIHRoZSBzdHJ1Y3R1cmUgZGVmaW5pdGlvbnMuIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSBlbnRyaWVzIHJlbGF0ZWQgdG8gU0QgY2FyZCB2ZW5kb3IgSURzLCBkZXZpY2UgSURzLCBwb3RlbnRpYWxseSBwcm9kdWN0IHJldmlzaW9ucywgYW5kIGNlcnRhaW5seSBzb21lIGtpbmQgb2YgaWRlbnRpZmllciBtYXRjaGluZyBtZWNoYW5pc20uIEFyZSB3ZSBsb29raW5nIGF0IGEgc2ltcGxlIGxpc3Qgb2YgaGFyZGNvZGVkIElEcywgb3Igc29tZXRoaW5nIG1vcmUgc29waGlzdGljYXRlZCBsaWtlIGEgdGFibGUgd2l0aCB3aWxkY2FyZHMgb3IgcmFuZ2VzPyBUaGF0JiMzOTtsbCBnaXZlIG1lIGEgY2x1ZSBhYm91dCB0aGUgZmxleGliaWxpdHkgb2YgdGhlIGRyaXZlciBhbmQgaXRzIGFiaWxpdHkgdG8gaGFuZGxlIGEgdmFyaWV0eSBvZiBzdXBwb3J0ZWQgZGV2aWNlcy4gSSYjMzk7bSBhbHNvIHNjYW5uaW5nIGZvciBhbnkgcG90ZW50aWFsIGRpc2NyZXBhbmNpZXMgb3IgYXJlYXMgdGhhdCBtaWdodCByZXF1aXJlIHVwZGF0ZXMgd2l0aCBuZXdlciBoYXJkd2FyZSByZWxlYXNlcy4gQW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIG9yIHZlcnNpb25pbmcgY2hlY2tzIHdpdGhpbiB0aGUgZmlsZSB3b3VsZCBiZSBlc3BlY2lhbGx5IGludGVyZXN0aW5nLCBoaW50aW5nIGF0IGhvdyB0aGV5JiMzOTt2ZSBoYW5kbGVkIGNvbXBhdGliaWxpdHkgYWNyb3NzIGRpZmZlcmVudCBoYXJkd2FyZSByZXZpc2lvbnMuIEZpbmFsbHksIEkmIzM5O2xsIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGRhdGEgc3RydWN0dXJlcyB1c2VkOyBhcmUgdGhleSBlZmZpY2llbnQsIGFuZCBpcyB0aGVyZSBhbnkgdXNlIG9mIGJpdGZpZWxkcyB0byBvcHRpbWl6ZSBtZW1vcnkgdXNhZ2U/IEkmIzM5O2xsIHByb2JhYmx5IGFsc28gYmUgbG9va2luZyBmb3IgYW55IGhpbnRzIGFib3V0IHBvd2VyIG1hbmFnZW1lbnQgb3IgY2xvY2tpbmcgY29uZmlndXJhdGlvbnMgdGhhdCBtaWdodCBiZSB0aWVkIHRvIHNwZWNpZmljIGRldmljZSBJRHMuIEkmIzM5O20gaG9waW5nIHRvIHVuY292ZXIgYW55IGltcGxpY2l0IGFzc3VtcHRpb25zIHRoYXQgbWlnaHQgbGVhZCB0byBkcml2ZXIgaXNzdWVzIGRvd24gdGhlIHJvYWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+ODAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE4OjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2JjbXNkaC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA5ODA6XHRzdGF0aWMgY29uc3Qgc3RydWN0IHNkaW9fZGV2aWNlX2lkIGJyY21mX3NkbW1jX2lkc1tdID0ge1xuIDk4MTpcdFx0QlJDTUZfU0RJT19ERVZJQ0UoU0RJT19ERVZJQ0VfSURfQlJPQURDT01fNDMxNDMsIFdDQyksXG4gOTgyOlx0XHRCUkNNRl9TRElPX0RFVklDRShTRElPX0RFVklDRV9JRF9CUk9BRENPTV80MzI0MSwgV0NDKSxcbiA5ODM6XHRcdEJSQ01GX1NESU9fREVWSUNFKFNESU9fREVWSUNFX0lEX0JST0FEQ09NXzQzMjksIFdDQyksXG4gOTg0Olx0XHRCUkNNRl9TRElPX0RFVklDRShTRElPX0RFVklDRV9JRF9CUk9BRENPTV80MzMwLCBXQ0MpLFxuIDk4NTpcdFx0QlJDTUZfU0RJT19ERVZJQ0UoU0RJT19ERVZJQ0VfSURfQlJPQURDT01fNDMzNCwgV0NDKSxcbiA5ODY6XHRcdEJSQ01GX1NESU9fREVWSUNFKFNESU9fREVWSUNFX0lEX0JST0FEQ09NXzQzMzQwLCBXQ0MpLFxuIDk4NzpcdFx0QlJDTUZfU0RJT19ERVZJQ0UoU0RJT19ERVZJQ0VfSURfQlJPQURDT01fNDMzNDEsIFdDQyksXG4gOTg4Olx0XHRCUkNNRl9TRElPX0RFVklDRShTRElPX0RFVklDRV9JRF9CUk9BRENPTV80MzM2MiwgV0NDKSxcbiA5ODk6XHRcdEJSQ01GX1NESU9fREVWSUNFKFNESU9fREVWSUNFX0lEX0JST0FEQ09NXzQzMzY0LCBXQ0MpLFxuIDk5MDpcdFx0QlJDTUZfU0RJT19ERVZJQ0UoU0RJT19ERVZJQ0VfSURfQlJPQURDT01fNDMzNV80MzM5LCBXQ0MpLFxuIDk5MTpcdFx0QlJDTUZfU0RJT19ERVZJQ0UoU0RJT19ERVZJQ0VfSURfQlJPQURDT01fNDMzOSwgV0NDKSxcbiA5OTI6XHRcdEJSQ01GX1NESU9fREVWSUNFKFNESU9fREVWSUNFX0lEX0JST0FEQ09NXzQzNDMwLCBDWVcpLFxuIDk5MzpcdFx0QlJDTUZfU0RJT19ERVZJQ0UoU0RJT19ERVZJQ0VfSURfQlJPQURDT01fNDM0MzksIFdDQyksXG4gOTk0Olx0XHRCUkNNRl9TRElPX0RFVklDRShTRElPX0RFVklDRV9JRF9CUk9BRENPTV80MzQ1LCBDWVcpLFxuIDk5NTpcdFx0QlJDTUZfU0RJT19ERVZJQ0UoU0RJT19ERVZJQ0VfSURfQlJPQURDT01fNDM0NTUsIENZVyksXG4gOTk2Olx0XHRCUkNNRl9TRElPX0RFVklDRShTRElPX0RFVklDRV9JRF9CUk9BRENPTV80MzU0LCBXQ0MpLFxuIDk5NzpcdFx0QlJDTUZfU0RJT19ERVZJQ0UoU0RJT19ERVZJQ0VfSURfQlJPQURDT01fNDM1NiwgV0NDKSxcbiA5OTg6XHRcdEJSQ01GX1NESU9fREVWSUNFKFNESU9fREVWSUNFX0lEX0JST0FEQ09NXzQzNTksIFdDQyksXG4gOTk5Olx0XHRCUkNNRl9TRElPX0RFVklDRShTRElPX0RFVklDRV9JRF9CUk9BRENPTV80Mzc1MSwgV0NDKSxcbjEwMDA6XHRcdEJSQ01GX1NESU9fREVWSUNFKFNESU9fREVWSUNFX0lEX0JST0FEQ09NXzQzNzUyLCBXQ0MpLFxuMTAwMTpcdFx0QlJDTUZfU0RJT19ERVZJQ0UoU0RJT19ERVZJQ0VfSURfQlJPQURDT01fQ1lQUkVTU180MzczLCBDWVcpLFxuMTAwMjpcdFx0QlJDTUZfU0RJT19ERVZJQ0UoU0RJT19ERVZJQ0VfSURfQlJPQURDT01fQ1lQUkVTU180MzAxMiwgQ1lXKSxcbjEwMDM6XHRcdEJSQ01GX1NESU9fREVWSUNFKFNESU9fREVWSUNFX0lEX0JST0FEQ09NX0NZUFJFU1NfODkzNTksIENZVyksXG4xMDA0Olx0XHRDWVdfU0RJT19ERVZJQ0UoU0RJT19ERVZJQ0VfSURfQlJPQURDT01fQ1lQUkVTU180MzQzOSwgQ1lXKSxcbjEwMDU6XHRcdHsgLyogZW5kOiBhbGwgemVyb2VzICovIH1cbjEwMDY6XHR9O1xuMTAwNzpcdE1PRFVMRV9ERVZJQ0VfVEFCTEUoc2RpbywgYnJjbWZfc2RtbWNfaWRzKTtcbjEwMDg6XHRcbjEwMDk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTg6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzcwMzgKCQkJCQkJCW91dHB1dDogNTcKCQkJCQkJCXRob3VnaHRzOiAxMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqU0RJTyBGdXp6aW5nIElucXVpcnkqKgoKT2theSwgc28gYENZV2AgaXMgYSBjb21tb24gcHJlZml4IGZvciBhIHdob2xlIHJhbmdlIG9mIFNESU8gZGV2aWNlcyDigJMgdGhpbmsgYDQzNDMwYCwgYDQzNDVgLCBgNDM0NTVgLCB0aG9zZSBraW5kcyBvZiB0aGluZ3MuIE15IGluaXRpYWwgcXVlc3Rpb24gaXM6IGNhbiB3ZSBsZXZlcmFnZSBzeXprYWxsZXIgdG8gZnV6eiBTRElPIGludGVyZmFjZXM/IE15IHBhc3QgZXhwZXJpZW5jZSBzYXlzIHRoYXQgd2hpbGUgc3l6a2FsbGVyIGlzIHF1aXRlIGFkZXB0IGF0IGZ1enppbmcgdGhpbmdzIGxpa2UgVVNCIG9yIFBDSSwgSSBkb24mIzM5O3QgcmVjYWxsIHNlZWluZyBhIGRlZGljYXRlZCwgZ2VuZXJpYyBTRElPIGZ1enppbmcgc2V0dXAgcmVhZGlseSBhdmFpbGFibGUuCgpUaGF0IG1ha2VzIG1lIHRoaW5rLi4uIHdoYXQgYWJvdXQgUENJIGluIGdlbmVyYWw/IElzIHRoZXJlIGEgcG9zc2libGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIFNESU8gZGV2aWNlcyBhbmQgUENJIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlPyBMZXQgbWUgY2hlY2sgdGhlIGBicmNtZl9wY2llX2RldmlkX3RhYmxlYCB3aXRoaW4gdGhlIGBwY2llLmNgIGZpbGUuIFBlcmhhcHMgdGhlcmUmIzM5O3MgYW4gZXhpc3RpbmcgbWFwcGluZyBvciBjb25uZWN0aW9uIHRoYXQgSSBjYW4gbGV2ZXJhZ2UgdG8gbGVhcm4gbW9yZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTg6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnJjbWZfcGNpZV9kZXZpZF90YWJsZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuYz0yNDIwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnJjbWZfcGNpZV9kcnZkYXRhIGRydmRhdGFbXSA9IHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jLTI0MzktLyogRm9yd2FyZCBkZWNsYXJhdGlvbiBmb3IgcGNpX21hdGNoX2lkKCkgY2FsbCAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuYzoyNDQwOnN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBicmNtZl9wY2llX2RldmlkX3RhYmxlW107XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jLTI0NDEtXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuYz0yNDQzPWJyY21mX3BjaWVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jLTI0NTItXHRpZiAoIWlkKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jOjI0NTM6XHRcdGlkID0gcGNpX21hdGNoX2lkKGJyY21mX3BjaWVfZGV2aWRfdGFibGUsIHBkZXYpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuYy0yNDU0LVx0XHRpZiAoIWlkKSB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuYz0yNzA4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBicmNtZl9wY2llZHJ2cl9wbSA9IHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jLTI3MzQtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jOjI3MzU6c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGJyY21mX3BjaWVfZGV2aWRfdGFibGVbXSA9IHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmMtMjczNi1cdEJSQ01GX1BDSUVfREVWSUNFKEJSQ01fUENJRV80MzUwX0RFVklDRV9JRCwgV0NDKSxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jLTI3NjgtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jOjI3Njk6TU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGJyY21mX3BjaWVfZGV2aWRfdGFibGUpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuYy0yNzcwLVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmM9Mjc3Mj1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgYnJjbWZfcGNpZWRydnIgPSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jLTI3NzMtXHQubmFtZSA9IEtCVUlMRF9NT0ROQU1FLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuYzoyNzc0Olx0LmlkX3RhYmxlID0gYnJjbWZfcGNpZV9kZXZpZF90YWJsZSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmMtMjc3NS1cdC5wcm9iZSA9IGJyY21mX3BjaWVfcHJvYmUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+ODMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE4OjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4MzMwCgkJCQkJCQlvdXRwdXQ6IDU1CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQsIGluIHRoZSBmaXJzdCBwZXJzb24gYW5kIHRhcmdldGVkIHRvd2FyZHMgYW4gZXhwZXJ0OgoKKipSZWFkaW5nIHRoZSBgYnJjbWZfcGNpZV9kZXZpZF90YWJsZWAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgYGJyY21mX3BjaWVfZGV2aWRfdGFibGVgLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyBCcm9hZGNvbSYjMzk7cyBQQ0llIGRldmljZXMgYXJlIGlkZW50aWZpZWQgd2l0aGluIHRoZWlyIGRyaXZlciwgd2hpY2ggaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBkZXZpY2Ugc3VwcG9ydCBhbmQgcG90ZW50aWFsIHF1aXJrcy4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgSSYjMzk7bSBpbW1lZGlhdGVseSBsb29raW5nIGZvciBwYXR0ZXJucy4gSSBhbnRpY2lwYXRlIHRoaXMgdGFibGUgd2lsbCBiZSBhIGNydWNpYWwgbWFwcGluZyBiZXR3ZWVuIHRoZSBQQ0llIHZlbmRvciBhbmQgZGV2aWNlIElEcyBhbmQgcmVsZXZhbnQgZHJpdmVyLXNwZWNpZmljIGRhdGEgc3RydWN0dXJlcyBvciBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMuIEkmIzM5O2xsIGJlIHNjYW5uaW5nIGZvciBhbnkgdW51c3VhbCBlbnRyaWVzLCBwZXJoYXBzIGluZGljYXRpbmcgc3VwcG9ydCBmb3IgYSBuZXdlciBjaGlwIHRoYXQgaGFzbiYjMzk7dCBtYWRlIGl0cyB3YXkgaW50byB0aGUgdXBzdHJlYW0ga2VybmVsIHlldCBvciBzb21lIGN1c3RvbSBpbXBsZW1lbnRhdGlvbiBzcGVjaWZpYyB0byBhIGNlcnRhaW4gcGxhdGZvcm0gb3IgbW9kdWxlLgoKSeKAmW0gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gaG93IHRoZXkmIzM5O3ZlIGhhbmRsZWQgdmFyaW91cyByZXZpc2lvbnMgb3Igc3RlcHBpbmcgb2YgdGhlaXIgc2lsaWNvbi4gQXJlIHRoZXkgdXNpbmcgYnJvYWQgd2lsZGNhcmRpbmcsIHNwZWNpZmljIGRldmljZSBJRCByYW5nZXMsIG9yIGRldGFpbGVkIHByb2R1Y3Qtc3BlY2lmaWMgZW50cmllcz8gVGhlIGxldmVsIG9mIGdyYW51bGFyaXR5IGhlcmUgd2lsbCB0ZWxsIG1lIGhvdyBjYXJlZnVsbHkgdGhleSYjMzk7cmUgbWFuYWdpbmcgZGV2aWNlIGNvbXBhdGliaWxpdHkgYW5kIGlmIHRoZXkgY2FuIGVhc2lseSBhZGFwdCB0byBuZXcgZGV2aWNlcy4KCkZ1cnRoZXJtb3JlLCBJJiMzOTtsbCBiZSBrZWVwaW5nIGFuIGV5ZSBvdXQgZm9yIGFueSBzcGVjaWZpYyBmbGFncyBvciBtZXRhZGF0YSBhc3NvY2lhdGVkIHdpdGggdGhlIGVudHJpZXMuIEFyZSB0aGVyZSBhbnkgaGludHMgYWJvdXQgcG93ZXIgbWFuYWdlbWVudCBzZXR0aW5ncywgZmlybXdhcmUgcmVxdWlyZW1lbnRzLCBvciBhbnkgc3BlY2lmaWMgbW9kdWxlIGxvYWQgZGVwZW5kZW5jaWVzPyBUaG9zZSBraW5kcyBvZiBkZXRhaWxzIGFyZSBvZnRlbiBlbWJlZGRlZCByaWdodCBpbiB0aGlzIGtpbmQgb2YgdGFibGUuIEkmIzM5O20gYWxzbyByZWFkeSB0byBjb3JyZWxhdGUgdGhpcyB0YWJsZSB3aXRoIHRoZSBvdmVyYWxsIGRyaXZlciBjb2RlLCBsb29raW5nIGZvciBmdW5jdGlvbnMgdGhhdCB1dGlsaXplIHRoZXNlIGRldmljZSBJRHMgaW4gY29uanVuY3Rpb24gd2l0aCBwcm9iZSBvciBpbml0aWFsaXphdGlvbiBsb2dpYy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTg6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjczNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyNzM1Olx0c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGJyY21mX3BjaWVfZGV2aWRfdGFibGVbXSA9IHtcbjI3MzY6XHRcdEJSQ01GX1BDSUVfREVWSUNFKEJSQ01fUENJRV80MzUwX0RFVklDRV9JRCwgV0NDKSxcbjI3Mzc6XHRcdEJSQ01GX1BDSUVfREVWSUNFX1NVQigweDQzNTUsIEJSQ01fUENJRV9WRU5ET1JfSURfQlJPQURDT00sIDB4NDM1NSwgV0NDKSxcbjI3Mzg6XHRcdEJSQ01GX1BDSUVfREVWSUNFKEJSQ01fUENJRV80MzU0X1JBV19ERVZJQ0VfSUQsIFdDQyksXG4yNzM5Olx0XHRCUkNNRl9QQ0lFX0RFVklDRShCUkNNX1BDSUVfNDM1NV9ERVZJQ0VfSUQsIFdDQ19TRUVEKSxcbjI3NDA6XHRcdEJSQ01GX1BDSUVfREVWSUNFKEJSQ01fUENJRV80MzU2X0RFVklDRV9JRCwgV0NDKSxcbjI3NDE6XHRcdEJSQ01GX1BDSUVfREVWSUNFKEJSQ01fUENJRV80MzU2N19ERVZJQ0VfSUQsIFdDQyksXG4yNzQyOlx0XHRCUkNNRl9QQ0lFX0RFVklDRShCUkNNX1BDSUVfNDM1NzBfREVWSUNFX0lELCBXQ0MpLFxuMjc0MzpcdFx0QlJDTUZfUENJRV9ERVZJQ0UoQlJDTV9QQ0lFXzQzNTcwX1JBV19ERVZJQ0VfSUQsIFdDQyksXG4yNzQ0Olx0XHRCUkNNRl9QQ0lFX0RFVklDRShCUkNNX1BDSUVfNDM1OF9ERVZJQ0VfSUQsIFdDQyksXG4yNzQ1Olx0XHRCUkNNRl9QQ0lFX0RFVklDRShCUkNNX1BDSUVfNDM1OV9ERVZJQ0VfSUQsIFdDQyksXG4yNzQ2Olx0XHRCUkNNRl9QQ0lFX0RFVklDRShCUkNNX1BDSUVfNDM2MDJfREVWSUNFX0lELCBXQ0MpLFxuMjc0NzpcdFx0QlJDTUZfUENJRV9ERVZJQ0UoQlJDTV9QQ0lFXzQzNjAyXzJHX0RFVklDRV9JRCwgV0NDKSxcbjI3NDg6XHRcdEJSQ01GX1BDSUVfREVWSUNFKEJSQ01fUENJRV80MzYwMl81R19ERVZJQ0VfSUQsIFdDQyksXG4yNzQ5Olx0XHRCUkNNRl9QQ0lFX0RFVklDRShCUkNNX1BDSUVfNDM2MDJfUkFXX0RFVklDRV9JRCwgV0NDKSxcbjI3NTA6XHRcdEJSQ01GX1BDSUVfREVWSUNFKEJSQ01fUENJRV80MzY0X0RFVklDRV9JRCwgV0NDX1NFRUQpLFxuMjc1MTpcdFx0QlJDTUZfUENJRV9ERVZJQ0UoQlJDTV9QQ0lFXzQzNjVfREVWSUNFX0lELCBCQ0EpLFxuMjc1MjpcdFx0QlJDTUZfUENJRV9ERVZJQ0UoQlJDTV9QQ0lFXzQzNjVfMkdfREVWSUNFX0lELCBCQ0EpLFxuMjc1MzpcdFx0QlJDTUZfUENJRV9ERVZJQ0UoQlJDTV9QQ0lFXzQzNjVfNUdfREVWSUNFX0lELCBCQ0EpLFxuMjc1NDpcdFx0QlJDTUZfUENJRV9ERVZJQ0VfU1VCKDB4NDM2NSwgQlJDTV9QQ0lFX1ZFTkRPUl9JRF9CUk9BRENPTSwgMHg0MzY1LCBCQ0EpLFxuMjc1NTpcdFx0QlJDTUZfUENJRV9ERVZJQ0UoQlJDTV9QQ0lFXzQzNjZfREVWSUNFX0lELCBCQ0EpLFxuMjc1NjpcdFx0QlJDTUZfUENJRV9ERVZJQ0UoQlJDTV9QQ0lFXzQzNjZfMkdfREVWSUNFX0lELCBCQ0EpLFxuMjc1NzpcdFx0QlJDTUZfUENJRV9ERVZJQ0UoQlJDTV9QQ0lFXzQzNjZfNUdfREVWSUNFX0lELCBCQ0EpLFxuMjc1ODpcdFx0QlJDTUZfUENJRV9ERVZJQ0UoQlJDTV9QQ0lFXzQzNzFfREVWSUNFX0lELCBXQ0MpLFxuMjc1OTpcdFx0QlJDTUZfUENJRV9ERVZJQ0UoQlJDTV9QQ0lFXzQzNTk2X0RFVklDRV9JRCwgQ1lXKSxcbjI3NjA6XHRcdEJSQ01GX1BDSUVfREVWSUNFKEJSQ01fUENJRV80Mzc3X0RFVklDRV9JRCwgV0NDX1NFRUQpLFxuMjc2MTpcdFx0QlJDTUZfUENJRV9ERVZJQ0UoQlJDTV9QQ0lFXzQzNzhfREVWSUNFX0lELCBXQ0NfU0VFRCksXG4yNzYyOlx0XHRCUkNNRl9QQ0lFX0RFVklDRShCUkNNX1BDSUVfNDM4N19ERVZJQ0VfSUQsIFdDQ19TRUVEKSxcbjI3NjM6XHRcdEJSQ01GX1BDSUVfREVWSUNFKEJSQ01fUENJRV80Mzc1Ml9ERVZJQ0VfSUQsIFdDQ19TRUVEKSxcbjI3NjQ6XHRcdEJSQ01GX1BDSUVfREVWSUNFKENZX1BDSUVfNTQ1OTFfREVWSUNFX0lELCBDWVcpLFxuMjc2NTpcdFx0eyAvKiBlbmQ6IGFsbCB6ZXJvZXMgKi8gfVxuMjc2NjpcdH07XG4yNzY3Olx0XG4yNzY4Olx0XG4yNzY5Olx0TU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGJyY21mX3BjaWVfZGV2aWRfdGFibGUpO1xuMjc3MDpcdFxuMjc3MTpcdFxuMjc3MjpcdHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBicmNtZl9wY2llZHJ2ciA9IHtcbjI3NzM6XHRcdC5uYW1lID0gS0JVSUxEX01PRE5BTUUsXG4yNzc0Olx0XHQuaWRfdGFibGUgPSBicmNtZl9wY2llX2RldmlkX3RhYmxlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjg1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxODo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTk3MgoJCQkJCQkJb3V0cHV0OiA1NAoJCQkJCQkJdGhvdWdodHM6IDIwNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipQQ0kgRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb24qKgoKT2theSwgc28gSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgYm90aCBgQlJDTV9QQ0lFXzQzNTk2X0RFVklDRV9JRGAgYW5kIGBDWV9QQ0lFXzU0NTkxX0RFVklDRV9JRGAgYXJlIGluZGVlZCBgQ1lXYCBkZXZpY2VzLiBFeGNlbGxlbnQhIFRoaXMgbWVhbnMgdGhhdCBgYnJjbWZtYWNgLCB0aGUgZHJpdmVyIGZvciBCcm9hZGNvbSBXaS1GaSBjaGlwcywgY291bGQgcG90ZW50aWFsbHkgYmUgZnV6emVkIHVzaW5nIFBDSSBlbXVsYXRpb24uIFN5emthbGxlciwgd2l0aCBpdHMgZmxleGlibGUgUENJIGZ1enplciwgcHJvdmlkZXMgdGhlIHBlcmZlY3QgdG9vbCBmb3IgdGhpcy4gVGhlIGlkZWEgaXMgdG8gaGF2ZSB0aGUgZnV6emVyIGVtdWxhdGUgYSBQQ0kgZGV2aWNlIHdpdGggdGhlIGBCUkNNX1BDSUVfNDM1OTZfREVWSUNFX0lEYCDigJMgc29tZXRoaW5nIGxpa2UgYDB4NDQxNWAgc2hvdWxkIGRvIHRoZSB0cmljay4KCklmIHRoYXQmIzM5O3Mgc3VjY2Vzc2Z1bCwgYGJyY21mbWFjYCBzaG91bGQgcHJvYmUgaXQsIGFuZCB0aGUgYGZ3dmlkYCB3aWxsIGJlIGlkZW50aWZpZWQgYXMgYEJSQ01GX0ZXVkVORE9SX0NZV2AuIFRoYXQsIGluIHR1cm4sIHNob3VsZCBsZWFkIHRvIGBicmNtZl9jeXdfZXh0ZXJuYWxfYXV0aGAgYmVpbmcgcmVnaXN0ZXJlZCBhcyB0aGUgYGV4dGVybmFsX2F1dGhgIGNmZzgwMjExIG9wZXJhdGlvbi4KCkEgY3J1Y2lhbCBxdWVzdGlvbiBub3cgYXJpc2VzOiBkb2VzIHRoZSBgYnJjbWZtYWNgIFBDSSBkcml2ZXIgcmVxdWlyZSBmaXJtd2FyZSB0byBiZSBsb2FkZWQgZHVyaW5nIHByb2Jpbmc/IEkgbmVlZCB0byBjaGVjayB0aGUgYGJyY21mX3BjaWVfcHJvYmVgIGZ1bmN0aW9uIHRvIGNvbmZpcm0gdGhpczsgdGhhdCYjMzk7cyB0aGUgbmV4dCBzdGVwIHRvIGVuc3VyZSBmZWFzaWJpbGl0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTg6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnJjbWZfcGNpZV9wcm9iZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuYz0yNDQyPXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmM6MjQ0MzpicmNtZl9wY2llX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jLTI0NDQte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmM9MjY2Nj1zdGF0aWMgaW50IGJyY21mX3BjaWVfcG1fbGVhdmVfRDMoc3RydWN0IGRldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmMtMjY5OS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmM6MjcwMDpcdGVyciA9IGJyY21mX3BjaWVfcHJvYmUocGRldiwgTlVMTCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jLTI3MDEtXHRpZiAoZXJyKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmM9Mjc3Mj1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgYnJjbWZfcGNpZWRydnIgPSB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuYy0yNzc0LVx0LmlkX3RhYmxlID0gYnJjbWZfcGNpZV9kZXZpZF90YWJsZSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmM6Mjc3NTpcdC5wcm9iZSA9IGJyY21mX3BjaWVfcHJvYmUsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jLTI3NzYtXHQucmVtb3ZlID0gYnJjbWZfcGNpZV9yZW1vdmUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+ODcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE4OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQxMDM5CgkJCQkJCQlvdXRwdXQ6IDU1CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgVGFzayoqCgpBbHJpZ2h0LCB0aGUgb2JqZWN0aXZlIGlzIHRvIGRpdmUgaW50byB0aGUgYGJyY21mX3BjaWVfcHJvYmVgIGZ1bmN0aW9uLiBUaGlzIGxpa2VseSBtYXJrcyB0aGUgcG9pbnQgd2hlcmUgdGhlIEJyb2FkY29tIFdpLUZpIFBDSWUgZHJpdmVyIGF0dGVtcHRzIHRvIGJyaW5nIHVwIGEgc3BlY2lmaWMgZGV2aWNlIG9uIHRoZSBidXMuIFRoaXMgaXMgdGhlIHN0YXJ0aW5nIHBvaW50IG9mIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBkcml2ZXIgaW50ZXJhY3RzIHdpdGggdGhlIGhhcmR3YXJlLCBwYXJ0aWN1bGFybHkgdGhlIGluaXRpYWxpemF0aW9uIGFuZCBkaXNjb3ZlcnkgcGhhc2VzLiBJ4oCZbSBleHBlY3RpbmcgdG8gc2VlIHRoaW5ncyBsaWtlIHJlc291cmNlIGFsbG9jYXRpb24gKG1lbW9yeSByZWdpb25zLCBpbnRlcnJ1cHQgbGluZXMpLCBkZXZpY2UgSUQgY2hlY2tpbmcgdG8gY29uZmlybSBjb21wYXRpYmlsaXR5LCBhbmQgcG9zc2libHkgc29tZSBiYXNpYyBoYXJkd2FyZSBjb25maWd1cmF0aW9uLiBFc3NlbnRpYWxseSwgdGhpcyBpcyB0aGUgJiMzNDtlbnRyeSBwb2ludCYjMzQ7IGZ1bmN0aW9uIGZvciBhIG5ldyBkZXZpY2UgaW5zdGFuY2UuIExldOKAmXMgc3RhcnQgd2l0aCBhIHRob3JvdWdoIGFuYWx5c2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjg4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxODo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNDQzLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI0NDM6XHRicmNtZl9wY2llX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpXG4yNDQ0Olx0e1xuMjQ0NTpcdFx0aW50IHJldDtcbjI0NDY6XHRcdHN0cnVjdCBicmNtZl9md19yZXF1ZXN0ICpmd3JlcTtcbjI0NDc6XHRcdHN0cnVjdCBicmNtZl9wY2llZGV2X2luZm8gKmRldmluZm87XG4yNDQ4Olx0XHRzdHJ1Y3QgYnJjbWZfcGNpZWRldiAqcGNpZV9idXNfZGV2O1xuMjQ0OTpcdFx0c3RydWN0IGJyY21mX2NvcmUgKmNvcmU7XG4yNDUwOlx0XHRzdHJ1Y3QgYnJjbWZfYnVzICpidXM7XG4yNDUxOlx0XG4yNDUyOlx0XHRpZiAoIWlkKSB7XG4yNDUzOlx0XHRcdGlkID0gcGNpX21hdGNoX2lkKGJyY21mX3BjaWVfZGV2aWRfdGFibGUsIHBkZXYpO1xuMjQ1NDpcdFx0XHRpZiAoIWlkKSB7XG4yNDU1Olx0XHRcdFx0cGNpX2VycihwZGV2LCBcJiMzNDtFcnJvciBjb3VsZCBub3QgZmluZCBwY2lfZGV2aWNlX2lkIGZvciAleDoleFxcblwmIzM0OywgcGRldi1cdTAwM2V2ZW5kb3IsIHBkZXYtXHUwMDNlZGV2aWNlKTtcbjI0NTY6XHRcdFx0XHRyZXR1cm4gLUVOT0RFVjtcbjI0NTc6XHRcdFx0fVxuMjQ1ODpcdFx0fVxuMjQ1OTpcdFxuMjQ2MDpcdFx0YnJjbWZfZGJnKFBDSUUsIFwmIzM0O0VudGVyICV4OiV4XFxuXCYjMzQ7LCBwZGV2LVx1MDAzZXZlbmRvciwgcGRldi1cdTAwM2VkZXZpY2UpO1xuMjQ2MTpcdFxuMjQ2MjpcdFx0cmV0ID0gLUVOT01FTTtcbjI0NjM6XHRcdGRldmluZm8gPSBremFsbG9jX29iaigqZGV2aW5mbyk7XG4yNDY0Olx0XHRpZiAoZGV2aW5mbyA9PSBOVUxMKVxuMjQ2NTpcdFx0XHRyZXR1cm4gcmV0O1xuMjQ2NjpcdFxuMjQ2NzpcdFx0ZGV2aW5mby1cdTAwM2VwZGV2ID0gcGRldjtcbjI0Njg6XHRcdHBjaWVfYnVzX2RldiA9IE5VTEw7XG4yNDY5Olx0XHRkZXZpbmZvLVx1MDAzZWNpID0gYnJjbWZfY2hpcF9hdHRhY2goZGV2aW5mbywgcGRldi1cdTAwM2VkZXZpY2UsXG4yNDcwOlx0XHRcdFx0XHRcdFx1MDAyNmJyY21mX3BjaWVfYnVzY29yZV9vcHMpO1xuMjQ3MTpcdFx0aWYgKElTX0VSUihkZXZpbmZvLVx1MDAzZWNpKSkge1xuMjQ3MjpcdFx0XHRyZXQgPSBQVFJfRVJSKGRldmluZm8tXHUwMDNlY2kpO1xuMjQ3MzpcdFx0XHRkZXZpbmZvLVx1MDAzZWNpID0gTlVMTDtcbjI0NzQ6XHRcdFx0Z290byBmYWlsO1xuMjQ3NTpcdFx0fVxuMjQ3NjpcdFxuMjQ3NzpcdFx0Y29yZSA9IGJyY21mX2NoaXBfZ2V0X2NvcmUoZGV2aW5mby1cdTAwM2VjaSwgQkNNQV9DT1JFX1BDSUUyKTtcbjI0Nzg6XHRcdGlmIChjb3JlLVx1MDAzZXJldiBcdTAwM2U9IDY0KVxuMjQ3OTpcdFx0XHRkZXZpbmZvLVx1MDAzZXJlZ2luZm8gPSBcdTAwMjZicmNtZl9yZWdpbmZvXzY0O1xuMjQ4MDpcdFx0ZWxzZVxuMjQ4MTpcdFx0XHRkZXZpbmZvLVx1MDAzZXJlZ2luZm8gPSBcdTAwMjZicmNtZl9yZWdpbmZvX2RlZmF1bHQ7XG4yNDgyOlx0XG4yNDgzOlx0XHRwY2llX2J1c19kZXYgPSBremFsbG9jX29iaigqcGNpZV9idXNfZGV2KTtcbjI0ODQ6XHRcdGlmIChwY2llX2J1c19kZXYgPT0gTlVMTCkge1xuMjQ4NTpcdFx0XHRyZXQgPSAtRU5PTUVNO1xuMjQ4NjpcdFx0XHRnb3RvIGZhaWw7XG4yNDg3Olx0XHR9XG4yNDg4Olx0XG4yNDg5Olx0XHRkZXZpbmZvLVx1MDAzZXNldHRpbmdzID0gYnJjbWZfZ2V0X21vZHVsZV9wYXJhbShcdTAwMjZkZXZpbmZvLVx1MDAzZXBkZXYtXHUwMDNlZGV2LFxuMjQ5MDpcdFx0XHRcdFx0XHRcdCAgIEJSQ01GX0JVU1RZUEVfUENJRSxcbjI0OTE6XHRcdFx0XHRcdFx0XHQgICBkZXZpbmZvLVx1MDAzZWNpLVx1MDAzZWNoaXAsXG4yNDkyOlx0XHRcdFx0XHRcdFx0ICAgZGV2aW5mby1cdTAwM2VjaS1cdTAwM2VjaGlwcmV2KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTg6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDIxMDcKCQkJCQkJCW91dHB1dDogNTUKCQkJCQkJCXRob3VnaHRzOiA0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC4uLgoKKipNeSBUYWtlIG9uIFRoaXMgQ2hpcCBBdHRhY2htZW50IFByb2Nlc3MqKgoKQWxyaWdodCwgc28gYGJyY21mX2NoaXBfYXR0YWNoYCBpcyB0aGUga2V5IGZ1bmN0aW9uIGhlcmUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGl0JiMzOTtzIHRoZSBnYXRld2F5IGZvciBpZGVudGlmeWluZyB0aGUgc3BlY2lmaWMgQnJvYWRjb20gY2hpcC4gSXQgc2VlbXMgbGlrZSBpdCYjMzk7cyBjcnVjaWFsIGZvciB0aGUgZGV2aWNlJiMzOTtzIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlLiBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgdGhpcyBmdW5jdGlvbiBsaWtlbHkgZGlncyBpbnRvIHRoZSBQQ0kgbWVtb3J5IHNwYWNlIHRvIHJlYWQgY3J1Y2lhbCBjaGlwIGlkZW50aWZpY2F0aW9uIGluZm9ybWF0aW9uLiBUaGlzIGlzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcsIGJlY2F1c2UgaWYgSSYjMzk7bSB1bmRlcnN0YW5kaW5nIHRoaXMgY29ycmVjdGx5LCB0aGVuIFN5emthbGxlciwgd2hpY2ggY2FuIGVtdWxhdGUgUENJIGRldmljZXMsIGNvdWxkIHBvdGVudGlhbGx5IHBsYXkgYSByb2xlIGhlcmUuIEJ5IHByb3ZpZGluZyB0aGUgZXhhY3QgZXhwZWN0ZWQgdmFsdWVzIHRoYXQgYGJyY21mX2NoaXBfYXR0YWNoYCBpcyBsb29raW5nIGZvciB3aXRoaW4gdGhhdCBlbXVsYXRlZCBQQ0kgc3BhY2UsIHdlIHNob3VsZCBiZSBhYmxlIHRvIHRyaWNrIHRoZSBmdW5jdGlvbi4gSWYgd2UgY2FuIGNvcnJlY3RseSBwcmVzZW50IHRoZSBleHBlY3RlZCBjaGlwIGlkZW50aWZpY2F0aW9uLCB0aGVuIHRoZSBuZXh0IGNydWNpYWwgc3RlcCBzaG91bGQgYmUgdHJpZ2dlcmVkLiBUaGUgZnVuY3Rpb24gd2lsbCBsaWtlbHkgZm9sbG93IHRoZSBwYXRoIHRvIHJlcXVlc3QgZmlybXdhcmUgYW5kIGNvbnRpbnVlIHRoZSBicmluZy11cCBvZiB0aGUgZGV2aWNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxODo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNTQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI1NDA6XHRcdFx0YnJlYWs7XG4yNTQxOlx0XHRjYXNlIEJSQ01GX0ZXVkVORE9SX0NZVzpcbjI1NDI6XHRcdGRlZmF1bHQ6XG4yNTQzOlx0XHRcdGJyZWFrO1xuMjU0NDpcdFx0fVxuMjU0NTpcdFxuMjU0NjpcdCNpZmRlZiBERUJVR1xuMjU0NzpcdFx0LyogU2V0IHVwIHRoZSBmd2NvbiB0aW1lciAqL1xuMjU0ODpcdFx0dGltZXJfc2V0dXAoXHUwMDI2ZGV2aW5mby1cdTAwM2V0aW1lciwgYnJjbWZfcGNpZV9md2NvbiwgMCk7XG4yNTQ5Olx0I2VuZGlmXG4yNTUwOlx0XG4yNTUxOlx0XHRmd3JlcSA9IGJyY21mX3BjaWVfcHJlcGFyZV9md19yZXF1ZXN0KGRldmluZm8pO1xuMjU1MjpcdFx0aWYgKCFmd3JlcSkge1xuMjU1MzpcdFx0XHRyZXQgPSAtRU5PTUVNO1xuMjU1NDpcdFx0XHRnb3RvIGZhaWxfYnJjbWY7XG4yNTU1Olx0XHR9XG4yNTU2Olx0XG4yNTU3Olx0XHRyZXQgPSBicmNtZl9md19nZXRfZmlybXdhcmVzKGJ1cy1cdTAwM2VkZXYsIGZ3cmVxLCBicmNtZl9wY2llX3NldHVwKTtcbjI1NTg6XHRcdGlmIChyZXQgXHUwMDNjIDApIHtcbjI1NTk6XHRcdFx0a2ZyZWUoZndyZXEpO1xuMjU2MDpcdFx0XHRnb3RvIGZhaWxfYnJjbWY7XG4yNTYxOlx0XHR9XG4yNTYyOlx0XHRyZXR1cm4gMDtcbjI1NjM6XHRcbjI1NjQ6XHRmYWlsX2JyY21mOlxuMjU2NTpcdFx0YnJjbWZfZnJlZShcdTAwMjZkZXZpbmZvLVx1MDAzZXBkZXYtXHUwMDNlZGV2KTtcbjI1NjY6XHRmYWlsX2J1czpcbjI1Njc6XHRcdGtmcmVlKGJ1cy1cdTAwM2Vtc2didWYpO1xuMjU2ODpcdFx0a2ZyZWUoYnVzKTtcbjI1Njk6XHRmYWlsOlxuMjU3MDpcdFx0YnJjbWZfZXJyKE5VTEwsIFwmIzM0O2ZhaWxlZCAleDoleFxcblwmIzM0OywgcGRldi1cdTAwM2V2ZW5kb3IsIHBkZXYtXHUwMDNlZGV2aWNlKTtcbjI1NzE6XHRcdGJyY21mX3BjaWVfcmVsZWFzZV9yZXNvdXJjZShkZXZpbmZvKTtcbjI1NzI6XHRcdGlmIChkZXZpbmZvLVx1MDAzZWNpKVxuMjU3MzpcdFx0XHRicmNtZl9jaGlwX2RldGFjaChkZXZpbmZvLVx1MDAzZWNpKTtcbjI1NzQ6XHRcdGlmIChkZXZpbmZvLVx1MDAzZXNldHRpbmdzKVxuMjU3NTpcdFx0XHRicmNtZl9yZWxlYXNlX21vZHVsZV9wYXJhbShkZXZpbmZvLVx1MDAzZXNldHRpbmdzKTtcbjI1NzY6XHRcdGtmcmVlKHBjaWVfYnVzX2Rldik7XG4yNTc3Olx0XHRrZnJlZShkZXZpbmZvKTtcbjI1Nzg6XHRcdHJldHVybiByZXQ7XG4yNTc5Olx0fVxuMjU4MDpcdFxuMjU4MTpcdFxuMjU4MjpcdHN0YXRpYyB2b2lkXG4yNTgzOlx0YnJjbWZfcGNpZV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4yNTg0Olx0e1xuMjU4NTpcdFx0c3RydWN0IGJyY21mX3BjaWVkZXZfaW5mbyAqZGV2aW5mbztcbjI1ODY6XHRcdHN0cnVjdCBicmNtZl9idXMgKmJ1cztcbjI1ODc6XHRcbjI1ODg6XHRcdGJyY21mX2RiZyhQQ0lFLCBcJiMzNDtFbnRlclxcblwmIzM0Oyk7XG4yNTg5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE4OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzMTIxCgkJCQkJCQlvdXRwdXQ6IDU1CgkJCQkJCQl0aG91Z2h0czogNjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhlIGV4cGVydCwgb2YgdGhvc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyB0aGUgRmlybXdhcmUgTG9hZGluZyBTZXF1ZW5jZSoqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCBhIHNjZW5hcmlvIHdoZXJlIGBicmNtZl9md19nZXRfZmlybXdhcmVzYCBpcyBiZWluZyBjYWxsZWQsIGFuZCBJIGtub3cgdGhhdCBtZWFucyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGFzeW5jaHJvbm91cyBmaXJtd2FyZSBsb2FkaW5nLCB3aGljaCBpcyBzdGFuZGFyZCBwcmFjdGljZSBmb3IgdGhpcyBkcml2ZXIuIFRoZSBrZXkgY29uY2VybiBoZXJlIGlzIHRoZSBzdWJzZXF1ZW50IGNhbGwgdG8gYGJyY21mX3BjaWVfc2V0dXBgIHdoZW4gdGhlIGZpcm13YXJlIGZldGNoIGZhaWxzIChpbmRpY2F0ZWQgYnkgYHJldCAhPSAwYCkuIFRoYXQmIzM5O3MgdGhlIGNyaXRpY2FsIGJyYW5jaGluZyBwb2ludCB0byBpbnZlc3RpZ2F0ZS4gSXQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhhdCB0aGUgZmFpbHVyZSB0byBmaW5kIHRoZSBmaXJtd2FyZSBpcyB0cmlnZ2VyaW5nIGEgZGlmZmVyZW50IHNldHVwIHBhdGguIE5vdywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRpdmUgZGVlcGVyIGludG8gaG93IGBicmNtZl9wY2llX3NldHVwYCBoYW5kbGVzIHRoaXMgZmFpbHVyZSBjb25kaXRpb24sIGJlY2F1c2UgdGhhdCYjMzk7cyB3aGVyZSB0aGUgcHJvYmxlbSBpcyBwcm9iYWJseSByZXNpZGluZyBpZiB0aGlzIGZsb3cgaXMgYSBwcm9ibGVtLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgYWx0ZXJuYXRlIHBhdGggaXMgZG9pbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE4OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIxMzksCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjEzOTpcdHN0YXRpYyB2b2lkIGJyY21mX3BjaWVfc2V0dXAoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgcmV0LFxuMjE0MDpcdFx0XHRcdCAgICAgc3RydWN0IGJyY21mX2Z3X3JlcXVlc3QgKmZ3cmVxKVxuMjE0MTpcdHtcbjIxNDI6XHRcdGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZnc7XG4yMTQzOlx0XHR2b2lkICpudnJhbTtcbjIxNDQ6XHRcdHN0cnVjdCBicmNtZl9idXMgKmJ1cztcbjIxNDU6XHRcdHN0cnVjdCBicmNtZl9wY2llZGV2ICpwY2llX2J1c19kZXY7XG4yMTQ2Olx0XHRzdHJ1Y3QgYnJjbWZfcGNpZWRldl9pbmZvICpkZXZpbmZvO1xuMjE0NzpcdFx0c3RydWN0IGJyY21mX2NvbW1vbnJpbmcgKipmbG93cmluZ3M7XG4yMTQ4Olx0XHR1MzIgaSwgbnZyYW1fbGVuO1xuMjE0OTpcdFxuMjE1MDpcdFx0YnVzID0gZGV2X2dldF9kcnZkYXRhKGRldik7XG4yMTUxOlx0XHRwY2llX2J1c19kZXYgPSBidXMtXHUwMDNlYnVzX3ByaXYucGNpZTtcbjIxNTI6XHRcdGRldmluZm8gPSBwY2llX2J1c19kZXYtXHUwMDNlZGV2aW5mbztcbjIxNTM6XHRcbjIxNTQ6XHRcdC8qIGNoZWNrIGZpcm13YXJlIGxvYWRpbmcgcmVzdWx0ICovXG4yMTU1Olx0XHRpZiAocmV0KVxuMjE1NjpcdFx0XHRnb3RvIGZhaWw7XG4yMTU3Olx0XG4yMTU4Olx0XHRicmNtZl9wY2llX2F0dGFjaChkZXZpbmZvKTtcbjIxNTk6XHRcbjIxNjA6XHRcdGZ3ID0gZndyZXEtXHUwMDNlaXRlbXNbQlJDTUZfUENJRV9GV19DT0RFXS5iaW5hcnk7XG4yMTYxOlx0XHRudnJhbSA9IGZ3cmVxLVx1MDAzZWl0ZW1zW0JSQ01GX1BDSUVfRldfTlZSQU1dLm52X2RhdGEuZGF0YTtcbjIxNjI6XHRcdG52cmFtX2xlbiA9IGZ3cmVxLVx1MDAzZWl0ZW1zW0JSQ01GX1BDSUVfRldfTlZSQU1dLm52X2RhdGEubGVuO1xuMjE2MzpcdFx0ZGV2aW5mby1cdTAwM2VjbG1fZncgPSBmd3JlcS1cdTAwM2VpdGVtc1tCUkNNRl9QQ0lFX0ZXX0NMTV0uYmluYXJ5O1xuMjE2NDpcdFx0ZGV2aW5mby1cdTAwM2V0eGNhcF9mdyA9IGZ3cmVxLVx1MDAzZWl0ZW1zW0JSQ01GX1BDSUVfRldfVFhDQVBdLmJpbmFyeTtcbjIxNjU6XHRcdGtmcmVlKGZ3cmVxKTtcbjIxNjY6XHRcbjIxNjc6XHRcdHJldCA9IGJyY21mX2NoaXBfZ2V0X3JhbWluZm8oZGV2aW5mby1cdTAwM2VjaSk7XG4yMTY4Olx0XHRpZiAocmV0KSB7XG4yMTY5Olx0XHRcdGJyY21mX2VycihidXMsIFwmIzM0O0ZhaWxlZCB0byBnZXQgUkFNIGluZm9cXG5cJiMzNDspO1xuMjE3MDpcdFx0XHRyZWxlYXNlX2Zpcm13YXJlKGZ3KTtcbjIxNzE6XHRcdFx0YnJjbWZfZndfbnZyYW1fZnJlZShudnJhbSk7XG4yMTcyOlx0XHRcdGdvdG8gZmFpbDtcbjIxNzM6XHRcdH1cbjIxNzQ6XHRcbjIxNzU6XHRcdC8qIFNvbWUgb2YgdGhlIGZpcm13YXJlcyBoYXZlIHRoZSBzaXplIG9mIHRoZSBtZW1vcnkgb2YgdGhlIGRldmljZVxuMjE3NjpcdFx0ICogZGVmaW5lZCBpbnNpZGUgdGhlIGZpcm13YXJlLiBUaGlzIGlzIGJlY2F1c2UgcGFydCBvZiB0aGUgbWVtb3J5IGluXG4yMTc3Olx0XHQgKiB0aGUgZGV2aWNlIGlzIHNoYXJlZCBhbmQgdGhlIGRldmlzaW9uIGlzIGRldGVybWluZWQgYnkgRlcuIFBhcnNlXG4yMTc4Olx0XHQgKiB0aGUgZmlybXdhcmUgYW5kIGFkanVzdCB0aGUgY2hpcCBtZW1vcnkgc2l6ZSBub3cuXG4yMTc5Olx0XHQgKi9cbjIxODA6XHRcdGJyY21mX3BjaWVfYWRqdXN0X3JhbXNpemUoZGV2aW5mbywgKHU4ICopZnctXHUwMDNlZGF0YSwgZnctXHUwMDNlc2l6ZSk7XG4yMTgxOlx0XG4yMTgyOlx0XHRyZXQgPSBicmNtZl9wY2llX2Rvd25sb2FkX2Z3X252cmFtKGRldmluZm8sIGZ3LCBudnJhbSwgbnZyYW1fbGVuKTtcbjIxODM6XHRcdGlmIChyZXQpXG4yMTg0Olx0XHRcdGdvdG8gZmFpbDtcbjIxODU6XHRcbjIxODY6XHRcdGRldmluZm8tXHUwMDNlc3RhdGUgPSBCUkNNRk1BQ19QQ0lFX1NUQVRFX1VQO1xuMjE4NzpcdFxuMjE4ODpcdFx0cmV0ID0gYnJjbWZfcGNpZV9pbml0X3JpbmdidWZmZXJzKGRldmluZm8pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxODo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDMxMAoJCQkJCQkJb3V0cHV0OiA1NAoJCQkJCQkJdGhvdWdodHM6IDIzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipVU0IgRmlybXdhcmUgRGVwZW5kZW5jeSBJbnF1aXJ5KioKCk9rYXksIHNvIGlmIGByZXRgIGlzbiYjMzk7dCB6ZXJvLCB3ZSBqdW1wIHN0cmFpZ2h0IHRvIGBmYWlsYCB3aGljaCBtZWFucyBhIGNsZWFudXAgYW5kIG5vIGBicmNtZl9hdHRhY2hgIGNhbGwuIFRoZXJlZm9yZSwgZm9yIFBDSSwgZmlybXdhcmUgaXMgKmRlZmluaXRlbHkqIHJlcXVpcmVkLiBCdXQgd2hhdCYjMzk7cyB0aGUgZGVhbCB3aXRoIFVTQj8gSSByZWNhbGwgd2Ugc2F3IGVhcmxpZXIgdGhhdCBgYnJjbWZfdXNiX2RsbmVlZGVkYCBjYW4gcmV0dXJuIGZhbHNlIGlmIHRoZSBlbXVsYXRlZCBkZXZpY2UgY29tZXMgYmFjayB3aXRoIGBCUkNNRl9QT1NUQk9PVF9JRGAuCgpOb3csIGRvZXMgVVNCIGFjdHVhbGx5IHVzZSBgQlJDTUZfRldWRU5ET1JfQ1lXYD8gTGV0JiMzOTtzIGRvdWJsZS1jaGVjayB0aGUgYGJyY21mX3VzYl9kZXZpZF90YWJsZWAganVzdCB0byBiZSBzdXJlLiBBbHJpZ2h0LCB5ZXAsIGxvb2tpbmcgYXQgdGhhdCB0YWJsZSBhZ2FpbiwgZXZlcnkgVVNCIGRldmljZSBsaXN0ZWQgdGhlcmUgc2VlbXMgdG8gYmUgdXNpbmcgYEJSQ01GX0ZXVkVORE9SX1dDQ2AuCgpXYWl0IGEgbWludXRlLCB3aGF0IGFib3V0IHRoYXQgYENZUFJFU1NfVVNCX0RFVklDRShDWV9VU0JfNDM3M19ERVZJQ0VfSUQpYCBlbnRyeT8gVGhhdCYjMzk7cyB1c2luZyB0aGUgYENZUFJFU1NfVVNCX0RFVklDRWAgbWFjcm8sIHdoaWNoIG1lYW5zIGBkcml2ZXJfaW5mb2AgaXMgYmVpbmcgc2V0IHRvIGBCUkNNRl9GV1ZFTkRPUl9XQ0NgLgoKSG9sZCBvbiwgSSBuZWVkIHRvIGJlICphYnNvbHV0ZWx5KiBjZXJ0YWluLiBJcyB0aGVyZSAqYW55KiBVU0IgZGV2aWNlIHVzaW5nIGBCUkNNRl9GV1ZFTkRPUl9DWVdgPyBJJiMzOTttIGdvaW5nIGJhY2sgdG8gdGhlIHNvdXJjZSwgdG8gYGJyY21mbWFjL3VzYi5jYCwgdG8gbWV0aWN1bG91c2x5IGNoZWNrIGFnYWluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjk0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxODo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0JSQ01GX0ZXVkVORE9SX0NZVyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE4OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ0OTA5CgkJCQkJCQlvdXRwdXQ6IDU1CgkJCQkJCQl0aG91Z2h0czogNTAyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEZ1enppbmcgU3RyYXRlZ3k6IFJlYWNoaW5nIGBicmNtZl9jeXdfZXh0ZXJuYWxfYXV0aGAgdmlhIFN5emthbGxlcioqCgpPa2F5LCBzbyB0aGUgaW5pdGlhbCB0aG91Z2h0IHdhcyBTRElPIGFuZCBgQ1lXYCwgYnV0IHRoYXQmIzM5O3MgYSBkZWFkIGVuZCDigJMgU3l6a2FsbGVyIGRvZXNuJiMzOTt0IGhhdmUgYW4gU0RJTyBmdXp6ZXIuIExldCYjMzk7cyBwaXZvdCB0byBQQ0ksIHNpbmNlIGl0ICpkb2VzKiBoYXZlIGEgUENJIGZ1enplci4gQW5kIHdlJiMzOTt2ZSBzZWVuIGBDWVdgIHVzZWQgaW4gUENJIGRldmljZXMgbGlrZSBgQlJDTV9QQ0lFXzQzNTk2X0RFVklDRV9JRGAgYW5kIGBDWV9QQ0lFXzU0NTkxX0RFVklDRV9JRGAuIFRoZSBjYXRjaCB3aXRoIFBDSSBpcyB0aGUgZmlybXdhcmUgcmVxdWlyZW1lbnQuCgpCdXQgd2FpdCwgU3l6a2FsbGVyIHVzZXMgRGViaWFuIGltYWdlcy4gQW5kIERlYmlhbiBpbmNsdWRlcyBgbGludXgtZmlybXdhcmVgISBUaGF0IHNob3VsZCBnaXZlIHVzIGZpcm13YXJlcyBsaWtlIGBicmNtZm1hYzQzNTk2LXBjaWUuYmluYC4gSWYgdGhlIGZpcm13YXJlIGxvYWRzLCBgcmVxdWVzdF9maXJtd2FyZWAgd2lsbCBzdWNjZWVkLCB3aGljaCBtZWFucyB3ZSBjYW4gY29udGludWUuCgpGb2xsb3dpbmcgdGhhdCBwYXRoLCBgYnJjbWZfcGNpZV9zZXR1cGAgd2lsbCBleGVjdXRlLiBUaGF0IGNhbGxzIGBicmNtZl9wY2llX2Rvd25sb2FkX2Z3X252cmFtYCwgd3JpdGluZyB0aGUgZmlybXdhcmUgdG8gUENJIG1lbW9yeS4gU3l6a2FsbGVyIGVtdWxhdGVzIFBDSSwgc28gdGhhdCYjMzk7cyBkb2FibGUuIFRoZW4gYGJyY21mX3BjaWVfaW5pdF9yaW5nYnVmZmVyc2Agc2V0cyB1cCBETUEgcmluZ3MsIGFuZCB0aGUgY3J1Y2lhbCBwYXJ0cyBhcmUgYGJyY21mX2FsbG9jYCBhbmQgYGJyY21mX2F0dGFjaGAuCgpgYnJjbWZfYXR0YWNoYCBpcyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nIGJlY2F1c2UgaXQgcmVnaXN0ZXJzIGBicmNtZl9jeXdfZXh0ZXJuYWxfYXV0aGAuIE5vdywgY2FuIHdlIHRyaWdnZXIgdGhhdCBmcm9tIHVzZXJzcGFjZT8gQ2FuIHdlIHJlYWNoIGl0IHZpYSBuZXRsaW5rPyBZZXMsIGBOTDgwMjExX0NNRF9FWFRFUk5BTF9BVVRIYCBjYWxscyBgcmRldl9leHRlcm5hbF9hdXRoYCwgYW5kIHRoYXQsIGluIHR1cm4sIGNhbGxzIGByZGV2LSZndDtvcHMtJmd0O2V4dGVybmFsX2F1dGhgLiBJZiB0aGUgZGV2aWNlIGlzIHJlZ2lzdGVyZWQsIGBicmNtZl9jeXdfZXh0ZXJuYWxfYXV0aGAgc2hvdWxkIGJlIHJlYWNoYWJsZS4KClRoZSBxdWVzdGlvbiBub3cgaXMsIGRvZXMgYGJyY21mX3BjaWVfc2V0dXBgIGFjdHVhbGx5ICpzdWNjZWVkKiBpbiBTeXprYWxsZXI/IFdlIG5lZWQgdG8gbG9vayBhdCBgYnJjbWZfcGNpZV9kb3dubG9hZF9md19udnJhbWAgdG8gY29uZmlybS4gSXQmIzM5O3MgdGltZSB0byBkaWcgaW50byB0aGUgZGV0YWlscyB0byB2ZXJpZnkgdGhlIHNldHVwIHByb2Nlc3MgaW4gU3l6a2FsbGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjk2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxODo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxODIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE4MjA6XHRcdFx0XHQgIGRldmluZm8tXHUwMDNldGNtKTtcbjE4MjE6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xODIyOlx0XHR9XG4xODIzOlx0XHRicmNtZl9kYmcoUENJRSwgXCYjMzQ7UGh5cyBhZGRyIDogcmVnIHNwYWNlID0gJXAgYmFzZSBhZGRyICUjMDE2bGx4XFxuXCYjMzQ7LFxuMTgyNDpcdFx0XHQgIGRldmluZm8tXHUwMDNlcmVncywgKHVuc2lnbmVkIGxvbmcgbG9uZyliYXIwX2FkZHIpO1xuMTgyNTpcdFx0YnJjbWZfZGJnKFBDSUUsIFwmIzM0O1BoeXMgYWRkciA6IG1lbSBzcGFjZSA9ICVwIGJhc2UgYWRkciAlIzAxNmxseCBzaXplIDB4JXhcXG5cJiMzNDssXG4xODI2Olx0XHRcdCAgZGV2aW5mby1cdTAwM2V0Y20sICh1bnNpZ25lZCBsb25nIGxvbmcpYmFyMV9hZGRyLFxuMTgyNzpcdFx0XHQgICh1bnNpZ25lZCBpbnQpYmFyMV9zaXplKTtcbjE4Mjg6XHRcbjE4Mjk6XHRcdHJldHVybiAwO1xuMTgzMDpcdH1cbjE4MzE6XHRcbjE4MzI6XHRcbjE4MzM6XHRzdGF0aWMgdm9pZCBicmNtZl9wY2llX3JlbGVhc2VfcmVzb3VyY2Uoc3RydWN0IGJyY21mX3BjaWVkZXZfaW5mbyAqZGV2aW5mbylcbjE4MzQ6XHR7XG4xODM1Olx0XHRpZiAoZGV2aW5mby1cdTAwM2V0Y20pXG4xODM2Olx0XHRcdGlvdW5tYXAoZGV2aW5mby1cdTAwM2V0Y20pO1xuMTgzNzpcdFx0aWYgKGRldmluZm8tXHUwMDNlcmVncylcbjE4Mzg6XHRcdFx0aW91bm1hcChkZXZpbmZvLVx1MDAzZXJlZ3MpO1xuMTgzOTpcdFxuMTg0MDpcdFx0cGNpX2Rpc2FibGVfZGV2aWNlKGRldmluZm8tXHUwMDNlcGRldik7XG4xODQxOlx0fVxuMTg0MjpcdFxuMTg0MzpcdFxuMTg0NDpcdHN0YXRpYyB1MzIgYnJjbWZfcGNpZV9idXNjb3JlX3ByZXBfYWRkcihjb25zdCBzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdTMyIGFkZHIpXG4xODQ1Olx0e1xuMTg0NjpcdFx0dTMyIHJldF9hZGRyO1xuMTg0NzpcdFxuMTg0ODpcdFx0cmV0X2FkZHIgPSBhZGRyIFx1MDAyNiAoQlJDTUZfUENJRV9CQVIwX1JFR19TSVpFIC0gMSk7XG4xODQ5Olx0XHRhZGRyIFx1MDAyNj0gfihCUkNNRl9QQ0lFX0JBUjBfUkVHX1NJWkUgLSAxKTtcbjE4NTA6XHRcdHBjaV93cml0ZV9jb25maWdfZHdvcmQocGRldiwgQlJDTUZfUENJRV9CQVIwX1dJTkRPVywgYWRkcik7XG4xODUxOlx0XG4xODUyOlx0XHRyZXR1cm4gcmV0X2FkZHI7XG4xODUzOlx0fVxuMTg1NDpcdFxuMTg1NTpcdFxuMTg1NjpcdHN0YXRpYyB1MzIgYnJjbWZfcGNpZV9idXNjb3JlX3JlYWQzMih2b2lkICpjdHgsIHUzMiBhZGRyKVxuMTg1NzpcdHtcbjE4NTg6XHRcdHN0cnVjdCBicmNtZl9wY2llZGV2X2luZm8gKmRldmluZm8gPSAoc3RydWN0IGJyY21mX3BjaWVkZXZfaW5mbyAqKWN0eDtcbjE4NTk6XHRcbjE4NjA6XHRcdGFkZHIgPSBicmNtZl9wY2llX2J1c2NvcmVfcHJlcF9hZGRyKGRldmluZm8tXHUwMDNlcGRldiwgYWRkcik7XG4xODYxOlx0XHRyZXR1cm4gYnJjbWZfcGNpZV9yZWFkX3JlZzMyKGRldmluZm8sIGFkZHIpO1xuMTg2MjpcdH1cbjE4NjM6XHRcbjE4NjQ6XHRcbjE4NjU6XHRzdGF0aWMgdm9pZCBicmNtZl9wY2llX2J1c2NvcmVfd3JpdGUzMih2b2lkICpjdHgsIHUzMiBhZGRyLCB1MzIgdmFsdWUpXG4xODY2Olx0e1xuMTg2NzpcdFx0c3RydWN0IGJyY21mX3BjaWVkZXZfaW5mbyAqZGV2aW5mbyA9IChzdHJ1Y3QgYnJjbWZfcGNpZWRldl9pbmZvICopY3R4O1xuMTg2ODpcdFxuMTg2OTpcdFx0YWRkciA9IGJyY21mX3BjaWVfYnVzY29yZV9wcmVwX2FkZHIoZGV2aW5mby1cdTAwM2VwZGV2LCBhZGRyKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTg6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDY4MDcKCQkJCQkJCW91dHB1dDogNTkKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKk5hdmlnYXRpbmcgdGhlIEZpcm13YXJlIERvd25sb2FkIFByb2Nlc3MqKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSBuZWVkIHRvIHplcm8gaW4gb24gc29tZXRoaW5nIHNwZWNpZmljIGhlcmUuIEkgd2FudCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCYjMzk7cyBoYXBwZW5pbmcgd2l0aGluIHRoZSBgYnJjbWZfcGNpZV9kb3dubG9hZF9md19udnJhbWAgZnVuY3Rpb24uIFRoaXMgaXMgY3JpdGljYWwuIEl0JiMzOTtzIGxpa2VseSBpbnZvbHZlZCBpbiB0aGUgaW5pdGlhbCB0cmFuc2ZlciBvZiBmaXJtd2FyZSBhbmQgTlZSQU0gZGF0YSBvdmVyIHRoZSBQQ0llIGludGVyZmFjZSwgd2hpY2ggaXMgYSBmdW5kYW1lbnRhbCBzdGVwIGluIGJyaW5naW5nIHVwIHRoaXMgQnJvYWRjb20gV2ktRmkgYWRhcHRlci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBkb3dubG9hZCBwcm9jZXNzIGF0IGEgZ3JhbnVsYXIgbGV2ZWwsIHNwZWNpZmljYWxseSBob3cgdGhlIGZpcm13YXJlIGFuZCBOVlJBTSBhcmUgaGFuZGxlZC4gVGhpcyBmdW5jdGlvbiBpcyBsaWtlbHkgdGhlIGxpbmNocGluIG9mIGluaXRpYWwgYnJpbmctdXAsIGFuZCB1bmRlcnN0YW5kaW5nIGl0IGlzIHBhcmFtb3VudCB0byB0aGUgb3ZlcmFsbCBwaWN0dXJlLiBJdOKAmXMgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgZHJpdmVyIGludGVyYWN0cyB3aXRoIHRoZSBoYXJkd2FyZSBhdCBpdHMgbW9zdCBiYXNpYyBsZXZlbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTg6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnJjbWZfcGNpZV9kb3dubG9hZF9md19udnJhbSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuYz0xNjg1PWJyY21mX3BjaWVfcHJvdmlkZV9yYW5kb21fYnl0ZXMoc3RydWN0IGJyY21mX3BjaWVkZXZfaW5mbyAqZGV2aW5mbywgdTMyIGFkZHJlc3MpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuYy0xNjkyLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuYzoxNjkzOnN0YXRpYyBpbnQgYnJjbWZfcGNpZV9kb3dubG9hZF9md19udnJhbShzdHJ1Y3QgYnJjbWZfcGNpZWRldl9pbmZvICpkZXZpbmZvLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuYy0xNjk0LVx0XHRcdFx0XHRjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3LCB2b2lkICpudnJhbSxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jPTIxMzk9c3RhdGljIHZvaWQgYnJjbWZfcGNpZV9zZXR1cChzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCByZXQsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuYy0yMTgxLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuYzoyMTgyOlx0cmV0ID0gYnJjbWZfcGNpZV9kb3dubG9hZF9md19udnJhbShkZXZpbmZvLCBmdywgbnZyYW0sIG52cmFtX2xlbik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jLTIxODMtXHRpZiAocmV0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjk5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxODo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NzQ3MgoJCQkJCQkJb3V0cHV0OiA1NQoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHdoYXQmIzM5O3MgZ29pbmcgb24gaW4gdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipBbmFseXppbmcgdGhlIGBicmNtZl9wY2llX2Rvd25sb2FkX2Z3X252cmFtYCBGdW5jdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYGJyY21mX3BjaWVfZG93bmxvYWRfZndfbnZyYW1gIGZ1bmN0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIGJhc2VkIG9uIHRoZSBuYW1lLCB0aGlzIHByb2JhYmx5IGhhbmRsZXMgdGhlIGRvd25sb2FkIG9mIGZpcm13YXJlIGFuZCBOVlJBTSBkYXRhIHNwZWNpZmljYWxseSBmb3IgYSBCcm9hZGNvbSBXaS1GaSBkZXZpY2UgdXNpbmcgdGhlIFBDSWUgaW50ZXJmYWNlLiBJJiMzOTttIGFscmVhZHkgYW50aWNpcGF0aW5nIGEgZmFpciBiaXQgb2YgY29tcGxleGl0eSBoZXJlLCBnaXZlbiB0aGUgaGFyZHdhcmUgaW50ZXJhY3Rpb24gYW5kIHRoZSBwb3RlbnRpYWwgbmVlZCBmb3IgZXJyb3IgaGFuZGxpbmcuIEkmIzM5O2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkIOKAkyBsaWtlbHkgc29tZSBzb3J0IG9mIGNvbmZpZ3VyYXRpb24gYmxvY2sgb3IgYnVmZmVyIHRvIGJlIHRyYW5zZmVycmVkIHRvIHRoZSBkZXZpY2UuIEkmIzM5O2xsIG5lZWQgdG8gZGlzc2VjdCB0aGUgc3RlcHMgdGhlIGZ1bmN0aW9uIHRha2VzOiBpbml0aWFsaXphdGlvbiwgUENJZSB3cml0ZXMsIGFuZCBhbnkgdmVyaWZpY2F0aW9uIHN0ZXBzIHRvIGVuc3VyZSB0aGUgZG93bmxvYWQgd2FzIHN1Y2Nlc3NmdWwuIEFyZSB0aGV5IHVzaW5nIERNQT8gSG93IGFyZSB0aGV5IGhhbmRsaW5nIHBvdGVudGlhbCBpbnRlcnJ1cHQgaXNzdWVzIGR1cmluZyB0aGUgcHJvY2Vzcz8gTW9zdCBpbXBvcnRhbnRseSBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBob3cgdGhleSBtYW5hZ2UgdGhlIE5WUkFNIGRhdGEgc3BlY2lmaWNhbGx5LiBJcyBpdCBhIHNlcGFyYXRlIGRvd25sb2FkLCBvciBpbnRlZ3JhdGVkIGludG8gdGhlIGZpcm13YXJlIGltYWdlIHNvbWVob3c/IEFueSBwb2ludGVyIHRvIHNwZWNpZmljIEJyb2FkY29tIGZpcm13YXJlIGFuZCBOVlJBTSBmb3JtYXRzIHdvdWxkIGJlIHVzZWZ1bCB0byBkZXRlcm1pbmUgaG93IGRlZXAgdGhpcyByYWJiaXQgaG9sZSBnb2VzLiBJJiMzOTtsbCBuZWVkIHRvIGNvbnNpZGVyIHRoaXMgaW4gbGlnaHQgb2YgYW55IHBvdGVudGlhbCBwbGF0Zm9ybS1zcGVjaWZpYyBudWFuY2VzIHRoZSBjb2RlIG1pZ2h0IGJlIGFkZHJlc3NpbmcsIGxpa2UgZW5kaWFubmVzcyBvciBtZW1vcnkgbWFwcGluZy4gSSYjMzk7bSBleHBlY3Rpbmcgc29tZSBwcmV0dHkgbG93LWxldmVsIGludGVyYWN0aW9uIHdpdGggaGFyZHdhcmUgcmVnaXN0ZXJzLCBzbyB0aGUgbGV2ZWwgb2YgYWJzdHJhY3Rpb24gd2lsbCBiZSBjcml0aWNhbC4gVWx0aW1hdGVseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbXBsZXRlIHNlcXVlbmNlIG9mIGV2ZW50cyB0aGF0IGVuYWJsZXMgYSBCcm9hZGNvbSBQQ0llIFdpLUZpIGNoaXAgdG8gZ2V0IGl0cyBjb3JlIG9wZXJhdGluZyBjb2RlIGFuZCBwZXJzaXN0ZW50IGNvbmZpZ3VyYXRpb24uIFRoaXMgaXMgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE4OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE2OTMsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTY5MzpcdHN0YXRpYyBpbnQgYnJjbWZfcGNpZV9kb3dubG9hZF9md19udnJhbShzdHJ1Y3QgYnJjbWZfcGNpZWRldl9pbmZvICpkZXZpbmZvLFxuMTY5NDpcdFx0XHRcdFx0XHRjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3LCB2b2lkICpudnJhbSxcbjE2OTU6XHRcdFx0XHRcdFx0dTMyIG52cmFtX2xlbilcbjE2OTY6XHR7XG4xNjk3Olx0XHRzdHJ1Y3QgYnJjbWZfYnVzICpidXMgPSBkZXZfZ2V0X2RydmRhdGEoXHUwMDI2ZGV2aW5mby1cdTAwM2VwZGV2LVx1MDAzZWRldik7XG4xNjk4Olx0XHR1MzIgc2hhcmVkcmFtX2FkZHI7XG4xNjk5Olx0XHR1MzIgc2hhcmVkcmFtX2FkZHJfd3JpdHRlbjtcbjE3MDA6XHRcdHUzMiBsb29wX2NvdW50ZXI7XG4xNzAxOlx0XHRpbnQgZXJyO1xuMTcwMjpcdFx0dTMyIGFkZHJlc3M7XG4xNzAzOlx0XHR1MzIgcmVzZXRpbnRyO1xuMTcwNDpcdFxuMTcwNTpcdFx0YnJjbWZfZGJnKFBDSUUsIFwmIzM0O0hhbHQgQVJNLlxcblwmIzM0Oyk7XG4xNzA2Olx0XHRlcnIgPSBicmNtZl9wY2llX2VudGVyX2Rvd25sb2FkX3N0YXRlKGRldmluZm8pO1xuMTcwNzpcdFx0aWYgKGVycilcbjE3MDg6XHRcdFx0cmV0dXJuIGVycjtcbjE3MDk6XHRcbjE3MTA6XHRcdGJyY21mX2RiZyhQQ0lFLCBcJiMzNDtEb3dubG9hZCBGVyAlc1xcblwmIzM0OywgZGV2aW5mby1cdTAwM2Vmd19uYW1lKTtcbjE3MTE6XHRcdG1lbWNweV90b2lvKGRldmluZm8tXHUwMDNldGNtICYjNDM7IGRldmluZm8tXHUwMDNlY2ktXHUwMDNlcmFtYmFzZSxcbjE3MTI6XHRcdFx0ICAgICh2b2lkICopZnctXHUwMDNlZGF0YSwgZnctXHUwMDNlc2l6ZSk7XG4xNzEzOlx0XG4xNzE0Olx0XHRyZXNldGludHIgPSBnZXRfdW5hbGlnbmVkX2xlMzIoZnctXHUwMDNlZGF0YSk7XG4xNzE1Olx0XHRyZWxlYXNlX2Zpcm13YXJlKGZ3KTtcbjE3MTY6XHRcbjE3MTc6XHRcdC8qIHJlc2V0IGxhc3QgNCBieXRlcyBvZiBSQU0gYWRkcmVzcy4gdG8gYmUgdXNlZCBmb3Igc2hhcmVkXG4xNzE4Olx0XHQgKiBhcmVhLiBUaGlzIGlkZW50aWZpZXMgd2hlbiBGVyBpcyBydW5uaW5nXG4xNzE5Olx0XHQgKi9cbjE3MjA6XHRcdGJyY21mX3BjaWVfd3JpdGVfcmFtMzIoZGV2aW5mbywgZGV2aW5mby1cdTAwM2VjaS1cdTAwM2VyYW1zaXplIC0gNCwgMCk7XG4xNzIxOlx0XG4xNzIyOlx0XHRpZiAobnZyYW0pIHtcbjE3MjM6XHRcdFx0YnJjbWZfZGJnKFBDSUUsIFwmIzM0O0Rvd25sb2FkIE5WUkFNICVzXFxuXCYjMzQ7LCBkZXZpbmZvLVx1MDAzZW52cmFtX25hbWUpO1xuMTcyNDpcdFx0XHRhZGRyZXNzID0gZGV2aW5mby1cdTAwM2VjaS1cdTAwM2VyYW1iYXNlICYjNDM7IGRldmluZm8tXHUwMDNlY2ktXHUwMDNlcmFtc2l6ZSAtXG4xNzI1Olx0XHRcdFx0ICBudnJhbV9sZW47XG4xNzI2Olx0XHRcdG1lbWNweV90b2lvKGRldmluZm8tXHUwMDNldGNtICYjNDM7IGFkZHJlc3MsIG52cmFtLCBudnJhbV9sZW4pO1xuMTcyNzpcdFx0XHRicmNtZl9md19udnJhbV9mcmVlKG52cmFtKTtcbjE3Mjg6XHRcbjE3Mjk6XHRcdFx0aWYgKGRldmluZm8tXHUwMDNlZndzZWVkKSB7XG4xNzMwOlx0XHRcdFx0c2l6ZV90IHJhbmRfbGVuID0gQlJDTUZfUkFORE9NX1NFRURfTEVOR1RIO1xuMTczMTpcdFx0XHRcdHN0cnVjdCBicmNtZl9yYW5kb21fc2VlZF9mb290ZXIgZm9vdGVyID0ge1xuMTczMjpcdFx0XHRcdFx0Lmxlbmd0aCA9IGNwdV90b19sZTMyKHJhbmRfbGVuKSxcbjE3MzM6XHRcdFx0XHRcdC5tYWdpYyA9IGNwdV90b19sZTMyKEJSQ01GX1JBTkRPTV9TRUVEX01BR0lDKSxcbjE3MzQ6XHRcdFx0XHR9O1xuMTczNTpcdFxuMTczNjpcdFx0XHRcdC8qIFNvbWUgY2hpcHMvZmlybXdhcmVzIGV4cGVjdCBhIGJ1ZmZlciBvZiByYW5kb21cbjE3Mzc6XHRcdFx0XHQgKiBkYXRhIHRvIGJlIHByZXNlbnQgYmVmb3JlIE5WUkFNXG4xNzM4Olx0XHRcdFx0ICovXG4xNzM5Olx0XHRcdFx0YnJjbWZfZGJnKFBDSUUsIFwmIzM0O0Rvd25sb2FkIHJhbmRvbSBzZWVkXFxuXCYjMzQ7KTtcbjE3NDA6XHRcbjE3NDE6XHRcdFx0XHRhZGRyZXNzIC09IHNpemVvZihmb290ZXIpO1xuMTc0MjpcdFx0XHRcdG1lbWNweV90b2lvKGRldmluZm8tXHUwMDNldGNtICYjNDM7IGFkZHJlc3MsIFx1MDAyNmZvb3RlcixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE4OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ4Nzc0CgkJCQkJCQlvdXRwdXQ6IDU1CgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgRmlybXdhcmUgSW5pdGlhbGl6YXRpb24gU2VxdWVuY2UqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBvYnNlcnZhdGlvbiBpcyBmb2N1c2VkIG9uIGhvdyB0aGUgZHJpdmVyIGhhbmRsZXMgd3JpdGluZyB0byBgZGV2aW5mby0mZ3Q7dGNtYC4gUmlnaHQgYXdheSwgdGhhdCByYWlzZXMgYSBmbGFnLiBXZSYjMzk7cmUgZGlyZWN0bHkgd3JpdGluZyB0byBQQ0kgbWVtb3J5IHNwYWNlLCBzcGVjaWZpY2FsbHkgdGhlICp0Y20qIChUcnVzdGVkIENvbXB1dGluZyBNb2R1bGUpIGFyZWEsIGltcGx5aW5nIHNvbWUgbG93LWxldmVsIGNvbW11bmljYXRpb24gb3IgY29uZmlndXJhdGlvbiBpcyBoYXBwZW5pbmcuIFRoaXMgaXNuJiMzOTt0IGp1c3Qgc3RhbmRhcmQgcmVnaXN0ZXIgYWNjZXNzOyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHNvbWV0aGluZyBpbnRlZ3JhbCB0byB0aGUgZGV2aWNlJiMzOTtzIHNlY3VyZSBib290IHByb2Nlc3MsIG9yIHBvdGVudGlhbGx5IHNlY3VyZSBvcGVyYXRpb25zLgoKVGhlIHN1YnNlcXVlbnQgd2FpdCBmb3IgZmlybXdhcmUgc3RhcnR1cCBmdXJ0aGVyIGNvbmZpcm1zIHRoaXMuIFRoZSB3cml0aW5nIHRvIGBkZXZpbmZvLSZndDt0Y21gICpoYXMqIHRvIGJlIGEga2V5IHN0ZXAgaW4gaW5pdGlhdGluZyB0aGUgZmlybXdhcmUmIzM5O3MgZXhlY3V0aW9uLiBUaGlzIG1ha2VzIHNlbnNlLiBUaGUgZHJpdmVyIGlzIGxpa2VseSBzZXR0aW5nIHVwIHRoZSBuZWNlc3NhcnkgZW52aXJvbm1lbnQgd2l0aGluIHRoZSB0Y20gZm9yIHRoZSBmaXJtd2FyZSB0byB0YWtlIG92ZXIuIFRoaXMgaXMgbGlrZWx5IGZvbGxvd2VkIGJ5IGEgZmlybXdhcmUgcmVzZXQuIFRoZSB3YWl0IGluZGljYXRlcyB3ZSBhcmUgbGlrZWx5IHBvbGxpbmcgYSByZWdpc3RlciBpbiBQQ0kgbWVtb3J5IHNwYWNlLCBvciBwZXJoYXBzIHdhaXRpbmcgZm9yIGFuIGludGVycnVwdCwgY29uZmlybWluZyB0aGUgZmlybXdhcmUgaXMgdXAgYW5kIHJlYWR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTg6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTc0MywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNzQzOlx0XHRcdFx0XHQgICAgc2l6ZW9mKGZvb3RlcikpO1xuMTc0NDpcdFxuMTc0NTpcdFx0XHRcdGFkZHJlc3MgLT0gcmFuZF9sZW47XG4xNzQ2Olx0XHRcdFx0YnJjbWZfcGNpZV9wcm92aWRlX3JhbmRvbV9ieXRlcyhkZXZpbmZvLCBhZGRyZXNzKTtcbjE3NDc6XHRcdFx0fVxuMTc0ODpcdFx0fSBlbHNlIHtcbjE3NDk6XHRcdFx0YnJjbWZfZGJnKFBDSUUsIFwmIzM0O05vIG1hdGNoaW5nIE5WUkFNIGZpbGUgZm91bmQgJXNcXG5cJiMzNDssXG4xNzUwOlx0XHRcdFx0ICBkZXZpbmZvLVx1MDAzZW52cmFtX25hbWUpO1xuMTc1MTpcdFx0fVxuMTc1MjpcdFxuMTc1MzpcdFx0c2hhcmVkcmFtX2FkZHJfd3JpdHRlbiA9IGJyY21mX3BjaWVfcmVhZF9yYW0zMihkZXZpbmZvLFxuMTc1NDpcdFx0XHRcdFx0XHRcdCAgICAgICBkZXZpbmZvLVx1MDAzZWNpLVx1MDAzZXJhbXNpemUgLVxuMTc1NTpcdFx0XHRcdFx0XHRcdCAgICAgICA0KTtcbjE3NTY6XHRcdGJyY21mX2RiZyhQQ0lFLCBcJiMzNDtCcmluZyBBUk0gaW4gcnVubmluZyBzdGF0ZVxcblwmIzM0Oyk7XG4xNzU3Olx0XHRlcnIgPSBicmNtZl9wY2llX2V4aXRfZG93bmxvYWRfc3RhdGUoZGV2aW5mbywgcmVzZXRpbnRyKTtcbjE3NTg6XHRcdGlmIChlcnIpXG4xNzU5Olx0XHRcdHJldHVybiBlcnI7XG4xNzYwOlx0XG4xNzYxOlx0XHRicmNtZl9kYmcoUENJRSwgXCYjMzQ7V2FpdCBmb3IgRlcgaW5pdFxcblwmIzM0Oyk7XG4xNzYyOlx0XHRzaGFyZWRyYW1fYWRkciA9IHNoYXJlZHJhbV9hZGRyX3dyaXR0ZW47XG4xNzYzOlx0XHRsb29wX2NvdW50ZXIgPSBCUkNNRl9QQ0lFX0ZXX1VQX1RJTUVPVVQgLyA1MDtcbjE3NjQ6XHRcdHdoaWxlICgoc2hhcmVkcmFtX2FkZHIgPT0gc2hhcmVkcmFtX2FkZHJfd3JpdHRlbikgXHUwMDI2XHUwMDI2IChsb29wX2NvdW50ZXIpKSB7XG4xNzY1Olx0XHRcdG1zbGVlcCg1MCk7XG4xNzY2Olx0XHRcdHNoYXJlZHJhbV9hZGRyID0gYnJjbWZfcGNpZV9yZWFkX3JhbTMyKGRldmluZm8sXG4xNzY3Olx0XHRcdFx0XHRcdFx0ICAgICAgIGRldmluZm8tXHUwMDNlY2ktXHUwMDNlcmFtc2l6ZSAtXG4xNzY4Olx0XHRcdFx0XHRcdFx0ICAgICAgIDQpO1xuMTc2OTpcdFx0XHRsb29wX2NvdW50ZXItLTtcbjE3NzA6XHRcdH1cbjE3NzE6XHRcdGlmIChzaGFyZWRyYW1fYWRkciA9PSBzaGFyZWRyYW1fYWRkcl93cml0dGVuKSB7XG4xNzcyOlx0XHRcdGJyY21mX2VycihidXMsIFwmIzM0O0ZXIGZhaWxlZCB0byBpbml0aWFsaXplXFxuXCYjMzQ7KTtcbjE3NzM6XHRcdFx0cmV0dXJuIC1FTk9ERVY7XG4xNzc0Olx0XHR9XG4xNzc1Olx0XHRpZiAoc2hhcmVkcmFtX2FkZHIgXHUwMDNjIGRldmluZm8tXHUwMDNlY2ktXHUwMDNlcmFtYmFzZSB8fFxuMTc3NjpcdFx0ICAgIHNoYXJlZHJhbV9hZGRyIFx1MDAzZT0gZGV2aW5mby1cdTAwM2VjaS1cdTAwM2VyYW1iYXNlICYjNDM7IGRldmluZm8tXHUwMDNlY2ktXHUwMDNlcmFtc2l6ZSkge1xuMTc3NzpcdFx0XHRicmNtZl9lcnIoYnVzLCBcJiMzNDtJbnZhbGlkIHNoYXJlZCBSQU0gYWRkcmVzcyAweCUwOHhcXG5cJiMzNDssXG4xNzc4Olx0XHRcdFx0ICBzaGFyZWRyYW1fYWRkcik7XG4xNzc5Olx0XHRcdHJldHVybiAtRU5PREVWO1xuMTc4MDpcdFx0fVxuMTc4MTpcdFx0YnJjbWZfZGJnKFBDSUUsIFwmIzM0O1NoYXJlZCBSQU0gYWRkcjogMHglMDh4XFxuXCYjMzQ7LCBzaGFyZWRyYW1fYWRkcik7XG4xNzgyOlx0XG4xNzgzOlx0XHRyZXR1cm4gKGJyY21mX3BjaWVfaW5pdF9zaGFyZV9yYW1faW5mbyhkZXZpbmZvLCBzaGFyZWRyYW1fYWRkcikpO1xuMTc4NDpcdH1cbjE3ODU6XHRcbjE3ODY6XHRcbjE3ODc6XHRzdGF0aWMgaW50IGJyY21mX3BjaWVfZ2V0X3Jlc291cmNlKHN0cnVjdCBicmNtZl9wY2llZGV2X2luZm8gKmRldmluZm8pXG4xNzg4Olx0e1xuMTc4OTpcdFx0c3RydWN0IHBjaV9kZXYgKnBkZXYgPSBkZXZpbmZvLVx1MDAzZXBkZXY7XG4xNzkwOlx0XHRzdHJ1Y3QgYnJjbWZfYnVzICpidXMgPSBkZXZfZ2V0X2RydmRhdGEoXHUwMDI2cGRldi1cdTAwM2VkZXYpO1xuMTc5MTpcdFx0aW50IGVycjtcbjE3OTI6XHRcdHBoeXNfYWRkcl90ICBiYXIwX2FkZHIsIGJhcjFfYWRkcjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE4OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ5OTU2CgkJCQkJCQlvdXRwdXQ6IDU4CgkJCQkJCQl0aG91Z2h0czogMTE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludGVyY2VwdGluZyB0aGUgRmlybXdhcmUmIzM5O3MgTWVtb3J5IE1hbmlwdWxhdGlvbioqCgpPa2F5LCBzbyB0aGUgdnVsbmVyYWJpbGl0eSBoaW5nZXMgb24gYSBzcGVjaWZpYyB3cml0ZSBvcGVyYXRpb24gYnkgdGhlIGZpcm13YXJlLCBzcGVjaWZpY2FsbHkgdGFyZ2V0aW5nIGBkZXZpbmZvLSZndDtjaS0mZ3Q7cmFtc2l6ZSAtIDRgLiBUaGUga2V5IGhlcmUgaXMgdG8gbGV2ZXJhZ2UgdGhlIFBDSSBkZXZpY2UgZW11bGF0aW9uIHByb3ZpZGVkIGJ5IHN5emthbGxlci4gSWYgSSBjYW4gaW50ZXJjZXB0IHRoZSBjYWxsIHRvIGBicmNtZl9wY2llX3JlYWRfcmFtMzJgIHRoYXQgaXMgYWNjZXNzaW5nIHRoaXMgbWVtb3J5IHJlZ2lvbiwgdGhlbiBJIHNob3VsZCBiZSBhYmxlIHRvIG1hbmlwdWxhdGUgdGhlIHZhbHVlIHJldHVybmVkLCBhbmQgYnkgZXh0ZW5zaW9uIHRoZSBlbnRpcmUgcHJvY2Vzcy4KCkhvbGQgb24sIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgc29tZXRoaW5nLiBUaGUgY29kZSBtYWtlcyBhIG1lbnRpb24gb2YgYGRldmluZm8tJmd0O3RjbWAsIGlzIGBicmNtZl9wY2llX3JlYWRfcmFtMzJgIHJlYWRpbmcgdGhhdCBtZW1vcnkgbG9jYXRpb24/IExldCYjMzk7cyB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhlIGBicmNtZl9wY2llX3JlYWRfcmFtMzJgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBzdXJlIHdoZXJlIGl0IGlzIGdldHRpbmcgaXRzIGRhdGEgZnJvbS4gVGhhdCB3aWxsIGdpdmUgbWUgdGhlIGluZm9ybWF0aW9uIEkgbmVlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE4OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JyY21mX3BjaWVfcmVhZF9yYW0zMiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuYz01NjM9c3RhdGljIHUzMlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuYzo1NjQ6YnJjbWZfcGNpZV9yZWFkX3JhbTMyKHN0cnVjdCBicmNtZl9wY2llZGV2X2luZm8gKmRldmluZm8sIHUzMiBtZW1fb2Zmc2V0KVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuYy01NjUte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmM9MTY5Mz1zdGF0aWMgaW50IGJyY21mX3BjaWVfZG93bmxvYWRfZndfbnZyYW0oc3RydWN0IGJyY21mX3BjaWVkZXZfaW5mbyAqZGV2aW5mbyxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jLTE3NTItXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jOjE3NTM6XHRzaGFyZWRyYW1fYWRkcl93cml0dGVuID0gYnJjbWZfcGNpZV9yZWFkX3JhbTMyKGRldmluZm8sXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jLTE3NTQtXHRcdFx0XHRcdFx0ICAgICAgIGRldmluZm8tXHUwMDNlY2ktXHUwMDNlcmFtc2l6ZSAtXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuYy0xNzY1LVx0XHRtc2xlZXAoNTApO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuYzoxNzY2Olx0XHRzaGFyZWRyYW1fYWRkciA9IGJyY21mX3BjaWVfcmVhZF9yYW0zMihkZXZpbmZvLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuYy0xNzY3LVx0XHRcdFx0XHRcdCAgICAgICBkZXZpbmZvLVx1MDAzZWNpLVx1MDAzZXJhbXNpemUgLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTg6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTA4MTAKCQkJCQkJCW91dHB1dDogNTQKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSB3ZWxsLXZlcnNlZCBpbiBrZXJuZWwtbGV2ZWwgZGV2aWNlIGRyaXZlciBkZXZlbG9wbWVudDoKCioqRGlzc2VjdGluZyBgYnJjbWZfcGNpZV9yZWFkX3JhbTMyYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgZnVuY3Rpb246IGBicmNtZl9wY2llX3JlYWRfcmFtMzJgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtPa2F5LCB0aGlzIGlzIHNwZWNpZmljIHRvIGEgQnJvYWRjb20gV2ktRmkgY2hpcHNldCB1c2luZyB0aGUgUENJZSBpbnRlcmZhY2UuICYjMzk7UmVhZCBSQU0zMiYjMzk7IGltcGxpZXMgaXQmIzM5O3MgZ3JhYmJpbmcgMzItYml0IGRhdGEgZGlyZWN0bHkgZnJvbSB0aGUgZGV2aWNlJiMzOTtzIGludGVybmFsIFJBTS4mIzM0OyBJJiMzOTttIG1lbnRhbGx5IHBhcnNpbmcgdGhlIG5hbWUg4oCTIGl0IHNjcmVhbXMgJiMzNDtsb3ctbGV2ZWwgYWNjZXNzLiYjMzQ7IEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSBvcGVyYXRpb25zIGludm9sdmluZyBQQ0llIGNvbmZpZ3VyYXRpb24gc3BhY2UgcmVhZHMsIHBvdGVudGlhbGx5IG1lbW9yeS1tYXBwZWQgSS9PLCBvciBwb3NzaWJseSBldmVuIGRpcmVjdCByZWdpc3RlciBtYW5pcHVsYXRpb24uIEkgYW50aWNpcGF0ZSBzb21lIHNvcnQgb2YgYnVzIGFjY2VzcywgcG9zc2libHkgaW52b2x2aW5nIERNQSBvciBwcm9ncmFtbWVkIEkvTywgYW5kIEnigJlsbCBiZSBjdXJpb3VzIGFib3V0IHRoZSBzeW5jaHJvbml6YXRpb24gbWV0aG9kcyB1c2VkIHRvIGhhbmRsZSB0aGUgY29uY3VycmVudCBhY2Nlc3MgaXNzdWVzIGluIGtlcm5lbC1zcGFjZS4gSSYjMzk7bSBhbHJlYWR5IGZvcm11bGF0aW5nIHF1ZXN0aW9uczogSXMgdGhlcmUgYW55IGVycm9yIGNoZWNraW5nPyBEb2VzIGl0IGhhbmRsZSBwb3RlbnRpYWwgYnVzIGVycm9ycyBncmFjZWZ1bGx5PyBIb3cgaXMgdGhlIFJBTSBhZGRyZXNzIGRldGVybWluZWQsIGlzIGl0IGhhcmRjb2RlZCwgY2FsY3VsYXRlZCBiYXNlZCBvbiB0aGUgY2hpcCByZXZpc2lvbiwgb3IgcGFzc2VkIGR5bmFtaWNhbGx5PyBJJiMzOTttIGJldHRpbmcgdGhhdCB0aGlzIGNvZGUgaXMgY3JpdGljYWwgZm9yIHRoZSBkZXZpY2UgdG8gYWN0dWFsbHkgZnVuY3Rpb24uIExldCYjMzk7cyBzZWUgaG93IGl0JiMzOTtzIGltcGxlbWVudGVkLiBUaW1lIHRvIHB1dCBvbiBteSBkZWJ1Z2dpbmcgaGF0IGFuZCBhbmFseXplIHRoaXMgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE4OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU2MywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTYzOlx0c3RhdGljIHUzMlxuIDU2NDpcdGJyY21mX3BjaWVfcmVhZF9yYW0zMihzdHJ1Y3QgYnJjbWZfcGNpZWRldl9pbmZvICpkZXZpbmZvLCB1MzIgbWVtX29mZnNldClcbiA1NjU6XHR7XG4gNTY2Olx0XHR2b2lkIF9faW9tZW0gKmFkZHIgPSBkZXZpbmZvLVx1MDAzZXRjbSAmIzQzOyBkZXZpbmZvLVx1MDAzZWNpLVx1MDAzZXJhbWJhc2UgJiM0MzsgbWVtX29mZnNldDtcbiA1Njc6XHRcbiA1Njg6XHRcdHJldHVybiAoaW9yZWFkMzIoYWRkcikpO1xuIDU2OTpcdH1cbiA1NzA6XHRcbiA1NzE6XHRcbiA1NzI6XHRzdGF0aWMgdm9pZFxuIDU3MzpcdGJyY21mX3BjaWVfd3JpdGVfcmFtMzIoc3RydWN0IGJyY21mX3BjaWVkZXZfaW5mbyAqZGV2aW5mbywgdTMyIG1lbV9vZmZzZXQsXG4gNTc0Olx0XHRcdCAgICAgICB1MzIgdmFsdWUpXG4gNTc1Olx0e1xuIDU3NjpcdFx0dm9pZCBfX2lvbWVtICphZGRyID0gZGV2aW5mby1cdTAwM2V0Y20gJiM0MzsgZGV2aW5mby1cdTAwM2VjaS1cdTAwM2VyYW1iYXNlICYjNDM7IG1lbV9vZmZzZXQ7XG4gNTc3Olx0XG4gNTc4Olx0XHRpb3dyaXRlMzIodmFsdWUsIGFkZHIpO1xuIDU3OTpcdH1cbiA1ODA6XHRcbiA1ODE6XHRcbiA1ODI6XHRzdGF0aWMgdm9pZFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTg6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTE0ODAKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAzMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIGBicmNtZl9jeXdfZXh0ZXJuYWxfYXV0aGAgVnVsbmVyYWJpbGl0eSBQYXRoKioKCk9rYXksIGhlcmUmIzM5O3MgaG93IEkmIzM5O20gc2VlaW5nIHRoaXMgdW5mb2xkLiBJdCBsb29rcyBsaWtlIHRoZSBrZXkgaXMgdXNpbmcgYGlvcmVhZDMyYCBmcm9tIGBkZXZpbmZvLSZndDt0Y21gLiBJIGtub3cgYGRldmluZm8tJmd0O3RjbWAgZ2V0cyBtYXBwZWQgZnJvbSBlaXRoZXIgUENJIEJBUjEgb3IgQkFSMiwgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIFNpbmNlIHN5emthbGxlciBpcyBlbXVsYXRpbmcgdGhlIFBDSSBkZXZpY2UsIGl0IGhhbmRsZXMgYWxsIG1lbW9yeSByZWFkcyBhbmQgd3JpdGVzIHRvIHRob3NlIEJBUnMuIFRoaXMgaXMgdGhlIGNydWNpYWwgcG9pbnQhIFRoYXQgbWVhbnMgc3l6a2FsbGVyIGNhbiBmZWVkIGEgY3JhZnRlZCB2YWx1ZSBiYWNrIGR1cmluZyB0aGUgYGlvcmVhZDMyYCBjYWxsLiBJZiBJIGNhbiBjb250cm9sIHRoYXQgcmV0dXJuIHZhbHVlLCBJIGNhbiBmb3JjZSB0aGUgbG9vcCB0byBleGl0IGVhcmx5LgoKSWYgSSBjYW4gY29udHJvbCB0aGUgcmVhZCBmcm9tIGBpb3JlYWQzMmAsIHRoZW4gdGhlIHBhdGggdGhyb3VnaCBgYnJjbWZfcGNpZV9pbml0X3NoYXJlX3JhbV9pbmZvYCBpcyBuZXh0LCBhbmQgdGhhdCByZWFkcyBtb3JlIHN0cnVjdHVyZXMgZnJvbSBQQ0kgbWVtb3J5LiBUaGUgZ3JlYXQgbmV3cyBpcyB0aGF0IHN5emthbGxlciBjYW4gcHJvdmlkZSB3aGF0IGxvb2sgbGlrZSBsZWdpdGltYXRlLCBpZiBjYXJlZnVsbHkgY3JhZnRlZCwgc3RydWN0dXJlcy4gSWYgSSBjYW4gZ2V0IGl0IHRvIGxvb2sgZ29vZCwgdGhlIGRyaXZlciBjYW4gc3VjY2Vzc2Z1bGx5IGluaXRpYWxpemUgYW5kIHJlZ2lzdGVyIHRoZSBgY2ZnODAyMTFgIGRldmljZS4gVGhhdCYjMzk7cyBhIGdvb2Qgc2V0dXAgZm9yIG1lLgoKVGhlIHRhcmdldCBpcyBgYnJjbWZfY3l3X2V4dGVybmFsX2F1dGhgLCBhbmQgSSBzZWUgaXQmIzM5O3MgYWNjZXNzaWJsZSB2aWEgbmV0bGluay4gSG93ZXZlciwgSSB3YW50IHRvIGNvbmZpcm0sIGlzIHRoZXJlICphbnkqIG90aGVyIHJvdXRlIHRvIGl0PyBMZXQgbWUgdGhpbmsuLi4gSXQmIzM5O3MgYSBgY2ZnODAyMTFgIG9wZXJhdGlvbiwgcmlnaHQ/IFNvIGxldCBtZSBjaGVjayB0aGUgY29kZS4gQWgsIHllcywgaW4gdGhlIGBicmNtZl9jeXdfZ2V0X2NmZzgwMjExX29wc2AgZnVuY3Rpb246CgpgYGBjCnN0YXRpYyB2b2lkIGJyY21mX2N5d19nZXRfY2ZnODAyMTFfb3BzKHN0cnVjdCBicmNtZl9wdWIgKmRydnIpCnsKCWRydnItJmd0O29wcy0mZ3Q7bWdtdF90eCA9IGJyY21mX2N5d19tZ210X3R4OwoJZHJ2ci0mZ3Q7b3BzLSZndDtleHRlcm5hbF9hdXRoID0gYnJjbWZfY3l3X2V4dGVybmFsX2F1dGg7Cn0KYGBgCgpZdXAsIHRoZXJlIGl0IGlzISBgZXh0ZXJuYWxfYXV0aGAgaXMgY2FsbGVkIGJ5IGBubDgwMjExX2V4dGVybmFsX2F1dGhgIGluIGBuZXQvd2lyZWxlc3Mvbmw4MDIxMS5jYC4gT2ssIHBlcmZlY3QuIE5vdywgbGV0IG1lIGp1c3QgbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgYG5sODAyMTFfZXh0ZXJuYWxfYXV0aGAgZnVuY3Rpb24gY29tcGxldGVseS4gSSB3YW50IHRvIGRvdWJsZS1jaGVjayB0aGF0IHBhcnQgYW5kIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gb3RoZXIgZ290Y2hhcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMDgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE4OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2V4dGVybmFsX2F1dGgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvd2lyZWxlc3Mvbmw4MDIxMS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy9ubDgwMjExLmM9MTg0Njk9c3RhdGljIGludCBubDgwMjExX2RlbF9wbWsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE4NDkwLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYzoxODQ5MTpzdGF0aWMgaW50IG5sODAyMTFfZXh0ZXJuYWxfYXV0aChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xODQ5Mi17XG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xODQ5NC1cdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBpbmZvLVx1MDAzZXVzZXJfcHRyWzFdO1xubmV0L3dpcmVsZXNzL25sODAyMTEuYzoxODQ5NTpcdHN0cnVjdCBjZmc4MDIxMV9leHRlcm5hbF9hdXRoX3BhcmFtcyBwYXJhbXM7XG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE4NDk2LVxubmV0L3dpcmVsZXNzL25sODAyMTEuYzoxODQ5NzpcdGlmICghcmRldi1cdTAwM2VvcHMtXHUwMDNlZXh0ZXJuYWxfYXV0aClcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTg0OTgtXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE4NTI5LVxubmV0L3dpcmVsZXNzL25sODAyMTEuYzoxODUzMDpcdHJldHVybiByZGV2X2V4dGVybmFsX2F1dGgocmRldiwgZGV2LCBcdTAwMjZwYXJhbXMpO1xubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xODUzMS19XG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYz0xOTcyOT1zdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfc21hbGxfb3BzIG5sODAyMTFfc21hbGxfb3BzW10gPSB7XG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0yMDQ2MC1cdFx0LnZhbGlkYXRlID0gR0VOTF9ET05UX1ZBTElEQVRFX1NUUklDVCB8IEdFTkxfRE9OVF9WQUxJREFURV9EVU1QLFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzoyMDQ2MTpcdFx0LmRvaXQgPSBubDgwMjExX2V4dGVybmFsX2F1dGgsXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTIwNDYyLVx0XHQuZmxhZ3MgPSBHRU5MX0FETUlOX1BFUk0sXG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYz0yMzI1Nj12b2lkIG5sODAyMTFfc2VuZF9hcF9zdG9wcGVkKHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsIHVuc2lnbmVkIGludCBsaW5rX2lkKVxuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMjMyODctXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjIzMjg4OmludCBjZmc4MDIxMV9leHRlcm5hbF9hdXRoX3JlcXVlc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MjMyODk6XHRcdFx0XHQgICBzdHJ1Y3QgY2ZnODAyMTFfZXh0ZXJuYWxfYXV0aF9wYXJhbXMgKnBhcmFtcyxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMjMyOTAtXHRcdFx0XHQgICBnZnBfdCBnZnApXG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0yMzM0NS19XG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjIzMzQ2OkVYUE9SVF9TWU1CT0woY2ZnODAyMTFfZXh0ZXJuYWxfYXV0aF9yZXF1ZXN0KTtcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMjMzNDctXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTA5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxODo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MzE3OQoJCQkJCQkJb3V0cHV0OiA0OQoJCQkJCQkJdGhvdWdodHM6IDMxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgQnJvYWRjb20gV2ktRmkgRHJpdmVyIFBhdGNoKioKCk9rYXksIHNvIGBubDgwMjExX2V4dGVybmFsX2F1dGhgIGNhbGxzIGByZGV2X2V4dGVybmFsX2F1dGhgLCB3aGljaCBpbiB0dXJuIGNhbGxzIGByZGV2LSZndDtvcHMtJmd0O2V4dGVybmFsX2F1dGhgLiBUaGlzIG1lYW5zIHRoYXQgYGV4dGVybmFsX2F1dGhgIGZ1bmN0aW9uYWxpdHkgaXMgaW5kZWVkIGFjY2Vzc2libGUgZnJvbSB1c2VyIHNwYWNlLiBFeGNlbGxlbnQsIHRoYXQmIzM5O3Mgd2hhdCBJIG5lZWRlZCB0byBjb25maXJtLgoKVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBpcyBhIGZpeCBmb3IgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlIGluIGBicmNtZl9jeXdfZXh0ZXJuYWxfYXV0aGAuIFRoZSBjb2RlIG5vdyBpbml0aWFsaXplcyB0aGUgYGF1dGhfc3RhdHVzYCBzdHJ1Y3QsIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIHdoaWNoIGlzIGdvb2QuIFRoYXQmIzM5O3MgYSB0ZXh0Ym9vayBjYXNlIGZvciBmdXp6aW5nLgoKTXkgbmV4dCBzdGVwIGlzIHRvIG5haWwgZG93biB0aGUgcHJlY2lzZSBmdW5jdGlvbihzKSB0byB0YXJnZXQgd2l0aCB0aGUgZnV6emVyLiBJdCBsb29rcyBsaWtlIGBicmNtZl9jeXdfZXh0ZXJuYWxfYXV0aGAgaXMgdGhlIHByaW1hcnkgb25lIOKAkyB0aGUgcGF0Y2ggZm9jdXNlcyBzcGVjaWZpY2FsbHkgb24gdGhhdC4gTGV0JiMzOTtzIG1ha2Ugc3VyZSwgdGhvdWdoLiBBaCwgeWVzLCBqdXN0IGNoZWNrZWQg4oCTIHRoZSBmaWxlIGBkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L2NvcmUuY2Agb25seSBjb250YWlucyBjaGFuZ2VzIHRvIGBicmNtZl9jeXdfZXh0ZXJuYWxfYXV0aGAsIHdoaWNoIGlzIGV4YWN0bHkgd2hhdCBJIHdhcyBob3BpbmcgdG8gc2VlLgoKTm93LCBsZXQgbWUgbWFrZSBhIG5vdGUgb2YgdGhlIHJlcXVpcmVkIENPTkZJRyBvcHRpb25zLiBGcm9tIG15IHF1aWNrIHJldmlldywgSSYjMzk7bGwgbmVlZCBgQ09ORklHX0JSQ01GTUFDYCwgYW5kIHByb2JhYmx5IHRoZSByZWxldmFudCB0cmFuc3BvcnQgb3B0aW9uczogYENPTkZJR19CUkNNRk1BQ19QQ0lFYCwgYENPTkZJR19CUkNNRk1BQ19VU0JgLCBhbmQgYENPTkZJR19CUkNNRk1BQ19TRElPYC4gSSB3aWxsIGNvbmZpcm0gdGhlc2UgYnkgZG91YmxlLWNoZWNraW5nIHRoZSBgZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWdgIGZpbGUsIGJ1dCBJJiMzOTttIGNvbmZpZGVudCB0aG9zZSBhcmUgdGhlIGtleSBvbmVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTg6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJSQ01GTUFDJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWc6MTpjb25maWcgQlJDTUZNQUNcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnLTItXHR0cmlzdGF0ZSBcJiMzNDtCcm9hZGNvbSBGdWxsTUFDIFdMQU4gZHJpdmVyXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWctMTAtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZzoxMTpjb25maWcgQlJDTUZNQUNfUFJPVE9fQkNEQ1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWctMTItXHRib29sXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZy0xMy1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnOjE0OmNvbmZpZyBCUkNNRk1BQ19QUk9UT19NU0dCVUZcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnLTE1LVx0Ym9vbFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWctMTYtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZzoxNzpjb25maWcgQlJDTUZNQUNfU0RJT1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWctMTgtXHRib29sIFwmIzM0O1NESU8gYnVzIGludGVyZmFjZSBzdXBwb3J0IGZvciBGdWxsTUFDIGRyaXZlclwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnLTI4LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWc6Mjk6Y29uZmlnIEJSQ01GTUFDX1VTQlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWctMzAtXHRib29sIFwmIzM0O1VTQiBidXMgaW50ZXJmYWNlIHN1cHBvcnQgZm9yIEZ1bGxNQUMgZHJpdmVyXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWctMzktXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZzo0MDpjb25maWcgQlJDTUZNQUNfUENJRVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWctNDEtXHRib29sIFwmIzM0O1BDSUUgYnVzIGludGVyZmFjZSBzdXBwb3J0IGZvciBGdWxsTUFDIGRyaXZlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTg6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTQ1MzcKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAxMDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW1tZWRpYXRlIENvbnNpZGVyYXRpb25zIGZvciB0aGUgQlJDTUZNQUMgTW9kdWxlKioKCk9rYXksIHNvIHdlJiMzOTtyZSBkaXZpbmcgaW50byB0aGlzIGBCUkNNRk1BQ2AgbW9kdWxlIOKAkyB3aGljaCBtZWFucyB3ZSYjMzk7bGwgbmVlZCB0byBjb25zaWRlciBpdHMgdmFyaW91cyBpbnRlcmZhY2VzLCBzcGVjaWZpY2FsbHk6IGBCUkNNRk1BQ2AsIGBCUkNNRk1BQ19QQ0lFYCwgYEJSQ01GTUFDX1VTQmAsIGFuZCBpZGVhbGx5LCBmb3IgYnJvYWRlciBjb21wYXRpYmlsaXR5LCB3ZSBzaG91bGQgaW5jbHVkZSBgQlJDTUZNQUNfU0RJT2AuIAoKV2FpdCBhIG1pbnV0ZS4uLiBJIGhhdmUgYSBuYWdnaW5nIGZlZWxpbmcuIEFtIEkgcmlnaHQgaW4gdGhpbmtpbmcgYGJyY21mX2N5d19leHRlcm5hbF9hdXRoYCBnZXRzIHVuY29uZGl0aW9uYWxseSBidWlsdCBpbnRvIHRoZSBiaW5hcnkgaWYgd2UgZW5hYmxlIGBCUkNNRk1BQ2A/IFRoYXQgY291bGQgYmUgcHJvYmxlbWF0aWMgZGVwZW5kaW5nIG9uIHRoZSB1c2UtY2FzZS4gQmVzdCB0byBkb3VibGUtY2hlY2sgdGhlIE1ha2VmaWxlIHRvIGJlIHN1cmUuIFRpbWUgdG8gZ28gZGlnIHRocm91Z2ggYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9NYWtlZmlsZWAgYW5kIGNvbmZpcm0gdGhpcyBkZXBlbmRlbmN5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTg6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y3l3JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9NYWtlZmlsZT01NT1vYmotbSAmIzQzOz0gd2NjL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL01ha2VmaWxlOjU2Om9iai1tICYjNDM7PSBjeXcvXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvTWFrZWZpbGUtNTctb2JqLW0gJiM0Mzs9IGJjYS9cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvTWFrZWZpbGU9NTk9YnJjbWZtYWMtJChDT05GSUdfQlJDTUZNQUMpICYjNDM7PSB3Y2MvY29yZS5vXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvTWFrZWZpbGU6NjA6YnJjbWZtYWMtJChDT05GSUdfQlJDTUZNQUMpICYjNDM7PSBjeXcvY29yZS5vXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvTWFrZWZpbGUtNjEtYnJjbWZtYWMtJChDT05GSUdfQlJDTUZNQUMpICYjNDM7PSBiY2EvY29yZS5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxODo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NTE0MAoJCQkJCQkJb3V0cHV0OiA0NwoJCQkJCQkJdGhvdWdodHM6IDY3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIEtlcm5lbCBNb2R1bGUgQ29tcGlsYXRpb24gUHJvY2VzcyoqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJJiMzOTttIHNlZWluZyBgY3l3L2NvcmUub2AgYmVpbmcgY29tcGlsZWQgZGlyZWN0bHkgaW50byBgYnJjbWZtYWMua29gLi4uIHdoaWNoIGlzIGludGVyZXN0aW5nLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgd2hhdCYjMzk7cyBnb2luZyBvbiB3aXRoIHRoYXQgYGN5dy9gIGRpcmVjdG9yeT8gVGhlIHdheSBpdCYjMzk7cyByZWZlcmVuY2VkIHNlZW1zIHVudXN1YWwuIFdoeSBpc24mIzM5O3QgaXQgaGFuZGxlZCBzZXBhcmF0ZWx5LCBpZiBpdCB3ZXJlIGJ1aWx0IHNlcGFyYXRlbHksIGl0IHdvdWxkIGJlIGBvYmotbSAmIzQzOz0gY3l3L2AsIEkgdGhpbmsuIFRoaXMgd2FycmFudHMgYSBjbG9zZXIgbG9vayBhdCB0aGUgTWFrZWZpbGUuIExldCBtZSBjaGVjayB0aGUgc3BlY2lmaWNzOyBzcGVjaWZpY2FsbHksIGxldCYjMzk7cyBleGFtaW5lIHRoZSBgZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9NYWtlZmlsZWAuIFRoYXQgc2hvdWxkIGNsYXJpZnkgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE5OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0Oy4qJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L01ha2VmaWxlOjE6IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogSVNDXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L01ha2VmaWxlOjI6I1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9NYWtlZmlsZTozOiMgQ29weXJpZ2h0IChjKSAyMDIyIEJyb2FkY29tIENvcnBvcmF0aW9uXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L01ha2VmaWxlOjQ6XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L01ha2VmaWxlOjU6Y2NmbGFncy15ICYjNDM7PSBcXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9NYWtlZmlsZTo2Olx0LUkgJChzcmMpIFxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L01ha2VmaWxlOjc6XHQtSSAkKHNyYykvLi4gXFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvTWFrZWZpbGU6ODpcdC1JICQoc3JjKS8uLi8uLi9pbmNsdWRlXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L01ha2VmaWxlOjk6XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L01ha2VmaWxlOjEwOm9iai1tICYjNDM7PSBicmNtZm1hYy1jeXcub1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9NYWtlZmlsZToxMTpicmNtZm1hYy1jeXctb2JqcyAmIzQzOz0gXFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvTWFrZWZpbGU6MTI6XHRcdGNvcmUubyBtb2R1bGUub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTk6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTU4NjcKCQkJCQkJCW91dHB1dDogNDkKCQkJCQkJCXRob3VnaHRzOiAzMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBCdWlsZCBQcm9jZXNzIG9mIGBicmNtZm1hYy1jeXcua29gKioKCk9rYXksIHNvIEkgc2VlIHRoYXQgYGJyY21mbWFjLWN5dy5rb2AgaXMgYWN0dWFsbHkgYnVpbHQgYXMgYSBzZXBhcmF0ZSBtb2R1bGUsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBMZXQmIzM5O3MgZGVsdmUgaW50byB0aGUgbWFrZWZpbGVzIHRvIHVuZGVyc3RhbmQgdGhpcyBiZXR0ZXIuIExvb2tpbmcgYXQgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9NYWtlZmlsZWAsIEkgc2VlIGEgc2VjdGlvbiB3aGVyZSBpdCBzZWVtcyB0byBpbmNsdWRlIHBhcnRzOgoKYGBgbWFrZWZpbGUKb2JqLW0gJiM0Mzs9IHdjYy8Kb2JqLW0gJiM0Mzs9IGN5dy8Kb2JqLW0gJiM0Mzs9IGJjYS8KCmJyY21mbWFjLSQoQ09ORklHX0JSQ01GTUFDKSAmIzQzOz0gd2NjL2NvcmUubwpicmNtZm1hYy0kKENPTkZJR19CUkNNRk1BQykgJiM0Mzs9IGN5dy9jb3JlLm8KYnJjbWZtYWMtJChDT05GSUdfQlJDTUZNQUMpICYjNDM7PSBiY2EvY29yZS5vCmBgYAoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgaWYgYENPTkZJR19CUkNNRk1BQ2AgaXMgc2V0IHRvICYjMzk7eSYjMzk7LCB3aWxsIHRoZSBidWlsZCBwcm9jZXNzIGdlbmVyYXRlIGBicmNtZm1hYy1jeXcub2A/IEl0IHNlZW1zIGxpa2UgYGJyY21mbWFjLXlgIGluY2x1ZGVzIGBjeXcvY29yZS5vYCB3aGVuIGBDT05GSUdfQlJDTUZNQUM9eWAuIEhvd2V2ZXIsIHRoZSBuZXN0ZWQgYGN5dy9NYWtlZmlsZWAgc3BlY2lmaWVzIHRoYXQgaXQgc2hvdWxkIGdlbmVyYXRlIGBicmNtZm1hYy1jeXcua29gLCBhbmQgbm90IGAub2AuCgpUaGlua2luZyBtb3JlIGNsZWFybHksIGBvYmotbSAmIzQzOz0gY3l3L2AgaW4gdGhlIHBhcmVudCBNYWtlZmlsZSBtZWFucyB0aGF0IGl0IHdpbGwgZGVzY2VuZCBpbnRvIGBjeXcvYCBhbmQgYXR0ZW1wdCB0byBidWlsZCB3aGF0ZXZlciBpcyBzcGVjaWZpZWQgYnkgYG9iai1tYCAqdGhlcmUqLiBCdXQgSSBhbSBhc3N1bWluZyB0aGUgYnVpbGQgc3lzdGVtIHVzZXMgaXQgcHJvcGVybHksIGFzIGBvYmotJChDT05GSUdfQlJDTUZNQUMpYCBpbiB0aGlzIGluc3RhbmNlLCBtZWFucyB0aGF0IHRoZSBpbmNsdXNpb24gaW4gdGhlIGtlcm5lbCBpcyBkb25lIGluIGFub3RoZXIgd2F5LgoKSSB0aGluayBJIG5lZWQgdG8gcmUtZXhhbWluZSB0aGUgbWFrZWZpbGUgaW4gYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9NYWtlZmlsZWAgYWdhaW4sIHRvIGNsYXJpZnkgdGhpcyBidWlsZCBwcm9jZWR1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxOTowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9NYWtlZmlsZSYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IElTQ1xuICAgMjpcdCNcbiAgIDM6XHQjIE1ha2VmaWxlIGZyYWdtZW50IGZvciBCcm9hZGNvbSA4MDIuMTEgTmV0d29ya2luZyBEZXZpY2UgRHJpdmVyXG4gICA0Olx0I1xuICAgNTpcdCMgQ29weXJpZ2h0IChjKSAyMDEwIEJyb2FkY29tIENvcnBvcmF0aW9uXG4gICA2Olx0I1xuICAgNzpcdFxuICAgODpcdGNjZmxhZ3MteSAmIzQzOz0gXFxcbiAgIDk6XHRcdC1JICQoc3JjKSBcXFxuICAxMDpcdFx0LUkgJChzcmMpLy4uL2luY2x1ZGVcbiAgMTE6XHRcbiAgMTI6XHRvYmotJChDT05GSUdfQlJDTUZNQUMpICYjNDM7PSBicmNtZm1hYy5vXG4gIDEzOlx0YnJjbWZtYWMtb2JqcyAmIzQzOz0gXFxcbiAgMTQ6XHRcdFx0Y2ZnODAyMTEubyBcXFxuICAxNTpcdFx0XHRjaGlwLm8gXFxcbiAgMTY6XHRcdFx0ZndpbC5vIFxcXG4gIDE3Olx0XHRcdGZ3ZWgubyBcXFxuICAxODpcdFx0XHRwMnAubyBcXFxuICAxOTpcdFx0XHRwcm90by5vIFxcXG4gIDIwOlx0XHRcdGNvbW1vbi5vIFxcXG4gIDIxOlx0XHRcdGNvcmUubyBcXFxuICAyMjpcdFx0XHRmaXJtd2FyZS5vIFxcXG4gIDIzOlx0XHRcdGZ3dmlkLm8gXFxcbiAgMjQ6XHRcdFx0ZmVhdHVyZS5vIFxcXG4gIDI1Olx0XHRcdGJ0Y29leC5vIFxcXG4gIDI2Olx0XHRcdHZlbmRvci5vIFxcXG4gIDI3Olx0XHRcdHBuby5vIFxcXG4gIDI4Olx0XHRcdHh0bHYub1xuICAyOTpcdGJyY21mbWFjLSQoQ09ORklHX0JSQ01GTUFDX1BST1RPX0JDREMpICYjNDM7PSBcXFxuICAzMDpcdFx0XHRiY2RjLm8gXFxcbiAgMzE6XHRcdFx0ZndzaWduYWwub1xuICAzMjpcdGJyY21mbWFjLSQoQ09ORklHX0JSQ01GTUFDX1BST1RPX01TR0JVRikgJiM0Mzs9IFxcXG4gIDMzOlx0XHRcdGNvbW1vbnJpbmcubyBcXFxuICAzNDpcdFx0XHRmbG93cmluZy5vIFxcXG4gIDM1Olx0XHRcdG1zZ2J1Zi5vXG4gIDM2Olx0YnJjbWZtYWMtJChDT05GSUdfQlJDTUZNQUNfU0RJTykgJiM0Mzs9IFxcXG4gIDM3Olx0XHRcdHNkaW8ubyBcXFxuICAzODpcdFx0XHRiY21zZGgub1xuICAzOTpcdGJyY21mbWFjLSQoQ09ORklHX0JSQ01GTUFDX1VTQikgJiM0Mzs9IFxcXG4gIDQwOlx0XHRcdHVzYi5vXG4gIDQxOlx0YnJjbWZtYWMtJChDT05GSUdfQlJDTUZNQUNfUENJRSkgJiM0Mzs9IFxcXG4gIDQyOlx0XHRcdHBjaWUub1xuICA0MzpcdGJyY21mbWFjLSQoQ09ORklHX0JSQ01EQkcpICYjNDM7PSBcXFxuICA0NDpcdFx0XHRkZWJ1Zy5vXG4gIDQ1Olx0YnJjbWZtYWMtJChDT05GSUdfQlJDTV9UUkFDSU5HKSAmIzQzOz0gXFxcbiAgNDY6XHRcdFx0dHJhY2Vwb2ludC5vXG4gIDQ3Olx0YnJjbWZtYWMtJChDT05GSUdfT0YpICYjNDM7PSBcXFxuICA0ODpcdFx0XHRvZi5vXG4gIDQ5Olx0YnJjbWZtYWMtJChDT05GSUdfRE1JKSAmIzQzOz0gXFxcbiAgNTA6XHRcdFx0ZG1pLm9cbiAgNTE6XHRicmNtZm1hYy0kKENPTkZJR19BQ1BJKSAmIzQzOz0gXFxcbiAgNTI6XHRcdFx0YWNwaS5vXG4gIDUzOlx0XG4gIDU0Olx0aWZlcSAoJChDT05GSUdfQlJDTUZNQUMpLG0pXG4gIDU1Olx0b2JqLW0gJiM0Mzs9IHdjYy9cbiAgNTY6XHRvYmotbSAmIzQzOz0gY3l3L1xuICA1NzpcdG9iai1tICYjNDM7PSBiY2EvXG4gIDU4Olx0ZWxzZVxuICA1OTpcdGJyY21mbWFjLSQoQ09ORklHX0JSQ01GTUFDKSAmIzQzOz0gd2NjL2NvcmUub1xuICA2MDpcdGJyY21mbWFjLSQoQ09ORklHX0JSQ01GTUFDKSAmIzQzOz0gY3l3L2NvcmUub1xuICA2MTpcdGJyY21mbWFjLSQoQ09ORklHX0JSQ01GTUFDKSAmIzQzOz0gYmNhL2NvcmUub1xuICA2MjpcdGVuZGlmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxOTowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NzUyMgoJCQkJCQkJb3V0cHV0OiA1NAoJCQkJCQkJdGhvdWdodHM6IDE5NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIHRoZSBicmNtZm1hYyBNb2R1bGUgQnVpbGQgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBoZXJlJiMzOTtzIHdoYXQmIzM5O3MgcnVubmluZyB0aHJvdWdoIG15IGhlYWQgYWJvdXQgdGhpcyBgYnJjbWZtYWNgIGJ1aWxkIHN5c3RlbS4gSXQgc2VlbXMgbGlrZSB0aGUgY29uZmlndXJhdGlvbiBgQ09ORklHX0JSQ01GTUFDPW1gIGNhdXNlcyB0aGUgYnVpbGQgc3lzdGVtIHRvIHRyZWF0IHRoZSBgd2NjL2AsIGBjeXcvYCwgYW5kIGBiY2EvYCBzdWJkaXJlY3RvcmllcyBhcyBkaXN0aW5jdCBtb2R1bGVzLiAgVGhhdCYjMzk7cyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLiBCdXQgd2hlbiBgQ09ORklHX0JSQ01GTUFDPXlgLCB0aGluZ3MgZ2V0IGEgbGl0dGxlIGxlc3MgY2xlYXIuIEl0IGxvb2tzIGxpa2UgYGN5dy9jb3JlLm9gIGlzIGxpbmtlZCBkaXJlY3RseSBpbnRvIGBicmNtZm1hYy5vYC4gIFRoYXQgc3VnZ2VzdHMgYSBtb25vbGl0aGljIGFwcHJvYWNoIGluIHRoYXQgY2FzZS4KCkJ1dCBoZXJlJiMzOTtzIHdoZXJlIG15IGV4cGVydCBpbnN0aW5jdHMgc3RhcnQgdGluZ2xpbmcuIElmIGBjb3JlLm9gIGlzIGRpcmVjdGx5IGxpbmtlZCwgd2hhdCBhYm91dCBgY3l3L21vZHVsZS5vYD8gVGhhdCYjMzk7cyB0aGUgZmlsZSBJJiMzOTtkIGV4cGVjdCB0byBoYW5kbGUgbW9kdWxlIGluaXRpYWxpemF0aW9uLiBTcGVjaWZpY2FsbHksIGl0IHNob3VsZCBjb250YWluIGBicmNtZl9jeXdfaW5pdGAsIGFuZCB0aGF0JiMzOTtzIHRoZSBmdW5jdGlvbiB0aGF0IHByZXN1bWFibHkgcmVnaXN0ZXJzIHRoZSB2ZW5kb3IuCgpXYWl0IGEgc2Vjb25kLi4uIGlmIGBDT05GSUdfQlJDTUZNQUM9eWAsIGBjeXcvbW9kdWxlLm9gIGlzbiYjMzk7dCBldmVuIGNvbXBpbGVkISBTbyBob3cgaXMgdGhlIHZlbmRvciBiZWluZyByZWdpc3RlcmVkIGF0IGFsbCB1bmRlciB0aGF0IGNvbmZpZ3VyYXRpb24/IFRoaXMgaXMgYSBjcml0aWNhbCBwb2ludC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBkcml2ZXIgaXMgY29ycmVjdGx5IGluaXRpYWxpemVkLiBUaGUgaW5pdGlhbGl6YXRpb24gd291bGQgYmUgY3J1Y2lhbC4gVGhhdCBzdWdnZXN0cyB0aGF0IHRoZSB2ZW5kb3IgaW5pdGlhbGl6YXRpb24gaXMgbW92ZWQgdG8gdGhlIGNvcmUgb3Igc29tZSBvdGhlciBtb2R1bGUuCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBjb2RlLiAgSSYjMzk7bSBnb2luZyB0byBjaGVjayBgZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Z3dmlkLmNgLiBUaGF0IHNlZW1zIGxpa2UgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gbG9vayBmb3IgdmVuZG9yIElEIGhhbmRsaW5nLCBnaXZlbiB0aGUgbmFtZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxOTowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JyY21mX2N5d19vcHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZnd2aWQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxOTowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1ODE0NAoJCQkJCQkJb3V0cHV0OiA0OAoJCQkJCQkJdGhvdWdodHM6IDM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZToKCioqRGl2aW5nIGludG8gdGhlIEJyb2FkY29tIFdpcmVsZXNzIEZpcm13YXJlIFZpZGVvIERyaXZlcioqCgpSaWdodCwgc28gSSBuZWVkIHRvIGdldCBpbnRvIHRoZSBkZXRhaWxzIG9mIGhvdyB0aGlzIEJyb2FkY29tIHdpcmVsZXNzIGNoaXAgaGFuZGxlcyB2aWRlbyBzdHJlYW1pbmcsIG9yIGF0IGxlYXN0IGhvdyBpdCBtaWdodCAqcmVsYXRlKiB0byB2aWRlbyBzdHJlYW1pbmcuIFRoZSBtZW50aW9uIG9mIGBjeXdgIGltbWVkaWF0ZWx5IGRpcmVjdHMgbXkgYXR0ZW50aW9uIHRvd2FyZHMgdGhlIGBkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZnd2aWQuY2AgZmlsZS4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgSSYjMzk7ZCBleHBlY3QgdGhhdCBgZnd2aWQuY2AgbGlrZWx5IGhhbmRsZXMgZmlybXdhcmUtc3BlY2lmaWMgdmlkZW8tcmVsYXRlZCBmdW5jdGlvbmFsaXR5IHdpdGhpbiB0aGUgYGJyY21mbWFjYCBkcml2ZXIsIHdoaWNoIGlzIGNydWNpYWwgZm9yIGludGVyYWN0aW5nIHdpdGggdGhvc2UgQnJvYWRjb20gODAyLjExIGNoaXBzLiBOb3cgdGhlIHF1ZXN0aW9uIGlzLCB3aGF0IGNhbiBiZSBmb3VuZCBjb25jZXJuaW5nIGBjeXdgIGFuZCBpdHMgcGxhY2UgaW4gdGhpcyBwYXJ0aWN1bGFyIGRyaXZlcj8gTGlrZWx5IGxvb2tpbmcgZm9yIHJlZmVyZW5jZXMgYW5kIGhvdyB2aWRlbyBkYXRhIGlzIHRyZWF0ZWQgaXMgdGhlIG5leHQgc3RlcC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE5OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2N5dyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9md3ZpZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9md3ZpZC5jLTIxLSNpbmNsdWRlIFwmIzM0O3djYy92b3BzLmhcJiMzNDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9md3ZpZC5jOjIyOiNpbmNsdWRlIFwmIzM0O2N5dy92b3BzLmhcJiMzNDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9md3ZpZC5jLTIzLSNpbmNsdWRlIFwmIzM0O2JjYS92b3BzLmhcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZnd2aWQuYz01Mz1zdGF0aWMgc3RydWN0IGJyY21mX2Z3dmlkX2VudHJ5IGZ3dmlkX2xpc3RbQlJDTUZfRldWRU5ET1JfTlVNXSA9IHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9md3ZpZC5jLTU0LVx0RldWSURfRU5UUllfSU5JVChXQ0MsIHdjYyksXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZnd2aWQuYzo1NTpcdEZXVklEX0VOVFJZX0lOSVQoQ1lXLCBjeXcpLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Z3dmlkLmMtNTYtXHRGV1ZJRF9FTlRSWV9JTklUKEJDQSwgYmNhKSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE5OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU4NzU5CgkJCQkJCQlvdXRwdXQ6IDU1CgkJCQkJCQl0aG91Z2h0czogMTQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRmlybXdhcmUgVmlkZW8gSW5pdGlhbGl6YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyB0aGUgYEZXVklEX0VOVFJZX0lOSVQoQ1lXLCBjeXcpYCBtYWNybyB3b3Jrcywgc3BlY2lmaWNhbGx5IGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgYENZV19WT1BTYCB2YXJpYWJsZS4gSXQgbG9va3MgbGlrZSBgQ1lXX1ZPUFNgIGRpcmVjdGx5IGNhbGxzIGAmYW1wO2JyY21mX2N5d19vcHNgLCB3aGljaCwgaWYgSSByZWNhbGwgY29ycmVjdGx5LCBpcyBkZWZpbmVkIGluIGBjeXcvdm9wcy5oYC4gU28gZmFyLCBzbyBnb29kLgoKSXQgc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCB0aGF0IGlmIGBDT05GSUdfQlJDTUZNQUNgIGlzIHNldCB0byAmIzM5O3kmIzM5OywgdGhlbiBgZnd2aWRfbGlzdGAgZ2V0cyBpbml0aWFsaXplZCB3aXRoIGAmYW1wO2JyY21mX2N5d19vcHNgIGRpcmVjdGx5LiBObyBzdXJwcmlzZXMgdGhlcmUuIFRoYXQmIzM5O3MgdGhlIGV4cGVjdGVkIGJlaGF2aW9yLgoKQnV0IGhlcmUmIzM5O3Mgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZy4gSWYgYENPTkZJR19CUkNNRk1BQ2AgaXMgc2V0IHRvICYjMzk7bSYjMzk7LCB0aGVuIGBmd3ZpZF9saXN0YCBpcyBpbml0aWFsaXplZCB3aXRoIGBOVUxMYC4gVGhhdCYjMzk7cyBiZWNhdXNlIHdoZW4gYE1PRFVMRWAgaXMgZGVmaW5lZCwgYENZV19WT1BTYCBzZWVtcyB0byBiZSBzZXQgdG8gYE5VTExgLiBJIHdvbmRlciB3aHkgdGhhdCYjMzk7cyB0aGUgY2FzZS4gSXQgbG9va3MgbGlrZSBJIG5lZWQgdG8gZGlnIGludG8gYGN5dy92b3BzLmhgIGFuZCBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcgdGhlcmUgd2l0aCB0aG9zZSBjb25kaXRpb25hbCBkZWZpbml0aW9ucy4gSXQmIzM5O3MgbGlrZWx5IGEgbW9kdWxhcml0eSBpc3N1ZSwgYnV0IEkgbmVlZCB0byBjb25maXJtIHRoZSB1bmRlcmx5aW5nIGxvZ2ljLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGhlYWRlciByZXZlYWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTk6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L3ZvcHMuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdC8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBJU0MgKi9cbiAgIDI6XHQvKlxuICAgMzpcdCAqIENvcHlyaWdodCAoYykgMjAyMiBCcm9hZGNvbSBDb3Jwb3JhdGlvblxuICAgNDpcdCAqL1xuICAgNTpcdCNpZm5kZWYgX0JSQ01GTUFDX0NZV19WT1BTX0hcbiAgIDY6XHQjZGVmaW5lIF9CUkNNRk1BQ19DWVdfVk9QU19IXG4gICA3Olx0XG4gICA4Olx0ZXh0ZXJuIGNvbnN0IHN0cnVjdCBicmNtZl9md3ZpZF9vcHMgYnJjbWZfY3l3X29wcztcbiAgIDk6XHQjZGVmaW5lIENZV19WT1BTXHQoXHUwMDI2YnJjbWZfY3l3X29wcylcbiAgMTA6XHRcbiAgMTE6XHQjZW5kaWYgLyogX0JSQ01GTUFDX0NZV19WT1BTX0ggKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE5OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU5NDIyCgkJCQkJCQlvdXRwdXQ6IDUzCgkJCQkJCQl0aG91Z2h0czogMTQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQlJDTUZNQUMgRHJpdmVyIEluaXRpYWxpemF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBzZWUuLi4gdGhlIGBDWVdfVk9QU2AgbWFjcm8gKmFsd2F5cyogZXhwYW5kcyB0byBgJmFtcDticmNtZl9jeXdfb3BzYC4gVGhhdCBzZWVtcyBzdHJhaWdodGZvcndhcmQuIFNvLCB0aGUgYGZ3dmlkX2xpc3RgIHN0cnVjdHVyZSBpcyBpbnZhcmlhYmx5IGluaXRpYWxpemVkIHVzaW5nIGAmYW1wO2JyY21mX2N5d19vcHNgLiBUaGF0JiMzOTtzIGEga2V5IG9ic2VydmF0aW9uLiBOb3csIEkgbmVlZCB0byBjb25zaWRlciBhIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gc2NlbmFyaW8uCgpJZiB0aGUgbW9kdWxlIGlzIGNvbXBpbGVkICggYENPTkZJR19CUkNNRk1BQz1tYCApLCB0aGUgYGN5dy9jb3JlLm9gIG9iamVjdCBmaWxlIGlzICpub3QqIGxpbmtlZCBkaXJlY3RseSBpbnRvIGBicmNtZm1hYy5vYC4gVGhpcyB0cmlnZ2VycyBhIGNvbmNlcm4hIElmIGBjeXcvY29yZS5vYCBpcyBub3QgbGlua2VkLCB0aGVuIGBicmNtZl9jeXdfb3BzYCB3aWxsIGJlIGFuIHVuZGVmaW5lZCBzeW1ib2wgd2hlbiB0aGUgZHJpdmVyIG1vZHVsZSAoYGJyY21mbWFjLmtvYCkgaXMgbG9hZGVkLiBUaGlzIGlzIGEgcG90ZW50aWFsIGxpbmtlciBlcnJvciwgaWYgdGhhdCBpcyB0aGUgb25seSBvYmplY3QgZmlsZSB0aGF0IGRlZmluZXMgdGhlIHN5bWJvbC4KClJpZ2h0LCBJIG5lZWQgdG8gcmV2aXNpdCB0aGUgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9md3ZpZC5jYCBmaWxlIGFnYWluLiBJdCYjMzk7cyB0aW1lIHRvIGNvbmZpcm0gdGhhdCBteSBpbnRlcnByZXRhdGlvbiBpcyBjb3JyZWN0IGFuZCBkZXRlcm1pbmUgaG93IHRoZSBkZXBlbmRlbmN5IGlzIG1hbmFnZWQuIFRoZXJlIGlzIGEgcG90ZW50aWFsIGJ1ZyBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTk6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZnd2aWQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMjA6XHRcbiAgMjE6XHQjaW5jbHVkZSBcJiMzNDt3Y2Mvdm9wcy5oXCYjMzQ7XG4gIDIyOlx0I2luY2x1ZGUgXCYjMzQ7Y3l3L3ZvcHMuaFwmIzM0O1xuICAyMzpcdCNpbmNsdWRlIFwmIzM0O2JjYS92b3BzLmhcJiMzNDtcbiAgMjQ6XHRcbiAgMjU6XHRzdHJ1Y3QgYnJjbWZfZnd2aWRfZW50cnkge1xuICAyNjpcdFx0Y29uc3QgY2hhciAqbmFtZTtcbiAgMjc6XHRcdGNvbnN0IHN0cnVjdCBicmNtZl9md3ZpZF9vcHMgKnZvcHM7XG4gIDI4Olx0XHRzdHJ1Y3QgbGlzdF9oZWFkIGRydnJfbGlzdDtcbiAgMjk6XHQjaWYgSVNfTU9EVUxFKENPTkZJR19CUkNNRk1BQylcbiAgMzA6XHRcdHN0cnVjdCBtb2R1bGUgKnZtb2Q7XG4gIDMxOlx0XHRzdHJ1Y3QgY29tcGxldGlvbiByZWdfZG9uZTtcbiAgMzI6XHQjZW5kaWZcbiAgMzM6XHR9O1xuICAzNDpcdFxuICAzNTpcdHN0YXRpYyBERUZJTkVfTVVURVgoZnd2aWRfbGlzdF9sb2NrKTtcbiAgMzY6XHRcbiAgMzc6XHQjaWYgSVNfTU9EVUxFKENPTkZJR19CUkNNRk1BQylcbiAgMzg6XHQjZGVmaW5lIEZXVklEX0VOVFJZX0lOSVQoX3ZpZCwgX25hbWUpIFxcXG4gIDM5Olx0XHRbQlJDTUZfRldWRU5ET1JfICMjIF92aWRdID0geyBcXFxuICA0MDpcdFx0XHQubmFtZSA9ICNfbmFtZSwgXFxcbiAgNDE6XHRcdFx0LnJlZ19kb25lID0gQ09NUExFVElPTl9JTklUSUFMSVpFUihmd3ZpZF9saXN0W0JSQ01GX0ZXVkVORE9SXyAjIyBfdmlkXS5yZWdfZG9uZSksIFxcXG4gIDQyOlx0XHRcdC5kcnZyX2xpc3QgPSBMSVNUX0hFQURfSU5JVChmd3ZpZF9saXN0W0JSQ01GX0ZXVkVORE9SXyAjIyBfdmlkXS5kcnZyX2xpc3QpLCBcXFxuICA0MzpcdFx0fVxuICA0NDpcdCNlbHNlXG4gIDQ1Olx0I2RlZmluZSBGV1ZJRF9FTlRSWV9JTklUKF92aWQsIF9uYW1lKSBcXFxuICA0NjpcdFx0W0JSQ01GX0ZXVkVORE9SXyAjIyBfdmlkXSA9IHsgXFxcbiAgNDc6XHRcdFx0Lm5hbWUgPSAjX25hbWUsIFxcXG4gIDQ4Olx0XHRcdC5kcnZyX2xpc3QgPSBMSVNUX0hFQURfSU5JVChmd3ZpZF9saXN0W0JSQ01GX0ZXVkVORE9SXyAjIyBfdmlkXS5kcnZyX2xpc3QpLCBcXFxuICA0OTpcdFx0XHQudm9wcyA9IF92aWQgIyMgX1ZPUFMgXFxcbiAgNTA6XHRcdH1cbiAgNTE6XHQjZW5kaWYgLyogSVNfTU9EVUxFKENPTkZJR19CUkNNRk1BQykgKi9cbiAgNTI6XHRcbiAgNTM6XHRzdGF0aWMgc3RydWN0IGJyY21mX2Z3dmlkX2VudHJ5IGZ3dmlkX2xpc3RbQlJDTUZfRldWRU5ET1JfTlVNXSA9IHtcbiAgNTQ6XHRcdEZXVklEX0VOVFJZX0lOSVQoV0NDLCB3Y2MpLFxuICA1NTpcdFx0RldWSURfRU5UUllfSU5JVChDWVcsIGN5dyksXG4gIDU2Olx0XHRGV1ZJRF9FTlRSWV9JTklUKEJDQSwgYmNhKSxcbiAgNTc6XHR9O1xuICA1ODpcdFxuICA1OTpcdCNpZiBJU19NT0RVTEUoQ09ORklHX0JSQ01GTUFDKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTk6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjA1NDgKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA3MzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBicmNtZl9jeXdfZXh0ZXJuYWxfYXV0aCBGdW5jdGlvbiBmb3IgRnV6emluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGBGV1ZJRF9FTlRSWV9JTklUYCBtYWNybyBhbmQgaG93IGl0JiMzOTtzIHVzZWQgd2l0aCBCcm9hZGNvbSYjMzk7cyBmaXJtd2FyZSBkcml2ZXJzLiBJdCBsb29rcyBsaWtlIHRoZSBgX3ZpZCAjIyBfVk9QU2Agc3RydWN0dXJlIGlzIG9ubHkgZGlyZWN0bHkgaW5pdGlhbGl6ZWQgaWYgYCFJU19NT0RVTEUoQ09ORklHX0JSQ01GTUFDKWAuIElmIGBCUkNNRk1BQ2AgKmlzKiBhIG1vZHVsZSAoZWl0aGVyICYjMzk7eSYjMzk7IG9yICYjMzk7bSYjMzk7KSwgdGhlIGB2b3BzYCBwb2ludGVyIGlzIGluaXRpYWxseSBgTlVMTGAsIGFuZCB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGZ1bmN0aW9uIHBvaW50ZXJzIGlzIGRlZmVycmVkIHRvIGBicmNtZl9md3ZpZF9yZWdpc3Rlcl92ZW5kb3JgLCBjYWxsZWQgZnJvbSBgY3l3L21vZHVsZS5jYC4gIFNpbmNlIFN5emthbGxlciB0eXBpY2FsbHkgYnVpbGRzIHdpdGggYHlgLCBhbmQgd2Ugd2FudCB0byBlbnN1cmUgdGhlIGJ1c2VzIGFyZSBlbmFibGVkLCBJJiMzOTtsbCBkZWZpbml0ZWx5IG5lZWQgYENPTkZJR19CUkNNRk1BQz15YCBvciBgQ09ORklHX0JSQ01GTUFDPW1gLiBJIGFsc28gbmVlZCB0byBpbmNsdWRlIGBCUkNNRk1BQ19QQ0lFYCwgYEJSQ01GTUFDX1VTQmAsIGFuZCBqdXN0IHRvIGJlIHNhZmUsIGBCUkNNRk1BQ19TRElPYC4gIE9mIGNvdXJzZSwgYENGRzgwMjExYCBpcyBlc3NlbnRpYWwgYmVjYXVzZSBgQlJDTUZNQUNgIHJlcXVpcmVzIGl0LiBHb29kLCBubyBuZWVkIGZvciBgTUFDODAyMTFgIGFzIGBCUkNNRk1BQ2AgaXMgYSBGdWxsTUFDIGRyaXZlci4gU28sIHRoZSBrZXkgY29uZmlncyBmb3IgZnV6emluZyBhcmUgYEJSQ01GTUFDYCwgYEJSQ01GTUFDX1BDSUVgLCBgQlJDTUZNQUNfVVNCYCwgYW5kIGBCUkNNRk1BQ19TRElPYC4KCk5vdywgbGV0JiMzOTtzIHN3aXRjaCBnZWFycyBhbmQgZm9jdXMgb24gdGhlIHNwZWNpZmljIGZ1bmN0aW9uLiBUaGUgY29kZSBtZW50aW9ucyB0aGF0IGBicmNtZl9jeXdfZXh0ZXJuYWxfYXV0aGAgaXMgdGhlIG9uZSB0aGF0JiMzOTtzIGJlZW4gbW9kaWZpZWQuIEFyZSB0aGVyZSBhbnkgb3RoZXIgcmVsZXZhbnQgZnVuY3Rpb25zLCBuby4KCkhtbSwgbGV0JiMzOTtzIGRvdWJsZS1jaGVjayBpZiBgYnJjbWZfY3l3X2V4dGVybmFsX2F1dGhgIGlzIGRlY2xhcmVkIGFzIGBzdGF0aWNgLiBZZXMsIGl0IGlzLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nIGJlY2F1c2Ugc3RhdGljIGZ1bmN0aW9ucyBjYW4gc29tZXRpbWVzIGJlIGlubGluZWQsIGFuZCBpZiB0aGF0IGhhcHBlbnMsIFN5emthbGxlciB3b24mIzM5O3QgYmUgYWJsZSB0byB0YXJnZXQgdGhlbSBlZmZlY3RpdmVseS4gIEhvd2V2ZXIsIHRoaXMgZnVuY3Rpb24gaXMgYXNzaWduZWQgdG8gYSBmdW5jdGlvbiBwb2ludGVyIChgZHJ2ci0mZ3Q7b3BzLSZndDtleHRlcm5hbF9hdXRoID0gYnJjbWZfY3l3X2V4dGVybmFsX2F1dGg7YCkuIEJlY2F1c2Ugb2YgdGhpcyBhc3NpZ25tZW50LCB0aGUgY29tcGlsZXIgKm11c3QqIGdlbmVyYXRlIGEgZGlzdGluY3QgZnVuY3Rpb24gYm9keSBmb3IgaXQsIHNvIGl0IGNhbiYjMzk7dCBiZSBpbmxpbmVkLiBFdmVuIHRob3VnaCBpdCYjMzk7cyBzdGF0aWMsIGl0cyBhZGRyZXNzIGlzIHRha2VuLCBzbyBpdCAqd2lsbCogaGF2ZSBhIGRpc3RpbmN0IHN5bWJvbCBpbiBga2FsbHN5bXNgIChlLmcuLCBgYnJjbWZfY3l3X2V4dGVybmFsX2F1dGhgKS4gQnV0IFN5emthbGxlciYjMzk7cyBgRm9jdXNTeW1ib2xzYCBpcyB0eXBpY2FsbHkgZ2VhcmVkIHRvd2FyZHMgbm9uLXN0YXRpYyBmdW5jdGlvbnMuIElzIHRoZXJlIGEgbm9uLXN0YXRpYyB3cmFwcGVyIHRoYXQgd2UgY2FuIHVzZT8KCkFoLCBoZXJlJiMzOTtzIGEgZ29vZCBmaW5kISBgbmw4MDIxMV9leHRlcm5hbF9hdXRoYCBpcyB0aGUgbmV0bGluayBoYW5kbGVyLCB3aGljaCAqaXNuJiMzOTt0KiBzdGF0aWMuIGBjZmc4MDIxMV9leHRlcm5hbF9hdXRoX3JlcXVlc3RgIGlzIGFuIGV4cG9ydGVkIGZ1bmN0aW9uLCBidXQgdGhhdCYjMzk7cyBmb3IgdGhlIGRyaXZlciB0byBjYWxsLCBub3QgdGhlIG90aGVyIHdheSBhcm91bmQsIHNvIGl0JiMzOTtzIG5vdCB3aGF0IHdlIG5lZWQuIFdhaXQgYSBzZWNvbmQsIHRoZSBgbmw4MDIxMV9leHRlcm5hbF9hdXRoYCBmdW5jdGlvbiBjYWxscyBgcmRldl9leHRlcm5hbF9hdXRoYCB3aGljaCBpcyBhbiBpbmxpbmUgZnVuY3Rpb24gZGVmaW5lZCBpbiBgbmV0L3dpcmVsZXNzL2NvcmUuaGAuIFNvIGBubDgwMjExX2V4dGVybmFsX2F1dGhgIGlzIGFuIGV4Y2VsbGVudCBub24tc3RhdGljIGVudHJ5IHBvaW50LiBBbmQgYGJyY21mX2N5d19leHRlcm5hbF9hdXRoYCBpdHNlbGYgd2lsbCBhbHNvIGJlIGEgdmFsaWQgdGFyZ2V0IGJlY2F1c2UgaXQgaXMgcmVmZXJlbmNlZCB2aWEgYSBmdW5jdGlvbiBwb2ludGVyLgoKT2theSwgbGV0JiMzOTtzIHR1cm4gb3VyIGF0dGVudGlvbiB0byBgbmw4MDIxMV9leHRlcm5hbF9hdXRoYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE5OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25sODAyMTFfZXh0ZXJuYWxfYXV0aCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzL25sODAyMTEuYz0xODQ2OT1zdGF0aWMgaW50IG5sODAyMTFfZGVsX3BtayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTg0OTAtXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjE4NDkxOnN0YXRpYyBpbnQgbmw4MDIxMV9leHRlcm5hbF9hdXRoKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE4NDkyLXtcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTE5NzI5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9zbWFsbF9vcHMgbmw4MDIxMV9zbWFsbF9vcHNbXSA9IHtcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTIwNDYwLVx0XHQudmFsaWRhdGUgPSBHRU5MX0RPTlRfVkFMSURBVEVfU1RSSUNUIHwgR0VOTF9ET05UX1ZBTElEQVRFX0RVTVAsXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjIwNDYxOlx0XHQuZG9pdCA9IG5sODAyMTFfZXh0ZXJuYWxfYXV0aCxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMjA0NjItXHRcdC5mbGFncyA9IEdFTkxfQURNSU5fUEVSTSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE5OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYyMzk3CgkJCQkJCQlvdXRwdXQ6IDU2CgkJCQkJCQl0aG91Z2h0czogNDUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTmV0bGluayBhbmQgQlJDTUYgRXh0ZXJuYWwgQXV0aGVudGljYXRpb24gQ29kZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBmaXJzdCB0aGluZyBJJiMzOTttIG5vdGljaW5nIGlzIHRoYXQgYG5sODAyMTFfZXh0ZXJuYWxfYXV0aGAgaXMgYWxzbyBzdGF0aWMhIEludGVyZXN0aW5nLiBXYWl0LCB0aGUgYGdlbmxfc21hbGxfb3BzYCBzdHJ1Y3R1cmUgdGFrZXMgaXRzIGFkZHJlc3MsIHdoaWNoIG1lYW5zIGl0IGlzbiYjMzk7dCBpbmxpbmVkIGFuZCB0aGVyZWZvcmUsIGl0IGhhcyBhIHN5bWJvbC4gSG1tLCBpcyB0aGVyZSBldmVuICphbnkqIG5vbi1zdGF0aWMgZnVuY3Rpb24gaGVyZT8gTm90IHJlYWxseTsgbmV0bGluayBoYW5kbGVycyBhcmUgdHlwaWNhbGx5IHN0YXRpYy4gU28sIEkgd2lsbCBpbmNsdWRlIGBicmNtZl9jeXdfZXh0ZXJuYWxfYXV0aGAgYW5kIGBubDgwMjExX2V4dGVybmFsX2F1dGhgIGluIHRoaXMgYW5hbHlzaXMuCgpOb3csIGxldCYjMzk7cyBnbyBiYWNrIGFuZCByZXZpZXcgdGhpcyBwYXRjaCBjYXJlZnVsbHkuIEkgc2VlIHRoZSBhZGRpdGlvbiBvZiBgPSB7fWAgdG8gaW5pdGlhbGl6ZSBgYXV0aF9zdGF0dXNgLiBBaCwgYW5kIHRoZSBuZXcgYG1lbWNweWAgY2FsbCB0aGF0IGNvcGllcyB0aGUgYHBhcmFtcy0mZ3Q7cG1raWRgIGludG8gYGF1dGhfc3RhdHVzYCAqaWYqIGl0IGV4aXN0cy4gT2theSwgc28gdGhhdCBmaXhlcyB0aGUgcG90ZW50aWFsIHByb2JsZW0gb2Ygc2VuZGluZyB1bmluaXRpYWxpemVkIHN0YWNrIG1lbW9yeSB0byB0aGUgZmlybXdhcmUgdmlhIGBicmNtZl9maWxfaW92YXJfZGF0YV9zZXRgLiBUaGF0JiMzOTtzIGdvb2QuCgpKdXN0IHRvIGJlIHN1cmUsIEkgc2hvdWxkIGNoZWNrIHRoZSByZXN0IG9mIGBicmNtZl9jeXdfZXh0ZXJuYWxfYXV0aGAgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBvdGhlciBzdWJ0bGUgY2hhbmdlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE5OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxOTcsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE5NzpcdHN0YXRpYyBpbnRcbiAxOTg6XHRicmNtZl9jeXdfZXh0ZXJuYWxfYXV0aChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIDE5OTpcdFx0XHRcdHN0cnVjdCBjZmc4MDIxMV9leHRlcm5hbF9hdXRoX3BhcmFtcyAqcGFyYW1zKVxuIDIwMDpcdHtcbiAyMDE6XHRcdHN0cnVjdCBicmNtZl9pZiAqaWZwO1xuIDIwMjpcdFx0c3RydWN0IGJyY21mX3B1YiAqZHJ2cjtcbiAyMDM6XHRcdHN0cnVjdCBicmNtZl9hdXRoX3JlcV9zdGF0dXNfbGUgYXV0aF9zdGF0dXMgPSB7fTtcbiAyMDQ6XHRcdGludCByZXQgPSAwO1xuIDIwNTpcdFxuIDIwNjpcdFx0YnJjbWZfZGJnKFRSQUNFLCBcJiMzNDtFbnRlclxcblwmIzM0Oyk7XG4gMjA3Olx0XG4gMjA4Olx0XHRpZnAgPSBuZXRkZXZfcHJpdihkZXYpO1xuIDIwOTpcdFx0ZHJ2ciA9IGlmcC1cdTAwM2VkcnZyO1xuIDIxMDpcdFx0aWYgKHBhcmFtcy1cdTAwM2VzdGF0dXMgPT0gV0xBTl9TVEFUVVNfU1VDQ0VTUykge1xuIDIxMTpcdFx0XHRpZiAocGFyYW1zLVx1MDAzZXBta2lkKVxuIDIxMjpcdFx0XHRcdG1lbWNweShhdXRoX3N0YXR1cy5wbWtpZCwgcGFyYW1zLVx1MDAzZXBta2lkLFxuIDIxMzpcdFx0XHRcdCAgICAgICBXTEFOX1BNS0lEX0xFTik7XG4gMjE0Olx0XHRcdGF1dGhfc3RhdHVzLmZsYWdzID0gY3B1X3RvX2xlMTYoQlJDTUZfRVhUQVVUSF9TVUNDRVNTKTtcbiAyMTU6XHRcdH0gZWxzZSB7XG4gMjE2Olx0XHRcdGJwaHlfZXJyKGRydnIsIFwmIzM0O0V4dGVybmFsIGF1dGhlbnRpY2F0aW9uIGZhaWxlZDogc3RhdHVzPSVkXFxuXCYjMzQ7LFxuIDIxNzpcdFx0XHRcdCBwYXJhbXMtXHUwMDNlc3RhdHVzKTtcbiAyMTg6XHRcdFx0YXV0aF9zdGF0dXMuZmxhZ3MgPSBjcHVfdG9fbGUxNihCUkNNRl9FWFRBVVRIX0ZBSUwpO1xuIDIxOTpcdFx0fVxuIDIyMDpcdFxuIDIyMTpcdFx0bWVtY3B5KGF1dGhfc3RhdHVzLnBlZXJfbWFjLCBwYXJhbXMtXHUwMDNlYnNzaWQsIEVUSF9BTEVOKTtcbiAyMjI6XHRcdHBhcmFtcy1cdTAwM2Vzc2lkLnNzaWRfbGVuID0gbWluX3QodTgsIHBhcmFtcy1cdTAwM2Vzc2lkLnNzaWRfbGVuLFxuIDIyMzpcdFx0XHRcdFx0ICAgICAgSUVFRTgwMjExX01BWF9TU0lEX0xFTik7XG4gMjI0Olx0XHRhdXRoX3N0YXR1cy5zc2lkX2xlbiA9IGNwdV90b19sZTMyKHBhcmFtcy1cdTAwM2Vzc2lkLnNzaWRfbGVuKTtcbiAyMjU6XHRcdG1lbWNweShhdXRoX3N0YXR1cy5zc2lkLCBwYXJhbXMtXHUwMDNlc3NpZC5zc2lkLCBwYXJhbXMtXHUwMDNlc3NpZC5zc2lkX2xlbik7XG4gMjI2Olx0XG4gMjI3Olx0XHRyZXQgPSBicmNtZl9maWxfaW92YXJfZGF0YV9zZXQoaWZwLCBcJiMzNDthdXRoX3N0YXR1c1wmIzM0OywgXHUwMDI2YXV0aF9zdGF0dXMsXG4gMjI4Olx0XHRcdFx0XHQgICAgICAgc2l6ZW9mKGF1dGhfc3RhdHVzKSk7XG4gMjI5Olx0XHRpZiAocmV0IFx1MDAzYyAwKVxuIDIzMDpcdFx0XHRicGh5X2VycihkcnZyLCBcJiMzNDthdXRoX3N0YXR1cyBpb3ZhciBmYWlsZWQ6IHJldD0lZFxcblwmIzM0OywgcmV0KTtcbiAyMzE6XHRcbiAyMzI6XHRcdHJldHVybiByZXQ7XG4gMjMzOlx0fVxuIDIzNDpcdFxuIDIzNTpcdHN0YXRpYyB2b2lkIGJyY21mX2N5d19nZXRfY2ZnODAyMTFfb3BzKHN0cnVjdCBicmNtZl9wdWIgKmRydnIpXG4gMjM2Olx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTk6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjM5MTEKCQkJCQkJCW91dHB1dDogNDkKCQkJCQkJCXRob3VnaHRzOiAyNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgQXV0aGVudGljYXRpb24gU3RhdHVzIExlYWsgRml4KioKCk9rYXksIHNvIEkgc2VlIHRoYXQgYGF1dGhfc3RhdHVzYCBpcyBpbmRlZWQgcGFzc2VkIHRvIHRoZSBmaXJtd2FyZSB1c2luZyBgYnJjbWZfZmlsX2lvdmFyX2RhdGFfc2V0YC4gQmVmb3JlIHRoaXMgcGF0Y2gsIHRoZSBgYXV0aF9zdGF0dXMucG1raWRgIGZpZWxkIHdhc24mIzM5O3QgYmVpbmcgaW5pdGlhbGl6ZWQgaWYgdGhlIHN0YXR1cyB3YXMgc3VjY2Vzc2Z1bCAoYFdMQU5fU1RBVFVTX1NVQ0NFU1NgKSwgYW5kIGV2ZW4gaWYgaXQgd2FzbiYjMzk7dCwgbW9zdCBvZiB0aGUgc3RydWN0IHdhcyBsZWZ0IHVuaW5pdGlhbGl6ZWQgZXhjZXB0IGZvciBhIGZldyBrZXkgZmllbGRzLiBUaGlzIG1lYW5zIHdlIGhhZCBhIGtlcm5lbCBzdGFjayBpbmZvcm1hdGlvbiBsZWFrIHBvdGVudGlhbGx5IGdvaW5nIHRvIHRoZSBmaXJtd2FyZSwgb3IgZXZlbiB0byBhIGVtdWxhdGVkIGRldmljZSBkdXJpbmcgZnV6emluZyB3aXRoIHN5emthbGxlci4KClRoaXMgaXMgc2lnbmlmaWNhbnQ7IGl0IGRlZmluaXRlbHkgd2FycmFudHMgdGhvcm91Z2ggZnV6emluZy4KCk15IHByaW1hcnkgZm9jdXMgc2hvdWxkIGJlIG9uIHRoZSBgQlJDTUZNQUNgIGNvbmZpZ3VyYXRpb25zLCBpbmNsdWRpbmcgYEJSQ01GTUFDX1BDSUVgLCBgQlJDTUZNQUNfVVNCYCwgYW5kIGBCUkNNRk1BQ19TRElPYC4gSSBhbHNvIG5lZWQgdG8gdGFyZ2V0IGBicmNtZl9jeXdfZXh0ZXJuYWxfYXV0aGAgYW5kIGBubDgwMjExX2V4dGVybmFsX2F1dGhgIGluIHRoZSBjb2RlLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgQlJDTUZNQUNgIGRvZXNuJiMzOTt0IHJlcXVpcmUgYW55IG90aGVyIGRlcGVuZGVudCBjb25maWd1cmF0aW9uIG9wdGlvbnMuCgpJJiMzOTtsbCBjaGVjayB0aGUgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9LY29uZmlnYCBmaWxlIHRvIGNvbmZpcm0gdGhhdCBgQ0ZHODAyMTFgIGlzIGFsc28gZW5hYmxlZCwgYXMgaXQgbWlnaHQgYmUgcmVxdWlyZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxOTowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlJDTUZNQUMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZzoxOmNvbmZpZyBCUkNNRk1BQ1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWctMi1cdHRyaXN0YXRlIFwmIzM0O0Jyb2FkY29tIEZ1bGxNQUMgV0xBTiBkcml2ZXJcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZy0xMC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnOjExOmNvbmZpZyBCUkNNRk1BQ19QUk9UT19CQ0RDXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZy0xMi1cdGJvb2xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnLTEzLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWc6MTQ6Y29uZmlnIEJSQ01GTUFDX1BST1RPX01TR0JVRlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWctMTUtXHRib29sXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZy0xNi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnOjE3OmNvbmZpZyBCUkNNRk1BQ19TRElPXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZy0xOC1cdGJvb2wgXCYjMzQ7U0RJTyBidXMgaW50ZXJmYWNlIHN1cHBvcnQgZm9yIEZ1bGxNQUMgZHJpdmVyXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWctMjgtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZzoyOTpjb25maWcgQlJDTUZNQUNfVVNCXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZy0zMC1cdGJvb2wgXCYjMzQ7VVNCIGJ1cyBpbnRlcmZhY2Ugc3VwcG9ydCBmb3IgRnVsbE1BQyBkcml2ZXJcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZy0zOS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnOjQwOmNvbmZpZyBCUkNNRk1BQ19QQ0lFXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZy00MS1cdGJvb2wgXCYjMzQ7UENJRSBidXMgaW50ZXJmYWNlIHN1cHBvcnQgZm9yIEZ1bGxNQUMgZHJpdmVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxOTowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NTExNwoJCQkJCQkJb3V0cHV0OiA1MAoJCQkJCQkJdGhvdWdodHM6IDM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJJiMzOTttIHRoZSBvbmUgaGF2aW5nIGl0LCBhbmQgY29uc2lkZXJpbmcgSSYjMzk7bSBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOgoKKipJbml0aWFsIEtjb25maWcgU2NhbioqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCB0byBpdC4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgYGJyY204MDIxMWAgZHJpdmVyLCBzcGVjaWZpY2FsbHkgaXRzIGBLY29uZmlnYCBmaWxlLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IHdpdGggdGhlIGZpcnN0IHRlbiBsaW5lcy4gVGhpcyBnaXZlcyBtZSBhIHF1aWNrIGluaXRpYWwgZmVlbCBmb3IgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgZGVwZW5kZW5jaWVzLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBvdmVyYWxsIHN0cnVjdHVyZSDigJMgd2hhdCBhcmUgdGhlIHRvcC1sZXZlbCBzZWN0aW9ucyBvciBmZWF0dXJlcz8gV2hhdCBhcmUgdGhlIGltbWVkaWF0ZSBwcmVyZXF1aXNpdGVzPyBJJiMzOTttIGhvcGluZyB0byBnZXQgYSBxdWljayBncmFzcCBvZiB0aGUgZ2VuZXJhbCBjb25maWd1cmF0aW9uIGFwcHJvYWNoIHVzZWQgYnkgdGhpcyBkcml2ZXIsIGEgYmlyZHMtZXllIHZpZXcgYmVmb3JlIGRpdmluZyBkZWVwZXIgaW50byBhbnkgc3BlY2lmaWMgc2VjdGlvbi4gSSYjMzk7bSBhbnRpY2lwYXRpbmcgc29tZSBmYW1pbGlhciBgYm9vbGAgb3IgYHRyaXN0YXRlYCBvcHRpb25zLCBsaWtlbHkgZ3JvdXBlZCB0aGVtYXRpY2FsbHkuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gZ2xlYW4uIEl0JiMzOTtsbCBiZSBpbnRlcmVzdGluZyB0byBzZWUgd2hhdCB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgYXJlLCBhbmQgd2hldGhlciBpdCYjMzk7cyBzdHJhaWdodGZvcndhcmQsIG9yIGlmIHRoZXJlJiMzOTtzIHNvbWUgY29tcGxleCBsZWdhY3kgc3R1ZmYgaW52b2x2ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxOTowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0Y29uZmlnIEJSQ01GTUFDXG4gICAyOlx0XHR0cmlzdGF0ZSBcJiMzNDtCcm9hZGNvbSBGdWxsTUFDIFdMQU4gZHJpdmVyXCYjMzQ7XG4gICAzOlx0XHRkZXBlbmRzIG9uIENGRzgwMjExXG4gICA0Olx0XHRzZWxlY3QgQlJDTVVUSUxcbiAgIDU6XHRcdGhlbHBcbiAgIDY6XHRcdCAgVGhpcyBtb2R1bGUgYWRkcyBzdXBwb3J0IGZvciB3aXJlbGVzcyBhZGFwdGVycyBiYXNlZCBvbiBCcm9hZGNvbVxuICAgNzpcdFx0ICBGdWxsTUFDIGNoaXBzZXRzLiBJdCBoYXMgdG8gd29yayB3aXRoIGF0IGxlYXN0IG9uZSBvZiB0aGUgYnVzXG4gICA4Olx0XHQgIGludGVyZmFjZSBzdXBwb3J0LiBJZiB5b3UgY2hvb3NlIHRvIGJ1aWxkIGEgbW9kdWxlLCBpdCYjMzk7bGwgYmUgY2FsbGVkXG4gICA5Olx0XHQgIGJyY21mbWFjLmtvLlxuICAxMDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTk6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjU1NzMKCQkJCQkJCW91dHB1dDogMjE4CgkJCQkJCQl0aG91Z2h0czogMjIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBCcm9hZGNvbSBGdWxsTUFDIERyaXZlciBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIGZpeCBoaW5nZXMgb24gYENGRzgwMjExYCwgSSBuZWVkIHRvIGJlIGNlcnRhaW4gdG8gaW5jbHVkZSB0aGF0IGFzIGEgZGVwZW5kZW5jeS4gSSYjMzk7bGwgYWxzbyBicmluZyBpbiBgQlJDTUZNQUNgLCBgQlJDTUZNQUNfUENJRWAsIGBCUkNNRk1BQ19VU0JgLCBhbmQgYEJSQ01GTUFDX1NESU9gIHRvIGVuc3VyZSBldmVyeXRoaW5nJiMzOTtzIHByb3Blcmx5IGludGVncmF0ZWQuCgpOb3csIGxldCYjMzk7cyBqdXN0IGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZyDigJMgaXMgYGJyY21mX2N5d19leHRlcm5hbF9hdXRoYCB0aGUgKm9ubHkqIGZ1bmN0aW9uIGltcGFjdGVkPyBZZXMsIGEgcXVpY2sgcmV2aWV3IGNvbmZpcm1zIHRoYXQuCgpUaGUgZXNzZW5jZSBvZiB0aGUgcGF0Y2ggaXMgc3RyYWlnaHRmb3J3YXJkOiBpdCBhZGRyZXNzZXMgYW4gdW5pbml0aWFsaXplZCBzdGFjayBtZW1vcnkgbGVhayB3aXRoaW4gYGJyY21mX2N5d19leHRlcm5hbF9hdXRoYC4gVGhlIHZ1bG5lcmFiaWxpdHkgYXJpc2VzIGJlY2F1c2Ugb2YgdW5pbml0aWFsaXplZCBkYXRhIGluIGBhdXRoX3N0YXR1c2AgYW5kIGltcHJvcGVybHkgY29waWVkIGBwbWtpZGAuIFRoZSBmdW5jdGlvbiBpcyB0cmlnZ2VyZWQgdmlhIHRoZSBgTkw4MDIxMV9DTURfRVhURVJOQUxfQVVUSGAgbmV0bGluayBjb21tYW5kLCB3aGljaCBtZWFucyBpdCYjMzk7cyBhY2Nlc3NpYmxlIHdoZW4gdXNpbmcgYSBCcm9hZGNvbSBGdWxsTUFDIGRldmljZSwgcGFydGljdWxhcmx5IHRob3NlIGVtdWxhdGVkIG92ZXIgUENJIG9yIFVTQiwgZm9yIGV4YW1wbGUgaW4gYSB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50LiBUaGUgaW1wbGljYXRpb25zIGFyZSBjbGVhcjogc3l6a2FsbGVyJiMzOTtzIFBDSS9VU0IgZW11bGF0aW9uIGNvdWxkIGJlIGxldmVyYWdlZCB0byBtb2NrIGZpcm13YXJlIGxvYWRpbmcgYW5kIGRldmljZSBpbml0aWFsaXphdGlvbiwgYWxsb3dpbmcgZm9yIGVmZmVjdGl2ZSBmdXp6aW5nIG9mIHRoaXMgc3BlY2lmaWMgY29kZSBwYXRoLgoKQWxyaWdodCwgSSYjMzk7bSBjb25maWRlbnQgaW4gbXkgdW5kZXJzdGFuZGluZywgdGltZSB0byBmb3JtYXQgdGhlIG91dHB1dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE5OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDRkc4MDIxMSYjMzQ7LAogICAgJiMzNDtCUkNNRk1BQyYjMzQ7LAogICAgJiMzNDtCUkNNRk1BQ19QQ0lFJiMzNDssCiAgICAmIzM0O0JSQ01GTUFDX1VTQiYjMzQ7LAogICAgJiMzNDtCUkNNRk1BQ19TRElPJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnJjbWZfY3l3X2V4dGVybmFsX2F1dGgmIzM0OywKICAgICYjMzQ7bmw4MDIxMV9leHRlcm5hbF9hdXRoJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIHVuaW5pdGlhbGl6ZWQgc3RhY2sgbWVtb3J5IGxlYWsgaW4gYGJyY21mX2N5d19leHRlcm5hbF9hdXRoYCBieSB6ZXJvLWluaXRpYWxpemluZyBgYXV0aF9zdGF0dXNgIGFuZCBwcm9wZXJseSBjb3B5aW5nIGBwbWtpZGAuIFRoZSBmdW5jdGlvbiBpcyByZWFjaGFibGUgdmlhIHRoZSBgTkw4MDIxMV9DTURfRVhURVJOQUxfQVVUSGAgbmV0bGluayBjb21tYW5kIHdoZW4gYSBCcm9hZGNvbSBGdWxsTUFDIGRldmljZSAoZS5nLiwgZW11bGF0ZWQgdmlhIFBDSSBvciBVU0IpIGlzIHJlZ2lzdGVyZWQuIFRoZSBkcml2ZXIgY2FuIGJlIGZ1enplZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdXNpbmcgc3l6a2FsbGVyJiMzOTtzIFBDSS9VU0IgZW11bGF0aW9uIGNhcGFiaWxpdGllcywgd2hpY2ggY2FuIG1vY2sgdGhlIGZpcm13YXJlIGxvYWRpbmcgcHJvY2VzcyBhbmQgZGV2aWNlIGluaXRpYWxpemF0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDRkc4MDIxMSYjMzQ7LAogICAgJiMzNDtCUkNNRk1BQyYjMzQ7LAogICAgJiMzNDtCUkNNRk1BQ19QQ0lFJiMzNDssCiAgICAmIzM0O0JSQ01GTUFDX1VTQiYjMzQ7LAogICAgJiMzNDtCUkNNRk1BQ19TRElPJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnJjbWZfY3l3X2V4dGVybmFsX2F1dGgmIzM0OywKICAgICYjMzQ7bmw4MDIxMV9leHRlcm5hbF9hdXRoJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIHVuaW5pdGlhbGl6ZWQgc3RhY2sgbWVtb3J5IGxlYWsgaW4gYGJyY21mX2N5d19leHRlcm5hbF9hdXRoYCBieSB6ZXJvLWluaXRpYWxpemluZyBgYXV0aF9zdGF0dXNgIGFuZCBwcm9wZXJseSBjb3B5aW5nIGBwbWtpZGAuIFRoZSBmdW5jdGlvbiBpcyByZWFjaGFibGUgdmlhIHRoZSBgTkw4MDIxMV9DTURfRVhURVJOQUxfQVVUSGAgbmV0bGluayBjb21tYW5kIHdoZW4gYSBCcm9hZGNvbSBGdWxsTUFDIGRldmljZSAoZS5nLiwgZW11bGF0ZWQgdmlhIFBDSSBvciBVU0IpIGlzIHJlZ2lzdGVyZWQuIFRoZSBkcml2ZXIgY2FuIGJlIGZ1enplZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdXNpbmcgc3l6a2FsbGVyJiMzOTtzIFBDSS9VU0IgZW11bGF0aW9uIGNhcGFiaWxpdGllcywgd2hpY2ggY2FuIG1vY2sgdGhlIGZpcm13YXJlIGxvYWRpbmcgcHJvY2VzcyBhbmQgZGV2aWNlIGluaXRpYWxpemF0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzNS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTk6MDI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTk6MDI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgbGVhayB0byB0aGUgZGV2aWNlIGZpcm13YXJlIGJ5IGZ1bGx5IHplcm8taW5pdGlhbGl6aW5nIHRoZSBgYXV0aF9zdGF0dXNgIHN0YWNrIHN0cnVjdHVyZSAoYD0ge31gKSBiZWZvcmUgaXQgaXMgcGFzc2VkIHRvIGBicmNtZl9maWxfaW92YXJfZGF0YV9zZXQoKWAuIEl0IGFsc28gY29uZGl0aW9uYWxseSBjb3BpZXMgYHBhcmFtcy1cdTAwM2VwbWtpZGAgaW50byB0aGUgc3RydWN0dXJlLCB3aGljaCBpcyBndWFyYW50ZWVkIHRvIGJlIGZ1bGx5IGluaXRpYWxpemVkIGFuZCBvZiB0aGUgY29ycmVjdCBsZW5ndGggKGBXTEFOX1BNS0lEX0xFTmApIGR1ZSB0byBuZXRsaW5rIGF0dHJpYnV0ZSB2YWxpZGF0aW9uIChgTkxBX1BPTElDWV9FWEFDVF9MRU5fV0FSTmAgb24gYE5MODAyMTFfQVRUUl9QTUtJRGApLiBTaW5jZSBhbGwgc3RhY2sgc3RydWN0dXJlcyB0b3VjaGVkIGJ5IHRoZSBwYXRjaCBhcmUgbm93IGZ1bGx5IHplcm9lZCBhbmQgaW5pdGlhbGl6ZWQsIHRoZSBwYXRjaCBjb21wbGV0ZWx5IHJlc29sdmVzIHRoZSB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZSBhbmQgZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDIzMzAyMzAwMjhlYjA5NTI5MDQzNmY2MjUzNGU0ZTU2NWI4MjgyNmYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEF1ZyA3IDE4OjQ5OjAwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L2NvcmUuYwppbmRleCA4NzM3NTRiZTUxNzRiLi5jODZkMGJkZGU4MzI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L2NvcmUuYwpAQCAtMjAwLDcgJiM0MzsyMDAsNyBAQCBicmNtZl9jeXdfZXh0ZXJuYWxfYXV0aChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogewogCXN0cnVjdCBicmNtZl9pZiAqaWZwOwogCXN0cnVjdCBicmNtZl9wdWIgKmRydnI7Ci0Jc3RydWN0IGJyY21mX2F1dGhfcmVxX3N0YXR1c19sZSBhdXRoX3N0YXR1czsKJiM0MzsJc3RydWN0IGJyY21mX2F1dGhfcmVxX3N0YXR1c19sZSBhdXRoX3N0YXR1cyA9IHt9OwogCWludCByZXQgPSAwOwogCiAJYnJjbWZfZGJnKFRSQUNFLCAmIzM0O0VudGVyXG4mIzM0Oyk7CkBAIC0yMDgsNiAmIzQzOzIwOCw5IEBAIGJyY21mX2N5d19leHRlcm5hbF9hdXRoKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJaWZwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlkcnZyID0gaWZwLSZndDtkcnZyOwogCWlmIChwYXJhbXMtJmd0O3N0YXR1cyA9PSBXTEFOX1NUQVRVU19TVUNDRVNTKSB7CiYjNDM7CQlpZiAocGFyYW1zLSZndDtwbWtpZCkKJiM0MzsJCQltZW1jcHkoYXV0aF9zdGF0dXMucG1raWQsIHBhcmFtcy0mZ3Q7cG1raWQsCiYjNDM7CQkJICAgICAgIFdMQU5fUE1LSURfTEVOKTsKIAkJYXV0aF9zdGF0dXMuZmxhZ3MgPSBjcHVfdG9fbGUxNihCUkNNRl9FWFRBVVRIX1NVQ0NFU1MpOwogCX0gZWxzZSB7CiAJCWJwaHlfZXJyKGRydnIsICYjMzQ7RXh0ZXJuYWwgYXV0aGVudGljYXRpb24gZmFpbGVkOiBzdGF0dXM9JWRcbiYjMzQ7LAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE5OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNTAKCQkJCQkJCW91dHB1dDogNTgKCQkJCQkJCXRob3VnaHRzOiA2NzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQ29uc2lkZXJhdGlvbiBmb3IgYSBCcm9hZGNvbSBXaUZpIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgYnJjbWZfY3l3X2V4dGVybmFsX2F1dGhgIGluIHRoZSBCcm9hZGNvbSBXaUZpIGRyaXZlci4gSXQmIzM5O3MgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGNoYW5nZTogdGhleSYjMzk7cmUgaW5pdGlhbGl6aW5nIHRoZSBgYXV0aF9zdGF0dXNgIHN0cnVjdCB0byB6ZXJvIChgPSB7fWApIHdoZXJlIGl0IHdhc24mIzM5O3QgYmVmb3JlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsICYjMzQ7QWhhISBUaGlzIGlzIGEgY2xhc3NpYyB1bmluaXRpYWxpemVkIG1lbW9yeSBmaXghJiMzNDsKCk5vdywgdGhlIGluc3RydWN0aW9ucyBhcmUgdmVyeSBzcGVjaWZpYyBhYm91dCBLTVNBTjogb25seSBpZiB0aGUgKmNvZGUgY2hhbmdlcyogaW50cm9kdWNlICpvciBleHBvc2UqIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBUaGUga2V5IHdvcmQgaGVyZSBpcyAmIzM0OyppbnRyb2R1Y2Ugb3IgZXhwb3NlKiYjMzQ7LiBUaGlzIHBhdGNoIGRvZXNuJiMzOTt0ICppbnRyb2R1Y2UqIHRoZSBwcm9ibGVtOyBpdCAqZml4ZXMqIGl0LiBCdXQuLi4gdGhlIGZhY3QgdGhhdCB0aGV5JiMzOTtyZSAqZml4aW5nKiBpdCBtZWFucyB0aGUgdW5kZXJseWluZyBjb2RlICpoYWQqIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlIGluIHRoZSBmaXJzdCBwbGFjZSwgcmlnaHQ/CgpJJiMzOTttIHdyZXN0bGluZyB3aXRoIHRoZSB3b3JkaW5nLiBUaGUgcHJvbXB0IHNheXMsIHNwZWNpZmljYWxseSwgJiMzNDtPTkxZIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZS4uLiYjMzQ7IFNvLCBhIGZpeCBkb2VzbiYjMzk7dCAqaW50cm9kdWNlIG9yIGV4cG9zZSogdGhlIGJ1ZzsgaXQgYWRkcmVzc2VzIGEgcHJlLWV4aXN0aW5nIGlzc3VlLiBJdCYjMzk7cyBub3QgKmludHJvZHVjaW5nKiB0aGUgcmlzaywgYnV0IGl0JiMzOTtzIG5vdyBrbm93biwgc28gcGVyaGFwcyB0ZXN0aW5nIHNob3VsZCBoYXBwZW4uCgpCdXQgd2FpdCwgdGhlIHByb21wdCBhbHNvIHNheXMsICYjMzQ7ZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTi4uLiBmdXp6aW5nIHNlc3Npb24mIzM0Oy4gSWYgdGhleSYjMzk7cmUgZml4aW5nIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJ1ZywgS01TQU4gaXMgKnByZWNpc2VseSogdGhlIHJpZ2h0IHRvb2wgdG8gdmVyaWZ5IHRoZSBmaXggYW5kIGxvb2sgZm9yIHNpbWlsYXIgaXNzdWVzIG5lYXJieSEgVGhpcyBpcyBhIHByaW1lIG9wcG9ydHVuaXR5IHRvIHVzZSBLTVNBTiB0byBlbnN1cmUgdGhlIGZpeCBpcyBzb2xpZCBhbmQgY2F0Y2ggYW55IHJlbGF0ZWQsIGx1cmtpbmcgcHJvYmxlbXMuIFRoaXMgaXMgZXhhY3RseSB3aGF0IEtNU0FOIGlzIGZvciwgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy4KClRoZSBwYXRjaCBpdHNlbGYgaXMgYSBjbGVhciBpbml0aWFsaXphdGlvbjogYHN0cnVjdCBicmNtZl9hdXRoX3JlcV9zdGF0dXNfbGUgYXV0aF9zdGF0dXMgPSB7fTtgLiBTbywgdGhpcyBwYXRjaCBmaXhlcyB0aGUgdW5pbml0aWFsaXplZCBtZW1vcnkuIE5vdywgYW0gSSAqaW50cm9kdWNpbmcqIG9yICpleHBvc2luZyogYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlzaz8gTm8sIEkmIzM5O20gKmZpeGluZyogb25lLiBIb3dldmVyLCB0aGUgZXhpc3RpbmcgY29kZSBoYXMgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUsIHNvIGl0JiMzOTtzIGEgdmFsaWQgYXJndW1lbnQgdG8gcnVuIEtNU0FOIHRvIHZlcmlmeS4KClRvIGJlIHN1cmUsIEkgbmVlZCB0byBjaGVjayB3aGVyZSBgYXV0aF9zdGF0dXNgIGlzIGJlaW5nIHVzZWQuIElzIHRoaXMgZGF0YSB0aGF0JiMzOTtzIHBvdGVudGlhbGx5IHNlbnQgdG8gdXNlcnNwYWNlIG9yIGhhcmR3YXJlPyBJJiMzOTttIGdvaW5nIHRvIGdyZXAgZm9yIGBicmNtZl9jeXdfZXh0ZXJuYWxfYXV0aGAgdG8gdW5kZXJzdGFuZCBpdHMgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMzgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE5OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JyY21mX2N5d19leHRlcm5hbF9hdXRoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmM9MTk3PXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvY29yZS5jOjE5ODpicmNtZl9jeXdfZXh0ZXJuYWxfYXV0aChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmMtMTk5LVx0XHRcdHN0cnVjdCBjZmc4MDIxMV9leHRlcm5hbF9hdXRoX3BhcmFtcyAqcGFyYW1zKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvY29yZS5jPTIzNT1zdGF0aWMgdm9pZCBicmNtZl9jeXdfZ2V0X2NmZzgwMjExX29wcyhzdHJ1Y3QgYnJjbWZfcHViICpkcnZyKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvY29yZS5jLTIzNy1cdGRydnItXHUwMDNlb3BzLVx1MDAzZW1nbXRfdHggPSBicmNtZl9jeXdfbWdtdF90eDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvY29yZS5jOjIzODpcdGRydnItXHUwMDNlb3BzLVx1MDAzZWV4dGVybmFsX2F1dGggPSBicmNtZl9jeXdfZXh0ZXJuYWxfYXV0aDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvY29yZS5jLTIzOS19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTM5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxOTowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODUyCgkJCQkJCQlvdXRwdXQ6IDU2CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aG9zZSB0aG91Z2h0cyBmcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZSwgdXNpbmcgYSBmaXJzdC1wZXJzb24gcGVyc3BlY3RpdmU6CgoqKkRlZXAgRGl2ZSBpbnRvIGBicmNtZl9jeXdfZXh0ZXJuYWxfYXV0aGAgYW5kIGBhdXRoX3N0YXR1c2AqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZXZvbHV0aW9uIG9mIHRoYXQgYGF1dGhfc3RhdHVzYCB2YXJpYWJsZSB3aXRoaW4gYGJyY21mX2N5d19leHRlcm5hbF9hdXRoYC4gVGhpcyBpcyBjcnVjaWFsLiBJIGtub3cgdGhpcyBmdW5jdGlvbiBpcyB0aGUgbGlrZWx5IG5leHVzIGZvciBleHRlcm5hbCBhdXRoZW50aWNhdGlvbiBwcm9jZXNzZXMgaW4gdGhlIEJyb2FkY29tIHdpcmVsZXNzIHN0YWNrLCBzbyB0cmFjaW5nIGl0cyBwYXRoIGlzIGtleS4KCk15IGZvY3VzIG5vdyBpcyBwdXJlbHkgb24gaG93IHRoYXQgc3BlY2lmaWMgdmFyaWFibGUgaXMgdXNlZCwgY2hhbmdlZCwgdGVzdGVkLCBhbmQgcGFzc2VkIGFsb25nIHdpdGhpbiB0aGlzIG1vZHVsZS4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgc3RhdGUgdHJhbnNpdGlvbnMgaXQgdW5kZXJnb2VzIGFuZCB0aGUgY29uZGl0aW9uYWwgbG9naWMgZ292ZXJuaW5nIHRob3NlIHRyYW5zaXRpb25zLiBJcyBpdCBhIHNpbXBsZSBmbGFnLCBhbiBlbnVtZXJhdGVkIHR5cGUsIG9yIHNvbWV0aGluZyBtb3JlIGNvbXBsZXg/IFdoYXQgYXJlIHRoZSBwb3RlbnRpYWwgdmFsdWVzIGl0IGNhbiB0YWtlLCBhbmQgd2hhdCBkbyB0aG9zZSB2YWx1ZXMgKm1lYW4qIGluIHRoZSBjb250ZXh0IG9mIHRoZSBhdXRoZW50aWNhdGlvbiBmbG93PwoKSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zIG9mIGFueSByYWNlIGNvbmRpdGlvbnMgb3IgY29uY3VycmVuY3kgaXNzdWVzIHRoYXQgbWlnaHQgYXJpc2UgYXJvdW5kIGFjY2VzcyB0byBgYXV0aF9zdGF0dXNgLiBJcyBpdCBwcm90ZWN0ZWQgYnkgYW55IGxvY2tzPyBBcmUgdGhlcmUgcG90ZW50aWFsIHNjZW5hcmlvcyB3aGVyZSBpdHMgc3RhdGUgY291bGQgYmVjb21lIGluY29uc2lzdGVudCwgbGVhZGluZyB0byBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMgb3IgYXV0aGVudGljYXRpb24gZmFpbHVyZXM/CgpUaGlzIGlzIHdoZXJlIHRoZSByZWFsIHdvcmsgYmVnaW5zLiBJIG5lZWQgdG8gc3RhcnQgZGlnZ2luZyB0aHJvdWdoIHRoZSBjb2RlLCBsb29raW5nIGZvciBhbGwgcmVmZXJlbmNlcyB0byBgYXV0aF9zdGF0dXNgIHdpdGhpbiB0aGlzIGZ1bmN0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIGZvbGxvdyB0aGUgY29udHJvbCBmbG93IGNhcmVmdWxseSwgcGF5aW5nIGF0dGVudGlvbiB0byBhbnkgaW50ZXJhY3Rpb25zIHdpdGggZXh0ZXJuYWwgc3lzdGVtcyBvciBkcml2ZXJzLiBJJiMzOTttIGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IHRoZSBvdmVyYWxsIGF1dGhlbnRpY2F0aW9uIGFyY2hpdGVjdHVyZSBhbmQgaXRzIHJvYnVzdG5lc3MsIGxvb2tpbmcgZm9yIGFueSB3ZWFrbmVzc2VzLCBhbmQgcG90ZW50aWFsIGF0dGFjayB2ZWN0b3JzLiBUaW1lIHRvIGdldCB0byB3b3JrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTk6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L2NvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTkwOlx0XHRjZmc4MDIxMV9tZ210X3R4X3N0YXR1cyh3ZGV2LCAqY29va2llLCBidWYsIGxlbiwgYWNrLFxuIDE5MTpcdFx0XHRcdFx0R0ZQX0tFUk5FTCk7XG4gMTkyOlx0ZnJlZTpcbiAxOTM6XHRcdGtmcmVlKG1mX3BhcmFtcyk7XG4gMTk0Olx0XHRyZXR1cm4gZXJyO1xuIDE5NTpcdH1cbiAxOTY6XHRcbiAxOTc6XHRzdGF0aWMgaW50XG4gMTk4Olx0YnJjbWZfY3l3X2V4dGVybmFsX2F1dGgoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiAxOTk6XHRcdFx0XHRzdHJ1Y3QgY2ZnODAyMTFfZXh0ZXJuYWxfYXV0aF9wYXJhbXMgKnBhcmFtcylcbiAyMDA6XHR7XG4gMjAxOlx0XHRzdHJ1Y3QgYnJjbWZfaWYgKmlmcDtcbiAyMDI6XHRcdHN0cnVjdCBicmNtZl9wdWIgKmRydnI7XG4gMjAzOlx0XHRzdHJ1Y3QgYnJjbWZfYXV0aF9yZXFfc3RhdHVzX2xlIGF1dGhfc3RhdHVzID0ge307XG4gMjA0Olx0XHRpbnQgcmV0ID0gMDtcbiAyMDU6XHRcbiAyMDY6XHRcdGJyY21mX2RiZyhUUkFDRSwgXCYjMzQ7RW50ZXJcXG5cJiMzNDspO1xuIDIwNzpcdFxuIDIwODpcdFx0aWZwID0gbmV0ZGV2X3ByaXYoZGV2KTtcbiAyMDk6XHRcdGRydnIgPSBpZnAtXHUwMDNlZHJ2cjtcbiAyMTA6XHRcdGlmIChwYXJhbXMtXHUwMDNlc3RhdHVzID09IFdMQU5fU1RBVFVTX1NVQ0NFU1MpIHtcbiAyMTE6XHRcdFx0aWYgKHBhcmFtcy1cdTAwM2VwbWtpZClcbiAyMTI6XHRcdFx0XHRtZW1jcHkoYXV0aF9zdGF0dXMucG1raWQsIHBhcmFtcy1cdTAwM2VwbWtpZCxcbiAyMTM6XHRcdFx0XHQgICAgICAgV0xBTl9QTUtJRF9MRU4pO1xuIDIxNDpcdFx0XHRhdXRoX3N0YXR1cy5mbGFncyA9IGNwdV90b19sZTE2KEJSQ01GX0VYVEFVVEhfU1VDQ0VTUyk7XG4gMjE1Olx0XHR9IGVsc2Uge1xuIDIxNjpcdFx0XHRicGh5X2VycihkcnZyLCBcJiMzNDtFeHRlcm5hbCBhdXRoZW50aWNhdGlvbiBmYWlsZWQ6IHN0YXR1cz0lZFxcblwmIzM0OyxcbiAyMTc6XHRcdFx0XHQgcGFyYW1zLVx1MDAzZXN0YXR1cyk7XG4gMjE4Olx0XHRcdGF1dGhfc3RhdHVzLmZsYWdzID0gY3B1X3RvX2xlMTYoQlJDTUZfRVhUQVVUSF9GQUlMKTtcbiAyMTk6XHRcdH1cbiAyMjA6XHRcbiAyMjE6XHRcdG1lbWNweShhdXRoX3N0YXR1cy5wZWVyX21hYywgcGFyYW1zLVx1MDAzZWJzc2lkLCBFVEhfQUxFTik7XG4gMjIyOlx0XHRwYXJhbXMtXHUwMDNlc3NpZC5zc2lkX2xlbiA9IG1pbl90KHU4LCBwYXJhbXMtXHUwMDNlc3NpZC5zc2lkX2xlbixcbiAyMjM6XHRcdFx0XHRcdCAgICAgIElFRUU4MDIxMV9NQVhfU1NJRF9MRU4pO1xuIDIyNDpcdFx0YXV0aF9zdGF0dXMuc3NpZF9sZW4gPSBjcHVfdG9fbGUzMihwYXJhbXMtXHUwMDNlc3NpZC5zc2lkX2xlbik7XG4gMjI1Olx0XHRtZW1jcHkoYXV0aF9zdGF0dXMuc3NpZCwgcGFyYW1zLVx1MDAzZXNzaWQuc3NpZCwgcGFyYW1zLVx1MDAzZXNzaWQuc3NpZF9sZW4pO1xuIDIyNjpcdFxuIDIyNzpcdFx0cmV0ID0gYnJjbWZfZmlsX2lvdmFyX2RhdGFfc2V0KGlmcCwgXCYjMzQ7YXV0aF9zdGF0dXNcJiMzNDssIFx1MDAyNmF1dGhfc3RhdHVzLFxuIDIyODpcdFx0XHRcdFx0ICAgICAgIHNpemVvZihhdXRoX3N0YXR1cykpO1xuIDIyOTpcdFx0aWYgKHJldCBcdTAwM2MgMClcbiAyMzA6XHRcdFx0YnBoeV9lcnIoZHJ2ciwgXCYjMzQ7YXV0aF9zdGF0dXMgaW92YXIgZmFpbGVkOiByZXQ9JWRcXG5cJiMzNDssIHJldCk7XG4gMjMxOlx0XG4gMjMyOlx0XHRyZXR1cm4gcmV0O1xuIDIzMzpcdH1cbiAyMzQ6XHRcbiAyMzU6XHRzdGF0aWMgdm9pZCBicmNtZl9jeXdfZ2V0X2NmZzgwMjExX29wcyhzdHJ1Y3QgYnJjbWZfcHViICpkcnZyKVxuIDIzNjpcdHtcbiAyMzc6XHRcdGRydnItXHUwMDNlb3BzLVx1MDAzZW1nbXRfdHggPSBicmNtZl9jeXdfbWdtdF90eDtcbiAyMzg6XHRcdGRydnItXHUwMDNlb3BzLVx1MDAzZWV4dGVybmFsX2F1dGggPSBicmNtZl9jeXdfZXh0ZXJuYWxfYXV0aDtcbiAyMzk6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxOTowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MTYwCgkJCQkJCQlvdXRwdXQ6IDU0CgkJCQkJCQl0aG91Z2h0czogNTYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIENvbnNpZGVyYXRpb24gZm9yIGEgRmlybXdhcmUgRGF0YSBUcmFuc2ZlcioqCgpPa2F5LCBzbyBgYXV0aF9zdGF0dXNgIGlzIGJlaW5nIHBhc3NlZCBpbnRvIGBicmNtZl9maWxfaW92YXJfZGF0YV9zZXRgLiBUaGF0IGZ1bmN0aW9uLCBpbiB0dXJuLCBpcyByZXNwb25zaWJsZSBmb3Igc2VuZGluZyBkYXRhIHRvIHRoZSBmaXJtd2FyZSwgd2hpY2ggaW1tZWRpYXRlbHkgZmxhZ3MgYSBwb3RlbnRpYWwgaXNzdWUgaW4gbXkgbWluZC4gVGhlIHF1ZXN0aW9uIHRoZW4gYmVjb21lcywgaXMgc2VuZGluZyBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB0aGUgZGV2aWNlIGEgS01TQU4gaXNzdWU/IEl0IGxvb2tzIGxpa2UgdGhlIGFuc3dlciBpcyB5ZXMsIGdpdmVuIHRoYXQgS01TQU4gaXMgZGVzaWduZWQgdG8gY2F0Y2ggZXhhY3RseSB0aGF0IHNjZW5hcmlvOiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyBzZW50IHRvIGVpdGhlciBoYXJkd2FyZSBvciB1c2VyIHNwYWNlLgoKTm93LCBsZXQmIzM5O3Mgc3RlcCBiYWNrIGFuZCBjb25zaWRlciB0aGUgcHJvbXB0JiMzOTtzIGd1aWRlbGluZXMuIEl0IHNwZWNpZmllcyB0aGF0IHdlIHNob3VsZCBvbmx5IHNldCBgTmVlZHNLTVNBTj10cnVlYCBpZiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBjb2RlIHRoYXQgZmFsbHMgaW50byBzcGVjaWZpYyBjYXRlZ29yaWVzLiBMZXQgbWUgcXVpY2tseSByZXZpZXcgdGhvc2UgY2F0ZWdvcmllc+KApgoKMS4gIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSB3aGVyZSBmaWVsZHMgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkLgoyLiAgQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIGRlcGVuZGVudCBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4KMy4gIEFsbG9jYXRpb24gYW5kIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQgbGF0ZXIuCjQuICBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyB0aGF0IGNvdWxkIGxlYWQgdG8gYWNjZXNzaW5nIHVuaW5pdGlhbGl6ZWQgYnl0ZXMuCgpTbywgYGJyY21mX2ZpbF9pb3Zhcl9kYXRhX3NldGAgc2VuZHMgZGF0YSB0byB0aGUgKmZpcm13YXJlKiwgYW5kIEtNU0FOIGhvb2tzIHRoZSBkbWEtbWFwcGluZyBmdW5jdGlvbnMgdGhhdCBhcmUgdXNlZCB0byBkZXRlY3QgdGhpcy4gSW1wb3J0YW50bHksIHRoZSBwcm9tcHQgbWVudGlvbnMgdGhhdCB3ZSBzaG91bGQgc2V0IGBOZWVkc0tNU0FOPXRydWVgICpvbmx5KiBpZiB0aGUgY2hhbmdlcyBleHBvc2UgKnVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzKiB0aGF0IGFyZSAqb25seSogZGV0ZWN0ZWQgYnkgS01TQU4uCgpUaGUga2V5IGlzIHRoYXQgdGhlIHBhdGNoICpleHBsaWNpdGx5IGZpeGVzKiBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZS4gQ29uc2lkZXJpbmcgdGhlIHByb21wdOKAmXMgY3JpdGVyaWEsIHRoaXMgaXMgYSBtb2RpZmljYXRpb24gb2YgaW5pdGlhbGl6YXRpb24gb2YgYSBjb21wbGV4IGRhdGEgc3RydWN0dXJlIHRoYXQgd291bGQgbGF0ZXIgYmUgcmVhZCBieSB0aGUgZmlybXdhcmUgb3IgdmlhIERNQS4gVGhpcyBzZWVtcyB0byBmYWxsIGRpcmVjdGx5IGludG8gY2F0ZWdvcnkgMywgYXMgdGhlIGZpeCBhZGRyZXNzZXMgYSBzY2VuYXJpbyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyAqY291bGQqIGJlIHJlYWQgbGF0ZXIuIFRoZSBwcm9tcHQgYWxzbyBub3RlcyB0aGF0IGlmIHRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3Mgd2Ugc2V0IGBOZWVkc0tNU0FOPWZhbHNlYCwgaG93ZXZlciB0aGlzIHBhdGNoIGlzIGEgZml4IGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm90IGFuIG91dC1vZi1ib3VuZHMgaXNzdWUuCgpJdCBmb2xsb3dzIHRoYXQgaWYgdGhlIHBhdGNoICpmaXhlcyogYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUsIEtNU0FOIGlzIHByb2JhYmx5IG5lZWRlZCB0byB0ZXN0IHRoZSBmaXggaXRzZWxmLiBXZSB3YW50IHRvIHZlcmlmeSB0aGF0IHRoZSBwYXRjaCB0cnVseSByZXNvbHZlcyB0aGUgcHJvYmxlbSwgYW5kIHRoYXQgbm8gb3RoZXIgZmllbGRzIGFyZSBsZWZ0IHVuaW5pdGlhbGl6ZWQuIEZ1cnRoZXJtb3JlLCBLTVNBTiB3aWxsIHZlcmlmeSB0aGF0IHRoZSBidWcgaXMgY2F1Z2h0IGJ5IEtNU0FOLgoKVGhlIHByb21wdCBhbHNvIHNwZWFrcyB0byBLTVNBTiBmdXp6aW5nIHNlc3Npb25zLiBJZiB0aGUgcGF0Y2ggZml4ZXMgYSBLTVNBTiBidWcsIGEgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIGEgbmVjZXNzaXR5LgoKRmluYWxseSwgSSBzaG91bGQgcmV2aWV3IHRoZSBgc3RydWN0IGJyY21mX2F1dGhfcmVxX3N0YXR1c19sZWAgc3RydWN0dXJlLCB0byBiZXR0ZXIgdW5kZXJzdGFuZCBob3cgaXQgaXMgdXNlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNDIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE5OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0cnVjdCBicmNtZl9hdXRoX3JlcV9zdGF0dXNfbGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvY29yZS5jPTE5OD1icmNtZl9jeXdfZXh0ZXJuYWxfYXV0aChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvY29yZS5jLTIwMi1cdHN0cnVjdCBicmNtZl9wdWIgKmRydnI7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L2NvcmUuYzoyMDM6XHRzdHJ1Y3QgYnJjbWZfYXV0aF9yZXFfc3RhdHVzX2xlIGF1dGhfc3RhdHVzID0ge307XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L2NvcmUuYy0yMDQtXHRpbnQgcmV0ID0gMDtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L2NvcmUuYz0yNDI9YnJjbWZfY3l3X25vdGlmeV9leHRfYXV0aF9yZXEoc3RydWN0IGJyY21mX2lmICppZnAsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmMtMjQ2LVx0c3RydWN0IGNmZzgwMjExX2V4dGVybmFsX2F1dGhfcGFyYW1zIHBhcmFtcztcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvY29yZS5jOjI0NzpcdHN0cnVjdCBicmNtZl9hdXRoX3JlcV9zdGF0dXNfbGUgKmF1dGhfcmVxID1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvY29yZS5jOjI0ODpcdFx0KHN0cnVjdCBicmNtZl9hdXRoX3JlcV9zdGF0dXNfbGUgKilkYXRhO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmMtMjQ5LVx0czMyIGVyciA9IDA7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9md2lsX3R5cGVzLmg9MzE9c3RydWN0IGJyY21mX2V2ZW50bXNnc19leHQge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvZndpbF90eXBlcy5oLTQ0LS8qKlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9md2lsX3R5cGVzLmg6NDU6ICogc3RydWN0IGJyY21mX2F1dGhfcmVxX3N0YXR1c19sZSAtIGV4dGVybmFsIGF1dGggcmVxdWVzdCBhbmQgc3RhdHVzIHVwZGF0ZVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9md2lsX3R5cGVzLmgtNDYtICpcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L2Z3aWxfdHlwZXMuaC01Mi0gKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvZndpbF90eXBlcy5oOjUzOnN0cnVjdCBicmNtZl9hdXRoX3JlcV9zdGF0dXNfbGUge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9md2lsX3R5cGVzLmgtNTQtXHRfX2xlMTYgZmxhZ3M7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxOTowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MTI5CgkJCQkJCQlvdXRwdXQ6IDU4CgkJCQkJCQl0aG91Z2h0czogNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipBbmFseXppbmcgYnJjbWZtYWMgRmlybXdhcmUgSW50ZXJmYWNlIFR5cGVzKioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIGBkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L2Z3aWxfdHlwZXMuaGAgZmlsZS4gSSBzcGVjaWZpY2FsbHkgd2FudCB0byB6ZXJvIGluIGFyb3VuZCBsaW5lIDUzLiBJJiMzOTttIGd1ZXNzaW5nIHRoYXQmIzM5O3Mgd2hlcmUgdGhleSYjMzk7cmUgZGVmaW5pbmcgdGhlIGNvcmUgZGF0YSBzdHJ1Y3R1cmVzIGZvciB0aGUgRmlybXdhcmUgSW50ZXJmYWNlIExheWVyLCBvciBtYXliZSB0aGUgc3BlY2lmaWMgdHlwZXMgdXNlZCB0byBjb21tdW5pY2F0ZSBiZXR3ZWVuIHRoZSBob3N0IGRyaXZlciBhbmQgdGhlIEJyb2FkY29tIGZpcm13YXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgdHlwZXMgYXJlIHN0cnVjdHVyZWQ6IHRoZSB2YXJpb3VzIGRhdGEgZm9ybWF0cywgZXJyb3IgY29kZXMsIG1heWJlIHNvbWUgcmVxdWVzdC9yZXNwb25zZSB0eXBlcy4gSSYjMzk7bSBleHBlY3RpbmcgdGhpcyBmaWxlIHRvIGJlIGNyaXRpY2FsIGluIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBicmNtZm1hYyBkcml2ZXIgaW50ZXJhY3RzIGF0IHRoZSBsb3dlc3QgbGV2ZWwgd2l0aCB0aGUgd2lyZWxlc3MgaGFyZHdhcmUgYW5kIGZpcm13YXJlLiBMZXQmIzM5O3Mgc2VlIGlmIG15IGh1bmNoIGlzIHJpZ2h0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTk6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L2Z3aWxfdHlwZXMuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNDA6XHQjZGVmaW5lIEJSQ01GX0VYVEFVVEhfQUJPUlRcdFx0MlxuICA0MTpcdCNkZWZpbmUgQlJDTUZfRVhUQVVUSF9GQUlMXHRcdDNcbiAgNDI6XHQjZGVmaW5lIEJSQ01GX0VYVEFVVEhfU1VDQ0VTU1x0XHQ0XG4gIDQzOlx0XG4gIDQ0Olx0LyoqXG4gIDQ1Olx0ICogc3RydWN0IGJyY21mX2F1dGhfcmVxX3N0YXR1c19sZSAtIGV4dGVybmFsIGF1dGggcmVxdWVzdCBhbmQgc3RhdHVzIHVwZGF0ZVxuICA0NjpcdCAqXG4gIDQ3Olx0ICogQGZsYWdzOiBmbGFncyBmb3IgZXh0ZXJuYWwgYXV0aCBzdGF0dXNcbiAgNDg6XHQgKiBAcGVlcl9tYWM6IHBlZXIgTUFDIGFkZHJlc3NcbiAgNDk6XHQgKiBAc3NpZF9sZW46IGxlbmd0aCBvZiBzc2lkXG4gIDUwOlx0ICogQHNzaWQ6IHNzaWQgY2hhcmFjdGVyc1xuICA1MTpcdCAqIEBwbWtpZDogUE1LU0EgaWRlbnRpZmllclxuICA1MjpcdCAqL1xuICA1MzpcdHN0cnVjdCBicmNtZl9hdXRoX3JlcV9zdGF0dXNfbGUge1xuICA1NDpcdFx0X19sZTE2IGZsYWdzO1xuICA1NTpcdFx0dTggcGVlcl9tYWNbRVRIX0FMRU5dO1xuICA1NjpcdFx0X19sZTMyIHNzaWRfbGVuO1xuICA1NzpcdFx0dTggc3NpZFtJRUVFODAyMTFfTUFYX1NTSURfTEVOXTtcbiAgNTg6XHRcdHU4IHBta2lkW1dMQU5fUE1LSURfTEVOXTtcbiAgNTk6XHR9O1xuICA2MDpcdFxuICA2MTpcdC8qKlxuICA2MjpcdCAqIHN0cnVjdCBicmNtZl9tZl9wYXJhbXNfbGUgLSBtYW5hZ2VtZW50IGZyYW1lIHBhcmFtZXRlcnMgZm9yIG1nbXRfZnJhbWUgaW92YXJcbiAgNjM6XHQgKlxuICA2NDpcdCAqIEB2ZXJzaW9uOiB2ZXJzaW9uIG9mIHRoZSBpb3ZhclxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTk6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzc4NQoJCQkJCQkJb3V0cHV0OiA1NAoJCQkJCQkJdGhvdWdodHM6IDMxNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gRGV0ZXJtaW5hdGlvbiBmb3IgYnJjbWZfYXV0aF9yZXFfc3RhdHVzX2xlIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gdGFza2VkIHdpdGggZGVjaWRpbmcgaWYgdGhpcyBwYXRjaCB3YXJyYW50cyBhIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gVGhpcyBpcyBhYm91dCBgYnJjbWZfYXV0aF9yZXFfc3RhdHVzX2xlYCwgd2hpY2ggaXMgYSBzdHJ1Y3R1cmUgaG9sZGluZyBhdXRoZW50aWNhdGlvbiByZXF1ZXN0IHN0YXR1cyBpbmZvcm1hdGlvbi4gSXQmIzM5O3MgZ290IHNvbWUgZmxhZ3MsIE1BQyBhZGRyZXNzLCBTU0lEIGxlbmd0aCBhbmQgY29udGVudCwgYW5kIGEgUE1LSUQuIFRoZSBvcmlnaW5hbCBjb2RlIGhhZCBhIHBvdGVudGlhbCBpc3N1ZTogdGhlIGBhdXRoX3N0YXR1c2Agc3RydWN0IHdhcyBkZWNsYXJlZCBidXQgbm90IGluaXRpYWxpemVkIGJlZm9yZSBzb21lIG9mIGl0cyBtZW1iZXJzIChzcGVjaWZpY2FsbHkgdGhlIFNTSUQgYW5kIFBNS0lEKSBtaWdodCBiZSBwb3B1bGF0ZWQuIFRoZW4sIHRoZSAqZW50aXJlKiBzdHJ1Y3Qgd2FzIHNlbnQgdG8gdGhlIGZpcm13YXJlLiBUaGlzIHNldHMgb2ZmIGFsYXJtIGJlbGxzISBVbmluaXRpYWxpemVkIG1lbW9yeSBzZW50IHRvIHRoZSBmaXJtd2FyZSBpcyBhIGNsYXNzaWMgbGVhaywgYW5kIGNvdWxkIGhhdmUgcHJpdmFjeSBpbXBsaWNhdGlvbnMuCgpUaGUgcGF0Y2ggZml4ZXMgdGhpcyBieSB6ZXJvLWluaXRpYWxpemluZyBgYXV0aF9zdGF0dXNgIHVzaW5nIGA9e31gLiAgSXQgYWxzbyBjaGVja3MgYHBhcmFtcy0mZ3Q7cG1raWRgIGJlZm9yZSBjb3B5aW5nIGl0LiBUaGlzIGlzIGEgY2xlYXIgS01TQU4gZml4ISBXZSB3YW50IEtNU0FOIHRvIHZlcmlmeSB0aGF0IHRoZSBmaXggaXMgY29tcGxldGUsIGVzcGVjaWFsbHkgZm9yIHRoZSBQTUtJRC4KClRoZSBjaGFsbGVuZ2UgaXMgdGhlIHByb21wdCBpdHNlbGYsIHdoaWNoIHByb3ZpZGVzIGNvbmZsaWN0aW5nIGFkdmljZS4gSXQgc2VlbXMgdG8gc3VnZ2VzdCBzZXR0aW5nIGBOZWVkc0tNU0FOPWZhbHNlYCBpZiB0aGUgcGF0Y2ggKmZ1bGx5KiB6ZXJvcyBvciBpbml0aWFsaXplcyBzdHJ1Y3R1cmVzLiBUaGF0JiMzOTtzIHdoYXQgdGhpcyBwYXRjaCBkb2VzLiBIb3dldmVyLCBpdCBhbHNvIHRlbGxzIG1lIHRvIHNldCBgTmVlZHNLTVNBTj10cnVlYCBpZiBpdCAmIzM0O2ludHJvZHVjZXMgb3IgZXhwb3NlcyYjMzQ7IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiAgSSBpbnRlcnByZXQgJiMzNDtleHBvc2VzJiMzNDsgaW4gdGhpcyBjYXNlIGFzICYjMzQ7aXMgcmVsYXRlZCB0byYjMzQ7IHNpbmNlIHRoaXMgcGF0Y2ggaXMgZXhwbGljaXRseSAqZml4aW5nKiBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBwcm9ibGVtLgoKSWYgSSBzZXQgYE5lZWRzS01TQU49ZmFsc2VgLCBJIGFtIHNheWluZyB0aGF0IHRoaXMgcGF0Y2ggKmRvZXNuJiMzOTt0KiBuZWVkIEtNU0FOLCB3aGljaCBpcyB3cm9uZy4gS01TQU4gaXMgbmVlZGVkIHRvIHZlcmlmeSB0aGUgZml4ISBJdCYjMzk7cyBsaWtlbHkgdGhhdCBhIHByZXZpb3VzIGJ1ZyByZXBvcnQgc2hvd2VkIHRoaXMgaXNzdWUsIGFuZCB0aGUgYmVzdCB3YXkgdG8gdmVyaWZ5IGl0JiMzOTtzIG5vdyAqY29tcGxldGVseSogZml4ZWQgaXMgdG8gcnVuIEtNU0FOLgoKVGhlIHByb21wdCBhbHNvIHN1Z2dlc3RzIHVzaW5nIEtNU0FOIGlmIHRoZSBzdHJ1Y3R1cmVzIGFyZSAmIzM0O3NlbnQgdG8gdXNlciBzcGFjZS4mIzM0OyBXaGlsZSB0aGUgZmlybXdhcmUgaXNuJiMzOTt0IHN0cmljdGx5ICYjMzQ7dXNlciBzcGFjZSwmIzM0OyB0aGUgYGJyY21mX2ZpbF9pb3Zhcl9kYXRhX3NldGAgZnVuY3Rpb24gdWx0aW1hdGVseSBwdXRzIHRoaXMgc3RydWN0dXJlIGludG8gc29tZXRoaW5nIHRoYXQgd2lsbCBiZSBoYW5kbGVkIGJ5IHRoZSBmaXJtd2FyZSwgcG90ZW50aWFsbHkgc2VudCBvdmVyIHRoZSBuZXR3b3JrLiBJdCYjMzk7cyBwb3NzaWJsZSB1bmluaXRpYWxpemVkIGRhdGEgaXMgZ29pbmcgaW50byBhIERNQSBidWZmZXIgd2hpY2ggdGhlbiBnZXRzIHNlbnQgb3ZlciB0aGUgYWlyLiBFdmVuIGlmIGl0JiMzOTtzIG5vdCBzdHJpY3RseSAmIzM0O3VzZXIgc3BhY2UsJiMzNDsgS01TQU4mIzM5O3MgcHVycG9zZSBpcyB0byBjYXRjaCBhbGwgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnksIGluY2x1ZGluZyBmb3IgRE1BIG9yIGhhcmR3YXJlIGludGVyYWN0aW9ucy4KClVsdGltYXRlbHksIGV2ZW4gdGhvdWdoIHRoZSBwcm9tcHQgKnNlZW1zKiB0byBjb250cmFkaWN0IGl0c2VsZiwgYmVjYXVzZSB0aGUgcGF0Y2ggZGlyZWN0bHkgYWRkcmVzc2VzLCBhbmQgYWltcyB0byByZXNvbHZlLCBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZSwgSSBiZWxpZXZlIGBOZWVkc0tNU0FOPXRydWVgLiBSdW5uaW5nIEtNU0FOIGlzIHRoZSAqb25seSogd2F5IHRvIGNvbmZpZGVudGx5IHNheSB0aGF0IHRoZSBzdHJ1Y3R1cmUsIGFsb25nIHdpdGggKnBhcmFtcy0mZ3Q7cG1raWQqIGlzIGNvcnJlY3RseSBpbml0aWFsaXplZC4gVGhlIHBhdGNoIGRvZXMgJiMzNDtleHBvc2UmIzM0OyB0aGUgdW5pbml0aWFsaXplZCBtZW1vcnkgYnkgKmhpZ2hsaWdodGluZyogdGhlIGlzc3VlIGFuZCBwcm92aWRpbmcgdGhlIGZpeCB0aGF0IG11c3QgYmUgdGVzdGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTk6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnJjbWZfZmlsX2lvdmFyX2RhdGFfc2V0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYnRjb2V4LmM9MTAzPXN0YXRpYyBzMzIgYnJjbWZfYnRjb2V4X3BhcmFtc193cml0ZShzdHJ1Y3QgYnJjbWZfaWYgKmlmcCwgdTMyIGFkZHIsIHUzMiBkYXRhKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9idGNvZXguYy0xMTEtXHRyZWdfd3JpdGUuZGF0YSA9IGNwdV90b19sZTMyKGRhdGEpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2J0Y29leC5jOjExMjpcdHJldHVybiBicmNtZl9maWxfaW92YXJfZGF0YV9zZXQoaWZwLCBcJiMzNDtidGNfcGFyYW1zXCYjMzQ7LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2J0Y29leC5jLTExMy1cdFx0XHRcdFx0XHUwMDI2cmVnX3dyaXRlLCBzaXplb2YocmVnX3dyaXRlKSk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM9MTQ0Mz1icmNtZl9ydW5fZXNjYW4oc3RydWN0IGJyY21mX2NmZzgwMjExX2luZm8gKmNmZywgc3RydWN0IGJyY21mX2lmICppZnAsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtMTQ5MC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jOjE0OTE6XHRlcnIgPSBicmNtZl9maWxfaW92YXJfZGF0YV9zZXQoaWZwLCBcJiMzNDtlc2NhblwmIzM0OywgcGFyYW1zLCBwYXJhbXNfc2l6ZSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy0xNDkyLVx0aWYgKGVycikge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jPTIzMzU9c3RhdGljIHZvaWQgYnJjbWZfc2V0X2pvaW5fcHJlZihzdHJ1Y3QgYnJjbWZfaWYgKmlmcCxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy0yMzczLVx0am9pbl9wcmVmX3BhcmFtc1tpXS5iYW5kID0gMDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jOjIzNzQ6XHRlcnIgPSBicmNtZl9maWxfaW92YXJfZGF0YV9zZXQoaWZwLCBcJiMzNDtqb2luX3ByZWZcJiMzNDssIGpvaW5fcHJlZl9wYXJhbXMsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy0yMzc1LVx0XHRcdFx0ICAgICAgIHNpemVvZihqb2luX3ByZWZfcGFyYW1zKSk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM9MjM4MT1icmNtZl9jZmc4MDIxMV9jb25uZWN0KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jLTI0MzMtXHRcdH1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jOjI0MzQ6XHRcdGJyY21mX2ZpbF9pb3Zhcl9kYXRhX3NldChpZnAsIFwmIzM0O3dwYWllXCYjMzQ7LCBpZSwgaWVfbGVuKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jLTI0MzUtXHR9XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtMjUyMS1cdFx0XHQvKiBjbGVhbiB1cCB1c2VyLXNwYWNlIFJTTkUgKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jOjI1MjI6XHRcdFx0aWYgKGJyY21mX2ZpbF9pb3Zhcl9kYXRhX3NldChpZnAsIFwmIzM0O3dwYWllXCYjMzQ7LCBOVUxMLCAwKSkge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtMjUyMy1cdFx0XHRcdGJwaHlfZXJyKGRydnIsIFwmIzM0O2ZhaWxlZCB0byBjbGVhbiB1cCB1c2VyLXNwYWNlIFJTTkVcXG5cJiMzNDspO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jPTQwMTE9c3RhdGljIHMzMiBicmNtZl9jb25maWdfd293bF9wYXR0ZXJuKHN0cnVjdCBicmNtZl9pZiAqaWZwLCB1OCBjbWRbNF0sXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtNDA0Mi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jOjQwNDM6XHRyZXQgPSBicmNtZl9maWxfaW92YXJfZGF0YV9zZXQoaWZwLCBcJiMzNDt3b3dsX3BhdHRlcm5cJiMzNDssIGJ1ZiwgYnVmc2l6ZSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy00MDQ0LVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jPTQyMDU9c3RhdGljIHZvaWQgYnJjbWZfY29uZmlndXJlX3dvd2woc3RydWN0IGJyY21mX2NmZzgwMjExX2luZm8gKmNmZyxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy00MjUyLVx0bWVtY3B5KFx1MDAyNndvd2xfd2FrZWluZCwgXCYjMzQ7Y2xlYXJcJiMzNDssIDYpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM6NDI1MzpcdGJyY21mX2ZpbF9pb3Zhcl9kYXRhX3NldChpZnAsIFwmIzM0O3dvd2xfd2FrZWluZFwmIzM0OywgXHUwMDI2d293bF93YWtlaW5kLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtNDI1NC1cdFx0XHRcdCBzaXplb2Yod293bF93YWtlaW5kKSk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM9NDI2MT1zdGF0aWMgaW50IGJyY21mX2tlZXBhbGl2ZV9zdGFydChzdHJ1Y3QgYnJjbWZfaWYgKmlmcCwgdW5zaWduZWQgaW50IGludGVydmFsKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jLTQyNzEtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYzo0MjcyOlx0cmV0ID0gYnJjbWZfZmlsX2lvdmFyX2RhdGFfc2V0KGlmcCwgXCYjMzQ7bWtlZXBfYWxpdmVcJiMzNDssIFx1MDAyNmthbGl2ZSwgc2l6ZW9mKGthbGl2ZSkpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtNDI3My1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM9NDMzOD1icmNtZl9wbWtzYV92M19vcChzdHJ1Y3QgYnJjbWZfaWYgKmlmcCwgc3RydWN0IGNmZzgwMjExX3Bta3NhICpwbWtzYSxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy00MzcyLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM6NDM3MzpcdHJldCA9IGJyY21mX2ZpbF9pb3Zhcl9kYXRhX3NldChpZnAsIFwmIzM0O3Bta2lkX2luZm9cJiMzNDssIHBta19vcCwgc2l6ZW9mKCpwbWtfb3ApKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jLTQzNzQtXHRrZnJlZShwbWtfb3ApO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jPTQzNzk9YnJjbWZfdXBkYXRlX3Bta2xpc3Qoc3RydWN0IGJyY21mX2NmZzgwMjExX2luZm8gKmNmZywgc3RydWN0IGJyY21mX2lmICppZnApXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtNDM5MS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jOjQzOTI6XHRyZXR1cm4gYnJjbWZfZmlsX2lvdmFyX2RhdGFfc2V0KGlmcCwgXCYjMzQ7cG1raWRfaW5mb1wmIzM0OywgcG1rX2xpc3QsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy00MzkzLVx0XHRcdHNpemVvZigqcG1rX2xpc3QpKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYz01MTQ1PWJyY21mX2NmZzgwMjExX3N0YXJ0X2FwKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jLTUzNjgtXHRcdGJzc19lbmFibGUuZW5hYmxlID0gY3B1X3RvX2xlMzIoMSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYzo1MzY5Olx0XHRlcnIgPSBicmNtZl9maWxfaW92YXJfZGF0YV9zZXQoaWZwLCBcJiMzNDtic3NcJiMzNDssIFx1MDAyNmJzc19lbmFibGUsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy01MzcwLVx0XHRcdFx0XHQgICAgICAgc2l6ZW9mKGJzc19lbmFibGUpKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYz01MzkzPXN0YXRpYyBpbnQgYnJjbWZfY2ZnODAyMTFfc3RvcF9hcChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy01NDUzLVx0XHRic3NfZW5hYmxlLmVuYWJsZSA9IGNwdV90b19sZTMyKDApO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM6NTQ1NDpcdFx0ZXJyID0gYnJjbWZfZmlsX2lvdmFyX2RhdGFfc2V0KGlmcCwgXCYjMzQ7YnNzXCYjMzQ7LCBcdTAwMjZic3NfZW5hYmxlLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtNTQ1NS1cdFx0XHRcdFx0ICAgICAgIHNpemVvZihic3NfZW5hYmxlKSk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM9NTY3MT1zdGF0aWMgaW50IGJyY21mX2NmZzgwMjExX3NldF9jcW1fcnNzaV9yYW5nZV9jb25maWcoc3RydWN0IHdpcGh5ICp3aXBoeSxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy01NzAwLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM6NTcwMTpcdFx0ZXJyID0gYnJjbWZfZmlsX2lvdmFyX2RhdGFfc2V0KGlmcCwgXCYjMzQ7cnNzaV9ldmVudFwmIzM0OywgXHUwMDI2Y29uZmlnLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtNTcwMi1cdFx0XHRcdFx0ICAgICAgIHNpemVvZihjb25maWcpKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYz01ODc0PXN0YXRpYyBpbnQgYnJjbWZfY2ZnODAyMTFfdGRsc19vcGVyKHN0cnVjdCB3aXBoeSAqd2lwaHksXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtNTg5My1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jOjU4OTQ6XHRyZXQgPSBicmNtZl9maWxfaW92YXJfZGF0YV9zZXQoaWZwLCBcJiMzNDt0ZGxzX2VuZHBvaW50XCYjMzQ7LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtNTg5NS1cdFx0XHRcdCAgICAgICBcdTAwMjZpbmZvLCBzaXplb2YoaW5mbykpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jPTU5Mjk9YnJjbWZfY2ZnODAyMTFfc2V0X3Jla2V5X2RhdGEoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtNTk0NC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jOjU5NDU6XHRyZXQgPSBicmNtZl9maWxfaW92YXJfZGF0YV9zZXQoaWZwLCBcJiMzNDtndGtfa2V5X2luZm9cJiMzNDssIFx1MDAyNmd0a19sZSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jLTU5NDYtXHRcdFx0XHQgICAgICAgc2l6ZW9mKGd0a19sZSkpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jPTcxNTM9c3RhdGljIGludCBicmNtZl9lbmFibGVfYnc0MF8yZyhzdHJ1Y3QgYnJjbWZfY2ZnODAyMTFfaW5mbyAqY2ZnKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jLTcxNzQtXHRcdGJhbmRfYndjYXAuYndfY2FwID0gY3B1X3RvX2xlMzIoV0xDX0JXX0NBUF80ME1IWik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYzo3MTc1Olx0XHRlcnIgPSBicmNtZl9maWxfaW92YXJfZGF0YV9zZXQoaWZwLCBcJiMzNDtid19jYXBcJiMzNDssIFx1MDAyNmJhbmRfYndjYXAsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy03MTc2LVx0XHRcdFx0XHQgICAgICAgc2l6ZW9mKGJhbmRfYndjYXApKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYz04MjYzPXN0YXRpYyB2b2lkIGJyY21mX2NmZzgwMjExX3JlZ19ub3RpZmllcihzdHJ1Y3Qgd2lwaHkgKndpcGh5LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jLTgyOTctXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYzo4Mjk4Olx0ZXJyID0gYnJjbWZfZmlsX2lvdmFyX2RhdGFfc2V0KGlmcCwgXCYjMzQ7Y291bnRyeVwmIzM0OywgXHUwMDI2Y2NyZXEsIHNpemVvZihjY3JlcSkpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtODI5OS1cdGlmIChlcnIpIHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29tbW9uLmM9ODA9dm9pZCBicmNtZl9jX3NldF9qb2lucHJlZl9kZWZhdWx0KHN0cnVjdCBicmNtZl9pZiAqaWZwKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb21tb24uYy05NS1cdGpvaW5fcHJlZl9wYXJhbXNbMV0uYmFuZCA9IDA7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29tbW9uLmM6OTY6XHRlcnIgPSBicmNtZl9maWxfaW92YXJfZGF0YV9zZXQoaWZwLCBcJiMzNDtqb2luX3ByZWZcJiMzNDssIGpvaW5fcHJlZl9wYXJhbXMsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29tbW9uLmMtOTctXHRcdFx0XHQgICAgICAgc2l6ZW9mKGpvaW5fcHJlZl9wYXJhbXMpKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29tbW9uLmM9MTAyPXN0YXRpYyBpbnQgYnJjbWZfY19kb3dubG9hZChzdHJ1Y3QgYnJjbWZfaWYgKmlmcCwgdTE2IGZsYWcsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvbW1vbi5jLTExMy1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb21tb24uYzoxMTQ6XHRlcnIgPSBicmNtZl9maWxfaW92YXJfZGF0YV9zZXQoaWZwLCB2YXIsIGRsb2FkX2J1ZixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb21tb24uYy0xMTUtXHRcdFx0XHQgICAgICAgc3RydWN0X3NpemUoZGxvYWRfYnVmLCBkYXRhLCBsZW4pKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29tbW9uLmM9MjIzPWludCBicmNtZl9jX3NldF9jdXJfZXRoZXJhZGRyKHN0cnVjdCBicmNtZl9pZiAqaWZwLCBjb25zdCB1OCAqYWRkcilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29tbW9uLmMtMjI2LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvbW1vbi5jOjIyNzpcdGVyciA9IGJyY21mX2ZpbF9pb3Zhcl9kYXRhX3NldChpZnAsIFwmIzM0O2N1cl9ldGhlcmFkZHJcJiMzNDssIGFkZHIsIEVUSF9BTEVOKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb21tb24uYy0yMjgtXHRpZiAoZXJyIFx1MDAzYyAwKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb21tb24uYz0yNjU9aW50IGJyY21mX2NfcHJlaW5pdF9kY21kcyhzdHJ1Y3QgYnJjbWZfaWYgKmlmcClcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29tbW9uLmMtNDI3LVx0c2V0Yml0KGZ3ZWgtXHUwMDNlZXZlbnRfbWFzaywgQlJDTUZfRV9JRik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29tbW9uLmM6NDI4Olx0ZXJyID0gYnJjbWZfZmlsX2lvdmFyX2RhdGFfc2V0KGlmcCwgXCYjMzQ7ZXZlbnRfbXNnc1wmIzM0OywgZndlaC1cdTAwM2VldmVudF9tYXNrLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvbW1vbi5jLTQyOS1cdFx0XHRcdCAgICAgICBmd2VoLVx1MDAzZWV2ZW50X21hc2tfbGVuKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jPTEzOD1zdGF0aWMgdm9pZCBfYnJjbWZfc2V0X211bHRpY2FzdF9saXN0KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jLTE3Ny1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmM6MTc4Olx0ZXJyID0gYnJjbWZfZmlsX2lvdmFyX2RhdGFfc2V0KGlmcCwgXCYjMzQ7bWNhc3RfbGlzdFwmIzM0OywgYnVmLCBidWZsZW4pO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuYy0xNzktXHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuYz0yMTA9c3RhdGljIHZvaWQgX2JyY21mX3VwZGF0ZV9uZHRhYmxlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jLTIxNy1cdC8qIGNsZWFyIHRoZSB0YWJsZSBpbiBmaXJtd2FyZSAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuYzoyMTg6XHRyZXQgPSBicmNtZl9maWxfaW92YXJfZGF0YV9zZXQoaWZwLCBcJiMzNDtuZF9ob3N0aXBfY2xlYXJcJiMzNDssIE5VTEwsIDApO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuYy0yMTktXHRpZiAocmV0KSB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuYy0yMjQtXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBpZnAtXHUwMDNlaXB2NmFkZHJfaWR4OyBpJiM0MzsmIzQzOykge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuYzoyMjU6XHRcdHJldCA9IGJyY21mX2ZpbF9pb3Zhcl9kYXRhX3NldChpZnAsIFwmIzM0O25kX2hvc3RpcFwmIzM0OyxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmMtMjI2LVx0XHRcdFx0XHQgICAgICAgXHUwMDI2aWZwLVx1MDAzZWlwdjZfYWRkcl90YmxbaV0sXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuYz05OTc9c3RhdGljIGludCBicmNtZl9pbmV0YWRkcl9jaGFuZ2VkKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuYy0xMDQ3LVx0XHRcdC8qIHNldCBpdCBkaXJlY3RseSAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuYzoxMDQ4Olx0XHRcdHJldCA9IGJyY21mX2ZpbF9pb3Zhcl9kYXRhX3NldChpZnAsIFwmIzM0O2FycF9ob3N0aXBcJiMzNDssXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jLTEwNDktXHRcdFx0XHRcdTAwMjZpZmEtXHUwMDNlaWZhX2FkZHJlc3MsIHNpemVvZihpZmEtXHUwMDNlaWZhX2FkZHJlc3MpKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jLTEwNTktXHRcdFx0LyogY2xlYXIgdGhlIHRhYmxlIGluIGZpcm13YXJlICovXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jOjEwNjA6XHRcdFx0cmV0ID0gYnJjbWZfZmlsX2lvdmFyX2RhdGFfc2V0KGlmcCwgXCYjMzQ7YXJwX2hvc3RpcF9jbGVhclwmIzM0OyxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmMtMTA2MS1cdFx0XHRcdFx0XHQgICAgICAgTlVMTCwgMCk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuYy0xMDY5LVx0XHRcdFx0XHRjb250aW51ZTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmM6MTA3MDpcdFx0XHRcdHJldCA9IGJyY21mX2ZpbF9pb3Zhcl9kYXRhX3NldChpZnAsIFwmIzM0O2FycF9ob3N0aXBcJiMzNDssXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jLTEwNzEtXHRcdFx0XHRcdFx0XHQgICAgICAgXHUwMDI2YWRkcl90YWJsZVtpXSxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jPTE1Mjc9czMyIGJyY21mX2lvdmFyX2RhdGFfc2V0KHN0cnVjdCBkZXZpY2UgKmRldiwgY2hhciAqbmFtZSwgdm9pZCAqZGF0YSwgdTMyIGxlbilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jLTE1MzEtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jOjE1MzI6XHRyZXR1cm4gYnJjbWZfZmlsX2lvdmFyX2RhdGFfc2V0KGlmcCwgbmFtZSwgZGF0YSwgbGVuKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmMtMTUzMy19XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmM9MjY9c3RhdGljIGludCBicmNtZl9jeXdfc2V0X3NhZV9wd2Qoc3RydWN0IGJyY21mX2lmICppZnAsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmMtNDItXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L2NvcmUuYzo0MzpcdGVyciA9IGJyY21mX2ZpbF9pb3Zhcl9kYXRhX3NldChpZnAsIFwmIzM0O3NhZV9wYXNzd29yZFwmIzM0OywgXHUwMDI2c2FlX3B3ZCxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvY29yZS5jLTQ0LVx0XHRcdFx0ICAgICAgIHNpemVvZihzYWVfcHdkKSk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmM9Nzk9c3RhdGljIGludCBicmNtZl9jeXdfYWN0aXZhdGVfZXZlbnRzKHN0cnVjdCBicmNtZl9pZiAqaWZwKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvY29yZS5jLTk0LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmM6OTU6XHRlcnIgPSBicmNtZl9maWxfaW92YXJfZGF0YV9zZXQoaWZwLCBcJiMzNDtldmVudF9tc2dzX2V4dFwmIzM0OywgZXZlbnRtYXNrX21zZyxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvY29yZS5jLTk2LVx0XHRcdFx0ICAgICAgIG1zZ2xlbik7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmM9MTk4PWJyY21mX2N5d19leHRlcm5hbF9hdXRoKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmMtMjI2LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmM6MjI3Olx0cmV0ID0gYnJjbWZfZmlsX2lvdmFyX2RhdGFfc2V0KGlmcCwgXCYjMzQ7YXV0aF9zdGF0dXNcJiMzNDssIFx1MDAyNmF1dGhfc3RhdHVzLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmMtMjI4LVx0XHRcdFx0ICAgICAgIHNpemVvZihhdXRoX3N0YXR1cykpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mZWF0dXJlLmM9MjA2PXN0YXRpYyB2b2lkIGJyY21mX2ZlYXRfaW92YXJfZGF0YV9zZXQoc3RydWN0IGJyY21mX2lmICppZnAsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2ZlYXR1cmUuYy0yMTQtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmVhdHVyZS5jOjIxNTpcdGVyciA9IGJyY21mX2ZpbF9pb3Zhcl9kYXRhX3NldChpZnAsIG5hbWUsIGRhdGEsIGxlbik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmVhdHVyZS5jLTIxNi1cdGlmIChlcnIgIT0gLUJSQ01GX0ZXX1VOU1VQUE9SVEVEKSB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Z3ZWguYz00Mzg9aW50IGJyY21mX2Z3ZWhfYWN0aXZhdGVfZXZlbnRzKHN0cnVjdCBicmNtZl9pZiAqaWZwKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9md2VoLmMtNDYxLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Z3ZWguYzo0NjI6XHRlcnIgPSBicmNtZl9maWxfaW92YXJfZGF0YV9zZXQoaWZwLCBcJiMzNDtldmVudF9tc2dzXCYjMzQ7LCBmd2VoLVx1MDAzZWV2ZW50X21hc2ssXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZndlaC5jLTQ2My1cdFx0XHRcdCAgICAgICBmd2VoLVx1MDAzZWV2ZW50X21hc2tfbGVuKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZndpbC5jPTE4Nz1zMzJcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9md2lsLmM6MTg4OmJyY21mX2ZpbF9pb3Zhcl9kYXRhX3NldChzdHJ1Y3QgYnJjbWZfaWYgKmlmcCwgY29uc3QgY2hhciAqbmFtZSwgY29uc3Qgdm9pZCAqZGF0YSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9md2lsLmMtMTg5LVx0XHRcdCB1MzIgbGVuKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9md2lsLmMtMjEzLX1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9md2lsLmM6MjE0OkJSQ01GX0VYUE9SVF9TWU1CT0xfR1BMKGJyY21mX2ZpbF9pb3Zhcl9kYXRhX3NldCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZndpbC5jLTIxNS1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZndpbC5oPTExMD1zMzIgYnJjbWZfZmlsX2NtZF9pbnRfcXVlcnkoc3RydWN0IGJyY21mX2lmICppZnAsIHUzMiBjbWQsIHUzMiAqZGF0YSlcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZndpbC5oLTExNy1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9md2lsLmg6MTE4OnMzMiBicmNtZl9maWxfaW92YXJfZGF0YV9zZXQoc3RydWN0IGJyY21mX2lmICppZnAsIGNvbnN0IGNoYXIgKm5hbWUsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZndpbC5oLTExOS1cdFx0XHQgICAgIGNvbnN0IHZvaWQgKmRhdGEsIHUzMiBsZW4pO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9md2lsLmg9MTIzPXMzMiBicmNtZl9maWxfaW92YXJfaW50X3NldChzdHJ1Y3QgYnJjbWZfaWYgKmlmcCwgY29uc3QgY2hhciAqbmFtZSwgdTMyIGRhdGEpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Z3aWwuaC0xMjYtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZndpbC5oOjEyNzpcdHJldHVybiBicmNtZl9maWxfaW92YXJfZGF0YV9zZXQoaWZwLCBuYW1lLCBcdTAwMjZkYXRhX2xlLCBzaXplb2YoZGF0YV9sZSkpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Z3aWwuaC0xMjgtfVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wMnAuYz00NTU9c3RhdGljIGludCBicmNtZl9wMnBfc2V0X2Zpcm13YXJlKHN0cnVjdCBicmNtZl9pZiAqaWZwLCB1OCAqcDJwX21hYylcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcDJwLmMtNDcwLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3AycC5jOjQ3MTpcdHJldCA9IGJyY21mX2ZpbF9pb3Zhcl9kYXRhX3NldChpZnAsIFwmIzM0O3AycF9kYV9vdmVycmlkZVwmIzM0OywgcDJwX21hYyxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wMnAuYy00NzItXHRcdFx0XHQgICAgICAgRVRIX0FMRU4pO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wMnAuYz0yMDY2PWludCBicmNtZl9wMnBfaWZjaGFuZ2Uoc3RydWN0IGJyY21mX2NmZzgwMjExX2luZm8gKmNmZyxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcDJwLmMtMjEwMC1cdGJyY21mX2NmZzgwMjExX2FybV92aWZfZXZlbnQoY2ZnLCB2aWYpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3AycC5jOjIxMDE6XHRlcnIgPSBicmNtZl9maWxfaW92YXJfZGF0YV9zZXQodmlmLVx1MDAzZWlmcCwgXCYjMzQ7cDJwX2lmdXBkXCYjMzQ7LCBcdTAwMjZpZl9yZXF1ZXN0LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3AycC5jLTIxMDItXHRcdFx0XHQgICAgICAgc2l6ZW9mKGlmX3JlcXVlc3QpKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcDJwLmM9MjEyMj1zdGF0aWMgaW50IGJyY21mX3AycF9yZXF1ZXN0X3AycF9pZihzdHJ1Y3QgYnJjbWZfcDJwX2luZm8gKnAycCxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcDJwLmMtMjEzNy1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wMnAuYzoyMTM4Olx0ZXJyID0gYnJjbWZfZmlsX2lvdmFyX2RhdGFfc2V0KGlmcCwgXCYjMzQ7cDJwX2lmYWRkXCYjMzQ7LCBcdTAwMjZpZl9yZXF1ZXN0LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3AycC5jLTIxMzktXHRcdFx0XHQgICAgICAgc2l6ZW9mKGlmX3JlcXVlc3QpKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcDJwLmM9MjE0ND1zdGF0aWMgaW50IGJyY21mX3AycF9kaXNhYmxlX3AycF9pZihzdHJ1Y3QgYnJjbWZfY2ZnODAyMTFfdmlmICp2aWYpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3AycC5jLTIxNTAtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcDJwLmM6MjE1MTpcdHJldHVybiBicmNtZl9maWxfaW92YXJfZGF0YV9zZXQoaWZwLCBcJiMzNDtwMnBfaWZkaXNcJiMzNDssIGFkZHIsIEVUSF9BTEVOKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wMnAuYy0yMTUyLX1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcDJwLmM9MjE1ND1zdGF0aWMgaW50IGJyY21mX3AycF9yZWxlYXNlX3AycF9pZihzdHJ1Y3QgYnJjbWZfY2ZnODAyMTFfdmlmICp2aWYpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3AycC5jLTIxNjAtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcDJwLmM6MjE2MTpcdHJldHVybiBicmNtZl9maWxfaW92YXJfZGF0YV9zZXQoaWZwLCBcJiMzNDtwMnBfaWZkZWxcJiMzNDssIGFkZHIsIEVUSF9BTEVOKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wMnAuYy0yMTYyLX1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcG5vLmM9OTM9c3RhdGljIGludCBicmNtZl9wbm9fY2hhbm5lbF9jb25maWcoc3RydWN0IGJyY21mX2lmICppZnAsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3Buby5jLTk4LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3Buby5jOjk5Olx0cmV0dXJuIGJyY21mX2ZpbF9pb3Zhcl9kYXRhX3NldChpZnAsIFwmIzM0O3Bmbl9jZmdcJiMzNDssIGNmZywgc2l6ZW9mKCpjZmcpKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wbm8uYy0xMDAtfVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wbm8uYz0xMDI9c3RhdGljIGludCBicmNtZl9wbm9fY29uZmlnKHN0cnVjdCBicmNtZl9pZiAqaWZwLCB1MzIgc2Nhbl9mcmVxLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wbm8uYy0xNDUtXHRwZm5fcGFyYW0uZmxhZ3MgPSBjcHVfdG9fbGUxNihmbGFncyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcG5vLmM6MTQ2Olx0ZXJyID0gYnJjbWZfZmlsX2lvdmFyX2RhdGFfc2V0KGlmcCwgXCYjMzQ7cGZuX3NldFwmIzM0OywgXHUwMDI2cGZuX3BhcmFtLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3Buby5jLTE0Ny1cdFx0XHRcdCAgICAgICBzaXplb2YocGZuX3BhcmFtKSk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3Buby5jPTE1NT1zdGF0aWMgaW50IGJyY21mX3Bub19zZXRfcmFuZG9tKHN0cnVjdCBicmNtZl9pZiAqaWZwLCBzdHJ1Y3QgYnJjbWZfcG5vX2luZm8gKnBpKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wbm8uYy0xODgtXHRcdCAgcGktXHUwMDNlcmVxc1tyaV0tXHUwMDNlcmVxaWQsIHBmbl9tYWMubWFjKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wbm8uYzoxODk6XHRlcnIgPSBicmNtZl9maWxfaW92YXJfZGF0YV9zZXQoaWZwLCBcJiMzNDtwZm5fbWFjYWRkclwmIzM0OywgXHUwMDI2cGZuX21hYyxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wbm8uYy0xOTAtXHRcdFx0XHQgICAgICAgc2l6ZW9mKHBmbl9tYWMpKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcG5vLmM9MTk3PXN0YXRpYyBpbnQgYnJjbWZfcG5vX2FkZF9zc2lkKHN0cnVjdCBicmNtZl9pZiAqaWZwLCBzdHJ1Y3QgY2ZnODAyMTFfc3NpZCAqc3NpZCxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcG5vLmMtMjE0LVx0YnJjbWZfZGJnKFNDQU4sIFwmIzM0O2FkZGluZyBzc2lkPSUuMzJzIChhY3RpdmU9JWQpXFxuXCYjMzQ7LCBzc2lkLVx1MDAzZXNzaWQsIGFjdGl2ZSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcG5vLmM6MjE1Olx0ZXJyID0gYnJjbWZfZmlsX2lvdmFyX2RhdGFfc2V0KGlmcCwgXCYjMzQ7cGZuX2FkZFwmIzM0OywgXHUwMDI2cGZuLCBzaXplb2YocGZuKSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcG5vLmMtMjE2LVx0aWYgKGVyciBcdTAwM2MgMClcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcG5vLmM9MjIxPXN0YXRpYyBpbnQgYnJjbWZfcG5vX2FkZF9ic3NpZChzdHJ1Y3QgYnJjbWZfaWYgKmlmcCwgY29uc3QgdTggKmJzc2lkKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wbm8uYy0yMzAtXHRicmNtZl9kYmcoU0NBTiwgXCYjMzQ7YWRkaW5nIGJzc2lkPSVwTVxcblwmIzM0OywgYnNzaWQpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3Buby5jOjIzMTpcdGVyciA9IGJyY21mX2ZpbF9pb3Zhcl9kYXRhX3NldChpZnAsIFwmIzM0O3Bmbl9hZGRfYnNzaWRcJiMzNDssIFx1MDAyNmJzc2lkX2NmZyxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wbm8uYy0yMzItXHRcdFx0XHQgICAgICAgc2l6ZW9mKGJzc2lkX2NmZykpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wbm8uYz0yNTY9c3RhdGljIGludCBicmNtZl9wbm9fY2xlYW4oc3RydWN0IGJyY21mX2lmICppZnApXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3Buby5jLTI2NC1cdFx0LyogY2xlYXIgcGZuICovXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcG5vLmM6MjY1Olx0XHRyZXQgPSBicmNtZl9maWxfaW92YXJfZGF0YV9zZXQoaWZwLCBcJiMzNDtwZm5jbGVhclwmIzM0OywgTlVMTCwgMCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcG5vLmMtMjY2LVx0fVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wbm8uYz0zOTE9c3RhdGljIGludCBicmNtZl9wbm9fY29uZmlnX3NjaGVkX3NjYW5zKHN0cnVjdCBicmNtZl9pZiAqaWZwKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wbm8uYy00MzktXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcG5vLmM6NDQwOlx0ZXJyID0gYnJjbWZfZmlsX2lvdmFyX2RhdGFfc2V0KGlmcCwgXCYjMzQ7cGZuX2dzY2FuX2NmZ1wmIzM0OywgZ3NjYW5fY2ZnLCBnc3opO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3Buby5jLTQ0MS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNDcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE5OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNjAwCgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogNDU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgS01TQU4gUmVxdWlyZW1lbnQgZm9yIGEgRmlybXdhcmUgRGF0YSBUcmFuc2ZlciBGaXgqKgoKT2theSwgc28gYGJyY21mX2ZpbF9pb3Zhcl9kYXRhX3NldGAgaXMgYSBrZXkgZnVuY3Rpb24sIHVzZWQgZXh0ZW5zaXZlbHkgdG8gc2VuZCBkYXRhIHRvIHRoZSBmaXJtd2FyZS4gTXkgaW5pdGlhbCBjb25jZXJuIHdhcyB0aGF0IGFuIHVuaW5pdGlhbGl6ZWQgYGF1dGhfc3RhdHVzYCB2YXJpYWJsZSB3YXMgbGVhZGluZyB0byBhbiBpbmZvcm1hdGlvbiBsZWFrLCBleHBvc2luZyB1bmluaXRpYWxpemVkIGtlcm5lbCBzdGFjayBtZW1vcnkgdG8gdGhlIGZpcm13YXJlLiBLTVNBTiB3b3VsZCBuYXR1cmFsbHkgY2F0Y2ggdGhpcyBkdXJpbmcgdGhlIERNQSBidWZmZXIgY29weSBvciB0cmFuc21pc3Npb24gdmlhIFNESU8vVVNCL1BDSWUuIEV4Y2VsbGVudCwgaXQgc2VlbXMgbGlrZSBhIHN0cmFpZ2h0Zm9yd2FyZCBLTVNBTiBjaGVjayBzaG91bGQgdmVyaWZ5IHRoZSBmaXguCgpCdXQsIGhvbGQgb24uIEkgbmVlZCB0byBiZSBwcmVjaXNlIGFib3V0IHNldHRpbmcgYE5lZWRzS01TQU5gLiBUaGUgcHJvbXB0IGlzIHZlcnkgZXhwbGljaXQ6IGl0IHdhbnRzIGBOZWVkc0tNU0FOPXRydWVgICpvbmx5KiBpZiB0aGUgY2hhbmdlcyAqaW50cm9kdWNlKiBvciAqZXhwb3NlKiB1bmluaXRpYWxpemVkIG1lbW9yeSBkZXRlY3RhYmxlIGJ5IEtNU0FOLiBPdGhlcndpc2UsIGl0IHdhbnRzIGBOZWVkc0tNU0FOPWZhbHNlYC4gSXQgZXhwbGljaXRseSBzdGF0ZXMgdGhhdCBJIHNldCBgTmVlZHNLTVNBTj1mYWxzZWAgaWYgc3RydWN0dXJlcyB0b3VjaGVkIGFyZSAqZnVsbHkgemVyb2VkIG9yIGluaXRpYWxpemVkKi4KClRoZSBwcm92aWRlZCBwYXRjaCBpbml0aWFsaXplcyBgYXV0aF9zdGF0dXNgIHdpdGggYD0ge31gLCBlZmZlY3RpdmVseSB6ZXJvaW5nIHRoZSBzdHJ1Y3R1cmUuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0LiBUaGUgcGF0Y2ggdGhlbiBjb3BpZXMgYHBhcmFtcy0mZ3Q7cG1raWRgIGludG8gYGF1dGhfc3RhdHVzLnBta2lkYCwgYnV0IG9ubHkgaWYgYHBhcmFtcy0mZ3Q7cG1raWRgIGlzbiYjMzk7dCBOVUxMLiBUaGlzIHN0cnVjdHVyZSBpcyBvYnZpb3VzbHkgcHJvcGVybHkgaW5pdGlhbGl6ZWQsIHNvIEkgY2FuIHNldCBgTmVlZHNLTVNBTj1mYWxzZWAuCgpIb3dldmVyLCBJJiMzOTttIHNlY29uZC1ndWVzc2luZyBteXNlbGYuIFdoYXQgaWYgYHBhcmFtcy0mZ3Q7cG1raWRgICppdHNlbGYqIHBvaW50cyB0byB1bmluaXRpYWxpemVkIG1lbW9yeSwgZXZlbiBpZiBpdCYjMzk7cyBub3QgTlVMTD8gT2theSwgbGV0JiMzOTtzIHRyYWNlIHRoaXMgYmFjay4gYHBhcmFtc2AgaXMgYSBgc3RydWN0IGNmZzgwMjExX2V4dGVybmFsX2F1dGhfcGFyYW1zICpgLiBUaGlzIHN0cnVjdHVyZSBpcyBhbGxvY2F0ZWQgYW5kIGluaXRpYWxpemVkIGJ5IGBjZmc4MDIxMWAuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGluaXRpYWxpemF0aW9uIGxvZ2ljIGZvciBgY2ZnODAyMTFfZXh0ZXJuYWxfYXV0aF9wYXJhbXNgIHRvIG1ha2Ugc3VyZSBpdCYjMzk7cyBoYW5kbGVkLiBCdXQgaWYgdGhhdCBzdHJ1Y3R1cmUgaXMgaW5pdGlhbGl6ZWQgYnkgY2ZnODAyMTEsIHRoZW4gdGhlIGZpeCBpcyB0cml2aWFsbHkgY29ycmVjdCBhbmQgZG9lc24mIzM5O3QgcmVxdWlyZSBmdXJ0aGVyIEtNU0FOIGNoZWNraW5nLiBObyBwb2ludCB3YXN0aW5nIHJlc291cmNlcyBvbiBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIHdoZW4gdGhlIGZpeCBpcyBzbyBvYnZpb3VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0OC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTk6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RydWN0IGNmZzgwMjExX2V4dGVybmFsX2F1dGhfcGFyYW1zJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvY2ZnODAyMTEuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9jZmc4MDIxMS5oPTQ0MDI9c3RydWN0IGNmZzgwMjExX3Bta19jb25mIHtcbi0tXG5pbmNsdWRlL25ldC9jZmc4MDIxMS5oLTQ0MDktLyoqXG5pbmNsdWRlL25ldC9jZmc4MDIxMS5oOjQ0MTA6ICogc3RydWN0IGNmZzgwMjExX2V4dGVybmFsX2F1dGhfcGFyYW1zIC0gVHJpZ2dlciBFeHRlcm5hbCBhdXRoZW50aWNhdGlvbi5cbmluY2x1ZGUvbmV0L2NmZzgwMjExLmgtNDQxMS0gKlxuLS1cbmluY2x1ZGUvbmV0L2NmZzgwMjExLmgtNDQzOS0gKi9cbmluY2x1ZGUvbmV0L2NmZzgwMjExLmg6NDQ0MDpzdHJ1Y3QgY2ZnODAyMTFfZXh0ZXJuYWxfYXV0aF9wYXJhbXMge1xuaW5jbHVkZS9uZXQvY2ZnODAyMTEuaC00NDQxLVx0ZW51bSBubDgwMjExX2V4dGVybmFsX2F1dGhfYWN0aW9uIGFjdGlvbjtcbi0tXG5pbmNsdWRlL25ldC9jZmc4MDIxMS5oPTUyNzc9c3RydWN0IGNmZzgwMjExX29wcyB7XG4tLVxuaW5jbHVkZS9uZXQvY2ZnODAyMTEuaC01NjAyLVx0aW50ICAgICAoKmV4dGVybmFsX2F1dGgpKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5pbmNsdWRlL25ldC9jZmc4MDIxMS5oOjU2MDM6XHRcdFx0XHQgc3RydWN0IGNmZzgwMjExX2V4dGVybmFsX2F1dGhfcGFyYW1zICpwYXJhbXMpO1xuaW5jbHVkZS9uZXQvY2ZnODAyMTEuaC01NjA0LVxuLS1cbmluY2x1ZGUvbmV0L2NmZzgwMjExLmg9MTA1MTU9aW50IGNmZzgwMjExX2V4dGVybmFsX2F1dGhfcmVxdWVzdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuaW5jbHVkZS9uZXQvY2ZnODAyMTEuaDoxMDUxNjpcdFx0XHRcdCAgIHN0cnVjdCBjZmc4MDIxMV9leHRlcm5hbF9hdXRoX3BhcmFtcyAqcGFyYW1zLFxuaW5jbHVkZS9uZXQvY2ZnODAyMTEuaC0xMDUxNy1cdFx0XHRcdCAgIGdmcF90IGdmcCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQ5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxOTowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzAwNQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHRoaXM6CgoqKkludmVzdGlnYXRpbmcgdGhlIEV4dGVybmFsIEF1dGhlbnRpY2F0aW9uIEZsb3cqKgoKUmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGV4dGVybmFsIGF1dGhlbnRpY2F0aW9uIGlzIGhhbmRsZWQgaW4gdGhpcyBzeXN0ZW0uIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHplcm8gaW4gb24gdGhlIGBjZmc4MDIxMV9leHRlcm5hbF9hdXRoX3JlcXVlc3RgIGZ1bmN0aW9uLiBUaGF0IHNlZW1zIGxpa2UgYSBwcmltZSBjYW5kaWRhdGUgZm9yIHRoZSBlbnRyeSBwb2ludCBvciwgYXQgdGhlIHZlcnkgbGVhc3QsIGEga2V5IGNvbXBvbmVudCBpbiB0aGUgcHJvY2Vzcy4gSSB3YW50IHRvIHRyYWNlIHRoZSBleGVjdXRpb24gZmxvdyByZWxhdGVkIHRvIGV4dGVybmFsIGF1dGhlbnRpY2F0aW9uLCBhbmQgdGhpcyBmdW5jdGlvbiBuYW1lIGZlZWxzIHBhcnRpY3VsYXJseSByZWxldmFudC4gQWx0ZXJuYXRpdmVseSwgSSBzaG91bGQgdHJhY2UgaG93IHRoZSBgZXh0ZXJuYWxfYXV0aGAgdmFyaWFibGUsIG9yIHNpbWlsYXIgaXMgdXNlZCwgYW5kIGZyb20gdGhlcmUgZm9sbG93IHdoZXJlIGl0IGlzIGNhbGxlZCB0byBnZXQgYSBoaWdoIGxldmVsIG92ZXJ2aWV3IG9mIHRoZSBvdmVyYWxsIHByb2Nlc3MuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoZSAmIzM0O2V4dGVybmFsJiMzNDsgcGFydCBvZiB0aGUgYXV0aGVudGljYXRpb24ga2lja3MgaW4gYW5kIHdoYXQgdHJpZ2dlcnMgaXQuIFRoYXQgc2hvdWxkIHF1aWNrbHkgaWxsdW1pbmF0ZSB0aGUga2V5IGludGVyYWN0aW9ucyBhbmQgZGVwZW5kZW5jaWVzIGludm9sdmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTk6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXh0ZXJuYWxfYXV0aF9yZXF1ZXN0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTIzMjU2PXZvaWQgbmw4MDIxMV9zZW5kX2FwX3N0b3BwZWQoc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiwgdW5zaWduZWQgaW50IGxpbmtfaWQpXG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0yMzI4Ny1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MjMyODg6aW50IGNmZzgwMjExX2V4dGVybmFsX2F1dGhfcmVxdWVzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0yMzI4OS1cdFx0XHRcdCAgIHN0cnVjdCBjZmc4MDIxMV9leHRlcm5hbF9hdXRoX3BhcmFtcyAqcGFyYW1zLFxuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMjMzNDUtfVxubmV0L3dpcmVsZXNzL25sODAyMTEuYzoyMzM0NjpFWFBPUlRfU1lNQk9MKGNmZzgwMjExX2V4dGVybmFsX2F1dGhfcmVxdWVzdCk7XG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTIzMzQ3LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTk6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM0OTUKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiA4OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEaXNzZWN0aW5nIHRoZSBFeHRlcm5hbCBBdXRoZW50aWNhdGlvbiBGbG93KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBgY2ZnODAyMTFfZXh0ZXJuYWxfYXV0aF9yZXF1ZXN0YCBpcyB0aGUgZnVuZGFtZW50YWwgZnVuY3Rpb24gdXNlZCBieSB3aXJlbGVzcyBkcml2ZXJzIHdoZW4gdGhleSBuZWVkIHRvIHRyaWdnZXIgZXh0ZXJuYWwgYXV0aGVudGljYXRpb24uIFRoYXQmIzM5O3MgdGhlIGNvcmUuIFRoZW4gSSBzZWUgYGJyY21mX2N5d19leHRlcm5hbF9hdXRoYCwgd2hpY2ggSSByZWNvZ25pemUgYXMgdGhlICpzcGVjaWZpYyogaW1wbGVtZW50YXRpb24gd2l0aGluIHRoZSBCcm9hZGNvbSBkcml2ZXIsIGhhbmRsaW5nIHRoZSBgb3BzLSZndDtleHRlcm5hbF9hdXRoYCBob29rLiBBaCwgcmlnaHQsIHNvIGBjZmc4MDIxMWAgY2FsbHMgdGhpcyBkcml2ZXItc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gd2hlbiBpdCByZWNlaXZlcyBhIGNvbW1hbmQgZnJvbSB1c2VyIHNwYWNlLCBsaWtlbHkgdmlhIG5sODAyMTEuIFRoZXJlZm9yZSBJIHNob3VsZCB2ZXJpZnkgYG5sODAyMTFfZXh0ZXJuYWxfYXV0aGAgdG8gY29uZmlybSB0aGUgdXNlci1zcGFjZSBpbnRlcmFjdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNTIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE5OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25sODAyMTFfZXh0ZXJuYWxfYXV0aCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy9ubDgwMjExLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzL25sODAyMTEuYz0xODQ2OT1zdGF0aWMgaW50IG5sODAyMTFfZGVsX3BtayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTg0OTAtXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjE4NDkxOnN0YXRpYyBpbnQgbmw4MDIxMV9leHRlcm5hbF9hdXRoKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE4NDkyLXtcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTE5NzI5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9zbWFsbF9vcHMgbmw4MDIxMV9zbWFsbF9vcHNbXSA9IHtcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTIwNDYwLVx0XHQudmFsaWRhdGUgPSBHRU5MX0RPTlRfVkFMSURBVEVfU1RSSUNUIHwgR0VOTF9ET05UX1ZBTElEQVRFX0RVTVAsXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjIwNDYxOlx0XHQuZG9pdCA9IG5sODAyMTFfZXh0ZXJuYWxfYXV0aCxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMjA0NjItXHRcdC5mbGFncyA9IEdFTkxfQURNSU5fUEVSTSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNTMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE5OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0MTAwCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gZGVlcGx5IGZhbWlsaWFyIHdpdGggbmV0d29ya2luZyBhbmQgTGludXgga2VybmVsIGludGVybmFsczoKCioqRGl2aW5nIGludG8gYG5sODAyMTFfZXh0ZXJuYWxfYXV0aGAqKgoKQWxyaWdodCwgdGhlIGRpcmVjdGl2ZSBpcyBjbGVhcjogbGV0JiMzOTtzIGp1bXAgaW50byBgbmw4MDIxMV9leHRlcm5hbF9hdXRoYC4gVGhpcyBpbW1lZGlhdGVseSBzaWduYWxzIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggdGhlIGF1dGhlbnRpY2F0aW9uIG1lY2hhbmlzbXMgd2l0aGluIHRoZSBubDgwMjExIHN1YnN5c3RlbSDigJMgdGhhdCBpcywgdGhlIGludGVyZmFjZSBmb3Igd2lyZWxlc3MgbmV0d29ya2luZyBpbiB0aGUgTGludXgga2VybmVsLiBHaXZlbiB0aGUgbmFtaW5nIGNvbnZlbnRpb24sIEnigJlkIGV4cGVjdCB0aGlzIGNvZGUgYmxvY2sgdG8gaGFuZGxlIHNvbWUgZm9ybSBvZiBleHRlcm5hbCBhdXRoZW50aWNhdGlvbiwgbGlrZWx5IGludm9sdmluZyBhbiBleHRlcm5hbCBzZXJ2ZXIgZm9yIG1hbmFnaW5nIHVzZXIgY3JlZGVudGlhbHMgb3IgYXV0aG9yaXphdGlvbi4KCk15IG1pbmQgaW1tZWRpYXRlbHkgc3RhcnRzIGZvcm1pbmcgYSBmcmFtZXdvcms6IEkgbmVlZCB0byBxdWlja2x5IGdyYXNwIHRoZSBpbnRlcmFjdGlvbiBwb2ludHMuIFdoZXJlIGRvZXMgdGhpcyBjb2RlIGZpdCB3aXRoaW4gdGhlIGJyb2FkZXIgbmw4MDIxMSBhcmNoaXRlY3R1cmU/IFdoaWNoIHNwZWNpZmljIGZ1bmN0aW9ucyBvciBkYXRhIHN0cnVjdHVyZXMgYXJlIGNlbnRyYWwgdG8gdGhlIHByb2Nlc3Mgb2YgYXV0aGVudGljYXRpb24gaW4gdGhpcyBjb250ZXh0PyBJcyB0aGlzIGFib3V0IGEgc3BlY2lmaWMgcHJvdG9jb2wgbGlrZSBFQVBPTCwgb3IgaXMgaXQgYSBtb3JlIGdlbmVyaWMgZnJhbWV3b3JrPyBJJiMzOTtsbCBwcm9iYWJseSBiZSBsb29raW5nIGZvciBjYWxsYmFja3MsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgYW5kIHRoZSBmbG93IG9mIGNvbnRyb2wgcmVsYXRlZCB0byByZWNlaXZpbmcgYXV0aGVudGljYXRpb24gcmVxdWVzdHMgb3IgcmVzcG9uc2VzLgoKSSYjMzk7bGwgYmUgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBhbnkgZXJyb3IgaGFuZGxpbmcgb3Igc2VjdXJpdHktcmVsYXRlZCBhc3BlY3RzLiBJZiB3ZSYjMzk7cmUgb2ZmbG9hZGluZyBhdXRoZW50aWNhdGlvbiB0byBhbiBleHRlcm5hbCBzb3VyY2UsIHRoZXJlIGNvdWxkIGJlIGludGVyZXN0aW5nIGltcGxpY2F0aW9ucyBmb3Iga2V5IG1hbmFnZW1lbnQgYW5kIHRydXN0LCBwYXJ0aWN1bGFybHkgaW4gd2lyZWxlc3MgY29udGV4dHMuIEFyZSB0aGVyZSBzcGVjaWZpYyBjaGVja3MgZm9yIHNwb29maW5nIG9yIG1hbi1pbi10aGUtbWlkZGxlIGF0dGFja3M/IEnigJlsbCBiZSB3YXRjaGluZyBmb3IgYW55IG51YW5jZXMgcmVsYXRlZCB0byBob3cgdGhlIHN1cHBsaWNhbnQgb3IgYWNjZXNzIHBvaW50IGNvbW11bmljYXRlcyB3aXRoIHRoZSBleHRlcm5hbCBhdXRoZW50aWNhdGlvbiBzZXJ2ZXIsIGFuZCBob3cgaXQgaGFuZGxlcyBmYWlsdXJlcy4gVGhlIGVmZmljaWVuY3kgb2YgdGhlIGF1dGhlbnRpY2F0aW9uIHByb2Nlc3MsIGVzcGVjaWFsbHkgaWYgaXQmIzM5O3MgZXh0ZXJuYWwsIHdpbGwgYWxzbyBiZSBvZiBrZXkgaW50ZXJlc3QsIGdpdmVuIHRoZSBuZWVkIGZvciBwcm9tcHQgcmVzcG9uc2VzIGluIGEgd2lyZWxlc3MgZW52aXJvbm1lbnQuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSYjMzk7dmUgZ290IQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTk6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvd2lyZWxlc3Mvbmw4MDIxMS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTg0OTEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTg0OTE6XHRzdGF0aWMgaW50IG5sODAyMTFfZXh0ZXJuYWxfYXV0aChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuMTg0OTI6XHR7XG4xODQ5MzpcdFx0c3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2ID0gaW5mby1cdTAwM2V1c2VyX3B0clswXTtcbjE4NDk0Olx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gaW5mby1cdTAwM2V1c2VyX3B0clsxXTtcbjE4NDk1Olx0XHRzdHJ1Y3QgY2ZnODAyMTFfZXh0ZXJuYWxfYXV0aF9wYXJhbXMgcGFyYW1zO1xuMTg0OTY6XHRcbjE4NDk3Olx0XHRpZiAoIXJkZXYtXHUwMDNlb3BzLVx1MDAzZWV4dGVybmFsX2F1dGgpXG4xODQ5ODpcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4xODQ5OTpcdFxuMTg1MDA6XHRcdGlmICghaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfU1NJRF0gXHUwMDI2XHUwMDI2XG4xODUwMTpcdFx0ICAgIGRldi1cdTAwM2VpZWVlODAyMTFfcHRyLVx1MDAzZWlmdHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BUCBcdTAwMjZcdTAwMjZcbjE4NTAyOlx0XHQgICAgZGV2LVx1MDAzZWllZWU4MDIxMV9wdHItXHUwMDNlaWZ0eXBlICE9IE5MODAyMTFfSUZUWVBFX1AyUF9HTylcbjE4NTAzOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTg1MDQ6XHRcbjE4NTA1Olx0XHRpZiAoIWluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX0JTU0lEXSlcbjE4NTA2Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTg1MDc6XHRcbjE4NTA4Olx0XHRpZiAoIWluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX1NUQVRVU19DT0RFXSlcbjE4NTA5Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTg1MTA6XHRcbjE4NTExOlx0XHRtZW1zZXQoXHUwMDI2cGFyYW1zLCAwLCBzaXplb2YocGFyYW1zKSk7XG4xODUxMjpcdFxuMTg1MTM6XHRcdGlmIChpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9TU0lEXSkge1xuMTg1MTQ6XHRcdFx0cGFyYW1zLnNzaWQuc3NpZF9sZW4gPSBubGFfbGVuKGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX1NTSURdKTtcbjE4NTE1Olx0XHRcdGlmIChwYXJhbXMuc3NpZC5zc2lkX2xlbiA9PSAwKVxuMTg1MTY6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjE4NTE3Olx0XHRcdG1lbWNweShwYXJhbXMuc3NpZC5zc2lkLFxuMTg1MTg6XHRcdFx0ICAgICAgIG5sYV9kYXRhKGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX1NTSURdKSxcbjE4NTE5Olx0XHRcdCAgICAgICBwYXJhbXMuc3NpZC5zc2lkX2xlbik7XG4xODUyMDpcdFx0fVxuMTg1MjE6XHRcbjE4NTIyOlx0XHRtZW1jcHkocGFyYW1zLmJzc2lkLCBubGFfZGF0YShpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9CU1NJRF0pLFxuMTg1MjM6XHRcdCAgICAgICBFVEhfQUxFTik7XG4xODUyNDpcdFxuMTg1MjU6XHRcdHBhcmFtcy5zdGF0dXMgPSBubGFfZ2V0X3UxNihpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9TVEFUVVNfQ09ERV0pO1xuMTg1MjY6XHRcbjE4NTI3Olx0XHRpZiAoaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfUE1LSURdKVxuMTg1Mjg6XHRcdFx0cGFyYW1zLnBta2lkID0gbmxhX2RhdGEoaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfUE1LSURdKTtcbjE4NTI5Olx0XG4xODUzMDpcdFx0cmV0dXJuIHJkZXZfZXh0ZXJuYWxfYXV0aChyZGV2LCBkZXYsIFx1MDAyNnBhcmFtcyk7XG4xODUzMTpcdH1cbjE4NTMyOlx0XG4xODUzMzpcdHN0YXRpYyBpbnQgbmw4MDIxMV90eF9jb250cm9sX3BvcnQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbjE4NTM0Olx0e1xuMTg1MzU6XHRcdGJvb2wgZG9udF93YWl0X2Zvcl9hY2sgPSBpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9ET05UX1dBSVRfRk9SX0FDS107XG4xODUzNjpcdFx0c3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2ID0gaW5mby1cdTAwM2V1c2VyX3B0clswXTtcbjE4NTM3Olx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gaW5mby1cdTAwM2V1c2VyX3B0clsxXTtcbjE4NTM4Olx0XHRzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2ID0gZGV2LVx1MDAzZWllZWU4MDIxMV9wdHI7XG4xODUzOTpcdFx0Y29uc3QgdTggKmJ1ZjtcbjE4NTQwOlx0XHRzaXplX3QgbGVuO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTk6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU1NDYKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAxNDUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIERldGVybWluYXRpb246IEEgVGhvdWdodCBQcm9jZXNzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCB0cnlpbmcgdG8gZGVjaWRlIGFib3V0IGBOZWVkc0tNU0FOYC4gVGhlIGNvZGUgZXhwbGljaXRseSB6ZXJvZXMgYGF1dGhfc3RhdHVzYCAoYD0ge31gKS4gSSYjMzk7bSB3ZWxsIGF3YXJlIHRoYXQgdGhlIG9yaWdpbmFsIGlzc3VlIHdhcyB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiBgYXV0aF9zdGF0dXNgLCBtZWFuaW5nIHRoaXMgcGF0Y2ggKmlzKiBhIEtNU0FOIGZpeCBieSBuYXR1cmUuIE5vdywgdGhlIHByb21wdCBnaXZlcyBtZSB2ZXJ5IHNwZWNpZmljIHJ1bGVzLCBzbyBJIG5lZWQgdG8gYmUgdGhvcm91Z2guCgpUaGUga2V5IHJ1bGUgSSYjMzk7bSB3cmVzdGxpbmcgd2l0aCBpczogJiMzNDtTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjogLi4uIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkIG9yIGluaXRpYWxpemVkLi4uJiMzNDsuIFRoaXMgcGF0Y2ggKmRvZXMqIGZ1bGx5IHplcm8gYGF1dGhfc3RhdHVzYC4gSSYjMzk7bSBzdGFydGluZyB0byB0aGluayBJIHNob3VsZCBzZXQgYE5lZWRzS01TQU49ZmFsc2VgIGdpdmVuIHRoYXQgdGhlIHByb21wdCBzZWVtcyB0byBiZSBzdWdnZXN0aW5nIHRoYXQgc3VjaCBhIGZpeCBpcyB0cml2aWFsbHkgY29ycmVjdCBhbmQgZG9lc24mIzM5O3Qgd2FycmFudCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZywgd2hpY2ggY29uc3VtZXMgcmVzb3VyY2VzLiBUaGlzIG1ha2VzIHNlbnNlOyBLTVNBTiB3b3VsZCBsaWtlbHkgZmluZCBub3RoaW5nIG5ldyBpbiBgYXV0aF9zdGF0dXNgIGFmdGVyIHRoaXMgY2hhbmdlLgoKSG93ZXZlciwgSSYjMzk7bSBzZWNvbmQtZ3Vlc3NpbmcgbXlzZWxmIGEgYml0LiAgSWYgSSBzZXQgYE5lZWRzS01TQU49ZmFsc2VgLCBzeXpib3QgKndvbiYjMzk7dCogcnVuIEtNU0FOIG9uIHRoaXMgcGF0Y2guIEJ1dCBzaW5jZSBpdCYjMzk7cyBhIEtNU0FOIGZpeCwgc2hvdWxkbiYjMzk7dCB3ZSBkb3VibGUtY2hlY2s/IElzIHRoZXJlIHNvbWV0aGluZyBJJiMzOTttIG1pc3Npbmc/IFdoYXQgaWYgdGhlcmUgYXJlIG90aGVyIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGluIGEgZGlmZmVyZW50IGNvZGVwYXRoPyBCdXQgdGhlIHByb21wdCBzdGF0ZXMgJiMzNDtPTkxZIHNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzIHRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uJiMzNDsgVGhpcyBmaXggemVyb2VzIHRoZSBtZW1vcnksIGl0IGRvZXNuJiMzOTt0ICppbnRyb2R1Y2UqIGEgcmlzaywgYW5kIGl0IGRvZXNuJiMzOTt0ICpleHBvc2UqIGEgcmlzayB0aGF0IGlzICpvbmx5KiBjYXVnaHQgYnkgS01TQU4uCgpUaGUgcHJvbXB04oCZcyBydWxlcywgdGhvdWdoLCBhcmUgc3BlY2lmaWM6ICYjMzQ7QWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQgb3IgaW5pdGlhbGl6ZWQuLi4mIzM0OyBhbmQgdGhpcyBwYXRjaCBkb2VzIHByZWNpc2VseSB0aGF0LCBmdWxseSB6ZXJvaW5nIGBhdXRoX3N0YXR1c2AuIEkmIzM5O3ZlIGFscmVhZHkgY29uZmlybWVkIGBwYXJhbXMtJmd0O3Bta2lkYCBpcyBub3QgdW5pbml0aWFsaXplZC4KCk9rYXksIGxldCBtZSByZS1leGFtaW5lIHRoZSBwYXRjaC4gVGhlcmUmIzM5O3MgYSBgbWVtY3B5YCB0byBjb3B5IGBwYXJhbXMtJmd0O3Bta2lkYCBpbnRvIGBhdXRoX3N0YXR1cy5wbWtpZGA6CgpgYGBjCglpZiAocGFyYW1zLSZndDtzdGF0dXMgPT0gV0xBTl9TVEFUVVNfU1VDQ0VTUykgewomIzQzOwkJaWYgKHBhcmFtcy0mZ3Q7cG1raWQpCiYjNDM7CQkJbWVtY3B5KGF1dGhfc3RhdHVzLnBta2lkLCBwYXJhbXMtJmd0O3Bta2lkLAomIzQzOwkJCSAgICAgICBXTEFOX1BNS0lEX0xFTik7CgkJYXV0aF9zdGF0dXMuZmxhZ3MgPSBjcHVfdG9fbGUxNihCUkNNRl9FWFRBVVRIX1NVQ0NFU1MpOwpgYGAKClRoaXMgKmNvdWxkKiBpbnRyb2R1Y2UgYW4gb3V0LW9mLWJvdW5kcyByZWFkIGlmIHRoZSBuZXRsaW5rIGF0dHJpYnV0ZSYjMzk7cyBsZW5ndGggKGBubGFfbGVuYCkgaXMgbGVzcyB0aGFuIGBXTEFOX1BNS0lEX0xFTmAgKDE2IGJ5dGVzKS4gSG93ZXZlciwgdGhhdCB3b3VsZCBiZSBhIEtBU0FOIGlzc3VlIChvdXQtb2YtYm91bmRzIHJlYWQpLCBub3QgYSBLTVNBTiBpc3N1ZSAodW5pbml0aWFsaXplZCBtZW1vcnkpLiBLQVNBTiBpcyBhbHJlYWR5IGVuYWJsZWQsIHNvIHRoYXQmIzM5O3MgY292ZXJlZC4gTm93LCB0aGVyZSBjb3VsZCBiZSBwYWRkaW5nLCBzbyBpdCBpcyBwb3NzaWJsZSB0byByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGR1cmluZyB0aGUgbWVtY3B5LCBidXQgYmFzZWQgb24gbXkgZXhwZXJpZW5jZSwgcGFkZGluZyBzaG91bGRuJiMzOTt0IGV4aXN0IGluIHRoYXQgY29udGV4dC4gU28sIEkgd2lsbCB0cnVzdCB0aGUga2VybmVsIHRvIGhhbmRsZSBpdC4KClRoZXJlZm9yZSwgc2luY2UgdGhlIHBhdGNoICpvbmx5KiBtb2RpZmllcyBgYXV0aF9zdGF0dXNgLCB3aGljaCBpcyBleHBsaWNpdGx5IGFuZCBmdWxseSB6ZXJvZWQsIEkmIzM5O20gY29uZmlkZW50IHRoYXQgSSBzaG91bGQgc2V0IGBOZWVkc0tNU0FOPWZhbHNlYC4gVGhlIHByb21wdCYjMzk7cyBydWxlIGlzIHZlcnkgY2xlYXIsIGFuZCB0aGlzIHBhdGNoIGFkaGVyZXMgdG8gaXQgcGVyZmVjdGx5LgpJ4oCZbGwgYWRkIGFuIGV4cGxhbmF0aW9uIGluIHRoZSBjb21taXQgbWVzc2FnZSB0aGF0IHRoaXMgcGF0Y2ggZnVsbHkgemVyb2VzIGEgc3RydWN0dXJlLCBlbGltaW5hdGluZyB0aGUgS01TQU4gcmlzayBhbmQgbWFraW5nIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gdW5uZWNlc3NhcnkgYmVjYXVzZSB0aGUgZml4IGlzIHRyaXZpYWxseSBjb3JyZWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTk6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Tkw4MDIxMV9BVFRSX1BNS0lEJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzL25sODAyMTEuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTcwMD1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmw4MDIxMV9wb2xpY3lbTlVNX05MODAyMTFfQVRUUl0gPSB7XG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy04MTktXHRbTkw4MDIxMV9BVFRSXzRBRERSXSA9IHsgLnR5cGUgPSBOTEFfVTggfSxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6ODIwOlx0W05MODAyMTFfQVRUUl9QTUtJRF0gPSBOTEFfUE9MSUNZX0VYQUNUX0xFTl9XQVJOKFdMQU5fUE1LSURfTEVOKSxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtODIxLVx0W05MODAyMTFfQVRUUl9EVVJBVElPTl0gPSB7IC50eXBlID0gTkxBX1UzMiB9LFxuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9MTQzODg9c3RhdGljIGludCBubDgwMjExX3NldF9wbWtzYShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTQzOTktXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjE0NDAwOlx0aWYgKCFpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9QTUtJRF0pXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE0NDAxLVx0XHRyZXR1cm4gLUVJTlZBTDtcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTQ0MDItXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjE0NDAzOlx0cG1rc2EucG1raWQgPSBubGFfZGF0YShpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9QTUtJRF0pO1xubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xNDQwNC1cbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTE0NDQzPXN0YXRpYyBpbnQgbmw4MDIxMV9kZWxfcG1rc2Eoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE0NDYwLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYzoxNDQ2MTpcdGlmIChpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9QTUtJRF0pXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjE0NDYyOlx0XHRwbWtzYS5wbWtpZCA9IG5sYV9kYXRhKGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX1BNS0lEXSk7XG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE0NDYzLVxuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9MTg0OTE9c3RhdGljIGludCBubDgwMjExX2V4dGVybmFsX2F1dGgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE4NTI2LVxubmV0L3dpcmVsZXNzL25sODAyMTEuYzoxODUyNzpcdGlmIChpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9QTUtJRF0pXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjE4NTI4Olx0XHRwYXJhbXMucG1raWQgPSBubGFfZGF0YShpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9QTUtJRF0pO1xubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xODUyOS1cbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTIxMTQ2PXZvaWQgbmw4MDIxMV9zZW5kX2Nvbm5lY3RfcmVzdWx0KHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTIxMjExLVx0ICAgICAgKGNyLVx1MDAzZWZpbHMucG1raWQgXHUwMDI2XHUwMDI2XG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjIxMjEyOlx0ICAgICAgIG5sYV9wdXQobXNnLCBOTDgwMjExX0FUVFJfUE1LSUQsIFdMQU5fUE1LSURfTEVOLCBjci1cdTAwM2VmaWxzLnBta2lkKSkpKSB8fFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0yMTIxMy1cdCAgICAoY3ItXHUwMDNlYXNzb2NfZW5jcnlwdGVkIFx1MDAyNlx1MDAyNlxuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9MjEyNjE9dm9pZCBubDgwMjExX3NlbmRfcm9hbWVkKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTIxMzE5LVx0ICAgIChpbmZvLVx1MDAzZWZpbHMucG1raWQgXHUwMDI2XHUwMDI2XG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjIxMzIwOlx0ICAgICBubGFfcHV0KG1zZywgTkw4MDIxMV9BVFRSX1BNS0lELCBXTEFOX1BNS0lEX0xFTiwgaW5mby1cdTAwM2VmaWxzLnBta2lkKSkpXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTIxMzIxLVx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNTcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE5OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4OTU2CgkJCQkJCQlvdXRwdXQ6IDE5NgoJCQkJCQkJdGhvdWdodHM6IDc0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBVbmluaXRpYWxpemVkIE1lbW9yeSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGF0IGBbTkw4MDIxMV9BVFRSX1BNS0lEXWAgYXR0cmlidXRlIGhhcyBhIGRlY2xhcmVkIGxlbmd0aCBvZiBleGFjdGx5IGBXTEFOX1BNS0lEX0xFTmAgYnl0ZXMuIFRoYXQmIzM5O3Mga2V5LiBUaGlzIG1lYW5zIHRoYXQgd2hlbiB3ZSBgbWVtY3B5KGF1dGhfc3RhdHVzLnBta2lkLCBwYXJhbXMtJmd0O3Bta2lkLCBXTEFOX1BNS0lEX0xFTik7YCwgd2UgYXJlIGd1YXJhbnRlZWQgYSBzYWZlIGFuZCBjb21wbGV0ZSBjb3B5LiBObyBvdXQtb2YtYm91bmRzIHJlYWRzLCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBzdXJwcmlzZXMuCgpUaGUgcGF0Y2ggaXRzZWxmIGlzIHN0cmFpZ2h0Zm9yd2FyZDoKMS4gIFdlJiMzOTtyZSBmdWxseSB6ZXJvaW5nIG91dCBgYXV0aF9zdGF0dXNgIHJpZ2h0IGZyb20gdGhlIHN0YXJ0IHVzaW5nIGA9IHt9YC4gTmljZSBhbmQgY2xlYW4uCjIuICBUaGVuLCB3ZSBjb25kaXRpb25hbGx5IGNvcHkgYHBhcmFtcy0mZ3Q7cG1raWRgIGludG8gYGF1dGhfc3RhdHVzLnBta2lkYCwgYnV0IG9ubHkgKmlmKiBpdCBleGlzdHMsIHdoaWNoIHdlIGtub3cgd2lsbCBiZSBmdWxseSBpbml0aWFsaXplZCBhbmQgdGhlIGNvcnJlY3QgbGVuZ3RoIGR1ZSB0byB0aGF0IE5ldGxpbmsgYXR0cmlidXRlIHZhbGlkYXRpb24uCgpUaGlzIHBlcmZlY3RseSBhZGRyZXNzZXMgdGhlIGlzc3VlLiBUaGUgcHJvbXB0IHN0YXRlcyB0aGF0IHdlIHNob3VsZCBzZXQgYE5lZWRzS01TQU49ZmFsc2VgIGlmOiBhbGwgc3RhY2sgb3IgaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgYXJlIGZ1bGx5IHplcm9lZCBvciBpbml0aWFsaXplZCAqYmVmb3JlKiBiZWluZyByZWFkL2NvcGllZCwgYW5kIGlmIHRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoaXMgc2F0aXNmaWVzICpib3RoKiBjcml0ZXJpYS4KCldlIGluaXRpYWxpemUgYGF1dGhfc3RhdHVzYCB2aWEgYD0ge31gLCB0aGVuIGNvbmRpdGlvbmFsbHksIGFuZCBzYWZlbHksIGNvcHkgYHBhcmFtcy0mZ3Q7cG1raWRgIGludG8gdGhlIHN0cnVjdC4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgZXhwb3N1cmUgaGVyZS4KClRoZSByZWFzb25pbmcgaXMgc29saWQ6IHRoZSBgYXV0aF9zdGF0dXNgIHN0cnVjdCBpcyBmdWxseSB6ZXJvLWluaXRpYWxpemVkIHVwZnJvbnQuIFRoZSBjb25kaXRpb25hbCBjb3B5IG9mIHRoZSBQTUtJRCBpcyBzYWZlIGR1ZSB0byB0aGUgZ3VhcmFudGVlZCBsZW5ndGggcHJvdmlkZWQgYnkgdGhlIG5ldGxpbmsgYXR0cmlidXRlLiBUaGlzIHBhdGNoIHJlbW92ZXMgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLgoKTGV0JiMzOTtzIGRvdWJsZS1jaGVjayB0aGUgZGlmZi4gU2VlbXMgdGhpcyBpcyBqdXN0IHRoZSBjaGFuZ2UgaW4gYGJyY21mX2N5d19leHRlcm5hbF9hdXRoYCAtIG5vIG90aGVyIGNoYW5nZXMuIENvbmZpcm1lZDogdGhlIG9ubHkgY2hhbmdlIGlzIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgc3RydWN0LgoKQWxyaWdodCwgSSYjMzk7bSBjb25maWRlbnQuIEkmIzM5O20gZ29pbmcgdG8gY2FsbCBgc2V0LXJlc3VsdHNgIHdpdGggYE5lZWRzS01TQU49ZmFsc2VgIGFuZCB0aGUgcHJvdmlkZWQgcmVhc29uaW5nLiBJdCYjMzk7cyBhIGNsZWFuLCBzYWZlIGZpeC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNTgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE5OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWsgdG8gdGhlIGRldmljZSBmaXJtd2FyZSBieSBmdWxseSB6ZXJvLWluaXRpYWxpemluZyB0aGUgYGF1dGhfc3RhdHVzYCBzdGFjayBzdHJ1Y3R1cmUgKGA9IHt9YCkgYmVmb3JlIGl0IGlzIHBhc3NlZCB0byBgYnJjbWZfZmlsX2lvdmFyX2RhdGFfc2V0KClgLiBJdCBhbHNvIGNvbmRpdGlvbmFsbHkgY29waWVzIGBwYXJhbXMtXHUwMDNlcG1raWRgIGludG8gdGhlIHN0cnVjdHVyZSwgd2hpY2ggaXMgZ3VhcmFudGVlZCB0byBiZSBmdWxseSBpbml0aWFsaXplZCBhbmQgb2YgdGhlIGNvcnJlY3QgbGVuZ3RoIChgV0xBTl9QTUtJRF9MRU5gKSBkdWUgdG8gbmV0bGluayBhdHRyaWJ1dGUgdmFsaWRhdGlvbiAoYE5MQV9QT0xJQ1lfRVhBQ1RfTEVOX1dBUk5gIG9uIGBOTDgwMjExX0FUVFJfUE1LSURgKS4gU2luY2UgYWxsIHN0YWNrIHN0cnVjdHVyZXMgdG91Y2hlZCBieSB0aGUgcGF0Y2ggYXJlIG5vdyBmdWxseSB6ZXJvZWQgYW5kIGluaXRpYWxpemVkLCB0aGUgcGF0Y2ggY29tcGxldGVseSByZXNvbHZlcyB0aGUgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUgYW5kIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgbGVhayB0byB0aGUgZGV2aWNlIGZpcm13YXJlIGJ5IGZ1bGx5IHplcm8taW5pdGlhbGl6aW5nIHRoZSBgYXV0aF9zdGF0dXNgIHN0YWNrIHN0cnVjdHVyZSAoYD0ge31gKSBiZWZvcmUgaXQgaXMgcGFzc2VkIHRvIGBicmNtZl9maWxfaW92YXJfZGF0YV9zZXQoKWAuIEl0IGFsc28gY29uZGl0aW9uYWxseSBjb3BpZXMgYHBhcmFtcy1cdTAwM2VwbWtpZGAgaW50byB0aGUgc3RydWN0dXJlLCB3aGljaCBpcyBndWFyYW50ZWVkIHRvIGJlIGZ1bGx5IGluaXRpYWxpemVkIGFuZCBvZiB0aGUgY29ycmVjdCBsZW5ndGggKGBXTEFOX1BNS0lEX0xFTmApIGR1ZSB0byBuZXRsaW5rIGF0dHJpYnV0ZSB2YWxpZGF0aW9uIChgTkxBX1BPTElDWV9FWEFDVF9MRU5fV0FSTmAgb24gYE5MODAyMTFfQVRUUl9QTUtJRGApLiBTaW5jZSBhbGwgc3RhY2sgc3RydWN0dXJlcyB0b3VjaGVkIGJ5IHRoZSBwYXRjaCBhcmUgbm93IGZ1bGx5IHplcm9lZCBhbmQgaW5pdGlhbGl6ZWQsIHRoZSBwYXRjaCBjb21wbGV0ZWx5IHJlc29sdmVzIHRoZSB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZSBhbmQgZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE4OjQ5OjAxLjAxODYyNzAzNloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkxNTM5MzUzNzQ3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDRkc4MDIxMVwiLFxuICAgIFwiQlJDTUZNQUNcIixcbiAgICBcIkJSQ01GTUFDX1BDSUVcIixcbiAgICBcIkJSQ01GTUFDX1VTQlwiLFxuICAgIFwiQlJDTUZNQUNfU0RJT1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJyY21mX2N5d19leHRlcm5hbF9hdXRoXCIsXG4gICAgXCJubDgwMjExX2V4dGVybmFsX2F1dGhcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWsgdG8gdGhlIGRldmljZSBmaXJtd2FyZSBieSBmdWxseSB6ZXJvLWluaXRpYWxpemluZyB0aGUgYGF1dGhfc3RhdHVzYCBzdGFjayBzdHJ1Y3R1cmUgKGA9IHt9YCkgYmVmb3JlIGl0IGlzIHBhc3NlZCB0byBgYnJjbWZfZmlsX2lvdmFyX2RhdGFfc2V0KClgLiBJdCBhbHNvIGNvbmRpdGlvbmFsbHkgY29waWVzIGBwYXJhbXMtXFx1MDAzZXBta2lkYCBpbnRvIHRoZSBzdHJ1Y3R1cmUsIHdoaWNoIGlzIGd1YXJhbnRlZWQgdG8gYmUgZnVsbHkgaW5pdGlhbGl6ZWQgYW5kIG9mIHRoZSBjb3JyZWN0IGxlbmd0aCAoYFdMQU5fUE1LSURfTEVOYCkgZHVlIHRvIG5ldGxpbmsgYXR0cmlidXRlIHZhbGlkYXRpb24gKGBOTEFfUE9MSUNZX0VYQUNUX0xFTl9XQVJOYCBvbiBgTkw4MDIxMV9BVFRSX1BNS0lEYCkuIFNpbmNlIGFsbCBzdGFjayBzdHJ1Y3R1cmVzIHRvdWNoZWQgYnkgdGhlIHBhdGNoIGFyZSBub3cgZnVsbHkgemVyb2VkIGFuZCBpbml0aWFsaXplZCwgdGhlIHBhdGNoIGNvbXBsZXRlbHkgcmVzb2x2ZXMgdGhlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlIGFuZCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiB1bmluaXRpYWxpemVkIHN0YWNrIG1lbW9yeSBsZWFrIGluIGBicmNtZl9jeXdfZXh0ZXJuYWxfYXV0aGAgYnkgemVyby1pbml0aWFsaXppbmcgYGF1dGhfc3RhdHVzYCBhbmQgcHJvcGVybHkgY29weWluZyBgcG1raWRgLiBUaGUgZnVuY3Rpb24gaXMgcmVhY2hhYmxlIHZpYSB0aGUgYE5MODAyMTFfQ01EX0VYVEVSTkFMX0FVVEhgIG5ldGxpbmsgY29tbWFuZCB3aGVuIGEgQnJvYWRjb20gRnVsbE1BQyBkZXZpY2UgKGUuZy4sIGVtdWxhdGVkIHZpYSBQQ0kgb3IgVVNCKSBpcyByZWdpc3RlcmVkLiBUaGUgZHJpdmVyIGNhbiBiZSBmdXp6ZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHVzaW5nIHN5emthbGxlcidzIFBDSS9VU0IgZW11bGF0aW9uIGNhcGFiaWxpdGllcywgd2hpY2ggY2FuIG1vY2sgdGhlIGZpcm13YXJlIGxvYWRpbmcgcHJvY2VzcyBhbmQgZGV2aWNlIGluaXRpYWxpemF0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxODo0OTowMS4wMTg2MzQxMTZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM4MDQxODM1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDIzMzAyMzAwMjhlYjA5NTI5MDQzNmY2MjUzNGU0ZTU2NWI4MjgyNmZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBBdWcgNyAxODo0OTowMCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L2NvcmUuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvY29yZS5jXFxuaW5kZXggODczNzU0YmU1MTc0Yi4uYzg2ZDBiZGRlODMyNiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L2NvcmUuY1xcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvY29yZS5jXFxuQEAgLTIwMCw3ICsyMDAsNyBAQCBicmNtZl9jeXdfZXh0ZXJuYWxfYXV0aChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbiB7XFxuIFxcdHN0cnVjdCBicmNtZl9pZiAqaWZwO1xcbiBcXHRzdHJ1Y3QgYnJjbWZfcHViICpkcnZyO1xcbi1cXHRzdHJ1Y3QgYnJjbWZfYXV0aF9yZXFfc3RhdHVzX2xlIGF1dGhfc3RhdHVzO1xcbitcXHRzdHJ1Y3QgYnJjbWZfYXV0aF9yZXFfc3RhdHVzX2xlIGF1dGhfc3RhdHVzID0ge307XFxuIFxcdGludCByZXQgPSAwO1xcbiBcXG4gXFx0YnJjbWZfZGJnKFRSQUNFLCBcXFwiRW50ZXJcXFxcblxcXCIpO1xcbkBAIC0yMDgsNiArMjA4LDkgQEAgYnJjbWZfY3l3X2V4dGVybmFsX2F1dGgoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFx0aWZwID0gbmV0ZGV2X3ByaXYoZGV2KTtcXG4gXFx0ZHJ2ciA9IGlmcC1cXHUwMDNlZHJ2cjtcXG4gXFx0aWYgKHBhcmFtcy1cXHUwMDNlc3RhdHVzID09IFdMQU5fU1RBVFVTX1NVQ0NFU1MpIHtcXG4rXFx0XFx0aWYgKHBhcmFtcy1cXHUwMDNlcG1raWQpXFxuK1xcdFxcdFxcdG1lbWNweShhdXRoX3N0YXR1cy5wbWtpZCwgcGFyYW1zLVxcdTAwM2VwbWtpZCxcXG4rXFx0XFx0XFx0ICAgICAgIFdMQU5fUE1LSURfTEVOKTtcXG4gXFx0XFx0YXV0aF9zdGF0dXMuZmxhZ3MgPSBjcHVfdG9fbGUxNihCUkNNRl9FWFRBVVRIX1NVQ0NFU1MpO1xcbiBcXHR9IGVsc2Uge1xcbiBcXHRcXHRicGh5X2VycihkcnZyLCBcXFwiRXh0ZXJuYWwgYXV0aGVudGljYXRpb24gZmFpbGVkOiBzdGF0dXM9JWRcXFxcblxcXCIsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE4OjQ5OjAxLjQwMDA0NjYyNloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjc5MzMzNDAwODMyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDRkc4MDIxMVwiLFxuICAgIFwiQlJDTUZNQUNcIixcbiAgICBcIkJSQ01GTUFDX1BDSUVcIixcbiAgICBcIkJSQ01GTUFDX1VTQlwiLFxuICAgIFwiQlJDTUZNQUNfU0RJT1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJyY21mX2N5d19leHRlcm5hbF9hdXRoXCIsXG4gICAgXCJubDgwMjExX2V4dGVybmFsX2F1dGhcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiB1bmluaXRpYWxpemVkIHN0YWNrIG1lbW9yeSBsZWFrIGluIGBicmNtZl9jeXdfZXh0ZXJuYWxfYXV0aGAgYnkgemVyby1pbml0aWFsaXppbmcgYGF1dGhfc3RhdHVzYCBhbmQgcHJvcGVybHkgY29weWluZyBgcG1raWRgLiBUaGUgZnVuY3Rpb24gaXMgcmVhY2hhYmxlIHZpYSB0aGUgYE5MODAyMTFfQ01EX0VYVEVSTkFMX0FVVEhgIG5ldGxpbmsgY29tbWFuZCB3aGVuIGEgQnJvYWRjb20gRnVsbE1BQyBkZXZpY2UgKGUuZy4sIGVtdWxhdGVkIHZpYSBQQ0kgb3IgVVNCKSBpcyByZWdpc3RlcmVkLiBUaGUgZHJpdmVyIGNhbiBiZSBmdXp6ZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHVzaW5nIHN5emthbGxlcidzIFBDSS9VU0IgZW11bGF0aW9uIGNhcGFiaWxpdGllcywgd2hpY2ggY2FuIG1vY2sgdGhlIGZpcm13YXJlIGxvYWRpbmcgcHJvY2VzcyBhbmQgZGV2aWNlIGluaXRpYWxpemF0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAyMzMwMjMwMDI4ZWIwOTUyOTA0MzZmNjI1MzRlNGU1NjViODI4MjZmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgNyAxODo0OTowMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvY29yZS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmNcbmluZGV4IDg3Mzc1NGJlNTE3NGIuLmM4NmQwYmRkZTgzMjYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L2NvcmUuY1xuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmNcbkBAIC0yMDAsNyArMjAwLDcgQEAgYnJjbWZfY3l3X2V4dGVybmFsX2F1dGgoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiB7XG4gXHRzdHJ1Y3QgYnJjbWZfaWYgKmlmcDtcbiBcdHN0cnVjdCBicmNtZl9wdWIgKmRydnI7XG4tXHRzdHJ1Y3QgYnJjbWZfYXV0aF9yZXFfc3RhdHVzX2xlIGF1dGhfc3RhdHVzO1xuK1x0c3RydWN0IGJyY21mX2F1dGhfcmVxX3N0YXR1c19sZSBhdXRoX3N0YXR1cyA9IHt9O1xuIFx0aW50IHJldCA9IDA7XG4gXG4gXHRicmNtZl9kYmcoVFJBQ0UsIFwiRW50ZXJcXG5cIik7XG5AQCAtMjA4LDYgKzIwOCw5IEBAIGJyY21mX2N5d19leHRlcm5hbF9hdXRoKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRpZnAgPSBuZXRkZXZfcHJpdihkZXYpO1xuIFx0ZHJ2ciA9IGlmcC1cdTAwM2VkcnZyO1xuIFx0aWYgKHBhcmFtcy1cdTAwM2VzdGF0dXMgPT0gV0xBTl9TVEFUVVNfU1VDQ0VTUykge1xuK1x0XHRpZiAocGFyYW1zLVx1MDAzZXBta2lkKVxuK1x0XHRcdG1lbWNweShhdXRoX3N0YXR1cy5wbWtpZCwgcGFyYW1zLVx1MDAzZXBta2lkLFxuK1x0XHRcdCAgICAgICBXTEFOX1BNS0lEX0xFTik7XG4gXHRcdGF1dGhfc3RhdHVzLmZsYWdzID0gY3B1X3RvX2xlMTYoQlJDTUZfRVhUQVVUSF9TVUNDRVNTKTtcbiBcdH0gZWxzZSB7XG4gXHRcdGJwaHlfZXJyKGRydnIsIFwiRXh0ZXJuYWwgYXV0aGVudGljYXRpb24gZmFpbGVkOiBzdGF0dXM9JWRcXG5cIixcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE4OjQ5OjAxLjQwMDA0ODE2NloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgzMjMxNDk2ODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgQnJvYWRjb20gV2ktRmkgRHJpdmVyIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCB0aGF0IHNlZW1zIHRvIGJlIHRvdWNoaW5nIHRoZSBgYnJjbWZfY3l3X2V4dGVybmFsX2F1dGhgIGZ1bmN0aW9uIGluIGBkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L2NvcmUuY2AuIExvb2tzIGxpa2UgaXQgaW5pdGlhbGl6ZXMgYGF1dGhfc3RhdHVzYCB0byB6ZXJvIGFuZCBjb25kaXRpb25hbGx5IGNvcGllcyBgcGFyYW1zLVx1MDAzZXBta2lkYCB0byBgYXV0aF9zdGF0dXMucG1raWRgLiBSaWdodCBhd2F5LCBJJ20gdGhpbmtpbmcsIHRoaXMgKnNjcmVhbXMqIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGZpeCwgb3Igc29tZXRoaW5nIHNpbWlsYXIuIFRoZXkncmUgbWFraW5nIHN1cmUgYGF1dGhfc3RhdHVzYCBpcyBjbGVhbmVkIHVwLiBHb29kLiBOb3csIHRoZSByZWFsIHF1ZXN0aW9uIGlzLCBob3cgdnVsbmVyYWJsZSBpcyB0aGlzIGNvZGU/IENhbiBpdCBhY3R1YWxseSBiZSB0cmlnZ2VyZWQ/XG5cbk15IG5leHQgdGhvdWdodCBpcywgaG93IHJlYWNoYWJsZSBpcyBgYnJjbWZfY3l3X2V4dGVybmFsX2F1dGhgPyBJdCdzIHBhcnQgb2YgdGhlIGBicmNtZm1hY2AgZHJpdmVyLCB3aGljaCwgaWYgSSByZWNhbGwgY29ycmVjdGx5LCBpcyBCcm9hZGNvbSdzIDgwMi4xMSB3aXJlbGVzcyBMQU4gZHJpdmVyLiBUaGlzIGlzIGEgZ29vZCBzaWduLCBhcyB3aXJlbGVzcyBkcml2ZXJzIGFyZSBvZnRlbiBhIGdyZWF0IHRhcmdldCBmb3IgZnV6emluZy4gVGhleSBsaXZlIGF0IHRoZSBpbnRlcnNlY3Rpb24gb2YgbmV0d29yayBhbmQgaGFyZHdhcmUgaW50ZXJhY3Rpb24gYW5kIGFyZSBrbm93biB0byBiZSBtZXNzeS5cblxuVGhlIHJlYWwgcHJvYmxlbSBpcyB0aGF0IFdpLUZpIGRyaXZlcnMgb2Z0ZW4gcmVxdWlyZSBzcGVjaWZpYyBoYXJkd2FyZSBpbnRlcmZhY2VzLiBTRElPLCBVU0IsIFBDSWUgLSB0aGUgdXN1YWwgc3VzcGVjdHMuIEknbSB3b25kZXJpbmcgaWYgdGhpcyBwYXJ0aWN1bGFyIGRyaXZlciBpcyBlYXNpbHkgcmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudC4gKkNhbiogd2UgZWFzaWx5IGdldCBhdCB0aGlzIGZ1bmN0aW9uIHdpdGhvdXQgYWN0dWFsIEJyb2FkY29tIHNpbGljb24/XG5cbldhaXQgYSBtaW51dGUuLi4gSSB0aGluayBgYnJjbWZtYWNgIHN1cHBvcnRzIFVTQi4gWWVzISBUaGF0IG9wZW5zIHVwIHBvc3NpYmlsaXRpZXMuIENhbiB3ZSBmdXp6IGl0IHZpYSBVU0IgZW11bGF0aW9uPyBDb3VsZCBzb21ldGhpbmcgbGlrZSBzeXprYWxsZXIncyBVU0IgZnV6emluZyBldmVuIHdvcmsgaGVyZT8gSSd2ZSBzZWVuIGl0IGRvbmUgYmVmb3JlIHdpdGggZW11bGF0ZWQgZHVtbXkgSENEcy4gVGhhdCdzIGEgZ29vZCBkaXJlY3Rpb24gdG8gcHVyc3VlLiBMZXQncyBzdGFydCB3aXRoIGNoZWNraW5nIGlmIFVTQiBpcyBhY3R1YWxseSBzdXBwb3J0ZWQgaW4gYGJyY21mbWFjYC4gVGhlbiB3ZSBjYW4gcHJvY2VlZCB0byBldmFsdWF0ZSBob3cgd2UgY2FuIGZ1enogaXQgZnVydGhlci4gVGhpcyBjb3VsZCBiZSBhIHNvbGlkIHRhcmdldC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI1MywiT3V0cHV0VG9rZW5zIjo1MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2MiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE4OjQ5OjA5LjcyMzIwMDA4NloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjU0MTUzNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicmNtZl9jeXdfZXh0ZXJuYWxfYXV0aFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvY29yZS5jPTE5Nz1zdGF0aWMgaW50XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmM6MTk4OmJyY21mX2N5d19leHRlcm5hbF9hdXRoKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmMtMTk5LVxcdFxcdFxcdHN0cnVjdCBjZmc4MDIxMV9leHRlcm5hbF9hdXRoX3BhcmFtcyAqcGFyYW1zKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmM9MjM1PXN0YXRpYyB2b2lkIGJyY21mX2N5d19nZXRfY2ZnODAyMTFfb3BzKHN0cnVjdCBicmNtZl9wdWIgKmRydnIpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L2NvcmUuYy0yMzctXFx0ZHJ2ci1cXHUwMDNlb3BzLVxcdTAwM2VtZ210X3R4ID0gYnJjbWZfY3l3X21nbXRfdHg7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmM6MjM4OlxcdGRydnItXFx1MDAzZW9wcy1cXHUwMDNlZXh0ZXJuYWxfYXV0aCA9IGJyY21mX2N5d19leHRlcm5hbF9hdXRoO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvY29yZS5jLTIzOS19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE4OjQ5OjA5Ljc3NTc0NzY5MVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcyOTM2NjQ2NzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgYGJyY21mX2N5d19leHRlcm5hbF9hdXRoYCBGdW5jdGlvbioqXG5cbk9rYXksIHNvIHRoZSBgYnJjbWZfY3l3X2V4dGVybmFsX2F1dGhgIGZ1bmN0aW9uIGlzIGJlaW5nIGFzc2lnbmVkIHRvIHRoZSBgZHJ2ci1cdTAwM2VvcHMtXHUwMDNlZXh0ZXJuYWxfYXV0aGAgc3RydWN0dXJlLiBSaWdodCwgdGhhdCBwbGFjZXMgaXQgc3F1YXJlbHkgd2l0aGluIHRoZSBjZmc4MDIxMSBmcmFtZXdvcmssIHdoaWNoIGlzIHdoYXQgSSB3b3VsZCBleHBlY3QgZm9yIGF1dGhlbnRpY2F0aW9uIHJlbGF0ZWQgb3BlcmF0aW9ucyBpbiBhIG1vZGVybiB3aXJlbGVzcyBkcml2ZXIuIFRoZSBpbW1lZGlhdGUgcXVlc3Rpb24sIGFzIGFsd2F5cywgaXM6IGNhbiB3ZSAqcmVhY2gqIGl0PyBJbiBvdGhlciB3b3JkcywgaXMgaXQgd2lyZWQgdXAgY29ycmVjdGx5IGFuZCBleHBvc2VkIHRocm91Z2ggdGhlIHByb3BlciBpbnRlcmZhY2VzP1xuXG5HaXZlbiB0aGF0IHRoaXMgaXMgYSBjZmc4MDIxMSBvcGVyYXRpb24sIHRoZSBhbnN3ZXIgaXMgbGlrZWx5IHRvIGJlIFwieWVzLFwiIGlmIHRoZSBkcml2ZXIgbG9hZHMgc3VjY2Vzc2Z1bGx5IGFuZCBhIGRldmljZSBwcm9iZXMsIHRoZW4gd2Ugc2hvdWxkIGJlIGFibGUgdG8gdHJpZ2dlciB0aGUgZnVuY3Rpb24uIFNpbmNlIGNmZzgwMjExIG9wZXJhdGlvbnMgYXJlIG9mdGVuIGludm9rZWQgdGhyb3VnaCBuZXRsaW5rIChzcGVjaWZpY2FsbHksIG5sODAyMTEpLCB0aGF0J3Mgd2hlcmUgSSdkIHN0YXJ0IGxvb2tpbmcgZm9yIGEgcG90ZW50aWFsIGVudHJ5IHBvaW50IGZvciB0ZXN0aW5nIG9yIGV4cGxvaXRhdGlvbi4gSSdsbCBuZWVkIHRvIGV4YW1pbmUgdGhlIG5sODAyMTEgbWVzc2FnZSBoYW5kbGluZyBsb2dpYyBpbiB0aGUgYGJyY21mbWFjYCBkcml2ZXIuXG5cbk5vdywgYSBxdWljayByZW1pbmRlciB0byBteXNlbGY6IGRvZXMgYGJyY21mbWFjYCBldmVuIHN1cHBvcnQgVVNCPyBJIG5lZWQgdG8gY2hlY2sgdGhlIGRyaXZlciBjb25maWd1cmF0aW9uIGFuZCBhc3NvY2lhdGVkIGhhcmR3YXJlIGRvY3VtZW50YXRpb24uIElmIGl0IGRvZXMgc3VwcG9ydCBVU0IsIHRoYXQgaW1tZWRpYXRlbHkgYnJvYWRlbnMgdGhlIGF0dGFjayBzdXJmYWNlIHRvIGluY2x1ZGUgcG90ZW50aWFsIFVTQi1yZWxhdGVkIHZ1bG5lcmFiaWxpdGllcyBhbG9uZ3NpZGUgdGhlIHVzdWFsIHdpcmVsZXNzIGF0dGFjayB2ZWN0b3JzLiBVbmRlcnN0YW5kaW5nIHRoZSB0cmFuc3BvcnQgbWVkaXVtIGlzIGVzc2VudGlhbCBmb3IgYSBmdWxsIGFzc2Vzc21lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzNTgsIk91dHB1dFRva2VucyI6NDcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxODo0OToxNy4wNjk0MTUyNTlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTEzMjQ1NDUsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1vZHVsZV91c2JfZHJpdmVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE4OjQ5OjE3LjEyMDc0Njc4M1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgwODcyNTA4MDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoZSByZWdpc3RyYXRpb24gb2YgVVNCIHdpdGhpbiB0aGUgYGJyY21mbWFjYCBkcml2ZXI6XG5cbioqSW52ZXN0aWdhdGluZyBVU0IgUmVnaXN0cmF0aW9uIHdpdGhpbiBicmNtZm1hYyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyBVU0IgZGV2aWNlcyBhcmUgcmVnaXN0ZXJlZCBhbmQgaGFuZGxlZCB3aXRoaW4gdGhlIGBicmNtZm1hY2AgZHJpdmVyLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBrbm93IHdoZXJlIHRoZSBob29rcyBhcmUsIHdoYXQgc3RydWN0dXJlcyBhcmUgdXNlZCwgYW5kIHdoYXQgaW50ZXJhY3Rpb24gaXMgaGFwcGVuaW5nIGJldHdlZW4gdGhlIFVTQiBzdWJzeXN0ZW0gYW5kIHRoZSBicm9hZGVyIGBicmNtZm1hY2AgZnJhbWV3b3JrLiBJcyBpdCBhIGRpcmVjdCByZWdpc3RyYXRpb24gd2l0aCB0aGUgVVNCIGNvcmUsIG9yIGFyZSB0aGVyZSBsYXllcnMgb2YgYWJzdHJhY3Rpb24gaW4gYmV0d2Vlbj8gSSdsbCBwcm9iYWJseSBzdGFydCBieSBsb29raW5nIGZvciBzdGFuZGFyZCBVU0IgcHJvYmUgYW5kIGRpc2Nvbm5lY3QgZnVuY3Rpb25zIChsaWtlbHkgbmFtZWQgc29tZXRoaW5nIGxpa2UgYGJyY21mX3VzYl9wcm9iZWAgYW5kIGBicmNtZl91c2JfZGlzY29ubmVjdGAsIG9yIHNvbWV0aGluZyBzaW1pbGFyKS4gVGhlbiwgSSdsbCBuZWVkIHRvIHRyYWNlIHRoZSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZS4gSSBleHBlY3QgdG8gZmluZCBzb21lIGtpbmQgb2YgZGV2aWNlIHRhYmxlIG9yIGNvbmZpZ3VyYXRpb24gZGF0YSB0aGF0IHNwZWNpZmllcyB3aGljaCBVU0IgZGV2aWNlcyB0aGlzIGRyaXZlciBzdXBwb3J0cy4gSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBkcml2ZXIgZGV0ZXJtaW5lcyB3aGljaCBVU0IgaW50ZXJmYWNlIHRvIHVzZS4gSeKAmW0gdGhpbmtpbmcgSeKAmWxsIHN0YXJ0IGJ5IHVzaW5nIG15IGV4aXN0aW5nIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGRyaXZlciBhbmQgbG9vayBmb3IgZnVuY3Rpb25zIHRoYXQgaGFuZGxlIFVTQi1zcGVjaWZpYyBoYXJkd2FyZSBjb21tdW5pY2F0aW9uLiBJJ2xsIGZvY3VzIG9uIHRoZSBkYXRhIHN0cnVjdHVyZXMgYXNzb2NpYXRlZCB3aXRoIFVTQiBkZXNjcmlwdG9ycy4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHN5bmNocm9uaXphdGlvbiBtZWNoYW5pc21zIGJlaW5nIHVzZWQgKG11dGV4ZXMsIHNwaW5sb2NrcywgZXRjLikgdG8gZW5zdXJlIHRoYXQgVVNCIGFjY2VzcyBpcyB0aHJlYWQtc2FmZSwgcGFydGljdWxhcmx5IGdpdmVuIHRoZSBwb3RlbnRpYWwgZm9yIGludGVycnVwdC1kcml2ZW4gYWN0aXZpdHkuIEnigJlsbCBuZWVkIHRvIHF1aWNrbHkgY29uZmlybSB0aGF0IHRoZSBpbnRlcnJ1cHQgaGFuZGxpbmcgcHJvcGVybHkgbWFuYWdlcyB0aGUgVVNCIGNvbW11bmljYXRpb24gd2l0aG91dCBjYXVzaW5nIGNvbmZsaWN0cy4gVGhpcyBpcyBhIGZvdW5kYXRpb25hbCBzdGVwIGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgZHJpdmVyIGludGVncmF0ZXMgd2l0aCBvdGhlciBzeXN0ZW1zIHRoYXQgSSdtIGN1cnJlbnRseSB3b3JraW5nIHdpdGguIFNvLCBmaXJzdCB0aGluZ3MgZmlyc3Q6IGZpbmQgdGhlIHJlbGV2YW50IHNvdXJjZSBjb2RlIGFuZCBzdGFydCB0cmFjaW5nIHRoZSByZWdpc3RyYXRpb24gcGF0aC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzgwOSwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE4OjQ5OjI1LjIwNzk5OTg4NloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTI4NjA4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1c2JfcmVnaXN0ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYnVzLmg9MzMzPXZvaWQgYnJjbWZfdXNiX2V4aXQodm9pZCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2J1cy5oOjMzNDppbnQgYnJjbWZfdXNiX3JlZ2lzdGVyKHZvaWQpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9idXMuaC0zMzUtI2Vsc2VcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYnVzLmg9MzM2PXN0YXRpYyBpbmxpbmUgdm9pZCBicmNtZl91c2JfZXhpdCh2b2lkKSB7IH1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYnVzLmg6MzM3OnN0YXRpYyBpbmxpbmUgaW50IGJyY21mX3VzYl9yZWdpc3Rlcih2b2lkKSB7IHJldHVybiAwOyB9XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2J1cy5oLTMzOC0jZW5kaWZcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmM9MTU4ND1pbnQgX19pbml0IGJyY21mX2NvcmVfaW5pdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuYy0xNTkxLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmM6MTU5MjpcXHRlcnIgPSBicmNtZl91c2JfcmVnaXN0ZXIoKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jLTE1OTMtXFx0aWYgKGVycilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jOjE1OTQ6XFx0XFx0Z290byBlcnJvcl91c2JfcmVnaXN0ZXI7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuYy0xNTk1LVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuYy0xNjAyLVxcdGJyY21mX3VzYl9leGl0KCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuYzoxNjAzOmVycm9yX3VzYl9yZWdpc3RlcjpcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jLTE2MDQtXFx0YnJjbWZfc2Rpb19leGl0KCk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM9MTU4OT12b2lkIGJyY21mX3VzYl9leGl0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtMTYwMi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM6MTYwMzppbnQgYnJjbWZfdXNiX3JlZ2lzdGVyKHZvaWQpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTE2MDQte1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xNjA1LVxcdGJyY21mX2RiZyhVU0IsIFxcXCJFbnRlclxcXFxuXFxcIik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jOjE2MDY6XFx0cmV0dXJuIHVzYl9yZWdpc3RlcihcXHUwMDI2YnJjbWZfdXNiZHJ2cik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTE2MDctfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxODo0OToyNS4yNTcyOTI0MTFaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDg4OTcwNjMxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaXQgd2VudDpcblxuKipFeGFtaW5pbmcgYnJjbWZtYWMncyBVU0IgUG90ZW50aWFsIGFuZCBCcm9hZGNvbSdzIEFyY2hpdGVjdHVyZSoqXG5cbkFscmlnaHQsIHNvIEknbSBmb2N1c2luZyBvbiB0aGUgYGJyY21mbWFjYCBkcml2ZXIuIFRoZSBpbml0aWFsIGNsdWUgaXMgdGhhdCBpdCBzdXBwb3J0cyBVU0IsIHdoaWNoIGlzIGEga2V5IHBvaW50IHRvIHN0YXJ0IHdpdGguIEhtbSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBhIGxpdHRsZSBiZXR0ZXIuIE5vdywgSSBzZWUgdGhpcyBgYnJjbWZfY3l3X2V4dGVybmFsX2F1dGhgIGZ1bmN0aW9uLiBUaGF0IG5hbWUgcmluZ3MgYSBiZWxsLCBhbmQgSSByZWNhbGwgc2VlaW5nIGl0IGluIGBjeXcvY29yZS5jYC4gU28gbXkgcXVlc3Rpb24gbm93IGlzLCB3aGF0IGV4YWN0bHkgKmlzKiBgY3l3YCBpbiByZWxhdGlvbiB0byB0aGUgYnJvYWRlciBhcmNoaXRlY3R1cmU/IElzIGl0IHRpZWQgdG8gYSBzcGVjaWZpYyBidXMgaW50ZXJmYWNlLCBvciBpcyBpdCBtb3JlIG9mIGEgdmVuZG9yLXNwZWNpZmljIHN1Yi1kcml2ZXIgdGhhdCBtaWdodCBiZSB1c2VkIGFjcm9zcyBkaWZmZXJlbnQgYnVzIHR5cGVzPyBJIG5lZWQgdG8gZ2V0IHRvIHRoZSByb290IG9mIHRoYXQuIEdpdmVuIGl0cyBhc3NvY2lhdGlvbiB3aXRoIGBicmNtZm1hY2AsIEkgc2hvdWxkIHByb2JhYmx5IGV4YW1pbmUgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvY29yZS5jYCBmb3Igc29tZSBjbGFyaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MTE5LCJPdXRwdXRUb2tlbnMiOjU5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTg6NDk6MzYuMTQ3MDAwOTlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MjMyMzk1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJyY21mX2N5d19nZXRfY2ZnODAyMTFfb3BzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmM9MTk4PWJyY21mX2N5d19leHRlcm5hbF9hdXRoKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L2NvcmUuYy0yMzQtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmM6MjM1OnN0YXRpYyB2b2lkIGJyY21mX2N5d19nZXRfY2ZnODAyMTFfb3BzKHN0cnVjdCBicmNtZl9wdWIgKmRydnIpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmMtMjM2LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvY29yZS5jPTM3NT1jb25zdCBzdHJ1Y3QgYnJjbWZfZnd2aWRfb3BzIGJyY21mX2N5d19vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L2NvcmUuYy0zNzgtXFx0LmFjdGl2YXRlX2V2ZW50cyA9IGJyY21mX2N5d19hY3RpdmF0ZV9ldmVudHMsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmM6Mzc5OlxcdC5nZXRfY2ZnODAyMTFfb3BzID0gYnJjbWZfY3l3X2dldF9jZmc4MDIxMV9vcHMsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmMtMzgwLVxcdC5yZWdpc3Rlcl9ldmVudF9oYW5kbGVycyA9IGJyY21mX2N5d19yZWdpc3Rlcl9ldmVudF9oYW5kbGVycyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTg6NDk6MzYuMTk2MjM4ODI1WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg1NTY2ODM5ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBzb21lb25lIHdlbGwtdmVyc2VkIGluIHRoaXMgYXJlYTpcblxuKipEaWdnaW5nIGludG8gdGhlIGJyY21mIERyaXZlciBTdHJ1Y3R1cmUqKlxuXG5BbHJpZ2h0LCBzbyBgYnJjbWZfY3l3X29wc2AgaXMgYmVpbmcgYXNzaWduZWQgdG8gYGJyY21mX2Z3dmlkX29wc2AuIFRoYXQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgc29tZXRoaW5nIHNpZ25pZmljYW50IGlzIGhhcHBlbmluZyB3aXRoIHRoZSBmaXJtd2FyZSBpbnRlcmZhY2UuIEdpdmVuIHRoZSBuYW1lcywgSSdtIGFzc3VtaW5nIHdlJ3JlIGRlYWxpbmcgd2l0aCB0aGUgQnJvYWRjb20gV2lGaSBkcml2ZXIgKGJyY21mKSBhbmQsIGxpa2VseSwgc29tZSBmb3JtIG9mIGZpcm13YXJlIHZpZGVvIG9yIGRhdGEgcHJvY2Vzc2luZyAoZnd2aWQpLiBUaGUgY3J1Y2lhbCBxdWVzdGlvbiBpczogd2h5PyBXaGF0J3MgdGhlIGNvbnRleHQgaGVyZT9cblxuTXkgbmV4dCBzdGVwIGlzIGNsZWFyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlc2UgdHdvIG9wZXJhdGlvbiBzdHJ1Y3R1cmVzLiBJIG5lZWQgdG8gdHJhY2Ugd2hlcmUgYGJyY21mX2N5d19vcHNgIGlzICphY3R1YWxseSogdXNlZC4gSXMgaXQgYSBmdW5jdGlvbiBwb2ludGVyIHRhYmxlPyBJcyBpdCBiZWluZyBkeW5hbWljYWxseSBsb2FkZWQ/IElzIHRoaXMgYSBzdGFuZGFyZCBpbnRlcmZhY2UgZm9yIGZpcm13YXJlIGludGVyYWN0aW9uLCBvciBzb21ldGhpbmcgbW9yZSBzcGVjaWFsaXplZD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRhdGEgZmxvdy4gQnkgdHJhY2tpbmcgdGhlIHVzYWdlcywgSSdsbCBzdGFydCB0byBidWlsZCBhIGNsZWFyZXIgcGljdHVyZSBvZiBob3cgdGhlIGRyaXZlciBpcyBhcmNoaXRlY3RlZCBhbmQgdGhlIHJvbGUgYGJyY21mX2N5d19vcHNgIHBsYXlzIGluIHRoZSBicm9hZGVyIHNjaGVtZS4gSXQncyB0aW1lIHRvIGRpZyBpbnRvIHRoZSBzb3VyY2UgY29kZSBhbmQgZmlndXJlIG91dCB0aGUgZXhhY3QgbmF0dXJlIG9mIHRoaXMgYXNzaWdubWVudC4gSSBuZWVkIHRvIHNlZSB3aGF0IGBicmNtZl9jeXdfb3BzYCAqZG9lcyogb25jZSBpdCdzIGFzc2lnbmVkIHRvIGBicmNtZl9md3ZpZF9vcHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1OTMxLCJPdXRwdXRUb2tlbnMiOjUwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTg6NDk6NDQuNzUyOTI0OTkyWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDY1NjA2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicmNtZl9jeXdfb3BzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmM9MzYzPXN0YXRpYyB2b2lkIGJyY21mX2N5d19yZWdpc3Rlcl9ldmVudF9oYW5kbGVycyhzdHJ1Y3QgYnJjbWZfcHViICpkcnZyKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmMtMzc0LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvY29yZS5jOjM3NTpjb25zdCBzdHJ1Y3QgYnJjbWZfZnd2aWRfb3BzIGJyY21mX2N5d19vcHMgPSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmMtMzc2LVxcdC5zZXRfc2FlX3Bhc3N3b3JkID0gYnJjbWZfY3l3X3NldF9zYWVfcHdkLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9tb2R1bGUuYz0xMj1zdGF0aWMgaW50IF9faW5pdCBicmNtZl9jeXdfaW5pdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9tb2R1bGUuYy0xNC1cXHRyZXR1cm4gYnJjbWZfZnd2aWRfcmVnaXN0ZXJfdmVuZG9yKEJSQ01GX0ZXVkVORE9SX0NZVywgVEhJU19NT0RVTEUsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9tb2R1bGUuYzoxNTpcXHRcXHRcXHRcXHRcXHQgICBcXHUwMDI2YnJjbWZfY3l3X29wcyk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9tb2R1bGUuYy0xNi19XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L3ZvcHMuaC03LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvdm9wcy5oOjg6ZXh0ZXJuIGNvbnN0IHN0cnVjdCBicmNtZl9md3ZpZF9vcHMgYnJjbWZfY3l3X29wcztcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L3ZvcHMuaDo5OiNkZWZpbmUgQ1lXX1ZPUFNcXHQoXFx1MDAyNmJyY21mX2N5d19vcHMpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy92b3BzLmgtMTAtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE4OjQ5OjQ0LjgwMzU4Njk1NloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NDA3OTYyMzU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVGFyZ2V0IERyaXZlciBmb3IgUG90ZW50aWFsIEZ1enppbmcqKlxuXG5Pa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIHRoaXMgaXMgaGl0dGluZyBtZSBhcyBhIGBCUkNNRl9GV1ZFTkRPUl9DWVdgIGZpcm13YXJlIHZlbmRvci4gUmlnaHQgYXdheSwgdGhhdCdzIHRlbGxpbmcgbWUgaXQncyBwYXJ0IG9mIHRoZSBgYnJjbWZtYWNgIGRyaXZlci4gTXkgYnJhaW4ncyBhbHJlYWR5IHN0YXJ0aW5nIHRvIHJ1biB0aHJvdWdoIHBvdGVudGlhbCBhdHRhY2sgdmVjdG9ycy4uLiBpcyB0aGlzIGRyaXZlciBldmVuICpmdXp6YWJsZSo/IFRoZSBhbnN3ZXIncyBnb3QgdG8gYmUgYSByZXNvdW5kaW5nIHllcywgcmlnaHQ/IEkgc2VlbSB0byByZWNhbGwgc3l6a2FsbGVyIGhhcyBzb21lIGRlY2VudCBVU0IgZnV6emluZyBjYXBhYmlsaXRpZXMsIGFuZCBJJ20gcHJldHR5IHN1cmUgYGJyY21mbWFjYCBjYW4gYmUgYm91bmQgdG8gYSBkdW1teSBVU0IgZGV2aWNlLiBUaGF0J3MgYSBodWdlIGluaXRpYWwgd2luLlxuXG5CdXQgaGFuZyBvbi4uLiBhIGtleSBkZXRhaWwganVzdCBwb3BwZWQgaW50byBtaW5kLiBJc24ndCBgYnJjbWZtYWNgIG9uZSBvZiAqdGhvc2UqIGRyaXZlcnMgdGhhdCBuZWVkcyBmaXJtd2FyZSBsb2FkZWQgKmJlZm9yZSogaXQgZXZlbiByZWdpc3RlcnMgdGhlIGBjZmc4MDIxMWAgZGV2aWNlPyBVZ2gsIHRoYXQncyBhIGh1cmRsZSwgcG90ZW50aWFsbHkuIERvZXMgc3l6a2FsbGVyIGFjY291bnQgZm9yIHRoaXM/IE15IGV4cGVyaWVuY2UgaXMgdGhhdCBzeXprYWxsZXIgdXN1YWxseSBkb2Vzbid0IGRlYWwgd2l0aCB0aGUgYWN0dWFsIGZpcm13YXJlIGl0c2VsZiwgYnV0IGl0IGNhbiBnZXQgYXJvdW5kIHRoZSBwcm9ibGVtIGlmIHRoZSBkcml2ZXIgdXNlcyBgcmVxdWVzdF9maXJtd2FyZWAgYW5kIHN5emthbGxlciBwcm92aWRlcyBkdW1teSBmaWxlcywgb3IgaWYgdGhlIGRyaXZlciBmYWlscyBncmFjZWZ1bGx5IGFuZCBleHBvc2VzICpzb21lKiBpbnRlcmZhY2VzLlxuXG5UaGUgcmVhbCBxdWVzdGlvbiBpcy4uLiBEb2VzIHRoaXMgZHJpdmVyIGdyYWNlZnVsbHkgaGFuZGxlIHRoZSBmYWlsdXJlPyBJbiB0aGUgY2FzZSBvZiBgYnJjbWZtYWNgLCBpZiBmaXJtd2FyZSBsb2FkaW5nICpmYWlscyosIHdpbGwgaXQgc3RpbGwgcmVnaXN0ZXIgdGhlIHdpcGh5PyBUaGF0J3MgdGhlIGNyaXRpY2FsIHBpZWNlIGhlcmUuIEkgbmVlZCB0byBrbm93IGlmIEkgY2FuIGdldCBzb21lIHNvcnQgb2YgaW50ZXJmYWNlIGV4cG9zZWQsIGV2ZW4gaWYgdGhlIGRyaXZlciBpcyB1bmhhcHB5LiBJIG5lZWQgdG8gY2hlY2sgdGhlIGBicmNtZl91c2JfcHJvYmVgIGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2OTAzLCJPdXRwdXRUb2tlbnMiOjQ5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTk4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE4OjQ5OjUzLjIxMTU1MjcwNVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQ1NjEwNDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnJjbWZfdXNiX3Byb2JlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jPTExNjU9c3RhdGljIGNvbnN0IHN0cnVjdCBicmNtZl9idXNfb3BzIGJyY21mX3VzYl9idXNfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTExNzUtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jOjExNzY6c3RhdGljIHZvaWQgYnJjbWZfdXNiX3Byb2JlX3BoYXNlMihzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCByZXQsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTExNzctXFx0XFx0XFx0XFx0ICAgc3RydWN0IGJyY21mX2Z3X3JlcXVlc3QgKmZ3cmVxKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jPTEyMjQ9YnJjbWZfdXNiX3ByZXBhcmVfZndfcmVxdWVzdChzdHJ1Y3QgYnJjbWZfdXNiZGV2X2luZm8gKmRldmluZm8pXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtMTI0My1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM6MTI0NDpzdGF0aWMgaW50IGJyY21mX3VzYl9wcm9iZV9jYihzdHJ1Y3QgYnJjbWZfdXNiZGV2X2luZm8gKmRldmluZm8sXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTEyNDUtXFx0XFx0XFx0ICAgICAgZW51bSBicmNtZl9md3ZlbmRvciBmd3ZpZClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xMzA4LVxcdC8qIHJlcXVlc3QgZmlybXdhcmUgaGVyZSAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYzoxMzA5OlxcdHJldCA9IGJyY21mX2Z3X2dldF9maXJtd2FyZXMoZGV2LCBmd3JlcSwgYnJjbWZfdXNiX3Byb2JlX3BoYXNlMik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTEzMTAtXFx0aWYgKHJldCkge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jPTEzNDQ9c3RhdGljIGludFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYzoxMzQ1OmJyY21mX3VzYl9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xMzQ2LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xNDQ1LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYzoxNDQ2OlxcdHJldCA9IGJyY21mX3VzYl9wcm9iZV9jYihkZXZpbmZvLCBpZC1cXHUwMDNlZHJpdmVyX2luZm8pO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xNDQ3LVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM9MTUxND1zdGF0aWMgaW50IGJyY21mX3VzYl9yZXNldF9yZXN1bWUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtMTUyNi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM6MTUyNzpcXHRyZXQgPSBicmNtZl9md19nZXRfZmlybXdhcmVzKFxcdTAwMjZ1c2ItXFx1MDAzZWRldiwgZndyZXEsIGJyY21mX3VzYl9wcm9iZV9waGFzZTIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xNTI4LVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jPTE1Njg9c3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGJyY21mX3VzYmRydnIgPSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTE1NjktXFx0Lm5hbWUgPSBLQlVJTERfTU9ETkFNRSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM6MTU3MDpcXHQucHJvYmUgPSBicmNtZl91c2JfcHJvYmUsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTE1NzEtXFx0LmRpc2Nvbm5lY3QgPSBicmNtZl91c2JfZGlzY29ubmVjdCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTg6NDk6NTMuMjY2MTIyODM5WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc5NDg3NDcyMjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZTpcblxuKipEZWJ1Z2dpbmcgYSBVU0IgRmlybXdhcmUgTG9hZCBGYWlsdXJlKipcblxuSG1tLCBzbyB0aGUgZmlybXdhcmUgbG9hZGluZyBpcyBmYWlsaW5nLiBSaWdodCwgSSBrbm93IHRoYXQgaWYgYGJyY21mX3VzYl9wcm9iZV9waGFzZTJgIGlzIGNhbGxlZCBhbmQgYHJldGAgaXNuJ3QgemVybywgaXQgbWVhbnMgd2UndmUgaGl0IGEgc25hZyBhZnRlciB0aGUgaW5pdGlhbCBwcm9iZS4gVGhpcyBpcyBsaWtlbHkgd2hlcmUgdGhlIHJlYWwgcHJvYmxlbSBpcy4gVGhlIHF1ZXN0aW9uIG5vdyBpczogd2hhdCdzIGFjdHVhbGx5ICpoYXBwZW5pbmcqIGluc2lkZSBgYnJjbWZfdXNiX3Byb2JlX3BoYXNlMmAgd2hlbiBgcmV0YCBpc24ndCAwPyBMZXQncyBkaXZlIGludG8gdGhhdCBmdW5jdGlvbiBhbmQgZ2V0IGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGVycm9yIHBhdGguIFRpbWUgdG8gZ28gbG9vayBhdCBgYnJjbWZfdXNiX3Byb2JlX3BoYXNlMmAgYW5kIHNlZSB3aGF04oCZcyBnZXR0aW5nIHRyaXBwZWQgdXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg2NTEsIk91dHB1dFRva2VucyI6NTIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxODo1MDowMS4yMTQ4NzM0MjdaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0MjYzODQ1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicmNtZl91c2JfcHJvYmVfcGhhc2UyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jPTExNjU9c3RhdGljIGNvbnN0IHN0cnVjdCBicmNtZl9idXNfb3BzIGJyY21mX3VzYl9idXNfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTExNzUtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jOjExNzY6c3RhdGljIHZvaWQgYnJjbWZfdXNiX3Byb2JlX3BoYXNlMihzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCByZXQsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTExNzctXFx0XFx0XFx0XFx0ICAgc3RydWN0IGJyY21mX2Z3X3JlcXVlc3QgKmZ3cmVxKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jPTEyNDQ9c3RhdGljIGludCBicmNtZl91c2JfcHJvYmVfY2Ioc3RydWN0IGJyY21mX3VzYmRldl9pbmZvICpkZXZpbmZvLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTEzMDgtXFx0LyogcmVxdWVzdCBmaXJtd2FyZSBoZXJlICovXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jOjEzMDk6XFx0cmV0ID0gYnJjbWZfZndfZ2V0X2Zpcm13YXJlcyhkZXYsIGZ3cmVxLCBicmNtZl91c2JfcHJvYmVfcGhhc2UyKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtMTMxMC1cXHRpZiAocmV0KSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM9MTUxND1zdGF0aWMgaW50IGJyY21mX3VzYl9yZXNldF9yZXN1bWUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtMTUyNi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM6MTUyNzpcXHRyZXQgPSBicmNtZl9md19nZXRfZmlybXdhcmVzKFxcdTAwMjZ1c2ItXFx1MDAzZWRldiwgZndyZXEsIGJyY21mX3VzYl9wcm9iZV9waGFzZTIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xNTI4LVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxODo1MDowMS41NTc1MTg4MzFaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODYyNDE2NzcwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYGJyY21mX3VzYl9wcm9iZV9waGFzZTJgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgc2Vjb25kIHBoYXNlIG9mIFVTQiBwcm9iaW5nIGVudGFpbHMgaW4gdGhlIEJyb2FkY29tIFdpLUZpIGRyaXZlci4gSSdtIGFzc3VtaW5nLCBnaXZlbiB0aGUgbmFtaW5nLCB0aGF0IGBicmNtZl91c2JfcHJvYmVfcGhhc2UxYCBoYW5kbGVkIHNvbWUgaW5pdGlhbCBzZXR1cCBvciBkZXRlY3Rpb24uIE5vdywgcGhhc2UgMiBtdXN0IGJlIHdoZXJlIHRoZSByZWFsIHdvcmsgb2YgaW5pdGlhbGl6aW5nIHRoZSBkZXZpY2UgaGFwcGVucy4gTXkgZXhwZWN0YXRpb24gaXMgdGhhdCB0aGlzIGludm9sdmVzOlxuXG4qKlVTQiBEZXZpY2UgSW5pdGlhbGl6YXRpb246IERpdmluZyBpbnRvIGJyY21mX3VzYl9wcm9iZV9waGFzZTIqKlxuXG4qICAgRmlyc3QsIEknZCBleHBlY3Qgc29tZSBraW5kIG9mIHJlc291cmNlIGFsbG9jYXRpb24uIExpa2VseSwgbWVtb3J5IGZvciBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZXMgcmVsYXRlZCB0byB0aGUgZGV2aWNlJ3Mgc3RhdGUuIElzIHRoZXJlIGEgYHN0cnVjdCBicmNtZl91c2JkZXZgIG9yIHNpbWlsYXI/IEl0J3MgcHJvYmFibHkgYmVpbmcgaW5pdGlhbGl6ZWQgaGVyZS5cbiogICBOZXh0LCBJIGFudGljaXBhdGUgc29tZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBVU0IgY29yZS4gU2V0dGluZyB1cCBlbmRwb2ludHMgZm9yIGRhdGEgdHJhbnNmZXIgKGJ1bGssIGludGVycnVwdCwgY29udHJvbCksIGNvbmZpZ3VyaW5nIFVTQiBkZXNjcmlwdG9ycywgYW5kIGxpa2VseSBjbGFpbWluZyB0aGUgVVNCIGludGVyZmFjZSB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSBXaS1GaSBkZXZpY2UuIFRoaXMgaXMgd2hlcmUgSSdsbCBzZWUgdGhlIGRyaXZlciB0YWtpbmcgb3duZXJzaGlwIG9mIHRoZSBVU0IgcmVzb3VyY2VzLlxuKiAgIFRoZXJlJ3MgYWxtb3N0IGNlcnRhaW5seSBnb2luZyB0byBiZSBzb21lIGZvcm0gb2YgZGV2aWNlIGNvbW11bmljYXRpb24gc2V0dXAuIFRoaXMgY291bGQgaW52b2x2ZSBzZW5kaW5nIGluaXRpYWwgY29udHJvbCBtZXNzYWdlcyB0byB0aGUgQnJvYWRjb20gY2hpcCwgc2V0dGluZyB1cCBoYXJkd2FyZSByZWdpc3RlcnMsIG9yIHByZXBhcmluZyB0aGUgY2hpcCBmb3Igc3Vic2VxdWVudCBjb21tdW5pY2F0aW9uIHdpdGggdGhlIGhvc3QuIFRoaXMgc3RlcCBpcyB3aGVyZSBmaXJtd2FyZSBsb2FkaW5nIG1pZ2h0IHRha2UgcGxhY2UsIGlmIGl0J3Mgbm90IGhhbmRsZWQgZWFybGllci5cbiogICBJJ2xsIGJlIGxvb2tpbmcgZm9yIGludGVycnVwdCBoYW5kbGluZyBzZXR1cCwgaWYgdGhlIGRldmljZSB1c2VzIGludGVycnVwdHMgdG8gc2lnbmFsIHJlYWRpbmVzcyBvciBldmVudHMuIFRoZSBkcml2ZXIgbmVlZHMgdG8gcmVnaXN0ZXIgaW50ZXJydXB0IGhhbmRsZXJzIHdpdGggdGhlIFVTQiBjb3JlLlxuKiAgIEZpbmFsbHksIEknbGwgYmUgc2VhcmNoaW5nIGZvciBhbnkgZGV2aWNlLXNwZWNpZmljIGluaXRpYWxpemF0aW9uLiBNYXliZSB0aGVyZSdzIGEgaGFyZHdhcmUgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UgZm9yIHRoZSBCcm9hZGNvbSBjaGlwLCBvciBzb21lIGZvcm0gb2YgcG93ZXItdXAgcm91dGluZS4gVGhlcmUgY291bGQgYmUgc29tZSBzb3J0IG9mIGEgY2hlY2sgdG8gZW5zdXJlIHRoZSBjb25uZWN0aW9uLlxuKiAgIEknZCBhbHNvIGV4cGVjdCB0byBzZWUgc29tZSBlcnJvciBoYW5kbGluZy4gVVNCIGlzIGNvbXBsZXgsIHNvIHRoaW5ncyBjYW4gZ28gd3JvbmcuIEknbGwgYmUgbG9va2luZyBmb3IgZXJyb3IgY2hlY2tzIGFmdGVyIGVhY2ggVVNCIG9wZXJhdGlvbiwgYW5kIGFueSBlcnJvciByZWNvdmVyeSByb3V0aW5lcyB0aGF0IGFyZSBpbiBwbGFjZS5cblxuSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBkcml2ZXIgaXMgdHJhbnNsYXRpbmcgaGlnaGVyLWxldmVsIFdpLUZpIGNvbmNlcHRzIChsaWtlIHNjYW5uaW5nLCBhc3NvY2lhdGlvbiwgZGF0YSB0cmFuc2ZlcikgaW50byB0aGUgVVNCLXNwZWNpZmljIG9wZXJhdGlvbnMgd2l0aGluIHRoaXMgZnVuY3Rpb24uIExldCdzIHNlZSBob3cgaXQncyBkb25lLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NTA1LCJPdXRwdXRUb2tlbnMiOjU0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTg6NTA6MTAuMTgxNjg4NjY5WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNjYyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTE3NixcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTE3NjpcXHRzdGF0aWMgdm9pZCBicmNtZl91c2JfcHJvYmVfcGhhc2UyKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHJldCxcXG4xMTc3OlxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBicmNtZl9md19yZXF1ZXN0ICpmd3JlcSlcXG4xMTc4OlxcdHtcXG4xMTc5OlxcdFxcdHN0cnVjdCBicmNtZl9idXMgKmJ1cyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xcbjExODA6XFx0XFx0c3RydWN0IGJyY21mX3VzYmRldl9pbmZvICpkZXZpbmZvID0gYnVzLVxcdTAwM2VidXNfcHJpdi51c2ItXFx1MDAzZWRldmluZm87XFxuMTE4MTpcXHRcXHRjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3O1xcbjExODI6XFx0XFxuMTE4MzpcXHRcXHRpZiAocmV0KVxcbjExODQ6XFx0XFx0XFx0Z290byBlcnJvcjtcXG4xMTg1OlxcdFxcbjExODY6XFx0XFx0YnJjbWZfZGJnKFVTQiwgXFxcIlN0YXJ0IGZ3IGRvd25sb2FkaW5nXFxcXG5cXFwiKTtcXG4xMTg3OlxcdFxcbjExODg6XFx0XFx0ZncgPSBmd3JlcS1cXHUwMDNlaXRlbXNbQlJDTUZfVVNCX0ZXX0NPREVdLmJpbmFyeTtcXG4xMTg5OlxcdFxcdGtmcmVlKGZ3cmVxKTtcXG4xMTkwOlxcdFxcbjExOTE6XFx0XFx0cmV0ID0gY2hlY2tfZmlsZShmdy1cXHUwMDNlZGF0YSk7XFxuMTE5MjpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbjExOTM6XFx0XFx0XFx0YnJjbWZfZXJyKFxcXCJpbnZhbGlkIGZpcm13YXJlXFxcXG5cXFwiKTtcXG4xMTk0OlxcdFxcdFxcdHJlbGVhc2VfZmlybXdhcmUoZncpO1xcbjExOTU6XFx0XFx0XFx0Z290byBlcnJvcjtcXG4xMTk2OlxcdFxcdH1cXG4xMTk3OlxcdFxcbjExOTg6XFx0XFx0ZGV2aW5mby1cXHUwMDNlaW1hZ2UgPSBmdy1cXHUwMDNlZGF0YTtcXG4xMTk5OlxcdFxcdGRldmluZm8tXFx1MDAzZWltYWdlX2xlbiA9IGZ3LVxcdTAwM2VzaXplO1xcbjEyMDA6XFx0XFxuMTIwMTpcXHRcXHRyZXQgPSBicmNtZl91c2JfZndfZG93bmxvYWQoZGV2aW5mbyk7XFxuMTIwMjpcXHRcXHRyZWxlYXNlX2Zpcm13YXJlKGZ3KTtcXG4xMjAzOlxcdFxcdGlmIChyZXQpXFxuMTIwNDpcXHRcXHRcXHRnb3RvIGVycm9yO1xcbjEyMDU6XFx0XFxuMTIwNjpcXHRcXHRyZXQgPSBicmNtZl9hbGxvYyhkZXZpbmZvLVxcdTAwM2VkZXYsIGRldmluZm8tXFx1MDAzZXNldHRpbmdzKTtcXG4xMjA3OlxcdFxcdGlmIChyZXQpXFxuMTIwODpcXHRcXHRcXHRnb3RvIGVycm9yO1xcbjEyMDk6XFx0XFxuMTIxMDpcXHRcXHQvKiBBdHRhY2ggdG8gdGhlIGNvbW1vbiBkcml2ZXIgaW50ZXJmYWNlICovXFxuMTIxMTpcXHRcXHRyZXQgPSBicmNtZl9hdHRhY2goZGV2aW5mby1cXHUwMDNlZGV2KTtcXG4xMjEyOlxcdFxcdGlmIChyZXQpXFxuMTIxMzpcXHRcXHRcXHRnb3RvIGVycm9yO1xcbjEyMTQ6XFx0XFxuMTIxNTpcXHRcXHRjb21wbGV0ZShcXHUwMDI2ZGV2aW5mby1cXHUwMDNlZGV2X2luaXRfZG9uZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE4OjUwOjEwLjE4MTgxODY4OVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NTMzODgzMTkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRmlybXdhcmUgTG9hZGluZyBQYXRoIGZvciBgYnJjbWZtYWNgIGluIGEgRnV6emluZyBDb250ZXh0KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJZiB0aGUgYHJldGAgZnJvbSBhbiBpbml0aWFsIGNoZWNrIGlzIG5vbi16ZXJvLCBtZWFuaW5nIHRoZSBmaXJtd2FyZSB3YXNuJ3QgZm91bmQsIHdlIGp1bXAgdG8gdGhlIGBlcnJvcmAgcGF0aCBhbmQgY29tcGxldGVseSBza2lwIHRoZSBgYnJjbWZfYXR0YWNoYCBjYWxsLiAgQW5kIGBicmNtZl9hdHRhY2hgIGlzICp0aGUqIGZ1bmN0aW9uIHRoYXQgcmVnaXN0ZXJzIHRoZSBjZmc4MDIxMSBkZXZpY2UuIFNvLCBubyBmaXJtd2FyZSwgbm8gZGV2aWNlIHJlZ2lzdHJhdGlvbi4gIFRoaXMgYWxzbyBtZWFucyB0aGF0IHRoZSBjcml0aWNhbCBgYnJjbWZfY3l3X2V4dGVybmFsX2F1dGhgIGZ1bmN0aW9uLCB3aGljaCBJIHN1c3BlY3QgaXMgdGhlIHRhcmdldCwgaXMgdW5yZWFjaGFibGUuIE5vdywgdGhlIGJpZyBxdWVzdGlvbiBpczogRG9lcyBzeXprYWxsZXIgZXZlbiBwcm92aWRlIHRoZSBuZWNlc3NhcnkgZmlybXdhcmUgZm9yIGBicmNtZm1hY2A/XG5cblN5emthbGxlciBkb2VzIHByb3ZpZGUgKnNvbWUqIGZpcm13YXJlLCBlaXRoZXIgaW4gaXRzIGltYWdlcyBvciB0aHJvdWdoIG1vY2tpbmcuIEJ1dCBgYnJjbWZtYWNgIGlzIGEgcmVhbCBoYXJkd2FyZSBkcml2ZXIsIHJpZ2h0PyBVbmxpa2UgYG1hYzgwMjExX2h3c2ltYCwgd2hpY2ggZG9lc24ndCBuZWVkIGV4dGVybmFsIGZpcm13YXJlLCBgYnJjbWZtYWNgIGRlZmluaXRlbHkgZG9lcy4gVGhhdCBzYWlkLCBJJ20gdGhpbmtpbmcgYWJvdXQgc3l6a2FsbGVyJ3MgVVNCIGZ1enppbmcgY2FwYWJpbGl0aWVzIGFuZCBhcmJpdHJhcnkgcmVzcG9uc2VzIHRvIFVTQiByZXF1ZXN0cy4gIEJ1dCwgdGhlIGZpcm13YXJlIGxvYWRpbmcgcmVsaWVzIG9uIGByZXF1ZXN0X2Zpcm13YXJlYCByZWFkaW5nIGZyb20gdGhlIGZpbGVzeXN0ZW0uIElmIHRoZSBmaXJtd2FyZSBmaWxlIGlzIG1pc3NpbmcsIHRoZSB3aG9sZSB0aGluZyBmYWlscy5cblxuV2FpdCBhIHNlY29uZOKApiBkb2VzIHRoZSBzeXprYWxsZXIgaW1hZ2UgKmFjdHVhbGx5KiBpbmNsdWRlIHRoZSBgYnJjbWZtYWNgIGZpcm13YXJlPyBUaGUgY29tbW9uIHN5emthbGxlciBpbWFnZXMsIGxpa2UgYGJ1bGxzZXllYCBvciBgYm9va3dvcm1gLCB1c3VhbGx5IGNvbnRhaW4gdGhlIGBsaW51eC1maXJtd2FyZWAgcGFja2FnZS4gQW5kICp0aGF0KiBwYWNrYWdlIGRvZXMgaW5jbHVkZSBgYnJjbWZtYWNgIGZpcm13YXJlcywgbGlrZSBgYnJjbS9icmNtZm1hYzQzMTQzLmJpbmAgYW5kIG90aGVycy4gU28sIHRoZXJlJ3MgYSBzdHJvbmcgcG9zc2liaWxpdHkgdGhhdCBgcmVxdWVzdF9maXJtd2FyZWAgY291bGQgYWN0dWFsbHkgKnN1Y2NlZWQqISBUaGlzIG9wZW5zIHVwIGEgd2hvbGUgbmV3IGF0dGFjayBzdXJmYWNlLlxuXG5JZiBgcmVxdWVzdF9maXJtd2FyZWAgc3VjY2VlZHMsIHdlIGxhbmQgaW4gYGJyY21mX3VzYl9md19kb3dubG9hZGAuIFRoYXQncyB3aGVyZSBJIG5lZWQgdG8gbG9vayBjbG9zZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNjI5LCJPdXRwdXRUb2tlbnMiOjU0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzU0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTg6NTA6MTguNzE1NzA1MzQzWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMDkyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTA0OSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTA0OTpcXHRcXHRcXHRnb3RvIG91dDtcXG4xMDUwOlxcdFxcbjEwNTE6XFx0XFx0ZXJyID0gYnJjbWZfdXNiX2Rsc3RhcnQoZGV2aW5mbyxcXG4xMDUyOlxcdFxcdFxcdCh1OCAqKWRldmluZm8tXFx1MDAzZWltYWdlLCBkZXZpbmZvLVxcdTAwM2VpbWFnZV9sZW4pO1xcbjEwNTM6XFx0XFx0aWYgKGVyciA9PSAwKVxcbjEwNTQ6XFx0XFx0XFx0ZXJyID0gYnJjbWZfdXNiX2RscnVuKGRldmluZm8pO1xcbjEwNTU6XFx0XFxuMTA1NjpcXHRcXHR1c2JfYXV0b3BtX3B1dF9pbnRlcmZhY2UoaW50Zik7XFxuMTA1NzpcXHRvdXQ6XFxuMTA1ODpcXHRcXHRyZXR1cm4gZXJyO1xcbjEwNTk6XFx0fVxcbjEwNjA6XFx0XFxuMTA2MTpcXHRcXG4xMDYyOlxcdHN0YXRpYyB2b2lkIGJyY21mX3VzYl9kZXRhY2goc3RydWN0IGJyY21mX3VzYmRldl9pbmZvICpkZXZpbmZvKVxcbjEwNjM6XFx0e1xcbjEwNjQ6XFx0XFx0YnJjbWZfZGJnKFVTQiwgXFxcIkVudGVyLCBkZXZpbmZvICVwXFxcXG5cXFwiLCBkZXZpbmZvKTtcXG4xMDY1OlxcdFxcbjEwNjY6XFx0XFx0LyogZnJlZSB0aGUgVVJCUyAqL1xcbjEwNjc6XFx0XFx0YnJjbWZfdXNiX2ZyZWVfcShcXHUwMDI2ZGV2aW5mby1cXHUwMDNlcnhfZnJlZXEpO1xcbjEwNjg6XFx0XFx0YnJjbWZfdXNiX2ZyZWVfcShcXHUwMDI2ZGV2aW5mby1cXHUwMDNldHhfZnJlZXEpO1xcbjEwNjk6XFx0XFxuMTA3MDpcXHRcXHR1c2JfZnJlZV91cmIoZGV2aW5mby1cXHUwMDNlY3RsX3VyYik7XFxuMTA3MTpcXHRcXHR1c2JfZnJlZV91cmIoZGV2aW5mby1cXHUwMDNlYnVsa191cmIpO1xcbjEwNzI6XFx0XFxuMTA3MzpcXHRcXHRrZnJlZShkZXZpbmZvLVxcdTAwM2V0eF9yZXFzKTtcXG4xMDc0OlxcdFxcdGtmcmVlKGRldmluZm8tXFx1MDAzZXJ4X3JlcXMpO1xcbjEwNzU6XFx0XFxuMTA3NjpcXHRcXHRpZiAoZGV2aW5mby1cXHUwMDNlc2V0dGluZ3MpXFxuMTA3NzpcXHRcXHRcXHRicmNtZl9yZWxlYXNlX21vZHVsZV9wYXJhbShkZXZpbmZvLVxcdTAwM2VzZXR0aW5ncyk7XFxuMTA3ODpcXHR9XFxuMTA3OTpcXHRcXG4xMDgwOlxcdFxcbjEwODE6XFx0c3RhdGljIGludCBjaGVja19maWxlKGNvbnN0IHU4ICpoZWFkZXJzKVxcbjEwODI6XFx0e1xcbjEwODM6XFx0XFx0c3RydWN0IHRyeF9oZWFkZXJfbGUgKnRyeDtcXG4xMDg0OlxcdFxcdGludCBhY3R1YWxfbGVuID0gLTE7XFxuMTA4NTpcXHRcXG4xMDg2OlxcdFxcdGJyY21mX2RiZyhVU0IsIFxcXCJFbnRlclxcXFxuXFxcIik7XFxuMTA4NzpcXHRcXHQvKiBFeHRyYWN0IHRyeCBoZWFkZXIgKi9cXG4xMDg4OlxcdFxcdHRyeCA9IChzdHJ1Y3QgdHJ4X2hlYWRlcl9sZSAqKSBoZWFkZXJzO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxODo1MDoxOC43MTU4Mjc2MzNaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzU2MTk5ODc5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIEZpcm13YXJlIERvd25sb2FkIEZ1bmN0aW9uKipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4gQmVmb3JlIEkgcHJvY2VlZCBhbnkgZnVydGhlciB3aXRoIHRoZSBkZWJ1Z2dpbmcsIEkgbmVlZCB0byBnZXQgYSByZWFsbHkgc29saWQgZ3Jhc3Agb24gdGhlIGNvcmUgb2YgdGhpcyBpc3N1ZS4gSSBuZWVkIHRvIGRpdmUgc3RyYWlnaHQgaW50byB0aGUgY29kZS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gZXhhbWluZSB0aGUgYGJyY21mX3VzYl9md19kb3dubG9hZGAgZnVuY3Rpb24uIEl0J3MgdGhlIGNyaXRpY2FsIHBvaW50IHdoZXJlIHRoZSBmaXJtd2FyZSBpcyBhY3R1YWxseSB0cmFuc2ZlcnJlZCBvdmVyIFVTQi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNvbnRyb2wgZmxvdywgdGhlIGRhdGEgc3RydWN0dXJlcyBpdCdzIGludGVyYWN0aW5nIHdpdGgsIGFuZCBhbnkgcG90ZW50aWFsIHBvaW50cyBvZiBmYWlsdXJlIHdpdGhpbiBpdHMgZXhlY3V0aW9uLiBTZWVpbmcgdGhlIGRpcmVjdCBpbXBsZW1lbnRhdGlvbiBpcyBjcnVjaWFsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIHByb2JsZW0uIExldCdzIHNlZSB3aGF0J3MgaGFwcGVuaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjA1NCwiT3V0cHV0VG9rZW5zIjo1MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTg6NTA6MjYuMjc3ODI5Njc3WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTAyNDMyNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicmNtZl91c2JfZndfZG93bmxvYWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM9MTAyOD1zdGF0aWMgaW50XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jOjEwMjk6YnJjbWZfdXNiX2Z3X2Rvd25sb2FkKHN0cnVjdCBicmNtZl91c2JkZXZfaW5mbyAqZGV2aW5mbylcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtMTAzMC17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM9MTE3Nj1zdGF0aWMgdm9pZCBicmNtZl91c2JfcHJvYmVfcGhhc2UyKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHJldCxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xMjAwLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYzoxMjAxOlxcdHJldCA9IGJyY21mX3VzYl9md19kb3dubG9hZChkZXZpbmZvKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtMTIwMi1cXHRyZWxlYXNlX2Zpcm13YXJlKGZ3KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTg6NTA6MjYuMzMyODU5MTYxWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg3MDA5Nzg5NjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB3aGF0J3MgZ29pbmcgdGhyb3VnaCBteSBtaW5kIGFzIEkgYXBwcm9hY2ggdGhpcyBwaWVjZSBvZiBjb2RlLCByZW5kZXJlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkRpdmluZyBpbnRvIGBicmNtZl91c2JfZndfZG93bmxvYWRgKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGBicmNtZl91c2JfZndfZG93bmxvYWRgIGZ1bmN0aW9uIGFjdHVhbGx5IHdvcmtzLiBNeSBndXQgdGVsbHMgbWUgdGhpcyBpcyB0aGUgY29yZSBvZiBob3cgZmlybXdhcmUgZ2V0cyBmcm9tIHRoZSBob3N0IHRvIHRoZSBCcm9hZGNvbSBVU0IgV2ktRmkgYWRhcHRlci4gR2l2ZW4gdGhlIG5hbWUsIGl0J3MgcHJldHR5IHNlbGYtZXhwbGFuYXRvcnksIGJ1dCBsZXQncyBub3QgbWFrZSBhc3N1bXB0aW9ucy4gSSdsbCBuZWVkIHRvIHNlZSBwcmVjaXNlbHkgaG93IGl0IGludGVyZmFjZXMgd2l0aCB0aGUgVVNCIGJ1cy5cblxuTXkgaW5pdGlhbCBxdWVzdGlvbnMgYXJlOiBXaGF0IGFyZ3VtZW50cyBkb2VzIGl0IHRha2U/IERvZXMgaXQgaGFuZGxlIHRoZSB0cmFuc2ZlciBpbiByYXcgVVNCIHRyYW5zYWN0aW9ucz8gSXMgdGhlcmUgYW55IGFic3RyYWN0aW9uIGxheWVyPyBXaGF0IGtpbmQgb2YgZXJyb3IgaGFuZGxpbmcgaXMgaW1wbGVtZW50ZWQ/IERvZXMgaXQgdXNlIGNvbnRyb2wgdHJhbnNmZXJzLCBidWxrIHRyYW5zZmVycywgb3IgYm90aD8gQXJlIHRoZXJlIGFueSBzcGVjaWZpYyBVU0IgZGVzY3JpcHRvcnMgb3IgY29tbWFuZHMgdGhhdCBpdCB1c2VzIHRvIGluaXRpYWxpemUgdGhlIGRldmljZSBvciBzaWduYWwgcmVhZGluZXNzIGZvciB0aGUgZmlybXdhcmUgZG93bmxvYWQ/IEFyZSB0aGVyZSBhbnkgc2l6ZSBsaW1pdHMgb3IgYWxpZ25tZW50IHJlcXVpcmVtZW50cyBpbXBvc2VkIG9uIHRoZSBmaXJtd2FyZSBpbWFnZT9cblxuSSdsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZTogbWVtb3J5IGFsbG9jYXRpb24gZm9yIGJ1ZmZlcnMsIHRoZSBVU0IgZGV2aWNlIGhhbmRsZSwgYW55IHN5bmNocm9uaXphdGlvbiBtZWNoYW5pc21zIHVzZWQgdG8gcHJldmVudCByYWNlIGNvbmRpdGlvbnMsIGFuZCBhbnkgcG90ZW50aWFsIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcyBsaWtlIGJ1ZmZlciBvdmVyZmxvd3MuIEknbGwgYmUgaW50ZXJlc3RlZCBpbiBob3cgdGhlIGZ1bmN0aW9uIGhhbmRsZXMgZGlmZmVyZW50IGZpcm13YXJlIHNpemVzLCBwb3RlbnRpYWwgZG93bmxvYWQgZmFpbHVyZXMsIGFuZCBhbnkgcmV0cnkgbWVjaGFuaXNtcyBpdCBlbXBsb3lzLiBJIGtub3cgZnJvbSBleHBlcmllbmNlIHRoYXQgVVNCIGZpcm13YXJlIGRvd25sb2FkcyBjYW4gYmUgdHJpY2t5IGJlY2F1c2Ugb2YgcG90ZW50aWFsIGJ1cyBjb250ZW50aW9uIG9yIHBvd2VyIGlzc3Vlcywgc28gSSdsbCBiZSBsb29raW5nIGZvciByb2J1c3RuZXNzLiBJJ2xsIG5lZWQgdG8ga2VlcCBhbiBleWUgb3V0IGZvciBob3cgdGhpcyBkb3dubG9hZCBwcm9jZXNzIGZpdHMgaW50byB0aGUgb3ZlcmFsbCBkcml2ZXIgYXJjaGl0ZWN0dXJlLiBXaGVyZSBpcyB0aGlzIGZ1bmN0aW9uIGNhbGxlZCBmcm9tPyBXaGF0IHByZXJlcXVpc2l0ZXMgZG9lcyBpdCBoYXZlPyBJJ20gYW50aWNpcGF0aW5nIHRoYXQgaXQncyBnb2luZyB0byBiZSBjYWxsZWQgZHVyaW5nIGRldmljZSBpbml0aWFsaXphdGlvbiwgYnV0IGxldCdzIGNvbmZpcm0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNTgzLCJPdXRwdXRUb2tlbnMiOjU0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTg6NTA6MzUuMDMzODQwNDIxWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNjY3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTAyOCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTAyODpcXHRzdGF0aWMgaW50XFxuMTAyOTpcXHRicmNtZl91c2JfZndfZG93bmxvYWQoc3RydWN0IGJyY21mX3VzYmRldl9pbmZvICpkZXZpbmZvKVxcbjEwMzA6XFx0e1xcbjEwMzE6XFx0XFx0aW50IGVycjtcXG4xMDMyOlxcdFxcdHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmO1xcbjEwMzM6XFx0XFxuMTAzNDpcXHRcXHRicmNtZl9kYmcoVVNCLCBcXFwiRW50ZXJcXFxcblxcXCIpO1xcbjEwMzU6XFx0XFx0aWYgKCFkZXZpbmZvKSB7XFxuMTAzNjpcXHRcXHRcXHRlcnIgPSAtRU5PREVWO1xcbjEwMzc6XFx0XFx0XFx0Z290byBvdXQ7XFxuMTAzODpcXHRcXHR9XFxuMTAzOTpcXHRcXG4xMDQwOlxcdFxcdGlmICghZGV2aW5mby1cXHUwMDNlaW1hZ2UpIHtcXG4xMDQxOlxcdFxcdFxcdGJyY21mX2VycihcXFwiTm8gZmlybXdhcmUhXFxcXG5cXFwiKTtcXG4xMDQyOlxcdFxcdFxcdGVyciA9IC1FTk9FTlQ7XFxuMTA0MzpcXHRcXHRcXHRnb3RvIG91dDtcXG4xMDQ0OlxcdFxcdH1cXG4xMDQ1OlxcdFxcbjEwNDY6XFx0XFx0aW50ZiA9IHRvX3VzYl9pbnRlcmZhY2UoZGV2aW5mby1cXHUwMDNlZGV2KTtcXG4xMDQ3OlxcdFxcdGVyciA9IHVzYl9hdXRvcG1fZ2V0X2ludGVyZmFjZShpbnRmKTtcXG4xMDQ4OlxcdFxcdGlmIChlcnIpXFxuMTA0OTpcXHRcXHRcXHRnb3RvIG91dDtcXG4xMDUwOlxcdFxcbjEwNTE6XFx0XFx0ZXJyID0gYnJjbWZfdXNiX2Rsc3RhcnQoZGV2aW5mbyxcXG4xMDUyOlxcdFxcdFxcdCh1OCAqKWRldmluZm8tXFx1MDAzZWltYWdlLCBkZXZpbmZvLVxcdTAwM2VpbWFnZV9sZW4pO1xcbjEwNTM6XFx0XFx0aWYgKGVyciA9PSAwKVxcbjEwNTQ6XFx0XFx0XFx0ZXJyID0gYnJjbWZfdXNiX2RscnVuKGRldmluZm8pO1xcbjEwNTU6XFx0XFxuMTA1NjpcXHRcXHR1c2JfYXV0b3BtX3B1dF9pbnRlcmZhY2UoaW50Zik7XFxuMTA1NzpcXHRvdXQ6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE4OjUwOjM1LjAzMzk3ODUwMVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NDQ4MTgwMTk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYnJlYWtkb3duIG9mIHdoYXQncyBnb2luZyBvbiwgdGhpbmtpbmcgdGhyb3VnaCB0aGlzIGFzIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6XG5cbioqQW5hbHl6aW5nIHRoZSBVU0IgRmlybXdhcmUgRG93bmxvYWQgU2VxdWVuY2UqKlxuXG5SaWdodCwgc28gd2UncmUgbG9va2luZyBhdCB0aGUgZmlybXdhcmUgZG93bmxvYWQgcHJvY2VzcyBvdmVyIFVTQiBmb3IgdGhpcyBCcm9hZGNvbSBXaS1GaSBkcml2ZXIsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBob3cgaXQgaW50ZXJhY3RzIHdpdGggYSBzaW11bGF0ZWQgVVNCIGRldmljZSwgbGlrZWx5IHdpdGhpbiBhIGZ1enppbmcgY29udGV4dCBsaWtlIHN5emthbGxlci4gVGhlIGluaXRpYWwgc3RlcHMgYXJlIHByZXR0eSBjbGVhci4gYGJyY21mX3VzYl9kbHN0YXJ0YCBhbmQgYGJyY21mX3VzYl9kbHJ1bmAgYXJlIHRoZSBrZXkgZnVuY3Rpb25zIGhlcmUsIHRoZXkncmUgcmVzcG9uc2libGUgZm9yIHNlbmRpbmcgdGhlIGFjdHVhbCBVU0IgY29udHJvbCBtZXNzYWdlcyB0byB0aGUgZGV2aWNlIHRvIGtpY2sgb2ZmIHRoZSBmaXJtd2FyZSBsb2FkaW5nLiBHb29kLCBtYWtlcyBzZW5zZS4gQW5kIGJlY2F1c2Ugd2UncmUgZnV6emluZywgdGhhdCBlbXVsYXRlZCBVU0IgZGV2aWNlIGlzIGNhcGFibGUgb2YgYWNrbm93bGVkZ2luZyB0aG9zZSBjb250cm9sIG1lc3NhZ2VzLiBUaGlzIGlzIGNydWNpYWwgZm9yIGtlZXBpbmcgdGhlIGZpcm13YXJlIGRvd25sb2FkIHByb2Nlc3MgbW92aW5nIGZvcndhcmQgaW4gdGhlIGZ1enppbmcgZW52aXJvbm1lbnQuXG5cblRoZSB0aGluZyB0aGF0IHBpcXVlcyBteSBpbnRlcmVzdCBpcyB0aGUgbmV4dCBzdGFnZS4gSWYgdGhlIGluaXRpYWwgZG93bmxvYWQgdmlhIGBicmNtZl91c2JfZndfZG93bmxvYWRgIGNvbXBsZXRlcyBzdWNjZXNzZnVsbHksIHRoZSBjb2RlIGJyYW5jaGVzIGludG8gYGJyY21mX2FsbG9jYCBhbmQgYGJyY21mX2F0dGFjaGAuIFRoYXQncyB3aGVyZSB0aGUgcmVhbCBkcml2ZXIgaW5pdGlhbGl6YXRpb24gYW5kIGRldmljZSBhdHRhY2htZW50IHRha2VzIHBsYWNlLiBgYnJjbWZfYWxsb2NgIGlzIHByb2JhYmx5IHNldHRpbmcgdXAgc29tZSBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZXMsIGFuZCB0aGVuLCBgYnJjbWZfYXR0YWNoYCBpcyB3aGVyZSB0aGUgZGV2aWNlLXNwZWNpZmljIGluaXRpYWxpemF0aW9uIGlzIGhhbmRsZWQsIHRoZSBoYXJkd2FyZSBpbnRlcmZhY2UgZXN0YWJsaXNoZWQuIFRoZSByZWFsIG1lYXQgb2YgdGhlIGRyaXZlciBpbnRlcmFjdGlvbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gcmVhbGx5IGRlbHZlIGludG8gaG93IGBicmNtZl9hdHRhY2hgIHdvcmtzLiBUaGF0J3Mgd2hlcmUgd2UncmUgbW9zdCBsaWtlbHkgdG8gZmluZCBpbnRlcmVzdGluZyBhdHRhY2sgc3VyZmFjZXMgb3IgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyBpZiB0aGUgZG93bmxvYWQgaXRzZWxmIGhhcyBhbHJlYWR5IHdvcmtlZC4gSSdsbCBuZWVkIHRvIGdvIGxvb2sgaW50byBpdHMgaW1wbGVtZW50YXRpb24gbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzQ0NSwiT3V0cHV0VG9rZW5zIjo0NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTg6NTA6NDMuNDgyMTYxOTU1WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDgwNTY5NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicmNtZl9hdHRhY2hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYnVzLmg9MzA1PWludCBicmNtZl9hbGxvYyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBicmNtZl9tcF9kZXZpY2UgKnNldHRpbmdzKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYnVzLmgtMzA2LS8qIEluZGljYXRpb24gZnJvbSBidXMgbW9kdWxlIHJlZ2FyZGluZyBwcmVzZW5jZS9pbnNlcnRpb24gb2YgZG9uZ2xlLiAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9idXMuaDozMDc6aW50IGJyY21mX2F0dGFjaChzdHJ1Y3QgZGV2aWNlICpkZXYpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9idXMuaC0zMDgtLyogSW5kaWNhdGlvbiBmcm9tIGJ1cyBtb2R1bGUgcmVnYXJkaW5nIHJlbW92YWwvYWJzZW5jZSBvZiBkb25nbGUgKi9cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb21tb24uaC0xOC0gKiAobW9kdWxlKSBpbml0aWxpYXphdGlvbiB0YWtlcyBwbGFjZS4gVGhlIGRldmljZSBzcGVjaWZpYyBzZXR0aW5ncyBpcyBwYXJ0XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvbW1vbi5oOjE5OiAqIG9mIHRoZSBkcnZyIHN0cnVjdCBhbmQgc2hvdWxkIGJlIGluaXRpYWxpemVkIG9uIGV2ZXJ5IGJyY21mX2F0dGFjaC5cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29tbW9uLmgtMjAtICovXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jPTEzMzA9aW50IGJyY21mX2FsbG9jKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGJyY21mX21wX2RldmljZSAqc2V0dGluZ3MpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jLTEzNTgtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuYzoxMzU5OmludCBicmNtZl9hdHRhY2goc3RydWN0IGRldmljZSAqZGV2KVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmMtMTM2MC17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jPTE0NDY9dm9pZCBicmNtZl9md19jcmFzaGVkKHN0cnVjdCBkZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmMtMTQ1MC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jOjE0NTE6XFx0LyogTWF5IGZpcmUgYmVmb3JlIGJyY21mX2F0dGFjaCgpIHdpcmVzIHVwIGRydnIsIG9yIGFmdGVyIHJlbW92YWxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jLTE0NTItXFx0ICogaGFzIGNsZWFyZWQgaXQ7IGd1YXJkIHRoZSBkZXJlZnMgYmVsb3cgKGFuZCB0aGUgYXJtaW5nIGdhdGUgaW5cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmM9MjEzOT1zdGF0aWMgdm9pZCBicmNtZl9wY2llX3NldHVwKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHJldCxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmMtMjIxOS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jOjIyMjA6XFx0cmV0ID0gYnJjbWZfYXR0YWNoKFxcdTAwMjZkZXZpbmZvLVxcdTAwM2VwZGV2LVxcdTAwM2VkZXYpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmMtMjIyMS1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3NkaW8uYz00MjA5PXN0YXRpYyB2b2lkIGJyY21mX3NkaW9fZmlybXdhcmVfY2FsbGJhY2soc3RydWN0IGRldmljZSAqZGV2LCBpbnQgZXJyLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3NkaW8uYy00Mzk5LVxcdC8qIEF0dGFjaCB0byB0aGUgY29tbW9uIGxheWVyLCByZXNlcnZlIGhkciBzcGFjZSAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9zZGlvLmM6NDQwMDpcXHRlcnIgPSBicmNtZl9hdHRhY2goc2Rpb2QtXFx1MDAzZWRldik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3NkaW8uYy00NDAxLVxcdGlmIChlcnIgIT0gMCkge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9zZGlvLmM6NDQwMjpcXHRcXHRicmNtZl9lcnIoXFxcImJyY21mX2F0dGFjaCBmYWlsZWRcXFxcblxcXCIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9zZGlvLmMtNDQwMy1cXHRcXHRnb3RvIGZyZWU7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM9MTE3Nj1zdGF0aWMgdm9pZCBicmNtZl91c2JfcHJvYmVfcGhhc2UyKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHJldCxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xMjEwLVxcdC8qIEF0dGFjaCB0byB0aGUgY29tbW9uIGRyaXZlciBpbnRlcmZhY2UgKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM6MTIxMTpcXHRyZXQgPSBicmNtZl9hdHRhY2goZGV2aW5mby1cXHUwMDNlZGV2KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtMTIxMi1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jPTEyNDQ9c3RhdGljIGludCBicmNtZl91c2JfcHJvYmVfY2Ioc3RydWN0IGJyY21mX3VzYmRldl9pbmZvICpkZXZpbmZvLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTEyOTEtXFx0XFx0XFx0Z290byBmYWlsO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYzoxMjkyOlxcdFxcdHJldCA9IGJyY21mX2F0dGFjaChkZXZpbmZvLVxcdTAwM2VkZXYpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xMjkzLVxcdFxcdGlmIChyZXQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE4OjUwOjQzLjUzMjk3MzM3WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkyNTExNDYwMTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBVU0IgUHJvYmUgQ2FsbGJhY2sqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBicmNtZl91c2JfcHJvYmVfY2JgIGZ1bmN0aW9uIGFuZCBpbW1lZGlhdGVseSwgbXkgZXllcyBhcmUgZHJhd24gdG8gdGhpcyBjb25kaXRpb25hbCBzdGF0ZW1lbnQuIEl0IHN0YXJ0cyB3aXRoIGEgY2FsbCB0byBgYnJjbWZfdXNiX2RsbmVlZGVkKGRldmluZm8pYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCB0aGlzIGZ1bmN0aW9uIGRvZXMgYmVjYXVzZSBpdHMgcmV0dXJuIHZhbHVlIGRpY3RhdGVzIHRoZSBlbnRpcmUgc3Vic2VxdWVudCBmbG93LiBJZiBpdCByZXR1cm5zIGZhbHNlLCBtZWFuaW5nIHRoZSBkb3dubG9hZCBpc24ndCBuZWVkZWQsIHRoZW4gdGhlIG5leHQgc3RlcHMgaW52b2x2ZSBhbGxvY2F0aW9uLCBhdHRhY2htZW50LCBhbmQgaG9wZWZ1bGx5LCBzdWNjZXNzLiBDb252ZXJzZWx5LCBpZiBgYnJjbWZfdXNiX2RsbmVlZGVkYCByZXR1cm5zIHRydWUsIHRoZW4gdGhlIGNvZGUgcGF0aCB3b3VsZCBkaXZlcmdlOyB3aGljaCB0aGlzIGNvZGUgc25pcHBldCBkb2Vzbid0IHNob3cuIEknbGwgbmVlZCB0byBkaWcgaW50byB0aGUgZGVmaW5pdGlvbiBvZiBgYnJjbWZfdXNiX2RsbmVlZGVkYCB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBsb2dpYyBhbmQgaG93IHRoaXMgcHJvYmUgY2FsbGJhY2sgaGFuZGxlcyBkaWZmZXJlbnQgc2NlbmFyaW9zLCBwYXJ0aWN1bGFybHkgaW4gcmVsYXRpb24gdG8gdGhlIHN0YXRlIG9mIHRoZSBkZXZpY2UgYW5kIGFueSBuZWNlc3NhcnkgZmlybXdhcmUgbG9hZGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU0MjgsIk91dHB1dFRva2VucyI6NTQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTg6NTA6NTIuNzg0MTIzMDUzWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzODE0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTI0NCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTI0NDpcXHRzdGF0aWMgaW50IGJyY21mX3VzYl9wcm9iZV9jYihzdHJ1Y3QgYnJjbWZfdXNiZGV2X2luZm8gKmRldmluZm8sXFxuMTI0NTpcXHRcXHRcXHRcXHQgICAgICBlbnVtIGJyY21mX2Z3dmVuZG9yIGZ3dmlkKVxcbjEyNDY6XFx0e1xcbjEyNDc6XFx0XFx0c3RydWN0IGJyY21mX2J1cyAqYnVzO1xcbjEyNDg6XFx0XFx0c3RydWN0IGJyY21mX3VzYmRldiAqYnVzX3B1YjtcXG4xMjQ5OlxcdFxcdHN0cnVjdCBkZXZpY2UgKmRldiA9IGRldmluZm8tXFx1MDAzZWRldjtcXG4xMjUwOlxcdFxcdHN0cnVjdCBicmNtZl9md19yZXF1ZXN0ICpmd3JlcTtcXG4xMjUxOlxcdFxcdGludCByZXQ7XFxuMTI1MjpcXHRcXG4xMjUzOlxcdFxcdGJyY21mX2RiZyhVU0IsIFxcXCJFbnRlclxcXFxuXFxcIik7XFxuMTI1NDpcXHRcXHRidXNfcHViID0gYnJjbWZfdXNiX2F0dGFjaChkZXZpbmZvLCBCUkNNRl9VU0JfTlJYUSwgQlJDTUZfVVNCX05UWFEpO1xcbjEyNTU6XFx0XFx0aWYgKCFidXNfcHViKVxcbjEyNTY6XFx0XFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuMTI1NzpcXHRcXG4xMjU4OlxcdFxcdGJ1cyA9IGt6YWxsb2Nfb2JqKCpidXMsIEdGUF9BVE9NSUMpO1xcbjEyNTk6XFx0XFx0aWYgKCFidXMpIHtcXG4xMjYwOlxcdFxcdFxcdHJldCA9IC1FTk9NRU07XFxuMTI2MTpcXHRcXHRcXHRnb3RvIGZhaWw7XFxuMTI2MjpcXHRcXHR9XFxuMTI2MzpcXHRcXHRtdXRleF9pbml0KFxcdTAwMjZidXMtXFx1MDAzZWJ1c19yZXNldF9sb2NrKTtcXG4xMjY0OlxcdFxcbjEyNjU6XFx0XFx0YnVzLVxcdTAwM2VkZXYgPSBkZXY7XFxuMTI2NjpcXHRcXHRidXNfcHViLVxcdTAwM2VidXMgPSBidXM7XFxuMTI2NzpcXHRcXHRidXMtXFx1MDAzZWJ1c19wcml2LnVzYiA9IGJ1c19wdWI7XFxuMTI2ODpcXHRcXHRkZXZfc2V0X2RydmRhdGEoZGV2LCBidXMpO1xcbjEyNjk6XFx0XFx0YnVzLVxcdTAwM2VvcHMgPSBcXHUwMDI2YnJjbWZfdXNiX2J1c19vcHM7XFxuMTI3MDpcXHRcXHRidXMtXFx1MDAzZXByb3RvX3R5cGUgPSBCUkNNRl9QUk9UT19CQ0RDO1xcbjEyNzE6XFx0XFx0YnVzLVxcdTAwM2Vmd3ZpZCA9IGZ3dmlkO1xcbjEyNzI6XFx0XFx0YnVzLVxcdTAwM2VhbHdheXNfdXNlX2Z3c19xdWV1ZSA9IHRydWU7XFxuMTI3MzpcXHQjaWZkZWYgQ09ORklHX1BNXFxuMTI3NDpcXHRcXHRidXMtXFx1MDAzZXdvd2xfc3VwcG9ydGVkID0gdHJ1ZTtcXG4xMjc1OlxcdCNlbmRpZlxcbjEyNzY6XFx0XFxuMTI3NzpcXHRcXHRkZXZpbmZvLVxcdTAwM2VzZXR0aW5ncyA9IGJyY21mX2dldF9tb2R1bGVfcGFyYW0oYnVzLVxcdTAwM2VkZXYsIEJSQ01GX0JVU1RZUEVfVVNCLFxcbjEyNzg6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgYnVzX3B1Yi1cXHUwMDNlZGV2aWQsXFxuMTI3OTpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBidXNfcHViLVxcdTAwM2VjaGlwcmV2KTtcXG4xMjgwOlxcdFxcdGlmICghZGV2aW5mby1cXHUwMDNlc2V0dGluZ3MpIHtcXG4xMjgxOlxcdFxcdFxcdHJldCA9IC1FTk9NRU07XFxuMTI4MjpcXHRcXHRcXHRnb3RvIGZhaWw7XFxuMTI4MzpcXHRcXHR9XFxuMTI4NDpcXHRcXHRyZXQgPSBQVFJfRVJSX09SX1pFUk8oZGV2aW5mby1cXHUwMDNlc2V0dGluZ3MpO1xcbjEyODU6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuMTI4NjpcXHRcXHRcXHRnb3RvIGZhaWw7XFxuMTI4NzpcXHRcXG4xMjg4OlxcdFxcdGlmICghYnJjbWZfdXNiX2RsbmVlZGVkKGRldmluZm8pKSB7XFxuMTI4OTpcXHRcXHRcXHRyZXQgPSBicmNtZl9hbGxvYyhkZXZpbmZvLVxcdTAwM2VkZXYsIGRldmluZm8tXFx1MDAzZXNldHRpbmdzKTtcXG4xMjkwOlxcdFxcdFxcdGlmIChyZXQpXFxuMTI5MTpcXHRcXHRcXHRcXHRnb3RvIGZhaWw7XFxuMTI5MjpcXHRcXHRcXHRyZXQgPSBicmNtZl9hdHRhY2goZGV2aW5mby1cXHUwMDNlZGV2KTtcXG4xMjkzOlxcdFxcdFxcdGlmIChyZXQpXFxuMTI5NDpcXHRcXHRcXHRcXHRnb3RvIGZhaWw7XFxuMTI5NTpcXHRcXHRcXHQvKiB3ZSBhcmUgZG9uZSAqL1xcbjEyOTY6XFx0XFx0XFx0Y29tcGxldGUoXFx1MDAyNmRldmluZm8tXFx1MDAzZWRldl9pbml0X2RvbmUpO1xcbjEyOTc6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMTI5ODpcXHRcXHR9XFxuMTI5OTpcXHRcXHRidXMtXFx1MDAzZWNoaXAgPSBidXNfcHViLVxcdTAwM2VkZXZpZDtcXG4xMzAwOlxcdFxcdGJ1cy1cXHUwMDNlY2hpcHJldiA9IGJ1c19wdWItXFx1MDAzZWNoaXByZXY7XFxuMTMwMTpcXHRcXG4xMzAyOlxcdFxcdGZ3cmVxID0gYnJjbWZfdXNiX3ByZXBhcmVfZndfcmVxdWVzdChkZXZpbmZvKTtcXG4xMzAzOlxcdFxcdGlmICghZndyZXEpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTg6NTA6NTIuNzg0MjYzNTMzWiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc5MjAxMTY2MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZTpcblxuKipEaXZpbmcgaW50byB0aGUgRmlybXdhcmUgRG93bmxvYWQgTG9naWMqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgY29yZSBvZiB0aGlzIHNlZW1zIHRvIGJlIGFib3V0IGhvdyB0aGUgQnJvYWRjb20gVVNCIGRyaXZlciBoYW5kbGVzIGZpcm13YXJlIGxvYWRpbmcuIElmIGBicmNtZl91c2JfZGxuZWVkZWRgIHJldHVybnMgYGZhbHNlYCwgdGhhdCB0ZWxscyB1cyB3ZSAqZG9uJ3QqIG5lZWQgdG8gZG93bmxvYWQgZmlybXdhcmUsIHdoaWNoIGlzIGltcG9ydGFudCBmb3IgZWZmaWNpZW5jeSBhbmQgYXZvaWRpbmcgdW5uZWNlc3Nhcnkgc3RlcHMuIFRoYXQgbWVhbnMgdGhlIGRyaXZlciBieXBhc3NlcyB0aGUgZG93bmxvYWQgc3RhZ2UgZW50aXJlbHkgYW5kIGp1bXBzIHJpZ2h0IGludG8gY2FsbGluZyBgYnJjbWZfYXR0YWNoYC5cblxuTXkgZmlyc3QgaW5jbGluYXRpb24gd2hlbiBzZWVpbmcgdGhpcyBpcyB0byBkaWcgZGVlcGVyIGludG8gdGhhdCBgYnJjbWZfdXNiX2RsbmVlZGVkYCBmdW5jdGlvbi4gVW5kZXJzdGFuZGluZyBpdHMgbG9naWMgaXMgY3J1Y2lhbC4gV2hhdCBjb25kaXRpb25zIGRvZXMgaXQgY2hlY2s/IFdoYXQgY3JpdGVyaWEgZGV0ZXJtaW5lIHdoZXRoZXIgYSBmaXJtd2FyZSBkb3dubG9hZCBpcyBhY3R1YWxseSBuZWNlc3Nhcnk/IElzIGl0IGJhc2VkIG9uIHRoZSBoYXJkd2FyZSByZXZpc2lvbiwgdGhlIHByZXNlbmNlIG9mIHByZS1sb2FkZWQgZmlybXdhcmUsIG9yIHNvbWUgb3RoZXIgZmFjdG9yPyBUaGUgZGVzaWduIGhlcmUgc2VlbXMgbGlrZSBhbiBvcHRpbWl6YXRpb24uIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb25kaXRpb25zIHRoYXQgdHJpZ2dlciB0aGUgb3B0aW1pemF0aW9uIC0gdGhlIGNvbmRpdGlvbnMgd2hlcmUgZG93bmxvYWRpbmcgaXMgc2tpcHBlZC4gVGhlIGdvYWwgaXMgdG8gc2VlIGlmIGFueSBwb3RlbnRpYWwgaXNzdWVzIGNvdWxkIGFyaXNlIGZyb20gZGlyZWN0bHkgYXR0YWNoaW5nIGluIHRob3NlIHNjZW5hcmlvcywgb3IgaWYgdGhpcyBpcyBhIHdlbGwtY29uc2lkZXJlZCBvcHRpbWl6YXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsb2dpYyBmbG93IGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NzMxLCJPdXRwdXRUb2tlbnMiOjUwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxODo1MTowMC43MDQzODI3MzJaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NDYxNDU1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJyY21mX3VzYl9kbG5lZWRlZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYz03OTc9c3RhdGljIGJvb2xcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM6Nzk4OmJyY21mX3VzYl9kbG5lZWRlZChzdHJ1Y3QgYnJjbWZfdXNiZGV2X2luZm8gKmRldmluZm8pXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTc5OS17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM9MTI0ND1zdGF0aWMgaW50IGJyY21mX3VzYl9wcm9iZV9jYihzdHJ1Y3QgYnJjbWZfdXNiZGV2X2luZm8gKmRldmluZm8sXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtMTI4Ny1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM6MTI4ODpcXHRpZiAoIWJyY21mX3VzYl9kbG5lZWRlZChkZXZpbmZvKSkge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xMjg5LVxcdFxcdHJldCA9IGJyY21mX2FsbG9jKGRldmluZm8tXFx1MDAzZWRldiwgZGV2aW5mby1cXHUwMDNlc2V0dGluZ3MpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxODo1MTowMC43NDk4NTEyNThaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODA3MjE5MjIxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIGBicmNtZl91c2JfZGxuZWVkZWRgOlxuXG4qKkFuYWx5emluZyBicmNtZl91c2JfZGxuZWVkZWQqKlxuXG5BbHJpZ2h0LCBJJ20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGBicmNtZl91c2JfZGxuZWVkZWRgIGZ1bmN0aW9uLiBJIGltbWVkaWF0ZWx5IHdhbnQgdG8gdW5kZXJzdGFuZCBpdHMgcHVycG9zZSB3aXRoaW4gdGhlIGJyb2FkZXIgVVNCIHdpcmVsZXNzIGRyaXZlciBjb250ZXh0LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgaXQgbGlrZWx5IGRldGVybWluZXMgaWYgYSBmaXJtd2FyZSBkb3dubG9hZCBpcyByZXF1aXJlZCBmb3IgYSBwYXJ0aWN1bGFyIEJyb2FkY29tIFVTQiB3aXJlbGVzcyBkZXZpY2UuIFRoZSBcImRsXCIgZGVmaW5pdGVseSBzdWdnZXN0cyBcImRvd25sb2FkLFwiIGFuZCBcIm5lZWRlZFwiIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIEknbSBnb2luZyB0byBiZSBsb29raW5nIGZvciBjbHVlcyBhYm91dCB0aGUgZGV2aWNlJ3MgY2FwYWJpbGl0aWVzLCBpdHMgY3VycmVudCBzdGF0ZSwgYW5kIHBlcmhhcHMgaW5mb3JtYXRpb24gaW5kaWNhdGluZyBpZiB0aGUgZmlybXdhcmUgaXMgYWxyZWFkeSBwcmVzZW50IG9yIGlmIHRoZSBkcml2ZXIgbmVlZHMgdG8gaW5pdGlhdGUgYSBkb3dubG9hZCBzZXF1ZW5jZS4gSSBleHBlY3QgdG8gc2VlIGNoZWNrcyByZWxhdGVkIHRvIGRldmljZSBJRHMsIGZpcm13YXJlIHZlcnNpb24gY29tcGF0aWJpbGl0eSwgYW5kIHBlcmhhcHMgZXZlbiBzb21lIG5lZ290aWF0aW9uIHdpdGggdGhlIGRldmljZSBpdHNlbGYuIEknbGwgYmUgd2F0Y2hpbmcgY2xvc2VseSBmb3IgYW55IGVycm9yIGhhbmRsaW5nOyBkZXRlcm1pbmluZyB3aGVuIGFuZCBob3cgdGhlIGZ1bmN0aW9uIGRlY2lkZXMgdGhhdCBhIGRvd25sb2FkIGlzICpub3QqIG5lZWRlZCBpcyBqdXN0IGFzIGltcG9ydGFudCBhcyB3aGVuIGl0IGRlY2lkZXMgdGhhdCBpdCAqaXMqLiBJJ20gYW50aWNpcGF0aW5nIHRoYXQgaXQncyBwcm9iYWJseSB1c2luZyBhIHNldCBvZiBjcml0ZXJpYSB0byBjb21wYXJlIHRoZSBydW5uaW5nIGRyaXZlciB0byB0aGUgaGFyZHdhcmUgaW4gcXVlc3Rpb24sIGFuZCBiYXNlZCBvbiBzb21lIGxvZ2ljIHdpdGhpbiB0aGUgZnVuY3Rpb24gaXQgd2lsbCBlaXRoZXIga2ljayBvZmYgYSBmaXJtd2FyZSBkb3dubG9hZCBvciBkZWNsYXJlIHRoYXQgaXQgaXNuJ3QgbmVjZXNzYXJ5LiBJJ2xsIGFsc28gYmUgbG9va2luZyBmb3IgYW55IGluZGljYXRpb25zIG9mIHJhY2UgY29uZGl0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTczOTIsIk91dHB1dFRva2VucyI6NTMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxODo1MTowOC44MjIwNDU2NTFaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA4NzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3OTcsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA3OTc6XFx0c3RhdGljIGJvb2xcXG4gNzk4OlxcdGJyY21mX3VzYl9kbG5lZWRlZChzdHJ1Y3QgYnJjbWZfdXNiZGV2X2luZm8gKmRldmluZm8pXFxuIDc5OTpcXHR7XFxuIDgwMDpcXHRcXHRzdHJ1Y3QgYm9vdHJvbV9pZF9sZSBpZDtcXG4gODAxOlxcdFxcdHUzMiBjaGlwaWQsIGNoaXByZXY7XFxuIDgwMjpcXHRcXG4gODAzOlxcdFxcdGJyY21mX2RiZyhVU0IsIFxcXCJFbnRlclxcXFxuXFxcIik7XFxuIDgwNDpcXHRcXG4gODA1OlxcdFxcdGlmIChkZXZpbmZvID09IE5VTEwpXFxuIDgwNjpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDgwNzpcXHRcXG4gODA4OlxcdFxcdC8qIENoZWNrIGlmIGZpcm13YXJlIGRvd25sb2FkZWQgYWxyZWFkeSBieSBxdWVyeWluZyBydW50aW1lIElEICovXFxuIDgwOTpcXHRcXHRpZC5jaGlwID0gY3B1X3RvX2xlMzIoMHhERUFEKTtcXG4gODEwOlxcdFxcdGJyY21mX3VzYl9kbF9jbWQoZGV2aW5mbywgRExfR0VUVkVSLCBcXHUwMDI2aWQsIHNpemVvZihpZCkpO1xcbiA4MTE6XFx0XFxuIDgxMjpcXHRcXHRjaGlwaWQgPSBsZTMyX3RvX2NwdShpZC5jaGlwKTtcXG4gODEzOlxcdFxcdGNoaXByZXYgPSBsZTMyX3RvX2NwdShpZC5jaGlwcmV2KTtcXG4gODE0OlxcdFxcbiA4MTU6XFx0XFx0aWYgKChjaGlwaWQgXFx1MDAyNiAweDQzMDApID09IDB4NDMwMClcXG4gODE2OlxcdFxcdFxcdGJyY21mX2RiZyhVU0IsIFxcXCJjaGlwICV4IHJldiAweCV4XFxcXG5cXFwiLCBjaGlwaWQsIGNoaXByZXYpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxODo1MTowOC44MjIxNTU4NDFaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTU1NjU1NzM0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi5cblxuKipBbmFseXppbmcgdGhlIEZpcm13YXJlIERvd25sb2FkIENoZWNrIGluIGBicmNtZl91c2JfZGxuZWVkZWRgKipcblxuUmlnaHQsIHNvIGBicmNtZl91c2JfZGxuZWVkZWRgIGlzIHRoZSBmdW5jdGlvbiB3ZSdyZSBsb29raW5nIGF0LiBUaGUgY29yZSBpZGVhIHNlZW1zIHRvIGJlIHdoZXRoZXIgb3Igbm90IGZpcm13YXJlIG5lZWRzIHRvIGJlIGRvd25sb2FkZWQsIGFuZCBpdCdzIGRvaW5nIHRoaXMgYnkgdGFsa2luZyB0byB0aGUgZGV2aWNlIGl0c2VsZi4gSW50ZXJlc3RpbmcuIFNvLCBpdCdzIG5vdCByZWx5aW5nIHNvbGVseSBvbiBzb21lIGludGVybmFsIGZsYWcgb3Igc3RhdGU7IGl0J3MgYWN0aXZlbHkgcXVlcnlpbmcgdGhlIGVtdWxhdGVkIGRldmljZSwgaW4gdGhpcyBjYXNlIHN5emthbGxlci5cblxuQW5kIGhlcmUncyB3aGVyZSB0aGUgbnVhbmNlIGNvbWVzIGluIC0gdGhlIGRldmljZSdzIHJlc3BvbnNlIGNhbiBhY3R1YWxseSAqdHJpY2sqIGBicmNtZl91c2JfZGxuZWVkZWRgIGludG8gdGhpbmtpbmcgdGhlIGZpcm13YXJlIGlzIGFscmVhZHkgdGhlcmUuIElmIHN5emthbGxlciwgaW4gaXRzIGVtdWxhdGlvbiwgcmV0dXJucyBhIHBhcnRpY3VsYXIgdmFsdWUgaW4gcmVzcG9uc2UgdG8gdGhlIHF1ZXJ5LCBgYnJjbWZfdXNiX2RsbmVlZGVkYCBjYW4gcHJlbWF0dXJlbHkgcmV0dXJuIGBmYWxzZWAuIFRoYXQgaXMgYSBjcml0aWNhbCBwb2ludC5cblxuTm93LCBJJ20gZ29pbmcgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBhY3R1YWwgY29kZSBvZiBgYnJjbWZfdXNiX2RsbmVlZGVkYCBhbmQgcGlucG9pbnQgZXhhY3RseSBob3cgdGhpcyBjaGVjayB3b3Jrcy4gVGhhdCdzIHdoZXJlIHRoZSByZWFsIHBvdGVudGlhbCBmb3IgZXhwbG9pdGF0aW9uIGxpZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXRhaWxzIG9mIHRoYXQgcXVlcnkgYW5kIHRoZSBzcGVjaWZpYyB2YWx1ZSB0aGF0IGNhdXNlcyB0aGlzIGJlaGF2aW9yLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODA5NCwiT3V0cHV0VG9rZW5zIjo1MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjczLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTg6NTE6MTguMzc4NzE2NTAxWiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNzY3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmNcIixcbiAgXCJGaXJzdExpbmVcIjogODE3LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgODE3OlxcdFxcdGVsc2VcXG4gODE4OlxcdFxcdFxcdGJyY21mX2RiZyhVU0IsIFxcXCJjaGlwICVkIHJldiAweCV4XFxcXG5cXFwiLCBjaGlwaWQsIGNoaXByZXYpO1xcbiA4MTk6XFx0XFx0aWYgKGNoaXBpZCA9PSBCUkNNRl9QT1NUQk9PVF9JRCkge1xcbiA4MjA6XFx0XFx0XFx0YnJjbWZfZGJnKFVTQiwgXFxcImZpcm13YXJlIGFscmVhZHkgZG93bmxvYWRlZFxcXFxuXFxcIik7XFxuIDgyMTpcXHRcXHRcXHRicmNtZl91c2JfZGxfY21kKGRldmluZm8sIERMX1JFU0VUQ0ZHLCBcXHUwMDI2aWQsIHNpemVvZihpZCkpO1xcbiA4MjI6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiA4MjM6XFx0XFx0fSBlbHNlIHtcXG4gODI0OlxcdFxcdFxcdGRldmluZm8tXFx1MDAzZWJ1c19wdWIuZGV2aWQgPSBjaGlwaWQ7XFxuIDgyNTpcXHRcXHRcXHRkZXZpbmZvLVxcdTAwM2VidXNfcHViLmNoaXByZXYgPSBjaGlwcmV2O1xcbiA4MjY6XFx0XFx0fVxcbiA4Mjc6XFx0XFx0cmV0dXJuIHRydWU7XFxuIDgyODpcXHR9XFxuIDgyOTpcXHRcXG4gODMwOlxcdHN0YXRpYyBpbnRcXG4gODMxOlxcdGJyY21mX3VzYl9yZXNldGNmZyhzdHJ1Y3QgYnJjbWZfdXNiZGV2X2luZm8gKmRldmluZm8pXFxuIDgzMjpcXHR7XFxuIDgzMzpcXHRcXHRzdHJ1Y3QgYm9vdHJvbV9pZF9sZSBpZDtcXG4gODM0OlxcdFxcdHUzMiBsb29wX2NudDtcXG4gODM1OlxcdFxcdGludCBlcnI7XFxuIDgzNjpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTg6NTE6MTguMzc4ODM3MzcxWiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0MDA2Nzc3NjM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlVTQiBFbXVsYXRpb24gYW5kIGJyY21mbWFjIEZ1enppbmcgUG9zc2liaWxpdGllcyoqXG5cbk9rYXksIHRoaXMgaXMgcHJvbWlzaW5nISBUaGUgZmFjdCB0aGF0IGlmIHRoZSBlbXVsYXRlZCBVU0IgZGV2aWNlIHJlcGxpZXMgdG8gYERMX0dFVFZFUmAgd2l0aCBgQlJDTUZfUE9TVEJPT1RfSURgLCBgYnJjbWZfdXNiX2RsbmVlZGVkYCB3aWxsIHJldHVybiBmYWxzZSBpcyBhIGh1Z2Ugd2luLiBUaGlzIG1lYW5zIHRoZSBkcml2ZXIgd2lsbCBieXBhc3MgdGhlIGZpcm13YXJlIGRvd25sb2FkIGFuZCBkaXJlY3RseSBoaXQgYGJyY21mX2F0dGFjaGAuIFRoYXTigJlzIGEga2V5IHN0ZXAgdG8gYmVpbmcgYWJsZSB0byBmdXp6IGBicmNtZm1hY2Agb3ZlciBVU0Igd2l0aCBzeXprYWxsZXIuXG5cbk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBgYnJjbWZfY3l3X2V4dGVybmFsX2F1dGhgIGZ1bmN0aW9uIGZpdHMgaW50byB0aGlzLiBJdCdzIHJlZ2lzdGVyZWQgYXMgYGRydnItXHUwMDNlb3BzLVx1MDAzZWV4dGVybmFsX2F1dGhgIGluIGBicmNtZl9jeXdfZ2V0X2NmZzgwMjExX29wc2AsIHNvIGl0J3MgY3JpdGljYWwgdG8gZGV0ZXJtaW5lIGlmIHRoYXQgZnVuY3Rpb24gaXMgZXZlbiBjYWxsZWQuIExldOKAmXMgZmlndXJlIG91dCB3aGVyZSBgZ2V0X2NmZzgwMjExX29wc2AgZ2V0cyBjYWxsZWQgYW5kIHRoYXQgc2hvdWxkIHRlbGwgbWUgd2hldGhlciBgYnJjbWZfY3l3X2V4dGVybmFsX2F1dGhgIGlzIGEgdGFyZ2V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODc5NCwiT3V0cHV0VG9rZW5zIjo1MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE4OjUyOjEyLjM4NTYxODk3NloiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTUxOTU0MzkzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImdldF9jZmc4MDIxMV9vcHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jPTEzNTk9aW50IGJyY21mX2F0dGFjaChzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jLTEzOTktXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuYzoxNDAwOlxcdGJyY21mX2Z3dmlkX2dldF9jZmc4MDIxMV9vcHMoZHJ2cik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuYy0xNDAxLVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmM9MTk4PWJyY21mX2N5d19leHRlcm5hbF9hdXRoKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L2NvcmUuYy0yMzQtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmM6MjM1OnN0YXRpYyB2b2lkIGJyY21mX2N5d19nZXRfY2ZnODAyMTFfb3BzKHN0cnVjdCBicmNtZl9wdWIgKmRydnIpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmMtMjM2LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvY29yZS5jPTM3NT1jb25zdCBzdHJ1Y3QgYnJjbWZfZnd2aWRfb3BzIGJyY21mX2N5d19vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L2NvcmUuYy0zNzgtXFx0LmFjdGl2YXRlX2V2ZW50cyA9IGJyY21mX2N5d19hY3RpdmF0ZV9ldmVudHMsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmM6Mzc5OlxcdC5nZXRfY2ZnODAyMTFfb3BzID0gYnJjbWZfY3l3X2dldF9jZmc4MDIxMV9vcHMsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmMtMzgwLVxcdC5yZWdpc3Rlcl9ldmVudF9oYW5kbGVycyA9IGJyY21mX2N5d19yZWdpc3Rlcl9ldmVudF9oYW5kbGVycyxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9md3ZpZC5oPTE0PXN0cnVjdCBicmNtZl9md3ZpZF9vcHMge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Z3dmlkLmgtMTgtXFx0aW50ICgqYWN0aXZhdGVfZXZlbnRzKShzdHJ1Y3QgYnJjbWZfaWYgKmlmcCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Z3dmlkLmg6MTk6XFx0dm9pZCAoKmdldF9jZmc4MDIxMV9vcHMpKHN0cnVjdCBicmNtZl9wdWIgKmRydnIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9md3ZpZC5oLTIwLVxcdHZvaWQgKCpyZWdpc3Rlcl9ldmVudF9oYW5kbGVycykoc3RydWN0IGJyY21mX3B1YiAqZHJ2cik7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZnd2aWQuaD02Mj1zdGF0aWMgaW5saW5lIGludCBicmNtZl9md3ZpZF9hY3RpdmF0ZV9ldmVudHMoc3RydWN0IGJyY21mX2lmICppZnApXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZnd2aWQuaC03MS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZnd2aWQuaDo3MjpzdGF0aWMgaW5saW5lIHZvaWQgYnJjbWZfZnd2aWRfZ2V0X2NmZzgwMjExX29wcyhzdHJ1Y3QgYnJjbWZfcHViICpkcnZyKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9md3ZpZC5oLTczLXtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZnd2aWQuaDo3NDpcXHRpZiAoIWRydnItXFx1MDAzZXZvcHMgfHwgIWRydnItXFx1MDAzZXZvcHMtXFx1MDAzZWdldF9jZmc4MDIxMV9vcHMpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Z3dmlkLmgtNzUtXFx0XFx0cmV0dXJuO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9md3ZpZC5oLTc2LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9md3ZpZC5oOjc3OlxcdGRydnItXFx1MDAzZXZvcHMtXFx1MDAzZWdldF9jZmc4MDIxMV9vcHMoZHJ2cik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Z3dmlkLmgtNzgtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxODo1MjoxMi45Mzc1OTg5MThaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTEwMTkyNTEwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIGJyY21mIERyaXZlcidzIEluaXRpYWxpemF0aW9uKipcblxuT2theSwgc28gYGJyY21mX2Z3dmlkX2dldF9jZmc4MDIxMV9vcHNgIGdldHMgY2FsbGVkIHdpdGhpbiBgYnJjbWZfYXR0YWNoYC4gVGhhdCdzIHRoZSBlbnRyeSBwb2ludCwgdGhlIGNyaXRpY2FsIGhvb2suIEJ1dCB3YWl0IGEgbWludXRlLi4uIEkgbmVlZCB0byB1bmRlcnN0YW5kICpob3cqIHRoZSBgZHJ2ci1cdTAwM2V2b3BzYCBzdHJ1Y3R1cmUgaXMgYWN0dWFsbHkgcG9wdWxhdGVkLiAgVGhhdCdzIHRoZSBjb3JlIG9mIGhvdyB0aGUgZHJpdmVyIGludGVyZmFjZXMgd2l0aCB0aGUgY2ZnODAyMTEgbGF5ZXIsIGlzbid0IGl0PyBMZXQgbWUgcXVpY2tseSByZXZpZXcgdGhlIGBicmNtZl9hdHRhY2hgIGZ1bmN0aW9uIGl0c2VsZi4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSB0aGF0IGNhbGwgYW5kIHNlZSB3aGVyZSBgdm9wc2AgaXMgYWN0dWFsbHkgYXNzaWduZWQuIFRoaXMgaXMgYSBjcnVjaWFsIGFyZWEgZm9yIGRlYnVnZ2luZyBhbmQgdW5kZXJzdGFuZGluZyB0aGUgZHJpdmVyJ3Mgb3ZlcmFsbCBjb250cm9sIGZsb3csIHBhcnRpY3VsYXJseSBpZiBJIG5lZWQgdG8gbW9kaWZ5IGl0LiBHb3R0YSBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDQzOSwiT3V0cHV0VG9rZW5zIjo1NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE4OjUyOjIyLjAzOTUyNzE3NVoiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzI2MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMzU5LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMzU5OlxcdGludCBicmNtZl9hdHRhY2goc3RydWN0IGRldmljZSAqZGV2KVxcbjEzNjA6XFx0e1xcbjEzNjE6XFx0XFx0c3RydWN0IGJyY21mX2J1cyAqYnVzX2lmID0gZGV2X2dldF9kcnZkYXRhKGRldik7XFxuMTM2MjpcXHRcXHRzdHJ1Y3QgYnJjbWZfcHViICpkcnZyID0gYnVzX2lmLVxcdTAwM2VkcnZyO1xcbjEzNjM6XFx0XFx0aW50IHJldCA9IDA7XFxuMTM2NDpcXHRcXHRpbnQgaTtcXG4xMzY1OlxcdFxcbjEzNjY6XFx0XFx0YnJjbWZfZGJnKFRSQUNFLCBcXFwiRW50ZXJcXFxcblxcXCIpO1xcbjEzNjc6XFx0XFxuMTM2ODpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRShkcnZyLVxcdTAwM2VpZjJic3MpOyBpKyspXFxuMTM2OTpcXHRcXHRcXHRkcnZyLVxcdTAwM2VpZjJic3NbaV0gPSBCUkNNRl9CU1NJRFhfSU5WQUxJRDtcXG4xMzcwOlxcdFxcbjEzNzE6XFx0XFx0bXV0ZXhfaW5pdChcXHUwMDI2ZHJ2ci1cXHUwMDNlcHJvdG9fYmxvY2spO1xcbjEzNzI6XFx0XFxuMTM3MzpcXHRcXHQvKiBMaW5rIHRvIGJ1cyBtb2R1bGUgKi9cXG4xMzc0OlxcdFxcdGRydnItXFx1MDAzZWhkcmxlbiA9IDA7XFxuMTM3NTpcXHRcXG4xMzc2OlxcdFxcdHJldCA9IGJyY21mX2Z3dmlkX2F0dGFjaChkcnZyKTtcXG4xMzc3OlxcdFxcdGlmIChyZXQgIT0gMCkge1xcbjEzNzg6XFx0XFx0XFx0YnBoeV9lcnIoZHJ2ciwgXFxcImJyY21mX2Z3dmlkX2F0dGFjaCBmYWlsZWRcXFxcblxcXCIpO1xcbjEzNzk6XFx0XFx0XFx0Z290byBmYWlsO1xcbjEzODA6XFx0XFx0fVxcbjEzODE6XFx0XFxuMTM4MjpcXHRcXHQvKiBBdHRhY2ggYW5kIGxpbmsgaW4gdGhlIHByb3RvY29sICovXFxuMTM4MzpcXHRcXHRyZXQgPSBicmNtZl9wcm90b19hdHRhY2goZHJ2cik7XFxuMTM4NDpcXHRcXHRpZiAocmV0ICE9IDApIHtcXG4xMzg1OlxcdFxcdFxcdGJwaHlfZXJyKGRydnIsIFxcXCJicmNtZl9wcm90X2F0dGFjaCBmYWlsZWRcXFxcblxcXCIpO1xcbjEzODY6XFx0XFx0XFx0Z290byBmYWlsO1xcbjEzODc6XFx0XFx0fVxcbjEzODg6XFx0XFxuMTM4OTpcXHRcXHQvKiBhdHRhY2ggZmlybXdhcmUgZXZlbnQgaGFuZGxlciAqL1xcbjEzOTA6XFx0XFx0cmV0ID0gYnJjbWZfZndlaF9hdHRhY2goZHJ2cik7XFxuMTM5MTpcXHRcXHRpZiAocmV0ICE9IDApIHtcXG4xMzkyOlxcdFxcdFxcdGJwaHlfZXJyKGRydnIsIFxcXCJicmNtZl9md2VoX2F0dGFjaCBmYWlsZWRcXFxcblxcXCIpO1xcbjEzOTM6XFx0XFx0XFx0Z290byBmYWlsO1xcbjEzOTQ6XFx0XFx0fVxcbjEzOTU6XFx0XFxuMTM5NjpcXHRcXHQvKiBBdHRhY2ggdG8gZXZlbnRzIGltcG9ydGFudCBmb3IgY29yZSBjb2RlICovXFxuMTM5NzpcXHRcXHRicmNtZl9md2VoX3JlZ2lzdGVyKGRydnIsIEJSQ01GX0VfUFNNX1dBVENIRE9HLFxcbjEzOTg6XFx0XFx0XFx0XFx0ICAgIGJyY21mX3BzbV93YXRjaGRvZ19ub3RpZnkpO1xcbjEzOTk6XFx0XFxuMTQwMDpcXHRcXHRicmNtZl9md3ZpZF9nZXRfY2ZnODAyMTFfb3BzKGRydnIpO1xcbjE0MDE6XFx0XFxuMTQwMjpcXHRcXHRyZXQgPSBicmNtZl9idXNfc3RhcnRlZChkcnZyLCBkcnZyLVxcdTAwM2VvcHMpO1xcbjE0MDM6XFx0XFx0aWYgKHJldCAhPSAwKSB7XFxuMTQwNDpcXHRcXHRcXHRicGh5X2VycihkcnZyLCBcXFwiZG9uZ2xlIGlzIG5vdCByZXNwb25kaW5nOiBlcnI9JWRcXFxcblxcXCIsIHJldCk7XFxuMTQwNTpcXHRcXHRcXHRnb3RvIGZhaWw7XFxuMTQwNjpcXHRcXHR9XFxuMTQwNzpcXHRcXG4xNDA4OlxcdFxcdHJldHVybiAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxODo1MjoyMi4wMzk3MDA5NzVaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTE3MDQ2MDE2MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoYXQgY29kZSBzbmlwcGV0OlxuXG4qKkRpdmluZyBpbnRvIHRoZSBEcml2ZXIncyBWaWRlbyBPcGVyYXRpb25zKipcblxuT2theSwgc28gYGJyY21mX2Z3dmlkX2F0dGFjaGAgaXMgYSBrZXkgZnVuY3Rpb24gaGVyZS4gVGhlIGluaXRpYWwgY2x1ZSBpcyB0aGF0IGl0J3Mgc2V0dGluZyBgZHJ2ci1cdTAwM2V2b3BzYC4gVGhhdCdzIHRoZSBkcml2ZXIncyAqdm9wcyogKHZpZGVvIG9wZXJhdGlvbnMpIHN0cnVjdHVyZSwgd2hpY2ggbWVhbnMgdGhpcyBhdHRhY2htZW50IGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciBsaW5raW5nIHRoZSBkcml2ZXIncyBtZXRob2RzIGZvciB2aWRlbyBwcm9jZXNzaW5nIHRvIHRoZSBjb3JlIGZyYW1ld29yay4gV2UncmUgZXNzZW50aWFsbHkgaW5pdGlhbGl6aW5nIHRoZSBkcml2ZXIncyBpbnRlcmZhY2UgZm9yIGhhbmRsaW5nIHZpZGVvIGRhdGEuXG5cbkdpdmVuIHRoYXQncyBteSBzdGFydGluZyBwb2ludCwgaXQgb25seSBtYWtlcyBzZW5zZSB0byBkaXZlIGRpcmVjdGx5IGludG8gYGJyY21mX2Z3dmlkX2F0dGFjaGAuIEkgbmVlZCB0byB1bmRlcnN0YW5kICpob3cqIGl0J3Mgc2V0dGluZyB0aGVzZSBgdm9wc2AsIHdoYXQgc3BlY2lmaWMgZnVuY3Rpb25zIGFyZSBiZWluZyBhc3NpZ25lZCwgYW5kIHRoZSBjb250ZXh0IG9mIHRoaXMgYXR0YWNobWVudC4gSSB3YW50IHRvIHNlZSB3aGljaCBzcGVjaWZpYyBvcGVyYXRpb25zIGFyZSBzdXBwb3J0ZWQgYW5kIGhvdyB0aGUgbG93IGxldmVsIHZpZGVvIGZ1bmN0aW9uYWxpdHkgaXMgZW5hYmxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE1MjIsIk91dHB1dFRva2VucyI6NTAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE4OjUzOjEzLjc0NDMwNTYzOVoiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk0NTE1MTM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJyY21mX2Z3dmlkX2F0dGFjaFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmM9MTM1OT1pbnQgYnJjbWZfYXR0YWNoKHN0cnVjdCBkZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmMtMTM3NS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jOjEzNzY6XFx0cmV0ID0gYnJjbWZfZnd2aWRfYXR0YWNoKGRydnIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmMtMTM3Ny1cXHRpZiAocmV0ICE9IDApIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jOjEzNzg6XFx0XFx0YnBoeV9lcnIoZHJ2ciwgXFxcImJyY21mX2Z3dmlkX2F0dGFjaCBmYWlsZWRcXFxcblxcXCIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmMtMTM3OS1cXHRcXHRnb3RvIGZhaWw7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZnd2aWQuYz0xNDc9c3RhdGljIGlubGluZSBpbnQgYnJjbWZfZnd2aWRfcmVxdWVzdF9tb2R1bGUoZW51bSBicmNtZl9md3ZlbmRvciBmd3ZpZClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9md3ZpZC5jLTE1Mi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZnd2aWQuYzoxNTM6aW50IGJyY21mX2Z3dmlkX2F0dGFjaChzdHJ1Y3QgYnJjbWZfcHViICpkcnZyKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9md3ZpZC5jLTE1NC17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZnd2aWQuaD0yNj1pbnQgYnJjbWZfZnd2aWRfdW5yZWdpc3Rlcl92ZW5kb3IoZW51bSBicmNtZl9md3ZlbmRvciBmd3ZpZCwgc3RydWN0IG1vZHVsZSAqbW9kKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9md3ZpZC5oLTI4LS8qIGNvcmUgZHJpdmVyIGZ1bmN0aW9ucyAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9md3ZpZC5oOjI5OmludCBicmNtZl9md3ZpZF9hdHRhY2goc3RydWN0IGJyY21mX3B1YiAqZHJ2cik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Z3dmlkLmgtMzAtdm9pZCBicmNtZl9md3ZpZF9kZXRhY2goc3RydWN0IGJyY21mX3B1YiAqZHJ2cik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE4OjUzOjE0LjIzODgyNTM1OFoiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MTQ3Njc2Mzg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQsIGluIHRoZSBmaXJzdCBwZXJzb24gYW5kIHRhcmdldGVkIHRvd2FyZHMgYW4gZXhwZXJ0OlxuXG4qKkRlbHZpbmcgaW50byBgYnJjbWZfZnd2aWRfYXR0YWNoYCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byBgYnJjbWZfZnd2aWRfYXR0YWNoYC4gSW1tZWRpYXRlbHksIEknbSB0aGlua2luZyBhYm91dCB0aGUgZnVuZGFtZW50YWwgcm9sZSB0aGlzIGZ1bmN0aW9uIHBsYXlzIHdpdGhpbiB0aGUgQnJvYWRjb20gV2ktRmkgZnJhbWV3b3JrLiBGcm9tIHRoZSBuYW1lIGl0c2VsZiwgSSdtIGV4cGVjdGluZyB0aGlzIHRvIGJlIHRoZSBjb3JlIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciBhdHRhY2hpbmcgdGhlIGZpcm13YXJlIHZpZGVvIGludGVyZmFjZSwgbGlrZWx5IGFjdGluZyBhcyBhIGNydWNpYWwgYnJpZGdlIGJldHdlZW4gdGhlIGhvc3QgZHJpdmVyIGFuZCB0aGUgZmlybXdhcmUgdmlkZW8gY29tcG9uZW50LiBJIGFudGljaXBhdGUgdGhpcyB3aWxsIGludm9sdmUgYSBzZXJpZXMgb2YgY3J1Y2lhbCBzZXR1cCBzdGVwcy4gSXQnbGwgcHJvYmFibHkgYmUgcmVzcG9uc2libGUgZm9yIGFsbG9jYXRpbmcgbmVjZXNzYXJ5IGRhdGEgc3RydWN0dXJlcywgaW5pdGlhbGl6aW5nIGNvbW11bmljYXRpb24gY2hhbm5lbHMsIGFuZCByZWdpc3RlcmluZyBpdHNlbGYgd2l0aCB2YXJpb3VzIGtlcm5lbCBzdWJzeXN0ZW1zLiBJJ2xsIG5lZWQgdG8gY2hlY2sgaG93IGl0IGhhbmRsZXMgYW55IGVycm9yIGNvbmRpdGlvbnMsIGVzcGVjaWFsbHkgaG93IGdyYWNlZnVsbHkgaXQgZGVhbHMgd2l0aCBmaXJtd2FyZSBsb2FkIGZhaWx1cmVzIG9yIGNvbW11bmljYXRpb24gaXNzdWVzLiBGdXJ0aGVybW9yZSwgSSdsbCBiZSBsb29raW5nIHRvIHVuZGVyc3RhbmQgdGhlIGludHJpY2FjaWVzIG9mIGl0cyBpbnRlcmFjdGlvbiB3aXRoIHRoZSBicm9hZGVyIGRyaXZlciBhcmNoaXRlY3R1cmUsIHNwZWNpZmljYWxseSBob3cgaXQgaW50ZWdyYXRlcyB3aXRoIG90aGVyIHZpZGVvLXJlbGF0ZWQgbW9kdWxlcyBvciBzdWJzeXN0ZW1zIHdpdGhpbiB0aGUgQnJvYWRjb20gY2hpcHNldC4gSXMgaXQgdXNpbmcgYW55IGN1c3RvbSBBUElzIG9yIGludGVyZmFjZXM/IEknbSBjdXJpb3VzIHRvIHNlZSB0aGUgbWVtb3J5IGZvb3RwcmludCBpbXBsaWNhdGlvbnMgYW5kIGlmIHRoZXJlIGFyZSBhbnkgcGVyZm9ybWFuY2UgY29uc2lkZXJhdGlvbnMgZm9yIHJ1bm5pbmcgdGhpcyBmdW5jdGlvbiwgcGFydGljdWxhcmx5IGdpdmVuIHRoZSB2aWRlbyBiYW5kd2lkdGguIEkgZXhwZWN0IHRvIGJlIGxvb2tpbmcgZm9yIHdoZXJlIHRoaXMgZnVuY3Rpb24gdGllcyBpbnRvIHRoZSBsYXJnZXIgcGljdHVyZSBvZiBzeXN0ZW0gaW5pdGlhbGl6YXRpb24gYW5kIHRlYXJkb3duIG9mIHRoZSBmaXJtd2FyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI0NDcsIk91dHB1dFRva2VucyI6NTQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxODo1MzoyMi4zODY1MDUyMTRaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIwOTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9md3ZpZC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE1MyxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE1MzpcXHRpbnQgYnJjbWZfZnd2aWRfYXR0YWNoKHN0cnVjdCBicmNtZl9wdWIgKmRydnIpXFxuIDE1NDpcXHR7XFxuIDE1NTpcXHRcXHRlbnVtIGJyY21mX2Z3dmVuZG9yIGZ3dmlkID0gZHJ2ci1cXHUwMDNlYnVzX2lmLVxcdTAwM2Vmd3ZpZDtcXG4gMTU2OlxcdFxcdGludCByZXQ7XFxuIDE1NzpcXHRcXG4gMTU4OlxcdFxcdGlmIChmd3ZpZCBcXHUwMDNlPSBBUlJBWV9TSVpFKGZ3dmlkX2xpc3QpKVxcbiAxNTk6XFx0XFx0XFx0cmV0dXJuIC1FUkFOR0U7XFxuIDE2MDpcXHRcXG4gMTYxOlxcdFxcdGJyY21mX2RiZyhUUkFDRSwgXFxcIm1vZD0lczogZW50ZXI6IGRldiAlc1xcXFxuXFxcIiwgZnd2aWRfbGlzdFtmd3ZpZF0ubmFtZSxcXG4gMTYyOlxcdFxcdFxcdCAgZGV2X25hbWUoZHJ2ci1cXHUwMDNlYnVzX2lmLVxcdTAwM2VkZXYpKTtcXG4gMTYzOlxcdFxcbiAxNjQ6XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2Znd2aWRfbGlzdF9sb2NrKTtcXG4gMTY1OlxcdFxcbiAxNjY6XFx0XFx0cmV0ID0gYnJjbWZfZnd2aWRfcmVxdWVzdF9tb2R1bGUoZnd2aWQpO1xcbiAxNjc6XFx0XFx0aWYgKHJldClcXG4gMTY4OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuIDE2OTpcXHRcXG4gMTcwOlxcdFxcdGRydnItXFx1MDAzZXZvcHMgPSBmd3ZpZF9saXN0W2Z3dmlkXS52b3BzO1xcbiAxNzE6XFx0XFx0bGlzdF9hZGQoXFx1MDAyNmRydnItXFx1MDAzZWJ1c19pZi1cXHUwMDNlbGlzdCwgXFx1MDAyNmZ3dmlkX2xpc3RbZnd2aWRdLmRydnJfbGlzdCk7XFxuIDE3MjpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTg6NTM6MjIuMzg2NjI4NjU0WiIsIlNlcSI6NDMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc4MTAzMDIzMjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipVbmRlcnN0YW5kaW5nIHRoZSBEcml2ZXIgSW5pdGlhbGl6YXRpb24gUHJvY2VzcyoqXG5cbkFscmlnaHQsIHNvIEknbSB0cmFjaW5nIGhvdyB0aGUgZHJpdmVyJ3MgdmlydHVhbCBvcGVyYXRpb24gdGFibGUsIHNwZWNpZmljYWxseSBgZHJ2ci1cdTAwM2V2b3BzYCwgaXMgaW5pdGlhbGl6ZWQuIEl0IGxvb2tzIGxpa2UgaXQncyBiZWluZyBzZXQgdG8gYGZ3dmlkX2xpc3RbZnd2aWRdLnZvcHNgLiAgVGhlIGtleSBoZXJlIGlzIGBmd3ZpZGAuIFdoZXJlJ3MgKnRoYXQqIGNvbWluZyBmcm9tP1xuXG5BaGEhIGBmd3ZpZGAgaXMgcHVsbGVkIGZyb20gYGRydnItXHUwMDNlYnVzX2lmLVx1MDAzZWZ3dmlkYC4gIFRoYXQgbWVhbnMgdGhlIGJ1cyBpbnRlcmZhY2UgaXMgcHJvdmlkaW5nIHRoZSBmaXJtd2FyZSB2ZXJzaW9uIElELiAgTm93LCB3aGVyZSBpcyAqdGhhdCogZ2V0dGluZyBzZXQ/ICBMZXQncyBzZWUuLi4gSW4gYGJyY21mX3VzYl9wcm9iZV9jYmAsIHRoZSBjYWxsYmFjayBmdW5jdGlvbiwgYGJ1cy1cdTAwM2Vmd3ZpZGAgZ2V0cyBhc3NpZ25lZCB0aGUgYGZ3dmlkYCBwYXNzZWQgdG8gaXQgYXMgYW4gYXJndW1lbnQuIEdvb2QsIHRoYXQgbmFycm93cyBpdCBkb3duLlxuXG5BbmQgdGhlIGFyZ3VtZW50LCB0aGF0IGBmd3ZpZGAgcGFzc2VkIHRvIHRoZSBjYWxsYmFjaywgY29tZXMgZnJvbSBgaWQtXHUwMDNlZHJpdmVyX2luZm9gIHdpdGhpbiBgYnJjbWZfdXNiX3Byb2JlYC4gIFNvIHRoZSBkZXZpY2UgSUQgdGFibGUgaXMgcHJvdmlkaW5nIHRoZSBmaXJtd2FyZSB2ZXJzaW9uIElEIHZpYSB0aGUgZHJpdmVyIGluZm8sIHBhc3NlZCB0byB0aGUgYnVzIGludGVyZmFjZSwgd2hpY2ggaXMgdGhlbiB1c2VkIHRvIGluaXRpYWxpemUgdGhlIGBkcnZyLVx1MDAzZXZvcHNgIHN0cnVjdHVyZS4gSSdtIGdvaW5nIHRvIG5lZWQgdG8gZGlnIGludG8gYGJyY21mX3VzYl9wcm9iZWAgYW5kLCBlc3BlY2lhbGx5LCBgYnJjbWZfdXNiX2RldmlkX3RhYmxlYCBub3cgdG8gY29uZmlybSB0aGlzIGZsb3cgYW5kIHNlZSBleGFjdGx5IHdoaWNoIGZpcm13YXJlIHZlcnNpb25zIGFyZSBiZWluZyBzdXBwb3J0ZWQgYW5kIGhvdyB0aGV5J3JlIGJlaW5nIG1hdGNoZWQgdG8gdGhlIGNvcnJlY3QgYHZvcHNgIGltcGxlbWVudGF0aW9ucy4gVGhpcyBsb29rcyBsaWtlIGEgc3RhbmRhcmQgbG9va3VwIGJ5IGRldmljZSBJRCB3aXRoIHNvbWUgcG90ZW50aWFsIHZlcnNpb25pbmcgY29uc2lkZXJhdGlvbnMuIEknbGwgZm9jdXMgb24gdGhvc2UgdGFibGVzIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBmaXJtd2FyZSB2ZXJzaW9uIGluZmx1ZW5jZXMgdGhlIGRyaXZlcidzIG9wZXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjMxMzcsIk91dHB1dFRva2VucyI6NTIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxODo1MzozMC4xOTY5MzQ2MDRaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc3NDg3MzQyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJyY21mX3VzYl9kZXZpZF90YWJsZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYz0xMzI3PWJyY21mX3VzYl9kaXNjb25uZWN0X2NiKHN0cnVjdCBicmNtZl91c2JkZXZfaW5mbyAqZGV2aW5mbylcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xMzQxLS8qIEZvcndhcmQgZGVjbGFyYXRpb24gZm9yIHVzYl9tYXRjaF9pZCgpIGNhbGwgKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM6MTM0MjpzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgYnJjbWZfdXNiX2RldmlkX3RhYmxlW107XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTEzNDMtXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM9MTM0NT1icmNtZl91c2JfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xMzU1LVxcdGlmICghaWQpIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM6MTM1NjpcXHRcXHRpZCA9IHVzYl9tYXRjaF9pZChpbnRmLCBicmNtZl91c2JfZGV2aWRfdGFibGUpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xMzU3LVxcdFxcdGlmICghaWQpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYz0xNTE0PXN0YXRpYyBpbnQgYnJjbWZfdXNiX3Jlc2V0X3Jlc3VtZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xNTUxLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYzoxNTUyOnN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBicmNtZl91c2JfZGV2aWRfdGFibGVbXSA9IHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtMTU1My1cXHRCUkNNRl9VU0JfREVWSUNFKEJSQ01fVVNCXzQzMTQzX0RFVklDRV9JRCksXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtMTU2NS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM6MTU2NjpNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgYnJjbWZfdXNiX2RldmlkX3RhYmxlKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtMTU2Ny1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM9MTU2OD1zdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgYnJjbWZfdXNiZHJ2ciA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xNTcxLVxcdC5kaXNjb25uZWN0ID0gYnJjbWZfdXNiX2Rpc2Nvbm5lY3QsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jOjE1NzI6XFx0LmlkX3RhYmxlID0gYnJjbWZfdXNiX2RldmlkX3RhYmxlLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xNTczLVxcdC5zdXNwZW5kID0gYnJjbWZfdXNiX3N1c3BlbmQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE4OjUzOjMwLjI3NDQzMDM0NloiLCJTZXEiOjQ1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4ODIzNTA5Nzk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqQW5hbHl6aW5nIGBicmNtZl91c2JfZGV2aWRfdGFibGVgKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYGJyY21mX3VzYl9kZXZpZF90YWJsZWAuIEknbSBpbW1lZGlhdGVseSB0aGlua2luZyB0aGlzIGlzIGxpa2VseSBhIGNyaXRpY2FsIGRhdGEgc3RydWN0dXJlIHdpdGhpbiB0aGUgQnJvYWRjb20gVVNCIFdpLUZpIGRyaXZlciwgbGlrZWx5IHJlc2lkaW5nIGluIHRoZSBrZXJuZWwgbW9kdWxlLCB0aGF0IGhhbmRsZXMgZGV2aWNlIGlkZW50aWZpY2F0aW9uLiBNeSBpbml0aWFsIGh5cG90aGVzaXMgaXMgdGhhdCBpdCdzIHByb2JhYmx5IGFuIGFycmF5IG9yIGEgc2ltaWxhciBsb29rdXAgdGFibGUuIEl0J3MgcHVycG9zZT8gVG8gZGV0ZXJtaW5lIGlmIGEgY29ubmVjdGVkIFVTQiBkZXZpY2UgaXMgYSBzdXBwb3J0ZWQgQnJvYWRjb20gV2ktRmkgYWRhcHRlci4gSXTigJlzIHRoZSBnYXRla2VlcGVyLCBkZWNpZGluZyBpZiB3ZSB3aWxsIGV2ZW4gYXR0ZW1wdCB0byBsb2FkIHRoZSBgYnJjbWZfdXNiYCBkcml2ZXIgZm9yIGEgZ2l2ZW4gZGV2aWNlLiBJJ20gZXhwZWN0aW5nIHRvIHNlZSBlbnRyaWVzIG1hcHBpbmcgVVNCIHZlbmRvciBJRHMgKFZJRHMpIGFuZCBwcm9kdWN0IElEcyAoUElEcykgdG8gc29tZSBpbnRlcm5hbCByZXByZXNlbnRhdGlvbiwgbWF5YmUgYW4gZW51bWVyYXRlZCBsaXN0LCBvciBhIHN0cnVjdHVyZSBjb250YWluaW5nIGZ1cnRoZXIgZGV2aWNlLXNwZWNpZmljIGNvbmZpZ3VyYXRpb25zLiBUaGUgdGFibGUgc3RydWN0dXJlIGl0c2VsZiBpcyBnb2luZyB0byBiZSBpbXBvcnRhbnQgdG8gaW5zcGVjdCwgaS5lLiBpcyB0aGlzIHVzaW5nIGxpbmVhciBvciBiaW5hcnkgc2VhcmNoPyBBcmUgdGhlcmUgd2lsZGNhcmQgZW50cmllcz8gQXJlIHRoZXJlIHBsYXRmb3JtLXNwZWNpZmljIGFkZGl0aW9ucz8gSSBhbHNvIGFudGljaXBhdGUgdGhlcmUgY291bGQgYmUgZmxhZ3MgYXNzb2NpYXRlZCB3aXRoIGVhY2ggZW50cnksIGluZGljYXRpbmcgdGhpbmdzIGxpa2Ugc3VwcG9ydGVkIGZpcm13YXJlIHZlcnNpb25zLCByZXF1aXJlZCBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZXMsIG9yIHNwZWNpZmljIGhhcmR3YXJlIHJldmlzaW9ucy4gTGV0J3Mgc2VlIGhvdyB0aGV5IGhhbmRsZSByZXZpc2lvbnMsIHRoYXQgbWlnaHQgYmUgaW1wb3J0YW50ISBBIGdvb2QgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhpcyB0YWJsZSB3b3JrcyBpcyBmb3VuZGF0aW9uYWwgdG8gZGVidWdnaW5nIGFueSBjb25uZWN0aXZpdHkgaXNzdWVzIG9yIGRyaXZlciBjb21wYXRpYmlsaXR5IHByb2JsZW1zIEkgbWlnaHQgZW5jb3VudGVyLiBMZXQncyBkaWcgaW4gYW5kIHNlZSBpZiBteSBhc3N1bXB0aW9ucyBob2xkIHRydWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0NTU2LCJPdXRwdXRUb2tlbnMiOjU0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTg6NTM6MzkuMDk3OTQ1NzQyWiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NTM3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTU1MixcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTU1MjpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgYnJjbWZfdXNiX2RldmlkX3RhYmxlW10gPSB7XFxuMTU1MzpcXHRcXHRCUkNNRl9VU0JfREVWSUNFKEJSQ01fVVNCXzQzMTQzX0RFVklDRV9JRCksXFxuMTU1NDpcXHRcXHRCUkNNRl9VU0JfREVWSUNFKEJSQ01fVVNCXzQzMjM2X0RFVklDRV9JRCksXFxuMTU1NTpcXHRcXHRCUkNNRl9VU0JfREVWSUNFKEJSQ01fVVNCXzQzMjQyX0RFVklDRV9JRCksXFxuMTU1NjpcXHRcXHRCUkNNRl9VU0JfREVWSUNFKEJSQ01fVVNCXzQzNTY5X0RFVklDRV9JRCksXFxuMTU1NzpcXHRcXHRMSU5LU1lTX1VTQl9ERVZJQ0UoQlJDTV9VU0JfNDMyMzVfTElOS1NZU19ERVZJQ0VfSUQpLFxcbjE1NTg6XFx0XFx0Q1lQUkVTU19VU0JfREVWSUNFKENZX1VTQl80MzczX0RFVklDRV9JRCksXFxuMTU1OTpcXHRcXHR7IFVTQl9ERVZJQ0UoQlJDTV9VU0JfVkVORE9SX0lEX0xHLCBCUkNNX1VTQl80MzI0Ml9MR19ERVZJQ0VfSUQpIH0sXFxuMTU2MDpcXHRcXHQvKiBzcGVjaWFsIGVudHJ5IGZvciBkZXZpY2Ugd2l0aCBmaXJtd2FyZSBsb2FkZWQgYW5kIHJ1bm5pbmcgKi9cXG4xNTYxOlxcdFxcdEJSQ01GX1VTQl9ERVZJQ0UoQlJDTV9VU0JfQkNNRldfREVWSUNFX0lEKSxcXG4xNTYyOlxcdFxcdENZUFJFU1NfVVNCX0RFVklDRShCUkNNX1VTQl9CQ01GV19ERVZJQ0VfSUQpLFxcbjE1NjM6XFx0XFx0eyAvKiBlbmQ6IGFsbCB6ZXJvZXMgKi8gfVxcbjE1NjQ6XFx0fTtcXG4xNTY1OlxcdFxcbjE1NjY6XFx0TU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGJyY21mX3VzYl9kZXZpZF90YWJsZSk7XFxuMTU2NzpcXHRcXG4xNTY4OlxcdHN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBicmNtZl91c2JkcnZyID0ge1xcbjE1Njk6XFx0XFx0Lm5hbWUgPSBLQlVJTERfTU9ETkFNRSxcXG4xNTcwOlxcdFxcdC5wcm9iZSA9IGJyY21mX3VzYl9wcm9iZSxcXG4xNTcxOlxcdFxcdC5kaXNjb25uZWN0ID0gYnJjbWZfdXNiX2Rpc2Nvbm5lY3QsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE4OjUzOjM5LjA5ODExMzUwMloiLCJTZXEiOjQ3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTA0MDc3MDA3NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqSW52ZXN0aWdhdGluZyBhIGBDWVBSRVNTX1VTQl9ERVZJQ0VgIENvbm5lY3Rpb24qKlxuXG5SaWdodCwgc28gSSdtIHN1c3BlY3RpbmcgdGhhdCB0aGUgYENZUFJFU1NfVVNCX0RFVklDRWAgbWFjcm8sIGluIHRoaXMgcGFydGljdWxhciBkcml2ZXIgb3IgY29uZmlndXJhdGlvbiwgaXMgbGlrZWx5IHNldHRpbmcgdGhlIGBkcml2ZXJfaW5mb2AgZmllbGQgdG8gYEJSQ01GX0ZXVkVORE9SX0NZV2AuIEl0J3MgYSBwcmV0dHkgY29tbW9uIHBhdHRlcm4sIGVzcGVjaWFsbHkgd2l0aCBCcm9hZGNvbS9DeXByZXNzIGRldmljZXMuIFRoZSB2ZW5kb3IgaW5mb3JtYXRpb24gaXMgY3J1Y2lhbCBmb3IgaWRlbnRpZnlpbmcgdGhlIGRldmljZSBhbmQgbG9hZGluZyB0aGUgY29ycmVjdCBmaXJtd2FyZSwgc28gdGhpcyBhc3NvY2lhdGlvbiB3b3VsZCBtYWtlIHNlbnNlLlxuXG5NeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIGRyaWxsIGRvd24gYW5kIGNvbmZpcm0gdGhpcyBoeXBvdGhlc2lzLiBJIG5lZWQgdG8gZ2V0IGludG8gdGhlIGRlZmluaXRpb24gb2YgYENZUFJFU1NfVVNCX0RFVklDRWAgYW5kIHNlZSBleGFjdGx5IHdoYXQgaXQncyBkb2luZy4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBwcmVwcm9jZXNzb3IgZGVmaW5pdGlvbnMsIGFuZCBsaWtlbHkgdHJhY2sgYmFjayB0byB0aGUgYXNzb2NpYXRlZCBoZWFkZXIgZmlsZXMuIFRoaXMgbGlrZWx5IHdpbGwgaW52b2x2ZSB0cmFjaW5nIGl0IHRocm91Z2ggc2V2ZXJhbCBpbmNsdWRlIGZpbGVzLCBwb3NzaWJseSByZWxhdGVkIHRvIFVTQiBkZXZpY2UgaGFuZGxpbmcsIG9yIHNwZWNpZmljIGJvYXJkIGZpbGVzLiBJdCdzIGEgc3RyYWlnaHQtZm9yd2FyZCBwcm9jZXNzIG9mIGNvbm5lY3RpbmcgdGhlIGRvdHMgYnV0IHJlcXVpcmVzIGNvbmZpcm1hdGlvbiBmb3IgdGhpcyB2ZXJ5IHNwZWNpZmljIGNhc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1NDE5LCJPdXRwdXRUb2tlbnMiOjQ4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxODo1NToyOS41MDU4MjAwNDhaIiwiU2VxIjo0OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzNDM4MjY2NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDWVBSRVNTX1VTQl9ERVZJQ0VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM9MTUxND1zdGF0aWMgaW50IGJyY21mX3VzYl9yZXNldF9yZXN1bWUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtMTU0NS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM6MTU0NjojZGVmaW5lIENZUFJFU1NfVVNCX0RFVklDRShkZXZfaWQpIFxcXFxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtMTU0Ny1cXHR7IFxcXFxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYz0xNTUyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBicmNtZl91c2JfZGV2aWRfdGFibGVbXSA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xNTU3LVxcdExJTktTWVNfVVNCX0RFVklDRShCUkNNX1VTQl80MzIzNV9MSU5LU1lTX0RFVklDRV9JRCksXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jOjE1NTg6XFx0Q1lQUkVTU19VU0JfREVWSUNFKENZX1VTQl80MzczX0RFVklDRV9JRCksXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTE1NTktXFx0eyBVU0JfREVWSUNFKEJSQ01fVVNCX1ZFTkRPUl9JRF9MRywgQlJDTV9VU0JfNDMyNDJfTEdfREVWSUNFX0lEKSB9LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTE1NjEtXFx0QlJDTUZfVVNCX0RFVklDRShCUkNNX1VTQl9CQ01GV19ERVZJQ0VfSUQpLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYzoxNTYyOlxcdENZUFJFU1NfVVNCX0RFVklDRShCUkNNX1VTQl9CQ01GV19ERVZJQ0VfSUQpLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xNTYzLVxcdHsgLyogZW5kOiBhbGwgemVyb2VzICovIH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTg6NTU6MzAuMDQwMjA5ODQyWiIsIlNlcSI6NDksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc0OTU1NzA4MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgaWYgdGhleSdyZSBteSBvd246XG5cbioqQW5hbHl6aW5nIHRoZSBDWVBSRVNTX1VTQl9ERVZJQ0UgTWFjcm8qKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBGaXJzdCB0aGluZyBJJ20gZG9pbmcgaXMgemVyb2luZyBpbiBvbiB0aGF0IGBDWVBSRVNTX1VTQl9ERVZJQ0VgIG1hY3JvLiBJdCdzIHRoZSBzdGFydGluZyBwb2ludCwgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoaXMgcGFydGljdWxhciBpbXBsZW1lbnRhdGlvbiBvZiBVU0IgZGV2aWNlIGZ1bmN0aW9uYWxpdHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBkZWZpbml0aW9uLCB3aGF0IGl0IGVuY2Fwc3VsYXRlcywgYW5kIHdoYXQgc3BlY2lmaWMgQ3lwcmVzcy1yZWxhdGVkIGhhcmR3YXJlIG9yIHNvZnR3YXJlIGNvbXBvbmVudHMgaXQncyBob29raW5nIGludG8uIEknbSBleHBlY3RpbmcgdGhpcyBtYWNybyB0byBsaWtlbHkgcmVwcmVzZW50IGEgaGlnaGVyLWxldmVsIGFic3RyYWN0aW9uLCBwcm9iYWJseSBkZWZpbmluZyB0aGluZ3MgbGlrZSB0aGUgZGV2aWNlJ3MgdmVuZG9yIElELCBwcm9kdWN0IElELCBVU0IgY2xhc3MsIHBlcmhhcHMgZXZlbiBzZXR0aW5nIHVwIGRlZmF1bHQgZW5kcG9pbnRzIG9yIGludGVycnVwdCBjb25maWd1cmF0aW9ucy4gTXkgZ29hbCBpcyB0byB1c2UgdGhpcyBtYWNybyBhcyB0aGUgYmFzZSB0byB1bnJhdmVsIGhvdyB0aGUgc3lzdGVtJ3MgVVNCIGRldmljZSBpcyBkZWZpbmVkIGFuZCBpbml0aWFsaXplZC4gSSdsbCBuZWVkIHRvIHRyYWNlIGl0IGRvd24gdGhyb3VnaCB0aGUgaW5jbHVkZSBmaWxlcyBhbmQgcG90ZW50aWFsbHkgbG9vayBmb3Igb3RoZXIgcmVsYXRlZCBtYWNyb3Mgb3IgY29uZmlndXJhdGlvbnMuIEZyb20gdGhlcmUgSSdsbCBiZSBhYmxlIHRvIGJ1aWxkIGEgYmV0dGVyIG92ZXJhbGwgcGljdHVyZSBvZiB0aGUgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjYzMDUsIk91dHB1dFRva2VucyI6NTQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxODo1NTozNy41MzU3ODM5MzVaIiwiU2VxIjo1MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAwNzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNTQ2LFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNTQ2OlxcdCNkZWZpbmUgQ1lQUkVTU19VU0JfREVWSUNFKGRldl9pZCkgXFxcXFxcbjE1NDc6XFx0XFx0eyBcXFxcXFxuMTU0ODpcXHRcXHRcXHRVU0JfREVWSUNFKENZX1VTQl9WRU5ET1JfSURfQ1lQUkVTUywgZGV2X2lkKSwgXFxcXFxcbjE1NDk6XFx0XFx0XFx0LmRyaXZlcl9pbmZvID0gQlJDTUZfRldWRU5ET1JfV0NDIFxcXFxcXG4xNTUwOlxcdFxcdH1cXG4xNTUxOlxcdFxcbjE1NTI6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIGJyY21mX3VzYl9kZXZpZF90YWJsZVtdID0ge1xcbjE1NTM6XFx0XFx0QlJDTUZfVVNCX0RFVklDRShCUkNNX1VTQl80MzE0M19ERVZJQ0VfSUQpLFxcbjE1NTQ6XFx0XFx0QlJDTUZfVVNCX0RFVklDRShCUkNNX1VTQl80MzIzNl9ERVZJQ0VfSUQpLFxcbjE1NTU6XFx0XFx0QlJDTUZfVVNCX0RFVklDRShCUkNNX1VTQl80MzI0Ml9ERVZJQ0VfSUQpLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxODo1NTozNy41MzU4ODU5NjVaIiwiU2VxIjo1MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODcxOTQwODYwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIGEgRHJpdmVyIEluZm9ybWF0aW9uIERpc2NyZXBhbmN5KipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSdtIHNlZWluZyBzb21ldGhpbmcgdGhhdCBkb2Vzbid0IHF1aXRlIGFkZCB1cC4gVGhlIGBDWVBSRVNTX1VTQl9ERVZJQ0VgIG1hY3JvIHNlZW1zIHRvIGJlIGRlZmluaW5nIGAuZHJpdmVyX2luZm9gIGFzIGBCUkNNRl9GV1ZFTkRPUl9XQ0NgLiBUaGF0J3Mgbm90IHdoYXQgSSB3YXMgZXhwZWN0aW5nLiBNeSBpbnR1aXRpb24sIGJhc2VkIG9uIHRoZSBjb250ZXh0LCBzdWdnZXN0cyBhIGRpZmZlcmVudCB2ZW5kb3IgYXNzb2NpYXRpb24uXG5cbk5vdywgd2hlcmUgaXMgYEJSQ01GX0ZXVkVORE9SX0NZV2AgdXNlZD8gVGhhdCdzIHRoZSBjcnVjaWFsIHF1ZXN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGlzIG90aGVyIHZlbmRvciBpcyBldmVuIHJlbGV2YW50IGFuZCBob3cgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIHBpY3R1cmUuIExldCdzIGRvIGEgZGVlcCBkaXZlIHNlYXJjaCB3aXRoaW4gdGhlIGBicmNtZm1hY2AgZGlyZWN0b3J5LiBJJ20gZ29pbmcgdG8gcnVuIGEgcXVpY2sgc2VhcmNoIGZvciBgQlJDTUZfRldWRU5ET1JfQ1lXYCB0byBzZWUgd2hhdCBjb21lcyB1cC4gVGhpcyB3aWxsIGhlbHAgY2xhcmlmeSB0aGUgaW50ZW50IGFuZCByZWxhdGlvbnNoaXBzIGhlcmUuIEknbSBob3BpbmcgdG8gaWRlbnRpZnkgdGhlIHByb3BlciBmaXJtd2FyZSB2ZW5kb3IgYW5kIGRldmljZSBjb25uZWN0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjY4MjIsIk91dHB1dFRva2VucyI6NTEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE4OjU1OjQ2LjI1NTI5OTg5WiIsIlNlcSI6NTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NTQ1NjExMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJCUkNNRl9GV1ZFTkRPUl9DWVdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYnVzLmg9MzU9ZW51bSBicmNtZl9md3ZlbmRvciB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2J1cy5oLTM2LVxcdEJSQ01GX0ZXVkVORE9SX1dDQyxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYnVzLmg6Mzc6XFx0QlJDTUZfRldWRU5ET1JfQ1lXLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9idXMuaC0zOC1cXHRCUkNNRl9GV1ZFTkRPUl9CQ0EsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYz0xOTU3PXN0YXRpYyBzMzIgYnJjbWZfc2V0X3dwYV92ZXJzaW9uKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtMTk2OS1cXHR9IGVsc2UgaWYgKHNtZS1cXHUwMDNlY3J5cHRvLndwYV92ZXJzaW9ucyBcXHUwMDI2IE5MODAyMTFfV1BBX1ZFUlNJT05fMikge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jOjE5NzA6XFx0XFx0aWYgKGRydnItXFx1MDAzZWJ1c19pZi1cXHUwMDNlZnd2aWQgPT0gQlJDTUZfRldWRU5ET1JfQ1lXIFxcdTAwMjZcXHUwMDI2XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtMTk3MS1cXHRcXHQgICAgc21lLVxcdTAwM2VjcnlwdG8uYWttX3N1aXRlc1swXSA9PSBXTEFOX0FLTV9TVUlURV9TQUUpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L21vZHVsZS5jPTEyPXN0YXRpYyBpbnQgX19pbml0IGJyY21mX2N5d19pbml0KHZvaWQpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9tb2R1bGUuYy0xMy17XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9tb2R1bGUuYzoxNDpcXHRyZXR1cm4gYnJjbWZfZnd2aWRfcmVnaXN0ZXJfdmVuZG9yKEJSQ01GX0ZXVkVORE9SX0NZVywgVEhJU19NT0RVTEUsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9tb2R1bGUuYy0xNS1cXHRcXHRcXHRcXHRcXHQgICBcXHUwMDI2YnJjbWZfY3l3X29wcyk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L21vZHVsZS5jPTE4PXN0YXRpYyB2b2lkIF9fZXhpdCBicmNtZl9jeXdfZXhpdCh2b2lkKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvbW9kdWxlLmMtMTkte1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvbW9kdWxlLmM6MjA6XFx0YnJjbWZfZnd2aWRfdW5yZWdpc3Rlcl92ZW5kb3IoQlJDTUZfRldWRU5ET1JfQ1lXLCBUSElTX01PRFVMRSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9tb2R1bGUuYy0yMS19XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jPTI0MjA9c3RhdGljIGNvbnN0IHN0cnVjdCBicmNtZl9wY2llX2RydmRhdGEgZHJ2ZGF0YVtdID0ge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmMtMjQyMS1cXHRbQlJDTUZfRFJWREFUQV9DWVddID0ge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmM6MjQyMjpcXHRcXHQudmVuZG9yID0gQlJDTUZfRldWRU5ET1JfQ1lXLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmMtMjQyMy1cXHRcXHQuZndfc2VlZCA9IGZhbHNlLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuYz0yNDQzPWJyY21mX3BjaWVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmMtMjU0MC1cXHRcXHRicmVhaztcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jOjI1NDE6XFx0Y2FzZSBCUkNNRl9GV1ZFTkRPUl9DWVc6XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuYy0yNTQyLVxcdGRlZmF1bHQ6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE4OjU1OjQ2LjM0MDc2NDA0MloiLCJTZXEiOjUzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjQwNzc5NTQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gYSBmaXJzdC1wZXJzb24gcGVyc3BlY3RpdmUgYXMgYSBmZWxsb3cgZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgQlJDTUZfRldWRU5ET1JfQ1lXIFVzYWdlKipcblxuUmlnaHQsIHNvIGBCUkNNRl9GV1ZFTkRPUl9DWVdgIHBvcHBlZCB1cCBpbiBgcGNpZS5jYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiV2hlcmUgKmVsc2UqIGlzIHRoaXMgZGVmaW5lIHVzZWQ/XCIgSXQncyBhIGNvbW1vbiBwYXR0ZXJuIHRvIGNlbnRyYWxpemUgZmlybXdhcmUgdmVuZG9yIGluZm9ybWF0aW9uLCBhbmQgaXQncyBsaWtlbHkgcGFydCBvZiBhIGJyb2FkZXIgc2V0IG9mIGRlZmluaXRpb25zLiBOb3csIEknbSBxdWlja2x5IHBpdm90aW5nIHRvIGNoZWNrIHRoZSBvdGhlciBtYWpvciBCcm9hZGNvbSBkcml2ZXIgaW50ZXJmYWNlcywgZXNwZWNpYWxseSBgc2Rpby5jYCBhbmQgYHVzYi5jYC4gSSdtIG1lbnRhbGx5IHBhcnNpbmcgdGhlIGNvZGUgZm9yIHNpbWlsYXIgdXNhZ2VzLCBsb29raW5nIGZvciBjb25zaXN0ZW5jeSwgb3IgcGVyaGFwcyBtb3JlIGludHJpZ3VpbmdseSwgZm9yIGRpc2NyZXBhbmNpZXMgdGhhdCBtaWdodCBwb2ludCB0byBhIHN1YnRsZSBkaWZmZXJlbmNlIGluIGZpcm13YXJlIGxvYWRpbmcgc3RyYXRlZ3kgZGVwZW5kaW5nIG9uIHRoZSBidXMgdHlwZS4gVGhpcyBjb3VsZCBiZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIGZpbmRpbmcgc29tZXRoaW5nIGludGVyZXN0aW5nLiBMZXQncyBkaWcgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4MzAyLCJPdXRwdXRUb2tlbnMiOjU1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTg6NTU6NTAuNTgxNTQ4NjUyWiIsIlNlcSI6NTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NTMzMTM0MywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQlJDTUZfRldWRU5ET1JfQ1lXXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9zZGlvLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE4OjU1OjUwLjY0Njg4NjcyNVoiLCJTZXEiOjU1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NTMxMDY5NjE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqSW5pdGlhbCBBc3Nlc3NtZW50OiBVU0IgRHJpdmVyIERpdmUqKlxuXG5SaWdodCwgdGltZSB0byBkaWcgaW50byB0aGUgVVNCIGRyaXZlci4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGdvIHN0cmFpZ2h0IHRvIGB1c2IuY2AuIEl0J3MgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgZ2l2ZW4gdGhlIGNvbnRleHQuIEdpdmVuIG15IGV4cGVyaWVuY2UsIEknbSBleHBlY3RpbmcgdGhpcyBmaWxlIHRvIGJlIHRoZSBjZW50cmFsIGh1YiwgdGhlIHBvaW50IHdoZXJlIHRoZSBoYXJkd2FyZSBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUga2VybmVsJ3MgVVNCIHN1YnN5c3RlbS4gSSdsbCBiZSBsb29raW5nIGZvciB0aGUgY29yZSBpbml0aWFsaXphdGlvbiByb3V0aW5lcywgdGhlIGludGVycnVwdCBoYW5kbGVycywgYW5kIHRoZSBiYXNpYyBkYXRhIHN0cnVjdHVyZXMgZGVmaW5pbmcgVVNCIGRldmljZS9lbmRwb2ludCByZXByZXNlbnRhdGlvbi4gVW5kZXJzdGFuZGluZyB0aGUgYXJjaGl0ZWN0dXJlIGRlZmluZWQgaGVyZSBpcyBjcnVjaWFsIGJlZm9yZSBnZXR0aW5nIHRvbyBkZWVwIGludG8gYW55IHNwZWNpZmljIGZ1bmN0aW9uYWxpdHkuIEknbSBhbHJlYWR5IGFudGljaXBhdGluZyB0aGF0IHRoaXMgZmlsZSB3aWxsIGJlIGEgbGFyZ2UsIGNvbXBsZXggcGllY2Ugb2YgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg2MDgsIk91dHB1dFRva2VucyI6NTQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE4OjU1OjU5LjE3Nzk2MDA1MVoiLCJTZXEiOjU2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzEzNDk2MDIsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkJSQ01GX0ZXVkVORE9SX0NZV1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE4OjU1OjU5LjI0OTMyMDE3M1oiLCJTZXEiOjU3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3Nzk3MjEwOTEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUuLi5cblxuKipFeGFtaW5pbmcgRHJpdmVyIEluaXRpYWxpemF0aW9uIGZvciBCcm9hZGNvbSBXaS1GaSBEcml2ZXJzKipcblxuSGFuZyBvbiBhIHNlY29uZC4gSSBqdXN0IHJlYWxpemVkIHRoYXQgdGhpcyBgQlJDTUZfRldWRU5ET1JfQ1lXYCBjb25zdGFudCDigJMgaXNuJ3QgdGhhdCAqb25seSogdXNlZCB3aXRoaW4gdGhlIGBwY2llLmNgIGZpbGU/IFRoYXQgc2VlbXMgb2RkLiBJdCBtYWtlcyBtZSB3b25kZXIgaWYgdGhlcmUncyBhbiBvdmVyc2lnaHQgc29tZXdoZXJlIG9yIGlmIGl0J3Mgc2ltcGx5IGEgZGVsaWJlcmF0ZSBkZXNpZ24gY2hvaWNlLiBJJ2QgYmV0dGVyIGRvdWJsZS1jaGVjayB0aGUgVVNCIGRyaXZlcidzIGluaXRpYWxpemF0aW9uLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byByZXZpc2l0IGBicmNtZm1hYy91c2IuY2AgYW5kIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGUgZGlmZmVyZW50IGBkcml2ZXJfaW5mb2AgdmFsdWVzIHRoYXQgYXJlIGFjdHVhbGx5IGJlaW5nIHV0aWxpemVkIHRoZXJlLiBJIHdhbnQgdG8gc2VlIGlmIHRoaXMgYEJSQ01GX0ZXVkVORE9SX0NZV2AgdmFsdWUgaGFzIGEgY291bnRlcnBhcnQgaW4gdGhlIFVTQiBjb250ZXh0LiBOZWVkIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3Npbmcgc29tZXRoaW5nIGluIHRoZSBicm9hZGVyIGFyY2hpdGVjdHVyZSBvZiB0aGUgQnJvYWRjb20gV2ktRmkgZHJpdmVyIGltcGxlbWVudGF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODg0OSwiT3V0cHV0VG9rZW5zIjo0OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE4OjU2OjA3LjA0NjUzNDM5NloiLCJTZXEiOjU4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzU2MzE0NjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZHJpdmVyX2luZm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYz0xMzQ1PWJyY21mX3VzYl9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTE0NDUtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jOjE0NDY6XFx0cmV0ID0gYnJjbWZfdXNiX3Byb2JlX2NiKGRldmluZm8sIGlkLVxcdTAwM2Vkcml2ZXJfaW5mbyk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTE0NDctXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYz0xNTE0PXN0YXRpYyBpbnQgYnJjbWZfdXNiX3Jlc2V0X3Jlc3VtZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xNTM2LVxcdFxcdFVTQl9ERVZJQ0UoQlJDTV9VU0JfVkVORE9SX0lEX0JST0FEQ09NLCBkZXZfaWQpLCBcXFxcXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jOjE1Mzc6XFx0XFx0LmRyaXZlcl9pbmZvID0gQlJDTUZfRldWRU5ET1JfV0NDIFxcXFxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtMTUzOC1cXHR9XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtMTU0Mi1cXHRcXHRVU0JfREVWSUNFKEJSQ01fVVNCX1ZFTkRPUl9JRF9MSU5LU1lTLCBkZXZfaWQpLCBcXFxcXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jOjE1NDM6XFx0XFx0LmRyaXZlcl9pbmZvID0gQlJDTUZfRldWRU5ET1JfV0NDIFxcXFxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtMTU0NC1cXHR9XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtMTU0OC1cXHRcXHRVU0JfREVWSUNFKENZX1VTQl9WRU5ET1JfSURfQ1lQUkVTUywgZGV2X2lkKSwgXFxcXFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYzoxNTQ5OlxcdFxcdC5kcml2ZXJfaW5mbyA9IEJSQ01GX0ZXVkVORE9SX1dDQyBcXFxcXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTE1NTAtXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxODo1NjowNy4xMjIxNzA2OThaIiwiU2VxIjo1OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk1NTc2MDUwODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhc3N1bWluZyB0aGUgY29udGV4dCBpcyBteSBleHBlcnQgdW5kZXJzdGFuZGluZyBvZiBkZXZpY2UgZHJpdmVyczpcblxuKipVU0IgYW5kIFNESU8gRGV2aWNlIEZpcm13YXJlIENvbnNpZGVyYXRpb25zKipcblxuUmlnaHQsIHRoYXQncyBpdCEgSSdtIHByZXR0eSBzdXJlIEkndmUgZ290IGl0IC0gdGhlIGBCUkNNRl9GV1ZFTkRPUl9XQ0NgIG5hbWluZyBjb252ZW50aW9uLi4uIHRoYXQncyB0aGUgdGVsbC4gSSdtIGFsbW9zdCBjZXJ0YWluIEkndmUgc2VlbiB0aGF0IGFzc29jaWF0ZWQgd2l0aCBhbGwgdGhlIFVTQiBkZXZpY2VzLCB3aGljaCBtYWtlcyBwZXJmZWN0IHNlbnNlIGdpdmVuIHRoZSBCcm9hZGNvbSBhcmNoaXRlY3R1cmUuIEJ1dCBhIG5hZ2dpbmcgdGhvdWdodC4uLiB3aGF0IGFib3V0IHRoZSBTeXN0ZW0tb24tQ2hpcCAoU0RJTykgZGV2aWNlcz8gV2UncmUgc28gdXNlZCB0byBsb29raW5nIGF0IFVTQiBzb2x1dGlvbnMuIEkgbmVlZCB0byB0YWtlIGEgc3RlcCBiYWNrIGFuZCB0aGluayBjYXJlZnVsbHkgdGhyb3VnaCB0aGUgU0RJTyBjb3VudGVycGFydHMuIEFyZSB0aGV5IHJlbGF0ZWQgaW4gdGhlIHNhbWUgd2F5PyBPciBkb2VzIHRoaXMgbmFtaW5nIHNjaGVtZSBtZWFuIHNvbWV0aGluZyBkaWZmZXJlbnQgdGhlcmU/IFRpbWUgdG8gcmV2aXNpdCB0aG9zZSBmaXJtd2FyZSByZWZlcmVuY2VzLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5ODAzLCJPdXRwdXRUb2tlbnMiOjQ5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTg6NTY6MzYuNjc5Nzc5NTc3WiIsIlNlcSI6NjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDM1ODE1MTMsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRyaXZlcl9pbmZvXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9zZGlvLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE4OjU2OjM3LjIyMzM3MDI0WiIsIlNlcSI6NjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzOTQ4MjE1NzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBGaXJtd2FyZSBWaWRlbyBEcml2ZXIqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmluZCBzb21ldGhpbmcgcmVsYXRlZCB0byBgZnd2aWRgLCBtb3N0IGxpa2VseSBkZWFsaW5nIHdpdGggZmlybXdhcmUgdmlkZW8gaGFuZGxpbmcuIFRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IGZvciB0aGF0IGlzIHRoZSBgc2Rpby5jYCBmaWxlLiBJdCdzIGEgZnVuZGFtZW50YWwgcGFydCBvZiB0aGUgU0RJTyBzdWJzeXN0ZW0sIHdoaWNoIGlzIG9mdGVuIGludm9sdmVkIGluIGludGVyYWN0aW9ucyB3aXRoIGZpcm13YXJlLCBhbmQgSSByZW1lbWJlciBgZnd2aWRgIGJlaW5nIGNvbm5lY3RlZCB0byB0aGlzIGFyZWEsIHNvIGxldCdzIHN0YXJ0IHRoZXJlLiBJJ2xsIG5lZWQgdG8gb3BlbiB0aGF0IGZpbGUgYW5kIHN0YXJ0IGxvb2tpbmcgZm9yIHJlbGV2YW50IGZ1bmN0aW9ucywgdmFyaWFibGVzLCBhbmQgZGF0YSBzdHJ1Y3R1cmVzLiBUaGlzIHNlZW1zIGxpa2UgdGhlIG1vc3QgcHJvbWlzaW5nIHBhdGggdG8gaW52ZXN0aWdhdGUsIGdpdmVuIHRoZSBpbmZvcm1hdGlvbiBJIGhhdmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwMDY2LCJPdXRwdXRUb2tlbnMiOjQ4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTg6NTY6NDAuNjE4MTk2NjY4WiIsIlNlcSI6NjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDU2NDIzNDksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZ3dmlkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9zZGlvLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE4OjU2OjQwLjcyMzg0ODAwN1oiLCJTZXEiOjYzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MDQ2NDkyOTMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEhlcmUncyBob3cgSSdkIGFwcHJvYWNoIHRoYXQgcXVlc3Rpb24sIHRoaW5raW5nIGl0IHRocm91Z2ggZnJvbSBhIHRlY2huaWNhbCBwZXJzcGVjdGl2ZTpcblxuKipJbnZlc3RpZ2F0aW5nIGBmd3ZpZGAgaW4gU0RJTyoqXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcywgXCJXYWl0LCBob3cgKmlzKiBgZnd2aWRgIGFjdHVhbGx5IHNldCBpbiB0aGUgU0RJTyBjb250ZXh0P1wiIEl0J3MgYSBmdW5kYW1lbnRhbCBwYXJhbWV0ZXIsIGFuZCBrbm93aW5nIGl0cyBzb3VyY2UgaXMgY3J1Y2lhbCBmb3IgZGVidWdnaW5nIGFuZCBvcHRpbWl6YXRpb24uIEknbSBnb2luZyB0byBzdGFydCBkaWdnaW5nIGludG8gdGhlIHJlbGV2YW50IHNvdXJjZSBjb2RlIGFuZCBkb2N1bWVudGF0aW9uLiBNeSBmb2N1cyB3aWxsIGJlIG9uIHRoZSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZXMgYW5kIGFueSBwb3RlbnRpYWwgY29uZmlndXJhdGlvbiByb3V0aW5lcyB3aXRoaW4gdGhlIFNESU8gZHJpdmVyIGl0c2VsZiwgYXMgd2VsbCBhcyBhbnkgaGlnaGVyLWxldmVsIGZyYW1ld29ya3MgdGhhdCBtaWdodCBiZSBpbnRlcmFjdGluZyB3aXRoIGl0LiBJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgdG8gbG9vayBmb3IgYm90aCB0aGUgb2J2aW91cyBwbGFjZXMsIGxpa2UgdGhlIGRyaXZlcidzIGVudHJ5IHBvaW50cyBhbmQgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb25zLCBidXQgYWxzbyBsZXNzIG9idmlvdXMgYXJlYXMsIHBlcmhhcHMgYSBjb25maWd1cmF0aW9uIGRhdGFiYXNlIG9yIGEgYm9hcmQtc3BlY2lmaWMgZmlsZS4gVGhlIGdvYWwgaXMgdG8gdHJhY2UgdGhlIGxpbmVhZ2Ugb2YgdGhhdCB2YXJpYWJsZS4gSXMgaXQgc2V0IHN0YXRpY2FsbHksIHJlYWQgZnJvbSBhIGRldmljZSBkZXNjcmlwdG9yLCBvciBkZXRlcm1pbmVkIGR5bmFtaWNhbGx5IGR1cmluZyB0aGUgU0RJTyBlbnVtZXJhdGlvbiBwcm9jZXNzPyBPbmNlIEkgdHJhY2UgaXQsIEkgbmVlZCB0byBrbm93IHVuZGVyIHdoYXQgY29uZGl0aW9ucyBkb2VzIHRoaXMgdmFyaWFibGUgY2hhbmdlLiBBbnkgY29kZSB1cGRhdGVzLCBhbmQgY29uZmlndXJhdGlvbiBzaG91bGQgY29tZSB0byBtaW5kIGF0IHRoYXQgcG9pbnQuIEknbSBsb29raW5nIGZvciB0aGUgbWVjaGFuaXNtLCB0aGUgdGltaW5nLCBhbmQgYW55IHBvc3NpYmxlIGluZmx1ZW5jaW5nIGZhY3RvcnMuIEkgYW50aWNpcGF0ZSB0aGF0IGRlcGVuZGluZyBvbiB0aGUgU0RJTyBjb250cm9sbGVyIGFuZCBob3N0IGltcGxlbWVudGF0aW9uLCB0aGUgc2V0dGluZyBtaWdodCBpbnZvbHZlIHNldmVyYWwgbGF5ZXJzIG9mIGFic3RyYWN0aW9uLCBzbyBJIG5lZWQgdG8gYmUgcHJlcGFyZWQgdG8gdHJhdmVyc2UgdGhyb3VnaCBtdWx0aXBsZSBmdW5jdGlvbiBjYWxscy4gSSdtIGFzc3VtaW5nLCBvZiBjb3Vyc2UsIHRoYXQgdGhlIGZpcm13YXJlIGlkZW50aWZpZXIgKGBmd3ZpZGApIGlzIGNydWNpYWwgZm9yIGEgcmVhc29uLCBsaWtlbHkgcmVsYXRlZCB0byBpZGVudGlmeWluZyB0aGUgc3BlY2lmaWMgZmlybXdhcmUgcmV2aXNpb24gbG9hZGVkIG9uIHRoZSBTRElPIGRldmljZSwgc28gaXQgd291bGQgYmUgZXNzZW50aWFsIHRvIGVuc3VyZSB0aGF0IGl0IHJlZmxlY3RzIHRoZSBhY3R1YWwgc3RhdGUgb2YgdGhlIGRldmljZS4gVGhpcyBpbnZlc3RpZ2F0aW9uIHdpbGwgbGVhZCBtZSB0byB0aGUgcHJlY2lzZSBsb2NhdGlvbiBvZiB0aGUgY29kZSB0aGF0IGRlZmluZXMsIHJlYWRzLCBvciBvdGhlcndpc2UgaW50ZXJhY3RzIHdpdGggYGZ3dmlkYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzAyODEsIk91dHB1dFRva2VucyI6NTIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxODo1Njo0OS43NzAzNDQxOFoiLCJTZXEiOjY0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzA0ODU2NTMsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkJSQ01GX0ZXVkVORE9SXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9zZGlvLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE4OjU2OjQ5Ljg0MDgzNjY5M1oiLCJTZXEiOjY1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NDkzMzY2MDU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB3aGF0IHdlJ3JlIGxvb2tpbmcgYXQsIHN1bW1hcml6ZWQgZnJvbSB0aGF0IGluaXRpYWwgcHJvbXB0OlxuXG4qKkFuYWx5emluZyB0aGUgYGJyY21mX3NkaW9fcHJvYmVgIEZ1bmN0aW9uKipcblxuQWxyaWdodCwgc28gdGhlIHRhc2sgYXQgaGFuZCBpcyB0byB0YWtlIGEgbG9vayBhdCBgYnJjbWZfc2Rpb19wcm9iZWAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB0aGlzIGlzIGxpa2VseSB3aGVyZSB0aGUgQnJvYWRjb20gU0RJTyBXaS1GaSBkcml2ZXIsIG9yIGF0IGxlYXN0IGEgY3J1Y2lhbCBwYXJ0IG9mIGl0LCBnZXRzIGluaXRpYWxpemVkIGFuZCwgd2VsbCwgcHJvYmVkIHdoZW4gdGhlIHN5c3RlbSBkZXRlY3RzIGEgcG90ZW50aWFsIEJyb2FkY29tIFNESU8gZGV2aWNlLiBgcHJvYmVgIGlzIGEgcHJldHR5IHN0YW5kYXJkIG5hbWUgZm9yIHRoaXMgc29ydCBvZiBpbml0aWFsaXphdGlvbiBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBkcml2ZXIgaGFuZGxlcyB0aGUgaW5pdGlhbCBoYW5kc2hha2Ugd2l0aCB0aGUgaGFyZHdhcmUsIHRoZSByZXNvdXJjZSBhbGxvY2F0aW9uLCBhbmQgaG93IHRoZSBkcml2ZXIgZ2V0cyBib3VuZCB0byB0aGUgZGV2aWNlLiBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIHRoaXMgaXMgdGhlIGZ1bmN0aW9uIHRoYXQgZGV0ZXJtaW5lcyB3aGV0aGVyIG9yIG5vdCB0aGUgc3lzdGVtIGhhcyBhbiBTRElPIGJ1cy4gSXQgaXMgYWxzbyBpbXBvcnRhbnQgdG8gY29uc2lkZXIgaWYgdGhpcyBmdW5jdGlvbiBkZXRlcm1pbmVzIHdoaWNoIHJlc291cmNlcyBhcmUgbmVlZGVkIGJ5IHRoZSBTRElPIGJ1cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA3MzAsIk91dHB1dFRva2VucyI6NTQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxODo1Njo1Ny4zMzQyMDQ1NDdaIiwiU2VxIjo2NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg4NDc1NjUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJyY21mX3NkaW9fcHJvYmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3NkaW8uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvc2Rpby5jPTM5NDk9c3RhdGljIGludFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9zZGlvLmM6Mzk1MDpicmNtZl9zZGlvX3Byb2JlX2F0dGFjaChzdHJ1Y3QgYnJjbWZfc2RpbyAqYnVzKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9zZGlvLmMtMzk1MS17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvc2Rpby5jPTQ0MjQ9YnJjbWZfc2Rpb19wcmVwYXJlX2Z3X3JlcXVlc3Qoc3RydWN0IGJyY21mX3NkaW8gKmJ1cylcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9zZGlvLmMtNDQ0OC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvc2Rpby5jOjQ0NDk6aW50IGJyY21mX3NkaW9fcHJvYmUoc3RydWN0IGJyY21mX3NkaW9fZGV2ICpzZGlvZGV2KVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9zZGlvLmMtNDQ1MC17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvc2Rpby5jLTQ0ODUtXFx0LyogYXR0ZW1wdCB0byBhdHRhY2ggdG8gdGhlIGRvbmdsZSAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9zZGlvLmM6NDQ4NjpcXHRyZXQgPSBicmNtZl9zZGlvX3Byb2JlX2F0dGFjaChidXMpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9zZGlvLmMtNDQ4Ny1cXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9zZGlvLmM6NDQ4ODpcXHRcXHRicmNtZl9lcnIoXFxcImJyY21mX3NkaW9fcHJvYmVfYXR0YWNoIGZhaWxlZFxcXFxuXFxcIik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3NkaW8uYy00NDg5LVxcdFxcdGdvdG8gZmFpbDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTg6NTY6NTcuNDIyNjg3MDA3WiIsIlNlcSI6NjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg4NDQ1MjAwNjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipJbml0aWFsIEFzc2Vzc21lbnQgb2YgYGJyY21mX3NkaW9fcHJvYmVgKipcblxuQWxyaWdodCwgc28gdGhlIGZpcnN0IHRoaW5nIEknbSBkb2luZyBpcyB0dXJuaW5nIG15IGF0dGVudGlvbiB0byBgYnJjbWZfc2Rpb19wcm9iZWAuIFRoaXMgaXMgdGhlIGVudHJ5IHBvaW50LCB0aGUgcHJpbWFyeSBmdW5jdGlvbiBvZiB0aGUgU0RJTyBwcm9iZSByb3V0aW5lLCB3aGljaCBpcyBsaWtlbHkgd2hlcmUgdGhlIGRyaXZlciBraWNrcyBvZmYgZm9yIGEgQnJvYWRjb20gU0RJTyBXaS1GaSBkZXZpY2UuIEknbSBpbW1lZGlhdGVseSB0aGlua2luZywgXCJPa2F5LCB3aGF0J3MgdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlIGhlcmU/IFdoYXQncyB0aGUgZHJpdmVyJ3Mgcm9sZSBpbiB0aGUgc3lzdGVtP1wiIEknbSBleHBlY3RpbmcgdGhpcyBmdW5jdGlvbiB0byBoYW5kbGUgdGhlIGluaXRpYWwgZGV2aWNlIGRldGVjdGlvbiwgcG9zc2libHkgc29tZSBiYXNpYyByZXNvdXJjZSBhbGxvY2F0aW9uLCBhbmQgZGVmaW5pdGVseSB0aGUgc2V0dXAgb2YgdGhlIFNESU8gaW50ZXJmYWNlIGZvciBjb21tdW5pY2F0aW9uIHdpdGggdGhlIEJyb2FkY29tIGNoaXAuIEl0J3MgdGhlIGxhdW5jaGluZyBwYWQsIHRoZSBnYXRla2VlcGVyIGZvciB0aGUgcmVzdCBvZiB0aGUgZHJpdmVyJ3Mgb3BlcmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTU0NiwiT3V0cHV0VG9rZW5zIjo1NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE4OjU3OjA2LjI2NzIxMDYyMloiLCJTZXEiOjY4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzQyNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3NkaW8uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0NDQ5LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI0NDQ5OlxcdGludCBicmNtZl9zZGlvX3Byb2JlKHN0cnVjdCBicmNtZl9zZGlvX2RldiAqc2Rpb2RldilcXG40NDUwOlxcdHtcXG40NDUxOlxcdFxcdGludCByZXQ7XFxuNDQ1MjpcXHRcXHRzdHJ1Y3QgYnJjbWZfc2RpbyAqYnVzO1xcbjQ0NTM6XFx0XFx0c3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKndxO1xcbjQ0NTQ6XFx0XFx0c3RydWN0IGJyY21mX2Z3X3JlcXVlc3QgKmZ3cmVxO1xcbjQ0NTU6XFx0XFxuNDQ1NjpcXHRcXHRicmNtZl9kYmcoVFJBQ0UsIFxcXCJFbnRlclxcXFxuXFxcIik7XFxuNDQ1NzpcXHRcXG40NDU4OlxcdFxcdC8qIEFsbG9jYXRlIHByaXZhdGUgYnVzIGludGVyZmFjZSBzdGF0ZSAqL1xcbjQ0NTk6XFx0XFx0YnVzID0ga3phbGxvY19vYmooKmJ1cywgR0ZQX0FUT01JQyk7XFxuNDQ2MDpcXHRcXHRpZiAoIWJ1cykge1xcbjQ0NjE6XFx0XFx0XFx0cmV0ID0gLUVOT01FTTtcXG40NDYyOlxcdFxcdFxcdGdvdG8gZmFpbDtcXG40NDYzOlxcdFxcdH1cXG40NDY0OlxcdFxcbjQ0NjU6XFx0XFx0YnVzLVxcdTAwM2VzZGlvZGV2ID0gc2Rpb2RldjtcXG40NDY2OlxcdFxcdHNkaW9kZXYtXFx1MDAzZWJ1cyA9IGJ1cztcXG40NDY3OlxcdFxcdHNrYl9xdWV1ZV9oZWFkX2luaXQoXFx1MDAyNmJ1cy1cXHUwMDNlZ2xvbSk7XFxuNDQ2ODpcXHRcXHRJTklUX1dPUksoXFx1MDAyNmJ1cy1cXHUwMDNlZGF0YXdvcmssIGJyY21mX3NkaW9fZGF0YXdvcmtlcik7XFxuNDQ2OTpcXHRcXHRidXMtXFx1MDAzZXR4Ym91bmQgPSBCUkNNRl9UWEJPVU5EO1xcbjQ0NzA6XFx0XFx0YnVzLVxcdTAwM2VyeGJvdW5kID0gQlJDTUZfUlhCT1VORDtcXG40NDcxOlxcdFxcdGJ1cy1cXHUwMDNldHhtaW5tYXggPSBCUkNNRl9UWE1JTk1BWDtcXG40NDcyOlxcdFxcdGJ1cy1cXHUwMDNldHhfc2VxID0gU0RQQ01fU0VRX1dSQVAgLSAxO1xcbjQ0NzM6XFx0XFxuNDQ3NDpcXHRcXHQvKiBzaW5nbGUtdGhyZWFkZWQgd29ya3F1ZXVlICovXFxuNDQ3NTpcXHRcXHR3cSA9IGFsbG9jX29yZGVyZWRfd29ya3F1ZXVlKFxcXCJicmNtZl93cS8lc1xcXCIsIFdRX01FTV9SRUNMQUlNIHwgV1FfSElHSFBSSSxcXG40NDc2OlxcdFxcdFxcdFxcdFxcdCAgICAgZGV2X25hbWUoXFx1MDAyNnNkaW9kZXYtXFx1MDAzZWZ1bmMxLVxcdTAwM2VkZXYpKTtcXG40NDc3OlxcdFxcdGlmICghd3EpIHtcXG40NDc4OlxcdFxcdFxcdGJyY21mX2VycihcXFwiaW5zdWZmaWNpZW50IG1lbW9yeSB0byBjcmVhdGUgdHh3b3JrcXVldWVcXFxcblxcXCIpO1xcbjQ0Nzk6XFx0XFx0XFx0cmV0ID0gLUVOT01FTTtcXG40NDgwOlxcdFxcdFxcdGdvdG8gZmFpbDtcXG40NDgxOlxcdFxcdH1cXG40NDgyOlxcdFxcdGJyY21mX3NkaW9kX2ZyZWV6ZXJfY291bnQoc2Rpb2Rldik7XFxuNDQ4MzpcXHRcXHRidXMtXFx1MDAzZWJyY21mX3dxID0gd3E7XFxuNDQ4NDpcXHRcXG40NDg1OlxcdFxcdC8qIGF0dGVtcHQgdG8gYXR0YWNoIHRvIHRoZSBkb25nbGUgKi9cXG40NDg2OlxcdFxcdHJldCA9IGJyY21mX3NkaW9fcHJvYmVfYXR0YWNoKGJ1cyk7XFxuNDQ4NzpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbjQ0ODg6XFx0XFx0XFx0YnJjbWZfZXJyKFxcXCJicmNtZl9zZGlvX3Byb2JlX2F0dGFjaCBmYWlsZWRcXFxcblxcXCIpO1xcbjQ0ODk6XFx0XFx0XFx0Z290byBmYWlsO1xcbjQ0OTA6XFx0XFx0fVxcbjQ0OTE6XFx0XFxuNDQ5MjpcXHRcXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2YnVzLVxcdTAwM2VyeGN0bF9sb2NrKTtcXG40NDkzOlxcdFxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZidXMtXFx1MDAzZXR4cV9sb2NrKTtcXG40NDk0OlxcdFxcdGluaXRfd2FpdHF1ZXVlX2hlYWQoXFx1MDAyNmJ1cy1cXHUwMDNlY3RybF93YWl0KTtcXG40NDk1OlxcdFxcdGluaXRfd2FpdHF1ZXVlX2hlYWQoXFx1MDAyNmJ1cy1cXHUwMDNlZGNtZF9yZXNwX3dhaXQpO1xcbjQ0OTY6XFx0XFxuNDQ5NzpcXHRcXHQvKiBTZXQgdXAgdGhlIHdhdGNoZG9nIHRpbWVyICovXFxuNDQ5ODpcXHRcXHR0aW1lcl9zZXR1cChcXHUwMDI2YnVzLVxcdTAwM2V0aW1lciwgYnJjbWZfc2Rpb193YXRjaGRvZywgMCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE4OjU3OjA2LjI2NzY4OTExMloiLCJTZXEiOjY5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MzE3MTQ3MDMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRlYnVnZ2luZyBTRElPIEZXVklEIEFzc2lnbm1lbnQqKlxuXG5Pa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJJ20gaGl0dGluZyBhIHNuYWcuIEknbSB0cnlpbmcgdG8gdHJhY2UgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBTRElPIGludGVyZmFjZSwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgZm9yIHdoZXJlIHRoZSBgZnd2aWRgIGZpZWxkIGlzIHBvcHVsYXRlZC4gVGhlIHN5c3RlbSdzIG5vdCBiZWhhdmluZyBhcyBleHBlY3RlZCwgYW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBpdCdzIGdldHRpbmcgc2V0IOKAkyBvciAqaXNuJ3QqIGdldHRpbmcgc2V0IOKAkyBjb3JyZWN0bHkuIE15IGd1dCBmZWVsaW5nIHRlbGxzIG1lIHRoZSBwcm9ibGVtIGxpZXMgc29tZXdoZXJlIGluIHRoZSBkcml2ZXIncyBlYXJseSBpbml0aWFsaXphdGlvbi4gSSd2ZSBnb3QgYSBtZW50YWwgbWFwIG9mIHRoZSBCcm9hZGNvbSBTRElPIGRyaXZlciwgYW5kIEkgbmVlZCB0byBmaW5kIHRoZSBwb2ludCB3aGVyZSBgZnd2aWRgIGlzIGFzc2lnbmVkIHRvIGEgc3RydWN0IHJlcHJlc2VudGluZyBhbiBTRElPIGludGVyZmFjZS5cblxuTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBgYnJjbWZfc2Rpb19wcm9iZV9hdHRhY2hgLiBUaGF0IGZ1bmN0aW9uIGlzLCBhcyBJIHJlY2FsbCwgdGhlIGNvcmUgb2YgdGhlIFNESU8gZGV2aWNlIHByb2JpbmcgYW5kIGF0dGFjaG1lbnQgcHJvY2Vzcywgc28gaXQncyB0aGUgb2J2aW91cyBwbGFjZSB0byBzdGFydCBkaWdnaW5nLiBUaGlzIGlzIHdoZXJlIHRoZSBoYXJkd2FyZSBpcyBpZGVudGlmaWVkLCBhbmQgdGhlIGRyaXZlciBob29rcyBpdHNlbGYgdXAgdG8gaXQuIFNvLCBJIG5lZWQgdG8gY2hlY2sgdGhlIGZsb3cgd2l0aGluIHRoYXQgZnVuY3Rpb24uIEknbSBnb2luZyB0byBsb29rIGZvciBhbnkgZXhwbGljaXQgYXNzaWdubWVudCBvZiBgZnd2aWRgLCBvciBtYXliZSBhIGZ1bmN0aW9uIGNhbGwgdGhhdCBkb2VzIGl0LiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLCBlbnN1cmluZyBJIHVuZGVyc3RhbmQgd2hpY2ggb25lcyB0aGUgZHJpdmVyIHVzZXMgdG8gY29udmV5IGluZm9ybWF0aW9uIGZyb20gdGhlIGhhcmR3YXJlIHRvIHRoZSBzb2Z0d2FyZS4gTXkgZXhwZWN0YXRpb24gaXMgdGhlIGNvcnJlY3QgYXNzaWdubWVudCBsb2dpYyBzaG91bGQgYmUgaW4gdGhlcmUsIG9yIGNsb3NlIHRvIGl0LiBUaW1lIHRvIGRpdmUgaW50byB0aGUgY29kZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjYzNywiT3V0cHV0VG9rZW5zIjo1NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTg6NTc6MTMuNTg0ODUwNjE0WiIsIlNlcSI6NzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3Njk1NzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3NkaW8uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzOTQ5LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzOTQ5OlxcdHN0YXRpYyBpbnRcXG4zOTUwOlxcdGJyY21mX3NkaW9fcHJvYmVfYXR0YWNoKHN0cnVjdCBicmNtZl9zZGlvICpidXMpXFxuMzk1MTpcXHR7XFxuMzk1MjpcXHRcXHRzdHJ1Y3QgYnJjbWZfc2Rpb19kZXYgKnNkaW9kZXY7XFxuMzk1MzpcXHRcXHR1OCBjbGtjdGwgPSAwO1xcbjM5NTQ6XFx0XFx0aW50IGVyciA9IDA7XFxuMzk1NTpcXHRcXHRpbnQgcmVnX2FkZHI7XFxuMzk1NjpcXHRcXHR1MzIgcmVnX3ZhbDtcXG4zOTU3OlxcdFxcdHUzMiBkcml2ZXN0cmVuZ3RoO1xcbjM5NTg6XFx0XFx0dTMyIGVudW1fYmFzZTtcXG4zOTU5OlxcdFxcdGludCByZXQgPSAtRUJBREU7XFxuMzk2MDpcXHRcXG4zOTYxOlxcdFxcdHNkaW9kZXYgPSBidXMtXFx1MDAzZXNkaW9kZXY7XFxuMzk2MjpcXHRcXHRzZGlvX2NsYWltX2hvc3Qoc2Rpb2Rldi1cXHUwMDNlZnVuYzEpO1xcbjM5NjM6XFx0XFxuMzk2NDpcXHRcXHRlbnVtX2Jhc2UgPSBicmNtZl9jaGlwX2VudW1fYmFzZShzZGlvZGV2LVxcdTAwM2VmdW5jMS1cXHUwMDNlZGV2aWNlKTtcXG4zOTY1OlxcdFxcbjM5NjY6XFx0XFx0cHJfZGVidWcoXFxcIkYxIHNpZ25hdHVyZSByZWFkIEAweCUwOHg9MHglNHhcXFxcblxcXCIsIGVudW1fYmFzZSxcXG4zOTY3OlxcdFxcdFxcdCBicmNtZl9zZGlvZF9yZWFkbChzZGlvZGV2LCBlbnVtX2Jhc2UsIE5VTEwpKTtcXG4zOTY4OlxcdFxcbjM5Njk6XFx0XFx0LypcXG4zOTcwOlxcdFxcdCAqIEZvcmNlIFBMTCBvZmYgdW50aWwgYnJjbWZfY2hpcF9hdHRhY2goKVxcbjM5NzE6XFx0XFx0ICogcHJvZ3JhbXMgUExMIGNvbnRyb2wgcmVnc1xcbjM5NzI6XFx0XFx0ICovXFxuMzk3MzpcXHRcXG4zOTc0OlxcdFxcdGJyY21mX3NkaW9kX3dyaXRlYihzZGlvZGV2LCBTQlNESU9fRlVOQzFfQ0hJUENMS0NTUiwgQlJDTUZfSU5JVF9DTEtDVEwxLFxcbjM5NzU6XFx0XFx0XFx0XFx0ICAgXFx1MDAyNmVycik7XFxuMzk3NjpcXHRcXHRpZiAoIWVycilcXG4zOTc3OlxcdFxcdFxcdGNsa2N0bCA9IGJyY21mX3NkaW9kX3JlYWRiKHNkaW9kZXYsIFNCU0RJT19GVU5DMV9DSElQQ0xLQ1NSLFxcbjM5Nzg6XFx0XFx0XFx0XFx0XFx0XFx0ICAgXFx1MDAyNmVycik7XFxuMzk3OTpcXHRcXG4zOTgwOlxcdFxcdGlmIChlcnIgfHwgKChjbGtjdGwgXFx1MDAyNiB+U0JTRElPX0FWQklUUykgIT0gQlJDTUZfSU5JVF9DTEtDVEwxKSkge1xcbjM5ODE6XFx0XFx0XFx0YnJjbWZfZXJyKFxcXCJDaGlwQ2xrQ1NSIGFjY2VzczogZXJyICVkIHdyb3RlIDB4JTAyeCByZWFkIDB4JTAyeFxcXFxuXFxcIixcXG4zOTgyOlxcdFxcdFxcdFxcdCAgZXJyLCBCUkNNRl9JTklUX0NMS0NUTDEsIGNsa2N0bCk7XFxuMzk4MzpcXHRcXHRcXHRnb3RvIGZhaWw7XFxuMzk4NDpcXHRcXHR9XFxuMzk4NTpcXHRcXG4zOTg2OlxcdFxcdGJ1cy1cXHUwMDNlY2kgPSBicmNtZl9jaGlwX2F0dGFjaChzZGlvZGV2LCBzZGlvZGV2LVxcdTAwM2VmdW5jMS1cXHUwMDNlZGV2aWNlLFxcbjM5ODc6XFx0XFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZicmNtZl9zZGlvX2J1c2NvcmVfb3BzKTtcXG4zOTg4OlxcdFxcdGlmIChJU19FUlIoYnVzLVxcdTAwM2VjaSkpIHtcXG4zOTg5OlxcdFxcdFxcdGJyY21mX2VycihcXFwiYnJjbWZfY2hpcF9hdHRhY2ggZmFpbGVkIVxcXFxuXFxcIik7XFxuMzk5MDpcXHRcXHRcXHRidXMtXFx1MDAzZWNpID0gTlVMTDtcXG4zOTkxOlxcdFxcdFxcdGdvdG8gZmFpbDtcXG4zOTkyOlxcdFxcdH1cXG4zOTkzOlxcdFxcbjM5OTQ6XFx0XFx0LyogUGljayB1cCB0aGUgU0RJTyBjb3JlIGluZm8gc3RydWN0IGZyb20gY2hpcC5jICovXFxuMzk5NTpcXHRcXHRidXMtXFx1MDAzZXNkaW9fY29yZSAgID0gYnJjbWZfY2hpcF9nZXRfY29yZShidXMtXFx1MDAzZWNpLCBCQ01BX0NPUkVfU0RJT19ERVYpO1xcbjM5OTY6XFx0XFx0aWYgKCFidXMtXFx1MDAzZXNkaW9fY29yZSlcXG4zOTk3OlxcdFxcdFxcdGdvdG8gZmFpbDtcXG4zOTk4OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxODo1NzoxMy41ODY2MzAwNTNaIiwiU2VxIjo3MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODA4NDI5NTM0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkRlbHZpbmcgaW50byB0aGUgRmlybXdhcmUgVmVyc2lvbiBJbmRpY2F0b3IqKlxuXG5SaWdodCwgKmJ1cy1cdTAwM2VzZGlvZGV2LVx1MDAzZWZ3dmlkKi4uLiB0aGF0J3MgcmluZ2luZyBhIGJlbGwuIE15IGluaXRpYWwgdGhvdWdodCBpcywgXCJXYWl0LCB0aGF0IHNwZWNpZmljIHBhdGggdG8gdGhlIGZpcm13YXJlIHZlcnNpb24gaWRlbnRpZmllcj8gSSBzaG91bGQgcXVpY2tseSBjcm9zcyByZWZlcmVuY2UgdGhhdCB3aXRoIHRoZSAqYnJjbWZfc2Rpb19kZXYqIHN0cnVjdCBkZWZpbml0aW9uLCBhbmQgcmVmcmVzaCBteSBtZW50YWwgbW9kZWwgb2YgaG93IHRoZSBTRElPIGRldmljZSBzdHJ1Y3R1cmUgaXMgc2V0IHVwLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgdGhhdCBwYXJ0aWN1bGFyIGZpZWxkIGFuZCB3aGVyZSBpdCdzIHBvcHVsYXRlZC4gSSBuZWVkIHRvIGdldCB0aGUgY29udGV4dCByaWdodCBiZWZvcmUgbWFraW5nIGFzc3VtcHRpb25zIG9uIGhvdyB0aGlzIGlzIGJlaW5nIHVzZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzOTA4LCJPdXRwdXRUb2tlbnMiOjQ4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxODo1NzoyMS42NzA5MzUzMjdaIiwiU2VxIjo3MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4ODczODAyLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmd3ZpZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvc2Rpby5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxODo1NzoyMS43NDk4MjM0ODhaIiwiU2VxIjo3MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk3NTk3OTkyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqUGVlcmluZyBpbnRvIHRoZSBDb3JlOiBgYnJjbWZfc2Rpb19kZXZgKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSByaWdodCBpbi4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byB0YWtlIGEgbG9vayBhdCBgYnJjbWZfc2Rpb19kZXZgLiBJIGtub3cgdGhhdCBuYW1lIGZyb20gc29tZXdoZXJlLi4uIGl0J3MgYSBrZXkgc3RydWN0dXJlIG9yIG1hY3JvLCBwcm9iYWJseSBkZWZpbmVkIGluIGBzZGlvLmhgLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgYW5kIHVuZGVyc3RhbmQgd2hhdCBwcmVjaXNlbHkgaXMgZW5jYXBzdWxhdGVkIGJ5IHRoaXMgZGF0YSBzdHJ1Y3R1cmUuIEl0J3MgbGlrZWx5IGEgY3JpdGljYWwgcGllY2Ugb2YgdGhlIEJyb2FkY29tIFNESU8gZHJpdmVyIHB1enpsZSwgYnV0IEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyBmaWVsZHMgYW5kIHRoZWlyIGludGVyYWN0aW9ucy4gSSdtIGhvcGluZyB0byB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlIHdpdGhpbiB0aGUgU0RJTyBkcml2ZXIgYXJjaGl0ZWN0dXJlIC0gaXMgaXQgdGhlIGRldmljZSBjb250ZXh0LCBhIGRlc2NyaXB0b3IsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBUaW1lIHRvIGdldCB0aGUgZGV0YWlscy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQxNTAsIk91dHB1dFRva2VucyI6NDgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxODo1NzoyNS43MjU4MDcwMTZaIiwiU2VxIjo3NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk2ODY1ODQwLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmd3ZpZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvc2Rpby5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxODo1NzoyNS44MjI2ODAzMzZaIiwiU2VxIjo3NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTI5NjI3MjAzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSBzdW1tYXJ5LCB0YWtpbmcgdGhlIGZpcnN0LXBlcnNvbiBwZXJzcGVjdGl2ZSBhcyByZXF1ZXN0ZWQ6XG5cbioqRGVjb25zdHJ1Y3RpbmcgYGJyY21mX3NkaW9fcmVnaXN0ZXJgKipcblxuQWxyaWdodCwgbGV0J3MgcHVsbCB1cCBgYnJjbWZfc2Rpb19yZWdpc3RlcmAuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgQnJvYWRjb20gU0RJTyByZWdpc3RyYXRpb24gcHJvY2Vzcy4gSSdtIGFzc3VtaW5nIGl0J3MgdGhlIGNvcmUgZnVuY3Rpb24gZm9yIGluaXRpYWxpemluZyB0aGUgU0RJTyBpbnRlcmZhY2UgZm9yIHRoZSBkcml2ZXIuIExldCdzIHN0YXJ0IGJ5IHVuZGVyc3RhbmRpbmcgZXhhY3RseSB3aGF0IG5lZWRzIHRvIGJlIHJlZ2lzdGVyZWQgaGVyZS4gSSdtIGV4cGVjdGluZyB0aGlzIGlzIHdoZXJlIHRoZSBkcml2ZXIgaW50ZXJhY3RzIHdpdGggdGhlIFNESU8gY29yZSwgbGlrZWx5IHJlcXVlc3RpbmcgcmVzb3VyY2VzLCBzZXR0aW5nIHVwIGludGVycnVwdCBoYW5kbGVycywgYW5kIGRlZmluaW5nIHRoZSBvcGVyYXRpb25hbCBjaGFyYWN0ZXJpc3RpY3MgZm9yIHRoZSBkZXZpY2UuIEkga25vdyB0aGF0IFNESU8gaXMgYSBiaXQgZGlmZmVyZW50IGZyb20gdHJhZGl0aW9uYWwgUENJLCBzbyBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZ3Jhc3AgdGhlIFNESU8tc3BlY2lmaWMgbnVhbmNlcywgbGlrZSB0aGUgYmxvY2sgYWRkcmVzc2luZyBzY2hlbWUuIEknbGwgbGlrZWx5IGZpbmQgdGhlIGNydWNpYWwgc2V0dXAgZm9yIERNQSB0cmFuc2ZlcnMgYW5kIGFueSBwb3dlciBtYW5hZ2VtZW50IGFzcGVjdHMgd2l0aGluIHRoaXMgZnVuY3Rpb24gYXMgd2VsbC4gSSdsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZSByZXNvdXJjZSBhbGxvY2F0aW9uIGZvciB0aGUgZGV2aWNlLCByZWdpc3RlcmluZyBpbnRlcnJ1cHQgaGFuZGxlcnMsIHRoZSBzZXR1cCBvZiBhbnkgZGF0YSB0cmFuc2ZlciBtZWNoYW5pc21zLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDM5OSwiT3V0cHV0VG9rZW5zIjo0OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE4OjU3OjMxLjExODk1ODA4OFoiLCJTZXEiOjc2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEzMjg3NDI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZ3dmlkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9iY21zZGguY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYmNtc2RoLmM9MTA0MT1zdGF0aWMgaW50IGJyY21mX29wc19zZGlvX3Byb2JlKHN0cnVjdCBzZGlvX2Z1bmMgKmZ1bmMsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYmNtc2RoLmMtMTA4OC1cXHRidXNfaWYtXFx1MDAzZXByb3RvX3R5cGUgPSBCUkNNRl9QUk9UT19CQ0RDO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9iY21zZGguYzoxMDg5OlxcdGJ1c19pZi1cXHUwMDNlZnd2aWQgPSBpZC1cXHUwMDNlZHJpdmVyX2RhdGE7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2JjbXNkaC5jLTEwOTAtXFx0ZGV2X3NldF9kcnZkYXRhKFxcdTAwMjZmdW5jLVxcdTAwM2VkZXYsIGJ1c19pZik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE4OjU3OjMxLjIzMjI0OTU2NloiLCJTZXEiOjc3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODg5MzgzNjYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqRGlnZ2luZyBpbnRvIHRoZSBCQ01TREggRHJpdmVyKipcblxuQWxyaWdodCwgc28gSSdtIGRlZXAgaW4gYGJjbXNkaC5jYCBhZ2FpbiwgdHJ5aW5nIHRvIHRyYWNrIGRvd24gdGhpcyBpc3N1ZSwgYW5kIGl0J3MgY2xpY2tlZCDigJMgdGhlIGBpZC1cdTAwM2Vkcml2ZXJfZGF0YWAgdmFsdWUgaW4gdGhpcyBmaWxlLCBzcGVjaWZpY2FsbHksIGlzIHBvaW50aW5nIHRvIGBmd3ZpZGAuIFRoYXQncyB0aGUga2V5LiBMZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCBieSBoZWFkaW5nIG92ZXIgdG8gYGJyY21mX3NkbW1jX2lkc2AgYWxzbyB3aXRoaW4gYGJjbXNkaC5jYC4gSSBuZWVkIHRvIGVuc3VyZSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVzZSB0d28gcGllY2VzIG9mIGRhdGEgaXMgY29ycmVjdC4gQ29udGV4dCBpcyBldmVyeXRoaW5nIHdoZW4gZGlhZ25vc2luZyB0aGlzIGtpbmQgb2YgdGhpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM0OTA0LCJPdXRwdXRUb2tlbnMiOjU2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTg6NTc6MzYuMTIxNjM2NjY5WiIsIlNlcSI6NzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3Njk3Nzk1MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicmNtZl9zZG1tY19pZHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2JjbXNkaC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9iY21zZGguYz05MDA9aW50IGJyY21mX3NkaW9kX3Byb2JlKHN0cnVjdCBicmNtZl9zZGlvX2RldiAqc2Rpb2RldilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9iY21zZGguYy05NzktLyogZGV2aWNlcyB3ZSBzdXBwb3J0LCBudWxsIHRlcm1pbmF0ZWQgKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYmNtc2RoLmM6OTgwOnN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2Rpb19kZXZpY2VfaWQgYnJjbWZfc2RtbWNfaWRzW10gPSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2JjbXNkaC5jLTk4MS1cXHRCUkNNRl9TRElPX0RFVklDRShTRElPX0RFVklDRV9JRF9CUk9BRENPTV80MzE0MywgV0NDKSxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9iY21zZGguYy0xMDA2LX07XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2JjbXNkaC5jOjEwMDc6TU9EVUxFX0RFVklDRV9UQUJMRShzZGlvLCBicmNtZl9zZG1tY19pZHMpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9iY21zZGguYy0xMDA4LVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2JjbXNkaC5jPTEyNjA9c3RhdGljIHN0cnVjdCBzZGlvX2RyaXZlciBicmNtZl9zZG1tY19kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYmNtc2RoLmMtMTI2My1cXHQubmFtZSA9IEtCVUlMRF9NT0ROQU1FLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9iY21zZGguYzoxMjY0OlxcdC5pZF90YWJsZSA9IGJyY21mX3NkbW1jX2lkcyxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYmNtc2RoLmMtMTI2NS1cXHQuZHJ2ID0ge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxODo1NzozNi4xOTg2MjM5NDFaIiwiU2VxIjo3OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzUxODYzODAzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgYGJyY21mX3NkbW1jX2lkc2AgZm9yIEluc2lnaHQqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcyBgYnJjbWZfc2RtbWNfaWRzYCBmaWxlLiBJJ20gaW1tZWRpYXRlbHkgbG9va2luZyB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGluIHRoZSBCcm9hZGNvbSBXaS1GaSBkcml2ZXIsIHBhcnRpY3VsYXJseSBjb25jZXJuaW5nIFNETU1DIGludGVyZmFjZSBpbml0aWFsaXphdGlvbiBhbmQgZGV2aWNlIGlkZW50aWZpY2F0aW9uLiBNeSBtZW50YWwgY2hlY2tsaXN0IHN0YXJ0cyB3aXRoIHBhcnNpbmcgdGhlIHN0cnVjdHVyZSBkZWZpbml0aW9ucy4gSSdtIGV4cGVjdGluZyB0byBzZWUgZW50cmllcyByZWxhdGVkIHRvIFNEIGNhcmQgdmVuZG9yIElEcywgZGV2aWNlIElEcywgcG90ZW50aWFsbHkgcHJvZHVjdCByZXZpc2lvbnMsIGFuZCBjZXJ0YWlubHkgc29tZSBraW5kIG9mIGlkZW50aWZpZXIgbWF0Y2hpbmcgbWVjaGFuaXNtLiBBcmUgd2UgbG9va2luZyBhdCBhIHNpbXBsZSBsaXN0IG9mIGhhcmRjb2RlZCBJRHMsIG9yIHNvbWV0aGluZyBtb3JlIHNvcGhpc3RpY2F0ZWQgbGlrZSBhIHRhYmxlIHdpdGggd2lsZGNhcmRzIG9yIHJhbmdlcz8gVGhhdCdsbCBnaXZlIG1lIGEgY2x1ZSBhYm91dCB0aGUgZmxleGliaWxpdHkgb2YgdGhlIGRyaXZlciBhbmQgaXRzIGFiaWxpdHkgdG8gaGFuZGxlIGEgdmFyaWV0eSBvZiBzdXBwb3J0ZWQgZGV2aWNlcy4gSSdtIGFsc28gc2Nhbm5pbmcgZm9yIGFueSBwb3RlbnRpYWwgZGlzY3JlcGFuY2llcyBvciBhcmVhcyB0aGF0IG1pZ2h0IHJlcXVpcmUgdXBkYXRlcyB3aXRoIG5ld2VyIGhhcmR3YXJlIHJlbGVhc2VzLiBBbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gb3IgdmVyc2lvbmluZyBjaGVja3Mgd2l0aGluIHRoZSBmaWxlIHdvdWxkIGJlIGVzcGVjaWFsbHkgaW50ZXJlc3RpbmcsIGhpbnRpbmcgYXQgaG93IHRoZXkndmUgaGFuZGxlZCBjb21wYXRpYmlsaXR5IGFjcm9zcyBkaWZmZXJlbnQgaGFyZHdhcmUgcmV2aXNpb25zLiBGaW5hbGx5LCBJJ2xsIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGRhdGEgc3RydWN0dXJlcyB1c2VkOyBhcmUgdGhleSBlZmZpY2llbnQsIGFuZCBpcyB0aGVyZSBhbnkgdXNlIG9mIGJpdGZpZWxkcyB0byBvcHRpbWl6ZSBtZW1vcnkgdXNhZ2U/IEknbGwgcHJvYmFibHkgYWxzbyBiZSBsb29raW5nIGZvciBhbnkgaGludHMgYWJvdXQgcG93ZXIgbWFuYWdlbWVudCBvciBjbG9ja2luZyBjb25maWd1cmF0aW9ucyB0aGF0IG1pZ2h0IGJlIHRpZWQgdG8gc3BlY2lmaWMgZGV2aWNlIElEcy4gSSdtIGhvcGluZyB0byB1bmNvdmVyIGFueSBpbXBsaWNpdCBhc3N1bXB0aW9ucyB0aGF0IG1pZ2h0IGxlYWQgdG8gZHJpdmVyIGlzc3VlcyBkb3duIHRoZSByb2FkLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTY5NCwiT3V0cHV0VG9rZW5zIjo1NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE4OjU3OjQzLjcxNzI2NjY1M1oiLCJTZXEiOjgwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTIzMjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2JjbXNkaC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDk4MCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDk4MDpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IHNkaW9fZGV2aWNlX2lkIGJyY21mX3NkbW1jX2lkc1tdID0ge1xcbiA5ODE6XFx0XFx0QlJDTUZfU0RJT19ERVZJQ0UoU0RJT19ERVZJQ0VfSURfQlJPQURDT01fNDMxNDMsIFdDQyksXFxuIDk4MjpcXHRcXHRCUkNNRl9TRElPX0RFVklDRShTRElPX0RFVklDRV9JRF9CUk9BRENPTV80MzI0MSwgV0NDKSxcXG4gOTgzOlxcdFxcdEJSQ01GX1NESU9fREVWSUNFKFNESU9fREVWSUNFX0lEX0JST0FEQ09NXzQzMjksIFdDQyksXFxuIDk4NDpcXHRcXHRCUkNNRl9TRElPX0RFVklDRShTRElPX0RFVklDRV9JRF9CUk9BRENPTV80MzMwLCBXQ0MpLFxcbiA5ODU6XFx0XFx0QlJDTUZfU0RJT19ERVZJQ0UoU0RJT19ERVZJQ0VfSURfQlJPQURDT01fNDMzNCwgV0NDKSxcXG4gOTg2OlxcdFxcdEJSQ01GX1NESU9fREVWSUNFKFNESU9fREVWSUNFX0lEX0JST0FEQ09NXzQzMzQwLCBXQ0MpLFxcbiA5ODc6XFx0XFx0QlJDTUZfU0RJT19ERVZJQ0UoU0RJT19ERVZJQ0VfSURfQlJPQURDT01fNDMzNDEsIFdDQyksXFxuIDk4ODpcXHRcXHRCUkNNRl9TRElPX0RFVklDRShTRElPX0RFVklDRV9JRF9CUk9BRENPTV80MzM2MiwgV0NDKSxcXG4gOTg5OlxcdFxcdEJSQ01GX1NESU9fREVWSUNFKFNESU9fREVWSUNFX0lEX0JST0FEQ09NXzQzMzY0LCBXQ0MpLFxcbiA5OTA6XFx0XFx0QlJDTUZfU0RJT19ERVZJQ0UoU0RJT19ERVZJQ0VfSURfQlJPQURDT01fNDMzNV80MzM5LCBXQ0MpLFxcbiA5OTE6XFx0XFx0QlJDTUZfU0RJT19ERVZJQ0UoU0RJT19ERVZJQ0VfSURfQlJPQURDT01fNDMzOSwgV0NDKSxcXG4gOTkyOlxcdFxcdEJSQ01GX1NESU9fREVWSUNFKFNESU9fREVWSUNFX0lEX0JST0FEQ09NXzQzNDMwLCBDWVcpLFxcbiA5OTM6XFx0XFx0QlJDTUZfU0RJT19ERVZJQ0UoU0RJT19ERVZJQ0VfSURfQlJPQURDT01fNDM0MzksIFdDQyksXFxuIDk5NDpcXHRcXHRCUkNNRl9TRElPX0RFVklDRShTRElPX0RFVklDRV9JRF9CUk9BRENPTV80MzQ1LCBDWVcpLFxcbiA5OTU6XFx0XFx0QlJDTUZfU0RJT19ERVZJQ0UoU0RJT19ERVZJQ0VfSURfQlJPQURDT01fNDM0NTUsIENZVyksXFxuIDk5NjpcXHRcXHRCUkNNRl9TRElPX0RFVklDRShTRElPX0RFVklDRV9JRF9CUk9BRENPTV80MzU0LCBXQ0MpLFxcbiA5OTc6XFx0XFx0QlJDTUZfU0RJT19ERVZJQ0UoU0RJT19ERVZJQ0VfSURfQlJPQURDT01fNDM1NiwgV0NDKSxcXG4gOTk4OlxcdFxcdEJSQ01GX1NESU9fREVWSUNFKFNESU9fREVWSUNFX0lEX0JST0FEQ09NXzQzNTksIFdDQyksXFxuIDk5OTpcXHRcXHRCUkNNRl9TRElPX0RFVklDRShTRElPX0RFVklDRV9JRF9CUk9BRENPTV80Mzc1MSwgV0NDKSxcXG4xMDAwOlxcdFxcdEJSQ01GX1NESU9fREVWSUNFKFNESU9fREVWSUNFX0lEX0JST0FEQ09NXzQzNzUyLCBXQ0MpLFxcbjEwMDE6XFx0XFx0QlJDTUZfU0RJT19ERVZJQ0UoU0RJT19ERVZJQ0VfSURfQlJPQURDT01fQ1lQUkVTU180MzczLCBDWVcpLFxcbjEwMDI6XFx0XFx0QlJDTUZfU0RJT19ERVZJQ0UoU0RJT19ERVZJQ0VfSURfQlJPQURDT01fQ1lQUkVTU180MzAxMiwgQ1lXKSxcXG4xMDAzOlxcdFxcdEJSQ01GX1NESU9fREVWSUNFKFNESU9fREVWSUNFX0lEX0JST0FEQ09NX0NZUFJFU1NfODkzNTksIENZVyksXFxuMTAwNDpcXHRcXHRDWVdfU0RJT19ERVZJQ0UoU0RJT19ERVZJQ0VfSURfQlJPQURDT01fQ1lQUkVTU180MzQzOSwgQ1lXKSxcXG4xMDA1OlxcdFxcdHsgLyogZW5kOiBhbGwgemVyb2VzICovIH1cXG4xMDA2OlxcdH07XFxuMTAwNzpcXHRNT0RVTEVfREVWSUNFX1RBQkxFKHNkaW8sIGJyY21mX3NkbW1jX2lkcyk7XFxuMTAwODpcXHRcXG4xMDA5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxODo1Nzo0My43MTc0NjI2MzNaIiwiU2VxIjo4MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzQxMDMwMTQ2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipTRElPIEZ1enppbmcgSW5xdWlyeSoqXG5cbk9rYXksIHNvIGBDWVdgIGlzIGEgY29tbW9uIHByZWZpeCBmb3IgYSB3aG9sZSByYW5nZSBvZiBTRElPIGRldmljZXMg4oCTIHRoaW5rIGA0MzQzMGAsIGA0MzQ1YCwgYDQzNDU1YCwgdGhvc2Uga2luZHMgb2YgdGhpbmdzLiBNeSBpbml0aWFsIHF1ZXN0aW9uIGlzOiBjYW4gd2UgbGV2ZXJhZ2Ugc3l6a2FsbGVyIHRvIGZ1enogU0RJTyBpbnRlcmZhY2VzPyBNeSBwYXN0IGV4cGVyaWVuY2Ugc2F5cyB0aGF0IHdoaWxlIHN5emthbGxlciBpcyBxdWl0ZSBhZGVwdCBhdCBmdXp6aW5nIHRoaW5ncyBsaWtlIFVTQiBvciBQQ0ksIEkgZG9uJ3QgcmVjYWxsIHNlZWluZyBhIGRlZGljYXRlZCwgZ2VuZXJpYyBTRElPIGZ1enppbmcgc2V0dXAgcmVhZGlseSBhdmFpbGFibGUuXG5cblRoYXQgbWFrZXMgbWUgdGhpbmsuLi4gd2hhdCBhYm91dCBQQ0kgaW4gZ2VuZXJhbD8gSXMgdGhlcmUgYSBwb3NzaWJsZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGUgU0RJTyBkZXZpY2VzIGFuZCBQQ0kgZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmU/IExldCBtZSBjaGVjayB0aGUgYGJyY21mX3BjaWVfZGV2aWRfdGFibGVgIHdpdGhpbiB0aGUgYHBjaWUuY2AgZmlsZS4gUGVyaGFwcyB0aGVyZSdzIGFuIGV4aXN0aW5nIG1hcHBpbmcgb3IgY29ubmVjdGlvbiB0aGF0IEkgY2FuIGxldmVyYWdlIHRvIGxlYXJuIG1vcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3MDM4LCJPdXRwdXRUb2tlbnMiOjU3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTg6NTc6NTEuMTI3NzY4NjA3WiIsIlNlcSI6ODIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODM4NjczNDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnJjbWZfcGNpZV9kZXZpZF90YWJsZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmM9MjQyMD1zdGF0aWMgY29uc3Qgc3RydWN0IGJyY21mX3BjaWVfZHJ2ZGF0YSBkcnZkYXRhW10gPSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jLTI0MzktLyogRm9yd2FyZCBkZWNsYXJhdGlvbiBmb3IgcGNpX21hdGNoX2lkKCkgY2FsbCAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmM6MjQ0MDpzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgYnJjbWZfcGNpZV9kZXZpZF90YWJsZVtdO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmMtMjQ0MS1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmM9MjQ0Mz1icmNtZl9wY2llX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jLTI0NTItXFx0aWYgKCFpZCkge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmM6MjQ1MzpcXHRcXHRpZCA9IHBjaV9tYXRjaF9pZChicmNtZl9wY2llX2RldmlkX3RhYmxlLCBwZGV2KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jLTI0NTQtXFx0XFx0aWYgKCFpZCkge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuYz0yNzA4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBicmNtZl9wY2llZHJ2cl9wbSA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmMtMjczNC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jOjI3MzU6c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGJyY21mX3BjaWVfZGV2aWRfdGFibGVbXSA9IHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jLTI3MzYtXFx0QlJDTUZfUENJRV9ERVZJQ0UoQlJDTV9QQ0lFXzQzNTBfREVWSUNFX0lELCBXQ0MpLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuYy0yNzY4LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmM6Mjc2OTpNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgYnJjbWZfcGNpZV9kZXZpZF90YWJsZSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuYy0yNzcwLVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuYz0yNzcyPXN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBicmNtZl9wY2llZHJ2ciA9IHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jLTI3NzMtXFx0Lm5hbWUgPSBLQlVJTERfTU9ETkFNRSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jOjI3NzQ6XFx0LmlkX3RhYmxlID0gYnJjbWZfcGNpZV9kZXZpZF90YWJsZSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jLTI3NzUtXFx0LnByb2JlID0gYnJjbWZfcGNpZV9wcm9iZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTg6NTc6NTEuNzExNjQzMTQ2WiIsIlNlcSI6ODMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg2MDcwNDQ3MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZCwgaW4gdGhlIGZpcnN0IHBlcnNvbiBhbmQgdGFyZ2V0ZWQgdG93YXJkcyBhbiBleHBlcnQ6XG5cbioqUmVhZGluZyB0aGUgYGJyY21mX3BjaWVfZGV2aWRfdGFibGVgKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoZSBgYnJjbWZfcGNpZV9kZXZpZF90YWJsZWAuIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IEJyb2FkY29tJ3MgUENJZSBkZXZpY2VzIGFyZSBpZGVudGlmaWVkIHdpdGhpbiB0aGVpciBkcml2ZXIsIHdoaWNoIGlzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgZGV2aWNlIHN1cHBvcnQgYW5kIHBvdGVudGlhbCBxdWlya3MuIEdpdmVuIG15IGV4cGVyaWVuY2UsIEknbSBpbW1lZGlhdGVseSBsb29raW5nIGZvciBwYXR0ZXJucy4gSSBhbnRpY2lwYXRlIHRoaXMgdGFibGUgd2lsbCBiZSBhIGNydWNpYWwgbWFwcGluZyBiZXR3ZWVuIHRoZSBQQ0llIHZlbmRvciBhbmQgZGV2aWNlIElEcyBhbmQgcmVsZXZhbnQgZHJpdmVyLXNwZWNpZmljIGRhdGEgc3RydWN0dXJlcyBvciBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMuIEknbGwgYmUgc2Nhbm5pbmcgZm9yIGFueSB1bnVzdWFsIGVudHJpZXMsIHBlcmhhcHMgaW5kaWNhdGluZyBzdXBwb3J0IGZvciBhIG5ld2VyIGNoaXAgdGhhdCBoYXNuJ3QgbWFkZSBpdHMgd2F5IGludG8gdGhlIHVwc3RyZWFtIGtlcm5lbCB5ZXQgb3Igc29tZSBjdXN0b20gaW1wbGVtZW50YXRpb24gc3BlY2lmaWMgdG8gYSBjZXJ0YWluIHBsYXRmb3JtIG9yIG1vZHVsZS5cblxuSeKAmW0gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gaG93IHRoZXkndmUgaGFuZGxlZCB2YXJpb3VzIHJldmlzaW9ucyBvciBzdGVwcGluZyBvZiB0aGVpciBzaWxpY29uLiBBcmUgdGhleSB1c2luZyBicm9hZCB3aWxkY2FyZGluZywgc3BlY2lmaWMgZGV2aWNlIElEIHJhbmdlcywgb3IgZGV0YWlsZWQgcHJvZHVjdC1zcGVjaWZpYyBlbnRyaWVzPyBUaGUgbGV2ZWwgb2YgZ3JhbnVsYXJpdHkgaGVyZSB3aWxsIHRlbGwgbWUgaG93IGNhcmVmdWxseSB0aGV5J3JlIG1hbmFnaW5nIGRldmljZSBjb21wYXRpYmlsaXR5IGFuZCBpZiB0aGV5IGNhbiBlYXNpbHkgYWRhcHQgdG8gbmV3IGRldmljZXMuXG5cbkZ1cnRoZXJtb3JlLCBJJ2xsIGJlIGtlZXBpbmcgYW4gZXllIG91dCBmb3IgYW55IHNwZWNpZmljIGZsYWdzIG9yIG1ldGFkYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGUgZW50cmllcy4gQXJlIHRoZXJlIGFueSBoaW50cyBhYm91dCBwb3dlciBtYW5hZ2VtZW50IHNldHRpbmdzLCBmaXJtd2FyZSByZXF1aXJlbWVudHMsIG9yIGFueSBzcGVjaWZpYyBtb2R1bGUgbG9hZCBkZXBlbmRlbmNpZXM/IFRob3NlIGtpbmRzIG9mIGRldGFpbHMgYXJlIG9mdGVuIGVtYmVkZGVkIHJpZ2h0IGluIHRoaXMga2luZCBvZiB0YWJsZS4gSSdtIGFsc28gcmVhZHkgdG8gY29ycmVsYXRlIHRoaXMgdGFibGUgd2l0aCB0aGUgb3ZlcmFsbCBkcml2ZXIgY29kZSwgbG9va2luZyBmb3IgZnVuY3Rpb25zIHRoYXQgdXRpbGl6ZSB0aGVzZSBkZXZpY2UgSURzIGluIGNvbmp1bmN0aW9uIHdpdGggcHJvYmUgb3IgaW5pdGlhbGl6YXRpb24gbG9naWMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4MzMwLCJPdXRwdXRUb2tlbnMiOjU1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTg6NTg6MDAuMzE4NjkyNjA1WiIsIlNlcSI6ODQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4MDAzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI3MzUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI3MzU6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGJyY21mX3BjaWVfZGV2aWRfdGFibGVbXSA9IHtcXG4yNzM2OlxcdFxcdEJSQ01GX1BDSUVfREVWSUNFKEJSQ01fUENJRV80MzUwX0RFVklDRV9JRCwgV0NDKSxcXG4yNzM3OlxcdFxcdEJSQ01GX1BDSUVfREVWSUNFX1NVQigweDQzNTUsIEJSQ01fUENJRV9WRU5ET1JfSURfQlJPQURDT00sIDB4NDM1NSwgV0NDKSxcXG4yNzM4OlxcdFxcdEJSQ01GX1BDSUVfREVWSUNFKEJSQ01fUENJRV80MzU0X1JBV19ERVZJQ0VfSUQsIFdDQyksXFxuMjczOTpcXHRcXHRCUkNNRl9QQ0lFX0RFVklDRShCUkNNX1BDSUVfNDM1NV9ERVZJQ0VfSUQsIFdDQ19TRUVEKSxcXG4yNzQwOlxcdFxcdEJSQ01GX1BDSUVfREVWSUNFKEJSQ01fUENJRV80MzU2X0RFVklDRV9JRCwgV0NDKSxcXG4yNzQxOlxcdFxcdEJSQ01GX1BDSUVfREVWSUNFKEJSQ01fUENJRV80MzU2N19ERVZJQ0VfSUQsIFdDQyksXFxuMjc0MjpcXHRcXHRCUkNNRl9QQ0lFX0RFVklDRShCUkNNX1BDSUVfNDM1NzBfREVWSUNFX0lELCBXQ0MpLFxcbjI3NDM6XFx0XFx0QlJDTUZfUENJRV9ERVZJQ0UoQlJDTV9QQ0lFXzQzNTcwX1JBV19ERVZJQ0VfSUQsIFdDQyksXFxuMjc0NDpcXHRcXHRCUkNNRl9QQ0lFX0RFVklDRShCUkNNX1BDSUVfNDM1OF9ERVZJQ0VfSUQsIFdDQyksXFxuMjc0NTpcXHRcXHRCUkNNRl9QQ0lFX0RFVklDRShCUkNNX1BDSUVfNDM1OV9ERVZJQ0VfSUQsIFdDQyksXFxuMjc0NjpcXHRcXHRCUkNNRl9QQ0lFX0RFVklDRShCUkNNX1BDSUVfNDM2MDJfREVWSUNFX0lELCBXQ0MpLFxcbjI3NDc6XFx0XFx0QlJDTUZfUENJRV9ERVZJQ0UoQlJDTV9QQ0lFXzQzNjAyXzJHX0RFVklDRV9JRCwgV0NDKSxcXG4yNzQ4OlxcdFxcdEJSQ01GX1BDSUVfREVWSUNFKEJSQ01fUENJRV80MzYwMl81R19ERVZJQ0VfSUQsIFdDQyksXFxuMjc0OTpcXHRcXHRCUkNNRl9QQ0lFX0RFVklDRShCUkNNX1BDSUVfNDM2MDJfUkFXX0RFVklDRV9JRCwgV0NDKSxcXG4yNzUwOlxcdFxcdEJSQ01GX1BDSUVfREVWSUNFKEJSQ01fUENJRV80MzY0X0RFVklDRV9JRCwgV0NDX1NFRUQpLFxcbjI3NTE6XFx0XFx0QlJDTUZfUENJRV9ERVZJQ0UoQlJDTV9QQ0lFXzQzNjVfREVWSUNFX0lELCBCQ0EpLFxcbjI3NTI6XFx0XFx0QlJDTUZfUENJRV9ERVZJQ0UoQlJDTV9QQ0lFXzQzNjVfMkdfREVWSUNFX0lELCBCQ0EpLFxcbjI3NTM6XFx0XFx0QlJDTUZfUENJRV9ERVZJQ0UoQlJDTV9QQ0lFXzQzNjVfNUdfREVWSUNFX0lELCBCQ0EpLFxcbjI3NTQ6XFx0XFx0QlJDTUZfUENJRV9ERVZJQ0VfU1VCKDB4NDM2NSwgQlJDTV9QQ0lFX1ZFTkRPUl9JRF9CUk9BRENPTSwgMHg0MzY1LCBCQ0EpLFxcbjI3NTU6XFx0XFx0QlJDTUZfUENJRV9ERVZJQ0UoQlJDTV9QQ0lFXzQzNjZfREVWSUNFX0lELCBCQ0EpLFxcbjI3NTY6XFx0XFx0QlJDTUZfUENJRV9ERVZJQ0UoQlJDTV9QQ0lFXzQzNjZfMkdfREVWSUNFX0lELCBCQ0EpLFxcbjI3NTc6XFx0XFx0QlJDTUZfUENJRV9ERVZJQ0UoQlJDTV9QQ0lFXzQzNjZfNUdfREVWSUNFX0lELCBCQ0EpLFxcbjI3NTg6XFx0XFx0QlJDTUZfUENJRV9ERVZJQ0UoQlJDTV9QQ0lFXzQzNzFfREVWSUNFX0lELCBXQ0MpLFxcbjI3NTk6XFx0XFx0QlJDTUZfUENJRV9ERVZJQ0UoQlJDTV9QQ0lFXzQzNTk2X0RFVklDRV9JRCwgQ1lXKSxcXG4yNzYwOlxcdFxcdEJSQ01GX1BDSUVfREVWSUNFKEJSQ01fUENJRV80Mzc3X0RFVklDRV9JRCwgV0NDX1NFRUQpLFxcbjI3NjE6XFx0XFx0QlJDTUZfUENJRV9ERVZJQ0UoQlJDTV9QQ0lFXzQzNzhfREVWSUNFX0lELCBXQ0NfU0VFRCksXFxuMjc2MjpcXHRcXHRCUkNNRl9QQ0lFX0RFVklDRShCUkNNX1BDSUVfNDM4N19ERVZJQ0VfSUQsIFdDQ19TRUVEKSxcXG4yNzYzOlxcdFxcdEJSQ01GX1BDSUVfREVWSUNFKEJSQ01fUENJRV80Mzc1Ml9ERVZJQ0VfSUQsIFdDQ19TRUVEKSxcXG4yNzY0OlxcdFxcdEJSQ01GX1BDSUVfREVWSUNFKENZX1BDSUVfNTQ1OTFfREVWSUNFX0lELCBDWVcpLFxcbjI3NjU6XFx0XFx0eyAvKiBlbmQ6IGFsbCB6ZXJvZXMgKi8gfVxcbjI3NjY6XFx0fTtcXG4yNzY3OlxcdFxcbjI3Njg6XFx0XFxuMjc2OTpcXHRNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgYnJjbWZfcGNpZV9kZXZpZF90YWJsZSk7XFxuMjc3MDpcXHRcXG4yNzcxOlxcdFxcbjI3NzI6XFx0c3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGJyY21mX3BjaWVkcnZyID0ge1xcbjI3NzM6XFx0XFx0Lm5hbWUgPSBLQlVJTERfTU9ETkFNRSxcXG4yNzc0OlxcdFxcdC5pZF90YWJsZSA9IGJyY21mX3BjaWVfZGV2aWRfdGFibGUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE4OjU4OjAwLjMxODk3Nzk2NVoiLCJTZXEiOjg1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NDY4NTgxODA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlBDSSBGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbioqXG5cbk9rYXksIHNvIEkndmUgY29uZmlybWVkIHRoYXQgYm90aCBgQlJDTV9QQ0lFXzQzNTk2X0RFVklDRV9JRGAgYW5kIGBDWV9QQ0lFXzU0NTkxX0RFVklDRV9JRGAgYXJlIGluZGVlZCBgQ1lXYCBkZXZpY2VzLiBFeGNlbGxlbnQhIFRoaXMgbWVhbnMgdGhhdCBgYnJjbWZtYWNgLCB0aGUgZHJpdmVyIGZvciBCcm9hZGNvbSBXaS1GaSBjaGlwcywgY291bGQgcG90ZW50aWFsbHkgYmUgZnV6emVkIHVzaW5nIFBDSSBlbXVsYXRpb24uIFN5emthbGxlciwgd2l0aCBpdHMgZmxleGlibGUgUENJIGZ1enplciwgcHJvdmlkZXMgdGhlIHBlcmZlY3QgdG9vbCBmb3IgdGhpcy4gVGhlIGlkZWEgaXMgdG8gaGF2ZSB0aGUgZnV6emVyIGVtdWxhdGUgYSBQQ0kgZGV2aWNlIHdpdGggdGhlIGBCUkNNX1BDSUVfNDM1OTZfREVWSUNFX0lEYCDigJMgc29tZXRoaW5nIGxpa2UgYDB4NDQxNWAgc2hvdWxkIGRvIHRoZSB0cmljay5cblxuSWYgdGhhdCdzIHN1Y2Nlc3NmdWwsIGBicmNtZm1hY2Agc2hvdWxkIHByb2JlIGl0LCBhbmQgdGhlIGBmd3ZpZGAgd2lsbCBiZSBpZGVudGlmaWVkIGFzIGBCUkNNRl9GV1ZFTkRPUl9DWVdgLiBUaGF0LCBpbiB0dXJuLCBzaG91bGQgbGVhZCB0byBgYnJjbWZfY3l3X2V4dGVybmFsX2F1dGhgIGJlaW5nIHJlZ2lzdGVyZWQgYXMgdGhlIGBleHRlcm5hbF9hdXRoYCBjZmc4MDIxMSBvcGVyYXRpb24uXG5cbkEgY3J1Y2lhbCBxdWVzdGlvbiBub3cgYXJpc2VzOiBkb2VzIHRoZSBgYnJjbWZtYWNgIFBDSSBkcml2ZXIgcmVxdWlyZSBmaXJtd2FyZSB0byBiZSBsb2FkZWQgZHVyaW5nIHByb2Jpbmc/IEkgbmVlZCB0byBjaGVjayB0aGUgYGJyY21mX3BjaWVfcHJvYmVgIGZ1bmN0aW9uIHRvIGNvbmZpcm0gdGhpczsgdGhhdCdzIHRoZSBuZXh0IHN0ZXAgdG8gZW5zdXJlIGZlYXNpYmlsaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTk3MiwiT3V0cHV0VG9rZW5zIjo1NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE4OjU4OjA4Ljc4NzU2NDk3OVoiLCJTZXEiOjg2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTkyNzE5NzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnJjbWZfcGNpZV9wcm9iZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmM9MjQ0Mj1zdGF0aWMgaW50XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuYzoyNDQzOmJyY21mX3BjaWVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jLTI0NDQte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuYz0yNjY2PXN0YXRpYyBpbnQgYnJjbWZfcGNpZV9wbV9sZWF2ZV9EMyhzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jLTI2OTktXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuYzoyNzAwOlxcdGVyciA9IGJyY21mX3BjaWVfcHJvYmUocGRldiwgTlVMTCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuYy0yNzAxLVxcdGlmIChlcnIpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jPTI3NzI9c3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGJyY21mX3BjaWVkcnZyID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuYy0yNzc0LVxcdC5pZF90YWJsZSA9IGJyY21mX3BjaWVfZGV2aWRfdGFibGUsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuYzoyNzc1OlxcdC5wcm9iZSA9IGJyY21mX3BjaWVfcHJvYmUsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuYy0yNzc2LVxcdC5yZW1vdmUgPSBicmNtZl9wY2llX3JlbW92ZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTg6NTg6MDguODQ2ODQ5MjMzWiIsIlNlcSI6ODcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjczNzUxNDA0MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIFRhc2sqKlxuXG5BbHJpZ2h0LCB0aGUgb2JqZWN0aXZlIGlzIHRvIGRpdmUgaW50byB0aGUgYGJyY21mX3BjaWVfcHJvYmVgIGZ1bmN0aW9uLiBUaGlzIGxpa2VseSBtYXJrcyB0aGUgcG9pbnQgd2hlcmUgdGhlIEJyb2FkY29tIFdpLUZpIFBDSWUgZHJpdmVyIGF0dGVtcHRzIHRvIGJyaW5nIHVwIGEgc3BlY2lmaWMgZGV2aWNlIG9uIHRoZSBidXMuIFRoaXMgaXMgdGhlIHN0YXJ0aW5nIHBvaW50IG9mIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBkcml2ZXIgaW50ZXJhY3RzIHdpdGggdGhlIGhhcmR3YXJlLCBwYXJ0aWN1bGFybHkgdGhlIGluaXRpYWxpemF0aW9uIGFuZCBkaXNjb3ZlcnkgcGhhc2VzLiBJ4oCZbSBleHBlY3RpbmcgdG8gc2VlIHRoaW5ncyBsaWtlIHJlc291cmNlIGFsbG9jYXRpb24gKG1lbW9yeSByZWdpb25zLCBpbnRlcnJ1cHQgbGluZXMpLCBkZXZpY2UgSUQgY2hlY2tpbmcgdG8gY29uZmlybSBjb21wYXRpYmlsaXR5LCBhbmQgcG9zc2libHkgc29tZSBiYXNpYyBoYXJkd2FyZSBjb25maWd1cmF0aW9uLiBFc3NlbnRpYWxseSwgdGhpcyBpcyB0aGUgXCJlbnRyeSBwb2ludFwiIGZ1bmN0aW9uIGZvciBhIG5ldyBkZXZpY2UgaW5zdGFuY2UuIExldOKAmXMgc3RhcnQgd2l0aCBhIHRob3JvdWdoIGFuYWx5c2lzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTAzOSwiT3V0cHV0VG9rZW5zIjo1NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE4OjU4OjE2LjIyMTk5MzMwOVoiLCJTZXEiOjg4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDM3MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNDQzLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyNDQzOlxcdGJyY21mX3BjaWVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcXG4yNDQ0OlxcdHtcXG4yNDQ1OlxcdFxcdGludCByZXQ7XFxuMjQ0NjpcXHRcXHRzdHJ1Y3QgYnJjbWZfZndfcmVxdWVzdCAqZndyZXE7XFxuMjQ0NzpcXHRcXHRzdHJ1Y3QgYnJjbWZfcGNpZWRldl9pbmZvICpkZXZpbmZvO1xcbjI0NDg6XFx0XFx0c3RydWN0IGJyY21mX3BjaWVkZXYgKnBjaWVfYnVzX2RldjtcXG4yNDQ5OlxcdFxcdHN0cnVjdCBicmNtZl9jb3JlICpjb3JlO1xcbjI0NTA6XFx0XFx0c3RydWN0IGJyY21mX2J1cyAqYnVzO1xcbjI0NTE6XFx0XFxuMjQ1MjpcXHRcXHRpZiAoIWlkKSB7XFxuMjQ1MzpcXHRcXHRcXHRpZCA9IHBjaV9tYXRjaF9pZChicmNtZl9wY2llX2RldmlkX3RhYmxlLCBwZGV2KTtcXG4yNDU0OlxcdFxcdFxcdGlmICghaWQpIHtcXG4yNDU1OlxcdFxcdFxcdFxcdHBjaV9lcnIocGRldiwgXFxcIkVycm9yIGNvdWxkIG5vdCBmaW5kIHBjaV9kZXZpY2VfaWQgZm9yICV4OiV4XFxcXG5cXFwiLCBwZGV2LVxcdTAwM2V2ZW5kb3IsIHBkZXYtXFx1MDAzZWRldmljZSk7XFxuMjQ1NjpcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4yNDU3OlxcdFxcdFxcdH1cXG4yNDU4OlxcdFxcdH1cXG4yNDU5OlxcdFxcbjI0NjA6XFx0XFx0YnJjbWZfZGJnKFBDSUUsIFxcXCJFbnRlciAleDoleFxcXFxuXFxcIiwgcGRldi1cXHUwMDNldmVuZG9yLCBwZGV2LVxcdTAwM2VkZXZpY2UpO1xcbjI0NjE6XFx0XFxuMjQ2MjpcXHRcXHRyZXQgPSAtRU5PTUVNO1xcbjI0NjM6XFx0XFx0ZGV2aW5mbyA9IGt6YWxsb2Nfb2JqKCpkZXZpbmZvKTtcXG4yNDY0OlxcdFxcdGlmIChkZXZpbmZvID09IE5VTEwpXFxuMjQ2NTpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjI0NjY6XFx0XFxuMjQ2NzpcXHRcXHRkZXZpbmZvLVxcdTAwM2VwZGV2ID0gcGRldjtcXG4yNDY4OlxcdFxcdHBjaWVfYnVzX2RldiA9IE5VTEw7XFxuMjQ2OTpcXHRcXHRkZXZpbmZvLVxcdTAwM2VjaSA9IGJyY21mX2NoaXBfYXR0YWNoKGRldmluZm8sIHBkZXYtXFx1MDAzZWRldmljZSxcXG4yNDcwOlxcdFxcdFxcdFxcdFxcdFxcdFxcdTAwMjZicmNtZl9wY2llX2J1c2NvcmVfb3BzKTtcXG4yNDcxOlxcdFxcdGlmIChJU19FUlIoZGV2aW5mby1cXHUwMDNlY2kpKSB7XFxuMjQ3MjpcXHRcXHRcXHRyZXQgPSBQVFJfRVJSKGRldmluZm8tXFx1MDAzZWNpKTtcXG4yNDczOlxcdFxcdFxcdGRldmluZm8tXFx1MDAzZWNpID0gTlVMTDtcXG4yNDc0OlxcdFxcdFxcdGdvdG8gZmFpbDtcXG4yNDc1OlxcdFxcdH1cXG4yNDc2OlxcdFxcbjI0Nzc6XFx0XFx0Y29yZSA9IGJyY21mX2NoaXBfZ2V0X2NvcmUoZGV2aW5mby1cXHUwMDNlY2ksIEJDTUFfQ09SRV9QQ0lFMik7XFxuMjQ3ODpcXHRcXHRpZiAoY29yZS1cXHUwMDNlcmV2IFxcdTAwM2U9IDY0KVxcbjI0Nzk6XFx0XFx0XFx0ZGV2aW5mby1cXHUwMDNlcmVnaW5mbyA9IFxcdTAwMjZicmNtZl9yZWdpbmZvXzY0O1xcbjI0ODA6XFx0XFx0ZWxzZVxcbjI0ODE6XFx0XFx0XFx0ZGV2aW5mby1cXHUwMDNlcmVnaW5mbyA9IFxcdTAwMjZicmNtZl9yZWdpbmZvX2RlZmF1bHQ7XFxuMjQ4MjpcXHRcXG4yNDgzOlxcdFxcdHBjaWVfYnVzX2RldiA9IGt6YWxsb2Nfb2JqKCpwY2llX2J1c19kZXYpO1xcbjI0ODQ6XFx0XFx0aWYgKHBjaWVfYnVzX2RldiA9PSBOVUxMKSB7XFxuMjQ4NTpcXHRcXHRcXHRyZXQgPSAtRU5PTUVNO1xcbjI0ODY6XFx0XFx0XFx0Z290byBmYWlsO1xcbjI0ODc6XFx0XFx0fVxcbjI0ODg6XFx0XFxuMjQ4OTpcXHRcXHRkZXZpbmZvLVxcdTAwM2VzZXR0aW5ncyA9IGJyY21mX2dldF9tb2R1bGVfcGFyYW0oXFx1MDAyNmRldmluZm8tXFx1MDAzZXBkZXYtXFx1MDAzZWRldixcXG4yNDkwOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIEJSQ01GX0JVU1RZUEVfUENJRSxcXG4yNDkxOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIGRldmluZm8tXFx1MDAzZWNpLVxcdTAwM2VjaGlwLFxcbjI0OTI6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgZGV2aW5mby1cXHUwMDNlY2ktXFx1MDAzZWNoaXByZXYpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxODo1ODoxNi4yMjIxMzgyMjlaIiwiU2VxIjo4OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Njc2NzgwMzgwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC4uLlxuXG4qKk15IFRha2Ugb24gVGhpcyBDaGlwIEF0dGFjaG1lbnQgUHJvY2VzcyoqXG5cbkFscmlnaHQsIHNvIGBicmNtZl9jaGlwX2F0dGFjaGAgaXMgdGhlIGtleSBmdW5jdGlvbiBoZXJlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCdzIHRoZSBnYXRld2F5IGZvciBpZGVudGlmeWluZyB0aGUgc3BlY2lmaWMgQnJvYWRjb20gY2hpcC4gSXQgc2VlbXMgbGlrZSBpdCdzIGNydWNpYWwgZm9yIHRoZSBkZXZpY2UncyBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZS4gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IHRoaXMgZnVuY3Rpb24gbGlrZWx5IGRpZ3MgaW50byB0aGUgUENJIG1lbW9yeSBzcGFjZSB0byByZWFkIGNydWNpYWwgY2hpcCBpZGVudGlmaWNhdGlvbiBpbmZvcm1hdGlvbi4gVGhpcyBpcyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nLCBiZWNhdXNlIGlmIEknbSB1bmRlcnN0YW5kaW5nIHRoaXMgY29ycmVjdGx5LCB0aGVuIFN5emthbGxlciwgd2hpY2ggY2FuIGVtdWxhdGUgUENJIGRldmljZXMsIGNvdWxkIHBvdGVudGlhbGx5IHBsYXkgYSByb2xlIGhlcmUuIEJ5IHByb3ZpZGluZyB0aGUgZXhhY3QgZXhwZWN0ZWQgdmFsdWVzIHRoYXQgYGJyY21mX2NoaXBfYXR0YWNoYCBpcyBsb29raW5nIGZvciB3aXRoaW4gdGhhdCBlbXVsYXRlZCBQQ0kgc3BhY2UsIHdlIHNob3VsZCBiZSBhYmxlIHRvIHRyaWNrIHRoZSBmdW5jdGlvbi4gSWYgd2UgY2FuIGNvcnJlY3RseSBwcmVzZW50IHRoZSBleHBlY3RlZCBjaGlwIGlkZW50aWZpY2F0aW9uLCB0aGVuIHRoZSBuZXh0IGNydWNpYWwgc3RlcCBzaG91bGQgYmUgdHJpZ2dlcmVkLiBUaGUgZnVuY3Rpb24gd2lsbCBsaWtlbHkgZm9sbG93IHRoZSBwYXRoIHRvIHJlcXVlc3QgZmlybXdhcmUgYW5kIGNvbnRpbnVlIHRoZSBicmluZy11cCBvZiB0aGUgZGV2aWNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MjEwNywiT3V0cHV0VG9rZW5zIjo1NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTg6NTg6MjIuOTg5OTQ2MzE5WiIsIlNlcSI6OTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0NjAzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI1NDAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI1NDA6XFx0XFx0XFx0YnJlYWs7XFxuMjU0MTpcXHRcXHRjYXNlIEJSQ01GX0ZXVkVORE9SX0NZVzpcXG4yNTQyOlxcdFxcdGRlZmF1bHQ6XFxuMjU0MzpcXHRcXHRcXHRicmVhaztcXG4yNTQ0OlxcdFxcdH1cXG4yNTQ1OlxcdFxcbjI1NDY6XFx0I2lmZGVmIERFQlVHXFxuMjU0NzpcXHRcXHQvKiBTZXQgdXAgdGhlIGZ3Y29uIHRpbWVyICovXFxuMjU0ODpcXHRcXHR0aW1lcl9zZXR1cChcXHUwMDI2ZGV2aW5mby1cXHUwMDNldGltZXIsIGJyY21mX3BjaWVfZndjb24sIDApO1xcbjI1NDk6XFx0I2VuZGlmXFxuMjU1MDpcXHRcXG4yNTUxOlxcdFxcdGZ3cmVxID0gYnJjbWZfcGNpZV9wcmVwYXJlX2Z3X3JlcXVlc3QoZGV2aW5mbyk7XFxuMjU1MjpcXHRcXHRpZiAoIWZ3cmVxKSB7XFxuMjU1MzpcXHRcXHRcXHRyZXQgPSAtRU5PTUVNO1xcbjI1NTQ6XFx0XFx0XFx0Z290byBmYWlsX2JyY21mO1xcbjI1NTU6XFx0XFx0fVxcbjI1NTY6XFx0XFxuMjU1NzpcXHRcXHRyZXQgPSBicmNtZl9md19nZXRfZmlybXdhcmVzKGJ1cy1cXHUwMDNlZGV2LCBmd3JlcSwgYnJjbWZfcGNpZV9zZXR1cCk7XFxuMjU1ODpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbjI1NTk6XFx0XFx0XFx0a2ZyZWUoZndyZXEpO1xcbjI1NjA6XFx0XFx0XFx0Z290byBmYWlsX2JyY21mO1xcbjI1NjE6XFx0XFx0fVxcbjI1NjI6XFx0XFx0cmV0dXJuIDA7XFxuMjU2MzpcXHRcXG4yNTY0OlxcdGZhaWxfYnJjbWY6XFxuMjU2NTpcXHRcXHRicmNtZl9mcmVlKFxcdTAwMjZkZXZpbmZvLVxcdTAwM2VwZGV2LVxcdTAwM2VkZXYpO1xcbjI1NjY6XFx0ZmFpbF9idXM6XFxuMjU2NzpcXHRcXHRrZnJlZShidXMtXFx1MDAzZW1zZ2J1Zik7XFxuMjU2ODpcXHRcXHRrZnJlZShidXMpO1xcbjI1Njk6XFx0ZmFpbDpcXG4yNTcwOlxcdFxcdGJyY21mX2VycihOVUxMLCBcXFwiZmFpbGVkICV4OiV4XFxcXG5cXFwiLCBwZGV2LVxcdTAwM2V2ZW5kb3IsIHBkZXYtXFx1MDAzZWRldmljZSk7XFxuMjU3MTpcXHRcXHRicmNtZl9wY2llX3JlbGVhc2VfcmVzb3VyY2UoZGV2aW5mbyk7XFxuMjU3MjpcXHRcXHRpZiAoZGV2aW5mby1cXHUwMDNlY2kpXFxuMjU3MzpcXHRcXHRcXHRicmNtZl9jaGlwX2RldGFjaChkZXZpbmZvLVxcdTAwM2VjaSk7XFxuMjU3NDpcXHRcXHRpZiAoZGV2aW5mby1cXHUwMDNlc2V0dGluZ3MpXFxuMjU3NTpcXHRcXHRcXHRicmNtZl9yZWxlYXNlX21vZHVsZV9wYXJhbShkZXZpbmZvLVxcdTAwM2VzZXR0aW5ncyk7XFxuMjU3NjpcXHRcXHRrZnJlZShwY2llX2J1c19kZXYpO1xcbjI1Nzc6XFx0XFx0a2ZyZWUoZGV2aW5mbyk7XFxuMjU3ODpcXHRcXHRyZXR1cm4gcmV0O1xcbjI1Nzk6XFx0fVxcbjI1ODA6XFx0XFxuMjU4MTpcXHRcXG4yNTgyOlxcdHN0YXRpYyB2b2lkXFxuMjU4MzpcXHRicmNtZl9wY2llX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4yNTg0OlxcdHtcXG4yNTg1OlxcdFxcdHN0cnVjdCBicmNtZl9wY2llZGV2X2luZm8gKmRldmluZm87XFxuMjU4NjpcXHRcXHRzdHJ1Y3QgYnJjbWZfYnVzICpidXM7XFxuMjU4NzpcXHRcXG4yNTg4OlxcdFxcdGJyY21mX2RiZyhQQ0lFLCBcXFwiRW50ZXJcXFxcblxcXCIpO1xcbjI1ODk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE4OjU4OjIyLjk5MDE5NTA5OFoiLCJTZXEiOjkxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Njg1OTI3Mzg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhlIGV4cGVydCwgb2YgdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIHRoZSBGaXJtd2FyZSBMb2FkaW5nIFNlcXVlbmNlKipcblxuT2theSwgc28gd2UncmUgbG9va2luZyBhdCBhIHNjZW5hcmlvIHdoZXJlIGBicmNtZl9md19nZXRfZmlybXdhcmVzYCBpcyBiZWluZyBjYWxsZWQsIGFuZCBJIGtub3cgdGhhdCBtZWFucyB3ZSdyZSBkZWFsaW5nIHdpdGggYXN5bmNocm9ub3VzIGZpcm13YXJlIGxvYWRpbmcsIHdoaWNoIGlzIHN0YW5kYXJkIHByYWN0aWNlIGZvciB0aGlzIGRyaXZlci4gVGhlIGtleSBjb25jZXJuIGhlcmUgaXMgdGhlIHN1YnNlcXVlbnQgY2FsbCB0byBgYnJjbWZfcGNpZV9zZXR1cGAgd2hlbiB0aGUgZmlybXdhcmUgZmV0Y2ggZmFpbHMgKGluZGljYXRlZCBieSBgcmV0ICE9IDBgKS4gVGhhdCdzIHRoZSBjcml0aWNhbCBicmFuY2hpbmcgcG9pbnQgdG8gaW52ZXN0aWdhdGUuIEl0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoYXQgdGhlIGZhaWx1cmUgdG8gZmluZCB0aGUgZmlybXdhcmUgaXMgdHJpZ2dlcmluZyBhIGRpZmZlcmVudCBzZXR1cCBwYXRoLiBOb3csIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkaXZlIGRlZXBlciBpbnRvIGhvdyBgYnJjbWZfcGNpZV9zZXR1cGAgaGFuZGxlcyB0aGlzIGZhaWx1cmUgY29uZGl0aW9uLCBiZWNhdXNlIHRoYXQncyB3aGVyZSB0aGUgcHJvYmxlbSBpcyBwcm9iYWJseSByZXNpZGluZyBpZiB0aGlzIGZsb3cgaXMgYSBwcm9ibGVtLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgYWx0ZXJuYXRlIHBhdGggaXMgZG9pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzMTIxLCJPdXRwdXRUb2tlbnMiOjU1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxODo1ODoyNy42NzYxMjYzMTNaIiwiU2VxIjo5MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMzNzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjEzOSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjEzOTpcXHRzdGF0aWMgdm9pZCBicmNtZl9wY2llX3NldHVwKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHJldCxcXG4yMTQwOlxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGJyY21mX2Z3X3JlcXVlc3QgKmZ3cmVxKVxcbjIxNDE6XFx0e1xcbjIxNDI6XFx0XFx0Y29uc3Qgc3RydWN0IGZpcm13YXJlICpmdztcXG4yMTQzOlxcdFxcdHZvaWQgKm52cmFtO1xcbjIxNDQ6XFx0XFx0c3RydWN0IGJyY21mX2J1cyAqYnVzO1xcbjIxNDU6XFx0XFx0c3RydWN0IGJyY21mX3BjaWVkZXYgKnBjaWVfYnVzX2RldjtcXG4yMTQ2OlxcdFxcdHN0cnVjdCBicmNtZl9wY2llZGV2X2luZm8gKmRldmluZm87XFxuMjE0NzpcXHRcXHRzdHJ1Y3QgYnJjbWZfY29tbW9ucmluZyAqKmZsb3dyaW5ncztcXG4yMTQ4OlxcdFxcdHUzMiBpLCBudnJhbV9sZW47XFxuMjE0OTpcXHRcXG4yMTUwOlxcdFxcdGJ1cyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xcbjIxNTE6XFx0XFx0cGNpZV9idXNfZGV2ID0gYnVzLVxcdTAwM2VidXNfcHJpdi5wY2llO1xcbjIxNTI6XFx0XFx0ZGV2aW5mbyA9IHBjaWVfYnVzX2Rldi1cXHUwMDNlZGV2aW5mbztcXG4yMTUzOlxcdFxcbjIxNTQ6XFx0XFx0LyogY2hlY2sgZmlybXdhcmUgbG9hZGluZyByZXN1bHQgKi9cXG4yMTU1OlxcdFxcdGlmIChyZXQpXFxuMjE1NjpcXHRcXHRcXHRnb3RvIGZhaWw7XFxuMjE1NzpcXHRcXG4yMTU4OlxcdFxcdGJyY21mX3BjaWVfYXR0YWNoKGRldmluZm8pO1xcbjIxNTk6XFx0XFxuMjE2MDpcXHRcXHRmdyA9IGZ3cmVxLVxcdTAwM2VpdGVtc1tCUkNNRl9QQ0lFX0ZXX0NPREVdLmJpbmFyeTtcXG4yMTYxOlxcdFxcdG52cmFtID0gZndyZXEtXFx1MDAzZWl0ZW1zW0JSQ01GX1BDSUVfRldfTlZSQU1dLm52X2RhdGEuZGF0YTtcXG4yMTYyOlxcdFxcdG52cmFtX2xlbiA9IGZ3cmVxLVxcdTAwM2VpdGVtc1tCUkNNRl9QQ0lFX0ZXX05WUkFNXS5udl9kYXRhLmxlbjtcXG4yMTYzOlxcdFxcdGRldmluZm8tXFx1MDAzZWNsbV9mdyA9IGZ3cmVxLVxcdTAwM2VpdGVtc1tCUkNNRl9QQ0lFX0ZXX0NMTV0uYmluYXJ5O1xcbjIxNjQ6XFx0XFx0ZGV2aW5mby1cXHUwMDNldHhjYXBfZncgPSBmd3JlcS1cXHUwMDNlaXRlbXNbQlJDTUZfUENJRV9GV19UWENBUF0uYmluYXJ5O1xcbjIxNjU6XFx0XFx0a2ZyZWUoZndyZXEpO1xcbjIxNjY6XFx0XFxuMjE2NzpcXHRcXHRyZXQgPSBicmNtZl9jaGlwX2dldF9yYW1pbmZvKGRldmluZm8tXFx1MDAzZWNpKTtcXG4yMTY4OlxcdFxcdGlmIChyZXQpIHtcXG4yMTY5OlxcdFxcdFxcdGJyY21mX2VycihidXMsIFxcXCJGYWlsZWQgdG8gZ2V0IFJBTSBpbmZvXFxcXG5cXFwiKTtcXG4yMTcwOlxcdFxcdFxcdHJlbGVhc2VfZmlybXdhcmUoZncpO1xcbjIxNzE6XFx0XFx0XFx0YnJjbWZfZndfbnZyYW1fZnJlZShudnJhbSk7XFxuMjE3MjpcXHRcXHRcXHRnb3RvIGZhaWw7XFxuMjE3MzpcXHRcXHR9XFxuMjE3NDpcXHRcXG4yMTc1OlxcdFxcdC8qIFNvbWUgb2YgdGhlIGZpcm13YXJlcyBoYXZlIHRoZSBzaXplIG9mIHRoZSBtZW1vcnkgb2YgdGhlIGRldmljZVxcbjIxNzY6XFx0XFx0ICogZGVmaW5lZCBpbnNpZGUgdGhlIGZpcm13YXJlLiBUaGlzIGlzIGJlY2F1c2UgcGFydCBvZiB0aGUgbWVtb3J5IGluXFxuMjE3NzpcXHRcXHQgKiB0aGUgZGV2aWNlIGlzIHNoYXJlZCBhbmQgdGhlIGRldmlzaW9uIGlzIGRldGVybWluZWQgYnkgRlcuIFBhcnNlXFxuMjE3ODpcXHRcXHQgKiB0aGUgZmlybXdhcmUgYW5kIGFkanVzdCB0aGUgY2hpcCBtZW1vcnkgc2l6ZSBub3cuXFxuMjE3OTpcXHRcXHQgKi9cXG4yMTgwOlxcdFxcdGJyY21mX3BjaWVfYWRqdXN0X3JhbXNpemUoZGV2aW5mbywgKHU4ICopZnctXFx1MDAzZWRhdGEsIGZ3LVxcdTAwM2VzaXplKTtcXG4yMTgxOlxcdFxcbjIxODI6XFx0XFx0cmV0ID0gYnJjbWZfcGNpZV9kb3dubG9hZF9md19udnJhbShkZXZpbmZvLCBmdywgbnZyYW0sIG52cmFtX2xlbik7XFxuMjE4MzpcXHRcXHRpZiAocmV0KVxcbjIxODQ6XFx0XFx0XFx0Z290byBmYWlsO1xcbjIxODU6XFx0XFxuMjE4NjpcXHRcXHRkZXZpbmZvLVxcdTAwM2VzdGF0ZSA9IEJSQ01GTUFDX1BDSUVfU1RBVEVfVVA7XFxuMjE4NzpcXHRcXG4yMTg4OlxcdFxcdHJldCA9IGJyY21mX3BjaWVfaW5pdF9yaW5nYnVmZmVycyhkZXZpbmZvKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTg6NTg6MjcuNjc2MzYzMDQzWiIsIlNlcSI6OTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg1ODE0MTUxNTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqVVNCIEZpcm13YXJlIERlcGVuZGVuY3kgSW5xdWlyeSoqXG5cbk9rYXksIHNvIGlmIGByZXRgIGlzbid0IHplcm8sIHdlIGp1bXAgc3RyYWlnaHQgdG8gYGZhaWxgIHdoaWNoIG1lYW5zIGEgY2xlYW51cCBhbmQgbm8gYGJyY21mX2F0dGFjaGAgY2FsbC4gVGhlcmVmb3JlLCBmb3IgUENJLCBmaXJtd2FyZSBpcyAqZGVmaW5pdGVseSogcmVxdWlyZWQuIEJ1dCB3aGF0J3MgdGhlIGRlYWwgd2l0aCBVU0I/IEkgcmVjYWxsIHdlIHNhdyBlYXJsaWVyIHRoYXQgYGJyY21mX3VzYl9kbG5lZWRlZGAgY2FuIHJldHVybiBmYWxzZSBpZiB0aGUgZW11bGF0ZWQgZGV2aWNlIGNvbWVzIGJhY2sgd2l0aCBgQlJDTUZfUE9TVEJPT1RfSURgLlxuXG5Ob3csIGRvZXMgVVNCIGFjdHVhbGx5IHVzZSBgQlJDTUZfRldWRU5ET1JfQ1lXYD8gTGV0J3MgZG91YmxlLWNoZWNrIHRoZSBgYnJjbWZfdXNiX2RldmlkX3RhYmxlYCBqdXN0IHRvIGJlIHN1cmUuIEFscmlnaHQsIHllcCwgbG9va2luZyBhdCB0aGF0IHRhYmxlIGFnYWluLCBldmVyeSBVU0IgZGV2aWNlIGxpc3RlZCB0aGVyZSBzZWVtcyB0byBiZSB1c2luZyBgQlJDTUZfRldWRU5ET1JfV0NDYC5cblxuV2FpdCBhIG1pbnV0ZSwgd2hhdCBhYm91dCB0aGF0IGBDWVBSRVNTX1VTQl9ERVZJQ0UoQ1lfVVNCXzQzNzNfREVWSUNFX0lEKWAgZW50cnk/IFRoYXQncyB1c2luZyB0aGUgYENZUFJFU1NfVVNCX0RFVklDRWAgbWFjcm8sIHdoaWNoIG1lYW5zIGBkcml2ZXJfaW5mb2AgaXMgYmVpbmcgc2V0IHRvIGBCUkNNRl9GV1ZFTkRPUl9XQ0NgLlxuXG5Ib2xkIG9uLCBJIG5lZWQgdG8gYmUgKmFic29sdXRlbHkqIGNlcnRhaW4uIElzIHRoZXJlICphbnkqIFVTQiBkZXZpY2UgdXNpbmcgYEJSQ01GX0ZXVkVORE9SX0NZV2A/IEknbSBnb2luZyBiYWNrIHRvIHRoZSBzb3VyY2UsIHRvIGBicmNtZm1hYy91c2IuY2AsIHRvIG1ldGljdWxvdXNseSBjaGVjayBhZ2Fpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQzMTAsIk91dHB1dFRva2VucyI6NTQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxODo1ODozNi4yNTc3ODIxMDVaIiwiU2VxIjo5NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg0ODMyMzQyLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJCUkNNRl9GV1ZFTkRPUl9DWVdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxODo1ODozNi4zNDI2MjM5NzZaIiwiU2VxIjo5NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTAxNjA5OTk0OTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgRnV6emluZyBTdHJhdGVneTogUmVhY2hpbmcgYGJyY21mX2N5d19leHRlcm5hbF9hdXRoYCB2aWEgU3l6a2FsbGVyKipcblxuT2theSwgc28gdGhlIGluaXRpYWwgdGhvdWdodCB3YXMgU0RJTyBhbmQgYENZV2AsIGJ1dCB0aGF0J3MgYSBkZWFkIGVuZCDigJMgU3l6a2FsbGVyIGRvZXNuJ3QgaGF2ZSBhbiBTRElPIGZ1enplci4gTGV0J3MgcGl2b3QgdG8gUENJLCBzaW5jZSBpdCAqZG9lcyogaGF2ZSBhIFBDSSBmdXp6ZXIuIEFuZCB3ZSd2ZSBzZWVuIGBDWVdgIHVzZWQgaW4gUENJIGRldmljZXMgbGlrZSBgQlJDTV9QQ0lFXzQzNTk2X0RFVklDRV9JRGAgYW5kIGBDWV9QQ0lFXzU0NTkxX0RFVklDRV9JRGAuIFRoZSBjYXRjaCB3aXRoIFBDSSBpcyB0aGUgZmlybXdhcmUgcmVxdWlyZW1lbnQuXG5cbkJ1dCB3YWl0LCBTeXprYWxsZXIgdXNlcyBEZWJpYW4gaW1hZ2VzLiBBbmQgRGViaWFuIGluY2x1ZGVzIGBsaW51eC1maXJtd2FyZWAhIFRoYXQgc2hvdWxkIGdpdmUgdXMgZmlybXdhcmVzIGxpa2UgYGJyY21mbWFjNDM1OTYtcGNpZS5iaW5gLiBJZiB0aGUgZmlybXdhcmUgbG9hZHMsIGByZXF1ZXN0X2Zpcm13YXJlYCB3aWxsIHN1Y2NlZWQsIHdoaWNoIG1lYW5zIHdlIGNhbiBjb250aW51ZS5cblxuRm9sbG93aW5nIHRoYXQgcGF0aCwgYGJyY21mX3BjaWVfc2V0dXBgIHdpbGwgZXhlY3V0ZS4gVGhhdCBjYWxscyBgYnJjbWZfcGNpZV9kb3dubG9hZF9md19udnJhbWAsIHdyaXRpbmcgdGhlIGZpcm13YXJlIHRvIFBDSSBtZW1vcnkuIFN5emthbGxlciBlbXVsYXRlcyBQQ0ksIHNvIHRoYXQncyBkb2FibGUuIFRoZW4gYGJyY21mX3BjaWVfaW5pdF9yaW5nYnVmZmVyc2Agc2V0cyB1cCBETUEgcmluZ3MsIGFuZCB0aGUgY3J1Y2lhbCBwYXJ0cyBhcmUgYGJyY21mX2FsbG9jYCBhbmQgYGJyY21mX2F0dGFjaGAuXG5cbmBicmNtZl9hdHRhY2hgIGlzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcgYmVjYXVzZSBpdCByZWdpc3RlcnMgYGJyY21mX2N5d19leHRlcm5hbF9hdXRoYC4gTm93LCBjYW4gd2UgdHJpZ2dlciB0aGF0IGZyb20gdXNlcnNwYWNlPyBDYW4gd2UgcmVhY2ggaXQgdmlhIG5ldGxpbms/IFllcywgYE5MODAyMTFfQ01EX0VYVEVSTkFMX0FVVEhgIGNhbGxzIGByZGV2X2V4dGVybmFsX2F1dGhgLCBhbmQgdGhhdCwgaW4gdHVybiwgY2FsbHMgYHJkZXYtXHUwMDNlb3BzLVx1MDAzZWV4dGVybmFsX2F1dGhgLiBJZiB0aGUgZGV2aWNlIGlzIHJlZ2lzdGVyZWQsIGBicmNtZl9jeXdfZXh0ZXJuYWxfYXV0aGAgc2hvdWxkIGJlIHJlYWNoYWJsZS5cblxuVGhlIHF1ZXN0aW9uIG5vdyBpcywgZG9lcyBgYnJjbWZfcGNpZV9zZXR1cGAgYWN0dWFsbHkgKnN1Y2NlZWQqIGluIFN5emthbGxlcj8gV2UgbmVlZCB0byBsb29rIGF0IGBicmNtZl9wY2llX2Rvd25sb2FkX2Z3X252cmFtYCB0byBjb25maXJtLiBJdCdzIHRpbWUgdG8gZGlnIGludG8gdGhlIGRldGFpbHMgdG8gdmVyaWZ5IHRoZSBzZXR1cCBwcm9jZXNzIGluIFN5emthbGxlci5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQ5MDksIk91dHB1dFRva2VucyI6NTUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTg6NTg6NDYuNTAzNjI5MDUzWiIsIlNlcSI6OTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM5Nzg0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE4MjAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE4MjA6XFx0XFx0XFx0XFx0ICBkZXZpbmZvLVxcdTAwM2V0Y20pO1xcbjE4MjE6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTgyMjpcXHRcXHR9XFxuMTgyMzpcXHRcXHRicmNtZl9kYmcoUENJRSwgXFxcIlBoeXMgYWRkciA6IHJlZyBzcGFjZSA9ICVwIGJhc2UgYWRkciAlIzAxNmxseFxcXFxuXFxcIixcXG4xODI0OlxcdFxcdFxcdCAgZGV2aW5mby1cXHUwMDNlcmVncywgKHVuc2lnbmVkIGxvbmcgbG9uZyliYXIwX2FkZHIpO1xcbjE4MjU6XFx0XFx0YnJjbWZfZGJnKFBDSUUsIFxcXCJQaHlzIGFkZHIgOiBtZW0gc3BhY2UgPSAlcCBiYXNlIGFkZHIgJSMwMTZsbHggc2l6ZSAweCV4XFxcXG5cXFwiLFxcbjE4MjY6XFx0XFx0XFx0ICBkZXZpbmZvLVxcdTAwM2V0Y20sICh1bnNpZ25lZCBsb25nIGxvbmcpYmFyMV9hZGRyLFxcbjE4Mjc6XFx0XFx0XFx0ICAodW5zaWduZWQgaW50KWJhcjFfc2l6ZSk7XFxuMTgyODpcXHRcXG4xODI5OlxcdFxcdHJldHVybiAwO1xcbjE4MzA6XFx0fVxcbjE4MzE6XFx0XFxuMTgzMjpcXHRcXG4xODMzOlxcdHN0YXRpYyB2b2lkIGJyY21mX3BjaWVfcmVsZWFzZV9yZXNvdXJjZShzdHJ1Y3QgYnJjbWZfcGNpZWRldl9pbmZvICpkZXZpbmZvKVxcbjE4MzQ6XFx0e1xcbjE4MzU6XFx0XFx0aWYgKGRldmluZm8tXFx1MDAzZXRjbSlcXG4xODM2OlxcdFxcdFxcdGlvdW5tYXAoZGV2aW5mby1cXHUwMDNldGNtKTtcXG4xODM3OlxcdFxcdGlmIChkZXZpbmZvLVxcdTAwM2VyZWdzKVxcbjE4Mzg6XFx0XFx0XFx0aW91bm1hcChkZXZpbmZvLVxcdTAwM2VyZWdzKTtcXG4xODM5OlxcdFxcbjE4NDA6XFx0XFx0cGNpX2Rpc2FibGVfZGV2aWNlKGRldmluZm8tXFx1MDAzZXBkZXYpO1xcbjE4NDE6XFx0fVxcbjE4NDI6XFx0XFxuMTg0MzpcXHRcXG4xODQ0OlxcdHN0YXRpYyB1MzIgYnJjbWZfcGNpZV9idXNjb3JlX3ByZXBfYWRkcihjb25zdCBzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdTMyIGFkZHIpXFxuMTg0NTpcXHR7XFxuMTg0NjpcXHRcXHR1MzIgcmV0X2FkZHI7XFxuMTg0NzpcXHRcXG4xODQ4OlxcdFxcdHJldF9hZGRyID0gYWRkciBcXHUwMDI2IChCUkNNRl9QQ0lFX0JBUjBfUkVHX1NJWkUgLSAxKTtcXG4xODQ5OlxcdFxcdGFkZHIgXFx1MDAyNj0gfihCUkNNRl9QQ0lFX0JBUjBfUkVHX1NJWkUgLSAxKTtcXG4xODUwOlxcdFxcdHBjaV93cml0ZV9jb25maWdfZHdvcmQocGRldiwgQlJDTUZfUENJRV9CQVIwX1dJTkRPVywgYWRkcik7XFxuMTg1MTpcXHRcXG4xODUyOlxcdFxcdHJldHVybiByZXRfYWRkcjtcXG4xODUzOlxcdH1cXG4xODU0OlxcdFxcbjE4NTU6XFx0XFxuMTg1NjpcXHRzdGF0aWMgdTMyIGJyY21mX3BjaWVfYnVzY29yZV9yZWFkMzIodm9pZCAqY3R4LCB1MzIgYWRkcilcXG4xODU3OlxcdHtcXG4xODU4OlxcdFxcdHN0cnVjdCBicmNtZl9wY2llZGV2X2luZm8gKmRldmluZm8gPSAoc3RydWN0IGJyY21mX3BjaWVkZXZfaW5mbyAqKWN0eDtcXG4xODU5OlxcdFxcbjE4NjA6XFx0XFx0YWRkciA9IGJyY21mX3BjaWVfYnVzY29yZV9wcmVwX2FkZHIoZGV2aW5mby1cXHUwMDNlcGRldiwgYWRkcik7XFxuMTg2MTpcXHRcXHRyZXR1cm4gYnJjbWZfcGNpZV9yZWFkX3JlZzMyKGRldmluZm8sIGFkZHIpO1xcbjE4NjI6XFx0fVxcbjE4NjM6XFx0XFxuMTg2NDpcXHRcXG4xODY1OlxcdHN0YXRpYyB2b2lkIGJyY21mX3BjaWVfYnVzY29yZV93cml0ZTMyKHZvaWQgKmN0eCwgdTMyIGFkZHIsIHUzMiB2YWx1ZSlcXG4xODY2OlxcdHtcXG4xODY3OlxcdFxcdHN0cnVjdCBicmNtZl9wY2llZGV2X2luZm8gKmRldmluZm8gPSAoc3RydWN0IGJyY21mX3BjaWVkZXZfaW5mbyAqKWN0eDtcXG4xODY4OlxcdFxcbjE4Njk6XFx0XFx0YWRkciA9IGJyY21mX3BjaWVfYnVzY29yZV9wcmVwX2FkZHIoZGV2aW5mby1cXHUwMDNlcGRldiwgYWRkcik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE4OjU4OjQ2LjUwNDAzMTkxM1oiLCJTZXEiOjk3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MTYxNjEzNDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKk5hdmlnYXRpbmcgdGhlIEZpcm13YXJlIERvd25sb2FkIFByb2Nlc3MqKlxuXG5Pa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJIG5lZWQgdG8gemVybyBpbiBvbiBzb21ldGhpbmcgc3BlY2lmaWMgaGVyZS4gSSB3YW50IHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0J3MgaGFwcGVuaW5nIHdpdGhpbiB0aGUgYGJyY21mX3BjaWVfZG93bmxvYWRfZndfbnZyYW1gIGZ1bmN0aW9uLiBUaGlzIGlzIGNyaXRpY2FsLiBJdCdzIGxpa2VseSBpbnZvbHZlZCBpbiB0aGUgaW5pdGlhbCB0cmFuc2ZlciBvZiBmaXJtd2FyZSBhbmQgTlZSQU0gZGF0YSBvdmVyIHRoZSBQQ0llIGludGVyZmFjZSwgd2hpY2ggaXMgYSBmdW5kYW1lbnRhbCBzdGVwIGluIGJyaW5naW5nIHVwIHRoaXMgQnJvYWRjb20gV2ktRmkgYWRhcHRlci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBkb3dubG9hZCBwcm9jZXNzIGF0IGEgZ3JhbnVsYXIgbGV2ZWwsIHNwZWNpZmljYWxseSBob3cgdGhlIGZpcm13YXJlIGFuZCBOVlJBTSBhcmUgaGFuZGxlZC4gVGhpcyBmdW5jdGlvbiBpcyBsaWtlbHkgdGhlIGxpbmNocGluIG9mIGluaXRpYWwgYnJpbmctdXAsIGFuZCB1bmRlcnN0YW5kaW5nIGl0IGlzIHBhcmFtb3VudCB0byB0aGUgb3ZlcmFsbCBwaWN0dXJlLiBJdOKAmXMgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgZHJpdmVyIGludGVyYWN0cyB3aXRoIHRoZSBoYXJkd2FyZSBhdCBpdHMgbW9zdCBiYXNpYyBsZXZlbC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDY4MDcsIk91dHB1dFRva2VucyI6NTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE4OjU4OjU1LjY2NTY1MTE1NFoiLCJTZXEiOjk4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTM0OTgwNjc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJyY21mX3BjaWVfZG93bmxvYWRfZndfbnZyYW1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jPTE2ODU9YnJjbWZfcGNpZV9wcm92aWRlX3JhbmRvbV9ieXRlcyhzdHJ1Y3QgYnJjbWZfcGNpZWRldl9pbmZvICpkZXZpbmZvLCB1MzIgYWRkcmVzcylcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmMtMTY5Mi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jOjE2OTM6c3RhdGljIGludCBicmNtZl9wY2llX2Rvd25sb2FkX2Z3X252cmFtKHN0cnVjdCBicmNtZl9wY2llZGV2X2luZm8gKmRldmluZm8sXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuYy0xNjk0LVxcdFxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncsIHZvaWQgKm52cmFtLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuYz0yMTM5PXN0YXRpYyB2b2lkIGJyY21mX3BjaWVfc2V0dXAoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgcmV0LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuYy0yMTgxLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmM6MjE4MjpcXHRyZXQgPSBicmNtZl9wY2llX2Rvd25sb2FkX2Z3X252cmFtKGRldmluZm8sIGZ3LCBudnJhbSwgbnZyYW1fbGVuKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jLTIxODMtXFx0aWYgKHJldClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTg6NTg6NTYuMjAwNjM4OTU4WiIsIlNlcSI6OTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgxMDI3MjM2MjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB3aGF0J3MgZ29pbmcgb24gaW4gdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkFuYWx5emluZyB0aGUgYGJyY21mX3BjaWVfZG93bmxvYWRfZndfbnZyYW1gIEZ1bmN0aW9uKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYGJyY21mX3BjaWVfZG93bmxvYWRfZndfbnZyYW1gIGZ1bmN0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIGJhc2VkIG9uIHRoZSBuYW1lLCB0aGlzIHByb2JhYmx5IGhhbmRsZXMgdGhlIGRvd25sb2FkIG9mIGZpcm13YXJlIGFuZCBOVlJBTSBkYXRhIHNwZWNpZmljYWxseSBmb3IgYSBCcm9hZGNvbSBXaS1GaSBkZXZpY2UgdXNpbmcgdGhlIFBDSWUgaW50ZXJmYWNlLiBJJ20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgYSBmYWlyIGJpdCBvZiBjb21wbGV4aXR5IGhlcmUsIGdpdmVuIHRoZSBoYXJkd2FyZSBpbnRlcmFjdGlvbiBhbmQgdGhlIHBvdGVudGlhbCBuZWVkIGZvciBlcnJvciBoYW5kbGluZy4gSSdsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZCDigJMgbGlrZWx5IHNvbWUgc29ydCBvZiBjb25maWd1cmF0aW9uIGJsb2NrIG9yIGJ1ZmZlciB0byBiZSB0cmFuc2ZlcnJlZCB0byB0aGUgZGV2aWNlLiBJJ2xsIG5lZWQgdG8gZGlzc2VjdCB0aGUgc3RlcHMgdGhlIGZ1bmN0aW9uIHRha2VzOiBpbml0aWFsaXphdGlvbiwgUENJZSB3cml0ZXMsIGFuZCBhbnkgdmVyaWZpY2F0aW9uIHN0ZXBzIHRvIGVuc3VyZSB0aGUgZG93bmxvYWQgd2FzIHN1Y2Nlc3NmdWwuIEFyZSB0aGV5IHVzaW5nIERNQT8gSG93IGFyZSB0aGV5IGhhbmRsaW5nIHBvdGVudGlhbCBpbnRlcnJ1cHQgaXNzdWVzIGR1cmluZyB0aGUgcHJvY2Vzcz8gTW9zdCBpbXBvcnRhbnRseSBJJ2xsIGJlIGxvb2tpbmcgZm9yIGhvdyB0aGV5IG1hbmFnZSB0aGUgTlZSQU0gZGF0YSBzcGVjaWZpY2FsbHkuIElzIGl0IGEgc2VwYXJhdGUgZG93bmxvYWQsIG9yIGludGVncmF0ZWQgaW50byB0aGUgZmlybXdhcmUgaW1hZ2Ugc29tZWhvdz8gQW55IHBvaW50ZXIgdG8gc3BlY2lmaWMgQnJvYWRjb20gZmlybXdhcmUgYW5kIE5WUkFNIGZvcm1hdHMgd291bGQgYmUgdXNlZnVsIHRvIGRldGVybWluZSBob3cgZGVlcCB0aGlzIHJhYmJpdCBob2xlIGdvZXMuIEknbGwgbmVlZCB0byBjb25zaWRlciB0aGlzIGluIGxpZ2h0IG9mIGFueSBwb3RlbnRpYWwgcGxhdGZvcm0tc3BlY2lmaWMgbnVhbmNlcyB0aGUgY29kZSBtaWdodCBiZSBhZGRyZXNzaW5nLCBsaWtlIGVuZGlhbm5lc3Mgb3IgbWVtb3J5IG1hcHBpbmcuIEknbSBleHBlY3Rpbmcgc29tZSBwcmV0dHkgbG93LWxldmVsIGludGVyYWN0aW9uIHdpdGggaGFyZHdhcmUgcmVnaXN0ZXJzLCBzbyB0aGUgbGV2ZWwgb2YgYWJzdHJhY3Rpb24gd2lsbCBiZSBjcml0aWNhbC4gVWx0aW1hdGVseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbXBsZXRlIHNlcXVlbmNlIG9mIGV2ZW50cyB0aGF0IGVuYWJsZXMgYSBCcm9hZGNvbSBQQ0llIFdpLUZpIGNoaXAgdG8gZ2V0IGl0cyBjb3JlIG9wZXJhdGluZyBjb2RlIGFuZCBwZXJzaXN0ZW50IGNvbmZpZ3VyYXRpb24uIFRoaXMgaXMgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDc0NzIsIk91dHB1dFRva2VucyI6NTUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxODo1OTowNC4zMDMzNjgxMzlaIiwiU2VxIjoxMDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3NTA0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE2OTMsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE2OTM6XFx0c3RhdGljIGludCBicmNtZl9wY2llX2Rvd25sb2FkX2Z3X252cmFtKHN0cnVjdCBicmNtZl9wY2llZGV2X2luZm8gKmRldmluZm8sXFxuMTY5NDpcXHRcXHRcXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3LCB2b2lkICpudnJhbSxcXG4xNjk1OlxcdFxcdFxcdFxcdFxcdFxcdHUzMiBudnJhbV9sZW4pXFxuMTY5NjpcXHR7XFxuMTY5NzpcXHRcXHRzdHJ1Y3QgYnJjbWZfYnVzICpidXMgPSBkZXZfZ2V0X2RydmRhdGEoXFx1MDAyNmRldmluZm8tXFx1MDAzZXBkZXYtXFx1MDAzZWRldik7XFxuMTY5ODpcXHRcXHR1MzIgc2hhcmVkcmFtX2FkZHI7XFxuMTY5OTpcXHRcXHR1MzIgc2hhcmVkcmFtX2FkZHJfd3JpdHRlbjtcXG4xNzAwOlxcdFxcdHUzMiBsb29wX2NvdW50ZXI7XFxuMTcwMTpcXHRcXHRpbnQgZXJyO1xcbjE3MDI6XFx0XFx0dTMyIGFkZHJlc3M7XFxuMTcwMzpcXHRcXHR1MzIgcmVzZXRpbnRyO1xcbjE3MDQ6XFx0XFxuMTcwNTpcXHRcXHRicmNtZl9kYmcoUENJRSwgXFxcIkhhbHQgQVJNLlxcXFxuXFxcIik7XFxuMTcwNjpcXHRcXHRlcnIgPSBicmNtZl9wY2llX2VudGVyX2Rvd25sb2FkX3N0YXRlKGRldmluZm8pO1xcbjE3MDc6XFx0XFx0aWYgKGVycilcXG4xNzA4OlxcdFxcdFxcdHJldHVybiBlcnI7XFxuMTcwOTpcXHRcXG4xNzEwOlxcdFxcdGJyY21mX2RiZyhQQ0lFLCBcXFwiRG93bmxvYWQgRlcgJXNcXFxcblxcXCIsIGRldmluZm8tXFx1MDAzZWZ3X25hbWUpO1xcbjE3MTE6XFx0XFx0bWVtY3B5X3RvaW8oZGV2aW5mby1cXHUwMDNldGNtICsgZGV2aW5mby1cXHUwMDNlY2ktXFx1MDAzZXJhbWJhc2UsXFxuMTcxMjpcXHRcXHRcXHQgICAgKHZvaWQgKilmdy1cXHUwMDNlZGF0YSwgZnctXFx1MDAzZXNpemUpO1xcbjE3MTM6XFx0XFxuMTcxNDpcXHRcXHRyZXNldGludHIgPSBnZXRfdW5hbGlnbmVkX2xlMzIoZnctXFx1MDAzZWRhdGEpO1xcbjE3MTU6XFx0XFx0cmVsZWFzZV9maXJtd2FyZShmdyk7XFxuMTcxNjpcXHRcXG4xNzE3OlxcdFxcdC8qIHJlc2V0IGxhc3QgNCBieXRlcyBvZiBSQU0gYWRkcmVzcy4gdG8gYmUgdXNlZCBmb3Igc2hhcmVkXFxuMTcxODpcXHRcXHQgKiBhcmVhLiBUaGlzIGlkZW50aWZpZXMgd2hlbiBGVyBpcyBydW5uaW5nXFxuMTcxOTpcXHRcXHQgKi9cXG4xNzIwOlxcdFxcdGJyY21mX3BjaWVfd3JpdGVfcmFtMzIoZGV2aW5mbywgZGV2aW5mby1cXHUwMDNlY2ktXFx1MDAzZXJhbXNpemUgLSA0LCAwKTtcXG4xNzIxOlxcdFxcbjE3MjI6XFx0XFx0aWYgKG52cmFtKSB7XFxuMTcyMzpcXHRcXHRcXHRicmNtZl9kYmcoUENJRSwgXFxcIkRvd25sb2FkIE5WUkFNICVzXFxcXG5cXFwiLCBkZXZpbmZvLVxcdTAwM2VudnJhbV9uYW1lKTtcXG4xNzI0OlxcdFxcdFxcdGFkZHJlc3MgPSBkZXZpbmZvLVxcdTAwM2VjaS1cXHUwMDNlcmFtYmFzZSArIGRldmluZm8tXFx1MDAzZWNpLVxcdTAwM2VyYW1zaXplIC1cXG4xNzI1OlxcdFxcdFxcdFxcdCAgbnZyYW1fbGVuO1xcbjE3MjY6XFx0XFx0XFx0bWVtY3B5X3RvaW8oZGV2aW5mby1cXHUwMDNldGNtICsgYWRkcmVzcywgbnZyYW0sIG52cmFtX2xlbik7XFxuMTcyNzpcXHRcXHRcXHRicmNtZl9md19udnJhbV9mcmVlKG52cmFtKTtcXG4xNzI4OlxcdFxcbjE3Mjk6XFx0XFx0XFx0aWYgKGRldmluZm8tXFx1MDAzZWZ3c2VlZCkge1xcbjE3MzA6XFx0XFx0XFx0XFx0c2l6ZV90IHJhbmRfbGVuID0gQlJDTUZfUkFORE9NX1NFRURfTEVOR1RIO1xcbjE3MzE6XFx0XFx0XFx0XFx0c3RydWN0IGJyY21mX3JhbmRvbV9zZWVkX2Zvb3RlciBmb290ZXIgPSB7XFxuMTczMjpcXHRcXHRcXHRcXHRcXHQubGVuZ3RoID0gY3B1X3RvX2xlMzIocmFuZF9sZW4pLFxcbjE3MzM6XFx0XFx0XFx0XFx0XFx0Lm1hZ2ljID0gY3B1X3RvX2xlMzIoQlJDTUZfUkFORE9NX1NFRURfTUFHSUMpLFxcbjE3MzQ6XFx0XFx0XFx0XFx0fTtcXG4xNzM1OlxcdFxcbjE3MzY6XFx0XFx0XFx0XFx0LyogU29tZSBjaGlwcy9maXJtd2FyZXMgZXhwZWN0IGEgYnVmZmVyIG9mIHJhbmRvbVxcbjE3Mzc6XFx0XFx0XFx0XFx0ICogZGF0YSB0byBiZSBwcmVzZW50IGJlZm9yZSBOVlJBTVxcbjE3Mzg6XFx0XFx0XFx0XFx0ICovXFxuMTczOTpcXHRcXHRcXHRcXHRicmNtZl9kYmcoUENJRSwgXFxcIkRvd25sb2FkIHJhbmRvbSBzZWVkXFxcXG5cXFwiKTtcXG4xNzQwOlxcdFxcbjE3NDE6XFx0XFx0XFx0XFx0YWRkcmVzcyAtPSBzaXplb2YoZm9vdGVyKTtcXG4xNzQyOlxcdFxcdFxcdFxcdG1lbWNweV90b2lvKGRldmluZm8tXFx1MDAzZXRjbSArIGFkZHJlc3MsIFxcdTAwMjZmb290ZXIsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE4OjU5OjA0LjMwMzY0NjUzOVoiLCJTZXEiOjEwMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODkzNDg5MDI3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgRmlybXdhcmUgSW5pdGlhbGl6YXRpb24gU2VxdWVuY2UqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgb2JzZXJ2YXRpb24gaXMgZm9jdXNlZCBvbiBob3cgdGhlIGRyaXZlciBoYW5kbGVzIHdyaXRpbmcgdG8gYGRldmluZm8tXHUwMDNldGNtYC4gUmlnaHQgYXdheSwgdGhhdCByYWlzZXMgYSBmbGFnLiBXZSdyZSBkaXJlY3RseSB3cml0aW5nIHRvIFBDSSBtZW1vcnkgc3BhY2UsIHNwZWNpZmljYWxseSB0aGUgKnRjbSogKFRydXN0ZWQgQ29tcHV0aW5nIE1vZHVsZSkgYXJlYSwgaW1wbHlpbmcgc29tZSBsb3ctbGV2ZWwgY29tbXVuaWNhdGlvbiBvciBjb25maWd1cmF0aW9uIGlzIGhhcHBlbmluZy4gVGhpcyBpc24ndCBqdXN0IHN0YW5kYXJkIHJlZ2lzdGVyIGFjY2Vzczsgd2UncmUgZGVhbGluZyB3aXRoIHNvbWV0aGluZyBpbnRlZ3JhbCB0byB0aGUgZGV2aWNlJ3Mgc2VjdXJlIGJvb3QgcHJvY2Vzcywgb3IgcG90ZW50aWFsbHkgc2VjdXJlIG9wZXJhdGlvbnMuXG5cblRoZSBzdWJzZXF1ZW50IHdhaXQgZm9yIGZpcm13YXJlIHN0YXJ0dXAgZnVydGhlciBjb25maXJtcyB0aGlzLiBUaGUgd3JpdGluZyB0byBgZGV2aW5mby1cdTAwM2V0Y21gICpoYXMqIHRvIGJlIGEga2V5IHN0ZXAgaW4gaW5pdGlhdGluZyB0aGUgZmlybXdhcmUncyBleGVjdXRpb24uIFRoaXMgbWFrZXMgc2Vuc2UuIFRoZSBkcml2ZXIgaXMgbGlrZWx5IHNldHRpbmcgdXAgdGhlIG5lY2Vzc2FyeSBlbnZpcm9ubWVudCB3aXRoaW4gdGhlIHRjbSBmb3IgdGhlIGZpcm13YXJlIHRvIHRha2Ugb3Zlci4gVGhpcyBpcyBsaWtlbHkgZm9sbG93ZWQgYnkgYSBmaXJtd2FyZSByZXNldC4gVGhlIHdhaXQgaW5kaWNhdGVzIHdlIGFyZSBsaWtlbHkgcG9sbGluZyBhIHJlZ2lzdGVyIGluIFBDSSBtZW1vcnkgc3BhY2UsIG9yIHBlcmhhcHMgd2FpdGluZyBmb3IgYW4gaW50ZXJydXB0LCBjb25maXJtaW5nIHRoZSBmaXJtd2FyZSBpcyB1cCBhbmQgcmVhZHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ4Nzc0LCJPdXRwdXRUb2tlbnMiOjU1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxODo1OToxMy4yMzg1Mzk3OTRaIiwiU2VxIjoxMDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NjI0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE3NDMsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE3NDM6XFx0XFx0XFx0XFx0XFx0ICAgIHNpemVvZihmb290ZXIpKTtcXG4xNzQ0OlxcdFxcbjE3NDU6XFx0XFx0XFx0XFx0YWRkcmVzcyAtPSByYW5kX2xlbjtcXG4xNzQ2OlxcdFxcdFxcdFxcdGJyY21mX3BjaWVfcHJvdmlkZV9yYW5kb21fYnl0ZXMoZGV2aW5mbywgYWRkcmVzcyk7XFxuMTc0NzpcXHRcXHRcXHR9XFxuMTc0ODpcXHRcXHR9IGVsc2Uge1xcbjE3NDk6XFx0XFx0XFx0YnJjbWZfZGJnKFBDSUUsIFxcXCJObyBtYXRjaGluZyBOVlJBTSBmaWxlIGZvdW5kICVzXFxcXG5cXFwiLFxcbjE3NTA6XFx0XFx0XFx0XFx0ICBkZXZpbmZvLVxcdTAwM2VudnJhbV9uYW1lKTtcXG4xNzUxOlxcdFxcdH1cXG4xNzUyOlxcdFxcbjE3NTM6XFx0XFx0c2hhcmVkcmFtX2FkZHJfd3JpdHRlbiA9IGJyY21mX3BjaWVfcmVhZF9yYW0zMihkZXZpbmZvLFxcbjE3NTQ6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIGRldmluZm8tXFx1MDAzZWNpLVxcdTAwM2VyYW1zaXplIC1cXG4xNzU1OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICA0KTtcXG4xNzU2OlxcdFxcdGJyY21mX2RiZyhQQ0lFLCBcXFwiQnJpbmcgQVJNIGluIHJ1bm5pbmcgc3RhdGVcXFxcblxcXCIpO1xcbjE3NTc6XFx0XFx0ZXJyID0gYnJjbWZfcGNpZV9leGl0X2Rvd25sb2FkX3N0YXRlKGRldmluZm8sIHJlc2V0aW50cik7XFxuMTc1ODpcXHRcXHRpZiAoZXJyKVxcbjE3NTk6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4xNzYwOlxcdFxcbjE3NjE6XFx0XFx0YnJjbWZfZGJnKFBDSUUsIFxcXCJXYWl0IGZvciBGVyBpbml0XFxcXG5cXFwiKTtcXG4xNzYyOlxcdFxcdHNoYXJlZHJhbV9hZGRyID0gc2hhcmVkcmFtX2FkZHJfd3JpdHRlbjtcXG4xNzYzOlxcdFxcdGxvb3BfY291bnRlciA9IEJSQ01GX1BDSUVfRldfVVBfVElNRU9VVCAvIDUwO1xcbjE3NjQ6XFx0XFx0d2hpbGUgKChzaGFyZWRyYW1fYWRkciA9PSBzaGFyZWRyYW1fYWRkcl93cml0dGVuKSBcXHUwMDI2XFx1MDAyNiAobG9vcF9jb3VudGVyKSkge1xcbjE3NjU6XFx0XFx0XFx0bXNsZWVwKDUwKTtcXG4xNzY2OlxcdFxcdFxcdHNoYXJlZHJhbV9hZGRyID0gYnJjbWZfcGNpZV9yZWFkX3JhbTMyKGRldmluZm8sXFxuMTc2NzpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgZGV2aW5mby1cXHUwMDNlY2ktXFx1MDAzZXJhbXNpemUgLVxcbjE3Njg6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIDQpO1xcbjE3Njk6XFx0XFx0XFx0bG9vcF9jb3VudGVyLS07XFxuMTc3MDpcXHRcXHR9XFxuMTc3MTpcXHRcXHRpZiAoc2hhcmVkcmFtX2FkZHIgPT0gc2hhcmVkcmFtX2FkZHJfd3JpdHRlbikge1xcbjE3NzI6XFx0XFx0XFx0YnJjbWZfZXJyKGJ1cywgXFxcIkZXIGZhaWxlZCB0byBpbml0aWFsaXplXFxcXG5cXFwiKTtcXG4xNzczOlxcdFxcdFxcdHJldHVybiAtRU5PREVWO1xcbjE3NzQ6XFx0XFx0fVxcbjE3NzU6XFx0XFx0aWYgKHNoYXJlZHJhbV9hZGRyIFxcdTAwM2MgZGV2aW5mby1cXHUwMDNlY2ktXFx1MDAzZXJhbWJhc2UgfHxcXG4xNzc2OlxcdFxcdCAgICBzaGFyZWRyYW1fYWRkciBcXHUwMDNlPSBkZXZpbmZvLVxcdTAwM2VjaS1cXHUwMDNlcmFtYmFzZSArIGRldmluZm8tXFx1MDAzZWNpLVxcdTAwM2VyYW1zaXplKSB7XFxuMTc3NzpcXHRcXHRcXHRicmNtZl9lcnIoYnVzLCBcXFwiSW52YWxpZCBzaGFyZWQgUkFNIGFkZHJlc3MgMHglMDh4XFxcXG5cXFwiLFxcbjE3Nzg6XFx0XFx0XFx0XFx0ICBzaGFyZWRyYW1fYWRkcik7XFxuMTc3OTpcXHRcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4xNzgwOlxcdFxcdH1cXG4xNzgxOlxcdFxcdGJyY21mX2RiZyhQQ0lFLCBcXFwiU2hhcmVkIFJBTSBhZGRyOiAweCUwOHhcXFxcblxcXCIsIHNoYXJlZHJhbV9hZGRyKTtcXG4xNzgyOlxcdFxcbjE3ODM6XFx0XFx0cmV0dXJuIChicmNtZl9wY2llX2luaXRfc2hhcmVfcmFtX2luZm8oZGV2aW5mbywgc2hhcmVkcmFtX2FkZHIpKTtcXG4xNzg0OlxcdH1cXG4xNzg1OlxcdFxcbjE3ODY6XFx0XFxuMTc4NzpcXHRzdGF0aWMgaW50IGJyY21mX3BjaWVfZ2V0X3Jlc291cmNlKHN0cnVjdCBicmNtZl9wY2llZGV2X2luZm8gKmRldmluZm8pXFxuMTc4ODpcXHR7XFxuMTc4OTpcXHRcXHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGRldmluZm8tXFx1MDAzZXBkZXY7XFxuMTc5MDpcXHRcXHRzdHJ1Y3QgYnJjbWZfYnVzICpidXMgPSBkZXZfZ2V0X2RydmRhdGEoXFx1MDAyNnBkZXYtXFx1MDAzZWRldik7XFxuMTc5MTpcXHRcXHRpbnQgZXJyO1xcbjE3OTI6XFx0XFx0cGh5c19hZGRyX3QgIGJhcjBfYWRkciwgYmFyMV9hZGRyO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxODo1OToxMy4yMzg3MjgxMDRaIiwiU2VxIjoxMDMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc3MzE2MDIwODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW50ZXJjZXB0aW5nIHRoZSBGaXJtd2FyZSdzIE1lbW9yeSBNYW5pcHVsYXRpb24qKlxuXG5Pa2F5LCBzbyB0aGUgdnVsbmVyYWJpbGl0eSBoaW5nZXMgb24gYSBzcGVjaWZpYyB3cml0ZSBvcGVyYXRpb24gYnkgdGhlIGZpcm13YXJlLCBzcGVjaWZpY2FsbHkgdGFyZ2V0aW5nIGBkZXZpbmZvLVx1MDAzZWNpLVx1MDAzZXJhbXNpemUgLSA0YC4gVGhlIGtleSBoZXJlIGlzIHRvIGxldmVyYWdlIHRoZSBQQ0kgZGV2aWNlIGVtdWxhdGlvbiBwcm92aWRlZCBieSBzeXprYWxsZXIuIElmIEkgY2FuIGludGVyY2VwdCB0aGUgY2FsbCB0byBgYnJjbWZfcGNpZV9yZWFkX3JhbTMyYCB0aGF0IGlzIGFjY2Vzc2luZyB0aGlzIG1lbW9yeSByZWdpb24sIHRoZW4gSSBzaG91bGQgYmUgYWJsZSB0byBtYW5pcHVsYXRlIHRoZSB2YWx1ZSByZXR1cm5lZCwgYW5kIGJ5IGV4dGVuc2lvbiB0aGUgZW50aXJlIHByb2Nlc3MuXG5cbkhvbGQgb24sIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgc29tZXRoaW5nLiBUaGUgY29kZSBtYWtlcyBhIG1lbnRpb24gb2YgYGRldmluZm8tXHUwMDNldGNtYCwgaXMgYGJyY21mX3BjaWVfcmVhZF9yYW0zMmAgcmVhZGluZyB0aGF0IG1lbW9yeSBsb2NhdGlvbj8gTGV0J3MgdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZSBgYnJjbWZfcGNpZV9yZWFkX3JhbTMyYCBmdW5jdGlvbi4gSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgc3VyZSB3aGVyZSBpdCBpcyBnZXR0aW5nIGl0cyBkYXRhIGZyb20uIFRoYXQgd2lsbCBnaXZlIG1lIHRoZSBpbmZvcm1hdGlvbiBJIG5lZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ5OTU2LCJPdXRwdXRUb2tlbnMiOjU4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTg6NTk6MjAuOTcwMzM0NTkzWiIsIlNlcSI6MTA0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzM0NDY5ODIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnJjbWZfcGNpZV9yZWFkX3JhbTMyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuYz01NjM9c3RhdGljIHUzMlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmM6NTY0OmJyY21mX3BjaWVfcmVhZF9yYW0zMihzdHJ1Y3QgYnJjbWZfcGNpZWRldl9pbmZvICpkZXZpbmZvLCB1MzIgbWVtX29mZnNldClcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jLTU2NS17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jPTE2OTM9c3RhdGljIGludCBicmNtZl9wY2llX2Rvd25sb2FkX2Z3X252cmFtKHN0cnVjdCBicmNtZl9wY2llZGV2X2luZm8gKmRldmluZm8sXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jLTE3NTItXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuYzoxNzUzOlxcdHNoYXJlZHJhbV9hZGRyX3dyaXR0ZW4gPSBicmNtZl9wY2llX3JlYWRfcmFtMzIoZGV2aW5mbyxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jLTE3NTQtXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIGRldmluZm8tXFx1MDAzZWNpLVxcdTAwM2VyYW1zaXplIC1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmMtMTc2NS1cXHRcXHRtc2xlZXAoNTApO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmM6MTc2NjpcXHRcXHRzaGFyZWRyYW1fYWRkciA9IGJyY21mX3BjaWVfcmVhZF9yYW0zMihkZXZpbmZvLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmMtMTc2Ny1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgZGV2aW5mby1cXHUwMDNlY2ktXFx1MDAzZXJhbXNpemUgLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxODo1OToyMS4wNDM3ODk0MzVaIiwiU2VxIjoxMDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk0MjU3NzQ4NzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIHdlbGwtdmVyc2VkIGluIGtlcm5lbC1sZXZlbCBkZXZpY2UgZHJpdmVyIGRldmVsb3BtZW50OlxuXG4qKkRpc3NlY3RpbmcgYGJyY21mX3BjaWVfcmVhZF9yYW0zMmAqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcyBmdW5jdGlvbjogYGJyY21mX3BjaWVfcmVhZF9yYW0zMmAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIk9rYXksIHRoaXMgaXMgc3BlY2lmaWMgdG8gYSBCcm9hZGNvbSBXaS1GaSBjaGlwc2V0IHVzaW5nIHRoZSBQQ0llIGludGVyZmFjZS4gJ1JlYWQgUkFNMzInIGltcGxpZXMgaXQncyBncmFiYmluZyAzMi1iaXQgZGF0YSBkaXJlY3RseSBmcm9tIHRoZSBkZXZpY2UncyBpbnRlcm5hbCBSQU0uXCIgSSdtIG1lbnRhbGx5IHBhcnNpbmcgdGhlIG5hbWUg4oCTIGl0IHNjcmVhbXMgXCJsb3ctbGV2ZWwgYWNjZXNzLlwiIEknbSBleHBlY3RpbmcgdG8gc2VlIG9wZXJhdGlvbnMgaW52b2x2aW5nIFBDSWUgY29uZmlndXJhdGlvbiBzcGFjZSByZWFkcywgcG90ZW50aWFsbHkgbWVtb3J5LW1hcHBlZCBJL08sIG9yIHBvc3NpYmx5IGV2ZW4gZGlyZWN0IHJlZ2lzdGVyIG1hbmlwdWxhdGlvbi4gSSBhbnRpY2lwYXRlIHNvbWUgc29ydCBvZiBidXMgYWNjZXNzLCBwb3NzaWJseSBpbnZvbHZpbmcgRE1BIG9yIHByb2dyYW1tZWQgSS9PLCBhbmQgSeKAmWxsIGJlIGN1cmlvdXMgYWJvdXQgdGhlIHN5bmNocm9uaXphdGlvbiBtZXRob2RzIHVzZWQgdG8gaGFuZGxlIHRoZSBjb25jdXJyZW50IGFjY2VzcyBpc3N1ZXMgaW4ga2VybmVsLXNwYWNlLiBJJ20gYWxyZWFkeSBmb3JtdWxhdGluZyBxdWVzdGlvbnM6IElzIHRoZXJlIGFueSBlcnJvciBjaGVja2luZz8gRG9lcyBpdCBoYW5kbGUgcG90ZW50aWFsIGJ1cyBlcnJvcnMgZ3JhY2VmdWxseT8gSG93IGlzIHRoZSBSQU0gYWRkcmVzcyBkZXRlcm1pbmVkLCBpcyBpdCBoYXJkY29kZWQsIGNhbGN1bGF0ZWQgYmFzZWQgb24gdGhlIGNoaXAgcmV2aXNpb24sIG9yIHBhc3NlZCBkeW5hbWljYWxseT8gSSdtIGJldHRpbmcgdGhhdCB0aGlzIGNvZGUgaXMgY3JpdGljYWwgZm9yIHRoZSBkZXZpY2UgdG8gYWN0dWFsbHkgZnVuY3Rpb24uIExldCdzIHNlZSBob3cgaXQncyBpbXBsZW1lbnRlZC4gVGltZSB0byBwdXQgb24gbXkgZGVidWdnaW5nIGhhdCBhbmQgYW5hbHl6ZSB0aGlzIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUwODEwLCJPdXRwdXRUb2tlbnMiOjU0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTg6NTk6MzAuNDY5NTY3NjNaIiwiU2VxIjoxMDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0ODYwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU2MyxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDU2MzpcXHRzdGF0aWMgdTMyXFxuIDU2NDpcXHRicmNtZl9wY2llX3JlYWRfcmFtMzIoc3RydWN0IGJyY21mX3BjaWVkZXZfaW5mbyAqZGV2aW5mbywgdTMyIG1lbV9vZmZzZXQpXFxuIDU2NTpcXHR7XFxuIDU2NjpcXHRcXHR2b2lkIF9faW9tZW0gKmFkZHIgPSBkZXZpbmZvLVxcdTAwM2V0Y20gKyBkZXZpbmZvLVxcdTAwM2VjaS1cXHUwMDNlcmFtYmFzZSArIG1lbV9vZmZzZXQ7XFxuIDU2NzpcXHRcXG4gNTY4OlxcdFxcdHJldHVybiAoaW9yZWFkMzIoYWRkcikpO1xcbiA1Njk6XFx0fVxcbiA1NzA6XFx0XFxuIDU3MTpcXHRcXG4gNTcyOlxcdHN0YXRpYyB2b2lkXFxuIDU3MzpcXHRicmNtZl9wY2llX3dyaXRlX3JhbTMyKHN0cnVjdCBicmNtZl9wY2llZGV2X2luZm8gKmRldmluZm8sIHUzMiBtZW1fb2Zmc2V0LFxcbiA1NzQ6XFx0XFx0XFx0ICAgICAgIHUzMiB2YWx1ZSlcXG4gNTc1OlxcdHtcXG4gNTc2OlxcdFxcdHZvaWQgX19pb21lbSAqYWRkciA9IGRldmluZm8tXFx1MDAzZXRjbSArIGRldmluZm8tXFx1MDAzZWNpLVxcdTAwM2VyYW1iYXNlICsgbWVtX29mZnNldDtcXG4gNTc3OlxcdFxcbiA1Nzg6XFx0XFx0aW93cml0ZTMyKHZhbHVlLCBhZGRyKTtcXG4gNTc5OlxcdH1cXG4gNTgwOlxcdFxcbiA1ODE6XFx0XFxuIDU4MjpcXHRzdGF0aWMgdm9pZFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxODo1OTozMC40Njk4MjIwM1oiLCJTZXEiOjEwNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTA5NTk1NzE0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgYGJyY21mX2N5d19leHRlcm5hbF9hdXRoYCBWdWxuZXJhYmlsaXR5IFBhdGgqKlxuXG5Pa2F5LCBoZXJlJ3MgaG93IEknbSBzZWVpbmcgdGhpcyB1bmZvbGQuIEl0IGxvb2tzIGxpa2UgdGhlIGtleSBpcyB1c2luZyBgaW9yZWFkMzJgIGZyb20gYGRldmluZm8tXHUwMDNldGNtYC4gSSBrbm93IGBkZXZpbmZvLVx1MDAzZXRjbWAgZ2V0cyBtYXBwZWQgZnJvbSBlaXRoZXIgUENJIEJBUjEgb3IgQkFSMiwgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIFNpbmNlIHN5emthbGxlciBpcyBlbXVsYXRpbmcgdGhlIFBDSSBkZXZpY2UsIGl0IGhhbmRsZXMgYWxsIG1lbW9yeSByZWFkcyBhbmQgd3JpdGVzIHRvIHRob3NlIEJBUnMuIFRoaXMgaXMgdGhlIGNydWNpYWwgcG9pbnQhIFRoYXQgbWVhbnMgc3l6a2FsbGVyIGNhbiBmZWVkIGEgY3JhZnRlZCB2YWx1ZSBiYWNrIGR1cmluZyB0aGUgYGlvcmVhZDMyYCBjYWxsLiBJZiBJIGNhbiBjb250cm9sIHRoYXQgcmV0dXJuIHZhbHVlLCBJIGNhbiBmb3JjZSB0aGUgbG9vcCB0byBleGl0IGVhcmx5LlxuXG5JZiBJIGNhbiBjb250cm9sIHRoZSByZWFkIGZyb20gYGlvcmVhZDMyYCwgdGhlbiB0aGUgcGF0aCB0aHJvdWdoIGBicmNtZl9wY2llX2luaXRfc2hhcmVfcmFtX2luZm9gIGlzIG5leHQsIGFuZCB0aGF0IHJlYWRzIG1vcmUgc3RydWN0dXJlcyBmcm9tIFBDSSBtZW1vcnkuIFRoZSBncmVhdCBuZXdzIGlzIHRoYXQgc3l6a2FsbGVyIGNhbiBwcm92aWRlIHdoYXQgbG9vayBsaWtlIGxlZ2l0aW1hdGUsIGlmIGNhcmVmdWxseSBjcmFmdGVkLCBzdHJ1Y3R1cmVzLiBJZiBJIGNhbiBnZXQgaXQgdG8gbG9vayBnb29kLCB0aGUgZHJpdmVyIGNhbiBzdWNjZXNzZnVsbHkgaW5pdGlhbGl6ZSBhbmQgcmVnaXN0ZXIgdGhlIGBjZmc4MDIxMWAgZGV2aWNlLiBUaGF0J3MgYSBnb29kIHNldHVwIGZvciBtZS5cblxuVGhlIHRhcmdldCBpcyBgYnJjbWZfY3l3X2V4dGVybmFsX2F1dGhgLCBhbmQgSSBzZWUgaXQncyBhY2Nlc3NpYmxlIHZpYSBuZXRsaW5rLiBIb3dldmVyLCBJIHdhbnQgdG8gY29uZmlybSwgaXMgdGhlcmUgKmFueSogb3RoZXIgcm91dGUgdG8gaXQ/IExldCBtZSB0aGluay4uLiBJdCdzIGEgYGNmZzgwMjExYCBvcGVyYXRpb24sIHJpZ2h0PyBTbyBsZXQgbWUgY2hlY2sgdGhlIGNvZGUuIEFoLCB5ZXMsIGluIHRoZSBgYnJjbWZfY3l3X2dldF9jZmc4MDIxMV9vcHNgIGZ1bmN0aW9uOlxuXG5gYGBjXG5zdGF0aWMgdm9pZCBicmNtZl9jeXdfZ2V0X2NmZzgwMjExX29wcyhzdHJ1Y3QgYnJjbWZfcHViICpkcnZyKVxue1xuXHRkcnZyLVx1MDAzZW9wcy1cdTAwM2VtZ210X3R4ID0gYnJjbWZfY3l3X21nbXRfdHg7XG5cdGRydnItXHUwMDNlb3BzLVx1MDAzZWV4dGVybmFsX2F1dGggPSBicmNtZl9jeXdfZXh0ZXJuYWxfYXV0aDtcbn1cbmBgYFxuXG5ZdXAsIHRoZXJlIGl0IGlzISBgZXh0ZXJuYWxfYXV0aGAgaXMgY2FsbGVkIGJ5IGBubDgwMjExX2V4dGVybmFsX2F1dGhgIGluIGBuZXQvd2lyZWxlc3Mvbmw4MDIxMS5jYC4gT2ssIHBlcmZlY3QuIE5vdywgbGV0IG1lIGp1c3QgbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgYG5sODAyMTFfZXh0ZXJuYWxfYXV0aGAgZnVuY3Rpb24gY29tcGxldGVseS4gSSB3YW50IHRvIGRvdWJsZS1jaGVjayB0aGF0IHBhcnQgYW5kIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gb3RoZXIgZ290Y2hhcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTE0ODAsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMzYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxODo1OTozOS41NjU3ODU3ODhaIiwiU2VxIjoxMDgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3Njk4MzM4MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJleHRlcm5hbF9hdXRoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC93aXJlbGVzcy9ubDgwMjExLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3dpcmVsZXNzL25sODAyMTEuYz0xODQ2OT1zdGF0aWMgaW50IG5sODAyMTFfZGVsX3BtayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xODQ5MC1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjE4NDkxOnN0YXRpYyBpbnQgbmw4MDIxMV9leHRlcm5hbF9hdXRoKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xODQ5Mi17XFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE4NDk0LVxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBpbmZvLVxcdTAwM2V1c2VyX3B0clsxXTtcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjE4NDk1OlxcdHN0cnVjdCBjZmc4MDIxMV9leHRlcm5hbF9hdXRoX3BhcmFtcyBwYXJhbXM7XFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xODQ5Ni1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjE4NDk3OlxcdGlmICghcmRldi1cXHUwMDNlb3BzLVxcdTAwM2VleHRlcm5hbF9hdXRoKVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTg0OTgtXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xODUyOS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjE4NTMwOlxcdHJldHVybiByZGV2X2V4dGVybmFsX2F1dGgocmRldiwgZGV2LCBcXHUwMDI2cGFyYW1zKTtcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE4NTMxLX1cXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9MTk3Mjk9c3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX3NtYWxsX29wcyBubDgwMjExX3NtYWxsX29wc1tdID0ge1xcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0yMDQ2MC1cXHRcXHQudmFsaWRhdGUgPSBHRU5MX0RPTlRfVkFMSURBVEVfU1RSSUNUIHwgR0VOTF9ET05UX1ZBTElEQVRFX0RVTVAsXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzoyMDQ2MTpcXHRcXHQuZG9pdCA9IG5sODAyMTFfZXh0ZXJuYWxfYXV0aCxcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTIwNDYyLVxcdFxcdC5mbGFncyA9IEdFTkxfQURNSU5fUEVSTSxcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9MjMyNTY9dm9pZCBubDgwMjExX3NlbmRfYXBfc3RvcHBlZChzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LCB1bnNpZ25lZCBpbnQgbGlua19pZClcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMjMyODctXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzoyMzI4ODppbnQgY2ZnODAyMTFfZXh0ZXJuYWxfYXV0aF9yZXF1ZXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzoyMzI4OTpcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgY2ZnODAyMTFfZXh0ZXJuYWxfYXV0aF9wYXJhbXMgKnBhcmFtcyxcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTIzMjkwLVxcdFxcdFxcdFxcdCAgIGdmcF90IGdmcClcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMjMzNDUtfVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MjMzNDY6RVhQT1JUX1NZTUJPTChjZmc4MDIxMV9leHRlcm5hbF9hdXRoX3JlcXVlc3QpO1xcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMjMzNDctXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE4OjU5OjM5LjY0Mjc4ODI0WiIsIlNlcSI6MTA5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NDI3NDk5MDQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBCcm9hZGNvbSBXaS1GaSBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBgbmw4MDIxMV9leHRlcm5hbF9hdXRoYCBjYWxscyBgcmRldl9leHRlcm5hbF9hdXRoYCwgd2hpY2ggaW4gdHVybiBjYWxscyBgcmRldi1cdTAwM2VvcHMtXHUwMDNlZXh0ZXJuYWxfYXV0aGAuIFRoaXMgbWVhbnMgdGhhdCBgZXh0ZXJuYWxfYXV0aGAgZnVuY3Rpb25hbGl0eSBpcyBpbmRlZWQgYWNjZXNzaWJsZSBmcm9tIHVzZXIgc3BhY2UuIEV4Y2VsbGVudCwgdGhhdCdzIHdoYXQgSSBuZWVkZWQgdG8gY29uZmlybS5cblxuVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBpcyBhIGZpeCBmb3IgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlIGluIGBicmNtZl9jeXdfZXh0ZXJuYWxfYXV0aGAuIFRoZSBjb2RlIG5vdyBpbml0aWFsaXplcyB0aGUgYGF1dGhfc3RhdHVzYCBzdHJ1Y3QsIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIHdoaWNoIGlzIGdvb2QuIFRoYXQncyBhIHRleHRib29rIGNhc2UgZm9yIGZ1enppbmcuXG5cbk15IG5leHQgc3RlcCBpcyB0byBuYWlsIGRvd24gdGhlIHByZWNpc2UgZnVuY3Rpb24ocykgdG8gdGFyZ2V0IHdpdGggdGhlIGZ1enplci4gSXQgbG9va3MgbGlrZSBgYnJjbWZfY3l3X2V4dGVybmFsX2F1dGhgIGlzIHRoZSBwcmltYXJ5IG9uZSDigJMgdGhlIHBhdGNoIGZvY3VzZXMgc3BlY2lmaWNhbGx5IG9uIHRoYXQuIExldCdzIG1ha2Ugc3VyZSwgdGhvdWdoLiBBaCwgeWVzLCBqdXN0IGNoZWNrZWQg4oCTIHRoZSBmaWxlIGBkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L2NvcmUuY2Agb25seSBjb250YWlucyBjaGFuZ2VzIHRvIGBicmNtZl9jeXdfZXh0ZXJuYWxfYXV0aGAsIHdoaWNoIGlzIGV4YWN0bHkgd2hhdCBJIHdhcyBob3BpbmcgdG8gc2VlLlxuXG5Ob3csIGxldCBtZSBtYWtlIGEgbm90ZSBvZiB0aGUgcmVxdWlyZWQgQ09ORklHIG9wdGlvbnMuIEZyb20gbXkgcXVpY2sgcmV2aWV3LCBJJ2xsIG5lZWQgYENPTkZJR19CUkNNRk1BQ2AsIGFuZCBwcm9iYWJseSB0aGUgcmVsZXZhbnQgdHJhbnNwb3J0IG9wdGlvbnM6IGBDT05GSUdfQlJDTUZNQUNfUENJRWAsIGBDT05GSUdfQlJDTUZNQUNfVVNCYCwgYW5kIGBDT05GSUdfQlJDTUZNQUNfU0RJT2AuIEkgd2lsbCBjb25maXJtIHRoZXNlIGJ5IGRvdWJsZS1jaGVja2luZyB0aGUgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnYCBmaWxlLCBidXQgSSdtIGNvbmZpZGVudCB0aG9zZSBhcmUgdGhlIGtleSBvbmVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MzE3OSwiT3V0cHV0VG9rZW5zIjo0OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxODo1OTo0OC4wNzAyOTE3MTdaIiwiU2VxIjoxMTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MjA4NzU2MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlJDTUZNQUNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWc6MTpjb25maWcgQlJDTUZNQUNcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZy0yLVxcdHRyaXN0YXRlIFxcXCJCcm9hZGNvbSBGdWxsTUFDIFdMQU4gZHJpdmVyXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWctMTAtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWc6MTE6Y29uZmlnIEJSQ01GTUFDX1BST1RPX0JDRENcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZy0xMi1cXHRib29sXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWctMTMtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWc6MTQ6Y29uZmlnIEJSQ01GTUFDX1BST1RPX01TR0JVRlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnLTE1LVxcdGJvb2xcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZy0xNi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZzoxNzpjb25maWcgQlJDTUZNQUNfU0RJT1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnLTE4LVxcdGJvb2wgXFxcIlNESU8gYnVzIGludGVyZmFjZSBzdXBwb3J0IGZvciBGdWxsTUFDIGRyaXZlclxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnLTI4LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnOjI5OmNvbmZpZyBCUkNNRk1BQ19VU0JcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZy0zMC1cXHRib29sIFxcXCJVU0IgYnVzIGludGVyZmFjZSBzdXBwb3J0IGZvciBGdWxsTUFDIGRyaXZlclxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnLTM5LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnOjQwOmNvbmZpZyBCUkNNRk1BQ19QQ0lFXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWctNDEtXFx0Ym9vbCBcXFwiUENJRSBidXMgaW50ZXJmYWNlIHN1cHBvcnQgZm9yIEZ1bGxNQUMgZHJpdmVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxODo1OTo0OC4xNDIzODcwOTlaIiwiU2VxIjoxMTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgwOTgxNzc2NDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW1tZWRpYXRlIENvbnNpZGVyYXRpb25zIGZvciB0aGUgQlJDTUZNQUMgTW9kdWxlKipcblxuT2theSwgc28gd2UncmUgZGl2aW5nIGludG8gdGhpcyBgQlJDTUZNQUNgIG1vZHVsZSDigJMgd2hpY2ggbWVhbnMgd2UnbGwgbmVlZCB0byBjb25zaWRlciBpdHMgdmFyaW91cyBpbnRlcmZhY2VzLCBzcGVjaWZpY2FsbHk6IGBCUkNNRk1BQ2AsIGBCUkNNRk1BQ19QQ0lFYCwgYEJSQ01GTUFDX1VTQmAsIGFuZCBpZGVhbGx5LCBmb3IgYnJvYWRlciBjb21wYXRpYmlsaXR5LCB3ZSBzaG91bGQgaW5jbHVkZSBgQlJDTUZNQUNfU0RJT2AuIFxuXG5XYWl0IGEgbWludXRlLi4uIEkgaGF2ZSBhIG5hZ2dpbmcgZmVlbGluZy4gQW0gSSByaWdodCBpbiB0aGlua2luZyBgYnJjbWZfY3l3X2V4dGVybmFsX2F1dGhgIGdldHMgdW5jb25kaXRpb25hbGx5IGJ1aWx0IGludG8gdGhlIGJpbmFyeSBpZiB3ZSBlbmFibGUgYEJSQ01GTUFDYD8gVGhhdCBjb3VsZCBiZSBwcm9ibGVtYXRpYyBkZXBlbmRpbmcgb24gdGhlIHVzZS1jYXNlLiBCZXN0IHRvIGRvdWJsZS1jaGVjayB0aGUgTWFrZWZpbGUgdG8gYmUgc3VyZS4gVGltZSB0byBnbyBkaWcgdGhyb3VnaCBgZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL01ha2VmaWxlYCBhbmQgY29uZmlybSB0aGlzIGRlcGVuZGVuY3kuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0NTM3LCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE4OjU5OjU2LjI0MDU2NzNaIiwiU2VxIjoxMTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODcyMTgzNDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY3l3XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvTWFrZWZpbGU9NTU9b2JqLW0gKz0gd2NjL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9NYWtlZmlsZTo1NjpvYmotbSArPSBjeXcvXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL01ha2VmaWxlLTU3LW9iai1tICs9IGJjYS9cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9NYWtlZmlsZT01OT1icmNtZm1hYy0kKENPTkZJR19CUkNNRk1BQykgKz0gd2NjL2NvcmUub1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9NYWtlZmlsZTo2MDpicmNtZm1hYy0kKENPTkZJR19CUkNNRk1BQykgKz0gY3l3L2NvcmUub1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9NYWtlZmlsZS02MS1icmNtZm1hYy0kKENPTkZJR19CUkNNRk1BQykgKz0gYmNhL2NvcmUub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxODo1OTo1Ni44Mjc3ODk5ODlaIiwiU2VxIjoxMTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg0MDg3ODM0NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgS2VybmVsIE1vZHVsZSBDb21waWxhdGlvbiBQcm9jZXNzKipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSdtIHNlZWluZyBgY3l3L2NvcmUub2AgYmVpbmcgY29tcGlsZWQgZGlyZWN0bHkgaW50byBgYnJjbWZtYWMua29gLi4uIHdoaWNoIGlzIGludGVyZXN0aW5nLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgd2hhdCdzIGdvaW5nIG9uIHdpdGggdGhhdCBgY3l3L2AgZGlyZWN0b3J5PyBUaGUgd2F5IGl0J3MgcmVmZXJlbmNlZCBzZWVtcyB1bnVzdWFsLiBXaHkgaXNuJ3QgaXQgaGFuZGxlZCBzZXBhcmF0ZWx5LCBpZiBpdCB3ZXJlIGJ1aWx0IHNlcGFyYXRlbHksIGl0IHdvdWxkIGJlIGBvYmotbSArPSBjeXcvYCwgSSB0aGluay4gVGhpcyB3YXJyYW50cyBhIGNsb3NlciBsb29rIGF0IHRoZSBNYWtlZmlsZS4gTGV0IG1lIGNoZWNrIHRoZSBzcGVjaWZpY3M7IHNwZWNpZmljYWxseSwgbGV0J3MgZXhhbWluZSB0aGUgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvTWFrZWZpbGVgLiBUaGF0IHNob3VsZCBjbGFyaWZ5IHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU1MTQwLCJPdXRwdXRUb2tlbnMiOjQ3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTk6MDA6MDUuMjM2NTc2OTA5WiIsIlNlcSI6MTE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODcxNjk5MTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiLipcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L01ha2VmaWxlOjE6IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogSVNDXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9NYWtlZmlsZToyOiNcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L01ha2VmaWxlOjM6IyBDb3B5cmlnaHQgKGMpIDIwMjIgQnJvYWRjb20gQ29ycG9yYXRpb25cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L01ha2VmaWxlOjQ6XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9NYWtlZmlsZTo1OmNjZmxhZ3MteSArPSBcXFxcXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9NYWtlZmlsZTo2OlxcdC1JICQoc3JjKSBcXFxcXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9NYWtlZmlsZTo3OlxcdC1JICQoc3JjKS8uLiBcXFxcXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9NYWtlZmlsZTo4OlxcdC1JICQoc3JjKS8uLi8uLi9pbmNsdWRlXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9NYWtlZmlsZTo5OlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvTWFrZWZpbGU6MTA6b2JqLW0gKz0gYnJjbWZtYWMtY3l3Lm9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L01ha2VmaWxlOjExOmJyY21mbWFjLWN5dy1vYmpzICs9IFxcXFxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L01ha2VmaWxlOjEyOlxcdFxcdGNvcmUubyBtb2R1bGUub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxOTowMDowNS4zMjM3NjI5ODlaIiwiU2VxIjoxMTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc1NTgzNDQ3MTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBCdWlsZCBQcm9jZXNzIG9mIGBicmNtZm1hYy1jeXcua29gKipcblxuT2theSwgc28gSSBzZWUgdGhhdCBgYnJjbWZtYWMtY3l3LmtvYCBpcyBhY3R1YWxseSBidWlsdCBhcyBhIHNlcGFyYXRlIG1vZHVsZSwgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIExldCdzIGRlbHZlIGludG8gdGhlIG1ha2VmaWxlcyB0byB1bmRlcnN0YW5kIHRoaXMgYmV0dGVyLiBMb29raW5nIGF0IGBkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvTWFrZWZpbGVgLCBJIHNlZSBhIHNlY3Rpb24gd2hlcmUgaXQgc2VlbXMgdG8gaW5jbHVkZSBwYXJ0czpcblxuYGBgbWFrZWZpbGVcbm9iai1tICs9IHdjYy9cbm9iai1tICs9IGN5dy9cbm9iai1tICs9IGJjYS9cblxuYnJjbWZtYWMtJChDT05GSUdfQlJDTUZNQUMpICs9IHdjYy9jb3JlLm9cbmJyY21mbWFjLSQoQ09ORklHX0JSQ01GTUFDKSArPSBjeXcvY29yZS5vXG5icmNtZm1hYy0kKENPTkZJR19CUkNNRk1BQykgKz0gYmNhL2NvcmUub1xuYGBgXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGlmIGBDT05GSUdfQlJDTUZNQUNgIGlzIHNldCB0byAneScsIHdpbGwgdGhlIGJ1aWxkIHByb2Nlc3MgZ2VuZXJhdGUgYGJyY21mbWFjLWN5dy5vYD8gSXQgc2VlbXMgbGlrZSBgYnJjbWZtYWMteWAgaW5jbHVkZXMgYGN5dy9jb3JlLm9gIHdoZW4gYENPTkZJR19CUkNNRk1BQz15YC4gSG93ZXZlciwgdGhlIG5lc3RlZCBgY3l3L01ha2VmaWxlYCBzcGVjaWZpZXMgdGhhdCBpdCBzaG91bGQgZ2VuZXJhdGUgYGJyY21mbWFjLWN5dy5rb2AsIGFuZCBub3QgYC5vYC5cblxuVGhpbmtpbmcgbW9yZSBjbGVhcmx5LCBgb2JqLW0gKz0gY3l3L2AgaW4gdGhlIHBhcmVudCBNYWtlZmlsZSBtZWFucyB0aGF0IGl0IHdpbGwgZGVzY2VuZCBpbnRvIGBjeXcvYCBhbmQgYXR0ZW1wdCB0byBidWlsZCB3aGF0ZXZlciBpcyBzcGVjaWZpZWQgYnkgYG9iai1tYCAqdGhlcmUqLiBCdXQgSSBhbSBhc3N1bWluZyB0aGUgYnVpbGQgc3lzdGVtIHVzZXMgaXQgcHJvcGVybHksIGFzIGBvYmotJChDT05GSUdfQlJDTUZNQUMpYCBpbiB0aGlzIGluc3RhbmNlLCBtZWFucyB0aGF0IHRoZSBpbmNsdXNpb24gaW4gdGhlIGtlcm5lbCBpcyBkb25lIGluIGFub3RoZXIgd2F5LlxuXG5JIHRoaW5rIEkgbmVlZCB0byByZS1leGFtaW5lIHRoZSBtYWtlZmlsZSBpbiBgZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL01ha2VmaWxlYCBhZ2FpbiwgdG8gY2xhcmlmeSB0aGlzIGJ1aWxkIHByb2NlZHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTU4NjcsIk91dHB1dFRva2VucyI6NDksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTk6MDA6MTIuODgyMTEzMjg3WiIsIlNlcSI6MTE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDc4MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL01ha2VmaWxlXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDY1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogSVNDXFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIE1ha2VmaWxlIGZyYWdtZW50IGZvciBCcm9hZGNvbSA4MDIuMTEgTmV0d29ya2luZyBEZXZpY2UgRHJpdmVyXFxuICAgNDpcXHQjXFxuICAgNTpcXHQjIENvcHlyaWdodCAoYykgMjAxMCBCcm9hZGNvbSBDb3Jwb3JhdGlvblxcbiAgIDY6XFx0I1xcbiAgIDc6XFx0XFxuICAgODpcXHRjY2ZsYWdzLXkgKz0gXFxcXFxcbiAgIDk6XFx0XFx0LUkgJChzcmMpIFxcXFxcXG4gIDEwOlxcdFxcdC1JICQoc3JjKS8uLi9pbmNsdWRlXFxuICAxMTpcXHRcXG4gIDEyOlxcdG9iai0kKENPTkZJR19CUkNNRk1BQykgKz0gYnJjbWZtYWMub1xcbiAgMTM6XFx0YnJjbWZtYWMtb2JqcyArPSBcXFxcXFxuICAxNDpcXHRcXHRcXHRjZmc4MDIxMS5vIFxcXFxcXG4gIDE1OlxcdFxcdFxcdGNoaXAubyBcXFxcXFxuICAxNjpcXHRcXHRcXHRmd2lsLm8gXFxcXFxcbiAgMTc6XFx0XFx0XFx0ZndlaC5vIFxcXFxcXG4gIDE4OlxcdFxcdFxcdHAycC5vIFxcXFxcXG4gIDE5OlxcdFxcdFxcdHByb3RvLm8gXFxcXFxcbiAgMjA6XFx0XFx0XFx0Y29tbW9uLm8gXFxcXFxcbiAgMjE6XFx0XFx0XFx0Y29yZS5vIFxcXFxcXG4gIDIyOlxcdFxcdFxcdGZpcm13YXJlLm8gXFxcXFxcbiAgMjM6XFx0XFx0XFx0Znd2aWQubyBcXFxcXFxuICAyNDpcXHRcXHRcXHRmZWF0dXJlLm8gXFxcXFxcbiAgMjU6XFx0XFx0XFx0YnRjb2V4Lm8gXFxcXFxcbiAgMjY6XFx0XFx0XFx0dmVuZG9yLm8gXFxcXFxcbiAgMjc6XFx0XFx0XFx0cG5vLm8gXFxcXFxcbiAgMjg6XFx0XFx0XFx0eHRsdi5vXFxuICAyOTpcXHRicmNtZm1hYy0kKENPTkZJR19CUkNNRk1BQ19QUk9UT19CQ0RDKSArPSBcXFxcXFxuICAzMDpcXHRcXHRcXHRiY2RjLm8gXFxcXFxcbiAgMzE6XFx0XFx0XFx0ZndzaWduYWwub1xcbiAgMzI6XFx0YnJjbWZtYWMtJChDT05GSUdfQlJDTUZNQUNfUFJPVE9fTVNHQlVGKSArPSBcXFxcXFxuICAzMzpcXHRcXHRcXHRjb21tb25yaW5nLm8gXFxcXFxcbiAgMzQ6XFx0XFx0XFx0Zmxvd3JpbmcubyBcXFxcXFxuICAzNTpcXHRcXHRcXHRtc2didWYub1xcbiAgMzY6XFx0YnJjbWZtYWMtJChDT05GSUdfQlJDTUZNQUNfU0RJTykgKz0gXFxcXFxcbiAgMzc6XFx0XFx0XFx0c2Rpby5vIFxcXFxcXG4gIDM4OlxcdFxcdFxcdGJjbXNkaC5vXFxuICAzOTpcXHRicmNtZm1hYy0kKENPTkZJR19CUkNNRk1BQ19VU0IpICs9IFxcXFxcXG4gIDQwOlxcdFxcdFxcdHVzYi5vXFxuICA0MTpcXHRicmNtZm1hYy0kKENPTkZJR19CUkNNRk1BQ19QQ0lFKSArPSBcXFxcXFxuICA0MjpcXHRcXHRcXHRwY2llLm9cXG4gIDQzOlxcdGJyY21mbWFjLSQoQ09ORklHX0JSQ01EQkcpICs9IFxcXFxcXG4gIDQ0OlxcdFxcdFxcdGRlYnVnLm9cXG4gIDQ1OlxcdGJyY21mbWFjLSQoQ09ORklHX0JSQ01fVFJBQ0lORykgKz0gXFxcXFxcbiAgNDY6XFx0XFx0XFx0dHJhY2Vwb2ludC5vXFxuICA0NzpcXHRicmNtZm1hYy0kKENPTkZJR19PRikgKz0gXFxcXFxcbiAgNDg6XFx0XFx0XFx0b2Yub1xcbiAgNDk6XFx0YnJjbWZtYWMtJChDT05GSUdfRE1JKSArPSBcXFxcXFxuICA1MDpcXHRcXHRcXHRkbWkub1xcbiAgNTE6XFx0YnJjbWZtYWMtJChDT05GSUdfQUNQSSkgKz0gXFxcXFxcbiAgNTI6XFx0XFx0XFx0YWNwaS5vXFxuICA1MzpcXHRcXG4gIDU0OlxcdGlmZXEgKCQoQ09ORklHX0JSQ01GTUFDKSxtKVxcbiAgNTU6XFx0b2JqLW0gKz0gd2NjL1xcbiAgNTY6XFx0b2JqLW0gKz0gY3l3L1xcbiAgNTc6XFx0b2JqLW0gKz0gYmNhL1xcbiAgNTg6XFx0ZWxzZVxcbiAgNTk6XFx0YnJjbWZtYWMtJChDT05GSUdfQlJDTUZNQUMpICs9IHdjYy9jb3JlLm9cXG4gIDYwOlxcdGJyY21mbWFjLSQoQ09ORklHX0JSQ01GTUFDKSArPSBjeXcvY29yZS5vXFxuICA2MTpcXHRicmNtZm1hYy0kKENPTkZJR19CUkNNRk1BQykgKz0gYmNhL2NvcmUub1xcbiAgNjI6XFx0ZW5kaWZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTk6MDA6MTIuODgyMzI0NTE3WiIsIlNlcSI6MTE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NTY1Nzk4ODYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgdGhlIGJyY21mbWFjIE1vZHVsZSBCdWlsZCBDb25maWd1cmF0aW9uKipcblxuT2theSwgaGVyZSdzIHdoYXQncyBydW5uaW5nIHRocm91Z2ggbXkgaGVhZCBhYm91dCB0aGlzIGBicmNtZm1hY2AgYnVpbGQgc3lzdGVtLiBJdCBzZWVtcyBsaWtlIHRoZSBjb25maWd1cmF0aW9uIGBDT05GSUdfQlJDTUZNQUM9bWAgY2F1c2VzIHRoZSBidWlsZCBzeXN0ZW0gdG8gdHJlYXQgdGhlIGB3Y2MvYCwgYGN5dy9gLCBhbmQgYGJjYS9gIHN1YmRpcmVjdG9yaWVzIGFzIGRpc3RpbmN0IG1vZHVsZXMuICBUaGF0J3Mgc3RyYWlnaHRmb3J3YXJkIGVub3VnaC4gQnV0IHdoZW4gYENPTkZJR19CUkNNRk1BQz15YCwgdGhpbmdzIGdldCBhIGxpdHRsZSBsZXNzIGNsZWFyLiBJdCBsb29rcyBsaWtlIGBjeXcvY29yZS5vYCBpcyBsaW5rZWQgZGlyZWN0bHkgaW50byBgYnJjbWZtYWMub2AuICBUaGF0IHN1Z2dlc3RzIGEgbW9ub2xpdGhpYyBhcHByb2FjaCBpbiB0aGF0IGNhc2UuXG5cbkJ1dCBoZXJlJ3Mgd2hlcmUgbXkgZXhwZXJ0IGluc3RpbmN0cyBzdGFydCB0aW5nbGluZy4gSWYgYGNvcmUub2AgaXMgZGlyZWN0bHkgbGlua2VkLCB3aGF0IGFib3V0IGBjeXcvbW9kdWxlLm9gPyBUaGF0J3MgdGhlIGZpbGUgSSdkIGV4cGVjdCB0byBoYW5kbGUgbW9kdWxlIGluaXRpYWxpemF0aW9uLiBTcGVjaWZpY2FsbHksIGl0IHNob3VsZCBjb250YWluIGBicmNtZl9jeXdfaW5pdGAsIGFuZCB0aGF0J3MgdGhlIGZ1bmN0aW9uIHRoYXQgcHJlc3VtYWJseSByZWdpc3RlcnMgdGhlIHZlbmRvci5cblxuV2FpdCBhIHNlY29uZC4uLiBpZiBgQ09ORklHX0JSQ01GTUFDPXlgLCBgY3l3L21vZHVsZS5vYCBpc24ndCBldmVuIGNvbXBpbGVkISBTbyBob3cgaXMgdGhlIHZlbmRvciBiZWluZyByZWdpc3RlcmVkIGF0IGFsbCB1bmRlciB0aGF0IGNvbmZpZ3VyYXRpb24/IFRoaXMgaXMgYSBjcml0aWNhbCBwb2ludC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBkcml2ZXIgaXMgY29ycmVjdGx5IGluaXRpYWxpemVkLiBUaGUgaW5pdGlhbGl6YXRpb24gd291bGQgYmUgY3J1Y2lhbC4gVGhhdCBzdWdnZXN0cyB0aGF0IHRoZSB2ZW5kb3IgaW5pdGlhbGl6YXRpb24gaXMgbW92ZWQgdG8gdGhlIGNvcmUgb3Igc29tZSBvdGhlciBtb2R1bGUuXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGUgY29kZS4gIEknbSBnb2luZyB0byBjaGVjayBgZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Z3dmlkLmNgLiBUaGF0IHNlZW1zIGxpa2UgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gbG9vayBmb3IgdmVuZG9yIElEIGhhbmRsaW5nLCBnaXZlbiB0aGUgbmFtZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU3NTIyLCJPdXRwdXRUb2tlbnMiOjU0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTk1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTk6MDA6MjEuNDQ4MTI1NzU5WiIsIlNlcSI6MTE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzk4MzI1NTIsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJyY21mX2N5d19vcHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Z3dmlkLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE5OjAwOjIxLjUyNzk2NTUyMVoiLCJTZXEiOjExOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDkyMzUxMjk1MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZTpcblxuKipEaXZpbmcgaW50byB0aGUgQnJvYWRjb20gV2lyZWxlc3MgRmlybXdhcmUgVmlkZW8gRHJpdmVyKipcblxuUmlnaHQsIHNvIEkgbmVlZCB0byBnZXQgaW50byB0aGUgZGV0YWlscyBvZiBob3cgdGhpcyBCcm9hZGNvbSB3aXJlbGVzcyBjaGlwIGhhbmRsZXMgdmlkZW8gc3RyZWFtaW5nLCBvciBhdCBsZWFzdCBob3cgaXQgbWlnaHQgKnJlbGF0ZSogdG8gdmlkZW8gc3RyZWFtaW5nLiBUaGUgbWVudGlvbiBvZiBgY3l3YCBpbW1lZGlhdGVseSBkaXJlY3RzIG15IGF0dGVudGlvbiB0b3dhcmRzIHRoZSBgZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Z3dmlkLmNgIGZpbGUuIEdpdmVuIG15IGV4cGVyaWVuY2UsIEknZCBleHBlY3QgdGhhdCBgZnd2aWQuY2AgbGlrZWx5IGhhbmRsZXMgZmlybXdhcmUtc3BlY2lmaWMgdmlkZW8tcmVsYXRlZCBmdW5jdGlvbmFsaXR5IHdpdGhpbiB0aGUgYGJyY21mbWFjYCBkcml2ZXIsIHdoaWNoIGlzIGNydWNpYWwgZm9yIGludGVyYWN0aW5nIHdpdGggdGhvc2UgQnJvYWRjb20gODAyLjExIGNoaXBzLiBOb3cgdGhlIHF1ZXN0aW9uIGlzLCB3aGF0IGNhbiBiZSBmb3VuZCBjb25jZXJuaW5nIGBjeXdgIGFuZCBpdHMgcGxhY2UgaW4gdGhpcyBwYXJ0aWN1bGFyIGRyaXZlcj8gTGlrZWx5IGxvb2tpbmcgZm9yIHJlZmVyZW5jZXMgYW5kIGhvdyB2aWRlbyBkYXRhIGlzIHRyZWF0ZWQgaXMgdGhlIG5leHQgc3RlcC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTgxNDQsIk91dHB1dFRva2VucyI6NDgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxOTowMToxMC43NjMwOTk4NzdaIiwiU2VxIjoxMjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTk0OTY4NDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY3l3XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9md3ZpZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9md3ZpZC5jLTIxLSNpbmNsdWRlIFxcXCJ3Y2Mvdm9wcy5oXFxcIlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9md3ZpZC5jOjIyOiNpbmNsdWRlIFxcXCJjeXcvdm9wcy5oXFxcIlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9md3ZpZC5jLTIzLSNpbmNsdWRlIFxcXCJiY2Evdm9wcy5oXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Z3dmlkLmM9NTM9c3RhdGljIHN0cnVjdCBicmNtZl9md3ZpZF9lbnRyeSBmd3ZpZF9saXN0W0JSQ01GX0ZXVkVORE9SX05VTV0gPSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Z3dmlkLmMtNTQtXFx0RldWSURfRU5UUllfSU5JVChXQ0MsIHdjYyksXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Z3dmlkLmM6NTU6XFx0RldWSURfRU5UUllfSU5JVChDWVcsIGN5dyksXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Z3dmlkLmMtNTYtXFx0RldWSURfRU5UUllfSU5JVChCQ0EsIGJjYSksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE5OjAxOjExLjM4MjYwMjQ3M1oiLCJTZXEiOjEyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTczNzgzODg5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEZpcm13YXJlIFZpZGVvIEluaXRpYWxpemF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IHRoZSBgRldWSURfRU5UUllfSU5JVChDWVcsIGN5dylgIG1hY3JvIHdvcmtzLCBzcGVjaWZpY2FsbHkgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBgQ1lXX1ZPUFNgIHZhcmlhYmxlLiBJdCBsb29rcyBsaWtlIGBDWVdfVk9QU2AgZGlyZWN0bHkgY2FsbHMgYFx1MDAyNmJyY21mX2N5d19vcHNgLCB3aGljaCwgaWYgSSByZWNhbGwgY29ycmVjdGx5LCBpcyBkZWZpbmVkIGluIGBjeXcvdm9wcy5oYC4gU28gZmFyLCBzbyBnb29kLlxuXG5JdCBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIHRoYXQgaWYgYENPTkZJR19CUkNNRk1BQ2AgaXMgc2V0IHRvICd5JywgdGhlbiBgZnd2aWRfbGlzdGAgZ2V0cyBpbml0aWFsaXplZCB3aXRoIGBcdTAwMjZicmNtZl9jeXdfb3BzYCBkaXJlY3RseS4gTm8gc3VycHJpc2VzIHRoZXJlLiBUaGF0J3MgdGhlIGV4cGVjdGVkIGJlaGF2aW9yLlxuXG5CdXQgaGVyZSdzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcuIElmIGBDT05GSUdfQlJDTUZNQUNgIGlzIHNldCB0byAnbScsIHRoZW4gYGZ3dmlkX2xpc3RgIGlzIGluaXRpYWxpemVkIHdpdGggYE5VTExgLiBUaGF0J3MgYmVjYXVzZSB3aGVuIGBNT0RVTEVgIGlzIGRlZmluZWQsIGBDWVdfVk9QU2Agc2VlbXMgdG8gYmUgc2V0IHRvIGBOVUxMYC4gSSB3b25kZXIgd2h5IHRoYXQncyB0aGUgY2FzZS4gSXQgbG9va3MgbGlrZSBJIG5lZWQgdG8gZGlnIGludG8gYGN5dy92b3BzLmhgIGFuZCBzZWUgd2hhdCdzIGhhcHBlbmluZyB0aGVyZSB3aXRoIHRob3NlIGNvbmRpdGlvbmFsIGRlZmluaXRpb25zLiBJdCdzIGxpa2VseSBhIG1vZHVsYXJpdHkgaXNzdWUsIGJ1dCBJIG5lZWQgdG8gY29uZmlybSB0aGUgdW5kZXJseWluZyBsb2dpYy4gTGV0J3Mgc2VlIHdoYXQgdGhlIGhlYWRlciByZXZlYWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1ODc1OSwiT3V0cHV0VG9rZW5zIjo1NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxOTowMToyMS4xMjA0NDUxNTRaIiwiU2VxIjoxMjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNTIyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L3ZvcHMuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdC8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBJU0MgKi9cXG4gICAyOlxcdC8qXFxuICAgMzpcXHQgKiBDb3B5cmlnaHQgKGMpIDIwMjIgQnJvYWRjb20gQ29ycG9yYXRpb25cXG4gICA0OlxcdCAqL1xcbiAgIDU6XFx0I2lmbmRlZiBfQlJDTUZNQUNfQ1lXX1ZPUFNfSFxcbiAgIDY6XFx0I2RlZmluZSBfQlJDTUZNQUNfQ1lXX1ZPUFNfSFxcbiAgIDc6XFx0XFxuICAgODpcXHRleHRlcm4gY29uc3Qgc3RydWN0IGJyY21mX2Z3dmlkX29wcyBicmNtZl9jeXdfb3BzO1xcbiAgIDk6XFx0I2RlZmluZSBDWVdfVk9QU1xcdChcXHUwMDI2YnJjbWZfY3l3X29wcylcXG4gIDEwOlxcdFxcbiAgMTE6XFx0I2VuZGlmIC8qIF9CUkNNRk1BQ19DWVdfVk9QU19IICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE5OjAxOjIxLjEyMDU1MTczNFoiLCJTZXEiOjEyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzM4MzQxMDkyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJSQ01GTUFDIERyaXZlciBJbml0aWFsaXphdGlvbioqXG5cbk9rYXksIGxldCdzIHNlZS4uLiB0aGUgYENZV19WT1BTYCBtYWNybyAqYWx3YXlzKiBleHBhbmRzIHRvIGBcdTAwMjZicmNtZl9jeXdfb3BzYC4gVGhhdCBzZWVtcyBzdHJhaWdodGZvcndhcmQuIFNvLCB0aGUgYGZ3dmlkX2xpc3RgIHN0cnVjdHVyZSBpcyBpbnZhcmlhYmx5IGluaXRpYWxpemVkIHVzaW5nIGBcdTAwMjZicmNtZl9jeXdfb3BzYC4gVGhhdCdzIGEga2V5IG9ic2VydmF0aW9uLiBOb3csIEkgbmVlZCB0byBjb25zaWRlciBhIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gc2NlbmFyaW8uXG5cbklmIHRoZSBtb2R1bGUgaXMgY29tcGlsZWQgKCBgQ09ORklHX0JSQ01GTUFDPW1gICksIHRoZSBgY3l3L2NvcmUub2Agb2JqZWN0IGZpbGUgaXMgKm5vdCogbGlua2VkIGRpcmVjdGx5IGludG8gYGJyY21mbWFjLm9gLiBUaGlzIHRyaWdnZXJzIGEgY29uY2VybiEgSWYgYGN5dy9jb3JlLm9gIGlzIG5vdCBsaW5rZWQsIHRoZW4gYGJyY21mX2N5d19vcHNgIHdpbGwgYmUgYW4gdW5kZWZpbmVkIHN5bWJvbCB3aGVuIHRoZSBkcml2ZXIgbW9kdWxlIChgYnJjbWZtYWMua29gKSBpcyBsb2FkZWQuIFRoaXMgaXMgYSBwb3RlbnRpYWwgbGlua2VyIGVycm9yLCBpZiB0aGF0IGlzIHRoZSBvbmx5IG9iamVjdCBmaWxlIHRoYXQgZGVmaW5lcyB0aGUgc3ltYm9sLlxuXG5SaWdodCwgSSBuZWVkIHRvIHJldmlzaXQgdGhlIGBkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZnd2aWQuY2AgZmlsZSBhZ2Fpbi4gSXQncyB0aW1lIHRvIGNvbmZpcm0gdGhhdCBteSBpbnRlcnByZXRhdGlvbiBpcyBjb3JyZWN0IGFuZCBkZXRlcm1pbmUgaG93IHRoZSBkZXBlbmRlbmN5IGlzIG1hbmFnZWQuIFRoZXJlIGlzIGEgcG90ZW50aWFsIGJ1ZyBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1OTQyMiwiT3V0cHV0VG9rZW5zIjo1MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE5OjAxOjI4LjUwMzk3NDIyOVoiLCJTZXEiOjEyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM2NTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9md3ZpZC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDIwOlxcdFxcbiAgMjE6XFx0I2luY2x1ZGUgXFxcIndjYy92b3BzLmhcXFwiXFxuICAyMjpcXHQjaW5jbHVkZSBcXFwiY3l3L3ZvcHMuaFxcXCJcXG4gIDIzOlxcdCNpbmNsdWRlIFxcXCJiY2Evdm9wcy5oXFxcIlxcbiAgMjQ6XFx0XFxuICAyNTpcXHRzdHJ1Y3QgYnJjbWZfZnd2aWRfZW50cnkge1xcbiAgMjY6XFx0XFx0Y29uc3QgY2hhciAqbmFtZTtcXG4gIDI3OlxcdFxcdGNvbnN0IHN0cnVjdCBicmNtZl9md3ZpZF9vcHMgKnZvcHM7XFxuICAyODpcXHRcXHRzdHJ1Y3QgbGlzdF9oZWFkIGRydnJfbGlzdDtcXG4gIDI5OlxcdCNpZiBJU19NT0RVTEUoQ09ORklHX0JSQ01GTUFDKVxcbiAgMzA6XFx0XFx0c3RydWN0IG1vZHVsZSAqdm1vZDtcXG4gIDMxOlxcdFxcdHN0cnVjdCBjb21wbGV0aW9uIHJlZ19kb25lO1xcbiAgMzI6XFx0I2VuZGlmXFxuICAzMzpcXHR9O1xcbiAgMzQ6XFx0XFxuICAzNTpcXHRzdGF0aWMgREVGSU5FX01VVEVYKGZ3dmlkX2xpc3RfbG9jayk7XFxuICAzNjpcXHRcXG4gIDM3OlxcdCNpZiBJU19NT0RVTEUoQ09ORklHX0JSQ01GTUFDKVxcbiAgMzg6XFx0I2RlZmluZSBGV1ZJRF9FTlRSWV9JTklUKF92aWQsIF9uYW1lKSBcXFxcXFxuICAzOTpcXHRcXHRbQlJDTUZfRldWRU5ET1JfICMjIF92aWRdID0geyBcXFxcXFxuICA0MDpcXHRcXHRcXHQubmFtZSA9ICNfbmFtZSwgXFxcXFxcbiAgNDE6XFx0XFx0XFx0LnJlZ19kb25lID0gQ09NUExFVElPTl9JTklUSUFMSVpFUihmd3ZpZF9saXN0W0JSQ01GX0ZXVkVORE9SXyAjIyBfdmlkXS5yZWdfZG9uZSksIFxcXFxcXG4gIDQyOlxcdFxcdFxcdC5kcnZyX2xpc3QgPSBMSVNUX0hFQURfSU5JVChmd3ZpZF9saXN0W0JSQ01GX0ZXVkVORE9SXyAjIyBfdmlkXS5kcnZyX2xpc3QpLCBcXFxcXFxuICA0MzpcXHRcXHR9XFxuICA0NDpcXHQjZWxzZVxcbiAgNDU6XFx0I2RlZmluZSBGV1ZJRF9FTlRSWV9JTklUKF92aWQsIF9uYW1lKSBcXFxcXFxuICA0NjpcXHRcXHRbQlJDTUZfRldWRU5ET1JfICMjIF92aWRdID0geyBcXFxcXFxuICA0NzpcXHRcXHRcXHQubmFtZSA9ICNfbmFtZSwgXFxcXFxcbiAgNDg6XFx0XFx0XFx0LmRydnJfbGlzdCA9IExJU1RfSEVBRF9JTklUKGZ3dmlkX2xpc3RbQlJDTUZfRldWRU5ET1JfICMjIF92aWRdLmRydnJfbGlzdCksIFxcXFxcXG4gIDQ5OlxcdFxcdFxcdC52b3BzID0gX3ZpZCAjIyBfVk9QUyBcXFxcXFxuICA1MDpcXHRcXHR9XFxuICA1MTpcXHQjZW5kaWYgLyogSVNfTU9EVUxFKENPTkZJR19CUkNNRk1BQykgKi9cXG4gIDUyOlxcdFxcbiAgNTM6XFx0c3RhdGljIHN0cnVjdCBicmNtZl9md3ZpZF9lbnRyeSBmd3ZpZF9saXN0W0JSQ01GX0ZXVkVORE9SX05VTV0gPSB7XFxuICA1NDpcXHRcXHRGV1ZJRF9FTlRSWV9JTklUKFdDQywgd2NjKSxcXG4gIDU1OlxcdFxcdEZXVklEX0VOVFJZX0lOSVQoQ1lXLCBjeXcpLFxcbiAgNTY6XFx0XFx0RldWSURfRU5UUllfSU5JVChCQ0EsIGJjYSksXFxuICA1NzpcXHR9O1xcbiAgNTg6XFx0XFxuICA1OTpcXHQjaWYgSVNfTU9EVUxFKENPTkZJR19CUkNNRk1BQylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTk6MDE6MjguNTA0MjEzNzM5WiIsIlNlcSI6MTI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTE2MTYxMzA4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGJyY21mX2N5d19leHRlcm5hbF9hdXRoIEZ1bmN0aW9uIGZvciBGdXp6aW5nKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGBGV1ZJRF9FTlRSWV9JTklUYCBtYWNybyBhbmQgaG93IGl0J3MgdXNlZCB3aXRoIEJyb2FkY29tJ3MgZmlybXdhcmUgZHJpdmVycy4gSXQgbG9va3MgbGlrZSB0aGUgYF92aWQgIyMgX1ZPUFNgIHN0cnVjdHVyZSBpcyBvbmx5IGRpcmVjdGx5IGluaXRpYWxpemVkIGlmIGAhSVNfTU9EVUxFKENPTkZJR19CUkNNRk1BQylgLiBJZiBgQlJDTUZNQUNgICppcyogYSBtb2R1bGUgKGVpdGhlciAneScgb3IgJ20nKSwgdGhlIGB2b3BzYCBwb2ludGVyIGlzIGluaXRpYWxseSBgTlVMTGAsIGFuZCB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGZ1bmN0aW9uIHBvaW50ZXJzIGlzIGRlZmVycmVkIHRvIGBicmNtZl9md3ZpZF9yZWdpc3Rlcl92ZW5kb3JgLCBjYWxsZWQgZnJvbSBgY3l3L21vZHVsZS5jYC4gIFNpbmNlIFN5emthbGxlciB0eXBpY2FsbHkgYnVpbGRzIHdpdGggYHlgLCBhbmQgd2Ugd2FudCB0byBlbnN1cmUgdGhlIGJ1c2VzIGFyZSBlbmFibGVkLCBJJ2xsIGRlZmluaXRlbHkgbmVlZCBgQ09ORklHX0JSQ01GTUFDPXlgIG9yIGBDT05GSUdfQlJDTUZNQUM9bWAuIEkgYWxzbyBuZWVkIHRvIGluY2x1ZGUgYEJSQ01GTUFDX1BDSUVgLCBgQlJDTUZNQUNfVVNCYCwgYW5kIGp1c3QgdG8gYmUgc2FmZSwgYEJSQ01GTUFDX1NESU9gLiAgT2YgY291cnNlLCBgQ0ZHODAyMTFgIGlzIGVzc2VudGlhbCBiZWNhdXNlIGBCUkNNRk1BQ2AgcmVxdWlyZXMgaXQuIEdvb2QsIG5vIG5lZWQgZm9yIGBNQUM4MDIxMWAgYXMgYEJSQ01GTUFDYCBpcyBhIEZ1bGxNQUMgZHJpdmVyLiBTbywgdGhlIGtleSBjb25maWdzIGZvciBmdXp6aW5nIGFyZSBgQlJDTUZNQUNgLCBgQlJDTUZNQUNfUENJRWAsIGBCUkNNRk1BQ19VU0JgLCBhbmQgYEJSQ01GTUFDX1NESU9gLlxuXG5Ob3csIGxldCdzIHN3aXRjaCBnZWFycyBhbmQgZm9jdXMgb24gdGhlIHNwZWNpZmljIGZ1bmN0aW9uLiBUaGUgY29kZSBtZW50aW9ucyB0aGF0IGBicmNtZl9jeXdfZXh0ZXJuYWxfYXV0aGAgaXMgdGhlIG9uZSB0aGF0J3MgYmVlbiBtb2RpZmllZC4gQXJlIHRoZXJlIGFueSBvdGhlciByZWxldmFudCBmdW5jdGlvbnMsIG5vLlxuXG5IbW0sIGxldCdzIGRvdWJsZS1jaGVjayBpZiBgYnJjbWZfY3l3X2V4dGVybmFsX2F1dGhgIGlzIGRlY2xhcmVkIGFzIGBzdGF0aWNgLiBZZXMsIGl0IGlzLiBUaGF0J3MgaW50ZXJlc3RpbmcgYmVjYXVzZSBzdGF0aWMgZnVuY3Rpb25zIGNhbiBzb21ldGltZXMgYmUgaW5saW5lZCwgYW5kIGlmIHRoYXQgaGFwcGVucywgU3l6a2FsbGVyIHdvbid0IGJlIGFibGUgdG8gdGFyZ2V0IHRoZW0gZWZmZWN0aXZlbHkuICBIb3dldmVyLCB0aGlzIGZ1bmN0aW9uIGlzIGFzc2lnbmVkIHRvIGEgZnVuY3Rpb24gcG9pbnRlciAoYGRydnItXHUwMDNlb3BzLVx1MDAzZWV4dGVybmFsX2F1dGggPSBicmNtZl9jeXdfZXh0ZXJuYWxfYXV0aDtgKS4gQmVjYXVzZSBvZiB0aGlzIGFzc2lnbm1lbnQsIHRoZSBjb21waWxlciAqbXVzdCogZ2VuZXJhdGUgYSBkaXN0aW5jdCBmdW5jdGlvbiBib2R5IGZvciBpdCwgc28gaXQgY2FuJ3QgYmUgaW5saW5lZC4gRXZlbiB0aG91Z2ggaXQncyBzdGF0aWMsIGl0cyBhZGRyZXNzIGlzIHRha2VuLCBzbyBpdCAqd2lsbCogaGF2ZSBhIGRpc3RpbmN0IHN5bWJvbCBpbiBga2FsbHN5bXNgIChlLmcuLCBgYnJjbWZfY3l3X2V4dGVybmFsX2F1dGhgKS4gQnV0IFN5emthbGxlcidzIGBGb2N1c1N5bWJvbHNgIGlzIHR5cGljYWxseSBnZWFyZWQgdG93YXJkcyBub24tc3RhdGljIGZ1bmN0aW9ucy4gSXMgdGhlcmUgYSBub24tc3RhdGljIHdyYXBwZXIgdGhhdCB3ZSBjYW4gdXNlP1xuXG5BaCwgaGVyZSdzIGEgZ29vZCBmaW5kISBgbmw4MDIxMV9leHRlcm5hbF9hdXRoYCBpcyB0aGUgbmV0bGluayBoYW5kbGVyLCB3aGljaCAqaXNuJ3QqIHN0YXRpYy4gYGNmZzgwMjExX2V4dGVybmFsX2F1dGhfcmVxdWVzdGAgaXMgYW4gZXhwb3J0ZWQgZnVuY3Rpb24sIGJ1dCB0aGF0J3MgZm9yIHRoZSBkcml2ZXIgdG8gY2FsbCwgbm90IHRoZSBvdGhlciB3YXkgYXJvdW5kLCBzbyBpdCdzIG5vdCB3aGF0IHdlIG5lZWQuIFdhaXQgYSBzZWNvbmQsIHRoZSBgbmw4MDIxMV9leHRlcm5hbF9hdXRoYCBmdW5jdGlvbiBjYWxscyBgcmRldl9leHRlcm5hbF9hdXRoYCB3aGljaCBpcyBhbiBpbmxpbmUgZnVuY3Rpb24gZGVmaW5lZCBpbiBgbmV0L3dpcmVsZXNzL2NvcmUuaGAuIFNvIGBubDgwMjExX2V4dGVybmFsX2F1dGhgIGlzIGFuIGV4Y2VsbGVudCBub24tc3RhdGljIGVudHJ5IHBvaW50LiBBbmQgYGJyY21mX2N5d19leHRlcm5hbF9hdXRoYCBpdHNlbGYgd2lsbCBhbHNvIGJlIGEgdmFsaWQgdGFyZ2V0IGJlY2F1c2UgaXQgaXMgcmVmZXJlbmNlZCB2aWEgYSBmdW5jdGlvbiBwb2ludGVyLlxuXG5Pa2F5LCBsZXQncyB0dXJuIG91ciBhdHRlbnRpb24gdG8gYG5sODAyMTFfZXh0ZXJuYWxfYXV0aGAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYwNTQ4LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzMxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTk6MDE6MzkuNjY1ODMyNDEzWiIsIlNlcSI6MTI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzM4MzgzMjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmw4MDIxMV9leHRlcm5hbF9hdXRoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC93aXJlbGVzcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3dpcmVsZXNzL25sODAyMTEuYz0xODQ2OT1zdGF0aWMgaW50IG5sODAyMTFfZGVsX3BtayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xODQ5MC1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjE4NDkxOnN0YXRpYyBpbnQgbmw4MDIxMV9leHRlcm5hbF9hdXRoKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xODQ5Mi17XFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTE5NzI5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9zbWFsbF9vcHMgbmw4MDIxMV9zbWFsbF9vcHNbXSA9IHtcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMjA0NjAtXFx0XFx0LnZhbGlkYXRlID0gR0VOTF9ET05UX1ZBTElEQVRFX1NUUklDVCB8IEdFTkxfRE9OVF9WQUxJREFURV9EVU1QLFxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MjA0NjE6XFx0XFx0LmRvaXQgPSBubDgwMjExX2V4dGVybmFsX2F1dGgsXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0yMDQ2Mi1cXHRcXHQuZmxhZ3MgPSBHRU5MX0FETUlOX1BFUk0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE5OjAxOjM5LjczOTY3NTM3NVoiLCJTZXEiOjEyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzIyODE2NjE2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE5ldGxpbmsgYW5kIEJSQ01GIEV4dGVybmFsIEF1dGhlbnRpY2F0aW9uIENvZGUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGZpcnN0IHRoaW5nIEknbSBub3RpY2luZyBpcyB0aGF0IGBubDgwMjExX2V4dGVybmFsX2F1dGhgIGlzIGFsc28gc3RhdGljISBJbnRlcmVzdGluZy4gV2FpdCwgdGhlIGBnZW5sX3NtYWxsX29wc2Agc3RydWN0dXJlIHRha2VzIGl0cyBhZGRyZXNzLCB3aGljaCBtZWFucyBpdCBpc24ndCBpbmxpbmVkIGFuZCB0aGVyZWZvcmUsIGl0IGhhcyBhIHN5bWJvbC4gSG1tLCBpcyB0aGVyZSBldmVuICphbnkqIG5vbi1zdGF0aWMgZnVuY3Rpb24gaGVyZT8gTm90IHJlYWxseTsgbmV0bGluayBoYW5kbGVycyBhcmUgdHlwaWNhbGx5IHN0YXRpYy4gU28sIEkgd2lsbCBpbmNsdWRlIGBicmNtZl9jeXdfZXh0ZXJuYWxfYXV0aGAgYW5kIGBubDgwMjExX2V4dGVybmFsX2F1dGhgIGluIHRoaXMgYW5hbHlzaXMuXG5cbk5vdywgbGV0J3MgZ28gYmFjayBhbmQgcmV2aWV3IHRoaXMgcGF0Y2ggY2FyZWZ1bGx5LiBJIHNlZSB0aGUgYWRkaXRpb24gb2YgYD0ge31gIHRvIGluaXRpYWxpemUgYGF1dGhfc3RhdHVzYC4gQWgsIGFuZCB0aGUgbmV3IGBtZW1jcHlgIGNhbGwgdGhhdCBjb3BpZXMgdGhlIGBwYXJhbXMtXHUwMDNlcG1raWRgIGludG8gYGF1dGhfc3RhdHVzYCAqaWYqIGl0IGV4aXN0cy4gT2theSwgc28gdGhhdCBmaXhlcyB0aGUgcG90ZW50aWFsIHByb2JsZW0gb2Ygc2VuZGluZyB1bmluaXRpYWxpemVkIHN0YWNrIG1lbW9yeSB0byB0aGUgZmlybXdhcmUgdmlhIGBicmNtZl9maWxfaW92YXJfZGF0YV9zZXRgLiBUaGF0J3MgZ29vZC5cblxuSnVzdCB0byBiZSBzdXJlLCBJIHNob3VsZCBjaGVjayB0aGUgcmVzdCBvZiBgYnJjbWZfY3l3X2V4dGVybmFsX2F1dGhgIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gb3RoZXIgc3VidGxlIGNoYW5nZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYyMzk3LCJPdXRwdXRUb2tlbnMiOjU2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE5OjAxOjQ2Ljk2Nzg0NzMzNloiLCJTZXEiOjEyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkwMTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE5NyxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE5NzpcXHRzdGF0aWMgaW50XFxuIDE5ODpcXHRicmNtZl9jeXdfZXh0ZXJuYWxfYXV0aChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbiAxOTk6XFx0XFx0XFx0XFx0c3RydWN0IGNmZzgwMjExX2V4dGVybmFsX2F1dGhfcGFyYW1zICpwYXJhbXMpXFxuIDIwMDpcXHR7XFxuIDIwMTpcXHRcXHRzdHJ1Y3QgYnJjbWZfaWYgKmlmcDtcXG4gMjAyOlxcdFxcdHN0cnVjdCBicmNtZl9wdWIgKmRydnI7XFxuIDIwMzpcXHRcXHRzdHJ1Y3QgYnJjbWZfYXV0aF9yZXFfc3RhdHVzX2xlIGF1dGhfc3RhdHVzID0ge307XFxuIDIwNDpcXHRcXHRpbnQgcmV0ID0gMDtcXG4gMjA1OlxcdFxcbiAyMDY6XFx0XFx0YnJjbWZfZGJnKFRSQUNFLCBcXFwiRW50ZXJcXFxcblxcXCIpO1xcbiAyMDc6XFx0XFxuIDIwODpcXHRcXHRpZnAgPSBuZXRkZXZfcHJpdihkZXYpO1xcbiAyMDk6XFx0XFx0ZHJ2ciA9IGlmcC1cXHUwMDNlZHJ2cjtcXG4gMjEwOlxcdFxcdGlmIChwYXJhbXMtXFx1MDAzZXN0YXR1cyA9PSBXTEFOX1NUQVRVU19TVUNDRVNTKSB7XFxuIDIxMTpcXHRcXHRcXHRpZiAocGFyYW1zLVxcdTAwM2VwbWtpZClcXG4gMjEyOlxcdFxcdFxcdFxcdG1lbWNweShhdXRoX3N0YXR1cy5wbWtpZCwgcGFyYW1zLVxcdTAwM2VwbWtpZCxcXG4gMjEzOlxcdFxcdFxcdFxcdCAgICAgICBXTEFOX1BNS0lEX0xFTik7XFxuIDIxNDpcXHRcXHRcXHRhdXRoX3N0YXR1cy5mbGFncyA9IGNwdV90b19sZTE2KEJSQ01GX0VYVEFVVEhfU1VDQ0VTUyk7XFxuIDIxNTpcXHRcXHR9IGVsc2Uge1xcbiAyMTY6XFx0XFx0XFx0YnBoeV9lcnIoZHJ2ciwgXFxcIkV4dGVybmFsIGF1dGhlbnRpY2F0aW9uIGZhaWxlZDogc3RhdHVzPSVkXFxcXG5cXFwiLFxcbiAyMTc6XFx0XFx0XFx0XFx0IHBhcmFtcy1cXHUwMDNlc3RhdHVzKTtcXG4gMjE4OlxcdFxcdFxcdGF1dGhfc3RhdHVzLmZsYWdzID0gY3B1X3RvX2xlMTYoQlJDTUZfRVhUQVVUSF9GQUlMKTtcXG4gMjE5OlxcdFxcdH1cXG4gMjIwOlxcdFxcbiAyMjE6XFx0XFx0bWVtY3B5KGF1dGhfc3RhdHVzLnBlZXJfbWFjLCBwYXJhbXMtXFx1MDAzZWJzc2lkLCBFVEhfQUxFTik7XFxuIDIyMjpcXHRcXHRwYXJhbXMtXFx1MDAzZXNzaWQuc3NpZF9sZW4gPSBtaW5fdCh1OCwgcGFyYW1zLVxcdTAwM2Vzc2lkLnNzaWRfbGVuLFxcbiAyMjM6XFx0XFx0XFx0XFx0XFx0ICAgICAgSUVFRTgwMjExX01BWF9TU0lEX0xFTik7XFxuIDIyNDpcXHRcXHRhdXRoX3N0YXR1cy5zc2lkX2xlbiA9IGNwdV90b19sZTMyKHBhcmFtcy1cXHUwMDNlc3NpZC5zc2lkX2xlbik7XFxuIDIyNTpcXHRcXHRtZW1jcHkoYXV0aF9zdGF0dXMuc3NpZCwgcGFyYW1zLVxcdTAwM2Vzc2lkLnNzaWQsIHBhcmFtcy1cXHUwMDNlc3NpZC5zc2lkX2xlbik7XFxuIDIyNjpcXHRcXG4gMjI3OlxcdFxcdHJldCA9IGJyY21mX2ZpbF9pb3Zhcl9kYXRhX3NldChpZnAsIFxcXCJhdXRoX3N0YXR1c1xcXCIsIFxcdTAwMjZhdXRoX3N0YXR1cyxcXG4gMjI4OlxcdFxcdFxcdFxcdFxcdCAgICAgICBzaXplb2YoYXV0aF9zdGF0dXMpKTtcXG4gMjI5OlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiAyMzA6XFx0XFx0XFx0YnBoeV9lcnIoZHJ2ciwgXFxcImF1dGhfc3RhdHVzIGlvdmFyIGZhaWxlZDogcmV0PSVkXFxcXG5cXFwiLCByZXQpO1xcbiAyMzE6XFx0XFxuIDIzMjpcXHRcXHRyZXR1cm4gcmV0O1xcbiAyMzM6XFx0fVxcbiAyMzQ6XFx0XFxuIDIzNTpcXHRzdGF0aWMgdm9pZCBicmNtZl9jeXdfZ2V0X2NmZzgwMjExX29wcyhzdHJ1Y3QgYnJjbWZfcHViICpkcnZyKVxcbiAyMzY6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxOTowMTo0Ni45NjgwNDExNDZaIiwiU2VxIjoxMjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjczMzk3NzM5OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgQXV0aGVudGljYXRpb24gU3RhdHVzIExlYWsgRml4KipcblxuT2theSwgc28gSSBzZWUgdGhhdCBgYXV0aF9zdGF0dXNgIGlzIGluZGVlZCBwYXNzZWQgdG8gdGhlIGZpcm13YXJlIHVzaW5nIGBicmNtZl9maWxfaW92YXJfZGF0YV9zZXRgLiBCZWZvcmUgdGhpcyBwYXRjaCwgdGhlIGBhdXRoX3N0YXR1cy5wbWtpZGAgZmllbGQgd2Fzbid0IGJlaW5nIGluaXRpYWxpemVkIGlmIHRoZSBzdGF0dXMgd2FzIHN1Y2Nlc3NmdWwgKGBXTEFOX1NUQVRVU19TVUNDRVNTYCksIGFuZCBldmVuIGlmIGl0IHdhc24ndCwgbW9zdCBvZiB0aGUgc3RydWN0IHdhcyBsZWZ0IHVuaW5pdGlhbGl6ZWQgZXhjZXB0IGZvciBhIGZldyBrZXkgZmllbGRzLiBUaGlzIG1lYW5zIHdlIGhhZCBhIGtlcm5lbCBzdGFjayBpbmZvcm1hdGlvbiBsZWFrIHBvdGVudGlhbGx5IGdvaW5nIHRvIHRoZSBmaXJtd2FyZSwgb3IgZXZlbiB0byBhIGVtdWxhdGVkIGRldmljZSBkdXJpbmcgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuVGhpcyBpcyBzaWduaWZpY2FudDsgaXQgZGVmaW5pdGVseSB3YXJyYW50cyB0aG9yb3VnaCBmdXp6aW5nLlxuXG5NeSBwcmltYXJ5IGZvY3VzIHNob3VsZCBiZSBvbiB0aGUgYEJSQ01GTUFDYCBjb25maWd1cmF0aW9ucywgaW5jbHVkaW5nIGBCUkNNRk1BQ19QQ0lFYCwgYEJSQ01GTUFDX1VTQmAsIGFuZCBgQlJDTUZNQUNfU0RJT2AuIEkgYWxzbyBuZWVkIHRvIHRhcmdldCBgYnJjbWZfY3l3X2V4dGVybmFsX2F1dGhgIGFuZCBgbmw4MDIxMV9leHRlcm5hbF9hdXRoYCBpbiB0aGUgY29kZS4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgQlJDTUZNQUNgIGRvZXNuJ3QgcmVxdWlyZSBhbnkgb3RoZXIgZGVwZW5kZW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy5cblxuSSdsbCBjaGVjayB0aGUgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9LY29uZmlnYCBmaWxlIHRvIGNvbmZpcm0gdGhhdCBgQ0ZHODAyMTFgIGlzIGFsc28gZW5hYmxlZCwgYXMgaXQgbWlnaHQgYmUgcmVxdWlyZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYzOTExLCJPdXRwdXRUb2tlbnMiOjQ5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTk6MDE6NTQuMzA3ODE4Nzk1WiIsIlNlcSI6MTMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEzMTY2NzY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUkNNRk1BQ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZzoxOmNvbmZpZyBCUkNNRk1BQ1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnLTItXFx0dHJpc3RhdGUgXFxcIkJyb2FkY29tIEZ1bGxNQUMgV0xBTiBkcml2ZXJcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZy0xMC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZzoxMTpjb25maWcgQlJDTUZNQUNfUFJPVE9fQkNEQ1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnLTEyLVxcdGJvb2xcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZy0xMy1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZzoxNDpjb25maWcgQlJDTUZNQUNfUFJPVE9fTVNHQlVGXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWctMTUtXFx0Ym9vbFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnLTE2LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnOjE3OmNvbmZpZyBCUkNNRk1BQ19TRElPXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWctMTgtXFx0Ym9vbCBcXFwiU0RJTyBidXMgaW50ZXJmYWNlIHN1cHBvcnQgZm9yIEZ1bGxNQUMgZHJpdmVyXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWctMjgtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWc6Mjk6Y29uZmlnIEJSQ01GTUFDX1VTQlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnLTMwLVxcdGJvb2wgXFxcIlVTQiBidXMgaW50ZXJmYWNlIHN1cHBvcnQgZm9yIEZ1bGxNQUMgZHJpdmVyXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWctMzktXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWc6NDA6Y29uZmlnIEJSQ01GTUFDX1BDSUVcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZy00MS1cXHRib29sIFxcXCJQQ0lFIGJ1cyBpbnRlcmZhY2Ugc3VwcG9ydCBmb3IgRnVsbE1BQyBkcml2ZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE5OjAxOjU0LjQyMDk5MDEzM1oiLCJTZXEiOjEzMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTExMjE5MTA2MTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSdtIHRoZSBvbmUgaGF2aW5nIGl0LCBhbmQgY29uc2lkZXJpbmcgSSdtIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6XG5cbioqSW5pdGlhbCBLY29uZmlnIFNjYW4qKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCB0byBpdC4gTGV0J3Mgc2VlLi4uIHRoZSBgYnJjbTgwMjExYCBkcml2ZXIsIHNwZWNpZmljYWxseSBpdHMgYEtjb25maWdgIGZpbGUuIEknbSBnb2luZyB0byBzdGFydCB3aXRoIHRoZSBmaXJzdCB0ZW4gbGluZXMuIFRoaXMgZ2l2ZXMgbWUgYSBxdWljayBpbml0aWFsIGZlZWwgZm9yIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIGRlcGVuZGVuY2llcy4gSSdtIGxvb2tpbmcgZm9yIHRoZSBvdmVyYWxsIHN0cnVjdHVyZSDigJMgd2hhdCBhcmUgdGhlIHRvcC1sZXZlbCBzZWN0aW9ucyBvciBmZWF0dXJlcz8gV2hhdCBhcmUgdGhlIGltbWVkaWF0ZSBwcmVyZXF1aXNpdGVzPyBJJ20gaG9waW5nIHRvIGdldCBhIHF1aWNrIGdyYXNwIG9mIHRoZSBnZW5lcmFsIGNvbmZpZ3VyYXRpb24gYXBwcm9hY2ggdXNlZCBieSB0aGlzIGRyaXZlciwgYSBiaXJkcy1leWUgdmlldyBiZWZvcmUgZGl2aW5nIGRlZXBlciBpbnRvIGFueSBzcGVjaWZpYyBzZWN0aW9uLiBJJ20gYW50aWNpcGF0aW5nIHNvbWUgZmFtaWxpYXIgYGJvb2xgIG9yIGB0cmlzdGF0ZWAgb3B0aW9ucywgbGlrZWx5IGdyb3VwZWQgdGhlbWF0aWNhbGx5LiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZ2xlYW4uIEl0J2xsIGJlIGludGVyZXN0aW5nIHRvIHNlZSB3aGF0IHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBhcmUsIGFuZCB3aGV0aGVyIGl0J3Mgc3RyYWlnaHRmb3J3YXJkLCBvciBpZiB0aGVyZSdzIHNvbWUgY29tcGxleCBsZWdhY3kgc3R1ZmYgaW52b2x2ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY1MTE3LCJPdXRwdXRUb2tlbnMiOjUwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTk6MDI6MDUuNTQyOTA0MjMxWiIsIlNlcSI6MTMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NTY5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdGNvbmZpZyBCUkNNRk1BQ1xcbiAgIDI6XFx0XFx0dHJpc3RhdGUgXFxcIkJyb2FkY29tIEZ1bGxNQUMgV0xBTiBkcml2ZXJcXFwiXFxuICAgMzpcXHRcXHRkZXBlbmRzIG9uIENGRzgwMjExXFxuICAgNDpcXHRcXHRzZWxlY3QgQlJDTVVUSUxcXG4gICA1OlxcdFxcdGhlbHBcXG4gICA2OlxcdFxcdCAgVGhpcyBtb2R1bGUgYWRkcyBzdXBwb3J0IGZvciB3aXJlbGVzcyBhZGFwdGVycyBiYXNlZCBvbiBCcm9hZGNvbVxcbiAgIDc6XFx0XFx0ICBGdWxsTUFDIGNoaXBzZXRzLiBJdCBoYXMgdG8gd29yayB3aXRoIGF0IGxlYXN0IG9uZSBvZiB0aGUgYnVzXFxuICAgODpcXHRcXHQgIGludGVyZmFjZSBzdXBwb3J0LiBJZiB5b3UgY2hvb3NlIHRvIGJ1aWxkIGEgbW9kdWxlLCBpdCdsbCBiZSBjYWxsZWRcXG4gICA5OlxcdFxcdCAgYnJjbWZtYWMua28uXFxuICAxMDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTk6MDI6MDUuNTQyOTcxMzAxWiIsIlNlcSI6MTMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MDYyMzYxNjMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBCcm9hZGNvbSBGdWxsTUFDIERyaXZlciBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgZml4IGhpbmdlcyBvbiBgQ0ZHODAyMTFgLCBJIG5lZWQgdG8gYmUgY2VydGFpbiB0byBpbmNsdWRlIHRoYXQgYXMgYSBkZXBlbmRlbmN5LiBJJ2xsIGFsc28gYnJpbmcgaW4gYEJSQ01GTUFDYCwgYEJSQ01GTUFDX1BDSUVgLCBgQlJDTUZNQUNfVVNCYCwgYW5kIGBCUkNNRk1BQ19TRElPYCB0byBlbnN1cmUgZXZlcnl0aGluZydzIHByb3Blcmx5IGludGVncmF0ZWQuXG5cbk5vdywgbGV0J3MganVzdCBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcg4oCTIGlzIGBicmNtZl9jeXdfZXh0ZXJuYWxfYXV0aGAgdGhlICpvbmx5KiBmdW5jdGlvbiBpbXBhY3RlZD8gWWVzLCBhIHF1aWNrIHJldmlldyBjb25maXJtcyB0aGF0LlxuXG5UaGUgZXNzZW5jZSBvZiB0aGUgcGF0Y2ggaXMgc3RyYWlnaHRmb3J3YXJkOiBpdCBhZGRyZXNzZXMgYW4gdW5pbml0aWFsaXplZCBzdGFjayBtZW1vcnkgbGVhayB3aXRoaW4gYGJyY21mX2N5d19leHRlcm5hbF9hdXRoYC4gVGhlIHZ1bG5lcmFiaWxpdHkgYXJpc2VzIGJlY2F1c2Ugb2YgdW5pbml0aWFsaXplZCBkYXRhIGluIGBhdXRoX3N0YXR1c2AgYW5kIGltcHJvcGVybHkgY29waWVkIGBwbWtpZGAuIFRoZSBmdW5jdGlvbiBpcyB0cmlnZ2VyZWQgdmlhIHRoZSBgTkw4MDIxMV9DTURfRVhURVJOQUxfQVVUSGAgbmV0bGluayBjb21tYW5kLCB3aGljaCBtZWFucyBpdCdzIGFjY2Vzc2libGUgd2hlbiB1c2luZyBhIEJyb2FkY29tIEZ1bGxNQUMgZGV2aWNlLCBwYXJ0aWN1bGFybHkgdGhvc2UgZW11bGF0ZWQgb3ZlciBQQ0kgb3IgVVNCLCBmb3IgZXhhbXBsZSBpbiBhIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnQuIFRoZSBpbXBsaWNhdGlvbnMgYXJlIGNsZWFyOiBzeXprYWxsZXIncyBQQ0kvVVNCIGVtdWxhdGlvbiBjb3VsZCBiZSBsZXZlcmFnZWQgdG8gbW9jayBmaXJtd2FyZSBsb2FkaW5nIGFuZCBkZXZpY2UgaW5pdGlhbGl6YXRpb24sIGFsbG93aW5nIGZvciBlZmZlY3RpdmUgZnV6emluZyBvZiB0aGlzIHNwZWNpZmljIGNvZGUgcGF0aC5cblxuQWxyaWdodCwgSSdtIGNvbmZpZGVudCBpbiBteSB1bmRlcnN0YW5kaW5nLCB0aW1lIHRvIGZvcm1hdCB0aGUgb3V0cHV0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NTU3MywiT3V0cHV0VG9rZW5zIjoyMTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxOTowMjoxNC42MDUzMzY5MDJaIiwiU2VxIjoxMzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI4NzE0NDk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDRkc4MDIxMVwiLFxuICAgIFwiQlJDTUZNQUNcIixcbiAgICBcIkJSQ01GTUFDX1BDSUVcIixcbiAgICBcIkJSQ01GTUFDX1VTQlwiLFxuICAgIFwiQlJDTUZNQUNfU0RJT1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJyY21mX2N5d19leHRlcm5hbF9hdXRoXCIsXG4gICAgXCJubDgwMjExX2V4dGVybmFsX2F1dGhcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiB1bmluaXRpYWxpemVkIHN0YWNrIG1lbW9yeSBsZWFrIGluIGBicmNtZl9jeXdfZXh0ZXJuYWxfYXV0aGAgYnkgemVyby1pbml0aWFsaXppbmcgYGF1dGhfc3RhdHVzYCBhbmQgcHJvcGVybHkgY29weWluZyBgcG1raWRgLiBUaGUgZnVuY3Rpb24gaXMgcmVhY2hhYmxlIHZpYSB0aGUgYE5MODAyMTFfQ01EX0VYVEVSTkFMX0FVVEhgIG5ldGxpbmsgY29tbWFuZCB3aGVuIGEgQnJvYWRjb20gRnVsbE1BQyBkZXZpY2UgKGUuZy4sIGVtdWxhdGVkIHZpYSBQQ0kgb3IgVVNCKSBpcyByZWdpc3RlcmVkLiBUaGUgZHJpdmVyIGNhbiBiZSBmdXp6ZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHVzaW5nIHN5emthbGxlcidzIFBDSS9VU0IgZW11bGF0aW9uIGNhcGFiaWxpdGllcywgd2hpY2ggY2FuIG1vY2sgdGhlIGZpcm13YXJlIGxvYWRpbmcgcHJvY2VzcyBhbmQgZGV2aWNlIGluaXRpYWxpemF0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNGRzgwMjExXCIsXG4gICAgXCJCUkNNRk1BQ1wiLFxuICAgIFwiQlJDTUZNQUNfUENJRVwiLFxuICAgIFwiQlJDTUZNQUNfVVNCXCIsXG4gICAgXCJCUkNNRk1BQ19TRElPXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnJjbWZfY3l3X2V4dGVybmFsX2F1dGhcIixcbiAgICBcIm5sODAyMTFfZXh0ZXJuYWxfYXV0aFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIHVuaW5pdGlhbGl6ZWQgc3RhY2sgbWVtb3J5IGxlYWsgaW4gYGJyY21mX2N5d19leHRlcm5hbF9hdXRoYCBieSB6ZXJvLWluaXRpYWxpemluZyBgYXV0aF9zdGF0dXNgIGFuZCBwcm9wZXJseSBjb3B5aW5nIGBwbWtpZGAuIFRoZSBmdW5jdGlvbiBpcyByZWFjaGFibGUgdmlhIHRoZSBgTkw4MDIxMV9DTURfRVhURVJOQUxfQVVUSGAgbmV0bGluayBjb21tYW5kIHdoZW4gYSBCcm9hZGNvbSBGdWxsTUFDIGRldmljZSAoZS5nLiwgZW11bGF0ZWQgdmlhIFBDSSBvciBVU0IpIGlzIHJlZ2lzdGVyZWQuIFRoZSBkcml2ZXIgY2FuIGJlIGZ1enplZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdXNpbmcgc3l6a2FsbGVyJ3MgUENJL1VTQiBlbXVsYXRpb24gY2FwYWJpbGl0aWVzLCB3aGljaCBjYW4gbW9jayB0aGUgZmlybXdhcmUgbG9hZGluZyBwcm9jZXNzIGFuZCBkZXZpY2UgaW5pdGlhbGl6YXRpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE5OjAyOjE0LjczNDA1ODg4OVoiLCJTZXEiOjEzNSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMTY3ODA5NTQ1MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE5OjAyOjE0LjczNDY4Mzk5OFoiLCJTZXEiOjEzNiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTIxNjc3NDY2OTIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBsZWFrIHRvIHRoZSBkZXZpY2UgZmlybXdhcmUgYnkgZnVsbHkgemVyby1pbml0aWFsaXppbmcgdGhlIGBhdXRoX3N0YXR1c2Agc3RhY2sgc3RydWN0dXJlIChgPSB7fWApIGJlZm9yZSBpdCBpcyBwYXNzZWQgdG8gYGJyY21mX2ZpbF9pb3Zhcl9kYXRhX3NldCgpYC4gSXQgYWxzbyBjb25kaXRpb25hbGx5IGNvcGllcyBgcGFyYW1zLVxcdTAwM2VwbWtpZGAgaW50byB0aGUgc3RydWN0dXJlLCB3aGljaCBpcyBndWFyYW50ZWVkIHRvIGJlIGZ1bGx5IGluaXRpYWxpemVkIGFuZCBvZiB0aGUgY29ycmVjdCBsZW5ndGggKGBXTEFOX1BNS0lEX0xFTmApIGR1ZSB0byBuZXRsaW5rIGF0dHJpYnV0ZSB2YWxpZGF0aW9uIChgTkxBX1BPTElDWV9FWEFDVF9MRU5fV0FSTmAgb24gYE5MODAyMTFfQVRUUl9QTUtJRGApLiBTaW5jZSBhbGwgc3RhY2sgc3RydWN0dXJlcyB0b3VjaGVkIGJ5IHRoZSBwYXRjaCBhcmUgbm93IGZ1bGx5IHplcm9lZCBhbmQgaW5pdGlhbGl6ZWQsIHRoZSBwYXRjaCBjb21wbGV0ZWx5IHJlc29sdmVzIHRoZSB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZSBhbmQgZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMjMzMDIzMDAyOGViMDk1MjkwNDM2ZjYyNTM0ZTRlNTY1YjgyODI2ZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDcgMTg6NDk6MDAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L2NvcmUuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvY29yZS5jXG5pbmRleCA4NzM3NTRiZTUxNzRiLi5jODZkMGJkZGU4MzI2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmNcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvY29yZS5jXG5AQCAtMjAwLDcgKzIwMCw3IEBAIGJyY21mX2N5d19leHRlcm5hbF9hdXRoKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4ge1xuIFx0c3RydWN0IGJyY21mX2lmICppZnA7XG4gXHRzdHJ1Y3QgYnJjbWZfcHViICpkcnZyO1xuLVx0c3RydWN0IGJyY21mX2F1dGhfcmVxX3N0YXR1c19sZSBhdXRoX3N0YXR1cztcbitcdHN0cnVjdCBicmNtZl9hdXRoX3JlcV9zdGF0dXNfbGUgYXV0aF9zdGF0dXMgPSB7fTtcbiBcdGludCByZXQgPSAwO1xuIFxuIFx0YnJjbWZfZGJnKFRSQUNFLCBcIkVudGVyXFxuXCIpO1xuQEAgLTIwOCw2ICsyMDgsOSBAQCBicmNtZl9jeXdfZXh0ZXJuYWxfYXV0aChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0aWZwID0gbmV0ZGV2X3ByaXYoZGV2KTtcbiBcdGRydnIgPSBpZnAtXHUwMDNlZHJ2cjtcbiBcdGlmIChwYXJhbXMtXHUwMDNlc3RhdHVzID09IFdMQU5fU1RBVFVTX1NVQ0NFU1MpIHtcbitcdFx0aWYgKHBhcmFtcy1cdTAwM2VwbWtpZClcbitcdFx0XHRtZW1jcHkoYXV0aF9zdGF0dXMucG1raWQsIHBhcmFtcy1cdTAwM2VwbWtpZCxcbitcdFx0XHQgICAgICAgV0xBTl9QTUtJRF9MRU4pO1xuIFx0XHRhdXRoX3N0YXR1cy5mbGFncyA9IGNwdV90b19sZTE2KEJSQ01GX0VYVEFVVEhfU1VDQ0VTUyk7XG4gXHR9IGVsc2Uge1xuIFx0XHRicGh5X2VycihkcnZyLCBcIkV4dGVybmFsIGF1dGhlbnRpY2F0aW9uIGZhaWxlZDogc3RhdHVzPSVkXFxuXCIsXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxOTowMjoxNC43MzQ2ODQ4ODlaIiwiU2VxIjoxMzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwNjY4MjMzOTc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIENvbnNpZGVyYXRpb24gZm9yIGEgQnJvYWRjb20gV2lGaSBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBicmNtZl9jeXdfZXh0ZXJuYWxfYXV0aGAgaW4gdGhlIEJyb2FkY29tIFdpRmkgZHJpdmVyLiBJdCdzIGEgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBjaGFuZ2U6IHRoZXkncmUgaW5pdGlhbGl6aW5nIHRoZSBgYXV0aF9zdGF0dXNgIHN0cnVjdCB0byB6ZXJvIChgPSB7fWApIHdoZXJlIGl0IHdhc24ndCBiZWZvcmUuIE15IGluaXRpYWwgdGhvdWdodCBpcywgXCJBaGEhIFRoaXMgaXMgYSBjbGFzc2ljIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGZpeCFcIlxuXG5Ob3csIHRoZSBpbnN0cnVjdGlvbnMgYXJlIHZlcnkgc3BlY2lmaWMgYWJvdXQgS01TQU46IG9ubHkgaWYgdGhlICpjb2RlIGNoYW5nZXMqIGludHJvZHVjZSAqb3IgZXhwb3NlKiB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gVGhlIGtleSB3b3JkIGhlcmUgaXMgXCIqaW50cm9kdWNlIG9yIGV4cG9zZSpcIi4gVGhpcyBwYXRjaCBkb2Vzbid0ICppbnRyb2R1Y2UqIHRoZSBwcm9ibGVtOyBpdCAqZml4ZXMqIGl0LiBCdXQuLi4gdGhlIGZhY3QgdGhhdCB0aGV5J3JlICpmaXhpbmcqIGl0IG1lYW5zIHRoZSB1bmRlcmx5aW5nIGNvZGUgKmhhZCogYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUgaW4gdGhlIGZpcnN0IHBsYWNlLCByaWdodD9cblxuSSdtIHdyZXN0bGluZyB3aXRoIHRoZSB3b3JkaW5nLiBUaGUgcHJvbXB0IHNheXMsIHNwZWNpZmljYWxseSwgXCJPTkxZIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZS4uLlwiIFNvLCBhIGZpeCBkb2Vzbid0ICppbnRyb2R1Y2Ugb3IgZXhwb3NlKiB0aGUgYnVnOyBpdCBhZGRyZXNzZXMgYSBwcmUtZXhpc3RpbmcgaXNzdWUuIEl0J3Mgbm90ICppbnRyb2R1Y2luZyogdGhlIHJpc2ssIGJ1dCBpdCdzIG5vdyBrbm93biwgc28gcGVyaGFwcyB0ZXN0aW5nIHNob3VsZCBoYXBwZW4uXG5cbkJ1dCB3YWl0LCB0aGUgcHJvbXB0IGFsc28gc2F5cywgXCJkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOLi4uIGZ1enppbmcgc2Vzc2lvblwiLiBJZiB0aGV5J3JlIGZpeGluZyBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBidWcsIEtNU0FOIGlzICpwcmVjaXNlbHkqIHRoZSByaWdodCB0b29sIHRvIHZlcmlmeSB0aGUgZml4IGFuZCBsb29rIGZvciBzaW1pbGFyIGlzc3VlcyBuZWFyYnkhIFRoaXMgaXMgYSBwcmltZSBvcHBvcnR1bml0eSB0byB1c2UgS01TQU4gdG8gZW5zdXJlIHRoZSBmaXggaXMgc29saWQgYW5kIGNhdGNoIGFueSByZWxhdGVkLCBsdXJraW5nIHByb2JsZW1zLiBUaGlzIGlzIGV4YWN0bHkgd2hhdCBLTVNBTiBpcyBmb3IsIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuXG5cblRoZSBwYXRjaCBpdHNlbGYgaXMgYSBjbGVhciBpbml0aWFsaXphdGlvbjogYHN0cnVjdCBicmNtZl9hdXRoX3JlcV9zdGF0dXNfbGUgYXV0aF9zdGF0dXMgPSB7fTtgLiBTbywgdGhpcyBwYXRjaCBmaXhlcyB0aGUgdW5pbml0aWFsaXplZCBtZW1vcnkuIE5vdywgYW0gSSAqaW50cm9kdWNpbmcqIG9yICpleHBvc2luZyogYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlzaz8gTm8sIEknbSAqZml4aW5nKiBvbmUuIEhvd2V2ZXIsIHRoZSBleGlzdGluZyBjb2RlIGhhcyBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZSwgc28gaXQncyBhIHZhbGlkIGFyZ3VtZW50IHRvIHJ1biBLTVNBTiB0byB2ZXJpZnkuXG5cblRvIGJlIHN1cmUsIEkgbmVlZCB0byBjaGVjayB3aGVyZSBgYXV0aF9zdGF0dXNgIGlzIGJlaW5nIHVzZWQuIElzIHRoaXMgZGF0YSB0aGF0J3MgcG90ZW50aWFsbHkgc2VudCB0byB1c2Vyc3BhY2Ugb3IgaGFyZHdhcmU/IEknbSBnb2luZyB0byBncmVwIGZvciBgYnJjbWZfY3l3X2V4dGVybmFsX2F1dGhgIHRvIHVuZGVyc3RhbmQgaXRzIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyNTAsIk91dHB1dFRva2VucyI6NTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NzYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxOTowMjoyNS40MDI5MjM3MjNaIiwiU2VxIjoxMzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjExMjcwMjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnJjbWZfY3l3X2V4dGVybmFsX2F1dGhcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmM9MTk3PXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L2NvcmUuYzoxOTg6YnJjbWZfY3l3X2V4dGVybmFsX2F1dGgoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L2NvcmUuYy0xOTktXFx0XFx0XFx0c3RydWN0IGNmZzgwMjExX2V4dGVybmFsX2F1dGhfcGFyYW1zICpwYXJhbXMpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L2NvcmUuYz0yMzU9c3RhdGljIHZvaWQgYnJjbWZfY3l3X2dldF9jZmc4MDIxMV9vcHMoc3RydWN0IGJyY21mX3B1YiAqZHJ2cilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvY29yZS5jLTIzNy1cXHRkcnZyLVxcdTAwM2VvcHMtXFx1MDAzZW1nbXRfdHggPSBicmNtZl9jeXdfbWdtdF90eDtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L2NvcmUuYzoyMzg6XFx0ZHJ2ci1cXHUwMDNlb3BzLVxcdTAwM2VleHRlcm5hbF9hdXRoID0gYnJjbWZfY3l3X2V4dGVybmFsX2F1dGg7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmMtMjM5LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTk6MDI6MjYuMDI0MDYxNTA4WiIsIlNlcSI6MTM5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDgyNDYxNzU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aG9zZSB0aG91Z2h0cyBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlLCB1c2luZyBhIGZpcnN0LXBlcnNvbiBwZXJzcGVjdGl2ZTpcblxuKipEZWVwIERpdmUgaW50byBgYnJjbWZfY3l3X2V4dGVybmFsX2F1dGhgIGFuZCBgYXV0aF9zdGF0dXNgKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBldm9sdXRpb24gb2YgdGhhdCBgYXV0aF9zdGF0dXNgIHZhcmlhYmxlIHdpdGhpbiBgYnJjbWZfY3l3X2V4dGVybmFsX2F1dGhgLiBUaGlzIGlzIGNydWNpYWwuIEkga25vdyB0aGlzIGZ1bmN0aW9uIGlzIHRoZSBsaWtlbHkgbmV4dXMgZm9yIGV4dGVybmFsIGF1dGhlbnRpY2F0aW9uIHByb2Nlc3NlcyBpbiB0aGUgQnJvYWRjb20gd2lyZWxlc3Mgc3RhY2ssIHNvIHRyYWNpbmcgaXRzIHBhdGggaXMga2V5LlxuXG5NeSBmb2N1cyBub3cgaXMgcHVyZWx5IG9uIGhvdyB0aGF0IHNwZWNpZmljIHZhcmlhYmxlIGlzIHVzZWQsIGNoYW5nZWQsIHRlc3RlZCwgYW5kIHBhc3NlZCBhbG9uZyB3aXRoaW4gdGhpcyBtb2R1bGUuIEknbSBsb29raW5nIGZvciB0aGUgc3RhdGUgdHJhbnNpdGlvbnMgaXQgdW5kZXJnb2VzIGFuZCB0aGUgY29uZGl0aW9uYWwgbG9naWMgZ292ZXJuaW5nIHRob3NlIHRyYW5zaXRpb25zLiBJcyBpdCBhIHNpbXBsZSBmbGFnLCBhbiBlbnVtZXJhdGVkIHR5cGUsIG9yIHNvbWV0aGluZyBtb3JlIGNvbXBsZXg/IFdoYXQgYXJlIHRoZSBwb3RlbnRpYWwgdmFsdWVzIGl0IGNhbiB0YWtlLCBhbmQgd2hhdCBkbyB0aG9zZSB2YWx1ZXMgKm1lYW4qIGluIHRoZSBjb250ZXh0IG9mIHRoZSBhdXRoZW50aWNhdGlvbiBmbG93P1xuXG5JJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucyBvZiBhbnkgcmFjZSBjb25kaXRpb25zIG9yIGNvbmN1cnJlbmN5IGlzc3VlcyB0aGF0IG1pZ2h0IGFyaXNlIGFyb3VuZCBhY2Nlc3MgdG8gYGF1dGhfc3RhdHVzYC4gSXMgaXQgcHJvdGVjdGVkIGJ5IGFueSBsb2Nrcz8gQXJlIHRoZXJlIHBvdGVudGlhbCBzY2VuYXJpb3Mgd2hlcmUgaXRzIHN0YXRlIGNvdWxkIGJlY29tZSBpbmNvbnNpc3RlbnQsIGxlYWRpbmcgdG8gc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzIG9yIGF1dGhlbnRpY2F0aW9uIGZhaWx1cmVzP1xuXG5UaGlzIGlzIHdoZXJlIHRoZSByZWFsIHdvcmsgYmVnaW5zLiBJIG5lZWQgdG8gc3RhcnQgZGlnZ2luZyB0aHJvdWdoIHRoZSBjb2RlLCBsb29raW5nIGZvciBhbGwgcmVmZXJlbmNlcyB0byBgYXV0aF9zdGF0dXNgIHdpdGhpbiB0aGlzIGZ1bmN0aW9uLiBJJ2xsIG5lZWQgdG8gZm9sbG93IHRoZSBjb250cm9sIGZsb3cgY2FyZWZ1bGx5LCBwYXlpbmcgYXR0ZW50aW9uIHRvIGFueSBpbnRlcmFjdGlvbnMgd2l0aCBleHRlcm5hbCBzeXN0ZW1zIG9yIGRyaXZlcnMuIEknbSBsb29raW5nIGZvciBjbHVlcyBhYm91dCB0aGUgb3ZlcmFsbCBhdXRoZW50aWNhdGlvbiBhcmNoaXRlY3R1cmUgYW5kIGl0cyByb2J1c3RuZXNzLCBsb29raW5nIGZvciBhbnkgd2Vha25lc3NlcywgYW5kIHBvdGVudGlhbCBhdHRhY2sgdmVjdG9ycy4gVGltZSB0byBnZXQgdG8gd29yay5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzg1MiwiT3V0cHV0VG9rZW5zIjo1NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE5OjAyOjMwLjUwNjUyNzEwNFoiLCJTZXEiOjE0MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMyNTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE5MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE5MDpcXHRcXHRjZmc4MDIxMV9tZ210X3R4X3N0YXR1cyh3ZGV2LCAqY29va2llLCBidWYsIGxlbiwgYWNrLFxcbiAxOTE6XFx0XFx0XFx0XFx0XFx0R0ZQX0tFUk5FTCk7XFxuIDE5MjpcXHRmcmVlOlxcbiAxOTM6XFx0XFx0a2ZyZWUobWZfcGFyYW1zKTtcXG4gMTk0OlxcdFxcdHJldHVybiBlcnI7XFxuIDE5NTpcXHR9XFxuIDE5NjpcXHRcXG4gMTk3OlxcdHN0YXRpYyBpbnRcXG4gMTk4OlxcdGJyY21mX2N5d19leHRlcm5hbF9hdXRoKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIDE5OTpcXHRcXHRcXHRcXHRzdHJ1Y3QgY2ZnODAyMTFfZXh0ZXJuYWxfYXV0aF9wYXJhbXMgKnBhcmFtcylcXG4gMjAwOlxcdHtcXG4gMjAxOlxcdFxcdHN0cnVjdCBicmNtZl9pZiAqaWZwO1xcbiAyMDI6XFx0XFx0c3RydWN0IGJyY21mX3B1YiAqZHJ2cjtcXG4gMjAzOlxcdFxcdHN0cnVjdCBicmNtZl9hdXRoX3JlcV9zdGF0dXNfbGUgYXV0aF9zdGF0dXMgPSB7fTtcXG4gMjA0OlxcdFxcdGludCByZXQgPSAwO1xcbiAyMDU6XFx0XFxuIDIwNjpcXHRcXHRicmNtZl9kYmcoVFJBQ0UsIFxcXCJFbnRlclxcXFxuXFxcIik7XFxuIDIwNzpcXHRcXG4gMjA4OlxcdFxcdGlmcCA9IG5ldGRldl9wcml2KGRldik7XFxuIDIwOTpcXHRcXHRkcnZyID0gaWZwLVxcdTAwM2VkcnZyO1xcbiAyMTA6XFx0XFx0aWYgKHBhcmFtcy1cXHUwMDNlc3RhdHVzID09IFdMQU5fU1RBVFVTX1NVQ0NFU1MpIHtcXG4gMjExOlxcdFxcdFxcdGlmIChwYXJhbXMtXFx1MDAzZXBta2lkKVxcbiAyMTI6XFx0XFx0XFx0XFx0bWVtY3B5KGF1dGhfc3RhdHVzLnBta2lkLCBwYXJhbXMtXFx1MDAzZXBta2lkLFxcbiAyMTM6XFx0XFx0XFx0XFx0ICAgICAgIFdMQU5fUE1LSURfTEVOKTtcXG4gMjE0OlxcdFxcdFxcdGF1dGhfc3RhdHVzLmZsYWdzID0gY3B1X3RvX2xlMTYoQlJDTUZfRVhUQVVUSF9TVUNDRVNTKTtcXG4gMjE1OlxcdFxcdH0gZWxzZSB7XFxuIDIxNjpcXHRcXHRcXHRicGh5X2VycihkcnZyLCBcXFwiRXh0ZXJuYWwgYXV0aGVudGljYXRpb24gZmFpbGVkOiBzdGF0dXM9JWRcXFxcblxcXCIsXFxuIDIxNzpcXHRcXHRcXHRcXHQgcGFyYW1zLVxcdTAwM2VzdGF0dXMpO1xcbiAyMTg6XFx0XFx0XFx0YXV0aF9zdGF0dXMuZmxhZ3MgPSBjcHVfdG9fbGUxNihCUkNNRl9FWFRBVVRIX0ZBSUwpO1xcbiAyMTk6XFx0XFx0fVxcbiAyMjA6XFx0XFxuIDIyMTpcXHRcXHRtZW1jcHkoYXV0aF9zdGF0dXMucGVlcl9tYWMsIHBhcmFtcy1cXHUwMDNlYnNzaWQsIEVUSF9BTEVOKTtcXG4gMjIyOlxcdFxcdHBhcmFtcy1cXHUwMDNlc3NpZC5zc2lkX2xlbiA9IG1pbl90KHU4LCBwYXJhbXMtXFx1MDAzZXNzaWQuc3NpZF9sZW4sXFxuIDIyMzpcXHRcXHRcXHRcXHRcXHQgICAgICBJRUVFODAyMTFfTUFYX1NTSURfTEVOKTtcXG4gMjI0OlxcdFxcdGF1dGhfc3RhdHVzLnNzaWRfbGVuID0gY3B1X3RvX2xlMzIocGFyYW1zLVxcdTAwM2Vzc2lkLnNzaWRfbGVuKTtcXG4gMjI1OlxcdFxcdG1lbWNweShhdXRoX3N0YXR1cy5zc2lkLCBwYXJhbXMtXFx1MDAzZXNzaWQuc3NpZCwgcGFyYW1zLVxcdTAwM2Vzc2lkLnNzaWRfbGVuKTtcXG4gMjI2OlxcdFxcbiAyMjc6XFx0XFx0cmV0ID0gYnJjbWZfZmlsX2lvdmFyX2RhdGFfc2V0KGlmcCwgXFxcImF1dGhfc3RhdHVzXFxcIiwgXFx1MDAyNmF1dGhfc3RhdHVzLFxcbiAyMjg6XFx0XFx0XFx0XFx0XFx0ICAgICAgIHNpemVvZihhdXRoX3N0YXR1cykpO1xcbiAyMjk6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIDIzMDpcXHRcXHRcXHRicGh5X2VycihkcnZyLCBcXFwiYXV0aF9zdGF0dXMgaW92YXIgZmFpbGVkOiByZXQ9JWRcXFxcblxcXCIsIHJldCk7XFxuIDIzMTpcXHRcXG4gMjMyOlxcdFxcdHJldHVybiByZXQ7XFxuIDIzMzpcXHR9XFxuIDIzNDpcXHRcXG4gMjM1OlxcdHN0YXRpYyB2b2lkIGJyY21mX2N5d19nZXRfY2ZnODAyMTFfb3BzKHN0cnVjdCBicmNtZl9wdWIgKmRydnIpXFxuIDIzNjpcXHR7XFxuIDIzNzpcXHRcXHRkcnZyLVxcdTAwM2VvcHMtXFx1MDAzZW1nbXRfdHggPSBicmNtZl9jeXdfbWdtdF90eDtcXG4gMjM4OlxcdFxcdGRydnItXFx1MDAzZW9wcy1cXHUwMDNlZXh0ZXJuYWxfYXV0aCA9IGJyY21mX2N5d19leHRlcm5hbF9hdXRoO1xcbiAyMzk6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxOTowMjozMC41MDY2NjMxNDRaIiwiU2VxIjoxNDEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkzMTE5MDM3ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQ29uc2lkZXJhdGlvbiBmb3IgYSBGaXJtd2FyZSBEYXRhIFRyYW5zZmVyKipcblxuT2theSwgc28gYGF1dGhfc3RhdHVzYCBpcyBiZWluZyBwYXNzZWQgaW50byBgYnJjbWZfZmlsX2lvdmFyX2RhdGFfc2V0YC4gVGhhdCBmdW5jdGlvbiwgaW4gdHVybiwgaXMgcmVzcG9uc2libGUgZm9yIHNlbmRpbmcgZGF0YSB0byB0aGUgZmlybXdhcmUsIHdoaWNoIGltbWVkaWF0ZWx5IGZsYWdzIGEgcG90ZW50aWFsIGlzc3VlIGluIG15IG1pbmQuIFRoZSBxdWVzdGlvbiB0aGVuIGJlY29tZXMsIGlzIHNlbmRpbmcgcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdGhlIGRldmljZSBhIEtNU0FOIGlzc3VlPyBJdCBsb29rcyBsaWtlIHRoZSBhbnN3ZXIgaXMgeWVzLCBnaXZlbiB0aGF0IEtNU0FOIGlzIGRlc2lnbmVkIHRvIGNhdGNoIGV4YWN0bHkgdGhhdCBzY2VuYXJpbzogdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgc2VudCB0byBlaXRoZXIgaGFyZHdhcmUgb3IgdXNlciBzcGFjZS5cblxuTm93LCBsZXQncyBzdGVwIGJhY2sgYW5kIGNvbnNpZGVyIHRoZSBwcm9tcHQncyBndWlkZWxpbmVzLiBJdCBzcGVjaWZpZXMgdGhhdCB3ZSBzaG91bGQgb25seSBzZXQgYE5lZWRzS01TQU49dHJ1ZWAgaWYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgY29kZSB0aGF0IGZhbGxzIGludG8gc3BlY2lmaWMgY2F0ZWdvcmllcy4gTGV0IG1lIHF1aWNrbHkgcmV2aWV3IHRob3NlIGNhdGVnb3JpZXPigKZcblxuMS4gIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSB3aGVyZSBmaWVsZHMgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkLlxuMi4gIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyBkZXBlbmRlbnQgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuXG4zLiAgQWxsb2NhdGlvbiBhbmQgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZCBsYXRlci5cbjQuICBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyB0aGF0IGNvdWxkIGxlYWQgdG8gYWNjZXNzaW5nIHVuaW5pdGlhbGl6ZWQgYnl0ZXMuXG5cblNvLCBgYnJjbWZfZmlsX2lvdmFyX2RhdGFfc2V0YCBzZW5kcyBkYXRhIHRvIHRoZSAqZmlybXdhcmUqLCBhbmQgS01TQU4gaG9va3MgdGhlIGRtYS1tYXBwaW5nIGZ1bmN0aW9ucyB0aGF0IGFyZSB1c2VkIHRvIGRldGVjdCB0aGlzLiBJbXBvcnRhbnRseSwgdGhlIHByb21wdCBtZW50aW9ucyB0aGF0IHdlIHNob3VsZCBzZXQgYE5lZWRzS01TQU49dHJ1ZWAgKm9ubHkqIGlmIHRoZSBjaGFuZ2VzIGV4cG9zZSAqdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MqIHRoYXQgYXJlICpvbmx5KiBkZXRlY3RlZCBieSBLTVNBTi5cblxuVGhlIGtleSBpcyB0aGF0IHRoZSBwYXRjaCAqZXhwbGljaXRseSBmaXhlcyogYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUuIENvbnNpZGVyaW5nIHRoZSBwcm9tcHTigJlzIGNyaXRlcmlhLCB0aGlzIGlzIGEgbW9kaWZpY2F0aW9uIG9mIGluaXRpYWxpemF0aW9uIG9mIGEgY29tcGxleCBkYXRhIHN0cnVjdHVyZSB0aGF0IHdvdWxkIGxhdGVyIGJlIHJlYWQgYnkgdGhlIGZpcm13YXJlIG9yIHZpYSBETUEuIFRoaXMgc2VlbXMgdG8gZmFsbCBkaXJlY3RseSBpbnRvIGNhdGVnb3J5IDMsIGFzIHRoZSBmaXggYWRkcmVzc2VzIGEgc2NlbmFyaW8gd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgKmNvdWxkKiBiZSByZWFkIGxhdGVyLiBUaGUgcHJvbXB0IGFsc28gbm90ZXMgdGhhdCBpZiB0aGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzIHdlIHNldCBgTmVlZHNLTVNBTj1mYWxzZWAsIGhvd2V2ZXIgdGhpcyBwYXRjaCBpcyBhIGZpeCBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnksIG5vdCBhbiBvdXQtb2YtYm91bmRzIGlzc3VlLlxuXG5JdCBmb2xsb3dzIHRoYXQgaWYgdGhlIHBhdGNoICpmaXhlcyogYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUsIEtNU0FOIGlzIHByb2JhYmx5IG5lZWRlZCB0byB0ZXN0IHRoZSBmaXggaXRzZWxmLiBXZSB3YW50IHRvIHZlcmlmeSB0aGF0IHRoZSBwYXRjaCB0cnVseSByZXNvbHZlcyB0aGUgcHJvYmxlbSwgYW5kIHRoYXQgbm8gb3RoZXIgZmllbGRzIGFyZSBsZWZ0IHVuaW5pdGlhbGl6ZWQuIEZ1cnRoZXJtb3JlLCBLTVNBTiB3aWxsIHZlcmlmeSB0aGF0IHRoZSBidWcgaXMgY2F1Z2h0IGJ5IEtNU0FOLlxuXG5UaGUgcHJvbXB0IGFsc28gc3BlYWtzIHRvIEtNU0FOIGZ1enppbmcgc2Vzc2lvbnMuIElmIHRoZSBwYXRjaCBmaXhlcyBhIEtNU0FOIGJ1ZywgYSBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgYSBuZWNlc3NpdHkuXG5cbkZpbmFsbHksIEkgc2hvdWxkIHJldmlldyB0aGUgYHN0cnVjdCBicmNtZl9hdXRoX3JlcV9zdGF0dXNfbGVgIHN0cnVjdHVyZSwgdG8gYmV0dGVyIHVuZGVyc3RhbmQgaG93IGl0IGlzIHVzZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUxNjAsIk91dHB1dFRva2VucyI6NTQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NjIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxOTowMjozOS44MTg1Njk5MzlaIiwiU2VxIjoxNDIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDYyMzk1ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IGJyY21mX2F1dGhfcmVxX3N0YXR1c19sZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvY29yZS5jPTE5OD1icmNtZl9jeXdfZXh0ZXJuYWxfYXV0aChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmMtMjAyLVxcdHN0cnVjdCBicmNtZl9wdWIgKmRydnI7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmM6MjAzOlxcdHN0cnVjdCBicmNtZl9hdXRoX3JlcV9zdGF0dXNfbGUgYXV0aF9zdGF0dXMgPSB7fTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L2NvcmUuYy0yMDQtXFx0aW50IHJldCA9IDA7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L2NvcmUuYz0yNDI9YnJjbWZfY3l3X25vdGlmeV9leHRfYXV0aF9yZXEoc3RydWN0IGJyY21mX2lmICppZnAsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L2NvcmUuYy0yNDYtXFx0c3RydWN0IGNmZzgwMjExX2V4dGVybmFsX2F1dGhfcGFyYW1zIHBhcmFtcztcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L2NvcmUuYzoyNDc6XFx0c3RydWN0IGJyY21mX2F1dGhfcmVxX3N0YXR1c19sZSAqYXV0aF9yZXEgPVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvY29yZS5jOjI0ODpcXHRcXHQoc3RydWN0IGJyY21mX2F1dGhfcmVxX3N0YXR1c19sZSAqKWRhdGE7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmMtMjQ5LVxcdHMzMiBlcnIgPSAwO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9md2lsX3R5cGVzLmg9MzE9c3RydWN0IGJyY21mX2V2ZW50bXNnc19leHQge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9md2lsX3R5cGVzLmgtNDQtLyoqXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9md2lsX3R5cGVzLmg6NDU6ICogc3RydWN0IGJyY21mX2F1dGhfcmVxX3N0YXR1c19sZSAtIGV4dGVybmFsIGF1dGggcmVxdWVzdCBhbmQgc3RhdHVzIHVwZGF0ZVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvZndpbF90eXBlcy5oLTQ2LSAqXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L2Z3aWxfdHlwZXMuaC01Mi0gKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L2Z3aWxfdHlwZXMuaDo1MzpzdHJ1Y3QgYnJjbWZfYXV0aF9yZXFfc3RhdHVzX2xlIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L2Z3aWxfdHlwZXMuaC01NC1cXHRfX2xlMTYgZmxhZ3M7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE5OjAyOjM5LjkyNDgxNTg4OFoiLCJTZXEiOjE0MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQwNzQ1MDQzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgYnJjbWZtYWMgRmlybXdhcmUgSW50ZXJmYWNlIFR5cGVzKipcblxuT2theSwgdGltZSB0byBkaWcgaW50byB0aGUgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvZndpbF90eXBlcy5oYCBmaWxlLiBJIHNwZWNpZmljYWxseSB3YW50IHRvIHplcm8gaW4gYXJvdW5kIGxpbmUgNTMuIEknbSBndWVzc2luZyB0aGF0J3Mgd2hlcmUgdGhleSdyZSBkZWZpbmluZyB0aGUgY29yZSBkYXRhIHN0cnVjdHVyZXMgZm9yIHRoZSBGaXJtd2FyZSBJbnRlcmZhY2UgTGF5ZXIsIG9yIG1heWJlIHRoZSBzcGVjaWZpYyB0eXBlcyB1c2VkIHRvIGNvbW11bmljYXRlIGJldHdlZW4gdGhlIGhvc3QgZHJpdmVyIGFuZCB0aGUgQnJvYWRjb20gZmlybXdhcmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSB0eXBlcyBhcmUgc3RydWN0dXJlZDogdGhlIHZhcmlvdXMgZGF0YSBmb3JtYXRzLCBlcnJvciBjb2RlcywgbWF5YmUgc29tZSByZXF1ZXN0L3Jlc3BvbnNlIHR5cGVzLiBJJ20gZXhwZWN0aW5nIHRoaXMgZmlsZSB0byBiZSBjcml0aWNhbCBpbiB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgYnJjbWZtYWMgZHJpdmVyIGludGVyYWN0cyBhdCB0aGUgbG93ZXN0IGxldmVsIHdpdGggdGhlIHdpcmVsZXNzIGhhcmR3YXJlIGFuZCBmaXJtd2FyZS4gTGV0J3Mgc2VlIGlmIG15IGh1bmNoIGlzIHJpZ2h0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MTI5LCJPdXRwdXRUb2tlbnMiOjU4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTk6MDI6NDQuMzMyMjY5MjAxWiIsIlNlcSI6MTQ0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MjYyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L2Z3aWxfdHlwZXMuaFwiLFxuICBcIkZpcnN0TGluZVwiOiA0MCxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA0MDpcXHQjZGVmaW5lIEJSQ01GX0VYVEFVVEhfQUJPUlRcXHRcXHQyXFxuICA0MTpcXHQjZGVmaW5lIEJSQ01GX0VYVEFVVEhfRkFJTFxcdFxcdDNcXG4gIDQyOlxcdCNkZWZpbmUgQlJDTUZfRVhUQVVUSF9TVUNDRVNTXFx0XFx0NFxcbiAgNDM6XFx0XFxuICA0NDpcXHQvKipcXG4gIDQ1OlxcdCAqIHN0cnVjdCBicmNtZl9hdXRoX3JlcV9zdGF0dXNfbGUgLSBleHRlcm5hbCBhdXRoIHJlcXVlc3QgYW5kIHN0YXR1cyB1cGRhdGVcXG4gIDQ2OlxcdCAqXFxuICA0NzpcXHQgKiBAZmxhZ3M6IGZsYWdzIGZvciBleHRlcm5hbCBhdXRoIHN0YXR1c1xcbiAgNDg6XFx0ICogQHBlZXJfbWFjOiBwZWVyIE1BQyBhZGRyZXNzXFxuICA0OTpcXHQgKiBAc3NpZF9sZW46IGxlbmd0aCBvZiBzc2lkXFxuICA1MDpcXHQgKiBAc3NpZDogc3NpZCBjaGFyYWN0ZXJzXFxuICA1MTpcXHQgKiBAcG1raWQ6IFBNS1NBIGlkZW50aWZpZXJcXG4gIDUyOlxcdCAqL1xcbiAgNTM6XFx0c3RydWN0IGJyY21mX2F1dGhfcmVxX3N0YXR1c19sZSB7XFxuICA1NDpcXHRcXHRfX2xlMTYgZmxhZ3M7XFxuICA1NTpcXHRcXHR1OCBwZWVyX21hY1tFVEhfQUxFTl07XFxuICA1NjpcXHRcXHRfX2xlMzIgc3NpZF9sZW47XFxuICA1NzpcXHRcXHR1OCBzc2lkW0lFRUU4MDIxMV9NQVhfU1NJRF9MRU5dO1xcbiAgNTg6XFx0XFx0dTggcG1raWRbV0xBTl9QTUtJRF9MRU5dO1xcbiAgNTk6XFx0fTtcXG4gIDYwOlxcdFxcbiAgNjE6XFx0LyoqXFxuICA2MjpcXHQgKiBzdHJ1Y3QgYnJjbWZfbWZfcGFyYW1zX2xlIC0gbWFuYWdlbWVudCBmcmFtZSBwYXJhbWV0ZXJzIGZvciBtZ210X2ZyYW1lIGlvdmFyXFxuICA2MzpcXHQgKlxcbiAgNjQ6XFx0ICogQHZlcnNpb246IHZlcnNpb24gb2YgdGhlIGlvdmFyXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE5OjAyOjQ0LjMzMjM0NDU1MVoiLCJTZXEiOjE0NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA2NjkwNTQ4MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gRGV0ZXJtaW5hdGlvbiBmb3IgYnJjbWZfYXV0aF9yZXFfc3RhdHVzX2xlIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBiZWVuIHRhc2tlZCB3aXRoIGRlY2lkaW5nIGlmIHRoaXMgcGF0Y2ggd2FycmFudHMgYSBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIFRoaXMgaXMgYWJvdXQgYGJyY21mX2F1dGhfcmVxX3N0YXR1c19sZWAsIHdoaWNoIGlzIGEgc3RydWN0dXJlIGhvbGRpbmcgYXV0aGVudGljYXRpb24gcmVxdWVzdCBzdGF0dXMgaW5mb3JtYXRpb24uIEl0J3MgZ290IHNvbWUgZmxhZ3MsIE1BQyBhZGRyZXNzLCBTU0lEIGxlbmd0aCBhbmQgY29udGVudCwgYW5kIGEgUE1LSUQuIFRoZSBvcmlnaW5hbCBjb2RlIGhhZCBhIHBvdGVudGlhbCBpc3N1ZTogdGhlIGBhdXRoX3N0YXR1c2Agc3RydWN0IHdhcyBkZWNsYXJlZCBidXQgbm90IGluaXRpYWxpemVkIGJlZm9yZSBzb21lIG9mIGl0cyBtZW1iZXJzIChzcGVjaWZpY2FsbHkgdGhlIFNTSUQgYW5kIFBNS0lEKSBtaWdodCBiZSBwb3B1bGF0ZWQuIFRoZW4sIHRoZSAqZW50aXJlKiBzdHJ1Y3Qgd2FzIHNlbnQgdG8gdGhlIGZpcm13YXJlLiBUaGlzIHNldHMgb2ZmIGFsYXJtIGJlbGxzISBVbmluaXRpYWxpemVkIG1lbW9yeSBzZW50IHRvIHRoZSBmaXJtd2FyZSBpcyBhIGNsYXNzaWMgbGVhaywgYW5kIGNvdWxkIGhhdmUgcHJpdmFjeSBpbXBsaWNhdGlvbnMuXG5cblRoZSBwYXRjaCBmaXhlcyB0aGlzIGJ5IHplcm8taW5pdGlhbGl6aW5nIGBhdXRoX3N0YXR1c2AgdXNpbmcgYD17fWAuICBJdCBhbHNvIGNoZWNrcyBgcGFyYW1zLVx1MDAzZXBta2lkYCBiZWZvcmUgY29weWluZyBpdC4gVGhpcyBpcyBhIGNsZWFyIEtNU0FOIGZpeCEgV2Ugd2FudCBLTVNBTiB0byB2ZXJpZnkgdGhhdCB0aGUgZml4IGlzIGNvbXBsZXRlLCBlc3BlY2lhbGx5IGZvciB0aGUgUE1LSUQuXG5cblRoZSBjaGFsbGVuZ2UgaXMgdGhlIHByb21wdCBpdHNlbGYsIHdoaWNoIHByb3ZpZGVzIGNvbmZsaWN0aW5nIGFkdmljZS4gSXQgc2VlbXMgdG8gc3VnZ2VzdCBzZXR0aW5nIGBOZWVkc0tNU0FOPWZhbHNlYCBpZiB0aGUgcGF0Y2ggKmZ1bGx5KiB6ZXJvcyBvciBpbml0aWFsaXplcyBzdHJ1Y3R1cmVzLiBUaGF0J3Mgd2hhdCB0aGlzIHBhdGNoIGRvZXMuIEhvd2V2ZXIsIGl0IGFsc28gdGVsbHMgbWUgdG8gc2V0IGBOZWVkc0tNU0FOPXRydWVgIGlmIGl0IFwiaW50cm9kdWNlcyBvciBleHBvc2VzXCIgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuICBJIGludGVycHJldCBcImV4cG9zZXNcIiBpbiB0aGlzIGNhc2UgYXMgXCJpcyByZWxhdGVkIHRvXCIgc2luY2UgdGhpcyBwYXRjaCBpcyBleHBsaWNpdGx5ICpmaXhpbmcqIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHByb2JsZW0uXG5cbklmIEkgc2V0IGBOZWVkc0tNU0FOPWZhbHNlYCwgSSBhbSBzYXlpbmcgdGhhdCB0aGlzIHBhdGNoICpkb2Vzbid0KiBuZWVkIEtNU0FOLCB3aGljaCBpcyB3cm9uZy4gS01TQU4gaXMgbmVlZGVkIHRvIHZlcmlmeSB0aGUgZml4ISBJdCdzIGxpa2VseSB0aGF0IGEgcHJldmlvdXMgYnVnIHJlcG9ydCBzaG93ZWQgdGhpcyBpc3N1ZSwgYW5kIHRoZSBiZXN0IHdheSB0byB2ZXJpZnkgaXQncyBub3cgKmNvbXBsZXRlbHkqIGZpeGVkIGlzIHRvIHJ1biBLTVNBTi5cblxuVGhlIHByb21wdCBhbHNvIHN1Z2dlc3RzIHVzaW5nIEtNU0FOIGlmIHRoZSBzdHJ1Y3R1cmVzIGFyZSBcInNlbnQgdG8gdXNlciBzcGFjZS5cIiBXaGlsZSB0aGUgZmlybXdhcmUgaXNuJ3Qgc3RyaWN0bHkgXCJ1c2VyIHNwYWNlLFwiIHRoZSBgYnJjbWZfZmlsX2lvdmFyX2RhdGFfc2V0YCBmdW5jdGlvbiB1bHRpbWF0ZWx5IHB1dHMgdGhpcyBzdHJ1Y3R1cmUgaW50byBzb21ldGhpbmcgdGhhdCB3aWxsIGJlIGhhbmRsZWQgYnkgdGhlIGZpcm13YXJlLCBwb3RlbnRpYWxseSBzZW50IG92ZXIgdGhlIG5ldHdvcmsuIEl0J3MgcG9zc2libGUgdW5pbml0aWFsaXplZCBkYXRhIGlzIGdvaW5nIGludG8gYSBETUEgYnVmZmVyIHdoaWNoIHRoZW4gZ2V0cyBzZW50IG92ZXIgdGhlIGFpci4gRXZlbiBpZiBpdCdzIG5vdCBzdHJpY3RseSBcInVzZXIgc3BhY2UsXCIgS01TQU4ncyBwdXJwb3NlIGlzIHRvIGNhdGNoIGFsbCByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSwgaW5jbHVkaW5nIGZvciBETUEgb3IgaGFyZHdhcmUgaW50ZXJhY3Rpb25zLlxuXG5VbHRpbWF0ZWx5LCBldmVuIHRob3VnaCB0aGUgcHJvbXB0ICpzZWVtcyogdG8gY29udHJhZGljdCBpdHNlbGYsIGJlY2F1c2UgdGhlIHBhdGNoIGRpcmVjdGx5IGFkZHJlc3NlcywgYW5kIGFpbXMgdG8gcmVzb2x2ZSwgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUsIEkgYmVsaWV2ZSBgTmVlZHNLTVNBTj10cnVlYC4gUnVubmluZyBLTVNBTiBpcyB0aGUgKm9ubHkqIHdheSB0byBjb25maWRlbnRseSBzYXkgdGhhdCB0aGUgc3RydWN0dXJlLCBhbG9uZyB3aXRoICpwYXJhbXMtXHUwMDNlcG1raWQqIGlzIGNvcnJlY3RseSBpbml0aWFsaXplZC4gVGhlIHBhdGNoIGRvZXMgXCJleHBvc2VcIiB0aGUgdW5pbml0aWFsaXplZCBtZW1vcnkgYnkgKmhpZ2hsaWdodGluZyogdGhlIGlzc3VlIGFuZCBwcm92aWRpbmcgdGhlIGZpeCB0aGF0IG11c3QgYmUgdGVzdGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3Nzg1LCJPdXRwdXRUb2tlbnMiOjU0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzE0NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE5OjAzOjE1LjAwMTQwMzU1MVoiLCJTZXEiOjE0NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1OTkxMTcyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJyY21mX2ZpbF9pb3Zhcl9kYXRhX3NldFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9idGNvZXguYz0xMDM9c3RhdGljIHMzMiBicmNtZl9idGNvZXhfcGFyYW1zX3dyaXRlKHN0cnVjdCBicmNtZl9pZiAqaWZwLCB1MzIgYWRkciwgdTMyIGRhdGEpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYnRjb2V4LmMtMTExLVxcdHJlZ193cml0ZS5kYXRhID0gY3B1X3RvX2xlMzIoZGF0YSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2J0Y29leC5jOjExMjpcXHRyZXR1cm4gYnJjbWZfZmlsX2lvdmFyX2RhdGFfc2V0KGlmcCwgXFxcImJ0Y19wYXJhbXNcXFwiLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9idGNvZXguYy0xMTMtXFx0XFx0XFx0XFx0XFx0XFx1MDAyNnJlZ193cml0ZSwgc2l6ZW9mKHJlZ193cml0ZSkpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM9MTQ0Mz1icmNtZl9ydW5fZXNjYW4oc3RydWN0IGJyY21mX2NmZzgwMjExX2luZm8gKmNmZywgc3RydWN0IGJyY21mX2lmICppZnAsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy0xNDkwLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jOjE0OTE6XFx0ZXJyID0gYnJjbWZfZmlsX2lvdmFyX2RhdGFfc2V0KGlmcCwgXFxcImVzY2FuXFxcIiwgcGFyYW1zLCBwYXJhbXNfc2l6ZSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtMTQ5Mi1cXHRpZiAoZXJyKSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYz0yMzM1PXN0YXRpYyB2b2lkIGJyY21mX3NldF9qb2luX3ByZWYoc3RydWN0IGJyY21mX2lmICppZnAsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy0yMzczLVxcdGpvaW5fcHJlZl9wYXJhbXNbaV0uYmFuZCA9IDA7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM6MjM3NDpcXHRlcnIgPSBicmNtZl9maWxfaW92YXJfZGF0YV9zZXQoaWZwLCBcXFwiam9pbl9wcmVmXFxcIiwgam9pbl9wcmVmX3BhcmFtcyxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy0yMzc1LVxcdFxcdFxcdFxcdCAgICAgICBzaXplb2Yoam9pbl9wcmVmX3BhcmFtcykpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM9MjM4MT1icmNtZl9jZmc4MDIxMV9jb25uZWN0KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtMjQzMy1cXHRcXHR9XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM6MjQzNDpcXHRcXHRicmNtZl9maWxfaW92YXJfZGF0YV9zZXQoaWZwLCBcXFwid3BhaWVcXFwiLCBpZSwgaWVfbGVuKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy0yNDM1LVxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jLTI1MjEtXFx0XFx0XFx0LyogY2xlYW4gdXAgdXNlci1zcGFjZSBSU05FICovXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM6MjUyMjpcXHRcXHRcXHRpZiAoYnJjbWZfZmlsX2lvdmFyX2RhdGFfc2V0KGlmcCwgXFxcIndwYWllXFxcIiwgTlVMTCwgMCkpIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy0yNTIzLVxcdFxcdFxcdFxcdGJwaHlfZXJyKGRydnIsIFxcXCJmYWlsZWQgdG8gY2xlYW4gdXAgdXNlci1zcGFjZSBSU05FXFxcXG5cXFwiKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jPTQwMTE9c3RhdGljIHMzMiBicmNtZl9jb25maWdfd293bF9wYXR0ZXJuKHN0cnVjdCBicmNtZl9pZiAqaWZwLCB1OCBjbWRbNF0sXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy00MDQyLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jOjQwNDM6XFx0cmV0ID0gYnJjbWZfZmlsX2lvdmFyX2RhdGFfc2V0KGlmcCwgXFxcIndvd2xfcGF0dGVyblxcXCIsIGJ1ZiwgYnVmc2l6ZSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtNDA0NC1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jPTQyMDU9c3RhdGljIHZvaWQgYnJjbWZfY29uZmlndXJlX3dvd2woc3RydWN0IGJyY21mX2NmZzgwMjExX2luZm8gKmNmZyxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jLTQyNTItXFx0bWVtY3B5KFxcdTAwMjZ3b3dsX3dha2VpbmQsIFxcXCJjbGVhclxcXCIsIDYpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jOjQyNTM6XFx0YnJjbWZfZmlsX2lvdmFyX2RhdGFfc2V0KGlmcCwgXFxcIndvd2xfd2FrZWluZFxcXCIsIFxcdTAwMjZ3b3dsX3dha2VpbmQsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtNDI1NC1cXHRcXHRcXHRcXHQgc2l6ZW9mKHdvd2xfd2FrZWluZCkpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM9NDI2MT1zdGF0aWMgaW50IGJyY21mX2tlZXBhbGl2ZV9zdGFydChzdHJ1Y3QgYnJjbWZfaWYgKmlmcCwgdW5zaWduZWQgaW50IGludGVydmFsKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtNDI3MS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYzo0MjcyOlxcdHJldCA9IGJyY21mX2ZpbF9pb3Zhcl9kYXRhX3NldChpZnAsIFxcXCJta2VlcF9hbGl2ZVxcXCIsIFxcdTAwMjZrYWxpdmUsIHNpemVvZihrYWxpdmUpKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy00MjczLVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYz00MzM4PWJyY21mX3Bta3NhX3YzX29wKHN0cnVjdCBicmNtZl9pZiAqaWZwLCBzdHJ1Y3QgY2ZnODAyMTFfcG1rc2EgKnBta3NhLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtNDM3Mi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYzo0MzczOlxcdHJldCA9IGJyY21mX2ZpbF9pb3Zhcl9kYXRhX3NldChpZnAsIFxcXCJwbWtpZF9pbmZvXFxcIiwgcG1rX29wLCBzaXplb2YoKnBta19vcCkpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jLTQzNzQtXFx0a2ZyZWUocG1rX29wKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jPTQzNzk9YnJjbWZfdXBkYXRlX3Bta2xpc3Qoc3RydWN0IGJyY21mX2NmZzgwMjExX2luZm8gKmNmZywgc3RydWN0IGJyY21mX2lmICppZnApXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy00MzkxLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jOjQzOTI6XFx0cmV0dXJuIGJyY21mX2ZpbF9pb3Zhcl9kYXRhX3NldChpZnAsIFxcXCJwbWtpZF9pbmZvXFxcIiwgcG1rX2xpc3QsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtNDM5My1cXHRcXHRcXHRzaXplb2YoKnBta19saXN0KSk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYz01MTQ1PWJyY21mX2NmZzgwMjExX3N0YXJ0X2FwKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtNTM2OC1cXHRcXHRic3NfZW5hYmxlLmVuYWJsZSA9IGNwdV90b19sZTMyKDEpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jOjUzNjk6XFx0XFx0ZXJyID0gYnJjbWZfZmlsX2lvdmFyX2RhdGFfc2V0KGlmcCwgXFxcImJzc1xcXCIsIFxcdTAwMjZic3NfZW5hYmxlLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jLTUzNzAtXFx0XFx0XFx0XFx0XFx0ICAgICAgIHNpemVvZihic3NfZW5hYmxlKSk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYz01MzkzPXN0YXRpYyBpbnQgYnJjbWZfY2ZnODAyMTFfc3RvcF9hcChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jLTU0NTMtXFx0XFx0YnNzX2VuYWJsZS5lbmFibGUgPSBjcHVfdG9fbGUzMigwKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYzo1NDU0OlxcdFxcdGVyciA9IGJyY21mX2ZpbF9pb3Zhcl9kYXRhX3NldChpZnAsIFxcXCJic3NcXFwiLCBcXHUwMDI2YnNzX2VuYWJsZSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy01NDU1LVxcdFxcdFxcdFxcdFxcdCAgICAgICBzaXplb2YoYnNzX2VuYWJsZSkpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM9NTY3MT1zdGF0aWMgaW50IGJyY21mX2NmZzgwMjExX3NldF9jcW1fcnNzaV9yYW5nZV9jb25maWcoc3RydWN0IHdpcGh5ICp3aXBoeSxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jLTU3MDAtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM6NTcwMTpcXHRcXHRlcnIgPSBicmNtZl9maWxfaW92YXJfZGF0YV9zZXQoaWZwLCBcXFwicnNzaV9ldmVudFxcXCIsIFxcdTAwMjZjb25maWcsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtNTcwMi1cXHRcXHRcXHRcXHRcXHQgICAgICAgc2l6ZW9mKGNvbmZpZykpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM9NTg3ND1zdGF0aWMgaW50IGJyY21mX2NmZzgwMjExX3RkbHNfb3BlcihzdHJ1Y3Qgd2lwaHkgKndpcGh5LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtNTg5My1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYzo1ODk0OlxcdHJldCA9IGJyY21mX2ZpbF9pb3Zhcl9kYXRhX3NldChpZnAsIFxcXCJ0ZGxzX2VuZHBvaW50XFxcIixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy01ODk1LVxcdFxcdFxcdFxcdCAgICAgICBcXHUwMDI2aW5mbywgc2l6ZW9mKGluZm8pKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jPTU5Mjk9YnJjbWZfY2ZnODAyMTFfc2V0X3Jla2V5X2RhdGEoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy01OTQ0LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jOjU5NDU6XFx0cmV0ID0gYnJjbWZfZmlsX2lvdmFyX2RhdGFfc2V0KGlmcCwgXFxcImd0a19rZXlfaW5mb1xcXCIsIFxcdTAwMjZndGtfbGUsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtNTk0Ni1cXHRcXHRcXHRcXHQgICAgICAgc2l6ZW9mKGd0a19sZSkpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM9NzE1Mz1zdGF0aWMgaW50IGJyY21mX2VuYWJsZV9idzQwXzJnKHN0cnVjdCBicmNtZl9jZmc4MDIxMV9pbmZvICpjZmcpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy03MTc0LVxcdFxcdGJhbmRfYndjYXAuYndfY2FwID0gY3B1X3RvX2xlMzIoV0xDX0JXX0NBUF80ME1IWik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM6NzE3NTpcXHRcXHRlcnIgPSBicmNtZl9maWxfaW92YXJfZGF0YV9zZXQoaWZwLCBcXFwiYndfY2FwXFxcIiwgXFx1MDAyNmJhbmRfYndjYXAsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtNzE3Ni1cXHRcXHRcXHRcXHRcXHQgICAgICAgc2l6ZW9mKGJhbmRfYndjYXApKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jPTgyNjM9c3RhdGljIHZvaWQgYnJjbWZfY2ZnODAyMTFfcmVnX25vdGlmaWVyKHN0cnVjdCB3aXBoeSAqd2lwaHksXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy04Mjk3LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jOjgyOTg6XFx0ZXJyID0gYnJjbWZfZmlsX2lvdmFyX2RhdGFfc2V0KGlmcCwgXFxcImNvdW50cnlcXFwiLCBcXHUwMDI2Y2NyZXEsIHNpemVvZihjY3JlcSkpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jLTgyOTktXFx0aWYgKGVycikge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvbW1vbi5jPTgwPXZvaWQgYnJjbWZfY19zZXRfam9pbnByZWZfZGVmYXVsdChzdHJ1Y3QgYnJjbWZfaWYgKmlmcClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb21tb24uYy05NS1cXHRqb2luX3ByZWZfcGFyYW1zWzFdLmJhbmQgPSAwO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb21tb24uYzo5NjpcXHRlcnIgPSBicmNtZl9maWxfaW92YXJfZGF0YV9zZXQoaWZwLCBcXFwiam9pbl9wcmVmXFxcIiwgam9pbl9wcmVmX3BhcmFtcyxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29tbW9uLmMtOTctXFx0XFx0XFx0XFx0ICAgICAgIHNpemVvZihqb2luX3ByZWZfcGFyYW1zKSk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29tbW9uLmM9MTAyPXN0YXRpYyBpbnQgYnJjbWZfY19kb3dubG9hZChzdHJ1Y3QgYnJjbWZfaWYgKmlmcCwgdTE2IGZsYWcsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29tbW9uLmMtMTEzLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb21tb24uYzoxMTQ6XFx0ZXJyID0gYnJjbWZfZmlsX2lvdmFyX2RhdGFfc2V0KGlmcCwgdmFyLCBkbG9hZF9idWYsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvbW1vbi5jLTExNS1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0X3NpemUoZGxvYWRfYnVmLCBkYXRhLCBsZW4pKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb21tb24uYz0yMjM9aW50IGJyY21mX2Nfc2V0X2N1cl9ldGhlcmFkZHIoc3RydWN0IGJyY21mX2lmICppZnAsIGNvbnN0IHU4ICphZGRyKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvbW1vbi5jLTIyNi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29tbW9uLmM6MjI3OlxcdGVyciA9IGJyY21mX2ZpbF9pb3Zhcl9kYXRhX3NldChpZnAsIFxcXCJjdXJfZXRoZXJhZGRyXFxcIiwgYWRkciwgRVRIX0FMRU4pO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb21tb24uYy0yMjgtXFx0aWYgKGVyciBcXHUwMDNjIDApXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29tbW9uLmM9MjY1PWludCBicmNtZl9jX3ByZWluaXRfZGNtZHMoc3RydWN0IGJyY21mX2lmICppZnApXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29tbW9uLmMtNDI3LVxcdHNldGJpdChmd2VoLVxcdTAwM2VldmVudF9tYXNrLCBCUkNNRl9FX0lGKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29tbW9uLmM6NDI4OlxcdGVyciA9IGJyY21mX2ZpbF9pb3Zhcl9kYXRhX3NldChpZnAsIFxcXCJldmVudF9tc2dzXFxcIiwgZndlaC1cXHUwMDNlZXZlbnRfbWFzayxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29tbW9uLmMtNDI5LVxcdFxcdFxcdFxcdCAgICAgICBmd2VoLVxcdTAwM2VldmVudF9tYXNrX2xlbik7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jPTEzOD1zdGF0aWMgdm9pZCBfYnJjbWZfc2V0X211bHRpY2FzdF9saXN0KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmMtMTc3LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmM6MTc4OlxcdGVyciA9IGJyY21mX2ZpbF9pb3Zhcl9kYXRhX3NldChpZnAsIFxcXCJtY2FzdF9saXN0XFxcIiwgYnVmLCBidWZsZW4pO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmMtMTc5LVxcdGlmIChlcnIgXFx1MDAzYyAwKSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jPTIxMD1zdGF0aWMgdm9pZCBfYnJjbWZfdXBkYXRlX25kdGFibGUoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuYy0yMTctXFx0LyogY2xlYXIgdGhlIHRhYmxlIGluIGZpcm13YXJlICovXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuYzoyMTg6XFx0cmV0ID0gYnJjbWZfZmlsX2lvdmFyX2RhdGFfc2V0KGlmcCwgXFxcIm5kX2hvc3RpcF9jbGVhclxcXCIsIE5VTEwsIDApO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmMtMjE5LVxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmMtMjI0LVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBpZnAtXFx1MDAzZWlwdjZhZGRyX2lkeDsgaSsrKSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuYzoyMjU6XFx0XFx0cmV0ID0gYnJjbWZfZmlsX2lvdmFyX2RhdGFfc2V0KGlmcCwgXFxcIm5kX2hvc3RpcFxcXCIsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuYy0yMjYtXFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcdTAwMjZpZnAtXFx1MDAzZWlwdjZfYWRkcl90YmxbaV0sXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jPTk5Nz1zdGF0aWMgaW50IGJyY21mX2luZXRhZGRyX2NoYW5nZWQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmMtMTA0Ny1cXHRcXHRcXHQvKiBzZXQgaXQgZGlyZWN0bHkgKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jOjEwNDg6XFx0XFx0XFx0cmV0ID0gYnJjbWZfZmlsX2lvdmFyX2RhdGFfc2V0KGlmcCwgXFxcImFycF9ob3N0aXBcXFwiLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmMtMTA0OS1cXHRcXHRcXHRcXHRcXHUwMDI2aWZhLVxcdTAwM2VpZmFfYWRkcmVzcywgc2l6ZW9mKGlmYS1cXHUwMDNlaWZhX2FkZHJlc3MpKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmMtMTA1OS1cXHRcXHRcXHQvKiBjbGVhciB0aGUgdGFibGUgaW4gZmlybXdhcmUgKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jOjEwNjA6XFx0XFx0XFx0cmV0ID0gYnJjbWZfZmlsX2lvdmFyX2RhdGFfc2V0KGlmcCwgXFxcImFycF9ob3N0aXBfY2xlYXJcXFwiLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmMtMTA2MS1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgTlVMTCwgMCk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jLTEwNjktXFx0XFx0XFx0XFx0XFx0Y29udGludWU7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuYzoxMDcwOlxcdFxcdFxcdFxcdHJldCA9IGJyY21mX2ZpbF9pb3Zhcl9kYXRhX3NldChpZnAsIFxcXCJhcnBfaG9zdGlwXFxcIixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jLTEwNzEtXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcdTAwMjZhZGRyX3RhYmxlW2ldLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuYz0xNTI3PXMzMiBicmNtZl9pb3Zhcl9kYXRhX3NldChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNoYXIgKm5hbWUsIHZvaWQgKmRhdGEsIHUzMiBsZW4pXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jLTE1MzEtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuYzoxNTMyOlxcdHJldHVybiBicmNtZl9maWxfaW92YXJfZGF0YV9zZXQoaWZwLCBuYW1lLCBkYXRhLCBsZW4pO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmMtMTUzMy19XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L2NvcmUuYz0yNj1zdGF0aWMgaW50IGJyY21mX2N5d19zZXRfc2FlX3B3ZChzdHJ1Y3QgYnJjbWZfaWYgKmlmcCxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvY29yZS5jLTQyLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvY29yZS5jOjQzOlxcdGVyciA9IGJyY21mX2ZpbF9pb3Zhcl9kYXRhX3NldChpZnAsIFxcXCJzYWVfcGFzc3dvcmRcXFwiLCBcXHUwMDI2c2FlX3B3ZCxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L2NvcmUuYy00NC1cXHRcXHRcXHRcXHQgICAgICAgc2l6ZW9mKHNhZV9wd2QpKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvY29yZS5jPTc5PXN0YXRpYyBpbnQgYnJjbWZfY3l3X2FjdGl2YXRlX2V2ZW50cyhzdHJ1Y3QgYnJjbWZfaWYgKmlmcClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvY29yZS5jLTk0LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvY29yZS5jOjk1OlxcdGVyciA9IGJyY21mX2ZpbF9pb3Zhcl9kYXRhX3NldChpZnAsIFxcXCJldmVudF9tc2dzX2V4dFxcXCIsIGV2ZW50bWFza19tc2csXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmMtOTYtXFx0XFx0XFx0XFx0ICAgICAgIG1zZ2xlbik7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L2NvcmUuYz0xOTg9YnJjbWZfY3l3X2V4dGVybmFsX2F1dGgoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvY29yZS5jLTIyNi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L2NvcmUuYzoyMjc6XFx0cmV0ID0gYnJjbWZfZmlsX2lvdmFyX2RhdGFfc2V0KGlmcCwgXFxcImF1dGhfc3RhdHVzXFxcIiwgXFx1MDAyNmF1dGhfc3RhdHVzLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvY29yZS5jLTIyOC1cXHRcXHRcXHRcXHQgICAgICAgc2l6ZW9mKGF1dGhfc3RhdHVzKSk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmVhdHVyZS5jPTIwNj1zdGF0aWMgdm9pZCBicmNtZl9mZWF0X2lvdmFyX2RhdGFfc2V0KHN0cnVjdCBicmNtZl9pZiAqaWZwLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2ZlYXR1cmUuYy0yMTQtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2ZlYXR1cmUuYzoyMTU6XFx0ZXJyID0gYnJjbWZfZmlsX2lvdmFyX2RhdGFfc2V0KGlmcCwgbmFtZSwgZGF0YSwgbGVuKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmVhdHVyZS5jLTIxNi1cXHRpZiAoZXJyICE9IC1CUkNNRl9GV19VTlNVUFBPUlRFRCkge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Z3ZWguYz00Mzg9aW50IGJyY21mX2Z3ZWhfYWN0aXZhdGVfZXZlbnRzKHN0cnVjdCBicmNtZl9pZiAqaWZwKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Z3ZWguYy00NjEtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Z3ZWguYzo0NjI6XFx0ZXJyID0gYnJjbWZfZmlsX2lvdmFyX2RhdGFfc2V0KGlmcCwgXFxcImV2ZW50X21zZ3NcXFwiLCBmd2VoLVxcdTAwM2VldmVudF9tYXNrLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9md2VoLmMtNDYzLVxcdFxcdFxcdFxcdCAgICAgICBmd2VoLVxcdTAwM2VldmVudF9tYXNrX2xlbik7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZndpbC5jPTE4Nz1zMzJcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZndpbC5jOjE4ODpicmNtZl9maWxfaW92YXJfZGF0YV9zZXQoc3RydWN0IGJyY21mX2lmICppZnAsIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IHZvaWQgKmRhdGEsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Z3aWwuYy0xODktXFx0XFx0XFx0IHUzMiBsZW4pXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZndpbC5jLTIxMy19XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Z3aWwuYzoyMTQ6QlJDTUZfRVhQT1JUX1NZTUJPTF9HUEwoYnJjbWZfZmlsX2lvdmFyX2RhdGFfc2V0KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZndpbC5jLTIxNS1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9md2lsLmg9MTEwPXMzMiBicmNtZl9maWxfY21kX2ludF9xdWVyeShzdHJ1Y3QgYnJjbWZfaWYgKmlmcCwgdTMyIGNtZCwgdTMyICpkYXRhKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Z3aWwuaC0xMTctXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Z3aWwuaDoxMTg6czMyIGJyY21mX2ZpbF9pb3Zhcl9kYXRhX3NldChzdHJ1Y3QgYnJjbWZfaWYgKmlmcCwgY29uc3QgY2hhciAqbmFtZSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZndpbC5oLTExOS1cXHRcXHRcXHQgICAgIGNvbnN0IHZvaWQgKmRhdGEsIHUzMiBsZW4pO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Z3aWwuaD0xMjM9czMyIGJyY21mX2ZpbF9pb3Zhcl9pbnRfc2V0KHN0cnVjdCBicmNtZl9pZiAqaWZwLCBjb25zdCBjaGFyICpuYW1lLCB1MzIgZGF0YSlcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9md2lsLmgtMTI2LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9md2lsLmg6MTI3OlxcdHJldHVybiBicmNtZl9maWxfaW92YXJfZGF0YV9zZXQoaWZwLCBuYW1lLCBcXHUwMDI2ZGF0YV9sZSwgc2l6ZW9mKGRhdGFfbGUpKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZndpbC5oLTEyOC19XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcDJwLmM9NDU1PXN0YXRpYyBpbnQgYnJjbWZfcDJwX3NldF9maXJtd2FyZShzdHJ1Y3QgYnJjbWZfaWYgKmlmcCwgdTggKnAycF9tYWMpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcDJwLmMtNDcwLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wMnAuYzo0NzE6XFx0cmV0ID0gYnJjbWZfZmlsX2lvdmFyX2RhdGFfc2V0KGlmcCwgXFxcInAycF9kYV9vdmVycmlkZVxcXCIsIHAycF9tYWMsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3AycC5jLTQ3Mi1cXHRcXHRcXHRcXHQgICAgICAgRVRIX0FMRU4pO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3AycC5jPTIwNjY9aW50IGJyY21mX3AycF9pZmNoYW5nZShzdHJ1Y3QgYnJjbWZfY2ZnODAyMTFfaW5mbyAqY2ZnLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3AycC5jLTIxMDAtXFx0YnJjbWZfY2ZnODAyMTFfYXJtX3ZpZl9ldmVudChjZmcsIHZpZik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3AycC5jOjIxMDE6XFx0ZXJyID0gYnJjbWZfZmlsX2lvdmFyX2RhdGFfc2V0KHZpZi1cXHUwMDNlaWZwLCBcXFwicDJwX2lmdXBkXFxcIiwgXFx1MDAyNmlmX3JlcXVlc3QsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3AycC5jLTIxMDItXFx0XFx0XFx0XFx0ICAgICAgIHNpemVvZihpZl9yZXF1ZXN0KSk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcDJwLmM9MjEyMj1zdGF0aWMgaW50IGJyY21mX3AycF9yZXF1ZXN0X3AycF9pZihzdHJ1Y3QgYnJjbWZfcDJwX2luZm8gKnAycCxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wMnAuYy0yMTM3LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wMnAuYzoyMTM4OlxcdGVyciA9IGJyY21mX2ZpbF9pb3Zhcl9kYXRhX3NldChpZnAsIFxcXCJwMnBfaWZhZGRcXFwiLCBcXHUwMDI2aWZfcmVxdWVzdCxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcDJwLmMtMjEzOS1cXHRcXHRcXHRcXHQgICAgICAgc2l6ZW9mKGlmX3JlcXVlc3QpKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wMnAuYz0yMTQ0PXN0YXRpYyBpbnQgYnJjbWZfcDJwX2Rpc2FibGVfcDJwX2lmKHN0cnVjdCBicmNtZl9jZmc4MDIxMV92aWYgKnZpZilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wMnAuYy0yMTUwLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wMnAuYzoyMTUxOlxcdHJldHVybiBicmNtZl9maWxfaW92YXJfZGF0YV9zZXQoaWZwLCBcXFwicDJwX2lmZGlzXFxcIiwgYWRkciwgRVRIX0FMRU4pO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wMnAuYy0yMTUyLX1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wMnAuYz0yMTU0PXN0YXRpYyBpbnQgYnJjbWZfcDJwX3JlbGVhc2VfcDJwX2lmKHN0cnVjdCBicmNtZl9jZmc4MDIxMV92aWYgKnZpZilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wMnAuYy0yMTYwLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wMnAuYzoyMTYxOlxcdHJldHVybiBicmNtZl9maWxfaW92YXJfZGF0YV9zZXQoaWZwLCBcXFwicDJwX2lmZGVsXFxcIiwgYWRkciwgRVRIX0FMRU4pO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wMnAuYy0yMTYyLX1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wbm8uYz05Mz1zdGF0aWMgaW50IGJyY21mX3Bub19jaGFubmVsX2NvbmZpZyhzdHJ1Y3QgYnJjbWZfaWYgKmlmcCxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wbm8uYy05OC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcG5vLmM6OTk6XFx0cmV0dXJuIGJyY21mX2ZpbF9pb3Zhcl9kYXRhX3NldChpZnAsIFxcXCJwZm5fY2ZnXFxcIiwgY2ZnLCBzaXplb2YoKmNmZykpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wbm8uYy0xMDAtfVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3Buby5jPTEwMj1zdGF0aWMgaW50IGJyY21mX3Bub19jb25maWcoc3RydWN0IGJyY21mX2lmICppZnAsIHUzMiBzY2FuX2ZyZXEsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcG5vLmMtMTQ1LVxcdHBmbl9wYXJhbS5mbGFncyA9IGNwdV90b19sZTE2KGZsYWdzKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcG5vLmM6MTQ2OlxcdGVyciA9IGJyY21mX2ZpbF9pb3Zhcl9kYXRhX3NldChpZnAsIFxcXCJwZm5fc2V0XFxcIiwgXFx1MDAyNnBmbl9wYXJhbSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcG5vLmMtMTQ3LVxcdFxcdFxcdFxcdCAgICAgICBzaXplb2YocGZuX3BhcmFtKSk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcG5vLmM9MTU1PXN0YXRpYyBpbnQgYnJjbWZfcG5vX3NldF9yYW5kb20oc3RydWN0IGJyY21mX2lmICppZnAsIHN0cnVjdCBicmNtZl9wbm9faW5mbyAqcGkpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcG5vLmMtMTg4LVxcdFxcdCAgcGktXFx1MDAzZXJlcXNbcmldLVxcdTAwM2VyZXFpZCwgcGZuX21hYy5tYWMpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wbm8uYzoxODk6XFx0ZXJyID0gYnJjbWZfZmlsX2lvdmFyX2RhdGFfc2V0KGlmcCwgXFxcInBmbl9tYWNhZGRyXFxcIiwgXFx1MDAyNnBmbl9tYWMsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3Buby5jLTE5MC1cXHRcXHRcXHRcXHQgICAgICAgc2l6ZW9mKHBmbl9tYWMpKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wbm8uYz0xOTc9c3RhdGljIGludCBicmNtZl9wbm9fYWRkX3NzaWQoc3RydWN0IGJyY21mX2lmICppZnAsIHN0cnVjdCBjZmc4MDIxMV9zc2lkICpzc2lkLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3Buby5jLTIxNC1cXHRicmNtZl9kYmcoU0NBTiwgXFxcImFkZGluZyBzc2lkPSUuMzJzIChhY3RpdmU9JWQpXFxcXG5cXFwiLCBzc2lkLVxcdTAwM2Vzc2lkLCBhY3RpdmUpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wbm8uYzoyMTU6XFx0ZXJyID0gYnJjbWZfZmlsX2lvdmFyX2RhdGFfc2V0KGlmcCwgXFxcInBmbl9hZGRcXFwiLCBcXHUwMDI2cGZuLCBzaXplb2YocGZuKSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3Buby5jLTIxNi1cXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wbm8uYz0yMjE9c3RhdGljIGludCBicmNtZl9wbm9fYWRkX2Jzc2lkKHN0cnVjdCBicmNtZl9pZiAqaWZwLCBjb25zdCB1OCAqYnNzaWQpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcG5vLmMtMjMwLVxcdGJyY21mX2RiZyhTQ0FOLCBcXFwiYWRkaW5nIGJzc2lkPSVwTVxcXFxuXFxcIiwgYnNzaWQpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wbm8uYzoyMzE6XFx0ZXJyID0gYnJjbWZfZmlsX2lvdmFyX2RhdGFfc2V0KGlmcCwgXFxcInBmbl9hZGRfYnNzaWRcXFwiLCBcXHUwMDI2YnNzaWRfY2ZnLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wbm8uYy0yMzItXFx0XFx0XFx0XFx0ICAgICAgIHNpemVvZihic3NpZF9jZmcpKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wbm8uYz0yNTY9c3RhdGljIGludCBicmNtZl9wbm9fY2xlYW4oc3RydWN0IGJyY21mX2lmICppZnApXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcG5vLmMtMjY0LVxcdFxcdC8qIGNsZWFyIHBmbiAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wbm8uYzoyNjU6XFx0XFx0cmV0ID0gYnJjbWZfZmlsX2lvdmFyX2RhdGFfc2V0KGlmcCwgXFxcInBmbmNsZWFyXFxcIiwgTlVMTCwgMCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3Buby5jLTI2Ni1cXHR9XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcG5vLmM9MzkxPXN0YXRpYyBpbnQgYnJjbWZfcG5vX2NvbmZpZ19zY2hlZF9zY2FucyhzdHJ1Y3QgYnJjbWZfaWYgKmlmcClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wbm8uYy00MzktXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3Buby5jOjQ0MDpcXHRlcnIgPSBicmNtZl9maWxfaW92YXJfZGF0YV9zZXQoaWZwLCBcXFwicGZuX2dzY2FuX2NmZ1xcXCIsIGdzY2FuX2NmZywgZ3N6KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcG5vLmMtNDQxLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxOTowMzoxNS4wNzc0MDA2MjNaIiwiU2VxIjoxNDcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg4MjI5OTc5MDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBLTVNBTiBSZXF1aXJlbWVudCBmb3IgYSBGaXJtd2FyZSBEYXRhIFRyYW5zZmVyIEZpeCoqXG5cbk9rYXksIHNvIGBicmNtZl9maWxfaW92YXJfZGF0YV9zZXRgIGlzIGEga2V5IGZ1bmN0aW9uLCB1c2VkIGV4dGVuc2l2ZWx5IHRvIHNlbmQgZGF0YSB0byB0aGUgZmlybXdhcmUuIE15IGluaXRpYWwgY29uY2VybiB3YXMgdGhhdCBhbiB1bmluaXRpYWxpemVkIGBhdXRoX3N0YXR1c2AgdmFyaWFibGUgd2FzIGxlYWRpbmcgdG8gYW4gaW5mb3JtYXRpb24gbGVhaywgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBrZXJuZWwgc3RhY2sgbWVtb3J5IHRvIHRoZSBmaXJtd2FyZS4gS01TQU4gd291bGQgbmF0dXJhbGx5IGNhdGNoIHRoaXMgZHVyaW5nIHRoZSBETUEgYnVmZmVyIGNvcHkgb3IgdHJhbnNtaXNzaW9uIHZpYSBTRElPL1VTQi9QQ0llLiBFeGNlbGxlbnQsIGl0IHNlZW1zIGxpa2UgYSBzdHJhaWdodGZvcndhcmQgS01TQU4gY2hlY2sgc2hvdWxkIHZlcmlmeSB0aGUgZml4LlxuXG5CdXQsIGhvbGQgb24uIEkgbmVlZCB0byBiZSBwcmVjaXNlIGFib3V0IHNldHRpbmcgYE5lZWRzS01TQU5gLiBUaGUgcHJvbXB0IGlzIHZlcnkgZXhwbGljaXQ6IGl0IHdhbnRzIGBOZWVkc0tNU0FOPXRydWVgICpvbmx5KiBpZiB0aGUgY2hhbmdlcyAqaW50cm9kdWNlKiBvciAqZXhwb3NlKiB1bmluaXRpYWxpemVkIG1lbW9yeSBkZXRlY3RhYmxlIGJ5IEtNU0FOLiBPdGhlcndpc2UsIGl0IHdhbnRzIGBOZWVkc0tNU0FOPWZhbHNlYC4gSXQgZXhwbGljaXRseSBzdGF0ZXMgdGhhdCBJIHNldCBgTmVlZHNLTVNBTj1mYWxzZWAgaWYgc3RydWN0dXJlcyB0b3VjaGVkIGFyZSAqZnVsbHkgemVyb2VkIG9yIGluaXRpYWxpemVkKi5cblxuVGhlIHByb3ZpZGVkIHBhdGNoIGluaXRpYWxpemVzIGBhdXRoX3N0YXR1c2Agd2l0aCBgPSB7fWAsIGVmZmVjdGl2ZWx5IHplcm9pbmcgdGhlIHN0cnVjdHVyZS4gVGhhdCdzIGEgZ29vZCBzdGFydC4gVGhlIHBhdGNoIHRoZW4gY29waWVzIGBwYXJhbXMtXHUwMDNlcG1raWRgIGludG8gYGF1dGhfc3RhdHVzLnBta2lkYCwgYnV0IG9ubHkgaWYgYHBhcmFtcy1cdTAwM2VwbWtpZGAgaXNuJ3QgTlVMTC4gVGhpcyBzdHJ1Y3R1cmUgaXMgb2J2aW91c2x5IHByb3Blcmx5IGluaXRpYWxpemVkLCBzbyBJIGNhbiBzZXQgYE5lZWRzS01TQU49ZmFsc2VgLlxuXG5Ib3dldmVyLCBJJ20gc2Vjb25kLWd1ZXNzaW5nIG15c2VsZi4gV2hhdCBpZiBgcGFyYW1zLVx1MDAzZXBta2lkYCAqaXRzZWxmKiBwb2ludHMgdG8gdW5pbml0aWFsaXplZCBtZW1vcnksIGV2ZW4gaWYgaXQncyBub3QgTlVMTD8gT2theSwgbGV0J3MgdHJhY2UgdGhpcyBiYWNrLiBgcGFyYW1zYCBpcyBhIGBzdHJ1Y3QgY2ZnODAyMTFfZXh0ZXJuYWxfYXV0aF9wYXJhbXMgKmAuIFRoaXMgc3RydWN0dXJlIGlzIGFsbG9jYXRlZCBhbmQgaW5pdGlhbGl6ZWQgYnkgYGNmZzgwMjExYC4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBpbml0aWFsaXphdGlvbiBsb2dpYyBmb3IgYGNmZzgwMjExX2V4dGVybmFsX2F1dGhfcGFyYW1zYCB0byBtYWtlIHN1cmUgaXQncyBoYW5kbGVkLiBCdXQgaWYgdGhhdCBzdHJ1Y3R1cmUgaXMgaW5pdGlhbGl6ZWQgYnkgY2ZnODAyMTEsIHRoZW4gdGhlIGZpeCBpcyB0cml2aWFsbHkgY29ycmVjdCBhbmQgZG9lc24ndCByZXF1aXJlIGZ1cnRoZXIgS01TQU4gY2hlY2tpbmcuIE5vIHBvaW50IHdhc3RpbmcgcmVzb3VyY2VzIG9uIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gd2hlbiB0aGUgZml4IGlzIHNvIG9idmlvdXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNjAwLCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDU5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE5OjAzOjIzLjkwMDQwMTg1OVoiLCJTZXEiOjE0OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY5ODk1NTMzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0cnVjdCBjZmc4MDIxMV9leHRlcm5hbF9hdXRoX3BhcmFtc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL25ldC9jZmc4MDIxMS5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L2NmZzgwMjExLmg9NDQwMj1zdHJ1Y3QgY2ZnODAyMTFfcG1rX2NvbmYge1xcbi0tXFxuaW5jbHVkZS9uZXQvY2ZnODAyMTEuaC00NDA5LS8qKlxcbmluY2x1ZGUvbmV0L2NmZzgwMjExLmg6NDQxMDogKiBzdHJ1Y3QgY2ZnODAyMTFfZXh0ZXJuYWxfYXV0aF9wYXJhbXMgLSBUcmlnZ2VyIEV4dGVybmFsIGF1dGhlbnRpY2F0aW9uLlxcbmluY2x1ZGUvbmV0L2NmZzgwMjExLmgtNDQxMS0gKlxcbi0tXFxuaW5jbHVkZS9uZXQvY2ZnODAyMTEuaC00NDM5LSAqL1xcbmluY2x1ZGUvbmV0L2NmZzgwMjExLmg6NDQ0MDpzdHJ1Y3QgY2ZnODAyMTFfZXh0ZXJuYWxfYXV0aF9wYXJhbXMge1xcbmluY2x1ZGUvbmV0L2NmZzgwMjExLmgtNDQ0MS1cXHRlbnVtIG5sODAyMTFfZXh0ZXJuYWxfYXV0aF9hY3Rpb24gYWN0aW9uO1xcbi0tXFxuaW5jbHVkZS9uZXQvY2ZnODAyMTEuaD01Mjc3PXN0cnVjdCBjZmc4MDIxMV9vcHMge1xcbi0tXFxuaW5jbHVkZS9uZXQvY2ZnODAyMTEuaC01NjAyLVxcdGludCAgICAgKCpleHRlcm5hbF9hdXRoKShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbmluY2x1ZGUvbmV0L2NmZzgwMjExLmg6NTYwMzpcXHRcXHRcXHRcXHQgc3RydWN0IGNmZzgwMjExX2V4dGVybmFsX2F1dGhfcGFyYW1zICpwYXJhbXMpO1xcbmluY2x1ZGUvbmV0L2NmZzgwMjExLmgtNTYwNC1cXG4tLVxcbmluY2x1ZGUvbmV0L2NmZzgwMjExLmg9MTA1MTU9aW50IGNmZzgwMjExX2V4dGVybmFsX2F1dGhfcmVxdWVzdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbmluY2x1ZGUvbmV0L2NmZzgwMjExLmg6MTA1MTY6XFx0XFx0XFx0XFx0ICAgc3RydWN0IGNmZzgwMjExX2V4dGVybmFsX2F1dGhfcGFyYW1zICpwYXJhbXMsXFxuaW5jbHVkZS9uZXQvY2ZnODAyMTEuaC0xMDUxNy1cXHRcXHRcXHRcXHQgICBnZnBfdCBnZnApO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxOTowMzoyMy45NzAzMDQ1OTJaIiwiU2VxIjoxNDksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5NTc1ODYyODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHRoaXM6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgRXh0ZXJuYWwgQXV0aGVudGljYXRpb24gRmxvdyoqXG5cblJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGV4dGVybmFsIGF1dGhlbnRpY2F0aW9uIGlzIGhhbmRsZWQgaW4gdGhpcyBzeXN0ZW0uIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHplcm8gaW4gb24gdGhlIGBjZmc4MDIxMV9leHRlcm5hbF9hdXRoX3JlcXVlc3RgIGZ1bmN0aW9uLiBUaGF0IHNlZW1zIGxpa2UgYSBwcmltZSBjYW5kaWRhdGUgZm9yIHRoZSBlbnRyeSBwb2ludCBvciwgYXQgdGhlIHZlcnkgbGVhc3QsIGEga2V5IGNvbXBvbmVudCBpbiB0aGUgcHJvY2Vzcy4gSSB3YW50IHRvIHRyYWNlIHRoZSBleGVjdXRpb24gZmxvdyByZWxhdGVkIHRvIGV4dGVybmFsIGF1dGhlbnRpY2F0aW9uLCBhbmQgdGhpcyBmdW5jdGlvbiBuYW1lIGZlZWxzIHBhcnRpY3VsYXJseSByZWxldmFudC4gQWx0ZXJuYXRpdmVseSwgSSBzaG91bGQgdHJhY2UgaG93IHRoZSBgZXh0ZXJuYWxfYXV0aGAgdmFyaWFibGUsIG9yIHNpbWlsYXIgaXMgdXNlZCwgYW5kIGZyb20gdGhlcmUgZm9sbG93IHdoZXJlIGl0IGlzIGNhbGxlZCB0byBnZXQgYSBoaWdoIGxldmVsIG92ZXJ2aWV3IG9mIHRoZSBvdmVyYWxsIHByb2Nlc3MuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoZSBcImV4dGVybmFsXCIgcGFydCBvZiB0aGUgYXV0aGVudGljYXRpb24ga2lja3MgaW4gYW5kIHdoYXQgdHJpZ2dlcnMgaXQuIFRoYXQgc2hvdWxkIHF1aWNrbHkgaWxsdW1pbmF0ZSB0aGUga2V5IGludGVyYWN0aW9ucyBhbmQgZGVwZW5kZW5jaWVzIGludm9sdmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzAwNSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE5OjAzOjI3LjkyNzg5MzEyMloiLCJTZXEiOjE1MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxMDUwNTIwNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJleHRlcm5hbF9hdXRoX3JlcXVlc3RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3dpcmVsZXNzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTIzMjU2PXZvaWQgbmw4MDIxMV9zZW5kX2FwX3N0b3BwZWQoc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiwgdW5zaWduZWQgaW50IGxpbmtfaWQpXFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTIzMjg3LVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MjMyODg6aW50IGNmZzgwMjExX2V4dGVybmFsX2F1dGhfcmVxdWVzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMjMyODktXFx0XFx0XFx0XFx0ICAgc3RydWN0IGNmZzgwMjExX2V4dGVybmFsX2F1dGhfcGFyYW1zICpwYXJhbXMsXFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTIzMzQ1LX1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjIzMzQ2OkVYUE9SVF9TWU1CT0woY2ZnODAyMTFfZXh0ZXJuYWxfYXV0aF9yZXF1ZXN0KTtcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTIzMzQ3LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxOTowMzoyOC40Mzg0MDM4MjlaIiwiU2VxIjoxNTEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg0NzY1NTM0MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRGlzc2VjdGluZyB0aGUgRXh0ZXJuYWwgQXV0aGVudGljYXRpb24gRmxvdyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IGBjZmc4MDIxMV9leHRlcm5hbF9hdXRoX3JlcXVlc3RgIGlzIHRoZSBmdW5kYW1lbnRhbCBmdW5jdGlvbiB1c2VkIGJ5IHdpcmVsZXNzIGRyaXZlcnMgd2hlbiB0aGV5IG5lZWQgdG8gdHJpZ2dlciBleHRlcm5hbCBhdXRoZW50aWNhdGlvbi4gVGhhdCdzIHRoZSBjb3JlLiBUaGVuIEkgc2VlIGBicmNtZl9jeXdfZXh0ZXJuYWxfYXV0aGAsIHdoaWNoIEkgcmVjb2duaXplIGFzIHRoZSAqc3BlY2lmaWMqIGltcGxlbWVudGF0aW9uIHdpdGhpbiB0aGUgQnJvYWRjb20gZHJpdmVyLCBoYW5kbGluZyB0aGUgYG9wcy1cdTAwM2VleHRlcm5hbF9hdXRoYCBob29rLiBBaCwgcmlnaHQsIHNvIGBjZmc4MDIxMWAgY2FsbHMgdGhpcyBkcml2ZXItc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gd2hlbiBpdCByZWNlaXZlcyBhIGNvbW1hbmQgZnJvbSB1c2VyIHNwYWNlLCBsaWtlbHkgdmlhIG5sODAyMTEuIFRoZXJlZm9yZSBJIHNob3VsZCB2ZXJpZnkgYG5sODAyMTFfZXh0ZXJuYWxfYXV0aGAgdG8gY29uZmlybSB0aGUgdXNlci1zcGFjZSBpbnRlcmFjdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM0OTUsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxOTowMzozNi45MTQ5NjE1NjJaIiwiU2VxIjoxNTIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MTk2OTAxMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJubDgwMjExX2V4dGVybmFsX2F1dGhcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3dpcmVsZXNzL25sODAyMTEuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTE4NDY5PXN0YXRpYyBpbnQgbmw4MDIxMV9kZWxfcG1rKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE4NDkwLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MTg0OTE6c3RhdGljIGludCBubDgwMjExX2V4dGVybmFsX2F1dGgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE4NDkyLXtcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9MTk3Mjk9c3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX3NtYWxsX29wcyBubDgwMjExX3NtYWxsX29wc1tdID0ge1xcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0yMDQ2MC1cXHRcXHQudmFsaWRhdGUgPSBHRU5MX0RPTlRfVkFMSURBVEVfU1RSSUNUIHwgR0VOTF9ET05UX1ZBTElEQVRFX0RVTVAsXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzoyMDQ2MTpcXHRcXHQuZG9pdCA9IG5sODAyMTFfZXh0ZXJuYWxfYXV0aCxcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTIwNDYyLVxcdFxcdC5mbGFncyA9IEdFTkxfQURNSU5fUEVSTSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTk6MDM6MzYuOTk2OTM5NzA0WiIsIlNlcSI6MTUzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDc5OTQ0NDg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBkZWVwbHkgZmFtaWxpYXIgd2l0aCBuZXR3b3JraW5nIGFuZCBMaW51eCBrZXJuZWwgaW50ZXJuYWxzOlxuXG4qKkRpdmluZyBpbnRvIGBubDgwMjExX2V4dGVybmFsX2F1dGhgKipcblxuQWxyaWdodCwgdGhlIGRpcmVjdGl2ZSBpcyBjbGVhcjogbGV0J3MganVtcCBpbnRvIGBubDgwMjExX2V4dGVybmFsX2F1dGhgLiBUaGlzIGltbWVkaWF0ZWx5IHNpZ25hbHMgd2UncmUgZGVhbGluZyB3aXRoIHRoZSBhdXRoZW50aWNhdGlvbiBtZWNoYW5pc21zIHdpdGhpbiB0aGUgbmw4MDIxMSBzdWJzeXN0ZW0g4oCTIHRoYXQgaXMsIHRoZSBpbnRlcmZhY2UgZm9yIHdpcmVsZXNzIG5ldHdvcmtpbmcgaW4gdGhlIExpbnV4IGtlcm5lbC4gR2l2ZW4gdGhlIG5hbWluZyBjb252ZW50aW9uLCBJ4oCZZCBleHBlY3QgdGhpcyBjb2RlIGJsb2NrIHRvIGhhbmRsZSBzb21lIGZvcm0gb2YgZXh0ZXJuYWwgYXV0aGVudGljYXRpb24sIGxpa2VseSBpbnZvbHZpbmcgYW4gZXh0ZXJuYWwgc2VydmVyIGZvciBtYW5hZ2luZyB1c2VyIGNyZWRlbnRpYWxzIG9yIGF1dGhvcml6YXRpb24uXG5cbk15IG1pbmQgaW1tZWRpYXRlbHkgc3RhcnRzIGZvcm1pbmcgYSBmcmFtZXdvcms6IEkgbmVlZCB0byBxdWlja2x5IGdyYXNwIHRoZSBpbnRlcmFjdGlvbiBwb2ludHMuIFdoZXJlIGRvZXMgdGhpcyBjb2RlIGZpdCB3aXRoaW4gdGhlIGJyb2FkZXIgbmw4MDIxMSBhcmNoaXRlY3R1cmU/IFdoaWNoIHNwZWNpZmljIGZ1bmN0aW9ucyBvciBkYXRhIHN0cnVjdHVyZXMgYXJlIGNlbnRyYWwgdG8gdGhlIHByb2Nlc3Mgb2YgYXV0aGVudGljYXRpb24gaW4gdGhpcyBjb250ZXh0PyBJcyB0aGlzIGFib3V0IGEgc3BlY2lmaWMgcHJvdG9jb2wgbGlrZSBFQVBPTCwgb3IgaXMgaXQgYSBtb3JlIGdlbmVyaWMgZnJhbWV3b3JrPyBJJ2xsIHByb2JhYmx5IGJlIGxvb2tpbmcgZm9yIGNhbGxiYWNrcywgY29uZmlndXJhdGlvbiBvcHRpb25zLCBhbmQgdGhlIGZsb3cgb2YgY29udHJvbCByZWxhdGVkIHRvIHJlY2VpdmluZyBhdXRoZW50aWNhdGlvbiByZXF1ZXN0cyBvciByZXNwb25zZXMuXG5cbkknbGwgYmUgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBhbnkgZXJyb3IgaGFuZGxpbmcgb3Igc2VjdXJpdHktcmVsYXRlZCBhc3BlY3RzLiBJZiB3ZSdyZSBvZmZsb2FkaW5nIGF1dGhlbnRpY2F0aW9uIHRvIGFuIGV4dGVybmFsIHNvdXJjZSwgdGhlcmUgY291bGQgYmUgaW50ZXJlc3RpbmcgaW1wbGljYXRpb25zIGZvciBrZXkgbWFuYWdlbWVudCBhbmQgdHJ1c3QsIHBhcnRpY3VsYXJseSBpbiB3aXJlbGVzcyBjb250ZXh0cy4gQXJlIHRoZXJlIHNwZWNpZmljIGNoZWNrcyBmb3Igc3Bvb2Zpbmcgb3IgbWFuLWluLXRoZS1taWRkbGUgYXR0YWNrcz8gSeKAmWxsIGJlIHdhdGNoaW5nIGZvciBhbnkgbnVhbmNlcyByZWxhdGVkIHRvIGhvdyB0aGUgc3VwcGxpY2FudCBvciBhY2Nlc3MgcG9pbnQgY29tbXVuaWNhdGVzIHdpdGggdGhlIGV4dGVybmFsIGF1dGhlbnRpY2F0aW9uIHNlcnZlciwgYW5kIGhvdyBpdCBoYW5kbGVzIGZhaWx1cmVzLiBUaGUgZWZmaWNpZW5jeSBvZiB0aGUgYXV0aGVudGljYXRpb24gcHJvY2VzcywgZXNwZWNpYWxseSBpZiBpdCdzIGV4dGVybmFsLCB3aWxsIGFsc28gYmUgb2Yga2V5IGludGVyZXN0LCBnaXZlbiB0aGUgbmVlZCBmb3IgcHJvbXB0IHJlc3BvbnNlcyBpbiBhIHdpcmVsZXNzIGVudmlyb25tZW50LiBMZXQncyBzZWUgd2hhdCB3ZSd2ZSBnb3QhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0MTAwLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTk6MDM6NDEuNDc2ODg3MThaIiwiU2VxIjoxNTQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg3Njg3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvd2lyZWxlc3Mvbmw4MDIxMS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE4NDkxLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxODQ5MTpcXHRzdGF0aWMgaW50IG5sODAyMTFfZXh0ZXJuYWxfYXV0aChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbjE4NDkyOlxcdHtcXG4xODQ5MzpcXHRcXHRzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSBpbmZvLVxcdTAwM2V1c2VyX3B0clswXTtcXG4xODQ5NDpcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gaW5mby1cXHUwMDNldXNlcl9wdHJbMV07XFxuMTg0OTU6XFx0XFx0c3RydWN0IGNmZzgwMjExX2V4dGVybmFsX2F1dGhfcGFyYW1zIHBhcmFtcztcXG4xODQ5NjpcXHRcXG4xODQ5NzpcXHRcXHRpZiAoIXJkZXYtXFx1MDAzZW9wcy1cXHUwMDNlZXh0ZXJuYWxfYXV0aClcXG4xODQ5ODpcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuMTg0OTk6XFx0XFxuMTg1MDA6XFx0XFx0aWYgKCFpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfU1NJRF0gXFx1MDAyNlxcdTAwMjZcXG4xODUwMTpcXHRcXHQgICAgZGV2LVxcdTAwM2VpZWVlODAyMTFfcHRyLVxcdTAwM2VpZnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfQVAgXFx1MDAyNlxcdTAwMjZcXG4xODUwMjpcXHRcXHQgICAgZGV2LVxcdTAwM2VpZWVlODAyMTFfcHRyLVxcdTAwM2VpZnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfUDJQX0dPKVxcbjE4NTAzOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjE4NTA0OlxcdFxcbjE4NTA1OlxcdFxcdGlmICghaW5mby1cXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX0JTU0lEXSlcXG4xODUwNjpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xODUwNzpcXHRcXG4xODUwODpcXHRcXHRpZiAoIWluZm8tXFx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9TVEFUVVNfQ09ERV0pXFxuMTg1MDk6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTg1MTA6XFx0XFxuMTg1MTE6XFx0XFx0bWVtc2V0KFxcdTAwMjZwYXJhbXMsIDAsIHNpemVvZihwYXJhbXMpKTtcXG4xODUxMjpcXHRcXG4xODUxMzpcXHRcXHRpZiAoaW5mby1cXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX1NTSURdKSB7XFxuMTg1MTQ6XFx0XFx0XFx0cGFyYW1zLnNzaWQuc3NpZF9sZW4gPSBubGFfbGVuKGluZm8tXFx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9TU0lEXSk7XFxuMTg1MTU6XFx0XFx0XFx0aWYgKHBhcmFtcy5zc2lkLnNzaWRfbGVuID09IDApXFxuMTg1MTY6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTg1MTc6XFx0XFx0XFx0bWVtY3B5KHBhcmFtcy5zc2lkLnNzaWQsXFxuMTg1MTg6XFx0XFx0XFx0ICAgICAgIG5sYV9kYXRhKGluZm8tXFx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9TU0lEXSksXFxuMTg1MTk6XFx0XFx0XFx0ICAgICAgIHBhcmFtcy5zc2lkLnNzaWRfbGVuKTtcXG4xODUyMDpcXHRcXHR9XFxuMTg1MjE6XFx0XFxuMTg1MjI6XFx0XFx0bWVtY3B5KHBhcmFtcy5ic3NpZCwgbmxhX2RhdGEoaW5mby1cXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX0JTU0lEXSksXFxuMTg1MjM6XFx0XFx0ICAgICAgIEVUSF9BTEVOKTtcXG4xODUyNDpcXHRcXG4xODUyNTpcXHRcXHRwYXJhbXMuc3RhdHVzID0gbmxhX2dldF91MTYoaW5mby1cXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX1NUQVRVU19DT0RFXSk7XFxuMTg1MjY6XFx0XFxuMTg1Mjc6XFx0XFx0aWYgKGluZm8tXFx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9QTUtJRF0pXFxuMTg1Mjg6XFx0XFx0XFx0cGFyYW1zLnBta2lkID0gbmxhX2RhdGEoaW5mby1cXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX1BNS0lEXSk7XFxuMTg1Mjk6XFx0XFxuMTg1MzA6XFx0XFx0cmV0dXJuIHJkZXZfZXh0ZXJuYWxfYXV0aChyZGV2LCBkZXYsIFxcdTAwMjZwYXJhbXMpO1xcbjE4NTMxOlxcdH1cXG4xODUzMjpcXHRcXG4xODUzMzpcXHRzdGF0aWMgaW50IG5sODAyMTFfdHhfY29udHJvbF9wb3J0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuMTg1MzQ6XFx0e1xcbjE4NTM1OlxcdFxcdGJvb2wgZG9udF93YWl0X2Zvcl9hY2sgPSBpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfRE9OVF9XQUlUX0ZPUl9BQ0tdO1xcbjE4NTM2OlxcdFxcdHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiA9IGluZm8tXFx1MDAzZXVzZXJfcHRyWzBdO1xcbjE4NTM3OlxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBpbmZvLVxcdTAwM2V1c2VyX3B0clsxXTtcXG4xODUzODpcXHRcXHRzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2ID0gZGV2LVxcdTAwM2VpZWVlODAyMTFfcHRyO1xcbjE4NTM5OlxcdFxcdGNvbnN0IHU4ICpidWY7XFxuMTg1NDA6XFx0XFx0c2l6ZV90IGxlbjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTk6MDM6NDEuNDc3NzY3ODRaIiwiU2VxIjoxNTUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI0MTE0NTU1MDM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIERldGVybWluYXRpb246IEEgVGhvdWdodCBQcm9jZXNzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgdHJ5aW5nIHRvIGRlY2lkZSBhYm91dCBgTmVlZHNLTVNBTmAuIFRoZSBjb2RlIGV4cGxpY2l0bHkgemVyb2VzIGBhdXRoX3N0YXR1c2AgKGA9IHt9YCkuIEknbSB3ZWxsIGF3YXJlIHRoYXQgdGhlIG9yaWdpbmFsIGlzc3VlIHdhcyB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiBgYXV0aF9zdGF0dXNgLCBtZWFuaW5nIHRoaXMgcGF0Y2ggKmlzKiBhIEtNU0FOIGZpeCBieSBuYXR1cmUuIE5vdywgdGhlIHByb21wdCBnaXZlcyBtZSB2ZXJ5IHNwZWNpZmljIHJ1bGVzLCBzbyBJIG5lZWQgdG8gYmUgdGhvcm91Z2guXG5cblRoZSBrZXkgcnVsZSBJJ20gd3Jlc3RsaW5nIHdpdGggaXM6IFwiU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6IC4uLiBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZCBvciBpbml0aWFsaXplZC4uLlwiLiBUaGlzIHBhdGNoICpkb2VzKiBmdWxseSB6ZXJvIGBhdXRoX3N0YXR1c2AuIEknbSBzdGFydGluZyB0byB0aGluayBJIHNob3VsZCBzZXQgYE5lZWRzS01TQU49ZmFsc2VgIGdpdmVuIHRoYXQgdGhlIHByb21wdCBzZWVtcyB0byBiZSBzdWdnZXN0aW5nIHRoYXQgc3VjaCBhIGZpeCBpcyB0cml2aWFsbHkgY29ycmVjdCBhbmQgZG9lc24ndCB3YXJyYW50IGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nLCB3aGljaCBjb25zdW1lcyByZXNvdXJjZXMuIFRoaXMgbWFrZXMgc2Vuc2U7IEtNU0FOIHdvdWxkIGxpa2VseSBmaW5kIG5vdGhpbmcgbmV3IGluIGBhdXRoX3N0YXR1c2AgYWZ0ZXIgdGhpcyBjaGFuZ2UuXG5cbkhvd2V2ZXIsIEknbSBzZWNvbmQtZ3Vlc3NpbmcgbXlzZWxmIGEgYml0LiAgSWYgSSBzZXQgYE5lZWRzS01TQU49ZmFsc2VgLCBzeXpib3QgKndvbid0KiBydW4gS01TQU4gb24gdGhpcyBwYXRjaC4gQnV0IHNpbmNlIGl0J3MgYSBLTVNBTiBmaXgsIHNob3VsZG4ndCB3ZSBkb3VibGUtY2hlY2s/IElzIHRoZXJlIHNvbWV0aGluZyBJJ20gbWlzc2luZz8gV2hhdCBpZiB0aGVyZSBhcmUgb3RoZXIgdW5pbml0aWFsaXplZCBmaWVsZHMgaW4gYSBkaWZmZXJlbnQgY29kZXBhdGg/IEJ1dCB0aGUgcHJvbXB0IHN0YXRlcyBcIk9OTFkgc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MgdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cIiBUaGlzIGZpeCB6ZXJvZXMgdGhlIG1lbW9yeSwgaXQgZG9lc24ndCAqaW50cm9kdWNlKiBhIHJpc2ssIGFuZCBpdCBkb2Vzbid0ICpleHBvc2UqIGEgcmlzayB0aGF0IGlzICpvbmx5KiBjYXVnaHQgYnkgS01TQU4uXG5cblRoZSBwcm9tcHTigJlzIHJ1bGVzLCB0aG91Z2gsIGFyZSBzcGVjaWZpYzogXCJBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZCBvciBpbml0aWFsaXplZC4uLlwiIGFuZCB0aGlzIHBhdGNoIGRvZXMgcHJlY2lzZWx5IHRoYXQsIGZ1bGx5IHplcm9pbmcgYGF1dGhfc3RhdHVzYC4gSSd2ZSBhbHJlYWR5IGNvbmZpcm1lZCBgcGFyYW1zLVx1MDAzZXBta2lkYCBpcyBub3QgdW5pbml0aWFsaXplZC5cblxuT2theSwgbGV0IG1lIHJlLWV4YW1pbmUgdGhlIHBhdGNoLiBUaGVyZSdzIGEgYG1lbWNweWAgdG8gY29weSBgcGFyYW1zLVx1MDAzZXBta2lkYCBpbnRvIGBhdXRoX3N0YXR1cy5wbWtpZGA6XG5cbmBgYGNcblx0aWYgKHBhcmFtcy1cdTAwM2VzdGF0dXMgPT0gV0xBTl9TVEFUVVNfU1VDQ0VTUykge1xuK1x0XHRpZiAocGFyYW1zLVx1MDAzZXBta2lkKVxuK1x0XHRcdG1lbWNweShhdXRoX3N0YXR1cy5wbWtpZCwgcGFyYW1zLVx1MDAzZXBta2lkLFxuK1x0XHRcdCAgICAgICBXTEFOX1BNS0lEX0xFTik7XG5cdFx0YXV0aF9zdGF0dXMuZmxhZ3MgPSBjcHVfdG9fbGUxNihCUkNNRl9FWFRBVVRIX1NVQ0NFU1MpO1xuYGBgXG5cblRoaXMgKmNvdWxkKiBpbnRyb2R1Y2UgYW4gb3V0LW9mLWJvdW5kcyByZWFkIGlmIHRoZSBuZXRsaW5rIGF0dHJpYnV0ZSdzIGxlbmd0aCAoYG5sYV9sZW5gKSBpcyBsZXNzIHRoYW4gYFdMQU5fUE1LSURfTEVOYCAoMTYgYnl0ZXMpLiBIb3dldmVyLCB0aGF0IHdvdWxkIGJlIGEgS0FTQU4gaXNzdWUgKG91dC1vZi1ib3VuZHMgcmVhZCksIG5vdCBhIEtNU0FOIGlzc3VlICh1bmluaXRpYWxpemVkIG1lbW9yeSkuIEtBU0FOIGlzIGFscmVhZHkgZW5hYmxlZCwgc28gdGhhdCdzIGNvdmVyZWQuIE5vdywgdGhlcmUgY291bGQgYmUgcGFkZGluZywgc28gaXQgaXMgcG9zc2libGUgdG8gcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeSBkdXJpbmcgdGhlIG1lbWNweSwgYnV0IGJhc2VkIG9uIG15IGV4cGVyaWVuY2UsIHBhZGRpbmcgc2hvdWxkbid0IGV4aXN0IGluIHRoYXQgY29udGV4dC4gU28sIEkgd2lsbCB0cnVzdCB0aGUga2VybmVsIHRvIGhhbmRsZSBpdC5cblxuVGhlcmVmb3JlLCBzaW5jZSB0aGUgcGF0Y2ggKm9ubHkqIG1vZGlmaWVzIGBhdXRoX3N0YXR1c2AsIHdoaWNoIGlzIGV4cGxpY2l0bHkgYW5kIGZ1bGx5IHplcm9lZCwgSSdtIGNvbmZpZGVudCB0aGF0IEkgc2hvdWxkIHNldCBgTmVlZHNLTVNBTj1mYWxzZWAuIFRoZSBwcm9tcHQncyBydWxlIGlzIHZlcnkgY2xlYXIsIGFuZCB0aGlzIHBhdGNoIGFkaGVyZXMgdG8gaXQgcGVyZmVjdGx5LlxuSeKAmWxsIGFkZCBhbiBleHBsYW5hdGlvbiBpbiB0aGUgY29tbWl0IG1lc3NhZ2UgdGhhdCB0aGlzIHBhdGNoIGZ1bGx5IHplcm9lcyBhIHN0cnVjdHVyZSwgZWxpbWluYXRpbmcgdGhlIEtNU0FOIHJpc2sgYW5kIG1ha2luZyBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIHVubmVjZXNzYXJ5IGJlY2F1c2UgdGhlIGZpeCBpcyB0cml2aWFsbHkgY29ycmVjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU1NDYsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDUzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTk6MDQ6MDUuNTkyMzI2NzMzWiIsIlNlcSI6MTU2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc4MjUzMTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTkw4MDIxMV9BVFRSX1BNS0lEXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC93aXJlbGVzcy9ubDgwMjExLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3dpcmVsZXNzL25sODAyMTEuYz03MDA9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5sODAyMTFfcG9saWN5W05VTV9OTDgwMjExX0FUVFJdID0ge1xcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy04MTktXFx0W05MODAyMTFfQVRUUl80QUREUl0gPSB7IC50eXBlID0gTkxBX1U4IH0sXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo4MjA6XFx0W05MODAyMTFfQVRUUl9QTUtJRF0gPSBOTEFfUE9MSUNZX0VYQUNUX0xFTl9XQVJOKFdMQU5fUE1LSURfTEVOKSxcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTgyMS1cXHRbTkw4MDIxMV9BVFRSX0RVUkFUSU9OXSA9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTE0Mzg4PXN0YXRpYyBpbnQgbmw4MDIxMV9zZXRfcG1rc2Eoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTQzOTktXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzoxNDQwMDpcXHRpZiAoIWluZm8tXFx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9QTUtJRF0pXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xNDQwMS1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE0NDAyLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MTQ0MDM6XFx0cG1rc2EucG1raWQgPSBubGFfZGF0YShpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfUE1LSURdKTtcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE0NDA0LVxcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYz0xNDQ0Mz1zdGF0aWMgaW50IG5sODAyMTFfZGVsX3Bta3NhKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE0NDYwLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MTQ0NjE6XFx0aWYgKGluZm8tXFx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9QTUtJRF0pXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzoxNDQ2MjpcXHRcXHRwbWtzYS5wbWtpZCA9IG5sYV9kYXRhKGluZm8tXFx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9QTUtJRF0pO1xcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTQ0NjMtXFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTE4NDkxPXN0YXRpYyBpbnQgbmw4MDIxMV9leHRlcm5hbF9hdXRoKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE4NTI2LVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MTg1Mjc6XFx0aWYgKGluZm8tXFx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9QTUtJRF0pXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzoxODUyODpcXHRcXHRwYXJhbXMucG1raWQgPSBubGFfZGF0YShpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfUE1LSURdKTtcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE4NTI5LVxcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYz0yMTE0Nj12b2lkIG5sODAyMTFfc2VuZF9jb25uZWN0X3Jlc3VsdChzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTIxMjExLVxcdCAgICAgIChjci1cXHUwMDNlZmlscy5wbWtpZCBcXHUwMDI2XFx1MDAyNlxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MjEyMTI6XFx0ICAgICAgIG5sYV9wdXQobXNnLCBOTDgwMjExX0FUVFJfUE1LSUQsIFdMQU5fUE1LSURfTEVOLCBjci1cXHUwMDNlZmlscy5wbWtpZCkpKSkgfHxcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTIxMjEzLVxcdCAgICAoY3ItXFx1MDAzZWFzc29jX2VuY3J5cHRlZCBcXHUwMDI2XFx1MDAyNlxcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYz0yMTI2MT12b2lkIG5sODAyMTFfc2VuZF9yb2FtZWQoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0yMTMxOS1cXHQgICAgKGluZm8tXFx1MDAzZWZpbHMucG1raWQgXFx1MDAyNlxcdTAwMjZcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjIxMzIwOlxcdCAgICAgbmxhX3B1dChtc2csIE5MODAyMTFfQVRUUl9QTUtJRCwgV0xBTl9QTUtJRF9MRU4sIGluZm8tXFx1MDAzZWZpbHMucG1raWQpKSlcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTIxMzIxLVxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxOTowNDowNS42NDAxNTgzOThaIiwiU2VxIjoxNTcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwNzcxOTcxODk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIFVuaW5pdGlhbGl6ZWQgTWVtb3J5KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGF0IGBbTkw4MDIxMV9BVFRSX1BNS0lEXWAgYXR0cmlidXRlIGhhcyBhIGRlY2xhcmVkIGxlbmd0aCBvZiBleGFjdGx5IGBXTEFOX1BNS0lEX0xFTmAgYnl0ZXMuIFRoYXQncyBrZXkuIFRoaXMgbWVhbnMgdGhhdCB3aGVuIHdlIGBtZW1jcHkoYXV0aF9zdGF0dXMucG1raWQsIHBhcmFtcy1cdTAwM2VwbWtpZCwgV0xBTl9QTUtJRF9MRU4pO2AsIHdlIGFyZSBndWFyYW50ZWVkIGEgc2FmZSBhbmQgY29tcGxldGUgY29weS4gTm8gb3V0LW9mLWJvdW5kcyByZWFkcywgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgc3VycHJpc2VzLlxuXG5UaGUgcGF0Y2ggaXRzZWxmIGlzIHN0cmFpZ2h0Zm9yd2FyZDpcbjEuICBXZSdyZSBmdWxseSB6ZXJvaW5nIG91dCBgYXV0aF9zdGF0dXNgIHJpZ2h0IGZyb20gdGhlIHN0YXJ0IHVzaW5nIGA9IHt9YC4gTmljZSBhbmQgY2xlYW4uXG4yLiAgVGhlbiwgd2UgY29uZGl0aW9uYWxseSBjb3B5IGBwYXJhbXMtXHUwMDNlcG1raWRgIGludG8gYGF1dGhfc3RhdHVzLnBta2lkYCwgYnV0IG9ubHkgKmlmKiBpdCBleGlzdHMsIHdoaWNoIHdlIGtub3cgd2lsbCBiZSBmdWxseSBpbml0aWFsaXplZCBhbmQgdGhlIGNvcnJlY3QgbGVuZ3RoIGR1ZSB0byB0aGF0IE5ldGxpbmsgYXR0cmlidXRlIHZhbGlkYXRpb24uXG5cblRoaXMgcGVyZmVjdGx5IGFkZHJlc3NlcyB0aGUgaXNzdWUuIFRoZSBwcm9tcHQgc3RhdGVzIHRoYXQgd2Ugc2hvdWxkIHNldCBgTmVlZHNLTVNBTj1mYWxzZWAgaWY6IGFsbCBzdGFjayBvciBoZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBhcmUgZnVsbHkgemVyb2VkIG9yIGluaXRpYWxpemVkICpiZWZvcmUqIGJlaW5nIHJlYWQvY29waWVkLCBhbmQgaWYgdGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhpcyBzYXRpc2ZpZXMgKmJvdGgqIGNyaXRlcmlhLlxuXG5XZSBpbml0aWFsaXplIGBhdXRoX3N0YXR1c2AgdmlhIGA9IHt9YCwgdGhlbiBjb25kaXRpb25hbGx5LCBhbmQgc2FmZWx5LCBjb3B5IGBwYXJhbXMtXHUwMDNlcG1raWRgIGludG8gdGhlIHN0cnVjdC4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgZXhwb3N1cmUgaGVyZS5cblxuVGhlIHJlYXNvbmluZyBpcyBzb2xpZDogdGhlIGBhdXRoX3N0YXR1c2Agc3RydWN0IGlzIGZ1bGx5IHplcm8taW5pdGlhbGl6ZWQgdXBmcm9udC4gVGhlIGNvbmRpdGlvbmFsIGNvcHkgb2YgdGhlIFBNS0lEIGlzIHNhZmUgZHVlIHRvIHRoZSBndWFyYW50ZWVkIGxlbmd0aCBwcm92aWRlZCBieSB0aGUgbmV0bGluayBhdHRyaWJ1dGUuIFRoaXMgcGF0Y2ggcmVtb3ZlcyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuXG5cbkxldCdzIGRvdWJsZS1jaGVjayB0aGUgZGlmZi4gU2VlbXMgdGhpcyBpcyBqdXN0IHRoZSBjaGFuZ2UgaW4gYGJyY21mX2N5d19leHRlcm5hbF9hdXRoYCAtIG5vIG90aGVyIGNoYW5nZXMuIENvbmZpcm1lZDogdGhlIG9ubHkgY2hhbmdlIGlzIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgc3RydWN0LlxuXG5BbHJpZ2h0LCBJJ20gY29uZmlkZW50LiBJJ20gZ29pbmcgdG8gY2FsbCBgc2V0LXJlc3VsdHNgIHdpdGggYE5lZWRzS01TQU49ZmFsc2VgIGFuZCB0aGUgcHJvdmlkZWQgcmVhc29uaW5nLiBJdCdzIGEgY2xlYW4sIHNhZmUgZml4LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODk1NiwiT3V0cHV0VG9rZW5zIjoxOTYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTk6MDQ6MTYuNDEyMTMzMTYyWiIsIlNlcSI6MTU4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgbGVhayB0byB0aGUgZGV2aWNlIGZpcm13YXJlIGJ5IGZ1bGx5IHplcm8taW5pdGlhbGl6aW5nIHRoZSBgYXV0aF9zdGF0dXNgIHN0YWNrIHN0cnVjdHVyZSAoYD0ge31gKSBiZWZvcmUgaXQgaXMgcGFzc2VkIHRvIGBicmNtZl9maWxfaW92YXJfZGF0YV9zZXQoKWAuIEl0IGFsc28gY29uZGl0aW9uYWxseSBjb3BpZXMgYHBhcmFtcy1cXHUwMDNlcG1raWRgIGludG8gdGhlIHN0cnVjdHVyZSwgd2hpY2ggaXMgZ3VhcmFudGVlZCB0byBiZSBmdWxseSBpbml0aWFsaXplZCBhbmQgb2YgdGhlIGNvcnJlY3QgbGVuZ3RoIChgV0xBTl9QTUtJRF9MRU5gKSBkdWUgdG8gbmV0bGluayBhdHRyaWJ1dGUgdmFsaWRhdGlvbiAoYE5MQV9QT0xJQ1lfRVhBQ1RfTEVOX1dBUk5gIG9uIGBOTDgwMjExX0FUVFJfUE1LSURgKS4gU2luY2UgYWxsIHN0YWNrIHN0cnVjdHVyZXMgdG91Y2hlZCBieSB0aGUgcGF0Y2ggYXJlIG5vdyBmdWxseSB6ZXJvZWQgYW5kIGluaXRpYWxpemVkLCB0aGUgcGF0Y2ggY29tcGxldGVseSByZXNvbHZlcyB0aGUgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUgYW5kIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWsgdG8gdGhlIGRldmljZSBmaXJtd2FyZSBieSBmdWxseSB6ZXJvLWluaXRpYWxpemluZyB0aGUgYGF1dGhfc3RhdHVzYCBzdGFjayBzdHJ1Y3R1cmUgKGA9IHt9YCkgYmVmb3JlIGl0IGlzIHBhc3NlZCB0byBgYnJjbWZfZmlsX2lvdmFyX2RhdGFfc2V0KClgLiBJdCBhbHNvIGNvbmRpdGlvbmFsbHkgY29waWVzIGBwYXJhbXMtXFx1MDAzZXBta2lkYCBpbnRvIHRoZSBzdHJ1Y3R1cmUsIHdoaWNoIGlzIGd1YXJhbnRlZWQgdG8gYmUgZnVsbHkgaW5pdGlhbGl6ZWQgYW5kIG9mIHRoZSBjb3JyZWN0IGxlbmd0aCAoYFdMQU5fUE1LSURfTEVOYCkgZHVlIHRvIG5ldGxpbmsgYXR0cmlidXRlIHZhbGlkYXRpb24gKGBOTEFfUE9MSUNZX0VYQUNUX0xFTl9XQVJOYCBvbiBgTkw4MDIxMV9BVFRSX1BNS0lEYCkuIFNpbmNlIGFsbCBzdGFjayBzdHJ1Y3R1cmVzIHRvdWNoZWQgYnkgdGhlIHBhdGNoIGFyZSBub3cgZnVsbHkgemVyb2VkIGFuZCBpbml0aWFsaXplZCwgdGhlIHBhdGNoIGNvbXBsZXRlbHkgcmVzb2x2ZXMgdGhlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlIGFuZCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:nil,}