Name: series-workflowxlvlh Phase: Succeeded StartedAt: 2026-07-18 07:52:16 +0000 UTC FinishedAt: 2026-07-18 10:48:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxlvlh[0] Phase: Succeeded StartedAt: 2026-07-18 07:52:16 +0000 UTC FinishedAt: 2026-07-18 08:24:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxlvlh[0].run-triage Phase: Succeeded StartedAt: 2026-07-18 07:52:16 +0000 UTC FinishedAt: 2026-07-18 08:24:54 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "94515f3a7d4256a5062176b7d6ed0471938cd51a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ATH11K", "ATH11K_PCI", "ATH12K" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "94515f3a7d4256a5062176b7d6ed0471938cd51a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ATH11K", "ATH11K_PCI", "ATH12K" ], "series_id": "682a1a48-0c10-4bc9-8b35-2eccd6483010" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ath11k_qmi_init_service", "ath12k_qmi_init_service" ], "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+CgkJCTx0ZD4yMDI2LzA3LzE4IDA4OjIyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FUSDExSyYjMzQ7LAogICAgJiMzNDtBVEgxMUtfUENJJiMzNDssCiAgICAmIzM0O0FUSDEySyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2F0aDExa19xbWlfaW5pdF9zZXJ2aWNlJiMzNDssCiAgICAmIzM0O2F0aDEya19xbWlfaW5pdF9zZXJ2aWNlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgZXJyb3IgaGFuZGxpbmcgdG8gZml4IGEgcmVzb3VyY2UgbGVhayBpbiB0aGUgUU1JIGluaXRpYWxpemF0aW9uIHBhdGggb2YgdGhlIGF0aDExayBhbmQgYXRoMTJrIGRyaXZlcnMuIEl0IHJlbGVhc2VzIHRoZSBRTUkgaGFuZGxlIGlmIHdvcmtxdWV1ZSBhbGxvY2F0aW9uIG9yIFFNSSBsb29rdXAgYWRkaXRpb24gZmFpbHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGNhbiBiZSByZWFjaGVkIGFuZCB0ZXN0ZWQgdmlhIHZpcnR1YWwgUENJIGRldmljZSBpbmplY3Rpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTggMDg6MjI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBhNmM1MzQ3MzA2Y2ZlMjQyMDE5ZTIzMTgwNGFjNjEzZWFhODM3ZGUxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBKdWwgMTggMDg6MjI6MzggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9xbWkuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvcW1pLmNcbmluZGV4IDQxMGE3ZWUwNzZhMDI2Li42ZTNmODIxNjlkMjQxYiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvcW1pLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvcW1pLmNcbkBAIC0zMzI5LDcgJiM0MzszMzI5LDggQEAgaW50IGF0aDExa19xbWlfaW5pdF9zZXJ2aWNlKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXG4gXHRhYi1cdTAwM2VxbWkuZXZlbnRfd3EgPSBhbGxvY19vcmRlcmVkX3dvcmtxdWV1ZShcJiMzNDthdGgxMWtfcW1pX2RyaXZlcl9ldmVudFwmIzM0OywgMCk7XG4gXHRpZiAoIWFiLVx1MDAzZXFtaS5ldmVudF93cSkge1xuIFx0XHRhdGgxMWtfZXJyKGFiLCBcJiMzNDtmYWlsZWQgdG8gYWxsb2NhdGUgd29ya3F1ZXVlXFxuXCYjMzQ7KTtcbi1cdFx0cmV0dXJuIC1FRkFVTFQ7XG4mIzQzO1x0XHRyZXQgPSAtRUZBVUxUO1xuJiM0MztcdFx0Z290byBlcnJfcmVsZWFzZV9xbWlfaGFuZGxlO1xuIFx0fVxuIFxuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2YWItXHUwMDNlcW1pLmV2ZW50X2xpc3QpO1xuQEAgLTMzNDIsOSAmIzQzOzMzNDMsMTQgQEAgaW50IGF0aDExa19xbWlfaW5pdF9zZXJ2aWNlKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXG4gXHRpZiAocmV0IFx1MDAzYyAwKSB7XG4gXHRcdGF0aDExa193YXJuKGFiLCBcJiMzNDtmYWlsZWQgdG8gYWRkIHFtaSBsb29rdXA6ICVkXFxuXCYjMzQ7LCByZXQpO1xuIFx0XHRkZXN0cm95X3dvcmtxdWV1ZShhYi1cdTAwM2VxbWkuZXZlbnRfd3EpO1xuLVx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdFx0Z290byBlcnJfcmVsZWFzZV9xbWlfaGFuZGxlO1xuIFx0fVxuIFxuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztlcnJfcmVsZWFzZV9xbWlfaGFuZGxlOlxuJiM0MztcdHFtaV9oYW5kbGVfcmVsZWFzZShcdTAwMjZhYi1cdTAwM2VxbWkuaGFuZGxlKTtcbiYjNDM7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuY1xuaW5kZXggZmQ3NjJiNWQ3YmI1OTcuLjY5MmYxYjJjMjAzMWI3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuY1xuQEAgLTQwNDEsNyAmIzQzOzQwNDEsNiBAQCBpbnQgYXRoMTJrX3FtaV9pbml0X3NlcnZpY2Uoc3RydWN0IGF0aDEya19iYXNlICphYilcbiBcbiBcdG1lbXNldChcdTAwMjZhYi1cdTAwM2VxbWkudGFyZ2V0LCAwLCBzaXplb2Yoc3RydWN0IHRhcmdldF9pbmZvKSk7XG4gXHRtZW1zZXQoXHUwMDI2YWItXHUwMDNlcW1pLnRhcmdldF9tZW0sIDAsIHNpemVvZihzdHJ1Y3QgdGFyZ2V0X21lbV9jaHVuaykpO1xuLVx0YWItXHUwMDNlcW1pLmFiID0gYWI7XG4gXG4gXHRhYi1cdTAwM2VxbWkudGFyZ2V0X21lbV9tb2RlID0gYWItXHUwMDNldGFyZ2V0X21lbV9tb2RlO1xuIFx0cmV0ID0gcW1pX2hhbmRsZV9pbml0KFx1MDAyNmFiLVx1MDAzZXFtaS5oYW5kbGUsIEFUSDEyS19RTUlfUkVTUF9MRU5fTUFYLFxuQEAgLTQwNTQsNyAmIzQzOzQwNTMsOCBAQCBpbnQgYXRoMTJrX3FtaV9pbml0X3NlcnZpY2Uoc3RydWN0IGF0aDEya19iYXNlICphYilcbiBcdGFiLVx1MDAzZXFtaS5ldmVudF93cSA9IGFsbG9jX29yZGVyZWRfd29ya3F1ZXVlKFwmIzM0O2F0aDEya19xbWlfZHJpdmVyX2V2ZW50XCYjMzQ7LCAwKTtcbiBcdGlmICghYWItXHUwMDNlcW1pLmV2ZW50X3dxKSB7XG4gXHRcdGF0aDEya19lcnIoYWIsIFwmIzM0O2ZhaWxlZCB0byBhbGxvY2F0ZSB3b3JrcXVldWVcXG5cJiMzNDspO1xuLVx0XHRyZXR1cm4gLUVGQVVMVDtcbiYjNDM7XHRcdHJldCA9IC1FRkFVTFQ7XG4mIzQzO1x0XHRnb3RvIGVycl9yZWxlYXNlX3FtaV9oYW5kbGU7XG4gXHR9XG4gXG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZhYi1cdTAwM2VxbWkuZXZlbnRfbGlzdCk7XG5AQCAtNDA2Nyw5ICYjNDM7NDA2NywxNiBAQCBpbnQgYXRoMTJrX3FtaV9pbml0X3NlcnZpY2Uoc3RydWN0IGF0aDEya19iYXNlICphYilcbiBcdGlmIChyZXQgXHUwMDNjIDApIHtcbiBcdFx0YXRoMTJrX3dhcm4oYWIsIFwmIzM0O2ZhaWxlZCB0byBhZGQgcW1pIGxvb2t1cFxcblwmIzM0Oyk7XG4gXHRcdGRlc3Ryb3lfd29ya3F1ZXVlKGFiLVx1MDAzZXFtaS5ldmVudF93cSk7XG4tXHRcdHJldHVybiByZXQ7XG4mIzQzO1x0XHRnb3RvIGVycl9yZWxlYXNlX3FtaV9oYW5kbGU7XG4gXHR9XG4gXG4mIzQzO1x0YWItXHUwMDNlcW1pLmFiID0gYWI7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztlcnJfcmVsZWFzZV9xbWlfaGFuZGxlOlxuJiM0MztcdHFtaV9oYW5kbGVfcmVsZWFzZShcdTAwMjZhYi1cdTAwM2VxbWkuaGFuZGxlKTtcbiYjNDM7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOCAwODoyMjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtBVEgxMUsmIzM0OywKICAgICYjMzQ7QVRIMTFLX1BDSSYjMzQ7LAogICAgJiMzNDtBVEgxMksmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthdGgxMWtfcW1pX2luaXRfc2VydmljZSYjMzQ7LAogICAgJiMzNDthdGgxMmtfcW1pX2luaXRfc2VydmljZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGVycm9yIGhhbmRsaW5nIHRvIGZpeCBhIHJlc291cmNlIGxlYWsgaW4gdGhlIFFNSSBpbml0aWFsaXphdGlvbiBwYXRoIG9mIHRoZSBhdGgxMWsgYW5kIGF0aDEyayBkcml2ZXJzLiBJdCByZWxlYXNlcyB0aGUgUU1JIGhhbmRsZSBpZiB3b3JrcXVldWUgYWxsb2NhdGlvbiBvciBRTUkgbG9va3VwIGFkZGl0aW9uIGZhaWxzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBjYW4gYmUgcmVhY2hlZCBhbmQgdGVzdGVkIHZpYSB2aXJ0dWFsIFBDSSBkZXZpY2UgaW5qZWN0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBhNmM1MzQ3MzA2Y2ZlMjQyMDE5ZTIzMTgwNGFjNjEzZWFhODM3ZGUxCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBKdWwgMTggMDg6MjI6MzggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3FtaS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9xbWkuYwppbmRleCA0MTBhN2VlMDc2YTAyNi4uNmUzZjgyMTY5ZDI0MWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvcW1pLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9xbWkuYwpAQCAtMzMyOSw3ICYjNDM7MzMyOSw4IEBAIGludCBhdGgxMWtfcW1pX2luaXRfc2VydmljZShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKQogCWFiLSZndDtxbWkuZXZlbnRfd3EgPSBhbGxvY19vcmRlcmVkX3dvcmtxdWV1ZSgmIzM0O2F0aDExa19xbWlfZHJpdmVyX2V2ZW50JiMzNDssIDApOwogCWlmICghYWItJmd0O3FtaS5ldmVudF93cSkgewogCQlhdGgxMWtfZXJyKGFiLCAmIzM0O2ZhaWxlZCB0byBhbGxvY2F0ZSB3b3JrcXVldWVcbiYjMzQ7KTsKLQkJcmV0dXJuIC1FRkFVTFQ7CiYjNDM7CQlyZXQgPSAtRUZBVUxUOwomIzQzOwkJZ290byBlcnJfcmVsZWFzZV9xbWlfaGFuZGxlOwogCX0KIAogCUlOSVRfTElTVF9IRUFEKCZhbXA7YWItJmd0O3FtaS5ldmVudF9saXN0KTsKQEAgLTMzNDIsOSAmIzQzOzMzNDMsMTQgQEAgaW50IGF0aDExa19xbWlfaW5pdF9zZXJ2aWNlKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpCiAJaWYgKHJldCAmbHQ7IDApIHsKIAkJYXRoMTFrX3dhcm4oYWIsICYjMzQ7ZmFpbGVkIHRvIGFkZCBxbWkgbG9va3VwOiAlZFxuJiMzNDssIHJldCk7CiAJCWRlc3Ryb3lfd29ya3F1ZXVlKGFiLSZndDtxbWkuZXZlbnRfd3EpOwotCQlyZXR1cm4gcmV0OwomIzQzOwkJZ290byBlcnJfcmVsZWFzZV9xbWlfaGFuZGxlOwogCX0KIAomIzQzOwlyZXR1cm4gcmV0OwomIzQzOwomIzQzO2Vycl9yZWxlYXNlX3FtaV9oYW5kbGU6CiYjNDM7CXFtaV9oYW5kbGVfcmVsZWFzZSgmYW1wO2FiLSZndDtxbWkuaGFuZGxlKTsKJiM0MzsKIAlyZXR1cm4gcmV0OwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuYwppbmRleCBmZDc2MmI1ZDdiYjU5Ny4uNjkyZjFiMmMyMDMxYjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuYwpAQCAtNDA0MSw3ICYjNDM7NDA0MSw2IEBAIGludCBhdGgxMmtfcW1pX2luaXRfc2VydmljZShzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKQogCiAJbWVtc2V0KCZhbXA7YWItJmd0O3FtaS50YXJnZXQsIDAsIHNpemVvZihzdHJ1Y3QgdGFyZ2V0X2luZm8pKTsKIAltZW1zZXQoJmFtcDthYi0mZ3Q7cW1pLnRhcmdldF9tZW0sIDAsIHNpemVvZihzdHJ1Y3QgdGFyZ2V0X21lbV9jaHVuaykpOwotCWFiLSZndDtxbWkuYWIgPSBhYjsKIAogCWFiLSZndDtxbWkudGFyZ2V0X21lbV9tb2RlID0gYWItJmd0O3RhcmdldF9tZW1fbW9kZTsKIAlyZXQgPSBxbWlfaGFuZGxlX2luaXQoJmFtcDthYi0mZ3Q7cW1pLmhhbmRsZSwgQVRIMTJLX1FNSV9SRVNQX0xFTl9NQVgsCkBAIC00MDU0LDcgJiM0Mzs0MDUzLDggQEAgaW50IGF0aDEya19xbWlfaW5pdF9zZXJ2aWNlKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpCiAJYWItJmd0O3FtaS5ldmVudF93cSA9IGFsbG9jX29yZGVyZWRfd29ya3F1ZXVlKCYjMzQ7YXRoMTJrX3FtaV9kcml2ZXJfZXZlbnQmIzM0OywgMCk7CiAJaWYgKCFhYi0mZ3Q7cW1pLmV2ZW50X3dxKSB7CiAJCWF0aDEya19lcnIoYWIsICYjMzQ7ZmFpbGVkIHRvIGFsbG9jYXRlIHdvcmtxdWV1ZVxuJiMzNDspOwotCQlyZXR1cm4gLUVGQVVMVDsKJiM0MzsJCXJldCA9IC1FRkFVTFQ7CiYjNDM7CQlnb3RvIGVycl9yZWxlYXNlX3FtaV9oYW5kbGU7CiAJfQogCiAJSU5JVF9MSVNUX0hFQUQoJmFtcDthYi0mZ3Q7cW1pLmV2ZW50X2xpc3QpOwpAQCAtNDA2Nyw5ICYjNDM7NDA2NywxNiBAQCBpbnQgYXRoMTJrX3FtaV9pbml0X3NlcnZpY2Uoc3RydWN0IGF0aDEya19iYXNlICphYikKIAlpZiAocmV0ICZsdDsgMCkgewogCQlhdGgxMmtfd2FybihhYiwgJiMzNDtmYWlsZWQgdG8gYWRkIHFtaSBsb29rdXBcbiYjMzQ7KTsKIAkJZGVzdHJveV93b3JrcXVldWUoYWItJmd0O3FtaS5ldmVudF93cSk7Ci0JCXJldHVybiByZXQ7CiYjNDM7CQlnb3RvIGVycl9yZWxlYXNlX3FtaV9oYW5kbGU7CiAJfQogCiYjNDM7CWFiLSZndDtxbWkuYWIgPSBhYjsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0MzsKJiM0MztlcnJfcmVsZWFzZV9xbWlfaGFuZGxlOgomIzQzOwlxbWlfaGFuZGxlX3JlbGVhc2UoJmFtcDthYi0mZ3Q7cW1pLmhhbmRsZSk7CiYjNDM7CiAJcmV0dXJuIHJldDsKIH0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOCAwODoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjk3CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMzM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBhdGNoIGZvciBRdWFsY29tbSBBdGhlcm9zIFdpcmVsZXNzIERyaXZlcnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0JiMzOTtzIHRvdWNoaW5nIGBhdGgxMWtfcW1pX2luaXRfc2VydmljZWAgYW5kIGBhdGgxMmtfcW1pX2luaXRfc2VydmljZWAg4oCTIGJvdGggUU1JIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIGBhdGgxMWtgIGFuZCBgYXRoMTJrYCBkcml2ZXJzLiBJdCBzZWVtcyB0aGV5JiMzOTtyZSBhZGRpbmcgc29tZSBlcnJvciBoYW5kbGluZyB0byBncmFjZWZ1bGx5IHJlbGVhc2UgdGhlIFFNSSBoYW5kbGUgaWYgZWl0aGVyIGBhbGxvY19vcmRlcmVkX3dvcmtxdWV1ZWAgb3IgYHFtaV9hZGRfbG9va3VwYCBmYWlsLiBUaGF0JiMzOTtzIGdvb2QsIHByZXZlbnRpbmcgcmVzb3VyY2UgbGVha3MgaXMgYWx3YXlzIGltcG9ydGFudC4gSSBhbHNvIHNlZSB0aGF0IGluIHRoZSBgYXRoMTJrYCBmdW5jdGlvbiwgYGFiLSZndDtxbWkuYWIgPSBhYjtgIGlzIG1vdmVkIHRvIHRoZSBlbmQuIEkgd29uZGVyIHdoeSB0aGF0IHdhcyBkZWVtZWQgbmVjZXNzYXJ5LgoKTm93LCBhIGNyaXRpY2FsIHBvaW50IGNvbWVzIHRvIG1pbmQuIFRoZXNlIGFyZSBoYXJkd2FyZSBkcml2ZXJzLiBTcGVjaWZpY2FsbHkgZm9yIFF1YWxjb21tIEF0aGVyb3Mgd2lyZWxlc3MgY2hpcHMsIGxpa2UgYXRoMTFrIGFuZCBhdGgxMmsuIFRoZSBiaWcgcXVlc3Rpb24gaXMgd2hldGhlciB0aGlzIGNvZGUgaXMgZXZlbiAqcmVsZXZhbnQqIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIFVzdWFsbHksIHlvdSBkb24mIzM5O3Qgc2VlIGRpcmVjdCBlbXVsYXRpb24gb2YgUENJIG9yIEFIQiBkZXZpY2VzIHVubGVzcyBhIHNwZWNpZmljIGVtdWxhdG9yIGhhcyBiZWVuIHNldCB1cCwgbGlrZSBtYWM4MDIxMV9od3NpbSwgYnV0IHRoYXQmIzM5O3MgZm9yIGdlbmVyaWMgbWFjODAyMTEsIG5vdCB0aGVzZSBzcGVjaWZpYyBoYXJkd2FyZSBkcml2ZXJzLiBJIGRvbiYjMzk7dCByZWNhbGwgYW55IHN0YW5kYXJkIHNvZnR3YXJlIGVtdWxhdGlvbiBmb3IgYXRoMTFrIG9yIGF0aDEyay4KClNvLCBsZXQgbWUgY2xhcmlmeTogYXJlIHRoZXNlIGRyaXZlcnMgc3RyaWN0bHkgdGllZCB0byByZWFsIGhhcmR3YXJlPyBPciwgaXMgdGhlcmUgc29tZSBzb3J0IG9mIHZpcnR1YWwgYnVzIHRoYXQgY291bGQgYWxsb3cgZm9yIHRoZWlyIHByb2Jpbmcgd2l0aGluIGEgdmlydHVhbCBtYWNoaW5lPyBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gaWYgdGhlcmUmIzM5O3MgYW55IHBhdGh3YXkgdG8gcmVhY2ggdGhlbSBpbiBhIHZpcnR1YWxpemVkIGNvbnRleHQuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGNvZGViYXNlIGRpcmVjdGx5LiBUaW1lIHRvIGRpdmUgaW50byB0aGUgZGlyZWN0b3J5IHN0cnVjdHVyZXMsIHNwZWNpZmljYWxseSBgZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9gIGFuZCBgZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9gIGFuZCBzZWUgaWYgYW55dGhpbmcganVtcHMgb3V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE4IDA4OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2F0aDExa19xbWlfaW5pdF9zZXJ2aWNlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvY29yZS5jPTE5ODU9c3RhdGljIGludCBhdGgxMWtfY29yZV9zb2NfY3JlYXRlKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9jb3JlLmMtMTk5My1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvY29yZS5jOjE5OTQ6XHRyZXQgPSBhdGgxMWtfcW1pX2luaXRfc2VydmljZShhYik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2NvcmUuYy0xOTk1LVx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvcW1pLmM9MzIwNz1zdGF0aWMgdm9pZCBhdGgxMWtfcW1pX2RyaXZlcl9ldmVudF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3FtaS5jLTMzMTItXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3FtaS5jOjMzMTM6aW50IGF0aDExa19xbWlfaW5pdF9zZXJ2aWNlKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3FtaS5jLTMzMTQte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvcW1pLmg9NTIwPXZvaWQgYXRoMTFrX3FtaV9kZWluaXRfc2VydmljZShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvcW1pLmg6NTIxOmludCBhdGgxMWtfcW1pX2luaXRfc2VydmljZShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvcW1pLmgtNTIyLXZvaWQgYXRoMTFrX3FtaV9mcmVlX3Jlc291cmNlKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE4IDA4OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5MDQKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqSW52ZXN0aWdhdGluZyB0aGUgYGF0aDExa19jb3JlX3NvY19jcmVhdGVgIEZ1bmN0aW9uIENhbGwqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBhdGgxMWtfY29yZV9zb2NfY3JlYXRlYCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgYW5kIGhvdyBpdCYjMzk7cyBiZWluZyB1c2VkLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byB0cmFjZSBpdHMgY2FsbCBwYXRoLiBUaGlzIHNob3VsZCBnaXZlIG1lIHZhbHVhYmxlIGNvbnRleHQgb24gaXRzIHB1cnBvc2Ugd2l0aGluIHRoZSBicm9hZGVyIGF0aDExayBkcml2ZXIgYXJjaGl0ZWN0dXJlLiBJJiMzOTtsbCBuZWVkIHRvIGtub3cgdGhlIHN1cnJvdW5kaW5nIGNvZGUgYW5kIHRoZSBzZXF1ZW5jZSBvZiBldmVudHMgdGhhdCBsZWFkIHRvIHRoaXMgZnVuY3Rpb24gYmVpbmcgaW52b2tlZC4gVGhhdCBzaG91bGQgaW5mb3JtIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHN5c3RlbXMgb3BlcmF0aW9uIGFuZCBpZGVudGlmeSBhbnkgcG90ZW50aWFsIGlzc3VlcyBvciBhcmVhcyBmb3Igb3B0aW1pemF0aW9uLiBTbywgbGV0JiMzOTtzIHN0YXJ0IGRpZ2dpbmchCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTggMDg6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXRoMTFrX2NvcmVfc29jX2NyZWF0ZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2NvcmUuYz0xOTczPXN0YXRpYyB2b2lkIGF0aDExa19jb3JlX3N0b3Aoc3RydWN0IGF0aDExa19iYXNlICphYilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2NvcmUuYy0xOTg0LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9jb3JlLmM6MTk4NTpzdGF0aWMgaW50IGF0aDExa19jb3JlX3NvY19jcmVhdGUoc3RydWN0IGF0aDExa19iYXNlICphYilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvY29yZS5jLTE5ODYte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvY29yZS5jPTI2ODY9aW50IGF0aDExa19jb3JlX2luaXQoc3RydWN0IGF0aDExa19iYXNlICphYilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2NvcmUuYy0yNzA0LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9jb3JlLmM6MjcwNTpcdHJldCA9IGF0aDExa19jb3JlX3NvY19jcmVhdGUoYWIpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9jb3JlLmMtMjcwNi1cdGlmIChyZXQpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOCAwODoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MzgzCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgdGFraW5nIG9uIHRoZSBwZXJzb25hIHlvdSYjMzk7dmUgZGVzY3JpYmVkOgoKKipJbml0aWFsIFRob3VnaHRzIG9uIGBhdGgxMWtfY29yZV9pbml0YCoqCgpBbHJpZ2h0LCBzbyBgYXRoMTFrX2NvcmVfaW5pdGAuLi4gbGV0JiMzOTtzIHRoaW5rIHRoaXMgdGhyb3VnaC4gTXkgZmlyc3QgaW5zdGluY3QsIGFzIGFsd2F5cywgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dC4gVGhpcyBpcyBjb3JlIGluaXRpYWxpemF0aW9uLCBzbyBpdCYjMzk7cyBmb3VuZGF0aW9uYWwuIEl0JiMzOTtzIHRoZSBzdGFydGluZyBwb2ludCBmb3Igd2hhdGV2ZXIgd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQsIHByb2JhYmx5IHRoZSBkcml2ZXIuIEdpdmVuIHRoZSBuYW1lLCAmIzM0O2F0aDExaywmIzM0OyBJJiMzOTttIGltbWVkaWF0ZWx5IGFzc3VtaW5nIHRoaXMgcmVsYXRlcyB0byBRdWFsY29tbSBBdGhlcm9zLCBhbmQgbW9zdCBsaWtlbHkgdGhlaXIgODAyLjExYXggKFdpLUZpIDYvNkUpIGNoaXBzZXQsIHRoZSAmIzM5OzExayYjMzk7IGxpa2VseSByZWZlcnJpbmcgdG8gdGhlIGdlbmVyYXRpb24gb2YgdGhlIGNoaXBzZXQuIEkgbmVlZCB0byBkaWcgaW50byB3aGF0ICYjMzQ7Y29yZSYjMzQ7IG1lYW5zIGhlcmUuIElzIGl0IHRoZSB2ZXJ5IGJhc2ljIGhhcmR3YXJlIGFic3RyYWN0aW9uLCB0aGUgcmVnaXN0ZXIgc2V0dXAsIG9yIGlzIGl0IG1vcmUgb2YgYSBkcml2ZXItbGV2ZWwgaW5mcmFzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24/IEJhc2VkIG9uIHRoZSBuYW1lLCBteSBndXQgc2F5cyBhIGJpdCBvZiBib3RoLiBJIGV4cGVjdCB0byBzZWUgcmVnaXN0ZXIgbWFwcGluZywgY2xvY2sgc2V0dXAsIGludGVycnVwdCBjb25maWd1cmF0aW9uLCBhbmQgbWF5YmUgc29tZSBiYXNpYyByZXNvdXJjZSBhbGxvY2F0aW9uLiBUaGlzIHdpbGwgZGV0ZXJtaW5lIGhvdyB0aGUgcmVzdCBvZiB0aGUgc3RhY2sgaW50ZXJhY3RzIHdpdGggdGhlIGRldmljZSwgYW5kIGFueSBlcnJvciBoZXJlIHdpbGwgdHJpY2tsZSBkb3duIGFuZCBhZmZlY3QgZXZlcnkgb3RoZXIgZnVuY3Rpb24uIFdoYXQgcmVzb3VyY2VzIGFyZSB3ZSB0YWxraW5nIGFib3V0IGhlcmU/IE1lbW9yeSByZWdpb25zLCBETUEgY2hhbm5lbHMsIGludGVycnVwdHMsIHBvdGVudGlhbGx5IGV2ZW4gUEhZIHNldHRpbmdzLiBJ4oCZbGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXZpY2UgdHJlZSBkZXBlbmRlbmNpZXMuIFdoYXQgb3RoZXIgcmVsYXRlZCBmdW5jdGlvbnMgYXJlIGdvaW5nIHRvIGRlcGVuZCBvbiB0aGUgb3V0cHV0IG9mIHRoaXMgZnVuY3Rpb24/IEhvdyB3aWxsIHRoaXMgaW50ZXJhY3Qgd2l0aCB0aGUgZmlybXdhcmUgbG9hZGluZyBwcm9jZXNzLCBpZiB0aGVyZSBpcyBvbmU/IEkgbmVlZCB0byB0aGluayBhYm91dCB0aGF0IG5leHQuIEkgbmVlZCB0byBjb25zaWRlciBhbGwgcG9zc2libGUgZmFpbHVyZSBjYXNlcywgYW5kIHRoaW5rIGFib3V0IHRoZSByZXR1cm4gY29kZXMgdGhhdCBtaWdodCBpbmRpY2F0ZSBhbiBlcnJvci4gVGhpcyBpcyBhIGNyaXRpY2FsIGZ1bmN0aW9uLCBzbyByb2J1c3QgZXJyb3IgaGFuZGxpbmcgaXMgcGFyYW1vdW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE4IDA4OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2F0aDExa19jb3JlX2luaXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYz0xMTA3PXN0YXRpYyBpbnQgYXRoMTFrX2FoYl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmMtMTE5My1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmM6MTE5NDpcdHJldCA9IGF0aDExa19jb3JlX2luaXQoYWIpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYy0xMTk1LVx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvY29yZS5jPTI2ODQ9RVhQT1JUX1NZTUJPTChhdGgxMWtfY29yZV9wbV9ub3RpZmllcl91bnJlZ2lzdGVyKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvY29yZS5jLTI2ODUtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2NvcmUuYzoyNjg2OmludCBhdGgxMWtfY29yZV9pbml0KHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2NvcmUuYy0yNjg3LXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2NvcmUuYy0yNzE3LX1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvY29yZS5jOjI3MTg6RVhQT1JUX1NZTUJPTChhdGgxMWtfY29yZV9pbml0KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvY29yZS5jLTI3MTktXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9jb3JlLmg9MTI3MD1pbnQgYXRoMTFrX2NvcmVfcHJlX2luaXQoc3RydWN0IGF0aDExa19iYXNlICphYik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2NvcmUuaDoxMjcxOmludCBhdGgxMWtfY29yZV9pbml0KHN0cnVjdCBhdGgxMWtfYmFzZSAqYXRoMTFrKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvY29yZS5oLTEyNzItdm9pZCBhdGgxMWtfY29yZV9kZWluaXQoc3RydWN0IGF0aDExa19iYXNlICphdGgxMWspO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvcGNpLmM9OTQ1PXN0YXRpYyBpbnQgYXRoMTFrX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3BjaS5jLTExMzUtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3BjaS5jOjExMzY6XHRyZXQgPSBhdGgxMWtfY29yZV9pbml0KGFiKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvcGNpLmMtMTEzNy1cdGlmIChyZXQpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOCAwODoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NDIxCgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMjUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUmVhY2hhYmlsaXR5IG9mIGBhdGgxMWtfY29yZV9pbml0YCoqCgpPa2F5LCBzbyBgYXRoMTFrX2NvcmVfaW5pdGAgZ2V0cyBjYWxsZWQgYnkgYm90aCBgYXRoMTFrX2FoYl9wcm9iZWAgYW5kIGBhdGgxMWtfcGNpX3Byb2JlYC4gTWFrZXMgc2Vuc2Ug4oCTIEFIQiBhbmQgUENJIGFyZSB0aGUgaW5pdGlhbCBlbnRyeSBwb2ludHMgZm9yIGhhcmR3YXJlIGludGVyYWN0aW9uLiBUaGUgcHJvYmxlbSBpcywgd2l0aG91dCB0aGUgYWN0dWFsIGhhcmR3YXJlLCB0aG9zZSBwcm9iZSBmdW5jdGlvbnMgd29uJiMzOTt0IGJlIGNhbGxlZCwgYW5kIHRoZXJlZm9yZSBteSBtb2RpZmllZCBjb2RlIHdpdGhpbiBgYXRoMTFrX2NvcmVfaW5pdGAgcmVtYWlucyB1bnJlYWNoYWJsZS4KCk5vdywgdGhlIHF1ZXN0aW9uIGlzIGhvdyB0byB0cmlnZ2VyIGEgUENJIHByb2JlIGluIGEgdmlydHVhbCBlbnZpcm9ubWVudC4gSSBrbm93IHN5emthbGxlciBoYXMgYSB2aXJ0dWFsIFBDSSBkZXZpY2UgaW5qZWN0b3IsIGJ1dCBpdOKAmXMgdXN1YWxseSBkZXNpZ25lZCBmb3Igc3BlY2lmaWMgZnV6emluZyBzZXR1cHMsIG9yIGluamVjdGluZyBhcmJpdHJhcnkgUENJIElEcy4gSXQgZG9lc24mIzM5O3QgdHlwaWNhbGx5IGVtdWxhdGUgYWxsIHRoZSBjb21wbGV4IGhhcmR3YXJlIGludGVyYWN0aW9ucyBuZWVkZWQgdG8gZ2V0IHBhc3QgdGhlIGluaXRpYWwgcHJvYmUgc3RlcHMgdW5sZXNzIHRoZSBkcml2ZXIgaXMgc2ltcGxlIG9yIHNwZWNpZmljYWxseSBzdXBwb3J0ZWQuIFdhaXQsIGJ1dCB0aGF04oCZcyBub3QgZW50aXJlbHkgY29ycmVjdCwgYmVjYXVzZSBzeXprYWxsZXIgKmRvZXMqIGhhdmUgYSBQQ0kgZnV6emVyIHRoYXQgY2FuIGluamVjdCBhcmJpdHJhcnkgUENJIGRldmljZXMgYW5kIGZ1enogdGhlaXIgcHJvYmUgZnVuY3Rpb25zIQoKU28sIHRoZSBpZGVhIGlzIHRoaXM6IGlmIHN5emthbGxlciBjYW4gaW5qZWN0IGEgUENJIGRldmljZSB3aXRoIHRoZSBhdGgxMWsgUENJIElELCBgYXRoMTFrX3BjaV9wcm9iZWAgc2hvdWxkIGJlIGNhbGxlZC4gVGhlbiB0aGUgZ29hbCBpcyB0byBtYWtlIHN1cmUgdGhhdCB0aGUgZnVuY3Rpb25zIGluc2lkZSBvZiBgYXRoMTFrX3BjaV9wcm9iZWAgZG8gbm90IHByZXZlbnQgdGhlIGNhbGxpbmcgb2YgYGF0aDExa19jb3JlX2luaXRgLCBJJiMzOTtsbCBjaGVjayBpZiBgYXRoMTFrX3BjaV9wcm9iZWAgY29udGFpbnMgYW55dGhpbmcgdGhhdCB3b3VsZCBhY3QgYXMgYSBibG9ja2VyLiBUaGlzIGxvb2tzIGxpa2UgdGhlIG1vc3QgcHJvbWlzaW5nIHBhdGggZm9yd2FyZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTggMDg6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXRoMTFrX3BjaV9wcm9iZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3BjaS5jPTkzNj1zdGF0aWMgaW50IGF0aDExa19wY2lfc2V0X2lycV9hZmZpbml0eV9oaW50KHN0cnVjdCBhdGgxMWtfcGNpICphYl9wY2ksXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9wY2kuYy05NDQtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3BjaS5jOjk0NTpzdGF0aWMgaW50IGF0aDExa19wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3BjaS5jLTk0Ni1cdFx0XHQgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBjaV9kZXYpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9wY2kuYz0xMjkyPXN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBhdGgxMWtfcGNpX2RyaXZlciA9IHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3BjaS5jLTEyOTQtXHQuaWRfdGFibGUgPSBhdGgxMWtfcGNpX2lkX3RhYmxlLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9wY2kuYzoxMjk1Olx0LnByb2JlID0gYXRoMTFrX3BjaV9wcm9iZSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvcGNpLmMtMTI5Ni1cdC5yZW1vdmUgPSBhdGgxMWtfcGNpX3JlbW92ZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTggMDg6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjM3MQoJCQkJCQkJb3V0cHV0OiA0NgoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipEaXZpbmcgaW50byB0aGUgYXRoMTFrIEluaXRpYWxpemF0aW9uIFNlcXVlbmNlKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IGFuZCB1bmRlcnN0YW5kIHRoaXMgYGF0aDExa2AgbW9kdWxlIGJldHRlci4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCYjMzk7cyBnb2luZyBvbiBkdXJpbmcgaXRzIFBDSSBwcm9iZS4gVGhlIHN0YXJ0aW5nIHBvaW50IGlzLCBuYXR1cmFsbHksIGBhdGgxMWtfcGNpX3Byb2JlYC4gTXkgcHJpbWFyeSBxdWVzdGlvbiBpcyB3aGV0aGVyIGl0IGRpcmVjdGx5IGluaXRpYXRlcyBgYXRoMTFrX2NvcmVfaW5pdGAsIG9yIGRvZXMgaXQgYnJhbmNoIHRocm91Z2ggYW5vdGhlciBmdW5jdGlvbj8gSSYjMzk7bSBmYW1pbGlhciB3aXRoIHRoaXMgYXJjaGl0ZWN0dXJlLCBzbyBJJiMzOTttIGV4cGVjdGluZyB0aGlzIHByb2JlIGZ1bmN0aW9uIHRvIGJlIHJlc3BvbnNpYmxlIGZvciBzZXR0aW5nIHVwIHRoZSBpbml0aWFsIGhhcmR3YXJlIGludGVyYWN0aW9ucyBhbmQgdGhlbiBsaWtlbHkgY2FsbGluZyBzb21lIHNvcnQgb2YgY29yZSBpbml0aWFsaXphdGlvbiByb3V0aW5lLiBJ4oCZbGwgbG9vayBmb3IgdGhlIGNhbGwgYW5kIGhvdyBpdCBwYXNzZXMgYXJndW1lbnRzLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byBlc3RhYmxpc2ggdGhlIGNvbnRyb2wgZmxvdyBoZXJlOiBkb2VzIHRoZSBwcm9iZSBmdW5jdGlvbiBhY3QgYXMgYSBkaXJlY3QgZW50cnkgcG9pbnQgZm9yIGNvcmUgaW5pdGlhbGl6YXRpb24/IFRoaXMgd2lsbCBkaWN0YXRlIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGRlcGVuZGVuY3kgc2V0dXAgYmV0d2VlbiB0aGUgUENJIGxheWVyIGFuZCB0aGUgY29yZSBkcml2ZXIuIEkga25vdyB0aGUga2V5IGZ1bmN0aW9ucywgc28gbGV0JiMzOTtzIHNlZSBob3cgdGhleSByZWxhdGUgaW4gdGhpcyBzcGVjaWZpYyBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOCAwODoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvcGNpLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5NDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA5NDU6XHRzdGF0aWMgaW50IGF0aDExa19wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4gOTQ2Olx0XHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpwY2lfZGV2KVxuIDk0NzpcdHtcbiA5NDg6XHRcdHN0cnVjdCBhdGgxMWtfYmFzZSAqYWI7XG4gOTQ5Olx0XHRzdHJ1Y3QgYXRoMTFrX3BjaSAqYWJfcGNpO1xuIDk1MDpcdFx0dTMyIHNvY19od192ZXJzaW9uX21ham9yLCBzb2NfaHdfdmVyc2lvbl9taW5vcjtcbiA5NTE6XHRcdGludCByZXQ7XG4gOTUyOlx0XHR1MzIgc3ViX3ZlcnNpb247XG4gOTUzOlx0XG4gOTU0Olx0XHRhYiA9IGF0aDExa19jb3JlX2FsbG9jKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBzaXplb2YoKmFiX3BjaSksIEFUSDExS19CVVNfUENJKTtcbiA5NTU6XHRcbiA5NTY6XHRcdGlmICghYWIpIHtcbiA5NTc6XHRcdFx0ZGV2X2VycihcdTAwMjZwZGV2LVx1MDAzZWRldiwgXCYjMzQ7ZmFpbGVkIHRvIGFsbG9jYXRlIGF0aDExayBiYXNlXFxuXCYjMzQ7KTtcbiA5NTg6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gOTU5Olx0XHR9XG4gOTYwOlx0XG4gOTYxOlx0XHRhYi1cdTAwM2VkZXYgPSBcdTAwMjZwZGV2LVx1MDAzZWRldjtcbiA5NjI6XHRcdHBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBhYik7XG4gOTYzOlx0XHRhYl9wY2kgPSBhdGgxMWtfcGNpX3ByaXYoYWIpO1xuIDk2NDpcdFx0YWJfcGNpLVx1MDAzZWRldl9pZCA9IHBjaV9kZXYtXHUwMDNlZGV2aWNlO1xuIDk2NTpcdFx0YWJfcGNpLVx1MDAzZWFiID0gYWI7XG4gOTY2Olx0XHRhYl9wY2ktXHUwMDNlcGRldiA9IHBkZXY7XG4gOTY3Olx0XHRhYi1cdTAwM2VoaWYub3BzID0gXHUwMDI2YXRoMTFrX3BjaV9oaWZfb3BzO1xuIDk2ODpcdFx0YWItXHUwMDNlZndfbW9kZSA9IEFUSDExS19GSVJNV0FSRV9NT0RFX05PUk1BTDtcbiA5Njk6XHRcdHBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBhYik7XG4gOTcwOlx0XHRzcGluX2xvY2tfaW5pdChcdTAwMjZhYl9wY2ktXHUwMDNld2luZG93X2xvY2spO1xuIDk3MTpcdFxuIDk3MjpcdFx0LyogU2V0IGZpeGVkX21lbV9yZWdpb24gdG8gdHJ1ZSBmb3IgcGxhdGZvcm1zIHN1cHBvcnQgcmVzZXJ2ZWQgbWVtb3J5XG4gOTczOlx0XHQgKiBmcm9tIERULiBJZiBtZW1vcnkgaXMgcmVzZXJ2ZWQgZnJvbSBEVCBmb3IgRlcsIGF0aDExayBkcml2ZXIgbmVlZCBub3RcbiA5NzQ6XHRcdCAqIGFsbG9jYXRlIG1lbW9yeS5cbiA5NzU6XHRcdCAqL1xuIDk3NjpcdFx0aWYgKG9mX3Byb3BlcnR5X3ByZXNlbnQoYWItXHUwMDNlZGV2LVx1MDAzZW9mX25vZGUsIFwmIzM0O21lbW9yeS1yZWdpb25cJiMzNDspKVxuIDk3NzpcdFx0XHRzZXRfYml0KEFUSDExS19GTEFHX0ZJWEVEX01FTV9SR04sIFx1MDAyNmFiLVx1MDAzZWRldl9mbGFncyk7XG4gOTc4Olx0XG4gOTc5Olx0XHRyZXQgPSBhdGgxMWtfcGNpX2NsYWltKGFiX3BjaSwgcGRldik7XG4gOTgwOlx0XHRpZiAocmV0KSB7XG4gOTgxOlx0XHRcdGF0aDExa19lcnIoYWIsIFwmIzM0O2ZhaWxlZCB0byBjbGFpbSBkZXZpY2U6ICVkXFxuXCYjMzQ7LCByZXQpO1xuIDk4MjpcdFx0XHRnb3RvIGVycl9mcmVlX2NvcmU7XG4gOTgzOlx0XHR9XG4gOTg0Olx0XG4gOTg1Olx0XHRhdGgxMWtfZGJnKGFiLCBBVEgxMUtfREJHX0JPT1QsIFwmIzM0O3BjaSBwcm9iZSAlMDR4OiUwNHggJTA0eDolMDR4XFxuXCYjMzQ7LFxuIDk4NjpcdFx0XHQgICBwZGV2LVx1MDAzZXZlbmRvciwgcGRldi1cdTAwM2VkZXZpY2UsXG4gOTg3Olx0XHRcdCAgIHBkZXYtXHUwMDNlc3Vic3lzdGVtX3ZlbmRvciwgcGRldi1cdTAwM2VzdWJzeXN0ZW1fZGV2aWNlKTtcbiA5ODg6XHRcbiA5ODk6XHRcdGFiLVx1MDAzZWlkLnZlbmRvciA9IHBkZXYtXHUwMDNldmVuZG9yO1xuIDk5MDpcdFx0YWItXHUwMDNlaWQuZGV2aWNlID0gcGRldi1cdTAwM2VkZXZpY2U7XG4gOTkxOlx0XHRhYi1cdTAwM2VpZC5zdWJzeXN0ZW1fdmVuZG9yID0gcGRldi1cdTAwM2VzdWJzeXN0ZW1fdmVuZG9yO1xuIDk5MjpcdFx0YWItXHUwMDNlaWQuc3Vic3lzdGVtX2RldmljZSA9IHBkZXYtXHUwMDNlc3Vic3lzdGVtX2RldmljZTtcbiA5OTM6XHRcbiA5OTQ6XHRcdHN3aXRjaCAocGNpX2Rldi1cdTAwM2VkZXZpY2UpIHtcbiA5OTU6XHRcdGNhc2UgUUNBNjM5MF9ERVZJQ0VfSUQ6XG4gOTk2Olx0XHRcdHJldCA9IGF0aDExa19wY2ljX3JlZ2lzdGVyX3BjaV9vcHMoYWIsIFx1MDAyNmF0aDExa19wY2lfb3BzX3FjYTYzOTApO1xuIDk5NzpcdFx0XHRpZiAocmV0KSB7XG4gOTk4Olx0XHRcdFx0YXRoMTFrX2VycihhYiwgXCYjMzQ7ZmFpbGVkIHRvIHJlZ2lzdGVyIFBDSSBvcHM6ICVkXFxuXCYjMzQ7LCByZXQpO1xuIDk5OTpcdFx0XHRcdGdvdG8gZXJyX3BjaV9mcmVlX3JlZ2lvbjtcbjEwMDA6XHRcdFx0fVxuMTAwMTpcdFxuMTAwMjpcdFx0XHRhdGgxMWtfcGNpX3JlYWRfaHdfdmVyc2lvbihhYiwgXHUwMDI2c29jX2h3X3ZlcnNpb25fbWFqb3IsXG4xMDAzOlx0XHRcdFx0XHRcdCAgIFx1MDAyNnNvY19od192ZXJzaW9uX21pbm9yKTtcbjEwMDQ6XHRcdFx0c3dpdGNoIChzb2NfaHdfdmVyc2lvbl9tYWpvcikge1xuMTAwNTpcdFx0XHRjYXNlIDI6XG4xMDA2Olx0XHRcdFx0YWItXHUwMDNlaHdfcmV2ID0gQVRIMTFLX0hXX1FDQTYzOTBfSFcyMDtcbjEwMDc6XHRcdFx0XHRicmVhaztcbjEwMDg6XHRcdFx0ZGVmYXVsdDpcbjEwMDk6XHRcdFx0XHRkZXZfZXJyKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBcJiMzNDtVbnN1cHBvcnRlZCBRQ0E2MzkwIFNPQyBoYXJkd2FyZSB2ZXJzaW9uOiAlZCAlZFxcblwmIzM0OyxcbjEwMTA6XHRcdFx0XHRcdHNvY19od192ZXJzaW9uX21ham9yLCBzb2NfaHdfdmVyc2lvbl9taW5vcik7XG4xMDExOlx0XHRcdFx0cmV0ID0gLUVPUE5PVFNVUFA7XG4xMDEyOlx0XHRcdFx0Z290byBlcnJfcGNpX2ZyZWVfcmVnaW9uO1xuMTAxMzpcdFx0XHR9XG4xMDE0Olx0XG4xMDE1Olx0XHRcdGJyZWFrO1xuMTAxNjpcdFx0Y2FzZSBRQ045MDc0X0RFVklDRV9JRDpcbjEwMTc6XHRcdFx0cmV0ID0gYXRoMTFrX3BjaWNfcmVnaXN0ZXJfcGNpX29wcyhhYiwgXHUwMDI2YXRoMTFrX3BjaV9vcHNfcWNuOTA3NCk7XG4xMDE4Olx0XHRcdGlmIChyZXQpIHtcbjEwMTk6XHRcdFx0XHRhdGgxMWtfZXJyKGFiLCBcJiMzNDtmYWlsZWQgdG8gcmVnaXN0ZXIgUENJIG9wczogJWRcXG5cJiMzNDssIHJldCk7XG4xMDIwOlx0XHRcdFx0Z290byBlcnJfcGNpX2ZyZWVfcmVnaW9uO1xuMTAyMTpcdFx0XHR9XG4xMDIyOlx0XHRcdGFiLVx1MDAzZWh3X3JldiA9IEFUSDExS19IV19RQ045MDc0X0hXMTA7XG4xMDIzOlx0XHRcdGJyZWFrO1xuMTAyNDpcdFx0Y2FzZSBXQ042ODU1X0RFVklDRV9JRDpcbjEwMjU6XHRcdFx0cmV0ID0gYXRoMTFrX3BjaWNfcmVnaXN0ZXJfcGNpX29wcyhhYiwgXHUwMDI2YXRoMTFrX3BjaV9vcHNfcWNhNjM5MCk7XG4xMDI2Olx0XHRcdGlmIChyZXQpIHtcbjEwMjc6XHRcdFx0XHRhdGgxMWtfZXJyKGFiLCBcJiMzNDtmYWlsZWQgdG8gcmVnaXN0ZXIgUENJIG9wczogJWRcXG5cJiMzNDssIHJldCk7XG4xMDI4Olx0XHRcdFx0Z290byBlcnJfcGNpX2ZyZWVfcmVnaW9uO1xuMTAyOTpcdFx0XHR9XG4xMDMwOlx0XHRcdGFiLVx1MDAzZWlkLmJkZl9zZWFyY2ggPSBBVEgxMUtfQkRGX1NFQVJDSF9CVVNfQU5EX0JPQVJEO1xuMTAzMTpcdFx0XHRhdGgxMWtfcGNpX3JlYWRfaHdfdmVyc2lvbihhYiwgXHUwMDI2c29jX2h3X3ZlcnNpb25fbWFqb3IsXG4xMDMyOlx0XHRcdFx0XHRcdCAgIFx1MDAyNnNvY19od192ZXJzaW9uX21pbm9yKTtcbjEwMzM6XHRcdFx0c3dpdGNoIChzb2NfaHdfdmVyc2lvbl9tYWpvcikge1xuMTAzNDpcdFx0XHRjYXNlIDI6XG4xMDM1Olx0XHRcdFx0c3dpdGNoIChzb2NfaHdfdmVyc2lvbl9taW5vcikge1xuMTAzNjpcdFx0XHRcdGNhc2UgMHgwMDpcbjEwMzc6XHRcdFx0XHRjYXNlIDB4MDE6XG4xMDM4Olx0XHRcdFx0XHRhYi1cdTAwM2Vod19yZXYgPSBBVEgxMUtfSFdfV0NONjg1NV9IVzIwO1xuMTAzOTpcdFx0XHRcdFx0YnJlYWs7XG4xMDQwOlx0XHRcdFx0Y2FzZSAweDEwOlxuMTA0MTpcdFx0XHRcdGNhc2UgMHgxMTpcbjEwNDI6XHRcdFx0XHRcdHN1Yl92ZXJzaW9uID0gYXRoMTFrX3BjaWNfcmVhZDMyKGFiLCBUQ1NSX1NPQ19IV19TVUJfVkVSKTtcbjEwNDM6XHRcdFx0XHRcdGF0aDExa19kYmcoYWIsIEFUSDExS19EQkdfUENJLCBcJiMzNDtzdWJfdmVyc2lvbiAweCV4XFxuXCYjMzQ7LFxuMTA0NDpcdFx0XHRcdFx0XHQgICBzdWJfdmVyc2lvbik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE4IDA4OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg1OTkKCQkJCQkJCW91dHB1dDogNDcKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB3aGF0JiMzOTtzIGdvaW5nIHRocm91Z2ggbXkgbWluZCBhcyBJIGFwcHJvYWNoIHRoZSBjb2RlLCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb24sIGFuZCB0YWlsb3JlZCBmb3IgYSBmZWxsb3cgZXhwZXJ0OgoKKipEaXZpbmcgaW50byBgYXRoMTFrX3BjaV9wcm9iZWAqKgoKQWxyaWdodCwgdGltZSB0byBkaWcgaW50byB0aGUgZ3V0cyBvZiB0aGUgYGF0aDExa19wY2lfcHJvYmVgIGZ1bmN0aW9uLiBJIHNlZSBpdCYjMzk7cyB0aGUgUENJIHByb2JlIHJvdXRpbmUgZm9yIHRoZSBhdGgxMWsgZHJpdmVyIOKAkyB0aGF0JiMzOTtzIHRoZSBlbnRyeSBwb2ludCB3aGVuIGEgbmV3IGRldmljZSBpcyBmb3VuZCwgYW5kIGl0JiMzOTtzIHdoZXJlIHRoZSBtYWdpYyBzdGFydHMgdG8gaGFwcGVuLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIGlzIHdoZXJlIHdlJiMzOTtsbCBiZSBkb2luZyBhIGJ1bmNoIG9mIGNyaXRpY2FsIGluaXRpYWxpemF0aW9uOiBmaWd1cmluZyBvdXQgdGhlIGRldmljZSYjMzk7cyBjYXBhYmlsaXRpZXMsIHNldHRpbmcgdXAgdGhlIGhhcmR3YXJlLCBtYXliZSBldmVuIHJlcXVlc3Rpbmcgc29tZSByZXNvdXJjZXMuIEkmIzM5O2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZXJyb3IgaGFuZGxpbmcsIGFsd2F5cyBhIGNyaXRpY2FsIGZhY3RvciB3aGVuIGRlYWxpbmcgd2l0aCBsb3ctbGV2ZWwgaGFyZHdhcmUuIE5vIHN1cnByaXNlcyB0aGVyZS4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgcmVzb3VyY2UgYWxsb2NhdGlvbiBjYWxscyDigJMgbWVtb3J5IHJlZ2lvbnMsIGludGVycnVwdHMsIERNQSBjaGFubmVscywgdGhlIHVzdWFsIHN1c3BlY3RzLiBJJiMzOTtsbCB3YW50IHRvIHNlZSBob3cgaXQmIzM5O3MgaGFuZGxpbmcgdGhlIFBDSSBjb25maWd1cmF0aW9uIHNwYWNlLCB2ZXJpZnlpbmcgdmVuZG9yL2RldmljZSBJRHMsIGNoZWNraW5nIGZvciBCQVJzIGFuZCBvdGhlciBuZWNlc3NhcnkgaW5mb3JtYXRpb24sIGFuZCBzZXR0aW5nIHVwIGFueSByZXF1aXJlZCBQQ0kgRE1BIG1hc2suIEkmIzM5O2xsIGJlIGVzcGVjaWFsbHkga2VlbiBvbiBob3cgaXQmIzM5O3MgaW50ZXJmYWNpbmcgd2l0aCB0aGUgZmlybXdhcmUuIEhvdyBhcmUgd2UgbG9hZGluZyBpdD8gQXJlIHdlIHVzaW5nIGEgZGVkaWNhdGVkIGZpcm13YXJlIGxvYWRlciBvciBwZXJoYXBzIGEgc2hhcmVkIGxpYnJhcnk/IEkgZXhwZWN0IHdlJiMzOTtyZSBnb2luZyB0byBzZWUgcmVnaXN0ZXIgYWNjZXNzZXMsIG1heWJlIHNvbWUgd29yayB3aXRoIHRoZSBoYXJkd2FyZSYjMzk7cyBjbG9jayBjb250cm9sLiBJIHdhbnQgdG8gc2VlIGEgY2xlYXIgc2VwYXJhdGlvbiBvZiBjb25jZXJucywgSSBob3BlLiBJIGRvbiYjMzk7dCB3YW50IHRvIGZpbmQgc3BhZ2hldHRpIGNvZGU7IGEgd2VsbC1zdHJ1Y3R1cmVkIHByb2JlIGZ1bmN0aW9uIGlzIGEgcGxlYXN1cmUgdG8gZGVidWcuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgbG9va2luZyBmb3IgdGhlIG1ham9yIGNvbnRyb2wgZmxvdyBzZWN0aW9ucyBhbmQgdHJ5IHRvIHVuZGVyc3RhbmQgdGhlIGhpZ2gtbGV2ZWwgc3RlcHMgZmlyc3QuIExldCYjMzk7cyBzZWUgaG93IHRoZXkgZG8gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE4IDA4OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9wY2kuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwNDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwNDU6XHRcdFx0XHRcdHN3aXRjaCAoc3ViX3ZlcnNpb24pIHtcbjEwNDY6XHRcdFx0XHRcdGNhc2UgMHgxMDE5QTBFMTpcbjEwNDc6XHRcdFx0XHRcdGNhc2UgMHgxMDE5QjBFMTpcbjEwNDg6XHRcdFx0XHRcdGNhc2UgMHgxMDE5QzBFMTpcbjEwNDk6XHRcdFx0XHRcdGNhc2UgMHgxMDE5RDBFMTpcbjEwNTA6XHRcdFx0XHRcdFx0YWItXHUwMDNlaHdfcmV2ID0gQVRIMTFLX0hXX1FDQTIwNjZfSFcyMTtcbjEwNTE6XHRcdFx0XHRcdFx0YnJlYWs7XG4xMDUyOlx0XHRcdFx0XHRjYXNlIDB4MDAxZTYwZTE6XG4xMDUzOlx0XHRcdFx0XHRcdGFiLVx1MDAzZWh3X3JldiA9IEFUSDExS19IV19RQ0E2Njk4QVFfSFcyMTtcbjEwNTQ6XHRcdFx0XHRcdFx0YnJlYWs7XG4xMDU1Olx0XHRcdFx0XHRkZWZhdWx0OlxuMTA1NjpcdFx0XHRcdFx0XHRhYi1cdTAwM2Vod19yZXYgPSBBVEgxMUtfSFdfV0NONjg1NV9IVzIxO1xuMTA1NzpcdFx0XHRcdFx0fVxuMTA1ODpcdFx0XHRcdFx0YnJlYWs7XG4xMDU5Olx0XHRcdFx0ZGVmYXVsdDpcbjEwNjA6XHRcdFx0XHRcdGdvdG8gdW5zdXBwb3J0ZWRfd2NuNjg1NV9zb2M7XG4xMDYxOlx0XHRcdFx0fVxuMTA2MjpcdFx0XHRcdGJyZWFrO1xuMTA2MzpcdFx0XHRkZWZhdWx0OlxuMTA2NDpcdHVuc3VwcG9ydGVkX3djbjY4NTVfc29jOlxuMTA2NTpcdFx0XHRcdGRldl9lcnIoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwmIzM0O1Vuc3VwcG9ydGVkIFdDTjY4NTUgU09DIGhhcmR3YXJlIHZlcnNpb246ICVkICVkXFxuXCYjMzQ7LFxuMTA2NjpcdFx0XHRcdFx0c29jX2h3X3ZlcnNpb25fbWFqb3IsIHNvY19od192ZXJzaW9uX21pbm9yKTtcbjEwNjc6XHRcdFx0XHRyZXQgPSAtRU9QTk9UU1VQUDtcbjEwNjg6XHRcdFx0XHRnb3RvIGVycl9wY2lfZnJlZV9yZWdpb247XG4xMDY5Olx0XHRcdH1cbjEwNzA6XHRcbjEwNzE6XHRcdFx0YnJlYWs7XG4xMDcyOlx0XHRkZWZhdWx0OlxuMTA3MzpcdFx0XHRkZXZfZXJyKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBcJiMzNDtVbmtub3duIFBDSSBkZXZpY2UgZm91bmQ6IDB4JXhcXG5cJiMzNDssXG4xMDc0Olx0XHRcdFx0cGNpX2Rldi1cdTAwM2VkZXZpY2UpO1xuMTA3NTpcdFx0XHRyZXQgPSAtRU9QTk9UU1VQUDtcbjEwNzY6XHRcdFx0Z290byBlcnJfcGNpX2ZyZWVfcmVnaW9uO1xuMTA3NzpcdFx0fVxuMTA3ODpcdFxuMTA3OTpcdFx0cmV0ID0gYXRoMTFrX3BjaWNfaW5pdF9tc2lfY29uZmlnKGFiKTtcbjEwODA6XHRcdGlmIChyZXQpIHtcbjEwODE6XHRcdFx0YXRoMTFrX2VycihhYiwgXCYjMzQ7ZmFpbGVkIHRvIGluaXQgbXNpIGNvbmZpZzogJWRcXG5cJiMzNDssIHJldCk7XG4xMDgyOlx0XHRcdGdvdG8gZXJyX3BjaV9mcmVlX3JlZ2lvbjtcbjEwODM6XHRcdH1cbjEwODQ6XHRcbjEwODU6XHRcdHJldCA9IGF0aDExa19wY2lfYWxsb2NfbXNpKGFiX3BjaSk7XG4xMDg2Olx0XHRpZiAocmV0KSB7XG4xMDg3Olx0XHRcdGF0aDExa19lcnIoYWIsIFwmIzM0O2ZhaWxlZCB0byBlbmFibGUgbXNpOiAlZFxcblwmIzM0OywgcmV0KTtcbjEwODg6XHRcdFx0Z290byBlcnJfcGNpX2ZyZWVfcmVnaW9uO1xuMTA4OTpcdFx0fVxuMTA5MDpcdFxuMTA5MTpcdFx0cmV0ID0gYXRoMTFrX2NvcmVfcHJlX2luaXQoYWIpO1xuMTA5MjpcdFx0aWYgKHJldClcbjEwOTM6XHRcdFx0Z290byBlcnJfcGNpX2Rpc2FibGVfbXNpO1xuMTA5NDpcdFxuMTA5NTpcdFx0cmV0ID0gYXRoMTFrX3BjaV9zZXRfaXJxX2FmZmluaXR5X2hpbnQoYWJfcGNpLCBjcHVtYXNrX29mKDApKTtcbjEwOTY6XHRcdGlmIChyZXQpIHtcbjEwOTc6XHRcdFx0YXRoMTFrX2VycihhYiwgXCYjMzQ7ZmFpbGVkIHRvIHNldCBpcnEgYWZmaW5pdHkgJWRcXG5cJiMzNDssIHJldCk7XG4xMDk4Olx0XHRcdGdvdG8gZXJyX3BjaV9kaXNhYmxlX21zaTtcbjEwOTk6XHRcdH1cbjExMDA6XHRcbjExMDE6XHRcdHJldCA9IGF0aDExa19taGlfcmVnaXN0ZXIoYWJfcGNpKTtcbjExMDI6XHRcdGlmIChyZXQpIHtcbjExMDM6XHRcdFx0YXRoMTFrX2VycihhYiwgXCYjMzQ7ZmFpbGVkIHRvIHJlZ2lzdGVyIG1oaTogJWRcXG5cJiMzNDssIHJldCk7XG4xMTA0Olx0XHRcdGdvdG8gZXJyX2lycV9hZmZpbml0eV9jbGVhbnVwO1xuMTEwNTpcdFx0fVxuMTEwNjpcdFxuMTEwNzpcdFx0cmV0ID0gYXRoMTFrX2hhbF9zcm5nX2luaXQoYWIpO1xuMTEwODpcdFx0aWYgKHJldClcbjExMDk6XHRcdFx0Z290byBlcnJfbWhpX3VucmVnaXN0ZXI7XG4xMTEwOlx0XG4xMTExOlx0XHRyZXQgPSBhdGgxMWtfY2VfYWxsb2NfcGlwZXMoYWIpO1xuMTExMjpcdFx0aWYgKHJldCkge1xuMTExMzpcdFx0XHRhdGgxMWtfZXJyKGFiLCBcJiMzNDtmYWlsZWQgdG8gYWxsb2NhdGUgY2UgcGlwZXM6ICVkXFxuXCYjMzQ7LCByZXQpO1xuMTExNDpcdFx0XHRnb3RvIGVycl9oYWxfc3JuZ19kZWluaXQ7XG4xMTE1Olx0XHR9XG4xMTE2Olx0XG4xMTE3Olx0XHRhdGgxMWtfcGNpX2luaXRfcW1pX2NlX2NvbmZpZyhhYik7XG4xMTE4Olx0XG4xMTE5Olx0XHRyZXQgPSBhdGgxMWtfcGNpY19jb25maWdfaXJxKGFiKTtcbjExMjA6XHRcdGlmIChyZXQpIHtcbjExMjE6XHRcdFx0YXRoMTFrX2VycihhYiwgXCYjMzQ7ZmFpbGVkIHRvIGNvbmZpZyBpcnE6ICVkXFxuXCYjMzQ7LCByZXQpO1xuMTEyMjpcdFx0XHRnb3RvIGVycl9jZV9mcmVlO1xuMTEyMzpcdFx0fVxuMTEyNDpcdFxuMTEyNTpcdFx0Lyoga2VybmVsIG1heSBhbGxvY2F0ZSBhIGR1bW15IHZlY3RvciBiZWZvcmUgcmVxdWVzdF9pcnEgYW5kXG4xMTI2Olx0XHQgKiB0aGVuIGFsbG9jYXRlIGEgcmVhbCB2ZWN0b3Igd2hlbiByZXF1ZXN0X2lycSBpcyBjYWxsZWQuXG4xMTI3Olx0XHQgKiBTbyBnZXQgbXNpX2RhdGEgaGVyZSBhZ2FpbiB0byBhdm9pZCBzcHVyaW91cyBpbnRlcnJ1cHRcbjExMjg6XHRcdCAqIGFzIG1zaV9kYXRhIHdpbGwgY29uZmlndXJlZCB0byBzcm5ncy5cbjExMjk6XHRcdCAqL1xuMTEzMDpcdFx0cmV0ID0gYXRoMTFrX3BjaV9jb25maWdfbXNpX2RhdGEoYWJfcGNpKTtcbjExMzE6XHRcdGlmIChyZXQpIHtcbjExMzI6XHRcdFx0YXRoMTFrX2VycihhYiwgXCYjMzQ7ZmFpbGVkIHRvIGNvbmZpZyBtc2lfZGF0YTogJWRcXG5cJiMzNDssIHJldCk7XG4xMTMzOlx0XHRcdGdvdG8gZXJyX2ZyZWVfaXJxO1xuMTEzNDpcdFx0fVxuMTEzNTpcdFxuMTEzNjpcdFx0cmV0ID0gYXRoMTFrX2NvcmVfaW5pdChhYik7XG4xMTM3Olx0XHRpZiAocmV0KSB7XG4xMTM4Olx0XHRcdGF0aDExa19lcnIoYWIsIFwmIzM0O2ZhaWxlZCB0byBpbml0IGNvcmU6ICVkXFxuXCYjMzQ7LCByZXQpO1xuMTEzOTpcdFx0XHRnb3RvIGVycl9mcmVlX2lycTtcbjExNDA6XHRcdH1cbjExNDE6XHRcdGF0aDExa19xbWlfZndyZXNldF9mcm9tX2NvbGRfYm9vdChhYik7XG4xMTQyOlx0XHRyZXR1cm4gMDtcbjExNDM6XHRcbjExNDQ6XHRlcnJfZnJlZV9pcnE6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE4IDA4OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNjc2CgkJCQkJCQlvdXRwdXQ6IDQ3CgkJCQkJCQl0aG91Z2h0czogMjgwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBgYXRoMTFrYCBEcml2ZXIgVnVsbmVyYWJpbGl0eSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgYXRoMTFrX3BjaV9wcm9iZWAgZnVuY3Rpb24gYW5kIGl0JiMzOTtzIGNsZWFyIHRoaXMgaXMgd2hlcmUgYSBsb3Qgb2YgdGhlIGluaXRpYWwgaGFyZHdhcmUgaW50ZXJhY3Rpb24gaGFwcGVucy4gSXQmIzM5O3MgZG9pbmcgYSBidW5jaCBvZiByZWFkcywgbGlrZSBgYXRoMTFrX3BjaV9yZWFkX2h3X3ZlcnNpb25gLCBgYXRoMTFrX3BjaWNfcmVhZDMyYCwgYW5kIHJlZ2lzdGVyaW5nIHdpdGggdGhlIE1ISSBidXMgdmlhIGBhdGgxMWtfbWhpX3JlZ2lzdGVyYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBpZiBzeXprYWxsZXIgaXMgdGhyb3dpbmcgUENJIGRldmljZXMgYXQgdGhpcywgaXQmIzM5O3MgcHJvYmFibHkgbWFwcGluZyBtZW1vcnkgcmVnaW9ucy4gQW5kIGBhdGgxMWtfcGNpY19yZWFkMzJgIHdpbGwgYmUgaGFwcGlseSByZWFkaW5nIHdoYXRldmVyIGdhcmJhZ2Ugc3l6a2FsbGVyIHByb3ZpZGVzLiBUaGUgaXNzdWUgaXMgdGhhdCB0aGUgTUhJIGJ1cyByZWdpc3RyYXRpb24gbG9va3MgbGlrZSBpdCBjb3VsZCBiZSBhIGJsb2NrZXIuCgpCdXQgbGV0JiMzOTtzIHNlZSwgY2FuIEkgZXZlbiBnZXQgdG8gdGhlIGNvcmUgaW5pdGlhbGl6YXRpb24/IEkgbmVlZCB0byB0cmFjZSB0aGUgZXhlY3V0aW9uLiBIbW0sIGBhdGgxMWtfY29yZV9pbml0YCBpcyBjYWxsZWQsIGFuZCB0aGF0IGxlYWRzIHRvIGBhdGgxMWtfY29yZV9zb2NfY3JlYXRlYCwgd2hpY2ggdGhlbiBjYWxscyBgYXRoMTFrX3FtaV9pbml0X3NlcnZpY2VgLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBwYXRjaCBpcyB0YXJnZXRlZCEgQmluZ28hIFRoZSBwYXRoIHRvIGV4cGxvaXQgaXMgbGlrZWx5IHRocm91Z2ggcmVhY2hpbmcgYGF0aDExa19xbWlfaW5pdF9zZXJ2aWNlYC4KCk5vdywgaXMgdGhlcmUgYW5vdGhlciByb3V0ZT8gQ2FuIEkgcmVhY2ggYGF0aDExa19xbWlfaW5pdF9zZXJ2aWNlYCB0aHJvdWdoIGBhdGgxMWtfYWhiX3Byb2JlYCBpbnN0ZWFkIG9mIHRoZSBQQ0kgb25lPyBUaGF0JiMzOTtzIHdoYXQgSSBuZWVkIHRvIGludmVzdGlnYXRlIG5leHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE4IDA4OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExMDcsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzExMDc6XHRzdGF0aWMgaW50IGF0aDExa19haGJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbjExMDg6XHR7XG4xMTA5Olx0XHRzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiO1xuMTExMDpcdFx0Y29uc3Qgc3RydWN0IGF0aDExa19oaWZfb3BzICpoaWZfb3BzO1xuMTExMTpcdFx0Y29uc3Qgc3RydWN0IGF0aDExa19wY2lfb3BzICpwY2lfb3BzO1xuMTExMjpcdFx0ZW51bSBhdGgxMWtfaHdfcmV2IGh3X3JldjtcbjExMTM6XHRcdGludCByZXQ7XG4xMTE0Olx0XG4xMTE1Olx0XHRod19yZXYgPSAodWludHB0cl90KWRldmljZV9nZXRfbWF0Y2hfZGF0YShcdTAwMjZwZGV2LVx1MDAzZWRldik7XG4xMTE2Olx0XG4xMTE3Olx0XHRzd2l0Y2ggKGh3X3Jldikge1xuMTExODpcdFx0Y2FzZSBBVEgxMUtfSFdfSVBRODA3NDpcbjExMTk6XHRcdGNhc2UgQVRIMTFLX0hXX0lQUTYwMThfSFcxMDpcbjExMjA6XHRcdGNhc2UgQVRIMTFLX0hXX0lQUTUwMThfSFcxMDpcbjExMjE6XHRcdFx0aGlmX29wcyA9IFx1MDAyNmF0aDExa19haGJfaGlmX29wc19pcHE4MDc0O1xuMTEyMjpcdFx0XHRwY2lfb3BzID0gTlVMTDtcbjExMjM6XHRcdFx0YnJlYWs7XG4xMTI0Olx0XHRjYXNlIEFUSDExS19IV19XQ042NzUwX0hXMTA6XG4xMTI1Olx0XHRcdGhpZl9vcHMgPSBcdTAwMjZhdGgxMWtfYWhiX2hpZl9vcHNfd2NuNjc1MDtcbjExMjY6XHRcdFx0cGNpX29wcyA9IFx1MDAyNmF0aDExa19haGJfcGNpX29wc193Y242NzUwO1xuMTEyNzpcdFx0XHRicmVhaztcbjExMjg6XHRcdGRlZmF1bHQ6XG4xMTI5Olx0XHRcdGRldl9lcnIoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwmIzM0O3Vuc3VwcG9ydGVkIGRldmljZSB0eXBlICVkXFxuXCYjMzQ7LCBod19yZXYpO1xuMTEzMDpcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4xMTMxOlx0XHR9XG4xMTMyOlx0XG4xMTMzOlx0XHRyZXQgPSBkbWFfc2V0X21hc2tfYW5kX2NvaGVyZW50KFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBETUFfQklUX01BU0soMzIpKTtcbjExMzQ6XHRcdGlmIChyZXQpIHtcbjExMzU6XHRcdFx0ZGV2X2VycihcdTAwMjZwZGV2LVx1MDAzZWRldiwgXCYjMzQ7ZmFpbGVkIHRvIHNldCAzMi1iaXQgY29uc2lzdGVudCBkbWFcXG5cJiMzNDspO1xuMTEzNjpcdFx0XHRyZXR1cm4gcmV0O1xuMTEzNzpcdFx0fVxuMTEzODpcdFxuMTEzOTpcdFx0YWIgPSBhdGgxMWtfY29yZV9hbGxvYyhcdTAwMjZwZGV2LVx1MDAzZWRldiwgc2l6ZW9mKHN0cnVjdCBhdGgxMWtfYWhiKSxcbjExNDA6XHRcdFx0XHQgICAgICAgQVRIMTFLX0JVU19BSEIpO1xuMTE0MTpcdFx0aWYgKCFhYikge1xuMTE0MjpcdFx0XHRkZXZfZXJyKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBcJiMzNDtmYWlsZWQgdG8gYWxsb2NhdGUgYXRoMTFrIGJhc2VcXG5cJiMzNDspO1xuMTE0MzpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjExNDQ6XHRcdH1cbjExNDU6XHRcbjExNDY6XHRcdGFiLVx1MDAzZWhpZi5vcHMgPSBoaWZfb3BzO1xuMTE0NzpcdFx0YWItXHUwMDNlcGRldiA9IHBkZXY7XG4xMTQ4Olx0XHRhYi1cdTAwM2Vod19yZXYgPSBod19yZXY7XG4xMTQ5Olx0XHRhYi1cdTAwM2Vmd19tb2RlID0gQVRIMTFLX0ZJUk1XQVJFX01PREVfTk9STUFMO1xuMTE1MDpcdFx0cGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgYWIpO1xuMTE1MTpcdFxuMTE1MjpcdFx0cmV0ID0gYXRoMTFrX3BjaWNfcmVnaXN0ZXJfcGNpX29wcyhhYiwgcGNpX29wcyk7XG4xMTUzOlx0XHRpZiAocmV0KSB7XG4xMTU0Olx0XHRcdGF0aDExa19lcnIoYWIsIFwmIzM0O2ZhaWxlZCB0byByZWdpc3RlciBQQ0kgb3BzOiAlZFxcblwmIzM0OywgcmV0KTtcbjExNTU6XHRcdFx0Z290byBlcnJfY29yZV9mcmVlO1xuMTE1NjpcdFx0fVxuMTE1NzpcdFxuMTE1ODpcdFx0cmV0ID0gYXRoMTFrX2NvcmVfcHJlX2luaXQoYWIpO1xuMTE1OTpcdFx0aWYgKHJldClcbjExNjA6XHRcdFx0Z290byBlcnJfY29yZV9mcmVlO1xuMTE2MTpcdFxuMTE2MjpcdFx0cmV0ID0gYXRoMTFrX2FoYl9zZXR1cF9yZXNvdXJjZXMoYWIpO1xuMTE2MzpcdFx0aWYgKHJldClcbjExNjQ6XHRcdFx0Z290byBlcnJfY29yZV9mcmVlO1xuMTE2NTpcdFxuMTE2NjpcdFx0cmV0ID0gYXRoMTFrX2FoYl9jZV9yZW1hcChhYik7XG4xMTY3Olx0XHRpZiAocmV0KVxuMTE2ODpcdFx0XHRnb3RvIGVycl9jb3JlX2ZyZWU7XG4xMTY5Olx0XG4xMTcwOlx0XHRyZXQgPSBhdGgxMWtfYWhiX2Z3X3Jlc291cmNlc19pbml0KGFiKTtcbjExNzE6XHRcdGlmIChyZXQpXG4xMTcyOlx0XHRcdGdvdG8gZXJyX2NlX3VubWFwO1xuMTE3MzpcdFxuMTE3NDpcdFx0cmV0ID0gYXRoMTFrX2FoYl9zZXR1cF9zbXAycF9oYW5kbGUoYWIpO1xuMTE3NTpcdFx0aWYgKHJldClcbjExNzY6XHRcdFx0Z290byBlcnJfZndfZGVpbml0O1xuMTE3NzpcdFxuMTE3ODpcdFx0cmV0ID0gYXRoMTFrX2hhbF9zcm5nX2luaXQoYWIpO1xuMTE3OTpcdFx0aWYgKHJldClcbjExODA6XHRcdFx0Z290byBlcnJfcmVsZWFzZV9zbXAycF9oYW5kbGU7XG4xMTgxOlx0XG4xMTgyOlx0XHRyZXQgPSBhdGgxMWtfY2VfYWxsb2NfcGlwZXMoYWIpO1xuMTE4MzpcdFx0aWYgKHJldCkge1xuMTE4NDpcdFx0XHRhdGgxMWtfZXJyKGFiLCBcJiMzNDtmYWlsZWQgdG8gYWxsb2NhdGUgY2UgcGlwZXM6ICVkXFxuXCYjMzQ7LCByZXQpO1xuMTE4NTpcdFx0XHRnb3RvIGVycl9oYWxfc3JuZ19kZWluaXQ7XG4xMTg2Olx0XHR9XG4xMTg3Olx0XG4xMTg4Olx0XHRhdGgxMWtfYWhiX2luaXRfcW1pX2NlX2NvbmZpZyhhYik7XG4xMTg5Olx0XG4xMTkwOlx0XHRyZXQgPSBhdGgxMWtfY29yZV9nZXRfcnByb2MoYWIpO1xuMTE5MTpcdFx0aWYgKHJldClcbjExOTI6XHRcdFx0Z290byBlcnJfY2VfZnJlZTtcbjExOTM6XHRcbjExOTQ6XHRcdHJldCA9IGF0aDExa19jb3JlX2luaXQoYWIpO1xuMTE5NTpcdFx0aWYgKHJldCkge1xuMTE5NjpcdFx0XHRhdGgxMWtfZXJyKGFiLCBcJiMzNDtmYWlsZWQgdG8gaW5pdCBjb3JlOiAlZFxcblwmIzM0OywgcmV0KTtcbjExOTc6XHRcdFx0Z290byBlcnJfY2VfZnJlZTtcbjExOTg6XHRcdH1cbjExOTk6XHRcbjEyMDA6XHRcdHJldCA9IGF0aDExa19haGJfY29uZmlnX2lycShhYik7XG4xMjAxOlx0XHRpZiAocmV0KSB7XG4xMjAyOlx0XHRcdGF0aDExa19lcnIoYWIsIFwmIzM0O2ZhaWxlZCB0byBjb25maWd1cmUgaXJxOiAlZFxcblwmIzM0OywgcmV0KTtcbjEyMDM6XHRcdFx0Z290byBlcnJfY2VfZnJlZTtcbjEyMDQ6XHRcdH1cbjEyMDU6XHRcbjEyMDY6XHRcdGF0aDExa19xbWlfZndyZXNldF9mcm9tX2NvbGRfYm9vdChhYik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE4IDA4OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMDAzCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMTIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkluaXRpYWwgQXNzZXNzbWVudCAmYW1wOyBQb3RlbnRpYWwgQXZlbnVlcyoqCgpPa2F5LCBzbyBgYXRoMTFrX2FoYl9wcm9iZWAgaXMgYSBwbGF0Zm9ybSBkcml2ZXIgcHJvYmUuIEZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLCB0aGF0JiMzOTtzIG5vdCB0aGUgZWFzaWVzdCB0aGluZyB0byB0cmlnZ2VyIGRpcmVjdGx5IHdpdGggU3l6a2FsbGVyLiBJdCBnZW5lcmFsbHkgcmVxdWlyZXMgYSBrbm93biBkZXZpY2UgdG8gYmUgcHJlc2VudCwgYW5kIHRoZW4gdGhlIGZ1enplciBjYW4gYXR0ZW1wdCB0byBpbnRlcmFjdCB3aXRoIGl0LiBTeXprYWxsZXIgdXN1YWxseSByZWxpZXMgb24gZGV2aWNlcyBjcmVhdGVkIHRocm91Z2ggYC9zeXMvZGV2aWNlcy9wbGF0Zm9ybS9gIG9yIGEgc2ltaWxhciBtZXRob2QsIGJ1dCB0aGF0JiMzOTtzIG5vdCBhbHdheXMgc3RyYWlnaHRmb3J3YXJkLiBVbmxlc3MgSSYjMzk7bSBvdmVybG9va2luZyBzb21ldGhpbmcgb2J2aW91cywgSSBuZWVkIGEgZ29vZCBwYXRoIHRvIGdldCB0aGUgZGV2aWNlIHByZXNlbnQuCgpXYWl0IGEgc2Vjb25k4oCmIGRpZG4mIzM5O3QgSSBzZWUgc29tZXRoaW5nIGFib3V0IFN5emthbGxlciBoYXZpbmcgYSBgc3l6X2RldmxpbmtfcGNpYCBvciBzb21ldGhpbmcgc2ltaWxhcj8gSWYgc28sIHRoYXQgY291bGQgYmUgdGhlIGtleSEgSXQgZ2l2ZXMgdGhlIGZ1enplciBhIHdheSB0byBpbmplY3QgUENJIGRldmljZXMsIHdoaWNoIG1pZ2h0IGJlIGEgYmV0dGVyIHRhcmdldCBmb3IgdGhpcyBkcml2ZXIuIEkgc2hvdWxkIGludmVzdGlnYXRlIHRoYXQgZnVydGhlci4KCkFscmlnaHQsIGJlZm9yZSBJIGNvbXBsZXRlbHkgY29tbWl0IHRvIHRoYXQgZGlyZWN0aW9uLCBsZXQgbWUgY29uc2lkZXIgaWYgdGhlcmUgaXMgYW5vdGhlciBvYnZpb3VzIHBhdGgsIGJlY2F1c2UgUENJIGNhbiBiZSBhIGhlYXZ5IGhhbW1lci4gSSB3b25kZXIgaWYgYGF0aDExa19xbWlfaW5pdF9zZXJ2aWNlYCBpcyByZWFjaGFibGUuLi4gSSBzaG91bGQgYWxzbyBsb29rIGF0IHRoZSBgYXRoMTJrX3FtaV9pbml0X3NlcnZpY2VgIGFzIHdlbGwsIGp1c3QgdG8gZW5zdXJlIHRoYXQgSSYjMzk7bSBjaGVja2luZyBhbGwgcG9zc2libGUgcGF0aHMgdG8gZ2V0IHRoaXMgZGV2aWNlIHJlYWR5IGZvciBhIGdvb2QgZnV6ei4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTggMDg6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXRoMTJrX3FtaV9pbml0X3NlcnZpY2UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmM9ODE1PXN0YXRpYyBpbnQgYXRoMTJrX2NvcmVfc29jX2NyZWF0ZShzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5jLTgyMy1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5jOjgyNDpcdHJldCA9IGF0aDEya19xbWlfaW5pdF9zZXJ2aWNlKGFiKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5jLTgyNS1cdGlmIChyZXQpIHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5jPTM5NjU9c3RhdGljIHZvaWQgYXRoMTJrX3FtaV9kcml2ZXJfZXZlbnRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuYy00MDM3LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuYzo0MDM4OmludCBhdGgxMmtfcW1pX2luaXRfc2VydmljZShzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuYy00MDM5LXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5oPTY0ND12b2lkIGF0aDEya19xbWlfZGVpbml0X3NlcnZpY2Uoc3RydWN0IGF0aDEya19iYXNlICphYik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5oOjY0NTppbnQgYXRoMTJrX3FtaV9pbml0X3NlcnZpY2Uoc3RydWN0IGF0aDEya19iYXNlICphYik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5oLTY0Ni12b2lkIGF0aDEya19xbWlfZnJlZV9yZXNvdXJjZShzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTggMDg6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM4NjgKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiA3MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqSW5pdGlhbCBJbnZlc3RpZ2F0aW9uIGludG8gYXRoMTJrIERyaXZlciBJbml0aWFsaXphdGlvbioqCgpTbywgYGF0aDEya19jb3JlX3NvY19jcmVhdGVgIGlzIHJlc3BvbnNpYmxlIGZvciBzZXR0aW5nIHVwIHRoZSBTT0MsIGFuZCBJIHNlZSBpdCYjMzk7cyBjYWxsaW5nIGBhdGgxMmtfcW1pX2luaXRfc2VydmljZWAuIFRoYXQmIzM5O3MgYSBrZXkgaW50ZXJhY3Rpb24gdG8gdW5kZXJzdGFuZCwgdGhlIFF1YWxpdHkgTWFuYWdlbWVudCBJbnRlcmZhY2UgaXMgY2xlYXJseSBhIGNyaXRpY2FsIGNvbXBvbmVudC4gQnV0IHdoYXQgYWN0dWFsbHkgKnRyaWdnZXJzKiBgYXRoMTJrX2NvcmVfc29jX2NyZWF0ZWA/IEkgbmVlZCB0byB0cmFjZSBiYWNrLiBBaCwgaGVyZSBpdCBpczogYGF0aDEya19jb3JlX3NvY19jcmVhdGVgIGlzIGNhbGxlZCBieSBgYXRoMTJrX2NvcmVfaW5pdGAuIFJpZ2h0LiBTbywgYGF0aDEya19jb3JlX2luaXRgIGlzIHRoZSBzdGFydGluZyBwb2ludCBmb3IgdGhpcyBzcGVjaWZpYyBjaGFpbiBvZiBpbml0aWFsaXphdGlvbi4gTm93LCBsZXQmIzM5O3Mgc2hpZnQgb3VyIGZvY3VzIGFuZCBpbnZlc3RpZ2F0ZSB0aGUgYGF0aDEya19jb3JlX2luaXRgIGZ1bmN0aW9uIGl0c2VsZi4gVW5kZXJzdGFuZGluZyB0aGF0IHdpbGwgZ2l2ZSBtZSB0aGUgcHJvcGVyIGNvbnRleHQgZm9yIHRoZSBzdWJzZXF1ZW50IGZ1bmN0aW9uIGNhbGxzIGFuZCB1bHRpbWF0ZWx5IHRoZSBRTUkgc2VydmljZSBpbml0aWFsaXphdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTggMDg6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXRoMTJrX2NvcmVfaW5pdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jPTEwMTk9c3RhdGljIGludCBhdGgxMmtfYWhiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy0xMTEwLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYzoxMTExOlx0cmV0ID0gYXRoMTJrX2NvcmVfaW5pdChhYik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jLTExMTItXHRpZiAocmV0KSB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmM9MjE4OD12b2lkIGF0aDEya19jb3JlX2h3X2dyb3VwX3NldF9tbG9fY2FwYWJsZShzdHJ1Y3QgYXRoMTJrX2h3X2dyb3VwICphZylcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuYy0yMjI4LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmM6MjIyOTppbnQgYXRoMTJrX2NvcmVfaW5pdChzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmMtMjIzMC17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmg9MTI2ND1pbnQgYXRoMTJrX2NvcmVfcHJlX2luaXQoc3RydWN0IGF0aDEya19iYXNlICphYik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuaDoxMjY1OmludCBhdGgxMmtfY29yZV9pbml0KHN0cnVjdCBhdGgxMmtfYmFzZSAqYXRoMTJrKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5oLTEyNjYtdm9pZCBhdGgxMmtfY29yZV9kZWluaXQoc3RydWN0IGF0aDEya19iYXNlICphdGgxMmspO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM9MTUyND1zdGF0aWMgaW50IGF0aDEya19wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xNjQ0LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYzoxNjQ1Olx0cmV0ID0gYXRoMTJrX2NvcmVfaW5pdChhYik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE2NDYtXHRpZiAocmV0KSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE4IDA4OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NzQ4CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMTkyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBvdGVudGlhbCBGdXp6aW5nIFRhcmdldCoqCgpPa2F5LCB0aGlzIGxvb2tzIGZhbWlsaWFyIOKAkyB0aGUgc2FtZSBwYXR0ZXJuIEkmIzM5O3ZlIHNlZW4gYmVmb3JlLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGlzIGNvZGUgcGF0aCBpcyBldmVuICpyZWFjaGFibGUqIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIEdvb2QsIHN5emthbGxlciBoYXMgYSB2aXJ0dWFsIFBDSSBmdXp6ZXIsIHdoaWNoIGlzIHBlcmZlY3QuIEl0IGNhbiBpbmplY3QgUENJIGRldmljZXMgd2l0aCB3aGF0ZXZlciB2ZW5kb3IgYW5kIGRldmljZSBJRHMgaXQgd2FudHMuIFRoZSBtb21lbnQgaXQgaW5qZWN0cyBzb21ldGhpbmcgd2l0aCBlaXRoZXIgYW4gYXRoMTFrIG9yIGF0aDEyayBQQ0kgSUQsIGJpbmdvIOKAkyB0aGUgcHJvYmUgZnVuY3Rpb24gZ2V0cyBjYWxsZWQuCgpBbmQgdGhpcyBwcm9iZSBmdW5jdGlvbiwgaXTigJlzIHJlYWRpbmcgZnJvbSBQQ0kgY29uZmlnIHNwYWNlIGFuZCBtZW1vcnktbWFwcGVkIElPLiBJIGltbWVkaWF0ZWx5IHNlZSB0aGUgdnVsbmVyYWJpbGl0eSBwb3RlbnRpYWwgaGVyZS4gQmVjYXVzZSBzeXprYWxsZXImIzM5O3MgdmlydHVhbCBkZXZpY2UgY2FuIHJldHVybiBhbnl0aGluZyB3ZSBmZWVkIGl0LCBpdOKAmXMgaGlnaGx5IGxpa2VseSB3ZSBjYW4gYnlwYXNzIHRoZSBoYXJkd2FyZSBjaGVja3MuIElmIHdlIG1hbmlwdWxhdGUgdGhlIHJlc3BvbnNlcywgd2UgbWlnaHQgYmUgYWJsZSB0byByZWFjaCBjcnVjaWFsIGZ1bmN0aW9ucyBsaWtlIGBhdGgxMWtfY29yZV9pbml0YCBhbmQgYGF0aDExa19xbWlfaW5pdF9zZXJ2aWNlYC4KCkhvbGQgb24uLi4gYGF0aDExa19wY2lfcHJvYmVgIGNhbGxzIGBhdGgxMWtfbWhpX3JlZ2lzdGVyYC4gTUhJLi4uIHRoYXQmIzM5O3MgdGhlIE1vZGVtIEhvc3QgSW50ZXJmYWNlLCBpc27igJl0IGl0PyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgYGF0aDExa19taGlfcmVnaXN0ZXJgIGRvZXMuIFRoYXQmIzM5O3MgdGhlIG5leHQgc3RlcDsgdGhpcyBjb3VsZCBiZSBhIGtleS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTggMDg6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXRoMTFrX21oaV9yZWdpc3RlciYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL21oaS5jPTMxND1zdGF0aWMgaW50IGF0aDExa19taGlfcmVhZF9hZGRyX2Zyb21fZHQoc3RydWN0IG1oaV9jb250cm9sbGVyICptaGlfY3RybClcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL21oaS5jLTMzNC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvbWhpLmM6MzM1OmludCBhdGgxMWtfbWhpX3JlZ2lzdGVyKHN0cnVjdCBhdGgxMWtfcGNpICphYl9wY2kpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL21oaS5jLTMzNi17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9taGkuaD0yMT12b2lkIGF0aDExa19taGlfc3RvcChzdHJ1Y3QgYXRoMTFrX3BjaSAqYXJfcGNpLCBib29sIGlzX3N1c3BlbmQpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9taGkuaDoyMjppbnQgYXRoMTFrX21oaV9yZWdpc3RlcihzdHJ1Y3QgYXRoMTFrX3BjaSAqYXJfcGNpKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvbWhpLmgtMjMtdm9pZCBhdGgxMWtfbWhpX3VucmVnaXN0ZXIoc3RydWN0IGF0aDExa19wY2kgKmFyX3BjaSk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9wY2kuYz05NDU9c3RhdGljIGludCBhdGgxMWtfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvcGNpLmMtMTEwMC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvcGNpLmM6MTEwMTpcdHJldCA9IGF0aDExa19taGlfcmVnaXN0ZXIoYWJfcGNpKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvcGNpLmMtMTEwMi1cdGlmIChyZXQpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTggMDg6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU2OTEKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRha2Ugb24gYGF0aDExa19taGlfcmVnaXN0ZXJgLCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydDoKCioqVW5kZXJzdGFuZGluZyB0aGUgYGF0aDExa19taGlfcmVnaXN0ZXJgIEZ1bmN0aW9uKioKCkFscmlnaHQsIHNvIHRoZSB0YXNrIGF0IGhhbmQgaXMgdG8gZ3JvayB0aGlzIGBhdGgxMWtfbWhpX3JlZ2lzdGVyYCBmdW5jdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBiYXNlZCBvbiB0aGUgbmFtZSwgdGhpcyBsaWtlbHkgaGFuZGxlcyB0aGUgcmVnaXN0cmF0aW9uIHByb2Nlc3Mgd2l0aGluIHRoZSBRdWFsY29tbSBBdGhlcm9zIChhdGgxMWspIGRyaXZlciwgc3BlY2lmaWNhbGx5IGZvciB0aGUgTUhJIChNSEkgc3RhbmRzIGZvcjogKipNKip1bHRpICoqSCoqb3N0ICoqSSoqbnRlcmZhY2UpIGludGVyZmFjZS4gVGhpcyBzdHJvbmdseSBzdWdnZXN0cyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZSBob3N0IENQVSBhbmQgdGhlIG5ldHdvcmsgY29udHJvbGxlciwgbWF5YmUgZm9yIHNldHVwLCBjb25maWd1cmF0aW9uLCBvciBwZXJoYXBzIHJlc291cmNlIG1hbmFnZW1lbnQuCgpNeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoaXMgd2lsbCBwcm9iYWJseSBiZSBhIGZhaXJseSBjcml0aWNhbCBmdW5jdGlvbi4gSXQmIzM5O3MgdGhlIGVudHJ5IHBvaW50LCBvciBhdCBsZWFzdCBhIGtleSBjb21wb25lbnQsIGZvciBtYWtpbmcgdGhlIGhhcmR3YXJlIGFjY2Vzc2libGUgdG8gdGhlIGRyaXZlci4gSSBleHBlY3QgaXQmIzM5O2xsIGludm9sdmUgc2V0dGluZyB1cCBpbnRlcnJ1cHQgaGFuZGxlcnMsIGNvbmZpZ3VyaW5nIG1lbW9yeSBtYXBwaW5nLCBlc3RhYmxpc2hpbmcgY29tbXVuaWNhdGlvbiBjaGFubmVscywgYW5kIHBvc3NpYmx5IGhhbmRsaW5nIHNvbWUgcG93ZXIgbWFuYWdlbWVudCBzdGVwcy4KCkkmIzM5O20gdGhpbmtpbmcsIGdpdmVuIHRoZSBjb250ZXh0IG9mIGF0aDExayAod2hpY2ggSSBrbm93IGlzIGEgbW9kZXJuIFdpLUZpIGRyaXZlciksIHRoaXMgKmNvdWxkKiBpbnZvbHZlIGZlYXR1cmVzIHRoYXQgYXJlIHJlbGV2YW50IHRvIGhhcmR3YXJlIGxpa2U6CgoqICAgKipCdXMtU3BlY2lmaWMgU2V0dXA6KiogSXQmIzM5O2xsIG5lZWQgdG8ga25vdyB3aGljaCBidXMgKFBDSWUsIFNESU8sIFVTQikgdGhlIE1ISSBpbnRlcmZhY2UgaXMgY29ubmVjdGVkIHRvLCBhbmQgY29uZmlndXJlIHRoZSBhc3NvY2lhdGVkIGJ1cy1zcGVjaWZpYyByZWdpc3RlcnMuCiogICAqKkRNQSBFbmdpbmVzOioqIEl0IHByb2JhYmx5IHNldHMgdXAgRE1BIGVuZ2luZXMgZm9yIGVmZmljaWVudCBkYXRhIHRyYW5zZmVyIGJldHdlZW4gdGhlIGhvc3QgYW5kIHRoZSBXaS1GaSBjaGlwLiBUaGlzIGlzIGVzc2VudGlhbCBmb3IgZ29vZCB0aHJvdWdocHV0IGFuZCBsb3cgbGF0ZW5jeS4KKiAgICoqRGV2aWNlIFRyZWUgSW50ZXJhY3Rpb25zOioqIEhvcGVmdWxseSwgaXQgaGFzIGEgcHJvcGVyIERldmljZSBUcmVlIGludGVyYWN0aW9uLgoqICAgKipFcnJvciBIYW5kbGluZzoqKiBJdCB3aWxsIG5lZWQgdG8gaGFuZGxlIHRoZSBjYXNlIG9mIGZhaWx1cmUgZHVyaW5nIHJlZ2lzdHJhdGlvbi4gSXQmIzM5O2xsIHByb2JhYmx5IGluY2x1ZGUgZXJyb3IgY2hlY2tzIGFmdGVyIGVhY2ggb3BlcmF0aW9uIHRvIGVuc3VyZSB0aGF0IHRoZSBkZXZpY2UgaGFzIGJlZW4gY29ycmVjdGx5IGluaXRpYWxpemVkLgoqICAgKipJbml0aWFsaXphdGlvbiBEYXRhOioqIEkmIzM5O20gZ3Vlc3NpbmcgaXQgbGlrZWx5IG5lZWRzIHRvIHBhc3Mgb3IgcmVjZWl2ZSBzb21lIGluaXRpYWxpemF0aW9uIGRhdGEgb3IgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIHNwZWNpZmljIHRvIHRoZSBNSEkgaW50ZXJmYWNlLCBsaWtlIGJ1ZmZlciBzaXplcywgY2xvY2sgc2V0dGluZ3MsIG9yIGludGVycnVwdCBudW1iZXJzLgoqICAgKipSZXNvdXJjZSBBbGxvY2F0aW9uOioqIENvdWxkIGJlIG1lbW9yeSBhbGxvY2F0aW9uIHVzaW5nIGEgZnVuY3Rpb24sIGxpa2VseSBhbiBpbnRlcm5hbCBtZW1vcnkgb3Igc3RydWN0dXJlIHRvIHN0b3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSByZWdpc3RlcmVkIGRldmljZS4KKiAgICoqUG93ZXIgTWFuYWdlbWVudDoqKiBCYXNlZCBvbiBwYXN0IGV4cGVyaWVuY2VzIHdpdGggd2lyZWxlc3MgZHJpdmVycywgdGhlcmUmIzM5O3MgbGlrZWx5IHNvbWUgcG93ZXIgbWFuYWdlbWVudCBsb2dpYyBpbnZvbHZlZCwgcGVyaGFwcyBlbmFibGluZyBvciBkaXNhYmxpbmcgY2xvY2sgZ2F0ZXMsIHBvd2VyIGRvbWFpbnMsIG9yIHNldHRpbmcgdXAgd2FrZS11cCBpbnRlcnJ1cHRzLgoqICAgKipJbnRlcnJ1cHQgSGFuZGxpbmc6KiogVGhlIHNldHRpbmcgdXAgb2YgdGhlIGludGVycnVwdCBoYW5kbGVycyB3aWxsIGxpa2VseSBiZSBhbm90aGVyIGltcG9ydGFudCByb2xlLiBJdCB3aWxsIHJlZ2lzdGVyIHRoZSBhcHByb3ByaWF0ZSBpbnRlcnJ1cHQgaGFuZGxlciByb3V0aW5lIHdpdGggdGhlIGtlcm5lbC4KCkkgbmVlZCB0byBkaWcgaW4gYW5kIHNlZSB0aGUgZGV0YWlscywgYnV0IG15IGluaXRpYWwgZ3V0IGZlZWxpbmcgaXMgdGhhdCB0aGlzIGZ1bmN0aW9uIGlzIGdvaW5nIHRvIGJlIHRoZSBjZW50cmFsIHBvaW50IGZvciB0aGUgaGFyZHdhcmUgYnJpbmctdXAgcHJvY2VzcyB3aXRoIHJlc3BlY3QgdG8gdGhlIE1ISSBpbnRlcmZhY2UuIEl0JiMzOTtzIHRoZSBseW5jaHBpbiBmb3IgZ2V0dGluZyB0aGUgYXRoMTFrIGRyaXZlciB3b3JraW5nIHdpdGggdGhlIFdpLUZpIGhhcmR3YXJlLiBJdCYjMzk7cyBwcm9iYWJseSBnb2luZyB0byBpbnZvbHZlIGEgbG90IG9mIGxvdy1sZXZlbCBoYXJkd2FyZSBpbnRlcmFjdGlvbiBhbmQgZXJyb3IgaGFuZGxpbmcuIExldCYjMzk7cyBzZWUgaWYgbXkgaW5pdGlhbCBhc3N1bXB0aW9ucyBob2xkIHdhdGVyIGFzIEkgcmVhZCB0aHJvdWdoIGl0IQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOCAwODoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvbWhpLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzMzU6XHRpbnQgYXRoMTFrX21oaV9yZWdpc3RlcihzdHJ1Y3QgYXRoMTFrX3BjaSAqYWJfcGNpKVxuIDMzNjpcdHtcbiAzMzc6XHRcdHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIgPSBhYl9wY2ktXHUwMDNlYWI7XG4gMzM4Olx0XHRzdHJ1Y3QgbWhpX2NvbnRyb2xsZXIgKm1oaV9jdHJsO1xuIDMzOTpcdFx0Y29uc3Qgc3RydWN0IG1oaV9jb250cm9sbGVyX2NvbmZpZyAqYXRoMTFrX21oaV9jb25maWc7XG4gMzQwOlx0XHRpbnQgcmV0O1xuIDM0MTpcdFxuIDM0MjpcdFx0bWhpX2N0cmwgPSBtaGlfYWxsb2NfY29udHJvbGxlcigpO1xuIDM0MzpcdFx0aWYgKCFtaGlfY3RybClcbiAzNDQ6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gMzQ1Olx0XG4gMzQ2Olx0XHRhYl9wY2ktXHUwMDNlbWhpX2N0cmwgPSBtaGlfY3RybDtcbiAzNDc6XHRcdG1oaV9jdHJsLVx1MDAzZWNudHJsX2RldiA9IGFiLVx1MDAzZWRldjtcbiAzNDg6XHRcdG1oaV9jdHJsLVx1MDAzZXJlZ3MgPSBhYi1cdTAwM2VtZW07XG4gMzQ5Olx0XHRtaGlfY3RybC1cdTAwM2VyZWdfbGVuID0gYWItXHUwMDNlbWVtX2xlbjtcbiAzNTA6XHRcbiAzNTE6XHRcdGlmIChhYi1cdTAwM2Vmdy5hbXNzX2RhdGEgXHUwMDI2XHUwMDI2IGFiLVx1MDAzZWZ3LmFtc3NfbGVuIFx1MDAzZSAwKSB7XG4gMzUyOlx0XHRcdC8qIHVzZSBNSEkgZmlybXdhcmUgZmlsZSBmcm9tIGZpcm13YXJlLU4uYmluICovXG4gMzUzOlx0XHRcdG1oaV9jdHJsLVx1MDAzZWZ3X2RhdGEgPSBhYi1cdTAwM2Vmdy5hbXNzX2RhdGE7XG4gMzU0Olx0XHRcdG1oaV9jdHJsLVx1MDAzZWZ3X3N6ID0gYWItXHUwMDNlZncuYW1zc19sZW47XG4gMzU1Olx0XHR9IGVsc2Uge1xuIDM1NjpcdFx0XHQvKiB1c2UgdGhlIG9sZCBzZXBhcmF0ZSBtaGkuYmluIE1ISSBmaXJtd2FyZSBmaWxlICovXG4gMzU3Olx0XHRcdGF0aDExa19jb3JlX2NyZWF0ZV9maXJtd2FyZV9wYXRoKGFiLCBBVEgxMUtfQU1TU19GSUxFLFxuIDM1ODpcdFx0XHRcdFx0XHRcdCBhYl9wY2ktXHUwMDNlYW1zc19wYXRoLFxuIDM1OTpcdFx0XHRcdFx0XHRcdCBzaXplb2YoYWJfcGNpLVx1MDAzZWFtc3NfcGF0aCkpO1xuIDM2MDpcdFx0XHRtaGlfY3RybC1cdTAwM2Vmd19pbWFnZSA9IGFiX3BjaS1cdTAwM2VhbXNzX3BhdGg7XG4gMzYxOlx0XHR9XG4gMzYyOlx0XG4gMzYzOlx0XHRyZXQgPSBhdGgxMWtfbWhpX2dldF9tc2koYWJfcGNpKTtcbiAzNjQ6XHRcdGlmIChyZXQpIHtcbiAzNjU6XHRcdFx0YXRoMTFrX2VycihhYiwgXCYjMzQ7ZmFpbGVkIHRvIGdldCBtc2kgZm9yIG1oaVxcblwmIzM0Oyk7XG4gMzY2Olx0XHRcdGdvdG8gZnJlZV9jb250cm9sbGVyO1xuIDM2NzpcdFx0fVxuIDM2ODpcdFxuIDM2OTpcdFx0aWYgKCF0ZXN0X2JpdChBVEgxMUtfRkxBR19NVUxUSV9NU0lfVkVDVE9SUywgXHUwMDI2YWItXHUwMDNlZGV2X2ZsYWdzKSlcbiAzNzA6XHRcdFx0bWhpX2N0cmwtXHUwMDNlaXJxX2ZsYWdzID0gSVJRRl9TSEFSRUQgfCBJUlFGX05PQkFMQU5DSU5HO1xuIDM3MTpcdFxuIDM3MjpcdFx0aWYgKHRlc3RfYml0KEFUSDExS19GTEFHX0ZJWEVEX01FTV9SR04sIFx1MDAyNmFiLVx1MDAzZWRldl9mbGFncykpIHtcbiAzNzM6XHRcdFx0cmV0ID0gYXRoMTFrX21oaV9yZWFkX2FkZHJfZnJvbV9kdChtaGlfY3RybCk7XG4gMzc0Olx0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4gMzc1Olx0XHRcdFx0Z290byBmcmVlX2NvbnRyb2xsZXI7XG4gMzc2Olx0XHR9IGVsc2Uge1xuIDM3NzpcdFx0XHRtaGlfY3RybC1cdTAwM2Vpb3ZhX3N0YXJ0ID0gMDtcbiAzNzg6XHRcdFx0bWhpX2N0cmwtXHUwMDNlaW92YV9zdG9wID0gYWJfcGNpLVx1MDAzZWRtYV9tYXNrO1xuIDM3OTpcdFx0fVxuIDM4MDpcdFxuIDM4MTpcdFx0bWhpX2N0cmwtXHUwMDNlcmRkbV9zaXplID0gUkRETV9EVU1QX1NJWkU7XG4gMzgyOlx0XHRtaGlfY3RybC1cdTAwM2VzYmxfc2l6ZSA9IFNaXzUxMks7XG4gMzgzOlx0XHRtaGlfY3RybC1cdTAwM2VzZWdfbGVuID0gU1pfNTEySztcbiAzODQ6XHRcdG1oaV9jdHJsLVx1MDAzZWZiY19kb3dubG9hZCA9IHRydWU7XG4gMzg1Olx0XHRtaGlfY3RybC1cdTAwM2VydW50aW1lX2dldCA9IGF0aDExa19taGlfb3BfcnVudGltZV9nZXQ7XG4gMzg2Olx0XHRtaGlfY3RybC1cdTAwM2VydW50aW1lX3B1dCA9IGF0aDExa19taGlfb3BfcnVudGltZV9wdXQ7XG4gMzg3Olx0XHRtaGlfY3RybC1cdTAwM2VzdGF0dXNfY2IgPSBhdGgxMWtfbWhpX29wX3N0YXR1c19jYjtcbiAzODg6XHRcdG1oaV9jdHJsLVx1MDAzZXJlYWRfcmVnID0gYXRoMTFrX21oaV9vcF9yZWFkX3JlZztcbiAzODk6XHRcdG1oaV9jdHJsLVx1MDAzZXdyaXRlX3JlZyA9IGF0aDExa19taGlfb3Bfd3JpdGVfcmVnO1xuIDM5MDpcdFxuIDM5MTpcdFx0c3dpdGNoIChhYi1cdTAwM2Vod19yZXYpIHtcbiAzOTI6XHRcdGNhc2UgQVRIMTFLX0hXX1FDTjkwNzRfSFcxMDpcbiAzOTM6XHRcdFx0YXRoMTFrX21oaV9jb25maWcgPSBcdTAwMjZhdGgxMWtfbWhpX2NvbmZpZ19xY245MDc0O1xuIDM5NDpcdFx0XHRicmVhaztcbiAzOTU6XHRcdGNhc2UgQVRIMTFLX0hXX1FDQTYzOTBfSFcyMDpcbiAzOTY6XHRcdGNhc2UgQVRIMTFLX0hXX1dDTjY4NTVfSFcyMDpcbiAzOTc6XHRcdGNhc2UgQVRIMTFLX0hXX1dDTjY4NTVfSFcyMTpcbiAzOTg6XHRcdGNhc2UgQVRIMTFLX0hXX1FDQTIwNjZfSFcyMTpcbiAzOTk6XHRcdGNhc2UgQVRIMTFLX0hXX1FDQTY2OThBUV9IVzIxOlxuIDQwMDpcdFx0XHRhdGgxMWtfbWhpX2NvbmZpZyA9IFx1MDAyNmF0aDExa19taGlfY29uZmlnX3FjYTYzOTA7XG4gNDAxOlx0XHRcdGJyZWFrO1xuIDQwMjpcdFx0ZGVmYXVsdDpcbiA0MDM6XHRcdFx0YXRoMTFrX2VycihhYiwgXCYjMzQ7ZmFpbGVkIGFzc2lnbiBtaGlfY29uZmlnIGZvciB1bmtub3duIGh3IHJldiAlZFxcblwmIzM0OyxcbiA0MDQ6XHRcdFx0XHQgICBhYi1cdTAwM2Vod19yZXYpO1xuIDQwNTpcdFx0XHRyZXQgPSAtRUlOVkFMO1xuIDQwNjpcdFx0XHRnb3RvIGZyZWVfY29udHJvbGxlcjtcbiA0MDc6XHRcdH1cbiA0MDg6XHRcbiA0MDk6XHRcdGFiX3BjaS1cdTAwM2VtaGlfcHJlX2NiID0gTUhJX0NCX0lOVkFMSUQ7XG4gNDEwOlx0XHRyZXQgPSBtaGlfcmVnaXN0ZXJfY29udHJvbGxlcihtaGlfY3RybCwgYXRoMTFrX21oaV9jb25maWcpO1xuIDQxMTpcdFx0aWYgKHJldCkge1xuIDQxMjpcdFx0XHRhdGgxMWtfZXJyKGFiLCBcJiMzNDtmYWlsZWQgdG8gcmVnaXN0ZXIgdG8gbWhpIGJ1cywgZXJyID0gJWRcXG5cJiMzNDssIHJldCk7XG4gNDEzOlx0XHRcdGdvdG8gZnJlZV9jb250cm9sbGVyO1xuIDQxNDpcdFx0fVxuIDQxNTpcdFxuIDQxNjpcdFx0cmV0dXJuIDA7XG4gNDE3Olx0XG4gNDE4Olx0ZnJlZV9jb250cm9sbGVyOlxuIDQxOTpcdFx0bWhpX2ZyZWVfY29udHJvbGxlcihtaGlfY3RybCk7XG4gNDIwOlx0XHRhYl9wY2ktXHUwMDNlbWhpX2N0cmwgPSBOVUxMO1xuIDQyMTpcdFx0cmV0dXJuIHJldDtcbiA0MjI6XHR9XG4gNDIzOlx0XG4gNDI0Olx0dm9pZCBhdGgxMWtfbWhpX3VucmVnaXN0ZXIoc3RydWN0IGF0aDExa19wY2kgKmFiX3BjaSlcbiA0MjU6XHR7XG4gNDI2Olx0XHRzdHJ1Y3QgbWhpX2NvbnRyb2xsZXIgKm1oaV9jdHJsID0gYWJfcGNpLVx1MDAzZW1oaV9jdHJsO1xuIDQyNzpcdFxuIDQyODpcdFx0bWhpX3VucmVnaXN0ZXJfY29udHJvbGxlcihtaGlfY3RybCk7XG4gNDI5Olx0XHRrZnJlZShtaGlfY3RybC1cdTAwM2VpcnEpO1xuIDQzMDpcdFx0bWhpX2ZyZWVfY29udHJvbGxlcihtaGlfY3RybCk7XG4gNDMxOlx0fVxuIDQzMjpcdFxuIDQzMzpcdGludCBhdGgxMWtfbWhpX3N0YXJ0KHN0cnVjdCBhdGgxMWtfcGNpICphYl9wY2kpXG4gNDM0Olx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOCAwODoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODI3MAoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDY2MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBEcml2ZXIgUGF0Y2g6IEZvY3VzaW5nIG9uIFJlc291cmNlIE1hbmFnZW1lbnQgYW5kIFBvdGVudGlhbCBGdXp6aW5nIFRhcmdldHMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIHRyYWNpbmcgdGhlIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlIGZvciBib3RoIGBhdGgxMWtgIGFuZCBgYXRoMTJrYCBkcml2ZXJzLiBJdCBzZWVtcyB0aGF0IGBhdGgxMWtfbWhpX3JlZ2lzdGVyYCBraWNrcyB0aGluZ3Mgb2ZmIHdpdGggYG1oaV9yZWdpc3Rlcl9jb250cm9sbGVyYC4gVGhpcyBwYXJ0LCBhcyBJIHJlY2FsbCwgbW9zdGx5IHNldHMgdXAgc29mdHdhcmUgc3RydWN0dXJlcy4gSXQgKm1pZ2h0KiBkbyBiYXNpYyBjaGVja3MsIGJ1dCBpdCYjMzk7cyBsYXJnZWx5IGFib3V0IHJlZ2lzdHJhdGlvbiB3aXRoIHRoZSBNSEkgc3Vic3lzdGVtIGFuZCBpc24mIzM5O3QgbmVjZXNzYXJpbHkgYmxvY2tlZCBieSBpbW1lZGlhdGUgaGFyZHdhcmUgcmVzcG9uc2l2ZW5lc3MuCgpUaGVuLCBgYXRoMTFrX3BjaV9wcm9iZWAgdGFrZXMgb3ZlciBhbmQgZXZlbnR1YWxseSBoaXRzIGBhdGgxMWtfY29yZV9pbml0YCwgd2hpY2ggdGhlbiBsZWFkcyB0byBgYXRoMTFrX2NvcmVfc29jX2NyZWF0ZWAgYW5kIGZpbmFsbHkgYGF0aDExa19xbWlfaW5pdF9zZXJ2aWNlYC4gU28sIHRoZSBgcW1pYCBzZXJ2aWNlIGdldHMgaW5pdGlhbGl6ZWQgcHJldHR5IGVhcmx5IGluIHRoZSBwcm9iZSBzZXF1ZW5jZSwgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIFRoZSBzYW1lIGZsb3cgaXMgYWxzbyBmb2xsb3dlZCBpbiBgYXRoMTJrYCB3aXRoIGBhdGgxMmtfcW1pX2luaXRfc2VydmljZWAuCgpOb3csIHRoZSBwYXRjaCBpdHNlbGYgaXMgd2hhdCByZWFsbHkgZ3JhYnMgbXkgYXR0ZW50aW9uLiBJdCBhZGRzIGVycm9yIGhhbmRsaW5nIHRvIGJvdGggYGF0aDExa19xbWlfaW5pdF9zZXJ2aWNlYCBhbmQgYGF0aDEya19xbWlfaW5pdF9zZXJ2aWNlYC4gU3BlY2lmaWNhbGx5LCBpdCBhZGRyZXNzZXMgdGhlIGZhaWx1cmUgc2NlbmFyaW9zIG9mIGBhbGxvY19vcmRlcmVkX3dvcmtxdWV1ZWAgYW5kIGBxbWlfYWRkX2xvb2t1cGAuIFRoZSBvbGQgY29kZSBoYWQgYSBsZWFrOyBpdCB3b3VsZCByZXR1cm4gYW4gZXJyb3IgaWYgZWl0aGVyIG9mIHRoZXNlIGZhaWxlZCwgYnV0IGl0IHdvdWxkIGxlYXZlIHRoZSBRTUkgaGFuZGxlIGluaXRpYWxpemVkLiBUaGUgbmV3IGNvZGUgY29ycmVjdGx5IGNhbGxzIGBxbWlfaGFuZGxlX3JlbGVhc2VgIGluIHRoZXNlIGVycm9yIGNhc2VzIHRvIGZyZWUgdGhlIFFNSSBoYW5kbGUuCgpUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2U7IGl0JiMzOTtzIGZpeGluZyBhIG1lbW9yeS9yZXNvdXJjZSBsZWFrLiBHaXZlbiBteSBleHBlcmllbmNlLCBJIGtub3cgYGFsbG9jX29yZGVyZWRfd29ya3F1ZXVlYCAqY2FuKiBmYWlsIHVuZGVyIG1lbW9yeSBwcmVzc3VyZSBvciBpZiB3ZSYjMzk7dmUgaW50cm9kdWNlZCBzb21lIGZhdWx0IGluamVjdGlvbiwgYW5kIGBxbWlfYWRkX2xvb2t1cGAgaXMgYWxzbyBwcm9uZSB0byBmYWlsdXJlIHVuZGVyIGNlcnRhaW4gY29uZGl0aW9ucy4gVGhlIHBhdGNoIGNvcnJlY3RzIHRoaXMgaXNzdWUgYnkgcHJvcGVybHkgcmVsZWFzaW5nIHRoZSBoYW5kbGUuCgpUaGlzIGFjdHVhbGx5IG1ha2VzIHRoaXMgYW4gZXhjZWxsZW50IGNhbmRpZGF0ZSBmb3IgZnV6emluZy4gSSBjYW4gY29uc3RydWN0IHRlc3RzIHRoYXQgc2ltdWxhdGUgdGhlc2UgZXJyb3IgcGF0aHMsIGFuZCB2ZXJpZnkgdGhhdCB0aGUgbGVhayBpcyBmaXhlZCwgYW5kIHRoYXQgdGhlcmUgYXJlIG5vIHVzZS1hZnRlci1mcmVlIG9yIGRvdWJsZS1mcmVlIGNvbmRpdGlvbnMuIEl0JiMzOTtzIGEgdGFyZ2V0ZWQgcGF0Y2gsIG1ha2luZyB2ZXJpZmljYXRpb24gbXVjaCBlYXNpZXIuCgpCZWZvcmUgSSBnbyBmdXJ0aGVyLCBJIHNob3VsZCBjaGVjayB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gRm9yIGBhdGgxMWtgIEkgbmVlZCBgQ09ORklHX0FUSDExS2AgYW5kIGBDT05GSUdfQVRIMTFLX1BDSWAgKG9yIGBDT05GSUdfQVRIMTFLX0FIQmApLCBhbmQgZm9yIGBhdGgxMmtgIEkgbmVlZCBgQ09ORklHX0FUSDEyS2AgYW5kIGBDT05GSUdfQVRIMTJLX1BDSWAgKG9yIGBDT05GSUdfQVRIMTJLX0FIQmApLiBJJiMzOTtsbCBkb3VibGUtY2hlY2sgdGhlIGV4YWN0IG5hbWVzIGluIHRoZSBgS2NvbmZpZ2AgZmlsZXMgaW4gdGhlIGRyaXZlciBkaXJlY3RvcmllcyBqdXN0IHRvIGJlIGNlcnRhaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE4IDA4OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBBVEgxMUsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlLUNsZWFyXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL0tjb25maWc6Mjpjb25maWcgQVRIMTFLXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O1F1YWxjb21tIDgwMi4xMWF4IGNoaXBzZXQgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvS2NvbmZpZy0xMi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvS2NvbmZpZzoxMzpjb25maWcgQVRIMTFLX0FIQlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9LY29uZmlnLTE0LVx0dHJpc3RhdGUgXCYjMzQ7QXRoZXJvcyBhdGgxMWsgQUhCIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL0tjb25maWctMTktXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL0tjb25maWc6MjA6Y29uZmlnIEFUSDExS19QQ0lcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvS2NvbmZpZy0yMS1cdHRyaXN0YXRlIFwmIzM0O0F0aGVyb3MgYXRoMTFrIFBDSSBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9LY29uZmlnLTI5LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9LY29uZmlnOjMwOmNvbmZpZyBBVEgxMUtfREVCVUdcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvS2NvbmZpZy0zMS1cdGJvb2wgXCYjMzQ7UUNBIGF0aDExayBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL0tjb25maWctMzctXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL0tjb25maWc6Mzg6Y29uZmlnIEFUSDExS19ERUJVR0ZTXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL0tjb25maWctMzktXHRib29sIFwmIzM0O1FDQSBhdGgxMWsgZGVidWdmcyBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9LY29uZmlnLTQ1LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9LY29uZmlnOjQ2OmNvbmZpZyBBVEgxMUtfVFJBQ0lOR1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9LY29uZmlnLTQ3LVx0Ym9vbCBcJiMzNDthdGgxMWsgdHJhY2luZyBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9LY29uZmlnLTUxLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9LY29uZmlnOjUyOmNvbmZpZyBBVEgxMUtfU1BFQ1RSQUxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvS2NvbmZpZy01My1cdGJvb2wgXCYjMzQ7UUNBIGF0aDExayBzcGVjdHJhbCBzY2FuIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL0tjb25maWctNjAtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL0tjb25maWc6NjE6Y29uZmlnIEFUSDExS19DRlJcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvS2NvbmZpZy02Mi1cdGJvb2wgXCYjMzQ7YXRoMTFrIGNoYW5uZWwgZnJlcXVlbmN5IHJlc3BvbnNlIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTggMDg6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAyNDEKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqRGVsdmluZyBpbnRvIGBhdGgxMmtgIC0gQSBRdWljayBSZS1jYXAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZSwgd2hhdCB3ZXJlIHdlIGRvaW5nPyBBaCB5ZXMsIGNpcmNsaW5nIGJhY2sgdG8gYGF0aDEya2AuIE15IG1pbmQgaW5zdGFudGx5IGdvZXMgdG8gdGhlIGNvbXBsZXhpdGllcyB3ZSYjMzk7dmUgYmVlbiB3b3JraW5nIHdpdGgsIHNvIGhlcmUmIzM5O3Mgd2hhdCBJJiMzOTttIHRoaW5raW5nOgoKKiAgICoqVW5kZXJzdGFuZGluZyB0aGUgQXJjaGl0ZWN0dXJlOioqIEkgbmVlZCB0byByZWZyZXNoIHRoZSBgYXRoMTJrYCBhcmNoaXRlY3R1cmUgaW4gbXkgbWluZDogd2hpY2ggcGFydGljdWxhciBjb21wb25lbnRzIHdlIHdlcmUgaW52ZXN0aWdhdGluZywgd2hpY2ggc3BlY2lmaWMgYXNwZWN0cyBvZiB0aGUgZmlybXdhcmUmIzM5O3MgZnVuY3Rpb24gd2VyZSByZWxldmFudCB0byB0aGUgcHJlc2VudCBuZWVkLCBhbmQgaG93IGl0IGlzIGRpZmZlcmVudCBmcm9tIGF0aDExayAoaWYgdGhhdCBpcyBldmVuIGFwcGxpY2FibGUpLgoKKiAgICoqRmlybXdhcmUgaW50ZXJhY3Rpb25zKio6IFRoZSBpbnRlcmFjdGlvbnMgYmV0d2VlbiB0aGUgZmlybXdhcmUgYW5kIHRoZSBrZXJuZWwgd2VyZSBwYXJ0aWN1bGFybHkgaW52b2x2ZWQ7IGVzcGVjaWFsbHkgYW55IGludGVycnVwdC1kcml2ZW4gaGFuZGxpbmcgb3IgYW55IHNoYXJlZCBtZW1vcnkgc3RydWN0dXJlcy4gV2hhdCB3ZXJlIHRoZSBzcGVjaWZpYyBkYXRhIHN0cnVjdHVyZXMgYW5kIGhvdyB3ZXJlIHdlIGNoYW5naW5nIHRoZW0gdG8gYWNoaWV2ZSB3aGF0IHdlIG5lZWRlZD8KCiogICAqKlBlcmZvcm1hbmNlIEJvdHRsZW5lY2tzOioqIFdoYXQgd2VyZSB0aGUgcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgd2Ugd2VyZSBleHBlY3RpbmcgdG8gc2VlPyBXaGF0IGRpZCB3ZSBkbyB0byB0cnkgYW5kIGdldCBhcm91bmQgdGhlbT8KCiogICAqKktleSBEZWJ1Z2dpbmcgUG9pbnRzOioqIFdoYXQgd2VyZSB0aGUgc3BlY2lmaWMgdGVzdCBwYXJhbWV0ZXJzIHdlIHVzZWQgdG8gcmVwbGljYXRlIHRoZSBpc3N1ZT8gSG93IGRpZCB3ZSBnYXRoZXIgbWV0cmljcz8gV2FzIHRoZXJlIGEgc3BlY2lmaWMgdG9vbCBvciBkZWJ1Z2dpbmcgbWV0aG9kIHdlIHVzZWQgdG8gaXNvbGF0ZSBwcm9ibGVtcz8gSSBuZWVkIHRvIGZvY3VzIG9uIHdoYXQgZGF0YSB3ZSB3ZXJlIGV4YW1pbmluZyB0byBhcnJpdmUgYXQgb3VyIGluaXRpYWwgY29uY2x1c2lvbnMuCiogICAqKkNvbnRleHR1YWwgQ29uc2lkZXJhdGlvbnM6KiogTW9zdCBpbXBvcnRhbnRseSwgSSBuZWVkIHRvIHJlbWluZCBteXNlbGYgb2YgdGhlICYjMzQ7d2h5JiMzNDsuIFdoeSB3ZXJlIHdlIGludmVzdGlnYXRpbmcgdGhpcyBkcml2ZXI/IFdoYXQgd2FzIHRoZSBoaWdoZXItbGV2ZWwgcHJvYmxlbSB3ZSB3ZXJlIHRyeWluZyB0byBzb2x2ZSwgYW5kIHdoYXQgd2VyZSB0aGUgY29uc3RyYWludHMgb2YgdGhlIHRhcmdldCBoYXJkd2FyZT8gVGhlIHVsdGltYXRlIHVzZXIgbmVlZHMgdG8gYmUgcmVmcmVzaGVkIHRvby4KKiAgICoqVGhlIE5leHQgU3RlcHM6KiogV2hhdCBkaWQgd2UgdGhpbmsgdGhlIG5leHQgc3RlcHMgd2VyZT8gSSBzaG91bGQgYWxzbyBrZWVwIGluIG1pbmQgd2hldGhlciB3ZSBpZGVudGlmaWVkIGFueSBtb3JlIHdvcmsgd2hpY2ggbmVlZHMgdG8gYmUgZG9uZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTggMDg6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEFUSDEySyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UtQ2xlYXJcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvS2NvbmZpZzoyOmNvbmZpZyBBVEgxMktcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7UXVhbGNvbW0gV2ktRmkgNyBzdXBwb3J0IChhdGgxMmspXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnLTE2LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnOjE3OmNvbmZpZyBBVEgxMktfQUhCXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWctMTgtXHRib29sIFwmIzM0O1F1YWxjb21tIGF0aDEyayBBSEIgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvS2NvbmZpZy0yNC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvS2NvbmZpZzoyNTpjb25maWcgQVRIMTJLX0RFQlVHXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWctMjYtXHRib29sIFwmIzM0O2F0aDEyayBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWctMzQtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWc6MzU6Y29uZmlnIEFUSDEyS19ERUJVR0ZTXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWctMzYtXHRib29sIFwmIzM0O1F1YWxjb21tIGF0aDEyayBkZWJ1Z2ZzIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWctNDMtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWc6NDQ6Y29uZmlnIEFUSDEyS19UUkFDSU5HXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWctNDUtXHRib29sIFwmIzM0O2F0aDEyayB0cmFjaW5nIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWctNTItXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWc6NTM6Y29uZmlnIEFUSDEyS19DT1JFRFVNUFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnLTU0LVx0Ym9vbCBcJiMzNDthdGgxMmsgY29yZWR1bXBcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTggMDg6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjExNzIKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZS4gVGhpcyBgQVRIMTJLX1BDSWAgdGhpbmcuLi4gaXQmIzM5O3MgdGhyb3dpbmcgYSBmbGFnLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtXYWl0IGEgbWludXRlLCBpcyB0aGF0IGV2ZW4gYSB0aGluZz8gRG9lc24mIzM5O3QgcmluZyBhIGJlbGwuJiMzNDsgTGV0JiMzOTtzIHZlcmlmeS4gTXkgZmlyc3QgaW5zdGluY3QsIGFzIGFsd2F5cywgaXMgdG8gZGl2ZSBpbnRvIHRoZSBLY29uZmlnLiBJJiMzOTtsbCBoZWFkIHN0cmFpZ2h0IHRvIGBkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWdgLiBUaGF0JiMzOTtzIHdoZXJlIGFsbCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGF0IGZhbWlseSBvZiBkcml2ZXJzIGxpdmUuIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgUENJIHN1cHBvcnQsIGluIHBhcnRpY3VsYXIsIGlzIGRlZmluZWQgb3IgZXZlbiBtZW50aW9uZWQgdGhlcmUuIFRoYXQmIzM5O3MgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgY29kZSBwYXRoIGlzIHZhbGlkIG9yIGlmIHRoZXJlJiMzOTtzIGEgbWlzdW5kZXJzdGFuZGluZyBzb21ld2hlcmUuIEkmIzM5O2xsIHVzZSB0aGUgS2NvbmZpZyB0byB1bmRlcnN0YW5kIHRoZSB3aG9sZSBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOCAwODoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBBVEgxMktfUENJJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTggMDg6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE0MDkKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSBgZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnYCBmaWxlLgoKKipEaXZpbmcgaW50byB0aGUgQXRoZXJvcyBhdGgxMmsgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGludG8gdGhpcyBgS2NvbmZpZ2AgZmlsZSBmb3IgdGhlIGF0aDEyayBkcml2ZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBzdHJ1Y3R1cmVkIGZvciB0aGlzIHNwZWNpZmljIFF1YWxjb21tIEF0aGVyb3Mgd2lyZWxlc3MgY2hpcHNldC4gTXkgaW5pdGlhbCBnb2FsIGlzIHRvIHNlZSB3aGF0IGdyYW51bGFyIGNvbnRyb2wgaXMgZXhwb3NlZCB0byB0aGUgdXNlciwgd2hhdCBmZWF0dXJlcyBhcmUgb3B0aW9uYWwsIGFuZCBob3cgdGhleSByZWxhdGUgdG8gdGhlIGNvcmUgZnVuY3Rpb25hbGl0eS4gSSYjMzk7bSBsb29raW5nIGZvciB0aGluZ3MgbGlrZToKCiogICAqKkNoaXBzZXQgU3BlY2lmaWMgRmVhdHVyZXM6KiogQXJlIHRoZXJlIG9wdGlvbnMgZm9yIGVuYWJsaW5nIG9yIGRpc2FibGluZyBwYXJ0aWN1bGFyIGhhcmR3YXJlIGZlYXR1cmVzIGJhc2VkIG9uIHRoZSBzcGVjaWZpYyBhdGgxMmsgY2hpcHNldCB2YXJpYW50PyBJJiMzOTtkIGV4cGVjdCB0byBmaW5kIHRoaW5ncyB0aWVkIHRvIHNwZWNpZmljIFBIWSBtb2Rlcywgb3IgcG93ZXItc2F2aW5nIGNvbmZpZ3VyYXRpb25zLgoqICAgKipEcml2ZXIgRmVhdHVyZXM6KiogV2hhdCBrbm9icyBkb2VzIHRoZSBkcml2ZXIgZXhwb3NlIHRvIHRoZSB1c2VyPyBBcmUgdGhlcmUgZGVidWdnaW5nIG9wdGlvbnMsIGFkdmFuY2VkIHNldHRpbmdzIChsaWtlIHRob3NlIHJlbGF0ZWQgdG8gZmlybXdhcmUgbG9hZGluZywgcmF0ZSBjb250cm9sIGFsZ29yaXRobXMsIG9yIHJlZ3VsYXRvcnkgZG9tYWluIGhhbmRsaW5nKSwgb3Igc3BlY2lmaWMgZmVhdHVyZXMgZm9yIGRpZmZlcmVudCBXaS1GaSBzdGFuZGFyZHMgKDgwMi4xMWF4LCA4MDIuMTFhYywgZXRjLik/IEkgd2FudCB0byBzZWUgaG93IG11Y2ggZmxleGliaWxpdHkgdGhlIHN5c3RlbSBnaXZlcyBtZSB3aGVuIHR1bmluZyBhIGRldmljZS4KKiAgICoqRGVwZW5kZW5jaWVzOioqIEFyZSB0aGVyZSBhbnkgZGVwZW5kZW5jaWVzIG9uIG90aGVyIGtlcm5lbCBmZWF0dXJlcyBvciBkcml2ZXJzPyBUaGlzIGlzIGNyaXRpY2FsIGZvciB1bmRlcnN0YW5kaW5nIGhvdyBhdGgxMmsgaW50ZWdyYXRlcyBpbnRvIHRoZSBiaWdnZXIgcGljdHVyZS4gSSYjMzk7bSB0aGlua2luZyBvZiBkZXBlbmRlbmNpZXMgb24gcmVndWxhdG9yeSBkYXRhYmFzZSBmZWF0dXJlcywgZmlybXdhcmUgbG9hZGluZyBtZWNoYW5pc21zLCBvciBvdGhlciBuZXR3b3JrIHN0YWNrIGNvbXBvbmVudHMuIEkgbmVlZCB0byBrbm93IHdoYXQgdG8gZW5hYmxlIG9yIGRpc2FibGUgaW4gb3JkZXIgdG8gZ2V0IHRoZSBhdGgxMmsgZHJpdmVyIHRvIGZ1bmN0aW9uIGluIGFuIGV4cGVjdGVkIHdheS4KKiAgICoqRGVmYXVsdCBWYWx1ZXMgYW5kIEhlbHAgVGV4dDoqKiBUaGUgZGVmYXVsdCB2YWx1ZXMgYW5kIGhlbHAgdGV4dCBhcmUgZXNzZW50aWFsLiBUaGV5IHF1aWNrbHkgdGVsbCBtZSB3aGF0JiMzOTtzIGltcG9ydGFudCwgd2hhdCB0aGUgaW1wbGljYXRpb25zIG9mIGNoYW5naW5nIGEgc2V0dGluZyBhcmUsIGFuZCBob3cgdGhlIGRlZmF1bHQgY2hvaWNlcyByZWxhdGUgdG8gdGhlIGdlbmVyYWwgb3BlcmF0aW5nIGNvbmRpdGlvbnMuIEkmIzM5O2xsIGZvY3VzIG9uIHRoZXNlIHRvIGdldCBhIHF1aWNrIG92ZXJ2aWV3LgoqICAgKipNZW51IHN0cnVjdHVyZSoqOiBGaW5hbGx5LCB0aGUgbWVudSBzdHJ1Y3R1cmUgd2lsbCBzaG93IG1lIGhvdyBhbGwgdGhlc2Ugb3B0aW9ucyBhcmUgZ3JvdXBlZCB0b2dldGhlci4gVGhpcyByZXZlYWxzIHRoZSBsb2dpYyBvZiBob3cgUXVhbGNvbW0gaXMgbWFuYWdpbmcgdGhlIGRyaXZlciYjMzk7cyBmZWF0dXJlIHNldCBhbmQgaG93IGl0IHByZXNlbnRzIHRoZSBvcHRpb25zIHRvIHRoZSBrZXJuZWwgdXNlci4KCkkmIzM5O2xsIGJlIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gYW55IGNvbmRpdGlvbmFsIGNvbmZpZ3VyYXRpb25zICh1c2luZyBgZGVwZW5kcyBvbmAsIGBzZWxlY3RgLCBldGMuKSB0byBnZXQgYSBnb29kIGhhbmRsZSBvbiBob3cgZGlmZmVyZW50IGNvbmZpZ3VyYXRpb25zIGludGVyYWN0LCBhbmQgaG93IHRvIGF2b2lkIHBvdGVudGlhbCBjb25mbGljdHMgd2hlbiBjdXN0b21pemluZyB0aGUgYnVpbGQuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gZmluZCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTggMDg6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlLUNsZWFyXG4gICAyOlx0Y29uZmlnIEFUSDEyS1xuICAgMzpcdFx0dHJpc3RhdGUgXCYjMzQ7UXVhbGNvbW0gV2ktRmkgNyBzdXBwb3J0IChhdGgxMmspXCYjMzQ7XG4gICA0Olx0XHRkZXBlbmRzIG9uIE1BQzgwMjExIFx1MDAyNlx1MDAyNiBIQVNfRE1BIFx1MDAyNlx1MDAyNiBQQ0lcbiAgIDU6XHRcdHNlbGVjdCBRQ09NX1FNSV9IRUxQRVJTXG4gICA2Olx0XHRzZWxlY3QgTUhJX0JVU1xuICAgNzpcdFx0c2VsZWN0IFFSVFJcbiAgIDg6XHRcdHNlbGVjdCBRUlRSX01ISVxuICAgOTpcdFx0c2VsZWN0IFBDSV9QV1JDVFJMX1BXUlNFUSBpZiBIQVZFX1BXUkNUUkxcbiAgMTA6XHRcdGhlbHBcbiAgMTE6XHRcdCAgRW5hYmxlIHN1cHBvcnQgZm9yIFF1YWxjb21tIFRlY2hub2xvZ2llcyBXaS1GaSA3IChJRUVFXG4gIDEyOlx0XHQgIDgwMi4xMWJlKSBmYW1pbHkgb2YgY2hpcHNldHMsIGZvciBleGFtcGxlIFdDTjc4NTAgYW5kXG4gIDEzOlx0XHQgIFFDTjkyNzQuXG4gIDE0Olx0XG4gIDE1Olx0XHQgIElmIHlvdSBjaG9vc2UgdG8gYnVpbGQgYSBtb2R1bGUsIGl0JiMzOTtsbCBiZSBjYWxsZWQgYXRoMTJrLlxuICAxNjpcdFxuICAxNzpcdGNvbmZpZyBBVEgxMktfQUhCXG4gIDE4Olx0XHRib29sIFwmIzM0O1F1YWxjb21tIGF0aDEyayBBSEIgc3VwcG9ydFwmIzM0O1xuICAxOTpcdFx0ZGVwZW5kcyBvbiBBVEgxMksgXHUwMDI2XHUwMDI2IFJFTU9URVBST0NcbiAgMjA6XHRcdHNlbGVjdCBRQ09NX01EVF9MT0FERVJcbiAgMjE6XHRcdHNlbGVjdCBRQ09NX1NDTVxuICAyMjpcdFx0aGVscFxuICAyMzpcdFx0ICBFbmFibGUgc3VwcG9ydCBmb3IgQXRoMTJrIEFIQiBidXMgY2hpcHNldHMsIGV4YW1wbGUgSVBRNTMzMi5cbiAgMjQ6XHRcbiAgMjU6XHRjb25maWcgQVRIMTJLX0RFQlVHXG4gIDI2Olx0XHRib29sIFwmIzM0O2F0aDEyayBkZWJ1Z2dpbmdcJiMzNDtcbiAgMjc6XHRcdGRlcGVuZHMgb24gQVRIMTJLXG4gIDI4Olx0XHRoZWxwXG4gIDI5Olx0XHQgIEVuYWJsZSBkZWJ1ZyBzdXBwb3J0LCBmb3IgZXhhbXBsZSBkZWJ1ZyBtZXNzYWdlcyB3aGljaCBtdXN0XG4gIDMwOlx0XHQgIGJlIGVuYWJsZWQgc2VwYXJhdGVseSB1c2luZyB0aGUgZGVidWdfbWFzayBtb2R1bGUgcGFyYW1ldGVyLlxuICAzMTpcdFxuICAzMjpcdFx0ICBJZiB1bnN1cmUsIHNheSBZIHRvIG1ha2UgaXQgZWFzaWVyIHRvIGRlYnVnIHByb2JsZW1zLiBCdXQgaWZcbiAgMzM6XHRcdCAgeW91IHdhbnQgb3B0aW1hbCBwZXJmb3JtYW5jZSBjaG9vc2UgTi5cbiAgMzQ6XHRcbiAgMzU6XHRjb25maWcgQVRIMTJLX0RFQlVHRlNcbiAgMzY6XHRcdGJvb2wgXCYjMzQ7UXVhbGNvbW0gYXRoMTJrIGRlYnVnZnMgc3VwcG9ydFwmIzM0O1xuICAzNzpcdFx0ZGVwZW5kcyBvbiBBVEgxMksgXHUwMDI2XHUwMDI2IE1BQzgwMjExX0RFQlVHRlNcbiAgMzg6XHRcdGhlbHBcbiAgMzk6XHRcdCAgRW5hYmxlIGF0aDEyayBkZWJ1Z2ZzIHN1cHBvcnRcbiAgNDA6XHRcbiAgNDE6XHRcdCAgSWYgdW5zdXJlLCBzYXkgWSB0byBtYWtlIGl0IGVhc2llciB0byBkZWJ1ZyBwcm9ibGVtcy4gQnV0IGlmXG4gIDQyOlx0XHQgIHlvdSB3YW50IG9wdGltYWwgcGVyZm9ybWFuY2UgY2hvb3NlIE4uXG4gIDQzOlx0XG4gIDQ0Olx0Y29uZmlnIEFUSDEyS19UUkFDSU5HXG4gIDQ1Olx0XHRib29sIFwmIzM0O2F0aDEyayB0cmFjaW5nIHN1cHBvcnRcJiMzNDtcbiAgNDY6XHRcdGRlcGVuZHMgb24gQVRIMTJLIFx1MDAyNlx1MDAyNiBFVkVOVF9UUkFDSU5HXG4gIDQ3Olx0XHRoZWxwXG4gIDQ4Olx0XHQgIEVuYWJsZSBhdGgxMmsgdHJhY2luZyBpbmZyYXN0cnVjdHVyZS5cbiAgNDk6XHRcbiAgNTA6XHRcdCAgSWYgdW5zdXJlLCBzYXkgWSB0byBtYWtlIGl0IGVhc2llciB0byBkZWJ1ZyBwcm9ibGVtcy4gQnV0IGlmXG4gIDUxOlx0XHQgIHlvdSB3YW50IG9wdGltYWwgcGVyZm9ybWFuY2UgY2hvb3NlIE4uXG4gIDUyOlx0XG4gIDUzOlx0Y29uZmlnIEFUSDEyS19DT1JFRFVNUFxuICA1NDpcdFx0Ym9vbCBcJiMzNDthdGgxMmsgY29yZWR1bXBcJiMzNDtcbiAgNTU6XHRcdGRlcGVuZHMgb24gQVRIMTJLXG4gIDU2Olx0XHRzZWxlY3QgV0FOVF9ERVZfQ09SRURVTVBcbiAgNTc6XHRcdGhlbHBcbiAgNTg6XHRcdCAgRW5hYmxlIGF0aDEyayBjb3JlZHVtcCBjb2xsZWN0aW9uXG4gIDU5Olx0XG4gIDYwOlx0XHQgIElmIHVuc3VyZSwgc2F5IFkgdG8gbWFrZSBpdCBlYXNpZXIgdG8gZGVidWcgcHJvYmxlbXMuIEJ1dCBpZlxuICA2MTpcdFx0ICBkdW1wIGNvbGxlY3Rpb24gbm90IHJlcXVpcmVkIGNob29zZSBOLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOCAwODoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjgyNgoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDM2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBBVEgxMksgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBsb29raW5nIGF0IHRoaXMsIGBBVEgxMktgIGluaGVyZW50bHkgcmVsaWVzIG9uIGBQQ0lgLCBhbmQgaXQgc2VlbXMgdGhlIGJ1aWxkIHN5c3RlbSBlbmFibGVzIFBDSSBzdXBwb3J0IGJ5IGRlZmF1bHQuIFJpZ2h0LCBzbyBpZiBJIHdhbnQgdG8gZW5zdXJlIGV2ZXJ5dGhpbmcgaXMgaW4gcGxhY2UsIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb25zIEkgbmVlZCB0byBzZXQgYXJlIGBBVEgxMUtgLCBgQVRIMTFLX1BDSWAsIGBBVEgxMUtfQUhCYCwgYEFUSDEyS2AsIGFuZCBgQVRIMTJLX0FIQmAuIE5vdywgaGFuZyBvbiBhIHNlY29uZCwgYEFUSDExS19QQ0lgIGFuZCBgQVRIMTFLX0FIQmAgYXJlIHRyaXN0YXRlIG9wdGlvbnMsIGFzIGlzIGBBVEgxMktgLCB3aGlsZSBgQVRIMTJLX0FIQmAgaXMgYSBCb29sZWFuLiBHaXZlbiB0aGF0LCB0aGUgbW9zdCBzdHJhaWdodGZvcndhcmQgYXBwcm9hY2ggc2VlbXMgdG8gYmUgdG8gZW5hYmxlIGBBVEgxMUtgLCBgQVRIMTFLX1BDSWAsIGFuZCBgQVRIMTJLYC4gVGhhdCBzaG91bGQgY292ZXIgdGhlIGVzc2VudGlhbHMuCgpMZXQmIzM5O3Mgc2hpZnQgZm9jdXMgbm93LiBJIG5lZWQgdG8gemVybyBpbiBvbiB0aGUga2V5IG1vZGlmaWVkIGZ1bmN0aW9ucy4gVGhlIGluZGljYXRvcnMgYXJlIGBhdGgxMWtfcW1pX2luaXRfc2VydmljZWAgYW5kIGBhdGgxMmtfcW1pX2luaXRfc2VydmljZWAuIFRob3NlIGFyZSBnb29kLCB3ZWxsLWRlZmluZWQgZm9jdXMgc3ltYm9scy4gSSBxdWlja2x5IHNjYW4uLi4gb2theSwgdGhlcmUgYXJlbiYjMzk7dCBhbnkgb3RoZXIgZnVuY3Rpb25zIHRoYXQgd2VyZSBvYnZpb3VzbHkgY2hhbmdlZC4gR29vZC4KCkFscmlnaHQsIG5vdyB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uLiBDYW4gSSByZWFjaCBgYXRoMTFrX3FtaV9pbml0X3NlcnZpY2VgIGV2ZW4gd2hlbiBubyBhY3R1YWwgaGFyZHdhcmUgaXMgcHJlc2VudD8gV2Uga25vdyBzeXprYWxsZXIgY2FuIGluamVjdCB2aXJ0dWFsIFBDSSBkZXZpY2VzLCB3aGljaCB3b3VsZCB0cmlnZ2VyIGBhdGgxMWtfcGNpX3Byb2JlYC4gRm9sbG93aW5nIHRoZSBleGVjdXRpb24gcGF0aCwgYGF0aDExa19wY2lfcHJvYmVgIGNhbGxzIGBhdGgxMWtfY29yZV9pbml0YCwgYW5kIGZyb20gdGhlcmUgd2UgZ2V0IGBhdGgxMWtfY29yZV9zb2NfY3JlYXRlYCwgd2hpY2ggZmluYWxseSBjYWxscyBgYXRoMTFrX3FtaV9pbml0X3NlcnZpY2VgLiBUaGUgb25seSBzdGlja2luZyBwb2ludCBzZWVtcyB0byBiZSBgYXRoMTFrX21oaV9yZWdpc3RlcmAsIGJ1dCBmcm9tIHdoYXQgSSByZWNhbGwsIHRoYXQganVzdCByZWdpc3RlcnMgdGhlIE1ISSBjb250cm9sbGVyIGFuZCBpc24mIzM5O3QgYSBibG9ja2VyLiBXYWl0Li4ud2hhdCBhYm91dCBgYXRoMTFrX3BjaV9yZWFkX2h3X3ZlcnNpb25gPyBUaGF0IHJlcXVpcmVzIGNsb3NlciBzY3J1dGlueS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTggMDg6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXRoMTFrX3BjaV9yZWFkX2h3X3ZlcnNpb24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9wY2kuYz04OTk9c3RhdGljIGNvbnN0IHN0cnVjdCBhdGgxMWtfaGlmX29wcyBhdGgxMWtfcGNpX2hpZl9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9wY2kuYy05MjEtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3BjaS5jOjkyMjpzdGF0aWMgdm9pZCBhdGgxMWtfcGNpX3JlYWRfaHdfdmVyc2lvbihzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiLCB1MzIgKm1ham9yLCB1MzIgKm1pbm9yKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9wY2kuYy05MjMte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvcGNpLmM9OTQ1PXN0YXRpYyBpbnQgYXRoMTFrX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3BjaS5jLTEwMDEtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3BjaS5jOjEwMDI6XHRcdGF0aDExa19wY2lfcmVhZF9od192ZXJzaW9uKGFiLCBcdTAwMjZzb2NfaHdfdmVyc2lvbl9tYWpvcixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvcGNpLmMtMTAwMy1cdFx0XHRcdFx0ICAgXHUwMDI2c29jX2h3X3ZlcnNpb25fbWlub3IpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvcGNpLmMtMTAzMC1cdFx0YWItXHUwMDNlaWQuYmRmX3NlYXJjaCA9IEFUSDExS19CREZfU0VBUkNIX0JVU19BTkRfQk9BUkQ7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3BjaS5jOjEwMzE6XHRcdGF0aDExa19wY2lfcmVhZF9od192ZXJzaW9uKGFiLCBcdTAwMjZzb2NfaHdfdmVyc2lvbl9tYWpvcixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvcGNpLmMtMTAzMi1cdFx0XHRcdFx0ICAgXHUwMDI2c29jX2h3X3ZlcnNpb25fbWlub3IpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOCAwODoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDEzMwoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYGF0aDExa19wY2lfcmVhZF9od192ZXJzaW9uYCBmdW5jdGlvbi4gSSYjMzk7bSBpbW1lZGlhdGVseSBpbnRlcmVzdGVkIGluIHdoYXQgdGhpcyByb3V0aW5lIGlzIHRyeWluZyB0byBhY2NvbXBsaXNoIOKAkyB0aGUgbmFtZSBzdWdnZXN0cyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGhhcmR3YXJlIHZlcnNpb24gaW5mb3JtYXRpb24sIHByb2JhYmx5IHJlbGF0ZWQgdG8gdGhlIFBDSSBpbnRlcmZhY2UgYW5kIHRoaXMgcGFydGljdWxhciBhdGgxMWsgZHJpdmVyLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcXVpY2tseSBhc2NlcnRhaW4gaXRzIHBsYWNlIHdpdGhpbiB0aGUgYnJvYWRlciBQQ0kgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UuIElzIHRoaXMgcGFydCBvZiBhIHByb2JlIHJvdXRpbmU/IENhbGxlZCBlYXJseSBpbiB0aGUgc2V0dXA/IE9yIGlzIGl0IHNvbWV0aGluZyBhY2Nlc3NlZCBsYXRlciBvbiwgcGVyaGFwcyBmb3IgZGlhZ25vc3RpYyBwdXJwb3NlcyBvciBkdXJpbmcgZmlybXdhcmUgbG9hZGluZz8gVW5kZXJzdGFuZGluZyBpdHMgY29udGV4dCBpcyBjcnVjaWFsLgoKSSBuZWVkIHRvIHNlZSBob3cgdGhlIGhhcmR3YXJlIHZlcnNpb24gaXMgYWN0dWFsbHkgcmVhZC4gQXJlIHdlIHVzaW5nIHN0YW5kYXJkIFBDSSBjb25maWd1cmF0aW9uIHNwYWNlIHJlYWRzPyBPciBhcmUgdGhlcmUgc29tZSBjdXN0b20gcmVnaXN0ZXIgYWNjZXNzZXMgaW52b2x2ZWQgc3BlY2lmaWMgdG8gUXVhbGNvbW0mIzM5O3MgaGFyZHdhcmU/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGVycm9yIGNvbmRpdGlvbnMgSSBzaG91bGQgYmUgb24gdGhlIGxvb2tvdXQgZm9yPyBBbmQgaWYgc28sIGhvdyBpcyB0aGUgZXJyb3IgaGFuZGxlZC4gV2hhdCBpcyB0aGUgZXhwZWN0ZWQgZm9ybWF0IG9mIHRoaXMgJiMzNDt2ZXJzaW9uJiMzNDsgZGF0YT8gSXMgaXQgYSBzaW1wbGUgaW50ZWdlciwgb3IgYSBtb3JlIGNvbXBsZXggc3RydWN0dXJlPyBBcmUgdGhlcmUgaW1wbGljYXRpb25zIGZvciBkZXZpY2UgY29tcGF0aWJpbGl0eSBvciBmZWF0dXJlIHNldHMgYmFzZWQgb24gdGhlIHJlcG9ydGVkIHZlcnNpb24/IEFuZCB3aGF0IGhhcHBlbnMgaWYgdGhlIHJlYWQgZmFpbHM/IERvZXMgaXQgcmV0cnk/IERvZXMgaXQgcHJvdmlkZSBhIG1lYW5pbmdmdWwgZXJyb3IgY29kZSBiYWNrIHRvIHRoZSBjYWxsZXI/IFRoZXNlIGFyZSBhbGwgcXVlc3Rpb25zIHRoYXQgbmVlZCBhbnN3ZXJpbmcuCgpJJiMzOTtkIGFsc28gd2FudCB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgYW55IGhhcmR3YXJlIHZlcnNpb24gY2hlY2tzLCBhbmQgcG90ZW50aWFsIHZlcnNpb24tc3BlY2lmaWMgYmVoYXZpb3JzIHdpdGhpbiB0aGUgZHJpdmVyLiBEb2VzIHRoZSBjb2RlIGJyYW5jaCBiYXNlZCBvbiB0aGUgcmVwb3J0ZWQgaGFyZHdhcmUgdmVyc2lvbj8gQXJlIHRoZXJlIGRpZmZlcmVudCBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZXMsIHJlZ2lzdGVyIHNldHRpbmdzLCBvciBldmVuIGZpcm13YXJlIGxvYWRzIGJhc2VkIG9uIHRoaXMgaW5mb3JtYXRpb24/IEkmIzM5O2xsIG5lZWQgdG8gdHJhY2UgdGhlIGZsb3cgb2YgZXhlY3V0aW9uIGFmdGVyIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLCB0byBzZWUgaG93IHRoZSBoYXJkd2FyZSB2ZXJzaW9uIGlzIGFjdHVhbGx5ICp1c2VkKi4gVGhpcyBoZWxwcyBpZGVudGlmeSBhbnkgYXJlYXMgdGhhdCBjb3VsZCBoYXZlIHBvdGVudGlhbCBjb21wYXRpYmlsaXR5IG9yIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucyBiYXNlZCBvbiB0aGUgdmVyc2lvbiBvZiB0aGUgaGFyZHdhcmUsIG9yIGV2ZW4gaG93IHRoZSBkcml2ZXIgaGFuZGxlcyBkaWZmZXJlbnQgZ2VuZXJhdGlvbnMgb2YgdGhlIFBDSSBpbnRlcmZhY2UuIE92ZXJhbGwsIEkgd2FudCB0byB1bmRlcnN0YW5kIGhvdyBpdCBpZGVudGlmaWVzIGFuZCBpbnRlcmFjdHMgd2l0aCB0aGUgcGh5c2ljYWwgaGFyZHdhcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE4IDA4OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9wY2kuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDkyMiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgOTIyOlx0c3RhdGljIHZvaWQgYXRoMTFrX3BjaV9yZWFkX2h3X3ZlcnNpb24oc3RydWN0IGF0aDExa19iYXNlICphYiwgdTMyICptYWpvciwgdTMyICptaW5vcilcbiA5MjM6XHR7XG4gOTI0Olx0XHR1MzIgc29jX2h3X3ZlcnNpb247XG4gOTI1Olx0XG4gOTI2Olx0XHRzb2NfaHdfdmVyc2lvbiA9IGF0aDExa19wY2ljX3JlYWQzMihhYiwgVENTUl9TT0NfSFdfVkVSU0lPTik7XG4gOTI3Olx0XHQqbWFqb3IgPSBGSUVMRF9HRVQoVENTUl9TT0NfSFdfVkVSU0lPTl9NQUpPUl9NQVNLLFxuIDkyODpcdFx0XHRcdCAgIHNvY19od192ZXJzaW9uKTtcbiA5Mjk6XHRcdCptaW5vciA9IEZJRUxEX0dFVChUQ1NSX1NPQ19IV19WRVJTSU9OX01JTk9SX01BU0ssXG4gOTMwOlx0XHRcdFx0ICAgc29jX2h3X3ZlcnNpb24pO1xuIDkzMTpcdFxuIDkzMjpcdFx0YXRoMTFrX2RiZyhhYiwgQVRIMTFLX0RCR19QQ0ksIFwmIzM0O3Rjc3Jfc29jX2h3X3ZlcnNpb24gbWFqb3IgJWQgbWlub3IgJWRcXG5cJiMzNDssXG4gOTMzOlx0XHRcdCAgICptYWpvciwgKm1pbm9yKTtcbiA5MzQ6XHR9XG4gOTM1Olx0XG4gOTM2Olx0c3RhdGljIGludCBhdGgxMWtfcGNpX3NldF9pcnFfYWZmaW5pdHlfaGludChzdHJ1Y3QgYXRoMTFrX3BjaSAqYWJfcGNpLFxuIDkzNzpcdFx0XHRcdFx0XHQgICAgY29uc3Qgc3RydWN0IGNwdW1hc2sgKm0pXG4gOTM4Olx0e1xuIDkzOTpcdFx0aWYgKHRlc3RfYml0KEFUSDExS19GTEFHX01VTFRJX01TSV9WRUNUT1JTLCBcdTAwMjZhYl9wY2ktXHUwMDNlYWItXHUwMDNlZGV2X2ZsYWdzKSlcbiA5NDA6XHRcdFx0cmV0dXJuIDA7XG4gOTQxOlx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE4IDA4OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0OTkwCgkJCQkJCQlvdXRwdXQ6IDQ3CgkJCQkJCQl0aG91Z2h0czogMzYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBQQ0kgUHJvYmUgVnVsbmVyYWJpbGl0aWVzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBhdGgxMWtfcGNpX3Byb2JlYCBmdW5jdGlvbiBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIFBDSSBtZW1vcnktbWFwcGVkIEkvTy4gVGhlIGBhdGgxMWtfcGNpY19yZWFkMzJgIGZ1bmN0aW9uIGlzIHRoZSBrZXkgaGVyZTsgaXQmIzM5O3MgcmVhZGluZyBmcm9tIFBDSSBtZW1vcnksIGFuZCB3ZSBrbm93IHRoYXQgU3l6a2FsbGVyJiMzOTtzIHZpcnR1YWwgUENJIGRldmljZSBjYW4gaW5qZWN0IGFyYml0cmFyeSB2YWx1ZXMgZHVyaW5nIHRoZXNlIHJlYWRzLiBUaGF0JiMzOTtzIGltbWVkaWF0ZWx5IGludGVyZXN0aW5nLgoKU3BlY2lmaWNhbGx5LCBJIHNlZSB0aGF0IHRoZSBgc29jX2h3X3ZlcnNpb25fbWFqb3JgIHZhcmlhYmxlIGlzIHJlYWQgZnJvbSBQQ0ksIGFuZCBpdCYjMzk7cyB1c2VkIGluIGEgc3dpdGNoIHN0YXRlbWVudC4gVGhlIGNyaXRpY2FsIHBhdGggcmVxdWlyZXMgdGhpcyB2YWx1ZSB0byBiZSBgMmAgZm9yIHRoZSBwcm9iZSB0byBjb250aW51ZSBhbmQgc2V0IGBhYi0mZ3Q7aHdfcmV2YCBjb3JyZWN0bHkuIFRoZSByZWFsIHZ1bG5lcmFiaWxpdHkgc3RlbXMgZnJvbSB0aGUgZmFjdCB0aGF0IFN5emthbGxlciBjYW4sIGdpdmVuIGVub3VnaCBhdHRlbXB0cywgbWFuaXB1bGF0ZSB0aGVzZSB2YWx1ZXMhCgpNeSBpbml0aWFsIHRob3VnaHQgd2FzLCAmIzM0O1doYXQgaWYgaXQgKmRvZXNuJiMzOTt0KiByZXR1cm4gYDJgPyYjMzQ7IEJ1dCB0aGVuIGl0IGhpdHMgbWU6IFN5emthbGxlciBpcyBmdXp6aW5nIHRoZXNlIHJlYWRzLiBJdCB3aWxsIGV2ZW50dWFsbHkgZmluZCBhIHZhbHVlIGZvciBgc29jX2h3X3ZlcnNpb25fbWFqb3JgIHRoYXQgYWxsb3dzIGl0IHRvIHBhc3MgdGhlIGNoZWNrLiBUaHVzLCB0aGlzIGJyYW5jaCBpcyAqZGVmaW5pdGVseSogcmVhY2hhYmxlLiBUaGlzIGJ5cGFzc2VzIHRoZSBpbnRlbmRlZCBoYXJkd2FyZSB2ZXJzaW9uIGNoZWNrLCBhbmQgY291bGQgbGVhZCB0byBpc3N1ZXMgbGF0ZXIgb24gaW4gdGhlIGRyaXZlciYjMzk7cyBleGVjdXRpb24uCgpTbywgdGhpcyBsb29rcyBsaWtlIGEgcG90ZW50aWFsIHBhdGggdG8gdHJpZ2dlciBzb21lIHNvcnQgb2YgdW5leHBlY3RlZCBiZWhhdmlvciBvciBidWcuIE15IG5leHQgc3RlcD8gSSBuZWVkIHRvIGNoZWNrIGBhdGgxMmtfcGNpX3Byb2JlYCB0byBzZWUgaWYgaXQgaGFzIHNpbWlsYXIgY2hlY2tzIGFuZCB3aGV0aGVyIHRoaXMga2luZCBvZiB2dWxuZXJhYmlsaXR5IGlzIHByZXNlbnQgdGhlcmUgYXMgd2VsbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTggMDg6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTUyNCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTUyNDpcdHN0YXRpYyBpbnQgYXRoMTJrX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbjE1MjU6XHRcdFx0XHQgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBjaV9kZXYpXG4xNTI2Olx0e1xuMTUyNzpcdFx0ZW51bSBhdGgxMmtfZGV2aWNlX2ZhbWlseSBkZXZpY2VfaWQ7XG4xNTI4Olx0XHRzdHJ1Y3QgYXRoMTJrX3BjaSAqYWJfcGNpO1xuMTUyOTpcdFx0c3RydWN0IGF0aDEya19iYXNlICphYjtcbjE1MzA6XHRcdGludCByZXQ7XG4xNTMxOlx0XG4xNTMyOlx0XHRhYiA9IGF0aDEya19jb3JlX2FsbG9jKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBzaXplb2YoKmFiX3BjaSksIEFUSDEyS19CVVNfUENJKTtcbjE1MzM6XHRcdGlmICghYWIpIHtcbjE1MzQ6XHRcdFx0ZGV2X2VycihcdTAwMjZwZGV2LVx1MDAzZWRldiwgXCYjMzQ7ZmFpbGVkIHRvIGFsbG9jYXRlIGF0aDEyayBiYXNlXFxuXCYjMzQ7KTtcbjE1MzU6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4xNTM2Olx0XHR9XG4xNTM3Olx0XG4xNTM4Olx0XHRhYi1cdTAwM2VkZXYgPSBcdTAwMjZwZGV2LVx1MDAzZWRldjtcbjE1Mzk6XHRcdGFiX3BjaSA9IGF0aDEya19wY2lfcHJpdihhYik7XG4xNTQwOlx0XHRhYl9wY2ktXHUwMDNlZGV2X2lkID0gcGNpX2Rldi1cdTAwM2VkZXZpY2U7XG4xNTQxOlx0XHRhYl9wY2ktXHUwMDNlYWIgPSBhYjtcbjE1NDI6XHRcdGFiX3BjaS1cdTAwM2VwZGV2ID0gcGRldjtcbjE1NDM6XHRcdGFiLVx1MDAzZWhpZi5vcHMgPSBcdTAwMjZhdGgxMmtfcGNpX2hpZl9vcHM7XG4xNTQ0Olx0XHRhYi1cdTAwM2Vmd19tb2RlID0gQVRIMTJLX0ZJUk1XQVJFX01PREVfTk9STUFMO1xuMTU0NTpcdFx0cGNpX3NldF9kcnZkYXRhKHBkZXYsIGFiKTtcbjE1NDY6XHRcdHNwaW5fbG9ja19pbml0KFx1MDAyNmFiX3BjaS1cdTAwM2V3aW5kb3dfbG9jayk7XG4xNTQ3Olx0XG4xNTQ4Olx0XHRyZXQgPSBhdGgxMmtfcGNpX2NsYWltKGFiX3BjaSwgcGRldik7XG4xNTQ5Olx0XHRpZiAocmV0KSB7XG4xNTUwOlx0XHRcdGF0aDEya19lcnIoYWIsIFwmIzM0O2ZhaWxlZCB0byBjbGFpbSBkZXZpY2U6ICVkXFxuXCYjMzQ7LCByZXQpO1xuMTU1MTpcdFx0XHRnb3RvIGVycl9mcmVlX2NvcmU7XG4xNTUyOlx0XHR9XG4xNTUzOlx0XG4xNTU0Olx0XHRhdGgxMmtfZGJnKGFiLCBBVEgxMktfREJHX0JPT1QsIFwmIzM0O3BjaSBwcm9iZSAlMDR4OiUwNHggJTA0eDolMDR4XFxuXCYjMzQ7LFxuMTU1NTpcdFx0XHQgICBwZGV2LVx1MDAzZXZlbmRvciwgcGRldi1cdTAwM2VkZXZpY2UsXG4xNTU2Olx0XHRcdCAgIHBkZXYtXHUwMDNlc3Vic3lzdGVtX3ZlbmRvciwgcGRldi1cdTAwM2VzdWJzeXN0ZW1fZGV2aWNlKTtcbjE1NTc6XHRcbjE1NTg6XHRcdGFiLVx1MDAzZWlkLnZlbmRvciA9IHBkZXYtXHUwMDNldmVuZG9yO1xuMTU1OTpcdFx0YWItXHUwMDNlaWQuZGV2aWNlID0gcGRldi1cdTAwM2VkZXZpY2U7XG4xNTYwOlx0XHRhYi1cdTAwM2VpZC5zdWJzeXN0ZW1fdmVuZG9yID0gcGRldi1cdTAwM2VzdWJzeXN0ZW1fdmVuZG9yO1xuMTU2MTpcdFx0YWItXHUwMDNlaWQuc3Vic3lzdGVtX2RldmljZSA9IHBkZXYtXHUwMDNlc3Vic3lzdGVtX2RldmljZTtcbjE1NjI6XHRcbjE1NjM6XHRcdGRldmljZV9pZCA9IGF0aDEya19nZXRfZGV2aWNlX2ZhbWlseShwY2lfZGV2KTtcbjE1NjQ6XHRcdGlmIChkZXZpY2VfaWQgXHUwMDNlPSBBVEgxMktfREVWSUNFX0ZBTUlMWV9NQVgpIHtcbjE1NjU6XHRcdFx0YXRoMTJrX2VycihhYiwgXCYjMzQ7ZmFpbGVkIHRvIGdldCBkZXZpY2UgZmFtaWx5IGlkXFxuXCYjMzQ7KTtcbjE1NjY6XHRcdFx0cmV0ID0gLUVJTlZBTDtcbjE1Njc6XHRcdFx0Z290byBlcnJfcGNpX2ZyZWVfcmVnaW9uO1xuMTU2ODpcdFx0fVxuMTU2OTpcdFxuMTU3MDpcdFx0YXRoMTJrX2RiZyhhYiwgQVRIMTJLX0RCR19QQ0ksIFwmIzM0O1BDSSBkZXZpY2UgZmFtaWx5IGlkOiAlZFxcblwmIzM0OywgZGV2aWNlX2lkKTtcbjE1NzE6XHRcbjE1NzI6XHRcdGFiX3BjaS1cdTAwM2VkZXZpY2VfZmFtaWx5X29wcyA9IFx1MDAyNmF0aDEya19wY2lfZmFtaWx5X2RyaXZlcnNbZGV2aWNlX2lkXS1cdTAwM2VvcHM7XG4xNTczOlx0XHRhYl9wY2ktXHUwMDNlcmVnX2Jhc2UgPSBhdGgxMmtfcGNpX2ZhbWlseV9kcml2ZXJzW2RldmljZV9pZF0tXHUwMDNlcmVnX2Jhc2U7XG4xNTc0Olx0XG4xNTc1Olx0XHQvKiBDYWxsIGRldmljZSBzcGVjaWZpYyBwcm9iZS4gVGhpcyBpcyB0aGUgY2FsbGJhY2sgdGhhdCBjYW5cbjE1NzY6XHRcdCAqIGJlIHVzZWQgdG8gb3ZlcnJpZGUgYW55IG9wcyBpbiBmdXR1cmVcbjE1Nzc6XHRcdCAqIHByb2JlIGlzIHZhbGlkYXRlZCBmb3IgTlVMTCBkdXJpbmcgcmVnaXN0cmF0aW9uLlxuMTU3ODpcdFx0ICovXG4xNTc5Olx0XHRyZXQgPSBhYl9wY2ktXHUwMDNlZGV2aWNlX2ZhbWlseV9vcHMtXHUwMDNlcHJvYmUocGRldiwgcGNpX2Rldik7XG4xNTgwOlx0XHRpZiAocmV0KSB7XG4xNTgxOlx0XHRcdGF0aDEya19lcnIoYWIsIFwmIzM0O2ZhaWxlZCB0byBwcm9iZSBkZXZpY2U6ICVkXFxuXCYjMzQ7LCByZXQpO1xuMTU4MjpcdFx0XHRnb3RvIGVycl9wY2lfZnJlZV9yZWdpb247XG4xNTgzOlx0XHR9XG4xNTg0Olx0XG4xNTg1Olx0XHRyZXQgPSBhdGgxMmtfcGNpX21zaV9hbGxvYyhhYl9wY2kpO1xuMTU4NjpcdFx0aWYgKHJldCkge1xuMTU4NzpcdFx0XHRhdGgxMmtfZXJyKGFiLCBcJiMzNDtmYWlsZWQgdG8gYWxsb2MgbXNpOiAlZFxcblwmIzM0OywgcmV0KTtcbjE1ODg6XHRcdFx0Z290byBlcnJfcGNpX2ZyZWVfcmVnaW9uO1xuMTU4OTpcdFx0fVxuMTU5MDpcdFxuMTU5MTpcdFx0cmV0ID0gYXRoMTJrX2NvcmVfcHJlX2luaXQoYWIpO1xuMTU5MjpcdFx0aWYgKHJldClcbjE1OTM6XHRcdFx0Z290byBlcnJfcGNpX21zaV9mcmVlO1xuMTU5NDpcdFxuMTU5NTpcdFx0cmV0ID0gYXRoMTJrX3BjaV9zZXRfaXJxX2FmZmluaXR5X2hpbnQoYWJfcGNpLCBjcHVtYXNrX29mKDApKTtcbjE1OTY6XHRcdGlmIChyZXQpIHtcbjE1OTc6XHRcdFx0YXRoMTJrX2VycihhYiwgXCYjMzQ7ZmFpbGVkIHRvIHNldCBpcnEgYWZmaW5pdHkgJWRcXG5cJiMzNDssIHJldCk7XG4xNTk4Olx0XHRcdGdvdG8gZXJyX3BjaV9tc2lfZnJlZTtcbjE1OTk6XHRcdH1cbjE2MDA6XHRcbjE2MDE6XHRcdHJldCA9IGF0aDEya19taGlfcmVnaXN0ZXIoYWJfcGNpKTtcbjE2MDI6XHRcdGlmIChyZXQpIHtcbjE2MDM6XHRcdFx0YXRoMTJrX2VycihhYiwgXCYjMzQ7ZmFpbGVkIHRvIHJlZ2lzdGVyIG1oaTogJWRcXG5cJiMzNDssIHJldCk7XG4xNjA0Olx0XHRcdGdvdG8gZXJyX2lycV9hZmZpbml0eV9jbGVhbnVwO1xuMTYwNTpcdFx0fVxuMTYwNjpcdFxuMTYwNzpcdFx0cmV0ID0gYXRoMTJrX2hhbF9zcm5nX2luaXQoYWIpO1xuMTYwODpcdFx0aWYgKHJldClcbjE2MDk6XHRcdFx0Z290byBlcnJfbWhpX3VucmVnaXN0ZXI7XG4xNjEwOlx0XG4xNjExOlx0XHRyZXQgPSBhdGgxMmtfY2VfYWxsb2NfcGlwZXMoYWIpO1xuMTYxMjpcdFx0aWYgKHJldCkge1xuMTYxMzpcdFx0XHRhdGgxMmtfZXJyKGFiLCBcJiMzNDtmYWlsZWQgdG8gYWxsb2NhdGUgY2UgcGlwZXM6ICVkXFxuXCYjMzQ7LCByZXQpO1xuMTYxNDpcdFx0XHRnb3RvIGVycl9oYWxfc3JuZ19kZWluaXQ7XG4xNjE1Olx0XHR9XG4xNjE2Olx0XG4xNjE3Olx0XHRhdGgxMmtfcGNpX2luaXRfcW1pX2NlX2NvbmZpZyhhYik7XG4xNjE4Olx0XG4xNjE5Olx0XHRyZXQgPSBhdGgxMmtfcGNpX2NvbmZpZ19pcnEoYWIpO1xuMTYyMDpcdFx0aWYgKHJldCkge1xuMTYyMTpcdFx0XHRhdGgxMmtfZXJyKGFiLCBcJiMzNDtmYWlsZWQgdG8gY29uZmlnIGlycTogJWRcXG5cJiMzNDssIHJldCk7XG4xNjIyOlx0XHRcdGdvdG8gZXJyX2NlX2ZyZWU7XG4xNjIzOlx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE4IDA4OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3NTIyCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogNDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkRpdmluZyBpbnRvIHRoZSBQcm9iZSBGdW5jdGlvbioqCgpNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgdGhlIHN5c3RlbSBoYXMgY2FsbGVkIGEgc3BlY2lmaWMgZnVuY3Rpb24sIGxpa2VseSBhIHByb2JlIGZ1bmN0aW9uLCB3aGljaCBpcyBhY2Nlc3NlZCB2aWEgdGhlIGBhYl9wY2lgIHN0cnVjdHVyZS4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBoaXR0aW5nIGBhYl9wY2ktJmd0O2RldmljZV9mYW1pbHlfb3BzLSZndDtwcm9iZShwZGV2LCBwY2lfZGV2KWAuIFRoaXMgaXMgYSBwcmV0dHkgc3RhbmRhcmQgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UgZm9yIFBDSSBkZXZpY2VzLiBOb3csIG15IGJyYWluIGltbWVkaWF0ZWx5IGdvZXMgdG8gYGF0aDEya19wY2lfZmFtaWx5X2RyaXZlcnNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBzcGVjaWZpYyBkcml2ZXIgb3IgZmFtaWx5IG9mIGRyaXZlcnMgdGhhdCBsaW5lIGlzIGNhbGxpbmcuIFRpbWUgdG8gZXhhbWluZSBgYXRoMTJrX3BjaV9mYW1pbHlfZHJpdmVyc2AgdG8gc2VlIGhvdyBpdCYjMzk7cyBoYW5kbGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOCAwODoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthdGgxMmtfcGNpX2ZhbWlseV9kcml2ZXJzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtMzYtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jOjM3OnN0YXRpYyBzdHJ1Y3QgYXRoMTJrX3BjaV9kcml2ZXIgKmF0aDEya19wY2lfZmFtaWx5X2RyaXZlcnNbQVRIMTJLX0RFVklDRV9GQU1JTFlfTUFYXTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtMzgtc3RhdGljIGNvbnN0IHN0cnVjdCBhdGgxMmtfbXNpX2NvbmZpZyBtc2lfY29uZmlnX29uZV9tc2kgPSB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYz0xNTAzPWF0aDEya19nZXRfZGV2aWNlX2ZhbWlseShjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqcGNpX2Rldilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE1MDktXHQgICAgIGRldmljZV9mYW1pbHlfaWQgXHUwMDNjIEFUSDEyS19ERVZJQ0VfRkFNSUxZX01BWDsgZGV2aWNlX2ZhbWlseV9pZCYjNDM7JiM0MzspIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM6MTUxMDpcdFx0aWYgKCFhdGgxMmtfcGNpX2ZhbWlseV9kcml2ZXJzW2RldmljZV9mYW1pbHlfaWRdKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xNTExLVx0XHRcdGNvbnRpbnVlO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xNTEyLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYzoxNTEzOlx0XHRpZCA9IGF0aDEya19wY2lfZmFtaWx5X2RyaXZlcnNbZGV2aWNlX2ZhbWlseV9pZF0tXHUwMDNlaWRfdGFibGU7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE1MTQtXHRcdHdoaWxlIChpZC1cdTAwM2VkZXZpY2UpIHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jPTE1MjQ9c3RhdGljIGludCBhdGgxMmtfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtMTU3MS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM6MTU3MjpcdGFiX3BjaS1cdTAwM2VkZXZpY2VfZmFtaWx5X29wcyA9IFx1MDAyNmF0aDEya19wY2lfZmFtaWx5X2RyaXZlcnNbZGV2aWNlX2lkXS1cdTAwM2VvcHM7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jOjE1NzM6XHRhYl9wY2ktXHUwMDNlcmVnX2Jhc2UgPSBhdGgxMmtfcGNpX2ZhbWlseV9kcml2ZXJzW2RldmljZV9pZF0tXHUwMDNlcmVnX2Jhc2U7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE1NzQtXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYz0xODA0PWludCBhdGgxMmtfcGNpX3JlZ2lzdGVyX2RyaXZlcihjb25zdCBlbnVtIGF0aDEya19kZXZpY2VfZmFtaWx5IGRldmljZV9pZCxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE4MTUtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jOjE4MTY6XHRpZiAoYXRoMTJrX3BjaV9mYW1pbHlfZHJpdmVyc1tkZXZpY2VfaWRdKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE4MTctXHRcdHByX2VycihcJiMzNDtEcml2ZXIgYWxyZWFkeSByZWdpc3RlcmVkIGZvciAlZFxcblwmIzM0OywgZGV2aWNlX2lkKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE4MjAtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jOjE4MjE6XHRhdGgxMmtfcGNpX2ZhbWlseV9kcml2ZXJzW2RldmljZV9pZF0gPSBkcml2ZXI7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE4MjItXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jOjE4MjM6XHRwY2lfZHJpdmVyID0gXHUwMDI2YXRoMTJrX3BjaV9mYW1pbHlfZHJpdmVyc1tkZXZpY2VfaWRdLVx1MDAzZWRyaXZlcjtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtMTgyNC1cdHBjaV9kcml2ZXItXHUwMDNlbmFtZSA9IGRyaXZlci1cdTAwM2VuYW1lO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM9MTgzNT12b2lkIGF0aDEya19wY2lfdW5yZWdpc3Rlcl9kcml2ZXIoY29uc3QgZW51bSBhdGgxMmtfZGV2aWNlX2ZhbWlseSBkZXZpY2VfaWQpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xODM3LVx0aWYgKGRldmljZV9pZCBcdTAwM2U9IEFUSDEyS19ERVZJQ0VfRkFNSUxZX01BWCB8fFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYzoxODM4Olx0ICAgICFhdGgxMmtfcGNpX2ZhbWlseV9kcml2ZXJzW2RldmljZV9pZF0pXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE4MzktXHRcdHJldHVybjtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtMTg0MC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM6MTg0MTpcdHBjaV91bnJlZ2lzdGVyX2RyaXZlcihcdTAwMjZhdGgxMmtfcGNpX2ZhbWlseV9kcml2ZXJzW2RldmljZV9pZF0tXHUwMDNlZHJpdmVyKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM6MTg0MjpcdGF0aDEya19wY2lfZmFtaWx5X2RyaXZlcnNbZGV2aWNlX2lkXSA9IE5VTEw7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE4NDMtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOCAwODoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTAxOQoJCQkJCQkJb3V0cHV0OiAxNDMKCQkJCQkJCXRob3VnaHRzOiA1NDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCB0cmFjaW5nIGl0cyBleGVjdXRpb24uIEl0IHNlZW1zIHRoZSBjb3JlIG9mIGl0IGxpZXMgaW4gYWRkcmVzc2luZyBhIHBvdGVudGlhbCByZXNvdXJjZSBsZWFrIHdpdGhpbiB0aGUgYXRoMTFrIGFuZCBhdGgxMmsgZHJpdmVycywgc3BlY2lmaWNhbGx5IGR1cmluZyB0aGUgUU1JIGluaXRpYWxpemF0aW9uIHByb2Nlc3MuIEkgc2VlIHRoYXQgYGF0aDEya19wY2lfcHJvYmVgIGlzIGludm9sdmVkLCB1bHRpbWF0ZWx5IGxlYWRpbmcgdG8gdGhlIGNhbGwgb2YgYGRldmljZV9mYW1pbHlfb3BzLSZndDtwcm9iZWAuIEkgdGhpbmsgSSByZW1lbWJlciBzZWVpbmcgdGhhdCBvbmUgYmVmb3JlLgoKVGhlIGVzc2VuY2Ugb2YgdGhlIGZpeCBpcyBlcnJvciBoYW5kbGluZyB3aXRoaW4gYGF0aDExa19xbWlfaW5pdF9zZXJ2aWNlYCBhbmQgYGF0aDEya19xbWlfaW5pdF9zZXJ2aWNlYC4gSXQgYXBwZWFycyBpZiBgYWxsb2Nfb3JkZXJlZF93b3JrcXVldWVgIG9yIGBxbWlfYWRkX2xvb2t1cGAgZmFpbHMsIHRoZSBwYXRjaCBlbnN1cmVzIHRoZSBRTUkgaGFuZGxlIGdldHMgcmVsZWFzZWQsIHByZXZlbnRpbmcgYSBsZWFrLiBUaGlzIGxvb2tzIGxpa2UgYSBzb2xpZCBmdW5jdGlvbmFsIGNoYW5nZSwgYW5kIGltcG9ydGFudGx5LCBpdCYjMzk7cyByZWFjaGFibGUg4oCTIHBhcnRpY3VsYXJseSB0aHJvdWdoIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgdGhhbmtzIHRvIHN5emthbGxlciYjMzk7cyBQQ0kgZGV2aWNlIGluamVjdGlvbiBjYXBhYmlsaXRpZXMuIFRoYXQgbWFrZXMgaXQgZWFzaWVyIHRvIHRlc3QuCgpJIG5lZWQgdG8gY29uZmlybSB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMuIEluaXRpYWxseSwgSSB0aG91Z2h0IGl0IHdhcyBqdXN0IGBBVEgxMUtgLCBgQVRIMTFLX1BDSWAsIGFuZCBgQVRIMTJLYC4gSG93ZXZlciwgSSBoYXZlIHRvIHJlbWVtYmVyIHRoYXQgYEFUSDExS19QQ0lgIGlzIHRyaXN0YXRlLCBzbyB0aGVyZSBtaWdodCBiZSBvdGhlciByZWxhdGVkIGNvbmZpZ3MuIExldCBtZSBxdWlja2x5IGNoZWNrIHRoZSBgS2NvbmZpZ2AgZm9yIHRoZSBhdGgxMWsgZHJpdmVyIGFnYWluLi4uIEFoLCB5ZXMsIHRoZXJlIGlzIGFsc28gYEFUSDExS19BSEJgLiBJIHdpbGwgbWFrZSBzdXJlIHRvIGFjY291bnQgZm9yIHRoYXQuIEFsc28sIHRoZSBzYW1lIGlzIHRydWUgZm9yIGBBVEgxMktgLCBzaW5jZSBgQVRIMTJLX0FIQmAgaXMgYWxzbyB0aGVyZS4KClVsdGltYXRlbHkgSSB3aWxsIGluY2x1ZGUgYEFUSDExS2AsIGBBVEgxMUtfUENJYCwgYW5kIGBBVEgxMktgIGZvciB0aGlzLiBBY3R1YWxseSwgdGhlIGtleSBvbmVzIGFyZSBgQVRIMTFLYCBhbmQgYEFUSDEyS2AsIGFzIHRoZXkgZm9ybSB0aGUgZm91bmRhdGlvbi4gYEFUSDExS19QQ0lgIGlzIGV4cGxpY2l0bHkgbmVlZGVkIGZvciBQQ0kgc3VwcG9ydCBpbiB0aGF0IGRyaXZlciwgYW5kIGBBVEgxMktgIGluaGVyZW50bHkgaW5jbHVkZXMgUENJIHN1cHBvcnQgYXNzdW1pbmcgYFBDSWAgaXMgYWxzbyBlbmFibGVkLgoKTGV0IG1lIGRvdWJsZS1jaGVjayB0aGUgbmFtaW5nIGZvciB0aG9zZSBjb25maWdzIGp1c3QgdG8gYmUgY29tcGxldGVseSBjZXJ0YWluLiBZZXMsIGBjb25maWcgQVRIMTFLX1BDSWAgYW5kIGBjb25maWcgQVRIMTJLYC4KClRoZSBrZXkgZnVuY3Rpb25zIHRvIGtlZXAgYW4gZXllIG9uIGFyZSBgYXRoMTFrX3FtaV9pbml0X3NlcnZpY2VgIGFuZCBgYXRoMTJrX3FtaV9pbml0X3NlcnZpY2VgLiBUaG9zZSBhcmUgd2hlcmUgdGhlIGZpeCBpcyBjb25jZW50cmF0ZWQuCgpTbywgdG8gc3VtbWFyaXplIG15IHJlYXNvbmluZzogVGhlIHBhdGNoIGlzIGEgZnVuY3Rpb25hbCBmaXggYWRkcmVzc2luZyBhIHBvdGVudGlhbCByZXNvdXJjZSBsZWFrIGluIHRoZSBRTUkgaW5pdGlhbGl6YXRpb24gcGF0aHMgb2YgYXRoMTFrIGFuZCBhdGgxMmsgZHJpdmVycy4gSXQgcHJldmVudHMgdGhlIGxlYWsgYnkgcmVsZWFzaW5nIHRoZSBRTUkgaGFuZGxlIGluIHRoZSBldmVudCB0aGF0IHdvcmtxdWV1ZSBhbGxvY2F0aW9uIG9yIFFNSSBsb29rdXAgYWRkaXRpb24gZmFpbHMuIFRoaXMgY2hhbmdlIGlzIGVmZmVjdGl2ZWx5IHRlc3RhYmxlIHZpYSB2aXJ0dWFsIFBDSSBkZXZpY2UgaW5qZWN0aW9uIGFuZCByZXF1aXJlcyB0aGUgYEFUSDExS2AsIGBBVEgxMUtfUENJYCwgYW5kIGBBVEgxMktgIGNvbmZpZ3VyYXRpb25zICh3aXRoIGEgZm9jdXMgb24gdGhlIGBhdGgxMWtfcW1pX2luaXRfc2VydmljZWAgYW5kIGBhdGgxMmtfcW1pX2luaXRfc2VydmljZWAgZnVuY3Rpb25zKS4gTm93LCBJJiMzOTttIHJlYWR5IHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTggMDg6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FUSDExSyYjMzQ7LAogICAgJiMzNDtBVEgxMUtfUENJJiMzNDssCiAgICAmIzM0O0FUSDEySyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2F0aDExa19xbWlfaW5pdF9zZXJ2aWNlJiMzNDssCiAgICAmIzM0O2F0aDEya19xbWlfaW5pdF9zZXJ2aWNlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgZXJyb3IgaGFuZGxpbmcgdG8gZml4IGEgcmVzb3VyY2UgbGVhayBpbiB0aGUgUU1JIGluaXRpYWxpemF0aW9uIHBhdGggb2YgdGhlIGF0aDExayBhbmQgYXRoMTJrIGRyaXZlcnMuIEl0IHJlbGVhc2VzIHRoZSBRTUkgaGFuZGxlIGlmIHdvcmtxdWV1ZSBhbGxvY2F0aW9uIG9yIFFNSSBsb29rdXAgYWRkaXRpb24gZmFpbHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGNhbiBiZSByZWFjaGVkIGFuZCB0ZXN0ZWQgdmlhIHZpcnR1YWwgUENJIGRldmljZSBpbmplY3Rpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FUSDExSyYjMzQ7LAogICAgJiMzNDtBVEgxMUtfUENJJiMzNDssCiAgICAmIzM0O0FUSDEySyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2F0aDExa19xbWlfaW5pdF9zZXJ2aWNlJiMzNDssCiAgICAmIzM0O2F0aDEya19xbWlfaW5pdF9zZXJ2aWNlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgZXJyb3IgaGFuZGxpbmcgdG8gZml4IGEgcmVzb3VyY2UgbGVhayBpbiB0aGUgUU1JIGluaXRpYWxpemF0aW9uIHBhdGggb2YgdGhlIGF0aDExayBhbmQgYXRoMTJrIGRyaXZlcnMuIEl0IHJlbGVhc2VzIHRoZSBRTUkgaGFuZGxlIGlmIHdvcmtxdWV1ZSBhbGxvY2F0aW9uIG9yIFFNSSBsb29rdXAgYWRkaXRpb24gZmFpbHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGNhbiBiZSByZWFjaGVkIGFuZCB0ZXN0ZWQgdmlhIHZpcnR1YWwgUENJIGRldmljZSBpbmplY3Rpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0xOFQwODoyMjozOS44ODE1NjM0MjdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjM3ODI5OTE0NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQVRIMTFLXCIsXG4gICAgXCJBVEgxMUtfUENJXCIsXG4gICAgXCJBVEgxMktcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhdGgxMWtfcW1pX2luaXRfc2VydmljZVwiLFxuICAgIFwiYXRoMTJrX3FtaV9pbml0X3NlcnZpY2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGVycm9yIGhhbmRsaW5nIHRvIGZpeCBhIHJlc291cmNlIGxlYWsgaW4gdGhlIFFNSSBpbml0aWFsaXphdGlvbiBwYXRoIG9mIHRoZSBhdGgxMWsgYW5kIGF0aDEyayBkcml2ZXJzLiBJdCByZWxlYXNlcyB0aGUgUU1JIGhhbmRsZSBpZiB3b3JrcXVldWUgYWxsb2NhdGlvbiBvciBRTUkgbG9va3VwIGFkZGl0aW9uIGZhaWxzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBjYW4gYmUgcmVhY2hlZCBhbmQgdGVzdGVkIHZpYSB2aXJ0dWFsIFBDSSBkZXZpY2UgaW5qZWN0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xOFQwODoyMjozOS44ODE1Njg2OTdaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyMjc3MTM5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGE2YzUzNDczMDZjZmUyNDIwMTllMjMxODA0YWM2MTNlYWE4MzdkZTFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBKdWwgMTggMDg6MjI6MzggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9xbWkuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvcW1pLmNcXG5pbmRleCA0MTBhN2VlMDc2YTAyNi4uNmUzZjgyMTY5ZDI0MWIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9xbWkuY1xcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvcW1pLmNcXG5AQCAtMzMyOSw3ICszMzI5LDggQEAgaW50IGF0aDExa19xbWlfaW5pdF9zZXJ2aWNlKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXFxuIFxcdGFiLVxcdTAwM2VxbWkuZXZlbnRfd3EgPSBhbGxvY19vcmRlcmVkX3dvcmtxdWV1ZShcXFwiYXRoMTFrX3FtaV9kcml2ZXJfZXZlbnRcXFwiLCAwKTtcXG4gXFx0aWYgKCFhYi1cXHUwMDNlcW1pLmV2ZW50X3dxKSB7XFxuIFxcdFxcdGF0aDExa19lcnIoYWIsIFxcXCJmYWlsZWQgdG8gYWxsb2NhdGUgd29ya3F1ZXVlXFxcXG5cXFwiKTtcXG4tXFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuK1xcdFxcdHJldCA9IC1FRkFVTFQ7XFxuK1xcdFxcdGdvdG8gZXJyX3JlbGVhc2VfcW1pX2hhbmRsZTtcXG4gXFx0fVxcbiBcXG4gXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNmFiLVxcdTAwM2VxbWkuZXZlbnRfbGlzdCk7XFxuQEAgLTMzNDIsOSArMzM0MywxNCBAQCBpbnQgYXRoMTFrX3FtaV9pbml0X3NlcnZpY2Uoc3RydWN0IGF0aDExa19iYXNlICphYilcXG4gXFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4gXFx0XFx0YXRoMTFrX3dhcm4oYWIsIFxcXCJmYWlsZWQgdG8gYWRkIHFtaSBsb29rdXA6ICVkXFxcXG5cXFwiLCByZXQpO1xcbiBcXHRcXHRkZXN0cm95X3dvcmtxdWV1ZShhYi1cXHUwMDNlcW1pLmV2ZW50X3dxKTtcXG4tXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0Z290byBlcnJfcmVsZWFzZV9xbWlfaGFuZGxlO1xcbiBcXHR9XFxuIFxcbitcXHRyZXR1cm4gcmV0O1xcbitcXG4rZXJyX3JlbGVhc2VfcW1pX2hhbmRsZTpcXG4rXFx0cW1pX2hhbmRsZV9yZWxlYXNlKFxcdTAwMjZhYi1cXHUwMDNlcW1pLmhhbmRsZSk7XFxuK1xcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuY1xcbmluZGV4IGZkNzYyYjVkN2JiNTk3Li42OTJmMWIyYzIwMzFiNyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5jXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuY1xcbkBAIC00MDQxLDcgKzQwNDEsNiBAQCBpbnQgYXRoMTJrX3FtaV9pbml0X3NlcnZpY2Uoc3RydWN0IGF0aDEya19iYXNlICphYilcXG4gXFxuIFxcdG1lbXNldChcXHUwMDI2YWItXFx1MDAzZXFtaS50YXJnZXQsIDAsIHNpemVvZihzdHJ1Y3QgdGFyZ2V0X2luZm8pKTtcXG4gXFx0bWVtc2V0KFxcdTAwMjZhYi1cXHUwMDNlcW1pLnRhcmdldF9tZW0sIDAsIHNpemVvZihzdHJ1Y3QgdGFyZ2V0X21lbV9jaHVuaykpO1xcbi1cXHRhYi1cXHUwMDNlcW1pLmFiID0gYWI7XFxuIFxcbiBcXHRhYi1cXHUwMDNlcW1pLnRhcmdldF9tZW1fbW9kZSA9IGFiLVxcdTAwM2V0YXJnZXRfbWVtX21vZGU7XFxuIFxcdHJldCA9IHFtaV9oYW5kbGVfaW5pdChcXHUwMDI2YWItXFx1MDAzZXFtaS5oYW5kbGUsIEFUSDEyS19RTUlfUkVTUF9MRU5fTUFYLFxcbkBAIC00MDU0LDcgKzQwNTMsOCBAQCBpbnQgYXRoMTJrX3FtaV9pbml0X3NlcnZpY2Uoc3RydWN0IGF0aDEya19iYXNlICphYilcXG4gXFx0YWItXFx1MDAzZXFtaS5ldmVudF93cSA9IGFsbG9jX29yZGVyZWRfd29ya3F1ZXVlKFxcXCJhdGgxMmtfcW1pX2RyaXZlcl9ldmVudFxcXCIsIDApO1xcbiBcXHRpZiAoIWFiLVxcdTAwM2VxbWkuZXZlbnRfd3EpIHtcXG4gXFx0XFx0YXRoMTJrX2VycihhYiwgXFxcImZhaWxlZCB0byBhbGxvY2F0ZSB3b3JrcXVldWVcXFxcblxcXCIpO1xcbi1cXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4rXFx0XFx0cmV0ID0gLUVGQVVMVDtcXG4rXFx0XFx0Z290byBlcnJfcmVsZWFzZV9xbWlfaGFuZGxlO1xcbiBcXHR9XFxuIFxcbiBcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2YWItXFx1MDAzZXFtaS5ldmVudF9saXN0KTtcXG5AQCAtNDA2Nyw5ICs0MDY3LDE2IEBAIGludCBhdGgxMmtfcW1pX2luaXRfc2VydmljZShzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxcbiBcXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbiBcXHRcXHRhdGgxMmtfd2FybihhYiwgXFxcImZhaWxlZCB0byBhZGQgcW1pIGxvb2t1cFxcXFxuXFxcIik7XFxuIFxcdFxcdGRlc3Ryb3lfd29ya3F1ZXVlKGFiLVxcdTAwM2VxbWkuZXZlbnRfd3EpO1xcbi1cXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRcXHRnb3RvIGVycl9yZWxlYXNlX3FtaV9oYW5kbGU7XFxuIFxcdH1cXG4gXFxuK1xcdGFiLVxcdTAwM2VxbWkuYWIgPSBhYjtcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK1xcbitlcnJfcmVsZWFzZV9xbWlfaGFuZGxlOlxcbitcXHRxbWlfaGFuZGxlX3JlbGVhc2UoXFx1MDAyNmFiLVxcdTAwM2VxbWkuaGFuZGxlKTtcXG4rXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE4VDA4OjIyOjQwLjMwNTAzNjE0OVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTIzMzU5NTEwNTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkFUSDExS1wiLFxuICAgIFwiQVRIMTFLX1BDSVwiLFxuICAgIFwiQVRIMTJLXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYXRoMTFrX3FtaV9pbml0X3NlcnZpY2VcIixcbiAgICBcImF0aDEya19xbWlfaW5pdF9zZXJ2aWNlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBlcnJvciBoYW5kbGluZyB0byBmaXggYSByZXNvdXJjZSBsZWFrIGluIHRoZSBRTUkgaW5pdGlhbGl6YXRpb24gcGF0aCBvZiB0aGUgYXRoMTFrIGFuZCBhdGgxMmsgZHJpdmVycy4gSXQgcmVsZWFzZXMgdGhlIFFNSSBoYW5kbGUgaWYgd29ya3F1ZXVlIGFsbG9jYXRpb24gb3IgUU1JIGxvb2t1cCBhZGRpdGlvbiBmYWlscy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgY2FuIGJlIHJlYWNoZWQgYW5kIHRlc3RlZCB2aWEgdmlydHVhbCBQQ0kgZGV2aWNlIGluamVjdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhNmM1MzQ3MzA2Y2ZlMjQyMDE5ZTIzMTgwNGFjNjEzZWFhODM3ZGUxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBKdWwgMTggMDg6MjI6MzggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3FtaS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9xbWkuY1xuaW5kZXggNDEwYTdlZTA3NmEwMjYuLjZlM2Y4MjE2OWQyNDFiIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9xbWkuY1xuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9xbWkuY1xuQEAgLTMzMjksNyArMzMyOSw4IEBAIGludCBhdGgxMWtfcW1pX2luaXRfc2VydmljZShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxuIFx0YWItXHUwMDNlcW1pLmV2ZW50X3dxID0gYWxsb2Nfb3JkZXJlZF93b3JrcXVldWUoXCJhdGgxMWtfcW1pX2RyaXZlcl9ldmVudFwiLCAwKTtcbiBcdGlmICghYWItXHUwMDNlcW1pLmV2ZW50X3dxKSB7XG4gXHRcdGF0aDExa19lcnIoYWIsIFwiZmFpbGVkIHRvIGFsbG9jYXRlIHdvcmtxdWV1ZVxcblwiKTtcbi1cdFx0cmV0dXJuIC1FRkFVTFQ7XG4rXHRcdHJldCA9IC1FRkFVTFQ7XG4rXHRcdGdvdG8gZXJyX3JlbGVhc2VfcW1pX2hhbmRsZTtcbiBcdH1cbiBcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNmFiLVx1MDAzZXFtaS5ldmVudF9saXN0KTtcbkBAIC0zMzQyLDkgKzMzNDMsMTQgQEAgaW50IGF0aDExa19xbWlfaW5pdF9zZXJ2aWNlKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXG4gXHRpZiAocmV0IFx1MDAzYyAwKSB7XG4gXHRcdGF0aDExa193YXJuKGFiLCBcImZhaWxlZCB0byBhZGQgcW1pIGxvb2t1cDogJWRcXG5cIiwgcmV0KTtcbiBcdFx0ZGVzdHJveV93b3JrcXVldWUoYWItXHUwMDNlcW1pLmV2ZW50X3dxKTtcbi1cdFx0cmV0dXJuIHJldDtcbitcdFx0Z290byBlcnJfcmVsZWFzZV9xbWlfaGFuZGxlO1xuIFx0fVxuIFxuK1x0cmV0dXJuIHJldDtcbitcbitlcnJfcmVsZWFzZV9xbWlfaGFuZGxlOlxuK1x0cW1pX2hhbmRsZV9yZWxlYXNlKFx1MDAyNmFiLVx1MDAzZXFtaS5oYW5kbGUpO1xuK1xuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmNcbmluZGV4IGZkNzYyYjVkN2JiNTk3Li42OTJmMWIyYzIwMzFiNyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmNcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmNcbkBAIC00MDQxLDcgKzQwNDEsNiBAQCBpbnQgYXRoMTJrX3FtaV9pbml0X3NlcnZpY2Uoc3RydWN0IGF0aDEya19iYXNlICphYilcbiBcbiBcdG1lbXNldChcdTAwMjZhYi1cdTAwM2VxbWkudGFyZ2V0LCAwLCBzaXplb2Yoc3RydWN0IHRhcmdldF9pbmZvKSk7XG4gXHRtZW1zZXQoXHUwMDI2YWItXHUwMDNlcW1pLnRhcmdldF9tZW0sIDAsIHNpemVvZihzdHJ1Y3QgdGFyZ2V0X21lbV9jaHVuaykpO1xuLVx0YWItXHUwMDNlcW1pLmFiID0gYWI7XG4gXG4gXHRhYi1cdTAwM2VxbWkudGFyZ2V0X21lbV9tb2RlID0gYWItXHUwMDNldGFyZ2V0X21lbV9tb2RlO1xuIFx0cmV0ID0gcW1pX2hhbmRsZV9pbml0KFx1MDAyNmFiLVx1MDAzZXFtaS5oYW5kbGUsIEFUSDEyS19RTUlfUkVTUF9MRU5fTUFYLFxuQEAgLTQwNTQsNyArNDA1Myw4IEBAIGludCBhdGgxMmtfcW1pX2luaXRfc2VydmljZShzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxuIFx0YWItXHUwMDNlcW1pLmV2ZW50X3dxID0gYWxsb2Nfb3JkZXJlZF93b3JrcXVldWUoXCJhdGgxMmtfcW1pX2RyaXZlcl9ldmVudFwiLCAwKTtcbiBcdGlmICghYWItXHUwMDNlcW1pLmV2ZW50X3dxKSB7XG4gXHRcdGF0aDEya19lcnIoYWIsIFwiZmFpbGVkIHRvIGFsbG9jYXRlIHdvcmtxdWV1ZVxcblwiKTtcbi1cdFx0cmV0dXJuIC1FRkFVTFQ7XG4rXHRcdHJldCA9IC1FRkFVTFQ7XG4rXHRcdGdvdG8gZXJyX3JlbGVhc2VfcW1pX2hhbmRsZTtcbiBcdH1cbiBcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNmFiLVx1MDAzZXFtaS5ldmVudF9saXN0KTtcbkBAIC00MDY3LDkgKzQwNjcsMTYgQEAgaW50IGF0aDEya19xbWlfaW5pdF9zZXJ2aWNlKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXG4gXHRpZiAocmV0IFx1MDAzYyAwKSB7XG4gXHRcdGF0aDEya193YXJuKGFiLCBcImZhaWxlZCB0byBhZGQgcW1pIGxvb2t1cFxcblwiKTtcbiBcdFx0ZGVzdHJveV93b3JrcXVldWUoYWItXHUwMDNlcW1pLmV2ZW50X3dxKTtcbi1cdFx0cmV0dXJuIHJldDtcbitcdFx0Z290byBlcnJfcmVsZWFzZV9xbWlfaGFuZGxlO1xuIFx0fVxuIFxuK1x0YWItXHUwMDNlcW1pLmFiID0gYWI7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK1xuK2Vycl9yZWxlYXNlX3FtaV9oYW5kbGU6XG4rXHRxbWlfaGFuZGxlX3JlbGVhc2UoXHUwMDI2YWItXHUwMDNlcW1pLmhhbmRsZSk7XG4rXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE4VDA4OjIyOjQwLjMwNTAzNzQ2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjIxMjQ0NTAwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQYXRjaCBmb3IgUXVhbGNvbW0gQXRoZXJvcyBXaXJlbGVzcyBEcml2ZXJzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQncyB0b3VjaGluZyBgYXRoMTFrX3FtaV9pbml0X3NlcnZpY2VgIGFuZCBgYXRoMTJrX3FtaV9pbml0X3NlcnZpY2VgIOKAkyBib3RoIFFNSSBpbml0aWFsaXphdGlvbiBmdW5jdGlvbnMgd2l0aGluIHRoZSBgYXRoMTFrYCBhbmQgYGF0aDEya2AgZHJpdmVycy4gSXQgc2VlbXMgdGhleSdyZSBhZGRpbmcgc29tZSBlcnJvciBoYW5kbGluZyB0byBncmFjZWZ1bGx5IHJlbGVhc2UgdGhlIFFNSSBoYW5kbGUgaWYgZWl0aGVyIGBhbGxvY19vcmRlcmVkX3dvcmtxdWV1ZWAgb3IgYHFtaV9hZGRfbG9va3VwYCBmYWlsLiBUaGF0J3MgZ29vZCwgcHJldmVudGluZyByZXNvdXJjZSBsZWFrcyBpcyBhbHdheXMgaW1wb3J0YW50LiBJIGFsc28gc2VlIHRoYXQgaW4gdGhlIGBhdGgxMmtgIGZ1bmN0aW9uLCBgYWItXHUwMDNlcW1pLmFiID0gYWI7YCBpcyBtb3ZlZCB0byB0aGUgZW5kLiBJIHdvbmRlciB3aHkgdGhhdCB3YXMgZGVlbWVkIG5lY2Vzc2FyeS5cblxuTm93LCBhIGNyaXRpY2FsIHBvaW50IGNvbWVzIHRvIG1pbmQuIFRoZXNlIGFyZSBoYXJkd2FyZSBkcml2ZXJzLiBTcGVjaWZpY2FsbHkgZm9yIFF1YWxjb21tIEF0aGVyb3Mgd2lyZWxlc3MgY2hpcHMsIGxpa2UgYXRoMTFrIGFuZCBhdGgxMmsuIFRoZSBiaWcgcXVlc3Rpb24gaXMgd2hldGhlciB0aGlzIGNvZGUgaXMgZXZlbiAqcmVsZXZhbnQqIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIFVzdWFsbHksIHlvdSBkb24ndCBzZWUgZGlyZWN0IGVtdWxhdGlvbiBvZiBQQ0kgb3IgQUhCIGRldmljZXMgdW5sZXNzIGEgc3BlY2lmaWMgZW11bGF0b3IgaGFzIGJlZW4gc2V0IHVwLCBsaWtlIG1hYzgwMjExX2h3c2ltLCBidXQgdGhhdCdzIGZvciBnZW5lcmljIG1hYzgwMjExLCBub3QgdGhlc2Ugc3BlY2lmaWMgaGFyZHdhcmUgZHJpdmVycy4gSSBkb24ndCByZWNhbGwgYW55IHN0YW5kYXJkIHNvZnR3YXJlIGVtdWxhdGlvbiBmb3IgYXRoMTFrIG9yIGF0aDEyay5cblxuU28sIGxldCBtZSBjbGFyaWZ5OiBhcmUgdGhlc2UgZHJpdmVycyBzdHJpY3RseSB0aWVkIHRvIHJlYWwgaGFyZHdhcmU/IE9yLCBpcyB0aGVyZSBzb21lIHNvcnQgb2YgdmlydHVhbCBidXMgdGhhdCBjb3VsZCBhbGxvdyBmb3IgdGhlaXIgcHJvYmluZyB3aXRoaW4gYSB2aXJ0dWFsIG1hY2hpbmU/IEknbGwgbmVlZCB0byBjb25maXJtIGlmIHRoZXJlJ3MgYW55IHBhdGh3YXkgdG8gcmVhY2ggdGhlbSBpbiBhIHZpcnR1YWxpemVkIGNvbnRleHQuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgY29kZWJhc2UgZGlyZWN0bHkuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBkaXJlY3Rvcnkgc3RydWN0dXJlcywgc3BlY2lmaWNhbGx5IGBkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2AgYW5kIGBkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2AgYW5kIHNlZSBpZiBhbnl0aGluZyBqdW1wcyBvdXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2OTcsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMzcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xOFQwODoyMjo0Ni41MTc0ODU4MTdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk4NTgyNjIxMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhdGgxMWtfcW1pX2luaXRfc2VydmljZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2NvcmUuYz0xOTg1PXN0YXRpYyBpbnQgYXRoMTFrX2NvcmVfc29jX2NyZWF0ZShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9jb3JlLmMtMTk5My1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2NvcmUuYzoxOTk0OlxcdHJldCA9IGF0aDExa19xbWlfaW5pdF9zZXJ2aWNlKGFiKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2NvcmUuYy0xOTk1LVxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvcW1pLmM9MzIwNz1zdGF0aWMgdm9pZCBhdGgxMWtfcW1pX2RyaXZlcl9ldmVudF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvcW1pLmMtMzMxMi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3FtaS5jOjMzMTM6aW50IGF0aDExa19xbWlfaW5pdF9zZXJ2aWNlKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9xbWkuYy0zMzE0LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvcW1pLmg9NTIwPXZvaWQgYXRoMTFrX3FtaV9kZWluaXRfc2VydmljZShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3FtaS5oOjUyMTppbnQgYXRoMTFrX3FtaV9pbml0X3NlcnZpY2Uoc3RydWN0IGF0aDExa19iYXNlICphYik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9xbWkuaC01MjItdm9pZCBhdGgxMWtfcW1pX2ZyZWVfcmVzb3VyY2Uoc3RydWN0IGF0aDExa19iYXNlICphYik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE4VDA4OjIyOjQ4LjUwMzMyMjUyOFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI3MjIyODE3MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBgYXRoMTFrX2NvcmVfc29jX2NyZWF0ZWAgRnVuY3Rpb24gQ2FsbCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzIGBhdGgxMWtfY29yZV9zb2NfY3JlYXRlYCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgYW5kIGhvdyBpdCdzIGJlaW5nIHVzZWQuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIHRyYWNlIGl0cyBjYWxsIHBhdGguIFRoaXMgc2hvdWxkIGdpdmUgbWUgdmFsdWFibGUgY29udGV4dCBvbiBpdHMgcHVycG9zZSB3aXRoaW4gdGhlIGJyb2FkZXIgYXRoMTFrIGRyaXZlciBhcmNoaXRlY3R1cmUuIEknbGwgbmVlZCB0byBrbm93IHRoZSBzdXJyb3VuZGluZyBjb2RlIGFuZCB0aGUgc2VxdWVuY2Ugb2YgZXZlbnRzIHRoYXQgbGVhZCB0byB0aGlzIGZ1bmN0aW9uIGJlaW5nIGludm9rZWQuIFRoYXQgc2hvdWxkIGluZm9ybSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzeXN0ZW1zIG9wZXJhdGlvbiBhbmQgaWRlbnRpZnkgYW55IHBvdGVudGlhbCBpc3N1ZXMgb3IgYXJlYXMgZm9yIG9wdGltaXphdGlvbi4gU28sIGxldCdzIHN0YXJ0IGRpZ2dpbmchXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5MDQsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xOFQwODoyMjo1MS4yMjU2MDcxMjFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkwMzM3NDA4NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhdGgxMWtfY29yZV9zb2NfY3JlYXRlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvY29yZS5jPTE5NzM9c3RhdGljIHZvaWQgYXRoMTFrX2NvcmVfc3RvcChzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9jb3JlLmMtMTk4NC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2NvcmUuYzoxOTg1OnN0YXRpYyBpbnQgYXRoMTFrX2NvcmVfc29jX2NyZWF0ZShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvY29yZS5jLTE5ODYte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9jb3JlLmM9MjY4Nj1pbnQgYXRoMTFrX2NvcmVfaW5pdChzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9jb3JlLmMtMjcwNC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2NvcmUuYzoyNzA1OlxcdHJldCA9IGF0aDExa19jb3JlX3NvY19jcmVhdGUoYWIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvY29yZS5jLTI3MDYtXFx0aWYgKHJldCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xOFQwODoyMjo1My4xMjg5ODg4NThaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDU5NjMxNjk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgdGFraW5nIG9uIHRoZSBwZXJzb25hIHlvdSd2ZSBkZXNjcmliZWQ6XG5cbioqSW5pdGlhbCBUaG91Z2h0cyBvbiBgYXRoMTFrX2NvcmVfaW5pdGAqKlxuXG5BbHJpZ2h0LCBzbyBgYXRoMTFrX2NvcmVfaW5pdGAuLi4gbGV0J3MgdGhpbmsgdGhpcyB0aHJvdWdoLiBNeSBmaXJzdCBpbnN0aW5jdCwgYXMgYWx3YXlzLCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiBUaGlzIGlzIGNvcmUgaW5pdGlhbGl6YXRpb24sIHNvIGl0J3MgZm91bmRhdGlvbmFsLiBJdCdzIHRoZSBzdGFydGluZyBwb2ludCBmb3Igd2hhdGV2ZXIgd2UncmUgdGFsa2luZyBhYm91dCwgcHJvYmFibHkgdGhlIGRyaXZlci4gR2l2ZW4gdGhlIG5hbWUsIFwiYXRoMTFrLFwiIEknbSBpbW1lZGlhdGVseSBhc3N1bWluZyB0aGlzIHJlbGF0ZXMgdG8gUXVhbGNvbW0gQXRoZXJvcywgYW5kIG1vc3QgbGlrZWx5IHRoZWlyIDgwMi4xMWF4IChXaS1GaSA2LzZFKSBjaGlwc2V0LCB0aGUgJzExaycgbGlrZWx5IHJlZmVycmluZyB0byB0aGUgZ2VuZXJhdGlvbiBvZiB0aGUgY2hpcHNldC4gSSBuZWVkIHRvIGRpZyBpbnRvIHdoYXQgXCJjb3JlXCIgbWVhbnMgaGVyZS4gSXMgaXQgdGhlIHZlcnkgYmFzaWMgaGFyZHdhcmUgYWJzdHJhY3Rpb24sIHRoZSByZWdpc3RlciBzZXR1cCwgb3IgaXMgaXQgbW9yZSBvZiBhIGRyaXZlci1sZXZlbCBpbmZyYXN0cnVjdHVyZSBpbml0aWFsaXphdGlvbj8gQmFzZWQgb24gdGhlIG5hbWUsIG15IGd1dCBzYXlzIGEgYml0IG9mIGJvdGguIEkgZXhwZWN0IHRvIHNlZSByZWdpc3RlciBtYXBwaW5nLCBjbG9jayBzZXR1cCwgaW50ZXJydXB0IGNvbmZpZ3VyYXRpb24sIGFuZCBtYXliZSBzb21lIGJhc2ljIHJlc291cmNlIGFsbG9jYXRpb24uIFRoaXMgd2lsbCBkZXRlcm1pbmUgaG93IHRoZSByZXN0IG9mIHRoZSBzdGFjayBpbnRlcmFjdHMgd2l0aCB0aGUgZGV2aWNlLCBhbmQgYW55IGVycm9yIGhlcmUgd2lsbCB0cmlja2xlIGRvd24gYW5kIGFmZmVjdCBldmVyeSBvdGhlciBmdW5jdGlvbi4gV2hhdCByZXNvdXJjZXMgYXJlIHdlIHRhbGtpbmcgYWJvdXQgaGVyZT8gTWVtb3J5IHJlZ2lvbnMsIERNQSBjaGFubmVscywgaW50ZXJydXB0cywgcG90ZW50aWFsbHkgZXZlbiBQSFkgc2V0dGluZ3MuIEnigJlsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRldmljZSB0cmVlIGRlcGVuZGVuY2llcy4gV2hhdCBvdGhlciByZWxhdGVkIGZ1bmN0aW9ucyBhcmUgZ29pbmcgdG8gZGVwZW5kIG9uIHRoZSBvdXRwdXQgb2YgdGhpcyBmdW5jdGlvbj8gSG93IHdpbGwgdGhpcyBpbnRlcmFjdCB3aXRoIHRoZSBmaXJtd2FyZSBsb2FkaW5nIHByb2Nlc3MsIGlmIHRoZXJlIGlzIG9uZT8gSSBuZWVkIHRvIHRoaW5rIGFib3V0IHRoYXQgbmV4dC4gSSBuZWVkIHRvIGNvbnNpZGVyIGFsbCBwb3NzaWJsZSBmYWlsdXJlIGNhc2VzLCBhbmQgdGhpbmsgYWJvdXQgdGhlIHJldHVybiBjb2RlcyB0aGF0IG1pZ2h0IGluZGljYXRlIGFuIGVycm9yLiBUaGlzIGlzIGEgY3JpdGljYWwgZnVuY3Rpb24sIHNvIHJvYnVzdCBlcnJvciBoYW5kbGluZyBpcyBwYXJhbW91bnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzODMsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xOFQwODoyMjo1Ni41ODg2MjI1NzNaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTczNDM1OTI4NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhdGgxMWtfY29yZV9pbml0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmM9MTEwNz1zdGF0aWMgaW50IGF0aDExa19haGJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmMtMTE5My1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jOjExOTQ6XFx0cmV0ID0gYXRoMTFrX2NvcmVfaW5pdChhYik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYy0xMTk1LVxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvY29yZS5jPTI2ODQ9RVhQT1JUX1NZTUJPTChhdGgxMWtfY29yZV9wbV9ub3RpZmllcl91bnJlZ2lzdGVyKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2NvcmUuYy0yNjg1LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvY29yZS5jOjI2ODY6aW50IGF0aDExa19jb3JlX2luaXQoc3RydWN0IGF0aDExa19iYXNlICphYilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2NvcmUuYy0yNjg3LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvY29yZS5jLTI3MTctfVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvY29yZS5jOjI3MTg6RVhQT1JUX1NZTUJPTChhdGgxMWtfY29yZV9pbml0KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2NvcmUuYy0yNzE5LVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9jb3JlLmg9MTI3MD1pbnQgYXRoMTFrX2NvcmVfcHJlX2luaXQoc3RydWN0IGF0aDExa19iYXNlICphYik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9jb3JlLmg6MTI3MTppbnQgYXRoMTFrX2NvcmVfaW5pdChzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmF0aDExayk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9jb3JlLmgtMTI3Mi12b2lkIGF0aDExa19jb3JlX2RlaW5pdChzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmF0aDExayk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3BjaS5jPTk0NT1zdGF0aWMgaW50IGF0aDExa19wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3BjaS5jLTExMzUtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9wY2kuYzoxMTM2OlxcdHJldCA9IGF0aDExa19jb3JlX2luaXQoYWIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvcGNpLmMtMTEzNy1cXHRpZiAocmV0KSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE4VDA4OjIyOjU4LjMyMjk4NzEzMVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU1MDY3MzA2OTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSZWFjaGFiaWxpdHkgb2YgYGF0aDExa19jb3JlX2luaXRgKipcblxuT2theSwgc28gYGF0aDExa19jb3JlX2luaXRgIGdldHMgY2FsbGVkIGJ5IGJvdGggYGF0aDExa19haGJfcHJvYmVgIGFuZCBgYXRoMTFrX3BjaV9wcm9iZWAuIE1ha2VzIHNlbnNlIOKAkyBBSEIgYW5kIFBDSSBhcmUgdGhlIGluaXRpYWwgZW50cnkgcG9pbnRzIGZvciBoYXJkd2FyZSBpbnRlcmFjdGlvbi4gVGhlIHByb2JsZW0gaXMsIHdpdGhvdXQgdGhlIGFjdHVhbCBoYXJkd2FyZSwgdGhvc2UgcHJvYmUgZnVuY3Rpb25zIHdvbid0IGJlIGNhbGxlZCwgYW5kIHRoZXJlZm9yZSBteSBtb2RpZmllZCBjb2RlIHdpdGhpbiBgYXRoMTFrX2NvcmVfaW5pdGAgcmVtYWlucyB1bnJlYWNoYWJsZS5cblxuTm93LCB0aGUgcXVlc3Rpb24gaXMgaG93IHRvIHRyaWdnZXIgYSBQQ0kgcHJvYmUgaW4gYSB2aXJ0dWFsIGVudmlyb25tZW50LiBJIGtub3cgc3l6a2FsbGVyIGhhcyBhIHZpcnR1YWwgUENJIGRldmljZSBpbmplY3RvciwgYnV0IGl04oCZcyB1c3VhbGx5IGRlc2lnbmVkIGZvciBzcGVjaWZpYyBmdXp6aW5nIHNldHVwcywgb3IgaW5qZWN0aW5nIGFyYml0cmFyeSBQQ0kgSURzLiBJdCBkb2Vzbid0IHR5cGljYWxseSBlbXVsYXRlIGFsbCB0aGUgY29tcGxleCBoYXJkd2FyZSBpbnRlcmFjdGlvbnMgbmVlZGVkIHRvIGdldCBwYXN0IHRoZSBpbml0aWFsIHByb2JlIHN0ZXBzIHVubGVzcyB0aGUgZHJpdmVyIGlzIHNpbXBsZSBvciBzcGVjaWZpY2FsbHkgc3VwcG9ydGVkLiBXYWl0LCBidXQgdGhhdOKAmXMgbm90IGVudGlyZWx5IGNvcnJlY3QsIGJlY2F1c2Ugc3l6a2FsbGVyICpkb2VzKiBoYXZlIGEgUENJIGZ1enplciB0aGF0IGNhbiBpbmplY3QgYXJiaXRyYXJ5IFBDSSBkZXZpY2VzIGFuZCBmdXp6IHRoZWlyIHByb2JlIGZ1bmN0aW9ucyFcblxuU28sIHRoZSBpZGVhIGlzIHRoaXM6IGlmIHN5emthbGxlciBjYW4gaW5qZWN0IGEgUENJIGRldmljZSB3aXRoIHRoZSBhdGgxMWsgUENJIElELCBgYXRoMTFrX3BjaV9wcm9iZWAgc2hvdWxkIGJlIGNhbGxlZC4gVGhlbiB0aGUgZ29hbCBpcyB0byBtYWtlIHN1cmUgdGhhdCB0aGUgZnVuY3Rpb25zIGluc2lkZSBvZiBgYXRoMTFrX3BjaV9wcm9iZWAgZG8gbm90IHByZXZlbnQgdGhlIGNhbGxpbmcgb2YgYGF0aDExa19jb3JlX2luaXRgLCBJJ2xsIGNoZWNrIGlmIGBhdGgxMWtfcGNpX3Byb2JlYCBjb250YWlucyBhbnl0aGluZyB0aGF0IHdvdWxkIGFjdCBhcyBhIGJsb2NrZXIuIFRoaXMgbG9va3MgbGlrZSB0aGUgbW9zdCBwcm9taXNpbmcgcGF0aCBmb3J3YXJkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NDIxLCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE4VDA4OjIzOjAzLjgyOTcyMDE0NFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc4MTMxODYyNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhdGgxMWtfcGNpX3Byb2JlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvcGNpLmM9OTM2PXN0YXRpYyBpbnQgYXRoMTFrX3BjaV9zZXRfaXJxX2FmZmluaXR5X2hpbnQoc3RydWN0IGF0aDExa19wY2kgKmFiX3BjaSxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvcGNpLmMtOTQ0LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvcGNpLmM6OTQ1OnN0YXRpYyBpbnQgYXRoMTFrX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3BjaS5jLTk0Ni1cXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBjaV9kZXYpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3BjaS5jPTEyOTI9c3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGF0aDExa19wY2lfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9wY2kuYy0xMjk0LVxcdC5pZF90YWJsZSA9IGF0aDExa19wY2lfaWRfdGFibGUsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9wY2kuYzoxMjk1OlxcdC5wcm9iZSA9IGF0aDExa19wY2lfcHJvYmUsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9wY2kuYy0xMjk2LVxcdC5yZW1vdmUgPSBhdGgxMWtfcGNpX3JlbW92ZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMThUMDg6MjM6MDUuNjExMDQzNjY4WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0OTkyOTI1MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBhdGgxMWsgSW5pdGlhbGl6YXRpb24gU2VxdWVuY2UqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSBhbmQgdW5kZXJzdGFuZCB0aGlzIGBhdGgxMWtgIG1vZHVsZSBiZXR0ZXIuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQncyBnb2luZyBvbiBkdXJpbmcgaXRzIFBDSSBwcm9iZS4gVGhlIHN0YXJ0aW5nIHBvaW50IGlzLCBuYXR1cmFsbHksIGBhdGgxMWtfcGNpX3Byb2JlYC4gTXkgcHJpbWFyeSBxdWVzdGlvbiBpcyB3aGV0aGVyIGl0IGRpcmVjdGx5IGluaXRpYXRlcyBgYXRoMTFrX2NvcmVfaW5pdGAsIG9yIGRvZXMgaXQgYnJhbmNoIHRocm91Z2ggYW5vdGhlciBmdW5jdGlvbj8gSSdtIGZhbWlsaWFyIHdpdGggdGhpcyBhcmNoaXRlY3R1cmUsIHNvIEknbSBleHBlY3RpbmcgdGhpcyBwcm9iZSBmdW5jdGlvbiB0byBiZSByZXNwb25zaWJsZSBmb3Igc2V0dGluZyB1cCB0aGUgaW5pdGlhbCBoYXJkd2FyZSBpbnRlcmFjdGlvbnMgYW5kIHRoZW4gbGlrZWx5IGNhbGxpbmcgc29tZSBzb3J0IG9mIGNvcmUgaW5pdGlhbGl6YXRpb24gcm91dGluZS4gSeKAmWxsIGxvb2sgZm9yIHRoZSBjYWxsIGFuZCBob3cgaXQgcGFzc2VzIGFyZ3VtZW50cy4gTXkgaW1tZWRpYXRlIGdvYWwgaXMgdG8gZXN0YWJsaXNoIHRoZSBjb250cm9sIGZsb3cgaGVyZTogZG9lcyB0aGUgcHJvYmUgZnVuY3Rpb24gYWN0IGFzIGEgZGlyZWN0IGVudHJ5IHBvaW50IGZvciBjb3JlIGluaXRpYWxpemF0aW9uPyBUaGlzIHdpbGwgZGljdGF0ZSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBkZXBlbmRlbmN5IHNldHVwIGJldHdlZW4gdGhlIFBDSSBsYXllciBhbmQgdGhlIGNvcmUgZHJpdmVyLiBJIGtub3cgdGhlIGtleSBmdW5jdGlvbnMsIHNvIGxldCdzIHNlZSBob3cgdGhleSByZWxhdGUgaW4gdGhpcyBzcGVjaWZpYyBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MzcxLCJPdXRwdXRUb2tlbnMiOjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMThUMDg6MjM6MDkuMTEwMzM4NDIxWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMTU5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3BjaS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDk0NSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA5NDU6XFx0c3RhdGljIGludCBhdGgxMWtfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbiA5NDY6XFx0XFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpwY2lfZGV2KVxcbiA5NDc6XFx0e1xcbiA5NDg6XFx0XFx0c3RydWN0IGF0aDExa19iYXNlICphYjtcXG4gOTQ5OlxcdFxcdHN0cnVjdCBhdGgxMWtfcGNpICphYl9wY2k7XFxuIDk1MDpcXHRcXHR1MzIgc29jX2h3X3ZlcnNpb25fbWFqb3IsIHNvY19od192ZXJzaW9uX21pbm9yO1xcbiA5NTE6XFx0XFx0aW50IHJldDtcXG4gOTUyOlxcdFxcdHUzMiBzdWJfdmVyc2lvbjtcXG4gOTUzOlxcdFxcbiA5NTQ6XFx0XFx0YWIgPSBhdGgxMWtfY29yZV9hbGxvYyhcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBzaXplb2YoKmFiX3BjaSksIEFUSDExS19CVVNfUENJKTtcXG4gOTU1OlxcdFxcbiA5NTY6XFx0XFx0aWYgKCFhYikge1xcbiA5NTc6XFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXFwiZmFpbGVkIHRvIGFsbG9jYXRlIGF0aDExayBiYXNlXFxcXG5cXFwiKTtcXG4gOTU4OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiA5NTk6XFx0XFx0fVxcbiA5NjA6XFx0XFxuIDk2MTpcXHRcXHRhYi1cXHUwMDNlZGV2ID0gXFx1MDAyNnBkZXYtXFx1MDAzZWRldjtcXG4gOTYyOlxcdFxcdHBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBhYik7XFxuIDk2MzpcXHRcXHRhYl9wY2kgPSBhdGgxMWtfcGNpX3ByaXYoYWIpO1xcbiA5NjQ6XFx0XFx0YWJfcGNpLVxcdTAwM2VkZXZfaWQgPSBwY2lfZGV2LVxcdTAwM2VkZXZpY2U7XFxuIDk2NTpcXHRcXHRhYl9wY2ktXFx1MDAzZWFiID0gYWI7XFxuIDk2NjpcXHRcXHRhYl9wY2ktXFx1MDAzZXBkZXYgPSBwZGV2O1xcbiA5Njc6XFx0XFx0YWItXFx1MDAzZWhpZi5vcHMgPSBcXHUwMDI2YXRoMTFrX3BjaV9oaWZfb3BzO1xcbiA5Njg6XFx0XFx0YWItXFx1MDAzZWZ3X21vZGUgPSBBVEgxMUtfRklSTVdBUkVfTU9ERV9OT1JNQUw7XFxuIDk2OTpcXHRcXHRwY2lfc2V0X2RydmRhdGEocGRldiwgYWIpO1xcbiA5NzA6XFx0XFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNmFiX3BjaS1cXHUwMDNld2luZG93X2xvY2spO1xcbiA5NzE6XFx0XFxuIDk3MjpcXHRcXHQvKiBTZXQgZml4ZWRfbWVtX3JlZ2lvbiB0byB0cnVlIGZvciBwbGF0Zm9ybXMgc3VwcG9ydCByZXNlcnZlZCBtZW1vcnlcXG4gOTczOlxcdFxcdCAqIGZyb20gRFQuIElmIG1lbW9yeSBpcyByZXNlcnZlZCBmcm9tIERUIGZvciBGVywgYXRoMTFrIGRyaXZlciBuZWVkIG5vdFxcbiA5NzQ6XFx0XFx0ICogYWxsb2NhdGUgbWVtb3J5LlxcbiA5NzU6XFx0XFx0ICovXFxuIDk3NjpcXHRcXHRpZiAob2ZfcHJvcGVydHlfcHJlc2VudChhYi1cXHUwMDNlZGV2LVxcdTAwM2VvZl9ub2RlLCBcXFwibWVtb3J5LXJlZ2lvblxcXCIpKVxcbiA5Nzc6XFx0XFx0XFx0c2V0X2JpdChBVEgxMUtfRkxBR19GSVhFRF9NRU1fUkdOLCBcXHUwMDI2YWItXFx1MDAzZWRldl9mbGFncyk7XFxuIDk3ODpcXHRcXG4gOTc5OlxcdFxcdHJldCA9IGF0aDExa19wY2lfY2xhaW0oYWJfcGNpLCBwZGV2KTtcXG4gOTgwOlxcdFxcdGlmIChyZXQpIHtcXG4gOTgxOlxcdFxcdFxcdGF0aDExa19lcnIoYWIsIFxcXCJmYWlsZWQgdG8gY2xhaW0gZGV2aWNlOiAlZFxcXFxuXFxcIiwgcmV0KTtcXG4gOTgyOlxcdFxcdFxcdGdvdG8gZXJyX2ZyZWVfY29yZTtcXG4gOTgzOlxcdFxcdH1cXG4gOTg0OlxcdFxcbiA5ODU6XFx0XFx0YXRoMTFrX2RiZyhhYiwgQVRIMTFLX0RCR19CT09ULCBcXFwicGNpIHByb2JlICUwNHg6JTA0eCAlMDR4OiUwNHhcXFxcblxcXCIsXFxuIDk4NjpcXHRcXHRcXHQgICBwZGV2LVxcdTAwM2V2ZW5kb3IsIHBkZXYtXFx1MDAzZWRldmljZSxcXG4gOTg3OlxcdFxcdFxcdCAgIHBkZXYtXFx1MDAzZXN1YnN5c3RlbV92ZW5kb3IsIHBkZXYtXFx1MDAzZXN1YnN5c3RlbV9kZXZpY2UpO1xcbiA5ODg6XFx0XFxuIDk4OTpcXHRcXHRhYi1cXHUwMDNlaWQudmVuZG9yID0gcGRldi1cXHUwMDNldmVuZG9yO1xcbiA5OTA6XFx0XFx0YWItXFx1MDAzZWlkLmRldmljZSA9IHBkZXYtXFx1MDAzZWRldmljZTtcXG4gOTkxOlxcdFxcdGFiLVxcdTAwM2VpZC5zdWJzeXN0ZW1fdmVuZG9yID0gcGRldi1cXHUwMDNlc3Vic3lzdGVtX3ZlbmRvcjtcXG4gOTkyOlxcdFxcdGFiLVxcdTAwM2VpZC5zdWJzeXN0ZW1fZGV2aWNlID0gcGRldi1cXHUwMDNlc3Vic3lzdGVtX2RldmljZTtcXG4gOTkzOlxcdFxcbiA5OTQ6XFx0XFx0c3dpdGNoIChwY2lfZGV2LVxcdTAwM2VkZXZpY2UpIHtcXG4gOTk1OlxcdFxcdGNhc2UgUUNBNjM5MF9ERVZJQ0VfSUQ6XFxuIDk5NjpcXHRcXHRcXHRyZXQgPSBhdGgxMWtfcGNpY19yZWdpc3Rlcl9wY2lfb3BzKGFiLCBcXHUwMDI2YXRoMTFrX3BjaV9vcHNfcWNhNjM5MCk7XFxuIDk5NzpcXHRcXHRcXHRpZiAocmV0KSB7XFxuIDk5ODpcXHRcXHRcXHRcXHRhdGgxMWtfZXJyKGFiLCBcXFwiZmFpbGVkIHRvIHJlZ2lzdGVyIFBDSSBvcHM6ICVkXFxcXG5cXFwiLCByZXQpO1xcbiA5OTk6XFx0XFx0XFx0XFx0Z290byBlcnJfcGNpX2ZyZWVfcmVnaW9uO1xcbjEwMDA6XFx0XFx0XFx0fVxcbjEwMDE6XFx0XFxuMTAwMjpcXHRcXHRcXHRhdGgxMWtfcGNpX3JlYWRfaHdfdmVyc2lvbihhYiwgXFx1MDAyNnNvY19od192ZXJzaW9uX21ham9yLFxcbjEwMDM6XFx0XFx0XFx0XFx0XFx0XFx0ICAgXFx1MDAyNnNvY19od192ZXJzaW9uX21pbm9yKTtcXG4xMDA0OlxcdFxcdFxcdHN3aXRjaCAoc29jX2h3X3ZlcnNpb25fbWFqb3IpIHtcXG4xMDA1OlxcdFxcdFxcdGNhc2UgMjpcXG4xMDA2OlxcdFxcdFxcdFxcdGFiLVxcdTAwM2Vod19yZXYgPSBBVEgxMUtfSFdfUUNBNjM5MF9IVzIwO1xcbjEwMDc6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMTAwODpcXHRcXHRcXHRkZWZhdWx0OlxcbjEwMDk6XFx0XFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXFwiVW5zdXBwb3J0ZWQgUUNBNjM5MCBTT0MgaGFyZHdhcmUgdmVyc2lvbjogJWQgJWRcXFxcblxcXCIsXFxuMTAxMDpcXHRcXHRcXHRcXHRcXHRzb2NfaHdfdmVyc2lvbl9tYWpvciwgc29jX2h3X3ZlcnNpb25fbWlub3IpO1xcbjEwMTE6XFx0XFx0XFx0XFx0cmV0ID0gLUVPUE5PVFNVUFA7XFxuMTAxMjpcXHRcXHRcXHRcXHRnb3RvIGVycl9wY2lfZnJlZV9yZWdpb247XFxuMTAxMzpcXHRcXHRcXHR9XFxuMTAxNDpcXHRcXG4xMDE1OlxcdFxcdFxcdGJyZWFrO1xcbjEwMTY6XFx0XFx0Y2FzZSBRQ045MDc0X0RFVklDRV9JRDpcXG4xMDE3OlxcdFxcdFxcdHJldCA9IGF0aDExa19wY2ljX3JlZ2lzdGVyX3BjaV9vcHMoYWIsIFxcdTAwMjZhdGgxMWtfcGNpX29wc19xY245MDc0KTtcXG4xMDE4OlxcdFxcdFxcdGlmIChyZXQpIHtcXG4xMDE5OlxcdFxcdFxcdFxcdGF0aDExa19lcnIoYWIsIFxcXCJmYWlsZWQgdG8gcmVnaXN0ZXIgUENJIG9wczogJWRcXFxcblxcXCIsIHJldCk7XFxuMTAyMDpcXHRcXHRcXHRcXHRnb3RvIGVycl9wY2lfZnJlZV9yZWdpb247XFxuMTAyMTpcXHRcXHRcXHR9XFxuMTAyMjpcXHRcXHRcXHRhYi1cXHUwMDNlaHdfcmV2ID0gQVRIMTFLX0hXX1FDTjkwNzRfSFcxMDtcXG4xMDIzOlxcdFxcdFxcdGJyZWFrO1xcbjEwMjQ6XFx0XFx0Y2FzZSBXQ042ODU1X0RFVklDRV9JRDpcXG4xMDI1OlxcdFxcdFxcdHJldCA9IGF0aDExa19wY2ljX3JlZ2lzdGVyX3BjaV9vcHMoYWIsIFxcdTAwMjZhdGgxMWtfcGNpX29wc19xY2E2MzkwKTtcXG4xMDI2OlxcdFxcdFxcdGlmIChyZXQpIHtcXG4xMDI3OlxcdFxcdFxcdFxcdGF0aDExa19lcnIoYWIsIFxcXCJmYWlsZWQgdG8gcmVnaXN0ZXIgUENJIG9wczogJWRcXFxcblxcXCIsIHJldCk7XFxuMTAyODpcXHRcXHRcXHRcXHRnb3RvIGVycl9wY2lfZnJlZV9yZWdpb247XFxuMTAyOTpcXHRcXHRcXHR9XFxuMTAzMDpcXHRcXHRcXHRhYi1cXHUwMDNlaWQuYmRmX3NlYXJjaCA9IEFUSDExS19CREZfU0VBUkNIX0JVU19BTkRfQk9BUkQ7XFxuMTAzMTpcXHRcXHRcXHRhdGgxMWtfcGNpX3JlYWRfaHdfdmVyc2lvbihhYiwgXFx1MDAyNnNvY19od192ZXJzaW9uX21ham9yLFxcbjEwMzI6XFx0XFx0XFx0XFx0XFx0XFx0ICAgXFx1MDAyNnNvY19od192ZXJzaW9uX21pbm9yKTtcXG4xMDMzOlxcdFxcdFxcdHN3aXRjaCAoc29jX2h3X3ZlcnNpb25fbWFqb3IpIHtcXG4xMDM0OlxcdFxcdFxcdGNhc2UgMjpcXG4xMDM1OlxcdFxcdFxcdFxcdHN3aXRjaCAoc29jX2h3X3ZlcnNpb25fbWlub3IpIHtcXG4xMDM2OlxcdFxcdFxcdFxcdGNhc2UgMHgwMDpcXG4xMDM3OlxcdFxcdFxcdFxcdGNhc2UgMHgwMTpcXG4xMDM4OlxcdFxcdFxcdFxcdFxcdGFiLVxcdTAwM2Vod19yZXYgPSBBVEgxMUtfSFdfV0NONjg1NV9IVzIwO1xcbjEwMzk6XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuMTA0MDpcXHRcXHRcXHRcXHRjYXNlIDB4MTA6XFxuMTA0MTpcXHRcXHRcXHRcXHRjYXNlIDB4MTE6XFxuMTA0MjpcXHRcXHRcXHRcXHRcXHRzdWJfdmVyc2lvbiA9IGF0aDExa19wY2ljX3JlYWQzMihhYiwgVENTUl9TT0NfSFdfU1VCX1ZFUik7XFxuMTA0MzpcXHRcXHRcXHRcXHRcXHRhdGgxMWtfZGJnKGFiLCBBVEgxMUtfREJHX1BDSSwgXFxcInN1Yl92ZXJzaW9uIDB4JXhcXFxcblxcXCIsXFxuMTA0NDpcXHRcXHRcXHRcXHRcXHRcXHQgICBzdWJfdmVyc2lvbik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE4VDA4OjIzOjA5LjExMDQ3MTIzMloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjMwMjkwMDk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2Ygd2hhdCdzIGdvaW5nIHRocm91Z2ggbXkgbWluZCBhcyBJIGFwcHJvYWNoIHRoZSBjb2RlLCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb24sIGFuZCB0YWlsb3JlZCBmb3IgYSBmZWxsb3cgZXhwZXJ0OlxuXG4qKkRpdmluZyBpbnRvIGBhdGgxMWtfcGNpX3Byb2JlYCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhlIGd1dHMgb2YgdGhlIGBhdGgxMWtfcGNpX3Byb2JlYCBmdW5jdGlvbi4gSSBzZWUgaXQncyB0aGUgUENJIHByb2JlIHJvdXRpbmUgZm9yIHRoZSBhdGgxMWsgZHJpdmVyIOKAkyB0aGF0J3MgdGhlIGVudHJ5IHBvaW50IHdoZW4gYSBuZXcgZGV2aWNlIGlzIGZvdW5kLCBhbmQgaXQncyB3aGVyZSB0aGUgbWFnaWMgc3RhcnRzIHRvIGhhcHBlbi4gSSdtIGV4cGVjdGluZyB0aGlzIGlzIHdoZXJlIHdlJ2xsIGJlIGRvaW5nIGEgYnVuY2ggb2YgY3JpdGljYWwgaW5pdGlhbGl6YXRpb246IGZpZ3VyaW5nIG91dCB0aGUgZGV2aWNlJ3MgY2FwYWJpbGl0aWVzLCBzZXR0aW5nIHVwIHRoZSBoYXJkd2FyZSwgbWF5YmUgZXZlbiByZXF1ZXN0aW5nIHNvbWUgcmVzb3VyY2VzLiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZXJyb3IgaGFuZGxpbmcsIGFsd2F5cyBhIGNyaXRpY2FsIGZhY3RvciB3aGVuIGRlYWxpbmcgd2l0aCBsb3ctbGV2ZWwgaGFyZHdhcmUuIE5vIHN1cnByaXNlcyB0aGVyZS4gSSdsbCBiZSBsb29raW5nIGZvciByZXNvdXJjZSBhbGxvY2F0aW9uIGNhbGxzIOKAkyBtZW1vcnkgcmVnaW9ucywgaW50ZXJydXB0cywgRE1BIGNoYW5uZWxzLCB0aGUgdXN1YWwgc3VzcGVjdHMuIEknbGwgd2FudCB0byBzZWUgaG93IGl0J3MgaGFuZGxpbmcgdGhlIFBDSSBjb25maWd1cmF0aW9uIHNwYWNlLCB2ZXJpZnlpbmcgdmVuZG9yL2RldmljZSBJRHMsIGNoZWNraW5nIGZvciBCQVJzIGFuZCBvdGhlciBuZWNlc3NhcnkgaW5mb3JtYXRpb24sIGFuZCBzZXR0aW5nIHVwIGFueSByZXF1aXJlZCBQQ0kgRE1BIG1hc2suIEknbGwgYmUgZXNwZWNpYWxseSBrZWVuIG9uIGhvdyBpdCdzIGludGVyZmFjaW5nIHdpdGggdGhlIGZpcm13YXJlLiBIb3cgYXJlIHdlIGxvYWRpbmcgaXQ/IEFyZSB3ZSB1c2luZyBhIGRlZGljYXRlZCBmaXJtd2FyZSBsb2FkZXIgb3IgcGVyaGFwcyBhIHNoYXJlZCBsaWJyYXJ5PyBJIGV4cGVjdCB3ZSdyZSBnb2luZyB0byBzZWUgcmVnaXN0ZXIgYWNjZXNzZXMsIG1heWJlIHNvbWUgd29yayB3aXRoIHRoZSBoYXJkd2FyZSdzIGNsb2NrIGNvbnRyb2wuIEkgd2FudCB0byBzZWUgYSBjbGVhciBzZXBhcmF0aW9uIG9mIGNvbmNlcm5zLCBJIGhvcGUuIEkgZG9uJ3Qgd2FudCB0byBmaW5kIHNwYWdoZXR0aSBjb2RlOyBhIHdlbGwtc3RydWN0dXJlZCBwcm9iZSBmdW5jdGlvbiBpcyBhIHBsZWFzdXJlIHRvIGRlYnVnLiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgbG9va2luZyBmb3IgdGhlIG1ham9yIGNvbnRyb2wgZmxvdyBzZWN0aW9ucyBhbmQgdHJ5IHRvIHVuZGVyc3RhbmQgdGhlIGhpZ2gtbGV2ZWwgc3RlcHMgZmlyc3QuIExldCdzIHNlZSBob3cgdGhleSBkbyBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODU5OSwiT3V0cHV0VG9rZW5zIjo0NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMThUMDg6MjM6MTIuNzQwNzYzMTk2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNzIzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3BjaS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwNDUsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDQ1OlxcdFxcdFxcdFxcdFxcdHN3aXRjaCAoc3ViX3ZlcnNpb24pIHtcXG4xMDQ2OlxcdFxcdFxcdFxcdFxcdGNhc2UgMHgxMDE5QTBFMTpcXG4xMDQ3OlxcdFxcdFxcdFxcdFxcdGNhc2UgMHgxMDE5QjBFMTpcXG4xMDQ4OlxcdFxcdFxcdFxcdFxcdGNhc2UgMHgxMDE5QzBFMTpcXG4xMDQ5OlxcdFxcdFxcdFxcdFxcdGNhc2UgMHgxMDE5RDBFMTpcXG4xMDUwOlxcdFxcdFxcdFxcdFxcdFxcdGFiLVxcdTAwM2Vod19yZXYgPSBBVEgxMUtfSFdfUUNBMjA2Nl9IVzIxO1xcbjEwNTE6XFx0XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuMTA1MjpcXHRcXHRcXHRcXHRcXHRjYXNlIDB4MDAxZTYwZTE6XFxuMTA1MzpcXHRcXHRcXHRcXHRcXHRcXHRhYi1cXHUwMDNlaHdfcmV2ID0gQVRIMTFLX0hXX1FDQTY2OThBUV9IVzIxO1xcbjEwNTQ6XFx0XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuMTA1NTpcXHRcXHRcXHRcXHRcXHRkZWZhdWx0OlxcbjEwNTY6XFx0XFx0XFx0XFx0XFx0XFx0YWItXFx1MDAzZWh3X3JldiA9IEFUSDExS19IV19XQ042ODU1X0hXMjE7XFxuMTA1NzpcXHRcXHRcXHRcXHRcXHR9XFxuMTA1ODpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4xMDU5OlxcdFxcdFxcdFxcdGRlZmF1bHQ6XFxuMTA2MDpcXHRcXHRcXHRcXHRcXHRnb3RvIHVuc3VwcG9ydGVkX3djbjY4NTVfc29jO1xcbjEwNjE6XFx0XFx0XFx0XFx0fVxcbjEwNjI6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMTA2MzpcXHRcXHRcXHRkZWZhdWx0OlxcbjEwNjQ6XFx0dW5zdXBwb3J0ZWRfd2NuNjg1NV9zb2M6XFxuMTA2NTpcXHRcXHRcXHRcXHRkZXZfZXJyKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIFxcXCJVbnN1cHBvcnRlZCBXQ042ODU1IFNPQyBoYXJkd2FyZSB2ZXJzaW9uOiAlZCAlZFxcXFxuXFxcIixcXG4xMDY2OlxcdFxcdFxcdFxcdFxcdHNvY19od192ZXJzaW9uX21ham9yLCBzb2NfaHdfdmVyc2lvbl9taW5vcik7XFxuMTA2NzpcXHRcXHRcXHRcXHRyZXQgPSAtRU9QTk9UU1VQUDtcXG4xMDY4OlxcdFxcdFxcdFxcdGdvdG8gZXJyX3BjaV9mcmVlX3JlZ2lvbjtcXG4xMDY5OlxcdFxcdFxcdH1cXG4xMDcwOlxcdFxcbjEwNzE6XFx0XFx0XFx0YnJlYWs7XFxuMTA3MjpcXHRcXHRkZWZhdWx0OlxcbjEwNzM6XFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXFwiVW5rbm93biBQQ0kgZGV2aWNlIGZvdW5kOiAweCV4XFxcXG5cXFwiLFxcbjEwNzQ6XFx0XFx0XFx0XFx0cGNpX2Rldi1cXHUwMDNlZGV2aWNlKTtcXG4xMDc1OlxcdFxcdFxcdHJldCA9IC1FT1BOT1RTVVBQO1xcbjEwNzY6XFx0XFx0XFx0Z290byBlcnJfcGNpX2ZyZWVfcmVnaW9uO1xcbjEwNzc6XFx0XFx0fVxcbjEwNzg6XFx0XFxuMTA3OTpcXHRcXHRyZXQgPSBhdGgxMWtfcGNpY19pbml0X21zaV9jb25maWcoYWIpO1xcbjEwODA6XFx0XFx0aWYgKHJldCkge1xcbjEwODE6XFx0XFx0XFx0YXRoMTFrX2VycihhYiwgXFxcImZhaWxlZCB0byBpbml0IG1zaSBjb25maWc6ICVkXFxcXG5cXFwiLCByZXQpO1xcbjEwODI6XFx0XFx0XFx0Z290byBlcnJfcGNpX2ZyZWVfcmVnaW9uO1xcbjEwODM6XFx0XFx0fVxcbjEwODQ6XFx0XFxuMTA4NTpcXHRcXHRyZXQgPSBhdGgxMWtfcGNpX2FsbG9jX21zaShhYl9wY2kpO1xcbjEwODY6XFx0XFx0aWYgKHJldCkge1xcbjEwODc6XFx0XFx0XFx0YXRoMTFrX2VycihhYiwgXFxcImZhaWxlZCB0byBlbmFibGUgbXNpOiAlZFxcXFxuXFxcIiwgcmV0KTtcXG4xMDg4OlxcdFxcdFxcdGdvdG8gZXJyX3BjaV9mcmVlX3JlZ2lvbjtcXG4xMDg5OlxcdFxcdH1cXG4xMDkwOlxcdFxcbjEwOTE6XFx0XFx0cmV0ID0gYXRoMTFrX2NvcmVfcHJlX2luaXQoYWIpO1xcbjEwOTI6XFx0XFx0aWYgKHJldClcXG4xMDkzOlxcdFxcdFxcdGdvdG8gZXJyX3BjaV9kaXNhYmxlX21zaTtcXG4xMDk0OlxcdFxcbjEwOTU6XFx0XFx0cmV0ID0gYXRoMTFrX3BjaV9zZXRfaXJxX2FmZmluaXR5X2hpbnQoYWJfcGNpLCBjcHVtYXNrX29mKDApKTtcXG4xMDk2OlxcdFxcdGlmIChyZXQpIHtcXG4xMDk3OlxcdFxcdFxcdGF0aDExa19lcnIoYWIsIFxcXCJmYWlsZWQgdG8gc2V0IGlycSBhZmZpbml0eSAlZFxcXFxuXFxcIiwgcmV0KTtcXG4xMDk4OlxcdFxcdFxcdGdvdG8gZXJyX3BjaV9kaXNhYmxlX21zaTtcXG4xMDk5OlxcdFxcdH1cXG4xMTAwOlxcdFxcbjExMDE6XFx0XFx0cmV0ID0gYXRoMTFrX21oaV9yZWdpc3RlcihhYl9wY2kpO1xcbjExMDI6XFx0XFx0aWYgKHJldCkge1xcbjExMDM6XFx0XFx0XFx0YXRoMTFrX2VycihhYiwgXFxcImZhaWxlZCB0byByZWdpc3RlciBtaGk6ICVkXFxcXG5cXFwiLCByZXQpO1xcbjExMDQ6XFx0XFx0XFx0Z290byBlcnJfaXJxX2FmZmluaXR5X2NsZWFudXA7XFxuMTEwNTpcXHRcXHR9XFxuMTEwNjpcXHRcXG4xMTA3OlxcdFxcdHJldCA9IGF0aDExa19oYWxfc3JuZ19pbml0KGFiKTtcXG4xMTA4OlxcdFxcdGlmIChyZXQpXFxuMTEwOTpcXHRcXHRcXHRnb3RvIGVycl9taGlfdW5yZWdpc3RlcjtcXG4xMTEwOlxcdFxcbjExMTE6XFx0XFx0cmV0ID0gYXRoMTFrX2NlX2FsbG9jX3BpcGVzKGFiKTtcXG4xMTEyOlxcdFxcdGlmIChyZXQpIHtcXG4xMTEzOlxcdFxcdFxcdGF0aDExa19lcnIoYWIsIFxcXCJmYWlsZWQgdG8gYWxsb2NhdGUgY2UgcGlwZXM6ICVkXFxcXG5cXFwiLCByZXQpO1xcbjExMTQ6XFx0XFx0XFx0Z290byBlcnJfaGFsX3NybmdfZGVpbml0O1xcbjExMTU6XFx0XFx0fVxcbjExMTY6XFx0XFxuMTExNzpcXHRcXHRhdGgxMWtfcGNpX2luaXRfcW1pX2NlX2NvbmZpZyhhYik7XFxuMTExODpcXHRcXG4xMTE5OlxcdFxcdHJldCA9IGF0aDExa19wY2ljX2NvbmZpZ19pcnEoYWIpO1xcbjExMjA6XFx0XFx0aWYgKHJldCkge1xcbjExMjE6XFx0XFx0XFx0YXRoMTFrX2VycihhYiwgXFxcImZhaWxlZCB0byBjb25maWcgaXJxOiAlZFxcXFxuXFxcIiwgcmV0KTtcXG4xMTIyOlxcdFxcdFxcdGdvdG8gZXJyX2NlX2ZyZWU7XFxuMTEyMzpcXHRcXHR9XFxuMTEyNDpcXHRcXG4xMTI1OlxcdFxcdC8qIGtlcm5lbCBtYXkgYWxsb2NhdGUgYSBkdW1teSB2ZWN0b3IgYmVmb3JlIHJlcXVlc3RfaXJxIGFuZFxcbjExMjY6XFx0XFx0ICogdGhlbiBhbGxvY2F0ZSBhIHJlYWwgdmVjdG9yIHdoZW4gcmVxdWVzdF9pcnEgaXMgY2FsbGVkLlxcbjExMjc6XFx0XFx0ICogU28gZ2V0IG1zaV9kYXRhIGhlcmUgYWdhaW4gdG8gYXZvaWQgc3B1cmlvdXMgaW50ZXJydXB0XFxuMTEyODpcXHRcXHQgKiBhcyBtc2lfZGF0YSB3aWxsIGNvbmZpZ3VyZWQgdG8gc3JuZ3MuXFxuMTEyOTpcXHRcXHQgKi9cXG4xMTMwOlxcdFxcdHJldCA9IGF0aDExa19wY2lfY29uZmlnX21zaV9kYXRhKGFiX3BjaSk7XFxuMTEzMTpcXHRcXHRpZiAocmV0KSB7XFxuMTEzMjpcXHRcXHRcXHRhdGgxMWtfZXJyKGFiLCBcXFwiZmFpbGVkIHRvIGNvbmZpZyBtc2lfZGF0YTogJWRcXFxcblxcXCIsIHJldCk7XFxuMTEzMzpcXHRcXHRcXHRnb3RvIGVycl9mcmVlX2lycTtcXG4xMTM0OlxcdFxcdH1cXG4xMTM1OlxcdFxcbjExMzY6XFx0XFx0cmV0ID0gYXRoMTFrX2NvcmVfaW5pdChhYik7XFxuMTEzNzpcXHRcXHRpZiAocmV0KSB7XFxuMTEzODpcXHRcXHRcXHRhdGgxMWtfZXJyKGFiLCBcXFwiZmFpbGVkIHRvIGluaXQgY29yZTogJWRcXFxcblxcXCIsIHJldCk7XFxuMTEzOTpcXHRcXHRcXHRnb3RvIGVycl9mcmVlX2lycTtcXG4xMTQwOlxcdFxcdH1cXG4xMTQxOlxcdFxcdGF0aDExa19xbWlfZndyZXNldF9mcm9tX2NvbGRfYm9vdChhYik7XFxuMTE0MjpcXHRcXHRyZXR1cm4gMDtcXG4xMTQzOlxcdFxcbjExNDQ6XFx0ZXJyX2ZyZWVfaXJxOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xOFQwODoyMzoxMi43NDA4ODE4NDZaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTgxMzE0ODgyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgYGF0aDExa2AgRHJpdmVyIFZ1bG5lcmFiaWxpdHkqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBhdGgxMWtfcGNpX3Byb2JlYCBmdW5jdGlvbiBhbmQgaXQncyBjbGVhciB0aGlzIGlzIHdoZXJlIGEgbG90IG9mIHRoZSBpbml0aWFsIGhhcmR3YXJlIGludGVyYWN0aW9uIGhhcHBlbnMuIEl0J3MgZG9pbmcgYSBidW5jaCBvZiByZWFkcywgbGlrZSBgYXRoMTFrX3BjaV9yZWFkX2h3X3ZlcnNpb25gLCBgYXRoMTFrX3BjaWNfcmVhZDMyYCwgYW5kIHJlZ2lzdGVyaW5nIHdpdGggdGhlIE1ISSBidXMgdmlhIGBhdGgxMWtfbWhpX3JlZ2lzdGVyYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBpZiBzeXprYWxsZXIgaXMgdGhyb3dpbmcgUENJIGRldmljZXMgYXQgdGhpcywgaXQncyBwcm9iYWJseSBtYXBwaW5nIG1lbW9yeSByZWdpb25zLiBBbmQgYGF0aDExa19wY2ljX3JlYWQzMmAgd2lsbCBiZSBoYXBwaWx5IHJlYWRpbmcgd2hhdGV2ZXIgZ2FyYmFnZSBzeXprYWxsZXIgcHJvdmlkZXMuIFRoZSBpc3N1ZSBpcyB0aGF0IHRoZSBNSEkgYnVzIHJlZ2lzdHJhdGlvbiBsb29rcyBsaWtlIGl0IGNvdWxkIGJlIGEgYmxvY2tlci5cblxuQnV0IGxldCdzIHNlZSwgY2FuIEkgZXZlbiBnZXQgdG8gdGhlIGNvcmUgaW5pdGlhbGl6YXRpb24/IEkgbmVlZCB0byB0cmFjZSB0aGUgZXhlY3V0aW9uLiBIbW0sIGBhdGgxMWtfY29yZV9pbml0YCBpcyBjYWxsZWQsIGFuZCB0aGF0IGxlYWRzIHRvIGBhdGgxMWtfY29yZV9zb2NfY3JlYXRlYCwgd2hpY2ggdGhlbiBjYWxscyBgYXRoMTFrX3FtaV9pbml0X3NlcnZpY2VgLiBUaGF0J3Mgd2hlcmUgdGhlIHBhdGNoIGlzIHRhcmdldGVkISBCaW5nbyEgVGhlIHBhdGggdG8gZXhwbG9pdCBpcyBsaWtlbHkgdGhyb3VnaCByZWFjaGluZyBgYXRoMTFrX3FtaV9pbml0X3NlcnZpY2VgLlxuXG5Ob3csIGlzIHRoZXJlIGFub3RoZXIgcm91dGU/IENhbiBJIHJlYWNoIGBhdGgxMWtfcW1pX2luaXRfc2VydmljZWAgdGhyb3VnaCBgYXRoMTFrX2FoYl9wcm9iZWAgaW5zdGVhZCBvZiB0aGUgUENJIG9uZT8gVGhhdCdzIHdoYXQgSSBuZWVkIHRvIGludmVzdGlnYXRlIG5leHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNjc2LCJPdXRwdXRUb2tlbnMiOjQ3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMThUMDg6MjM6MTguNTU0MDMyNjU5WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyODk2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExMDcsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMTA3OlxcdHN0YXRpYyBpbnQgYXRoMTFrX2FoYl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbjExMDg6XFx0e1xcbjExMDk6XFx0XFx0c3RydWN0IGF0aDExa19iYXNlICphYjtcXG4xMTEwOlxcdFxcdGNvbnN0IHN0cnVjdCBhdGgxMWtfaGlmX29wcyAqaGlmX29wcztcXG4xMTExOlxcdFxcdGNvbnN0IHN0cnVjdCBhdGgxMWtfcGNpX29wcyAqcGNpX29wcztcXG4xMTEyOlxcdFxcdGVudW0gYXRoMTFrX2h3X3JldiBod19yZXY7XFxuMTExMzpcXHRcXHRpbnQgcmV0O1xcbjExMTQ6XFx0XFxuMTExNTpcXHRcXHRod19yZXYgPSAodWludHB0cl90KWRldmljZV9nZXRfbWF0Y2hfZGF0YShcXHUwMDI2cGRldi1cXHUwMDNlZGV2KTtcXG4xMTE2OlxcdFxcbjExMTc6XFx0XFx0c3dpdGNoIChod19yZXYpIHtcXG4xMTE4OlxcdFxcdGNhc2UgQVRIMTFLX0hXX0lQUTgwNzQ6XFxuMTExOTpcXHRcXHRjYXNlIEFUSDExS19IV19JUFE2MDE4X0hXMTA6XFxuMTEyMDpcXHRcXHRjYXNlIEFUSDExS19IV19JUFE1MDE4X0hXMTA6XFxuMTEyMTpcXHRcXHRcXHRoaWZfb3BzID0gXFx1MDAyNmF0aDExa19haGJfaGlmX29wc19pcHE4MDc0O1xcbjExMjI6XFx0XFx0XFx0cGNpX29wcyA9IE5VTEw7XFxuMTEyMzpcXHRcXHRcXHRicmVhaztcXG4xMTI0OlxcdFxcdGNhc2UgQVRIMTFLX0hXX1dDTjY3NTBfSFcxMDpcXG4xMTI1OlxcdFxcdFxcdGhpZl9vcHMgPSBcXHUwMDI2YXRoMTFrX2FoYl9oaWZfb3BzX3djbjY3NTA7XFxuMTEyNjpcXHRcXHRcXHRwY2lfb3BzID0gXFx1MDAyNmF0aDExa19haGJfcGNpX29wc193Y242NzUwO1xcbjExMjc6XFx0XFx0XFx0YnJlYWs7XFxuMTEyODpcXHRcXHRkZWZhdWx0OlxcbjExMjk6XFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXFwidW5zdXBwb3J0ZWQgZGV2aWNlIHR5cGUgJWRcXFxcblxcXCIsIGh3X3Jldik7XFxuMTEzMDpcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuMTEzMTpcXHRcXHR9XFxuMTEzMjpcXHRcXG4xMTMzOlxcdFxcdHJldCA9IGRtYV9zZXRfbWFza19hbmRfY29oZXJlbnQoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgRE1BX0JJVF9NQVNLKDMyKSk7XFxuMTEzNDpcXHRcXHRpZiAocmV0KSB7XFxuMTEzNTpcXHRcXHRcXHRkZXZfZXJyKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIFxcXCJmYWlsZWQgdG8gc2V0IDMyLWJpdCBjb25zaXN0ZW50IGRtYVxcXFxuXFxcIik7XFxuMTEzNjpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjExMzc6XFx0XFx0fVxcbjExMzg6XFx0XFxuMTEzOTpcXHRcXHRhYiA9IGF0aDExa19jb3JlX2FsbG9jKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIHNpemVvZihzdHJ1Y3QgYXRoMTFrX2FoYiksXFxuMTE0MDpcXHRcXHRcXHRcXHQgICAgICAgQVRIMTFLX0JVU19BSEIpO1xcbjExNDE6XFx0XFx0aWYgKCFhYikge1xcbjExNDI6XFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXFwiZmFpbGVkIHRvIGFsbG9jYXRlIGF0aDExayBiYXNlXFxcXG5cXFwiKTtcXG4xMTQzOlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjExNDQ6XFx0XFx0fVxcbjExNDU6XFx0XFxuMTE0NjpcXHRcXHRhYi1cXHUwMDNlaGlmLm9wcyA9IGhpZl9vcHM7XFxuMTE0NzpcXHRcXHRhYi1cXHUwMDNlcGRldiA9IHBkZXY7XFxuMTE0ODpcXHRcXHRhYi1cXHUwMDNlaHdfcmV2ID0gaHdfcmV2O1xcbjExNDk6XFx0XFx0YWItXFx1MDAzZWZ3X21vZGUgPSBBVEgxMUtfRklSTVdBUkVfTU9ERV9OT1JNQUw7XFxuMTE1MDpcXHRcXHRwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBhYik7XFxuMTE1MTpcXHRcXG4xMTUyOlxcdFxcdHJldCA9IGF0aDExa19wY2ljX3JlZ2lzdGVyX3BjaV9vcHMoYWIsIHBjaV9vcHMpO1xcbjExNTM6XFx0XFx0aWYgKHJldCkge1xcbjExNTQ6XFx0XFx0XFx0YXRoMTFrX2VycihhYiwgXFxcImZhaWxlZCB0byByZWdpc3RlciBQQ0kgb3BzOiAlZFxcXFxuXFxcIiwgcmV0KTtcXG4xMTU1OlxcdFxcdFxcdGdvdG8gZXJyX2NvcmVfZnJlZTtcXG4xMTU2OlxcdFxcdH1cXG4xMTU3OlxcdFxcbjExNTg6XFx0XFx0cmV0ID0gYXRoMTFrX2NvcmVfcHJlX2luaXQoYWIpO1xcbjExNTk6XFx0XFx0aWYgKHJldClcXG4xMTYwOlxcdFxcdFxcdGdvdG8gZXJyX2NvcmVfZnJlZTtcXG4xMTYxOlxcdFxcbjExNjI6XFx0XFx0cmV0ID0gYXRoMTFrX2FoYl9zZXR1cF9yZXNvdXJjZXMoYWIpO1xcbjExNjM6XFx0XFx0aWYgKHJldClcXG4xMTY0OlxcdFxcdFxcdGdvdG8gZXJyX2NvcmVfZnJlZTtcXG4xMTY1OlxcdFxcbjExNjY6XFx0XFx0cmV0ID0gYXRoMTFrX2FoYl9jZV9yZW1hcChhYik7XFxuMTE2NzpcXHRcXHRpZiAocmV0KVxcbjExNjg6XFx0XFx0XFx0Z290byBlcnJfY29yZV9mcmVlO1xcbjExNjk6XFx0XFxuMTE3MDpcXHRcXHRyZXQgPSBhdGgxMWtfYWhiX2Z3X3Jlc291cmNlc19pbml0KGFiKTtcXG4xMTcxOlxcdFxcdGlmIChyZXQpXFxuMTE3MjpcXHRcXHRcXHRnb3RvIGVycl9jZV91bm1hcDtcXG4xMTczOlxcdFxcbjExNzQ6XFx0XFx0cmV0ID0gYXRoMTFrX2FoYl9zZXR1cF9zbXAycF9oYW5kbGUoYWIpO1xcbjExNzU6XFx0XFx0aWYgKHJldClcXG4xMTc2OlxcdFxcdFxcdGdvdG8gZXJyX2Z3X2RlaW5pdDtcXG4xMTc3OlxcdFxcbjExNzg6XFx0XFx0cmV0ID0gYXRoMTFrX2hhbF9zcm5nX2luaXQoYWIpO1xcbjExNzk6XFx0XFx0aWYgKHJldClcXG4xMTgwOlxcdFxcdFxcdGdvdG8gZXJyX3JlbGVhc2Vfc21wMnBfaGFuZGxlO1xcbjExODE6XFx0XFxuMTE4MjpcXHRcXHRyZXQgPSBhdGgxMWtfY2VfYWxsb2NfcGlwZXMoYWIpO1xcbjExODM6XFx0XFx0aWYgKHJldCkge1xcbjExODQ6XFx0XFx0XFx0YXRoMTFrX2VycihhYiwgXFxcImZhaWxlZCB0byBhbGxvY2F0ZSBjZSBwaXBlczogJWRcXFxcblxcXCIsIHJldCk7XFxuMTE4NTpcXHRcXHRcXHRnb3RvIGVycl9oYWxfc3JuZ19kZWluaXQ7XFxuMTE4NjpcXHRcXHR9XFxuMTE4NzpcXHRcXG4xMTg4OlxcdFxcdGF0aDExa19haGJfaW5pdF9xbWlfY2VfY29uZmlnKGFiKTtcXG4xMTg5OlxcdFxcbjExOTA6XFx0XFx0cmV0ID0gYXRoMTFrX2NvcmVfZ2V0X3Jwcm9jKGFiKTtcXG4xMTkxOlxcdFxcdGlmIChyZXQpXFxuMTE5MjpcXHRcXHRcXHRnb3RvIGVycl9jZV9mcmVlO1xcbjExOTM6XFx0XFxuMTE5NDpcXHRcXHRyZXQgPSBhdGgxMWtfY29yZV9pbml0KGFiKTtcXG4xMTk1OlxcdFxcdGlmIChyZXQpIHtcXG4xMTk2OlxcdFxcdFxcdGF0aDExa19lcnIoYWIsIFxcXCJmYWlsZWQgdG8gaW5pdCBjb3JlOiAlZFxcXFxuXFxcIiwgcmV0KTtcXG4xMTk3OlxcdFxcdFxcdGdvdG8gZXJyX2NlX2ZyZWU7XFxuMTE5ODpcXHRcXHR9XFxuMTE5OTpcXHRcXG4xMjAwOlxcdFxcdHJldCA9IGF0aDExa19haGJfY29uZmlnX2lycShhYik7XFxuMTIwMTpcXHRcXHRpZiAocmV0KSB7XFxuMTIwMjpcXHRcXHRcXHRhdGgxMWtfZXJyKGFiLCBcXFwiZmFpbGVkIHRvIGNvbmZpZ3VyZSBpcnE6ICVkXFxcXG5cXFwiLCByZXQpO1xcbjEyMDM6XFx0XFx0XFx0Z290byBlcnJfY2VfZnJlZTtcXG4xMjA0OlxcdFxcdH1cXG4xMjA1OlxcdFxcbjEyMDY6XFx0XFx0YXRoMTFrX3FtaV9md3Jlc2V0X2Zyb21fY29sZF9ib290KGFiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMThUMDg6MjM6MTguNTU0MTYyODU5WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyMzkxOTQ1MzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW5pdGlhbCBBc3Nlc3NtZW50IFx1MDAyNiBQb3RlbnRpYWwgQXZlbnVlcyoqXG5cbk9rYXksIHNvIGBhdGgxMWtfYWhiX3Byb2JlYCBpcyBhIHBsYXRmb3JtIGRyaXZlciBwcm9iZS4gRnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUsIHRoYXQncyBub3QgdGhlIGVhc2llc3QgdGhpbmcgdG8gdHJpZ2dlciBkaXJlY3RseSB3aXRoIFN5emthbGxlci4gSXQgZ2VuZXJhbGx5IHJlcXVpcmVzIGEga25vd24gZGV2aWNlIHRvIGJlIHByZXNlbnQsIGFuZCB0aGVuIHRoZSBmdXp6ZXIgY2FuIGF0dGVtcHQgdG8gaW50ZXJhY3Qgd2l0aCBpdC4gU3l6a2FsbGVyIHVzdWFsbHkgcmVsaWVzIG9uIGRldmljZXMgY3JlYXRlZCB0aHJvdWdoIGAvc3lzL2RldmljZXMvcGxhdGZvcm0vYCBvciBhIHNpbWlsYXIgbWV0aG9kLCBidXQgdGhhdCdzIG5vdCBhbHdheXMgc3RyYWlnaHRmb3J3YXJkLiBVbmxlc3MgSSdtIG92ZXJsb29raW5nIHNvbWV0aGluZyBvYnZpb3VzLCBJIG5lZWQgYSBnb29kIHBhdGggdG8gZ2V0IHRoZSBkZXZpY2UgcHJlc2VudC5cblxuV2FpdCBhIHNlY29uZOKApiBkaWRuJ3QgSSBzZWUgc29tZXRoaW5nIGFib3V0IFN5emthbGxlciBoYXZpbmcgYSBgc3l6X2RldmxpbmtfcGNpYCBvciBzb21ldGhpbmcgc2ltaWxhcj8gSWYgc28sIHRoYXQgY291bGQgYmUgdGhlIGtleSEgSXQgZ2l2ZXMgdGhlIGZ1enplciBhIHdheSB0byBpbmplY3QgUENJIGRldmljZXMsIHdoaWNoIG1pZ2h0IGJlIGEgYmV0dGVyIHRhcmdldCBmb3IgdGhpcyBkcml2ZXIuIEkgc2hvdWxkIGludmVzdGlnYXRlIHRoYXQgZnVydGhlci5cblxuQWxyaWdodCwgYmVmb3JlIEkgY29tcGxldGVseSBjb21taXQgdG8gdGhhdCBkaXJlY3Rpb24sIGxldCBtZSBjb25zaWRlciBpZiB0aGVyZSBpcyBhbm90aGVyIG9idmlvdXMgcGF0aCwgYmVjYXVzZSBQQ0kgY2FuIGJlIGEgaGVhdnkgaGFtbWVyLiBJIHdvbmRlciBpZiBgYXRoMTFrX3FtaV9pbml0X3NlcnZpY2VgIGlzIHJlYWNoYWJsZS4uLiBJIHNob3VsZCBhbHNvIGxvb2sgYXQgdGhlIGBhdGgxMmtfcW1pX2luaXRfc2VydmljZWAgYXMgd2VsbCwganVzdCB0byBlbnN1cmUgdGhhdCBJJ20gY2hlY2tpbmcgYWxsIHBvc3NpYmxlIHBhdGhzIHRvIGdldCB0aGlzIGRldmljZSByZWFkeSBmb3IgYSBnb29kIGZ1enouXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMDAzLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMThUMDg6MjM6MjIuNzkzMzU5NzA0WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzUwMDAzODY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImF0aDEya19xbWlfaW5pdF9zZXJ2aWNlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5jPTgxNT1zdGF0aWMgaW50IGF0aDEya19jb3JlX3NvY19jcmVhdGUoc3RydWN0IGF0aDEya19iYXNlICphYilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5jLTgyMy1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuYzo4MjQ6XFx0cmV0ID0gYXRoMTJrX3FtaV9pbml0X3NlcnZpY2UoYWIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5jLTgyNS1cXHRpZiAocmV0KSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5jPTM5NjU9c3RhdGljIHZvaWQgYXRoMTJrX3FtaV9kcml2ZXJfZXZlbnRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5jLTQwMzctXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuYzo0MDM4OmludCBhdGgxMmtfcW1pX2luaXRfc2VydmljZShzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmMtNDAzOS17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5oPTY0ND12b2lkIGF0aDEya19xbWlfZGVpbml0X3NlcnZpY2Uoc3RydWN0IGF0aDEya19iYXNlICphYik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuaDo2NDU6aW50IGF0aDEya19xbWlfaW5pdF9zZXJ2aWNlKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmgtNjQ2LXZvaWQgYXRoMTJrX3FtaV9mcmVlX3Jlc291cmNlKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xOFQwODoyMzoyNC41NDMzNjg3NDFaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIxNjg0Nzk5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkluaXRpYWwgSW52ZXN0aWdhdGlvbiBpbnRvIGF0aDEyayBEcml2ZXIgSW5pdGlhbGl6YXRpb24qKlxuXG5TbywgYGF0aDEya19jb3JlX3NvY19jcmVhdGVgIGlzIHJlc3BvbnNpYmxlIGZvciBzZXR0aW5nIHVwIHRoZSBTT0MsIGFuZCBJIHNlZSBpdCdzIGNhbGxpbmcgYGF0aDEya19xbWlfaW5pdF9zZXJ2aWNlYC4gVGhhdCdzIGEga2V5IGludGVyYWN0aW9uIHRvIHVuZGVyc3RhbmQsIHRoZSBRdWFsaXR5IE1hbmFnZW1lbnQgSW50ZXJmYWNlIGlzIGNsZWFybHkgYSBjcml0aWNhbCBjb21wb25lbnQuIEJ1dCB3aGF0IGFjdHVhbGx5ICp0cmlnZ2VycyogYGF0aDEya19jb3JlX3NvY19jcmVhdGVgPyBJIG5lZWQgdG8gdHJhY2UgYmFjay4gQWgsIGhlcmUgaXQgaXM6IGBhdGgxMmtfY29yZV9zb2NfY3JlYXRlYCBpcyBjYWxsZWQgYnkgYGF0aDEya19jb3JlX2luaXRgLiBSaWdodC4gU28sIGBhdGgxMmtfY29yZV9pbml0YCBpcyB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIHRoaXMgc3BlY2lmaWMgY2hhaW4gb2YgaW5pdGlhbGl6YXRpb24uIE5vdywgbGV0J3Mgc2hpZnQgb3VyIGZvY3VzIGFuZCBpbnZlc3RpZ2F0ZSB0aGUgYGF0aDEya19jb3JlX2luaXRgIGZ1bmN0aW9uIGl0c2VsZi4gVW5kZXJzdGFuZGluZyB0aGF0IHdpbGwgZ2l2ZSBtZSB0aGUgcHJvcGVyIGNvbnRleHQgZm9yIHRoZSBzdWJzZXF1ZW50IGZ1bmN0aW9uIGNhbGxzIGFuZCB1bHRpbWF0ZWx5IHRoZSBRTUkgc2VydmljZSBpbml0aWFsaXphdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM4NjgsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xOFQwODoyMzoyNy43NjAyMTkyMzJaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NDI3NDcxOTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXRoMTJrX2NvcmVfaW5pdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jPTEwMTk9c3RhdGljIGludCBhdGgxMmtfYWhiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jLTExMTAtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYzoxMTExOlxcdHJldCA9IGF0aDEya19jb3JlX2luaXQoYWIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmMtMTExMi1cXHRpZiAocmV0KSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuYz0yMTg4PXZvaWQgYXRoMTJrX2NvcmVfaHdfZ3JvdXBfc2V0X21sb19jYXBhYmxlKHN0cnVjdCBhdGgxMmtfaHdfZ3JvdXAgKmFnKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmMtMjIyOC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuYzoyMjI5OmludCBhdGgxMmtfY29yZV9pbml0KHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmMtMjIzMC17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuaD0xMjY0PWludCBhdGgxMmtfY29yZV9wcmVfaW5pdChzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuaDoxMjY1OmludCBhdGgxMmtfY29yZV9pbml0KHN0cnVjdCBhdGgxMmtfYmFzZSAqYXRoMTJrKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuaC0xMjY2LXZvaWQgYXRoMTJrX2NvcmVfZGVpbml0KHN0cnVjdCBhdGgxMmtfYmFzZSAqYXRoMTJrKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM9MTUyND1zdGF0aWMgaW50IGF0aDEya19wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE2NDQtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYzoxNjQ1OlxcdHJldCA9IGF0aDEya19jb3JlX2luaXQoYWIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtMTY0Ni1cXHRpZiAocmV0KSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE4VDA4OjIzOjI5LjUwMjk3MTIyOVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODY1Nzg0MjE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBvdGVudGlhbCBGdXp6aW5nIFRhcmdldCoqXG5cbk9rYXksIHRoaXMgbG9va3MgZmFtaWxpYXIg4oCTIHRoZSBzYW1lIHBhdHRlcm4gSSd2ZSBzZWVuIGJlZm9yZS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBjb2RlIHBhdGggaXMgZXZlbiAqcmVhY2hhYmxlKiBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBHb29kLCBzeXprYWxsZXIgaGFzIGEgdmlydHVhbCBQQ0kgZnV6emVyLCB3aGljaCBpcyBwZXJmZWN0LiBJdCBjYW4gaW5qZWN0IFBDSSBkZXZpY2VzIHdpdGggd2hhdGV2ZXIgdmVuZG9yIGFuZCBkZXZpY2UgSURzIGl0IHdhbnRzLiBUaGUgbW9tZW50IGl0IGluamVjdHMgc29tZXRoaW5nIHdpdGggZWl0aGVyIGFuIGF0aDExayBvciBhdGgxMmsgUENJIElELCBiaW5nbyDigJMgdGhlIHByb2JlIGZ1bmN0aW9uIGdldHMgY2FsbGVkLlxuXG5BbmQgdGhpcyBwcm9iZSBmdW5jdGlvbiwgaXTigJlzIHJlYWRpbmcgZnJvbSBQQ0kgY29uZmlnIHNwYWNlIGFuZCBtZW1vcnktbWFwcGVkIElPLiBJIGltbWVkaWF0ZWx5IHNlZSB0aGUgdnVsbmVyYWJpbGl0eSBwb3RlbnRpYWwgaGVyZS4gQmVjYXVzZSBzeXprYWxsZXIncyB2aXJ0dWFsIGRldmljZSBjYW4gcmV0dXJuIGFueXRoaW5nIHdlIGZlZWQgaXQsIGl04oCZcyBoaWdobHkgbGlrZWx5IHdlIGNhbiBieXBhc3MgdGhlIGhhcmR3YXJlIGNoZWNrcy4gSWYgd2UgbWFuaXB1bGF0ZSB0aGUgcmVzcG9uc2VzLCB3ZSBtaWdodCBiZSBhYmxlIHRvIHJlYWNoIGNydWNpYWwgZnVuY3Rpb25zIGxpa2UgYGF0aDExa19jb3JlX2luaXRgIGFuZCBgYXRoMTFrX3FtaV9pbml0X3NlcnZpY2VgLlxuXG5Ib2xkIG9uLi4uIGBhdGgxMWtfcGNpX3Byb2JlYCBjYWxscyBgYXRoMTFrX21oaV9yZWdpc3RlcmAuIE1ISS4uLiB0aGF0J3MgdGhlIE1vZGVtIEhvc3QgSW50ZXJmYWNlLCBpc27igJl0IGl0PyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgYGF0aDExa19taGlfcmVnaXN0ZXJgIGRvZXMuIFRoYXQncyB0aGUgbmV4dCBzdGVwOyB0aGlzIGNvdWxkIGJlIGEga2V5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDc0OCwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xOFQwODoyMzozNC4zNjg3NTcxNzRaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3Mzk0MzI2NTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXRoMTFrX21oaV9yZWdpc3RlclwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL21oaS5jPTMxND1zdGF0aWMgaW50IGF0aDExa19taGlfcmVhZF9hZGRyX2Zyb21fZHQoc3RydWN0IG1oaV9jb250cm9sbGVyICptaGlfY3RybClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvbWhpLmMtMzM0LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvbWhpLmM6MzM1OmludCBhdGgxMWtfbWhpX3JlZ2lzdGVyKHN0cnVjdCBhdGgxMWtfcGNpICphYl9wY2kpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9taGkuYy0zMzYte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9taGkuaD0yMT12b2lkIGF0aDExa19taGlfc3RvcChzdHJ1Y3QgYXRoMTFrX3BjaSAqYXJfcGNpLCBib29sIGlzX3N1c3BlbmQpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvbWhpLmg6MjI6aW50IGF0aDExa19taGlfcmVnaXN0ZXIoc3RydWN0IGF0aDExa19wY2kgKmFyX3BjaSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9taGkuaC0yMy12b2lkIGF0aDExa19taGlfdW5yZWdpc3RlcihzdHJ1Y3QgYXRoMTFrX3BjaSAqYXJfcGNpKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvcGNpLmM9OTQ1PXN0YXRpYyBpbnQgYXRoMTFrX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvcGNpLmMtMTEwMC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3BjaS5jOjExMDE6XFx0cmV0ID0gYXRoMTFrX21oaV9yZWdpc3RlcihhYl9wY2kpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvcGNpLmMtMTEwMi1cXHRpZiAocmV0KSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE4VDA4OjIzOjM2LjEwODE5NDkzMVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1Mjk5OTQzNzg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gYGF0aDExa19taGlfcmVnaXN0ZXJgLCBhc3N1bWluZyBJJ20gYW4gZXhwZXJ0OlxuXG4qKlVuZGVyc3RhbmRpbmcgdGhlIGBhdGgxMWtfbWhpX3JlZ2lzdGVyYCBGdW5jdGlvbioqXG5cbkFscmlnaHQsIHNvIHRoZSB0YXNrIGF0IGhhbmQgaXMgdG8gZ3JvayB0aGlzIGBhdGgxMWtfbWhpX3JlZ2lzdGVyYCBmdW5jdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBiYXNlZCBvbiB0aGUgbmFtZSwgdGhpcyBsaWtlbHkgaGFuZGxlcyB0aGUgcmVnaXN0cmF0aW9uIHByb2Nlc3Mgd2l0aGluIHRoZSBRdWFsY29tbSBBdGhlcm9zIChhdGgxMWspIGRyaXZlciwgc3BlY2lmaWNhbGx5IGZvciB0aGUgTUhJIChNSEkgc3RhbmRzIGZvcjogKipNKip1bHRpICoqSCoqb3N0ICoqSSoqbnRlcmZhY2UpIGludGVyZmFjZS4gVGhpcyBzdHJvbmdseSBzdWdnZXN0cyB3ZSdyZSBkZWFsaW5nIHdpdGggdGhlIGludGVyYWN0aW9uIGJldHdlZW4gdGhlIGhvc3QgQ1BVIGFuZCB0aGUgbmV0d29yayBjb250cm9sbGVyLCBtYXliZSBmb3Igc2V0dXAsIGNvbmZpZ3VyYXRpb24sIG9yIHBlcmhhcHMgcmVzb3VyY2UgbWFuYWdlbWVudC5cblxuTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGlzIHdpbGwgcHJvYmFibHkgYmUgYSBmYWlybHkgY3JpdGljYWwgZnVuY3Rpb24uIEl0J3MgdGhlIGVudHJ5IHBvaW50LCBvciBhdCBsZWFzdCBhIGtleSBjb21wb25lbnQsIGZvciBtYWtpbmcgdGhlIGhhcmR3YXJlIGFjY2Vzc2libGUgdG8gdGhlIGRyaXZlci4gSSBleHBlY3QgaXQnbGwgaW52b2x2ZSBzZXR0aW5nIHVwIGludGVycnVwdCBoYW5kbGVycywgY29uZmlndXJpbmcgbWVtb3J5IG1hcHBpbmcsIGVzdGFibGlzaGluZyBjb21tdW5pY2F0aW9uIGNoYW5uZWxzLCBhbmQgcG9zc2libHkgaGFuZGxpbmcgc29tZSBwb3dlciBtYW5hZ2VtZW50IHN0ZXBzLlxuXG5JJ20gdGhpbmtpbmcsIGdpdmVuIHRoZSBjb250ZXh0IG9mIGF0aDExayAod2hpY2ggSSBrbm93IGlzIGEgbW9kZXJuIFdpLUZpIGRyaXZlciksIHRoaXMgKmNvdWxkKiBpbnZvbHZlIGZlYXR1cmVzIHRoYXQgYXJlIHJlbGV2YW50IHRvIGhhcmR3YXJlIGxpa2U6XG5cbiogICAqKkJ1cy1TcGVjaWZpYyBTZXR1cDoqKiBJdCdsbCBuZWVkIHRvIGtub3cgd2hpY2ggYnVzIChQQ0llLCBTRElPLCBVU0IpIHRoZSBNSEkgaW50ZXJmYWNlIGlzIGNvbm5lY3RlZCB0bywgYW5kIGNvbmZpZ3VyZSB0aGUgYXNzb2NpYXRlZCBidXMtc3BlY2lmaWMgcmVnaXN0ZXJzLlxuKiAgICoqRE1BIEVuZ2luZXM6KiogSXQgcHJvYmFibHkgc2V0cyB1cCBETUEgZW5naW5lcyBmb3IgZWZmaWNpZW50IGRhdGEgdHJhbnNmZXIgYmV0d2VlbiB0aGUgaG9zdCBhbmQgdGhlIFdpLUZpIGNoaXAuIFRoaXMgaXMgZXNzZW50aWFsIGZvciBnb29kIHRocm91Z2hwdXQgYW5kIGxvdyBsYXRlbmN5LlxuKiAgICoqRGV2aWNlIFRyZWUgSW50ZXJhY3Rpb25zOioqIEhvcGVmdWxseSwgaXQgaGFzIGEgcHJvcGVyIERldmljZSBUcmVlIGludGVyYWN0aW9uLlxuKiAgICoqRXJyb3IgSGFuZGxpbmc6KiogSXQgd2lsbCBuZWVkIHRvIGhhbmRsZSB0aGUgY2FzZSBvZiBmYWlsdXJlIGR1cmluZyByZWdpc3RyYXRpb24uIEl0J2xsIHByb2JhYmx5IGluY2x1ZGUgZXJyb3IgY2hlY2tzIGFmdGVyIGVhY2ggb3BlcmF0aW9uIHRvIGVuc3VyZSB0aGF0IHRoZSBkZXZpY2UgaGFzIGJlZW4gY29ycmVjdGx5IGluaXRpYWxpemVkLlxuKiAgICoqSW5pdGlhbGl6YXRpb24gRGF0YToqKiBJJ20gZ3Vlc3NpbmcgaXQgbGlrZWx5IG5lZWRzIHRvIHBhc3Mgb3IgcmVjZWl2ZSBzb21lIGluaXRpYWxpemF0aW9uIGRhdGEgb3IgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIHNwZWNpZmljIHRvIHRoZSBNSEkgaW50ZXJmYWNlLCBsaWtlIGJ1ZmZlciBzaXplcywgY2xvY2sgc2V0dGluZ3MsIG9yIGludGVycnVwdCBudW1iZXJzLlxuKiAgICoqUmVzb3VyY2UgQWxsb2NhdGlvbjoqKiBDb3VsZCBiZSBtZW1vcnkgYWxsb2NhdGlvbiB1c2luZyBhIGZ1bmN0aW9uLCBsaWtlbHkgYW4gaW50ZXJuYWwgbWVtb3J5IG9yIHN0cnVjdHVyZSB0byBzdG9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcmVnaXN0ZXJlZCBkZXZpY2UuXG4qICAgKipQb3dlciBNYW5hZ2VtZW50OioqIEJhc2VkIG9uIHBhc3QgZXhwZXJpZW5jZXMgd2l0aCB3aXJlbGVzcyBkcml2ZXJzLCB0aGVyZSdzIGxpa2VseSBzb21lIHBvd2VyIG1hbmFnZW1lbnQgbG9naWMgaW52b2x2ZWQsIHBlcmhhcHMgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIGNsb2NrIGdhdGVzLCBwb3dlciBkb21haW5zLCBvciBzZXR0aW5nIHVwIHdha2UtdXAgaW50ZXJydXB0cy5cbiogICAqKkludGVycnVwdCBIYW5kbGluZzoqKiBUaGUgc2V0dGluZyB1cCBvZiB0aGUgaW50ZXJydXB0IGhhbmRsZXJzIHdpbGwgbGlrZWx5IGJlIGFub3RoZXIgaW1wb3J0YW50IHJvbGUuIEl0IHdpbGwgcmVnaXN0ZXIgdGhlIGFwcHJvcHJpYXRlIGludGVycnVwdCBoYW5kbGVyIHJvdXRpbmUgd2l0aCB0aGUga2VybmVsLlxuXG5JIG5lZWQgdG8gZGlnIGluIGFuZCBzZWUgdGhlIGRldGFpbHMsIGJ1dCBteSBpbml0aWFsIGd1dCBmZWVsaW5nIGlzIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyBnb2luZyB0byBiZSB0aGUgY2VudHJhbCBwb2ludCBmb3IgdGhlIGhhcmR3YXJlIGJyaW5nLXVwIHByb2Nlc3Mgd2l0aCByZXNwZWN0IHRvIHRoZSBNSEkgaW50ZXJmYWNlLiBJdCdzIHRoZSBseW5jaHBpbiBmb3IgZ2V0dGluZyB0aGUgYXRoMTFrIGRyaXZlciB3b3JraW5nIHdpdGggdGhlIFdpLUZpIGhhcmR3YXJlLiBJdCdzIHByb2JhYmx5IGdvaW5nIHRvIGludm9sdmUgYSBsb3Qgb2YgbG93LWxldmVsIGhhcmR3YXJlIGludGVyYWN0aW9uIGFuZCBlcnJvciBoYW5kbGluZy4gTGV0J3Mgc2VlIGlmIG15IGluaXRpYWwgYXNzdW1wdGlvbnMgaG9sZCB3YXRlciBhcyBJIHJlYWQgdGhyb3VnaCBpdCFcblxuXG4iLCJJbnB1dFRva2VucyI6MTU2OTEsIk91dHB1dFRva2VucyI6NDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xOFQwODoyMzo0MS40MDgxNDE3OTdaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTA5MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9taGkuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMzUsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzM1OlxcdGludCBhdGgxMWtfbWhpX3JlZ2lzdGVyKHN0cnVjdCBhdGgxMWtfcGNpICphYl9wY2kpXFxuIDMzNjpcXHR7XFxuIDMzNzpcXHRcXHRzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiID0gYWJfcGNpLVxcdTAwM2VhYjtcXG4gMzM4OlxcdFxcdHN0cnVjdCBtaGlfY29udHJvbGxlciAqbWhpX2N0cmw7XFxuIDMzOTpcXHRcXHRjb25zdCBzdHJ1Y3QgbWhpX2NvbnRyb2xsZXJfY29uZmlnICphdGgxMWtfbWhpX2NvbmZpZztcXG4gMzQwOlxcdFxcdGludCByZXQ7XFxuIDM0MTpcXHRcXG4gMzQyOlxcdFxcdG1oaV9jdHJsID0gbWhpX2FsbG9jX2NvbnRyb2xsZXIoKTtcXG4gMzQzOlxcdFxcdGlmICghbWhpX2N0cmwpXFxuIDM0NDpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gMzQ1OlxcdFxcbiAzNDY6XFx0XFx0YWJfcGNpLVxcdTAwM2VtaGlfY3RybCA9IG1oaV9jdHJsO1xcbiAzNDc6XFx0XFx0bWhpX2N0cmwtXFx1MDAzZWNudHJsX2RldiA9IGFiLVxcdTAwM2VkZXY7XFxuIDM0ODpcXHRcXHRtaGlfY3RybC1cXHUwMDNlcmVncyA9IGFiLVxcdTAwM2VtZW07XFxuIDM0OTpcXHRcXHRtaGlfY3RybC1cXHUwMDNlcmVnX2xlbiA9IGFiLVxcdTAwM2VtZW1fbGVuO1xcbiAzNTA6XFx0XFxuIDM1MTpcXHRcXHRpZiAoYWItXFx1MDAzZWZ3LmFtc3NfZGF0YSBcXHUwMDI2XFx1MDAyNiBhYi1cXHUwMDNlZncuYW1zc19sZW4gXFx1MDAzZSAwKSB7XFxuIDM1MjpcXHRcXHRcXHQvKiB1c2UgTUhJIGZpcm13YXJlIGZpbGUgZnJvbSBmaXJtd2FyZS1OLmJpbiAqL1xcbiAzNTM6XFx0XFx0XFx0bWhpX2N0cmwtXFx1MDAzZWZ3X2RhdGEgPSBhYi1cXHUwMDNlZncuYW1zc19kYXRhO1xcbiAzNTQ6XFx0XFx0XFx0bWhpX2N0cmwtXFx1MDAzZWZ3X3N6ID0gYWItXFx1MDAzZWZ3LmFtc3NfbGVuO1xcbiAzNTU6XFx0XFx0fSBlbHNlIHtcXG4gMzU2OlxcdFxcdFxcdC8qIHVzZSB0aGUgb2xkIHNlcGFyYXRlIG1oaS5iaW4gTUhJIGZpcm13YXJlIGZpbGUgKi9cXG4gMzU3OlxcdFxcdFxcdGF0aDExa19jb3JlX2NyZWF0ZV9maXJtd2FyZV9wYXRoKGFiLCBBVEgxMUtfQU1TU19GSUxFLFxcbiAzNTg6XFx0XFx0XFx0XFx0XFx0XFx0XFx0IGFiX3BjaS1cXHUwMDNlYW1zc19wYXRoLFxcbiAzNTk6XFx0XFx0XFx0XFx0XFx0XFx0XFx0IHNpemVvZihhYl9wY2ktXFx1MDAzZWFtc3NfcGF0aCkpO1xcbiAzNjA6XFx0XFx0XFx0bWhpX2N0cmwtXFx1MDAzZWZ3X2ltYWdlID0gYWJfcGNpLVxcdTAwM2VhbXNzX3BhdGg7XFxuIDM2MTpcXHRcXHR9XFxuIDM2MjpcXHRcXG4gMzYzOlxcdFxcdHJldCA9IGF0aDExa19taGlfZ2V0X21zaShhYl9wY2kpO1xcbiAzNjQ6XFx0XFx0aWYgKHJldCkge1xcbiAzNjU6XFx0XFx0XFx0YXRoMTFrX2VycihhYiwgXFxcImZhaWxlZCB0byBnZXQgbXNpIGZvciBtaGlcXFxcblxcXCIpO1xcbiAzNjY6XFx0XFx0XFx0Z290byBmcmVlX2NvbnRyb2xsZXI7XFxuIDM2NzpcXHRcXHR9XFxuIDM2ODpcXHRcXG4gMzY5OlxcdFxcdGlmICghdGVzdF9iaXQoQVRIMTFLX0ZMQUdfTVVMVElfTVNJX1ZFQ1RPUlMsIFxcdTAwMjZhYi1cXHUwMDNlZGV2X2ZsYWdzKSlcXG4gMzcwOlxcdFxcdFxcdG1oaV9jdHJsLVxcdTAwM2VpcnFfZmxhZ3MgPSBJUlFGX1NIQVJFRCB8IElSUUZfTk9CQUxBTkNJTkc7XFxuIDM3MTpcXHRcXG4gMzcyOlxcdFxcdGlmICh0ZXN0X2JpdChBVEgxMUtfRkxBR19GSVhFRF9NRU1fUkdOLCBcXHUwMDI2YWItXFx1MDAzZWRldl9mbGFncykpIHtcXG4gMzczOlxcdFxcdFxcdHJldCA9IGF0aDExa19taGlfcmVhZF9hZGRyX2Zyb21fZHQobWhpX2N0cmwpO1xcbiAzNzQ6XFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIDM3NTpcXHRcXHRcXHRcXHRnb3RvIGZyZWVfY29udHJvbGxlcjtcXG4gMzc2OlxcdFxcdH0gZWxzZSB7XFxuIDM3NzpcXHRcXHRcXHRtaGlfY3RybC1cXHUwMDNlaW92YV9zdGFydCA9IDA7XFxuIDM3ODpcXHRcXHRcXHRtaGlfY3RybC1cXHUwMDNlaW92YV9zdG9wID0gYWJfcGNpLVxcdTAwM2VkbWFfbWFzaztcXG4gMzc5OlxcdFxcdH1cXG4gMzgwOlxcdFxcbiAzODE6XFx0XFx0bWhpX2N0cmwtXFx1MDAzZXJkZG1fc2l6ZSA9IFJERE1fRFVNUF9TSVpFO1xcbiAzODI6XFx0XFx0bWhpX2N0cmwtXFx1MDAzZXNibF9zaXplID0gU1pfNTEySztcXG4gMzgzOlxcdFxcdG1oaV9jdHJsLVxcdTAwM2VzZWdfbGVuID0gU1pfNTEySztcXG4gMzg0OlxcdFxcdG1oaV9jdHJsLVxcdTAwM2VmYmNfZG93bmxvYWQgPSB0cnVlO1xcbiAzODU6XFx0XFx0bWhpX2N0cmwtXFx1MDAzZXJ1bnRpbWVfZ2V0ID0gYXRoMTFrX21oaV9vcF9ydW50aW1lX2dldDtcXG4gMzg2OlxcdFxcdG1oaV9jdHJsLVxcdTAwM2VydW50aW1lX3B1dCA9IGF0aDExa19taGlfb3BfcnVudGltZV9wdXQ7XFxuIDM4NzpcXHRcXHRtaGlfY3RybC1cXHUwMDNlc3RhdHVzX2NiID0gYXRoMTFrX21oaV9vcF9zdGF0dXNfY2I7XFxuIDM4ODpcXHRcXHRtaGlfY3RybC1cXHUwMDNlcmVhZF9yZWcgPSBhdGgxMWtfbWhpX29wX3JlYWRfcmVnO1xcbiAzODk6XFx0XFx0bWhpX2N0cmwtXFx1MDAzZXdyaXRlX3JlZyA9IGF0aDExa19taGlfb3Bfd3JpdGVfcmVnO1xcbiAzOTA6XFx0XFxuIDM5MTpcXHRcXHRzd2l0Y2ggKGFiLVxcdTAwM2Vod19yZXYpIHtcXG4gMzkyOlxcdFxcdGNhc2UgQVRIMTFLX0hXX1FDTjkwNzRfSFcxMDpcXG4gMzkzOlxcdFxcdFxcdGF0aDExa19taGlfY29uZmlnID0gXFx1MDAyNmF0aDExa19taGlfY29uZmlnX3FjbjkwNzQ7XFxuIDM5NDpcXHRcXHRcXHRicmVhaztcXG4gMzk1OlxcdFxcdGNhc2UgQVRIMTFLX0hXX1FDQTYzOTBfSFcyMDpcXG4gMzk2OlxcdFxcdGNhc2UgQVRIMTFLX0hXX1dDTjY4NTVfSFcyMDpcXG4gMzk3OlxcdFxcdGNhc2UgQVRIMTFLX0hXX1dDTjY4NTVfSFcyMTpcXG4gMzk4OlxcdFxcdGNhc2UgQVRIMTFLX0hXX1FDQTIwNjZfSFcyMTpcXG4gMzk5OlxcdFxcdGNhc2UgQVRIMTFLX0hXX1FDQTY2OThBUV9IVzIxOlxcbiA0MDA6XFx0XFx0XFx0YXRoMTFrX21oaV9jb25maWcgPSBcXHUwMDI2YXRoMTFrX21oaV9jb25maWdfcWNhNjM5MDtcXG4gNDAxOlxcdFxcdFxcdGJyZWFrO1xcbiA0MDI6XFx0XFx0ZGVmYXVsdDpcXG4gNDAzOlxcdFxcdFxcdGF0aDExa19lcnIoYWIsIFxcXCJmYWlsZWQgYXNzaWduIG1oaV9jb25maWcgZm9yIHVua25vd24gaHcgcmV2ICVkXFxcXG5cXFwiLFxcbiA0MDQ6XFx0XFx0XFx0XFx0ICAgYWItXFx1MDAzZWh3X3Jldik7XFxuIDQwNTpcXHRcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbiA0MDY6XFx0XFx0XFx0Z290byBmcmVlX2NvbnRyb2xsZXI7XFxuIDQwNzpcXHRcXHR9XFxuIDQwODpcXHRcXG4gNDA5OlxcdFxcdGFiX3BjaS1cXHUwMDNlbWhpX3ByZV9jYiA9IE1ISV9DQl9JTlZBTElEO1xcbiA0MTA6XFx0XFx0cmV0ID0gbWhpX3JlZ2lzdGVyX2NvbnRyb2xsZXIobWhpX2N0cmwsIGF0aDExa19taGlfY29uZmlnKTtcXG4gNDExOlxcdFxcdGlmIChyZXQpIHtcXG4gNDEyOlxcdFxcdFxcdGF0aDExa19lcnIoYWIsIFxcXCJmYWlsZWQgdG8gcmVnaXN0ZXIgdG8gbWhpIGJ1cywgZXJyID0gJWRcXFxcblxcXCIsIHJldCk7XFxuIDQxMzpcXHRcXHRcXHRnb3RvIGZyZWVfY29udHJvbGxlcjtcXG4gNDE0OlxcdFxcdH1cXG4gNDE1OlxcdFxcbiA0MTY6XFx0XFx0cmV0dXJuIDA7XFxuIDQxNzpcXHRcXG4gNDE4OlxcdGZyZWVfY29udHJvbGxlcjpcXG4gNDE5OlxcdFxcdG1oaV9mcmVlX2NvbnRyb2xsZXIobWhpX2N0cmwpO1xcbiA0MjA6XFx0XFx0YWJfcGNpLVxcdTAwM2VtaGlfY3RybCA9IE5VTEw7XFxuIDQyMTpcXHRcXHRyZXR1cm4gcmV0O1xcbiA0MjI6XFx0fVxcbiA0MjM6XFx0XFxuIDQyNDpcXHR2b2lkIGF0aDExa19taGlfdW5yZWdpc3RlcihzdHJ1Y3QgYXRoMTFrX3BjaSAqYWJfcGNpKVxcbiA0MjU6XFx0e1xcbiA0MjY6XFx0XFx0c3RydWN0IG1oaV9jb250cm9sbGVyICptaGlfY3RybCA9IGFiX3BjaS1cXHUwMDNlbWhpX2N0cmw7XFxuIDQyNzpcXHRcXG4gNDI4OlxcdFxcdG1oaV91bnJlZ2lzdGVyX2NvbnRyb2xsZXIobWhpX2N0cmwpO1xcbiA0Mjk6XFx0XFx0a2ZyZWUobWhpX2N0cmwtXFx1MDAzZWlycSk7XFxuIDQzMDpcXHRcXHRtaGlfZnJlZV9jb250cm9sbGVyKG1oaV9jdHJsKTtcXG4gNDMxOlxcdH1cXG4gNDMyOlxcdFxcbiA0MzM6XFx0aW50IGF0aDExa19taGlfc3RhcnQoc3RydWN0IGF0aDExa19wY2kgKmFiX3BjaSlcXG4gNDM0OlxcdHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMThUMDg6MjM6NDEuNDA4MjMzODc3WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk3ODUyNjE5MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgRHJpdmVyIFBhdGNoOiBGb2N1c2luZyBvbiBSZXNvdXJjZSBNYW5hZ2VtZW50IGFuZCBQb3RlbnRpYWwgRnV6emluZyBUYXJnZXRzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgdHJhY2luZyB0aGUgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UgZm9yIGJvdGggYGF0aDExa2AgYW5kIGBhdGgxMmtgIGRyaXZlcnMuIEl0IHNlZW1zIHRoYXQgYGF0aDExa19taGlfcmVnaXN0ZXJgIGtpY2tzIHRoaW5ncyBvZmYgd2l0aCBgbWhpX3JlZ2lzdGVyX2NvbnRyb2xsZXJgLiBUaGlzIHBhcnQsIGFzIEkgcmVjYWxsLCBtb3N0bHkgc2V0cyB1cCBzb2Z0d2FyZSBzdHJ1Y3R1cmVzLiBJdCAqbWlnaHQqIGRvIGJhc2ljIGNoZWNrcywgYnV0IGl0J3MgbGFyZ2VseSBhYm91dCByZWdpc3RyYXRpb24gd2l0aCB0aGUgTUhJIHN1YnN5c3RlbSBhbmQgaXNuJ3QgbmVjZXNzYXJpbHkgYmxvY2tlZCBieSBpbW1lZGlhdGUgaGFyZHdhcmUgcmVzcG9uc2l2ZW5lc3MuXG5cblRoZW4sIGBhdGgxMWtfcGNpX3Byb2JlYCB0YWtlcyBvdmVyIGFuZCBldmVudHVhbGx5IGhpdHMgYGF0aDExa19jb3JlX2luaXRgLCB3aGljaCB0aGVuIGxlYWRzIHRvIGBhdGgxMWtfY29yZV9zb2NfY3JlYXRlYCBhbmQgZmluYWxseSBgYXRoMTFrX3FtaV9pbml0X3NlcnZpY2VgLiBTbywgdGhlIGBxbWlgIHNlcnZpY2UgZ2V0cyBpbml0aWFsaXplZCBwcmV0dHkgZWFybHkgaW4gdGhlIHByb2JlIHNlcXVlbmNlLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gVGhlIHNhbWUgZmxvdyBpcyBhbHNvIGZvbGxvd2VkIGluIGBhdGgxMmtgIHdpdGggYGF0aDEya19xbWlfaW5pdF9zZXJ2aWNlYC5cblxuTm93LCB0aGUgcGF0Y2ggaXRzZWxmIGlzIHdoYXQgcmVhbGx5IGdyYWJzIG15IGF0dGVudGlvbi4gSXQgYWRkcyBlcnJvciBoYW5kbGluZyB0byBib3RoIGBhdGgxMWtfcW1pX2luaXRfc2VydmljZWAgYW5kIGBhdGgxMmtfcW1pX2luaXRfc2VydmljZWAuIFNwZWNpZmljYWxseSwgaXQgYWRkcmVzc2VzIHRoZSBmYWlsdXJlIHNjZW5hcmlvcyBvZiBgYWxsb2Nfb3JkZXJlZF93b3JrcXVldWVgIGFuZCBgcW1pX2FkZF9sb29rdXBgLiBUaGUgb2xkIGNvZGUgaGFkIGEgbGVhazsgaXQgd291bGQgcmV0dXJuIGFuIGVycm9yIGlmIGVpdGhlciBvZiB0aGVzZSBmYWlsZWQsIGJ1dCBpdCB3b3VsZCBsZWF2ZSB0aGUgUU1JIGhhbmRsZSBpbml0aWFsaXplZC4gVGhlIG5ldyBjb2RlIGNvcnJlY3RseSBjYWxscyBgcW1pX2hhbmRsZV9yZWxlYXNlYCBpbiB0aGVzZSBlcnJvciBjYXNlcyB0byBmcmVlIHRoZSBRTUkgaGFuZGxlLlxuXG5UaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2U7IGl0J3MgZml4aW5nIGEgbWVtb3J5L3Jlc291cmNlIGxlYWsuIEdpdmVuIG15IGV4cGVyaWVuY2UsIEkga25vdyBgYWxsb2Nfb3JkZXJlZF93b3JrcXVldWVgICpjYW4qIGZhaWwgdW5kZXIgbWVtb3J5IHByZXNzdXJlIG9yIGlmIHdlJ3ZlIGludHJvZHVjZWQgc29tZSBmYXVsdCBpbmplY3Rpb24sIGFuZCBgcW1pX2FkZF9sb29rdXBgIGlzIGFsc28gcHJvbmUgdG8gZmFpbHVyZSB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnMuIFRoZSBwYXRjaCBjb3JyZWN0cyB0aGlzIGlzc3VlIGJ5IHByb3Blcmx5IHJlbGVhc2luZyB0aGUgaGFuZGxlLlxuXG5UaGlzIGFjdHVhbGx5IG1ha2VzIHRoaXMgYW4gZXhjZWxsZW50IGNhbmRpZGF0ZSBmb3IgZnV6emluZy4gSSBjYW4gY29uc3RydWN0IHRlc3RzIHRoYXQgc2ltdWxhdGUgdGhlc2UgZXJyb3IgcGF0aHMsIGFuZCB2ZXJpZnkgdGhhdCB0aGUgbGVhayBpcyBmaXhlZCwgYW5kIHRoYXQgdGhlcmUgYXJlIG5vIHVzZS1hZnRlci1mcmVlIG9yIGRvdWJsZS1mcmVlIGNvbmRpdGlvbnMuIEl0J3MgYSB0YXJnZXRlZCBwYXRjaCwgbWFraW5nIHZlcmlmaWNhdGlvbiBtdWNoIGVhc2llci5cblxuQmVmb3JlIEkgZ28gZnVydGhlciwgSSBzaG91bGQgY2hlY2sgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEZvciBgYXRoMTFrYCBJIG5lZWQgYENPTkZJR19BVEgxMUtgIGFuZCBgQ09ORklHX0FUSDExS19QQ0lgIChvciBgQ09ORklHX0FUSDExS19BSEJgKSwgYW5kIGZvciBgYXRoMTJrYCBJIG5lZWQgYENPTkZJR19BVEgxMktgIGFuZCBgQ09ORklHX0FUSDEyS19QQ0lgIChvciBgQ09ORklHX0FUSDEyS19BSEJgKS4gSSdsbCBkb3VibGUtY2hlY2sgdGhlIGV4YWN0IG5hbWVzIGluIHRoZSBgS2NvbmZpZ2AgZmlsZXMgaW4gdGhlIGRyaXZlciBkaXJlY3RvcmllcyBqdXN0IHRvIGJlIGNlcnRhaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MjcwLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjYxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMThUMDg6MjM6NTEuMTkzNDk4NTYyWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDE3ODQzMzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBBVEgxMUtcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlLUNsZWFyXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9LY29uZmlnOjI6Y29uZmlnIEFUSDExS1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJRdWFsY29tbSA4MDIuMTFheCBjaGlwc2V0IHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL0tjb25maWctMTItXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9LY29uZmlnOjEzOmNvbmZpZyBBVEgxMUtfQUhCXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9LY29uZmlnLTE0LVxcdHRyaXN0YXRlIFxcXCJBdGhlcm9zIGF0aDExayBBSEIgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvS2NvbmZpZy0xOS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL0tjb25maWc6MjA6Y29uZmlnIEFUSDExS19QQ0lcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL0tjb25maWctMjEtXFx0dHJpc3RhdGUgXFxcIkF0aGVyb3MgYXRoMTFrIFBDSSBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9LY29uZmlnLTI5LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvS2NvbmZpZzozMDpjb25maWcgQVRIMTFLX0RFQlVHXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9LY29uZmlnLTMxLVxcdGJvb2wgXFxcIlFDQSBhdGgxMWsgZGVidWdnaW5nXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9LY29uZmlnLTM3LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvS2NvbmZpZzozODpjb25maWcgQVRIMTFLX0RFQlVHRlNcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL0tjb25maWctMzktXFx0Ym9vbCBcXFwiUUNBIGF0aDExayBkZWJ1Z2ZzIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL0tjb25maWctNDUtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9LY29uZmlnOjQ2OmNvbmZpZyBBVEgxMUtfVFJBQ0lOR1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvS2NvbmZpZy00Ny1cXHRib29sIFxcXCJhdGgxMWsgdHJhY2luZyBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9LY29uZmlnLTUxLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvS2NvbmZpZzo1Mjpjb25maWcgQVRIMTFLX1NQRUNUUkFMXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9LY29uZmlnLTUzLVxcdGJvb2wgXFxcIlFDQSBhdGgxMWsgc3BlY3RyYWwgc2NhbiBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9LY29uZmlnLTYwLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvS2NvbmZpZzo2MTpjb25maWcgQVRIMTFLX0NGUlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvS2NvbmZpZy02Mi1cXHRib29sIFxcXCJhdGgxMWsgY2hhbm5lbCBmcmVxdWVuY3kgcmVzcG9uc2Ugc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMThUMDg6MjM6NTMuMjExMzQ5NDQxWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5MTE1MzcyMzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGVsdmluZyBpbnRvIGBhdGgxMmtgIC0gQSBRdWljayBSZS1jYXAqKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUsIHdoYXQgd2VyZSB3ZSBkb2luZz8gQWggeWVzLCBjaXJjbGluZyBiYWNrIHRvIGBhdGgxMmtgLiBNeSBtaW5kIGluc3RhbnRseSBnb2VzIHRvIHRoZSBjb21wbGV4aXRpZXMgd2UndmUgYmVlbiB3b3JraW5nIHdpdGgsIHNvIGhlcmUncyB3aGF0IEknbSB0aGlua2luZzpcblxuKiAgICoqVW5kZXJzdGFuZGluZyB0aGUgQXJjaGl0ZWN0dXJlOioqIEkgbmVlZCB0byByZWZyZXNoIHRoZSBgYXRoMTJrYCBhcmNoaXRlY3R1cmUgaW4gbXkgbWluZDogd2hpY2ggcGFydGljdWxhciBjb21wb25lbnRzIHdlIHdlcmUgaW52ZXN0aWdhdGluZywgd2hpY2ggc3BlY2lmaWMgYXNwZWN0cyBvZiB0aGUgZmlybXdhcmUncyBmdW5jdGlvbiB3ZXJlIHJlbGV2YW50IHRvIHRoZSBwcmVzZW50IG5lZWQsIGFuZCBob3cgaXQgaXMgZGlmZmVyZW50IGZyb20gYXRoMTFrIChpZiB0aGF0IGlzIGV2ZW4gYXBwbGljYWJsZSkuXG5cbiogICAqKkZpcm13YXJlIGludGVyYWN0aW9ucyoqOiBUaGUgaW50ZXJhY3Rpb25zIGJldHdlZW4gdGhlIGZpcm13YXJlIGFuZCB0aGUga2VybmVsIHdlcmUgcGFydGljdWxhcmx5IGludm9sdmVkOyBlc3BlY2lhbGx5IGFueSBpbnRlcnJ1cHQtZHJpdmVuIGhhbmRsaW5nIG9yIGFueSBzaGFyZWQgbWVtb3J5IHN0cnVjdHVyZXMuIFdoYXQgd2VyZSB0aGUgc3BlY2lmaWMgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBob3cgd2VyZSB3ZSBjaGFuZ2luZyB0aGVtIHRvIGFjaGlldmUgd2hhdCB3ZSBuZWVkZWQ/XG5cbiogICAqKlBlcmZvcm1hbmNlIEJvdHRsZW5lY2tzOioqIFdoYXQgd2VyZSB0aGUgcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgd2Ugd2VyZSBleHBlY3RpbmcgdG8gc2VlPyBXaGF0IGRpZCB3ZSBkbyB0byB0cnkgYW5kIGdldCBhcm91bmQgdGhlbT9cblxuKiAgICoqS2V5IERlYnVnZ2luZyBQb2ludHM6KiogV2hhdCB3ZXJlIHRoZSBzcGVjaWZpYyB0ZXN0IHBhcmFtZXRlcnMgd2UgdXNlZCB0byByZXBsaWNhdGUgdGhlIGlzc3VlPyBIb3cgZGlkIHdlIGdhdGhlciBtZXRyaWNzPyBXYXMgdGhlcmUgYSBzcGVjaWZpYyB0b29sIG9yIGRlYnVnZ2luZyBtZXRob2Qgd2UgdXNlZCB0byBpc29sYXRlIHByb2JsZW1zPyBJIG5lZWQgdG8gZm9jdXMgb24gd2hhdCBkYXRhIHdlIHdlcmUgZXhhbWluaW5nIHRvIGFycml2ZSBhdCBvdXIgaW5pdGlhbCBjb25jbHVzaW9ucy5cbiogICAqKkNvbnRleHR1YWwgQ29uc2lkZXJhdGlvbnM6KiogTW9zdCBpbXBvcnRhbnRseSwgSSBuZWVkIHRvIHJlbWluZCBteXNlbGYgb2YgdGhlIFwid2h5XCIuIFdoeSB3ZXJlIHdlIGludmVzdGlnYXRpbmcgdGhpcyBkcml2ZXI/IFdoYXQgd2FzIHRoZSBoaWdoZXItbGV2ZWwgcHJvYmxlbSB3ZSB3ZXJlIHRyeWluZyB0byBzb2x2ZSwgYW5kIHdoYXQgd2VyZSB0aGUgY29uc3RyYWludHMgb2YgdGhlIHRhcmdldCBoYXJkd2FyZT8gVGhlIHVsdGltYXRlIHVzZXIgbmVlZHMgdG8gYmUgcmVmcmVzaGVkIHRvby5cbiogICAqKlRoZSBOZXh0IFN0ZXBzOioqIFdoYXQgZGlkIHdlIHRoaW5rIHRoZSBuZXh0IHN0ZXBzIHdlcmU/IEkgc2hvdWxkIGFsc28ga2VlcCBpbiBtaW5kIHdoZXRoZXIgd2UgaWRlbnRpZmllZCBhbnkgbW9yZSB3b3JrIHdoaWNoIG5lZWRzIHRvIGJlIGRvbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMjQxLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xOFQwODoyMzo1Ny4xMjI4ODkxNzhaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3Nzg5MjU1MTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEFUSDEyS1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UtQ2xlYXJcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWc6Mjpjb25maWcgQVRIMTJLXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIlF1YWxjb21tIFdpLUZpIDcgc3VwcG9ydCAoYXRoMTJrKVxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvS2NvbmZpZy0xNi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWc6MTc6Y29uZmlnIEFUSDEyS19BSEJcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWctMTgtXFx0Ym9vbCBcXFwiUXVhbGNvbW0gYXRoMTJrIEFIQiBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnLTI0LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvS2NvbmZpZzoyNTpjb25maWcgQVRIMTJLX0RFQlVHXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnLTI2LVxcdGJvb2wgXFxcImF0aDEyayBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWctMzQtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnOjM1OmNvbmZpZyBBVEgxMktfREVCVUdGU1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvS2NvbmZpZy0zNi1cXHRib29sIFxcXCJRdWFsY29tbSBhdGgxMmsgZGVidWdmcyBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnLTQzLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvS2NvbmZpZzo0NDpjb25maWcgQVRIMTJLX1RSQUNJTkdcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWctNDUtXFx0Ym9vbCBcXFwiYXRoMTJrIHRyYWNpbmcgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvS2NvbmZpZy01Mi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWc6NTM6Y29uZmlnIEFUSDEyS19DT1JFRFVNUFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvS2NvbmZpZy01NC1cXHRib29sIFxcXCJhdGgxMmsgY29yZWR1bXBcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE4VDA4OjIzOjU4LjkwMTgxOTM4M1oiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDM3MTEyMzM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUuIFRoaXMgYEFUSDEyS19QQ0lgIHRoaW5nLi4uIGl0J3MgdGhyb3dpbmcgYSBmbGFnLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJXYWl0IGEgbWludXRlLCBpcyB0aGF0IGV2ZW4gYSB0aGluZz8gRG9lc24ndCByaW5nIGEgYmVsbC5cIiBMZXQncyB2ZXJpZnkuIE15IGZpcnN0IGluc3RpbmN0LCBhcyBhbHdheXMsIGlzIHRvIGRpdmUgaW50byB0aGUgS2NvbmZpZy4gSSdsbCBoZWFkIHN0cmFpZ2h0IHRvIGBkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWdgLiBUaGF0J3Mgd2hlcmUgYWxsIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoYXQgZmFtaWx5IG9mIGRyaXZlcnMgbGl2ZS4gSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBQQ0kgc3VwcG9ydCwgaW4gcGFydGljdWxhciwgaXMgZGVmaW5lZCBvciBldmVuIG1lbnRpb25lZCB0aGVyZS4gVGhhdCdzIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IHRvIGRldGVybWluZSBpZiB0aGlzIGNvZGUgcGF0aCBpcyB2YWxpZCBvciBpZiB0aGVyZSdzIGEgbWlzdW5kZXJzdGFuZGluZyBzb21ld2hlcmUuIEknbGwgdXNlIHRoZSBLY29uZmlnIHRvIHVuZGVyc3RhbmQgdGhlIHdob2xlIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMTcyLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMThUMDg6MjQ6MDIuMzM4OTM0MjA5WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjczODkzMTAxLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQVRIMTJLX1BDSVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMThUMDg6MjQ6MDQuMDEyODM0MTcxWiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1NzIzNTM2MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSBgZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnYCBmaWxlLlxuXG4qKkRpdmluZyBpbnRvIHRoZSBBdGhlcm9zIGF0aDEyayBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGludG8gdGhpcyBgS2NvbmZpZ2AgZmlsZSBmb3IgdGhlIGF0aDEyayBkcml2ZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBzdHJ1Y3R1cmVkIGZvciB0aGlzIHNwZWNpZmljIFF1YWxjb21tIEF0aGVyb3Mgd2lyZWxlc3MgY2hpcHNldC4gTXkgaW5pdGlhbCBnb2FsIGlzIHRvIHNlZSB3aGF0IGdyYW51bGFyIGNvbnRyb2wgaXMgZXhwb3NlZCB0byB0aGUgdXNlciwgd2hhdCBmZWF0dXJlcyBhcmUgb3B0aW9uYWwsIGFuZCBob3cgdGhleSByZWxhdGUgdG8gdGhlIGNvcmUgZnVuY3Rpb25hbGl0eS4gSSdtIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlOlxuXG4qICAgKipDaGlwc2V0IFNwZWNpZmljIEZlYXR1cmVzOioqIEFyZSB0aGVyZSBvcHRpb25zIGZvciBlbmFibGluZyBvciBkaXNhYmxpbmcgcGFydGljdWxhciBoYXJkd2FyZSBmZWF0dXJlcyBiYXNlZCBvbiB0aGUgc3BlY2lmaWMgYXRoMTJrIGNoaXBzZXQgdmFyaWFudD8gSSdkIGV4cGVjdCB0byBmaW5kIHRoaW5ncyB0aWVkIHRvIHNwZWNpZmljIFBIWSBtb2Rlcywgb3IgcG93ZXItc2F2aW5nIGNvbmZpZ3VyYXRpb25zLlxuKiAgICoqRHJpdmVyIEZlYXR1cmVzOioqIFdoYXQga25vYnMgZG9lcyB0aGUgZHJpdmVyIGV4cG9zZSB0byB0aGUgdXNlcj8gQXJlIHRoZXJlIGRlYnVnZ2luZyBvcHRpb25zLCBhZHZhbmNlZCBzZXR0aW5ncyAobGlrZSB0aG9zZSByZWxhdGVkIHRvIGZpcm13YXJlIGxvYWRpbmcsIHJhdGUgY29udHJvbCBhbGdvcml0aG1zLCBvciByZWd1bGF0b3J5IGRvbWFpbiBoYW5kbGluZyksIG9yIHNwZWNpZmljIGZlYXR1cmVzIGZvciBkaWZmZXJlbnQgV2ktRmkgc3RhbmRhcmRzICg4MDIuMTFheCwgODAyLjExYWMsIGV0Yy4pPyBJIHdhbnQgdG8gc2VlIGhvdyBtdWNoIGZsZXhpYmlsaXR5IHRoZSBzeXN0ZW0gZ2l2ZXMgbWUgd2hlbiB0dW5pbmcgYSBkZXZpY2UuXG4qICAgKipEZXBlbmRlbmNpZXM6KiogQXJlIHRoZXJlIGFueSBkZXBlbmRlbmNpZXMgb24gb3RoZXIga2VybmVsIGZlYXR1cmVzIG9yIGRyaXZlcnM/IFRoaXMgaXMgY3JpdGljYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IGF0aDEyayBpbnRlZ3JhdGVzIGludG8gdGhlIGJpZ2dlciBwaWN0dXJlLiBJJ20gdGhpbmtpbmcgb2YgZGVwZW5kZW5jaWVzIG9uIHJlZ3VsYXRvcnkgZGF0YWJhc2UgZmVhdHVyZXMsIGZpcm13YXJlIGxvYWRpbmcgbWVjaGFuaXNtcywgb3Igb3RoZXIgbmV0d29yayBzdGFjayBjb21wb25lbnRzLiBJIG5lZWQgdG8ga25vdyB3aGF0IHRvIGVuYWJsZSBvciBkaXNhYmxlIGluIG9yZGVyIHRvIGdldCB0aGUgYXRoMTJrIGRyaXZlciB0byBmdW5jdGlvbiBpbiBhbiBleHBlY3RlZCB3YXkuXG4qICAgKipEZWZhdWx0IFZhbHVlcyBhbmQgSGVscCBUZXh0OioqIFRoZSBkZWZhdWx0IHZhbHVlcyBhbmQgaGVscCB0ZXh0IGFyZSBlc3NlbnRpYWwuIFRoZXkgcXVpY2tseSB0ZWxsIG1lIHdoYXQncyBpbXBvcnRhbnQsIHdoYXQgdGhlIGltcGxpY2F0aW9ucyBvZiBjaGFuZ2luZyBhIHNldHRpbmcgYXJlLCBhbmQgaG93IHRoZSBkZWZhdWx0IGNob2ljZXMgcmVsYXRlIHRvIHRoZSBnZW5lcmFsIG9wZXJhdGluZyBjb25kaXRpb25zLiBJJ2xsIGZvY3VzIG9uIHRoZXNlIHRvIGdldCBhIHF1aWNrIG92ZXJ2aWV3LlxuKiAgICoqTWVudSBzdHJ1Y3R1cmUqKjogRmluYWxseSwgdGhlIG1lbnUgc3RydWN0dXJlIHdpbGwgc2hvdyBtZSBob3cgYWxsIHRoZXNlIG9wdGlvbnMgYXJlIGdyb3VwZWQgdG9nZXRoZXIuIFRoaXMgcmV2ZWFscyB0aGUgbG9naWMgb2YgaG93IFF1YWxjb21tIGlzIG1hbmFnaW5nIHRoZSBkcml2ZXIncyBmZWF0dXJlIHNldCBhbmQgaG93IGl0IHByZXNlbnRzIHRoZSBvcHRpb25zIHRvIHRoZSBrZXJuZWwgdXNlci5cblxuSSdsbCBiZSBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBjb25kaXRpb25hbCBjb25maWd1cmF0aW9ucyAodXNpbmcgYGRlcGVuZHMgb25gLCBgc2VsZWN0YCwgZXRjLikgdG8gZ2V0IGEgZ29vZCBoYW5kbGUgb24gaG93IGRpZmZlcmVudCBjb25maWd1cmF0aW9ucyBpbnRlcmFjdCwgYW5kIGhvdyB0byBhdm9pZCBwb3RlbnRpYWwgY29uZmxpY3RzIHdoZW4gY3VzdG9taXppbmcgdGhlIGJ1aWxkLiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZmluZCFcblxuXG4iLCJJbnB1dFRva2VucyI6MjE0MDksIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xOFQwODoyNDowOC41ODUxOTAyODRaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzE3NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZS1DbGVhclxcbiAgIDI6XFx0Y29uZmlnIEFUSDEyS1xcbiAgIDM6XFx0XFx0dHJpc3RhdGUgXFxcIlF1YWxjb21tIFdpLUZpIDcgc3VwcG9ydCAoYXRoMTJrKVxcXCJcXG4gICA0OlxcdFxcdGRlcGVuZHMgb24gTUFDODAyMTEgXFx1MDAyNlxcdTAwMjYgSEFTX0RNQSBcXHUwMDI2XFx1MDAyNiBQQ0lcXG4gICA1OlxcdFxcdHNlbGVjdCBRQ09NX1FNSV9IRUxQRVJTXFxuICAgNjpcXHRcXHRzZWxlY3QgTUhJX0JVU1xcbiAgIDc6XFx0XFx0c2VsZWN0IFFSVFJcXG4gICA4OlxcdFxcdHNlbGVjdCBRUlRSX01ISVxcbiAgIDk6XFx0XFx0c2VsZWN0IFBDSV9QV1JDVFJMX1BXUlNFUSBpZiBIQVZFX1BXUkNUUkxcXG4gIDEwOlxcdFxcdGhlbHBcXG4gIDExOlxcdFxcdCAgRW5hYmxlIHN1cHBvcnQgZm9yIFF1YWxjb21tIFRlY2hub2xvZ2llcyBXaS1GaSA3IChJRUVFXFxuICAxMjpcXHRcXHQgIDgwMi4xMWJlKSBmYW1pbHkgb2YgY2hpcHNldHMsIGZvciBleGFtcGxlIFdDTjc4NTAgYW5kXFxuICAxMzpcXHRcXHQgIFFDTjkyNzQuXFxuICAxNDpcXHRcXG4gIDE1OlxcdFxcdCAgSWYgeW91IGNob29zZSB0byBidWlsZCBhIG1vZHVsZSwgaXQnbGwgYmUgY2FsbGVkIGF0aDEyay5cXG4gIDE2OlxcdFxcbiAgMTc6XFx0Y29uZmlnIEFUSDEyS19BSEJcXG4gIDE4OlxcdFxcdGJvb2wgXFxcIlF1YWxjb21tIGF0aDEyayBBSEIgc3VwcG9ydFxcXCJcXG4gIDE5OlxcdFxcdGRlcGVuZHMgb24gQVRIMTJLIFxcdTAwMjZcXHUwMDI2IFJFTU9URVBST0NcXG4gIDIwOlxcdFxcdHNlbGVjdCBRQ09NX01EVF9MT0FERVJcXG4gIDIxOlxcdFxcdHNlbGVjdCBRQ09NX1NDTVxcbiAgMjI6XFx0XFx0aGVscFxcbiAgMjM6XFx0XFx0ICBFbmFibGUgc3VwcG9ydCBmb3IgQXRoMTJrIEFIQiBidXMgY2hpcHNldHMsIGV4YW1wbGUgSVBRNTMzMi5cXG4gIDI0OlxcdFxcbiAgMjU6XFx0Y29uZmlnIEFUSDEyS19ERUJVR1xcbiAgMjY6XFx0XFx0Ym9vbCBcXFwiYXRoMTJrIGRlYnVnZ2luZ1xcXCJcXG4gIDI3OlxcdFxcdGRlcGVuZHMgb24gQVRIMTJLXFxuICAyODpcXHRcXHRoZWxwXFxuICAyOTpcXHRcXHQgIEVuYWJsZSBkZWJ1ZyBzdXBwb3J0LCBmb3IgZXhhbXBsZSBkZWJ1ZyBtZXNzYWdlcyB3aGljaCBtdXN0XFxuICAzMDpcXHRcXHQgIGJlIGVuYWJsZWQgc2VwYXJhdGVseSB1c2luZyB0aGUgZGVidWdfbWFzayBtb2R1bGUgcGFyYW1ldGVyLlxcbiAgMzE6XFx0XFxuICAzMjpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IFkgdG8gbWFrZSBpdCBlYXNpZXIgdG8gZGVidWcgcHJvYmxlbXMuIEJ1dCBpZlxcbiAgMzM6XFx0XFx0ICB5b3Ugd2FudCBvcHRpbWFsIHBlcmZvcm1hbmNlIGNob29zZSBOLlxcbiAgMzQ6XFx0XFxuICAzNTpcXHRjb25maWcgQVRIMTJLX0RFQlVHRlNcXG4gIDM2OlxcdFxcdGJvb2wgXFxcIlF1YWxjb21tIGF0aDEyayBkZWJ1Z2ZzIHN1cHBvcnRcXFwiXFxuICAzNzpcXHRcXHRkZXBlbmRzIG9uIEFUSDEySyBcXHUwMDI2XFx1MDAyNiBNQUM4MDIxMV9ERUJVR0ZTXFxuICAzODpcXHRcXHRoZWxwXFxuICAzOTpcXHRcXHQgIEVuYWJsZSBhdGgxMmsgZGVidWdmcyBzdXBwb3J0XFxuICA0MDpcXHRcXG4gIDQxOlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgWSB0byBtYWtlIGl0IGVhc2llciB0byBkZWJ1ZyBwcm9ibGVtcy4gQnV0IGlmXFxuICA0MjpcXHRcXHQgIHlvdSB3YW50IG9wdGltYWwgcGVyZm9ybWFuY2UgY2hvb3NlIE4uXFxuICA0MzpcXHRcXG4gIDQ0OlxcdGNvbmZpZyBBVEgxMktfVFJBQ0lOR1xcbiAgNDU6XFx0XFx0Ym9vbCBcXFwiYXRoMTJrIHRyYWNpbmcgc3VwcG9ydFxcXCJcXG4gIDQ2OlxcdFxcdGRlcGVuZHMgb24gQVRIMTJLIFxcdTAwMjZcXHUwMDI2IEVWRU5UX1RSQUNJTkdcXG4gIDQ3OlxcdFxcdGhlbHBcXG4gIDQ4OlxcdFxcdCAgRW5hYmxlIGF0aDEyayB0cmFjaW5nIGluZnJhc3RydWN0dXJlLlxcbiAgNDk6XFx0XFxuICA1MDpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IFkgdG8gbWFrZSBpdCBlYXNpZXIgdG8gZGVidWcgcHJvYmxlbXMuIEJ1dCBpZlxcbiAgNTE6XFx0XFx0ICB5b3Ugd2FudCBvcHRpbWFsIHBlcmZvcm1hbmNlIGNob29zZSBOLlxcbiAgNTI6XFx0XFxuICA1MzpcXHRjb25maWcgQVRIMTJLX0NPUkVEVU1QXFxuICA1NDpcXHRcXHRib29sIFxcXCJhdGgxMmsgY29yZWR1bXBcXFwiXFxuICA1NTpcXHRcXHRkZXBlbmRzIG9uIEFUSDEyS1xcbiAgNTY6XFx0XFx0c2VsZWN0IFdBTlRfREVWX0NPUkVEVU1QXFxuICA1NzpcXHRcXHRoZWxwXFxuICA1ODpcXHRcXHQgIEVuYWJsZSBhdGgxMmsgY29yZWR1bXAgY29sbGVjdGlvblxcbiAgNTk6XFx0XFxuICA2MDpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IFkgdG8gbWFrZSBpdCBlYXNpZXIgdG8gZGVidWcgcHJvYmxlbXMuIEJ1dCBpZlxcbiAgNjE6XFx0XFx0ICBkdW1wIGNvbGxlY3Rpb24gbm90IHJlcXVpcmVkIGNob29zZSBOLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xOFQwODoyNDowOC41ODUyNjMxMzVaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjE3OTA0MzE0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBBVEgxMksgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcywgYEFUSDEyS2AgaW5oZXJlbnRseSByZWxpZXMgb24gYFBDSWAsIGFuZCBpdCBzZWVtcyB0aGUgYnVpbGQgc3lzdGVtIGVuYWJsZXMgUENJIHN1cHBvcnQgYnkgZGVmYXVsdC4gUmlnaHQsIHNvIGlmIEkgd2FudCB0byBlbnN1cmUgZXZlcnl0aGluZyBpcyBpbiBwbGFjZSwgdGhlIGNvcmUgY29uZmlndXJhdGlvbnMgSSBuZWVkIHRvIHNldCBhcmUgYEFUSDExS2AsIGBBVEgxMUtfUENJYCwgYEFUSDExS19BSEJgLCBgQVRIMTJLYCwgYW5kIGBBVEgxMktfQUhCYC4gTm93LCBoYW5nIG9uIGEgc2Vjb25kLCBgQVRIMTFLX1BDSWAgYW5kIGBBVEgxMUtfQUhCYCBhcmUgdHJpc3RhdGUgb3B0aW9ucywgYXMgaXMgYEFUSDEyS2AsIHdoaWxlIGBBVEgxMktfQUhCYCBpcyBhIEJvb2xlYW4uIEdpdmVuIHRoYXQsIHRoZSBtb3N0IHN0cmFpZ2h0Zm9yd2FyZCBhcHByb2FjaCBzZWVtcyB0byBiZSB0byBlbmFibGUgYEFUSDExS2AsIGBBVEgxMUtfUENJYCwgYW5kIGBBVEgxMktgLiBUaGF0IHNob3VsZCBjb3ZlciB0aGUgZXNzZW50aWFscy5cblxuTGV0J3Mgc2hpZnQgZm9jdXMgbm93LiBJIG5lZWQgdG8gemVybyBpbiBvbiB0aGUga2V5IG1vZGlmaWVkIGZ1bmN0aW9ucy4gVGhlIGluZGljYXRvcnMgYXJlIGBhdGgxMWtfcW1pX2luaXRfc2VydmljZWAgYW5kIGBhdGgxMmtfcW1pX2luaXRfc2VydmljZWAuIFRob3NlIGFyZSBnb29kLCB3ZWxsLWRlZmluZWQgZm9jdXMgc3ltYm9scy4gSSBxdWlja2x5IHNjYW4uLi4gb2theSwgdGhlcmUgYXJlbid0IGFueSBvdGhlciBmdW5jdGlvbnMgdGhhdCB3ZXJlIG9idmlvdXNseSBjaGFuZ2VkLiBHb29kLlxuXG5BbHJpZ2h0LCBub3cgdGhlIGltcG9ydGFudCBxdWVzdGlvbi4gQ2FuIEkgcmVhY2ggYGF0aDExa19xbWlfaW5pdF9zZXJ2aWNlYCBldmVuIHdoZW4gbm8gYWN0dWFsIGhhcmR3YXJlIGlzIHByZXNlbnQ/IFdlIGtub3cgc3l6a2FsbGVyIGNhbiBpbmplY3QgdmlydHVhbCBQQ0kgZGV2aWNlcywgd2hpY2ggd291bGQgdHJpZ2dlciBgYXRoMTFrX3BjaV9wcm9iZWAuIEZvbGxvd2luZyB0aGUgZXhlY3V0aW9uIHBhdGgsIGBhdGgxMWtfcGNpX3Byb2JlYCBjYWxscyBgYXRoMTFrX2NvcmVfaW5pdGAsIGFuZCBmcm9tIHRoZXJlIHdlIGdldCBgYXRoMTFrX2NvcmVfc29jX2NyZWF0ZWAsIHdoaWNoIGZpbmFsbHkgY2FsbHMgYGF0aDExa19xbWlfaW5pdF9zZXJ2aWNlYC4gVGhlIG9ubHkgc3RpY2tpbmcgcG9pbnQgc2VlbXMgdG8gYmUgYGF0aDExa19taGlfcmVnaXN0ZXJgLCBidXQgZnJvbSB3aGF0IEkgcmVjYWxsLCB0aGF0IGp1c3QgcmVnaXN0ZXJzIHRoZSBNSEkgY29udHJvbGxlciBhbmQgaXNuJ3QgYSBibG9ja2VyLiBXYWl0Li4ud2hhdCBhYm91dCBgYXRoMTFrX3BjaV9yZWFkX2h3X3ZlcnNpb25gPyBUaGF0IHJlcXVpcmVzIGNsb3NlciBzY3J1dGlueS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI4MjYsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xOFQwODoyNDoxNC43NjQzMDk2MDRaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MzE3OTM0NjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXRoMTFrX3BjaV9yZWFkX2h3X3ZlcnNpb25cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9wY2kuYz04OTk9c3RhdGljIGNvbnN0IHN0cnVjdCBhdGgxMWtfaGlmX29wcyBhdGgxMWtfcGNpX2hpZl9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3BjaS5jLTkyMS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3BjaS5jOjkyMjpzdGF0aWMgdm9pZCBhdGgxMWtfcGNpX3JlYWRfaHdfdmVyc2lvbihzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiLCB1MzIgKm1ham9yLCB1MzIgKm1pbm9yKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvcGNpLmMtOTIzLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvcGNpLmM9OTQ1PXN0YXRpYyBpbnQgYXRoMTFrX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvcGNpLmMtMTAwMS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3BjaS5jOjEwMDI6XFx0XFx0YXRoMTFrX3BjaV9yZWFkX2h3X3ZlcnNpb24oYWIsIFxcdTAwMjZzb2NfaHdfdmVyc2lvbl9tYWpvcixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3BjaS5jLTEwMDMtXFx0XFx0XFx0XFx0XFx0ICAgXFx1MDAyNnNvY19od192ZXJzaW9uX21pbm9yKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvcGNpLmMtMTAzMC1cXHRcXHRhYi1cXHUwMDNlaWQuYmRmX3NlYXJjaCA9IEFUSDExS19CREZfU0VBUkNIX0JVU19BTkRfQk9BUkQ7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9wY2kuYzoxMDMxOlxcdFxcdGF0aDExa19wY2lfcmVhZF9od192ZXJzaW9uKGFiLCBcXHUwMDI2c29jX2h3X3ZlcnNpb25fbWFqb3IsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9wY2kuYy0xMDMyLVxcdFxcdFxcdFxcdFxcdCAgIFxcdTAwMjZzb2NfaHdfdmVyc2lvbl9taW5vcik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE4VDA4OjI0OjE2LjU5NjExMDQ3NVoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MzE1ODIwMzM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBgYXRoMTFrX3BjaV9yZWFkX2h3X3ZlcnNpb25gIGZ1bmN0aW9uLiBJJ20gaW1tZWRpYXRlbHkgaW50ZXJlc3RlZCBpbiB3aGF0IHRoaXMgcm91dGluZSBpcyB0cnlpbmcgdG8gYWNjb21wbGlzaCDigJMgdGhlIG5hbWUgc3VnZ2VzdHMgd2UncmUgZGVhbGluZyB3aXRoIGhhcmR3YXJlIHZlcnNpb24gaW5mb3JtYXRpb24sIHByb2JhYmx5IHJlbGF0ZWQgdG8gdGhlIFBDSSBpbnRlcmZhY2UgYW5kIHRoaXMgcGFydGljdWxhciBhdGgxMWsgZHJpdmVyLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcXVpY2tseSBhc2NlcnRhaW4gaXRzIHBsYWNlIHdpdGhpbiB0aGUgYnJvYWRlciBQQ0kgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UuIElzIHRoaXMgcGFydCBvZiBhIHByb2JlIHJvdXRpbmU/IENhbGxlZCBlYXJseSBpbiB0aGUgc2V0dXA/IE9yIGlzIGl0IHNvbWV0aGluZyBhY2Nlc3NlZCBsYXRlciBvbiwgcGVyaGFwcyBmb3IgZGlhZ25vc3RpYyBwdXJwb3NlcyBvciBkdXJpbmcgZmlybXdhcmUgbG9hZGluZz8gVW5kZXJzdGFuZGluZyBpdHMgY29udGV4dCBpcyBjcnVjaWFsLlxuXG5JIG5lZWQgdG8gc2VlIGhvdyB0aGUgaGFyZHdhcmUgdmVyc2lvbiBpcyBhY3R1YWxseSByZWFkLiBBcmUgd2UgdXNpbmcgc3RhbmRhcmQgUENJIGNvbmZpZ3VyYXRpb24gc3BhY2UgcmVhZHM/IE9yIGFyZSB0aGVyZSBzb21lIGN1c3RvbSByZWdpc3RlciBhY2Nlc3NlcyBpbnZvbHZlZCBzcGVjaWZpYyB0byBRdWFsY29tbSdzIGhhcmR3YXJlPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBlcnJvciBjb25kaXRpb25zIEkgc2hvdWxkIGJlIG9uIHRoZSBsb29rb3V0IGZvcj8gQW5kIGlmIHNvLCBob3cgaXMgdGhlIGVycm9yIGhhbmRsZWQuIFdoYXQgaXMgdGhlIGV4cGVjdGVkIGZvcm1hdCBvZiB0aGlzIFwidmVyc2lvblwiIGRhdGE/IElzIGl0IGEgc2ltcGxlIGludGVnZXIsIG9yIGEgbW9yZSBjb21wbGV4IHN0cnVjdHVyZT8gQXJlIHRoZXJlIGltcGxpY2F0aW9ucyBmb3IgZGV2aWNlIGNvbXBhdGliaWxpdHkgb3IgZmVhdHVyZSBzZXRzIGJhc2VkIG9uIHRoZSByZXBvcnRlZCB2ZXJzaW9uPyBBbmQgd2hhdCBoYXBwZW5zIGlmIHRoZSByZWFkIGZhaWxzPyBEb2VzIGl0IHJldHJ5PyBEb2VzIGl0IHByb3ZpZGUgYSBtZWFuaW5nZnVsIGVycm9yIGNvZGUgYmFjayB0byB0aGUgY2FsbGVyPyBUaGVzZSBhcmUgYWxsIHF1ZXN0aW9ucyB0aGF0IG5lZWQgYW5zd2VyaW5nLlxuXG5JJ2QgYWxzbyB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIGltcGFjdCBvZiBhbnkgaGFyZHdhcmUgdmVyc2lvbiBjaGVja3MsIGFuZCBwb3RlbnRpYWwgdmVyc2lvbi1zcGVjaWZpYyBiZWhhdmlvcnMgd2l0aGluIHRoZSBkcml2ZXIuIERvZXMgdGhlIGNvZGUgYnJhbmNoIGJhc2VkIG9uIHRoZSByZXBvcnRlZCBoYXJkd2FyZSB2ZXJzaW9uPyBBcmUgdGhlcmUgZGlmZmVyZW50IGluaXRpYWxpemF0aW9uIHNlcXVlbmNlcywgcmVnaXN0ZXIgc2V0dGluZ3MsIG9yIGV2ZW4gZmlybXdhcmUgbG9hZHMgYmFzZWQgb24gdGhpcyBpbmZvcm1hdGlvbj8gSSdsbCBuZWVkIHRvIHRyYWNlIHRoZSBmbG93IG9mIGV4ZWN1dGlvbiBhZnRlciB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCwgdG8gc2VlIGhvdyB0aGUgaGFyZHdhcmUgdmVyc2lvbiBpcyBhY3R1YWxseSAqdXNlZCouIFRoaXMgaGVscHMgaWRlbnRpZnkgYW55IGFyZWFzIHRoYXQgY291bGQgaGF2ZSBwb3RlbnRpYWwgY29tcGF0aWJpbGl0eSBvciBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMgYmFzZWQgb24gdGhlIHZlcnNpb24gb2YgdGhlIGhhcmR3YXJlLCBvciBldmVuIGhvdyB0aGUgZHJpdmVyIGhhbmRsZXMgZGlmZmVyZW50IGdlbmVyYXRpb25zIG9mIHRoZSBQQ0kgaW50ZXJmYWNlLiBPdmVyYWxsLCBJIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgaXQgaWRlbnRpZmllcyBhbmQgaW50ZXJhY3RzIHdpdGggdGhlIHBoeXNpY2FsIGhhcmR3YXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDEzMywiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE4VDA4OjI0OjIxLjkxMTkzMzQxWiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk2ODQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvcGNpLmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTIyLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgOTIyOlxcdHN0YXRpYyB2b2lkIGF0aDExa19wY2lfcmVhZF9od192ZXJzaW9uKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIsIHUzMiAqbWFqb3IsIHUzMiAqbWlub3IpXFxuIDkyMzpcXHR7XFxuIDkyNDpcXHRcXHR1MzIgc29jX2h3X3ZlcnNpb247XFxuIDkyNTpcXHRcXG4gOTI2OlxcdFxcdHNvY19od192ZXJzaW9uID0gYXRoMTFrX3BjaWNfcmVhZDMyKGFiLCBUQ1NSX1NPQ19IV19WRVJTSU9OKTtcXG4gOTI3OlxcdFxcdCptYWpvciA9IEZJRUxEX0dFVChUQ1NSX1NPQ19IV19WRVJTSU9OX01BSk9SX01BU0ssXFxuIDkyODpcXHRcXHRcXHRcXHQgICBzb2NfaHdfdmVyc2lvbik7XFxuIDkyOTpcXHRcXHQqbWlub3IgPSBGSUVMRF9HRVQoVENTUl9TT0NfSFdfVkVSU0lPTl9NSU5PUl9NQVNLLFxcbiA5MzA6XFx0XFx0XFx0XFx0ICAgc29jX2h3X3ZlcnNpb24pO1xcbiA5MzE6XFx0XFxuIDkzMjpcXHRcXHRhdGgxMWtfZGJnKGFiLCBBVEgxMUtfREJHX1BDSSwgXFxcInRjc3Jfc29jX2h3X3ZlcnNpb24gbWFqb3IgJWQgbWlub3IgJWRcXFxcblxcXCIsXFxuIDkzMzpcXHRcXHRcXHQgICAqbWFqb3IsICptaW5vcik7XFxuIDkzNDpcXHR9XFxuIDkzNTpcXHRcXG4gOTM2OlxcdHN0YXRpYyBpbnQgYXRoMTFrX3BjaV9zZXRfaXJxX2FmZmluaXR5X2hpbnQoc3RydWN0IGF0aDExa19wY2kgKmFiX3BjaSxcXG4gOTM3OlxcdFxcdFxcdFxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbSlcXG4gOTM4OlxcdHtcXG4gOTM5OlxcdFxcdGlmICh0ZXN0X2JpdChBVEgxMUtfRkxBR19NVUxUSV9NU0lfVkVDVE9SUywgXFx1MDAyNmFiX3BjaS1cXHUwMDNlYWItXFx1MDAzZWRldl9mbGFncykpXFxuIDk0MDpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gOTQxOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xOFQwODoyNDoyMS45MTIwMzE3MloiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MjY4MDc5MDI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBQQ0kgUHJvYmUgVnVsbmVyYWJpbGl0aWVzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgYXRoMTFrX3BjaV9wcm9iZWAgZnVuY3Rpb24gYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBQQ0kgbWVtb3J5LW1hcHBlZCBJL08uIFRoZSBgYXRoMTFrX3BjaWNfcmVhZDMyYCBmdW5jdGlvbiBpcyB0aGUga2V5IGhlcmU7IGl0J3MgcmVhZGluZyBmcm9tIFBDSSBtZW1vcnksIGFuZCB3ZSBrbm93IHRoYXQgU3l6a2FsbGVyJ3MgdmlydHVhbCBQQ0kgZGV2aWNlIGNhbiBpbmplY3QgYXJiaXRyYXJ5IHZhbHVlcyBkdXJpbmcgdGhlc2UgcmVhZHMuIFRoYXQncyBpbW1lZGlhdGVseSBpbnRlcmVzdGluZy5cblxuU3BlY2lmaWNhbGx5LCBJIHNlZSB0aGF0IHRoZSBgc29jX2h3X3ZlcnNpb25fbWFqb3JgIHZhcmlhYmxlIGlzIHJlYWQgZnJvbSBQQ0ksIGFuZCBpdCdzIHVzZWQgaW4gYSBzd2l0Y2ggc3RhdGVtZW50LiBUaGUgY3JpdGljYWwgcGF0aCByZXF1aXJlcyB0aGlzIHZhbHVlIHRvIGJlIGAyYCBmb3IgdGhlIHByb2JlIHRvIGNvbnRpbnVlIGFuZCBzZXQgYGFiLVx1MDAzZWh3X3JldmAgY29ycmVjdGx5LiBUaGUgcmVhbCB2dWxuZXJhYmlsaXR5IHN0ZW1zIGZyb20gdGhlIGZhY3QgdGhhdCBTeXprYWxsZXIgY2FuLCBnaXZlbiBlbm91Z2ggYXR0ZW1wdHMsIG1hbmlwdWxhdGUgdGhlc2UgdmFsdWVzIVxuXG5NeSBpbml0aWFsIHRob3VnaHQgd2FzLCBcIldoYXQgaWYgaXQgKmRvZXNuJ3QqIHJldHVybiBgMmA/XCIgQnV0IHRoZW4gaXQgaGl0cyBtZTogU3l6a2FsbGVyIGlzIGZ1enppbmcgdGhlc2UgcmVhZHMuIEl0IHdpbGwgZXZlbnR1YWxseSBmaW5kIGEgdmFsdWUgZm9yIGBzb2NfaHdfdmVyc2lvbl9tYWpvcmAgdGhhdCBhbGxvd3MgaXQgdG8gcGFzcyB0aGUgY2hlY2suIFRodXMsIHRoaXMgYnJhbmNoIGlzICpkZWZpbml0ZWx5KiByZWFjaGFibGUuIFRoaXMgYnlwYXNzZXMgdGhlIGludGVuZGVkIGhhcmR3YXJlIHZlcnNpb24gY2hlY2ssIGFuZCBjb3VsZCBsZWFkIHRvIGlzc3VlcyBsYXRlciBvbiBpbiB0aGUgZHJpdmVyJ3MgZXhlY3V0aW9uLlxuXG5TbywgdGhpcyBsb29rcyBsaWtlIGEgcG90ZW50aWFsIHBhdGggdG8gdHJpZ2dlciBzb21lIHNvcnQgb2YgdW5leHBlY3RlZCBiZWhhdmlvciBvciBidWcuIE15IG5leHQgc3RlcD8gSSBuZWVkIHRvIGNoZWNrIGBhdGgxMmtfcGNpX3Byb2JlYCB0byBzZWUgaWYgaXQgaGFzIHNpbWlsYXIgY2hlY2tzIGFuZCB3aGV0aGVyIHRoaXMga2luZCBvZiB2dWxuZXJhYmlsaXR5IGlzIHByZXNlbnQgdGhlcmUgYXMgd2VsbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ5OTAsIk91dHB1dFRva2VucyI6NDcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xOFQwODoyNDoyOC4xODAxMTM0MDRaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQxODEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTUyNCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE1MjQ6XFx0c3RhdGljIGludCBhdGgxMmtfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbjE1MjU6XFx0XFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpwY2lfZGV2KVxcbjE1MjY6XFx0e1xcbjE1Mjc6XFx0XFx0ZW51bSBhdGgxMmtfZGV2aWNlX2ZhbWlseSBkZXZpY2VfaWQ7XFxuMTUyODpcXHRcXHRzdHJ1Y3QgYXRoMTJrX3BjaSAqYWJfcGNpO1xcbjE1Mjk6XFx0XFx0c3RydWN0IGF0aDEya19iYXNlICphYjtcXG4xNTMwOlxcdFxcdGludCByZXQ7XFxuMTUzMTpcXHRcXG4xNTMyOlxcdFxcdGFiID0gYXRoMTJrX2NvcmVfYWxsb2MoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgc2l6ZW9mKCphYl9wY2kpLCBBVEgxMktfQlVTX1BDSSk7XFxuMTUzMzpcXHRcXHRpZiAoIWFiKSB7XFxuMTUzNDpcXHRcXHRcXHRkZXZfZXJyKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIFxcXCJmYWlsZWQgdG8gYWxsb2NhdGUgYXRoMTJrIGJhc2VcXFxcblxcXCIpO1xcbjE1MzU6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMTUzNjpcXHRcXHR9XFxuMTUzNzpcXHRcXG4xNTM4OlxcdFxcdGFiLVxcdTAwM2VkZXYgPSBcXHUwMDI2cGRldi1cXHUwMDNlZGV2O1xcbjE1Mzk6XFx0XFx0YWJfcGNpID0gYXRoMTJrX3BjaV9wcml2KGFiKTtcXG4xNTQwOlxcdFxcdGFiX3BjaS1cXHUwMDNlZGV2X2lkID0gcGNpX2Rldi1cXHUwMDNlZGV2aWNlO1xcbjE1NDE6XFx0XFx0YWJfcGNpLVxcdTAwM2VhYiA9IGFiO1xcbjE1NDI6XFx0XFx0YWJfcGNpLVxcdTAwM2VwZGV2ID0gcGRldjtcXG4xNTQzOlxcdFxcdGFiLVxcdTAwM2VoaWYub3BzID0gXFx1MDAyNmF0aDEya19wY2lfaGlmX29wcztcXG4xNTQ0OlxcdFxcdGFiLVxcdTAwM2Vmd19tb2RlID0gQVRIMTJLX0ZJUk1XQVJFX01PREVfTk9STUFMO1xcbjE1NDU6XFx0XFx0cGNpX3NldF9kcnZkYXRhKHBkZXYsIGFiKTtcXG4xNTQ2OlxcdFxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZhYl9wY2ktXFx1MDAzZXdpbmRvd19sb2NrKTtcXG4xNTQ3OlxcdFxcbjE1NDg6XFx0XFx0cmV0ID0gYXRoMTJrX3BjaV9jbGFpbShhYl9wY2ksIHBkZXYpO1xcbjE1NDk6XFx0XFx0aWYgKHJldCkge1xcbjE1NTA6XFx0XFx0XFx0YXRoMTJrX2VycihhYiwgXFxcImZhaWxlZCB0byBjbGFpbSBkZXZpY2U6ICVkXFxcXG5cXFwiLCByZXQpO1xcbjE1NTE6XFx0XFx0XFx0Z290byBlcnJfZnJlZV9jb3JlO1xcbjE1NTI6XFx0XFx0fVxcbjE1NTM6XFx0XFxuMTU1NDpcXHRcXHRhdGgxMmtfZGJnKGFiLCBBVEgxMktfREJHX0JPT1QsIFxcXCJwY2kgcHJvYmUgJTA0eDolMDR4ICUwNHg6JTA0eFxcXFxuXFxcIixcXG4xNTU1OlxcdFxcdFxcdCAgIHBkZXYtXFx1MDAzZXZlbmRvciwgcGRldi1cXHUwMDNlZGV2aWNlLFxcbjE1NTY6XFx0XFx0XFx0ICAgcGRldi1cXHUwMDNlc3Vic3lzdGVtX3ZlbmRvciwgcGRldi1cXHUwMDNlc3Vic3lzdGVtX2RldmljZSk7XFxuMTU1NzpcXHRcXG4xNTU4OlxcdFxcdGFiLVxcdTAwM2VpZC52ZW5kb3IgPSBwZGV2LVxcdTAwM2V2ZW5kb3I7XFxuMTU1OTpcXHRcXHRhYi1cXHUwMDNlaWQuZGV2aWNlID0gcGRldi1cXHUwMDNlZGV2aWNlO1xcbjE1NjA6XFx0XFx0YWItXFx1MDAzZWlkLnN1YnN5c3RlbV92ZW5kb3IgPSBwZGV2LVxcdTAwM2VzdWJzeXN0ZW1fdmVuZG9yO1xcbjE1NjE6XFx0XFx0YWItXFx1MDAzZWlkLnN1YnN5c3RlbV9kZXZpY2UgPSBwZGV2LVxcdTAwM2VzdWJzeXN0ZW1fZGV2aWNlO1xcbjE1NjI6XFx0XFxuMTU2MzpcXHRcXHRkZXZpY2VfaWQgPSBhdGgxMmtfZ2V0X2RldmljZV9mYW1pbHkocGNpX2Rldik7XFxuMTU2NDpcXHRcXHRpZiAoZGV2aWNlX2lkIFxcdTAwM2U9IEFUSDEyS19ERVZJQ0VfRkFNSUxZX01BWCkge1xcbjE1NjU6XFx0XFx0XFx0YXRoMTJrX2VycihhYiwgXFxcImZhaWxlZCB0byBnZXQgZGV2aWNlIGZhbWlseSBpZFxcXFxuXFxcIik7XFxuMTU2NjpcXHRcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbjE1Njc6XFx0XFx0XFx0Z290byBlcnJfcGNpX2ZyZWVfcmVnaW9uO1xcbjE1Njg6XFx0XFx0fVxcbjE1Njk6XFx0XFxuMTU3MDpcXHRcXHRhdGgxMmtfZGJnKGFiLCBBVEgxMktfREJHX1BDSSwgXFxcIlBDSSBkZXZpY2UgZmFtaWx5IGlkOiAlZFxcXFxuXFxcIiwgZGV2aWNlX2lkKTtcXG4xNTcxOlxcdFxcbjE1NzI6XFx0XFx0YWJfcGNpLVxcdTAwM2VkZXZpY2VfZmFtaWx5X29wcyA9IFxcdTAwMjZhdGgxMmtfcGNpX2ZhbWlseV9kcml2ZXJzW2RldmljZV9pZF0tXFx1MDAzZW9wcztcXG4xNTczOlxcdFxcdGFiX3BjaS1cXHUwMDNlcmVnX2Jhc2UgPSBhdGgxMmtfcGNpX2ZhbWlseV9kcml2ZXJzW2RldmljZV9pZF0tXFx1MDAzZXJlZ19iYXNlO1xcbjE1NzQ6XFx0XFxuMTU3NTpcXHRcXHQvKiBDYWxsIGRldmljZSBzcGVjaWZpYyBwcm9iZS4gVGhpcyBpcyB0aGUgY2FsbGJhY2sgdGhhdCBjYW5cXG4xNTc2OlxcdFxcdCAqIGJlIHVzZWQgdG8gb3ZlcnJpZGUgYW55IG9wcyBpbiBmdXR1cmVcXG4xNTc3OlxcdFxcdCAqIHByb2JlIGlzIHZhbGlkYXRlZCBmb3IgTlVMTCBkdXJpbmcgcmVnaXN0cmF0aW9uLlxcbjE1Nzg6XFx0XFx0ICovXFxuMTU3OTpcXHRcXHRyZXQgPSBhYl9wY2ktXFx1MDAzZWRldmljZV9mYW1pbHlfb3BzLVxcdTAwM2Vwcm9iZShwZGV2LCBwY2lfZGV2KTtcXG4xNTgwOlxcdFxcdGlmIChyZXQpIHtcXG4xNTgxOlxcdFxcdFxcdGF0aDEya19lcnIoYWIsIFxcXCJmYWlsZWQgdG8gcHJvYmUgZGV2aWNlOiAlZFxcXFxuXFxcIiwgcmV0KTtcXG4xNTgyOlxcdFxcdFxcdGdvdG8gZXJyX3BjaV9mcmVlX3JlZ2lvbjtcXG4xNTgzOlxcdFxcdH1cXG4xNTg0OlxcdFxcbjE1ODU6XFx0XFx0cmV0ID0gYXRoMTJrX3BjaV9tc2lfYWxsb2MoYWJfcGNpKTtcXG4xNTg2OlxcdFxcdGlmIChyZXQpIHtcXG4xNTg3OlxcdFxcdFxcdGF0aDEya19lcnIoYWIsIFxcXCJmYWlsZWQgdG8gYWxsb2MgbXNpOiAlZFxcXFxuXFxcIiwgcmV0KTtcXG4xNTg4OlxcdFxcdFxcdGdvdG8gZXJyX3BjaV9mcmVlX3JlZ2lvbjtcXG4xNTg5OlxcdFxcdH1cXG4xNTkwOlxcdFxcbjE1OTE6XFx0XFx0cmV0ID0gYXRoMTJrX2NvcmVfcHJlX2luaXQoYWIpO1xcbjE1OTI6XFx0XFx0aWYgKHJldClcXG4xNTkzOlxcdFxcdFxcdGdvdG8gZXJyX3BjaV9tc2lfZnJlZTtcXG4xNTk0OlxcdFxcbjE1OTU6XFx0XFx0cmV0ID0gYXRoMTJrX3BjaV9zZXRfaXJxX2FmZmluaXR5X2hpbnQoYWJfcGNpLCBjcHVtYXNrX29mKDApKTtcXG4xNTk2OlxcdFxcdGlmIChyZXQpIHtcXG4xNTk3OlxcdFxcdFxcdGF0aDEya19lcnIoYWIsIFxcXCJmYWlsZWQgdG8gc2V0IGlycSBhZmZpbml0eSAlZFxcXFxuXFxcIiwgcmV0KTtcXG4xNTk4OlxcdFxcdFxcdGdvdG8gZXJyX3BjaV9tc2lfZnJlZTtcXG4xNTk5OlxcdFxcdH1cXG4xNjAwOlxcdFxcbjE2MDE6XFx0XFx0cmV0ID0gYXRoMTJrX21oaV9yZWdpc3RlcihhYl9wY2kpO1xcbjE2MDI6XFx0XFx0aWYgKHJldCkge1xcbjE2MDM6XFx0XFx0XFx0YXRoMTJrX2VycihhYiwgXFxcImZhaWxlZCB0byByZWdpc3RlciBtaGk6ICVkXFxcXG5cXFwiLCByZXQpO1xcbjE2MDQ6XFx0XFx0XFx0Z290byBlcnJfaXJxX2FmZmluaXR5X2NsZWFudXA7XFxuMTYwNTpcXHRcXHR9XFxuMTYwNjpcXHRcXG4xNjA3OlxcdFxcdHJldCA9IGF0aDEya19oYWxfc3JuZ19pbml0KGFiKTtcXG4xNjA4OlxcdFxcdGlmIChyZXQpXFxuMTYwOTpcXHRcXHRcXHRnb3RvIGVycl9taGlfdW5yZWdpc3RlcjtcXG4xNjEwOlxcdFxcbjE2MTE6XFx0XFx0cmV0ID0gYXRoMTJrX2NlX2FsbG9jX3BpcGVzKGFiKTtcXG4xNjEyOlxcdFxcdGlmIChyZXQpIHtcXG4xNjEzOlxcdFxcdFxcdGF0aDEya19lcnIoYWIsIFxcXCJmYWlsZWQgdG8gYWxsb2NhdGUgY2UgcGlwZXM6ICVkXFxcXG5cXFwiLCByZXQpO1xcbjE2MTQ6XFx0XFx0XFx0Z290byBlcnJfaGFsX3NybmdfZGVpbml0O1xcbjE2MTU6XFx0XFx0fVxcbjE2MTY6XFx0XFxuMTYxNzpcXHRcXHRhdGgxMmtfcGNpX2luaXRfcW1pX2NlX2NvbmZpZyhhYik7XFxuMTYxODpcXHRcXG4xNjE5OlxcdFxcdHJldCA9IGF0aDEya19wY2lfY29uZmlnX2lycShhYik7XFxuMTYyMDpcXHRcXHRpZiAocmV0KSB7XFxuMTYyMTpcXHRcXHRcXHRhdGgxMmtfZXJyKGFiLCBcXFwiZmFpbGVkIHRvIGNvbmZpZyBpcnE6ICVkXFxcXG5cXFwiLCByZXQpO1xcbjE2MjI6XFx0XFx0XFx0Z290byBlcnJfY2VfZnJlZTtcXG4xNjIzOlxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMThUMDg6MjQ6MjguMTgwMjU2NDM0WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4MDg1NzM2NDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipEaXZpbmcgaW50byB0aGUgUHJvYmUgRnVuY3Rpb24qKlxuXG5NeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgdGhlIHN5c3RlbSBoYXMgY2FsbGVkIGEgc3BlY2lmaWMgZnVuY3Rpb24sIGxpa2VseSBhIHByb2JlIGZ1bmN0aW9uLCB3aGljaCBpcyBhY2Nlc3NlZCB2aWEgdGhlIGBhYl9wY2lgIHN0cnVjdHVyZS4gU3BlY2lmaWNhbGx5LCBpdCdzIGhpdHRpbmcgYGFiX3BjaS1cdTAwM2VkZXZpY2VfZmFtaWx5X29wcy1cdTAwM2Vwcm9iZShwZGV2LCBwY2lfZGV2KWAuIFRoaXMgaXMgYSBwcmV0dHkgc3RhbmRhcmQgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UgZm9yIFBDSSBkZXZpY2VzLiBOb3csIG15IGJyYWluIGltbWVkaWF0ZWx5IGdvZXMgdG8gYGF0aDEya19wY2lfZmFtaWx5X2RyaXZlcnNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBzcGVjaWZpYyBkcml2ZXIgb3IgZmFtaWx5IG9mIGRyaXZlcnMgdGhhdCBsaW5lIGlzIGNhbGxpbmcuIFRpbWUgdG8gZXhhbWluZSBgYXRoMTJrX3BjaV9mYW1pbHlfZHJpdmVyc2AgdG8gc2VlIGhvdyBpdCdzIGhhbmRsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3NTIyLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xOFQwODoyNDozMC45ODg4MzI5MjJaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MTI4Njg0MjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXRoMTJrX3BjaV9mYW1pbHlfZHJpdmVyc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTM2LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM6Mzc6c3RhdGljIHN0cnVjdCBhdGgxMmtfcGNpX2RyaXZlciAqYXRoMTJrX3BjaV9mYW1pbHlfZHJpdmVyc1tBVEgxMktfREVWSUNFX0ZBTUlMWV9NQVhdO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtMzgtc3RhdGljIGNvbnN0IHN0cnVjdCBhdGgxMmtfbXNpX2NvbmZpZyBtc2lfY29uZmlnX29uZV9tc2kgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jPTE1MDM9YXRoMTJrX2dldF9kZXZpY2VfZmFtaWx5KGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpwY2lfZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xNTA5LVxcdCAgICAgZGV2aWNlX2ZhbWlseV9pZCBcXHUwMDNjIEFUSDEyS19ERVZJQ0VfRkFNSUxZX01BWDsgZGV2aWNlX2ZhbWlseV9pZCsrKSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYzoxNTEwOlxcdFxcdGlmICghYXRoMTJrX3BjaV9mYW1pbHlfZHJpdmVyc1tkZXZpY2VfZmFtaWx5X2lkXSlcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE1MTEtXFx0XFx0XFx0Y29udGludWU7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xNTEyLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM6MTUxMzpcXHRcXHRpZCA9IGF0aDEya19wY2lfZmFtaWx5X2RyaXZlcnNbZGV2aWNlX2ZhbWlseV9pZF0tXFx1MDAzZWlkX3RhYmxlO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtMTUxNC1cXHRcXHR3aGlsZSAoaWQtXFx1MDAzZWRldmljZSkge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYz0xNTI0PXN0YXRpYyBpbnQgYXRoMTJrX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtMTU3MS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jOjE1NzI6XFx0YWJfcGNpLVxcdTAwM2VkZXZpY2VfZmFtaWx5X29wcyA9IFxcdTAwMjZhdGgxMmtfcGNpX2ZhbWlseV9kcml2ZXJzW2RldmljZV9pZF0tXFx1MDAzZW9wcztcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jOjE1NzM6XFx0YWJfcGNpLVxcdTAwM2VyZWdfYmFzZSA9IGF0aDEya19wY2lfZmFtaWx5X2RyaXZlcnNbZGV2aWNlX2lkXS1cXHUwMDNlcmVnX2Jhc2U7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xNTc0LVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYz0xODA0PWludCBhdGgxMmtfcGNpX3JlZ2lzdGVyX2RyaXZlcihjb25zdCBlbnVtIGF0aDEya19kZXZpY2VfZmFtaWx5IGRldmljZV9pZCxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtMTgxNS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jOjE4MTY6XFx0aWYgKGF0aDEya19wY2lfZmFtaWx5X2RyaXZlcnNbZGV2aWNlX2lkXSkge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtMTgxNy1cXHRcXHRwcl9lcnIoXFxcIkRyaXZlciBhbHJlYWR5IHJlZ2lzdGVyZWQgZm9yICVkXFxcXG5cXFwiLCBkZXZpY2VfaWQpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xODIwLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM6MTgyMTpcXHRhdGgxMmtfcGNpX2ZhbWlseV9kcml2ZXJzW2RldmljZV9pZF0gPSBkcml2ZXI7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xODIyLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM6MTgyMzpcXHRwY2lfZHJpdmVyID0gXFx1MDAyNmF0aDEya19wY2lfZmFtaWx5X2RyaXZlcnNbZGV2aWNlX2lkXS1cXHUwMDNlZHJpdmVyO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtMTgyNC1cXHRwY2lfZHJpdmVyLVxcdTAwM2VuYW1lID0gZHJpdmVyLVxcdTAwM2VuYW1lO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYz0xODM1PXZvaWQgYXRoMTJrX3BjaV91bnJlZ2lzdGVyX2RyaXZlcihjb25zdCBlbnVtIGF0aDEya19kZXZpY2VfZmFtaWx5IGRldmljZV9pZClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtMTgzNy1cXHRpZiAoZGV2aWNlX2lkIFxcdTAwM2U9IEFUSDEyS19ERVZJQ0VfRkFNSUxZX01BWCB8fFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM6MTgzODpcXHQgICAgIWF0aDEya19wY2lfZmFtaWx5X2RyaXZlcnNbZGV2aWNlX2lkXSlcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE4MzktXFx0XFx0cmV0dXJuO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtMTg0MC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jOjE4NDE6XFx0cGNpX3VucmVnaXN0ZXJfZHJpdmVyKFxcdTAwMjZhdGgxMmtfcGNpX2ZhbWlseV9kcml2ZXJzW2RldmljZV9pZF0tXFx1MDAzZWRyaXZlcik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYzoxODQyOlxcdGF0aDEya19wY2lfZmFtaWx5X2RyaXZlcnNbZGV2aWNlX2lkXSA9IE5VTEw7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xODQzLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMThUMDg6MjQ6MzIuODAxNzA3OTU0WiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwNzg2ODY5ODYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIHRyYWNpbmcgaXRzIGV4ZWN1dGlvbi4gSXQgc2VlbXMgdGhlIGNvcmUgb2YgaXQgbGllcyBpbiBhZGRyZXNzaW5nIGEgcG90ZW50aWFsIHJlc291cmNlIGxlYWsgd2l0aGluIHRoZSBhdGgxMWsgYW5kIGF0aDEyayBkcml2ZXJzLCBzcGVjaWZpY2FsbHkgZHVyaW5nIHRoZSBRTUkgaW5pdGlhbGl6YXRpb24gcHJvY2Vzcy4gSSBzZWUgdGhhdCBgYXRoMTJrX3BjaV9wcm9iZWAgaXMgaW52b2x2ZWQsIHVsdGltYXRlbHkgbGVhZGluZyB0byB0aGUgY2FsbCBvZiBgZGV2aWNlX2ZhbWlseV9vcHMtXHUwMDNlcHJvYmVgLiBJIHRoaW5rIEkgcmVtZW1iZXIgc2VlaW5nIHRoYXQgb25lIGJlZm9yZS5cblxuVGhlIGVzc2VuY2Ugb2YgdGhlIGZpeCBpcyBlcnJvciBoYW5kbGluZyB3aXRoaW4gYGF0aDExa19xbWlfaW5pdF9zZXJ2aWNlYCBhbmQgYGF0aDEya19xbWlfaW5pdF9zZXJ2aWNlYC4gSXQgYXBwZWFycyBpZiBgYWxsb2Nfb3JkZXJlZF93b3JrcXVldWVgIG9yIGBxbWlfYWRkX2xvb2t1cGAgZmFpbHMsIHRoZSBwYXRjaCBlbnN1cmVzIHRoZSBRTUkgaGFuZGxlIGdldHMgcmVsZWFzZWQsIHByZXZlbnRpbmcgYSBsZWFrLiBUaGlzIGxvb2tzIGxpa2UgYSBzb2xpZCBmdW5jdGlvbmFsIGNoYW5nZSwgYW5kIGltcG9ydGFudGx5LCBpdCdzIHJlYWNoYWJsZSDigJMgcGFydGljdWxhcmx5IHRocm91Z2ggYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCB0aGFua3MgdG8gc3l6a2FsbGVyJ3MgUENJIGRldmljZSBpbmplY3Rpb24gY2FwYWJpbGl0aWVzLiBUaGF0IG1ha2VzIGl0IGVhc2llciB0byB0ZXN0LlxuXG5JIG5lZWQgdG8gY29uZmlybSB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMuIEluaXRpYWxseSwgSSB0aG91Z2h0IGl0IHdhcyBqdXN0IGBBVEgxMUtgLCBgQVRIMTFLX1BDSWAsIGFuZCBgQVRIMTJLYC4gSG93ZXZlciwgSSBoYXZlIHRvIHJlbWVtYmVyIHRoYXQgYEFUSDExS19QQ0lgIGlzIHRyaXN0YXRlLCBzbyB0aGVyZSBtaWdodCBiZSBvdGhlciByZWxhdGVkIGNvbmZpZ3MuIExldCBtZSBxdWlja2x5IGNoZWNrIHRoZSBgS2NvbmZpZ2AgZm9yIHRoZSBhdGgxMWsgZHJpdmVyIGFnYWluLi4uIEFoLCB5ZXMsIHRoZXJlIGlzIGFsc28gYEFUSDExS19BSEJgLiBJIHdpbGwgbWFrZSBzdXJlIHRvIGFjY291bnQgZm9yIHRoYXQuIEFsc28sIHRoZSBzYW1lIGlzIHRydWUgZm9yIGBBVEgxMktgLCBzaW5jZSBgQVRIMTJLX0FIQmAgaXMgYWxzbyB0aGVyZS5cblxuVWx0aW1hdGVseSBJIHdpbGwgaW5jbHVkZSBgQVRIMTFLYCwgYEFUSDExS19QQ0lgLCBhbmQgYEFUSDEyS2AgZm9yIHRoaXMuIEFjdHVhbGx5LCB0aGUga2V5IG9uZXMgYXJlIGBBVEgxMUtgIGFuZCBgQVRIMTJLYCwgYXMgdGhleSBmb3JtIHRoZSBmb3VuZGF0aW9uLiBgQVRIMTFLX1BDSWAgaXMgZXhwbGljaXRseSBuZWVkZWQgZm9yIFBDSSBzdXBwb3J0IGluIHRoYXQgZHJpdmVyLCBhbmQgYEFUSDEyS2AgaW5oZXJlbnRseSBpbmNsdWRlcyBQQ0kgc3VwcG9ydCBhc3N1bWluZyBgUENJYCBpcyBhbHNvIGVuYWJsZWQuXG5cbkxldCBtZSBkb3VibGUtY2hlY2sgdGhlIG5hbWluZyBmb3IgdGhvc2UgY29uZmlncyBqdXN0IHRvIGJlIGNvbXBsZXRlbHkgY2VydGFpbi4gWWVzLCBgY29uZmlnIEFUSDExS19QQ0lgIGFuZCBgY29uZmlnIEFUSDEyS2AuXG5cblRoZSBrZXkgZnVuY3Rpb25zIHRvIGtlZXAgYW4gZXllIG9uIGFyZSBgYXRoMTFrX3FtaV9pbml0X3NlcnZpY2VgIGFuZCBgYXRoMTJrX3FtaV9pbml0X3NlcnZpY2VgLiBUaG9zZSBhcmUgd2hlcmUgdGhlIGZpeCBpcyBjb25jZW50cmF0ZWQuXG5cblNvLCB0byBzdW1tYXJpemUgbXkgcmVhc29uaW5nOiBUaGUgcGF0Y2ggaXMgYSBmdW5jdGlvbmFsIGZpeCBhZGRyZXNzaW5nIGEgcG90ZW50aWFsIHJlc291cmNlIGxlYWsgaW4gdGhlIFFNSSBpbml0aWFsaXphdGlvbiBwYXRocyBvZiBhdGgxMWsgYW5kIGF0aDEyayBkcml2ZXJzLiBJdCBwcmV2ZW50cyB0aGUgbGVhayBieSByZWxlYXNpbmcgdGhlIFFNSSBoYW5kbGUgaW4gdGhlIGV2ZW50IHRoYXQgd29ya3F1ZXVlIGFsbG9jYXRpb24gb3IgUU1JIGxvb2t1cCBhZGRpdGlvbiBmYWlscy4gVGhpcyBjaGFuZ2UgaXMgZWZmZWN0aXZlbHkgdGVzdGFibGUgdmlhIHZpcnR1YWwgUENJIGRldmljZSBpbmplY3Rpb24gYW5kIHJlcXVpcmVzIHRoZSBgQVRIMTFLYCwgYEFUSDExS19QQ0lgLCBhbmQgYEFUSDEyS2AgY29uZmlndXJhdGlvbnMgKHdpdGggYSBmb2N1cyBvbiB0aGUgYGF0aDExa19xbWlfaW5pdF9zZXJ2aWNlYCBhbmQgYGF0aDEya19xbWlfaW5pdF9zZXJ2aWNlYCBmdW5jdGlvbnMpLiBOb3csIEknbSByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5MDE5LCJPdXRwdXRUb2tlbnMiOjE0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU0NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xOFQwODoyNDo0My41ODg1Nzk4NDVaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NTk2MTQyNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQVRIMTFLXCIsXG4gICAgXCJBVEgxMUtfUENJXCIsXG4gICAgXCJBVEgxMktcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhdGgxMWtfcW1pX2luaXRfc2VydmljZVwiLFxuICAgIFwiYXRoMTJrX3FtaV9pbml0X3NlcnZpY2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGVycm9yIGhhbmRsaW5nIHRvIGZpeCBhIHJlc291cmNlIGxlYWsgaW4gdGhlIFFNSSBpbml0aWFsaXphdGlvbiBwYXRoIG9mIHRoZSBhdGgxMWsgYW5kIGF0aDEyayBkcml2ZXJzLiBJdCByZWxlYXNlcyB0aGUgUU1JIGhhbmRsZSBpZiB3b3JrcXVldWUgYWxsb2NhdGlvbiBvciBRTUkgbG9va3VwIGFkZGl0aW9uIGZhaWxzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBjYW4gYmUgcmVhY2hlZCBhbmQgdGVzdGVkIHZpYSB2aXJ0dWFsIFBDSSBkZXZpY2UgaW5qZWN0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkFUSDExS1wiLFxuICAgIFwiQVRIMTFLX1BDSVwiLFxuICAgIFwiQVRIMTJLXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYXRoMTFrX3FtaV9pbml0X3NlcnZpY2VcIixcbiAgICBcImF0aDEya19xbWlfaW5pdF9zZXJ2aWNlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBlcnJvciBoYW5kbGluZyB0byBmaXggYSByZXNvdXJjZSBsZWFrIGluIHRoZSBRTUkgaW5pdGlhbGl6YXRpb24gcGF0aCBvZiB0aGUgYXRoMTFrIGFuZCBhdGgxMmsgZHJpdmVycy4gSXQgcmVsZWFzZXMgdGhlIFFNSSBoYW5kbGUgaWYgd29ya3F1ZXVlIGFsbG9jYXRpb24gb3IgUU1JIGxvb2t1cCBhZGRpdGlvbiBmYWlscy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgY2FuIGJlIHJlYWNoZWQgYW5kIHRlc3RlZCB2aWEgdmlydHVhbCBQQ0kgZGV2aWNlIGluamVjdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowxlvlh[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-18 07:52:16 +0000 UTC FinishedAt: 2026-07-18 08:24:45 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "94515f3a7d4256a5062176b7d6ed0471938cd51a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ATH11K", "ATH11K_PCI", "ATH12K" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "94515f3a7d4256a5062176b7d6ed0471938cd51a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ATH11K", "ATH11K_PCI", "ATH12K" ], "series_id": "682a1a48-0c10-4bc9-8b35-2eccd6483010" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ath11k_qmi_init_service", "ath12k_qmi_init_service" ], "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+CgkJCTx0ZD4yMDI2LzA3LzE4IDA4OjIyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FUSDExSyYjMzQ7LAogICAgJiMzNDtBVEgxMUtfUENJJiMzNDssCiAgICAmIzM0O0FUSDEySyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2F0aDExa19xbWlfaW5pdF9zZXJ2aWNlJiMzNDssCiAgICAmIzM0O2F0aDEya19xbWlfaW5pdF9zZXJ2aWNlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgZXJyb3IgaGFuZGxpbmcgdG8gZml4IGEgcmVzb3VyY2UgbGVhayBpbiB0aGUgUU1JIGluaXRpYWxpemF0aW9uIHBhdGggb2YgdGhlIGF0aDExayBhbmQgYXRoMTJrIGRyaXZlcnMuIEl0IHJlbGVhc2VzIHRoZSBRTUkgaGFuZGxlIGlmIHdvcmtxdWV1ZSBhbGxvY2F0aW9uIG9yIFFNSSBsb29rdXAgYWRkaXRpb24gZmFpbHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGNhbiBiZSByZWFjaGVkIGFuZCB0ZXN0ZWQgdmlhIHZpcnR1YWwgUENJIGRldmljZSBpbmplY3Rpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTggMDg6MjI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBhNmM1MzQ3MzA2Y2ZlMjQyMDE5ZTIzMTgwNGFjNjEzZWFhODM3ZGUxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBKdWwgMTggMDg6MjI6MzggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9xbWkuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvcW1pLmNcbmluZGV4IDQxMGE3ZWUwNzZhMDI2Li42ZTNmODIxNjlkMjQxYiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvcW1pLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvcW1pLmNcbkBAIC0zMzI5LDcgJiM0MzszMzI5LDggQEAgaW50IGF0aDExa19xbWlfaW5pdF9zZXJ2aWNlKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXG4gXHRhYi1cdTAwM2VxbWkuZXZlbnRfd3EgPSBhbGxvY19vcmRlcmVkX3dvcmtxdWV1ZShcJiMzNDthdGgxMWtfcW1pX2RyaXZlcl9ldmVudFwmIzM0OywgMCk7XG4gXHRpZiAoIWFiLVx1MDAzZXFtaS5ldmVudF93cSkge1xuIFx0XHRhdGgxMWtfZXJyKGFiLCBcJiMzNDtmYWlsZWQgdG8gYWxsb2NhdGUgd29ya3F1ZXVlXFxuXCYjMzQ7KTtcbi1cdFx0cmV0dXJuIC1FRkFVTFQ7XG4mIzQzO1x0XHRyZXQgPSAtRUZBVUxUO1xuJiM0MztcdFx0Z290byBlcnJfcmVsZWFzZV9xbWlfaGFuZGxlO1xuIFx0fVxuIFxuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2YWItXHUwMDNlcW1pLmV2ZW50X2xpc3QpO1xuQEAgLTMzNDIsOSAmIzQzOzMzNDMsMTQgQEAgaW50IGF0aDExa19xbWlfaW5pdF9zZXJ2aWNlKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXG4gXHRpZiAocmV0IFx1MDAzYyAwKSB7XG4gXHRcdGF0aDExa193YXJuKGFiLCBcJiMzNDtmYWlsZWQgdG8gYWRkIHFtaSBsb29rdXA6ICVkXFxuXCYjMzQ7LCByZXQpO1xuIFx0XHRkZXN0cm95X3dvcmtxdWV1ZShhYi1cdTAwM2VxbWkuZXZlbnRfd3EpO1xuLVx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdFx0Z290byBlcnJfcmVsZWFzZV9xbWlfaGFuZGxlO1xuIFx0fVxuIFxuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztlcnJfcmVsZWFzZV9xbWlfaGFuZGxlOlxuJiM0MztcdHFtaV9oYW5kbGVfcmVsZWFzZShcdTAwMjZhYi1cdTAwM2VxbWkuaGFuZGxlKTtcbiYjNDM7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuY1xuaW5kZXggZmQ3NjJiNWQ3YmI1OTcuLjY5MmYxYjJjMjAzMWI3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuY1xuQEAgLTQwNDEsNyAmIzQzOzQwNDEsNiBAQCBpbnQgYXRoMTJrX3FtaV9pbml0X3NlcnZpY2Uoc3RydWN0IGF0aDEya19iYXNlICphYilcbiBcbiBcdG1lbXNldChcdTAwMjZhYi1cdTAwM2VxbWkudGFyZ2V0LCAwLCBzaXplb2Yoc3RydWN0IHRhcmdldF9pbmZvKSk7XG4gXHRtZW1zZXQoXHUwMDI2YWItXHUwMDNlcW1pLnRhcmdldF9tZW0sIDAsIHNpemVvZihzdHJ1Y3QgdGFyZ2V0X21lbV9jaHVuaykpO1xuLVx0YWItXHUwMDNlcW1pLmFiID0gYWI7XG4gXG4gXHRhYi1cdTAwM2VxbWkudGFyZ2V0X21lbV9tb2RlID0gYWItXHUwMDNldGFyZ2V0X21lbV9tb2RlO1xuIFx0cmV0ID0gcW1pX2hhbmRsZV9pbml0KFx1MDAyNmFiLVx1MDAzZXFtaS5oYW5kbGUsIEFUSDEyS19RTUlfUkVTUF9MRU5fTUFYLFxuQEAgLTQwNTQsNyAmIzQzOzQwNTMsOCBAQCBpbnQgYXRoMTJrX3FtaV9pbml0X3NlcnZpY2Uoc3RydWN0IGF0aDEya19iYXNlICphYilcbiBcdGFiLVx1MDAzZXFtaS5ldmVudF93cSA9IGFsbG9jX29yZGVyZWRfd29ya3F1ZXVlKFwmIzM0O2F0aDEya19xbWlfZHJpdmVyX2V2ZW50XCYjMzQ7LCAwKTtcbiBcdGlmICghYWItXHUwMDNlcW1pLmV2ZW50X3dxKSB7XG4gXHRcdGF0aDEya19lcnIoYWIsIFwmIzM0O2ZhaWxlZCB0byBhbGxvY2F0ZSB3b3JrcXVldWVcXG5cJiMzNDspO1xuLVx0XHRyZXR1cm4gLUVGQVVMVDtcbiYjNDM7XHRcdHJldCA9IC1FRkFVTFQ7XG4mIzQzO1x0XHRnb3RvIGVycl9yZWxlYXNlX3FtaV9oYW5kbGU7XG4gXHR9XG4gXG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZhYi1cdTAwM2VxbWkuZXZlbnRfbGlzdCk7XG5AQCAtNDA2Nyw5ICYjNDM7NDA2NywxNiBAQCBpbnQgYXRoMTJrX3FtaV9pbml0X3NlcnZpY2Uoc3RydWN0IGF0aDEya19iYXNlICphYilcbiBcdGlmIChyZXQgXHUwMDNjIDApIHtcbiBcdFx0YXRoMTJrX3dhcm4oYWIsIFwmIzM0O2ZhaWxlZCB0byBhZGQgcW1pIGxvb2t1cFxcblwmIzM0Oyk7XG4gXHRcdGRlc3Ryb3lfd29ya3F1ZXVlKGFiLVx1MDAzZXFtaS5ldmVudF93cSk7XG4tXHRcdHJldHVybiByZXQ7XG4mIzQzO1x0XHRnb3RvIGVycl9yZWxlYXNlX3FtaV9oYW5kbGU7XG4gXHR9XG4gXG4mIzQzO1x0YWItXHUwMDNlcW1pLmFiID0gYWI7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztlcnJfcmVsZWFzZV9xbWlfaGFuZGxlOlxuJiM0MztcdHFtaV9oYW5kbGVfcmVsZWFzZShcdTAwMjZhYi1cdTAwM2VxbWkuaGFuZGxlKTtcbiYjNDM7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOCAwODoyMjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtBVEgxMUsmIzM0OywKICAgICYjMzQ7QVRIMTFLX1BDSSYjMzQ7LAogICAgJiMzNDtBVEgxMksmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthdGgxMWtfcW1pX2luaXRfc2VydmljZSYjMzQ7LAogICAgJiMzNDthdGgxMmtfcW1pX2luaXRfc2VydmljZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGVycm9yIGhhbmRsaW5nIHRvIGZpeCBhIHJlc291cmNlIGxlYWsgaW4gdGhlIFFNSSBpbml0aWFsaXphdGlvbiBwYXRoIG9mIHRoZSBhdGgxMWsgYW5kIGF0aDEyayBkcml2ZXJzLiBJdCByZWxlYXNlcyB0aGUgUU1JIGhhbmRsZSBpZiB3b3JrcXVldWUgYWxsb2NhdGlvbiBvciBRTUkgbG9va3VwIGFkZGl0aW9uIGZhaWxzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBjYW4gYmUgcmVhY2hlZCBhbmQgdGVzdGVkIHZpYSB2aXJ0dWFsIFBDSSBkZXZpY2UgaW5qZWN0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBhNmM1MzQ3MzA2Y2ZlMjQyMDE5ZTIzMTgwNGFjNjEzZWFhODM3ZGUxCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBKdWwgMTggMDg6MjI6MzggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3FtaS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9xbWkuYwppbmRleCA0MTBhN2VlMDc2YTAyNi4uNmUzZjgyMTY5ZDI0MWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvcW1pLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9xbWkuYwpAQCAtMzMyOSw3ICYjNDM7MzMyOSw4IEBAIGludCBhdGgxMWtfcW1pX2luaXRfc2VydmljZShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKQogCWFiLSZndDtxbWkuZXZlbnRfd3EgPSBhbGxvY19vcmRlcmVkX3dvcmtxdWV1ZSgmIzM0O2F0aDExa19xbWlfZHJpdmVyX2V2ZW50JiMzNDssIDApOwogCWlmICghYWItJmd0O3FtaS5ldmVudF93cSkgewogCQlhdGgxMWtfZXJyKGFiLCAmIzM0O2ZhaWxlZCB0byBhbGxvY2F0ZSB3b3JrcXVldWVcbiYjMzQ7KTsKLQkJcmV0dXJuIC1FRkFVTFQ7CiYjNDM7CQlyZXQgPSAtRUZBVUxUOwomIzQzOwkJZ290byBlcnJfcmVsZWFzZV9xbWlfaGFuZGxlOwogCX0KIAogCUlOSVRfTElTVF9IRUFEKCZhbXA7YWItJmd0O3FtaS5ldmVudF9saXN0KTsKQEAgLTMzNDIsOSAmIzQzOzMzNDMsMTQgQEAgaW50IGF0aDExa19xbWlfaW5pdF9zZXJ2aWNlKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpCiAJaWYgKHJldCAmbHQ7IDApIHsKIAkJYXRoMTFrX3dhcm4oYWIsICYjMzQ7ZmFpbGVkIHRvIGFkZCBxbWkgbG9va3VwOiAlZFxuJiMzNDssIHJldCk7CiAJCWRlc3Ryb3lfd29ya3F1ZXVlKGFiLSZndDtxbWkuZXZlbnRfd3EpOwotCQlyZXR1cm4gcmV0OwomIzQzOwkJZ290byBlcnJfcmVsZWFzZV9xbWlfaGFuZGxlOwogCX0KIAomIzQzOwlyZXR1cm4gcmV0OwomIzQzOwomIzQzO2Vycl9yZWxlYXNlX3FtaV9oYW5kbGU6CiYjNDM7CXFtaV9oYW5kbGVfcmVsZWFzZSgmYW1wO2FiLSZndDtxbWkuaGFuZGxlKTsKJiM0MzsKIAlyZXR1cm4gcmV0OwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuYwppbmRleCBmZDc2MmI1ZDdiYjU5Ny4uNjkyZjFiMmMyMDMxYjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuYwpAQCAtNDA0MSw3ICYjNDM7NDA0MSw2IEBAIGludCBhdGgxMmtfcW1pX2luaXRfc2VydmljZShzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKQogCiAJbWVtc2V0KCZhbXA7YWItJmd0O3FtaS50YXJnZXQsIDAsIHNpemVvZihzdHJ1Y3QgdGFyZ2V0X2luZm8pKTsKIAltZW1zZXQoJmFtcDthYi0mZ3Q7cW1pLnRhcmdldF9tZW0sIDAsIHNpemVvZihzdHJ1Y3QgdGFyZ2V0X21lbV9jaHVuaykpOwotCWFiLSZndDtxbWkuYWIgPSBhYjsKIAogCWFiLSZndDtxbWkudGFyZ2V0X21lbV9tb2RlID0gYWItJmd0O3RhcmdldF9tZW1fbW9kZTsKIAlyZXQgPSBxbWlfaGFuZGxlX2luaXQoJmFtcDthYi0mZ3Q7cW1pLmhhbmRsZSwgQVRIMTJLX1FNSV9SRVNQX0xFTl9NQVgsCkBAIC00MDU0LDcgJiM0Mzs0MDUzLDggQEAgaW50IGF0aDEya19xbWlfaW5pdF9zZXJ2aWNlKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpCiAJYWItJmd0O3FtaS5ldmVudF93cSA9IGFsbG9jX29yZGVyZWRfd29ya3F1ZXVlKCYjMzQ7YXRoMTJrX3FtaV9kcml2ZXJfZXZlbnQmIzM0OywgMCk7CiAJaWYgKCFhYi0mZ3Q7cW1pLmV2ZW50X3dxKSB7CiAJCWF0aDEya19lcnIoYWIsICYjMzQ7ZmFpbGVkIHRvIGFsbG9jYXRlIHdvcmtxdWV1ZVxuJiMzNDspOwotCQlyZXR1cm4gLUVGQVVMVDsKJiM0MzsJCXJldCA9IC1FRkFVTFQ7CiYjNDM7CQlnb3RvIGVycl9yZWxlYXNlX3FtaV9oYW5kbGU7CiAJfQogCiAJSU5JVF9MSVNUX0hFQUQoJmFtcDthYi0mZ3Q7cW1pLmV2ZW50X2xpc3QpOwpAQCAtNDA2Nyw5ICYjNDM7NDA2NywxNiBAQCBpbnQgYXRoMTJrX3FtaV9pbml0X3NlcnZpY2Uoc3RydWN0IGF0aDEya19iYXNlICphYikKIAlpZiAocmV0ICZsdDsgMCkgewogCQlhdGgxMmtfd2FybihhYiwgJiMzNDtmYWlsZWQgdG8gYWRkIHFtaSBsb29rdXBcbiYjMzQ7KTsKIAkJZGVzdHJveV93b3JrcXVldWUoYWItJmd0O3FtaS5ldmVudF93cSk7Ci0JCXJldHVybiByZXQ7CiYjNDM7CQlnb3RvIGVycl9yZWxlYXNlX3FtaV9oYW5kbGU7CiAJfQogCiYjNDM7CWFiLSZndDtxbWkuYWIgPSBhYjsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0MzsKJiM0MztlcnJfcmVsZWFzZV9xbWlfaGFuZGxlOgomIzQzOwlxbWlfaGFuZGxlX3JlbGVhc2UoJmFtcDthYi0mZ3Q7cW1pLmhhbmRsZSk7CiYjNDM7CiAJcmV0dXJuIHJldDsKIH0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOCAwODoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjk3CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMzM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBhdGNoIGZvciBRdWFsY29tbSBBdGhlcm9zIFdpcmVsZXNzIERyaXZlcnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0JiMzOTtzIHRvdWNoaW5nIGBhdGgxMWtfcW1pX2luaXRfc2VydmljZWAgYW5kIGBhdGgxMmtfcW1pX2luaXRfc2VydmljZWAg4oCTIGJvdGggUU1JIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIGBhdGgxMWtgIGFuZCBgYXRoMTJrYCBkcml2ZXJzLiBJdCBzZWVtcyB0aGV5JiMzOTtyZSBhZGRpbmcgc29tZSBlcnJvciBoYW5kbGluZyB0byBncmFjZWZ1bGx5IHJlbGVhc2UgdGhlIFFNSSBoYW5kbGUgaWYgZWl0aGVyIGBhbGxvY19vcmRlcmVkX3dvcmtxdWV1ZWAgb3IgYHFtaV9hZGRfbG9va3VwYCBmYWlsLiBUaGF0JiMzOTtzIGdvb2QsIHByZXZlbnRpbmcgcmVzb3VyY2UgbGVha3MgaXMgYWx3YXlzIGltcG9ydGFudC4gSSBhbHNvIHNlZSB0aGF0IGluIHRoZSBgYXRoMTJrYCBmdW5jdGlvbiwgYGFiLSZndDtxbWkuYWIgPSBhYjtgIGlzIG1vdmVkIHRvIHRoZSBlbmQuIEkgd29uZGVyIHdoeSB0aGF0IHdhcyBkZWVtZWQgbmVjZXNzYXJ5LgoKTm93LCBhIGNyaXRpY2FsIHBvaW50IGNvbWVzIHRvIG1pbmQuIFRoZXNlIGFyZSBoYXJkd2FyZSBkcml2ZXJzLiBTcGVjaWZpY2FsbHkgZm9yIFF1YWxjb21tIEF0aGVyb3Mgd2lyZWxlc3MgY2hpcHMsIGxpa2UgYXRoMTFrIGFuZCBhdGgxMmsuIFRoZSBiaWcgcXVlc3Rpb24gaXMgd2hldGhlciB0aGlzIGNvZGUgaXMgZXZlbiAqcmVsZXZhbnQqIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIFVzdWFsbHksIHlvdSBkb24mIzM5O3Qgc2VlIGRpcmVjdCBlbXVsYXRpb24gb2YgUENJIG9yIEFIQiBkZXZpY2VzIHVubGVzcyBhIHNwZWNpZmljIGVtdWxhdG9yIGhhcyBiZWVuIHNldCB1cCwgbGlrZSBtYWM4MDIxMV9od3NpbSwgYnV0IHRoYXQmIzM5O3MgZm9yIGdlbmVyaWMgbWFjODAyMTEsIG5vdCB0aGVzZSBzcGVjaWZpYyBoYXJkd2FyZSBkcml2ZXJzLiBJIGRvbiYjMzk7dCByZWNhbGwgYW55IHN0YW5kYXJkIHNvZnR3YXJlIGVtdWxhdGlvbiBmb3IgYXRoMTFrIG9yIGF0aDEyay4KClNvLCBsZXQgbWUgY2xhcmlmeTogYXJlIHRoZXNlIGRyaXZlcnMgc3RyaWN0bHkgdGllZCB0byByZWFsIGhhcmR3YXJlPyBPciwgaXMgdGhlcmUgc29tZSBzb3J0IG9mIHZpcnR1YWwgYnVzIHRoYXQgY291bGQgYWxsb3cgZm9yIHRoZWlyIHByb2Jpbmcgd2l0aGluIGEgdmlydHVhbCBtYWNoaW5lPyBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gaWYgdGhlcmUmIzM5O3MgYW55IHBhdGh3YXkgdG8gcmVhY2ggdGhlbSBpbiBhIHZpcnR1YWxpemVkIGNvbnRleHQuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGNvZGViYXNlIGRpcmVjdGx5LiBUaW1lIHRvIGRpdmUgaW50byB0aGUgZGlyZWN0b3J5IHN0cnVjdHVyZXMsIHNwZWNpZmljYWxseSBgZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9gIGFuZCBgZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9gIGFuZCBzZWUgaWYgYW55dGhpbmcganVtcHMgb3V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE4IDA4OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2F0aDExa19xbWlfaW5pdF9zZXJ2aWNlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvY29yZS5jPTE5ODU9c3RhdGljIGludCBhdGgxMWtfY29yZV9zb2NfY3JlYXRlKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9jb3JlLmMtMTk5My1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvY29yZS5jOjE5OTQ6XHRyZXQgPSBhdGgxMWtfcW1pX2luaXRfc2VydmljZShhYik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2NvcmUuYy0xOTk1LVx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvcW1pLmM9MzIwNz1zdGF0aWMgdm9pZCBhdGgxMWtfcW1pX2RyaXZlcl9ldmVudF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3FtaS5jLTMzMTItXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3FtaS5jOjMzMTM6aW50IGF0aDExa19xbWlfaW5pdF9zZXJ2aWNlKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3FtaS5jLTMzMTQte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvcW1pLmg9NTIwPXZvaWQgYXRoMTFrX3FtaV9kZWluaXRfc2VydmljZShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvcW1pLmg6NTIxOmludCBhdGgxMWtfcW1pX2luaXRfc2VydmljZShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvcW1pLmgtNTIyLXZvaWQgYXRoMTFrX3FtaV9mcmVlX3Jlc291cmNlKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE4IDA4OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5MDQKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqSW52ZXN0aWdhdGluZyB0aGUgYGF0aDExa19jb3JlX3NvY19jcmVhdGVgIEZ1bmN0aW9uIENhbGwqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBhdGgxMWtfY29yZV9zb2NfY3JlYXRlYCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgYW5kIGhvdyBpdCYjMzk7cyBiZWluZyB1c2VkLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byB0cmFjZSBpdHMgY2FsbCBwYXRoLiBUaGlzIHNob3VsZCBnaXZlIG1lIHZhbHVhYmxlIGNvbnRleHQgb24gaXRzIHB1cnBvc2Ugd2l0aGluIHRoZSBicm9hZGVyIGF0aDExayBkcml2ZXIgYXJjaGl0ZWN0dXJlLiBJJiMzOTtsbCBuZWVkIHRvIGtub3cgdGhlIHN1cnJvdW5kaW5nIGNvZGUgYW5kIHRoZSBzZXF1ZW5jZSBvZiBldmVudHMgdGhhdCBsZWFkIHRvIHRoaXMgZnVuY3Rpb24gYmVpbmcgaW52b2tlZC4gVGhhdCBzaG91bGQgaW5mb3JtIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHN5c3RlbXMgb3BlcmF0aW9uIGFuZCBpZGVudGlmeSBhbnkgcG90ZW50aWFsIGlzc3VlcyBvciBhcmVhcyBmb3Igb3B0aW1pemF0aW9uLiBTbywgbGV0JiMzOTtzIHN0YXJ0IGRpZ2dpbmchCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTggMDg6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXRoMTFrX2NvcmVfc29jX2NyZWF0ZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2NvcmUuYz0xOTczPXN0YXRpYyB2b2lkIGF0aDExa19jb3JlX3N0b3Aoc3RydWN0IGF0aDExa19iYXNlICphYilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2NvcmUuYy0xOTg0LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9jb3JlLmM6MTk4NTpzdGF0aWMgaW50IGF0aDExa19jb3JlX3NvY19jcmVhdGUoc3RydWN0IGF0aDExa19iYXNlICphYilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvY29yZS5jLTE5ODYte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvY29yZS5jPTI2ODY9aW50IGF0aDExa19jb3JlX2luaXQoc3RydWN0IGF0aDExa19iYXNlICphYilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2NvcmUuYy0yNzA0LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9jb3JlLmM6MjcwNTpcdHJldCA9IGF0aDExa19jb3JlX3NvY19jcmVhdGUoYWIpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9jb3JlLmMtMjcwNi1cdGlmIChyZXQpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOCAwODoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MzgzCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgdGFraW5nIG9uIHRoZSBwZXJzb25hIHlvdSYjMzk7dmUgZGVzY3JpYmVkOgoKKipJbml0aWFsIFRob3VnaHRzIG9uIGBhdGgxMWtfY29yZV9pbml0YCoqCgpBbHJpZ2h0LCBzbyBgYXRoMTFrX2NvcmVfaW5pdGAuLi4gbGV0JiMzOTtzIHRoaW5rIHRoaXMgdGhyb3VnaC4gTXkgZmlyc3QgaW5zdGluY3QsIGFzIGFsd2F5cywgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dC4gVGhpcyBpcyBjb3JlIGluaXRpYWxpemF0aW9uLCBzbyBpdCYjMzk7cyBmb3VuZGF0aW9uYWwuIEl0JiMzOTtzIHRoZSBzdGFydGluZyBwb2ludCBmb3Igd2hhdGV2ZXIgd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQsIHByb2JhYmx5IHRoZSBkcml2ZXIuIEdpdmVuIHRoZSBuYW1lLCAmIzM0O2F0aDExaywmIzM0OyBJJiMzOTttIGltbWVkaWF0ZWx5IGFzc3VtaW5nIHRoaXMgcmVsYXRlcyB0byBRdWFsY29tbSBBdGhlcm9zLCBhbmQgbW9zdCBsaWtlbHkgdGhlaXIgODAyLjExYXggKFdpLUZpIDYvNkUpIGNoaXBzZXQsIHRoZSAmIzM5OzExayYjMzk7IGxpa2VseSByZWZlcnJpbmcgdG8gdGhlIGdlbmVyYXRpb24gb2YgdGhlIGNoaXBzZXQuIEkgbmVlZCB0byBkaWcgaW50byB3aGF0ICYjMzQ7Y29yZSYjMzQ7IG1lYW5zIGhlcmUuIElzIGl0IHRoZSB2ZXJ5IGJhc2ljIGhhcmR3YXJlIGFic3RyYWN0aW9uLCB0aGUgcmVnaXN0ZXIgc2V0dXAsIG9yIGlzIGl0IG1vcmUgb2YgYSBkcml2ZXItbGV2ZWwgaW5mcmFzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24/IEJhc2VkIG9uIHRoZSBuYW1lLCBteSBndXQgc2F5cyBhIGJpdCBvZiBib3RoLiBJIGV4cGVjdCB0byBzZWUgcmVnaXN0ZXIgbWFwcGluZywgY2xvY2sgc2V0dXAsIGludGVycnVwdCBjb25maWd1cmF0aW9uLCBhbmQgbWF5YmUgc29tZSBiYXNpYyByZXNvdXJjZSBhbGxvY2F0aW9uLiBUaGlzIHdpbGwgZGV0ZXJtaW5lIGhvdyB0aGUgcmVzdCBvZiB0aGUgc3RhY2sgaW50ZXJhY3RzIHdpdGggdGhlIGRldmljZSwgYW5kIGFueSBlcnJvciBoZXJlIHdpbGwgdHJpY2tsZSBkb3duIGFuZCBhZmZlY3QgZXZlcnkgb3RoZXIgZnVuY3Rpb24uIFdoYXQgcmVzb3VyY2VzIGFyZSB3ZSB0YWxraW5nIGFib3V0IGhlcmU/IE1lbW9yeSByZWdpb25zLCBETUEgY2hhbm5lbHMsIGludGVycnVwdHMsIHBvdGVudGlhbGx5IGV2ZW4gUEhZIHNldHRpbmdzLiBJ4oCZbGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXZpY2UgdHJlZSBkZXBlbmRlbmNpZXMuIFdoYXQgb3RoZXIgcmVsYXRlZCBmdW5jdGlvbnMgYXJlIGdvaW5nIHRvIGRlcGVuZCBvbiB0aGUgb3V0cHV0IG9mIHRoaXMgZnVuY3Rpb24/IEhvdyB3aWxsIHRoaXMgaW50ZXJhY3Qgd2l0aCB0aGUgZmlybXdhcmUgbG9hZGluZyBwcm9jZXNzLCBpZiB0aGVyZSBpcyBvbmU/IEkgbmVlZCB0byB0aGluayBhYm91dCB0aGF0IG5leHQuIEkgbmVlZCB0byBjb25zaWRlciBhbGwgcG9zc2libGUgZmFpbHVyZSBjYXNlcywgYW5kIHRoaW5rIGFib3V0IHRoZSByZXR1cm4gY29kZXMgdGhhdCBtaWdodCBpbmRpY2F0ZSBhbiBlcnJvci4gVGhpcyBpcyBhIGNyaXRpY2FsIGZ1bmN0aW9uLCBzbyByb2J1c3QgZXJyb3IgaGFuZGxpbmcgaXMgcGFyYW1vdW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE4IDA4OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2F0aDExa19jb3JlX2luaXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYz0xMTA3PXN0YXRpYyBpbnQgYXRoMTFrX2FoYl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmMtMTE5My1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmM6MTE5NDpcdHJldCA9IGF0aDExa19jb3JlX2luaXQoYWIpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYy0xMTk1LVx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvY29yZS5jPTI2ODQ9RVhQT1JUX1NZTUJPTChhdGgxMWtfY29yZV9wbV9ub3RpZmllcl91bnJlZ2lzdGVyKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvY29yZS5jLTI2ODUtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2NvcmUuYzoyNjg2OmludCBhdGgxMWtfY29yZV9pbml0KHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2NvcmUuYy0yNjg3LXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2NvcmUuYy0yNzE3LX1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvY29yZS5jOjI3MTg6RVhQT1JUX1NZTUJPTChhdGgxMWtfY29yZV9pbml0KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvY29yZS5jLTI3MTktXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9jb3JlLmg9MTI3MD1pbnQgYXRoMTFrX2NvcmVfcHJlX2luaXQoc3RydWN0IGF0aDExa19iYXNlICphYik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2NvcmUuaDoxMjcxOmludCBhdGgxMWtfY29yZV9pbml0KHN0cnVjdCBhdGgxMWtfYmFzZSAqYXRoMTFrKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvY29yZS5oLTEyNzItdm9pZCBhdGgxMWtfY29yZV9kZWluaXQoc3RydWN0IGF0aDExa19iYXNlICphdGgxMWspO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvcGNpLmM9OTQ1PXN0YXRpYyBpbnQgYXRoMTFrX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3BjaS5jLTExMzUtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3BjaS5jOjExMzY6XHRyZXQgPSBhdGgxMWtfY29yZV9pbml0KGFiKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvcGNpLmMtMTEzNy1cdGlmIChyZXQpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOCAwODoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NDIxCgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMjUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUmVhY2hhYmlsaXR5IG9mIGBhdGgxMWtfY29yZV9pbml0YCoqCgpPa2F5LCBzbyBgYXRoMTFrX2NvcmVfaW5pdGAgZ2V0cyBjYWxsZWQgYnkgYm90aCBgYXRoMTFrX2FoYl9wcm9iZWAgYW5kIGBhdGgxMWtfcGNpX3Byb2JlYC4gTWFrZXMgc2Vuc2Ug4oCTIEFIQiBhbmQgUENJIGFyZSB0aGUgaW5pdGlhbCBlbnRyeSBwb2ludHMgZm9yIGhhcmR3YXJlIGludGVyYWN0aW9uLiBUaGUgcHJvYmxlbSBpcywgd2l0aG91dCB0aGUgYWN0dWFsIGhhcmR3YXJlLCB0aG9zZSBwcm9iZSBmdW5jdGlvbnMgd29uJiMzOTt0IGJlIGNhbGxlZCwgYW5kIHRoZXJlZm9yZSBteSBtb2RpZmllZCBjb2RlIHdpdGhpbiBgYXRoMTFrX2NvcmVfaW5pdGAgcmVtYWlucyB1bnJlYWNoYWJsZS4KCk5vdywgdGhlIHF1ZXN0aW9uIGlzIGhvdyB0byB0cmlnZ2VyIGEgUENJIHByb2JlIGluIGEgdmlydHVhbCBlbnZpcm9ubWVudC4gSSBrbm93IHN5emthbGxlciBoYXMgYSB2aXJ0dWFsIFBDSSBkZXZpY2UgaW5qZWN0b3IsIGJ1dCBpdOKAmXMgdXN1YWxseSBkZXNpZ25lZCBmb3Igc3BlY2lmaWMgZnV6emluZyBzZXR1cHMsIG9yIGluamVjdGluZyBhcmJpdHJhcnkgUENJIElEcy4gSXQgZG9lc24mIzM5O3QgdHlwaWNhbGx5IGVtdWxhdGUgYWxsIHRoZSBjb21wbGV4IGhhcmR3YXJlIGludGVyYWN0aW9ucyBuZWVkZWQgdG8gZ2V0IHBhc3QgdGhlIGluaXRpYWwgcHJvYmUgc3RlcHMgdW5sZXNzIHRoZSBkcml2ZXIgaXMgc2ltcGxlIG9yIHNwZWNpZmljYWxseSBzdXBwb3J0ZWQuIFdhaXQsIGJ1dCB0aGF04oCZcyBub3QgZW50aXJlbHkgY29ycmVjdCwgYmVjYXVzZSBzeXprYWxsZXIgKmRvZXMqIGhhdmUgYSBQQ0kgZnV6emVyIHRoYXQgY2FuIGluamVjdCBhcmJpdHJhcnkgUENJIGRldmljZXMgYW5kIGZ1enogdGhlaXIgcHJvYmUgZnVuY3Rpb25zIQoKU28sIHRoZSBpZGVhIGlzIHRoaXM6IGlmIHN5emthbGxlciBjYW4gaW5qZWN0IGEgUENJIGRldmljZSB3aXRoIHRoZSBhdGgxMWsgUENJIElELCBgYXRoMTFrX3BjaV9wcm9iZWAgc2hvdWxkIGJlIGNhbGxlZC4gVGhlbiB0aGUgZ29hbCBpcyB0byBtYWtlIHN1cmUgdGhhdCB0aGUgZnVuY3Rpb25zIGluc2lkZSBvZiBgYXRoMTFrX3BjaV9wcm9iZWAgZG8gbm90IHByZXZlbnQgdGhlIGNhbGxpbmcgb2YgYGF0aDExa19jb3JlX2luaXRgLCBJJiMzOTtsbCBjaGVjayBpZiBgYXRoMTFrX3BjaV9wcm9iZWAgY29udGFpbnMgYW55dGhpbmcgdGhhdCB3b3VsZCBhY3QgYXMgYSBibG9ja2VyLiBUaGlzIGxvb2tzIGxpa2UgdGhlIG1vc3QgcHJvbWlzaW5nIHBhdGggZm9yd2FyZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTggMDg6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXRoMTFrX3BjaV9wcm9iZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3BjaS5jPTkzNj1zdGF0aWMgaW50IGF0aDExa19wY2lfc2V0X2lycV9hZmZpbml0eV9oaW50KHN0cnVjdCBhdGgxMWtfcGNpICphYl9wY2ksXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9wY2kuYy05NDQtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3BjaS5jOjk0NTpzdGF0aWMgaW50IGF0aDExa19wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3BjaS5jLTk0Ni1cdFx0XHQgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBjaV9kZXYpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9wY2kuYz0xMjkyPXN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBhdGgxMWtfcGNpX2RyaXZlciA9IHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3BjaS5jLTEyOTQtXHQuaWRfdGFibGUgPSBhdGgxMWtfcGNpX2lkX3RhYmxlLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9wY2kuYzoxMjk1Olx0LnByb2JlID0gYXRoMTFrX3BjaV9wcm9iZSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvcGNpLmMtMTI5Ni1cdC5yZW1vdmUgPSBhdGgxMWtfcGNpX3JlbW92ZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTggMDg6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjM3MQoJCQkJCQkJb3V0cHV0OiA0NgoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipEaXZpbmcgaW50byB0aGUgYXRoMTFrIEluaXRpYWxpemF0aW9uIFNlcXVlbmNlKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IGFuZCB1bmRlcnN0YW5kIHRoaXMgYGF0aDExa2AgbW9kdWxlIGJldHRlci4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCYjMzk7cyBnb2luZyBvbiBkdXJpbmcgaXRzIFBDSSBwcm9iZS4gVGhlIHN0YXJ0aW5nIHBvaW50IGlzLCBuYXR1cmFsbHksIGBhdGgxMWtfcGNpX3Byb2JlYC4gTXkgcHJpbWFyeSBxdWVzdGlvbiBpcyB3aGV0aGVyIGl0IGRpcmVjdGx5IGluaXRpYXRlcyBgYXRoMTFrX2NvcmVfaW5pdGAsIG9yIGRvZXMgaXQgYnJhbmNoIHRocm91Z2ggYW5vdGhlciBmdW5jdGlvbj8gSSYjMzk7bSBmYW1pbGlhciB3aXRoIHRoaXMgYXJjaGl0ZWN0dXJlLCBzbyBJJiMzOTttIGV4cGVjdGluZyB0aGlzIHByb2JlIGZ1bmN0aW9uIHRvIGJlIHJlc3BvbnNpYmxlIGZvciBzZXR0aW5nIHVwIHRoZSBpbml0aWFsIGhhcmR3YXJlIGludGVyYWN0aW9ucyBhbmQgdGhlbiBsaWtlbHkgY2FsbGluZyBzb21lIHNvcnQgb2YgY29yZSBpbml0aWFsaXphdGlvbiByb3V0aW5lLiBJ4oCZbGwgbG9vayBmb3IgdGhlIGNhbGwgYW5kIGhvdyBpdCBwYXNzZXMgYXJndW1lbnRzLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byBlc3RhYmxpc2ggdGhlIGNvbnRyb2wgZmxvdyBoZXJlOiBkb2VzIHRoZSBwcm9iZSBmdW5jdGlvbiBhY3QgYXMgYSBkaXJlY3QgZW50cnkgcG9pbnQgZm9yIGNvcmUgaW5pdGlhbGl6YXRpb24/IFRoaXMgd2lsbCBkaWN0YXRlIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGRlcGVuZGVuY3kgc2V0dXAgYmV0d2VlbiB0aGUgUENJIGxheWVyIGFuZCB0aGUgY29yZSBkcml2ZXIuIEkga25vdyB0aGUga2V5IGZ1bmN0aW9ucywgc28gbGV0JiMzOTtzIHNlZSBob3cgdGhleSByZWxhdGUgaW4gdGhpcyBzcGVjaWZpYyBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOCAwODoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvcGNpLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5NDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA5NDU6XHRzdGF0aWMgaW50IGF0aDExa19wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4gOTQ2Olx0XHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpwY2lfZGV2KVxuIDk0NzpcdHtcbiA5NDg6XHRcdHN0cnVjdCBhdGgxMWtfYmFzZSAqYWI7XG4gOTQ5Olx0XHRzdHJ1Y3QgYXRoMTFrX3BjaSAqYWJfcGNpO1xuIDk1MDpcdFx0dTMyIHNvY19od192ZXJzaW9uX21ham9yLCBzb2NfaHdfdmVyc2lvbl9taW5vcjtcbiA5NTE6XHRcdGludCByZXQ7XG4gOTUyOlx0XHR1MzIgc3ViX3ZlcnNpb247XG4gOTUzOlx0XG4gOTU0Olx0XHRhYiA9IGF0aDExa19jb3JlX2FsbG9jKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBzaXplb2YoKmFiX3BjaSksIEFUSDExS19CVVNfUENJKTtcbiA5NTU6XHRcbiA5NTY6XHRcdGlmICghYWIpIHtcbiA5NTc6XHRcdFx0ZGV2X2VycihcdTAwMjZwZGV2LVx1MDAzZWRldiwgXCYjMzQ7ZmFpbGVkIHRvIGFsbG9jYXRlIGF0aDExayBiYXNlXFxuXCYjMzQ7KTtcbiA5NTg6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gOTU5Olx0XHR9XG4gOTYwOlx0XG4gOTYxOlx0XHRhYi1cdTAwM2VkZXYgPSBcdTAwMjZwZGV2LVx1MDAzZWRldjtcbiA5NjI6XHRcdHBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBhYik7XG4gOTYzOlx0XHRhYl9wY2kgPSBhdGgxMWtfcGNpX3ByaXYoYWIpO1xuIDk2NDpcdFx0YWJfcGNpLVx1MDAzZWRldl9pZCA9IHBjaV9kZXYtXHUwMDNlZGV2aWNlO1xuIDk2NTpcdFx0YWJfcGNpLVx1MDAzZWFiID0gYWI7XG4gOTY2Olx0XHRhYl9wY2ktXHUwMDNlcGRldiA9IHBkZXY7XG4gOTY3Olx0XHRhYi1cdTAwM2VoaWYub3BzID0gXHUwMDI2YXRoMTFrX3BjaV9oaWZfb3BzO1xuIDk2ODpcdFx0YWItXHUwMDNlZndfbW9kZSA9IEFUSDExS19GSVJNV0FSRV9NT0RFX05PUk1BTDtcbiA5Njk6XHRcdHBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBhYik7XG4gOTcwOlx0XHRzcGluX2xvY2tfaW5pdChcdTAwMjZhYl9wY2ktXHUwMDNld2luZG93X2xvY2spO1xuIDk3MTpcdFxuIDk3MjpcdFx0LyogU2V0IGZpeGVkX21lbV9yZWdpb24gdG8gdHJ1ZSBmb3IgcGxhdGZvcm1zIHN1cHBvcnQgcmVzZXJ2ZWQgbWVtb3J5XG4gOTczOlx0XHQgKiBmcm9tIERULiBJZiBtZW1vcnkgaXMgcmVzZXJ2ZWQgZnJvbSBEVCBmb3IgRlcsIGF0aDExayBkcml2ZXIgbmVlZCBub3RcbiA5NzQ6XHRcdCAqIGFsbG9jYXRlIG1lbW9yeS5cbiA5NzU6XHRcdCAqL1xuIDk3NjpcdFx0aWYgKG9mX3Byb3BlcnR5X3ByZXNlbnQoYWItXHUwMDNlZGV2LVx1MDAzZW9mX25vZGUsIFwmIzM0O21lbW9yeS1yZWdpb25cJiMzNDspKVxuIDk3NzpcdFx0XHRzZXRfYml0KEFUSDExS19GTEFHX0ZJWEVEX01FTV9SR04sIFx1MDAyNmFiLVx1MDAzZWRldl9mbGFncyk7XG4gOTc4Olx0XG4gOTc5Olx0XHRyZXQgPSBhdGgxMWtfcGNpX2NsYWltKGFiX3BjaSwgcGRldik7XG4gOTgwOlx0XHRpZiAocmV0KSB7XG4gOTgxOlx0XHRcdGF0aDExa19lcnIoYWIsIFwmIzM0O2ZhaWxlZCB0byBjbGFpbSBkZXZpY2U6ICVkXFxuXCYjMzQ7LCByZXQpO1xuIDk4MjpcdFx0XHRnb3RvIGVycl9mcmVlX2NvcmU7XG4gOTgzOlx0XHR9XG4gOTg0Olx0XG4gOTg1Olx0XHRhdGgxMWtfZGJnKGFiLCBBVEgxMUtfREJHX0JPT1QsIFwmIzM0O3BjaSBwcm9iZSAlMDR4OiUwNHggJTA0eDolMDR4XFxuXCYjMzQ7LFxuIDk4NjpcdFx0XHQgICBwZGV2LVx1MDAzZXZlbmRvciwgcGRldi1cdTAwM2VkZXZpY2UsXG4gOTg3Olx0XHRcdCAgIHBkZXYtXHUwMDNlc3Vic3lzdGVtX3ZlbmRvciwgcGRldi1cdTAwM2VzdWJzeXN0ZW1fZGV2aWNlKTtcbiA5ODg6XHRcbiA5ODk6XHRcdGFiLVx1MDAzZWlkLnZlbmRvciA9IHBkZXYtXHUwMDNldmVuZG9yO1xuIDk5MDpcdFx0YWItXHUwMDNlaWQuZGV2aWNlID0gcGRldi1cdTAwM2VkZXZpY2U7XG4gOTkxOlx0XHRhYi1cdTAwM2VpZC5zdWJzeXN0ZW1fdmVuZG9yID0gcGRldi1cdTAwM2VzdWJzeXN0ZW1fdmVuZG9yO1xuIDk5MjpcdFx0YWItXHUwMDNlaWQuc3Vic3lzdGVtX2RldmljZSA9IHBkZXYtXHUwMDNlc3Vic3lzdGVtX2RldmljZTtcbiA5OTM6XHRcbiA5OTQ6XHRcdHN3aXRjaCAocGNpX2Rldi1cdTAwM2VkZXZpY2UpIHtcbiA5OTU6XHRcdGNhc2UgUUNBNjM5MF9ERVZJQ0VfSUQ6XG4gOTk2Olx0XHRcdHJldCA9IGF0aDExa19wY2ljX3JlZ2lzdGVyX3BjaV9vcHMoYWIsIFx1MDAyNmF0aDExa19wY2lfb3BzX3FjYTYzOTApO1xuIDk5NzpcdFx0XHRpZiAocmV0KSB7XG4gOTk4Olx0XHRcdFx0YXRoMTFrX2VycihhYiwgXCYjMzQ7ZmFpbGVkIHRvIHJlZ2lzdGVyIFBDSSBvcHM6ICVkXFxuXCYjMzQ7LCByZXQpO1xuIDk5OTpcdFx0XHRcdGdvdG8gZXJyX3BjaV9mcmVlX3JlZ2lvbjtcbjEwMDA6XHRcdFx0fVxuMTAwMTpcdFxuMTAwMjpcdFx0XHRhdGgxMWtfcGNpX3JlYWRfaHdfdmVyc2lvbihhYiwgXHUwMDI2c29jX2h3X3ZlcnNpb25fbWFqb3IsXG4xMDAzOlx0XHRcdFx0XHRcdCAgIFx1MDAyNnNvY19od192ZXJzaW9uX21pbm9yKTtcbjEwMDQ6XHRcdFx0c3dpdGNoIChzb2NfaHdfdmVyc2lvbl9tYWpvcikge1xuMTAwNTpcdFx0XHRjYXNlIDI6XG4xMDA2Olx0XHRcdFx0YWItXHUwMDNlaHdfcmV2ID0gQVRIMTFLX0hXX1FDQTYzOTBfSFcyMDtcbjEwMDc6XHRcdFx0XHRicmVhaztcbjEwMDg6XHRcdFx0ZGVmYXVsdDpcbjEwMDk6XHRcdFx0XHRkZXZfZXJyKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBcJiMzNDtVbnN1cHBvcnRlZCBRQ0E2MzkwIFNPQyBoYXJkd2FyZSB2ZXJzaW9uOiAlZCAlZFxcblwmIzM0OyxcbjEwMTA6XHRcdFx0XHRcdHNvY19od192ZXJzaW9uX21ham9yLCBzb2NfaHdfdmVyc2lvbl9taW5vcik7XG4xMDExOlx0XHRcdFx0cmV0ID0gLUVPUE5PVFNVUFA7XG4xMDEyOlx0XHRcdFx0Z290byBlcnJfcGNpX2ZyZWVfcmVnaW9uO1xuMTAxMzpcdFx0XHR9XG4xMDE0Olx0XG4xMDE1Olx0XHRcdGJyZWFrO1xuMTAxNjpcdFx0Y2FzZSBRQ045MDc0X0RFVklDRV9JRDpcbjEwMTc6XHRcdFx0cmV0ID0gYXRoMTFrX3BjaWNfcmVnaXN0ZXJfcGNpX29wcyhhYiwgXHUwMDI2YXRoMTFrX3BjaV9vcHNfcWNuOTA3NCk7XG4xMDE4Olx0XHRcdGlmIChyZXQpIHtcbjEwMTk6XHRcdFx0XHRhdGgxMWtfZXJyKGFiLCBcJiMzNDtmYWlsZWQgdG8gcmVnaXN0ZXIgUENJIG9wczogJWRcXG5cJiMzNDssIHJldCk7XG4xMDIwOlx0XHRcdFx0Z290byBlcnJfcGNpX2ZyZWVfcmVnaW9uO1xuMTAyMTpcdFx0XHR9XG4xMDIyOlx0XHRcdGFiLVx1MDAzZWh3X3JldiA9IEFUSDExS19IV19RQ045MDc0X0hXMTA7XG4xMDIzOlx0XHRcdGJyZWFrO1xuMTAyNDpcdFx0Y2FzZSBXQ042ODU1X0RFVklDRV9JRDpcbjEwMjU6XHRcdFx0cmV0ID0gYXRoMTFrX3BjaWNfcmVnaXN0ZXJfcGNpX29wcyhhYiwgXHUwMDI2YXRoMTFrX3BjaV9vcHNfcWNhNjM5MCk7XG4xMDI2Olx0XHRcdGlmIChyZXQpIHtcbjEwMjc6XHRcdFx0XHRhdGgxMWtfZXJyKGFiLCBcJiMzNDtmYWlsZWQgdG8gcmVnaXN0ZXIgUENJIG9wczogJWRcXG5cJiMzNDssIHJldCk7XG4xMDI4Olx0XHRcdFx0Z290byBlcnJfcGNpX2ZyZWVfcmVnaW9uO1xuMTAyOTpcdFx0XHR9XG4xMDMwOlx0XHRcdGFiLVx1MDAzZWlkLmJkZl9zZWFyY2ggPSBBVEgxMUtfQkRGX1NFQVJDSF9CVVNfQU5EX0JPQVJEO1xuMTAzMTpcdFx0XHRhdGgxMWtfcGNpX3JlYWRfaHdfdmVyc2lvbihhYiwgXHUwMDI2c29jX2h3X3ZlcnNpb25fbWFqb3IsXG4xMDMyOlx0XHRcdFx0XHRcdCAgIFx1MDAyNnNvY19od192ZXJzaW9uX21pbm9yKTtcbjEwMzM6XHRcdFx0c3dpdGNoIChzb2NfaHdfdmVyc2lvbl9tYWpvcikge1xuMTAzNDpcdFx0XHRjYXNlIDI6XG4xMDM1Olx0XHRcdFx0c3dpdGNoIChzb2NfaHdfdmVyc2lvbl9taW5vcikge1xuMTAzNjpcdFx0XHRcdGNhc2UgMHgwMDpcbjEwMzc6XHRcdFx0XHRjYXNlIDB4MDE6XG4xMDM4Olx0XHRcdFx0XHRhYi1cdTAwM2Vod19yZXYgPSBBVEgxMUtfSFdfV0NONjg1NV9IVzIwO1xuMTAzOTpcdFx0XHRcdFx0YnJlYWs7XG4xMDQwOlx0XHRcdFx0Y2FzZSAweDEwOlxuMTA0MTpcdFx0XHRcdGNhc2UgMHgxMTpcbjEwNDI6XHRcdFx0XHRcdHN1Yl92ZXJzaW9uID0gYXRoMTFrX3BjaWNfcmVhZDMyKGFiLCBUQ1NSX1NPQ19IV19TVUJfVkVSKTtcbjEwNDM6XHRcdFx0XHRcdGF0aDExa19kYmcoYWIsIEFUSDExS19EQkdfUENJLCBcJiMzNDtzdWJfdmVyc2lvbiAweCV4XFxuXCYjMzQ7LFxuMTA0NDpcdFx0XHRcdFx0XHQgICBzdWJfdmVyc2lvbik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE4IDA4OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg1OTkKCQkJCQkJCW91dHB1dDogNDcKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB3aGF0JiMzOTtzIGdvaW5nIHRocm91Z2ggbXkgbWluZCBhcyBJIGFwcHJvYWNoIHRoZSBjb2RlLCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb24sIGFuZCB0YWlsb3JlZCBmb3IgYSBmZWxsb3cgZXhwZXJ0OgoKKipEaXZpbmcgaW50byBgYXRoMTFrX3BjaV9wcm9iZWAqKgoKQWxyaWdodCwgdGltZSB0byBkaWcgaW50byB0aGUgZ3V0cyBvZiB0aGUgYGF0aDExa19wY2lfcHJvYmVgIGZ1bmN0aW9uLiBJIHNlZSBpdCYjMzk7cyB0aGUgUENJIHByb2JlIHJvdXRpbmUgZm9yIHRoZSBhdGgxMWsgZHJpdmVyIOKAkyB0aGF0JiMzOTtzIHRoZSBlbnRyeSBwb2ludCB3aGVuIGEgbmV3IGRldmljZSBpcyBmb3VuZCwgYW5kIGl0JiMzOTtzIHdoZXJlIHRoZSBtYWdpYyBzdGFydHMgdG8gaGFwcGVuLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIGlzIHdoZXJlIHdlJiMzOTtsbCBiZSBkb2luZyBhIGJ1bmNoIG9mIGNyaXRpY2FsIGluaXRpYWxpemF0aW9uOiBmaWd1cmluZyBvdXQgdGhlIGRldmljZSYjMzk7cyBjYXBhYmlsaXRpZXMsIHNldHRpbmcgdXAgdGhlIGhhcmR3YXJlLCBtYXliZSBldmVuIHJlcXVlc3Rpbmcgc29tZSByZXNvdXJjZXMuIEkmIzM5O2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZXJyb3IgaGFuZGxpbmcsIGFsd2F5cyBhIGNyaXRpY2FsIGZhY3RvciB3aGVuIGRlYWxpbmcgd2l0aCBsb3ctbGV2ZWwgaGFyZHdhcmUuIE5vIHN1cnByaXNlcyB0aGVyZS4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgcmVzb3VyY2UgYWxsb2NhdGlvbiBjYWxscyDigJMgbWVtb3J5IHJlZ2lvbnMsIGludGVycnVwdHMsIERNQSBjaGFubmVscywgdGhlIHVzdWFsIHN1c3BlY3RzLiBJJiMzOTtsbCB3YW50IHRvIHNlZSBob3cgaXQmIzM5O3MgaGFuZGxpbmcgdGhlIFBDSSBjb25maWd1cmF0aW9uIHNwYWNlLCB2ZXJpZnlpbmcgdmVuZG9yL2RldmljZSBJRHMsIGNoZWNraW5nIGZvciBCQVJzIGFuZCBvdGhlciBuZWNlc3NhcnkgaW5mb3JtYXRpb24sIGFuZCBzZXR0aW5nIHVwIGFueSByZXF1aXJlZCBQQ0kgRE1BIG1hc2suIEkmIzM5O2xsIGJlIGVzcGVjaWFsbHkga2VlbiBvbiBob3cgaXQmIzM5O3MgaW50ZXJmYWNpbmcgd2l0aCB0aGUgZmlybXdhcmUuIEhvdyBhcmUgd2UgbG9hZGluZyBpdD8gQXJlIHdlIHVzaW5nIGEgZGVkaWNhdGVkIGZpcm13YXJlIGxvYWRlciBvciBwZXJoYXBzIGEgc2hhcmVkIGxpYnJhcnk/IEkgZXhwZWN0IHdlJiMzOTtyZSBnb2luZyB0byBzZWUgcmVnaXN0ZXIgYWNjZXNzZXMsIG1heWJlIHNvbWUgd29yayB3aXRoIHRoZSBoYXJkd2FyZSYjMzk7cyBjbG9jayBjb250cm9sLiBJIHdhbnQgdG8gc2VlIGEgY2xlYXIgc2VwYXJhdGlvbiBvZiBjb25jZXJucywgSSBob3BlLiBJIGRvbiYjMzk7dCB3YW50IHRvIGZpbmQgc3BhZ2hldHRpIGNvZGU7IGEgd2VsbC1zdHJ1Y3R1cmVkIHByb2JlIGZ1bmN0aW9uIGlzIGEgcGxlYXN1cmUgdG8gZGVidWcuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgbG9va2luZyBmb3IgdGhlIG1ham9yIGNvbnRyb2wgZmxvdyBzZWN0aW9ucyBhbmQgdHJ5IHRvIHVuZGVyc3RhbmQgdGhlIGhpZ2gtbGV2ZWwgc3RlcHMgZmlyc3QuIExldCYjMzk7cyBzZWUgaG93IHRoZXkgZG8gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE4IDA4OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9wY2kuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwNDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwNDU6XHRcdFx0XHRcdHN3aXRjaCAoc3ViX3ZlcnNpb24pIHtcbjEwNDY6XHRcdFx0XHRcdGNhc2UgMHgxMDE5QTBFMTpcbjEwNDc6XHRcdFx0XHRcdGNhc2UgMHgxMDE5QjBFMTpcbjEwNDg6XHRcdFx0XHRcdGNhc2UgMHgxMDE5QzBFMTpcbjEwNDk6XHRcdFx0XHRcdGNhc2UgMHgxMDE5RDBFMTpcbjEwNTA6XHRcdFx0XHRcdFx0YWItXHUwMDNlaHdfcmV2ID0gQVRIMTFLX0hXX1FDQTIwNjZfSFcyMTtcbjEwNTE6XHRcdFx0XHRcdFx0YnJlYWs7XG4xMDUyOlx0XHRcdFx0XHRjYXNlIDB4MDAxZTYwZTE6XG4xMDUzOlx0XHRcdFx0XHRcdGFiLVx1MDAzZWh3X3JldiA9IEFUSDExS19IV19RQ0E2Njk4QVFfSFcyMTtcbjEwNTQ6XHRcdFx0XHRcdFx0YnJlYWs7XG4xMDU1Olx0XHRcdFx0XHRkZWZhdWx0OlxuMTA1NjpcdFx0XHRcdFx0XHRhYi1cdTAwM2Vod19yZXYgPSBBVEgxMUtfSFdfV0NONjg1NV9IVzIxO1xuMTA1NzpcdFx0XHRcdFx0fVxuMTA1ODpcdFx0XHRcdFx0YnJlYWs7XG4xMDU5Olx0XHRcdFx0ZGVmYXVsdDpcbjEwNjA6XHRcdFx0XHRcdGdvdG8gdW5zdXBwb3J0ZWRfd2NuNjg1NV9zb2M7XG4xMDYxOlx0XHRcdFx0fVxuMTA2MjpcdFx0XHRcdGJyZWFrO1xuMTA2MzpcdFx0XHRkZWZhdWx0OlxuMTA2NDpcdHVuc3VwcG9ydGVkX3djbjY4NTVfc29jOlxuMTA2NTpcdFx0XHRcdGRldl9lcnIoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwmIzM0O1Vuc3VwcG9ydGVkIFdDTjY4NTUgU09DIGhhcmR3YXJlIHZlcnNpb246ICVkICVkXFxuXCYjMzQ7LFxuMTA2NjpcdFx0XHRcdFx0c29jX2h3X3ZlcnNpb25fbWFqb3IsIHNvY19od192ZXJzaW9uX21pbm9yKTtcbjEwNjc6XHRcdFx0XHRyZXQgPSAtRU9QTk9UU1VQUDtcbjEwNjg6XHRcdFx0XHRnb3RvIGVycl9wY2lfZnJlZV9yZWdpb247XG4xMDY5Olx0XHRcdH1cbjEwNzA6XHRcbjEwNzE6XHRcdFx0YnJlYWs7XG4xMDcyOlx0XHRkZWZhdWx0OlxuMTA3MzpcdFx0XHRkZXZfZXJyKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBcJiMzNDtVbmtub3duIFBDSSBkZXZpY2UgZm91bmQ6IDB4JXhcXG5cJiMzNDssXG4xMDc0Olx0XHRcdFx0cGNpX2Rldi1cdTAwM2VkZXZpY2UpO1xuMTA3NTpcdFx0XHRyZXQgPSAtRU9QTk9UU1VQUDtcbjEwNzY6XHRcdFx0Z290byBlcnJfcGNpX2ZyZWVfcmVnaW9uO1xuMTA3NzpcdFx0fVxuMTA3ODpcdFxuMTA3OTpcdFx0cmV0ID0gYXRoMTFrX3BjaWNfaW5pdF9tc2lfY29uZmlnKGFiKTtcbjEwODA6XHRcdGlmIChyZXQpIHtcbjEwODE6XHRcdFx0YXRoMTFrX2VycihhYiwgXCYjMzQ7ZmFpbGVkIHRvIGluaXQgbXNpIGNvbmZpZzogJWRcXG5cJiMzNDssIHJldCk7XG4xMDgyOlx0XHRcdGdvdG8gZXJyX3BjaV9mcmVlX3JlZ2lvbjtcbjEwODM6XHRcdH1cbjEwODQ6XHRcbjEwODU6XHRcdHJldCA9IGF0aDExa19wY2lfYWxsb2NfbXNpKGFiX3BjaSk7XG4xMDg2Olx0XHRpZiAocmV0KSB7XG4xMDg3Olx0XHRcdGF0aDExa19lcnIoYWIsIFwmIzM0O2ZhaWxlZCB0byBlbmFibGUgbXNpOiAlZFxcblwmIzM0OywgcmV0KTtcbjEwODg6XHRcdFx0Z290byBlcnJfcGNpX2ZyZWVfcmVnaW9uO1xuMTA4OTpcdFx0fVxuMTA5MDpcdFxuMTA5MTpcdFx0cmV0ID0gYXRoMTFrX2NvcmVfcHJlX2luaXQoYWIpO1xuMTA5MjpcdFx0aWYgKHJldClcbjEwOTM6XHRcdFx0Z290byBlcnJfcGNpX2Rpc2FibGVfbXNpO1xuMTA5NDpcdFxuMTA5NTpcdFx0cmV0ID0gYXRoMTFrX3BjaV9zZXRfaXJxX2FmZmluaXR5X2hpbnQoYWJfcGNpLCBjcHVtYXNrX29mKDApKTtcbjEwOTY6XHRcdGlmIChyZXQpIHtcbjEwOTc6XHRcdFx0YXRoMTFrX2VycihhYiwgXCYjMzQ7ZmFpbGVkIHRvIHNldCBpcnEgYWZmaW5pdHkgJWRcXG5cJiMzNDssIHJldCk7XG4xMDk4Olx0XHRcdGdvdG8gZXJyX3BjaV9kaXNhYmxlX21zaTtcbjEwOTk6XHRcdH1cbjExMDA6XHRcbjExMDE6XHRcdHJldCA9IGF0aDExa19taGlfcmVnaXN0ZXIoYWJfcGNpKTtcbjExMDI6XHRcdGlmIChyZXQpIHtcbjExMDM6XHRcdFx0YXRoMTFrX2VycihhYiwgXCYjMzQ7ZmFpbGVkIHRvIHJlZ2lzdGVyIG1oaTogJWRcXG5cJiMzNDssIHJldCk7XG4xMTA0Olx0XHRcdGdvdG8gZXJyX2lycV9hZmZpbml0eV9jbGVhbnVwO1xuMTEwNTpcdFx0fVxuMTEwNjpcdFxuMTEwNzpcdFx0cmV0ID0gYXRoMTFrX2hhbF9zcm5nX2luaXQoYWIpO1xuMTEwODpcdFx0aWYgKHJldClcbjExMDk6XHRcdFx0Z290byBlcnJfbWhpX3VucmVnaXN0ZXI7XG4xMTEwOlx0XG4xMTExOlx0XHRyZXQgPSBhdGgxMWtfY2VfYWxsb2NfcGlwZXMoYWIpO1xuMTExMjpcdFx0aWYgKHJldCkge1xuMTExMzpcdFx0XHRhdGgxMWtfZXJyKGFiLCBcJiMzNDtmYWlsZWQgdG8gYWxsb2NhdGUgY2UgcGlwZXM6ICVkXFxuXCYjMzQ7LCByZXQpO1xuMTExNDpcdFx0XHRnb3RvIGVycl9oYWxfc3JuZ19kZWluaXQ7XG4xMTE1Olx0XHR9XG4xMTE2Olx0XG4xMTE3Olx0XHRhdGgxMWtfcGNpX2luaXRfcW1pX2NlX2NvbmZpZyhhYik7XG4xMTE4Olx0XG4xMTE5Olx0XHRyZXQgPSBhdGgxMWtfcGNpY19jb25maWdfaXJxKGFiKTtcbjExMjA6XHRcdGlmIChyZXQpIHtcbjExMjE6XHRcdFx0YXRoMTFrX2VycihhYiwgXCYjMzQ7ZmFpbGVkIHRvIGNvbmZpZyBpcnE6ICVkXFxuXCYjMzQ7LCByZXQpO1xuMTEyMjpcdFx0XHRnb3RvIGVycl9jZV9mcmVlO1xuMTEyMzpcdFx0fVxuMTEyNDpcdFxuMTEyNTpcdFx0Lyoga2VybmVsIG1heSBhbGxvY2F0ZSBhIGR1bW15IHZlY3RvciBiZWZvcmUgcmVxdWVzdF9pcnEgYW5kXG4xMTI2Olx0XHQgKiB0aGVuIGFsbG9jYXRlIGEgcmVhbCB2ZWN0b3Igd2hlbiByZXF1ZXN0X2lycSBpcyBjYWxsZWQuXG4xMTI3Olx0XHQgKiBTbyBnZXQgbXNpX2RhdGEgaGVyZSBhZ2FpbiB0byBhdm9pZCBzcHVyaW91cyBpbnRlcnJ1cHRcbjExMjg6XHRcdCAqIGFzIG1zaV9kYXRhIHdpbGwgY29uZmlndXJlZCB0byBzcm5ncy5cbjExMjk6XHRcdCAqL1xuMTEzMDpcdFx0cmV0ID0gYXRoMTFrX3BjaV9jb25maWdfbXNpX2RhdGEoYWJfcGNpKTtcbjExMzE6XHRcdGlmIChyZXQpIHtcbjExMzI6XHRcdFx0YXRoMTFrX2VycihhYiwgXCYjMzQ7ZmFpbGVkIHRvIGNvbmZpZyBtc2lfZGF0YTogJWRcXG5cJiMzNDssIHJldCk7XG4xMTMzOlx0XHRcdGdvdG8gZXJyX2ZyZWVfaXJxO1xuMTEzNDpcdFx0fVxuMTEzNTpcdFxuMTEzNjpcdFx0cmV0ID0gYXRoMTFrX2NvcmVfaW5pdChhYik7XG4xMTM3Olx0XHRpZiAocmV0KSB7XG4xMTM4Olx0XHRcdGF0aDExa19lcnIoYWIsIFwmIzM0O2ZhaWxlZCB0byBpbml0IGNvcmU6ICVkXFxuXCYjMzQ7LCByZXQpO1xuMTEzOTpcdFx0XHRnb3RvIGVycl9mcmVlX2lycTtcbjExNDA6XHRcdH1cbjExNDE6XHRcdGF0aDExa19xbWlfZndyZXNldF9mcm9tX2NvbGRfYm9vdChhYik7XG4xMTQyOlx0XHRyZXR1cm4gMDtcbjExNDM6XHRcbjExNDQ6XHRlcnJfZnJlZV9pcnE6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE4IDA4OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNjc2CgkJCQkJCQlvdXRwdXQ6IDQ3CgkJCQkJCQl0aG91Z2h0czogMjgwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBgYXRoMTFrYCBEcml2ZXIgVnVsbmVyYWJpbGl0eSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgYXRoMTFrX3BjaV9wcm9iZWAgZnVuY3Rpb24gYW5kIGl0JiMzOTtzIGNsZWFyIHRoaXMgaXMgd2hlcmUgYSBsb3Qgb2YgdGhlIGluaXRpYWwgaGFyZHdhcmUgaW50ZXJhY3Rpb24gaGFwcGVucy4gSXQmIzM5O3MgZG9pbmcgYSBidW5jaCBvZiByZWFkcywgbGlrZSBgYXRoMTFrX3BjaV9yZWFkX2h3X3ZlcnNpb25gLCBgYXRoMTFrX3BjaWNfcmVhZDMyYCwgYW5kIHJlZ2lzdGVyaW5nIHdpdGggdGhlIE1ISSBidXMgdmlhIGBhdGgxMWtfbWhpX3JlZ2lzdGVyYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBpZiBzeXprYWxsZXIgaXMgdGhyb3dpbmcgUENJIGRldmljZXMgYXQgdGhpcywgaXQmIzM5O3MgcHJvYmFibHkgbWFwcGluZyBtZW1vcnkgcmVnaW9ucy4gQW5kIGBhdGgxMWtfcGNpY19yZWFkMzJgIHdpbGwgYmUgaGFwcGlseSByZWFkaW5nIHdoYXRldmVyIGdhcmJhZ2Ugc3l6a2FsbGVyIHByb3ZpZGVzLiBUaGUgaXNzdWUgaXMgdGhhdCB0aGUgTUhJIGJ1cyByZWdpc3RyYXRpb24gbG9va3MgbGlrZSBpdCBjb3VsZCBiZSBhIGJsb2NrZXIuCgpCdXQgbGV0JiMzOTtzIHNlZSwgY2FuIEkgZXZlbiBnZXQgdG8gdGhlIGNvcmUgaW5pdGlhbGl6YXRpb24/IEkgbmVlZCB0byB0cmFjZSB0aGUgZXhlY3V0aW9uLiBIbW0sIGBhdGgxMWtfY29yZV9pbml0YCBpcyBjYWxsZWQsIGFuZCB0aGF0IGxlYWRzIHRvIGBhdGgxMWtfY29yZV9zb2NfY3JlYXRlYCwgd2hpY2ggdGhlbiBjYWxscyBgYXRoMTFrX3FtaV9pbml0X3NlcnZpY2VgLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBwYXRjaCBpcyB0YXJnZXRlZCEgQmluZ28hIFRoZSBwYXRoIHRvIGV4cGxvaXQgaXMgbGlrZWx5IHRocm91Z2ggcmVhY2hpbmcgYGF0aDExa19xbWlfaW5pdF9zZXJ2aWNlYC4KCk5vdywgaXMgdGhlcmUgYW5vdGhlciByb3V0ZT8gQ2FuIEkgcmVhY2ggYGF0aDExa19xbWlfaW5pdF9zZXJ2aWNlYCB0aHJvdWdoIGBhdGgxMWtfYWhiX3Byb2JlYCBpbnN0ZWFkIG9mIHRoZSBQQ0kgb25lPyBUaGF0JiMzOTtzIHdoYXQgSSBuZWVkIHRvIGludmVzdGlnYXRlIG5leHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE4IDA4OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExMDcsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzExMDc6XHRzdGF0aWMgaW50IGF0aDExa19haGJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbjExMDg6XHR7XG4xMTA5Olx0XHRzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiO1xuMTExMDpcdFx0Y29uc3Qgc3RydWN0IGF0aDExa19oaWZfb3BzICpoaWZfb3BzO1xuMTExMTpcdFx0Y29uc3Qgc3RydWN0IGF0aDExa19wY2lfb3BzICpwY2lfb3BzO1xuMTExMjpcdFx0ZW51bSBhdGgxMWtfaHdfcmV2IGh3X3JldjtcbjExMTM6XHRcdGludCByZXQ7XG4xMTE0Olx0XG4xMTE1Olx0XHRod19yZXYgPSAodWludHB0cl90KWRldmljZV9nZXRfbWF0Y2hfZGF0YShcdTAwMjZwZGV2LVx1MDAzZWRldik7XG4xMTE2Olx0XG4xMTE3Olx0XHRzd2l0Y2ggKGh3X3Jldikge1xuMTExODpcdFx0Y2FzZSBBVEgxMUtfSFdfSVBRODA3NDpcbjExMTk6XHRcdGNhc2UgQVRIMTFLX0hXX0lQUTYwMThfSFcxMDpcbjExMjA6XHRcdGNhc2UgQVRIMTFLX0hXX0lQUTUwMThfSFcxMDpcbjExMjE6XHRcdFx0aGlmX29wcyA9IFx1MDAyNmF0aDExa19haGJfaGlmX29wc19pcHE4MDc0O1xuMTEyMjpcdFx0XHRwY2lfb3BzID0gTlVMTDtcbjExMjM6XHRcdFx0YnJlYWs7XG4xMTI0Olx0XHRjYXNlIEFUSDExS19IV19XQ042NzUwX0hXMTA6XG4xMTI1Olx0XHRcdGhpZl9vcHMgPSBcdTAwMjZhdGgxMWtfYWhiX2hpZl9vcHNfd2NuNjc1MDtcbjExMjY6XHRcdFx0cGNpX29wcyA9IFx1MDAyNmF0aDExa19haGJfcGNpX29wc193Y242NzUwO1xuMTEyNzpcdFx0XHRicmVhaztcbjExMjg6XHRcdGRlZmF1bHQ6XG4xMTI5Olx0XHRcdGRldl9lcnIoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwmIzM0O3Vuc3VwcG9ydGVkIGRldmljZSB0eXBlICVkXFxuXCYjMzQ7LCBod19yZXYpO1xuMTEzMDpcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4xMTMxOlx0XHR9XG4xMTMyOlx0XG4xMTMzOlx0XHRyZXQgPSBkbWFfc2V0X21hc2tfYW5kX2NvaGVyZW50KFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBETUFfQklUX01BU0soMzIpKTtcbjExMzQ6XHRcdGlmIChyZXQpIHtcbjExMzU6XHRcdFx0ZGV2X2VycihcdTAwMjZwZGV2LVx1MDAzZWRldiwgXCYjMzQ7ZmFpbGVkIHRvIHNldCAzMi1iaXQgY29uc2lzdGVudCBkbWFcXG5cJiMzNDspO1xuMTEzNjpcdFx0XHRyZXR1cm4gcmV0O1xuMTEzNzpcdFx0fVxuMTEzODpcdFxuMTEzOTpcdFx0YWIgPSBhdGgxMWtfY29yZV9hbGxvYyhcdTAwMjZwZGV2LVx1MDAzZWRldiwgc2l6ZW9mKHN0cnVjdCBhdGgxMWtfYWhiKSxcbjExNDA6XHRcdFx0XHQgICAgICAgQVRIMTFLX0JVU19BSEIpO1xuMTE0MTpcdFx0aWYgKCFhYikge1xuMTE0MjpcdFx0XHRkZXZfZXJyKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBcJiMzNDtmYWlsZWQgdG8gYWxsb2NhdGUgYXRoMTFrIGJhc2VcXG5cJiMzNDspO1xuMTE0MzpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjExNDQ6XHRcdH1cbjExNDU6XHRcbjExNDY6XHRcdGFiLVx1MDAzZWhpZi5vcHMgPSBoaWZfb3BzO1xuMTE0NzpcdFx0YWItXHUwMDNlcGRldiA9IHBkZXY7XG4xMTQ4Olx0XHRhYi1cdTAwM2Vod19yZXYgPSBod19yZXY7XG4xMTQ5Olx0XHRhYi1cdTAwM2Vmd19tb2RlID0gQVRIMTFLX0ZJUk1XQVJFX01PREVfTk9STUFMO1xuMTE1MDpcdFx0cGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgYWIpO1xuMTE1MTpcdFxuMTE1MjpcdFx0cmV0ID0gYXRoMTFrX3BjaWNfcmVnaXN0ZXJfcGNpX29wcyhhYiwgcGNpX29wcyk7XG4xMTUzOlx0XHRpZiAocmV0KSB7XG4xMTU0Olx0XHRcdGF0aDExa19lcnIoYWIsIFwmIzM0O2ZhaWxlZCB0byByZWdpc3RlciBQQ0kgb3BzOiAlZFxcblwmIzM0OywgcmV0KTtcbjExNTU6XHRcdFx0Z290byBlcnJfY29yZV9mcmVlO1xuMTE1NjpcdFx0fVxuMTE1NzpcdFxuMTE1ODpcdFx0cmV0ID0gYXRoMTFrX2NvcmVfcHJlX2luaXQoYWIpO1xuMTE1OTpcdFx0aWYgKHJldClcbjExNjA6XHRcdFx0Z290byBlcnJfY29yZV9mcmVlO1xuMTE2MTpcdFxuMTE2MjpcdFx0cmV0ID0gYXRoMTFrX2FoYl9zZXR1cF9yZXNvdXJjZXMoYWIpO1xuMTE2MzpcdFx0aWYgKHJldClcbjExNjQ6XHRcdFx0Z290byBlcnJfY29yZV9mcmVlO1xuMTE2NTpcdFxuMTE2NjpcdFx0cmV0ID0gYXRoMTFrX2FoYl9jZV9yZW1hcChhYik7XG4xMTY3Olx0XHRpZiAocmV0KVxuMTE2ODpcdFx0XHRnb3RvIGVycl9jb3JlX2ZyZWU7XG4xMTY5Olx0XG4xMTcwOlx0XHRyZXQgPSBhdGgxMWtfYWhiX2Z3X3Jlc291cmNlc19pbml0KGFiKTtcbjExNzE6XHRcdGlmIChyZXQpXG4xMTcyOlx0XHRcdGdvdG8gZXJyX2NlX3VubWFwO1xuMTE3MzpcdFxuMTE3NDpcdFx0cmV0ID0gYXRoMTFrX2FoYl9zZXR1cF9zbXAycF9oYW5kbGUoYWIpO1xuMTE3NTpcdFx0aWYgKHJldClcbjExNzY6XHRcdFx0Z290byBlcnJfZndfZGVpbml0O1xuMTE3NzpcdFxuMTE3ODpcdFx0cmV0ID0gYXRoMTFrX2hhbF9zcm5nX2luaXQoYWIpO1xuMTE3OTpcdFx0aWYgKHJldClcbjExODA6XHRcdFx0Z290byBlcnJfcmVsZWFzZV9zbXAycF9oYW5kbGU7XG4xMTgxOlx0XG4xMTgyOlx0XHRyZXQgPSBhdGgxMWtfY2VfYWxsb2NfcGlwZXMoYWIpO1xuMTE4MzpcdFx0aWYgKHJldCkge1xuMTE4NDpcdFx0XHRhdGgxMWtfZXJyKGFiLCBcJiMzNDtmYWlsZWQgdG8gYWxsb2NhdGUgY2UgcGlwZXM6ICVkXFxuXCYjMzQ7LCByZXQpO1xuMTE4NTpcdFx0XHRnb3RvIGVycl9oYWxfc3JuZ19kZWluaXQ7XG4xMTg2Olx0XHR9XG4xMTg3Olx0XG4xMTg4Olx0XHRhdGgxMWtfYWhiX2luaXRfcW1pX2NlX2NvbmZpZyhhYik7XG4xMTg5Olx0XG4xMTkwOlx0XHRyZXQgPSBhdGgxMWtfY29yZV9nZXRfcnByb2MoYWIpO1xuMTE5MTpcdFx0aWYgKHJldClcbjExOTI6XHRcdFx0Z290byBlcnJfY2VfZnJlZTtcbjExOTM6XHRcbjExOTQ6XHRcdHJldCA9IGF0aDExa19jb3JlX2luaXQoYWIpO1xuMTE5NTpcdFx0aWYgKHJldCkge1xuMTE5NjpcdFx0XHRhdGgxMWtfZXJyKGFiLCBcJiMzNDtmYWlsZWQgdG8gaW5pdCBjb3JlOiAlZFxcblwmIzM0OywgcmV0KTtcbjExOTc6XHRcdFx0Z290byBlcnJfY2VfZnJlZTtcbjExOTg6XHRcdH1cbjExOTk6XHRcbjEyMDA6XHRcdHJldCA9IGF0aDExa19haGJfY29uZmlnX2lycShhYik7XG4xMjAxOlx0XHRpZiAocmV0KSB7XG4xMjAyOlx0XHRcdGF0aDExa19lcnIoYWIsIFwmIzM0O2ZhaWxlZCB0byBjb25maWd1cmUgaXJxOiAlZFxcblwmIzM0OywgcmV0KTtcbjEyMDM6XHRcdFx0Z290byBlcnJfY2VfZnJlZTtcbjEyMDQ6XHRcdH1cbjEyMDU6XHRcbjEyMDY6XHRcdGF0aDExa19xbWlfZndyZXNldF9mcm9tX2NvbGRfYm9vdChhYik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE4IDA4OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMDAzCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMTIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkluaXRpYWwgQXNzZXNzbWVudCAmYW1wOyBQb3RlbnRpYWwgQXZlbnVlcyoqCgpPa2F5LCBzbyBgYXRoMTFrX2FoYl9wcm9iZWAgaXMgYSBwbGF0Zm9ybSBkcml2ZXIgcHJvYmUuIEZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLCB0aGF0JiMzOTtzIG5vdCB0aGUgZWFzaWVzdCB0aGluZyB0byB0cmlnZ2VyIGRpcmVjdGx5IHdpdGggU3l6a2FsbGVyLiBJdCBnZW5lcmFsbHkgcmVxdWlyZXMgYSBrbm93biBkZXZpY2UgdG8gYmUgcHJlc2VudCwgYW5kIHRoZW4gdGhlIGZ1enplciBjYW4gYXR0ZW1wdCB0byBpbnRlcmFjdCB3aXRoIGl0LiBTeXprYWxsZXIgdXN1YWxseSByZWxpZXMgb24gZGV2aWNlcyBjcmVhdGVkIHRocm91Z2ggYC9zeXMvZGV2aWNlcy9wbGF0Zm9ybS9gIG9yIGEgc2ltaWxhciBtZXRob2QsIGJ1dCB0aGF0JiMzOTtzIG5vdCBhbHdheXMgc3RyYWlnaHRmb3J3YXJkLiBVbmxlc3MgSSYjMzk7bSBvdmVybG9va2luZyBzb21ldGhpbmcgb2J2aW91cywgSSBuZWVkIGEgZ29vZCBwYXRoIHRvIGdldCB0aGUgZGV2aWNlIHByZXNlbnQuCgpXYWl0IGEgc2Vjb25k4oCmIGRpZG4mIzM5O3QgSSBzZWUgc29tZXRoaW5nIGFib3V0IFN5emthbGxlciBoYXZpbmcgYSBgc3l6X2RldmxpbmtfcGNpYCBvciBzb21ldGhpbmcgc2ltaWxhcj8gSWYgc28sIHRoYXQgY291bGQgYmUgdGhlIGtleSEgSXQgZ2l2ZXMgdGhlIGZ1enplciBhIHdheSB0byBpbmplY3QgUENJIGRldmljZXMsIHdoaWNoIG1pZ2h0IGJlIGEgYmV0dGVyIHRhcmdldCBmb3IgdGhpcyBkcml2ZXIuIEkgc2hvdWxkIGludmVzdGlnYXRlIHRoYXQgZnVydGhlci4KCkFscmlnaHQsIGJlZm9yZSBJIGNvbXBsZXRlbHkgY29tbWl0IHRvIHRoYXQgZGlyZWN0aW9uLCBsZXQgbWUgY29uc2lkZXIgaWYgdGhlcmUgaXMgYW5vdGhlciBvYnZpb3VzIHBhdGgsIGJlY2F1c2UgUENJIGNhbiBiZSBhIGhlYXZ5IGhhbW1lci4gSSB3b25kZXIgaWYgYGF0aDExa19xbWlfaW5pdF9zZXJ2aWNlYCBpcyByZWFjaGFibGUuLi4gSSBzaG91bGQgYWxzbyBsb29rIGF0IHRoZSBgYXRoMTJrX3FtaV9pbml0X3NlcnZpY2VgIGFzIHdlbGwsIGp1c3QgdG8gZW5zdXJlIHRoYXQgSSYjMzk7bSBjaGVja2luZyBhbGwgcG9zc2libGUgcGF0aHMgdG8gZ2V0IHRoaXMgZGV2aWNlIHJlYWR5IGZvciBhIGdvb2QgZnV6ei4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTggMDg6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXRoMTJrX3FtaV9pbml0X3NlcnZpY2UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmM9ODE1PXN0YXRpYyBpbnQgYXRoMTJrX2NvcmVfc29jX2NyZWF0ZShzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5jLTgyMy1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5jOjgyNDpcdHJldCA9IGF0aDEya19xbWlfaW5pdF9zZXJ2aWNlKGFiKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5jLTgyNS1cdGlmIChyZXQpIHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5jPTM5NjU9c3RhdGljIHZvaWQgYXRoMTJrX3FtaV9kcml2ZXJfZXZlbnRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuYy00MDM3LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuYzo0MDM4OmludCBhdGgxMmtfcW1pX2luaXRfc2VydmljZShzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuYy00MDM5LXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5oPTY0ND12b2lkIGF0aDEya19xbWlfZGVpbml0X3NlcnZpY2Uoc3RydWN0IGF0aDEya19iYXNlICphYik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5oOjY0NTppbnQgYXRoMTJrX3FtaV9pbml0X3NlcnZpY2Uoc3RydWN0IGF0aDEya19iYXNlICphYik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5oLTY0Ni12b2lkIGF0aDEya19xbWlfZnJlZV9yZXNvdXJjZShzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTggMDg6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM4NjgKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiA3MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqSW5pdGlhbCBJbnZlc3RpZ2F0aW9uIGludG8gYXRoMTJrIERyaXZlciBJbml0aWFsaXphdGlvbioqCgpTbywgYGF0aDEya19jb3JlX3NvY19jcmVhdGVgIGlzIHJlc3BvbnNpYmxlIGZvciBzZXR0aW5nIHVwIHRoZSBTT0MsIGFuZCBJIHNlZSBpdCYjMzk7cyBjYWxsaW5nIGBhdGgxMmtfcW1pX2luaXRfc2VydmljZWAuIFRoYXQmIzM5O3MgYSBrZXkgaW50ZXJhY3Rpb24gdG8gdW5kZXJzdGFuZCwgdGhlIFF1YWxpdHkgTWFuYWdlbWVudCBJbnRlcmZhY2UgaXMgY2xlYXJseSBhIGNyaXRpY2FsIGNvbXBvbmVudC4gQnV0IHdoYXQgYWN0dWFsbHkgKnRyaWdnZXJzKiBgYXRoMTJrX2NvcmVfc29jX2NyZWF0ZWA/IEkgbmVlZCB0byB0cmFjZSBiYWNrLiBBaCwgaGVyZSBpdCBpczogYGF0aDEya19jb3JlX3NvY19jcmVhdGVgIGlzIGNhbGxlZCBieSBgYXRoMTJrX2NvcmVfaW5pdGAuIFJpZ2h0LiBTbywgYGF0aDEya19jb3JlX2luaXRgIGlzIHRoZSBzdGFydGluZyBwb2ludCBmb3IgdGhpcyBzcGVjaWZpYyBjaGFpbiBvZiBpbml0aWFsaXphdGlvbi4gTm93LCBsZXQmIzM5O3Mgc2hpZnQgb3VyIGZvY3VzIGFuZCBpbnZlc3RpZ2F0ZSB0aGUgYGF0aDEya19jb3JlX2luaXRgIGZ1bmN0aW9uIGl0c2VsZi4gVW5kZXJzdGFuZGluZyB0aGF0IHdpbGwgZ2l2ZSBtZSB0aGUgcHJvcGVyIGNvbnRleHQgZm9yIHRoZSBzdWJzZXF1ZW50IGZ1bmN0aW9uIGNhbGxzIGFuZCB1bHRpbWF0ZWx5IHRoZSBRTUkgc2VydmljZSBpbml0aWFsaXphdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTggMDg6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXRoMTJrX2NvcmVfaW5pdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jPTEwMTk9c3RhdGljIGludCBhdGgxMmtfYWhiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy0xMTEwLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYzoxMTExOlx0cmV0ID0gYXRoMTJrX2NvcmVfaW5pdChhYik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jLTExMTItXHRpZiAocmV0KSB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmM9MjE4OD12b2lkIGF0aDEya19jb3JlX2h3X2dyb3VwX3NldF9tbG9fY2FwYWJsZShzdHJ1Y3QgYXRoMTJrX2h3X2dyb3VwICphZylcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuYy0yMjI4LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmM6MjIyOTppbnQgYXRoMTJrX2NvcmVfaW5pdChzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmMtMjIzMC17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmg9MTI2ND1pbnQgYXRoMTJrX2NvcmVfcHJlX2luaXQoc3RydWN0IGF0aDEya19iYXNlICphYik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuaDoxMjY1OmludCBhdGgxMmtfY29yZV9pbml0KHN0cnVjdCBhdGgxMmtfYmFzZSAqYXRoMTJrKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5oLTEyNjYtdm9pZCBhdGgxMmtfY29yZV9kZWluaXQoc3RydWN0IGF0aDEya19iYXNlICphdGgxMmspO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM9MTUyND1zdGF0aWMgaW50IGF0aDEya19wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xNjQ0LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYzoxNjQ1Olx0cmV0ID0gYXRoMTJrX2NvcmVfaW5pdChhYik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE2NDYtXHRpZiAocmV0KSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE4IDA4OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NzQ4CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMTkyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBvdGVudGlhbCBGdXp6aW5nIFRhcmdldCoqCgpPa2F5LCB0aGlzIGxvb2tzIGZhbWlsaWFyIOKAkyB0aGUgc2FtZSBwYXR0ZXJuIEkmIzM5O3ZlIHNlZW4gYmVmb3JlLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGlzIGNvZGUgcGF0aCBpcyBldmVuICpyZWFjaGFibGUqIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIEdvb2QsIHN5emthbGxlciBoYXMgYSB2aXJ0dWFsIFBDSSBmdXp6ZXIsIHdoaWNoIGlzIHBlcmZlY3QuIEl0IGNhbiBpbmplY3QgUENJIGRldmljZXMgd2l0aCB3aGF0ZXZlciB2ZW5kb3IgYW5kIGRldmljZSBJRHMgaXQgd2FudHMuIFRoZSBtb21lbnQgaXQgaW5qZWN0cyBzb21ldGhpbmcgd2l0aCBlaXRoZXIgYW4gYXRoMTFrIG9yIGF0aDEyayBQQ0kgSUQsIGJpbmdvIOKAkyB0aGUgcHJvYmUgZnVuY3Rpb24gZ2V0cyBjYWxsZWQuCgpBbmQgdGhpcyBwcm9iZSBmdW5jdGlvbiwgaXTigJlzIHJlYWRpbmcgZnJvbSBQQ0kgY29uZmlnIHNwYWNlIGFuZCBtZW1vcnktbWFwcGVkIElPLiBJIGltbWVkaWF0ZWx5IHNlZSB0aGUgdnVsbmVyYWJpbGl0eSBwb3RlbnRpYWwgaGVyZS4gQmVjYXVzZSBzeXprYWxsZXImIzM5O3MgdmlydHVhbCBkZXZpY2UgY2FuIHJldHVybiBhbnl0aGluZyB3ZSBmZWVkIGl0LCBpdOKAmXMgaGlnaGx5IGxpa2VseSB3ZSBjYW4gYnlwYXNzIHRoZSBoYXJkd2FyZSBjaGVja3MuIElmIHdlIG1hbmlwdWxhdGUgdGhlIHJlc3BvbnNlcywgd2UgbWlnaHQgYmUgYWJsZSB0byByZWFjaCBjcnVjaWFsIGZ1bmN0aW9ucyBsaWtlIGBhdGgxMWtfY29yZV9pbml0YCBhbmQgYGF0aDExa19xbWlfaW5pdF9zZXJ2aWNlYC4KCkhvbGQgb24uLi4gYGF0aDExa19wY2lfcHJvYmVgIGNhbGxzIGBhdGgxMWtfbWhpX3JlZ2lzdGVyYC4gTUhJLi4uIHRoYXQmIzM5O3MgdGhlIE1vZGVtIEhvc3QgSW50ZXJmYWNlLCBpc27igJl0IGl0PyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgYGF0aDExa19taGlfcmVnaXN0ZXJgIGRvZXMuIFRoYXQmIzM5O3MgdGhlIG5leHQgc3RlcDsgdGhpcyBjb3VsZCBiZSBhIGtleS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTggMDg6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXRoMTFrX21oaV9yZWdpc3RlciYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL21oaS5jPTMxND1zdGF0aWMgaW50IGF0aDExa19taGlfcmVhZF9hZGRyX2Zyb21fZHQoc3RydWN0IG1oaV9jb250cm9sbGVyICptaGlfY3RybClcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL21oaS5jLTMzNC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvbWhpLmM6MzM1OmludCBhdGgxMWtfbWhpX3JlZ2lzdGVyKHN0cnVjdCBhdGgxMWtfcGNpICphYl9wY2kpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL21oaS5jLTMzNi17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9taGkuaD0yMT12b2lkIGF0aDExa19taGlfc3RvcChzdHJ1Y3QgYXRoMTFrX3BjaSAqYXJfcGNpLCBib29sIGlzX3N1c3BlbmQpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9taGkuaDoyMjppbnQgYXRoMTFrX21oaV9yZWdpc3RlcihzdHJ1Y3QgYXRoMTFrX3BjaSAqYXJfcGNpKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvbWhpLmgtMjMtdm9pZCBhdGgxMWtfbWhpX3VucmVnaXN0ZXIoc3RydWN0IGF0aDExa19wY2kgKmFyX3BjaSk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9wY2kuYz05NDU9c3RhdGljIGludCBhdGgxMWtfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvcGNpLmMtMTEwMC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvcGNpLmM6MTEwMTpcdHJldCA9IGF0aDExa19taGlfcmVnaXN0ZXIoYWJfcGNpKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvcGNpLmMtMTEwMi1cdGlmIChyZXQpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTggMDg6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU2OTEKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRha2Ugb24gYGF0aDExa19taGlfcmVnaXN0ZXJgLCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydDoKCioqVW5kZXJzdGFuZGluZyB0aGUgYGF0aDExa19taGlfcmVnaXN0ZXJgIEZ1bmN0aW9uKioKCkFscmlnaHQsIHNvIHRoZSB0YXNrIGF0IGhhbmQgaXMgdG8gZ3JvayB0aGlzIGBhdGgxMWtfbWhpX3JlZ2lzdGVyYCBmdW5jdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBiYXNlZCBvbiB0aGUgbmFtZSwgdGhpcyBsaWtlbHkgaGFuZGxlcyB0aGUgcmVnaXN0cmF0aW9uIHByb2Nlc3Mgd2l0aGluIHRoZSBRdWFsY29tbSBBdGhlcm9zIChhdGgxMWspIGRyaXZlciwgc3BlY2lmaWNhbGx5IGZvciB0aGUgTUhJIChNSEkgc3RhbmRzIGZvcjogKipNKip1bHRpICoqSCoqb3N0ICoqSSoqbnRlcmZhY2UpIGludGVyZmFjZS4gVGhpcyBzdHJvbmdseSBzdWdnZXN0cyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZSBob3N0IENQVSBhbmQgdGhlIG5ldHdvcmsgY29udHJvbGxlciwgbWF5YmUgZm9yIHNldHVwLCBjb25maWd1cmF0aW9uLCBvciBwZXJoYXBzIHJlc291cmNlIG1hbmFnZW1lbnQuCgpNeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoaXMgd2lsbCBwcm9iYWJseSBiZSBhIGZhaXJseSBjcml0aWNhbCBmdW5jdGlvbi4gSXQmIzM5O3MgdGhlIGVudHJ5IHBvaW50LCBvciBhdCBsZWFzdCBhIGtleSBjb21wb25lbnQsIGZvciBtYWtpbmcgdGhlIGhhcmR3YXJlIGFjY2Vzc2libGUgdG8gdGhlIGRyaXZlci4gSSBleHBlY3QgaXQmIzM5O2xsIGludm9sdmUgc2V0dGluZyB1cCBpbnRlcnJ1cHQgaGFuZGxlcnMsIGNvbmZpZ3VyaW5nIG1lbW9yeSBtYXBwaW5nLCBlc3RhYmxpc2hpbmcgY29tbXVuaWNhdGlvbiBjaGFubmVscywgYW5kIHBvc3NpYmx5IGhhbmRsaW5nIHNvbWUgcG93ZXIgbWFuYWdlbWVudCBzdGVwcy4KCkkmIzM5O20gdGhpbmtpbmcsIGdpdmVuIHRoZSBjb250ZXh0IG9mIGF0aDExayAod2hpY2ggSSBrbm93IGlzIGEgbW9kZXJuIFdpLUZpIGRyaXZlciksIHRoaXMgKmNvdWxkKiBpbnZvbHZlIGZlYXR1cmVzIHRoYXQgYXJlIHJlbGV2YW50IHRvIGhhcmR3YXJlIGxpa2U6CgoqICAgKipCdXMtU3BlY2lmaWMgU2V0dXA6KiogSXQmIzM5O2xsIG5lZWQgdG8ga25vdyB3aGljaCBidXMgKFBDSWUsIFNESU8sIFVTQikgdGhlIE1ISSBpbnRlcmZhY2UgaXMgY29ubmVjdGVkIHRvLCBhbmQgY29uZmlndXJlIHRoZSBhc3NvY2lhdGVkIGJ1cy1zcGVjaWZpYyByZWdpc3RlcnMuCiogICAqKkRNQSBFbmdpbmVzOioqIEl0IHByb2JhYmx5IHNldHMgdXAgRE1BIGVuZ2luZXMgZm9yIGVmZmljaWVudCBkYXRhIHRyYW5zZmVyIGJldHdlZW4gdGhlIGhvc3QgYW5kIHRoZSBXaS1GaSBjaGlwLiBUaGlzIGlzIGVzc2VudGlhbCBmb3IgZ29vZCB0aHJvdWdocHV0IGFuZCBsb3cgbGF0ZW5jeS4KKiAgICoqRGV2aWNlIFRyZWUgSW50ZXJhY3Rpb25zOioqIEhvcGVmdWxseSwgaXQgaGFzIGEgcHJvcGVyIERldmljZSBUcmVlIGludGVyYWN0aW9uLgoqICAgKipFcnJvciBIYW5kbGluZzoqKiBJdCB3aWxsIG5lZWQgdG8gaGFuZGxlIHRoZSBjYXNlIG9mIGZhaWx1cmUgZHVyaW5nIHJlZ2lzdHJhdGlvbi4gSXQmIzM5O2xsIHByb2JhYmx5IGluY2x1ZGUgZXJyb3IgY2hlY2tzIGFmdGVyIGVhY2ggb3BlcmF0aW9uIHRvIGVuc3VyZSB0aGF0IHRoZSBkZXZpY2UgaGFzIGJlZW4gY29ycmVjdGx5IGluaXRpYWxpemVkLgoqICAgKipJbml0aWFsaXphdGlvbiBEYXRhOioqIEkmIzM5O20gZ3Vlc3NpbmcgaXQgbGlrZWx5IG5lZWRzIHRvIHBhc3Mgb3IgcmVjZWl2ZSBzb21lIGluaXRpYWxpemF0aW9uIGRhdGEgb3IgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIHNwZWNpZmljIHRvIHRoZSBNSEkgaW50ZXJmYWNlLCBsaWtlIGJ1ZmZlciBzaXplcywgY2xvY2sgc2V0dGluZ3MsIG9yIGludGVycnVwdCBudW1iZXJzLgoqICAgKipSZXNvdXJjZSBBbGxvY2F0aW9uOioqIENvdWxkIGJlIG1lbW9yeSBhbGxvY2F0aW9uIHVzaW5nIGEgZnVuY3Rpb24sIGxpa2VseSBhbiBpbnRlcm5hbCBtZW1vcnkgb3Igc3RydWN0dXJlIHRvIHN0b3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSByZWdpc3RlcmVkIGRldmljZS4KKiAgICoqUG93ZXIgTWFuYWdlbWVudDoqKiBCYXNlZCBvbiBwYXN0IGV4cGVyaWVuY2VzIHdpdGggd2lyZWxlc3MgZHJpdmVycywgdGhlcmUmIzM5O3MgbGlrZWx5IHNvbWUgcG93ZXIgbWFuYWdlbWVudCBsb2dpYyBpbnZvbHZlZCwgcGVyaGFwcyBlbmFibGluZyBvciBkaXNhYmxpbmcgY2xvY2sgZ2F0ZXMsIHBvd2VyIGRvbWFpbnMsIG9yIHNldHRpbmcgdXAgd2FrZS11cCBpbnRlcnJ1cHRzLgoqICAgKipJbnRlcnJ1cHQgSGFuZGxpbmc6KiogVGhlIHNldHRpbmcgdXAgb2YgdGhlIGludGVycnVwdCBoYW5kbGVycyB3aWxsIGxpa2VseSBiZSBhbm90aGVyIGltcG9ydGFudCByb2xlLiBJdCB3aWxsIHJlZ2lzdGVyIHRoZSBhcHByb3ByaWF0ZSBpbnRlcnJ1cHQgaGFuZGxlciByb3V0aW5lIHdpdGggdGhlIGtlcm5lbC4KCkkgbmVlZCB0byBkaWcgaW4gYW5kIHNlZSB0aGUgZGV0YWlscywgYnV0IG15IGluaXRpYWwgZ3V0IGZlZWxpbmcgaXMgdGhhdCB0aGlzIGZ1bmN0aW9uIGlzIGdvaW5nIHRvIGJlIHRoZSBjZW50cmFsIHBvaW50IGZvciB0aGUgaGFyZHdhcmUgYnJpbmctdXAgcHJvY2VzcyB3aXRoIHJlc3BlY3QgdG8gdGhlIE1ISSBpbnRlcmZhY2UuIEl0JiMzOTtzIHRoZSBseW5jaHBpbiBmb3IgZ2V0dGluZyB0aGUgYXRoMTFrIGRyaXZlciB3b3JraW5nIHdpdGggdGhlIFdpLUZpIGhhcmR3YXJlLiBJdCYjMzk7cyBwcm9iYWJseSBnb2luZyB0byBpbnZvbHZlIGEgbG90IG9mIGxvdy1sZXZlbCBoYXJkd2FyZSBpbnRlcmFjdGlvbiBhbmQgZXJyb3IgaGFuZGxpbmcuIExldCYjMzk7cyBzZWUgaWYgbXkgaW5pdGlhbCBhc3N1bXB0aW9ucyBob2xkIHdhdGVyIGFzIEkgcmVhZCB0aHJvdWdoIGl0IQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOCAwODoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvbWhpLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzMzU6XHRpbnQgYXRoMTFrX21oaV9yZWdpc3RlcihzdHJ1Y3QgYXRoMTFrX3BjaSAqYWJfcGNpKVxuIDMzNjpcdHtcbiAzMzc6XHRcdHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIgPSBhYl9wY2ktXHUwMDNlYWI7XG4gMzM4Olx0XHRzdHJ1Y3QgbWhpX2NvbnRyb2xsZXIgKm1oaV9jdHJsO1xuIDMzOTpcdFx0Y29uc3Qgc3RydWN0IG1oaV9jb250cm9sbGVyX2NvbmZpZyAqYXRoMTFrX21oaV9jb25maWc7XG4gMzQwOlx0XHRpbnQgcmV0O1xuIDM0MTpcdFxuIDM0MjpcdFx0bWhpX2N0cmwgPSBtaGlfYWxsb2NfY29udHJvbGxlcigpO1xuIDM0MzpcdFx0aWYgKCFtaGlfY3RybClcbiAzNDQ6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gMzQ1Olx0XG4gMzQ2Olx0XHRhYl9wY2ktXHUwMDNlbWhpX2N0cmwgPSBtaGlfY3RybDtcbiAzNDc6XHRcdG1oaV9jdHJsLVx1MDAzZWNudHJsX2RldiA9IGFiLVx1MDAzZWRldjtcbiAzNDg6XHRcdG1oaV9jdHJsLVx1MDAzZXJlZ3MgPSBhYi1cdTAwM2VtZW07XG4gMzQ5Olx0XHRtaGlfY3RybC1cdTAwM2VyZWdfbGVuID0gYWItXHUwMDNlbWVtX2xlbjtcbiAzNTA6XHRcbiAzNTE6XHRcdGlmIChhYi1cdTAwM2Vmdy5hbXNzX2RhdGEgXHUwMDI2XHUwMDI2IGFiLVx1MDAzZWZ3LmFtc3NfbGVuIFx1MDAzZSAwKSB7XG4gMzUyOlx0XHRcdC8qIHVzZSBNSEkgZmlybXdhcmUgZmlsZSBmcm9tIGZpcm13YXJlLU4uYmluICovXG4gMzUzOlx0XHRcdG1oaV9jdHJsLVx1MDAzZWZ3X2RhdGEgPSBhYi1cdTAwM2Vmdy5hbXNzX2RhdGE7XG4gMzU0Olx0XHRcdG1oaV9jdHJsLVx1MDAzZWZ3X3N6ID0gYWItXHUwMDNlZncuYW1zc19sZW47XG4gMzU1Olx0XHR9IGVsc2Uge1xuIDM1NjpcdFx0XHQvKiB1c2UgdGhlIG9sZCBzZXBhcmF0ZSBtaGkuYmluIE1ISSBmaXJtd2FyZSBmaWxlICovXG4gMzU3Olx0XHRcdGF0aDExa19jb3JlX2NyZWF0ZV9maXJtd2FyZV9wYXRoKGFiLCBBVEgxMUtfQU1TU19GSUxFLFxuIDM1ODpcdFx0XHRcdFx0XHRcdCBhYl9wY2ktXHUwMDNlYW1zc19wYXRoLFxuIDM1OTpcdFx0XHRcdFx0XHRcdCBzaXplb2YoYWJfcGNpLVx1MDAzZWFtc3NfcGF0aCkpO1xuIDM2MDpcdFx0XHRtaGlfY3RybC1cdTAwM2Vmd19pbWFnZSA9IGFiX3BjaS1cdTAwM2VhbXNzX3BhdGg7XG4gMzYxOlx0XHR9XG4gMzYyOlx0XG4gMzYzOlx0XHRyZXQgPSBhdGgxMWtfbWhpX2dldF9tc2koYWJfcGNpKTtcbiAzNjQ6XHRcdGlmIChyZXQpIHtcbiAzNjU6XHRcdFx0YXRoMTFrX2VycihhYiwgXCYjMzQ7ZmFpbGVkIHRvIGdldCBtc2kgZm9yIG1oaVxcblwmIzM0Oyk7XG4gMzY2Olx0XHRcdGdvdG8gZnJlZV9jb250cm9sbGVyO1xuIDM2NzpcdFx0fVxuIDM2ODpcdFxuIDM2OTpcdFx0aWYgKCF0ZXN0X2JpdChBVEgxMUtfRkxBR19NVUxUSV9NU0lfVkVDVE9SUywgXHUwMDI2YWItXHUwMDNlZGV2X2ZsYWdzKSlcbiAzNzA6XHRcdFx0bWhpX2N0cmwtXHUwMDNlaXJxX2ZsYWdzID0gSVJRRl9TSEFSRUQgfCBJUlFGX05PQkFMQU5DSU5HO1xuIDM3MTpcdFxuIDM3MjpcdFx0aWYgKHRlc3RfYml0KEFUSDExS19GTEFHX0ZJWEVEX01FTV9SR04sIFx1MDAyNmFiLVx1MDAzZWRldl9mbGFncykpIHtcbiAzNzM6XHRcdFx0cmV0ID0gYXRoMTFrX21oaV9yZWFkX2FkZHJfZnJvbV9kdChtaGlfY3RybCk7XG4gMzc0Olx0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4gMzc1Olx0XHRcdFx0Z290byBmcmVlX2NvbnRyb2xsZXI7XG4gMzc2Olx0XHR9IGVsc2Uge1xuIDM3NzpcdFx0XHRtaGlfY3RybC1cdTAwM2Vpb3ZhX3N0YXJ0ID0gMDtcbiAzNzg6XHRcdFx0bWhpX2N0cmwtXHUwMDNlaW92YV9zdG9wID0gYWJfcGNpLVx1MDAzZWRtYV9tYXNrO1xuIDM3OTpcdFx0fVxuIDM4MDpcdFxuIDM4MTpcdFx0bWhpX2N0cmwtXHUwMDNlcmRkbV9zaXplID0gUkRETV9EVU1QX1NJWkU7XG4gMzgyOlx0XHRtaGlfY3RybC1cdTAwM2VzYmxfc2l6ZSA9IFNaXzUxMks7XG4gMzgzOlx0XHRtaGlfY3RybC1cdTAwM2VzZWdfbGVuID0gU1pfNTEySztcbiAzODQ6XHRcdG1oaV9jdHJsLVx1MDAzZWZiY19kb3dubG9hZCA9IHRydWU7XG4gMzg1Olx0XHRtaGlfY3RybC1cdTAwM2VydW50aW1lX2dldCA9IGF0aDExa19taGlfb3BfcnVudGltZV9nZXQ7XG4gMzg2Olx0XHRtaGlfY3RybC1cdTAwM2VydW50aW1lX3B1dCA9IGF0aDExa19taGlfb3BfcnVudGltZV9wdXQ7XG4gMzg3Olx0XHRtaGlfY3RybC1cdTAwM2VzdGF0dXNfY2IgPSBhdGgxMWtfbWhpX29wX3N0YXR1c19jYjtcbiAzODg6XHRcdG1oaV9jdHJsLVx1MDAzZXJlYWRfcmVnID0gYXRoMTFrX21oaV9vcF9yZWFkX3JlZztcbiAzODk6XHRcdG1oaV9jdHJsLVx1MDAzZXdyaXRlX3JlZyA9IGF0aDExa19taGlfb3Bfd3JpdGVfcmVnO1xuIDM5MDpcdFxuIDM5MTpcdFx0c3dpdGNoIChhYi1cdTAwM2Vod19yZXYpIHtcbiAzOTI6XHRcdGNhc2UgQVRIMTFLX0hXX1FDTjkwNzRfSFcxMDpcbiAzOTM6XHRcdFx0YXRoMTFrX21oaV9jb25maWcgPSBcdTAwMjZhdGgxMWtfbWhpX2NvbmZpZ19xY245MDc0O1xuIDM5NDpcdFx0XHRicmVhaztcbiAzOTU6XHRcdGNhc2UgQVRIMTFLX0hXX1FDQTYzOTBfSFcyMDpcbiAzOTY6XHRcdGNhc2UgQVRIMTFLX0hXX1dDTjY4NTVfSFcyMDpcbiAzOTc6XHRcdGNhc2UgQVRIMTFLX0hXX1dDTjY4NTVfSFcyMTpcbiAzOTg6XHRcdGNhc2UgQVRIMTFLX0hXX1FDQTIwNjZfSFcyMTpcbiAzOTk6XHRcdGNhc2UgQVRIMTFLX0hXX1FDQTY2OThBUV9IVzIxOlxuIDQwMDpcdFx0XHRhdGgxMWtfbWhpX2NvbmZpZyA9IFx1MDAyNmF0aDExa19taGlfY29uZmlnX3FjYTYzOTA7XG4gNDAxOlx0XHRcdGJyZWFrO1xuIDQwMjpcdFx0ZGVmYXVsdDpcbiA0MDM6XHRcdFx0YXRoMTFrX2VycihhYiwgXCYjMzQ7ZmFpbGVkIGFzc2lnbiBtaGlfY29uZmlnIGZvciB1bmtub3duIGh3IHJldiAlZFxcblwmIzM0OyxcbiA0MDQ6XHRcdFx0XHQgICBhYi1cdTAwM2Vod19yZXYpO1xuIDQwNTpcdFx0XHRyZXQgPSAtRUlOVkFMO1xuIDQwNjpcdFx0XHRnb3RvIGZyZWVfY29udHJvbGxlcjtcbiA0MDc6XHRcdH1cbiA0MDg6XHRcbiA0MDk6XHRcdGFiX3BjaS1cdTAwM2VtaGlfcHJlX2NiID0gTUhJX0NCX0lOVkFMSUQ7XG4gNDEwOlx0XHRyZXQgPSBtaGlfcmVnaXN0ZXJfY29udHJvbGxlcihtaGlfY3RybCwgYXRoMTFrX21oaV9jb25maWcpO1xuIDQxMTpcdFx0aWYgKHJldCkge1xuIDQxMjpcdFx0XHRhdGgxMWtfZXJyKGFiLCBcJiMzNDtmYWlsZWQgdG8gcmVnaXN0ZXIgdG8gbWhpIGJ1cywgZXJyID0gJWRcXG5cJiMzNDssIHJldCk7XG4gNDEzOlx0XHRcdGdvdG8gZnJlZV9jb250cm9sbGVyO1xuIDQxNDpcdFx0fVxuIDQxNTpcdFxuIDQxNjpcdFx0cmV0dXJuIDA7XG4gNDE3Olx0XG4gNDE4Olx0ZnJlZV9jb250cm9sbGVyOlxuIDQxOTpcdFx0bWhpX2ZyZWVfY29udHJvbGxlcihtaGlfY3RybCk7XG4gNDIwOlx0XHRhYl9wY2ktXHUwMDNlbWhpX2N0cmwgPSBOVUxMO1xuIDQyMTpcdFx0cmV0dXJuIHJldDtcbiA0MjI6XHR9XG4gNDIzOlx0XG4gNDI0Olx0dm9pZCBhdGgxMWtfbWhpX3VucmVnaXN0ZXIoc3RydWN0IGF0aDExa19wY2kgKmFiX3BjaSlcbiA0MjU6XHR7XG4gNDI2Olx0XHRzdHJ1Y3QgbWhpX2NvbnRyb2xsZXIgKm1oaV9jdHJsID0gYWJfcGNpLVx1MDAzZW1oaV9jdHJsO1xuIDQyNzpcdFxuIDQyODpcdFx0bWhpX3VucmVnaXN0ZXJfY29udHJvbGxlcihtaGlfY3RybCk7XG4gNDI5Olx0XHRrZnJlZShtaGlfY3RybC1cdTAwM2VpcnEpO1xuIDQzMDpcdFx0bWhpX2ZyZWVfY29udHJvbGxlcihtaGlfY3RybCk7XG4gNDMxOlx0fVxuIDQzMjpcdFxuIDQzMzpcdGludCBhdGgxMWtfbWhpX3N0YXJ0KHN0cnVjdCBhdGgxMWtfcGNpICphYl9wY2kpXG4gNDM0Olx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOCAwODoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODI3MAoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDY2MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBEcml2ZXIgUGF0Y2g6IEZvY3VzaW5nIG9uIFJlc291cmNlIE1hbmFnZW1lbnQgYW5kIFBvdGVudGlhbCBGdXp6aW5nIFRhcmdldHMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIHRyYWNpbmcgdGhlIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlIGZvciBib3RoIGBhdGgxMWtgIGFuZCBgYXRoMTJrYCBkcml2ZXJzLiBJdCBzZWVtcyB0aGF0IGBhdGgxMWtfbWhpX3JlZ2lzdGVyYCBraWNrcyB0aGluZ3Mgb2ZmIHdpdGggYG1oaV9yZWdpc3Rlcl9jb250cm9sbGVyYC4gVGhpcyBwYXJ0LCBhcyBJIHJlY2FsbCwgbW9zdGx5IHNldHMgdXAgc29mdHdhcmUgc3RydWN0dXJlcy4gSXQgKm1pZ2h0KiBkbyBiYXNpYyBjaGVja3MsIGJ1dCBpdCYjMzk7cyBsYXJnZWx5IGFib3V0IHJlZ2lzdHJhdGlvbiB3aXRoIHRoZSBNSEkgc3Vic3lzdGVtIGFuZCBpc24mIzM5O3QgbmVjZXNzYXJpbHkgYmxvY2tlZCBieSBpbW1lZGlhdGUgaGFyZHdhcmUgcmVzcG9uc2l2ZW5lc3MuCgpUaGVuLCBgYXRoMTFrX3BjaV9wcm9iZWAgdGFrZXMgb3ZlciBhbmQgZXZlbnR1YWxseSBoaXRzIGBhdGgxMWtfY29yZV9pbml0YCwgd2hpY2ggdGhlbiBsZWFkcyB0byBgYXRoMTFrX2NvcmVfc29jX2NyZWF0ZWAgYW5kIGZpbmFsbHkgYGF0aDExa19xbWlfaW5pdF9zZXJ2aWNlYC4gU28sIHRoZSBgcW1pYCBzZXJ2aWNlIGdldHMgaW5pdGlhbGl6ZWQgcHJldHR5IGVhcmx5IGluIHRoZSBwcm9iZSBzZXF1ZW5jZSwgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIFRoZSBzYW1lIGZsb3cgaXMgYWxzbyBmb2xsb3dlZCBpbiBgYXRoMTJrYCB3aXRoIGBhdGgxMmtfcW1pX2luaXRfc2VydmljZWAuCgpOb3csIHRoZSBwYXRjaCBpdHNlbGYgaXMgd2hhdCByZWFsbHkgZ3JhYnMgbXkgYXR0ZW50aW9uLiBJdCBhZGRzIGVycm9yIGhhbmRsaW5nIHRvIGJvdGggYGF0aDExa19xbWlfaW5pdF9zZXJ2aWNlYCBhbmQgYGF0aDEya19xbWlfaW5pdF9zZXJ2aWNlYC4gU3BlY2lmaWNhbGx5LCBpdCBhZGRyZXNzZXMgdGhlIGZhaWx1cmUgc2NlbmFyaW9zIG9mIGBhbGxvY19vcmRlcmVkX3dvcmtxdWV1ZWAgYW5kIGBxbWlfYWRkX2xvb2t1cGAuIFRoZSBvbGQgY29kZSBoYWQgYSBsZWFrOyBpdCB3b3VsZCByZXR1cm4gYW4gZXJyb3IgaWYgZWl0aGVyIG9mIHRoZXNlIGZhaWxlZCwgYnV0IGl0IHdvdWxkIGxlYXZlIHRoZSBRTUkgaGFuZGxlIGluaXRpYWxpemVkLiBUaGUgbmV3IGNvZGUgY29ycmVjdGx5IGNhbGxzIGBxbWlfaGFuZGxlX3JlbGVhc2VgIGluIHRoZXNlIGVycm9yIGNhc2VzIHRvIGZyZWUgdGhlIFFNSSBoYW5kbGUuCgpUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2U7IGl0JiMzOTtzIGZpeGluZyBhIG1lbW9yeS9yZXNvdXJjZSBsZWFrLiBHaXZlbiBteSBleHBlcmllbmNlLCBJIGtub3cgYGFsbG9jX29yZGVyZWRfd29ya3F1ZXVlYCAqY2FuKiBmYWlsIHVuZGVyIG1lbW9yeSBwcmVzc3VyZSBvciBpZiB3ZSYjMzk7dmUgaW50cm9kdWNlZCBzb21lIGZhdWx0IGluamVjdGlvbiwgYW5kIGBxbWlfYWRkX2xvb2t1cGAgaXMgYWxzbyBwcm9uZSB0byBmYWlsdXJlIHVuZGVyIGNlcnRhaW4gY29uZGl0aW9ucy4gVGhlIHBhdGNoIGNvcnJlY3RzIHRoaXMgaXNzdWUgYnkgcHJvcGVybHkgcmVsZWFzaW5nIHRoZSBoYW5kbGUuCgpUaGlzIGFjdHVhbGx5IG1ha2VzIHRoaXMgYW4gZXhjZWxsZW50IGNhbmRpZGF0ZSBmb3IgZnV6emluZy4gSSBjYW4gY29uc3RydWN0IHRlc3RzIHRoYXQgc2ltdWxhdGUgdGhlc2UgZXJyb3IgcGF0aHMsIGFuZCB2ZXJpZnkgdGhhdCB0aGUgbGVhayBpcyBmaXhlZCwgYW5kIHRoYXQgdGhlcmUgYXJlIG5vIHVzZS1hZnRlci1mcmVlIG9yIGRvdWJsZS1mcmVlIGNvbmRpdGlvbnMuIEl0JiMzOTtzIGEgdGFyZ2V0ZWQgcGF0Y2gsIG1ha2luZyB2ZXJpZmljYXRpb24gbXVjaCBlYXNpZXIuCgpCZWZvcmUgSSBnbyBmdXJ0aGVyLCBJIHNob3VsZCBjaGVjayB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gRm9yIGBhdGgxMWtgIEkgbmVlZCBgQ09ORklHX0FUSDExS2AgYW5kIGBDT05GSUdfQVRIMTFLX1BDSWAgKG9yIGBDT05GSUdfQVRIMTFLX0FIQmApLCBhbmQgZm9yIGBhdGgxMmtgIEkgbmVlZCBgQ09ORklHX0FUSDEyS2AgYW5kIGBDT05GSUdfQVRIMTJLX1BDSWAgKG9yIGBDT05GSUdfQVRIMTJLX0FIQmApLiBJJiMzOTtsbCBkb3VibGUtY2hlY2sgdGhlIGV4YWN0IG5hbWVzIGluIHRoZSBgS2NvbmZpZ2AgZmlsZXMgaW4gdGhlIGRyaXZlciBkaXJlY3RvcmllcyBqdXN0IHRvIGJlIGNlcnRhaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE4IDA4OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBBVEgxMUsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlLUNsZWFyXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL0tjb25maWc6Mjpjb25maWcgQVRIMTFLXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O1F1YWxjb21tIDgwMi4xMWF4IGNoaXBzZXQgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvS2NvbmZpZy0xMi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvS2NvbmZpZzoxMzpjb25maWcgQVRIMTFLX0FIQlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9LY29uZmlnLTE0LVx0dHJpc3RhdGUgXCYjMzQ7QXRoZXJvcyBhdGgxMWsgQUhCIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL0tjb25maWctMTktXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL0tjb25maWc6MjA6Y29uZmlnIEFUSDExS19QQ0lcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvS2NvbmZpZy0yMS1cdHRyaXN0YXRlIFwmIzM0O0F0aGVyb3MgYXRoMTFrIFBDSSBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9LY29uZmlnLTI5LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9LY29uZmlnOjMwOmNvbmZpZyBBVEgxMUtfREVCVUdcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvS2NvbmZpZy0zMS1cdGJvb2wgXCYjMzQ7UUNBIGF0aDExayBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL0tjb25maWctMzctXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL0tjb25maWc6Mzg6Y29uZmlnIEFUSDExS19ERUJVR0ZTXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL0tjb25maWctMzktXHRib29sIFwmIzM0O1FDQSBhdGgxMWsgZGVidWdmcyBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9LY29uZmlnLTQ1LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9LY29uZmlnOjQ2OmNvbmZpZyBBVEgxMUtfVFJBQ0lOR1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9LY29uZmlnLTQ3LVx0Ym9vbCBcJiMzNDthdGgxMWsgdHJhY2luZyBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9LY29uZmlnLTUxLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9LY29uZmlnOjUyOmNvbmZpZyBBVEgxMUtfU1BFQ1RSQUxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvS2NvbmZpZy01My1cdGJvb2wgXCYjMzQ7UUNBIGF0aDExayBzcGVjdHJhbCBzY2FuIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL0tjb25maWctNjAtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL0tjb25maWc6NjE6Y29uZmlnIEFUSDExS19DRlJcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvS2NvbmZpZy02Mi1cdGJvb2wgXCYjMzQ7YXRoMTFrIGNoYW5uZWwgZnJlcXVlbmN5IHJlc3BvbnNlIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTggMDg6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAyNDEKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqRGVsdmluZyBpbnRvIGBhdGgxMmtgIC0gQSBRdWljayBSZS1jYXAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZSwgd2hhdCB3ZXJlIHdlIGRvaW5nPyBBaCB5ZXMsIGNpcmNsaW5nIGJhY2sgdG8gYGF0aDEya2AuIE15IG1pbmQgaW5zdGFudGx5IGdvZXMgdG8gdGhlIGNvbXBsZXhpdGllcyB3ZSYjMzk7dmUgYmVlbiB3b3JraW5nIHdpdGgsIHNvIGhlcmUmIzM5O3Mgd2hhdCBJJiMzOTttIHRoaW5raW5nOgoKKiAgICoqVW5kZXJzdGFuZGluZyB0aGUgQXJjaGl0ZWN0dXJlOioqIEkgbmVlZCB0byByZWZyZXNoIHRoZSBgYXRoMTJrYCBhcmNoaXRlY3R1cmUgaW4gbXkgbWluZDogd2hpY2ggcGFydGljdWxhciBjb21wb25lbnRzIHdlIHdlcmUgaW52ZXN0aWdhdGluZywgd2hpY2ggc3BlY2lmaWMgYXNwZWN0cyBvZiB0aGUgZmlybXdhcmUmIzM5O3MgZnVuY3Rpb24gd2VyZSByZWxldmFudCB0byB0aGUgcHJlc2VudCBuZWVkLCBhbmQgaG93IGl0IGlzIGRpZmZlcmVudCBmcm9tIGF0aDExayAoaWYgdGhhdCBpcyBldmVuIGFwcGxpY2FibGUpLgoKKiAgICoqRmlybXdhcmUgaW50ZXJhY3Rpb25zKio6IFRoZSBpbnRlcmFjdGlvbnMgYmV0d2VlbiB0aGUgZmlybXdhcmUgYW5kIHRoZSBrZXJuZWwgd2VyZSBwYXJ0aWN1bGFybHkgaW52b2x2ZWQ7IGVzcGVjaWFsbHkgYW55IGludGVycnVwdC1kcml2ZW4gaGFuZGxpbmcgb3IgYW55IHNoYXJlZCBtZW1vcnkgc3RydWN0dXJlcy4gV2hhdCB3ZXJlIHRoZSBzcGVjaWZpYyBkYXRhIHN0cnVjdHVyZXMgYW5kIGhvdyB3ZXJlIHdlIGNoYW5naW5nIHRoZW0gdG8gYWNoaWV2ZSB3aGF0IHdlIG5lZWRlZD8KCiogICAqKlBlcmZvcm1hbmNlIEJvdHRsZW5lY2tzOioqIFdoYXQgd2VyZSB0aGUgcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgd2Ugd2VyZSBleHBlY3RpbmcgdG8gc2VlPyBXaGF0IGRpZCB3ZSBkbyB0byB0cnkgYW5kIGdldCBhcm91bmQgdGhlbT8KCiogICAqKktleSBEZWJ1Z2dpbmcgUG9pbnRzOioqIFdoYXQgd2VyZSB0aGUgc3BlY2lmaWMgdGVzdCBwYXJhbWV0ZXJzIHdlIHVzZWQgdG8gcmVwbGljYXRlIHRoZSBpc3N1ZT8gSG93IGRpZCB3ZSBnYXRoZXIgbWV0cmljcz8gV2FzIHRoZXJlIGEgc3BlY2lmaWMgdG9vbCBvciBkZWJ1Z2dpbmcgbWV0aG9kIHdlIHVzZWQgdG8gaXNvbGF0ZSBwcm9ibGVtcz8gSSBuZWVkIHRvIGZvY3VzIG9uIHdoYXQgZGF0YSB3ZSB3ZXJlIGV4YW1pbmluZyB0byBhcnJpdmUgYXQgb3VyIGluaXRpYWwgY29uY2x1c2lvbnMuCiogICAqKkNvbnRleHR1YWwgQ29uc2lkZXJhdGlvbnM6KiogTW9zdCBpbXBvcnRhbnRseSwgSSBuZWVkIHRvIHJlbWluZCBteXNlbGYgb2YgdGhlICYjMzQ7d2h5JiMzNDsuIFdoeSB3ZXJlIHdlIGludmVzdGlnYXRpbmcgdGhpcyBkcml2ZXI/IFdoYXQgd2FzIHRoZSBoaWdoZXItbGV2ZWwgcHJvYmxlbSB3ZSB3ZXJlIHRyeWluZyB0byBzb2x2ZSwgYW5kIHdoYXQgd2VyZSB0aGUgY29uc3RyYWludHMgb2YgdGhlIHRhcmdldCBoYXJkd2FyZT8gVGhlIHVsdGltYXRlIHVzZXIgbmVlZHMgdG8gYmUgcmVmcmVzaGVkIHRvby4KKiAgICoqVGhlIE5leHQgU3RlcHM6KiogV2hhdCBkaWQgd2UgdGhpbmsgdGhlIG5leHQgc3RlcHMgd2VyZT8gSSBzaG91bGQgYWxzbyBrZWVwIGluIG1pbmQgd2hldGhlciB3ZSBpZGVudGlmaWVkIGFueSBtb3JlIHdvcmsgd2hpY2ggbmVlZHMgdG8gYmUgZG9uZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTggMDg6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEFUSDEySyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UtQ2xlYXJcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvS2NvbmZpZzoyOmNvbmZpZyBBVEgxMktcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7UXVhbGNvbW0gV2ktRmkgNyBzdXBwb3J0IChhdGgxMmspXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnLTE2LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnOjE3OmNvbmZpZyBBVEgxMktfQUhCXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWctMTgtXHRib29sIFwmIzM0O1F1YWxjb21tIGF0aDEyayBBSEIgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvS2NvbmZpZy0yNC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvS2NvbmZpZzoyNTpjb25maWcgQVRIMTJLX0RFQlVHXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWctMjYtXHRib29sIFwmIzM0O2F0aDEyayBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWctMzQtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWc6MzU6Y29uZmlnIEFUSDEyS19ERUJVR0ZTXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWctMzYtXHRib29sIFwmIzM0O1F1YWxjb21tIGF0aDEyayBkZWJ1Z2ZzIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWctNDMtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWc6NDQ6Y29uZmlnIEFUSDEyS19UUkFDSU5HXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWctNDUtXHRib29sIFwmIzM0O2F0aDEyayB0cmFjaW5nIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWctNTItXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWc6NTM6Y29uZmlnIEFUSDEyS19DT1JFRFVNUFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnLTU0LVx0Ym9vbCBcJiMzNDthdGgxMmsgY29yZWR1bXBcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTggMDg6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjExNzIKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZS4gVGhpcyBgQVRIMTJLX1BDSWAgdGhpbmcuLi4gaXQmIzM5O3MgdGhyb3dpbmcgYSBmbGFnLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtXYWl0IGEgbWludXRlLCBpcyB0aGF0IGV2ZW4gYSB0aGluZz8gRG9lc24mIzM5O3QgcmluZyBhIGJlbGwuJiMzNDsgTGV0JiMzOTtzIHZlcmlmeS4gTXkgZmlyc3QgaW5zdGluY3QsIGFzIGFsd2F5cywgaXMgdG8gZGl2ZSBpbnRvIHRoZSBLY29uZmlnLiBJJiMzOTtsbCBoZWFkIHN0cmFpZ2h0IHRvIGBkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWdgLiBUaGF0JiMzOTtzIHdoZXJlIGFsbCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGF0IGZhbWlseSBvZiBkcml2ZXJzIGxpdmUuIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgUENJIHN1cHBvcnQsIGluIHBhcnRpY3VsYXIsIGlzIGRlZmluZWQgb3IgZXZlbiBtZW50aW9uZWQgdGhlcmUuIFRoYXQmIzM5O3MgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgY29kZSBwYXRoIGlzIHZhbGlkIG9yIGlmIHRoZXJlJiMzOTtzIGEgbWlzdW5kZXJzdGFuZGluZyBzb21ld2hlcmUuIEkmIzM5O2xsIHVzZSB0aGUgS2NvbmZpZyB0byB1bmRlcnN0YW5kIHRoZSB3aG9sZSBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOCAwODoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBBVEgxMktfUENJJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTggMDg6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE0MDkKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSBgZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnYCBmaWxlLgoKKipEaXZpbmcgaW50byB0aGUgQXRoZXJvcyBhdGgxMmsgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGludG8gdGhpcyBgS2NvbmZpZ2AgZmlsZSBmb3IgdGhlIGF0aDEyayBkcml2ZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBzdHJ1Y3R1cmVkIGZvciB0aGlzIHNwZWNpZmljIFF1YWxjb21tIEF0aGVyb3Mgd2lyZWxlc3MgY2hpcHNldC4gTXkgaW5pdGlhbCBnb2FsIGlzIHRvIHNlZSB3aGF0IGdyYW51bGFyIGNvbnRyb2wgaXMgZXhwb3NlZCB0byB0aGUgdXNlciwgd2hhdCBmZWF0dXJlcyBhcmUgb3B0aW9uYWwsIGFuZCBob3cgdGhleSByZWxhdGUgdG8gdGhlIGNvcmUgZnVuY3Rpb25hbGl0eS4gSSYjMzk7bSBsb29raW5nIGZvciB0aGluZ3MgbGlrZToKCiogICAqKkNoaXBzZXQgU3BlY2lmaWMgRmVhdHVyZXM6KiogQXJlIHRoZXJlIG9wdGlvbnMgZm9yIGVuYWJsaW5nIG9yIGRpc2FibGluZyBwYXJ0aWN1bGFyIGhhcmR3YXJlIGZlYXR1cmVzIGJhc2VkIG9uIHRoZSBzcGVjaWZpYyBhdGgxMmsgY2hpcHNldCB2YXJpYW50PyBJJiMzOTtkIGV4cGVjdCB0byBmaW5kIHRoaW5ncyB0aWVkIHRvIHNwZWNpZmljIFBIWSBtb2Rlcywgb3IgcG93ZXItc2F2aW5nIGNvbmZpZ3VyYXRpb25zLgoqICAgKipEcml2ZXIgRmVhdHVyZXM6KiogV2hhdCBrbm9icyBkb2VzIHRoZSBkcml2ZXIgZXhwb3NlIHRvIHRoZSB1c2VyPyBBcmUgdGhlcmUgZGVidWdnaW5nIG9wdGlvbnMsIGFkdmFuY2VkIHNldHRpbmdzIChsaWtlIHRob3NlIHJlbGF0ZWQgdG8gZmlybXdhcmUgbG9hZGluZywgcmF0ZSBjb250cm9sIGFsZ29yaXRobXMsIG9yIHJlZ3VsYXRvcnkgZG9tYWluIGhhbmRsaW5nKSwgb3Igc3BlY2lmaWMgZmVhdHVyZXMgZm9yIGRpZmZlcmVudCBXaS1GaSBzdGFuZGFyZHMgKDgwMi4xMWF4LCA4MDIuMTFhYywgZXRjLik/IEkgd2FudCB0byBzZWUgaG93IG11Y2ggZmxleGliaWxpdHkgdGhlIHN5c3RlbSBnaXZlcyBtZSB3aGVuIHR1bmluZyBhIGRldmljZS4KKiAgICoqRGVwZW5kZW5jaWVzOioqIEFyZSB0aGVyZSBhbnkgZGVwZW5kZW5jaWVzIG9uIG90aGVyIGtlcm5lbCBmZWF0dXJlcyBvciBkcml2ZXJzPyBUaGlzIGlzIGNyaXRpY2FsIGZvciB1bmRlcnN0YW5kaW5nIGhvdyBhdGgxMmsgaW50ZWdyYXRlcyBpbnRvIHRoZSBiaWdnZXIgcGljdHVyZS4gSSYjMzk7bSB0aGlua2luZyBvZiBkZXBlbmRlbmNpZXMgb24gcmVndWxhdG9yeSBkYXRhYmFzZSBmZWF0dXJlcywgZmlybXdhcmUgbG9hZGluZyBtZWNoYW5pc21zLCBvciBvdGhlciBuZXR3b3JrIHN0YWNrIGNvbXBvbmVudHMuIEkgbmVlZCB0byBrbm93IHdoYXQgdG8gZW5hYmxlIG9yIGRpc2FibGUgaW4gb3JkZXIgdG8gZ2V0IHRoZSBhdGgxMmsgZHJpdmVyIHRvIGZ1bmN0aW9uIGluIGFuIGV4cGVjdGVkIHdheS4KKiAgICoqRGVmYXVsdCBWYWx1ZXMgYW5kIEhlbHAgVGV4dDoqKiBUaGUgZGVmYXVsdCB2YWx1ZXMgYW5kIGhlbHAgdGV4dCBhcmUgZXNzZW50aWFsLiBUaGV5IHF1aWNrbHkgdGVsbCBtZSB3aGF0JiMzOTtzIGltcG9ydGFudCwgd2hhdCB0aGUgaW1wbGljYXRpb25zIG9mIGNoYW5naW5nIGEgc2V0dGluZyBhcmUsIGFuZCBob3cgdGhlIGRlZmF1bHQgY2hvaWNlcyByZWxhdGUgdG8gdGhlIGdlbmVyYWwgb3BlcmF0aW5nIGNvbmRpdGlvbnMuIEkmIzM5O2xsIGZvY3VzIG9uIHRoZXNlIHRvIGdldCBhIHF1aWNrIG92ZXJ2aWV3LgoqICAgKipNZW51IHN0cnVjdHVyZSoqOiBGaW5hbGx5LCB0aGUgbWVudSBzdHJ1Y3R1cmUgd2lsbCBzaG93IG1lIGhvdyBhbGwgdGhlc2Ugb3B0aW9ucyBhcmUgZ3JvdXBlZCB0b2dldGhlci4gVGhpcyByZXZlYWxzIHRoZSBsb2dpYyBvZiBob3cgUXVhbGNvbW0gaXMgbWFuYWdpbmcgdGhlIGRyaXZlciYjMzk7cyBmZWF0dXJlIHNldCBhbmQgaG93IGl0IHByZXNlbnRzIHRoZSBvcHRpb25zIHRvIHRoZSBrZXJuZWwgdXNlci4KCkkmIzM5O2xsIGJlIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gYW55IGNvbmRpdGlvbmFsIGNvbmZpZ3VyYXRpb25zICh1c2luZyBgZGVwZW5kcyBvbmAsIGBzZWxlY3RgLCBldGMuKSB0byBnZXQgYSBnb29kIGhhbmRsZSBvbiBob3cgZGlmZmVyZW50IGNvbmZpZ3VyYXRpb25zIGludGVyYWN0LCBhbmQgaG93IHRvIGF2b2lkIHBvdGVudGlhbCBjb25mbGljdHMgd2hlbiBjdXN0b21pemluZyB0aGUgYnVpbGQuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gZmluZCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTggMDg6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlLUNsZWFyXG4gICAyOlx0Y29uZmlnIEFUSDEyS1xuICAgMzpcdFx0dHJpc3RhdGUgXCYjMzQ7UXVhbGNvbW0gV2ktRmkgNyBzdXBwb3J0IChhdGgxMmspXCYjMzQ7XG4gICA0Olx0XHRkZXBlbmRzIG9uIE1BQzgwMjExIFx1MDAyNlx1MDAyNiBIQVNfRE1BIFx1MDAyNlx1MDAyNiBQQ0lcbiAgIDU6XHRcdHNlbGVjdCBRQ09NX1FNSV9IRUxQRVJTXG4gICA2Olx0XHRzZWxlY3QgTUhJX0JVU1xuICAgNzpcdFx0c2VsZWN0IFFSVFJcbiAgIDg6XHRcdHNlbGVjdCBRUlRSX01ISVxuICAgOTpcdFx0c2VsZWN0IFBDSV9QV1JDVFJMX1BXUlNFUSBpZiBIQVZFX1BXUkNUUkxcbiAgMTA6XHRcdGhlbHBcbiAgMTE6XHRcdCAgRW5hYmxlIHN1cHBvcnQgZm9yIFF1YWxjb21tIFRlY2hub2xvZ2llcyBXaS1GaSA3IChJRUVFXG4gIDEyOlx0XHQgIDgwMi4xMWJlKSBmYW1pbHkgb2YgY2hpcHNldHMsIGZvciBleGFtcGxlIFdDTjc4NTAgYW5kXG4gIDEzOlx0XHQgIFFDTjkyNzQuXG4gIDE0Olx0XG4gIDE1Olx0XHQgIElmIHlvdSBjaG9vc2UgdG8gYnVpbGQgYSBtb2R1bGUsIGl0JiMzOTtsbCBiZSBjYWxsZWQgYXRoMTJrLlxuICAxNjpcdFxuICAxNzpcdGNvbmZpZyBBVEgxMktfQUhCXG4gIDE4Olx0XHRib29sIFwmIzM0O1F1YWxjb21tIGF0aDEyayBBSEIgc3VwcG9ydFwmIzM0O1xuICAxOTpcdFx0ZGVwZW5kcyBvbiBBVEgxMksgXHUwMDI2XHUwMDI2IFJFTU9URVBST0NcbiAgMjA6XHRcdHNlbGVjdCBRQ09NX01EVF9MT0FERVJcbiAgMjE6XHRcdHNlbGVjdCBRQ09NX1NDTVxuICAyMjpcdFx0aGVscFxuICAyMzpcdFx0ICBFbmFibGUgc3VwcG9ydCBmb3IgQXRoMTJrIEFIQiBidXMgY2hpcHNldHMsIGV4YW1wbGUgSVBRNTMzMi5cbiAgMjQ6XHRcbiAgMjU6XHRjb25maWcgQVRIMTJLX0RFQlVHXG4gIDI2Olx0XHRib29sIFwmIzM0O2F0aDEyayBkZWJ1Z2dpbmdcJiMzNDtcbiAgMjc6XHRcdGRlcGVuZHMgb24gQVRIMTJLXG4gIDI4Olx0XHRoZWxwXG4gIDI5Olx0XHQgIEVuYWJsZSBkZWJ1ZyBzdXBwb3J0LCBmb3IgZXhhbXBsZSBkZWJ1ZyBtZXNzYWdlcyB3aGljaCBtdXN0XG4gIDMwOlx0XHQgIGJlIGVuYWJsZWQgc2VwYXJhdGVseSB1c2luZyB0aGUgZGVidWdfbWFzayBtb2R1bGUgcGFyYW1ldGVyLlxuICAzMTpcdFxuICAzMjpcdFx0ICBJZiB1bnN1cmUsIHNheSBZIHRvIG1ha2UgaXQgZWFzaWVyIHRvIGRlYnVnIHByb2JsZW1zLiBCdXQgaWZcbiAgMzM6XHRcdCAgeW91IHdhbnQgb3B0aW1hbCBwZXJmb3JtYW5jZSBjaG9vc2UgTi5cbiAgMzQ6XHRcbiAgMzU6XHRjb25maWcgQVRIMTJLX0RFQlVHRlNcbiAgMzY6XHRcdGJvb2wgXCYjMzQ7UXVhbGNvbW0gYXRoMTJrIGRlYnVnZnMgc3VwcG9ydFwmIzM0O1xuICAzNzpcdFx0ZGVwZW5kcyBvbiBBVEgxMksgXHUwMDI2XHUwMDI2IE1BQzgwMjExX0RFQlVHRlNcbiAgMzg6XHRcdGhlbHBcbiAgMzk6XHRcdCAgRW5hYmxlIGF0aDEyayBkZWJ1Z2ZzIHN1cHBvcnRcbiAgNDA6XHRcbiAgNDE6XHRcdCAgSWYgdW5zdXJlLCBzYXkgWSB0byBtYWtlIGl0IGVhc2llciB0byBkZWJ1ZyBwcm9ibGVtcy4gQnV0IGlmXG4gIDQyOlx0XHQgIHlvdSB3YW50IG9wdGltYWwgcGVyZm9ybWFuY2UgY2hvb3NlIE4uXG4gIDQzOlx0XG4gIDQ0Olx0Y29uZmlnIEFUSDEyS19UUkFDSU5HXG4gIDQ1Olx0XHRib29sIFwmIzM0O2F0aDEyayB0cmFjaW5nIHN1cHBvcnRcJiMzNDtcbiAgNDY6XHRcdGRlcGVuZHMgb24gQVRIMTJLIFx1MDAyNlx1MDAyNiBFVkVOVF9UUkFDSU5HXG4gIDQ3Olx0XHRoZWxwXG4gIDQ4Olx0XHQgIEVuYWJsZSBhdGgxMmsgdHJhY2luZyBpbmZyYXN0cnVjdHVyZS5cbiAgNDk6XHRcbiAgNTA6XHRcdCAgSWYgdW5zdXJlLCBzYXkgWSB0byBtYWtlIGl0IGVhc2llciB0byBkZWJ1ZyBwcm9ibGVtcy4gQnV0IGlmXG4gIDUxOlx0XHQgIHlvdSB3YW50IG9wdGltYWwgcGVyZm9ybWFuY2UgY2hvb3NlIE4uXG4gIDUyOlx0XG4gIDUzOlx0Y29uZmlnIEFUSDEyS19DT1JFRFVNUFxuICA1NDpcdFx0Ym9vbCBcJiMzNDthdGgxMmsgY29yZWR1bXBcJiMzNDtcbiAgNTU6XHRcdGRlcGVuZHMgb24gQVRIMTJLXG4gIDU2Olx0XHRzZWxlY3QgV0FOVF9ERVZfQ09SRURVTVBcbiAgNTc6XHRcdGhlbHBcbiAgNTg6XHRcdCAgRW5hYmxlIGF0aDEyayBjb3JlZHVtcCBjb2xsZWN0aW9uXG4gIDU5Olx0XG4gIDYwOlx0XHQgIElmIHVuc3VyZSwgc2F5IFkgdG8gbWFrZSBpdCBlYXNpZXIgdG8gZGVidWcgcHJvYmxlbXMuIEJ1dCBpZlxuICA2MTpcdFx0ICBkdW1wIGNvbGxlY3Rpb24gbm90IHJlcXVpcmVkIGNob29zZSBOLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOCAwODoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjgyNgoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDM2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBBVEgxMksgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBsb29raW5nIGF0IHRoaXMsIGBBVEgxMktgIGluaGVyZW50bHkgcmVsaWVzIG9uIGBQQ0lgLCBhbmQgaXQgc2VlbXMgdGhlIGJ1aWxkIHN5c3RlbSBlbmFibGVzIFBDSSBzdXBwb3J0IGJ5IGRlZmF1bHQuIFJpZ2h0LCBzbyBpZiBJIHdhbnQgdG8gZW5zdXJlIGV2ZXJ5dGhpbmcgaXMgaW4gcGxhY2UsIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb25zIEkgbmVlZCB0byBzZXQgYXJlIGBBVEgxMUtgLCBgQVRIMTFLX1BDSWAsIGBBVEgxMUtfQUhCYCwgYEFUSDEyS2AsIGFuZCBgQVRIMTJLX0FIQmAuIE5vdywgaGFuZyBvbiBhIHNlY29uZCwgYEFUSDExS19QQ0lgIGFuZCBgQVRIMTFLX0FIQmAgYXJlIHRyaXN0YXRlIG9wdGlvbnMsIGFzIGlzIGBBVEgxMktgLCB3aGlsZSBgQVRIMTJLX0FIQmAgaXMgYSBCb29sZWFuLiBHaXZlbiB0aGF0LCB0aGUgbW9zdCBzdHJhaWdodGZvcndhcmQgYXBwcm9hY2ggc2VlbXMgdG8gYmUgdG8gZW5hYmxlIGBBVEgxMUtgLCBgQVRIMTFLX1BDSWAsIGFuZCBgQVRIMTJLYC4gVGhhdCBzaG91bGQgY292ZXIgdGhlIGVzc2VudGlhbHMuCgpMZXQmIzM5O3Mgc2hpZnQgZm9jdXMgbm93LiBJIG5lZWQgdG8gemVybyBpbiBvbiB0aGUga2V5IG1vZGlmaWVkIGZ1bmN0aW9ucy4gVGhlIGluZGljYXRvcnMgYXJlIGBhdGgxMWtfcW1pX2luaXRfc2VydmljZWAgYW5kIGBhdGgxMmtfcW1pX2luaXRfc2VydmljZWAuIFRob3NlIGFyZSBnb29kLCB3ZWxsLWRlZmluZWQgZm9jdXMgc3ltYm9scy4gSSBxdWlja2x5IHNjYW4uLi4gb2theSwgdGhlcmUgYXJlbiYjMzk7dCBhbnkgb3RoZXIgZnVuY3Rpb25zIHRoYXQgd2VyZSBvYnZpb3VzbHkgY2hhbmdlZC4gR29vZC4KCkFscmlnaHQsIG5vdyB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uLiBDYW4gSSByZWFjaCBgYXRoMTFrX3FtaV9pbml0X3NlcnZpY2VgIGV2ZW4gd2hlbiBubyBhY3R1YWwgaGFyZHdhcmUgaXMgcHJlc2VudD8gV2Uga25vdyBzeXprYWxsZXIgY2FuIGluamVjdCB2aXJ0dWFsIFBDSSBkZXZpY2VzLCB3aGljaCB3b3VsZCB0cmlnZ2VyIGBhdGgxMWtfcGNpX3Byb2JlYC4gRm9sbG93aW5nIHRoZSBleGVjdXRpb24gcGF0aCwgYGF0aDExa19wY2lfcHJvYmVgIGNhbGxzIGBhdGgxMWtfY29yZV9pbml0YCwgYW5kIGZyb20gdGhlcmUgd2UgZ2V0IGBhdGgxMWtfY29yZV9zb2NfY3JlYXRlYCwgd2hpY2ggZmluYWxseSBjYWxscyBgYXRoMTFrX3FtaV9pbml0X3NlcnZpY2VgLiBUaGUgb25seSBzdGlja2luZyBwb2ludCBzZWVtcyB0byBiZSBgYXRoMTFrX21oaV9yZWdpc3RlcmAsIGJ1dCBmcm9tIHdoYXQgSSByZWNhbGwsIHRoYXQganVzdCByZWdpc3RlcnMgdGhlIE1ISSBjb250cm9sbGVyIGFuZCBpc24mIzM5O3QgYSBibG9ja2VyLiBXYWl0Li4ud2hhdCBhYm91dCBgYXRoMTFrX3BjaV9yZWFkX2h3X3ZlcnNpb25gPyBUaGF0IHJlcXVpcmVzIGNsb3NlciBzY3J1dGlueS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTggMDg6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXRoMTFrX3BjaV9yZWFkX2h3X3ZlcnNpb24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9wY2kuYz04OTk9c3RhdGljIGNvbnN0IHN0cnVjdCBhdGgxMWtfaGlmX29wcyBhdGgxMWtfcGNpX2hpZl9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9wY2kuYy05MjEtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3BjaS5jOjkyMjpzdGF0aWMgdm9pZCBhdGgxMWtfcGNpX3JlYWRfaHdfdmVyc2lvbihzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiLCB1MzIgKm1ham9yLCB1MzIgKm1pbm9yKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9wY2kuYy05MjMte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvcGNpLmM9OTQ1PXN0YXRpYyBpbnQgYXRoMTFrX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3BjaS5jLTEwMDEtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3BjaS5jOjEwMDI6XHRcdGF0aDExa19wY2lfcmVhZF9od192ZXJzaW9uKGFiLCBcdTAwMjZzb2NfaHdfdmVyc2lvbl9tYWpvcixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvcGNpLmMtMTAwMy1cdFx0XHRcdFx0ICAgXHUwMDI2c29jX2h3X3ZlcnNpb25fbWlub3IpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvcGNpLmMtMTAzMC1cdFx0YWItXHUwMDNlaWQuYmRmX3NlYXJjaCA9IEFUSDExS19CREZfU0VBUkNIX0JVU19BTkRfQk9BUkQ7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3BjaS5jOjEwMzE6XHRcdGF0aDExa19wY2lfcmVhZF9od192ZXJzaW9uKGFiLCBcdTAwMjZzb2NfaHdfdmVyc2lvbl9tYWpvcixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvcGNpLmMtMTAzMi1cdFx0XHRcdFx0ICAgXHUwMDI2c29jX2h3X3ZlcnNpb25fbWlub3IpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOCAwODoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDEzMwoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYGF0aDExa19wY2lfcmVhZF9od192ZXJzaW9uYCBmdW5jdGlvbi4gSSYjMzk7bSBpbW1lZGlhdGVseSBpbnRlcmVzdGVkIGluIHdoYXQgdGhpcyByb3V0aW5lIGlzIHRyeWluZyB0byBhY2NvbXBsaXNoIOKAkyB0aGUgbmFtZSBzdWdnZXN0cyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGhhcmR3YXJlIHZlcnNpb24gaW5mb3JtYXRpb24sIHByb2JhYmx5IHJlbGF0ZWQgdG8gdGhlIFBDSSBpbnRlcmZhY2UgYW5kIHRoaXMgcGFydGljdWxhciBhdGgxMWsgZHJpdmVyLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcXVpY2tseSBhc2NlcnRhaW4gaXRzIHBsYWNlIHdpdGhpbiB0aGUgYnJvYWRlciBQQ0kgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UuIElzIHRoaXMgcGFydCBvZiBhIHByb2JlIHJvdXRpbmU/IENhbGxlZCBlYXJseSBpbiB0aGUgc2V0dXA/IE9yIGlzIGl0IHNvbWV0aGluZyBhY2Nlc3NlZCBsYXRlciBvbiwgcGVyaGFwcyBmb3IgZGlhZ25vc3RpYyBwdXJwb3NlcyBvciBkdXJpbmcgZmlybXdhcmUgbG9hZGluZz8gVW5kZXJzdGFuZGluZyBpdHMgY29udGV4dCBpcyBjcnVjaWFsLgoKSSBuZWVkIHRvIHNlZSBob3cgdGhlIGhhcmR3YXJlIHZlcnNpb24gaXMgYWN0dWFsbHkgcmVhZC4gQXJlIHdlIHVzaW5nIHN0YW5kYXJkIFBDSSBjb25maWd1cmF0aW9uIHNwYWNlIHJlYWRzPyBPciBhcmUgdGhlcmUgc29tZSBjdXN0b20gcmVnaXN0ZXIgYWNjZXNzZXMgaW52b2x2ZWQgc3BlY2lmaWMgdG8gUXVhbGNvbW0mIzM5O3MgaGFyZHdhcmU/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGVycm9yIGNvbmRpdGlvbnMgSSBzaG91bGQgYmUgb24gdGhlIGxvb2tvdXQgZm9yPyBBbmQgaWYgc28sIGhvdyBpcyB0aGUgZXJyb3IgaGFuZGxlZC4gV2hhdCBpcyB0aGUgZXhwZWN0ZWQgZm9ybWF0IG9mIHRoaXMgJiMzNDt2ZXJzaW9uJiMzNDsgZGF0YT8gSXMgaXQgYSBzaW1wbGUgaW50ZWdlciwgb3IgYSBtb3JlIGNvbXBsZXggc3RydWN0dXJlPyBBcmUgdGhlcmUgaW1wbGljYXRpb25zIGZvciBkZXZpY2UgY29tcGF0aWJpbGl0eSBvciBmZWF0dXJlIHNldHMgYmFzZWQgb24gdGhlIHJlcG9ydGVkIHZlcnNpb24/IEFuZCB3aGF0IGhhcHBlbnMgaWYgdGhlIHJlYWQgZmFpbHM/IERvZXMgaXQgcmV0cnk/IERvZXMgaXQgcHJvdmlkZSBhIG1lYW5pbmdmdWwgZXJyb3IgY29kZSBiYWNrIHRvIHRoZSBjYWxsZXI/IFRoZXNlIGFyZSBhbGwgcXVlc3Rpb25zIHRoYXQgbmVlZCBhbnN3ZXJpbmcuCgpJJiMzOTtkIGFsc28gd2FudCB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgYW55IGhhcmR3YXJlIHZlcnNpb24gY2hlY2tzLCBhbmQgcG90ZW50aWFsIHZlcnNpb24tc3BlY2lmaWMgYmVoYXZpb3JzIHdpdGhpbiB0aGUgZHJpdmVyLiBEb2VzIHRoZSBjb2RlIGJyYW5jaCBiYXNlZCBvbiB0aGUgcmVwb3J0ZWQgaGFyZHdhcmUgdmVyc2lvbj8gQXJlIHRoZXJlIGRpZmZlcmVudCBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZXMsIHJlZ2lzdGVyIHNldHRpbmdzLCBvciBldmVuIGZpcm13YXJlIGxvYWRzIGJhc2VkIG9uIHRoaXMgaW5mb3JtYXRpb24/IEkmIzM5O2xsIG5lZWQgdG8gdHJhY2UgdGhlIGZsb3cgb2YgZXhlY3V0aW9uIGFmdGVyIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLCB0byBzZWUgaG93IHRoZSBoYXJkd2FyZSB2ZXJzaW9uIGlzIGFjdHVhbGx5ICp1c2VkKi4gVGhpcyBoZWxwcyBpZGVudGlmeSBhbnkgYXJlYXMgdGhhdCBjb3VsZCBoYXZlIHBvdGVudGlhbCBjb21wYXRpYmlsaXR5IG9yIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucyBiYXNlZCBvbiB0aGUgdmVyc2lvbiBvZiB0aGUgaGFyZHdhcmUsIG9yIGV2ZW4gaG93IHRoZSBkcml2ZXIgaGFuZGxlcyBkaWZmZXJlbnQgZ2VuZXJhdGlvbnMgb2YgdGhlIFBDSSBpbnRlcmZhY2UuIE92ZXJhbGwsIEkgd2FudCB0byB1bmRlcnN0YW5kIGhvdyBpdCBpZGVudGlmaWVzIGFuZCBpbnRlcmFjdHMgd2l0aCB0aGUgcGh5c2ljYWwgaGFyZHdhcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE4IDA4OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9wY2kuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDkyMiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgOTIyOlx0c3RhdGljIHZvaWQgYXRoMTFrX3BjaV9yZWFkX2h3X3ZlcnNpb24oc3RydWN0IGF0aDExa19iYXNlICphYiwgdTMyICptYWpvciwgdTMyICptaW5vcilcbiA5MjM6XHR7XG4gOTI0Olx0XHR1MzIgc29jX2h3X3ZlcnNpb247XG4gOTI1Olx0XG4gOTI2Olx0XHRzb2NfaHdfdmVyc2lvbiA9IGF0aDExa19wY2ljX3JlYWQzMihhYiwgVENTUl9TT0NfSFdfVkVSU0lPTik7XG4gOTI3Olx0XHQqbWFqb3IgPSBGSUVMRF9HRVQoVENTUl9TT0NfSFdfVkVSU0lPTl9NQUpPUl9NQVNLLFxuIDkyODpcdFx0XHRcdCAgIHNvY19od192ZXJzaW9uKTtcbiA5Mjk6XHRcdCptaW5vciA9IEZJRUxEX0dFVChUQ1NSX1NPQ19IV19WRVJTSU9OX01JTk9SX01BU0ssXG4gOTMwOlx0XHRcdFx0ICAgc29jX2h3X3ZlcnNpb24pO1xuIDkzMTpcdFxuIDkzMjpcdFx0YXRoMTFrX2RiZyhhYiwgQVRIMTFLX0RCR19QQ0ksIFwmIzM0O3Rjc3Jfc29jX2h3X3ZlcnNpb24gbWFqb3IgJWQgbWlub3IgJWRcXG5cJiMzNDssXG4gOTMzOlx0XHRcdCAgICptYWpvciwgKm1pbm9yKTtcbiA5MzQ6XHR9XG4gOTM1Olx0XG4gOTM2Olx0c3RhdGljIGludCBhdGgxMWtfcGNpX3NldF9pcnFfYWZmaW5pdHlfaGludChzdHJ1Y3QgYXRoMTFrX3BjaSAqYWJfcGNpLFxuIDkzNzpcdFx0XHRcdFx0XHQgICAgY29uc3Qgc3RydWN0IGNwdW1hc2sgKm0pXG4gOTM4Olx0e1xuIDkzOTpcdFx0aWYgKHRlc3RfYml0KEFUSDExS19GTEFHX01VTFRJX01TSV9WRUNUT1JTLCBcdTAwMjZhYl9wY2ktXHUwMDNlYWItXHUwMDNlZGV2X2ZsYWdzKSlcbiA5NDA6XHRcdFx0cmV0dXJuIDA7XG4gOTQxOlx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE4IDA4OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0OTkwCgkJCQkJCQlvdXRwdXQ6IDQ3CgkJCQkJCQl0aG91Z2h0czogMzYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBQQ0kgUHJvYmUgVnVsbmVyYWJpbGl0aWVzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBhdGgxMWtfcGNpX3Byb2JlYCBmdW5jdGlvbiBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIFBDSSBtZW1vcnktbWFwcGVkIEkvTy4gVGhlIGBhdGgxMWtfcGNpY19yZWFkMzJgIGZ1bmN0aW9uIGlzIHRoZSBrZXkgaGVyZTsgaXQmIzM5O3MgcmVhZGluZyBmcm9tIFBDSSBtZW1vcnksIGFuZCB3ZSBrbm93IHRoYXQgU3l6a2FsbGVyJiMzOTtzIHZpcnR1YWwgUENJIGRldmljZSBjYW4gaW5qZWN0IGFyYml0cmFyeSB2YWx1ZXMgZHVyaW5nIHRoZXNlIHJlYWRzLiBUaGF0JiMzOTtzIGltbWVkaWF0ZWx5IGludGVyZXN0aW5nLgoKU3BlY2lmaWNhbGx5LCBJIHNlZSB0aGF0IHRoZSBgc29jX2h3X3ZlcnNpb25fbWFqb3JgIHZhcmlhYmxlIGlzIHJlYWQgZnJvbSBQQ0ksIGFuZCBpdCYjMzk7cyB1c2VkIGluIGEgc3dpdGNoIHN0YXRlbWVudC4gVGhlIGNyaXRpY2FsIHBhdGggcmVxdWlyZXMgdGhpcyB2YWx1ZSB0byBiZSBgMmAgZm9yIHRoZSBwcm9iZSB0byBjb250aW51ZSBhbmQgc2V0IGBhYi0mZ3Q7aHdfcmV2YCBjb3JyZWN0bHkuIFRoZSByZWFsIHZ1bG5lcmFiaWxpdHkgc3RlbXMgZnJvbSB0aGUgZmFjdCB0aGF0IFN5emthbGxlciBjYW4sIGdpdmVuIGVub3VnaCBhdHRlbXB0cywgbWFuaXB1bGF0ZSB0aGVzZSB2YWx1ZXMhCgpNeSBpbml0aWFsIHRob3VnaHQgd2FzLCAmIzM0O1doYXQgaWYgaXQgKmRvZXNuJiMzOTt0KiByZXR1cm4gYDJgPyYjMzQ7IEJ1dCB0aGVuIGl0IGhpdHMgbWU6IFN5emthbGxlciBpcyBmdXp6aW5nIHRoZXNlIHJlYWRzLiBJdCB3aWxsIGV2ZW50dWFsbHkgZmluZCBhIHZhbHVlIGZvciBgc29jX2h3X3ZlcnNpb25fbWFqb3JgIHRoYXQgYWxsb3dzIGl0IHRvIHBhc3MgdGhlIGNoZWNrLiBUaHVzLCB0aGlzIGJyYW5jaCBpcyAqZGVmaW5pdGVseSogcmVhY2hhYmxlLiBUaGlzIGJ5cGFzc2VzIHRoZSBpbnRlbmRlZCBoYXJkd2FyZSB2ZXJzaW9uIGNoZWNrLCBhbmQgY291bGQgbGVhZCB0byBpc3N1ZXMgbGF0ZXIgb24gaW4gdGhlIGRyaXZlciYjMzk7cyBleGVjdXRpb24uCgpTbywgdGhpcyBsb29rcyBsaWtlIGEgcG90ZW50aWFsIHBhdGggdG8gdHJpZ2dlciBzb21lIHNvcnQgb2YgdW5leHBlY3RlZCBiZWhhdmlvciBvciBidWcuIE15IG5leHQgc3RlcD8gSSBuZWVkIHRvIGNoZWNrIGBhdGgxMmtfcGNpX3Byb2JlYCB0byBzZWUgaWYgaXQgaGFzIHNpbWlsYXIgY2hlY2tzIGFuZCB3aGV0aGVyIHRoaXMga2luZCBvZiB2dWxuZXJhYmlsaXR5IGlzIHByZXNlbnQgdGhlcmUgYXMgd2VsbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTggMDg6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTUyNCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTUyNDpcdHN0YXRpYyBpbnQgYXRoMTJrX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbjE1MjU6XHRcdFx0XHQgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBjaV9kZXYpXG4xNTI2Olx0e1xuMTUyNzpcdFx0ZW51bSBhdGgxMmtfZGV2aWNlX2ZhbWlseSBkZXZpY2VfaWQ7XG4xNTI4Olx0XHRzdHJ1Y3QgYXRoMTJrX3BjaSAqYWJfcGNpO1xuMTUyOTpcdFx0c3RydWN0IGF0aDEya19iYXNlICphYjtcbjE1MzA6XHRcdGludCByZXQ7XG4xNTMxOlx0XG4xNTMyOlx0XHRhYiA9IGF0aDEya19jb3JlX2FsbG9jKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBzaXplb2YoKmFiX3BjaSksIEFUSDEyS19CVVNfUENJKTtcbjE1MzM6XHRcdGlmICghYWIpIHtcbjE1MzQ6XHRcdFx0ZGV2X2VycihcdTAwMjZwZGV2LVx1MDAzZWRldiwgXCYjMzQ7ZmFpbGVkIHRvIGFsbG9jYXRlIGF0aDEyayBiYXNlXFxuXCYjMzQ7KTtcbjE1MzU6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4xNTM2Olx0XHR9XG4xNTM3Olx0XG4xNTM4Olx0XHRhYi1cdTAwM2VkZXYgPSBcdTAwMjZwZGV2LVx1MDAzZWRldjtcbjE1Mzk6XHRcdGFiX3BjaSA9IGF0aDEya19wY2lfcHJpdihhYik7XG4xNTQwOlx0XHRhYl9wY2ktXHUwMDNlZGV2X2lkID0gcGNpX2Rldi1cdTAwM2VkZXZpY2U7XG4xNTQxOlx0XHRhYl9wY2ktXHUwMDNlYWIgPSBhYjtcbjE1NDI6XHRcdGFiX3BjaS1cdTAwM2VwZGV2ID0gcGRldjtcbjE1NDM6XHRcdGFiLVx1MDAzZWhpZi5vcHMgPSBcdTAwMjZhdGgxMmtfcGNpX2hpZl9vcHM7XG4xNTQ0Olx0XHRhYi1cdTAwM2Vmd19tb2RlID0gQVRIMTJLX0ZJUk1XQVJFX01PREVfTk9STUFMO1xuMTU0NTpcdFx0cGNpX3NldF9kcnZkYXRhKHBkZXYsIGFiKTtcbjE1NDY6XHRcdHNwaW5fbG9ja19pbml0KFx1MDAyNmFiX3BjaS1cdTAwM2V3aW5kb3dfbG9jayk7XG4xNTQ3Olx0XG4xNTQ4Olx0XHRyZXQgPSBhdGgxMmtfcGNpX2NsYWltKGFiX3BjaSwgcGRldik7XG4xNTQ5Olx0XHRpZiAocmV0KSB7XG4xNTUwOlx0XHRcdGF0aDEya19lcnIoYWIsIFwmIzM0O2ZhaWxlZCB0byBjbGFpbSBkZXZpY2U6ICVkXFxuXCYjMzQ7LCByZXQpO1xuMTU1MTpcdFx0XHRnb3RvIGVycl9mcmVlX2NvcmU7XG4xNTUyOlx0XHR9XG4xNTUzOlx0XG4xNTU0Olx0XHRhdGgxMmtfZGJnKGFiLCBBVEgxMktfREJHX0JPT1QsIFwmIzM0O3BjaSBwcm9iZSAlMDR4OiUwNHggJTA0eDolMDR4XFxuXCYjMzQ7LFxuMTU1NTpcdFx0XHQgICBwZGV2LVx1MDAzZXZlbmRvciwgcGRldi1cdTAwM2VkZXZpY2UsXG4xNTU2Olx0XHRcdCAgIHBkZXYtXHUwMDNlc3Vic3lzdGVtX3ZlbmRvciwgcGRldi1cdTAwM2VzdWJzeXN0ZW1fZGV2aWNlKTtcbjE1NTc6XHRcbjE1NTg6XHRcdGFiLVx1MDAzZWlkLnZlbmRvciA9IHBkZXYtXHUwMDNldmVuZG9yO1xuMTU1OTpcdFx0YWItXHUwMDNlaWQuZGV2aWNlID0gcGRldi1cdTAwM2VkZXZpY2U7XG4xNTYwOlx0XHRhYi1cdTAwM2VpZC5zdWJzeXN0ZW1fdmVuZG9yID0gcGRldi1cdTAwM2VzdWJzeXN0ZW1fdmVuZG9yO1xuMTU2MTpcdFx0YWItXHUwMDNlaWQuc3Vic3lzdGVtX2RldmljZSA9IHBkZXYtXHUwMDNlc3Vic3lzdGVtX2RldmljZTtcbjE1NjI6XHRcbjE1NjM6XHRcdGRldmljZV9pZCA9IGF0aDEya19nZXRfZGV2aWNlX2ZhbWlseShwY2lfZGV2KTtcbjE1NjQ6XHRcdGlmIChkZXZpY2VfaWQgXHUwMDNlPSBBVEgxMktfREVWSUNFX0ZBTUlMWV9NQVgpIHtcbjE1NjU6XHRcdFx0YXRoMTJrX2VycihhYiwgXCYjMzQ7ZmFpbGVkIHRvIGdldCBkZXZpY2UgZmFtaWx5IGlkXFxuXCYjMzQ7KTtcbjE1NjY6XHRcdFx0cmV0ID0gLUVJTlZBTDtcbjE1Njc6XHRcdFx0Z290byBlcnJfcGNpX2ZyZWVfcmVnaW9uO1xuMTU2ODpcdFx0fVxuMTU2OTpcdFxuMTU3MDpcdFx0YXRoMTJrX2RiZyhhYiwgQVRIMTJLX0RCR19QQ0ksIFwmIzM0O1BDSSBkZXZpY2UgZmFtaWx5IGlkOiAlZFxcblwmIzM0OywgZGV2aWNlX2lkKTtcbjE1NzE6XHRcbjE1NzI6XHRcdGFiX3BjaS1cdTAwM2VkZXZpY2VfZmFtaWx5X29wcyA9IFx1MDAyNmF0aDEya19wY2lfZmFtaWx5X2RyaXZlcnNbZGV2aWNlX2lkXS1cdTAwM2VvcHM7XG4xNTczOlx0XHRhYl9wY2ktXHUwMDNlcmVnX2Jhc2UgPSBhdGgxMmtfcGNpX2ZhbWlseV9kcml2ZXJzW2RldmljZV9pZF0tXHUwMDNlcmVnX2Jhc2U7XG4xNTc0Olx0XG4xNTc1Olx0XHQvKiBDYWxsIGRldmljZSBzcGVjaWZpYyBwcm9iZS4gVGhpcyBpcyB0aGUgY2FsbGJhY2sgdGhhdCBjYW5cbjE1NzY6XHRcdCAqIGJlIHVzZWQgdG8gb3ZlcnJpZGUgYW55IG9wcyBpbiBmdXR1cmVcbjE1Nzc6XHRcdCAqIHByb2JlIGlzIHZhbGlkYXRlZCBmb3IgTlVMTCBkdXJpbmcgcmVnaXN0cmF0aW9uLlxuMTU3ODpcdFx0ICovXG4xNTc5Olx0XHRyZXQgPSBhYl9wY2ktXHUwMDNlZGV2aWNlX2ZhbWlseV9vcHMtXHUwMDNlcHJvYmUocGRldiwgcGNpX2Rldik7XG4xNTgwOlx0XHRpZiAocmV0KSB7XG4xNTgxOlx0XHRcdGF0aDEya19lcnIoYWIsIFwmIzM0O2ZhaWxlZCB0byBwcm9iZSBkZXZpY2U6ICVkXFxuXCYjMzQ7LCByZXQpO1xuMTU4MjpcdFx0XHRnb3RvIGVycl9wY2lfZnJlZV9yZWdpb247XG4xNTgzOlx0XHR9XG4xNTg0Olx0XG4xNTg1Olx0XHRyZXQgPSBhdGgxMmtfcGNpX21zaV9hbGxvYyhhYl9wY2kpO1xuMTU4NjpcdFx0aWYgKHJldCkge1xuMTU4NzpcdFx0XHRhdGgxMmtfZXJyKGFiLCBcJiMzNDtmYWlsZWQgdG8gYWxsb2MgbXNpOiAlZFxcblwmIzM0OywgcmV0KTtcbjE1ODg6XHRcdFx0Z290byBlcnJfcGNpX2ZyZWVfcmVnaW9uO1xuMTU4OTpcdFx0fVxuMTU5MDpcdFxuMTU5MTpcdFx0cmV0ID0gYXRoMTJrX2NvcmVfcHJlX2luaXQoYWIpO1xuMTU5MjpcdFx0aWYgKHJldClcbjE1OTM6XHRcdFx0Z290byBlcnJfcGNpX21zaV9mcmVlO1xuMTU5NDpcdFxuMTU5NTpcdFx0cmV0ID0gYXRoMTJrX3BjaV9zZXRfaXJxX2FmZmluaXR5X2hpbnQoYWJfcGNpLCBjcHVtYXNrX29mKDApKTtcbjE1OTY6XHRcdGlmIChyZXQpIHtcbjE1OTc6XHRcdFx0YXRoMTJrX2VycihhYiwgXCYjMzQ7ZmFpbGVkIHRvIHNldCBpcnEgYWZmaW5pdHkgJWRcXG5cJiMzNDssIHJldCk7XG4xNTk4Olx0XHRcdGdvdG8gZXJyX3BjaV9tc2lfZnJlZTtcbjE1OTk6XHRcdH1cbjE2MDA6XHRcbjE2MDE6XHRcdHJldCA9IGF0aDEya19taGlfcmVnaXN0ZXIoYWJfcGNpKTtcbjE2MDI6XHRcdGlmIChyZXQpIHtcbjE2MDM6XHRcdFx0YXRoMTJrX2VycihhYiwgXCYjMzQ7ZmFpbGVkIHRvIHJlZ2lzdGVyIG1oaTogJWRcXG5cJiMzNDssIHJldCk7XG4xNjA0Olx0XHRcdGdvdG8gZXJyX2lycV9hZmZpbml0eV9jbGVhbnVwO1xuMTYwNTpcdFx0fVxuMTYwNjpcdFxuMTYwNzpcdFx0cmV0ID0gYXRoMTJrX2hhbF9zcm5nX2luaXQoYWIpO1xuMTYwODpcdFx0aWYgKHJldClcbjE2MDk6XHRcdFx0Z290byBlcnJfbWhpX3VucmVnaXN0ZXI7XG4xNjEwOlx0XG4xNjExOlx0XHRyZXQgPSBhdGgxMmtfY2VfYWxsb2NfcGlwZXMoYWIpO1xuMTYxMjpcdFx0aWYgKHJldCkge1xuMTYxMzpcdFx0XHRhdGgxMmtfZXJyKGFiLCBcJiMzNDtmYWlsZWQgdG8gYWxsb2NhdGUgY2UgcGlwZXM6ICVkXFxuXCYjMzQ7LCByZXQpO1xuMTYxNDpcdFx0XHRnb3RvIGVycl9oYWxfc3JuZ19kZWluaXQ7XG4xNjE1Olx0XHR9XG4xNjE2Olx0XG4xNjE3Olx0XHRhdGgxMmtfcGNpX2luaXRfcW1pX2NlX2NvbmZpZyhhYik7XG4xNjE4Olx0XG4xNjE5Olx0XHRyZXQgPSBhdGgxMmtfcGNpX2NvbmZpZ19pcnEoYWIpO1xuMTYyMDpcdFx0aWYgKHJldCkge1xuMTYyMTpcdFx0XHRhdGgxMmtfZXJyKGFiLCBcJiMzNDtmYWlsZWQgdG8gY29uZmlnIGlycTogJWRcXG5cJiMzNDssIHJldCk7XG4xNjIyOlx0XHRcdGdvdG8gZXJyX2NlX2ZyZWU7XG4xNjIzOlx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE4IDA4OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3NTIyCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogNDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkRpdmluZyBpbnRvIHRoZSBQcm9iZSBGdW5jdGlvbioqCgpNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgdGhlIHN5c3RlbSBoYXMgY2FsbGVkIGEgc3BlY2lmaWMgZnVuY3Rpb24sIGxpa2VseSBhIHByb2JlIGZ1bmN0aW9uLCB3aGljaCBpcyBhY2Nlc3NlZCB2aWEgdGhlIGBhYl9wY2lgIHN0cnVjdHVyZS4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBoaXR0aW5nIGBhYl9wY2ktJmd0O2RldmljZV9mYW1pbHlfb3BzLSZndDtwcm9iZShwZGV2LCBwY2lfZGV2KWAuIFRoaXMgaXMgYSBwcmV0dHkgc3RhbmRhcmQgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UgZm9yIFBDSSBkZXZpY2VzLiBOb3csIG15IGJyYWluIGltbWVkaWF0ZWx5IGdvZXMgdG8gYGF0aDEya19wY2lfZmFtaWx5X2RyaXZlcnNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBzcGVjaWZpYyBkcml2ZXIgb3IgZmFtaWx5IG9mIGRyaXZlcnMgdGhhdCBsaW5lIGlzIGNhbGxpbmcuIFRpbWUgdG8gZXhhbWluZSBgYXRoMTJrX3BjaV9mYW1pbHlfZHJpdmVyc2AgdG8gc2VlIGhvdyBpdCYjMzk7cyBoYW5kbGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOCAwODoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthdGgxMmtfcGNpX2ZhbWlseV9kcml2ZXJzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtMzYtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jOjM3OnN0YXRpYyBzdHJ1Y3QgYXRoMTJrX3BjaV9kcml2ZXIgKmF0aDEya19wY2lfZmFtaWx5X2RyaXZlcnNbQVRIMTJLX0RFVklDRV9GQU1JTFlfTUFYXTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtMzgtc3RhdGljIGNvbnN0IHN0cnVjdCBhdGgxMmtfbXNpX2NvbmZpZyBtc2lfY29uZmlnX29uZV9tc2kgPSB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYz0xNTAzPWF0aDEya19nZXRfZGV2aWNlX2ZhbWlseShjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqcGNpX2Rldilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE1MDktXHQgICAgIGRldmljZV9mYW1pbHlfaWQgXHUwMDNjIEFUSDEyS19ERVZJQ0VfRkFNSUxZX01BWDsgZGV2aWNlX2ZhbWlseV9pZCYjNDM7JiM0MzspIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM6MTUxMDpcdFx0aWYgKCFhdGgxMmtfcGNpX2ZhbWlseV9kcml2ZXJzW2RldmljZV9mYW1pbHlfaWRdKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xNTExLVx0XHRcdGNvbnRpbnVlO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xNTEyLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYzoxNTEzOlx0XHRpZCA9IGF0aDEya19wY2lfZmFtaWx5X2RyaXZlcnNbZGV2aWNlX2ZhbWlseV9pZF0tXHUwMDNlaWRfdGFibGU7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE1MTQtXHRcdHdoaWxlIChpZC1cdTAwM2VkZXZpY2UpIHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jPTE1MjQ9c3RhdGljIGludCBhdGgxMmtfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtMTU3MS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM6MTU3MjpcdGFiX3BjaS1cdTAwM2VkZXZpY2VfZmFtaWx5X29wcyA9IFx1MDAyNmF0aDEya19wY2lfZmFtaWx5X2RyaXZlcnNbZGV2aWNlX2lkXS1cdTAwM2VvcHM7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jOjE1NzM6XHRhYl9wY2ktXHUwMDNlcmVnX2Jhc2UgPSBhdGgxMmtfcGNpX2ZhbWlseV9kcml2ZXJzW2RldmljZV9pZF0tXHUwMDNlcmVnX2Jhc2U7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE1NzQtXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYz0xODA0PWludCBhdGgxMmtfcGNpX3JlZ2lzdGVyX2RyaXZlcihjb25zdCBlbnVtIGF0aDEya19kZXZpY2VfZmFtaWx5IGRldmljZV9pZCxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE4MTUtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jOjE4MTY6XHRpZiAoYXRoMTJrX3BjaV9mYW1pbHlfZHJpdmVyc1tkZXZpY2VfaWRdKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE4MTctXHRcdHByX2VycihcJiMzNDtEcml2ZXIgYWxyZWFkeSByZWdpc3RlcmVkIGZvciAlZFxcblwmIzM0OywgZGV2aWNlX2lkKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE4MjAtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jOjE4MjE6XHRhdGgxMmtfcGNpX2ZhbWlseV9kcml2ZXJzW2RldmljZV9pZF0gPSBkcml2ZXI7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE4MjItXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jOjE4MjM6XHRwY2lfZHJpdmVyID0gXHUwMDI2YXRoMTJrX3BjaV9mYW1pbHlfZHJpdmVyc1tkZXZpY2VfaWRdLVx1MDAzZWRyaXZlcjtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtMTgyNC1cdHBjaV9kcml2ZXItXHUwMDNlbmFtZSA9IGRyaXZlci1cdTAwM2VuYW1lO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM9MTgzNT12b2lkIGF0aDEya19wY2lfdW5yZWdpc3Rlcl9kcml2ZXIoY29uc3QgZW51bSBhdGgxMmtfZGV2aWNlX2ZhbWlseSBkZXZpY2VfaWQpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xODM3LVx0aWYgKGRldmljZV9pZCBcdTAwM2U9IEFUSDEyS19ERVZJQ0VfRkFNSUxZX01BWCB8fFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYzoxODM4Olx0ICAgICFhdGgxMmtfcGNpX2ZhbWlseV9kcml2ZXJzW2RldmljZV9pZF0pXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE4MzktXHRcdHJldHVybjtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtMTg0MC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM6MTg0MTpcdHBjaV91bnJlZ2lzdGVyX2RyaXZlcihcdTAwMjZhdGgxMmtfcGNpX2ZhbWlseV9kcml2ZXJzW2RldmljZV9pZF0tXHUwMDNlZHJpdmVyKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM6MTg0MjpcdGF0aDEya19wY2lfZmFtaWx5X2RyaXZlcnNbZGV2aWNlX2lkXSA9IE5VTEw7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE4NDMtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOCAwODoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTAxOQoJCQkJCQkJb3V0cHV0OiAxNDMKCQkJCQkJCXRob3VnaHRzOiA1NDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCB0cmFjaW5nIGl0cyBleGVjdXRpb24uIEl0IHNlZW1zIHRoZSBjb3JlIG9mIGl0IGxpZXMgaW4gYWRkcmVzc2luZyBhIHBvdGVudGlhbCByZXNvdXJjZSBsZWFrIHdpdGhpbiB0aGUgYXRoMTFrIGFuZCBhdGgxMmsgZHJpdmVycywgc3BlY2lmaWNhbGx5IGR1cmluZyB0aGUgUU1JIGluaXRpYWxpemF0aW9uIHByb2Nlc3MuIEkgc2VlIHRoYXQgYGF0aDEya19wY2lfcHJvYmVgIGlzIGludm9sdmVkLCB1bHRpbWF0ZWx5IGxlYWRpbmcgdG8gdGhlIGNhbGwgb2YgYGRldmljZV9mYW1pbHlfb3BzLSZndDtwcm9iZWAuIEkgdGhpbmsgSSByZW1lbWJlciBzZWVpbmcgdGhhdCBvbmUgYmVmb3JlLgoKVGhlIGVzc2VuY2Ugb2YgdGhlIGZpeCBpcyBlcnJvciBoYW5kbGluZyB3aXRoaW4gYGF0aDExa19xbWlfaW5pdF9zZXJ2aWNlYCBhbmQgYGF0aDEya19xbWlfaW5pdF9zZXJ2aWNlYC4gSXQgYXBwZWFycyBpZiBgYWxsb2Nfb3JkZXJlZF93b3JrcXVldWVgIG9yIGBxbWlfYWRkX2xvb2t1cGAgZmFpbHMsIHRoZSBwYXRjaCBlbnN1cmVzIHRoZSBRTUkgaGFuZGxlIGdldHMgcmVsZWFzZWQsIHByZXZlbnRpbmcgYSBsZWFrLiBUaGlzIGxvb2tzIGxpa2UgYSBzb2xpZCBmdW5jdGlvbmFsIGNoYW5nZSwgYW5kIGltcG9ydGFudGx5LCBpdCYjMzk7cyByZWFjaGFibGUg4oCTIHBhcnRpY3VsYXJseSB0aHJvdWdoIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgdGhhbmtzIHRvIHN5emthbGxlciYjMzk7cyBQQ0kgZGV2aWNlIGluamVjdGlvbiBjYXBhYmlsaXRpZXMuIFRoYXQgbWFrZXMgaXQgZWFzaWVyIHRvIHRlc3QuCgpJIG5lZWQgdG8gY29uZmlybSB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMuIEluaXRpYWxseSwgSSB0aG91Z2h0IGl0IHdhcyBqdXN0IGBBVEgxMUtgLCBgQVRIMTFLX1BDSWAsIGFuZCBgQVRIMTJLYC4gSG93ZXZlciwgSSBoYXZlIHRvIHJlbWVtYmVyIHRoYXQgYEFUSDExS19QQ0lgIGlzIHRyaXN0YXRlLCBzbyB0aGVyZSBtaWdodCBiZSBvdGhlciByZWxhdGVkIGNvbmZpZ3MuIExldCBtZSBxdWlja2x5IGNoZWNrIHRoZSBgS2NvbmZpZ2AgZm9yIHRoZSBhdGgxMWsgZHJpdmVyIGFnYWluLi4uIEFoLCB5ZXMsIHRoZXJlIGlzIGFsc28gYEFUSDExS19BSEJgLiBJIHdpbGwgbWFrZSBzdXJlIHRvIGFjY291bnQgZm9yIHRoYXQuIEFsc28sIHRoZSBzYW1lIGlzIHRydWUgZm9yIGBBVEgxMktgLCBzaW5jZSBgQVRIMTJLX0FIQmAgaXMgYWxzbyB0aGVyZS4KClVsdGltYXRlbHkgSSB3aWxsIGluY2x1ZGUgYEFUSDExS2AsIGBBVEgxMUtfUENJYCwgYW5kIGBBVEgxMktgIGZvciB0aGlzLiBBY3R1YWxseSwgdGhlIGtleSBvbmVzIGFyZSBgQVRIMTFLYCBhbmQgYEFUSDEyS2AsIGFzIHRoZXkgZm9ybSB0aGUgZm91bmRhdGlvbi4gYEFUSDExS19QQ0lgIGlzIGV4cGxpY2l0bHkgbmVlZGVkIGZvciBQQ0kgc3VwcG9ydCBpbiB0aGF0IGRyaXZlciwgYW5kIGBBVEgxMktgIGluaGVyZW50bHkgaW5jbHVkZXMgUENJIHN1cHBvcnQgYXNzdW1pbmcgYFBDSWAgaXMgYWxzbyBlbmFibGVkLgoKTGV0IG1lIGRvdWJsZS1jaGVjayB0aGUgbmFtaW5nIGZvciB0aG9zZSBjb25maWdzIGp1c3QgdG8gYmUgY29tcGxldGVseSBjZXJ0YWluLiBZZXMsIGBjb25maWcgQVRIMTFLX1BDSWAgYW5kIGBjb25maWcgQVRIMTJLYC4KClRoZSBrZXkgZnVuY3Rpb25zIHRvIGtlZXAgYW4gZXllIG9uIGFyZSBgYXRoMTFrX3FtaV9pbml0X3NlcnZpY2VgIGFuZCBgYXRoMTJrX3FtaV9pbml0X3NlcnZpY2VgLiBUaG9zZSBhcmUgd2hlcmUgdGhlIGZpeCBpcyBjb25jZW50cmF0ZWQuCgpTbywgdG8gc3VtbWFyaXplIG15IHJlYXNvbmluZzogVGhlIHBhdGNoIGlzIGEgZnVuY3Rpb25hbCBmaXggYWRkcmVzc2luZyBhIHBvdGVudGlhbCByZXNvdXJjZSBsZWFrIGluIHRoZSBRTUkgaW5pdGlhbGl6YXRpb24gcGF0aHMgb2YgYXRoMTFrIGFuZCBhdGgxMmsgZHJpdmVycy4gSXQgcHJldmVudHMgdGhlIGxlYWsgYnkgcmVsZWFzaW5nIHRoZSBRTUkgaGFuZGxlIGluIHRoZSBldmVudCB0aGF0IHdvcmtxdWV1ZSBhbGxvY2F0aW9uIG9yIFFNSSBsb29rdXAgYWRkaXRpb24gZmFpbHMuIFRoaXMgY2hhbmdlIGlzIGVmZmVjdGl2ZWx5IHRlc3RhYmxlIHZpYSB2aXJ0dWFsIFBDSSBkZXZpY2UgaW5qZWN0aW9uIGFuZCByZXF1aXJlcyB0aGUgYEFUSDExS2AsIGBBVEgxMUtfUENJYCwgYW5kIGBBVEgxMktgIGNvbmZpZ3VyYXRpb25zICh3aXRoIGEgZm9jdXMgb24gdGhlIGBhdGgxMWtfcW1pX2luaXRfc2VydmljZWAgYW5kIGBhdGgxMmtfcW1pX2luaXRfc2VydmljZWAgZnVuY3Rpb25zKS4gTm93LCBJJiMzOTttIHJlYWR5IHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTggMDg6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FUSDExSyYjMzQ7LAogICAgJiMzNDtBVEgxMUtfUENJJiMzNDssCiAgICAmIzM0O0FUSDEySyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2F0aDExa19xbWlfaW5pdF9zZXJ2aWNlJiMzNDssCiAgICAmIzM0O2F0aDEya19xbWlfaW5pdF9zZXJ2aWNlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgZXJyb3IgaGFuZGxpbmcgdG8gZml4IGEgcmVzb3VyY2UgbGVhayBpbiB0aGUgUU1JIGluaXRpYWxpemF0aW9uIHBhdGggb2YgdGhlIGF0aDExayBhbmQgYXRoMTJrIGRyaXZlcnMuIEl0IHJlbGVhc2VzIHRoZSBRTUkgaGFuZGxlIGlmIHdvcmtxdWV1ZSBhbGxvY2F0aW9uIG9yIFFNSSBsb29rdXAgYWRkaXRpb24gZmFpbHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGNhbiBiZSByZWFjaGVkIGFuZCB0ZXN0ZWQgdmlhIHZpcnR1YWwgUENJIGRldmljZSBpbmplY3Rpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FUSDExSyYjMzQ7LAogICAgJiMzNDtBVEgxMUtfUENJJiMzNDssCiAgICAmIzM0O0FUSDEySyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2F0aDExa19xbWlfaW5pdF9zZXJ2aWNlJiMzNDssCiAgICAmIzM0O2F0aDEya19xbWlfaW5pdF9zZXJ2aWNlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgZXJyb3IgaGFuZGxpbmcgdG8gZml4IGEgcmVzb3VyY2UgbGVhayBpbiB0aGUgUU1JIGluaXRpYWxpemF0aW9uIHBhdGggb2YgdGhlIGF0aDExayBhbmQgYXRoMTJrIGRyaXZlcnMuIEl0IHJlbGVhc2VzIHRoZSBRTUkgaGFuZGxlIGlmIHdvcmtxdWV1ZSBhbGxvY2F0aW9uIG9yIFFNSSBsb29rdXAgYWRkaXRpb24gZmFpbHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGNhbiBiZSByZWFjaGVkIGFuZCB0ZXN0ZWQgdmlhIHZpcnR1YWwgUENJIGRldmljZSBpbmplY3Rpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0xOFQwODoyMjozOS44ODE1NjM0MjdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjM3ODI5OTE0NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQVRIMTFLXCIsXG4gICAgXCJBVEgxMUtfUENJXCIsXG4gICAgXCJBVEgxMktcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhdGgxMWtfcW1pX2luaXRfc2VydmljZVwiLFxuICAgIFwiYXRoMTJrX3FtaV9pbml0X3NlcnZpY2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGVycm9yIGhhbmRsaW5nIHRvIGZpeCBhIHJlc291cmNlIGxlYWsgaW4gdGhlIFFNSSBpbml0aWFsaXphdGlvbiBwYXRoIG9mIHRoZSBhdGgxMWsgYW5kIGF0aDEyayBkcml2ZXJzLiBJdCByZWxlYXNlcyB0aGUgUU1JIGhhbmRsZSBpZiB3b3JrcXVldWUgYWxsb2NhdGlvbiBvciBRTUkgbG9va3VwIGFkZGl0aW9uIGZhaWxzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBjYW4gYmUgcmVhY2hlZCBhbmQgdGVzdGVkIHZpYSB2aXJ0dWFsIFBDSSBkZXZpY2UgaW5qZWN0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xOFQwODoyMjozOS44ODE1Njg2OTdaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyMjc3MTM5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGE2YzUzNDczMDZjZmUyNDIwMTllMjMxODA0YWM2MTNlYWE4MzdkZTFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBKdWwgMTggMDg6MjI6MzggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9xbWkuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvcW1pLmNcXG5pbmRleCA0MTBhN2VlMDc2YTAyNi4uNmUzZjgyMTY5ZDI0MWIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9xbWkuY1xcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvcW1pLmNcXG5AQCAtMzMyOSw3ICszMzI5LDggQEAgaW50IGF0aDExa19xbWlfaW5pdF9zZXJ2aWNlKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXFxuIFxcdGFiLVxcdTAwM2VxbWkuZXZlbnRfd3EgPSBhbGxvY19vcmRlcmVkX3dvcmtxdWV1ZShcXFwiYXRoMTFrX3FtaV9kcml2ZXJfZXZlbnRcXFwiLCAwKTtcXG4gXFx0aWYgKCFhYi1cXHUwMDNlcW1pLmV2ZW50X3dxKSB7XFxuIFxcdFxcdGF0aDExa19lcnIoYWIsIFxcXCJmYWlsZWQgdG8gYWxsb2NhdGUgd29ya3F1ZXVlXFxcXG5cXFwiKTtcXG4tXFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuK1xcdFxcdHJldCA9IC1FRkFVTFQ7XFxuK1xcdFxcdGdvdG8gZXJyX3JlbGVhc2VfcW1pX2hhbmRsZTtcXG4gXFx0fVxcbiBcXG4gXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNmFiLVxcdTAwM2VxbWkuZXZlbnRfbGlzdCk7XFxuQEAgLTMzNDIsOSArMzM0MywxNCBAQCBpbnQgYXRoMTFrX3FtaV9pbml0X3NlcnZpY2Uoc3RydWN0IGF0aDExa19iYXNlICphYilcXG4gXFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4gXFx0XFx0YXRoMTFrX3dhcm4oYWIsIFxcXCJmYWlsZWQgdG8gYWRkIHFtaSBsb29rdXA6ICVkXFxcXG5cXFwiLCByZXQpO1xcbiBcXHRcXHRkZXN0cm95X3dvcmtxdWV1ZShhYi1cXHUwMDNlcW1pLmV2ZW50X3dxKTtcXG4tXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0Z290byBlcnJfcmVsZWFzZV9xbWlfaGFuZGxlO1xcbiBcXHR9XFxuIFxcbitcXHRyZXR1cm4gcmV0O1xcbitcXG4rZXJyX3JlbGVhc2VfcW1pX2hhbmRsZTpcXG4rXFx0cW1pX2hhbmRsZV9yZWxlYXNlKFxcdTAwMjZhYi1cXHUwMDNlcW1pLmhhbmRsZSk7XFxuK1xcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuY1xcbmluZGV4IGZkNzYyYjVkN2JiNTk3Li42OTJmMWIyYzIwMzFiNyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5jXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuY1xcbkBAIC00MDQxLDcgKzQwNDEsNiBAQCBpbnQgYXRoMTJrX3FtaV9pbml0X3NlcnZpY2Uoc3RydWN0IGF0aDEya19iYXNlICphYilcXG4gXFxuIFxcdG1lbXNldChcXHUwMDI2YWItXFx1MDAzZXFtaS50YXJnZXQsIDAsIHNpemVvZihzdHJ1Y3QgdGFyZ2V0X2luZm8pKTtcXG4gXFx0bWVtc2V0KFxcdTAwMjZhYi1cXHUwMDNlcW1pLnRhcmdldF9tZW0sIDAsIHNpemVvZihzdHJ1Y3QgdGFyZ2V0X21lbV9jaHVuaykpO1xcbi1cXHRhYi1cXHUwMDNlcW1pLmFiID0gYWI7XFxuIFxcbiBcXHRhYi1cXHUwMDNlcW1pLnRhcmdldF9tZW1fbW9kZSA9IGFiLVxcdTAwM2V0YXJnZXRfbWVtX21vZGU7XFxuIFxcdHJldCA9IHFtaV9oYW5kbGVfaW5pdChcXHUwMDI2YWItXFx1MDAzZXFtaS5oYW5kbGUsIEFUSDEyS19RTUlfUkVTUF9MRU5fTUFYLFxcbkBAIC00MDU0LDcgKzQwNTMsOCBAQCBpbnQgYXRoMTJrX3FtaV9pbml0X3NlcnZpY2Uoc3RydWN0IGF0aDEya19iYXNlICphYilcXG4gXFx0YWItXFx1MDAzZXFtaS5ldmVudF93cSA9IGFsbG9jX29yZGVyZWRfd29ya3F1ZXVlKFxcXCJhdGgxMmtfcW1pX2RyaXZlcl9ldmVudFxcXCIsIDApO1xcbiBcXHRpZiAoIWFiLVxcdTAwM2VxbWkuZXZlbnRfd3EpIHtcXG4gXFx0XFx0YXRoMTJrX2VycihhYiwgXFxcImZhaWxlZCB0byBhbGxvY2F0ZSB3b3JrcXVldWVcXFxcblxcXCIpO1xcbi1cXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4rXFx0XFx0cmV0ID0gLUVGQVVMVDtcXG4rXFx0XFx0Z290byBlcnJfcmVsZWFzZV9xbWlfaGFuZGxlO1xcbiBcXHR9XFxuIFxcbiBcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2YWItXFx1MDAzZXFtaS5ldmVudF9saXN0KTtcXG5AQCAtNDA2Nyw5ICs0MDY3LDE2IEBAIGludCBhdGgxMmtfcW1pX2luaXRfc2VydmljZShzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxcbiBcXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbiBcXHRcXHRhdGgxMmtfd2FybihhYiwgXFxcImZhaWxlZCB0byBhZGQgcW1pIGxvb2t1cFxcXFxuXFxcIik7XFxuIFxcdFxcdGRlc3Ryb3lfd29ya3F1ZXVlKGFiLVxcdTAwM2VxbWkuZXZlbnRfd3EpO1xcbi1cXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRcXHRnb3RvIGVycl9yZWxlYXNlX3FtaV9oYW5kbGU7XFxuIFxcdH1cXG4gXFxuK1xcdGFiLVxcdTAwM2VxbWkuYWIgPSBhYjtcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK1xcbitlcnJfcmVsZWFzZV9xbWlfaGFuZGxlOlxcbitcXHRxbWlfaGFuZGxlX3JlbGVhc2UoXFx1MDAyNmFiLVxcdTAwM2VxbWkuaGFuZGxlKTtcXG4rXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE4VDA4OjIyOjQwLjMwNTAzNjE0OVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTIzMzU5NTEwNTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkFUSDExS1wiLFxuICAgIFwiQVRIMTFLX1BDSVwiLFxuICAgIFwiQVRIMTJLXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYXRoMTFrX3FtaV9pbml0X3NlcnZpY2VcIixcbiAgICBcImF0aDEya19xbWlfaW5pdF9zZXJ2aWNlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBlcnJvciBoYW5kbGluZyB0byBmaXggYSByZXNvdXJjZSBsZWFrIGluIHRoZSBRTUkgaW5pdGlhbGl6YXRpb24gcGF0aCBvZiB0aGUgYXRoMTFrIGFuZCBhdGgxMmsgZHJpdmVycy4gSXQgcmVsZWFzZXMgdGhlIFFNSSBoYW5kbGUgaWYgd29ya3F1ZXVlIGFsbG9jYXRpb24gb3IgUU1JIGxvb2t1cCBhZGRpdGlvbiBmYWlscy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgY2FuIGJlIHJlYWNoZWQgYW5kIHRlc3RlZCB2aWEgdmlydHVhbCBQQ0kgZGV2aWNlIGluamVjdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhNmM1MzQ3MzA2Y2ZlMjQyMDE5ZTIzMTgwNGFjNjEzZWFhODM3ZGUxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBKdWwgMTggMDg6MjI6MzggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3FtaS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9xbWkuY1xuaW5kZXggNDEwYTdlZTA3NmEwMjYuLjZlM2Y4MjE2OWQyNDFiIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9xbWkuY1xuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9xbWkuY1xuQEAgLTMzMjksNyArMzMyOSw4IEBAIGludCBhdGgxMWtfcW1pX2luaXRfc2VydmljZShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxuIFx0YWItXHUwMDNlcW1pLmV2ZW50X3dxID0gYWxsb2Nfb3JkZXJlZF93b3JrcXVldWUoXCJhdGgxMWtfcW1pX2RyaXZlcl9ldmVudFwiLCAwKTtcbiBcdGlmICghYWItXHUwMDNlcW1pLmV2ZW50X3dxKSB7XG4gXHRcdGF0aDExa19lcnIoYWIsIFwiZmFpbGVkIHRvIGFsbG9jYXRlIHdvcmtxdWV1ZVxcblwiKTtcbi1cdFx0cmV0dXJuIC1FRkFVTFQ7XG4rXHRcdHJldCA9IC1FRkFVTFQ7XG4rXHRcdGdvdG8gZXJyX3JlbGVhc2VfcW1pX2hhbmRsZTtcbiBcdH1cbiBcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNmFiLVx1MDAzZXFtaS5ldmVudF9saXN0KTtcbkBAIC0zMzQyLDkgKzMzNDMsMTQgQEAgaW50IGF0aDExa19xbWlfaW5pdF9zZXJ2aWNlKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXG4gXHRpZiAocmV0IFx1MDAzYyAwKSB7XG4gXHRcdGF0aDExa193YXJuKGFiLCBcImZhaWxlZCB0byBhZGQgcW1pIGxvb2t1cDogJWRcXG5cIiwgcmV0KTtcbiBcdFx0ZGVzdHJveV93b3JrcXVldWUoYWItXHUwMDNlcW1pLmV2ZW50X3dxKTtcbi1cdFx0cmV0dXJuIHJldDtcbitcdFx0Z290byBlcnJfcmVsZWFzZV9xbWlfaGFuZGxlO1xuIFx0fVxuIFxuK1x0cmV0dXJuIHJldDtcbitcbitlcnJfcmVsZWFzZV9xbWlfaGFuZGxlOlxuK1x0cW1pX2hhbmRsZV9yZWxlYXNlKFx1MDAyNmFiLVx1MDAzZXFtaS5oYW5kbGUpO1xuK1xuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmNcbmluZGV4IGZkNzYyYjVkN2JiNTk3Li42OTJmMWIyYzIwMzFiNyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmNcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmNcbkBAIC00MDQxLDcgKzQwNDEsNiBAQCBpbnQgYXRoMTJrX3FtaV9pbml0X3NlcnZpY2Uoc3RydWN0IGF0aDEya19iYXNlICphYilcbiBcbiBcdG1lbXNldChcdTAwMjZhYi1cdTAwM2VxbWkudGFyZ2V0LCAwLCBzaXplb2Yoc3RydWN0IHRhcmdldF9pbmZvKSk7XG4gXHRtZW1zZXQoXHUwMDI2YWItXHUwMDNlcW1pLnRhcmdldF9tZW0sIDAsIHNpemVvZihzdHJ1Y3QgdGFyZ2V0X21lbV9jaHVuaykpO1xuLVx0YWItXHUwMDNlcW1pLmFiID0gYWI7XG4gXG4gXHRhYi1cdTAwM2VxbWkudGFyZ2V0X21lbV9tb2RlID0gYWItXHUwMDNldGFyZ2V0X21lbV9tb2RlO1xuIFx0cmV0ID0gcW1pX2hhbmRsZV9pbml0KFx1MDAyNmFiLVx1MDAzZXFtaS5oYW5kbGUsIEFUSDEyS19RTUlfUkVTUF9MRU5fTUFYLFxuQEAgLTQwNTQsNyArNDA1Myw4IEBAIGludCBhdGgxMmtfcW1pX2luaXRfc2VydmljZShzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxuIFx0YWItXHUwMDNlcW1pLmV2ZW50X3dxID0gYWxsb2Nfb3JkZXJlZF93b3JrcXVldWUoXCJhdGgxMmtfcW1pX2RyaXZlcl9ldmVudFwiLCAwKTtcbiBcdGlmICghYWItXHUwMDNlcW1pLmV2ZW50X3dxKSB7XG4gXHRcdGF0aDEya19lcnIoYWIsIFwiZmFpbGVkIHRvIGFsbG9jYXRlIHdvcmtxdWV1ZVxcblwiKTtcbi1cdFx0cmV0dXJuIC1FRkFVTFQ7XG4rXHRcdHJldCA9IC1FRkFVTFQ7XG4rXHRcdGdvdG8gZXJyX3JlbGVhc2VfcW1pX2hhbmRsZTtcbiBcdH1cbiBcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNmFiLVx1MDAzZXFtaS5ldmVudF9saXN0KTtcbkBAIC00MDY3LDkgKzQwNjcsMTYgQEAgaW50IGF0aDEya19xbWlfaW5pdF9zZXJ2aWNlKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXG4gXHRpZiAocmV0IFx1MDAzYyAwKSB7XG4gXHRcdGF0aDEya193YXJuKGFiLCBcImZhaWxlZCB0byBhZGQgcW1pIGxvb2t1cFxcblwiKTtcbiBcdFx0ZGVzdHJveV93b3JrcXVldWUoYWItXHUwMDNlcW1pLmV2ZW50X3dxKTtcbi1cdFx0cmV0dXJuIHJldDtcbitcdFx0Z290byBlcnJfcmVsZWFzZV9xbWlfaGFuZGxlO1xuIFx0fVxuIFxuK1x0YWItXHUwMDNlcW1pLmFiID0gYWI7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK1xuK2Vycl9yZWxlYXNlX3FtaV9oYW5kbGU6XG4rXHRxbWlfaGFuZGxlX3JlbGVhc2UoXHUwMDI2YWItXHUwMDNlcW1pLmhhbmRsZSk7XG4rXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE4VDA4OjIyOjQwLjMwNTAzNzQ2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjIxMjQ0NTAwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQYXRjaCBmb3IgUXVhbGNvbW0gQXRoZXJvcyBXaXJlbGVzcyBEcml2ZXJzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQncyB0b3VjaGluZyBgYXRoMTFrX3FtaV9pbml0X3NlcnZpY2VgIGFuZCBgYXRoMTJrX3FtaV9pbml0X3NlcnZpY2VgIOKAkyBib3RoIFFNSSBpbml0aWFsaXphdGlvbiBmdW5jdGlvbnMgd2l0aGluIHRoZSBgYXRoMTFrYCBhbmQgYGF0aDEya2AgZHJpdmVycy4gSXQgc2VlbXMgdGhleSdyZSBhZGRpbmcgc29tZSBlcnJvciBoYW5kbGluZyB0byBncmFjZWZ1bGx5IHJlbGVhc2UgdGhlIFFNSSBoYW5kbGUgaWYgZWl0aGVyIGBhbGxvY19vcmRlcmVkX3dvcmtxdWV1ZWAgb3IgYHFtaV9hZGRfbG9va3VwYCBmYWlsLiBUaGF0J3MgZ29vZCwgcHJldmVudGluZyByZXNvdXJjZSBsZWFrcyBpcyBhbHdheXMgaW1wb3J0YW50LiBJIGFsc28gc2VlIHRoYXQgaW4gdGhlIGBhdGgxMmtgIGZ1bmN0aW9uLCBgYWItXHUwMDNlcW1pLmFiID0gYWI7YCBpcyBtb3ZlZCB0byB0aGUgZW5kLiBJIHdvbmRlciB3aHkgdGhhdCB3YXMgZGVlbWVkIG5lY2Vzc2FyeS5cblxuTm93LCBhIGNyaXRpY2FsIHBvaW50IGNvbWVzIHRvIG1pbmQuIFRoZXNlIGFyZSBoYXJkd2FyZSBkcml2ZXJzLiBTcGVjaWZpY2FsbHkgZm9yIFF1YWxjb21tIEF0aGVyb3Mgd2lyZWxlc3MgY2hpcHMsIGxpa2UgYXRoMTFrIGFuZCBhdGgxMmsuIFRoZSBiaWcgcXVlc3Rpb24gaXMgd2hldGhlciB0aGlzIGNvZGUgaXMgZXZlbiAqcmVsZXZhbnQqIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIFVzdWFsbHksIHlvdSBkb24ndCBzZWUgZGlyZWN0IGVtdWxhdGlvbiBvZiBQQ0kgb3IgQUhCIGRldmljZXMgdW5sZXNzIGEgc3BlY2lmaWMgZW11bGF0b3IgaGFzIGJlZW4gc2V0IHVwLCBsaWtlIG1hYzgwMjExX2h3c2ltLCBidXQgdGhhdCdzIGZvciBnZW5lcmljIG1hYzgwMjExLCBub3QgdGhlc2Ugc3BlY2lmaWMgaGFyZHdhcmUgZHJpdmVycy4gSSBkb24ndCByZWNhbGwgYW55IHN0YW5kYXJkIHNvZnR3YXJlIGVtdWxhdGlvbiBmb3IgYXRoMTFrIG9yIGF0aDEyay5cblxuU28sIGxldCBtZSBjbGFyaWZ5OiBhcmUgdGhlc2UgZHJpdmVycyBzdHJpY3RseSB0aWVkIHRvIHJlYWwgaGFyZHdhcmU/IE9yLCBpcyB0aGVyZSBzb21lIHNvcnQgb2YgdmlydHVhbCBidXMgdGhhdCBjb3VsZCBhbGxvdyBmb3IgdGhlaXIgcHJvYmluZyB3aXRoaW4gYSB2aXJ0dWFsIG1hY2hpbmU/IEknbGwgbmVlZCB0byBjb25maXJtIGlmIHRoZXJlJ3MgYW55IHBhdGh3YXkgdG8gcmVhY2ggdGhlbSBpbiBhIHZpcnR1YWxpemVkIGNvbnRleHQuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgY29kZWJhc2UgZGlyZWN0bHkuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBkaXJlY3Rvcnkgc3RydWN0dXJlcywgc3BlY2lmaWNhbGx5IGBkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2AgYW5kIGBkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2AgYW5kIHNlZSBpZiBhbnl0aGluZyBqdW1wcyBvdXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2OTcsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMzcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xOFQwODoyMjo0Ni41MTc0ODU4MTdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk4NTgyNjIxMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhdGgxMWtfcW1pX2luaXRfc2VydmljZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2NvcmUuYz0xOTg1PXN0YXRpYyBpbnQgYXRoMTFrX2NvcmVfc29jX2NyZWF0ZShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9jb3JlLmMtMTk5My1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2NvcmUuYzoxOTk0OlxcdHJldCA9IGF0aDExa19xbWlfaW5pdF9zZXJ2aWNlKGFiKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2NvcmUuYy0xOTk1LVxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvcW1pLmM9MzIwNz1zdGF0aWMgdm9pZCBhdGgxMWtfcW1pX2RyaXZlcl9ldmVudF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvcW1pLmMtMzMxMi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3FtaS5jOjMzMTM6aW50IGF0aDExa19xbWlfaW5pdF9zZXJ2aWNlKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9xbWkuYy0zMzE0LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvcW1pLmg9NTIwPXZvaWQgYXRoMTFrX3FtaV9kZWluaXRfc2VydmljZShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3FtaS5oOjUyMTppbnQgYXRoMTFrX3FtaV9pbml0X3NlcnZpY2Uoc3RydWN0IGF0aDExa19iYXNlICphYik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9xbWkuaC01MjItdm9pZCBhdGgxMWtfcW1pX2ZyZWVfcmVzb3VyY2Uoc3RydWN0IGF0aDExa19iYXNlICphYik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE4VDA4OjIyOjQ4LjUwMzMyMjUyOFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI3MjIyODE3MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBgYXRoMTFrX2NvcmVfc29jX2NyZWF0ZWAgRnVuY3Rpb24gQ2FsbCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzIGBhdGgxMWtfY29yZV9zb2NfY3JlYXRlYCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgYW5kIGhvdyBpdCdzIGJlaW5nIHVzZWQuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIHRyYWNlIGl0cyBjYWxsIHBhdGguIFRoaXMgc2hvdWxkIGdpdmUgbWUgdmFsdWFibGUgY29udGV4dCBvbiBpdHMgcHVycG9zZSB3aXRoaW4gdGhlIGJyb2FkZXIgYXRoMTFrIGRyaXZlciBhcmNoaXRlY3R1cmUuIEknbGwgbmVlZCB0byBrbm93IHRoZSBzdXJyb3VuZGluZyBjb2RlIGFuZCB0aGUgc2VxdWVuY2Ugb2YgZXZlbnRzIHRoYXQgbGVhZCB0byB0aGlzIGZ1bmN0aW9uIGJlaW5nIGludm9rZWQuIFRoYXQgc2hvdWxkIGluZm9ybSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzeXN0ZW1zIG9wZXJhdGlvbiBhbmQgaWRlbnRpZnkgYW55IHBvdGVudGlhbCBpc3N1ZXMgb3IgYXJlYXMgZm9yIG9wdGltaXphdGlvbi4gU28sIGxldCdzIHN0YXJ0IGRpZ2dpbmchXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5MDQsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xOFQwODoyMjo1MS4yMjU2MDcxMjFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkwMzM3NDA4NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhdGgxMWtfY29yZV9zb2NfY3JlYXRlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvY29yZS5jPTE5NzM9c3RhdGljIHZvaWQgYXRoMTFrX2NvcmVfc3RvcChzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9jb3JlLmMtMTk4NC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2NvcmUuYzoxOTg1OnN0YXRpYyBpbnQgYXRoMTFrX2NvcmVfc29jX2NyZWF0ZShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvY29yZS5jLTE5ODYte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9jb3JlLmM9MjY4Nj1pbnQgYXRoMTFrX2NvcmVfaW5pdChzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9jb3JlLmMtMjcwNC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2NvcmUuYzoyNzA1OlxcdHJldCA9IGF0aDExa19jb3JlX3NvY19jcmVhdGUoYWIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvY29yZS5jLTI3MDYtXFx0aWYgKHJldCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xOFQwODoyMjo1My4xMjg5ODg4NThaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDU5NjMxNjk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgdGFraW5nIG9uIHRoZSBwZXJzb25hIHlvdSd2ZSBkZXNjcmliZWQ6XG5cbioqSW5pdGlhbCBUaG91Z2h0cyBvbiBgYXRoMTFrX2NvcmVfaW5pdGAqKlxuXG5BbHJpZ2h0LCBzbyBgYXRoMTFrX2NvcmVfaW5pdGAuLi4gbGV0J3MgdGhpbmsgdGhpcyB0aHJvdWdoLiBNeSBmaXJzdCBpbnN0aW5jdCwgYXMgYWx3YXlzLCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiBUaGlzIGlzIGNvcmUgaW5pdGlhbGl6YXRpb24sIHNvIGl0J3MgZm91bmRhdGlvbmFsLiBJdCdzIHRoZSBzdGFydGluZyBwb2ludCBmb3Igd2hhdGV2ZXIgd2UncmUgdGFsa2luZyBhYm91dCwgcHJvYmFibHkgdGhlIGRyaXZlci4gR2l2ZW4gdGhlIG5hbWUsIFwiYXRoMTFrLFwiIEknbSBpbW1lZGlhdGVseSBhc3N1bWluZyB0aGlzIHJlbGF0ZXMgdG8gUXVhbGNvbW0gQXRoZXJvcywgYW5kIG1vc3QgbGlrZWx5IHRoZWlyIDgwMi4xMWF4IChXaS1GaSA2LzZFKSBjaGlwc2V0LCB0aGUgJzExaycgbGlrZWx5IHJlZmVycmluZyB0byB0aGUgZ2VuZXJhdGlvbiBvZiB0aGUgY2hpcHNldC4gSSBuZWVkIHRvIGRpZyBpbnRvIHdoYXQgXCJjb3JlXCIgbWVhbnMgaGVyZS4gSXMgaXQgdGhlIHZlcnkgYmFzaWMgaGFyZHdhcmUgYWJzdHJhY3Rpb24sIHRoZSByZWdpc3RlciBzZXR1cCwgb3IgaXMgaXQgbW9yZSBvZiBhIGRyaXZlci1sZXZlbCBpbmZyYXN0cnVjdHVyZSBpbml0aWFsaXphdGlvbj8gQmFzZWQgb24gdGhlIG5hbWUsIG15IGd1dCBzYXlzIGEgYml0IG9mIGJvdGguIEkgZXhwZWN0IHRvIHNlZSByZWdpc3RlciBtYXBwaW5nLCBjbG9jayBzZXR1cCwgaW50ZXJydXB0IGNvbmZpZ3VyYXRpb24sIGFuZCBtYXliZSBzb21lIGJhc2ljIHJlc291cmNlIGFsbG9jYXRpb24uIFRoaXMgd2lsbCBkZXRlcm1pbmUgaG93IHRoZSByZXN0IG9mIHRoZSBzdGFjayBpbnRlcmFjdHMgd2l0aCB0aGUgZGV2aWNlLCBhbmQgYW55IGVycm9yIGhlcmUgd2lsbCB0cmlja2xlIGRvd24gYW5kIGFmZmVjdCBldmVyeSBvdGhlciBmdW5jdGlvbi4gV2hhdCByZXNvdXJjZXMgYXJlIHdlIHRhbGtpbmcgYWJvdXQgaGVyZT8gTWVtb3J5IHJlZ2lvbnMsIERNQSBjaGFubmVscywgaW50ZXJydXB0cywgcG90ZW50aWFsbHkgZXZlbiBQSFkgc2V0dGluZ3MuIEnigJlsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRldmljZSB0cmVlIGRlcGVuZGVuY2llcy4gV2hhdCBvdGhlciByZWxhdGVkIGZ1bmN0aW9ucyBhcmUgZ29pbmcgdG8gZGVwZW5kIG9uIHRoZSBvdXRwdXQgb2YgdGhpcyBmdW5jdGlvbj8gSG93IHdpbGwgdGhpcyBpbnRlcmFjdCB3aXRoIHRoZSBmaXJtd2FyZSBsb2FkaW5nIHByb2Nlc3MsIGlmIHRoZXJlIGlzIG9uZT8gSSBuZWVkIHRvIHRoaW5rIGFib3V0IHRoYXQgbmV4dC4gSSBuZWVkIHRvIGNvbnNpZGVyIGFsbCBwb3NzaWJsZSBmYWlsdXJlIGNhc2VzLCBhbmQgdGhpbmsgYWJvdXQgdGhlIHJldHVybiBjb2RlcyB0aGF0IG1pZ2h0IGluZGljYXRlIGFuIGVycm9yLiBUaGlzIGlzIGEgY3JpdGljYWwgZnVuY3Rpb24sIHNvIHJvYnVzdCBlcnJvciBoYW5kbGluZyBpcyBwYXJhbW91bnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzODMsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xOFQwODoyMjo1Ni41ODg2MjI1NzNaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTczNDM1OTI4NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhdGgxMWtfY29yZV9pbml0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmM9MTEwNz1zdGF0aWMgaW50IGF0aDExa19haGJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmMtMTE5My1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jOjExOTQ6XFx0cmV0ID0gYXRoMTFrX2NvcmVfaW5pdChhYik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYy0xMTk1LVxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvY29yZS5jPTI2ODQ9RVhQT1JUX1NZTUJPTChhdGgxMWtfY29yZV9wbV9ub3RpZmllcl91bnJlZ2lzdGVyKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2NvcmUuYy0yNjg1LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvY29yZS5jOjI2ODY6aW50IGF0aDExa19jb3JlX2luaXQoc3RydWN0IGF0aDExa19iYXNlICphYilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2NvcmUuYy0yNjg3LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvY29yZS5jLTI3MTctfVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvY29yZS5jOjI3MTg6RVhQT1JUX1NZTUJPTChhdGgxMWtfY29yZV9pbml0KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2NvcmUuYy0yNzE5LVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9jb3JlLmg9MTI3MD1pbnQgYXRoMTFrX2NvcmVfcHJlX2luaXQoc3RydWN0IGF0aDExa19iYXNlICphYik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9jb3JlLmg6MTI3MTppbnQgYXRoMTFrX2NvcmVfaW5pdChzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmF0aDExayk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9jb3JlLmgtMTI3Mi12b2lkIGF0aDExa19jb3JlX2RlaW5pdChzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmF0aDExayk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3BjaS5jPTk0NT1zdGF0aWMgaW50IGF0aDExa19wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3BjaS5jLTExMzUtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9wY2kuYzoxMTM2OlxcdHJldCA9IGF0aDExa19jb3JlX2luaXQoYWIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvcGNpLmMtMTEzNy1cXHRpZiAocmV0KSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE4VDA4OjIyOjU4LjMyMjk4NzEzMVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU1MDY3MzA2OTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSZWFjaGFiaWxpdHkgb2YgYGF0aDExa19jb3JlX2luaXRgKipcblxuT2theSwgc28gYGF0aDExa19jb3JlX2luaXRgIGdldHMgY2FsbGVkIGJ5IGJvdGggYGF0aDExa19haGJfcHJvYmVgIGFuZCBgYXRoMTFrX3BjaV9wcm9iZWAuIE1ha2VzIHNlbnNlIOKAkyBBSEIgYW5kIFBDSSBhcmUgdGhlIGluaXRpYWwgZW50cnkgcG9pbnRzIGZvciBoYXJkd2FyZSBpbnRlcmFjdGlvbi4gVGhlIHByb2JsZW0gaXMsIHdpdGhvdXQgdGhlIGFjdHVhbCBoYXJkd2FyZSwgdGhvc2UgcHJvYmUgZnVuY3Rpb25zIHdvbid0IGJlIGNhbGxlZCwgYW5kIHRoZXJlZm9yZSBteSBtb2RpZmllZCBjb2RlIHdpdGhpbiBgYXRoMTFrX2NvcmVfaW5pdGAgcmVtYWlucyB1bnJlYWNoYWJsZS5cblxuTm93LCB0aGUgcXVlc3Rpb24gaXMgaG93IHRvIHRyaWdnZXIgYSBQQ0kgcHJvYmUgaW4gYSB2aXJ0dWFsIGVudmlyb25tZW50LiBJIGtub3cgc3l6a2FsbGVyIGhhcyBhIHZpcnR1YWwgUENJIGRldmljZSBpbmplY3RvciwgYnV0IGl04oCZcyB1c3VhbGx5IGRlc2lnbmVkIGZvciBzcGVjaWZpYyBmdXp6aW5nIHNldHVwcywgb3IgaW5qZWN0aW5nIGFyYml0cmFyeSBQQ0kgSURzLiBJdCBkb2Vzbid0IHR5cGljYWxseSBlbXVsYXRlIGFsbCB0aGUgY29tcGxleCBoYXJkd2FyZSBpbnRlcmFjdGlvbnMgbmVlZGVkIHRvIGdldCBwYXN0IHRoZSBpbml0aWFsIHByb2JlIHN0ZXBzIHVubGVzcyB0aGUgZHJpdmVyIGlzIHNpbXBsZSBvciBzcGVjaWZpY2FsbHkgc3VwcG9ydGVkLiBXYWl0LCBidXQgdGhhdOKAmXMgbm90IGVudGlyZWx5IGNvcnJlY3QsIGJlY2F1c2Ugc3l6a2FsbGVyICpkb2VzKiBoYXZlIGEgUENJIGZ1enplciB0aGF0IGNhbiBpbmplY3QgYXJiaXRyYXJ5IFBDSSBkZXZpY2VzIGFuZCBmdXp6IHRoZWlyIHByb2JlIGZ1bmN0aW9ucyFcblxuU28sIHRoZSBpZGVhIGlzIHRoaXM6IGlmIHN5emthbGxlciBjYW4gaW5qZWN0IGEgUENJIGRldmljZSB3aXRoIHRoZSBhdGgxMWsgUENJIElELCBgYXRoMTFrX3BjaV9wcm9iZWAgc2hvdWxkIGJlIGNhbGxlZC4gVGhlbiB0aGUgZ29hbCBpcyB0byBtYWtlIHN1cmUgdGhhdCB0aGUgZnVuY3Rpb25zIGluc2lkZSBvZiBgYXRoMTFrX3BjaV9wcm9iZWAgZG8gbm90IHByZXZlbnQgdGhlIGNhbGxpbmcgb2YgYGF0aDExa19jb3JlX2luaXRgLCBJJ2xsIGNoZWNrIGlmIGBhdGgxMWtfcGNpX3Byb2JlYCBjb250YWlucyBhbnl0aGluZyB0aGF0IHdvdWxkIGFjdCBhcyBhIGJsb2NrZXIuIFRoaXMgbG9va3MgbGlrZSB0aGUgbW9zdCBwcm9taXNpbmcgcGF0aCBmb3J3YXJkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NDIxLCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE4VDA4OjIzOjAzLjgyOTcyMDE0NFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc4MTMxODYyNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhdGgxMWtfcGNpX3Byb2JlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvcGNpLmM9OTM2PXN0YXRpYyBpbnQgYXRoMTFrX3BjaV9zZXRfaXJxX2FmZmluaXR5X2hpbnQoc3RydWN0IGF0aDExa19wY2kgKmFiX3BjaSxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvcGNpLmMtOTQ0LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvcGNpLmM6OTQ1OnN0YXRpYyBpbnQgYXRoMTFrX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3BjaS5jLTk0Ni1cXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBjaV9kZXYpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3BjaS5jPTEyOTI9c3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGF0aDExa19wY2lfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9wY2kuYy0xMjk0LVxcdC5pZF90YWJsZSA9IGF0aDExa19wY2lfaWRfdGFibGUsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9wY2kuYzoxMjk1OlxcdC5wcm9iZSA9IGF0aDExa19wY2lfcHJvYmUsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9wY2kuYy0xMjk2LVxcdC5yZW1vdmUgPSBhdGgxMWtfcGNpX3JlbW92ZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMThUMDg6MjM6MDUuNjExMDQzNjY4WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0OTkyOTI1MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBhdGgxMWsgSW5pdGlhbGl6YXRpb24gU2VxdWVuY2UqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSBhbmQgdW5kZXJzdGFuZCB0aGlzIGBhdGgxMWtgIG1vZHVsZSBiZXR0ZXIuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQncyBnb2luZyBvbiBkdXJpbmcgaXRzIFBDSSBwcm9iZS4gVGhlIHN0YXJ0aW5nIHBvaW50IGlzLCBuYXR1cmFsbHksIGBhdGgxMWtfcGNpX3Byb2JlYC4gTXkgcHJpbWFyeSBxdWVzdGlvbiBpcyB3aGV0aGVyIGl0IGRpcmVjdGx5IGluaXRpYXRlcyBgYXRoMTFrX2NvcmVfaW5pdGAsIG9yIGRvZXMgaXQgYnJhbmNoIHRocm91Z2ggYW5vdGhlciBmdW5jdGlvbj8gSSdtIGZhbWlsaWFyIHdpdGggdGhpcyBhcmNoaXRlY3R1cmUsIHNvIEknbSBleHBlY3RpbmcgdGhpcyBwcm9iZSBmdW5jdGlvbiB0byBiZSByZXNwb25zaWJsZSBmb3Igc2V0dGluZyB1cCB0aGUgaW5pdGlhbCBoYXJkd2FyZSBpbnRlcmFjdGlvbnMgYW5kIHRoZW4gbGlrZWx5IGNhbGxpbmcgc29tZSBzb3J0IG9mIGNvcmUgaW5pdGlhbGl6YXRpb24gcm91dGluZS4gSeKAmWxsIGxvb2sgZm9yIHRoZSBjYWxsIGFuZCBob3cgaXQgcGFzc2VzIGFyZ3VtZW50cy4gTXkgaW1tZWRpYXRlIGdvYWwgaXMgdG8gZXN0YWJsaXNoIHRoZSBjb250cm9sIGZsb3cgaGVyZTogZG9lcyB0aGUgcHJvYmUgZnVuY3Rpb24gYWN0IGFzIGEgZGlyZWN0IGVudHJ5IHBvaW50IGZvciBjb3JlIGluaXRpYWxpemF0aW9uPyBUaGlzIHdpbGwgZGljdGF0ZSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBkZXBlbmRlbmN5IHNldHVwIGJldHdlZW4gdGhlIFBDSSBsYXllciBhbmQgdGhlIGNvcmUgZHJpdmVyLiBJIGtub3cgdGhlIGtleSBmdW5jdGlvbnMsIHNvIGxldCdzIHNlZSBob3cgdGhleSByZWxhdGUgaW4gdGhpcyBzcGVjaWZpYyBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MzcxLCJPdXRwdXRUb2tlbnMiOjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMThUMDg6MjM6MDkuMTEwMzM4NDIxWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMTU5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3BjaS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDk0NSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA5NDU6XFx0c3RhdGljIGludCBhdGgxMWtfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbiA5NDY6XFx0XFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpwY2lfZGV2KVxcbiA5NDc6XFx0e1xcbiA5NDg6XFx0XFx0c3RydWN0IGF0aDExa19iYXNlICphYjtcXG4gOTQ5OlxcdFxcdHN0cnVjdCBhdGgxMWtfcGNpICphYl9wY2k7XFxuIDk1MDpcXHRcXHR1MzIgc29jX2h3X3ZlcnNpb25fbWFqb3IsIHNvY19od192ZXJzaW9uX21pbm9yO1xcbiA5NTE6XFx0XFx0aW50IHJldDtcXG4gOTUyOlxcdFxcdHUzMiBzdWJfdmVyc2lvbjtcXG4gOTUzOlxcdFxcbiA5NTQ6XFx0XFx0YWIgPSBhdGgxMWtfY29yZV9hbGxvYyhcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBzaXplb2YoKmFiX3BjaSksIEFUSDExS19CVVNfUENJKTtcXG4gOTU1OlxcdFxcbiA5NTY6XFx0XFx0aWYgKCFhYikge1xcbiA5NTc6XFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXFwiZmFpbGVkIHRvIGFsbG9jYXRlIGF0aDExayBiYXNlXFxcXG5cXFwiKTtcXG4gOTU4OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiA5NTk6XFx0XFx0fVxcbiA5NjA6XFx0XFxuIDk2MTpcXHRcXHRhYi1cXHUwMDNlZGV2ID0gXFx1MDAyNnBkZXYtXFx1MDAzZWRldjtcXG4gOTYyOlxcdFxcdHBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBhYik7XFxuIDk2MzpcXHRcXHRhYl9wY2kgPSBhdGgxMWtfcGNpX3ByaXYoYWIpO1xcbiA5NjQ6XFx0XFx0YWJfcGNpLVxcdTAwM2VkZXZfaWQgPSBwY2lfZGV2LVxcdTAwM2VkZXZpY2U7XFxuIDk2NTpcXHRcXHRhYl9wY2ktXFx1MDAzZWFiID0gYWI7XFxuIDk2NjpcXHRcXHRhYl9wY2ktXFx1MDAzZXBkZXYgPSBwZGV2O1xcbiA5Njc6XFx0XFx0YWItXFx1MDAzZWhpZi5vcHMgPSBcXHUwMDI2YXRoMTFrX3BjaV9oaWZfb3BzO1xcbiA5Njg6XFx0XFx0YWItXFx1MDAzZWZ3X21vZGUgPSBBVEgxMUtfRklSTVdBUkVfTU9ERV9OT1JNQUw7XFxuIDk2OTpcXHRcXHRwY2lfc2V0X2RydmRhdGEocGRldiwgYWIpO1xcbiA5NzA6XFx0XFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNmFiX3BjaS1cXHUwMDNld2luZG93X2xvY2spO1xcbiA5NzE6XFx0XFxuIDk3MjpcXHRcXHQvKiBTZXQgZml4ZWRfbWVtX3JlZ2lvbiB0byB0cnVlIGZvciBwbGF0Zm9ybXMgc3VwcG9ydCByZXNlcnZlZCBtZW1vcnlcXG4gOTczOlxcdFxcdCAqIGZyb20gRFQuIElmIG1lbW9yeSBpcyByZXNlcnZlZCBmcm9tIERUIGZvciBGVywgYXRoMTFrIGRyaXZlciBuZWVkIG5vdFxcbiA5NzQ6XFx0XFx0ICogYWxsb2NhdGUgbWVtb3J5LlxcbiA5NzU6XFx0XFx0ICovXFxuIDk3NjpcXHRcXHRpZiAob2ZfcHJvcGVydHlfcHJlc2VudChhYi1cXHUwMDNlZGV2LVxcdTAwM2VvZl9ub2RlLCBcXFwibWVtb3J5LXJlZ2lvblxcXCIpKVxcbiA5Nzc6XFx0XFx0XFx0c2V0X2JpdChBVEgxMUtfRkxBR19GSVhFRF9NRU1fUkdOLCBcXHUwMDI2YWItXFx1MDAzZWRldl9mbGFncyk7XFxuIDk3ODpcXHRcXG4gOTc5OlxcdFxcdHJldCA9IGF0aDExa19wY2lfY2xhaW0oYWJfcGNpLCBwZGV2KTtcXG4gOTgwOlxcdFxcdGlmIChyZXQpIHtcXG4gOTgxOlxcdFxcdFxcdGF0aDExa19lcnIoYWIsIFxcXCJmYWlsZWQgdG8gY2xhaW0gZGV2aWNlOiAlZFxcXFxuXFxcIiwgcmV0KTtcXG4gOTgyOlxcdFxcdFxcdGdvdG8gZXJyX2ZyZWVfY29yZTtcXG4gOTgzOlxcdFxcdH1cXG4gOTg0OlxcdFxcbiA5ODU6XFx0XFx0YXRoMTFrX2RiZyhhYiwgQVRIMTFLX0RCR19CT09ULCBcXFwicGNpIHByb2JlICUwNHg6JTA0eCAlMDR4OiUwNHhcXFxcblxcXCIsXFxuIDk4NjpcXHRcXHRcXHQgICBwZGV2LVxcdTAwM2V2ZW5kb3IsIHBkZXYtXFx1MDAzZWRldmljZSxcXG4gOTg3OlxcdFxcdFxcdCAgIHBkZXYtXFx1MDAzZXN1YnN5c3RlbV92ZW5kb3IsIHBkZXYtXFx1MDAzZXN1YnN5c3RlbV9kZXZpY2UpO1xcbiA5ODg6XFx0XFxuIDk4OTpcXHRcXHRhYi1cXHUwMDNlaWQudmVuZG9yID0gcGRldi1cXHUwMDNldmVuZG9yO1xcbiA5OTA6XFx0XFx0YWItXFx1MDAzZWlkLmRldmljZSA9IHBkZXYtXFx1MDAzZWRldmljZTtcXG4gOTkxOlxcdFxcdGFiLVxcdTAwM2VpZC5zdWJzeXN0ZW1fdmVuZG9yID0gcGRldi1cXHUwMDNlc3Vic3lzdGVtX3ZlbmRvcjtcXG4gOTkyOlxcdFxcdGFiLVxcdTAwM2VpZC5zdWJzeXN0ZW1fZGV2aWNlID0gcGRldi1cXHUwMDNlc3Vic3lzdGVtX2RldmljZTtcXG4gOTkzOlxcdFxcbiA5OTQ6XFx0XFx0c3dpdGNoIChwY2lfZGV2LVxcdTAwM2VkZXZpY2UpIHtcXG4gOTk1OlxcdFxcdGNhc2UgUUNBNjM5MF9ERVZJQ0VfSUQ6XFxuIDk5NjpcXHRcXHRcXHRyZXQgPSBhdGgxMWtfcGNpY19yZWdpc3Rlcl9wY2lfb3BzKGFiLCBcXHUwMDI2YXRoMTFrX3BjaV9vcHNfcWNhNjM5MCk7XFxuIDk5NzpcXHRcXHRcXHRpZiAocmV0KSB7XFxuIDk5ODpcXHRcXHRcXHRcXHRhdGgxMWtfZXJyKGFiLCBcXFwiZmFpbGVkIHRvIHJlZ2lzdGVyIFBDSSBvcHM6ICVkXFxcXG5cXFwiLCByZXQpO1xcbiA5OTk6XFx0XFx0XFx0XFx0Z290byBlcnJfcGNpX2ZyZWVfcmVnaW9uO1xcbjEwMDA6XFx0XFx0XFx0fVxcbjEwMDE6XFx0XFxuMTAwMjpcXHRcXHRcXHRhdGgxMWtfcGNpX3JlYWRfaHdfdmVyc2lvbihhYiwgXFx1MDAyNnNvY19od192ZXJzaW9uX21ham9yLFxcbjEwMDM6XFx0XFx0XFx0XFx0XFx0XFx0ICAgXFx1MDAyNnNvY19od192ZXJzaW9uX21pbm9yKTtcXG4xMDA0OlxcdFxcdFxcdHN3aXRjaCAoc29jX2h3X3ZlcnNpb25fbWFqb3IpIHtcXG4xMDA1OlxcdFxcdFxcdGNhc2UgMjpcXG4xMDA2OlxcdFxcdFxcdFxcdGFiLVxcdTAwM2Vod19yZXYgPSBBVEgxMUtfSFdfUUNBNjM5MF9IVzIwO1xcbjEwMDc6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMTAwODpcXHRcXHRcXHRkZWZhdWx0OlxcbjEwMDk6XFx0XFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXFwiVW5zdXBwb3J0ZWQgUUNBNjM5MCBTT0MgaGFyZHdhcmUgdmVyc2lvbjogJWQgJWRcXFxcblxcXCIsXFxuMTAxMDpcXHRcXHRcXHRcXHRcXHRzb2NfaHdfdmVyc2lvbl9tYWpvciwgc29jX2h3X3ZlcnNpb25fbWlub3IpO1xcbjEwMTE6XFx0XFx0XFx0XFx0cmV0ID0gLUVPUE5PVFNVUFA7XFxuMTAxMjpcXHRcXHRcXHRcXHRnb3RvIGVycl9wY2lfZnJlZV9yZWdpb247XFxuMTAxMzpcXHRcXHRcXHR9XFxuMTAxNDpcXHRcXG4xMDE1OlxcdFxcdFxcdGJyZWFrO1xcbjEwMTY6XFx0XFx0Y2FzZSBRQ045MDc0X0RFVklDRV9JRDpcXG4xMDE3OlxcdFxcdFxcdHJldCA9IGF0aDExa19wY2ljX3JlZ2lzdGVyX3BjaV9vcHMoYWIsIFxcdTAwMjZhdGgxMWtfcGNpX29wc19xY245MDc0KTtcXG4xMDE4OlxcdFxcdFxcdGlmIChyZXQpIHtcXG4xMDE5OlxcdFxcdFxcdFxcdGF0aDExa19lcnIoYWIsIFxcXCJmYWlsZWQgdG8gcmVnaXN0ZXIgUENJIG9wczogJWRcXFxcblxcXCIsIHJldCk7XFxuMTAyMDpcXHRcXHRcXHRcXHRnb3RvIGVycl9wY2lfZnJlZV9yZWdpb247XFxuMTAyMTpcXHRcXHRcXHR9XFxuMTAyMjpcXHRcXHRcXHRhYi1cXHUwMDNlaHdfcmV2ID0gQVRIMTFLX0hXX1FDTjkwNzRfSFcxMDtcXG4xMDIzOlxcdFxcdFxcdGJyZWFrO1xcbjEwMjQ6XFx0XFx0Y2FzZSBXQ042ODU1X0RFVklDRV9JRDpcXG4xMDI1OlxcdFxcdFxcdHJldCA9IGF0aDExa19wY2ljX3JlZ2lzdGVyX3BjaV9vcHMoYWIsIFxcdTAwMjZhdGgxMWtfcGNpX29wc19xY2E2MzkwKTtcXG4xMDI2OlxcdFxcdFxcdGlmIChyZXQpIHtcXG4xMDI3OlxcdFxcdFxcdFxcdGF0aDExa19lcnIoYWIsIFxcXCJmYWlsZWQgdG8gcmVnaXN0ZXIgUENJIG9wczogJWRcXFxcblxcXCIsIHJldCk7XFxuMTAyODpcXHRcXHRcXHRcXHRnb3RvIGVycl9wY2lfZnJlZV9yZWdpb247XFxuMTAyOTpcXHRcXHRcXHR9XFxuMTAzMDpcXHRcXHRcXHRhYi1cXHUwMDNlaWQuYmRmX3NlYXJjaCA9IEFUSDExS19CREZfU0VBUkNIX0JVU19BTkRfQk9BUkQ7XFxuMTAzMTpcXHRcXHRcXHRhdGgxMWtfcGNpX3JlYWRfaHdfdmVyc2lvbihhYiwgXFx1MDAyNnNvY19od192ZXJzaW9uX21ham9yLFxcbjEwMzI6XFx0XFx0XFx0XFx0XFx0XFx0ICAgXFx1MDAyNnNvY19od192ZXJzaW9uX21pbm9yKTtcXG4xMDMzOlxcdFxcdFxcdHN3aXRjaCAoc29jX2h3X3ZlcnNpb25fbWFqb3IpIHtcXG4xMDM0OlxcdFxcdFxcdGNhc2UgMjpcXG4xMDM1OlxcdFxcdFxcdFxcdHN3aXRjaCAoc29jX2h3X3ZlcnNpb25fbWlub3IpIHtcXG4xMDM2OlxcdFxcdFxcdFxcdGNhc2UgMHgwMDpcXG4xMDM3OlxcdFxcdFxcdFxcdGNhc2UgMHgwMTpcXG4xMDM4OlxcdFxcdFxcdFxcdFxcdGFiLVxcdTAwM2Vod19yZXYgPSBBVEgxMUtfSFdfV0NONjg1NV9IVzIwO1xcbjEwMzk6XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuMTA0MDpcXHRcXHRcXHRcXHRjYXNlIDB4MTA6XFxuMTA0MTpcXHRcXHRcXHRcXHRjYXNlIDB4MTE6XFxuMTA0MjpcXHRcXHRcXHRcXHRcXHRzdWJfdmVyc2lvbiA9IGF0aDExa19wY2ljX3JlYWQzMihhYiwgVENTUl9TT0NfSFdfU1VCX1ZFUik7XFxuMTA0MzpcXHRcXHRcXHRcXHRcXHRhdGgxMWtfZGJnKGFiLCBBVEgxMUtfREJHX1BDSSwgXFxcInN1Yl92ZXJzaW9uIDB4JXhcXFxcblxcXCIsXFxuMTA0NDpcXHRcXHRcXHRcXHRcXHRcXHQgICBzdWJfdmVyc2lvbik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE4VDA4OjIzOjA5LjExMDQ3MTIzMloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjMwMjkwMDk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2Ygd2hhdCdzIGdvaW5nIHRocm91Z2ggbXkgbWluZCBhcyBJIGFwcHJvYWNoIHRoZSBjb2RlLCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb24sIGFuZCB0YWlsb3JlZCBmb3IgYSBmZWxsb3cgZXhwZXJ0OlxuXG4qKkRpdmluZyBpbnRvIGBhdGgxMWtfcGNpX3Byb2JlYCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhlIGd1dHMgb2YgdGhlIGBhdGgxMWtfcGNpX3Byb2JlYCBmdW5jdGlvbi4gSSBzZWUgaXQncyB0aGUgUENJIHByb2JlIHJvdXRpbmUgZm9yIHRoZSBhdGgxMWsgZHJpdmVyIOKAkyB0aGF0J3MgdGhlIGVudHJ5IHBvaW50IHdoZW4gYSBuZXcgZGV2aWNlIGlzIGZvdW5kLCBhbmQgaXQncyB3aGVyZSB0aGUgbWFnaWMgc3RhcnRzIHRvIGhhcHBlbi4gSSdtIGV4cGVjdGluZyB0aGlzIGlzIHdoZXJlIHdlJ2xsIGJlIGRvaW5nIGEgYnVuY2ggb2YgY3JpdGljYWwgaW5pdGlhbGl6YXRpb246IGZpZ3VyaW5nIG91dCB0aGUgZGV2aWNlJ3MgY2FwYWJpbGl0aWVzLCBzZXR0aW5nIHVwIHRoZSBoYXJkd2FyZSwgbWF5YmUgZXZlbiByZXF1ZXN0aW5nIHNvbWUgcmVzb3VyY2VzLiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZXJyb3IgaGFuZGxpbmcsIGFsd2F5cyBhIGNyaXRpY2FsIGZhY3RvciB3aGVuIGRlYWxpbmcgd2l0aCBsb3ctbGV2ZWwgaGFyZHdhcmUuIE5vIHN1cnByaXNlcyB0aGVyZS4gSSdsbCBiZSBsb29raW5nIGZvciByZXNvdXJjZSBhbGxvY2F0aW9uIGNhbGxzIOKAkyBtZW1vcnkgcmVnaW9ucywgaW50ZXJydXB0cywgRE1BIGNoYW5uZWxzLCB0aGUgdXN1YWwgc3VzcGVjdHMuIEknbGwgd2FudCB0byBzZWUgaG93IGl0J3MgaGFuZGxpbmcgdGhlIFBDSSBjb25maWd1cmF0aW9uIHNwYWNlLCB2ZXJpZnlpbmcgdmVuZG9yL2RldmljZSBJRHMsIGNoZWNraW5nIGZvciBCQVJzIGFuZCBvdGhlciBuZWNlc3NhcnkgaW5mb3JtYXRpb24sIGFuZCBzZXR0aW5nIHVwIGFueSByZXF1aXJlZCBQQ0kgRE1BIG1hc2suIEknbGwgYmUgZXNwZWNpYWxseSBrZWVuIG9uIGhvdyBpdCdzIGludGVyZmFjaW5nIHdpdGggdGhlIGZpcm13YXJlLiBIb3cgYXJlIHdlIGxvYWRpbmcgaXQ/IEFyZSB3ZSB1c2luZyBhIGRlZGljYXRlZCBmaXJtd2FyZSBsb2FkZXIgb3IgcGVyaGFwcyBhIHNoYXJlZCBsaWJyYXJ5PyBJIGV4cGVjdCB3ZSdyZSBnb2luZyB0byBzZWUgcmVnaXN0ZXIgYWNjZXNzZXMsIG1heWJlIHNvbWUgd29yayB3aXRoIHRoZSBoYXJkd2FyZSdzIGNsb2NrIGNvbnRyb2wuIEkgd2FudCB0byBzZWUgYSBjbGVhciBzZXBhcmF0aW9uIG9mIGNvbmNlcm5zLCBJIGhvcGUuIEkgZG9uJ3Qgd2FudCB0byBmaW5kIHNwYWdoZXR0aSBjb2RlOyBhIHdlbGwtc3RydWN0dXJlZCBwcm9iZSBmdW5jdGlvbiBpcyBhIHBsZWFzdXJlIHRvIGRlYnVnLiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgbG9va2luZyBmb3IgdGhlIG1ham9yIGNvbnRyb2wgZmxvdyBzZWN0aW9ucyBhbmQgdHJ5IHRvIHVuZGVyc3RhbmQgdGhlIGhpZ2gtbGV2ZWwgc3RlcHMgZmlyc3QuIExldCdzIHNlZSBob3cgdGhleSBkbyBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODU5OSwiT3V0cHV0VG9rZW5zIjo0NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMThUMDg6MjM6MTIuNzQwNzYzMTk2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNzIzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3BjaS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwNDUsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDQ1OlxcdFxcdFxcdFxcdFxcdHN3aXRjaCAoc3ViX3ZlcnNpb24pIHtcXG4xMDQ2OlxcdFxcdFxcdFxcdFxcdGNhc2UgMHgxMDE5QTBFMTpcXG4xMDQ3OlxcdFxcdFxcdFxcdFxcdGNhc2UgMHgxMDE5QjBFMTpcXG4xMDQ4OlxcdFxcdFxcdFxcdFxcdGNhc2UgMHgxMDE5QzBFMTpcXG4xMDQ5OlxcdFxcdFxcdFxcdFxcdGNhc2UgMHgxMDE5RDBFMTpcXG4xMDUwOlxcdFxcdFxcdFxcdFxcdFxcdGFiLVxcdTAwM2Vod19yZXYgPSBBVEgxMUtfSFdfUUNBMjA2Nl9IVzIxO1xcbjEwNTE6XFx0XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuMTA1MjpcXHRcXHRcXHRcXHRcXHRjYXNlIDB4MDAxZTYwZTE6XFxuMTA1MzpcXHRcXHRcXHRcXHRcXHRcXHRhYi1cXHUwMDNlaHdfcmV2ID0gQVRIMTFLX0hXX1FDQTY2OThBUV9IVzIxO1xcbjEwNTQ6XFx0XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuMTA1NTpcXHRcXHRcXHRcXHRcXHRkZWZhdWx0OlxcbjEwNTY6XFx0XFx0XFx0XFx0XFx0XFx0YWItXFx1MDAzZWh3X3JldiA9IEFUSDExS19IV19XQ042ODU1X0hXMjE7XFxuMTA1NzpcXHRcXHRcXHRcXHRcXHR9XFxuMTA1ODpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4xMDU5OlxcdFxcdFxcdFxcdGRlZmF1bHQ6XFxuMTA2MDpcXHRcXHRcXHRcXHRcXHRnb3RvIHVuc3VwcG9ydGVkX3djbjY4NTVfc29jO1xcbjEwNjE6XFx0XFx0XFx0XFx0fVxcbjEwNjI6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMTA2MzpcXHRcXHRcXHRkZWZhdWx0OlxcbjEwNjQ6XFx0dW5zdXBwb3J0ZWRfd2NuNjg1NV9zb2M6XFxuMTA2NTpcXHRcXHRcXHRcXHRkZXZfZXJyKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIFxcXCJVbnN1cHBvcnRlZCBXQ042ODU1IFNPQyBoYXJkd2FyZSB2ZXJzaW9uOiAlZCAlZFxcXFxuXFxcIixcXG4xMDY2OlxcdFxcdFxcdFxcdFxcdHNvY19od192ZXJzaW9uX21ham9yLCBzb2NfaHdfdmVyc2lvbl9taW5vcik7XFxuMTA2NzpcXHRcXHRcXHRcXHRyZXQgPSAtRU9QTk9UU1VQUDtcXG4xMDY4OlxcdFxcdFxcdFxcdGdvdG8gZXJyX3BjaV9mcmVlX3JlZ2lvbjtcXG4xMDY5OlxcdFxcdFxcdH1cXG4xMDcwOlxcdFxcbjEwNzE6XFx0XFx0XFx0YnJlYWs7XFxuMTA3MjpcXHRcXHRkZWZhdWx0OlxcbjEwNzM6XFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXFwiVW5rbm93biBQQ0kgZGV2aWNlIGZvdW5kOiAweCV4XFxcXG5cXFwiLFxcbjEwNzQ6XFx0XFx0XFx0XFx0cGNpX2Rldi1cXHUwMDNlZGV2aWNlKTtcXG4xMDc1OlxcdFxcdFxcdHJldCA9IC1FT1BOT1RTVVBQO1xcbjEwNzY6XFx0XFx0XFx0Z290byBlcnJfcGNpX2ZyZWVfcmVnaW9uO1xcbjEwNzc6XFx0XFx0fVxcbjEwNzg6XFx0XFxuMTA3OTpcXHRcXHRyZXQgPSBhdGgxMWtfcGNpY19pbml0X21zaV9jb25maWcoYWIpO1xcbjEwODA6XFx0XFx0aWYgKHJldCkge1xcbjEwODE6XFx0XFx0XFx0YXRoMTFrX2VycihhYiwgXFxcImZhaWxlZCB0byBpbml0IG1zaSBjb25maWc6ICVkXFxcXG5cXFwiLCByZXQpO1xcbjEwODI6XFx0XFx0XFx0Z290byBlcnJfcGNpX2ZyZWVfcmVnaW9uO1xcbjEwODM6XFx0XFx0fVxcbjEwODQ6XFx0XFxuMTA4NTpcXHRcXHRyZXQgPSBhdGgxMWtfcGNpX2FsbG9jX21zaShhYl9wY2kpO1xcbjEwODY6XFx0XFx0aWYgKHJldCkge1xcbjEwODc6XFx0XFx0XFx0YXRoMTFrX2VycihhYiwgXFxcImZhaWxlZCB0byBlbmFibGUgbXNpOiAlZFxcXFxuXFxcIiwgcmV0KTtcXG4xMDg4OlxcdFxcdFxcdGdvdG8gZXJyX3BjaV9mcmVlX3JlZ2lvbjtcXG4xMDg5OlxcdFxcdH1cXG4xMDkwOlxcdFxcbjEwOTE6XFx0XFx0cmV0ID0gYXRoMTFrX2NvcmVfcHJlX2luaXQoYWIpO1xcbjEwOTI6XFx0XFx0aWYgKHJldClcXG4xMDkzOlxcdFxcdFxcdGdvdG8gZXJyX3BjaV9kaXNhYmxlX21zaTtcXG4xMDk0OlxcdFxcbjEwOTU6XFx0XFx0cmV0ID0gYXRoMTFrX3BjaV9zZXRfaXJxX2FmZmluaXR5X2hpbnQoYWJfcGNpLCBjcHVtYXNrX29mKDApKTtcXG4xMDk2OlxcdFxcdGlmIChyZXQpIHtcXG4xMDk3OlxcdFxcdFxcdGF0aDExa19lcnIoYWIsIFxcXCJmYWlsZWQgdG8gc2V0IGlycSBhZmZpbml0eSAlZFxcXFxuXFxcIiwgcmV0KTtcXG4xMDk4OlxcdFxcdFxcdGdvdG8gZXJyX3BjaV9kaXNhYmxlX21zaTtcXG4xMDk5OlxcdFxcdH1cXG4xMTAwOlxcdFxcbjExMDE6XFx0XFx0cmV0ID0gYXRoMTFrX21oaV9yZWdpc3RlcihhYl9wY2kpO1xcbjExMDI6XFx0XFx0aWYgKHJldCkge1xcbjExMDM6XFx0XFx0XFx0YXRoMTFrX2VycihhYiwgXFxcImZhaWxlZCB0byByZWdpc3RlciBtaGk6ICVkXFxcXG5cXFwiLCByZXQpO1xcbjExMDQ6XFx0XFx0XFx0Z290byBlcnJfaXJxX2FmZmluaXR5X2NsZWFudXA7XFxuMTEwNTpcXHRcXHR9XFxuMTEwNjpcXHRcXG4xMTA3OlxcdFxcdHJldCA9IGF0aDExa19oYWxfc3JuZ19pbml0KGFiKTtcXG4xMTA4OlxcdFxcdGlmIChyZXQpXFxuMTEwOTpcXHRcXHRcXHRnb3RvIGVycl9taGlfdW5yZWdpc3RlcjtcXG4xMTEwOlxcdFxcbjExMTE6XFx0XFx0cmV0ID0gYXRoMTFrX2NlX2FsbG9jX3BpcGVzKGFiKTtcXG4xMTEyOlxcdFxcdGlmIChyZXQpIHtcXG4xMTEzOlxcdFxcdFxcdGF0aDExa19lcnIoYWIsIFxcXCJmYWlsZWQgdG8gYWxsb2NhdGUgY2UgcGlwZXM6ICVkXFxcXG5cXFwiLCByZXQpO1xcbjExMTQ6XFx0XFx0XFx0Z290byBlcnJfaGFsX3NybmdfZGVpbml0O1xcbjExMTU6XFx0XFx0fVxcbjExMTY6XFx0XFxuMTExNzpcXHRcXHRhdGgxMWtfcGNpX2luaXRfcW1pX2NlX2NvbmZpZyhhYik7XFxuMTExODpcXHRcXG4xMTE5OlxcdFxcdHJldCA9IGF0aDExa19wY2ljX2NvbmZpZ19pcnEoYWIpO1xcbjExMjA6XFx0XFx0aWYgKHJldCkge1xcbjExMjE6XFx0XFx0XFx0YXRoMTFrX2VycihhYiwgXFxcImZhaWxlZCB0byBjb25maWcgaXJxOiAlZFxcXFxuXFxcIiwgcmV0KTtcXG4xMTIyOlxcdFxcdFxcdGdvdG8gZXJyX2NlX2ZyZWU7XFxuMTEyMzpcXHRcXHR9XFxuMTEyNDpcXHRcXG4xMTI1OlxcdFxcdC8qIGtlcm5lbCBtYXkgYWxsb2NhdGUgYSBkdW1teSB2ZWN0b3IgYmVmb3JlIHJlcXVlc3RfaXJxIGFuZFxcbjExMjY6XFx0XFx0ICogdGhlbiBhbGxvY2F0ZSBhIHJlYWwgdmVjdG9yIHdoZW4gcmVxdWVzdF9pcnEgaXMgY2FsbGVkLlxcbjExMjc6XFx0XFx0ICogU28gZ2V0IG1zaV9kYXRhIGhlcmUgYWdhaW4gdG8gYXZvaWQgc3B1cmlvdXMgaW50ZXJydXB0XFxuMTEyODpcXHRcXHQgKiBhcyBtc2lfZGF0YSB3aWxsIGNvbmZpZ3VyZWQgdG8gc3JuZ3MuXFxuMTEyOTpcXHRcXHQgKi9cXG4xMTMwOlxcdFxcdHJldCA9IGF0aDExa19wY2lfY29uZmlnX21zaV9kYXRhKGFiX3BjaSk7XFxuMTEzMTpcXHRcXHRpZiAocmV0KSB7XFxuMTEzMjpcXHRcXHRcXHRhdGgxMWtfZXJyKGFiLCBcXFwiZmFpbGVkIHRvIGNvbmZpZyBtc2lfZGF0YTogJWRcXFxcblxcXCIsIHJldCk7XFxuMTEzMzpcXHRcXHRcXHRnb3RvIGVycl9mcmVlX2lycTtcXG4xMTM0OlxcdFxcdH1cXG4xMTM1OlxcdFxcbjExMzY6XFx0XFx0cmV0ID0gYXRoMTFrX2NvcmVfaW5pdChhYik7XFxuMTEzNzpcXHRcXHRpZiAocmV0KSB7XFxuMTEzODpcXHRcXHRcXHRhdGgxMWtfZXJyKGFiLCBcXFwiZmFpbGVkIHRvIGluaXQgY29yZTogJWRcXFxcblxcXCIsIHJldCk7XFxuMTEzOTpcXHRcXHRcXHRnb3RvIGVycl9mcmVlX2lycTtcXG4xMTQwOlxcdFxcdH1cXG4xMTQxOlxcdFxcdGF0aDExa19xbWlfZndyZXNldF9mcm9tX2NvbGRfYm9vdChhYik7XFxuMTE0MjpcXHRcXHRyZXR1cm4gMDtcXG4xMTQzOlxcdFxcbjExNDQ6XFx0ZXJyX2ZyZWVfaXJxOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xOFQwODoyMzoxMi43NDA4ODE4NDZaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTgxMzE0ODgyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgYGF0aDExa2AgRHJpdmVyIFZ1bG5lcmFiaWxpdHkqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBhdGgxMWtfcGNpX3Byb2JlYCBmdW5jdGlvbiBhbmQgaXQncyBjbGVhciB0aGlzIGlzIHdoZXJlIGEgbG90IG9mIHRoZSBpbml0aWFsIGhhcmR3YXJlIGludGVyYWN0aW9uIGhhcHBlbnMuIEl0J3MgZG9pbmcgYSBidW5jaCBvZiByZWFkcywgbGlrZSBgYXRoMTFrX3BjaV9yZWFkX2h3X3ZlcnNpb25gLCBgYXRoMTFrX3BjaWNfcmVhZDMyYCwgYW5kIHJlZ2lzdGVyaW5nIHdpdGggdGhlIE1ISSBidXMgdmlhIGBhdGgxMWtfbWhpX3JlZ2lzdGVyYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBpZiBzeXprYWxsZXIgaXMgdGhyb3dpbmcgUENJIGRldmljZXMgYXQgdGhpcywgaXQncyBwcm9iYWJseSBtYXBwaW5nIG1lbW9yeSByZWdpb25zLiBBbmQgYGF0aDExa19wY2ljX3JlYWQzMmAgd2lsbCBiZSBoYXBwaWx5IHJlYWRpbmcgd2hhdGV2ZXIgZ2FyYmFnZSBzeXprYWxsZXIgcHJvdmlkZXMuIFRoZSBpc3N1ZSBpcyB0aGF0IHRoZSBNSEkgYnVzIHJlZ2lzdHJhdGlvbiBsb29rcyBsaWtlIGl0IGNvdWxkIGJlIGEgYmxvY2tlci5cblxuQnV0IGxldCdzIHNlZSwgY2FuIEkgZXZlbiBnZXQgdG8gdGhlIGNvcmUgaW5pdGlhbGl6YXRpb24/IEkgbmVlZCB0byB0cmFjZSB0aGUgZXhlY3V0aW9uLiBIbW0sIGBhdGgxMWtfY29yZV9pbml0YCBpcyBjYWxsZWQsIGFuZCB0aGF0IGxlYWRzIHRvIGBhdGgxMWtfY29yZV9zb2NfY3JlYXRlYCwgd2hpY2ggdGhlbiBjYWxscyBgYXRoMTFrX3FtaV9pbml0X3NlcnZpY2VgLiBUaGF0J3Mgd2hlcmUgdGhlIHBhdGNoIGlzIHRhcmdldGVkISBCaW5nbyEgVGhlIHBhdGggdG8gZXhwbG9pdCBpcyBsaWtlbHkgdGhyb3VnaCByZWFjaGluZyBgYXRoMTFrX3FtaV9pbml0X3NlcnZpY2VgLlxuXG5Ob3csIGlzIHRoZXJlIGFub3RoZXIgcm91dGU/IENhbiBJIHJlYWNoIGBhdGgxMWtfcW1pX2luaXRfc2VydmljZWAgdGhyb3VnaCBgYXRoMTFrX2FoYl9wcm9iZWAgaW5zdGVhZCBvZiB0aGUgUENJIG9uZT8gVGhhdCdzIHdoYXQgSSBuZWVkIHRvIGludmVzdGlnYXRlIG5leHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNjc2LCJPdXRwdXRUb2tlbnMiOjQ3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMThUMDg6MjM6MTguNTU0MDMyNjU5WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyODk2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExMDcsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMTA3OlxcdHN0YXRpYyBpbnQgYXRoMTFrX2FoYl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbjExMDg6XFx0e1xcbjExMDk6XFx0XFx0c3RydWN0IGF0aDExa19iYXNlICphYjtcXG4xMTEwOlxcdFxcdGNvbnN0IHN0cnVjdCBhdGgxMWtfaGlmX29wcyAqaGlmX29wcztcXG4xMTExOlxcdFxcdGNvbnN0IHN0cnVjdCBhdGgxMWtfcGNpX29wcyAqcGNpX29wcztcXG4xMTEyOlxcdFxcdGVudW0gYXRoMTFrX2h3X3JldiBod19yZXY7XFxuMTExMzpcXHRcXHRpbnQgcmV0O1xcbjExMTQ6XFx0XFxuMTExNTpcXHRcXHRod19yZXYgPSAodWludHB0cl90KWRldmljZV9nZXRfbWF0Y2hfZGF0YShcXHUwMDI2cGRldi1cXHUwMDNlZGV2KTtcXG4xMTE2OlxcdFxcbjExMTc6XFx0XFx0c3dpdGNoIChod19yZXYpIHtcXG4xMTE4OlxcdFxcdGNhc2UgQVRIMTFLX0hXX0lQUTgwNzQ6XFxuMTExOTpcXHRcXHRjYXNlIEFUSDExS19IV19JUFE2MDE4X0hXMTA6XFxuMTEyMDpcXHRcXHRjYXNlIEFUSDExS19IV19JUFE1MDE4X0hXMTA6XFxuMTEyMTpcXHRcXHRcXHRoaWZfb3BzID0gXFx1MDAyNmF0aDExa19haGJfaGlmX29wc19pcHE4MDc0O1xcbjExMjI6XFx0XFx0XFx0cGNpX29wcyA9IE5VTEw7XFxuMTEyMzpcXHRcXHRcXHRicmVhaztcXG4xMTI0OlxcdFxcdGNhc2UgQVRIMTFLX0hXX1dDTjY3NTBfSFcxMDpcXG4xMTI1OlxcdFxcdFxcdGhpZl9vcHMgPSBcXHUwMDI2YXRoMTFrX2FoYl9oaWZfb3BzX3djbjY3NTA7XFxuMTEyNjpcXHRcXHRcXHRwY2lfb3BzID0gXFx1MDAyNmF0aDExa19haGJfcGNpX29wc193Y242NzUwO1xcbjExMjc6XFx0XFx0XFx0YnJlYWs7XFxuMTEyODpcXHRcXHRkZWZhdWx0OlxcbjExMjk6XFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXFwidW5zdXBwb3J0ZWQgZGV2aWNlIHR5cGUgJWRcXFxcblxcXCIsIGh3X3Jldik7XFxuMTEzMDpcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuMTEzMTpcXHRcXHR9XFxuMTEzMjpcXHRcXG4xMTMzOlxcdFxcdHJldCA9IGRtYV9zZXRfbWFza19hbmRfY29oZXJlbnQoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgRE1BX0JJVF9NQVNLKDMyKSk7XFxuMTEzNDpcXHRcXHRpZiAocmV0KSB7XFxuMTEzNTpcXHRcXHRcXHRkZXZfZXJyKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIFxcXCJmYWlsZWQgdG8gc2V0IDMyLWJpdCBjb25zaXN0ZW50IGRtYVxcXFxuXFxcIik7XFxuMTEzNjpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjExMzc6XFx0XFx0fVxcbjExMzg6XFx0XFxuMTEzOTpcXHRcXHRhYiA9IGF0aDExa19jb3JlX2FsbG9jKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIHNpemVvZihzdHJ1Y3QgYXRoMTFrX2FoYiksXFxuMTE0MDpcXHRcXHRcXHRcXHQgICAgICAgQVRIMTFLX0JVU19BSEIpO1xcbjExNDE6XFx0XFx0aWYgKCFhYikge1xcbjExNDI6XFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXFwiZmFpbGVkIHRvIGFsbG9jYXRlIGF0aDExayBiYXNlXFxcXG5cXFwiKTtcXG4xMTQzOlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjExNDQ6XFx0XFx0fVxcbjExNDU6XFx0XFxuMTE0NjpcXHRcXHRhYi1cXHUwMDNlaGlmLm9wcyA9IGhpZl9vcHM7XFxuMTE0NzpcXHRcXHRhYi1cXHUwMDNlcGRldiA9IHBkZXY7XFxuMTE0ODpcXHRcXHRhYi1cXHUwMDNlaHdfcmV2ID0gaHdfcmV2O1xcbjExNDk6XFx0XFx0YWItXFx1MDAzZWZ3X21vZGUgPSBBVEgxMUtfRklSTVdBUkVfTU9ERV9OT1JNQUw7XFxuMTE1MDpcXHRcXHRwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBhYik7XFxuMTE1MTpcXHRcXG4xMTUyOlxcdFxcdHJldCA9IGF0aDExa19wY2ljX3JlZ2lzdGVyX3BjaV9vcHMoYWIsIHBjaV9vcHMpO1xcbjExNTM6XFx0XFx0aWYgKHJldCkge1xcbjExNTQ6XFx0XFx0XFx0YXRoMTFrX2VycihhYiwgXFxcImZhaWxlZCB0byByZWdpc3RlciBQQ0kgb3BzOiAlZFxcXFxuXFxcIiwgcmV0KTtcXG4xMTU1OlxcdFxcdFxcdGdvdG8gZXJyX2NvcmVfZnJlZTtcXG4xMTU2OlxcdFxcdH1cXG4xMTU3OlxcdFxcbjExNTg6XFx0XFx0cmV0ID0gYXRoMTFrX2NvcmVfcHJlX2luaXQoYWIpO1xcbjExNTk6XFx0XFx0aWYgKHJldClcXG4xMTYwOlxcdFxcdFxcdGdvdG8gZXJyX2NvcmVfZnJlZTtcXG4xMTYxOlxcdFxcbjExNjI6XFx0XFx0cmV0ID0gYXRoMTFrX2FoYl9zZXR1cF9yZXNvdXJjZXMoYWIpO1xcbjExNjM6XFx0XFx0aWYgKHJldClcXG4xMTY0OlxcdFxcdFxcdGdvdG8gZXJyX2NvcmVfZnJlZTtcXG4xMTY1OlxcdFxcbjExNjY6XFx0XFx0cmV0ID0gYXRoMTFrX2FoYl9jZV9yZW1hcChhYik7XFxuMTE2NzpcXHRcXHRpZiAocmV0KVxcbjExNjg6XFx0XFx0XFx0Z290byBlcnJfY29yZV9mcmVlO1xcbjExNjk6XFx0XFxuMTE3MDpcXHRcXHRyZXQgPSBhdGgxMWtfYWhiX2Z3X3Jlc291cmNlc19pbml0KGFiKTtcXG4xMTcxOlxcdFxcdGlmIChyZXQpXFxuMTE3MjpcXHRcXHRcXHRnb3RvIGVycl9jZV91bm1hcDtcXG4xMTczOlxcdFxcbjExNzQ6XFx0XFx0cmV0ID0gYXRoMTFrX2FoYl9zZXR1cF9zbXAycF9oYW5kbGUoYWIpO1xcbjExNzU6XFx0XFx0aWYgKHJldClcXG4xMTc2OlxcdFxcdFxcdGdvdG8gZXJyX2Z3X2RlaW5pdDtcXG4xMTc3OlxcdFxcbjExNzg6XFx0XFx0cmV0ID0gYXRoMTFrX2hhbF9zcm5nX2luaXQoYWIpO1xcbjExNzk6XFx0XFx0aWYgKHJldClcXG4xMTgwOlxcdFxcdFxcdGdvdG8gZXJyX3JlbGVhc2Vfc21wMnBfaGFuZGxlO1xcbjExODE6XFx0XFxuMTE4MjpcXHRcXHRyZXQgPSBhdGgxMWtfY2VfYWxsb2NfcGlwZXMoYWIpO1xcbjExODM6XFx0XFx0aWYgKHJldCkge1xcbjExODQ6XFx0XFx0XFx0YXRoMTFrX2VycihhYiwgXFxcImZhaWxlZCB0byBhbGxvY2F0ZSBjZSBwaXBlczogJWRcXFxcblxcXCIsIHJldCk7XFxuMTE4NTpcXHRcXHRcXHRnb3RvIGVycl9oYWxfc3JuZ19kZWluaXQ7XFxuMTE4NjpcXHRcXHR9XFxuMTE4NzpcXHRcXG4xMTg4OlxcdFxcdGF0aDExa19haGJfaW5pdF9xbWlfY2VfY29uZmlnKGFiKTtcXG4xMTg5OlxcdFxcbjExOTA6XFx0XFx0cmV0ID0gYXRoMTFrX2NvcmVfZ2V0X3Jwcm9jKGFiKTtcXG4xMTkxOlxcdFxcdGlmIChyZXQpXFxuMTE5MjpcXHRcXHRcXHRnb3RvIGVycl9jZV9mcmVlO1xcbjExOTM6XFx0XFxuMTE5NDpcXHRcXHRyZXQgPSBhdGgxMWtfY29yZV9pbml0KGFiKTtcXG4xMTk1OlxcdFxcdGlmIChyZXQpIHtcXG4xMTk2OlxcdFxcdFxcdGF0aDExa19lcnIoYWIsIFxcXCJmYWlsZWQgdG8gaW5pdCBjb3JlOiAlZFxcXFxuXFxcIiwgcmV0KTtcXG4xMTk3OlxcdFxcdFxcdGdvdG8gZXJyX2NlX2ZyZWU7XFxuMTE5ODpcXHRcXHR9XFxuMTE5OTpcXHRcXG4xMjAwOlxcdFxcdHJldCA9IGF0aDExa19haGJfY29uZmlnX2lycShhYik7XFxuMTIwMTpcXHRcXHRpZiAocmV0KSB7XFxuMTIwMjpcXHRcXHRcXHRhdGgxMWtfZXJyKGFiLCBcXFwiZmFpbGVkIHRvIGNvbmZpZ3VyZSBpcnE6ICVkXFxcXG5cXFwiLCByZXQpO1xcbjEyMDM6XFx0XFx0XFx0Z290byBlcnJfY2VfZnJlZTtcXG4xMjA0OlxcdFxcdH1cXG4xMjA1OlxcdFxcbjEyMDY6XFx0XFx0YXRoMTFrX3FtaV9md3Jlc2V0X2Zyb21fY29sZF9ib290KGFiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMThUMDg6MjM6MTguNTU0MTYyODU5WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyMzkxOTQ1MzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW5pdGlhbCBBc3Nlc3NtZW50IFx1MDAyNiBQb3RlbnRpYWwgQXZlbnVlcyoqXG5cbk9rYXksIHNvIGBhdGgxMWtfYWhiX3Byb2JlYCBpcyBhIHBsYXRmb3JtIGRyaXZlciBwcm9iZS4gRnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUsIHRoYXQncyBub3QgdGhlIGVhc2llc3QgdGhpbmcgdG8gdHJpZ2dlciBkaXJlY3RseSB3aXRoIFN5emthbGxlci4gSXQgZ2VuZXJhbGx5IHJlcXVpcmVzIGEga25vd24gZGV2aWNlIHRvIGJlIHByZXNlbnQsIGFuZCB0aGVuIHRoZSBmdXp6ZXIgY2FuIGF0dGVtcHQgdG8gaW50ZXJhY3Qgd2l0aCBpdC4gU3l6a2FsbGVyIHVzdWFsbHkgcmVsaWVzIG9uIGRldmljZXMgY3JlYXRlZCB0aHJvdWdoIGAvc3lzL2RldmljZXMvcGxhdGZvcm0vYCBvciBhIHNpbWlsYXIgbWV0aG9kLCBidXQgdGhhdCdzIG5vdCBhbHdheXMgc3RyYWlnaHRmb3J3YXJkLiBVbmxlc3MgSSdtIG92ZXJsb29raW5nIHNvbWV0aGluZyBvYnZpb3VzLCBJIG5lZWQgYSBnb29kIHBhdGggdG8gZ2V0IHRoZSBkZXZpY2UgcHJlc2VudC5cblxuV2FpdCBhIHNlY29uZOKApiBkaWRuJ3QgSSBzZWUgc29tZXRoaW5nIGFib3V0IFN5emthbGxlciBoYXZpbmcgYSBgc3l6X2RldmxpbmtfcGNpYCBvciBzb21ldGhpbmcgc2ltaWxhcj8gSWYgc28sIHRoYXQgY291bGQgYmUgdGhlIGtleSEgSXQgZ2l2ZXMgdGhlIGZ1enplciBhIHdheSB0byBpbmplY3QgUENJIGRldmljZXMsIHdoaWNoIG1pZ2h0IGJlIGEgYmV0dGVyIHRhcmdldCBmb3IgdGhpcyBkcml2ZXIuIEkgc2hvdWxkIGludmVzdGlnYXRlIHRoYXQgZnVydGhlci5cblxuQWxyaWdodCwgYmVmb3JlIEkgY29tcGxldGVseSBjb21taXQgdG8gdGhhdCBkaXJlY3Rpb24sIGxldCBtZSBjb25zaWRlciBpZiB0aGVyZSBpcyBhbm90aGVyIG9idmlvdXMgcGF0aCwgYmVjYXVzZSBQQ0kgY2FuIGJlIGEgaGVhdnkgaGFtbWVyLiBJIHdvbmRlciBpZiBgYXRoMTFrX3FtaV9pbml0X3NlcnZpY2VgIGlzIHJlYWNoYWJsZS4uLiBJIHNob3VsZCBhbHNvIGxvb2sgYXQgdGhlIGBhdGgxMmtfcW1pX2luaXRfc2VydmljZWAgYXMgd2VsbCwganVzdCB0byBlbnN1cmUgdGhhdCBJJ20gY2hlY2tpbmcgYWxsIHBvc3NpYmxlIHBhdGhzIHRvIGdldCB0aGlzIGRldmljZSByZWFkeSBmb3IgYSBnb29kIGZ1enouXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMDAzLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMThUMDg6MjM6MjIuNzkzMzU5NzA0WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzUwMDAzODY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImF0aDEya19xbWlfaW5pdF9zZXJ2aWNlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5jPTgxNT1zdGF0aWMgaW50IGF0aDEya19jb3JlX3NvY19jcmVhdGUoc3RydWN0IGF0aDEya19iYXNlICphYilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5jLTgyMy1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuYzo4MjQ6XFx0cmV0ID0gYXRoMTJrX3FtaV9pbml0X3NlcnZpY2UoYWIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5jLTgyNS1cXHRpZiAocmV0KSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5jPTM5NjU9c3RhdGljIHZvaWQgYXRoMTJrX3FtaV9kcml2ZXJfZXZlbnRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5jLTQwMzctXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuYzo0MDM4OmludCBhdGgxMmtfcW1pX2luaXRfc2VydmljZShzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmMtNDAzOS17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5oPTY0ND12b2lkIGF0aDEya19xbWlfZGVpbml0X3NlcnZpY2Uoc3RydWN0IGF0aDEya19iYXNlICphYik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuaDo2NDU6aW50IGF0aDEya19xbWlfaW5pdF9zZXJ2aWNlKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmgtNjQ2LXZvaWQgYXRoMTJrX3FtaV9mcmVlX3Jlc291cmNlKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xOFQwODoyMzoyNC41NDMzNjg3NDFaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIxNjg0Nzk5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkluaXRpYWwgSW52ZXN0aWdhdGlvbiBpbnRvIGF0aDEyayBEcml2ZXIgSW5pdGlhbGl6YXRpb24qKlxuXG5TbywgYGF0aDEya19jb3JlX3NvY19jcmVhdGVgIGlzIHJlc3BvbnNpYmxlIGZvciBzZXR0aW5nIHVwIHRoZSBTT0MsIGFuZCBJIHNlZSBpdCdzIGNhbGxpbmcgYGF0aDEya19xbWlfaW5pdF9zZXJ2aWNlYC4gVGhhdCdzIGEga2V5IGludGVyYWN0aW9uIHRvIHVuZGVyc3RhbmQsIHRoZSBRdWFsaXR5IE1hbmFnZW1lbnQgSW50ZXJmYWNlIGlzIGNsZWFybHkgYSBjcml0aWNhbCBjb21wb25lbnQuIEJ1dCB3aGF0IGFjdHVhbGx5ICp0cmlnZ2VycyogYGF0aDEya19jb3JlX3NvY19jcmVhdGVgPyBJIG5lZWQgdG8gdHJhY2UgYmFjay4gQWgsIGhlcmUgaXQgaXM6IGBhdGgxMmtfY29yZV9zb2NfY3JlYXRlYCBpcyBjYWxsZWQgYnkgYGF0aDEya19jb3JlX2luaXRgLiBSaWdodC4gU28sIGBhdGgxMmtfY29yZV9pbml0YCBpcyB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIHRoaXMgc3BlY2lmaWMgY2hhaW4gb2YgaW5pdGlhbGl6YXRpb24uIE5vdywgbGV0J3Mgc2hpZnQgb3VyIGZvY3VzIGFuZCBpbnZlc3RpZ2F0ZSB0aGUgYGF0aDEya19jb3JlX2luaXRgIGZ1bmN0aW9uIGl0c2VsZi4gVW5kZXJzdGFuZGluZyB0aGF0IHdpbGwgZ2l2ZSBtZSB0aGUgcHJvcGVyIGNvbnRleHQgZm9yIHRoZSBzdWJzZXF1ZW50IGZ1bmN0aW9uIGNhbGxzIGFuZCB1bHRpbWF0ZWx5IHRoZSBRTUkgc2VydmljZSBpbml0aWFsaXphdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM4NjgsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xOFQwODoyMzoyNy43NjAyMTkyMzJaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NDI3NDcxOTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXRoMTJrX2NvcmVfaW5pdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jPTEwMTk9c3RhdGljIGludCBhdGgxMmtfYWhiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jLTExMTAtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYzoxMTExOlxcdHJldCA9IGF0aDEya19jb3JlX2luaXQoYWIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmMtMTExMi1cXHRpZiAocmV0KSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuYz0yMTg4PXZvaWQgYXRoMTJrX2NvcmVfaHdfZ3JvdXBfc2V0X21sb19jYXBhYmxlKHN0cnVjdCBhdGgxMmtfaHdfZ3JvdXAgKmFnKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmMtMjIyOC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuYzoyMjI5OmludCBhdGgxMmtfY29yZV9pbml0KHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmMtMjIzMC17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuaD0xMjY0PWludCBhdGgxMmtfY29yZV9wcmVfaW5pdChzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuaDoxMjY1OmludCBhdGgxMmtfY29yZV9pbml0KHN0cnVjdCBhdGgxMmtfYmFzZSAqYXRoMTJrKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuaC0xMjY2LXZvaWQgYXRoMTJrX2NvcmVfZGVpbml0KHN0cnVjdCBhdGgxMmtfYmFzZSAqYXRoMTJrKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM9MTUyND1zdGF0aWMgaW50IGF0aDEya19wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE2NDQtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYzoxNjQ1OlxcdHJldCA9IGF0aDEya19jb3JlX2luaXQoYWIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtMTY0Ni1cXHRpZiAocmV0KSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE4VDA4OjIzOjI5LjUwMjk3MTIyOVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODY1Nzg0MjE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBvdGVudGlhbCBGdXp6aW5nIFRhcmdldCoqXG5cbk9rYXksIHRoaXMgbG9va3MgZmFtaWxpYXIg4oCTIHRoZSBzYW1lIHBhdHRlcm4gSSd2ZSBzZWVuIGJlZm9yZS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBjb2RlIHBhdGggaXMgZXZlbiAqcmVhY2hhYmxlKiBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBHb29kLCBzeXprYWxsZXIgaGFzIGEgdmlydHVhbCBQQ0kgZnV6emVyLCB3aGljaCBpcyBwZXJmZWN0LiBJdCBjYW4gaW5qZWN0IFBDSSBkZXZpY2VzIHdpdGggd2hhdGV2ZXIgdmVuZG9yIGFuZCBkZXZpY2UgSURzIGl0IHdhbnRzLiBUaGUgbW9tZW50IGl0IGluamVjdHMgc29tZXRoaW5nIHdpdGggZWl0aGVyIGFuIGF0aDExayBvciBhdGgxMmsgUENJIElELCBiaW5nbyDigJMgdGhlIHByb2JlIGZ1bmN0aW9uIGdldHMgY2FsbGVkLlxuXG5BbmQgdGhpcyBwcm9iZSBmdW5jdGlvbiwgaXTigJlzIHJlYWRpbmcgZnJvbSBQQ0kgY29uZmlnIHNwYWNlIGFuZCBtZW1vcnktbWFwcGVkIElPLiBJIGltbWVkaWF0ZWx5IHNlZSB0aGUgdnVsbmVyYWJpbGl0eSBwb3RlbnRpYWwgaGVyZS4gQmVjYXVzZSBzeXprYWxsZXIncyB2aXJ0dWFsIGRldmljZSBjYW4gcmV0dXJuIGFueXRoaW5nIHdlIGZlZWQgaXQsIGl04oCZcyBoaWdobHkgbGlrZWx5IHdlIGNhbiBieXBhc3MgdGhlIGhhcmR3YXJlIGNoZWNrcy4gSWYgd2UgbWFuaXB1bGF0ZSB0aGUgcmVzcG9uc2VzLCB3ZSBtaWdodCBiZSBhYmxlIHRvIHJlYWNoIGNydWNpYWwgZnVuY3Rpb25zIGxpa2UgYGF0aDExa19jb3JlX2luaXRgIGFuZCBgYXRoMTFrX3FtaV9pbml0X3NlcnZpY2VgLlxuXG5Ib2xkIG9uLi4uIGBhdGgxMWtfcGNpX3Byb2JlYCBjYWxscyBgYXRoMTFrX21oaV9yZWdpc3RlcmAuIE1ISS4uLiB0aGF0J3MgdGhlIE1vZGVtIEhvc3QgSW50ZXJmYWNlLCBpc27igJl0IGl0PyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgYGF0aDExa19taGlfcmVnaXN0ZXJgIGRvZXMuIFRoYXQncyB0aGUgbmV4dCBzdGVwOyB0aGlzIGNvdWxkIGJlIGEga2V5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDc0OCwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xOFQwODoyMzozNC4zNjg3NTcxNzRaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3Mzk0MzI2NTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXRoMTFrX21oaV9yZWdpc3RlclwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL21oaS5jPTMxND1zdGF0aWMgaW50IGF0aDExa19taGlfcmVhZF9hZGRyX2Zyb21fZHQoc3RydWN0IG1oaV9jb250cm9sbGVyICptaGlfY3RybClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvbWhpLmMtMzM0LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvbWhpLmM6MzM1OmludCBhdGgxMWtfbWhpX3JlZ2lzdGVyKHN0cnVjdCBhdGgxMWtfcGNpICphYl9wY2kpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9taGkuYy0zMzYte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9taGkuaD0yMT12b2lkIGF0aDExa19taGlfc3RvcChzdHJ1Y3QgYXRoMTFrX3BjaSAqYXJfcGNpLCBib29sIGlzX3N1c3BlbmQpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvbWhpLmg6MjI6aW50IGF0aDExa19taGlfcmVnaXN0ZXIoc3RydWN0IGF0aDExa19wY2kgKmFyX3BjaSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9taGkuaC0yMy12b2lkIGF0aDExa19taGlfdW5yZWdpc3RlcihzdHJ1Y3QgYXRoMTFrX3BjaSAqYXJfcGNpKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvcGNpLmM9OTQ1PXN0YXRpYyBpbnQgYXRoMTFrX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvcGNpLmMtMTEwMC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3BjaS5jOjExMDE6XFx0cmV0ID0gYXRoMTFrX21oaV9yZWdpc3RlcihhYl9wY2kpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvcGNpLmMtMTEwMi1cXHRpZiAocmV0KSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE4VDA4OjIzOjM2LjEwODE5NDkzMVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1Mjk5OTQzNzg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gYGF0aDExa19taGlfcmVnaXN0ZXJgLCBhc3N1bWluZyBJJ20gYW4gZXhwZXJ0OlxuXG4qKlVuZGVyc3RhbmRpbmcgdGhlIGBhdGgxMWtfbWhpX3JlZ2lzdGVyYCBGdW5jdGlvbioqXG5cbkFscmlnaHQsIHNvIHRoZSB0YXNrIGF0IGhhbmQgaXMgdG8gZ3JvayB0aGlzIGBhdGgxMWtfbWhpX3JlZ2lzdGVyYCBmdW5jdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBiYXNlZCBvbiB0aGUgbmFtZSwgdGhpcyBsaWtlbHkgaGFuZGxlcyB0aGUgcmVnaXN0cmF0aW9uIHByb2Nlc3Mgd2l0aGluIHRoZSBRdWFsY29tbSBBdGhlcm9zIChhdGgxMWspIGRyaXZlciwgc3BlY2lmaWNhbGx5IGZvciB0aGUgTUhJIChNSEkgc3RhbmRzIGZvcjogKipNKip1bHRpICoqSCoqb3N0ICoqSSoqbnRlcmZhY2UpIGludGVyZmFjZS4gVGhpcyBzdHJvbmdseSBzdWdnZXN0cyB3ZSdyZSBkZWFsaW5nIHdpdGggdGhlIGludGVyYWN0aW9uIGJldHdlZW4gdGhlIGhvc3QgQ1BVIGFuZCB0aGUgbmV0d29yayBjb250cm9sbGVyLCBtYXliZSBmb3Igc2V0dXAsIGNvbmZpZ3VyYXRpb24sIG9yIHBlcmhhcHMgcmVzb3VyY2UgbWFuYWdlbWVudC5cblxuTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGlzIHdpbGwgcHJvYmFibHkgYmUgYSBmYWlybHkgY3JpdGljYWwgZnVuY3Rpb24uIEl0J3MgdGhlIGVudHJ5IHBvaW50LCBvciBhdCBsZWFzdCBhIGtleSBjb21wb25lbnQsIGZvciBtYWtpbmcgdGhlIGhhcmR3YXJlIGFjY2Vzc2libGUgdG8gdGhlIGRyaXZlci4gSSBleHBlY3QgaXQnbGwgaW52b2x2ZSBzZXR0aW5nIHVwIGludGVycnVwdCBoYW5kbGVycywgY29uZmlndXJpbmcgbWVtb3J5IG1hcHBpbmcsIGVzdGFibGlzaGluZyBjb21tdW5pY2F0aW9uIGNoYW5uZWxzLCBhbmQgcG9zc2libHkgaGFuZGxpbmcgc29tZSBwb3dlciBtYW5hZ2VtZW50IHN0ZXBzLlxuXG5JJ20gdGhpbmtpbmcsIGdpdmVuIHRoZSBjb250ZXh0IG9mIGF0aDExayAod2hpY2ggSSBrbm93IGlzIGEgbW9kZXJuIFdpLUZpIGRyaXZlciksIHRoaXMgKmNvdWxkKiBpbnZvbHZlIGZlYXR1cmVzIHRoYXQgYXJlIHJlbGV2YW50IHRvIGhhcmR3YXJlIGxpa2U6XG5cbiogICAqKkJ1cy1TcGVjaWZpYyBTZXR1cDoqKiBJdCdsbCBuZWVkIHRvIGtub3cgd2hpY2ggYnVzIChQQ0llLCBTRElPLCBVU0IpIHRoZSBNSEkgaW50ZXJmYWNlIGlzIGNvbm5lY3RlZCB0bywgYW5kIGNvbmZpZ3VyZSB0aGUgYXNzb2NpYXRlZCBidXMtc3BlY2lmaWMgcmVnaXN0ZXJzLlxuKiAgICoqRE1BIEVuZ2luZXM6KiogSXQgcHJvYmFibHkgc2V0cyB1cCBETUEgZW5naW5lcyBmb3IgZWZmaWNpZW50IGRhdGEgdHJhbnNmZXIgYmV0d2VlbiB0aGUgaG9zdCBhbmQgdGhlIFdpLUZpIGNoaXAuIFRoaXMgaXMgZXNzZW50aWFsIGZvciBnb29kIHRocm91Z2hwdXQgYW5kIGxvdyBsYXRlbmN5LlxuKiAgICoqRGV2aWNlIFRyZWUgSW50ZXJhY3Rpb25zOioqIEhvcGVmdWxseSwgaXQgaGFzIGEgcHJvcGVyIERldmljZSBUcmVlIGludGVyYWN0aW9uLlxuKiAgICoqRXJyb3IgSGFuZGxpbmc6KiogSXQgd2lsbCBuZWVkIHRvIGhhbmRsZSB0aGUgY2FzZSBvZiBmYWlsdXJlIGR1cmluZyByZWdpc3RyYXRpb24uIEl0J2xsIHByb2JhYmx5IGluY2x1ZGUgZXJyb3IgY2hlY2tzIGFmdGVyIGVhY2ggb3BlcmF0aW9uIHRvIGVuc3VyZSB0aGF0IHRoZSBkZXZpY2UgaGFzIGJlZW4gY29ycmVjdGx5IGluaXRpYWxpemVkLlxuKiAgICoqSW5pdGlhbGl6YXRpb24gRGF0YToqKiBJJ20gZ3Vlc3NpbmcgaXQgbGlrZWx5IG5lZWRzIHRvIHBhc3Mgb3IgcmVjZWl2ZSBzb21lIGluaXRpYWxpemF0aW9uIGRhdGEgb3IgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIHNwZWNpZmljIHRvIHRoZSBNSEkgaW50ZXJmYWNlLCBsaWtlIGJ1ZmZlciBzaXplcywgY2xvY2sgc2V0dGluZ3MsIG9yIGludGVycnVwdCBudW1iZXJzLlxuKiAgICoqUmVzb3VyY2UgQWxsb2NhdGlvbjoqKiBDb3VsZCBiZSBtZW1vcnkgYWxsb2NhdGlvbiB1c2luZyBhIGZ1bmN0aW9uLCBsaWtlbHkgYW4gaW50ZXJuYWwgbWVtb3J5IG9yIHN0cnVjdHVyZSB0byBzdG9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcmVnaXN0ZXJlZCBkZXZpY2UuXG4qICAgKipQb3dlciBNYW5hZ2VtZW50OioqIEJhc2VkIG9uIHBhc3QgZXhwZXJpZW5jZXMgd2l0aCB3aXJlbGVzcyBkcml2ZXJzLCB0aGVyZSdzIGxpa2VseSBzb21lIHBvd2VyIG1hbmFnZW1lbnQgbG9naWMgaW52b2x2ZWQsIHBlcmhhcHMgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIGNsb2NrIGdhdGVzLCBwb3dlciBkb21haW5zLCBvciBzZXR0aW5nIHVwIHdha2UtdXAgaW50ZXJydXB0cy5cbiogICAqKkludGVycnVwdCBIYW5kbGluZzoqKiBUaGUgc2V0dGluZyB1cCBvZiB0aGUgaW50ZXJydXB0IGhhbmRsZXJzIHdpbGwgbGlrZWx5IGJlIGFub3RoZXIgaW1wb3J0YW50IHJvbGUuIEl0IHdpbGwgcmVnaXN0ZXIgdGhlIGFwcHJvcHJpYXRlIGludGVycnVwdCBoYW5kbGVyIHJvdXRpbmUgd2l0aCB0aGUga2VybmVsLlxuXG5JIG5lZWQgdG8gZGlnIGluIGFuZCBzZWUgdGhlIGRldGFpbHMsIGJ1dCBteSBpbml0aWFsIGd1dCBmZWVsaW5nIGlzIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyBnb2luZyB0byBiZSB0aGUgY2VudHJhbCBwb2ludCBmb3IgdGhlIGhhcmR3YXJlIGJyaW5nLXVwIHByb2Nlc3Mgd2l0aCByZXNwZWN0IHRvIHRoZSBNSEkgaW50ZXJmYWNlLiBJdCdzIHRoZSBseW5jaHBpbiBmb3IgZ2V0dGluZyB0aGUgYXRoMTFrIGRyaXZlciB3b3JraW5nIHdpdGggdGhlIFdpLUZpIGhhcmR3YXJlLiBJdCdzIHByb2JhYmx5IGdvaW5nIHRvIGludm9sdmUgYSBsb3Qgb2YgbG93LWxldmVsIGhhcmR3YXJlIGludGVyYWN0aW9uIGFuZCBlcnJvciBoYW5kbGluZy4gTGV0J3Mgc2VlIGlmIG15IGluaXRpYWwgYXNzdW1wdGlvbnMgaG9sZCB3YXRlciBhcyBJIHJlYWQgdGhyb3VnaCBpdCFcblxuXG4iLCJJbnB1dFRva2VucyI6MTU2OTEsIk91dHB1dFRva2VucyI6NDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xOFQwODoyMzo0MS40MDgxNDE3OTdaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTA5MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9taGkuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMzUsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzM1OlxcdGludCBhdGgxMWtfbWhpX3JlZ2lzdGVyKHN0cnVjdCBhdGgxMWtfcGNpICphYl9wY2kpXFxuIDMzNjpcXHR7XFxuIDMzNzpcXHRcXHRzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiID0gYWJfcGNpLVxcdTAwM2VhYjtcXG4gMzM4OlxcdFxcdHN0cnVjdCBtaGlfY29udHJvbGxlciAqbWhpX2N0cmw7XFxuIDMzOTpcXHRcXHRjb25zdCBzdHJ1Y3QgbWhpX2NvbnRyb2xsZXJfY29uZmlnICphdGgxMWtfbWhpX2NvbmZpZztcXG4gMzQwOlxcdFxcdGludCByZXQ7XFxuIDM0MTpcXHRcXG4gMzQyOlxcdFxcdG1oaV9jdHJsID0gbWhpX2FsbG9jX2NvbnRyb2xsZXIoKTtcXG4gMzQzOlxcdFxcdGlmICghbWhpX2N0cmwpXFxuIDM0NDpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gMzQ1OlxcdFxcbiAzNDY6XFx0XFx0YWJfcGNpLVxcdTAwM2VtaGlfY3RybCA9IG1oaV9jdHJsO1xcbiAzNDc6XFx0XFx0bWhpX2N0cmwtXFx1MDAzZWNudHJsX2RldiA9IGFiLVxcdTAwM2VkZXY7XFxuIDM0ODpcXHRcXHRtaGlfY3RybC1cXHUwMDNlcmVncyA9IGFiLVxcdTAwM2VtZW07XFxuIDM0OTpcXHRcXHRtaGlfY3RybC1cXHUwMDNlcmVnX2xlbiA9IGFiLVxcdTAwM2VtZW1fbGVuO1xcbiAzNTA6XFx0XFxuIDM1MTpcXHRcXHRpZiAoYWItXFx1MDAzZWZ3LmFtc3NfZGF0YSBcXHUwMDI2XFx1MDAyNiBhYi1cXHUwMDNlZncuYW1zc19sZW4gXFx1MDAzZSAwKSB7XFxuIDM1MjpcXHRcXHRcXHQvKiB1c2UgTUhJIGZpcm13YXJlIGZpbGUgZnJvbSBmaXJtd2FyZS1OLmJpbiAqL1xcbiAzNTM6XFx0XFx0XFx0bWhpX2N0cmwtXFx1MDAzZWZ3X2RhdGEgPSBhYi1cXHUwMDNlZncuYW1zc19kYXRhO1xcbiAzNTQ6XFx0XFx0XFx0bWhpX2N0cmwtXFx1MDAzZWZ3X3N6ID0gYWItXFx1MDAzZWZ3LmFtc3NfbGVuO1xcbiAzNTU6XFx0XFx0fSBlbHNlIHtcXG4gMzU2OlxcdFxcdFxcdC8qIHVzZSB0aGUgb2xkIHNlcGFyYXRlIG1oaS5iaW4gTUhJIGZpcm13YXJlIGZpbGUgKi9cXG4gMzU3OlxcdFxcdFxcdGF0aDExa19jb3JlX2NyZWF0ZV9maXJtd2FyZV9wYXRoKGFiLCBBVEgxMUtfQU1TU19GSUxFLFxcbiAzNTg6XFx0XFx0XFx0XFx0XFx0XFx0XFx0IGFiX3BjaS1cXHUwMDNlYW1zc19wYXRoLFxcbiAzNTk6XFx0XFx0XFx0XFx0XFx0XFx0XFx0IHNpemVvZihhYl9wY2ktXFx1MDAzZWFtc3NfcGF0aCkpO1xcbiAzNjA6XFx0XFx0XFx0bWhpX2N0cmwtXFx1MDAzZWZ3X2ltYWdlID0gYWJfcGNpLVxcdTAwM2VhbXNzX3BhdGg7XFxuIDM2MTpcXHRcXHR9XFxuIDM2MjpcXHRcXG4gMzYzOlxcdFxcdHJldCA9IGF0aDExa19taGlfZ2V0X21zaShhYl9wY2kpO1xcbiAzNjQ6XFx0XFx0aWYgKHJldCkge1xcbiAzNjU6XFx0XFx0XFx0YXRoMTFrX2VycihhYiwgXFxcImZhaWxlZCB0byBnZXQgbXNpIGZvciBtaGlcXFxcblxcXCIpO1xcbiAzNjY6XFx0XFx0XFx0Z290byBmcmVlX2NvbnRyb2xsZXI7XFxuIDM2NzpcXHRcXHR9XFxuIDM2ODpcXHRcXG4gMzY5OlxcdFxcdGlmICghdGVzdF9iaXQoQVRIMTFLX0ZMQUdfTVVMVElfTVNJX1ZFQ1RPUlMsIFxcdTAwMjZhYi1cXHUwMDNlZGV2X2ZsYWdzKSlcXG4gMzcwOlxcdFxcdFxcdG1oaV9jdHJsLVxcdTAwM2VpcnFfZmxhZ3MgPSBJUlFGX1NIQVJFRCB8IElSUUZfTk9CQUxBTkNJTkc7XFxuIDM3MTpcXHRcXG4gMzcyOlxcdFxcdGlmICh0ZXN0X2JpdChBVEgxMUtfRkxBR19GSVhFRF9NRU1fUkdOLCBcXHUwMDI2YWItXFx1MDAzZWRldl9mbGFncykpIHtcXG4gMzczOlxcdFxcdFxcdHJldCA9IGF0aDExa19taGlfcmVhZF9hZGRyX2Zyb21fZHQobWhpX2N0cmwpO1xcbiAzNzQ6XFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIDM3NTpcXHRcXHRcXHRcXHRnb3RvIGZyZWVfY29udHJvbGxlcjtcXG4gMzc2OlxcdFxcdH0gZWxzZSB7XFxuIDM3NzpcXHRcXHRcXHRtaGlfY3RybC1cXHUwMDNlaW92YV9zdGFydCA9IDA7XFxuIDM3ODpcXHRcXHRcXHRtaGlfY3RybC1cXHUwMDNlaW92YV9zdG9wID0gYWJfcGNpLVxcdTAwM2VkbWFfbWFzaztcXG4gMzc5OlxcdFxcdH1cXG4gMzgwOlxcdFxcbiAzODE6XFx0XFx0bWhpX2N0cmwtXFx1MDAzZXJkZG1fc2l6ZSA9IFJERE1fRFVNUF9TSVpFO1xcbiAzODI6XFx0XFx0bWhpX2N0cmwtXFx1MDAzZXNibF9zaXplID0gU1pfNTEySztcXG4gMzgzOlxcdFxcdG1oaV9jdHJsLVxcdTAwM2VzZWdfbGVuID0gU1pfNTEySztcXG4gMzg0OlxcdFxcdG1oaV9jdHJsLVxcdTAwM2VmYmNfZG93bmxvYWQgPSB0cnVlO1xcbiAzODU6XFx0XFx0bWhpX2N0cmwtXFx1MDAzZXJ1bnRpbWVfZ2V0ID0gYXRoMTFrX21oaV9vcF9ydW50aW1lX2dldDtcXG4gMzg2OlxcdFxcdG1oaV9jdHJsLVxcdTAwM2VydW50aW1lX3B1dCA9IGF0aDExa19taGlfb3BfcnVudGltZV9wdXQ7XFxuIDM4NzpcXHRcXHRtaGlfY3RybC1cXHUwMDNlc3RhdHVzX2NiID0gYXRoMTFrX21oaV9vcF9zdGF0dXNfY2I7XFxuIDM4ODpcXHRcXHRtaGlfY3RybC1cXHUwMDNlcmVhZF9yZWcgPSBhdGgxMWtfbWhpX29wX3JlYWRfcmVnO1xcbiAzODk6XFx0XFx0bWhpX2N0cmwtXFx1MDAzZXdyaXRlX3JlZyA9IGF0aDExa19taGlfb3Bfd3JpdGVfcmVnO1xcbiAzOTA6XFx0XFxuIDM5MTpcXHRcXHRzd2l0Y2ggKGFiLVxcdTAwM2Vod19yZXYpIHtcXG4gMzkyOlxcdFxcdGNhc2UgQVRIMTFLX0hXX1FDTjkwNzRfSFcxMDpcXG4gMzkzOlxcdFxcdFxcdGF0aDExa19taGlfY29uZmlnID0gXFx1MDAyNmF0aDExa19taGlfY29uZmlnX3FjbjkwNzQ7XFxuIDM5NDpcXHRcXHRcXHRicmVhaztcXG4gMzk1OlxcdFxcdGNhc2UgQVRIMTFLX0hXX1FDQTYzOTBfSFcyMDpcXG4gMzk2OlxcdFxcdGNhc2UgQVRIMTFLX0hXX1dDTjY4NTVfSFcyMDpcXG4gMzk3OlxcdFxcdGNhc2UgQVRIMTFLX0hXX1dDTjY4NTVfSFcyMTpcXG4gMzk4OlxcdFxcdGNhc2UgQVRIMTFLX0hXX1FDQTIwNjZfSFcyMTpcXG4gMzk5OlxcdFxcdGNhc2UgQVRIMTFLX0hXX1FDQTY2OThBUV9IVzIxOlxcbiA0MDA6XFx0XFx0XFx0YXRoMTFrX21oaV9jb25maWcgPSBcXHUwMDI2YXRoMTFrX21oaV9jb25maWdfcWNhNjM5MDtcXG4gNDAxOlxcdFxcdFxcdGJyZWFrO1xcbiA0MDI6XFx0XFx0ZGVmYXVsdDpcXG4gNDAzOlxcdFxcdFxcdGF0aDExa19lcnIoYWIsIFxcXCJmYWlsZWQgYXNzaWduIG1oaV9jb25maWcgZm9yIHVua25vd24gaHcgcmV2ICVkXFxcXG5cXFwiLFxcbiA0MDQ6XFx0XFx0XFx0XFx0ICAgYWItXFx1MDAzZWh3X3Jldik7XFxuIDQwNTpcXHRcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbiA0MDY6XFx0XFx0XFx0Z290byBmcmVlX2NvbnRyb2xsZXI7XFxuIDQwNzpcXHRcXHR9XFxuIDQwODpcXHRcXG4gNDA5OlxcdFxcdGFiX3BjaS1cXHUwMDNlbWhpX3ByZV9jYiA9IE1ISV9DQl9JTlZBTElEO1xcbiA0MTA6XFx0XFx0cmV0ID0gbWhpX3JlZ2lzdGVyX2NvbnRyb2xsZXIobWhpX2N0cmwsIGF0aDExa19taGlfY29uZmlnKTtcXG4gNDExOlxcdFxcdGlmIChyZXQpIHtcXG4gNDEyOlxcdFxcdFxcdGF0aDExa19lcnIoYWIsIFxcXCJmYWlsZWQgdG8gcmVnaXN0ZXIgdG8gbWhpIGJ1cywgZXJyID0gJWRcXFxcblxcXCIsIHJldCk7XFxuIDQxMzpcXHRcXHRcXHRnb3RvIGZyZWVfY29udHJvbGxlcjtcXG4gNDE0OlxcdFxcdH1cXG4gNDE1OlxcdFxcbiA0MTY6XFx0XFx0cmV0dXJuIDA7XFxuIDQxNzpcXHRcXG4gNDE4OlxcdGZyZWVfY29udHJvbGxlcjpcXG4gNDE5OlxcdFxcdG1oaV9mcmVlX2NvbnRyb2xsZXIobWhpX2N0cmwpO1xcbiA0MjA6XFx0XFx0YWJfcGNpLVxcdTAwM2VtaGlfY3RybCA9IE5VTEw7XFxuIDQyMTpcXHRcXHRyZXR1cm4gcmV0O1xcbiA0MjI6XFx0fVxcbiA0MjM6XFx0XFxuIDQyNDpcXHR2b2lkIGF0aDExa19taGlfdW5yZWdpc3RlcihzdHJ1Y3QgYXRoMTFrX3BjaSAqYWJfcGNpKVxcbiA0MjU6XFx0e1xcbiA0MjY6XFx0XFx0c3RydWN0IG1oaV9jb250cm9sbGVyICptaGlfY3RybCA9IGFiX3BjaS1cXHUwMDNlbWhpX2N0cmw7XFxuIDQyNzpcXHRcXG4gNDI4OlxcdFxcdG1oaV91bnJlZ2lzdGVyX2NvbnRyb2xsZXIobWhpX2N0cmwpO1xcbiA0Mjk6XFx0XFx0a2ZyZWUobWhpX2N0cmwtXFx1MDAzZWlycSk7XFxuIDQzMDpcXHRcXHRtaGlfZnJlZV9jb250cm9sbGVyKG1oaV9jdHJsKTtcXG4gNDMxOlxcdH1cXG4gNDMyOlxcdFxcbiA0MzM6XFx0aW50IGF0aDExa19taGlfc3RhcnQoc3RydWN0IGF0aDExa19wY2kgKmFiX3BjaSlcXG4gNDM0OlxcdHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMThUMDg6MjM6NDEuNDA4MjMzODc3WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk3ODUyNjE5MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgRHJpdmVyIFBhdGNoOiBGb2N1c2luZyBvbiBSZXNvdXJjZSBNYW5hZ2VtZW50IGFuZCBQb3RlbnRpYWwgRnV6emluZyBUYXJnZXRzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgdHJhY2luZyB0aGUgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UgZm9yIGJvdGggYGF0aDExa2AgYW5kIGBhdGgxMmtgIGRyaXZlcnMuIEl0IHNlZW1zIHRoYXQgYGF0aDExa19taGlfcmVnaXN0ZXJgIGtpY2tzIHRoaW5ncyBvZmYgd2l0aCBgbWhpX3JlZ2lzdGVyX2NvbnRyb2xsZXJgLiBUaGlzIHBhcnQsIGFzIEkgcmVjYWxsLCBtb3N0bHkgc2V0cyB1cCBzb2Z0d2FyZSBzdHJ1Y3R1cmVzLiBJdCAqbWlnaHQqIGRvIGJhc2ljIGNoZWNrcywgYnV0IGl0J3MgbGFyZ2VseSBhYm91dCByZWdpc3RyYXRpb24gd2l0aCB0aGUgTUhJIHN1YnN5c3RlbSBhbmQgaXNuJ3QgbmVjZXNzYXJpbHkgYmxvY2tlZCBieSBpbW1lZGlhdGUgaGFyZHdhcmUgcmVzcG9uc2l2ZW5lc3MuXG5cblRoZW4sIGBhdGgxMWtfcGNpX3Byb2JlYCB0YWtlcyBvdmVyIGFuZCBldmVudHVhbGx5IGhpdHMgYGF0aDExa19jb3JlX2luaXRgLCB3aGljaCB0aGVuIGxlYWRzIHRvIGBhdGgxMWtfY29yZV9zb2NfY3JlYXRlYCBhbmQgZmluYWxseSBgYXRoMTFrX3FtaV9pbml0X3NlcnZpY2VgLiBTbywgdGhlIGBxbWlgIHNlcnZpY2UgZ2V0cyBpbml0aWFsaXplZCBwcmV0dHkgZWFybHkgaW4gdGhlIHByb2JlIHNlcXVlbmNlLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gVGhlIHNhbWUgZmxvdyBpcyBhbHNvIGZvbGxvd2VkIGluIGBhdGgxMmtgIHdpdGggYGF0aDEya19xbWlfaW5pdF9zZXJ2aWNlYC5cblxuTm93LCB0aGUgcGF0Y2ggaXRzZWxmIGlzIHdoYXQgcmVhbGx5IGdyYWJzIG15IGF0dGVudGlvbi4gSXQgYWRkcyBlcnJvciBoYW5kbGluZyB0byBib3RoIGBhdGgxMWtfcW1pX2luaXRfc2VydmljZWAgYW5kIGBhdGgxMmtfcW1pX2luaXRfc2VydmljZWAuIFNwZWNpZmljYWxseSwgaXQgYWRkcmVzc2VzIHRoZSBmYWlsdXJlIHNjZW5hcmlvcyBvZiBgYWxsb2Nfb3JkZXJlZF93b3JrcXVldWVgIGFuZCBgcW1pX2FkZF9sb29rdXBgLiBUaGUgb2xkIGNvZGUgaGFkIGEgbGVhazsgaXQgd291bGQgcmV0dXJuIGFuIGVycm9yIGlmIGVpdGhlciBvZiB0aGVzZSBmYWlsZWQsIGJ1dCBpdCB3b3VsZCBsZWF2ZSB0aGUgUU1JIGhhbmRsZSBpbml0aWFsaXplZC4gVGhlIG5ldyBjb2RlIGNvcnJlY3RseSBjYWxscyBgcW1pX2hhbmRsZV9yZWxlYXNlYCBpbiB0aGVzZSBlcnJvciBjYXNlcyB0byBmcmVlIHRoZSBRTUkgaGFuZGxlLlxuXG5UaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2U7IGl0J3MgZml4aW5nIGEgbWVtb3J5L3Jlc291cmNlIGxlYWsuIEdpdmVuIG15IGV4cGVyaWVuY2UsIEkga25vdyBgYWxsb2Nfb3JkZXJlZF93b3JrcXVldWVgICpjYW4qIGZhaWwgdW5kZXIgbWVtb3J5IHByZXNzdXJlIG9yIGlmIHdlJ3ZlIGludHJvZHVjZWQgc29tZSBmYXVsdCBpbmplY3Rpb24sIGFuZCBgcW1pX2FkZF9sb29rdXBgIGlzIGFsc28gcHJvbmUgdG8gZmFpbHVyZSB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnMuIFRoZSBwYXRjaCBjb3JyZWN0cyB0aGlzIGlzc3VlIGJ5IHByb3Blcmx5IHJlbGVhc2luZyB0aGUgaGFuZGxlLlxuXG5UaGlzIGFjdHVhbGx5IG1ha2VzIHRoaXMgYW4gZXhjZWxsZW50IGNhbmRpZGF0ZSBmb3IgZnV6emluZy4gSSBjYW4gY29uc3RydWN0IHRlc3RzIHRoYXQgc2ltdWxhdGUgdGhlc2UgZXJyb3IgcGF0aHMsIGFuZCB2ZXJpZnkgdGhhdCB0aGUgbGVhayBpcyBmaXhlZCwgYW5kIHRoYXQgdGhlcmUgYXJlIG5vIHVzZS1hZnRlci1mcmVlIG9yIGRvdWJsZS1mcmVlIGNvbmRpdGlvbnMuIEl0J3MgYSB0YXJnZXRlZCBwYXRjaCwgbWFraW5nIHZlcmlmaWNhdGlvbiBtdWNoIGVhc2llci5cblxuQmVmb3JlIEkgZ28gZnVydGhlciwgSSBzaG91bGQgY2hlY2sgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEZvciBgYXRoMTFrYCBJIG5lZWQgYENPTkZJR19BVEgxMUtgIGFuZCBgQ09ORklHX0FUSDExS19QQ0lgIChvciBgQ09ORklHX0FUSDExS19BSEJgKSwgYW5kIGZvciBgYXRoMTJrYCBJIG5lZWQgYENPTkZJR19BVEgxMktgIGFuZCBgQ09ORklHX0FUSDEyS19QQ0lgIChvciBgQ09ORklHX0FUSDEyS19BSEJgKS4gSSdsbCBkb3VibGUtY2hlY2sgdGhlIGV4YWN0IG5hbWVzIGluIHRoZSBgS2NvbmZpZ2AgZmlsZXMgaW4gdGhlIGRyaXZlciBkaXJlY3RvcmllcyBqdXN0IHRvIGJlIGNlcnRhaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MjcwLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjYxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMThUMDg6MjM6NTEuMTkzNDk4NTYyWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDE3ODQzMzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBBVEgxMUtcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlLUNsZWFyXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9LY29uZmlnOjI6Y29uZmlnIEFUSDExS1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJRdWFsY29tbSA4MDIuMTFheCBjaGlwc2V0IHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL0tjb25maWctMTItXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9LY29uZmlnOjEzOmNvbmZpZyBBVEgxMUtfQUhCXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9LY29uZmlnLTE0LVxcdHRyaXN0YXRlIFxcXCJBdGhlcm9zIGF0aDExayBBSEIgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvS2NvbmZpZy0xOS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL0tjb25maWc6MjA6Y29uZmlnIEFUSDExS19QQ0lcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL0tjb25maWctMjEtXFx0dHJpc3RhdGUgXFxcIkF0aGVyb3MgYXRoMTFrIFBDSSBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9LY29uZmlnLTI5LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvS2NvbmZpZzozMDpjb25maWcgQVRIMTFLX0RFQlVHXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9LY29uZmlnLTMxLVxcdGJvb2wgXFxcIlFDQSBhdGgxMWsgZGVidWdnaW5nXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9LY29uZmlnLTM3LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvS2NvbmZpZzozODpjb25maWcgQVRIMTFLX0RFQlVHRlNcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL0tjb25maWctMzktXFx0Ym9vbCBcXFwiUUNBIGF0aDExayBkZWJ1Z2ZzIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL0tjb25maWctNDUtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9LY29uZmlnOjQ2OmNvbmZpZyBBVEgxMUtfVFJBQ0lOR1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvS2NvbmZpZy00Ny1cXHRib29sIFxcXCJhdGgxMWsgdHJhY2luZyBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9LY29uZmlnLTUxLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvS2NvbmZpZzo1Mjpjb25maWcgQVRIMTFLX1NQRUNUUkFMXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9LY29uZmlnLTUzLVxcdGJvb2wgXFxcIlFDQSBhdGgxMWsgc3BlY3RyYWwgc2NhbiBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9LY29uZmlnLTYwLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvS2NvbmZpZzo2MTpjb25maWcgQVRIMTFLX0NGUlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvS2NvbmZpZy02Mi1cXHRib29sIFxcXCJhdGgxMWsgY2hhbm5lbCBmcmVxdWVuY3kgcmVzcG9uc2Ugc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMThUMDg6MjM6NTMuMjExMzQ5NDQxWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5MTE1MzcyMzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGVsdmluZyBpbnRvIGBhdGgxMmtgIC0gQSBRdWljayBSZS1jYXAqKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUsIHdoYXQgd2VyZSB3ZSBkb2luZz8gQWggeWVzLCBjaXJjbGluZyBiYWNrIHRvIGBhdGgxMmtgLiBNeSBtaW5kIGluc3RhbnRseSBnb2VzIHRvIHRoZSBjb21wbGV4aXRpZXMgd2UndmUgYmVlbiB3b3JraW5nIHdpdGgsIHNvIGhlcmUncyB3aGF0IEknbSB0aGlua2luZzpcblxuKiAgICoqVW5kZXJzdGFuZGluZyB0aGUgQXJjaGl0ZWN0dXJlOioqIEkgbmVlZCB0byByZWZyZXNoIHRoZSBgYXRoMTJrYCBhcmNoaXRlY3R1cmUgaW4gbXkgbWluZDogd2hpY2ggcGFydGljdWxhciBjb21wb25lbnRzIHdlIHdlcmUgaW52ZXN0aWdhdGluZywgd2hpY2ggc3BlY2lmaWMgYXNwZWN0cyBvZiB0aGUgZmlybXdhcmUncyBmdW5jdGlvbiB3ZXJlIHJlbGV2YW50IHRvIHRoZSBwcmVzZW50IG5lZWQsIGFuZCBob3cgaXQgaXMgZGlmZmVyZW50IGZyb20gYXRoMTFrIChpZiB0aGF0IGlzIGV2ZW4gYXBwbGljYWJsZSkuXG5cbiogICAqKkZpcm13YXJlIGludGVyYWN0aW9ucyoqOiBUaGUgaW50ZXJhY3Rpb25zIGJldHdlZW4gdGhlIGZpcm13YXJlIGFuZCB0aGUga2VybmVsIHdlcmUgcGFydGljdWxhcmx5IGludm9sdmVkOyBlc3BlY2lhbGx5IGFueSBpbnRlcnJ1cHQtZHJpdmVuIGhhbmRsaW5nIG9yIGFueSBzaGFyZWQgbWVtb3J5IHN0cnVjdHVyZXMuIFdoYXQgd2VyZSB0aGUgc3BlY2lmaWMgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBob3cgd2VyZSB3ZSBjaGFuZ2luZyB0aGVtIHRvIGFjaGlldmUgd2hhdCB3ZSBuZWVkZWQ/XG5cbiogICAqKlBlcmZvcm1hbmNlIEJvdHRsZW5lY2tzOioqIFdoYXQgd2VyZSB0aGUgcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgd2Ugd2VyZSBleHBlY3RpbmcgdG8gc2VlPyBXaGF0IGRpZCB3ZSBkbyB0byB0cnkgYW5kIGdldCBhcm91bmQgdGhlbT9cblxuKiAgICoqS2V5IERlYnVnZ2luZyBQb2ludHM6KiogV2hhdCB3ZXJlIHRoZSBzcGVjaWZpYyB0ZXN0IHBhcmFtZXRlcnMgd2UgdXNlZCB0byByZXBsaWNhdGUgdGhlIGlzc3VlPyBIb3cgZGlkIHdlIGdhdGhlciBtZXRyaWNzPyBXYXMgdGhlcmUgYSBzcGVjaWZpYyB0b29sIG9yIGRlYnVnZ2luZyBtZXRob2Qgd2UgdXNlZCB0byBpc29sYXRlIHByb2JsZW1zPyBJIG5lZWQgdG8gZm9jdXMgb24gd2hhdCBkYXRhIHdlIHdlcmUgZXhhbWluaW5nIHRvIGFycml2ZSBhdCBvdXIgaW5pdGlhbCBjb25jbHVzaW9ucy5cbiogICAqKkNvbnRleHR1YWwgQ29uc2lkZXJhdGlvbnM6KiogTW9zdCBpbXBvcnRhbnRseSwgSSBuZWVkIHRvIHJlbWluZCBteXNlbGYgb2YgdGhlIFwid2h5XCIuIFdoeSB3ZXJlIHdlIGludmVzdGlnYXRpbmcgdGhpcyBkcml2ZXI/IFdoYXQgd2FzIHRoZSBoaWdoZXItbGV2ZWwgcHJvYmxlbSB3ZSB3ZXJlIHRyeWluZyB0byBzb2x2ZSwgYW5kIHdoYXQgd2VyZSB0aGUgY29uc3RyYWludHMgb2YgdGhlIHRhcmdldCBoYXJkd2FyZT8gVGhlIHVsdGltYXRlIHVzZXIgbmVlZHMgdG8gYmUgcmVmcmVzaGVkIHRvby5cbiogICAqKlRoZSBOZXh0IFN0ZXBzOioqIFdoYXQgZGlkIHdlIHRoaW5rIHRoZSBuZXh0IHN0ZXBzIHdlcmU/IEkgc2hvdWxkIGFsc28ga2VlcCBpbiBtaW5kIHdoZXRoZXIgd2UgaWRlbnRpZmllZCBhbnkgbW9yZSB3b3JrIHdoaWNoIG5lZWRzIHRvIGJlIGRvbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMjQxLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xOFQwODoyMzo1Ny4xMjI4ODkxNzhaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3Nzg5MjU1MTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEFUSDEyS1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UtQ2xlYXJcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWc6Mjpjb25maWcgQVRIMTJLXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIlF1YWxjb21tIFdpLUZpIDcgc3VwcG9ydCAoYXRoMTJrKVxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvS2NvbmZpZy0xNi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWc6MTc6Y29uZmlnIEFUSDEyS19BSEJcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWctMTgtXFx0Ym9vbCBcXFwiUXVhbGNvbW0gYXRoMTJrIEFIQiBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnLTI0LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvS2NvbmZpZzoyNTpjb25maWcgQVRIMTJLX0RFQlVHXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnLTI2LVxcdGJvb2wgXFxcImF0aDEyayBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWctMzQtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnOjM1OmNvbmZpZyBBVEgxMktfREVCVUdGU1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvS2NvbmZpZy0zNi1cXHRib29sIFxcXCJRdWFsY29tbSBhdGgxMmsgZGVidWdmcyBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnLTQzLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvS2NvbmZpZzo0NDpjb25maWcgQVRIMTJLX1RSQUNJTkdcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWctNDUtXFx0Ym9vbCBcXFwiYXRoMTJrIHRyYWNpbmcgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvS2NvbmZpZy01Mi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWc6NTM6Y29uZmlnIEFUSDEyS19DT1JFRFVNUFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvS2NvbmZpZy01NC1cXHRib29sIFxcXCJhdGgxMmsgY29yZWR1bXBcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE4VDA4OjIzOjU4LjkwMTgxOTM4M1oiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDM3MTEyMzM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUuIFRoaXMgYEFUSDEyS19QQ0lgIHRoaW5nLi4uIGl0J3MgdGhyb3dpbmcgYSBmbGFnLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJXYWl0IGEgbWludXRlLCBpcyB0aGF0IGV2ZW4gYSB0aGluZz8gRG9lc24ndCByaW5nIGEgYmVsbC5cIiBMZXQncyB2ZXJpZnkuIE15IGZpcnN0IGluc3RpbmN0LCBhcyBhbHdheXMsIGlzIHRvIGRpdmUgaW50byB0aGUgS2NvbmZpZy4gSSdsbCBoZWFkIHN0cmFpZ2h0IHRvIGBkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWdgLiBUaGF0J3Mgd2hlcmUgYWxsIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoYXQgZmFtaWx5IG9mIGRyaXZlcnMgbGl2ZS4gSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBQQ0kgc3VwcG9ydCwgaW4gcGFydGljdWxhciwgaXMgZGVmaW5lZCBvciBldmVuIG1lbnRpb25lZCB0aGVyZS4gVGhhdCdzIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IHRvIGRldGVybWluZSBpZiB0aGlzIGNvZGUgcGF0aCBpcyB2YWxpZCBvciBpZiB0aGVyZSdzIGEgbWlzdW5kZXJzdGFuZGluZyBzb21ld2hlcmUuIEknbGwgdXNlIHRoZSBLY29uZmlnIHRvIHVuZGVyc3RhbmQgdGhlIHdob2xlIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMTcyLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMThUMDg6MjQ6MDIuMzM4OTM0MjA5WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjczODkzMTAxLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQVRIMTJLX1BDSVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMThUMDg6MjQ6MDQuMDEyODM0MTcxWiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1NzIzNTM2MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSBgZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnYCBmaWxlLlxuXG4qKkRpdmluZyBpbnRvIHRoZSBBdGhlcm9zIGF0aDEyayBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGludG8gdGhpcyBgS2NvbmZpZ2AgZmlsZSBmb3IgdGhlIGF0aDEyayBkcml2ZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBzdHJ1Y3R1cmVkIGZvciB0aGlzIHNwZWNpZmljIFF1YWxjb21tIEF0aGVyb3Mgd2lyZWxlc3MgY2hpcHNldC4gTXkgaW5pdGlhbCBnb2FsIGlzIHRvIHNlZSB3aGF0IGdyYW51bGFyIGNvbnRyb2wgaXMgZXhwb3NlZCB0byB0aGUgdXNlciwgd2hhdCBmZWF0dXJlcyBhcmUgb3B0aW9uYWwsIGFuZCBob3cgdGhleSByZWxhdGUgdG8gdGhlIGNvcmUgZnVuY3Rpb25hbGl0eS4gSSdtIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlOlxuXG4qICAgKipDaGlwc2V0IFNwZWNpZmljIEZlYXR1cmVzOioqIEFyZSB0aGVyZSBvcHRpb25zIGZvciBlbmFibGluZyBvciBkaXNhYmxpbmcgcGFydGljdWxhciBoYXJkd2FyZSBmZWF0dXJlcyBiYXNlZCBvbiB0aGUgc3BlY2lmaWMgYXRoMTJrIGNoaXBzZXQgdmFyaWFudD8gSSdkIGV4cGVjdCB0byBmaW5kIHRoaW5ncyB0aWVkIHRvIHNwZWNpZmljIFBIWSBtb2Rlcywgb3IgcG93ZXItc2F2aW5nIGNvbmZpZ3VyYXRpb25zLlxuKiAgICoqRHJpdmVyIEZlYXR1cmVzOioqIFdoYXQga25vYnMgZG9lcyB0aGUgZHJpdmVyIGV4cG9zZSB0byB0aGUgdXNlcj8gQXJlIHRoZXJlIGRlYnVnZ2luZyBvcHRpb25zLCBhZHZhbmNlZCBzZXR0aW5ncyAobGlrZSB0aG9zZSByZWxhdGVkIHRvIGZpcm13YXJlIGxvYWRpbmcsIHJhdGUgY29udHJvbCBhbGdvcml0aG1zLCBvciByZWd1bGF0b3J5IGRvbWFpbiBoYW5kbGluZyksIG9yIHNwZWNpZmljIGZlYXR1cmVzIGZvciBkaWZmZXJlbnQgV2ktRmkgc3RhbmRhcmRzICg4MDIuMTFheCwgODAyLjExYWMsIGV0Yy4pPyBJIHdhbnQgdG8gc2VlIGhvdyBtdWNoIGZsZXhpYmlsaXR5IHRoZSBzeXN0ZW0gZ2l2ZXMgbWUgd2hlbiB0dW5pbmcgYSBkZXZpY2UuXG4qICAgKipEZXBlbmRlbmNpZXM6KiogQXJlIHRoZXJlIGFueSBkZXBlbmRlbmNpZXMgb24gb3RoZXIga2VybmVsIGZlYXR1cmVzIG9yIGRyaXZlcnM/IFRoaXMgaXMgY3JpdGljYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IGF0aDEyayBpbnRlZ3JhdGVzIGludG8gdGhlIGJpZ2dlciBwaWN0dXJlLiBJJ20gdGhpbmtpbmcgb2YgZGVwZW5kZW5jaWVzIG9uIHJlZ3VsYXRvcnkgZGF0YWJhc2UgZmVhdHVyZXMsIGZpcm13YXJlIGxvYWRpbmcgbWVjaGFuaXNtcywgb3Igb3RoZXIgbmV0d29yayBzdGFjayBjb21wb25lbnRzLiBJIG5lZWQgdG8ga25vdyB3aGF0IHRvIGVuYWJsZSBvciBkaXNhYmxlIGluIG9yZGVyIHRvIGdldCB0aGUgYXRoMTJrIGRyaXZlciB0byBmdW5jdGlvbiBpbiBhbiBleHBlY3RlZCB3YXkuXG4qICAgKipEZWZhdWx0IFZhbHVlcyBhbmQgSGVscCBUZXh0OioqIFRoZSBkZWZhdWx0IHZhbHVlcyBhbmQgaGVscCB0ZXh0IGFyZSBlc3NlbnRpYWwuIFRoZXkgcXVpY2tseSB0ZWxsIG1lIHdoYXQncyBpbXBvcnRhbnQsIHdoYXQgdGhlIGltcGxpY2F0aW9ucyBvZiBjaGFuZ2luZyBhIHNldHRpbmcgYXJlLCBhbmQgaG93IHRoZSBkZWZhdWx0IGNob2ljZXMgcmVsYXRlIHRvIHRoZSBnZW5lcmFsIG9wZXJhdGluZyBjb25kaXRpb25zLiBJJ2xsIGZvY3VzIG9uIHRoZXNlIHRvIGdldCBhIHF1aWNrIG92ZXJ2aWV3LlxuKiAgICoqTWVudSBzdHJ1Y3R1cmUqKjogRmluYWxseSwgdGhlIG1lbnUgc3RydWN0dXJlIHdpbGwgc2hvdyBtZSBob3cgYWxsIHRoZXNlIG9wdGlvbnMgYXJlIGdyb3VwZWQgdG9nZXRoZXIuIFRoaXMgcmV2ZWFscyB0aGUgbG9naWMgb2YgaG93IFF1YWxjb21tIGlzIG1hbmFnaW5nIHRoZSBkcml2ZXIncyBmZWF0dXJlIHNldCBhbmQgaG93IGl0IHByZXNlbnRzIHRoZSBvcHRpb25zIHRvIHRoZSBrZXJuZWwgdXNlci5cblxuSSdsbCBiZSBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBjb25kaXRpb25hbCBjb25maWd1cmF0aW9ucyAodXNpbmcgYGRlcGVuZHMgb25gLCBgc2VsZWN0YCwgZXRjLikgdG8gZ2V0IGEgZ29vZCBoYW5kbGUgb24gaG93IGRpZmZlcmVudCBjb25maWd1cmF0aW9ucyBpbnRlcmFjdCwgYW5kIGhvdyB0byBhdm9pZCBwb3RlbnRpYWwgY29uZmxpY3RzIHdoZW4gY3VzdG9taXppbmcgdGhlIGJ1aWxkLiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZmluZCFcblxuXG4iLCJJbnB1dFRva2VucyI6MjE0MDksIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xOFQwODoyNDowOC41ODUxOTAyODRaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzE3NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZS1DbGVhclxcbiAgIDI6XFx0Y29uZmlnIEFUSDEyS1xcbiAgIDM6XFx0XFx0dHJpc3RhdGUgXFxcIlF1YWxjb21tIFdpLUZpIDcgc3VwcG9ydCAoYXRoMTJrKVxcXCJcXG4gICA0OlxcdFxcdGRlcGVuZHMgb24gTUFDODAyMTEgXFx1MDAyNlxcdTAwMjYgSEFTX0RNQSBcXHUwMDI2XFx1MDAyNiBQQ0lcXG4gICA1OlxcdFxcdHNlbGVjdCBRQ09NX1FNSV9IRUxQRVJTXFxuICAgNjpcXHRcXHRzZWxlY3QgTUhJX0JVU1xcbiAgIDc6XFx0XFx0c2VsZWN0IFFSVFJcXG4gICA4OlxcdFxcdHNlbGVjdCBRUlRSX01ISVxcbiAgIDk6XFx0XFx0c2VsZWN0IFBDSV9QV1JDVFJMX1BXUlNFUSBpZiBIQVZFX1BXUkNUUkxcXG4gIDEwOlxcdFxcdGhlbHBcXG4gIDExOlxcdFxcdCAgRW5hYmxlIHN1cHBvcnQgZm9yIFF1YWxjb21tIFRlY2hub2xvZ2llcyBXaS1GaSA3IChJRUVFXFxuICAxMjpcXHRcXHQgIDgwMi4xMWJlKSBmYW1pbHkgb2YgY2hpcHNldHMsIGZvciBleGFtcGxlIFdDTjc4NTAgYW5kXFxuICAxMzpcXHRcXHQgIFFDTjkyNzQuXFxuICAxNDpcXHRcXG4gIDE1OlxcdFxcdCAgSWYgeW91IGNob29zZSB0byBidWlsZCBhIG1vZHVsZSwgaXQnbGwgYmUgY2FsbGVkIGF0aDEyay5cXG4gIDE2OlxcdFxcbiAgMTc6XFx0Y29uZmlnIEFUSDEyS19BSEJcXG4gIDE4OlxcdFxcdGJvb2wgXFxcIlF1YWxjb21tIGF0aDEyayBBSEIgc3VwcG9ydFxcXCJcXG4gIDE5OlxcdFxcdGRlcGVuZHMgb24gQVRIMTJLIFxcdTAwMjZcXHUwMDI2IFJFTU9URVBST0NcXG4gIDIwOlxcdFxcdHNlbGVjdCBRQ09NX01EVF9MT0FERVJcXG4gIDIxOlxcdFxcdHNlbGVjdCBRQ09NX1NDTVxcbiAgMjI6XFx0XFx0aGVscFxcbiAgMjM6XFx0XFx0ICBFbmFibGUgc3VwcG9ydCBmb3IgQXRoMTJrIEFIQiBidXMgY2hpcHNldHMsIGV4YW1wbGUgSVBRNTMzMi5cXG4gIDI0OlxcdFxcbiAgMjU6XFx0Y29uZmlnIEFUSDEyS19ERUJVR1xcbiAgMjY6XFx0XFx0Ym9vbCBcXFwiYXRoMTJrIGRlYnVnZ2luZ1xcXCJcXG4gIDI3OlxcdFxcdGRlcGVuZHMgb24gQVRIMTJLXFxuICAyODpcXHRcXHRoZWxwXFxuICAyOTpcXHRcXHQgIEVuYWJsZSBkZWJ1ZyBzdXBwb3J0LCBmb3IgZXhhbXBsZSBkZWJ1ZyBtZXNzYWdlcyB3aGljaCBtdXN0XFxuICAzMDpcXHRcXHQgIGJlIGVuYWJsZWQgc2VwYXJhdGVseSB1c2luZyB0aGUgZGVidWdfbWFzayBtb2R1bGUgcGFyYW1ldGVyLlxcbiAgMzE6XFx0XFxuICAzMjpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IFkgdG8gbWFrZSBpdCBlYXNpZXIgdG8gZGVidWcgcHJvYmxlbXMuIEJ1dCBpZlxcbiAgMzM6XFx0XFx0ICB5b3Ugd2FudCBvcHRpbWFsIHBlcmZvcm1hbmNlIGNob29zZSBOLlxcbiAgMzQ6XFx0XFxuICAzNTpcXHRjb25maWcgQVRIMTJLX0RFQlVHRlNcXG4gIDM2OlxcdFxcdGJvb2wgXFxcIlF1YWxjb21tIGF0aDEyayBkZWJ1Z2ZzIHN1cHBvcnRcXFwiXFxuICAzNzpcXHRcXHRkZXBlbmRzIG9uIEFUSDEySyBcXHUwMDI2XFx1MDAyNiBNQUM4MDIxMV9ERUJVR0ZTXFxuICAzODpcXHRcXHRoZWxwXFxuICAzOTpcXHRcXHQgIEVuYWJsZSBhdGgxMmsgZGVidWdmcyBzdXBwb3J0XFxuICA0MDpcXHRcXG4gIDQxOlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgWSB0byBtYWtlIGl0IGVhc2llciB0byBkZWJ1ZyBwcm9ibGVtcy4gQnV0IGlmXFxuICA0MjpcXHRcXHQgIHlvdSB3YW50IG9wdGltYWwgcGVyZm9ybWFuY2UgY2hvb3NlIE4uXFxuICA0MzpcXHRcXG4gIDQ0OlxcdGNvbmZpZyBBVEgxMktfVFJBQ0lOR1xcbiAgNDU6XFx0XFx0Ym9vbCBcXFwiYXRoMTJrIHRyYWNpbmcgc3VwcG9ydFxcXCJcXG4gIDQ2OlxcdFxcdGRlcGVuZHMgb24gQVRIMTJLIFxcdTAwMjZcXHUwMDI2IEVWRU5UX1RSQUNJTkdcXG4gIDQ3OlxcdFxcdGhlbHBcXG4gIDQ4OlxcdFxcdCAgRW5hYmxlIGF0aDEyayB0cmFjaW5nIGluZnJhc3RydWN0dXJlLlxcbiAgNDk6XFx0XFxuICA1MDpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IFkgdG8gbWFrZSBpdCBlYXNpZXIgdG8gZGVidWcgcHJvYmxlbXMuIEJ1dCBpZlxcbiAgNTE6XFx0XFx0ICB5b3Ugd2FudCBvcHRpbWFsIHBlcmZvcm1hbmNlIGNob29zZSBOLlxcbiAgNTI6XFx0XFxuICA1MzpcXHRjb25maWcgQVRIMTJLX0NPUkVEVU1QXFxuICA1NDpcXHRcXHRib29sIFxcXCJhdGgxMmsgY29yZWR1bXBcXFwiXFxuICA1NTpcXHRcXHRkZXBlbmRzIG9uIEFUSDEyS1xcbiAgNTY6XFx0XFx0c2VsZWN0IFdBTlRfREVWX0NPUkVEVU1QXFxuICA1NzpcXHRcXHRoZWxwXFxuICA1ODpcXHRcXHQgIEVuYWJsZSBhdGgxMmsgY29yZWR1bXAgY29sbGVjdGlvblxcbiAgNTk6XFx0XFxuICA2MDpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IFkgdG8gbWFrZSBpdCBlYXNpZXIgdG8gZGVidWcgcHJvYmxlbXMuIEJ1dCBpZlxcbiAgNjE6XFx0XFx0ICBkdW1wIGNvbGxlY3Rpb24gbm90IHJlcXVpcmVkIGNob29zZSBOLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xOFQwODoyNDowOC41ODUyNjMxMzVaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjE3OTA0MzE0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBBVEgxMksgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcywgYEFUSDEyS2AgaW5oZXJlbnRseSByZWxpZXMgb24gYFBDSWAsIGFuZCBpdCBzZWVtcyB0aGUgYnVpbGQgc3lzdGVtIGVuYWJsZXMgUENJIHN1cHBvcnQgYnkgZGVmYXVsdC4gUmlnaHQsIHNvIGlmIEkgd2FudCB0byBlbnN1cmUgZXZlcnl0aGluZyBpcyBpbiBwbGFjZSwgdGhlIGNvcmUgY29uZmlndXJhdGlvbnMgSSBuZWVkIHRvIHNldCBhcmUgYEFUSDExS2AsIGBBVEgxMUtfUENJYCwgYEFUSDExS19BSEJgLCBgQVRIMTJLYCwgYW5kIGBBVEgxMktfQUhCYC4gTm93LCBoYW5nIG9uIGEgc2Vjb25kLCBgQVRIMTFLX1BDSWAgYW5kIGBBVEgxMUtfQUhCYCBhcmUgdHJpc3RhdGUgb3B0aW9ucywgYXMgaXMgYEFUSDEyS2AsIHdoaWxlIGBBVEgxMktfQUhCYCBpcyBhIEJvb2xlYW4uIEdpdmVuIHRoYXQsIHRoZSBtb3N0IHN0cmFpZ2h0Zm9yd2FyZCBhcHByb2FjaCBzZWVtcyB0byBiZSB0byBlbmFibGUgYEFUSDExS2AsIGBBVEgxMUtfUENJYCwgYW5kIGBBVEgxMktgLiBUaGF0IHNob3VsZCBjb3ZlciB0aGUgZXNzZW50aWFscy5cblxuTGV0J3Mgc2hpZnQgZm9jdXMgbm93LiBJIG5lZWQgdG8gemVybyBpbiBvbiB0aGUga2V5IG1vZGlmaWVkIGZ1bmN0aW9ucy4gVGhlIGluZGljYXRvcnMgYXJlIGBhdGgxMWtfcW1pX2luaXRfc2VydmljZWAgYW5kIGBhdGgxMmtfcW1pX2luaXRfc2VydmljZWAuIFRob3NlIGFyZSBnb29kLCB3ZWxsLWRlZmluZWQgZm9jdXMgc3ltYm9scy4gSSBxdWlja2x5IHNjYW4uLi4gb2theSwgdGhlcmUgYXJlbid0IGFueSBvdGhlciBmdW5jdGlvbnMgdGhhdCB3ZXJlIG9idmlvdXNseSBjaGFuZ2VkLiBHb29kLlxuXG5BbHJpZ2h0LCBub3cgdGhlIGltcG9ydGFudCBxdWVzdGlvbi4gQ2FuIEkgcmVhY2ggYGF0aDExa19xbWlfaW5pdF9zZXJ2aWNlYCBldmVuIHdoZW4gbm8gYWN0dWFsIGhhcmR3YXJlIGlzIHByZXNlbnQ/IFdlIGtub3cgc3l6a2FsbGVyIGNhbiBpbmplY3QgdmlydHVhbCBQQ0kgZGV2aWNlcywgd2hpY2ggd291bGQgdHJpZ2dlciBgYXRoMTFrX3BjaV9wcm9iZWAuIEZvbGxvd2luZyB0aGUgZXhlY3V0aW9uIHBhdGgsIGBhdGgxMWtfcGNpX3Byb2JlYCBjYWxscyBgYXRoMTFrX2NvcmVfaW5pdGAsIGFuZCBmcm9tIHRoZXJlIHdlIGdldCBgYXRoMTFrX2NvcmVfc29jX2NyZWF0ZWAsIHdoaWNoIGZpbmFsbHkgY2FsbHMgYGF0aDExa19xbWlfaW5pdF9zZXJ2aWNlYC4gVGhlIG9ubHkgc3RpY2tpbmcgcG9pbnQgc2VlbXMgdG8gYmUgYGF0aDExa19taGlfcmVnaXN0ZXJgLCBidXQgZnJvbSB3aGF0IEkgcmVjYWxsLCB0aGF0IGp1c3QgcmVnaXN0ZXJzIHRoZSBNSEkgY29udHJvbGxlciBhbmQgaXNuJ3QgYSBibG9ja2VyLiBXYWl0Li4ud2hhdCBhYm91dCBgYXRoMTFrX3BjaV9yZWFkX2h3X3ZlcnNpb25gPyBUaGF0IHJlcXVpcmVzIGNsb3NlciBzY3J1dGlueS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI4MjYsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xOFQwODoyNDoxNC43NjQzMDk2MDRaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MzE3OTM0NjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXRoMTFrX3BjaV9yZWFkX2h3X3ZlcnNpb25cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9wY2kuYz04OTk9c3RhdGljIGNvbnN0IHN0cnVjdCBhdGgxMWtfaGlmX29wcyBhdGgxMWtfcGNpX2hpZl9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3BjaS5jLTkyMS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3BjaS5jOjkyMjpzdGF0aWMgdm9pZCBhdGgxMWtfcGNpX3JlYWRfaHdfdmVyc2lvbihzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiLCB1MzIgKm1ham9yLCB1MzIgKm1pbm9yKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvcGNpLmMtOTIzLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvcGNpLmM9OTQ1PXN0YXRpYyBpbnQgYXRoMTFrX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvcGNpLmMtMTAwMS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3BjaS5jOjEwMDI6XFx0XFx0YXRoMTFrX3BjaV9yZWFkX2h3X3ZlcnNpb24oYWIsIFxcdTAwMjZzb2NfaHdfdmVyc2lvbl9tYWpvcixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3BjaS5jLTEwMDMtXFx0XFx0XFx0XFx0XFx0ICAgXFx1MDAyNnNvY19od192ZXJzaW9uX21pbm9yKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvcGNpLmMtMTAzMC1cXHRcXHRhYi1cXHUwMDNlaWQuYmRmX3NlYXJjaCA9IEFUSDExS19CREZfU0VBUkNIX0JVU19BTkRfQk9BUkQ7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9wY2kuYzoxMDMxOlxcdFxcdGF0aDExa19wY2lfcmVhZF9od192ZXJzaW9uKGFiLCBcXHUwMDI2c29jX2h3X3ZlcnNpb25fbWFqb3IsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9wY2kuYy0xMDMyLVxcdFxcdFxcdFxcdFxcdCAgIFxcdTAwMjZzb2NfaHdfdmVyc2lvbl9taW5vcik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE4VDA4OjI0OjE2LjU5NjExMDQ3NVoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MzE1ODIwMzM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBgYXRoMTFrX3BjaV9yZWFkX2h3X3ZlcnNpb25gIGZ1bmN0aW9uLiBJJ20gaW1tZWRpYXRlbHkgaW50ZXJlc3RlZCBpbiB3aGF0IHRoaXMgcm91dGluZSBpcyB0cnlpbmcgdG8gYWNjb21wbGlzaCDigJMgdGhlIG5hbWUgc3VnZ2VzdHMgd2UncmUgZGVhbGluZyB3aXRoIGhhcmR3YXJlIHZlcnNpb24gaW5mb3JtYXRpb24sIHByb2JhYmx5IHJlbGF0ZWQgdG8gdGhlIFBDSSBpbnRlcmZhY2UgYW5kIHRoaXMgcGFydGljdWxhciBhdGgxMWsgZHJpdmVyLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcXVpY2tseSBhc2NlcnRhaW4gaXRzIHBsYWNlIHdpdGhpbiB0aGUgYnJvYWRlciBQQ0kgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UuIElzIHRoaXMgcGFydCBvZiBhIHByb2JlIHJvdXRpbmU/IENhbGxlZCBlYXJseSBpbiB0aGUgc2V0dXA/IE9yIGlzIGl0IHNvbWV0aGluZyBhY2Nlc3NlZCBsYXRlciBvbiwgcGVyaGFwcyBmb3IgZGlhZ25vc3RpYyBwdXJwb3NlcyBvciBkdXJpbmcgZmlybXdhcmUgbG9hZGluZz8gVW5kZXJzdGFuZGluZyBpdHMgY29udGV4dCBpcyBjcnVjaWFsLlxuXG5JIG5lZWQgdG8gc2VlIGhvdyB0aGUgaGFyZHdhcmUgdmVyc2lvbiBpcyBhY3R1YWxseSByZWFkLiBBcmUgd2UgdXNpbmcgc3RhbmRhcmQgUENJIGNvbmZpZ3VyYXRpb24gc3BhY2UgcmVhZHM/IE9yIGFyZSB0aGVyZSBzb21lIGN1c3RvbSByZWdpc3RlciBhY2Nlc3NlcyBpbnZvbHZlZCBzcGVjaWZpYyB0byBRdWFsY29tbSdzIGhhcmR3YXJlPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBlcnJvciBjb25kaXRpb25zIEkgc2hvdWxkIGJlIG9uIHRoZSBsb29rb3V0IGZvcj8gQW5kIGlmIHNvLCBob3cgaXMgdGhlIGVycm9yIGhhbmRsZWQuIFdoYXQgaXMgdGhlIGV4cGVjdGVkIGZvcm1hdCBvZiB0aGlzIFwidmVyc2lvblwiIGRhdGE/IElzIGl0IGEgc2ltcGxlIGludGVnZXIsIG9yIGEgbW9yZSBjb21wbGV4IHN0cnVjdHVyZT8gQXJlIHRoZXJlIGltcGxpY2F0aW9ucyBmb3IgZGV2aWNlIGNvbXBhdGliaWxpdHkgb3IgZmVhdHVyZSBzZXRzIGJhc2VkIG9uIHRoZSByZXBvcnRlZCB2ZXJzaW9uPyBBbmQgd2hhdCBoYXBwZW5zIGlmIHRoZSByZWFkIGZhaWxzPyBEb2VzIGl0IHJldHJ5PyBEb2VzIGl0IHByb3ZpZGUgYSBtZWFuaW5nZnVsIGVycm9yIGNvZGUgYmFjayB0byB0aGUgY2FsbGVyPyBUaGVzZSBhcmUgYWxsIHF1ZXN0aW9ucyB0aGF0IG5lZWQgYW5zd2VyaW5nLlxuXG5JJ2QgYWxzbyB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIGltcGFjdCBvZiBhbnkgaGFyZHdhcmUgdmVyc2lvbiBjaGVja3MsIGFuZCBwb3RlbnRpYWwgdmVyc2lvbi1zcGVjaWZpYyBiZWhhdmlvcnMgd2l0aGluIHRoZSBkcml2ZXIuIERvZXMgdGhlIGNvZGUgYnJhbmNoIGJhc2VkIG9uIHRoZSByZXBvcnRlZCBoYXJkd2FyZSB2ZXJzaW9uPyBBcmUgdGhlcmUgZGlmZmVyZW50IGluaXRpYWxpemF0aW9uIHNlcXVlbmNlcywgcmVnaXN0ZXIgc2V0dGluZ3MsIG9yIGV2ZW4gZmlybXdhcmUgbG9hZHMgYmFzZWQgb24gdGhpcyBpbmZvcm1hdGlvbj8gSSdsbCBuZWVkIHRvIHRyYWNlIHRoZSBmbG93IG9mIGV4ZWN1dGlvbiBhZnRlciB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCwgdG8gc2VlIGhvdyB0aGUgaGFyZHdhcmUgdmVyc2lvbiBpcyBhY3R1YWxseSAqdXNlZCouIFRoaXMgaGVscHMgaWRlbnRpZnkgYW55IGFyZWFzIHRoYXQgY291bGQgaGF2ZSBwb3RlbnRpYWwgY29tcGF0aWJpbGl0eSBvciBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMgYmFzZWQgb24gdGhlIHZlcnNpb24gb2YgdGhlIGhhcmR3YXJlLCBvciBldmVuIGhvdyB0aGUgZHJpdmVyIGhhbmRsZXMgZGlmZmVyZW50IGdlbmVyYXRpb25zIG9mIHRoZSBQQ0kgaW50ZXJmYWNlLiBPdmVyYWxsLCBJIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgaXQgaWRlbnRpZmllcyBhbmQgaW50ZXJhY3RzIHdpdGggdGhlIHBoeXNpY2FsIGhhcmR3YXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDEzMywiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE4VDA4OjI0OjIxLjkxMTkzMzQxWiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk2ODQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvcGNpLmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTIyLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgOTIyOlxcdHN0YXRpYyB2b2lkIGF0aDExa19wY2lfcmVhZF9od192ZXJzaW9uKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIsIHUzMiAqbWFqb3IsIHUzMiAqbWlub3IpXFxuIDkyMzpcXHR7XFxuIDkyNDpcXHRcXHR1MzIgc29jX2h3X3ZlcnNpb247XFxuIDkyNTpcXHRcXG4gOTI2OlxcdFxcdHNvY19od192ZXJzaW9uID0gYXRoMTFrX3BjaWNfcmVhZDMyKGFiLCBUQ1NSX1NPQ19IV19WRVJTSU9OKTtcXG4gOTI3OlxcdFxcdCptYWpvciA9IEZJRUxEX0dFVChUQ1NSX1NPQ19IV19WRVJTSU9OX01BSk9SX01BU0ssXFxuIDkyODpcXHRcXHRcXHRcXHQgICBzb2NfaHdfdmVyc2lvbik7XFxuIDkyOTpcXHRcXHQqbWlub3IgPSBGSUVMRF9HRVQoVENTUl9TT0NfSFdfVkVSU0lPTl9NSU5PUl9NQVNLLFxcbiA5MzA6XFx0XFx0XFx0XFx0ICAgc29jX2h3X3ZlcnNpb24pO1xcbiA5MzE6XFx0XFxuIDkzMjpcXHRcXHRhdGgxMWtfZGJnKGFiLCBBVEgxMUtfREJHX1BDSSwgXFxcInRjc3Jfc29jX2h3X3ZlcnNpb24gbWFqb3IgJWQgbWlub3IgJWRcXFxcblxcXCIsXFxuIDkzMzpcXHRcXHRcXHQgICAqbWFqb3IsICptaW5vcik7XFxuIDkzNDpcXHR9XFxuIDkzNTpcXHRcXG4gOTM2OlxcdHN0YXRpYyBpbnQgYXRoMTFrX3BjaV9zZXRfaXJxX2FmZmluaXR5X2hpbnQoc3RydWN0IGF0aDExa19wY2kgKmFiX3BjaSxcXG4gOTM3OlxcdFxcdFxcdFxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbSlcXG4gOTM4OlxcdHtcXG4gOTM5OlxcdFxcdGlmICh0ZXN0X2JpdChBVEgxMUtfRkxBR19NVUxUSV9NU0lfVkVDVE9SUywgXFx1MDAyNmFiX3BjaS1cXHUwMDNlYWItXFx1MDAzZWRldl9mbGFncykpXFxuIDk0MDpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gOTQxOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xOFQwODoyNDoyMS45MTIwMzE3MloiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MjY4MDc5MDI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBQQ0kgUHJvYmUgVnVsbmVyYWJpbGl0aWVzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgYXRoMTFrX3BjaV9wcm9iZWAgZnVuY3Rpb24gYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBQQ0kgbWVtb3J5LW1hcHBlZCBJL08uIFRoZSBgYXRoMTFrX3BjaWNfcmVhZDMyYCBmdW5jdGlvbiBpcyB0aGUga2V5IGhlcmU7IGl0J3MgcmVhZGluZyBmcm9tIFBDSSBtZW1vcnksIGFuZCB3ZSBrbm93IHRoYXQgU3l6a2FsbGVyJ3MgdmlydHVhbCBQQ0kgZGV2aWNlIGNhbiBpbmplY3QgYXJiaXRyYXJ5IHZhbHVlcyBkdXJpbmcgdGhlc2UgcmVhZHMuIFRoYXQncyBpbW1lZGlhdGVseSBpbnRlcmVzdGluZy5cblxuU3BlY2lmaWNhbGx5LCBJIHNlZSB0aGF0IHRoZSBgc29jX2h3X3ZlcnNpb25fbWFqb3JgIHZhcmlhYmxlIGlzIHJlYWQgZnJvbSBQQ0ksIGFuZCBpdCdzIHVzZWQgaW4gYSBzd2l0Y2ggc3RhdGVtZW50LiBUaGUgY3JpdGljYWwgcGF0aCByZXF1aXJlcyB0aGlzIHZhbHVlIHRvIGJlIGAyYCBmb3IgdGhlIHByb2JlIHRvIGNvbnRpbnVlIGFuZCBzZXQgYGFiLVx1MDAzZWh3X3JldmAgY29ycmVjdGx5LiBUaGUgcmVhbCB2dWxuZXJhYmlsaXR5IHN0ZW1zIGZyb20gdGhlIGZhY3QgdGhhdCBTeXprYWxsZXIgY2FuLCBnaXZlbiBlbm91Z2ggYXR0ZW1wdHMsIG1hbmlwdWxhdGUgdGhlc2UgdmFsdWVzIVxuXG5NeSBpbml0aWFsIHRob3VnaHQgd2FzLCBcIldoYXQgaWYgaXQgKmRvZXNuJ3QqIHJldHVybiBgMmA/XCIgQnV0IHRoZW4gaXQgaGl0cyBtZTogU3l6a2FsbGVyIGlzIGZ1enppbmcgdGhlc2UgcmVhZHMuIEl0IHdpbGwgZXZlbnR1YWxseSBmaW5kIGEgdmFsdWUgZm9yIGBzb2NfaHdfdmVyc2lvbl9tYWpvcmAgdGhhdCBhbGxvd3MgaXQgdG8gcGFzcyB0aGUgY2hlY2suIFRodXMsIHRoaXMgYnJhbmNoIGlzICpkZWZpbml0ZWx5KiByZWFjaGFibGUuIFRoaXMgYnlwYXNzZXMgdGhlIGludGVuZGVkIGhhcmR3YXJlIHZlcnNpb24gY2hlY2ssIGFuZCBjb3VsZCBsZWFkIHRvIGlzc3VlcyBsYXRlciBvbiBpbiB0aGUgZHJpdmVyJ3MgZXhlY3V0aW9uLlxuXG5TbywgdGhpcyBsb29rcyBsaWtlIGEgcG90ZW50aWFsIHBhdGggdG8gdHJpZ2dlciBzb21lIHNvcnQgb2YgdW5leHBlY3RlZCBiZWhhdmlvciBvciBidWcuIE15IG5leHQgc3RlcD8gSSBuZWVkIHRvIGNoZWNrIGBhdGgxMmtfcGNpX3Byb2JlYCB0byBzZWUgaWYgaXQgaGFzIHNpbWlsYXIgY2hlY2tzIGFuZCB3aGV0aGVyIHRoaXMga2luZCBvZiB2dWxuZXJhYmlsaXR5IGlzIHByZXNlbnQgdGhlcmUgYXMgd2VsbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ5OTAsIk91dHB1dFRva2VucyI6NDcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xOFQwODoyNDoyOC4xODAxMTM0MDRaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQxODEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTUyNCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE1MjQ6XFx0c3RhdGljIGludCBhdGgxMmtfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbjE1MjU6XFx0XFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpwY2lfZGV2KVxcbjE1MjY6XFx0e1xcbjE1Mjc6XFx0XFx0ZW51bSBhdGgxMmtfZGV2aWNlX2ZhbWlseSBkZXZpY2VfaWQ7XFxuMTUyODpcXHRcXHRzdHJ1Y3QgYXRoMTJrX3BjaSAqYWJfcGNpO1xcbjE1Mjk6XFx0XFx0c3RydWN0IGF0aDEya19iYXNlICphYjtcXG4xNTMwOlxcdFxcdGludCByZXQ7XFxuMTUzMTpcXHRcXG4xNTMyOlxcdFxcdGFiID0gYXRoMTJrX2NvcmVfYWxsb2MoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgc2l6ZW9mKCphYl9wY2kpLCBBVEgxMktfQlVTX1BDSSk7XFxuMTUzMzpcXHRcXHRpZiAoIWFiKSB7XFxuMTUzNDpcXHRcXHRcXHRkZXZfZXJyKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIFxcXCJmYWlsZWQgdG8gYWxsb2NhdGUgYXRoMTJrIGJhc2VcXFxcblxcXCIpO1xcbjE1MzU6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMTUzNjpcXHRcXHR9XFxuMTUzNzpcXHRcXG4xNTM4OlxcdFxcdGFiLVxcdTAwM2VkZXYgPSBcXHUwMDI2cGRldi1cXHUwMDNlZGV2O1xcbjE1Mzk6XFx0XFx0YWJfcGNpID0gYXRoMTJrX3BjaV9wcml2KGFiKTtcXG4xNTQwOlxcdFxcdGFiX3BjaS1cXHUwMDNlZGV2X2lkID0gcGNpX2Rldi1cXHUwMDNlZGV2aWNlO1xcbjE1NDE6XFx0XFx0YWJfcGNpLVxcdTAwM2VhYiA9IGFiO1xcbjE1NDI6XFx0XFx0YWJfcGNpLVxcdTAwM2VwZGV2ID0gcGRldjtcXG4xNTQzOlxcdFxcdGFiLVxcdTAwM2VoaWYub3BzID0gXFx1MDAyNmF0aDEya19wY2lfaGlmX29wcztcXG4xNTQ0OlxcdFxcdGFiLVxcdTAwM2Vmd19tb2RlID0gQVRIMTJLX0ZJUk1XQVJFX01PREVfTk9STUFMO1xcbjE1NDU6XFx0XFx0cGNpX3NldF9kcnZkYXRhKHBkZXYsIGFiKTtcXG4xNTQ2OlxcdFxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZhYl9wY2ktXFx1MDAzZXdpbmRvd19sb2NrKTtcXG4xNTQ3OlxcdFxcbjE1NDg6XFx0XFx0cmV0ID0gYXRoMTJrX3BjaV9jbGFpbShhYl9wY2ksIHBkZXYpO1xcbjE1NDk6XFx0XFx0aWYgKHJldCkge1xcbjE1NTA6XFx0XFx0XFx0YXRoMTJrX2VycihhYiwgXFxcImZhaWxlZCB0byBjbGFpbSBkZXZpY2U6ICVkXFxcXG5cXFwiLCByZXQpO1xcbjE1NTE6XFx0XFx0XFx0Z290byBlcnJfZnJlZV9jb3JlO1xcbjE1NTI6XFx0XFx0fVxcbjE1NTM6XFx0XFxuMTU1NDpcXHRcXHRhdGgxMmtfZGJnKGFiLCBBVEgxMktfREJHX0JPT1QsIFxcXCJwY2kgcHJvYmUgJTA0eDolMDR4ICUwNHg6JTA0eFxcXFxuXFxcIixcXG4xNTU1OlxcdFxcdFxcdCAgIHBkZXYtXFx1MDAzZXZlbmRvciwgcGRldi1cXHUwMDNlZGV2aWNlLFxcbjE1NTY6XFx0XFx0XFx0ICAgcGRldi1cXHUwMDNlc3Vic3lzdGVtX3ZlbmRvciwgcGRldi1cXHUwMDNlc3Vic3lzdGVtX2RldmljZSk7XFxuMTU1NzpcXHRcXG4xNTU4OlxcdFxcdGFiLVxcdTAwM2VpZC52ZW5kb3IgPSBwZGV2LVxcdTAwM2V2ZW5kb3I7XFxuMTU1OTpcXHRcXHRhYi1cXHUwMDNlaWQuZGV2aWNlID0gcGRldi1cXHUwMDNlZGV2aWNlO1xcbjE1NjA6XFx0XFx0YWItXFx1MDAzZWlkLnN1YnN5c3RlbV92ZW5kb3IgPSBwZGV2LVxcdTAwM2VzdWJzeXN0ZW1fdmVuZG9yO1xcbjE1NjE6XFx0XFx0YWItXFx1MDAzZWlkLnN1YnN5c3RlbV9kZXZpY2UgPSBwZGV2LVxcdTAwM2VzdWJzeXN0ZW1fZGV2aWNlO1xcbjE1NjI6XFx0XFxuMTU2MzpcXHRcXHRkZXZpY2VfaWQgPSBhdGgxMmtfZ2V0X2RldmljZV9mYW1pbHkocGNpX2Rldik7XFxuMTU2NDpcXHRcXHRpZiAoZGV2aWNlX2lkIFxcdTAwM2U9IEFUSDEyS19ERVZJQ0VfRkFNSUxZX01BWCkge1xcbjE1NjU6XFx0XFx0XFx0YXRoMTJrX2VycihhYiwgXFxcImZhaWxlZCB0byBnZXQgZGV2aWNlIGZhbWlseSBpZFxcXFxuXFxcIik7XFxuMTU2NjpcXHRcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbjE1Njc6XFx0XFx0XFx0Z290byBlcnJfcGNpX2ZyZWVfcmVnaW9uO1xcbjE1Njg6XFx0XFx0fVxcbjE1Njk6XFx0XFxuMTU3MDpcXHRcXHRhdGgxMmtfZGJnKGFiLCBBVEgxMktfREJHX1BDSSwgXFxcIlBDSSBkZXZpY2UgZmFtaWx5IGlkOiAlZFxcXFxuXFxcIiwgZGV2aWNlX2lkKTtcXG4xNTcxOlxcdFxcbjE1NzI6XFx0XFx0YWJfcGNpLVxcdTAwM2VkZXZpY2VfZmFtaWx5X29wcyA9IFxcdTAwMjZhdGgxMmtfcGNpX2ZhbWlseV9kcml2ZXJzW2RldmljZV9pZF0tXFx1MDAzZW9wcztcXG4xNTczOlxcdFxcdGFiX3BjaS1cXHUwMDNlcmVnX2Jhc2UgPSBhdGgxMmtfcGNpX2ZhbWlseV9kcml2ZXJzW2RldmljZV9pZF0tXFx1MDAzZXJlZ19iYXNlO1xcbjE1NzQ6XFx0XFxuMTU3NTpcXHRcXHQvKiBDYWxsIGRldmljZSBzcGVjaWZpYyBwcm9iZS4gVGhpcyBpcyB0aGUgY2FsbGJhY2sgdGhhdCBjYW5cXG4xNTc2OlxcdFxcdCAqIGJlIHVzZWQgdG8gb3ZlcnJpZGUgYW55IG9wcyBpbiBmdXR1cmVcXG4xNTc3OlxcdFxcdCAqIHByb2JlIGlzIHZhbGlkYXRlZCBmb3IgTlVMTCBkdXJpbmcgcmVnaXN0cmF0aW9uLlxcbjE1Nzg6XFx0XFx0ICovXFxuMTU3OTpcXHRcXHRyZXQgPSBhYl9wY2ktXFx1MDAzZWRldmljZV9mYW1pbHlfb3BzLVxcdTAwM2Vwcm9iZShwZGV2LCBwY2lfZGV2KTtcXG4xNTgwOlxcdFxcdGlmIChyZXQpIHtcXG4xNTgxOlxcdFxcdFxcdGF0aDEya19lcnIoYWIsIFxcXCJmYWlsZWQgdG8gcHJvYmUgZGV2aWNlOiAlZFxcXFxuXFxcIiwgcmV0KTtcXG4xNTgyOlxcdFxcdFxcdGdvdG8gZXJyX3BjaV9mcmVlX3JlZ2lvbjtcXG4xNTgzOlxcdFxcdH1cXG4xNTg0OlxcdFxcbjE1ODU6XFx0XFx0cmV0ID0gYXRoMTJrX3BjaV9tc2lfYWxsb2MoYWJfcGNpKTtcXG4xNTg2OlxcdFxcdGlmIChyZXQpIHtcXG4xNTg3OlxcdFxcdFxcdGF0aDEya19lcnIoYWIsIFxcXCJmYWlsZWQgdG8gYWxsb2MgbXNpOiAlZFxcXFxuXFxcIiwgcmV0KTtcXG4xNTg4OlxcdFxcdFxcdGdvdG8gZXJyX3BjaV9mcmVlX3JlZ2lvbjtcXG4xNTg5OlxcdFxcdH1cXG4xNTkwOlxcdFxcbjE1OTE6XFx0XFx0cmV0ID0gYXRoMTJrX2NvcmVfcHJlX2luaXQoYWIpO1xcbjE1OTI6XFx0XFx0aWYgKHJldClcXG4xNTkzOlxcdFxcdFxcdGdvdG8gZXJyX3BjaV9tc2lfZnJlZTtcXG4xNTk0OlxcdFxcbjE1OTU6XFx0XFx0cmV0ID0gYXRoMTJrX3BjaV9zZXRfaXJxX2FmZmluaXR5X2hpbnQoYWJfcGNpLCBjcHVtYXNrX29mKDApKTtcXG4xNTk2OlxcdFxcdGlmIChyZXQpIHtcXG4xNTk3OlxcdFxcdFxcdGF0aDEya19lcnIoYWIsIFxcXCJmYWlsZWQgdG8gc2V0IGlycSBhZmZpbml0eSAlZFxcXFxuXFxcIiwgcmV0KTtcXG4xNTk4OlxcdFxcdFxcdGdvdG8gZXJyX3BjaV9tc2lfZnJlZTtcXG4xNTk5OlxcdFxcdH1cXG4xNjAwOlxcdFxcbjE2MDE6XFx0XFx0cmV0ID0gYXRoMTJrX21oaV9yZWdpc3RlcihhYl9wY2kpO1xcbjE2MDI6XFx0XFx0aWYgKHJldCkge1xcbjE2MDM6XFx0XFx0XFx0YXRoMTJrX2VycihhYiwgXFxcImZhaWxlZCB0byByZWdpc3RlciBtaGk6ICVkXFxcXG5cXFwiLCByZXQpO1xcbjE2MDQ6XFx0XFx0XFx0Z290byBlcnJfaXJxX2FmZmluaXR5X2NsZWFudXA7XFxuMTYwNTpcXHRcXHR9XFxuMTYwNjpcXHRcXG4xNjA3OlxcdFxcdHJldCA9IGF0aDEya19oYWxfc3JuZ19pbml0KGFiKTtcXG4xNjA4OlxcdFxcdGlmIChyZXQpXFxuMTYwOTpcXHRcXHRcXHRnb3RvIGVycl9taGlfdW5yZWdpc3RlcjtcXG4xNjEwOlxcdFxcbjE2MTE6XFx0XFx0cmV0ID0gYXRoMTJrX2NlX2FsbG9jX3BpcGVzKGFiKTtcXG4xNjEyOlxcdFxcdGlmIChyZXQpIHtcXG4xNjEzOlxcdFxcdFxcdGF0aDEya19lcnIoYWIsIFxcXCJmYWlsZWQgdG8gYWxsb2NhdGUgY2UgcGlwZXM6ICVkXFxcXG5cXFwiLCByZXQpO1xcbjE2MTQ6XFx0XFx0XFx0Z290byBlcnJfaGFsX3NybmdfZGVpbml0O1xcbjE2MTU6XFx0XFx0fVxcbjE2MTY6XFx0XFxuMTYxNzpcXHRcXHRhdGgxMmtfcGNpX2luaXRfcW1pX2NlX2NvbmZpZyhhYik7XFxuMTYxODpcXHRcXG4xNjE5OlxcdFxcdHJldCA9IGF0aDEya19wY2lfY29uZmlnX2lycShhYik7XFxuMTYyMDpcXHRcXHRpZiAocmV0KSB7XFxuMTYyMTpcXHRcXHRcXHRhdGgxMmtfZXJyKGFiLCBcXFwiZmFpbGVkIHRvIGNvbmZpZyBpcnE6ICVkXFxcXG5cXFwiLCByZXQpO1xcbjE2MjI6XFx0XFx0XFx0Z290byBlcnJfY2VfZnJlZTtcXG4xNjIzOlxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMThUMDg6MjQ6MjguMTgwMjU2NDM0WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4MDg1NzM2NDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipEaXZpbmcgaW50byB0aGUgUHJvYmUgRnVuY3Rpb24qKlxuXG5NeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgdGhlIHN5c3RlbSBoYXMgY2FsbGVkIGEgc3BlY2lmaWMgZnVuY3Rpb24sIGxpa2VseSBhIHByb2JlIGZ1bmN0aW9uLCB3aGljaCBpcyBhY2Nlc3NlZCB2aWEgdGhlIGBhYl9wY2lgIHN0cnVjdHVyZS4gU3BlY2lmaWNhbGx5LCBpdCdzIGhpdHRpbmcgYGFiX3BjaS1cdTAwM2VkZXZpY2VfZmFtaWx5X29wcy1cdTAwM2Vwcm9iZShwZGV2LCBwY2lfZGV2KWAuIFRoaXMgaXMgYSBwcmV0dHkgc3RhbmRhcmQgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UgZm9yIFBDSSBkZXZpY2VzLiBOb3csIG15IGJyYWluIGltbWVkaWF0ZWx5IGdvZXMgdG8gYGF0aDEya19wY2lfZmFtaWx5X2RyaXZlcnNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBzcGVjaWZpYyBkcml2ZXIgb3IgZmFtaWx5IG9mIGRyaXZlcnMgdGhhdCBsaW5lIGlzIGNhbGxpbmcuIFRpbWUgdG8gZXhhbWluZSBgYXRoMTJrX3BjaV9mYW1pbHlfZHJpdmVyc2AgdG8gc2VlIGhvdyBpdCdzIGhhbmRsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3NTIyLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xOFQwODoyNDozMC45ODg4MzI5MjJaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MTI4Njg0MjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXRoMTJrX3BjaV9mYW1pbHlfZHJpdmVyc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTM2LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM6Mzc6c3RhdGljIHN0cnVjdCBhdGgxMmtfcGNpX2RyaXZlciAqYXRoMTJrX3BjaV9mYW1pbHlfZHJpdmVyc1tBVEgxMktfREVWSUNFX0ZBTUlMWV9NQVhdO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtMzgtc3RhdGljIGNvbnN0IHN0cnVjdCBhdGgxMmtfbXNpX2NvbmZpZyBtc2lfY29uZmlnX29uZV9tc2kgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jPTE1MDM9YXRoMTJrX2dldF9kZXZpY2VfZmFtaWx5KGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpwY2lfZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xNTA5LVxcdCAgICAgZGV2aWNlX2ZhbWlseV9pZCBcXHUwMDNjIEFUSDEyS19ERVZJQ0VfRkFNSUxZX01BWDsgZGV2aWNlX2ZhbWlseV9pZCsrKSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYzoxNTEwOlxcdFxcdGlmICghYXRoMTJrX3BjaV9mYW1pbHlfZHJpdmVyc1tkZXZpY2VfZmFtaWx5X2lkXSlcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE1MTEtXFx0XFx0XFx0Y29udGludWU7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xNTEyLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM6MTUxMzpcXHRcXHRpZCA9IGF0aDEya19wY2lfZmFtaWx5X2RyaXZlcnNbZGV2aWNlX2ZhbWlseV9pZF0tXFx1MDAzZWlkX3RhYmxlO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtMTUxNC1cXHRcXHR3aGlsZSAoaWQtXFx1MDAzZWRldmljZSkge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYz0xNTI0PXN0YXRpYyBpbnQgYXRoMTJrX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtMTU3MS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jOjE1NzI6XFx0YWJfcGNpLVxcdTAwM2VkZXZpY2VfZmFtaWx5X29wcyA9IFxcdTAwMjZhdGgxMmtfcGNpX2ZhbWlseV9kcml2ZXJzW2RldmljZV9pZF0tXFx1MDAzZW9wcztcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jOjE1NzM6XFx0YWJfcGNpLVxcdTAwM2VyZWdfYmFzZSA9IGF0aDEya19wY2lfZmFtaWx5X2RyaXZlcnNbZGV2aWNlX2lkXS1cXHUwMDNlcmVnX2Jhc2U7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xNTc0LVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYz0xODA0PWludCBhdGgxMmtfcGNpX3JlZ2lzdGVyX2RyaXZlcihjb25zdCBlbnVtIGF0aDEya19kZXZpY2VfZmFtaWx5IGRldmljZV9pZCxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtMTgxNS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jOjE4MTY6XFx0aWYgKGF0aDEya19wY2lfZmFtaWx5X2RyaXZlcnNbZGV2aWNlX2lkXSkge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtMTgxNy1cXHRcXHRwcl9lcnIoXFxcIkRyaXZlciBhbHJlYWR5IHJlZ2lzdGVyZWQgZm9yICVkXFxcXG5cXFwiLCBkZXZpY2VfaWQpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xODIwLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM6MTgyMTpcXHRhdGgxMmtfcGNpX2ZhbWlseV9kcml2ZXJzW2RldmljZV9pZF0gPSBkcml2ZXI7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xODIyLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM6MTgyMzpcXHRwY2lfZHJpdmVyID0gXFx1MDAyNmF0aDEya19wY2lfZmFtaWx5X2RyaXZlcnNbZGV2aWNlX2lkXS1cXHUwMDNlZHJpdmVyO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtMTgyNC1cXHRwY2lfZHJpdmVyLVxcdTAwM2VuYW1lID0gZHJpdmVyLVxcdTAwM2VuYW1lO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYz0xODM1PXZvaWQgYXRoMTJrX3BjaV91bnJlZ2lzdGVyX2RyaXZlcihjb25zdCBlbnVtIGF0aDEya19kZXZpY2VfZmFtaWx5IGRldmljZV9pZClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtMTgzNy1cXHRpZiAoZGV2aWNlX2lkIFxcdTAwM2U9IEFUSDEyS19ERVZJQ0VfRkFNSUxZX01BWCB8fFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM6MTgzODpcXHQgICAgIWF0aDEya19wY2lfZmFtaWx5X2RyaXZlcnNbZGV2aWNlX2lkXSlcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE4MzktXFx0XFx0cmV0dXJuO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtMTg0MC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jOjE4NDE6XFx0cGNpX3VucmVnaXN0ZXJfZHJpdmVyKFxcdTAwMjZhdGgxMmtfcGNpX2ZhbWlseV9kcml2ZXJzW2RldmljZV9pZF0tXFx1MDAzZWRyaXZlcik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYzoxODQyOlxcdGF0aDEya19wY2lfZmFtaWx5X2RyaXZlcnNbZGV2aWNlX2lkXSA9IE5VTEw7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xODQzLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMThUMDg6MjQ6MzIuODAxNzA3OTU0WiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwNzg2ODY5ODYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIHRyYWNpbmcgaXRzIGV4ZWN1dGlvbi4gSXQgc2VlbXMgdGhlIGNvcmUgb2YgaXQgbGllcyBpbiBhZGRyZXNzaW5nIGEgcG90ZW50aWFsIHJlc291cmNlIGxlYWsgd2l0aGluIHRoZSBhdGgxMWsgYW5kIGF0aDEyayBkcml2ZXJzLCBzcGVjaWZpY2FsbHkgZHVyaW5nIHRoZSBRTUkgaW5pdGlhbGl6YXRpb24gcHJvY2Vzcy4gSSBzZWUgdGhhdCBgYXRoMTJrX3BjaV9wcm9iZWAgaXMgaW52b2x2ZWQsIHVsdGltYXRlbHkgbGVhZGluZyB0byB0aGUgY2FsbCBvZiBgZGV2aWNlX2ZhbWlseV9vcHMtXHUwMDNlcHJvYmVgLiBJIHRoaW5rIEkgcmVtZW1iZXIgc2VlaW5nIHRoYXQgb25lIGJlZm9yZS5cblxuVGhlIGVzc2VuY2Ugb2YgdGhlIGZpeCBpcyBlcnJvciBoYW5kbGluZyB3aXRoaW4gYGF0aDExa19xbWlfaW5pdF9zZXJ2aWNlYCBhbmQgYGF0aDEya19xbWlfaW5pdF9zZXJ2aWNlYC4gSXQgYXBwZWFycyBpZiBgYWxsb2Nfb3JkZXJlZF93b3JrcXVldWVgIG9yIGBxbWlfYWRkX2xvb2t1cGAgZmFpbHMsIHRoZSBwYXRjaCBlbnN1cmVzIHRoZSBRTUkgaGFuZGxlIGdldHMgcmVsZWFzZWQsIHByZXZlbnRpbmcgYSBsZWFrLiBUaGlzIGxvb2tzIGxpa2UgYSBzb2xpZCBmdW5jdGlvbmFsIGNoYW5nZSwgYW5kIGltcG9ydGFudGx5LCBpdCdzIHJlYWNoYWJsZSDigJMgcGFydGljdWxhcmx5IHRocm91Z2ggYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCB0aGFua3MgdG8gc3l6a2FsbGVyJ3MgUENJIGRldmljZSBpbmplY3Rpb24gY2FwYWJpbGl0aWVzLiBUaGF0IG1ha2VzIGl0IGVhc2llciB0byB0ZXN0LlxuXG5JIG5lZWQgdG8gY29uZmlybSB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMuIEluaXRpYWxseSwgSSB0aG91Z2h0IGl0IHdhcyBqdXN0IGBBVEgxMUtgLCBgQVRIMTFLX1BDSWAsIGFuZCBgQVRIMTJLYC4gSG93ZXZlciwgSSBoYXZlIHRvIHJlbWVtYmVyIHRoYXQgYEFUSDExS19QQ0lgIGlzIHRyaXN0YXRlLCBzbyB0aGVyZSBtaWdodCBiZSBvdGhlciByZWxhdGVkIGNvbmZpZ3MuIExldCBtZSBxdWlja2x5IGNoZWNrIHRoZSBgS2NvbmZpZ2AgZm9yIHRoZSBhdGgxMWsgZHJpdmVyIGFnYWluLi4uIEFoLCB5ZXMsIHRoZXJlIGlzIGFsc28gYEFUSDExS19BSEJgLiBJIHdpbGwgbWFrZSBzdXJlIHRvIGFjY291bnQgZm9yIHRoYXQuIEFsc28sIHRoZSBzYW1lIGlzIHRydWUgZm9yIGBBVEgxMktgLCBzaW5jZSBgQVRIMTJLX0FIQmAgaXMgYWxzbyB0aGVyZS5cblxuVWx0aW1hdGVseSBJIHdpbGwgaW5jbHVkZSBgQVRIMTFLYCwgYEFUSDExS19QQ0lgLCBhbmQgYEFUSDEyS2AgZm9yIHRoaXMuIEFjdHVhbGx5LCB0aGUga2V5IG9uZXMgYXJlIGBBVEgxMUtgIGFuZCBgQVRIMTJLYCwgYXMgdGhleSBmb3JtIHRoZSBmb3VuZGF0aW9uLiBgQVRIMTFLX1BDSWAgaXMgZXhwbGljaXRseSBuZWVkZWQgZm9yIFBDSSBzdXBwb3J0IGluIHRoYXQgZHJpdmVyLCBhbmQgYEFUSDEyS2AgaW5oZXJlbnRseSBpbmNsdWRlcyBQQ0kgc3VwcG9ydCBhc3N1bWluZyBgUENJYCBpcyBhbHNvIGVuYWJsZWQuXG5cbkxldCBtZSBkb3VibGUtY2hlY2sgdGhlIG5hbWluZyBmb3IgdGhvc2UgY29uZmlncyBqdXN0IHRvIGJlIGNvbXBsZXRlbHkgY2VydGFpbi4gWWVzLCBgY29uZmlnIEFUSDExS19QQ0lgIGFuZCBgY29uZmlnIEFUSDEyS2AuXG5cblRoZSBrZXkgZnVuY3Rpb25zIHRvIGtlZXAgYW4gZXllIG9uIGFyZSBgYXRoMTFrX3FtaV9pbml0X3NlcnZpY2VgIGFuZCBgYXRoMTJrX3FtaV9pbml0X3NlcnZpY2VgLiBUaG9zZSBhcmUgd2hlcmUgdGhlIGZpeCBpcyBjb25jZW50cmF0ZWQuXG5cblNvLCB0byBzdW1tYXJpemUgbXkgcmVhc29uaW5nOiBUaGUgcGF0Y2ggaXMgYSBmdW5jdGlvbmFsIGZpeCBhZGRyZXNzaW5nIGEgcG90ZW50aWFsIHJlc291cmNlIGxlYWsgaW4gdGhlIFFNSSBpbml0aWFsaXphdGlvbiBwYXRocyBvZiBhdGgxMWsgYW5kIGF0aDEyayBkcml2ZXJzLiBJdCBwcmV2ZW50cyB0aGUgbGVhayBieSByZWxlYXNpbmcgdGhlIFFNSSBoYW5kbGUgaW4gdGhlIGV2ZW50IHRoYXQgd29ya3F1ZXVlIGFsbG9jYXRpb24gb3IgUU1JIGxvb2t1cCBhZGRpdGlvbiBmYWlscy4gVGhpcyBjaGFuZ2UgaXMgZWZmZWN0aXZlbHkgdGVzdGFibGUgdmlhIHZpcnR1YWwgUENJIGRldmljZSBpbmplY3Rpb24gYW5kIHJlcXVpcmVzIHRoZSBgQVRIMTFLYCwgYEFUSDExS19QQ0lgLCBhbmQgYEFUSDEyS2AgY29uZmlndXJhdGlvbnMgKHdpdGggYSBmb2N1cyBvbiB0aGUgYGF0aDExa19xbWlfaW5pdF9zZXJ2aWNlYCBhbmQgYGF0aDEya19xbWlfaW5pdF9zZXJ2aWNlYCBmdW5jdGlvbnMpLiBOb3csIEknbSByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5MDE5LCJPdXRwdXRUb2tlbnMiOjE0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU0NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xOFQwODoyNDo0My41ODg1Nzk4NDVaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NTk2MTQyNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQVRIMTFLXCIsXG4gICAgXCJBVEgxMUtfUENJXCIsXG4gICAgXCJBVEgxMktcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhdGgxMWtfcW1pX2luaXRfc2VydmljZVwiLFxuICAgIFwiYXRoMTJrX3FtaV9pbml0X3NlcnZpY2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGVycm9yIGhhbmRsaW5nIHRvIGZpeCBhIHJlc291cmNlIGxlYWsgaW4gdGhlIFFNSSBpbml0aWFsaXphdGlvbiBwYXRoIG9mIHRoZSBhdGgxMWsgYW5kIGF0aDEyayBkcml2ZXJzLiBJdCByZWxlYXNlcyB0aGUgUU1JIGhhbmRsZSBpZiB3b3JrcXVldWUgYWxsb2NhdGlvbiBvciBRTUkgbG9va3VwIGFkZGl0aW9uIGZhaWxzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBjYW4gYmUgcmVhY2hlZCBhbmQgdGVzdGVkIHZpYSB2aXJ0dWFsIFBDSSBkZXZpY2UgaW5qZWN0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkFUSDExS1wiLFxuICAgIFwiQVRIMTFLX1BDSVwiLFxuICAgIFwiQVRIMTJLXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYXRoMTFrX3FtaV9pbml0X3NlcnZpY2VcIixcbiAgICBcImF0aDEya19xbWlfaW5pdF9zZXJ2aWNlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBlcnJvciBoYW5kbGluZyB0byBmaXggYSByZXNvdXJjZSBsZWFrIGluIHRoZSBRTUkgaW5pdGlhbGl6YXRpb24gcGF0aCBvZiB0aGUgYXRoMTFrIGFuZCBhdGgxMmsgZHJpdmVycy4gSXQgcmVsZWFzZXMgdGhlIFFNSSBoYW5kbGUgaWYgd29ya3F1ZXVlIGFsbG9jYXRpb24gb3IgUU1JIGxvb2t1cCBhZGRpdGlvbiBmYWlscy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgY2FuIGJlIHJlYWNoZWQgYW5kIHRlc3RlZCB2aWEgdmlydHVhbCBQQ0kgZGV2aWNlIGluamVjdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowxlvlh[1] Phase: Succeeded StartedAt: 2026-07-18 08:24:54 +0000 UTC FinishedAt: 2026-07-18 08:24:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxlvlh[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-18 08:24:54 +0000 UTC FinishedAt: 2026-07-18 08:24:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxlvlh[2] Phase: Succeeded StartedAt: 2026-07-18 08:24:54 +0000 UTC FinishedAt: 2026-07-18 10:48:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxlvlh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH11K","ATH11K_PCI","ATH12K"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath11k_qmi_init_service","ath12k_qmi_init_service"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH11K","ATH11K_PCI","ATH12K"],"series_id":"682a1a48-0c10-4bc9-8b35-2eccd6483010","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-18 08:24:54 +0000 UTC FinishedAt: 2026-07-18 10:48:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH11K","ATH11K_PCI","ATH12K"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath11k_qmi_init_service","ath12k_qmi_init_service"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH11K","ATH11K_PCI","ATH12K"],"series_id":"682a1a48-0c10-4bc9-8b35-2eccd6483010","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowxlvlh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH11K","ATH11K_PCI","ATH12K"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath11k_qmi_init_service","ath12k_qmi_init_service"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH11K","ATH11K_PCI","ATH12K"],"series_id":"682a1a48-0c10-4bc9-8b35-2eccd6483010","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-18 08:24:54 +0000 UTC FinishedAt: 2026-07-18 08:25:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxlvlh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH11K","ATH11K_PCI","ATH12K"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath11k_qmi_init_service","ath12k_qmi_init_service"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH11K","ATH11K_PCI","ATH12K"],"series_id":"682a1a48-0c10-4bc9-8b35-2eccd6483010","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-18 08:24:54 +0000 UTC FinishedAt: 2026-07-18 08:24:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH11K","ATH11K_PCI","ATH12K"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowxlvlh/series-workflowxlvlh-convert-artifact-3526705726/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxlvlh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH11K","ATH11K_PCI","ATH12K"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath11k_qmi_init_service","ath12k_qmi_init_service"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH11K","ATH11K_PCI","ATH12K"],"series_id":"682a1a48-0c10-4bc9-8b35-2eccd6483010","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-18 08:25:04 +0000 UTC FinishedAt: 2026-07-18 09:20:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxlvlh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH11K","ATH11K_PCI","ATH12K"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath11k_qmi_init_service","ath12k_qmi_init_service"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH11K","ATH11K_PCI","ATH12K"],"series_id":"682a1a48-0c10-4bc9-8b35-2eccd6483010","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-18 08:25:04 +0000 UTC FinishedAt: 2026-07-18 09:20:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*6eb1152c-678d-461d-9b32-c324034becd3,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowxlvlh/series-workflowxlvlh-convert-artifact-3526705726/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "7ba8c3a4-29e9-4e33-8544-b829d1d42fa4", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowxlvlh/series-workflowxlvlh-build-action-4088208164/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxlvlh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH11K","ATH11K_PCI","ATH12K"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath11k_qmi_init_service","ath12k_qmi_init_service"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH11K","ATH11K_PCI","ATH12K"],"series_id":"682a1a48-0c10-4bc9-8b35-2eccd6483010","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-18 08:25:04 +0000 UTC FinishedAt: 2026-07-18 09:20:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*6eb1152c-678d-461d-9b32-c324034becd3,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowxlvlh/series-workflowxlvlh-convert-artifact-3526705726/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "7ba8c3a4-29e9-4e33-8544-b829d1d42fa4", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowxlvlh/series-workflowxlvlh-build-action-4088208164/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxlvlh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH11K","ATH11K_PCI","ATH12K"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath11k_qmi_init_service","ath12k_qmi_init_service"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH11K","ATH11K_PCI","ATH12K"],"series_id":"682a1a48-0c10-4bc9-8b35-2eccd6483010","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-18 09:20:59 +0000 UTC FinishedAt: 2026-07-18 09:20:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxlvlh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH11K","ATH11K_PCI","ATH12K"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath11k_qmi_init_service","ath12k_qmi_init_service"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH11K","ATH11K_PCI","ATH12K"],"series_id":"682a1a48-0c10-4bc9-8b35-2eccd6483010","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-18 09:20:59 +0000 UTC FinishedAt: 2026-07-18 09:20:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxlvlh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH11K","ATH11K_PCI","ATH12K"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath11k_qmi_init_service","ath12k_qmi_init_service"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH11K","ATH11K_PCI","ATH12K"],"series_id":"682a1a48-0c10-4bc9-8b35-2eccd6483010","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-18 09:20:59 +0000 UTC FinishedAt: 2026-07-18 09:21:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxlvlh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH11K","ATH11K_PCI","ATH12K"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath11k_qmi_init_service","ath12k_qmi_init_service"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH11K","ATH11K_PCI","ATH12K"],"series_id":"682a1a48-0c10-4bc9-8b35-2eccd6483010","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-18 09:20:59 +0000 UTC FinishedAt: 2026-07-18 09:21:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH11K","ATH11K_PCI","ATH12K"],"series_id":"682a1a48-0c10-4bc9-8b35-2eccd6483010","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowxlvlh/series-workflowxlvlh-convert-artifact-2322894961/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxlvlh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH11K","ATH11K_PCI","ATH12K"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath11k_qmi_init_service","ath12k_qmi_init_service"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH11K","ATH11K_PCI","ATH12K"],"series_id":"682a1a48-0c10-4bc9-8b35-2eccd6483010","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-18 09:21:19 +0000 UTC FinishedAt: 2026-07-18 09:23:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxlvlh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH11K","ATH11K_PCI","ATH12K"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath11k_qmi_init_service","ath12k_qmi_init_service"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH11K","ATH11K_PCI","ATH12K"],"series_id":"682a1a48-0c10-4bc9-8b35-2eccd6483010","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-18 09:21:19 +0000 UTC FinishedAt: 2026-07-18 09:23:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*7ba8c3a4-29e9-4e33-8544-b829d1d42fa4,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowxlvlh/series-workflowxlvlh-build-action-4088208164/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowxlvlh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH11K","ATH11K_PCI","ATH12K"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath11k_qmi_init_service","ath12k_qmi_init_service"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH11K","ATH11K_PCI","ATH12K"],"series_id":"682a1a48-0c10-4bc9-8b35-2eccd6483010","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-18 09:23:55 +0000 UTC FinishedAt: 2026-07-18 09:23:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxlvlh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH11K","ATH11K_PCI","ATH12K"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath11k_qmi_init_service","ath12k_qmi_init_service"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH11K","ATH11K_PCI","ATH12K"],"series_id":"682a1a48-0c10-4bc9-8b35-2eccd6483010","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-18 09:23:55 +0000 UTC FinishedAt: 2026-07-18 09:23:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxlvlh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH11K","ATH11K_PCI","ATH12K"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath11k_qmi_init_service","ath12k_qmi_init_service"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH11K","ATH11K_PCI","ATH12K"],"series_id":"682a1a48-0c10-4bc9-8b35-2eccd6483010","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-18 09:23:55 +0000 UTC FinishedAt: 2026-07-18 09:54:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxlvlh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH11K","ATH11K_PCI","ATH12K"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath11k_qmi_init_service","ath12k_qmi_init_service"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH11K","ATH11K_PCI","ATH12K"],"series_id":"682a1a48-0c10-4bc9-8b35-2eccd6483010","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-18 09:23:55 +0000 UTC FinishedAt: 2026-07-18 09:54:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*6eb1152c-678d-461d-9b32-c324034becd3,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowxlvlh/series-workflowxlvlh-convert-artifact-2322894961/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "df858e19-db09-4e5d-995b-af718736bd5c", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowxlvlh/series-workflowxlvlh-build-action-4173999677/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxlvlh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH11K","ATH11K_PCI","ATH12K"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath11k_qmi_init_service","ath12k_qmi_init_service"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH11K","ATH11K_PCI","ATH12K"],"series_id":"682a1a48-0c10-4bc9-8b35-2eccd6483010","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-18 09:23:55 +0000 UTC FinishedAt: 2026-07-18 09:54:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*6eb1152c-678d-461d-9b32-c324034becd3,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowxlvlh/series-workflowxlvlh-convert-artifact-2322894961/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "df858e19-db09-4e5d-995b-af718736bd5c", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowxlvlh/series-workflowxlvlh-build-action-4173999677/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxlvlh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH11K","ATH11K_PCI","ATH12K"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath11k_qmi_init_service","ath12k_qmi_init_service"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH11K","ATH11K_PCI","ATH12K"],"series_id":"682a1a48-0c10-4bc9-8b35-2eccd6483010","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-18 09:54:53 +0000 UTC FinishedAt: 2026-07-18 09:54:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxlvlh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH11K","ATH11K_PCI","ATH12K"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath11k_qmi_init_service","ath12k_qmi_init_service"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH11K","ATH11K_PCI","ATH12K"],"series_id":"682a1a48-0c10-4bc9-8b35-2eccd6483010","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-18 09:54:53 +0000 UTC FinishedAt: 2026-07-18 09:54:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxlvlh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH11K","ATH11K_PCI","ATH12K"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath11k_qmi_init_service","ath12k_qmi_init_service"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH11K","ATH11K_PCI","ATH12K"],"series_id":"682a1a48-0c10-4bc9-8b35-2eccd6483010","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-18 09:54:53 +0000 UTC FinishedAt: 2026-07-18 09:57:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxlvlh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH11K","ATH11K_PCI","ATH12K"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath11k_qmi_init_service","ath12k_qmi_init_service"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH11K","ATH11K_PCI","ATH12K"],"series_id":"682a1a48-0c10-4bc9-8b35-2eccd6483010","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-18 09:54:53 +0000 UTC FinishedAt: 2026-07-18 09:57:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*df858e19-db09-4e5d-995b-af718736bd5c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowxlvlh/series-workflowxlvlh-build-action-4173999677/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowxlvlh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH11K","ATH11K_PCI","ATH12K"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath11k_qmi_init_service","ath12k_qmi_init_service"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH11K","ATH11K_PCI","ATH12K"],"series_id":"682a1a48-0c10-4bc9-8b35-2eccd6483010","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-18 09:57:19 +0000 UTC FinishedAt: 2026-07-18 10:48:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxlvlh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH11K","ATH11K_PCI","ATH12K"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath11k_qmi_init_service","ath12k_qmi_init_service"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH11K","ATH11K_PCI","ATH12K"],"series_id":"682a1a48-0c10-4bc9-8b35-2eccd6483010","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-18 09:57:19 +0000 UTC FinishedAt: 2026-07-18 10:48:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath11k_qmi_init_service","ath12k_qmi_init_service"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*7ba8c3a4-29e9-4e33-8544-b829d1d42fa4,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*df858e19-db09-4e5d-995b-af718736bd5c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowxlvlh/series-workflowxlvlh-build-action-4088208164/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowxlvlh/series-workflowxlvlh-build-action-4173999677/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowxlvlh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH11K","ATH11K_PCI","ATH12K"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath11k_qmi_init_service","ath12k_qmi_init_service"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH11K","ATH11K_PCI","ATH12K"],"series_id":"682a1a48-0c10-4bc9-8b35-2eccd6483010","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-18 09:57:19 +0000 UTC FinishedAt: 2026-07-18 09:57:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxlvlh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH11K","ATH11K_PCI","ATH12K"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath11k_qmi_init_service","ath12k_qmi_init_service"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH11K","ATH11K_PCI","ATH12K"],"series_id":"682a1a48-0c10-4bc9-8b35-2eccd6483010","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-18 09:57:19 +0000 UTC FinishedAt: 2026-07-18 09:57:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath11k_qmi_init_service","ath12k_qmi_init_service"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowxlvlh/series-workflowxlvlh-convert-artifact-2138480166/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxlvlh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH11K","ATH11K_PCI","ATH12K"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath11k_qmi_init_service","ath12k_qmi_init_service"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH11K","ATH11K_PCI","ATH12K"],"series_id":"682a1a48-0c10-4bc9-8b35-2eccd6483010","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-18 09:57:19 +0000 UTC FinishedAt: 2026-07-18 09:57:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxlvlh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH11K","ATH11K_PCI","ATH12K"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath11k_qmi_init_service","ath12k_qmi_init_service"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH11K","ATH11K_PCI","ATH12K"],"series_id":"682a1a48-0c10-4bc9-8b35-2eccd6483010","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-18 09:57:19 +0000 UTC FinishedAt: 2026-07-18 09:57:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxlvlh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH11K","ATH11K_PCI","ATH12K"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath11k_qmi_init_service","ath12k_qmi_init_service"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH11K","ATH11K_PCI","ATH12K"],"series_id":"682a1a48-0c10-4bc9-8b35-2eccd6483010","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-18 09:57:20 +0000 UTC FinishedAt: 2026-07-18 09:57:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxlvlh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH11K","ATH11K_PCI","ATH12K"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath11k_qmi_init_service","ath12k_qmi_init_service"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH11K","ATH11K_PCI","ATH12K"],"series_id":"682a1a48-0c10-4bc9-8b35-2eccd6483010","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-18 09:57:30 +0000 UTC FinishedAt: 2026-07-18 10:48:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxlvlh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH11K","ATH11K_PCI","ATH12K"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath11k_qmi_init_service","ath12k_qmi_init_service"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH11K","ATH11K_PCI","ATH12K"],"series_id":"682a1a48-0c10-4bc9-8b35-2eccd6483010","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-18 09:57:30 +0000 UTC FinishedAt: 2026-07-18 10:48:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*7ba8c3a4-29e9-4e33-8544-b829d1d42fa4,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*df858e19-db09-4e5d-995b-af718736bd5c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowxlvlh/series-workflowxlvlh-build-action-4088208164/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowxlvlh/series-workflowxlvlh-build-action-4173999677/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowxlvlh/series-workflowxlvlh-convert-artifact-2138480166/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}