Name: series-workflowcvmdk Phase: Succeeded StartedAt: 2026-08-04 06:23:35 +0000 UTC FinishedAt: 2026-08-04 07:34:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcvmdk[0] Phase: Succeeded StartedAt: 2026-08-04 06:23:35 +0000 UTC FinishedAt: 2026-08-04 06:43:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcvmdk[0].run-triage Phase: Succeeded StartedAt: 2026-08-04 06:23:35 +0000 UTC FinishedAt: 2026-08-04 06:43:54 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "wireless-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git", "commit_hash": "333f7de560e1196034b67db16916b10a0c529e1d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BRCMFMAC", "BRCMFMAC_USB", "CFG80211", "MAC80211", "USB", "FW_LOADER", "FW_LOADER_USER_HELPER", "BRCMDBG" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "wireless-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git", "commit_hash": "333f7de560e1196034b67db16916b10a0c529e1d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BRCMFMAC", "BRCMFMAC_USB", "CFG80211", "MAC80211", "USB", "FW_LOADER", "FW_LOADER_USER_HELPER", "BRCMDBG" ], "series_id": "74d0e6a3-1369-483f-a564-7607be1af2b8" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "brcmf_cyw_external_auth" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA2OjM5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JSQ01GTUFDJiMzNDssCiAgICAmIzM0O0JSQ01GTUFDX1VTQiYjMzQ7LAogICAgJiMzNDtDRkc4MDIxMSYjMzQ7LAogICAgJiMzNDtNQUM4MDIxMSYjMzQ7LAogICAgJiMzNDtVU0ImIzM0OywKICAgICYjMzQ7RldfTE9BREVSJiMzNDssCiAgICAmIzM0O0ZXX0xPQURFUl9VU0VSX0hFTFBFUiYjMzQ7LAogICAgJiMzNDtCUkNNREJHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnJjbWZfY3l3X2V4dGVybmFsX2F1dGgmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGJyY21mX2N5d19leHRlcm5hbF9hdXRoYCBpbiB0aGUgQnJvYWRjb20gRnVsbE1BQyBXTEFOIGRyaXZlciAoYGJyY21mbWFjYCkgdG8gaW5pdGlhbGl6ZSBgYXV0aF9zdGF0dXNgIGFuZCBjb3B5IGBwbWtpZGAgaWYgcHJlc2VudC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGEgZHJpdmVyIHRoYXQgaXMgcmVhY2hhYmxlIHZpYSBuZXRsaW5rIChgTkw4MDIxMV9DTURfRVhURVJOQUxfQVVUSGApIHdoZW4gdGhlIGRldmljZSBpcyBlbXVsYXRlZCB2aWEgVVNCICh2aGNpKS4gRW5hYmxpbmcgYEJSQ01EQkdgIGFsbG93cyB1c2luZyB0aGUgYGlnbm9yZV9wcm9iZV9mYWlsYCBtb2R1bGUgcGFyYW1ldGVyIHRvIGJ5cGFzcyBoYXJkd2FyZSBpbml0aWFsaXphdGlvbiBmYWlsdXJlcyBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNjozOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDdlM2JkNDlkMTk4N2FiYTVlNmZjMDdkMjA2ZTRkNjE3NjY3NDAzYmFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyA0IDA2OjM5OjQ3IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvY29yZS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmNcbmluZGV4IDg3Mzc1NGJlNTE3NGIuLjJjNTliNWU1Nzk1OWMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L2NvcmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmNcbkBAIC0yMDAsNyAmIzQzOzIwMCw3IEBAIGJyY21mX2N5d19leHRlcm5hbF9hdXRoKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4ge1xuIFx0c3RydWN0IGJyY21mX2lmICppZnA7XG4gXHRzdHJ1Y3QgYnJjbWZfcHViICpkcnZyO1xuLVx0c3RydWN0IGJyY21mX2F1dGhfcmVxX3N0YXR1c19sZSBhdXRoX3N0YXR1cztcbiYjNDM7XHRzdHJ1Y3QgYnJjbWZfYXV0aF9yZXFfc3RhdHVzX2xlIGF1dGhfc3RhdHVzID0ge307XG4gXHRpbnQgcmV0ID0gMDtcbiBcbiBcdGJyY21mX2RiZyhUUkFDRSwgXCYjMzQ7RW50ZXJcXG5cJiMzNDspO1xuQEAgLTIwOCw2ICYjNDM7MjA4LDggQEAgYnJjbWZfY3l3X2V4dGVybmFsX2F1dGgoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdGlmcCA9IG5ldGRldl9wcml2KGRldik7XG4gXHRkcnZyID0gaWZwLVx1MDAzZWRydnI7XG4gXHRpZiAocGFyYW1zLVx1MDAzZXN0YXR1cyA9PSBXTEFOX1NUQVRVU19TVUNDRVNTKSB7XG4mIzQzO1x0XHRpZiAocGFyYW1zLVx1MDAzZXBta2lkKVxuJiM0MztcdFx0XHRtZW1jcHkoYXV0aF9zdGF0dXMucG1raWQsIHBhcmFtcy1cdTAwM2VwbWtpZCwgV0xBTl9QTUtJRF9MRU4pO1xuIFx0XHRhdXRoX3N0YXR1cy5mbGFncyA9IGNwdV90b19sZTE2KEJSQ01GX0VYVEFVVEhfU1VDQ0VTUyk7XG4gXHR9IGVsc2Uge1xuIFx0XHRicGh5X2VycihkcnZyLCBcJiMzNDtFeHRlcm5hbCBhdXRoZW50aWNhdGlvbiBmYWlsZWQ6IHN0YXR1cz0lZFxcblwmIzM0OyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNjozOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4zbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlJDTUZNQUMmIzM0OywKICAgICYjMzQ7QlJDTUZNQUNfVVNCJiMzNDssCiAgICAmIzM0O0NGRzgwMjExJiMzNDssCiAgICAmIzM0O01BQzgwMjExJiMzNDssCiAgICAmIzM0O1VTQiYjMzQ7LAogICAgJiMzNDtGV19MT0FERVImIzM0OywKICAgICYjMzQ7RldfTE9BREVSX1VTRVJfSEVMUEVSJiMzNDssCiAgICAmIzM0O0JSQ01EQkcmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticmNtZl9jeXdfZXh0ZXJuYWxfYXV0aCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgYnJjbWZfY3l3X2V4dGVybmFsX2F1dGhgIGluIHRoZSBCcm9hZGNvbSBGdWxsTUFDIFdMQU4gZHJpdmVyIChgYnJjbWZtYWNgKSB0byBpbml0aWFsaXplIGBhdXRoX3N0YXR1c2AgYW5kIGNvcHkgYHBta2lkYCBpZiBwcmVzZW50LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSBkcml2ZXIgdGhhdCBpcyByZWFjaGFibGUgdmlhIG5ldGxpbmsgKGBOTDgwMjExX0NNRF9FWFRFUk5BTF9BVVRIYCkgd2hlbiB0aGUgZGV2aWNlIGlzIGVtdWxhdGVkIHZpYSBVU0IgKHZoY2kpLiBFbmFibGluZyBgQlJDTURCR2AgYWxsb3dzIHVzaW5nIHRoZSBgaWdub3JlX3Byb2JlX2ZhaWxgIG1vZHVsZSBwYXJhbWV0ZXIgdG8gYnlwYXNzIGhhcmR3YXJlIGluaXRpYWxpemF0aW9uIGZhaWx1cmVzIGR1cmluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgN2UzYmQ0OWQxOTg3YWJhNWU2ZmMwN2QyMDZlNGQ2MTc2Njc0MDNiYQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDQgMDY6Mzk6NDcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L2NvcmUuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvY29yZS5jCmluZGV4IDg3Mzc1NGJlNTE3NGIuLjJjNTliNWU1Nzk1OWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvY29yZS5jCkBAIC0yMDAsNyAmIzQzOzIwMCw3IEBAIGJyY21mX2N5d19leHRlcm5hbF9hdXRoKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiB7CiAJc3RydWN0IGJyY21mX2lmICppZnA7CiAJc3RydWN0IGJyY21mX3B1YiAqZHJ2cjsKLQlzdHJ1Y3QgYnJjbWZfYXV0aF9yZXFfc3RhdHVzX2xlIGF1dGhfc3RhdHVzOwomIzQzOwlzdHJ1Y3QgYnJjbWZfYXV0aF9yZXFfc3RhdHVzX2xlIGF1dGhfc3RhdHVzID0ge307CiAJaW50IHJldCA9IDA7CiAKIAlicmNtZl9kYmcoVFJBQ0UsICYjMzQ7RW50ZXJcbiYjMzQ7KTsKQEAgLTIwOCw2ICYjNDM7MjA4LDggQEAgYnJjbWZfY3l3X2V4dGVybmFsX2F1dGgoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAlpZnAgPSBuZXRkZXZfcHJpdihkZXYpOwogCWRydnIgPSBpZnAtJmd0O2RydnI7CiAJaWYgKHBhcmFtcy0mZ3Q7c3RhdHVzID09IFdMQU5fU1RBVFVTX1NVQ0NFU1MpIHsKJiM0MzsJCWlmIChwYXJhbXMtJmd0O3Bta2lkKQomIzQzOwkJCW1lbWNweShhdXRoX3N0YXR1cy5wbWtpZCwgcGFyYW1zLSZndDtwbWtpZCwgV0xBTl9QTUtJRF9MRU4pOwogCQlhdXRoX3N0YXR1cy5mbGFncyA9IGNwdV90b19sZTE2KEJSQ01GX0VYVEFVVEhfU1VDQ0VTUyk7CiAJfSBlbHNlIHsKIAkJYnBoeV9lcnIoZHJ2ciwgJiMzNDtFeHRlcm5hbCBhdXRoZW50aWNhdGlvbiBmYWlsZWQ6IHN0YXR1cz0lZFxuJiMzNDssCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA2OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMTIKCQkJCQkJCW91dHB1dDogNTIKCQkJCQkJCXRob3VnaHRzOiAxODkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgQnJvYWRjb20gV2lyZWxlc3MgRHJpdmVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIOKAkyBsb29rcyBsaWtlIGl0JiMzOTtzIHR3ZWFraW5nIGBicmNtZl9jeXdfZXh0ZXJuYWxfYXV0aGAgaW4gdGhlIGBicmNtZm1hY2AgZHJpdmVyLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIGFib3V0IGluaXRpYWxpemluZyBgYXV0aF9zdGF0dXNgIGFuZCBjb3B5aW5nIGBwYXJhbXMtJmd0O3Bta2lkYCBvdmVyLCBidXQgb25seSBpZiBgcGFyYW1zLSZndDtwbWtpZGAgaXNuJiMzOTt0IG51bGwuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O2NhbiBJIHJlYWNoIHRoaXMgZWFzaWx5IGluIFFFTVU/JiMzNDsgVGhlIGRyaXZlciBpcyBgYnJjbWZtYWNgLCBzbyBpdCYjMzk7cyBhIEJyb2FkY29tIHdpcmVsZXNzIGRyaXZlci4gVGhlIG5leHQgcXVlc3Rpb24gSSBoYXZlIGlzLCB3aGF0JiMzOTtzIHRoZSBpbnRlcmZhY2Ug4oCTIFVTQiwgU0RJTywgb3IgUENJZT8gVGhhdCYjMzk7cyBnb2luZyB0byBkaWN0YXRlIGhvdyBJIGFwcHJvYWNoIGZ1enppbmcgaXQuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgZmlsZSBmb3IgYGJyY21mbWFjYCB0byBzZWUgd2hhdCBpbnRlcmZhY2VzIGl0IHN1cHBvcnRzLCBtYXliZSBgZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWdgIGlzIGEgZ29vZCBwbGFjZSB0byBzdGFydC4gSWYgVVNCIGlzIHN1cHBvcnRlZCwgdGhlbiBJIGNhbiBkZWZpbml0ZWx5IGxldmVyYWdlIFVTQiBlbXVsYXRpb24sIHdoaWNoIGlzIGEgYmlnIHdpbiBmb3IgZnV6emluZy4gSWYgaXQmIzM5O3MgU0RJTyBvciBQQ0llLCBJJiMzOTtsbCBoYXZlIHRvIGNvbnNpZGVyIG90aGVyIG1ldGhvZHMsIGJ1dCBVU0IgaXMgZGVmaW5pdGVseSB0aGUgcHJlZmVycmVkIGFwcHJvYWNoIGhlcmUuIExldCYjMzk7cyBkaWcgaW50byB0aGF0IEtjb25maWcgYW5kIHNlZSB3aGF0IHdlIGNhbiBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA2OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JyY21mX2N5d19leHRlcm5hbF9hdXRoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L2NvcmUuYz0xOTc9c3RhdGljIGludFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmM6MTk4OmJyY21mX2N5d19leHRlcm5hbF9hdXRoKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L2NvcmUuYy0xOTktXHRcdFx0c3RydWN0IGNmZzgwMjExX2V4dGVybmFsX2F1dGhfcGFyYW1zICpwYXJhbXMpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmM9MjM0PXN0YXRpYyB2b2lkIGJyY21mX2N5d19nZXRfY2ZnODAyMTFfb3BzKHN0cnVjdCBicmNtZl9wdWIgKmRydnIpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmMtMjM2LVx0ZHJ2ci1cdTAwM2VvcHMtXHUwMDNlbWdtdF90eCA9IGJyY21mX2N5d19tZ210X3R4O1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmM6MjM3Olx0ZHJ2ci1cdTAwM2VvcHMtXHUwMDNlZXh0ZXJuYWxfYXV0aCA9IGJyY21mX2N5d19leHRlcm5hbF9hdXRoO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmMtMjM4LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNjozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTk5CgkJCQkJCQlvdXRwdXQ6IDQ3CgkJCQkJCQl0aG91Z2h0czogNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gYWxyZWFkeSBkZWVwIGluIGRyaXZlciBkZXZlbG9wbWVudCBhbmQgZmFtaWxpYXIgd2l0aCB0aGUgY29kZWJhc2U6CgoqKkFuYWx5emluZyB0aGUgYGV4dGVybmFsX2F1dGhgIEhvb2sgZm9yIEJyb2FkY29tJiMzOTtzIEZpcm13YXJlKioKClJpZ2h0LCBzbyB0aGUgYGJyY21mX2N5d19leHRlcm5hbF9hdXRoYCBmdW5jdGlvbiBpcyBiZWluZyBob29rZWQgaW50byBgZHJ2ci0mZ3Q7b3BzLSZndDtleHRlcm5hbF9hdXRoYC4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZywgYW5kIGRlZmluaXRlbHkgbmVlZHMgYSBjbG9zZXIgbG9vay4gSSBpbW1lZGlhdGVseSBhc3N1bWUgdGhpcyBpcyByZWxhdGVkIHRvIHNvbWUgZm9ybSBvZiBleHRlcm5hbCBhdXRoZW50aWNhdGlvbiBtZWNoYW5pc20sIGxpa2VseSBXUEEvV1BBMiBFbnRlcnByaXNlIG9yIHNpbWlsYXIuIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhpcyBmdW5jdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgYXV0aGVudGljYXRpb24gcHJvY2VzcyB3aXRoaW4gdGhlIGBicmNtZm1hY2AgZHJpdmVyLgoKTm93LCBteSBmb2N1cyBzaGlmdHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsYXJnZXIgY29udGV4dC4gSSBuZWVkIHRvIGRldGVybWluZSBpZiB0aGlzIGV4dGVybmFsIGF1dGhlbnRpY2F0aW9uIGltcGxlbWVudGF0aW9uIGlzIFVTQi1zcGVjaWZpYywgb3IgaWYgaXQgaGFzIHdpZGVyIGFwcGxpY2FiaWxpdHkgYWNyb3NzIHRoZSBgYnJjbWZtYWNgIGFyY2hpdGVjdHVyZS4gVGhlIGxvZ2ljYWwgbmV4dCBzdGVwIGlzIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGBicmNtZm1hY2AgZHJpdmVyLCBpbiBpdHMgY3VycmVudCBjb25maWd1cmF0aW9uLCBhY3R1YWxseSBzdXBwb3J0cyBVU0IuIElmIGl0IGRvZXNuJiMzOTt0LCB0aGVuIHRoaXMgZnVuY3Rpb24mIzM5O3MgcHJlc2VuY2UgaXMgc29tZXdoYXQgcGVycGxleGluZywgdW5sZXNzIGl0JiMzOTtzIGRlc2lnbmVkIGZvciBmdXR1cmUgc3VwcG9ydCBvciBhcyBhIGdlbmVyaWMgbWVjaGFuaXNtLiBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgdGhlIFVTQiBzdXBwb3J0IHN0YXR1cyB3aXRoaW4gdGhlIGRyaXZlci4gTGV0JiMzOTtzIHNlZS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA2OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCUkNNRk1BQyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWc6MTpjb25maWcgQlJDTUZNQUNcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnLTItXHR0cmlzdGF0ZSBcJiMzNDtCcm9hZGNvbSBGdWxsTUFDIFdMQU4gZHJpdmVyXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWctMTAtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZzoxMTpjb25maWcgQlJDTUZNQUNfUFJPVE9fQkNEQ1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWctMTItXHRib29sXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZy0xMy1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnOjE0OmNvbmZpZyBCUkNNRk1BQ19QUk9UT19NU0dCVUZcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnLTE1LVx0Ym9vbFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWctMTYtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZzoxNzpjb25maWcgQlJDTUZNQUNfU0RJT1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWctMTgtXHRib29sIFwmIzM0O1NESU8gYnVzIGludGVyZmFjZSBzdXBwb3J0IGZvciBGdWxsTUFDIGRyaXZlclwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnLTI4LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWc6Mjk6Y29uZmlnIEJSQ01GTUFDX1VTQlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWctMzAtXHRib29sIFwmIzM0O1VTQiBidXMgaW50ZXJmYWNlIHN1cHBvcnQgZm9yIEZ1bGxNQUMgZHJpdmVyXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWctMzktXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZzo0MDpjb25maWcgQlJDTUZNQUNfUENJRVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWctNDEtXHRib29sIFwmIzM0O1BDSUUgYnVzIGludGVyZmFjZSBzdXBwb3J0IGZvciBGdWxsTUFDIGRyaXZlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA2OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQxNjIKCQkJCQkJCW91dHB1dDogNTkKCQkJCQkJCXRob3VnaHRzOiA2MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZSwgdGhlIHN5c3RlbSB0ZWxscyBtZSB0aGF0ICoqQlJDTUZNQUNfVVNCIGlzIHN1cHBvcnRlZC4gR29vZC4qKiBUaGF0JiMzOTtzIGEgc29saWQgc3RhcnRpbmcgcG9pbnQuIE5vdywgdGhlIGtleSBxdWVzdGlvbiBiZWNvbWVzLCBjYW4gd2UgYWN0dWFsbHkgcmVhY2ggYGJyY21mX2N5d19leHRlcm5hbF9hdXRoYCB0aHJvdWdoIHRoZSBVU0IgaW50ZXJmYWNlPyBXZSBuZWVkIHRvIGFzY2VydGFpbiB0aGF0IGNvbm5lY3Rpb24gcGF0aC4gQW5kIHRvIGRvIHRoYXQsIEkgbmVlZCB0byB0cmFjZSBpdHMgdXNhZ2UuIFNwZWNpZmljYWxseSwgd2hlcmUgaXMgYGJyY21mX2N5d19nZXRfY2ZnODAyMTFfb3BzYCBiZWluZyBjYWxsZWQgZnJvbT8gVGhhdCBmdW5jdGlvbiBjYWxsIGhvbGRzIHRoZSBrZXkgdG8gbWFwcGluZyB0aGUgaW50ZXJhY3Rpb25zIGludm9sdmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA2OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JyY21mX2N5d19nZXRfY2ZnODAyMTFfb3BzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L2NvcmUuYz0xOTg9YnJjbWZfY3l3X2V4dGVybmFsX2F1dGgoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L2NvcmUuYy0yMzMtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L2NvcmUuYzoyMzQ6c3RhdGljIHZvaWQgYnJjbWZfY3l3X2dldF9jZmc4MDIxMV9vcHMoc3RydWN0IGJyY21mX3B1YiAqZHJ2cilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvY29yZS5jLTIzNS17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmM9Mzc0PWNvbnN0IHN0cnVjdCBicmNtZl9md3ZpZF9vcHMgYnJjbWZfY3l3X29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L2NvcmUuYy0zNzctXHQuYWN0aXZhdGVfZXZlbnRzID0gYnJjbWZfY3l3X2FjdGl2YXRlX2V2ZW50cyxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvY29yZS5jOjM3ODpcdC5nZXRfY2ZnODAyMTFfb3BzID0gYnJjbWZfY3l3X2dldF9jZmc4MDIxMV9vcHMsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L2NvcmUuYy0zNzktXHQucmVnaXN0ZXJfZXZlbnRfaGFuZGxlcnMgPSBicmNtZl9jeXdfcmVnaXN0ZXJfZXZlbnRfaGFuZGxlcnMsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDY6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDgzNgoJCQkJCQkJb3V0cHV0OiA1MAoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqV2hlcmUgRG9lcyBgYnJjbWZfY3l3X29wc2AgQWN0dWFsbHkgTGl2ZT8qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYGJyY21mX2N5d19vcHNgIHRoaW5nLCBhbmQgbXkgZmlyc3QgdGhvdWdodCBpcywgJiMzNDtXaGVyZSAqZXhhY3RseSogaXMgdGhpcyBkcml2ZXIgaW50ZXJmYWNlIHV0aWxpemVkPyYjMzQ7IEl0JiMzOTtzIG5vdCBlbm91Z2ggdG8ga25vdyBpdCAqZXhpc3RzKiwgSSBuZWVkIHRvIHF1aWNrbHkgZXN0YWJsaXNoIHRoZSBzY29wZSBvZiBpdHMgdXNhZ2UuIEkgaW1tZWRpYXRlbHkgbmVlZCB0byBjb25uZWN0IHRoZSBkb3RzIC0gaXMgdGhpcyBvbmx5IGluc2lkZSB0aGUgQnJvYWRjb20gV2ktRmkgZHJpdmVyLCBvciBkb2VzIGl0IHBvdGVudGlhbGx5IGhhdmUgYnJvYWRlciBpbXBsaWNhdGlvbnMgYWNyb3NzIHRoZSBzeXN0ZW0/IEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIHZhcmlvdXMga2VybmVsIG1vZHVsZXMsIG5ldHdvcmsgaW50ZXJmYWNlcywgYW5kIG1heWJlIGV2ZW4gdXNlci1zcGFjZSB1dGlsaXRpZXMgdGhhdCBjb3VsZCBiZSB0b3VjaGluZyB0aGlzLiBNeSBnb2FsIGlzIHRvIHF1aWNrbHkgbWFwIG91dCB0aGUgZnVuY3Rpb24gY2FsbHMgYW5kIGRlcGVuZGVuY2llcyB0byBnZXQgYSBtZW50YWwgcGljdHVyZSBvZiBpdHMgcm9sZSBpbiB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUuIEnigJltIHRoaW5raW5nIEkgd2lsbCBuZWVkIHRvIHVzZSBhIGdyZXAgb3IgZmluZCBjb21tYW5kIHRvIHNlZSB0aGUgaW5jbHVkZSBmaWxlcyB0aGF0IHJlZmVyZW5jZSB0aGUgc3ltYm9scy4gSXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBxdWVzdGlvbiB0aGF0IGRpY3RhdGVzIGhvdyBJIHNob3VsZCBhcHByb2FjaCBmdXJ0aGVyIGFuYWx5c2lzLiBXaXRob3V0IHRoaXMgYmFzaWMgY29udGV4dCwgYW55IGRlZXBlciBkaXZlIHdvdWxkIGJlIGp1c3Qgc3Bpbm5pbmcgbXkgd2hlZWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNjo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticmNtZl9jeXdfb3BzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L2NvcmUuYz0zNjI9c3RhdGljIHZvaWQgYnJjbWZfY3l3X3JlZ2lzdGVyX2V2ZW50X2hhbmRsZXJzKHN0cnVjdCBicmNtZl9wdWIgKmRydnIpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmMtMzczLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmM6Mzc0OmNvbnN0IHN0cnVjdCBicmNtZl9md3ZpZF9vcHMgYnJjbWZfY3l3X29wcyA9IHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvY29yZS5jLTM3NS1cdC5zZXRfc2FlX3Bhc3N3b3JkID0gYnJjbWZfY3l3X3NldF9zYWVfcHdkLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvbW9kdWxlLmM9MTI9c3RhdGljIGludCBfX2luaXQgYnJjbWZfY3l3X2luaXQodm9pZClcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L21vZHVsZS5jLTE0LVx0cmV0dXJuIGJyY21mX2Z3dmlkX3JlZ2lzdGVyX3ZlbmRvcihCUkNNRl9GV1ZFTkRPUl9DWVcsIFRISVNfTU9EVUxFLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9tb2R1bGUuYzoxNTpcdFx0XHRcdFx0ICAgXHUwMDI2YnJjbWZfY3l3X29wcyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L21vZHVsZS5jLTE2LX1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L3ZvcHMuaC03LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy92b3BzLmg6ODpleHRlcm4gY29uc3Qgc3RydWN0IGJyY21mX2Z3dmlkX29wcyBicmNtZl9jeXdfb3BzO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy92b3BzLmg6OTojZGVmaW5lIENZV19WT1BTXHQoXHUwMDI2YnJjbWZfY3l3X29wcylcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvdm9wcy5oLTEwLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNjo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NzEzCgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMTM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQlJDTUYgV2ktRmkgRHJpdmVyJiMzOTtzIEF1dGhlbnRpY2F0aW9uIEZsb3cqKgoKT2theSwgc28gYGJyY21mX2N5d19vcHNgIGlzIHJlZ2lzdGVyZWQsIHNwZWNpZmljYWxseSBmb3IgdGhhdCBgQlJDTUZfRldWRU5ET1JfQ1lXYCBmaXJtd2FyZSB2ZW5kb3IuIFJpZ2h0LCBXaS1GaSBkcml2ZXIuIFRoZSBjb2RlIGNoYW5nZSBpcyBwaW5uZWQgdG8gYGJyY21mX2N5d19leHRlcm5hbF9hdXRoYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7Q2FuIHRoaXMgYmUgdHJpZ2dlcmVkIHRocm91Z2ggdGhlIHN0YW5kYXJkIG1hYzgwMjExL2NmZzgwMjExIGludGVyZmFjZXM/JiMzNDsgQSBxdWljayBzY2FuIGNvbmZpcm1zIGl0OyBgZXh0ZXJuYWxfYXV0aGAgKmlzKiBhIGNmZzgwMjExIG9wZXJhdGlvbi4gR29vZC4KCldhaXQgYSBzZWNvbmQsIGxldCBtZSBzb2xpZGlmeSB0aGlzLi4uIGBkcnZyLSZndDtvcHMtJmd0O2V4dGVybmFsX2F1dGhgIGlzIGFjdHVhbGx5IGFzc2lnbmVkIHRvIHBvaW50IHRvIG91ciBgYnJjbWZfY3l3X2V4dGVybmFsX2F1dGhgIGZ1bmN0aW9uLiBOb3csIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBwaW5wb2ludCB3aGVyZSBgZHJ2ci0mZ3Q7b3BzLSZndDtleHRlcm5hbF9hdXRoYCBpcyAqY2FsbGVkKiB0byB1bmRlcnN0YW5kIHRoZSBkYXRhIGZsb3cuIExldCYjMzk7cyB0cmFjZSB0aG9zZSBjYWxsIHNpdGVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNjo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtleHRlcm5hbF9hdXRoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L2NvcmUuYz0xOTc9c3RhdGljIGludFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmM6MTk4OmJyY21mX2N5d19leHRlcm5hbF9hdXRoKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L2NvcmUuYzoxOTk6XHRcdFx0c3RydWN0IGNmZzgwMjExX2V4dGVybmFsX2F1dGhfcGFyYW1zICpwYXJhbXMpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L2NvcmUuYy0yMDAte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvY29yZS5jPTIzND1zdGF0aWMgdm9pZCBicmNtZl9jeXdfZ2V0X2NmZzgwMjExX29wcyhzdHJ1Y3QgYnJjbWZfcHViICpkcnZyKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvY29yZS5jLTIzNi1cdGRydnItXHUwMDNlb3BzLVx1MDAzZW1nbXRfdHggPSBicmNtZl9jeXdfbWdtdF90eDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvY29yZS5jOjIzNzpcdGRydnItXHUwMDNlb3BzLVx1MDAzZWV4dGVybmFsX2F1dGggPSBicmNtZl9jeXdfZXh0ZXJuYWxfYXV0aDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvY29yZS5jLTIzOC19XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmM9MjQxPWJyY21mX2N5d19ub3RpZnlfZXh0X2F1dGhfcmVxKHN0cnVjdCBicmNtZl9pZiAqaWZwLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvY29yZS5jLTI0NC1cdHN0cnVjdCBicmNtZl9wdWIgKmRydnIgPSBpZnAtXHUwMDNlZHJ2cjtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvY29yZS5jOjI0NTpcdHN0cnVjdCBjZmc4MDIxMV9leHRlcm5hbF9hdXRoX3BhcmFtcyBwYXJhbXM7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L2NvcmUuYy0yNDYtXHRzdHJ1Y3QgYnJjbWZfYXV0aF9yZXFfc3RhdHVzX2xlICphdXRoX3JlcSA9XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmMtMjY2LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmM6MjY3Olx0ZXJyID0gY2ZnODAyMTFfZXh0ZXJuYWxfYXV0aF9yZXF1ZXN0KGlmcC1cdTAwM2VuZGV2LCBcdTAwMjZwYXJhbXMsIEdGUF9LRVJORUwpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmMtMjY4LVx0aWYgKGVycilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDY6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjg1OQoJCQkJCQkJb3V0cHV0OiA1MwoJCQkJCQkJdGhvdWdodHM6IDgwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGRlZXAgaW4gdGhlIHdlZWRzIG9mIHdpcmVsZXNzIGRyaXZlciBkZXZlbG9wbWVudDoKCioqSW5pdGlhbCBJbnZlc3RpZ2F0aW9uIGludG8gYSBjZmc4MDIxMSBPcGVyYXRpb24qKgoKUmlnaHQsIHNvIGBkcnZyLSZndDtvcHMtJmd0O2V4dGVybmFsX2F1dGhgLiBUaGF0JiMzOTtzIGltbWVkaWF0ZWx5IHRyaWdnZXJpbmcgYSBjZmc4MDIxMSBmbGFnLiBJIGtub3cgdGhhdCBtZWFucyBpdCYjMzk7cyBvbmUgb2YgdGhlIHN0YW5kYXJkaXplZCBvcGVyYXRpb25zIHRoYXQgdGhlIGNmZzgwMjExIGxheWVyIGRlZmluZXMgZm9yIHdpcmVsZXNzIGRyaXZlcnMuIE9rYXksIHRoZSBjcml0aWNhbCBzdGVwIGlzIHRvIHF1aWNrbHkgY29uZmlybSB0aGUgYXNzaWdubWVudCAtIHdoZXJlIGlzIHRoaXMgYGV4dGVybmFsX2F1dGhgIG9wZXJhdGlvbiBhY3R1YWxseSBob29rZWQgdXA/IFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBzb3VyY2UgY29kZSwgc3BlY2lmaWNhbGx5IGBkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuY2AuIFRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCB0aGUgY29ubmVjdGlvbiBiZXR3ZWVuIHdoYXQmIzM5O3MgaW4gdGhlIGRyaXZlciYjMzk7cyBvcGVyYXRpb24gc3RydWN0dXJlIGFuZCB0aGUgY2ZnODAyMTEgZnJhbWV3b3JrIGl0c2VsZi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBgZXh0ZXJuYWxfYXV0aGAgaXMgcHJvcGVybHkgbGlua2VkIHdpdGggdGhlIGBjZmc4MDIxMV9vcHNgIHN0cnVjdHVyZS4gVGhpcyBpcyBhIGNydWNpYWwgZmlyc3Qgc3RlcCBpbiB1bmRlcnN0YW5kaW5nIGhvdyB0aGlzIGV4dGVybmFsIGF1dGhlbnRpY2F0aW9uIGZ1bmN0aW9uYWxpdHkgaXMgaW50ZWdyYXRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDY6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtleHRlcm5hbF9hdXRoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNjo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MjQzCgkJCQkJCQlvdXRwdXQ6IDQ3CgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBpc3N1ZToKCioqRGVsdmluZyBpbnRvIHRoZSBEcml2ZXIgT3BlcmF0aW9ucyBTdHJ1Y3R1cmUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYGRydnItJmd0O29wc2Agc3RydWN0dXJlLCBhbmQgbXkgZ3V0IHRlbGxzIG1lIGl0JiMzOTtzIGhpZ2hseSBsaWtlbHkgcG9pbnRpbmcgdG8gYGNmZzgwMjExX29wc2AuIEdpdmVuIHRoZSBjb250ZXh0LCB0aGF0JiMzOTtzIHRoZSBtb3N0IHByb2JhYmxlIGltcGxlbWVudGF0aW9uLiBUbyBjb25maXJtIHRoaXMsIEkgbmVlZCB0byBzZWUgZXhhY3RseSB3aGVyZSBgZHJ2ci0mZ3Q7b3BzYCBpcyBkZWZpbmVkLiBLbm93aW5nIGl0cyBkZWNsYXJhdGlvbiB3aWxsIGNsYXJpZnkgdGhlIGludGVuZGVkIHB1cnBvc2UgYW5kIGNvbmZpcm0gbXkgaW5pdGlhbCBoeXBvdGhlc2lzIGFib3V0IGl0cyB0eXBlLiBJJiMzOTtsbCB0cmFjZSBiYWNrIHRvIHRoZSBkZWZpbml0aW9uIGFuZCB2ZXJpZnkgaWYgSSYjMzk7bSBvbiB0aGUgcmlnaHQgdHJhY2sgYmVmb3JlIGdvaW5nIGFueSBmdXJ0aGVyIGRvd24gdGhpcyByYWJiaXQgaG9sZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDY6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7b3BzLVx1MDAzZWV4dGVybmFsX2F1dGgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvY29yZS5jPTIzND1zdGF0aWMgdm9pZCBicmNtZl9jeXdfZ2V0X2NmZzgwMjExX29wcyhzdHJ1Y3QgYnJjbWZfcHViICpkcnZyKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvY29yZS5jLTIzNi1cdGRydnItXHUwMDNlb3BzLVx1MDAzZW1nbXRfdHggPSBicmNtZl9jeXdfbWdtdF90eDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvY29yZS5jOjIzNzpcdGRydnItXHUwMDNlb3BzLVx1MDAzZWV4dGVybmFsX2F1dGggPSBicmNtZl9jeXdfZXh0ZXJuYWxfYXV0aDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvY29yZS5jLTIzOC19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA2OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc2ODcKCQkJCQkJCW91dHB1dDogNTQKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIERyaXZlciBPcGVyYXRpb25zIFN0cnVjdHVyZSoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBGaXJzdCB0aGluZ3MgZmlyc3QsIGxldCYjMzk7cyBkaXNzZWN0IHdoYXQmIzM5O3MgZ29pbmcgb24gdW5kZXIgdGhlIGhvb2QuIE15IGluaXRpYWwgZm9jdXMgaXMgYWx3YXlzIG9uIHRoZSBmdW5kYW1lbnRhbCBidWlsZGluZyBibG9ja3Mgb2YgdGhpcyBkcml2ZXIgaW1wbGVtZW50YXRpb24uIFNvLCBteSBtaW5kIGltbWVkaWF0ZWx5IHplcm9lcyBpbiBvbiB0aGF0IGBkcnZyLSZndDtvcHNgIHN0cnVjdHVyZS4gSSBuZWVkIHRvIGV4cGxpY2l0bHkgY2hlY2sgaXRzIHR5cGUuIFVuZGVyc3RhbmRpbmcgdGhlIHNwZWNpZmljIHR5cGUg4oCTIHdoZXRoZXIgaXQmIzM5O3MgYSBgc3RydWN0YCBJIGRlZmluZWQsIHNvbWV0aGluZyBpbmhlcml0ZWQsIG9yIGFuIG9wYXF1ZSBwb2ludGVyIG9mIHNvbWUga2luZCDigJMgaXMgYWJzb2x1dGVseSBjcml0aWNhbC4gVGhpcyB0eXBlIGRpY3RhdGVzIHRoZSBpbnRlcmZhY2UsIHRoZSBtZXRob2RzIGF2YWlsYWJsZSwgdGhlIGVudGlyZSBmcmFtZXdvcmsgdGhyb3VnaCB3aGljaCB0aGUgZHJpdmVyIGludGVyYWN0cyB3aXRoIHRoZSBzeXN0ZW0uIFdpdGhvdXQgYSBmaXJtIGdyYXNwIG9mIHRoZSBgZHJ2ci0mZ3Q7b3BzYCB0eXBlLCBhbnkgZnVydGhlciBhbmFseXNpcyBpcyBqdXN0IGd1ZXNzd29yay4gS25vd2luZyB0aGlzIHR5cGUgd2lsbCBpbmZvcm0gbWUgb2YgdGhlIG5leHQgc3RlcHMgdG8gdGFrZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDY6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RydWN0IGNmZzgwMjExX29wcyBcXCpvcHM7JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYz02MDU1PXN0cnVjdCBjZmc4MDIxMV9vcHMgKmJyY21mX2NmZzgwMjExX2dldF9vcHMoc3RydWN0IGJyY21mX21wX2RldmljZSAqc2V0dGluZ3MpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy02MDU2LXtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jOjYwNTc6XHRzdHJ1Y3QgY2ZnODAyMTFfb3BzICpvcHM7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy02MDU4LVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmM9MTMzMD1pbnQgYnJjbWZfYWxsb2Moc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgYnJjbWZfbXBfZGV2aWNlICpzZXR0aW5ncylcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jLTEzMzItXHRzdHJ1Y3Qgd2lwaHkgKndpcGh5O1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuYzoxMzMzOlx0c3RydWN0IGNmZzgwMjExX29wcyAqb3BzO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuYy0xMzM0LVx0c3RydWN0IGJyY21mX3B1YiAqZHJ2ciA9IE5VTEw7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuaD0xMDE9c3RydWN0IGJyY21mX3B1YiB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuaC0xMDUtXHRzdHJ1Y3Qgd2lwaHkgKndpcGh5O1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuaDoxMDY6XHRzdHJ1Y3QgY2ZnODAyMTFfb3BzICpvcHM7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5oLTEwNy1cdHN0cnVjdCBicmNtZl9jZmc4MDIxMV9pbmZvICpjb25maWc7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA2OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg1MDYKCQkJCQkJCW91dHB1dDogNDkKCQkJCQkJCXRob3VnaHRzOiAzNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyB0aGUgYGJyY21mX2N5d19leHRlcm5hbF9hdXRoYCBGdW5jdGlvbioqCgpPa2F5LCBzbyBgZHJ2ci0mZ3Q7b3BzYCBpcyBkZWZpbml0ZWx5IGEgYHN0cnVjdCBjZmc4MDIxMV9vcHMgKm9wc2AsIG1lYW5pbmcgYGJyY21mX2N5d19leHRlcm5hbF9hdXRoYCBpcyByZWdpc3RlcmVkIGFzIGEgY2ZnODAyMTEgb3BlcmF0aW9uLiBUaGF0JiMzOTtzIGdvb2Q7IGNmZzgwMjExIG9wZXJhdGlvbnMgYXJlIGZ1enplYWJsZSB2aWEgbmV0bGluaywgc3BlY2lmaWNhbGx5IG5sODAyMTEuIFRoZSBpbW1lZGlhdGUgZ29hbCBpcyB0byBmaWd1cmUgb3V0IGhvdyB0byBkbyBzby4KCkJ1dCwgYSBxdWljayByZWFsaXR5IGNoZWNrIOKAkyB0aGUgZHJpdmVyIGluIHF1ZXN0aW9uIGlzIGBicmNtZm1hY2AuIFRvIGV2ZW4gKnJlYWNoKiB0aGF0IGNvZGUsIHRoZSBkcml2ZXIgbmVlZHMgdG8gYmUgbG9hZGVkLCBhbmQgYSBkZXZpY2UgbmVlZHMgdG8gYmUgcHJlc2VudC4gU28gdGhlIGZ1enppbmcgc2V0dXAgd2lsbCByZXF1aXJlIGEgYml0IG1vcmUgd29yayB0aGFuIHNpbXBseSBjcmFmdGluZyBzb21lIG5ldGxpbmsgbWVzc2FnZXMuCgpUaGUgcXVlc3Rpb24gdGhlbiBiZWNvbWVzOiBjYW4gSSBlbXVsYXRlIGEgYGJyY21mbWFjYCBkZXZpY2UgaW4gUUVNVT8gVHlwaWNhbGx5LCBgYnJjbWZtYWNgIHJlbGllcyBvbiBhIHBoeXNpY2FsIFNESU8sIFVTQiwgb3IgUENJZSBkZXZpY2UgYW5kIGl0cyBhc3NvY2lhdGVkIGZpcm13YXJlLiBgbWFjODAyMTFfaHdzaW1gIGlzbiYjMzk7dCBnb2luZyB0byBjdXQgaXQsIHNpbmNlIHRoYXQgZW11bGF0ZXMgbWFjODAyMTEgZGV2aWNlcywgd2hpY2ggaXMgYSBkaWZmZXJlbnQgYmVhc3QgZnJvbSBgYnJjbWZtYWNgLCBhIEZ1bGxNQUMgZHJpdmVyLgoKVGhlIG5leHQgcXVlc3Rpb246IGRvZXMgc3l6a2FsbGVyIGhhdmUgYSBtZWFucyB0byBlbXVsYXRlIGBicmNtZm1hY2AgdmlhIFVTQj8gU3l6a2FsbGVyICpkb2VzKiBoYXZlIFVTQiBmdXp6aW5nIGNhcGFiaWxpdGllcyB2aWEgYHZoY2lgLCB3aGljaCBtZWFucyBpdCBjYW4gZW11bGF0ZSBVU0IgZGV2aWNlcy4gSWYgYGJyY21mbWFjYCBzdXBwb3J0cyBVU0IsIHNwZWNpZmljYWxseSBpZiBgQlJDTUZNQUNfVVNCYCBpcyBlbmFibGVkLCB0aGVuIHN5emthbGxlciBjb3VsZCBwb3RlbnRpYWxseSBlbXVsYXRlIGEgQnJvYWRjb20gVVNCIFdpLUZpIGRvbmdsZSwgd2hpY2ggd291bGQgYmUgaWRlYWwuCgpMZXQmIzM5O3MgY2hlY2sgaWYgYEJSQ01GTUFDX1VTQmAgaXMgZW5hYmxlZCBpbiBzeXprYWxsZXImIzM5O3MgdHlwaWNhbCBjb25maWd1cmF0aW9ucywgb3IgaWYgaXQgY2FuIGJlIGVuYWJsZWQuIEl0IHR1cm5zIG91dCB0aGF0IGVuYWJsaW5nIGl0IGlzIGEgdmlhYmxlIG9wdGlvbi4gTm93LCBpdCYjMzk7cyB0aW1lIHRvIGNoZWNrIGBkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmNgIHRvIGNvbmZpcm0gdGhhdCB0aGlzIGRyaXZlciBpcyBpbmRlZWQgYSBVU0IgZHJpdmVyLiBUaGlzIHdpbGwgY29uZmlybSB0aGUgdmlhYmlsaXR5IG9mIHRoaXMgZnV6emluZyBzdHJhdGVneS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDY6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnJjbWZfdXNiX3Byb2JlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM9MTE2NT1zdGF0aWMgY29uc3Qgc3RydWN0IGJyY21mX2J1c19vcHMgYnJjbWZfdXNiX2J1c19vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTExNzUtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM6MTE3NjpzdGF0aWMgdm9pZCBicmNtZl91c2JfcHJvYmVfcGhhc2UyKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHJldCxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xMTc3LVx0XHRcdFx0ICAgc3RydWN0IGJyY21mX2Z3X3JlcXVlc3QgKmZ3cmVxKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYz0xMjI0PWJyY21mX3VzYl9wcmVwYXJlX2Z3X3JlcXVlc3Qoc3RydWN0IGJyY21mX3VzYmRldl9pbmZvICpkZXZpbmZvKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xMjQzLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jOjEyNDQ6c3RhdGljIGludCBicmNtZl91c2JfcHJvYmVfY2Ioc3RydWN0IGJyY21mX3VzYmRldl9pbmZvICpkZXZpbmZvLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTEyNDUtXHRcdFx0ICAgICAgZW51bSBicmNtZl9md3ZlbmRvciBmd3ZpZClcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtMTMwOC1cdC8qIHJlcXVlc3QgZmlybXdhcmUgaGVyZSAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jOjEzMDk6XHRyZXQgPSBicmNtZl9md19nZXRfZmlybXdhcmVzKGRldiwgZndyZXEsIGJyY21mX3VzYl9wcm9iZV9waGFzZTIpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTEzMTAtXHRpZiAocmV0KSB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jPTEzNDQ9c3RhdGljIGludFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jOjEzNDU6YnJjbWZfdXNiX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtMTM0Ni17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTE0NDUtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM6MTQ0NjpcdHJldCA9IGJyY21mX3VzYl9wcm9iZV9jYihkZXZpbmZvLCBpZC1cdTAwM2Vkcml2ZXJfaW5mbyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtMTQ0Ny1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jPTE1MTQ9c3RhdGljIGludCBicmNtZl91c2JfcmVzZXRfcmVzdW1lKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xNTI2LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jOjE1Mjc6XHRyZXQgPSBicmNtZl9md19nZXRfZmlybXdhcmVzKFx1MDAyNnVzYi1cdTAwM2VkZXYsIGZ3cmVxLCBicmNtZl91c2JfcHJvYmVfcGhhc2UyKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xNTI4LVx0aWYgKHJldCBcdTAwM2MgMClcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM9MTU2OD1zdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgYnJjbWZfdXNiZHJ2ciA9IHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xNTY5LVx0Lm5hbWUgPSBLQlVJTERfTU9ETkFNRSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYzoxNTcwOlx0LnByb2JlID0gYnJjbWZfdXNiX3Byb2JlLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTE1NzEtXHQuZGlzY29ubmVjdCA9IGJyY21mX3VzYl9kaXNjb25uZWN0LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNjo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDUxMAoJCQkJCQkJb3V0cHV0OiA0NgoJCQkJCQkJdGhvdWdodHM6IDIxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGJyY21mbWFjIERyaXZlciBQcm9iZSBTZXF1ZW5jZSoqCgpPa2F5LCBzbyBgYnJjbWZfdXNiX3Byb2JlYCBkZWZpbml0ZWx5IGV4aXN0cy4gUmlnaHQsIGFuZCBpdCBsb29rcyBsaWtlIGBicmNtZl91c2JfcHJvYmVgIGNhbGxzIGBicmNtZl9md19nZXRfZmlybXdhcmVzYCwgd2hpY2gsIGFzIHRoZSBuYW1lIHN1Z2dlc3RzLCByZXF1ZXN0cyBmaXJtd2FyZS4gSG1tLCBpZiB0aGUgZmlybXdhcmUgaXNuJiMzOTt0IHByZXNlbnQsIHRoYXQgY291bGQgY2F1c2UgaXNzdWVzLiBTcGVjaWZpY2FsbHksIGl0IHNlZW1zIGxpa2UgYGJyY21mX3VzYl9wcm9iZV9waGFzZTJgIG1pZ2h0IG5vdCBldmVuIGJlIGNhbGxlZCwgb3IgcG90ZW50aWFsbHkgZmFpbCBpZiBpdCAqaXMqIGNhbGxlZCB3aXRob3V0IHRoZSBmaXJtd2FyZS4gQSBrZXkgcXVlc3Rpb24gaGVyZSBpcyB3aGV0aGVyIHN5emthbGxlciBwcm92aWRlcyB0aGUgbmVjZXNzYXJ5IGZpcm13YXJlIGZvciBgYnJjbWZtYWNgLgoKSSBrbm93IHN5emthbGxlciAqY2FuKiBpbnRlcmNlcHQgZmlybXdhcmUgcmVxdWVzdHMsIGFzc3VtaW5nIGBDT05GSUdfRldfTE9BREVSX1VTRVJfSEVMUEVSYCBpcyBlbmFibGVkLCBidXQgdHlwaWNhbGx5LCBpdCYjMzk7cyBjbGVhbmVyLCBhbmQgbW9yZSByb2J1c3QsIGlmIHRoZSBkcml2ZXIgZG9lc24mIzM5O3QgaGF2ZSBhIGhhcmQgZGVwZW5kZW5jeSBvbiB0aGUgZmlybXdhcmUgdG8gcmVhY2ggYSBjZXJ0YWluIGNvZGUgcGF0aCwgb3IgaWYgdGhlIGZpcm13YXJlIGNhbiBiZSBlYXNpbHkgbW9ja2VkIGZvciB0ZXN0aW5nLgoKTm93LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IGBicmNtZl9jeXdfZXh0ZXJuYWxfYXV0aGAuIEkgcmVjYWxsIHRoYXQmIzM5O3MgY2FsbGVkIHRocm91Z2ggYGNmZzgwMjExYCBvcGVyYXRpb25zLCByaWdodD8gVG8gaW50ZXJhY3Qgd2l0aCBgY2ZnODAyMTFgLCB0aGUgZHJpdmVyIGhhcyB0byBzdWNjZXNzZnVsbHkgcHJvYmUgKmFuZCogcmVnaXN0ZXIgdGhlIHdpcGh5LiBTbywgdGhhdCYjMzk7cyB3aGF0IEkgbmVlZCB0byBsb29rIGludG8gbm93LiBEb2VzIGBicmNtZl91c2JfcHJvYmVfcGhhc2UyYCBoYW5kbGUgdGhlIHdpcGh5IHJlZ2lzdHJhdGlvbj8gSSBuZWVkIHRvIGNoZWNrIHRoZSBjb2RlIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNjo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt3aXBoeV9yZWdpc3RlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM9ODMzMj1zdHJ1Y3QgYnJjbWZfY2ZnODAyMTFfaW5mbyAqYnJjbWZfY2ZnODAyMTFfYXR0YWNoKHN0cnVjdCBicmNtZl9wdWIgKmRydnIsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtODQxNi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jOjg0MTc6XHRlcnIgPSB3aXBoeV9yZWdpc3Rlcih3aXBoeSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy04NDE4LVx0aWYgKGVyciBcdTAwM2MgMCkge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jLTg0MjgtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYzo4NDI5Olx0LyogSWYgY2ZnODAyMTEgZGlkbiYjMzk7dCBkaXNhYmxlIDQwTUh6IEhUIENBUCBpbiB3aXBoeV9yZWdpc3RlcigpLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtODQzMC1cdCAqIHNldHVwIDQwTUh6IGluIDJHSHogYmFuZCBhbmQgZW5hYmxlIE9CU1Mgc2Nhbm5pbmcuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA2OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNDU4CgkJCQkJCQlvdXRwdXQ6IDU0CgkJCQkJCQl0aG91Z2h0czogNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKlRyYWNpbmcgdGhlIERyaXZlciBBdHRhY2htZW50KioKCk9rYXksIHNvIGBicmNtZl9jZmc4MDIxMV9hdHRhY2hgIGlzIGEga2V5IGZ1bmN0aW9uIGhlcmUuIFRoZSBpbml0aWFsIGNsdWUgaXMgdGhhdCBpdCYjMzk7cyB0aGUgY2FsbGVyIG9mIGB3aXBoeV9yZWdpc3RlcmAsIGFuZCB0aGF0JiMzOTtzIHVzdWFsbHkgYSBwcmV0dHkgY2VudHJhbCBwb2ludCBpbiBhIHdpcmVsZXNzIGRyaXZlciYjMzk7cyBpbml0aWFsaXphdGlvbi4gSSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgY29udGV4dC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gdHJhY2UgYmFjayBmcm9tIGBicmNtZl9jZmc4MDIxMV9hdHRhY2hgLiBJIG5lZWQgdG8gZmlndXJlIG91dCAqd2hvKiBpcyBjYWxsaW5nICppdCouIFRoYXQmIzM5O3MgdGhlIG5leHQgbG9naWNhbCBzdGVwIHRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiBob3cgdGhpcyBkcml2ZXIgaXMgYmVpbmcgYnJvdWdodCBpbnRvIHRoZSBzeXN0ZW0uIEtub3dpbmcgdGhlIGNhbGxlciB0ZWxscyBtZSB3aGF0IHRyaWdnZXJzIHRoaXMgYXR0YWNobWVudCBwcm9jZXNzLiBJIG5lZWQgdG8gZmluZCB0aGUgY2FsbCBzaXRlcyBmb3IgYGJyY21mX2NmZzgwMjExX2F0dGFjaGAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA2OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JyY21mX2NmZzgwMjExX2F0dGFjaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM9ODMwNj1zdGF0aWMgdm9pZCBicmNtZl9mcmVlX3dpcGh5KHN0cnVjdCB3aXBoeSAqd2lwaHkpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtODMzMS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jOjgzMzI6c3RydWN0IGJyY21mX2NmZzgwMjExX2luZm8gKmJyY21mX2NmZzgwMjExX2F0dGFjaChzdHJ1Y3QgYnJjbWZfcHViICpkcnZyLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtODMzMy1cdFx0XHRcdFx0XHQgIHN0cnVjdCBjZmc4MDIxMV9vcHMgKm9wcyxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuaD00NjE9YnJjbWZfY2ZnODAyMTFfY29ubmVjdF9pbmZvICpjZmdfdG9fY29ubihzdHJ1Y3QgYnJjbWZfY2ZnODAyMTFfaW5mbyAqY2ZnKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5oLTQ2NS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5oOjQ2NjpzdHJ1Y3QgYnJjbWZfY2ZnODAyMTFfaW5mbyAqYnJjbWZfY2ZnODAyMTFfYXR0YWNoKHN0cnVjdCBicmNtZl9wdWIgKmRydnIsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuaC00NjctXHRcdFx0XHRcdFx0ICBzdHJ1Y3QgY2ZnODAyMTFfb3BzICpvcHMsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuYz0xMjI5PXN0YXRpYyBpbnQgYnJjbWZfYnVzX3N0YXJ0ZWQoc3RydWN0IGJyY21mX3B1YiAqZHJ2ciwgc3RydWN0IGNmZzgwMjExX29wcyAqb3BzKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmMtMTI2Ni1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmM6MTI2NzpcdGRydnItXHUwMDNlY29uZmlnID0gYnJjbWZfY2ZnODAyMTFfYXR0YWNoKGRydnIsIG9wcyxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmMtMTI2OC1cdFx0XHRcdFx0ICAgICBkcnZyLVx1MDAzZXNldHRpbmdzLVx1MDAzZXAycF9lbmFibGUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNjo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjQwNQoJCQkJCQkJb3V0cHV0OiA0OQoJCQkJCQkJdGhvdWdodHM6IDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgYnJlYWtkb3duIG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqVHJhY2luZyB0aGUgRHJpdmVyIEluaXRpYWxpemF0aW9uIFBhdGgqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBgYnJjbWZgIGRyaXZlciBpbml0aWFsaXphdGlvbiwgYW5kIG15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiBob3cgaXQgZ2V0cyBnb2luZy4gSSBzZWUgYGJyY21mX2J1c19zdGFydGVkYCBpcyB0aGUga2V5IGZ1bmN0aW9uIHRoYXQga2lja3MgdGhpbmdzIG9mZi4gTXkgZXhwZXJ0IGtub3dsZWRnZSB0ZWxscyBtZSB0aGF0IHRoaXMgaXMgbGlrZWx5IGEgY3JpdGljYWwgcG9pbnQuCgpOb3csIEkmIzM5O20gdGhpbmtpbmcsIHdoZXJlIGlzIHRoaXMgYGJyY21mX2J1c19zdGFydGVkYCBmdW5jdGlvbiBhY3R1YWxseSAqY2FsbGVkKj8gVGhhdCYjMzk7cyB0aGUgY3J1Y2lhbCBxdWVzdGlvbi4gS25vd2luZyBpdHMgY2FsbCBzaXRlcyB3aWxsIGFsbG93IG1lIHRvIGJ1aWxkIGFuIGFjY3VyYXRlIHBpY3R1cmUgb2YgdGhlIGNvbXBsZXRlIGRyaXZlciBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZSwgYW5kIGZpbmQgdGhlIHRyaWdnZXIgZm9yIGNvbmZpZ3VyYXRpb24gd2l0aCBgYnJjbWZfY2ZnODAyMTFfYXR0YWNoYC4gVW5kZXJzdGFuZGluZyB0aGUgZW50cnkgcG9pbnQgd2lsbCBwb2ludCBtZSB0byB0aGUgc3Vycm91bmRpbmcgY29udGV4dCwgYW5kIGhlbHAgbWUgcmVhc29uIGFib3V0IHBvdGVudGlhbCBpc3N1ZXMgb3IgdGhlIGRyaXZlciYjMzk7cyBiZWhhdmlvdXIuIEkgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gdGhpcyBmdW5jdGlvbiBhbmQgZmluZCBpdHMgcGFyZW50IHRvIHVuZGVyc3RhbmQgd2hhdCBldmVudCBvciBjaXJjdW1zdGFuY2UgdHJpZ2dlcnMgdGhlIGRyaXZlciBsb2FkIG9yIGluaXRpYWxpemF0aW9uIHByb2Nlc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA2OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JyY21mX2J1c19zdGFydGVkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29tbW9uLmM9Njg9TU9EVUxFX1BBUk1fREVTQyhpYXBwLCBcJiMzNDtFbmFibGUgcGFydGlhbCBzdXBwb3J0IGZvciB0aGUgb2Jzb2xldGVkIEludGVyLUFjY2VzcyBQb2ludCBQcm90b2NvbFwmIzM0Oyk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvbW1vbi5jLTcwLSNpZmRlZiBERUJVR1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvbW1vbi5jOjcxOi8qIGFsd2F5cyBzdWNjZWVkIGJyY21mX2J1c19zdGFydGVkKCkgKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb21tb24uYy03Mi1zdGF0aWMgaW50IGJyY21mX2lnbm9yZV9wcm9iZV9mYWlsO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmM9MTIyND1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBidXNfcmVzZXRfZm9wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jLTEyMjgtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jOjEyMjk6c3RhdGljIGludCBicmNtZl9idXNfc3RhcnRlZChzdHJ1Y3QgYnJjbWZfcHViICpkcnZyLCBzdHJ1Y3QgY2ZnODAyMTFfb3BzICpvcHMpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jLTEyMzAte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmM9MTM1OT1pbnQgYnJjbWZfYXR0YWNoKHN0cnVjdCBkZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jLTE0MDEtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jOjE0MDI6XHRyZXQgPSBicmNtZl9idXNfc3RhcnRlZChkcnZyLCBkcnZyLVx1MDAzZW9wcyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jLTE0MDMtXHRpZiAocmV0ICE9IDApIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDY6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMyMzIKCQkJCQkJCW91dHB1dDogNDcKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqVHJhY2luZyB0aGUgRHJpdmVyIEluaXRpYWxpemF0aW9uIFBhdGgqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBicmNtZl9hdHRhY2hgLiBUaGUgY29kZSBpcyBzdHJ1Y3R1cmVkIGluIGEgd2F5IHRoYXQgc3VnZ2VzdHMgaXQmIzM5O3MgdGhlIGNvcmUgYXR0YWNobWVudCBwb2ludCBmb3IgdGhlIEJyb2FkY29tIFdpLUZpIGRyaXZlci4gQW5kIHdpdGhpbiBgYnJjbWZfYXR0YWNoYCwgSSBzZWUgYSBjYWxsIHRvIGBicmNtZl9idXNfc3RhcnRlZGAuIFRoYXQmIzM5O3MgaW50ZXJlc3RpbmcsIGJ1dCBub3Qgc3VycHJpc2luZy4gSXQgbWFrZXMgc2Vuc2UgdGhhdCBpbml0aWFsaXphdGlvbiBvZiB0aGUgYnVzLXNwZWNpZmljIGludGVyZmFjZSB3b3VsZCBoYXBwZW4gZHVyaW5nIHRoZSBhdHRhY2htZW50IHByb2Nlc3MuCgpUaGUgcmVhbCBxdWVzdGlvbiBJIG5lZWQgdG8gYW5zd2VyIGlzOiAqV2hlcmUqIGRvZXMgYGJyY21mX2F0dGFjaGAgaXRzZWxmIGdldCBjYWxsZWQ/IFVuZGVyc3RhbmRpbmcgdGhlIGNhbGwgc3RhY2sgdGhhdCBsZWFkcyB0byBgYnJjbWZfYXR0YWNoYCBpcyBjcnVjaWFsIHRvIGZ1bGx5IGdyYXNwIHRoZSBkcml2ZXImIzM5O3MgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UuIEkgbmVlZCB0byBrbm93IHRoZSBlbnRyeSBwb2ludC4gSXMgaXQgY2FsbGVkIGZyb20gdGhlIGNvcmUga2VybmVsIHN1YnN5c3RlbSwgb3IgaXMgaXQgdHJpZ2dlcmVkIGJ5IGEgcGxhdGZvcm0tc3BlY2lmaWMgYnJpbmctdXAgc2VxdWVuY2U/IEtub3dpbmcgKndoZXJlKiBpdCYjMzk7cyBjYWxsZWQgd2lsbCBoZWxwIG1lIGRldGVybWluZSB0aGUgdHJpZ2dlcmluZyBjb25kaXRpb25zLiBUaGF0IHdpbGwgZGlyZWN0IGZ1cnRoZXIgaW52ZXN0aWdhdGlvbiBvbiBob3cgdGhlIGRyaXZlciYjMzk7cyBvdmVyYWxsIGxpZmVjeWNsZSBpcyBtYW5hZ2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNjo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticmNtZl9hdHRhY2gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9idXMuaD0zMDU9aW50IGJyY21mX2FsbG9jKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGJyY21mX21wX2RldmljZSAqc2V0dGluZ3MpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2J1cy5oLTMwNi0vKiBJbmRpY2F0aW9uIGZyb20gYnVzIG1vZHVsZSByZWdhcmRpbmcgcHJlc2VuY2UvaW5zZXJ0aW9uIG9mIGRvbmdsZS4gKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9idXMuaDozMDc6aW50IGJyY21mX2F0dGFjaChzdHJ1Y3QgZGV2aWNlICpkZXYpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2J1cy5oLTMwOC0vKiBJbmRpY2F0aW9uIGZyb20gYnVzIG1vZHVsZSByZWdhcmRpbmcgcmVtb3ZhbC9hYnNlbmNlIG9mIGRvbmdsZSAqL1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb21tb24uaC0xOC0gKiAobW9kdWxlKSBpbml0aWxpYXphdGlvbiB0YWtlcyBwbGFjZS4gVGhlIGRldmljZSBzcGVjaWZpYyBzZXR0aW5ncyBpcyBwYXJ0XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29tbW9uLmg6MTk6ICogb2YgdGhlIGRydnIgc3RydWN0IGFuZCBzaG91bGQgYmUgaW5pdGlhbGl6ZWQgb24gZXZlcnkgYnJjbWZfYXR0YWNoLlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvbW1vbi5oLTIwLSAqL1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmM9MTMzMD1pbnQgYnJjbWZfYWxsb2Moc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgYnJjbWZfbXBfZGV2aWNlICpzZXR0aW5ncylcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jLTEzNTgtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jOjEzNTk6aW50IGJyY21mX2F0dGFjaChzdHJ1Y3QgZGV2aWNlICpkZXYpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jLTEzNjAte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmM9MTQ0Nj12b2lkIGJyY21mX2Z3X2NyYXNoZWQoc3RydWN0IGRldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmMtMTQ1MC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmM6MTQ1MTpcdC8qIE1heSBmaXJlIGJlZm9yZSBicmNtZl9hdHRhY2goKSB3aXJlcyB1cCBkcnZyLCBvciBhZnRlciByZW1vdmFsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jLTE0NTItXHQgKiBoYXMgY2xlYXJlZCBpdDsgZ3VhcmQgdGhlIGRlcmVmcyBiZWxvdyAoYW5kIHRoZSBhcm1pbmcgZ2F0ZSBpblxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmM9MjEzOT1zdGF0aWMgdm9pZCBicmNtZl9wY2llX3NldHVwKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHJldCxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jLTIyMTktXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jOjIyMjA6XHRyZXQgPSBicmNtZl9hdHRhY2goXHUwMDI2ZGV2aW5mby1cdTAwM2VwZGV2LVx1MDAzZWRldik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jLTIyMjEtXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9zZGlvLmM9NDIwOT1zdGF0aWMgdm9pZCBicmNtZl9zZGlvX2Zpcm13YXJlX2NhbGxiYWNrKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IGVycixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvc2Rpby5jLTQzOTktXHQvKiBBdHRhY2ggdG8gdGhlIGNvbW1vbiBsYXllciwgcmVzZXJ2ZSBoZHIgc3BhY2UgKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9zZGlvLmM6NDQwMDpcdGVyciA9IGJyY21mX2F0dGFjaChzZGlvZC1cdTAwM2VkZXYpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3NkaW8uYy00NDAxLVx0aWYgKGVyciAhPSAwKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvc2Rpby5jOjQ0MDI6XHRcdGJyY21mX2VycihcJiMzNDticmNtZl9hdHRhY2ggZmFpbGVkXFxuXCYjMzQ7KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9zZGlvLmMtNDQwMy1cdFx0Z290byBmcmVlO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYz0xMTc2PXN0YXRpYyB2b2lkIGJyY21mX3VzYl9wcm9iZV9waGFzZTIoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgcmV0LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xMjEwLVx0LyogQXR0YWNoIHRvIHRoZSBjb21tb24gZHJpdmVyIGludGVyZmFjZSAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jOjEyMTE6XHRyZXQgPSBicmNtZl9hdHRhY2goZGV2aW5mby1cdTAwM2VkZXYpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTEyMTItXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYz0xMjQ0PXN0YXRpYyBpbnQgYnJjbWZfdXNiX3Byb2JlX2NiKHN0cnVjdCBicmNtZl91c2JkZXZfaW5mbyAqZGV2aW5mbyxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtMTI5MS1cdFx0XHRnb3RvIGZhaWw7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM6MTI5MjpcdFx0cmV0ID0gYnJjbWZfYXR0YWNoKGRldmluZm8tXHUwMDNlZGV2KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xMjkzLVx0XHRpZiAocmV0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNjo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTAzMQoJCQkJCQkJb3V0cHV0OiA1MgoJCQkJCQkJdGhvdWdodHM6IDEwMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFVTQiBQcm9iZSBQaGFzZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIGBicmNtZl91c2JfcHJvYmVfcGhhc2UyYCBmdW5jdGlvbiwgYW5kIGl0JiMzOTtzIGNhbGxlZCBieSBgYnJjbWZfYXR0YWNoYCwgd2hpY2ggbWFrZXMgc2Vuc2UuIEkgc2VlIHRoYXQgYGJyY21mX3VzYl9wcm9iZV9waGFzZTJgIGl0c2VsZiBpcyBpbnZva2VkIGFzIGEgY2FsbGJhY2sgZnJvbSBgYnJjbWZfZndfZ2V0X2Zpcm13YXJlc2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBob3cgZG9lcyB0aGlzIGNhbGxiYWNrIGhhbmRsZSBlcnJvciBjb25kaXRpb25zPyBTcGVjaWZpY2FsbHksIHdoYXQgaGFwcGVucyBpZiBgYnJjbWZfZndfZ2V0X2Zpcm13YXJlc2AgZmFpbHMgdG8gZmluZCB0aGUgbmVjZXNzYXJ5IGZpcm13YXJlIGFuZCByZXR1cm5zIGFuIGVycm9yIHRocm91Z2ggdGhpcyBjYWxsYmFjaz8gSSBuZWVkIHRvIGRpZyBpbnRvIGBicmNtZl91c2JfcHJvYmVfcGhhc2UyYCB0byBjb25maXJtIHRoYXQgaXQgZ3JhY2VmdWxseSBoYW5kbGVzIHRoZSBlcnJvciBjb2RlIGFuZCB0YWtlcyB0aGUgYXBwcm9wcmlhdGUgYWN0aW9uLiBJdCYjMzk7cyBhIGNyaXRpY2FsIHBhdGgsIGFuZCBJIG5lZWQgdG8gZW5zdXJlIHJvYnVzdCBlcnJvciBtYW5hZ2VtZW50IGluIHRoaXMgc2VxdWVuY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA2OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JyY21mX3VzYl9wcm9iZV9waGFzZTImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYz0xMTY1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnJjbWZfYnVzX29wcyBicmNtZl91c2JfYnVzX29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtMTE3NS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYzoxMTc2OnN0YXRpYyB2b2lkIGJyY21mX3VzYl9wcm9iZV9waGFzZTIoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgcmV0LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTExNzctXHRcdFx0XHQgICBzdHJ1Y3QgYnJjbWZfZndfcmVxdWVzdCAqZndyZXEpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jPTEyNDQ9c3RhdGljIGludCBicmNtZl91c2JfcHJvYmVfY2Ioc3RydWN0IGJyY21mX3VzYmRldl9pbmZvICpkZXZpbmZvLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xMzA4LVx0LyogcmVxdWVzdCBmaXJtd2FyZSBoZXJlICovXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM6MTMwOTpcdHJldCA9IGJyY21mX2Z3X2dldF9maXJtd2FyZXMoZGV2LCBmd3JlcSwgYnJjbWZfdXNiX3Byb2JlX3BoYXNlMik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtMTMxMC1cdGlmIChyZXQpIHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM9MTUxND1zdGF0aWMgaW50IGJyY21mX3VzYl9yZXNldF9yZXN1bWUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTE1MjYtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM6MTUyNzpcdHJldCA9IGJyY21mX2Z3X2dldF9maXJtd2FyZXMoXHUwMDI2dXNiLVx1MDAzZWRldiwgZndyZXEsIGJyY21mX3VzYl9wcm9iZV9waGFzZTIpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTE1MjgtXHRpZiAocmV0IFx1MDAzYyAwKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNjo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTk1MwoJCQkJCQkJb3V0cHV0OiA1NAoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIGBicmNtZl91c2JfcHJvYmVfcGhhc2UyYC4gSSYjMzk7bSBnb2luZyB0byBhcHByb2FjaCB0aGlzIHdpdGggdGhlIGFzc3VtcHRpb24gdGhhdCBJIHVuZGVyc3RhbmQgdGhlIGJyb2FkZXIgZHJpdmVyIGFyY2hpdGVjdHVyZSBhbHJlYWR5LCBzbyBJIGNhbiBmb2N1cyBvbiB0aGUgc3BlY2lmaWNzIG9mIHRoaXMgcGhhc2UuIE15IGluaXRpYWwgcXVlc3Rpb24gaXM6IHdoYXQgaXMgdGhlICpzcGVjaWZpYyogcm9sZSB0aGlzIGZ1bmN0aW9uIHBsYXlzIHdpdGhpbiB0aGUgVVNCIHByb2JlIHNlcXVlbmNlPyBJcyBpdCBoYW5kbGluZyBkZXZpY2Utc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24sIHJlc291cmNlIGFsbG9jYXRpb24sIG9yIGlzIGl0IG1vcmUgYWJvdXQgZmlybXdhcmUgbG9hZGluZyBvciBpbnRlcmZhY2UgY29uZmlndXJhdGlvbj8gVW5kZXJzdGFuZGluZyBpdHMgcGxhY2UgaW4gdGhlIGdyYW5kIHNjaGVtZSBpcyBrZXkgdG8gY29tcHJlaGVuZGluZyBpdHMgbG9naWMuCgpJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgaW5wdXQgcGFyYW1ldGVycy4gV2hhdCBhcmUgdGhleSwgYW5kIHdoYXQgaW5mb3JtYXRpb24gZG8gdGhleSBwcm92aWRlPyBCYXNlZCBvbiB0aGUgZnVuY3Rpb24gbmFtZSwgSSYjMzk7ZCBleHBlY3QgaW5mb3JtYXRpb24gcmVsZXZhbnQgdG8gdGhlIFVTQiBkZXZpY2UgaXRzZWxmIGFuZCBsaWtlbHkgc29tZSBjb250ZXh0IGFib3V0IHRoZSBob3N0IGRyaXZlci4gSSYjMzk7bGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIHBhc3NlZCBpbi4gQXJlIHRoZXJlIGFueSBwb2ludGVycyB0byBzdHJ1Y3R1cmVzIEkgcmVjb2duaXplIGZyb20gdGhlIGJyb2FkZXIgYnJjbWYgZHJpdmVyIGNvZGU/IFRoYXQgd2lsbCBpbW1lZGlhdGVseSBoZWxwIG9yaWVudCBtZS4KCk5vdywgSSYjMzk7bGwgc3RhcnQgdHJhY2luZyB0aGUgZXhlY3V0aW9uIGZsb3cuIEkmIzM5O20gZ29pbmcgdG8gbG9vayBmb3IgYW55IG9idmlvdXMgY29udHJvbCBmbG93IHN0YXRlbWVudHMg4oCTIGBpZmAgc3RhdGVtZW50cywgYHN3aXRjaGAgc3RhdGVtZW50cywgbG9vcHMg4oCTIHRoYXQgZ292ZXJuIGl0cyBiZWhhdmlvci4gQXJlIHRoZXJlIGNvbmRpdGlvbmFsIGNoZWNrcyBiYXNlZCBvbiBkZXZpY2UgaWRlbnRpZmllcnMsIFVTQiBjb25maWd1cmF0aW9uIGRlc2NyaXB0b3JzLCBvciBkcml2ZXIgZmxhZ3M/IEkmIzM5O2xsIGJlIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGFueSBlcnJvciBoYW5kbGluZy4gV2hhdCBoYXBwZW5zIGlmIHRoaW5ncyBnbyB3cm9uZz8gQXJlIHRoZXJlIGF0dGVtcHRzIHRvIHJldHJ5LCBvciBkb2VzIGl0IHRyaWdnZXIgYSBkZXZpY2UgcmVzZXQ/IFRoYXTigJlzIGFsd2F5cyBhIGtleSBwb2ludCB0byB1bmRlcnN0YW5kLgoKTmV4dCwgSSBuZWVkIHRvIHNlZSB3aGF0IHJlc291cmNlcyBhcmUgYmVpbmcgYWNjZXNzZWQgb3IgbW9kaWZpZWQuIElzIGl0IGludGVyYWN0aW5nIHdpdGggdGhlIFVTQiBidXMgZGlyZWN0bHkgdGhyb3VnaCBsaWJ1c2IgY2FsbHMsIG9yIGlzIGl0IHVzaW5nIHNvbWUgaGlnaGVyLWxldmVsIGFic3RyYWN0aW9uIHByb3ZpZGVkIGJ5IHRoZSBrZXJuZWw/IEFyZSB0aGVyZSBtZW1vcnkgYWxsb2NhdGlvbnMsIGludGVycnVwdCByZWdpc3RyYXRpb25zLCBvciBoYXJkd2FyZSByZWdpc3RlcnMgYmVpbmcgbWFuaXB1bGF0ZWQ/IEhvdyBhcmUgdGhlc2UgcmVzb3VyY2VzIG1hbmFnZWQ/IEkgZXhwZWN0IHRvIHNlZSB0aGUgc3RhbmRhcmQgbG9ja2luZyBwYXJhZGlnbXMgYW5kIG1lbW9yeSBtYW5hZ2VtZW50IGFzIHJlcXVpcmVkIGJ5IHRoZSBrZXJuZWwuCgpGaW5hbGx5LCBJJiMzOTtsbCBsb29rIGZvciBhbnkgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgZnVuY3Rpb25zLiBEb2VzIHRoaXMgZnVuY3Rpb24gY2FsbCBvdXQgdG8gb3RoZXIgYGJyY21mYCByb3V0aW5lcywgb3IgZXZlbiB0byB0aGUgVVNCIHN0YWNrPyBVbmRlcnN0YW5kaW5nIHRoZSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgc3RhY2sgd2lsbCBiZSBpbXBvcnRhbnQsIGFzIHdpbGwgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSwgYW5kIGhvdyBpdHMgcmV0dXJuIHZhbHVlcyBhcmUgaGFuZGxlZCBieSBpdHMgY2FsbGVyLiBGcm9tIHRoZXNlIG9ic2VydmF0aW9ucywgSSBzaG91bGQgYmUgYWJsZSB0byBkZWR1Y2UgdGhlIGNvcmUgcHVycG9zZSBvZiBgYnJjbWZfdXNiX3Byb2JlX3BoYXNlMmAgd2l0aGluIHRoZSBicm9hZGVyIGJyY21mIGRyaXZlciBhcmNoaXRlY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA2OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTE3NiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMTc2Olx0c3RhdGljIHZvaWQgYnJjbWZfdXNiX3Byb2JlX3BoYXNlMihzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCByZXQsXG4xMTc3Olx0XHRcdFx0XHQgICBzdHJ1Y3QgYnJjbWZfZndfcmVxdWVzdCAqZndyZXEpXG4xMTc4Olx0e1xuMTE3OTpcdFx0c3RydWN0IGJyY21mX2J1cyAqYnVzID0gZGV2X2dldF9kcnZkYXRhKGRldik7XG4xMTgwOlx0XHRzdHJ1Y3QgYnJjbWZfdXNiZGV2X2luZm8gKmRldmluZm8gPSBidXMtXHUwMDNlYnVzX3ByaXYudXNiLVx1MDAzZWRldmluZm87XG4xMTgxOlx0XHRjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3O1xuMTE4MjpcdFxuMTE4MzpcdFx0aWYgKHJldClcbjExODQ6XHRcdFx0Z290byBlcnJvcjtcbjExODU6XHRcbjExODY6XHRcdGJyY21mX2RiZyhVU0IsIFwmIzM0O1N0YXJ0IGZ3IGRvd25sb2FkaW5nXFxuXCYjMzQ7KTtcbjExODc6XHRcbjExODg6XHRcdGZ3ID0gZndyZXEtXHUwMDNlaXRlbXNbQlJDTUZfVVNCX0ZXX0NPREVdLmJpbmFyeTtcbjExODk6XHRcdGtmcmVlKGZ3cmVxKTtcbjExOTA6XHRcbjExOTE6XHRcdHJldCA9IGNoZWNrX2ZpbGUoZnctXHUwMDNlZGF0YSk7XG4xMTkyOlx0XHRpZiAocmV0IFx1MDAzYyAwKSB7XG4xMTkzOlx0XHRcdGJyY21mX2VycihcJiMzNDtpbnZhbGlkIGZpcm13YXJlXFxuXCYjMzQ7KTtcbjExOTQ6XHRcdFx0cmVsZWFzZV9maXJtd2FyZShmdyk7XG4xMTk1Olx0XHRcdGdvdG8gZXJyb3I7XG4xMTk2Olx0XHR9XG4xMTk3Olx0XG4xMTk4Olx0XHRkZXZpbmZvLVx1MDAzZWltYWdlID0gZnctXHUwMDNlZGF0YTtcbjExOTk6XHRcdGRldmluZm8tXHUwMDNlaW1hZ2VfbGVuID0gZnctXHUwMDNlc2l6ZTtcbjEyMDA6XHRcbjEyMDE6XHRcdHJldCA9IGJyY21mX3VzYl9md19kb3dubG9hZChkZXZpbmZvKTtcbjEyMDI6XHRcdHJlbGVhc2VfZmlybXdhcmUoZncpO1xuMTIwMzpcdFx0aWYgKHJldClcbjEyMDQ6XHRcdFx0Z290byBlcnJvcjtcbjEyMDU6XHRcbjEyMDY6XHRcdHJldCA9IGJyY21mX2FsbG9jKGRldmluZm8tXHUwMDNlZGV2LCBkZXZpbmZvLVx1MDAzZXNldHRpbmdzKTtcbjEyMDc6XHRcdGlmIChyZXQpXG4xMjA4Olx0XHRcdGdvdG8gZXJyb3I7XG4xMjA5Olx0XG4xMjEwOlx0XHQvKiBBdHRhY2ggdG8gdGhlIGNvbW1vbiBkcml2ZXIgaW50ZXJmYWNlICovXG4xMjExOlx0XHRyZXQgPSBicmNtZl9hdHRhY2goZGV2aW5mby1cdTAwM2VkZXYpO1xuMTIxMjpcdFx0aWYgKHJldClcbjEyMTM6XHRcdFx0Z290byBlcnJvcjtcbjEyMTQ6XHRcbjEyMTU6XHRcdGNvbXBsZXRlKFx1MDAyNmRldmluZm8tXHUwMDNlZGV2X2luaXRfZG9uZSk7XG4xMjE2Olx0XHRyZXR1cm47XG4xMjE3Olx0ZXJyb3I6XG4xMjE4Olx0XHRicmNtZl9kYmcoVFJBQ0UsIFwmIzM0O2ZhaWxlZDogZGV2PSVzLCBlcnI9JWRcXG5cJiMzNDssIGRldl9uYW1lKGRldiksIHJldCk7XG4xMjE5Olx0XHRjb21wbGV0ZShcdTAwMjZkZXZpbmZvLVx1MDAzZWRldl9pbml0X2RvbmUpO1xuMTIyMDpcdFx0ZGV2aWNlX3JlbGVhc2VfZHJpdmVyKGRldik7XG4xMjIxOlx0fVxuMTIyMjpcdFxuMTIyMzpcdHN0YXRpYyBzdHJ1Y3QgYnJjbWZfZndfcmVxdWVzdCAqXG4xMjI0Olx0YnJjbWZfdXNiX3ByZXBhcmVfZndfcmVxdWVzdChzdHJ1Y3QgYnJjbWZfdXNiZGV2X2luZm8gKmRldmluZm8pXG4xMjI1Olx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNjo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzIzNAoJCQkJCQkJb3V0cHV0OiA1MAoJCQkJCQkJdGhvdWdodHM6IDE5MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEZpcm13YXJlIERlcGVuZGVuY3kgaW4gdGhlIEJyb2FkY29tIFVTQiBEcml2ZXIqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgQnJvYWRjb20gVVNCIGRyaXZlciBpbml0aWFsaXphdGlvbiwgYW5kIGl0JiMzOTtzIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIGJ1dCB0aGVyZSYjMzk7cyBhIGNydWNpYWwgZGVwZW5kZW5jeSBvbiB0aGUgZmlybXdhcmUuICBJZiBgcmV0YCBpc24mIzM5O3QgemVybyDigJMgbWVhbmluZyB0aGUgZmlybXdhcmUgaXNuJiMzOTt0IGZvdW5kIGluaXRpYWxseSDigJMgd2UganVtcCB0byB0aGUgYGVycm9yYCBsYWJlbCBhbmQgaW1tZWRpYXRlbHkgY2FsbCBgZGV2aWNlX3JlbGVhc2VfZHJpdmVyKGRldilgLiAgVGhhdCYjMzk7cyBhIHByZXR0eSBzdHJvbmcgaW5kaWNhdG9yIHRoYXQgZmlybXdhcmUgaXMgKmFic29sdXRlbHkqIHJlcXVpcmVkIGZvciB0aGUgZGV2aWNlIHRvIGV2ZW4gYXR0YWNoIGFuZCwgY3JpdGljYWxseSwgcmVnaXN0ZXIgdGhlIFdpLUZpIFBIWSAoYHdpcGh5YCkuICBBIHF1aWNrIGNoZWNrIGNvbmZpcm1zIHRoYXQgYHN5emthbGxlcmAgKmNhbiogaGFuZGxlIHByb3ZpZGluZyB0aGUgZmlybXdhcmUuIEl0IGhhcyB0aGF0IGNvdmVyZWQsIGVpdGhlciB0aHJvdWdoIHRoZSBgQ09ORklHX0ZXX0xPQURFUl9VU0VSX0hFTFBFUmAgY29uZmlndXJhdGlvbiBvcHRpb24sIG9yIHNpbXBseSBieSBwdXR0aW5nIHRoZSBmaXJtd2FyZSBpbiB0aGUgcm9vdCBmaWxlc3lzdGVtLgoKQnV0IGhvbGQgb24sIHRoZXJlJiMzOTtzIGBicmNtZl91c2JfZndfZG93bmxvYWRgLiBUaGF0IGZ1bmN0aW9uJiMzOTtzIGpvYiBpcyBleHBsaWNpdGx5IHRvIGRvd25sb2FkIHRoZSBmaXJtd2FyZSAqdG8qIHRoZSBVU0IgZGV2aWNlIGl0c2VsZi4gSWYgYHN5emthbGxlcmAgaXMgZW11bGF0aW5nIHRoaXMgVVNCIGRldmljZSAobGlrZWx5IHZpYSBgdmhjaWApLCB0aGVuIGl0JiMzOTtzIGdvaW5nIHRvIGludGVyY2VwdCB0aG9zZSBmaXJtd2FyZSBkb3dubG9hZCBjb21tYW5kcy4gU28sIGBzeXprYWxsZXJgIHNob3VsZCBiZSBhYmxlIHRvIGFja25vd2xlZGdlIHRoZW0sIGRvd25sb2FkIHRoZSBmaXJtd2FyZSwgYW5kIHRoZW4gYGJyY21mX2F0dGFjaGAgaXMgY2FsbGVkLiBTbywgdGhlIHF1ZXN0aW9uIHJlbWFpbnM6IGlzIGBicmNtZl9hdHRhY2hgIGludGVyYWN0aW5nIHdpdGggdGhlIGhhcmR3YXJlIHdoaWNoIGNvdWxkIGNhdXNlIGl0IHRvIGZhaWwsIGlmIHRoZSBlbXVsYXRlZCBkZXZpY2UgZG9lcyBub3QgY29ycmVjdGx5IHJlc3BvbmQ/IE5vdywgbGV0JiMzOTtzIGRpdmUgaW50byBgYnJjbWZfYXR0YWNoYCBhbmQgc2VlIGlmIHRoZXJlIGFyZSBhbnkgc3VidGxlIGhhcmR3YXJlIGludGVyYWN0aW9ucyB0aGF0IHdlIG5lZWQgdG8gYWNjb3VudCBmb3IgaW4gdGhlIGVtdWxhdGlvbiBwcm9jZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNjo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticmNtZl9hdHRhY2gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmM9MTMzMD1pbnQgYnJjbWZfYWxsb2Moc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgYnJjbWZfbXBfZGV2aWNlICpzZXR0aW5ncylcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jLTEzNTgtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jOjEzNTk6aW50IGJyY21mX2F0dGFjaChzdHJ1Y3QgZGV2aWNlICpkZXYpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jLTEzNjAte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmM9MTQ0Nj12b2lkIGJyY21mX2Z3X2NyYXNoZWQoc3RydWN0IGRldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmMtMTQ1MC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmM6MTQ1MTpcdC8qIE1heSBmaXJlIGJlZm9yZSBicmNtZl9hdHRhY2goKSB3aXJlcyB1cCBkcnZyLCBvciBhZnRlciByZW1vdmFsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jLTE0NTItXHQgKiBoYXMgY2xlYXJlZCBpdDsgZ3VhcmQgdGhlIGRlcmVmcyBiZWxvdyAoYW5kIHRoZSBhcm1pbmcgZ2F0ZSBpblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNjo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODE4MQoJCQkJCQkJb3V0cHV0OiA1NAoJCQkJCQkJdGhvdWdodHM6IDExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGEgc2Vhc29uZWQgcHJvZmVzc2lvbmFsIGluIHRoZSBmaWVsZCwgc3RhcnRpbmcgd2l0aCB0aGUgYm9sZGVkIGhlYWRlcjoKCioqRGl2aW5nIGludG8gYGJyY21mX2F0dGFjaGAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBUaGUgdGFyZ2V0IGhlcmUgaXMgYGJyY21mX2F0dGFjaGAuIEkmIzM5O20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgd2hhdCB0byBleHBlY3QsIGJ1dCBsZXQmIzM5O3Mgc2VlIGhvdyB3ZWxsIGl0IG1hcHMgdG8gbXkgbWVudGFsIG1vZGVsLiBVc3VhbGx5IGluIHRoZXNlIHNvcnRzIG9mIGRyaXZlcnMsIHRoaXMgaXMgdGhlIHBpdm90YWwgZnVuY3Rpb27igJQgdGhlIGdhdGV3YXkuIEl0JiMzOTtzIHRoZSBwb2ludCB3aGVyZSBhIG5ldyBkZXZpY2UgaW5zdGFuY2UgZ2V0cyBpbnRlZ3JhdGVkIGludG8gdGhlIHN5c3RlbS4gSeKAmW0gdGhpbmtpbmcgaW5pdGlhbGl6YXRpb24sIHJlc291cmNlIGFsbG9jYXRpb24sIGFuZCBiaW5kaW5nIHRvIHRoZSByZWxldmFudCBrZXJuZWwgc3Vic3lzdGVtcyBhcmUgYWxsIGxpa2VseSBjYW5kaWRhdGVzIGZvciB0aGlzIGZ1bmN0aW9uJiMzOTtzIHJlc3BvbnNpYmlsaXRpZXMuIFRoaW5ncyBsaWtlIGhhcmR3YXJlIGlkZW50aWZpY2F0aW9uLCBzZXR0aW5nIHVwIERNQSBjaGFubmVscywgZXN0YWJsaXNoaW5nIGludGVycnVwdCBoYW5kbGVycy4uLiBJJiMzOTttIHJlYWxseSBjdXJpb3VzIHRvIHNlZSBob3cgdGhlIEJyb2FkY29tIGRyaXZlciBtYW5hZ2VzIGl0cyBkZXZpY2UgY29udGV4dCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBmaXJtd2FyZS4gSXMgdGhlcmUgYSBzZXBhcmF0ZSBmaXJtd2FyZSBsb2FkIHN0YWdlPyBIb3cgZG9lcyBpdCBoYW5kbGUgcG90ZW50aWFsIGVycm9ycyBkdXJpbmcgYXR0YWNobWVudD8gQXJlIHRoZXJlIGFueSBjbGV2ZXIgdHJpY2tzIHRvIG9wdGltaXplIHRoZSBwcm9jZXNzLCBtYXliZSBzcGVjaWZpYyB0byB0aGVpciBjaGlwc2V0cz8gSSBrbm93IHRoZXNlIGRyaXZlcnMgY2FuIGdldCBjb252b2x1dGVkIHF1aWNrbHksIHNvIEkmIzM5O2xsIGJlIGtlZXBpbmcgYW4gZXllIG91dCBmb3IgYW55IHBhcnRpY3VsYXJseSBpbnRlcmVzdGluZyBvciB1bmNvbnZlbnRpb25hbCBhcHByb2FjaGVzLiBUaW1lIHRvIGRpZyBpbiEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDY6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTM1OSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMzU5Olx0aW50IGJyY21mX2F0dGFjaChzdHJ1Y3QgZGV2aWNlICpkZXYpXG4xMzYwOlx0e1xuMTM2MTpcdFx0c3RydWN0IGJyY21mX2J1cyAqYnVzX2lmID0gZGV2X2dldF9kcnZkYXRhKGRldik7XG4xMzYyOlx0XHRzdHJ1Y3QgYnJjbWZfcHViICpkcnZyID0gYnVzX2lmLVx1MDAzZWRydnI7XG4xMzYzOlx0XHRpbnQgcmV0ID0gMDtcbjEzNjQ6XHRcdGludCBpO1xuMTM2NTpcdFxuMTM2NjpcdFx0YnJjbWZfZGJnKFRSQUNFLCBcJiMzNDtFbnRlclxcblwmIzM0Oyk7XG4xMzY3Olx0XG4xMzY4Olx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKGRydnItXHUwMDNlaWYyYnNzKTsgaSYjNDM7JiM0MzspXG4xMzY5Olx0XHRcdGRydnItXHUwMDNlaWYyYnNzW2ldID0gQlJDTUZfQlNTSURYX0lOVkFMSUQ7XG4xMzcwOlx0XG4xMzcxOlx0XHRtdXRleF9pbml0KFx1MDAyNmRydnItXHUwMDNlcHJvdG9fYmxvY2spO1xuMTM3MjpcdFxuMTM3MzpcdFx0LyogTGluayB0byBidXMgbW9kdWxlICovXG4xMzc0Olx0XHRkcnZyLVx1MDAzZWhkcmxlbiA9IDA7XG4xMzc1Olx0XG4xMzc2Olx0XHRyZXQgPSBicmNtZl9md3ZpZF9hdHRhY2goZHJ2cik7XG4xMzc3Olx0XHRpZiAocmV0ICE9IDApIHtcbjEzNzg6XHRcdFx0YnBoeV9lcnIoZHJ2ciwgXCYjMzQ7YnJjbWZfZnd2aWRfYXR0YWNoIGZhaWxlZFxcblwmIzM0Oyk7XG4xMzc5Olx0XHRcdGdvdG8gZmFpbDtcbjEzODA6XHRcdH1cbjEzODE6XHRcbjEzODI6XHRcdC8qIEF0dGFjaCBhbmQgbGluayBpbiB0aGUgcHJvdG9jb2wgKi9cbjEzODM6XHRcdHJldCA9IGJyY21mX3Byb3RvX2F0dGFjaChkcnZyKTtcbjEzODQ6XHRcdGlmIChyZXQgIT0gMCkge1xuMTM4NTpcdFx0XHRicGh5X2VycihkcnZyLCBcJiMzNDticmNtZl9wcm90X2F0dGFjaCBmYWlsZWRcXG5cJiMzNDspO1xuMTM4NjpcdFx0XHRnb3RvIGZhaWw7XG4xMzg3Olx0XHR9XG4xMzg4Olx0XG4xMzg5Olx0XHQvKiBhdHRhY2ggZmlybXdhcmUgZXZlbnQgaGFuZGxlciAqL1xuMTM5MDpcdFx0cmV0ID0gYnJjbWZfZndlaF9hdHRhY2goZHJ2cik7XG4xMzkxOlx0XHRpZiAocmV0ICE9IDApIHtcbjEzOTI6XHRcdFx0YnBoeV9lcnIoZHJ2ciwgXCYjMzQ7YnJjbWZfZndlaF9hdHRhY2ggZmFpbGVkXFxuXCYjMzQ7KTtcbjEzOTM6XHRcdFx0Z290byBmYWlsO1xuMTM5NDpcdFx0fVxuMTM5NTpcdFxuMTM5NjpcdFx0LyogQXR0YWNoIHRvIGV2ZW50cyBpbXBvcnRhbnQgZm9yIGNvcmUgY29kZSAqL1xuMTM5NzpcdFx0YnJjbWZfZndlaF9yZWdpc3RlcihkcnZyLCBCUkNNRl9FX1BTTV9XQVRDSERPRyxcbjEzOTg6XHRcdFx0XHQgICAgYnJjbWZfcHNtX3dhdGNoZG9nX25vdGlmeSk7XG4xMzk5Olx0XG4xNDAwOlx0XHRicmNtZl9md3ZpZF9nZXRfY2ZnODAyMTFfb3BzKGRydnIpO1xuMTQwMTpcdFxuMTQwMjpcdFx0cmV0ID0gYnJjbWZfYnVzX3N0YXJ0ZWQoZHJ2ciwgZHJ2ci1cdTAwM2VvcHMpO1xuMTQwMzpcdFx0aWYgKHJldCAhPSAwKSB7XG4xNDA0Olx0XHRcdGJwaHlfZXJyKGRydnIsIFwmIzM0O2RvbmdsZSBpcyBub3QgcmVzcG9uZGluZzogZXJyPSVkXFxuXCYjMzQ7LCByZXQpO1xuMTQwNTpcdFx0XHRnb3RvIGZhaWw7XG4xNDA2Olx0XHR9XG4xNDA3Olx0XG4xNDA4Olx0XHRyZXR1cm4gMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDY6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkyODIKCQkJCQkJCW91dHB1dDogNTQKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIHRoZSBgYnJjbWZfYnVzX3N0YXJ0ZWRgIEZ1bmN0aW9uKioKCk9rYXksIHNvIHRoZSBgYnJjbWZfYnVzX3N0YXJ0ZWRgIGZ1bmN0aW9uIGhhcyBiZWVuIGNhbGxlZC4gVGhhdCYjMzk7cyBteSBzdGFydGluZyBwb2ludC4gTm93LCB3aGF0JiMzOTtzIGl0cyBwdXJwb3NlPyBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBjb2RlIGRlZmluaXRpb24gYW5kIHNlZSB3aGF0IGl0IGFjdHVhbGx5IGRvZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBmdW5jdGlvbiBpcyBkb2luZyBhdCB0aGUgdmVyeSBiZWdpbm5pbmcgb2YgdGhlIGJ1cyBpbml0aWFsaXphdGlvbiBwcm9jZXNzLCBhcyB0aGF0JiMzOTtzIG15IGFyZWEgb2YgZXhwZXJ0aXNlLiBJJiMzOTtsbCByZWFkIHRoZSBjb2RlIG1ldGljdWxvdXNseSwgZm9jdXNpbmcgb24gdGhlIGtleSBvcGVyYXRpb25zLCBkYXRhIHN0cnVjdHVyZXMgYmVpbmcgbWFuaXB1bGF0ZWQsIGFuZCBhbnkgZXJyb3IgaGFuZGxpbmcuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IHRoZSBkcml2ZXImIzM5O3MgaW50ZXJhY3Rpb24gd2l0aCB0aGUgaGFyZHdhcmUsIGVzcGVjaWFsbHkgaWYgdGhpcyBpcyBhIGRyaXZlciBJIGtub3cgd2VsbC4gVGhpcyBpcyBteSBjaGFuY2UgdG8gZ2FpbiBhIGhpZ2gtbGV2ZWwgdW5kZXJzdGFuZGluZyBvZiB3aGF0IGhhcHBlbnMgYXQgdGhlIHZlcnkgc3RhcnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA2OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyMjksCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTIyOTpcdHN0YXRpYyBpbnQgYnJjbWZfYnVzX3N0YXJ0ZWQoc3RydWN0IGJyY21mX3B1YiAqZHJ2ciwgc3RydWN0IGNmZzgwMjExX29wcyAqb3BzKVxuMTIzMDpcdHtcbjEyMzE6XHRcdGludCByZXQgPSAtMTtcbjEyMzI6XHRcdHN0cnVjdCBicmNtZl9idXMgKmJ1c19pZiA9IGRydnItXHUwMDNlYnVzX2lmO1xuMTIzMzpcdFx0c3RydWN0IGJyY21mX2lmICppZnA7XG4xMjM0Olx0XHRzdHJ1Y3QgYnJjbWZfaWYgKnAycF9pZnA7XG4xMjM1Olx0XG4xMjM2Olx0XHRicmNtZl9kYmcoVFJBQ0UsIFwmIzM0O1xcblwmIzM0Oyk7XG4xMjM3Olx0XG4xMjM4Olx0XHQvKiBhZGQgcHJpbWFyeSBuZXR3b3JraW5nIGludGVyZmFjZSAqL1xuMTIzOTpcdFx0aWZwID0gYnJjbWZfYWRkX2lmKGRydnIsIDAsIDAsIGZhbHNlLCBcJiMzNDt3bGFuJWRcJiMzNDssXG4xMjQwOlx0XHRcdFx0ICAgaXNfdmFsaWRfZXRoZXJfYWRkcihkcnZyLVx1MDAzZXNldHRpbmdzLVx1MDAzZW1hYykgPyBkcnZyLVx1MDAzZXNldHRpbmdzLVx1MDAzZW1hYyA6IE5VTEwpO1xuMTI0MTpcdFx0aWYgKElTX0VSUihpZnApKVxuMTI0MjpcdFx0XHRyZXR1cm4gUFRSX0VSUihpZnApO1xuMTI0MzpcdFxuMTI0NDpcdFx0cDJwX2lmcCA9IE5VTEw7XG4xMjQ1Olx0XG4xMjQ2Olx0XHQvKiBzaWduYWwgYnVzIHJlYWR5ICovXG4xMjQ3Olx0XHRicmNtZl9idXNfY2hhbmdlX3N0YXRlKGJ1c19pZiwgQlJDTUZfQlVTX1VQKTtcbjEyNDg6XHRcbjEyNDk6XHRcdC8qIGRvIGJ1cyBzcGVjaWZpYyBwcmVpbml0IGhlcmUgKi9cbjEyNTA6XHRcdHJldCA9IGJyY21mX2J1c19wcmVpbml0KGJ1c19pZik7XG4xMjUxOlx0XHRpZiAocmV0IFx1MDAzYyAwKVxuMTI1MjpcdFx0XHRnb3RvIGZhaWw7XG4xMjUzOlx0XG4xMjU0Olx0XHQvKiBCdXMgaXMgcmVhZHksIGRvIGFueSBpbml0aWFsaXphdGlvbiAqL1xuMTI1NTpcdFx0cmV0ID0gYnJjbWZfY19wcmVpbml0X2RjbWRzKGlmcCk7XG4xMjU2Olx0XHRpZiAocmV0IFx1MDAzYyAwKVxuMTI1NzpcdFx0XHRnb3RvIGZhaWw7XG4xMjU4Olx0XG4xMjU5Olx0XHRicmNtZl9mZWF0X2F0dGFjaChkcnZyKTtcbjEyNjA6XHRcbjEyNjE6XHRcdHJldCA9IGJyY21mX3Byb3RvX2luaXRfZG9uZShkcnZyKTtcbjEyNjI6XHRcdGlmIChyZXQgXHUwMDNjIDApXG4xMjYzOlx0XHRcdGdvdG8gZmFpbDtcbjEyNjQ6XHRcbjEyNjU6XHRcdGJyY21mX3Byb3RvX2FkZF9pZihkcnZyLCBpZnApO1xuMTI2NjpcdFxuMTI2NzpcdFx0ZHJ2ci1cdTAwM2Vjb25maWcgPSBicmNtZl9jZmc4MDIxMV9hdHRhY2goZHJ2ciwgb3BzLFxuMTI2ODpcdFx0XHRcdFx0XHQgICAgIGRydnItXHUwMDNlc2V0dGluZ3MtXHUwMDNlcDJwX2VuYWJsZSk7XG4xMjY5Olx0XHRpZiAoZHJ2ci1cdTAwM2Vjb25maWcgPT0gTlVMTCkge1xuMTI3MDpcdFx0XHRyZXQgPSAtRU5PTUVNO1xuMTI3MTpcdFx0XHRnb3RvIGZhaWw7XG4xMjcyOlx0XHR9XG4xMjczOlx0XG4xMjc0Olx0XHRyZXQgPSBicmNtZl9uZXRfYXR0YWNoKGlmcCwgZmFsc2UpO1xuMTI3NTpcdFxuMTI3NjpcdFx0aWYgKCghcmV0KSBcdTAwMjZcdTAwMjYgKGRydnItXHUwMDNlc2V0dGluZ3MtXHUwMDNlcDJwX2VuYWJsZSkpIHtcbjEyNzc6XHRcdFx0cDJwX2lmcCA9IGRydnItXHUwMDNlaWZsaXN0WzFdO1xuMTI3ODpcdFx0XHRpZiAocDJwX2lmcClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDY6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAzNDUKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiA0ODYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBCcm9hZGNvbSBXaUZpIERyaXZlciBJbml0aWFsaXphdGlvbiBhbmQgRnV6emluZyBMYW5kc2NhcGUqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGlzIGBicmNtZm1hY2AgZHJpdmVyIGFuZCBob3cgc3l6a2FsbGVyIGludGVyYWN0cyB3aXRoIGl0LiBGaXJzdCwgSSBuZWVkIHRvIHJlbWVtYmVyIHRoYXQgYGJyY21mX2J1c19wcmVpbml0YCBhbmQgYGJyY21mX2NfcHJlaW5pdF9kY21kc2AgaGFuZGxlIHRoZSBpbml0aWFsIGhhcmR3YXJlIGludGVyYWN0aW9ucy4gSWYgdGhlc2UgZmFpbCwgYGJyY21mX2NmZzgwMjExX2F0dGFjaGAgaXNuJiMzOTt0IGV2ZW4gY2FsbGVkLiBUaGUgcXVlc3Rpb24gaXMsIGNhbiBzeXprYWxsZXImIzM5O3MgdmhjaSBtb2NrIHRoZXNlIFVTQiByZXNwb25zZXMgdG8gdHJpZ2dlciB0aGVzZSBmdW5jdGlvbnM/IFllcywgaXQgY2FuLCBwb3RlbnRpYWxseSwgc2luY2UgdmhjaSBpcyBkZXNpZ25lZCB0byBkbyBleGFjdGx5IHRoYXQuIFRoZSBjYXRjaCBpcyB0aGF0IGBicmNtZm1hY2AgaXMgYSBjb21wbGV4IEZ1bGxNQUMgZHJpdmVyIHdoaWNoIG1lYW5zIGl0IHRhbGtzIGV4dGVuc2l2ZWx5IHdpdGggdGhlIGZpcm13YXJlIGFuZCBleHBlY3RzIHNwZWNpZmljIHJlc3BvbnNlcy4gVGhpcyBtYWtlcyBtZSB3b25kZXIgYWJvdXQgaXRzIHByYWN0aWNhbCBmdXp6YWJpbGl0eS4KCkJ1dCB0aGVuLCBJIHJlY2FsbCBzZWVpbmcgdGhhdCBzeXprYWxsZXIgKmhhcyogZm91bmQgYnVncyBpbiBgYnJjbWZtYWNgIHZpYSBVU0IhIEFoLCB3YWl0LCB0aGUgY29tbWl0IG1lc3NhZ2U6ICYjMzQ7c3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3JiMzNDsuIFRoYXQmIzM5O3MgYSBzdHJvbmcgaW5kaWNhdGlvbiBzeXprYWxsZXIgaGFzIGZvdW5kIGEgcmVhbCBidWcgb3IgaXMgYWN0aXZlbHkgZnV6emluZyB0aGlzIGRyaXZlci4KCkxldCYjMzk7cyBkaXZlIGludG8gdGhlIHBhdGNoIGl0c2VsZi4gSXQgbW9kaWZpZXMgYGJyY21mX2N5d19leHRlcm5hbF9hdXRoYCBpbiBgZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmNgLiBUaGUgY29kZSBjaGFuZ2UgaXMgaW5pdGlhbGl6aW5nIGBhdXRoX3N0YXR1c2Agc3RydWN0IGFuZCBhZGRpbmcgUE1LSUQgc3VwcG9ydCB3aGljaCBzdWdnZXN0cyBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZSB3YXMgZml4ZWQuIFRoZSBwYXRjaCBpbml0aWFsaXplcyBhIHN0cnVjdCBhbmQgY29waWVzIG1lbW9yeSwgc28gaXQmIzM5O3MgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYXMgZXhwZWN0ZWQuCgpJIGhhdmUgdG8gd29uZGVyLCBpcyB0aGlzIHJlYWNoYWJsZT8gSXQgbG9va3MgbGlrZSBpdCwgYmVjYXVzZSBpdCYjMzk7cyB0cmlnZ2VyZWQgdmlhIHRoZSBgTkw4MDIxMV9DTURfRVhURVJOQUxfQVVUSGAgbmV0bGluayBjb21tYW5kIHRvIHRoZSBgYnJjbWZtYWNgIGRyaXZlci4gSG1tLCBob2xkIG9uLi4uIHRoZSBwYXRjaCBpcyBpbiBgYnJjbWZfY3l3X2V4dGVybmFsX2F1dGhgLiBOb3cgSSBoYXZlIHRvIGNoZWNrIGlmIGBCUkNNRk1BQ19VU0JgIGlzIHN1ZmZpY2llbnQuIElzIGBjeXdgIGJ1aWx0IGJ5IGRlZmF1bHQ/CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA2OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2N5dyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvTWFrZWZpbGU9NTU9b2JqLW0gJiM0Mzs9IHdjYy9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9NYWtlZmlsZTo1NjpvYmotbSAmIzQzOz0gY3l3L1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL01ha2VmaWxlLTU3LW9iai1tICYjNDM7PSBiY2EvXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL01ha2VmaWxlPTU5PWJyY21mbWFjLSQoQ09ORklHX0JSQ01GTUFDKSAmIzQzOz0gd2NjL2NvcmUub1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL01ha2VmaWxlOjYwOmJyY21mbWFjLSQoQ09ORklHX0JSQ01GTUFDKSAmIzQzOz0gY3l3L2NvcmUub1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL01ha2VmaWxlLTYxLWJyY21mbWFjLSQoQ09ORklHX0JSQ01GTUFDKSAmIzQzOz0gYmNhL2NvcmUub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNjo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTU4MwoJCQkJCQkJb3V0cHV0OiA0OQoJCQkJCQkJdGhvdWdodHM6IDEwMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBMaW5lIG9mIFJlYXNvbmluZyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCBgY3l3L2NvcmUub2AgKmRvZXMqIGdldCBidWlsdCB3aGVuIGBDT05GSUdfQlJDTUZNQUNgIGlzIHNldC4gVGhhdCBtZWFucyBpZiBJIG5lZWQgdGhhdCBtb2R1bGUsIEkmIzM5O20gZGVmaW5pdGVseSBnb2luZyB0byByZXF1aXJlIGBCUkNNRk1BQ2AuIEkmIzM5O2xsIGFsc28gd2FudCBgQlJDTUZNQUNfVVNCYCBzaW5jZSB0aGF0JiMzOTtzIGxpa2VseSB0aGUgc3BlY2lmaWMgVVNCIHZhcmlhbnQgSSYjMzk7bSBkZWFsaW5nIHdpdGguIE5vdywgb2YgY291cnNlLCBJIGNhbiYjMzk7dCBmb3JnZXQgYWJvdXQgYENGRzgwMjExYCBhbmQgYE1BQzgwMjExYCwgZXZlbiB0aG91Z2ggYGJyY21mbWFjYCBpcyBhIEZ1bGxNQUMgaW1wbGVtZW50YXRpb247IGl0IHN0aWxsIHJlbGllcyBvbiBgQ0ZHODAyMTFgIGFzIGl0cyBjb25maWd1cmF0aW9uIGludGVyZmFjZS4gVGltZSB0byBkaWcgYSBiaXQgZGVlcGVyIGFuZCBzZWUgd2hhdCBkZXBlbmRlbmNpZXMgYEJSQ01GTUFDYCBpdHNlbGYgaGFzLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nIGNydWNpYWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA2OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCUkNNRk1BQyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnOjE6Y29uZmlnIEJSQ01GTUFDXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZy0yLVx0dHJpc3RhdGUgXCYjMzQ7QnJvYWRjb20gRnVsbE1BQyBXTEFOIGRyaXZlclwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnLTEwLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWc6MTE6Y29uZmlnIEJSQ01GTUFDX1BST1RPX0JDRENcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnLTEyLVx0Ym9vbFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWctMTMtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZzoxNDpjb25maWcgQlJDTUZNQUNfUFJPVE9fTVNHQlVGXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZy0xNS1cdGJvb2xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnLTE2LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWc6MTc6Y29uZmlnIEJSQ01GTUFDX1NESU9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnLTE4LVx0Ym9vbCBcJiMzNDtTRElPIGJ1cyBpbnRlcmZhY2Ugc3VwcG9ydCBmb3IgRnVsbE1BQyBkcml2ZXJcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZy0yOC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnOjI5OmNvbmZpZyBCUkNNRk1BQ19VU0JcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnLTMwLVx0Ym9vbCBcJiMzNDtVU0IgYnVzIGludGVyZmFjZSBzdXBwb3J0IGZvciBGdWxsTUFDIGRyaXZlclwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnLTM5LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWc6NDA6Y29uZmlnIEJSQ01GTUFDX1BDSUVcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnLTQxLVx0Ym9vbCBcJiMzNDtQQ0lFIGJ1cyBpbnRlcmZhY2Ugc3VwcG9ydCBmb3IgRnVsbE1BQyBkcml2ZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDY6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI1MjgKCQkJCQkJCW91dHB1dDogNTAKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGl0OgoKKipFeGFtaW5pbmcgdGhlIEJSQ01GTUFDIEtjb25maWcgZm9yIERlcGVuZGVuY2llcyoqCgpSaWdodCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBmb3IgdGhpcyBzcGVjaWZpYyBCcm9hZGNvbSBXaS1GaSBkcml2ZXIsIHRoZSBgYnJjbWZtYWNgIG1vZHVsZSwgd2l0aGluIHRoZSBicm9hZGVyIGtlcm5lbCBjb25maWd1cmF0aW9uLiBUaGUgYEtjb25maWdgIGZpbGUgaXMgdGhlIHN0YW5kYXJkIHBsYWNlIHRvIHN0YXJ0LiBJdCBjb250YWlucyBhbGwgdGhlIG5lY2Vzc2FyeSBkZXBlbmRlbmN5IGRlZmluaXRpb25zLCBzbyBJIGNhbiBzZWUgd2hhdCBvdGhlciBrZXJuZWwgZmVhdHVyZXMgb3IgbW9kdWxlcyAqbmVlZCogdG8gYmUgZW5hYmxlZCwgb3IgKmNhbiogYmUgZW5hYmxlZCBhbG9uZ3NpZGUgdGhpcyBkcml2ZXIuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBwYXJzZSB0aGF0IGBLY29uZmlnYCB0byBidWlsZCBhIG1lbnRhbCBtYXAgb2YgaXRzIHN1cHBvcnQsIHVuZGVyc3RhbmQgaXRzIGNvbmRpdGlvbnMsIGFuZCBjb25zaWRlciBhbnkgcG90ZW50aWFsIGNvbmZsaWN0cyBvciBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRoaXMgZHJpdmVyIGZpdHMgaW50byB0aGUgbGFyZ2VyIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA2OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHRjb25maWcgQlJDTUZNQUNcbiAgIDI6XHRcdHRyaXN0YXRlIFwmIzM0O0Jyb2FkY29tIEZ1bGxNQUMgV0xBTiBkcml2ZXJcJiMzNDtcbiAgIDM6XHRcdGRlcGVuZHMgb24gQ0ZHODAyMTFcbiAgIDQ6XHRcdHNlbGVjdCBCUkNNVVRJTFxuICAgNTpcdFx0aGVscFxuICAgNjpcdFx0ICBUaGlzIG1vZHVsZSBhZGRzIHN1cHBvcnQgZm9yIHdpcmVsZXNzIGFkYXB0ZXJzIGJhc2VkIG9uIEJyb2FkY29tXG4gICA3Olx0XHQgIEZ1bGxNQUMgY2hpcHNldHMuIEl0IGhhcyB0byB3b3JrIHdpdGggYXQgbGVhc3Qgb25lIG9mIHRoZSBidXNcbiAgIDg6XHRcdCAgaW50ZXJmYWNlIHN1cHBvcnQuIElmIHlvdSBjaG9vc2UgdG8gYnVpbGQgYSBtb2R1bGUsIGl0JiMzOTtsbCBiZSBjYWxsZWRcbiAgIDk6XHRcdCAgYnJjbWZtYWMua28uXG4gIDEwOlx0XG4gIDExOlx0Y29uZmlnIEJSQ01GTUFDX1BST1RPX0JDRENcbiAgMTI6XHRcdGJvb2xcbiAgMTM6XHRcbiAgMTQ6XHRjb25maWcgQlJDTUZNQUNfUFJPVE9fTVNHQlVGXG4gIDE1Olx0XHRib29sXG4gIDE2Olx0XG4gIDE3Olx0Y29uZmlnIEJSQ01GTUFDX1NESU9cbiAgMTg6XHRcdGJvb2wgXCYjMzQ7U0RJTyBidXMgaW50ZXJmYWNlIHN1cHBvcnQgZm9yIEZ1bGxNQUMgZHJpdmVyXCYjMzQ7XG4gIDE5Olx0XHRkZXBlbmRzIG9uIChNTUMgPSB5IHx8IE1NQyA9IEJSQ01GTUFDKVxuICAyMDpcdFx0ZGVwZW5kcyBvbiBCUkNNRk1BQ1xuICAyMTpcdFx0c2VsZWN0IEJSQ01GTUFDX1BST1RPX0JDRENcbiAgMjI6XHRcdHNlbGVjdCBGV19MT0FERVJcbiAgMjM6XHRcdGRlZmF1bHQgeVxuICAyNDpcdFx0aGVscFxuICAyNTpcdFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBTRElPIGJ1cyBpbnRlcmZhY2Ugc3VwcG9ydCBmb3IgQnJvYWRjb21cbiAgMjY6XHRcdCAgSUVFRTgwMi4xMW4gZW1iZWRkZWQgRnVsbE1BQyBXTEFOIGRyaXZlci4gU2F5IFkgaWYgeW91IHdhbnQgdG9cbiAgMjc6XHRcdCAgdXNlIHRoZSBkcml2ZXIgZm9yIGEgU0RJTyB3aXJlbGVzcyBjYXJkLlxuICAyODpcdFxuICAyOTpcdGNvbmZpZyBCUkNNRk1BQ19VU0JcbiAgMzA6XHRcdGJvb2wgXCYjMzQ7VVNCIGJ1cyBpbnRlcmZhY2Ugc3VwcG9ydCBmb3IgRnVsbE1BQyBkcml2ZXJcJiMzNDtcbiAgMzE6XHRcdGRlcGVuZHMgb24gKFVTQiA9IHkgfHwgVVNCID0gQlJDTUZNQUMpXG4gIDMyOlx0XHRkZXBlbmRzIG9uIEJSQ01GTUFDXG4gIDMzOlx0XHRzZWxlY3QgQlJDTUZNQUNfUFJPVE9fQkNEQ1xuICAzNDpcdFx0c2VsZWN0IEZXX0xPQURFUlxuICAzNTpcdFx0aGVscFxuICAzNjpcdFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBVU0IgYnVzIGludGVyZmFjZSBzdXBwb3J0IGZvciBCcm9hZGNvbVxuICAzNzpcdFx0ICBJRUVFODAyLjExbiBlbWJlZGRlZCBGdWxsTUFDIFdMQU4gZHJpdmVyLiBTYXkgWSBpZiB5b3Ugd2FudCB0b1xuICAzODpcdFx0ICB1c2UgdGhlIGRyaXZlciBmb3IgYW4gVVNCIHdpcmVsZXNzIGNhcmQuXG4gIDM5Olx0XG4gIDQwOlx0Y29uZmlnIEJSQ01GTUFDX1BDSUVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDY6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMzNDUKCQkJCQkJCW91dHB1dDogNDgKCQkJCQkJCXRob3VnaHRzOiA1MDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIEJSQ01GTUFDIERyaXZlciBhbmQgUG90ZW50aWFsIEV4cGxvaXRhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgYEJSQ01GTUFDYCBzaXR1YXRpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBCUkNNRk1BQ2AgcmVsaWVzIGhlYXZpbHkgb24gYENGRzgwMjExYCwgYW5kIGBCUkNNRk1BQ19VU0JgIGJ1aWxkcyBvbiB0aGF0IGFuZCB0aGUgYFVTQmAgc3Vic3lzdGVtIGFzIHdlbGwuIFRoZXJlZm9yZSwgdG8gZW5zdXJlIHByb3BlciBmdW5jdGlvbmFsaXR5LCBJIHNob3VsZCBlbmFibGUgYEJSQ01GTUFDYCwgYEJSQ01GTUFDX1VTQmAsIGBDRkc4MDIxMWAsIGFuZCBgVVNCYCBpbiB0aGUgY29uZmlndXJhdGlvbi4gQWxzbywgdGhlIGZpcm13YXJlIGxvYWRpbmcgbWVjaGFuaXNtIGBGV19MT0FERVJgIGlzIHNlbGVjdGVkLCBvZiBjb3Vyc2UuCgpJIGJyaWVmbHkgY29uc2lkZXJlZCBpZiBhbnkgb3RoZXIgY29uZmlncyB3ZXJlIGNyaXRpY2FsLCBidXQgSSBkb24mIzM5O3Qgc2VlIGFueSBvdGhlciBpbW1lZGlhdGVseS4gV2hpbGUgYE1BQzgwMjExYCBpc24mIzM5O3Qgc3RyaWN0bHkgKnJlcXVpcmVkKiwgaXQmIzM5O3MgdXN1YWxseSBlbmFibGVkIHdpdGggYEJSQ01GTUFDYCwgc28gaXQmIzM5O3MgcHJvYmFibHkgYmVzdCBwcmFjdGljZSB0byBoYXZlIHRoYXQgb24uCgpNeSBhdHRlbnRpb24gaXMgbm93IHNxdWFyZWx5IG9uIGBicmNtZl9jeXdfZXh0ZXJuYWxfYXV0aGAuIEl0IHNlZW1zIHRoZSBwYXRjaCBpcyBjZW50ZXJlZCBvbiB0aGF0IHNwZWNpZmljIGZ1bmN0aW9uLiBJJiMzOTttIHdvbmRlcmluZyBpZiB0aGlzIGlzIHRoZSAqb25seSogZW50cnkgcG9pbnQgdGhlIHBhdGNoIG1vZGlmaWVzLiBZZXMsIGxvb2tzIGxpa2UgaXQmIzM5O3MgdGhlIG9ubHkgb25lLgoKTm93IEkgbmVlZCB0byBjb25maXJtIGlmIGBicmNtZl9jeXdfZXh0ZXJuYWxfYXV0aGAgaXMgYWN0dWFsbHkgcmVhY2hhYmxlLiBUaGFua2Z1bGx5LCBpdCYjMzk7cyByZWdpc3RlcmVkIHRocm91Z2ggdGhlIGRyaXZlciYjMzk7cyBvcGVyYXRpb25zIHN0cnVjdHVyZSBhcyBgZHJ2ci0mZ3Q7b3BzLSZndDtleHRlcm5hbF9hdXRoID0gYnJjbWZfY3l3X2V4dGVybmFsX2F1dGg7YCwgc28gdGhhdCYjMzk7cyBnb29kLiBGdXJ0aGVyLCB0aGUgYGNmZzgwMjExX29wc2AgYWxzbyBoYXMgYW4gYGV4dGVybmFsX2F1dGhgIHBvaW50ZXIuIFRoYXQmIzM5O3MgZXhjZWxsZW50ISBUaGUgZnVuY3Rpb24gaXMgcmVhY2hlZCB3aGVuIHRoZSB1c2VyIHNwYWNlIHNlbmRzIHRoZSBgTkw4MDIxMV9DTURfRVhURVJOQUxfQVVUSGAgY29tbWFuZCwgYW5kIGBjZmc4MDIxMWAgY2FsbHMgYHJkZXYtJmd0O29wcy0mZ3Q7ZXh0ZXJuYWxfYXV0aGAuIFRoaXMgbWVhbnMgdGhhdCBpdCAqaXMqIGluZGVlZCByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBuZXRsaW5rLiBQZXJmZWN0LgoKVGhlIG9ubHkgcHJlcmVxdWlzaXRlIGlzIHRoYXQgdGhlIGBicmNtZm1hY2AgZGV2aWNlIG11c3QgYmUgcHJvYmVkIGFuZCByZWdpc3RlcmVkIHdpdGggYGNmZzgwMjExYC4gVGhhdCBzaG91bGQgYmUgbm8gcHJvYmxlbS4gU3l6a2FsbGVyIGlzIGFibGUgdG8gZW11bGF0ZSBVU0IgZGV2aWNlcywgc28gaXQgY2FuIHRyaWdnZXIgdGhlIHByb2JlIG9mIGBicmNtZm1hY2AgdmlhIFVTQi4gSG93ZXZlciwgdGhlIGBicmNtZm1hY2AgZHJpdmVyLCBpbiB0dXJuLCBuZWVkcyBmaXJtd2FyZSB0byBjb21wbGV0ZSBpdHMgcHJvYmUgYW5kIHJlZ2lzdHJhdGlvbi4KCk5vdyB0aGUgbWlsbGlvbi1kb2xsYXIgcXVlc3Rpb246IERvZXMgc3l6a2FsbGVyIHByb3ZpZGUgZmlybXdhcmUgZm9yIGBicmNtZm1hY2A/IEl0ICptaWdodCouIEkga25vdyB0aGF0IFN5emthbGxlciYjMzk7cyBgc3l6LWV4ZWN1dG9yYCBjYW4gaW50ZXJjZXB0IGZpcm13YXJlIHJlcXVlc3RzIGlmIGBDT05GSUdfRldfTE9BREVSX1VTRVJfSEVMUEVSYCBpcyBlbmFibGVkLCBhbmQgY291bGQgcHJvdmlkZSBkdW1teSBmaXJtd2FyZS4gQnV0LCBoZXJlJiMzOTtzIHRoZSBjYXRjaCAtIGBicmNtZm1hY2AgdmFsaWRhdGVzIHRoZSBmaXJtd2FyZS4KCmBgYGMKCXJldCA9IGNoZWNrX2ZpbGUoZnctJmd0O2RhdGEpOwoJaWYgKHJldCAmbHQ7IDApIHsKCQlicmNtZl9lcnIoJiMzNDtpbnZhbGlkIGZpcm13YXJlXG4mIzM0Oyk7CgkJcmVsZWFzZV9maXJtd2FyZShmdyk7CgkJZ290byBlcnJvcjsKCX0KYGBgCgpTbyBJIG5lZWQgdG8gY2hlY2sgd2hhdCBgY2hlY2tfZmlsZWAgYWN0dWFsbHkgKmRvZXMqLiBUaGF0JiMzOTtzIHRoZSBuZXh0IGNyaXRpY2FsIHN0ZXAgdG8gc2VlIGlmIHRoaXMgaXMgZXhwbG9pdGFibGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA2OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NoZWNrX2ZpbGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jPTEwNjI9c3RhdGljIHZvaWQgYnJjbWZfdXNiX2RldGFjaChzdHJ1Y3QgYnJjbWZfdXNiZGV2X2luZm8gKmRldmluZm8pXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTEwODAtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM6MTA4MTpzdGF0aWMgaW50IGNoZWNrX2ZpbGUoY29uc3QgdTggKmhlYWRlcnMpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtMTA4Mi17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jPTExNzY9c3RhdGljIHZvaWQgYnJjbWZfdXNiX3Byb2JlX3BoYXNlMihzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCByZXQsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTExOTAtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM6MTE5MTpcdHJldCA9IGNoZWNrX2ZpbGUoZnctXHUwMDNlZGF0YSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtMTE5Mi1cdGlmIChyZXQgXHUwMDNjIDApIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDY6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ5MTUKCQkJCQkJCW91dHB1dDogNTQKCQkJCQkJCXRob3VnaHRzOiA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqQW5hbHl6aW5nIHRoZSBgY2hlY2tfZmlsZWAgRnVuY3Rpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBjaGVja19maWxlYCBmdW5jdGlvbi4gTXkgZmlyc3QgaW5zdGluY3QsIGFzIGFsd2F5cywgaXMgdG8gdW5kZXJzdGFuZCBpdHMgc2NvcGUuIElzIHRoaXMgYSB1dGlsaXR5IGZ1bmN0aW9uIHdpdGhpbiBhIGxhcmdlciBtb2R1bGUsIG9yIGlzIGl0IGEgc3RhbmRhbG9uZSBzY3JpcHQ/IFRoZSBjb250ZXh0IGlzIGNydWNpYWwgZm9yIGFudGljaXBhdGluZyBpdHMgcHVycG9zZS4gSSYjMzk7bSBpbW1lZGlhdGVseSB0aGlua2luZyBhYm91dCBwb3RlbnRpYWwgZWRnZSBjYXNlcy4gV2hhdCBraW5kIG9mIGZpbGUgdHlwZXMgYXJlIHdlIGRlYWxpbmcgd2l0aD8gSXMgdGhlcmUgYSBuZWVkIGZvciBhbnkga2luZCBvZiBmaWxlIHNpemUgY2hlY2tpbmc/IEFyZSB0aGVyZSBhbnkgc2VjdXJpdHkgY29uc2lkZXJhdGlvbnMgSSBzaG91bGQgYmVhciBpbiBtaW5kPyBDb3VsZCB0aGlzIGJlIHZ1bG5lcmFibGUgdG8gYSBwYXRoIHRyYXZlcnNhbCBhdHRhY2ssIG9yIHNvbWV0aGluZyBzaW1pbGFyPyBJJiMzOTtsbCBwcm9iYWJseSBzdGFydCBzY2FubmluZyBmb3IgY29tbW9uIHZ1bG5lcmFiaWxpdGllcy4gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgYXJlYXMgZm9yIGJ1ZmZlciBvdmVyZmxvd3M/IElzIGl0IGhhbmRsaW5nIGZpbGUgcGVybWlzc2lvbnMgcHJvcGVybHk/IFdoYXQga2luZCBvZiBlcnJvcnMgZG9lcyBpdCBoYW5kbGU/IEFyZSB0aGUgZXJyb3IgbWVzc2FnZXMgY2xlYXIgYW5kIGhlbHBmdWw/IEkgbmVlZCB0byBsb29rIGZvciBhbnkgaGlkZGVuIGRlcGVuZGVuY2llcy4gSXMgaXQgdXNpbmcgYW55IGV4dGVybmFsIGxpYnJhcmllcz8gSWYgc28sIGFyZSB0aGV5IGJlaW5nIGhhbmRsZWQgY29ycmVjdGx5PyBBbmQgZmluYWxseSwgb2YgY291cnNlLCBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgZm9yIGFueSBjb25jdXJyZW5jeSBpc3N1ZXMgaWYgSSYjMzk7bSBhc3N1bWluZyBpdCBtaWdodCBiZSB1c2VkIGluIGEgbXVsdGl0aHJlYWRlZCBlbnZpcm9ubWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDY6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDgxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwODE6XHRzdGF0aWMgaW50IGNoZWNrX2ZpbGUoY29uc3QgdTggKmhlYWRlcnMpXG4xMDgyOlx0e1xuMTA4MzpcdFx0c3RydWN0IHRyeF9oZWFkZXJfbGUgKnRyeDtcbjEwODQ6XHRcdGludCBhY3R1YWxfbGVuID0gLTE7XG4xMDg1Olx0XG4xMDg2Olx0XHRicmNtZl9kYmcoVVNCLCBcJiMzNDtFbnRlclxcblwmIzM0Oyk7XG4xMDg3Olx0XHQvKiBFeHRyYWN0IHRyeCBoZWFkZXIgKi9cbjEwODg6XHRcdHRyeCA9IChzdHJ1Y3QgdHJ4X2hlYWRlcl9sZSAqKSBoZWFkZXJzO1xuMTA4OTpcdFx0aWYgKHRyeC1cdTAwM2VtYWdpYyAhPSBjcHVfdG9fbGUzMihUUlhfTUFHSUMpKVxuMTA5MDpcdFx0XHRyZXR1cm4gLTE7XG4xMDkxOlx0XG4xMDkyOlx0XHRoZWFkZXJzICYjNDM7PSBzaXplb2Yoc3RydWN0IHRyeF9oZWFkZXJfbGUpO1xuMTA5MzpcdFxuMTA5NDpcdFx0aWYgKGxlMzJfdG9fY3B1KHRyeC1cdTAwM2VmbGFnX3ZlcnNpb24pIFx1MDAyNiBUUlhfVU5DT01QX0lNQUdFKSB7XG4xMDk1Olx0XHRcdGFjdHVhbF9sZW4gPSBsZTMyX3RvX2NwdSh0cngtXHUwMDNlb2Zmc2V0c1tUUlhfT0ZGU0VUU19ETEZXTEVOX0lEWF0pO1xuMTA5NjpcdFx0XHRyZXR1cm4gYWN0dWFsX2xlbiAmIzQzOyBzaXplb2Yoc3RydWN0IHRyeF9oZWFkZXJfbGUpO1xuMTA5NzpcdFx0fVxuMTA5ODpcdFx0cmV0dXJuIC0xO1xuMTA5OTpcdH1cbjExMDA6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDY6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU1NDgKCQkJCQkJCW91dHB1dDogNTEKCQkJCQkJCXRob3VnaHRzOiA2NjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTeXprYWxsZXIgRmlybXdhcmUgRnV6emluZyBTY2VuYXJpbyoqCgpPa2F5LCBzbyBJJiMzOTttIHRyeWluZyB0byBmaWd1cmUgb3V0IGhvdyBzeXprYWxsZXIgaXMgaGl0dGluZyB0aGlzIGBicmNtZl9jeXdfZXh0ZXJuYWxfYXV0aGAgY29kZSBwYXRoLiBUaGUgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgaXQmIzM5O3MgYSBmaXJtd2FyZSBidWcsIHNvIHRoZSBmaXJtd2FyZSBuZWVkcyB0byBzdGFydCB3aXRoIGBUUlhfTUFHSUNgIGFuZCB0aGUgYFRSWF9VTkNPTVBfSU1BR0VgIGZsYWcuIEJ1dCBzeXprYWxsZXImIzM5O3MgZmlybXdhcmUgZnV6emluZyBzZXR1cCwgb3IgcG90ZW50aWFsbHkgaXRzIGhlbHBlcnMsIG1pZ2h0IG5vdCByZWNvZ25pemUgdGhpcyBtYWdpYyBzaWduYXR1cmUuIEkga25vdyBzeXprYWxsZXIgaGFzIHNvbWUgaW1hZ2UgbW91bnRpbmcgY2FwYWJpbGl0aWVzIChgc3l6X21vdW50X2ltYWdlYCksIGJ1dCBpdCBzZWVtcyB0byBwcm92aWRlIG1vc3RseSByYW5kb20gb3IgZW1wdHkgZGF0YSBmb3IgZmlybXdhcmUsIHdoaWNoIG1ha2VzIGhpdHRpbmcgdGhlIG1hZ2ljIGhlYWRlciBpbmNyZWRpYmx5IHVubGlrZWx5LgoKSG93ZXZlciwgSSBzZWUgYSBjb21taXQgbWVzc2FnZSAmIzM0O3N5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldyYjMzQ7LiBUaGlzIHN1Z2dlc3RzIHN5emthbGxlciBmb3VuZCBhIGJ1ZyBoZXJlLCBvciBpcyBhY3RpdmVseSBmdXp6aW5nIHRoaXMgYXJlYS4gSXQmIzM5O3MgdXNpbmcgYHN5el9nZW5ldGxpbmtfZ2V0X2ZhbWlseWAgYW5kIGBzeXpfODAyMTFfLi4uYCBzeXNjYWxscywgd2hpY2ggcG9pbnRzIHRvd2FyZHMgdGhlIHBvdGVudGlhbCBvZiBoaXR0aW5nIHRoaXMgZnJvbSBhIGtlcm5lbCBzcGFjZSwgb3IgYSB1c2VyIHNwYWNlIHRoYXQgY2FuIGFjY2VzcyB0aGlzIGNvZGUgdmlhIHRob3NlIGludGVyZmFjZXMuCgpJIGNvbnNpZGVyZWQgYG1hYzgwMjExX2h3c2ltYCwgYnV0IHF1aWNrbHkgZGlzbWlzc2VkIGl0IGJlY2F1c2UgaXQmIzM5O3MgYSBkaWZmZXJlbnQgZHJpdmVyLiBJcyBgYnJjbWZfY3l3X2V4dGVybmFsX2F1dGhgIHJlYWNoYWJsZSB0aHJvdWdoIG90aGVyIGRyaXZlcnM/IE5vLCBpdCYjMzk7cyBmaXJtbHkgd2l0aGluIGBicmNtZm1hY2AuCgpOb3csIHRoZSBxdWVzdGlvbiBpcyBob3cgc3l6a2FsbGVyIGlzIHByb3ZpZGluZyB0aGUgZmlybXdhcmUuIERvZXMgaXQgaGF2ZSBhIHNwZWNpZmljIGRlc2NyaXB0aW9uIGZvciBgYnJjbWZtYWNgIGZpcm13YXJlLCBvciBpcyB0aGlzIHBhdGNoIGJlaW5nIHRlc3RlZCBhZnRlciBhbm90aGVyIGZ1enplciBmb3VuZCB0aGUgYnVnPwoKVGhlIGNvbW1pdCBtZXNzYWdlICYjMzQ7c3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3JiMzNDsgaXMgc3RhbmRhcmQgZm9yIHN5emJvdCYjMzk7cyBwYXRjaCB0ZXN0aW5nLCBtZWFuaW5nIGEgdXNlciByZXF1ZXN0ZWQgdGhhdCBzeXpib3QgdGVzdCBhIHBhdGNoIHRvIHJlcHJvZHVjZSBhIGJ1ZyByZXBvcnRlZCBieSBzeXpib3QuIElmIHN5emJvdCBmb3VuZCBhIGJ1ZyBpbiB0aGlzIGZ1bmN0aW9uLCBpdCAqY2FuKiByZWFjaCBpdC4KCkhvdz8gQWhhISBTeXprYWxsZXImIzM5O3Mgcm9vdCBmaWxlIHN5c3RlbSBpbWFnZXMgKGxpa2UgYGJ1bGxzZXllLmltZ2ApIHVzdWFsbHkgY29udGFpbiB0aGUgYGxpbnV4LWZpcm13YXJlYCBwYWNrYWdlLiBUaGlzIGluY2x1ZGVzIHRoZSBCcm9hZGNvbSBmaXJtd2FyZXMgKGBicmNtZm1hYyotc2Rpby5iaW5gLCBgYnJjbWZtYWMqLXVzYi5iaW5gLCBldGMuKS4gSWYgdGhlIGZpcm13YXJlIGlzIHByZXNlbnQgaW4gdGhlIHJvb3RmcywgYHJlcXVlc3RfZmlybXdhcmVgIHdpbGwgc3VjY2VlZCEgQW5kIHN5emthbGxlciBlbXVsYXRlcyBVU0IgZGV2aWNlcywgc28gaXQmIzM5O3MgcHJvYmFibHkgZW11bGF0aW5nIGEgQnJvYWRjb20gVVNCIFdpLUZpIGRvbmdsZS4KCklmIGl0IGVtdWxhdGVzIHRoZSBVU0IgZGV2aWNlLCBpdCByZWNlaXZlcyB0aGUgZmlybXdhcmUgZG93bmxvYWQgY29tbWFuZHMuIElmIHRoZSBmaXJtd2FyZSBpcyByZWFsLCBmcm9tIGBsaW51eC1maXJtd2FyZWAsIGBjaGVja19maWxlYCB3aWxsIHBhc3MgYmVjYXVzZSBpdCYjMzk7cyBhIHZhbGlkIGZpcm13YXJlIGZpbGUuIFRoZW4gYGJyY21mX3VzYl9md19kb3dubG9hZGAgd2lsbCBzZW5kIHRoZSBmaXJtd2FyZSB0byB0aGUgZW11bGF0ZWQgVVNCIGRldmljZS4gVGhlIGVtdWxhdGVkIFVTQiBkZXZpY2UgKHZoY2kpIGp1c3QgbmVlZHMgdG8gYWNjZXB0IHRoZSBVUkJzLiBUaGVuIGBicmNtZl9hdHRhY2hgIGlzIGNhbGxlZC4KClRoZSBrZXkgaXMgYGJyY21mX2J1c19zdGFydGVkYC4gSXQgc2VuZHMgY29tbWFuZHMgdG8gdGhlIGRvbmdsZSAoYGJyY21mX2NfcHJlaW5pdF9kY21kc2ApLiBJZiB0aGUgZW11bGF0ZWQgVVNCIGRldmljZSBkb2VzbiYjMzk7dCByZXNwb25kIGNvcnJlY3RseSwgYGJyY21mX2J1c19zdGFydGVkYCBtaWdodCBmYWlsLiBUaGlzIGlzIHRoZSBsaWtlbHkgYXJlYSBmb3IgYSBjcmFzaCB0byBvY2N1ci4gSSBzaG91bGQgYWxzbyBjaGVjayBgYnJjbWZfaWdub3JlX3Byb2JlX2ZhaWxgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNjo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticmNtZl9pZ25vcmVfcHJvYmVfZmFpbCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvbW1vbi5jPTY4PU1PRFVMRV9QQVJNX0RFU0MoaWFwcCwgXCYjMzQ7RW5hYmxlIHBhcnRpYWwgc3VwcG9ydCBmb3IgdGhlIG9ic29sZXRlZCBJbnRlci1BY2Nlc3MgUG9pbnQgUHJvdG9jb2xcJiMzNDspO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb21tb24uYy03MS0vKiBhbHdheXMgc3VjY2VlZCBicmNtZl9idXNfc3RhcnRlZCgpICovXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29tbW9uLmM6NzI6c3RhdGljIGludCBicmNtZl9pZ25vcmVfcHJvYmVfZmFpbDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb21tb24uYzo3Mzptb2R1bGVfcGFyYW1fbmFtZWQoaWdub3JlX3Byb2JlX2ZhaWwsIGJyY21mX2lnbm9yZV9wcm9iZV9mYWlsLCBpbnQsIDApO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvbW1vbi5jLTc0LU1PRFVMRV9QQVJNX0RFU0MoaWdub3JlX3Byb2JlX2ZhaWwsIFwmIzM0O2Fsd2F5cyBzdWNjZWVkIHByb2JlIGZvciBkZWJ1Z2dpbmdcJiMzNDspO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb21tb24uYz01MTI9c3RydWN0IGJyY21mX21wX2RldmljZSAqYnJjbWZfZ2V0X21vZHVsZV9wYXJhbShzdHJ1Y3QgZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvbW1vbi5jLTUzMy0jaWZkZWYgREVCVUdcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb21tb24uYzo1MzQ6XHRzZXR0aW5ncy1cdTAwM2VpZ25vcmVfcHJvYmVfZmFpbCA9ICEhYnJjbWZfaWdub3JlX3Byb2JlX2ZhaWw7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29tbW9uLmMtNTM1LSNlbmRpZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNjo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzM5MwoJCQkJCQkJb3V0cHV0OiA0NwoJCQkJCQkJdGhvdWdodHM6IDQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgYnJjbWZfaWdub3JlX3Byb2JlX2ZhaWwqKgoKUmlnaHQsICpicmNtZl9pZ25vcmVfcHJvYmVfZmFpbCouIFRoYXQmIzM5O3MgYSBjbGFzc2ljLiBTbywgaXQmIzM5O3MgYSBtb2R1bGUgcGFyYW1ldGVyIHRoYXQgYmFzaWNhbGx5IGZvcmNlcyBgYnJjbWZfYnVzX3N0YXJ0ZWRgIHRvICphbHdheXMqIHJldHVybiBzdWNjZXNzLiBJbnRlcmVzdGluZy4gV29uZGVyIHdoYXQgdGhlIGltcGxpY2F0aW9ucyBhcmUgaW4gcHJhY3RpY2U/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzaWRlLWVmZmVjdHMuCgpNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgdXNhZ2Ugb2YgYGlnbm9yZV9wcm9iZV9mYWlsYC4gV2hlcmUgZG9lcyB0aGF0IHZhbHVlIGFjdHVhbGx5IGdldCB1c2VkPyBMZXQmIzM5O3MgY2hlY2sgdGhlIGNvZGUgYW5kIHNlZSBleGFjdGx5IHdoYXQgaGFwcGVucyB3aGVuIHRoYXQgZmxhZyBpcyBzZXQsIGFuZCBob3cgaXQgaW1wYWN0cyB0aGUgb3ZlcmFsbCBpbml0aWFsaXphdGlvbiBmbG93LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgd2UgYXJlIG1hc2tpbmcgYSBwb3RlbnRpYWwgaGFyZHdhcmUgcHJvYmUgZmFpbHVyZSBhbmQgd2hhdCB0aGUgY29ycmVzcG9uZGluZyB0cmFkZS1vZmZzIGFyZS4gV2hhdCYjMzk7cyB0aGUgY29zdCBvZiB0aGlzPyBBcmUgd2UgaW50cm9kdWNpbmcgcmFjZSBjb25kaXRpb25zLCBvciBtYWtpbmcgaXQgaGFyZGVyIHRvIGRpYWdub3NlIHJlYWwgaGFyZHdhcmUgaXNzdWVzIGRvd24gdGhlIGxpbmU/IFRoaXMgY291bGQgYmUgbWFza2luZyBhIHJlYWwgcHJvYmxlbS4gVGltZSB0byBkaWcgaW4uLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDY6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aWdub3JlX3Byb2JlX2ZhaWwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb21tb24uYz02OD1NT0RVTEVfUEFSTV9ERVNDKGlhcHAsIFwmIzM0O0VuYWJsZSBwYXJ0aWFsIHN1cHBvcnQgZm9yIHRoZSBvYnNvbGV0ZWQgSW50ZXItQWNjZXNzIFBvaW50IFByb3RvY29sXCYjMzQ7KTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29tbW9uLmMtNzEtLyogYWx3YXlzIHN1Y2NlZWQgYnJjbWZfYnVzX3N0YXJ0ZWQoKSAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvbW1vbi5jOjcyOnN0YXRpYyBpbnQgYnJjbWZfaWdub3JlX3Byb2JlX2ZhaWw7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29tbW9uLmM6NzM6bW9kdWxlX3BhcmFtX25hbWVkKGlnbm9yZV9wcm9iZV9mYWlsLCBicmNtZl9pZ25vcmVfcHJvYmVfZmFpbCwgaW50LCAwKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb21tb24uYzo3NDpNT0RVTEVfUEFSTV9ERVNDKGlnbm9yZV9wcm9iZV9mYWlsLCBcJiMzNDthbHdheXMgc3VjY2VlZCBwcm9iZSBmb3IgZGVidWdnaW5nXCYjMzQ7KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb21tb24uYy03NS0jZW5kaWZcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29tbW9uLmM9NTEyPXN0cnVjdCBicmNtZl9tcF9kZXZpY2UgKmJyY21mX2dldF9tb2R1bGVfcGFyYW0oc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb21tb24uYy01MzMtI2lmZGVmIERFQlVHXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29tbW9uLmM6NTM0Olx0c2V0dGluZ3MtXHUwMDNlaWdub3JlX3Byb2JlX2ZhaWwgPSAhIWJyY21mX2lnbm9yZV9wcm9iZV9mYWlsO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvbW1vbi5jLTUzNS0jZW5kaWZcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29tbW9uLmg9MzE9ZXh0ZXJuIHN0cnVjdCBicmNtZl9tcF9nbG9iYWxfdCBicmNtZl9tcF9nbG9iYWw7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvbW1vbi5oLTM5LSAqIEByb2Ftb2ZmOiBGaXJtd2FyZSByb2FtaW5nIG9mZj9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb21tb24uaDo0MDogKiBAaWdub3JlX3Byb2JlX2ZhaWw6IElnbm9yZSBwcm9iZSBmYWlsdXJlLlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvbW1vbi5oLTQxLSAqIEB0cml2aWFsX2Njb2RlX21hcDogQXNzdW1lIGZpcm13YXJlIHVzZXMgSVNPMzE2NiBjb3VudHJ5IGNvZGVzIHdpdGggcmV2IDBcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29tbW9uLmg9NDU9c3RydWN0IGJyY21mX21wX2RldmljZSB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvbW1vbi5oLTUwLVx0Ym9vbFx0XHRpYXBwO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvbW1vbi5oOjUxOlx0Ym9vbFx0XHRpZ25vcmVfcHJvYmVfZmFpbDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb21tb24uaC01Mi1cdGJvb2xcdFx0dHJpdmlhbF9jY29kZV9tYXA7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuYz0xMjI5PXN0YXRpYyBpbnQgYnJjbWZfYnVzX3N0YXJ0ZWQoc3RydWN0IGJyY21mX3B1YiAqZHJ2ciwgc3RydWN0IGNmZzgwMjExX29wcyAqb3BzKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmMtMTMyMy1cdGRydnItXHUwMDNlaWZsaXN0WzFdID0gTlVMTDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmM6MTMyNDpcdGlmIChkcnZyLVx1MDAzZXNldHRpbmdzLVx1MDAzZWlnbm9yZV9wcm9iZV9mYWlsKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuYy0xMzI1LVx0XHRyZXQgPSAwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNjo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODcwNQoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDEwNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEZWJ1Z2dpbmcgYSBRdWlya3kgRHJpdmVyKioKClllcyEgSSYjMzk7dmUgZ290IGl0LiBJZiBgaWdub3JlX3Byb2JlX2ZhaWxgIGlzIGVuYWJsZWQsIGBicmNtZl9idXNfc3RhcnRlZGAgaXMgcHJvZ3JhbW1lZCB0byByZXR1cm4gMCwgZXZlbiB3aGVuIHRoZSBoYXJkd2FyZSBpbnRlcmFjdGlvbnMgYXJlIGZhaWxpbmcuIFRoYXQmIzM5O3MgYSBjbGV2ZXIgaGFjaywgZXhwbGljaXRseSBkZXNpZ25lZCBmb3IgZGVidWdnaW5nIGFuZCBmdXp6aW5nLCB3aGljaCBpcyBwZXJmZWN0IGZvciBteSBuZWVkcy4gVGhlIGdyZWF0IHRoaW5nIGFib3V0IFN5emthbGxlciBpcyB0aGF0IGl0IGFsbG93cyBtZSB0byBtb2RpZnkgdGhlIG1vZHVsZSBwYXJhbWV0ZXJzIGF0IHJ1bnRpbWUsIHdoaWNoIGlzIGNydWNpYWwgZm9yIGNvbnRyb2xsaW5nIHRoaXMgc29ydCBvZiBiZWhhdmlvci4gCgpXYWl0IGEgbWludXRlLCBJIHRoaW5rIGBpZ25vcmVfcHJvYmVfZmFpbGAgaXMgb25seSBhY2Nlc3NpYmxlIGlmIGAjaWZkZWYgREVCVUdgLiBUaGF0JiMzOTtzIG5vdCBpZGVhbCwgYnV0IGl0JiMzOTtzIHVuZGVyc3RhbmRhYmxlLiBPa2F5LCBzbyBpcyBgREVCVUdgIGRlZmluZWQ/IFRpbWUgdG8gY29uc3VsdCB0aGUgc291cmNlIGFuZCBmaW5kIHRoZSBkZWZpbml0aW9uLiBMZXQgbWUgZ28gY2hlY2sgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9NYWtlZmlsZWAgYW5kIHNlZSBpZiB0aGVyZSBhcmUgYW55IGNsdWVzIHRoZXJlLiBMZXQmIzM5O3Mgc2VlLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA2OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7REVCVUcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNjo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTA2OQoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZToKCioqRGl2aW5nIGludG8gdGhlIEJSQ01GbWFjIERlYnVnIENvbmZpZ3VyYXRpb24qKgoKUmlnaHQsIHRpbWUgdG8gdHJvdWJsZXNob290IHRoaXMgd2lyZWxlc3MgaXNzdWUuIE15IGZpcnN0IGluc3RpbmN0LCBnaXZlbiBteSBleHBlcmllbmNlIHdpdGggQnJvYWRjb20mIzM5O3MgV2lGaSBkcml2ZXJzIGFuZCB0aGUgYnJjbWZtYWMgc3Vic3lzdGVtIHNwZWNpZmljYWxseSwgaXMgdG8gY2hlY2sgdGhlIGRlYnVnIHNldHRpbmdzLiBXaGVyZSB3b3VsZCB0aG9zZSBiZSBkZWZpbmVkPyBBaCwgeWVzLCBgZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWdgLiBUaGF0JiMzOTtzIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IGZvciBhbnkgZGVidWdnaW5nIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHRoYXQgZHJpdmVyLiBUaGUgS2NvbmZpZyBmaWxlIGlzIHdoZXJlIGFsbCB0aGUgYnVpbGQtdGltZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBhcmUgZGVmaW5lZCwgc28gaWYgSSBuZWVkIHRvIGVuYWJsZSBzb21lIHZlcmJvc2Ugb3V0cHV0IG9yIHRyYWNpbmcsIHRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7bGwgZmluZCB0aGUgcmVsZXZhbnQgc2V0dGluZ3MsIGxpa2VseSB1bmRlciBhIGBERUJVR2Agb3Igc2ltaWxhciBzeW1ib2wuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBpbiB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDY6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtERUJVRyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDY6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjkzNDgKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC4KCioqSW52ZXN0aWdhdGluZyBhIFBvdGVudGlhbCBEZWZpbml0aW9uIENvbmZsaWN0KioKCkhtbSwgaG9sZCBvbiBhIHNlY29uZC4gSSYjMzk7dmUgZ290IGEgZmVlbGluZyBgREVCVUdgIG1pZ2h0IGJlIGdldHRpbmcgZGVmaW5lZCBjb25kaXRpb25hbGx5IGlmIHRoZSBgQ09ORklHX0JSQ01EQkdgIG9wdGlvbiBpcyBlbmFibGVkIHNvbWV3aGVyZS4gVGhhdCYjMzk7cyBzb21ldGhpbmcgSSBuZWVkIHRvIHZlcmlmeS4gTGV0IG1lIHF1aWNrbHkgY3Jvc3MtcmVmZXJlbmNlIHRoYXQuIFRoZSBtb3N0IGxpa2VseSBwbGFjZSBmb3IgdGhhdCB3b3VsZCBiZSBpbiB0aGUgQnJvYWRjb20gd2lyZWxlc3MgZHJpdmVyIGNvbmZpZ3VyYXRpb24uIFNvLCBJIG5lZWQgdG8gY2hlY2sgdGhlIGBkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvS2NvbmZpZ2AgZmlsZS4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgZGVmaW5pdGl2ZSBhbnN3ZXIuIEkmIzM5O2xsIGdldCB0aGF0IG9wZW4gcmlnaHQgYXdheSBhbmQgY29uZmlybSBpZiBteSBzdXNwaWNpb24gaXMgY29ycmVjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDY6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7QlJDTURCRyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL0tjb25maWc9Mjc9Y29uZmlnIEJSQ01fVFJBQ0lOR1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9LY29uZmlnLTM4LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL0tjb25maWc6Mzk6Y29uZmlnIEJSQ01EQkdcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9LY29uZmlnLTQwLVx0Ym9vbCBcJiMzNDtCcm9hZGNvbSBkcml2ZXIgZGVidWcgZnVuY3Rpb25zXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL01ha2VmaWxlLTgtIyBjb21tb24gZmxhZ3NcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9NYWtlZmlsZTo5OnN1YmRpci1jY2ZsYWdzLSQoQ09ORklHX0JSQ01EQkcpXHQmIzQzOz0gLURERUJVR1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL01ha2VmaWxlLTEwLVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9NYWtlZmlsZT00MT1icmNtZm1hYy0kKENPTkZJR19CUkNNRk1BQ19QQ0lFKSAmIzQzOz0gXFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9NYWtlZmlsZS00Mi1cdFx0cGNpZS5vXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvTWFrZWZpbGU6NDM6YnJjbWZtYWMtJChDT05GSUdfQlJDTURCRykgJiM0Mzs9IFxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvTWFrZWZpbGUtNDQtXHRcdGRlYnVnLm9cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29tbW9uLmM9NDYwPXZvaWQgX19icmNtZl9lcnIoc3RydWN0IGJyY21mX2J1cyAqYnVzLCBjb25zdCBjaGFyICpmdW5jLCBjb25zdCBjaGFyICpmbXQsIC4uLilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29tbW9uLmMtNDc3LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvbW1vbi5jOjQ3ODojaWYgZGVmaW5lZChDT05GSUdfQlJDTV9UUkFDSU5HKSB8fCBkZWZpbmVkKENPTkZJR19CUkNNREJHKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvbW1vbi5jLTQ3OS12b2lkIF9fYnJjbWZfZGJnKHUzMiBsZXZlbCwgY29uc3QgY2hhciAqZnVuYywgY29uc3QgY2hhciAqZm10LCAuLi4pXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2RlYnVnLmg9NDA9dm9pZCBfX2JyY21mX2VycihzdHJ1Y3QgYnJjbWZfYnVzICpidXMsIGNvbnN0IGNoYXIgKmZ1bmMsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZGVidWcuaC00Ni1cdGRvIHtcdFx0XHRcdFx0XHRcdFx0XFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9kZWJ1Zy5oOjQ3Olx0XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfQlJDTURCRykgfHxcdFx0XHRcXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2RlYnVnLmgtNDgtXHRcdCAgICBJU19FTkFCTEVEKENPTkZJR19CUkNNX1RSQUNJTkcpIHx8XHRcdFx0XFxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZGVidWcuaC01NS1cdGRvIHtcdFx0XHRcdFx0XHRcdFx0XFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9kZWJ1Zy5oOjU2Olx0XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfQlJDTURCRykgfHxcdFx0XHRcXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2RlYnVnLmgtNTctXHRcdCAgICBJU19FTkFCTEVEKENPTkZJR19CUkNNX1RSQUNJTkcpIHx8XHRcdFx0XFxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jLTI5LVx0ZG8ge1x0XHRcdFx0XHRcdFx0XHRcXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuYzozMDpcdFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0JSQ01EQkcpIHx8XHRcdFx0XFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmMtMzEtXHRcdCAgICBJU19FTkFCTEVEKENPTkZJR19CUkNNX1RSQUNJTkcpIHx8XHRcdFx0XFxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbXNtYWMvZGVidWcuYz0yMjY9X19icmNtc19mbihjcml0KVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21zbWFjL2RlYnVnLmMtMjI3LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21zbWFjL2RlYnVnLmM6MjI4OiNpZiBkZWZpbmVkKENPTkZJR19CUkNNREJHKSB8fCBkZWZpbmVkKENPTkZJR19CUkNNX1RSQUNJTkcpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbXNtYWMvZGVidWcuYy0yMjktdm9pZCBfX2JyY21zX2RiZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHUzMiBsZXZlbCwgY29uc3QgY2hhciAqZnVuYyxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbXNtYWMvZGVidWcuYy0yMzgtXHR2YWYudmEgPSBcdTAwMjZhcmdzO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21zbWFjL2RlYnVnLmM6MjM5OiNpZmRlZiBDT05GSUdfQlJDTURCR1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21zbWFjL2RlYnVnLmMtMjQwLVx0aWYgKChicmNtX21zZ19sZXZlbCBcdTAwMjYgbGV2ZWwpIFx1MDAyNlx1MDAyNiBuZXRfcmF0ZWxpbWl0KCkpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21zbWFjL2RlYnVnLmg9MzQ9dm9pZCBfX2JyY21zX2NyaXQoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpmbXQsIC4uLik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbXNtYWMvZGVidWcuaC0zNS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9kZWJ1Zy5oOjM2OiNpZiBkZWZpbmVkKENPTkZJR19CUkNNREJHKSB8fCBkZWZpbmVkKENPTkZJR19CUkNNX1RSQUNJTkcpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbXNtYWMvZGVidWcuaC0zNy1fX3ByaW50Zig0LCA1KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9tYWM4MDIxMV9pZi5jPTEwMz1NT0RVTEVfREVWSUNFX1RBQkxFKGJjbWEsIGJyY21zX2NvcmVpZF90YWJsZSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbXNtYWMvbWFjODAyMTFfaWYuYy0xMDQtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbXNtYWMvbWFjODAyMTFfaWYuYzoxMDU6I2lmIGRlZmluZWQoQ09ORklHX0JSQ01EQkcpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbXNtYWMvbWFjODAyMTFfaWYuYy0xMDYtLypcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDY6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzEyMzkKCQkJCQkJCW91dHB1dDogNTQKCQkJCQkJCXRob3VnaHRzOiAxOTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyB0aGUgYGJyY21mbWFjYCBEcml2ZXI6IEEgUHJvbWlzaW5nIEF2ZW51ZSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGBicmNtZm1hY2AgZHJpdmVyLCBhbmQgaXQgbG9va3MgbGlrZSB3ZSYjMzk7dmUgZ290IGEgcG90ZW50aWFsbHkganVpY3kgZnV6emluZyB0YXJnZXQgaGVyZS4gVGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoZSBjb25uZWN0aW9uIGJldHdlZW4gYENPTkZJR19CUkNNREJHYCBhbmQgdGhlIGBERUJVR2AgZmxhZy4gSXQgbWVhbnMsIGlmIGBDT05GSUdfQlJDTURCR2AgaXMgZW5hYmxlZCwgdGhlbiBgYnJjbWZfaWdub3JlX3Byb2JlX2ZhaWxgIGlzIGRlZmluaXRlbHkgZ29pbmcgdG8gYmUgYXZhaWxhYmxlLiBBbmQgdGhhdCYjMzk7cyBrZXkuIFRoaXMgcHJlc2VudHMgYSByZWFsbHkgZWFzeSB3YXkgdG8gZ2V0IFN5emthbGxlciBpbnZvbHZlZCB3aXRoIGZ1enppbmcgYGJyY21mbWFjYCB2aWEgVVNCISBCYXNpY2FsbHksIGxvYWQgdGhlIG1vZHVsZSB3aXRoIGBpZ25vcmVfcHJvYmVfZmFpbD0xYCwgb3Igc2V0IGl0IHRocm91Z2ggc3lzZnMuIFRoYXQmIzM5O3Mgc2ltcGxlIGVub3VnaC4gVGhlbiwganVzdCBmZWVkIGl0IGEgdmFsaWQgZmlybXdhcmUgZmlsZS4gV2UgY2FuIGdyYWIgdGhpcyBmcm9tIHRoZSByb290ZnMsIG9yIFN5emthbGxlciBpdHNlbGYgY2FuIHByb3ZpZGUgaXQsIG5vIHByb2JsZW0uCgpIb2xkIG9uLi4uIEkgbmVlZCB0byBiZSBjYXJlZnVsLiBJZiBgaWdub3JlX3Byb2JlX2ZhaWxgIGlzIHNldCwgYGJyY21mX2J1c19zdGFydGVkYCBpcyBnb2luZyB0byByZXR1cm4gMC4gSG1tLCBva2F5Li4uIGJ1dCBob3cgZG9lcyB0aGF0IGludGVyYWN0IHdpdGggYGJyY21mX2NmZzgwMjExX2F0dGFjaGA/IEkgdGhpbmsuLi4geWVzLCB0aGF0JiMzOTtzIGl0ISBgYnJjbWZfY2ZnODAyMTFfYXR0YWNoYCBpcyBjYWxsZWQgKmJlZm9yZSogYGJyY21mX2J1c19zdGFydGVkYC4gT2theSwgdGhhdCBtYWtlcyBzZW5zZS4gTGV0IG1lIHJlcmVhZCB0aGUgY29kZSBmb3IgYGJyY21mX2J1c19zdGFydGVkYCBhZ2FpbiBqdXN0IHRvIGJlIDEwMCUgc3VyZSBJJiMzOTt2ZSBnb3QgdGhpcyByaWdodC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDY6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTI2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjYwOlx0XG4xMjYxOlx0XHRyZXQgPSBicmNtZl9wcm90b19pbml0X2RvbmUoZHJ2cik7XG4xMjYyOlx0XHRpZiAocmV0IFx1MDAzYyAwKVxuMTI2MzpcdFx0XHRnb3RvIGZhaWw7XG4xMjY0Olx0XG4xMjY1Olx0XHRicmNtZl9wcm90b19hZGRfaWYoZHJ2ciwgaWZwKTtcbjEyNjY6XHRcbjEyNjc6XHRcdGRydnItXHUwMDNlY29uZmlnID0gYnJjbWZfY2ZnODAyMTFfYXR0YWNoKGRydnIsIG9wcyxcbjEyNjg6XHRcdFx0XHRcdFx0ICAgICBkcnZyLVx1MDAzZXNldHRpbmdzLVx1MDAzZXAycF9lbmFibGUpO1xuMTI2OTpcdFx0aWYgKGRydnItXHUwMDNlY29uZmlnID09IE5VTEwpIHtcbjEyNzA6XHRcdFx0cmV0ID0gLUVOT01FTTtcbjEyNzE6XHRcdFx0Z290byBmYWlsO1xuMTI3MjpcdFx0fVxuMTI3MzpcdFxuMTI3NDpcdFx0cmV0ID0gYnJjbWZfbmV0X2F0dGFjaChpZnAsIGZhbHNlKTtcbjEyNzU6XHRcbjEyNzY6XHRcdGlmICgoIXJldCkgXHUwMDI2XHUwMDI2IChkcnZyLVx1MDAzZXNldHRpbmdzLVx1MDAzZXAycF9lbmFibGUpKSB7XG4xMjc3Olx0XHRcdHAycF9pZnAgPSBkcnZyLVx1MDAzZWlmbGlzdFsxXTtcbjEyNzg6XHRcdFx0aWYgKHAycF9pZnApXG4xMjc5Olx0XHRcdFx0cmV0ID0gYnJjbWZfbmV0X3AycF9hdHRhY2gocDJwX2lmcCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA2OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyMTU3CgkJCQkJCQlvdXRwdXQ6IDU0CgkJCQkJCQl0aG91Z2h0czogNzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBEcml2ZXIgSW5pdGlhbGl6YXRpb24gRmxvdyoqCgpPa2F5LCBzbyBJJiMzOTttIHRyYWNpbmcgdGhyb3VnaCB0aGlzIEJyb2FkY29tIFdpLUZpIGRyaXZlciBjb2RlLCBhbmQgSSBzZWUgc29tZXRoaW5nIGludGVyZXN0aW5nIGluIHRoZSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZS4gU3BlY2lmaWNhbGx5LCBgYnJjbWZfY2ZnODAyMTFfYXR0YWNoYCBpcyBiZWluZyBjYWxsZWQgd2l0aGluIHRoZSBgYnJjbWZfYnVzX3N0YXJ0ZWRgIGZ1bmN0aW9uLiBUaGlzIGlzIGtleS4gSWYgYGJyY21mX2J1c19zdGFydGVkYCBoaXRzIGFuIGVycm9yIGJlZm9yZSB0aGUgY2FsbCB0byBgYnJjbWZfY2ZnODAyMTFfYXR0YWNoYCBjYW4gZXZlbiBoYXBwZW4sIHRoZSBjb2RlIHRha2VzIHRoZSBgZmFpbGAgcGF0aC4gVGhlIGZhaWx1cmUgaGFuZGxpbmcgaXMgY3J1Y2lhbCBoZXJlIC0gdW5kZXJzdGFuZGluZyB0aGF0IGNvbmRpdGlvbmFsIGZsb3cgd2lsbCBnaXZlIG1lIHNvbWUgaW5zaWdodC4gTGV0IG1lIHF1aWNrbHkgdHJhY2sgZG93biB3aGVyZSBleGFjdGx5IHRoaXMgYGZhaWxgIGxhYmVsIGlzIGRlZmluZWQgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIGhvdyB0aGUgZHJpdmVyIGhhbmRsZXMgaW5pdGlhbGl6YXRpb24gZXJyb3JzIGluIHRoaXMgc3RhZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA2OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEzMTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTMxMDpcdFxuMTMxMTpcdFx0cmV0dXJuIDA7XG4xMzEyOlx0XG4xMzEzOlx0ZmFpbDpcbjEzMTQ6XHRcdGJwaHlfZXJyKGRydnIsIFwmIzM0O2ZhaWxlZDogJWRcXG5cJiMzNDssIHJldCk7XG4xMzE1Olx0XHRpZiAoZHJ2ci1cdTAwM2Vjb25maWcpIHtcbjEzMTY6XHRcdFx0YnJjbWZfY2ZnODAyMTFfZGV0YWNoKGRydnItXHUwMDNlY29uZmlnKTtcbjEzMTc6XHRcdFx0ZHJ2ci1cdTAwM2Vjb25maWcgPSBOVUxMO1xuMTMxODpcdFx0fVxuMTMxOTpcdFx0YnJjbWZfbmV0X2RldGFjaChpZnAtXHUwMDNlbmRldiwgZmFsc2UpO1xuMTMyMDpcdFx0aWYgKHAycF9pZnApXG4xMzIxOlx0XHRcdGJyY21mX25ldF9kZXRhY2gocDJwX2lmcC1cdTAwM2VuZGV2LCBmYWxzZSk7XG4xMzIyOlx0XHRkcnZyLVx1MDAzZWlmbGlzdFswXSA9IE5VTEw7XG4xMzIzOlx0XHRkcnZyLVx1MDAzZWlmbGlzdFsxXSA9IE5VTEw7XG4xMzI0Olx0XHRpZiAoZHJ2ci1cdTAwM2VzZXR0aW5ncy1cdTAwM2VpZ25vcmVfcHJvYmVfZmFpbClcbjEzMjU6XHRcdFx0cmV0ID0gMDtcbjEzMjY6XHRcbjEzMjc6XHRcdHJldHVybiByZXQ7XG4xMzI4Olx0fVxuMTMyOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNjo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjc0NgoJCQkJCQkJb3V0cHV0OiA1OAoJCQkJCQkJdGhvdWdodHM6IDU0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFJlYWNoYWJpbGl0eSBvZiBgYnJjbWZfY3l3X2V4dGVybmFsX2F1dGhgKioKCk9rYXksIHNvIGhlcmUmIzM5O3MgdGhlIGRlYWwuIElmIGBpZ25vcmVfcHJvYmVfZmFpbGAgaXMgc2V0LCB0aGUgZnVuY3Rpb24gcmV0dXJucyAwLCBidXQgaXQgYWxzbyBkZXRhY2hlcyB0aGUgZGV2aWNlIGZyb20gYm90aCBgY2ZnODAyMTFgIGFuZCB0aGUgbmV0d29yayBzdGFjay4gVGhhdCBtZWFucyB0aGUgZGV2aWNlICppc24mIzM5O3QqIHJlZ2lzdGVyZWQgd2l0aCBgY2ZnODAyMTFgIGlmIHRoZSBpbml0aWFsIHByb2JlIGZhaWxzLiAgQW5kIGlmIGBjZmc4MDIxMWAgaXMgZGV0YWNoZWQsIHRoZW4gdXNlcnNwYWNlIGNhbiYjMzk7dCBldmVuIHNlbmQgdGhhdCBgTkw4MDIxMV9DTURfRVhURVJOQUxfQVVUSGAgY29tbWFuZCEgU28sIGBpZ25vcmVfcHJvYmVfZmFpbGAgcmVhbGx5IGRvZXNuJiMzOTt0IGhlbHAgbWUgcmVhY2ggYGJyY21mX2N5d19leHRlcm5hbF9hdXRoYCBpZiB0aGUgaGFyZHdhcmUgaW50ZXJhY3Rpb25zIGFyZSBmYWlsaW5nLgoKQnV0Li4uIHN5emthbGxlciAqZGlkKiByZWFjaCBpdC4gSG93PyBJJiMzOTttIGJldHRpbmcgdGhlIGluaXRpYWwgaGFyZHdhcmUgaW50ZXJhY3Rpb25zLCBsaWtlIHRob3NlIGluIGBicmNtZl9jX3ByZWluaXRfZGNtZHNgLCBhcmVuJiMzOTt0IGZhaWxpbmcgaW4gc3l6a2FsbGVyJiMzOTtzIGVudmlyb25tZW50LiBBbmQgaGVyZSYjMzk7cyB3aHk6IHN5emthbGxlciYjMzk7cyB2aGNpIGNhbiBnaXZlIGl0IGFyYml0cmFyeSByZXNwb25zZXMgdG8gVVNCIFVSQnMuIElmIGl0IHByb3ZpZGVzIHRoZSAqcmlnaHQqIHJlc3BvbnNlcywgYGJyY21mX2NfcHJlaW5pdF9kY21kc2Agd2lsbCBzdWNjZWVkISBTeXprYWxsZXImIzM5O3MgVVNCIGZ1enplciBpcyBjYXBhYmxlIG9mIGdlbmVyYXRpbmcgcmFuZG9tIFVTQiBkZXNjcmlwdG9ycyBhbmQgcmVzcG9uc2VzLiBUaGF0IGNvbW1pdCBtZXNzYWdlLCAmIzM0O3N5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldyYjMzQ7LCB0ZWxscyBtZSBpdCBpcyBhY3RpdmVseSBmdXp6aW5nIHRoaXMgcGF0aCBhbmQgcHJvYmFibHkgZm91bmQgYSBidWcuIFNvLCB5ZWFoLCBpdCAqaXMqIHJlYWNoYWJsZS4KClRoZSBmdW5jdGlvbiBpbiBxdWVzdGlvbiBpcyBgYnJjbWZfY3l3X2V4dGVybmFsX2F1dGhgLCBhbmQgdGhlIHBhdGNoIG1vZGlmaWVzIGl0LiAgR2l2ZW4gdGhhdCBpdCYjMzk7cyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGEgZHJpdmVyLCByZWFjaGFibGUgdmlhIG5ldGxpbmsgKmFuZCogVVNCIGVtdWxhdGlvbiwgaXQmIzM5O3MgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZSBhbGwgdGhlIGNvbmZpZ3MgcmlnaHQsIHRob3VnaC4gSSYjMzk7bGwgbmVlZDoKCiogICBgQlJDTUZNQUNgCiogICBgQlJDTUZNQUNfVVNCYAoqICAgYENGRzgwMjExYAoqICAgYFVTQmAKKiAgIGBNQUM4MDIxMWAgKG9mdGVuIGdvZXMgYWxvbmcgd2l0aCB0aG9zZSBvdGhlcnMsIHNvIGl0JiMzOTtzIGdvb2QgdG8gaGF2ZSkKKiAgIGBGV19MT0FERVJgIChzZWxlY3RlZCBieSBCUkNNRk1BQ19VU0IpCgpMZXQgbWUganVzdCBxdWlja2x5IHZlcmlmeSB0aGVyZSBhcmVuJiMzOTt0IGFueSBvdGhlciBkZXBlbmRlbmNpZXMsIHNpbmNlIHRoZSBwYXRjaCBpcyBpbiBgY3l3L2NvcmUuY2AuIE9rYXksIGBicmNtZm1hYy0kKENPTkZJR19CUkNNRk1BQykgJiM0Mzs9IGN5dy9jb3JlLm9gIGlzIGluIHRoZSBtYWtlZmlsZS4gU28gYGN5d2AgaXMgdW5jb25kaXRpb25hbGx5IGJ1aWx0IGlmIGBCUkNNRk1BQ2AgaXMgZW5hYmxlZC4KCk9rYXksIGxldCYjMzk7cyBleHRyYWN0IHRoZSBmb2N1cyBzeW1ib2wgb25lIGxhc3QgdGltZTogYGJyY21mX2N5d19leHRlcm5hbF9hdXRoYC4gTm93IEkmIzM5O2xsIGRvdWJsZSBjaGVjayB0byBtYWtlIHN1cmUgaXQmIzM5O3Mgbm90IGEgc3RhdGljIGZ1bmN0aW9uLCBqdXN0IGluIGNhc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA2OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JyY21mX2N5d19leHRlcm5hbF9hdXRoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmM9MTk3PXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvY29yZS5jOjE5ODpicmNtZl9jeXdfZXh0ZXJuYWxfYXV0aChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmMtMTk5LVx0XHRcdHN0cnVjdCBjZmc4MDIxMV9leHRlcm5hbF9hdXRoX3BhcmFtcyAqcGFyYW1zKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvY29yZS5jPTIzND1zdGF0aWMgdm9pZCBicmNtZl9jeXdfZ2V0X2NmZzgwMjExX29wcyhzdHJ1Y3QgYnJjbWZfcHViICpkcnZyKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvY29yZS5jLTIzNi1cdGRydnItXHUwMDNlb3BzLVx1MDAzZW1nbXRfdHggPSBicmNtZl9jeXdfbWdtdF90eDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvY29yZS5jOjIzNzpcdGRydnItXHUwMDNlb3BzLVx1MDAzZWV4dGVybmFsX2F1dGggPSBicmNtZl9jeXdfZXh0ZXJuYWxfYXV0aDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvY29yZS5jLTIzOC19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA2OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0MzIyCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTg3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYGJyY21mX2N5d19leHRlcm5hbF9hdXRoYCBGdW5jdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBmdW5jdGlvbjogYHN0YXRpYyBpbnQgYnJjbWZfY3l3X2V4dGVybmFsX2F1dGgoLi4uKWAuIFJpZ2h0IGF3YXksIHRoZSAmIzM0O3N0YXRpYyYjMzQ7IGtleXdvcmQganVtcHMgb3V0IGF0IG1lLiBUaGUgaW5zdHJ1Y3Rpb25zIGFyZSBwcmV0dHkgY2xlYXI6IHdlIHdhbnQgdG8gZmF2b3Igbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzIG92ZXIgdGhlc2UgaW50ZXJuYWwgc3RhdGljIGhlbHBlcnMuIFRoZSByZWFzb25pbmcgaXMgc291bmQg4oCTIGlubGluaW5nIG9ic2N1cmVzIHRoaW5ncyBiZWNhdXNlIGl0IG1lYW5zIHRoZSBjb21waWxlciYjMzk7cyBqdXN0IGdvaW5nIHRvIGZvbGQgdGhlIGhlbHBlciBmdW5jdGlvbiBkaXJlY3RseSBpbnRvIHdoZXJldmVyIGl0JiMzOTtzIHVzZWQuIE5vIGRpc3RpbmN0IGFkZHJlc3MsIHdoaWNoIGlzIGEgcHJvYmxlbSBmb3IgdGhpbmdzIGxpa2UgZnVuY3Rpb24gcG9pbnRlcnMuCgpBbmQgdGhhdCYjMzk7cyB0aGUga2lja2VyIGhlcmU6IHRoaXMgYGJyY21mX2N5d19leHRlcm5hbF9hdXRoYCAqaXMqIGFzc2lnbmVkIHRvIGEgZnVuY3Rpb24gcG9pbnRlciAoYGRydnItJmd0O29wcy0mZ3Q7ZXh0ZXJuYWxfYXV0aCA9IGJyY21mX2N5d19leHRlcm5hbF9hdXRoO2ApLiBTbywgaW4gdGhlb3J5LCB0aGUgY29tcGlsZXIgc2hvdWxkbiYjMzk7dCBiZSBhYmxlIHRvIGNvbXBsZXRlbHkgaW5saW5lIGl0LiBBIGZ1bmN0aW9uIHBvaW50ZXIgKmRlbWFuZHMqIGEgZGlzY3JldGUgc3ltYm9sIGFkZHJlc3MuIEJ1dCB0aGUgJiMzNDtzdGF0aWMmIzM0OyBpcyBzdGlsbCB0aHJvd2luZyBhIHJlZCBmbGFnLiBJZiBpdCYjMzk7cyBzdGF0aWMsIHRoZXJlJiMzOTtzIGEgZ29vZCBjaGFuY2UgaXQgd29uJiMzOTt0IGdldCBleHBvcnRlZCwgbWVhbmluZyBpdCBtaWdodCBub3QgYmUgdmlzaWJsZSBvdXRzaWRlIHRoZSBtb2R1bGUuIFRoaXMgaXMsIGFmdGVyIGFsbCwgdGhlIG9ubHkgZnVuY3Rpb24gdGhhdCYjMzk7cyBiZWluZyBtb2RpZmllZC4KCkhtbS4uLiB0aGUgcXVlc3Rpb24gdGhlbiBiZWNvbWVzOiBJcyB0aGVyZSBzb21lIG5vbi1zdGF0aWMgZnVuY3Rpb24gdGhhdCBjYWxscyB0aGlzIHN0YXRpYyBvbmU/IEkgbmVlZCB0byB0cmFjZSB0aGlzIGJhY2sgYW5kIHNlZSBob3cgaXQmIzM5O3MgYWN0dWFsbHkgKnVzZWQqLiBBaCwgcmlnaHQhIEl0JiMzOTtzIGNhbGxlZCB0aHJvdWdoIGEgZnVuY3Rpb24gcG9pbnRlciBmcm9tIHRoZSBgY2ZnODAyMTFgIGNvcmUuIEFuZCB0aGF0IGBjZmc4MDIxMWAgY29yZSBmdW5jdGlvbiBpcyBgbmw4MDIxMV9leHRlcm5hbF9hdXRoYC4gTm93IHdlJiMzOTtyZSBnZXR0aW5nIHNvbWV3aGVyZS4gVGhpcyBpcyB0aGUgZW50cnlwb2ludCB0byBiZSBjb25jZXJuZWQgd2l0aC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDY6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmw4MDIxMV9leHRlcm5hbF9hdXRoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTE4NDY5PXN0YXRpYyBpbnQgbmw4MDIxMV9kZWxfcG1rKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xODQ5MC1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MTg0OTE6c3RhdGljIGludCBubDgwMjExX2V4dGVybmFsX2F1dGgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTg0OTIte1xuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9MTk3Mjk9c3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX3NtYWxsX29wcyBubDgwMjExX3NtYWxsX29wc1tdID0ge1xuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMjA0NjAtXHRcdC52YWxpZGF0ZSA9IEdFTkxfRE9OVF9WQUxJREFURV9TVFJJQ1QgfCBHRU5MX0RPTlRfVkFMSURBVEVfRFVNUCxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MjA0NjE6XHRcdC5kb2l0ID0gbmw4MDIxMV9leHRlcm5hbF9hdXRoLFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0yMDQ2Mi1cdFx0LmZsYWdzID0gR0VOTF9BRE1JTl9QRVJNLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNjo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTIyNgoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDI1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBFeHRlcm5hbCBBdXRoZW50aWNhdGlvbiBpbiB0aGUgV2lyZWxlc3MgU3Vic3lzdGVtKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgbmw4MDIxMV9leHRlcm5hbF9hdXRoYCDigJMgdGhhdCYjMzk7cyB0aGUgc3RhcnRpbmcgcG9pbnQsIHRoZSBlbnRyeSBmdW5jdGlvbi4gQnV0IHRoZSBhY3R1YWwgZnVuY3Rpb24gdGhhdCYjMzk7cyBiZWVuIG1vZGlmaWVkLCB0aGUgcmVhbCBtZWF0IG9mIHRoZSBjaGFuZ2VzLCBpcyBgYnJjbWZfY3l3X2V4dGVybmFsX2F1dGhgLiBHb29kIG5ld3MgaXMsIGJlY2F1c2UgaXQmIzM5O3MgYXNzaWduZWQgdG8gYSBmdW5jdGlvbiBwb2ludGVyLCBpdCYjMzk7cyBub3QgZ29pbmcgdG8gYmUgaW5saW5lZC4gVGhhdCBtZWFucyBpdCYjMzk7bGwgc2hvdyB1cCBjbGVhbmx5IGluIHN0YWNrIHRyYWNlcyBhbmQgY292ZXJhZ2UgcmVwb3J0cywgd2hpY2ggaXMgKmV4dHJlbWVseSogaGVscGZ1bCBmb3IgZGVidWdnaW5nIGFuZCBhbmFseXNpcy4gU28sIEkgbmVlZCB0byBiZSBzdXJlIHRvIGluY2x1ZGUgYGJyY21mX2N5d19leHRlcm5hbF9hdXRoYCBpbiBteSBgRm9jdXNTeW1ib2xzYCBsaXN0OyB0aGF0JiMzOTtzIGNyaXRpY2FsLgoKTm93LCBJIG5lZWQgdG8gY2hlY2sgZm9yIGFueSByZWxhdGVkIGNvbmZpZ3VyYXRpb25zLiBJIHNob3VsZCBtYWtlIHN1cmUgdGhlc2UgYXJlIGluY2x1ZGVkIGluIHRoZSBidWlsZDogYEJSQ01GTUFDYCwgYEJSQ01GTUFDX1VTQmAsIGBDRkc4MDIxMWAsIGBNQUM4MDIxMWAsIGBVU0JgLCBgRldfTE9BREVSYCwgYW5kIGBGV19MT0FERVJfVVNFUl9IRUxQRVJgLiBJIGFtIHRoaW5raW5nIHRoYXQgYEZXX0xPQURFUl9VU0VSX0hFTFBFUmAgbWF5IGJlIHVzZWZ1bCBmb3Igc3l6a2FsbGVyIHRvIHN1cHBseSBmaXJtd2FyZSwgYWx0aG91Z2ggaXQmIzM5O3MgYWxzbyBwb3NzaWJsZSB0byBqdXN0IGluY2x1ZGUgaXQgaW4gdGhlIHJvb3Rmcy4gSSYjMzk7bGwgaW5jbHVkZSBpdCBpbiBjYXNlIGl0IGlzIHVzZWZ1bC4KCldhaXQgYSBzZWNvbmTigKYgYE5MODAyMTFfQ01EX0VYVEVSTkFMX0FVVEhgIGlzIGFsc28gcmVsZXZhbnQgdG8gU0FFLCBzcGVjaWZpY2FsbHkgV1BBMyBleHRlcm5hbCBhdXRoZW50aWNhdGlvbi4gVGhpcyBtYWtlcyBtZSBjdXJpb3VzLiBJcyB0aGVyZSBhbnkgc3BlY2lmaWMgY29uZmlndXJhdGlvbiByZWxhdGVkIHRvIFNBRSBvciBXUEEzIHdpdGhpbiBgY2ZnODAyMTFgPyBJIHNob3VsZCBwcm9iYWJseSB0YWtlIGEgbG9vayBhdCBgbmV0L3dpcmVsZXNzL0tjb25maWdgIHRvIGJlIHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA2OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2V4dGVybmFsX2F1dGgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvd2lyZWxlc3MvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy9ubDgwMjExLmM9MTg0Njk9c3RhdGljIGludCBubDgwMjExX2RlbF9wbWsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE4NDkwLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYzoxODQ5MTpzdGF0aWMgaW50IG5sODAyMTFfZXh0ZXJuYWxfYXV0aChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xODQ5Mi17XG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xODQ5NC1cdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBpbmZvLVx1MDAzZXVzZXJfcHRyWzFdO1xubmV0L3dpcmVsZXNzL25sODAyMTEuYzoxODQ5NTpcdHN0cnVjdCBjZmc4MDIxMV9leHRlcm5hbF9hdXRoX3BhcmFtcyBwYXJhbXM7XG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE4NDk2LVxubmV0L3dpcmVsZXNzL25sODAyMTEuYzoxODQ5NzpcdGlmICghcmRldi1cdTAwM2VvcHMtXHUwMDNlZXh0ZXJuYWxfYXV0aClcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTg0OTgtXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE4NTI5LVxubmV0L3dpcmVsZXNzL25sODAyMTEuYzoxODUzMDpcdHJldHVybiByZGV2X2V4dGVybmFsX2F1dGgocmRldiwgZGV2LCBcdTAwMjZwYXJhbXMpO1xubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xODUzMS19XG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYz0xOTcyOT1zdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfc21hbGxfb3BzIG5sODAyMTFfc21hbGxfb3BzW10gPSB7XG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0yMDQ2MC1cdFx0LnZhbGlkYXRlID0gR0VOTF9ET05UX1ZBTElEQVRFX1NUUklDVCB8IEdFTkxfRE9OVF9WQUxJREFURV9EVU1QLFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzoyMDQ2MTpcdFx0LmRvaXQgPSBubDgwMjExX2V4dGVybmFsX2F1dGgsXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTIwNDYyLVx0XHQuZmxhZ3MgPSBHRU5MX0FETUlOX1BFUk0sXG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYz0yMzI1Nj12b2lkIG5sODAyMTFfc2VuZF9hcF9zdG9wcGVkKHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsIHVuc2lnbmVkIGludCBsaW5rX2lkKVxuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMjMyODctXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjIzMjg4OmludCBjZmc4MDIxMV9leHRlcm5hbF9hdXRoX3JlcXVlc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MjMyODk6XHRcdFx0XHQgICBzdHJ1Y3QgY2ZnODAyMTFfZXh0ZXJuYWxfYXV0aF9wYXJhbXMgKnBhcmFtcyxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMjMyOTAtXHRcdFx0XHQgICBnZnBfdCBnZnApXG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0yMzM0NS19XG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjIzMzQ2OkVYUE9SVF9TWU1CT0woY2ZnODAyMTFfZXh0ZXJuYWxfYXV0aF9yZXF1ZXN0KTtcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMjMzNDctXG4tLVxubmV0L3dpcmVsZXNzL3JkZXYtb3BzLmg9MTMzOD1zdGF0aWMgaW5saW5lIGludFxubmV0L3dpcmVsZXNzL3JkZXYtb3BzLmg6MTMzOTpyZGV2X2V4dGVybmFsX2F1dGgoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxubmV0L3dpcmVsZXNzL3JkZXYtb3BzLmgtMTM0MC1cdFx0ICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbm5ldC93aXJlbGVzcy9yZGV2LW9wcy5oOjEzNDE6XHRcdCAgIHN0cnVjdCBjZmc4MDIxMV9leHRlcm5hbF9hdXRoX3BhcmFtcyAqcGFyYW1zKVxubmV0L3dpcmVsZXNzL3JkZXYtb3BzLmgtMTM0Mi17XG4tLVxubmV0L3dpcmVsZXNzL3JkZXYtb3BzLmgtMTM0NC1cbm5ldC93aXJlbGVzcy9yZGV2LW9wcy5oOjEzNDU6XHR0cmFjZV9yZGV2X2V4dGVybmFsX2F1dGgoXHUwMDI2cmRldi1cdTAwM2V3aXBoeSwgZGV2LCBwYXJhbXMpO1xubmV0L3dpcmVsZXNzL3JkZXYtb3BzLmg6MTM0NjpcdGlmIChyZGV2LVx1MDAzZW9wcy1cdTAwM2VleHRlcm5hbF9hdXRoKVxubmV0L3dpcmVsZXNzL3JkZXYtb3BzLmg6MTM0NzpcdFx0cmV0ID0gcmRldi1cdTAwM2VvcHMtXHUwMDNlZXh0ZXJuYWxfYXV0aChcdTAwMjZyZGV2LVx1MDAzZXdpcGh5LCBkZXYsIHBhcmFtcyk7XG5uZXQvd2lyZWxlc3MvcmRldi1vcHMuaC0xMzQ4LVx0dHJhY2VfcmRldl9yZXR1cm5faW50KFx1MDAyNnJkZXYtXHUwMDNld2lwaHksIHJldCk7XG4tLVxubmV0L3dpcmVsZXNzL3RyYWNlLmg9Mjc2NT1UUkFDRV9FVkVOVChyZGV2X2RlbF9wbWssXG4tLVxubmV0L3dpcmVsZXNzL3RyYWNlLmgtMjc4NS1cbm5ldC93aXJlbGVzcy90cmFjZS5oOjI3ODY6VFJBQ0VfRVZFTlQocmRldl9leHRlcm5hbF9hdXRoLFxubmV0L3dpcmVsZXNzL3RyYWNlLmgtMjc4Ny1cdCAgICBUUF9QUk9UTyhzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxubmV0L3dpcmVsZXNzL3RyYWNlLmg6Mjc4ODpcdFx0ICAgICBzdHJ1Y3QgY2ZnODAyMTFfZXh0ZXJuYWxfYXV0aF9wYXJhbXMgKnBhcmFtcyksXG5uZXQvd2lyZWxlc3MvdHJhY2UuaC0yNzg5LVx0ICAgIFRQX0FSR1Mod2lwaHksIG5ldGRldiwgcGFyYW1zKSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDY6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzcxMzcKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAyMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ29uZmlndXJhdGlvbiBTdHJhdGVneSBmb3IgUmV2aWV3aW5nIG5sODAyMTEuYyYjMzk7cyBTQUUvRXh0ZXJuYWwgQXV0aCBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyB0aGVyZSYjMzk7cyBubyBkZWRpY2F0ZWQgY29uZmlndXJhdGlvbiBvcHRpb24gc3BlY2lmaWNhbGx5IGZvciBTQUUgb3IgZXh0ZXJuYWwgYXV0aGVudGljYXRpb24gd2l0aGluIGBubDgwMjExLmNgLiBJdCYjMzk7cyBpbnRlZ3JhdGVkIGRpcmVjdGx5IGFzIHBhcnQgb2YgdGhlIGBubDgwMjExLmNgIHNvdXJjZSBjb2RlLCB3aGljaCBnZXRzIGJ1aWx0IHdoZW4gYENGRzgwMjExYCBpcyBlbmFibGVkLiBUaW1lIHRvIHJldmlldyB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgdG8gZW5zdXJlIHByb3BlciBzZXR1cC4KCkkmIzM5O20gdGhpbmtpbmcgSSYjMzk7bGwgbmVlZCB0byBlbmFibGUgdGhlc2Ugb3B0aW9ucyBpbiBteSBidWlsZDogYEJSQ01GTUFDYCwgYEJSQ01GTUFDX1VTQmAsIGBDRkc4MDIxMWAsIGBNQUM4MDIxMWAsIGBVU0JgLCBgRldfTE9BREVSYCwgYEZXX0xPQURFUl9VU0VSX0hFTFBFUmAsIGFuZCBgQlJDTURCR2AuIEkgYWRkZWQgYEJSQ01EQkdgIGJlY2F1c2UgaXQgc2VlbXMgdXNlZnVsIGZvciBlYXNpZXIgZnV6emluZywgc3BlY2lmaWNhbGx5IGVuYWJsaW5nIGBpZ25vcmVfcHJvYmVfZmFpbGAsIGFuZCBieSBleHRlbnNpb24sIGVhc2llciBjb2RlIGNvdmVyYWdlLgoKV2FpdCBhIHNlY29uZCwgbGV0IG1lIHRoaW5rIGFib3V0IGBCUkNNREJHYC4gQWx0aG91Z2ggaXTigJlzIGV4dHJlbWVseSB1c2VmdWwgZm9yIGZ1enppbmcsIEkgc2hvdWxkIGNoZWNrIGlmIGl0JiMzOTtzIHN0cmljdGx5IG5lY2Vzc2FyeS4gTWF5YmUgc3l6a2FsbGVyIGFscmVhZHkgaGFzIHRoaXMgZW5hYmxlZCBvciBtYXliZSwgc2luY2UgaXQgZmVlZHMgdGhlIGNvZGUgd2l0aCB2YWxpZCBmaXJtd2FyZSwgaXQgZG9lc24mIzM5O3QgZXZlbiBuZWVkIGBpZ25vcmVfcHJvYmVfZmFpbGAuIEhvd2V2ZXIsIGp1c3QgdG8gYmUgc2FmZSwgSSYjMzk7bGwgZ28gYWhlYWQgYW5kIGluY2x1ZGUgYEJSQ01EQkdgLiBJdCBzaWduaWZpY2FudGx5IHNpbXBsaWZpZXMgZ2V0dGluZyB0byB0aGUgY29kZSBmb3IgYW5hbHlzaXMsIGVzcGVjaWFsbHkgd2l0aG91dCByZWx5aW5nIG9uIGFjdHVhbCBoYXJkd2FyZS4KCk5vdywgYmVmb3JlIEkgY29tbWl0IHRvIHRoYXQsIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCBgQlJDTURCR2AgZG9lc24mIzM5O3QgaGF2ZSBhbnkgaGlkZGVuIGRlcGVuZGVuY2llcyB0aGF0IG1pZ2h0IGNvbXBsaWNhdGUgbXkgYnVpbGQuIExldCBtZSBtYWtlIHN1cmUgSSYjMzk7bSBub3Qgb3Zlcmxvb2tpbmcgc29tZXRoaW5nIGNydWNpYWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA2OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCUkNNREJHJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL0tjb25maWc9Mjc9Y29uZmlnIEJSQ01fVFJBQ0lOR1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9LY29uZmlnLTM4LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL0tjb25maWc6Mzk6Y29uZmlnIEJSQ01EQkdcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9LY29uZmlnLTQwLVx0Ym9vbCBcJiMzNDtCcm9hZGNvbSBkcml2ZXIgZGVidWcgZnVuY3Rpb25zXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA2OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM3ODkzCgkJCQkJCQlvdXRwdXQ6IDIxOAoJCQkJCQkJdGhvdWdodHM6IDQyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBXTEFOIERyaXZlciBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIGlzIGp1c3QgYSBCb29sZWFuIGNoZWNrIGluaXRpYWxseS4gTXkgZm9jdXMgbmVlZHMgdG8gYmUgb24gdGhlIGBicmNtZl9jeXdfZXh0ZXJuYWxfYXV0aGAgZnVuY3Rpb24uIEkgc2VlIHRoYXQgdGhlIHBhdGNoICpvbmx5KiBtb2RpZmllcyB0aGlzIGZ1bmN0aW9uLCBzbyB0aGF0JiMzOTtzIHdoZXJlIG15IGF0dGVudGlvbiBpcy4KCkxvb2tpbmcgYXQgdGhlIGNvZGUsIGl0JiMzOTtzIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIEl0IGNoZWNrcyBmb3IgYSBzdWNjZXNzZnVsIHN0YXR1cywgYW5kIGlmIHNvLCBpdCAqY29waWVzKiBgcGFyYW1zLSZndDtwbWtpZGAgdG8gYGF1dGhfc3RhdHVzLnBta2lkYC4gVGhlbiwgaXQgc2V0cyB0aGUgZmxhZ3MgYW5kIHNlbmRzIGBhdXRoX3N0YXR1c2AgdG8gdGhlIGZpcm13YXJlIHZpYSBgYnJjbWZfZmlsX2lvdmFyX2RhdGFfc2V0YC4KClRoaXMgaXMgYSAqKmZ1bmN0aW9uYWwgY2hhbmdlKiouIEl0JiMzOTtzIHByZXZlbnRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgZnJvbSBiZWluZyBzZW50IHRvIHRoZSBmaXJtd2FyZSwgb3IgcGVyaGFwcyBpdCBhZGRzIFBNS0lEIHN1cHBvcnQgdG8gZXh0ZXJuYWwgYXV0aGVudGljYXRpb24uIEl0JiMzOTtzIGEgY2xlYXIgYWx0ZXJhdGlvbiB0byB0aGUgZXhpc3RpbmcgYmVoYXZpb3IgYW5kIGludHJvZHVjZXMgbmV3IGRhdGEgYmVpbmcgc2VudCB0byB0aGUgZmlybXdhcmUuICpUaGlzKiBkZWZpbml0ZWx5IG5lZWRzIGZ1enppbmcuCgpNeSBjb25jbHVzaW9uPyBgV29ydGhGdXp6aW5nOiB0cnVlYC4gVGhlIGZ1bmN0aW9uIG9mIGludGVyZXN0IGlzIGBicmNtZl9jeXdfZXh0ZXJuYWxfYXV0aGAuIEFuZCBJIG5lZWQgdG8gY29uc2lkZXIgY29uZmlndXJhdGlvbnMgZm9yIGBCUkNNRk1BQ2AsIGBCUkNNRk1BQ19VU0JgLCBgQ0ZHODAyMTFgLCBgTUFDODAyMTFgLCBgVVNCYCwgYEZXX0xPQURFUmAsIGBGV19MT0FERVJfVVNFUl9IRUxQRVJgLCBhbmQgYEJSQ01EQkdgLiBJIHNob3VsZCBhbHNvIHVzZSB0aGUgYGlnbm9yZV9wcm9iZV9mYWlsYCBtb2R1bGUgcGFyYW1ldGVyICh3aGVuIGBCUkNNREJHYCBpcyBlbmFibGVkKSB0byBieXBhc3MgYW55IGhhcmR3YXJlIGluaXRpYWxpemF0aW9uIGlzc3Vlcy4gVGhpcyBpcyByZWFjaGFibGUgdmlhIHRoZSBuZXRsaW5rIGludGVyZmFjZSwgc3BlY2lmaWNhbGx5IGBOTDgwMjExX0NNRF9FWFRFUk5BTF9BVVRIYCBpbiBhIFVTQiB2aGNpIGVtdWxhdGlvbiBzY2VuYXJpbywgdGhlcmVmb3JlIHRoZSBzdGF0ZWQgY29uZmlndXJhdGlvbnMgYWxsb3cgbWUgdG8gZXhlcmNpc2UgdGhlIHRhcmdldCBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDY6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JSQ01GTUFDJiMzNDssCiAgICAmIzM0O0JSQ01GTUFDX1VTQiYjMzQ7LAogICAgJiMzNDtDRkc4MDIxMSYjMzQ7LAogICAgJiMzNDtNQUM4MDIxMSYjMzQ7LAogICAgJiMzNDtVU0ImIzM0OywKICAgICYjMzQ7RldfTE9BREVSJiMzNDssCiAgICAmIzM0O0ZXX0xPQURFUl9VU0VSX0hFTFBFUiYjMzQ7LAogICAgJiMzNDtCUkNNREJHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnJjbWZfY3l3X2V4dGVybmFsX2F1dGgmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGJyY21mX2N5d19leHRlcm5hbF9hdXRoYCBpbiB0aGUgQnJvYWRjb20gRnVsbE1BQyBXTEFOIGRyaXZlciAoYGJyY21mbWFjYCkgdG8gaW5pdGlhbGl6ZSBgYXV0aF9zdGF0dXNgIGFuZCBjb3B5IGBwbWtpZGAgaWYgcHJlc2VudC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGEgZHJpdmVyIHRoYXQgaXMgcmVhY2hhYmxlIHZpYSBuZXRsaW5rIChgTkw4MDIxMV9DTURfRVhURVJOQUxfQVVUSGApIHdoZW4gdGhlIGRldmljZSBpcyBlbXVsYXRlZCB2aWEgVVNCICh2aGNpKS4gRW5hYmxpbmcgYEJSQ01EQkdgIGFsbG93cyB1c2luZyB0aGUgYGlnbm9yZV9wcm9iZV9mYWlsYCBtb2R1bGUgcGFyYW1ldGVyIHRvIGJ5cGFzcyBoYXJkd2FyZSBpbml0aWFsaXphdGlvbiBmYWlsdXJlcyBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlJDTUZNQUMmIzM0OywKICAgICYjMzQ7QlJDTUZNQUNfVVNCJiMzNDssCiAgICAmIzM0O0NGRzgwMjExJiMzNDssCiAgICAmIzM0O01BQzgwMjExJiMzNDssCiAgICAmIzM0O1VTQiYjMzQ7LAogICAgJiMzNDtGV19MT0FERVImIzM0OywKICAgICYjMzQ7RldfTE9BREVSX1VTRVJfSEVMUEVSJiMzNDssCiAgICAmIzM0O0JSQ01EQkcmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticmNtZl9jeXdfZXh0ZXJuYWxfYXV0aCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgYnJjbWZfY3l3X2V4dGVybmFsX2F1dGhgIGluIHRoZSBCcm9hZGNvbSBGdWxsTUFDIFdMQU4gZHJpdmVyIChgYnJjbWZtYWNgKSB0byBpbml0aWFsaXplIGBhdXRoX3N0YXR1c2AgYW5kIGNvcHkgYHBta2lkYCBpZiBwcmVzZW50LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSBkcml2ZXIgdGhhdCBpcyByZWFjaGFibGUgdmlhIG5ldGxpbmsgKGBOTDgwMjExX0NNRF9FWFRFUk5BTF9BVVRIYCkgd2hlbiB0aGUgZGV2aWNlIGlzIGVtdWxhdGVkIHZpYSBVU0IgKHZoY2kpLiBFbmFibGluZyBgQlJDTURCR2AgYWxsb3dzIHVzaW5nIHRoZSBgaWdub3JlX3Byb2JlX2ZhaWxgIG1vZHVsZSBwYXJhbWV0ZXIgdG8gYnlwYXNzIGhhcmR3YXJlIGluaXRpYWxpemF0aW9uIGZhaWx1cmVzIGR1cmluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDY6Mzk6NDguNjgwMzg2MzcyWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMzODQzODE1NjcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJSQ01GTUFDXCIsXG4gICAgXCJCUkNNRk1BQ19VU0JcIixcbiAgICBcIkNGRzgwMjExXCIsXG4gICAgXCJNQUM4MDIxMVwiLFxuICAgIFwiVVNCXCIsXG4gICAgXCJGV19MT0FERVJcIixcbiAgICBcIkZXX0xPQURFUl9VU0VSX0hFTFBFUlwiLFxuICAgIFwiQlJDTURCR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJyY21mX2N5d19leHRlcm5hbF9hdXRoXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGJyY21mX2N5d19leHRlcm5hbF9hdXRoYCBpbiB0aGUgQnJvYWRjb20gRnVsbE1BQyBXTEFOIGRyaXZlciAoYGJyY21mbWFjYCkgdG8gaW5pdGlhbGl6ZSBgYXV0aF9zdGF0dXNgIGFuZCBjb3B5IGBwbWtpZGAgaWYgcHJlc2VudC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGEgZHJpdmVyIHRoYXQgaXMgcmVhY2hhYmxlIHZpYSBuZXRsaW5rIChgTkw4MDIxMV9DTURfRVhURVJOQUxfQVVUSGApIHdoZW4gdGhlIGRldmljZSBpcyBlbXVsYXRlZCB2aWEgVVNCICh2aGNpKS4gRW5hYmxpbmcgYEJSQ01EQkdgIGFsbG93cyB1c2luZyB0aGUgYGlnbm9yZV9wcm9iZV9mYWlsYCBtb2R1bGUgcGFyYW1ldGVyIHRvIGJ5cGFzcyBoYXJkd2FyZSBpbml0aWFsaXphdGlvbiBmYWlsdXJlcyBkdXJpbmcgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDY6Mzk6NDguNjgwMzk0MDUyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozODQxMDQyNzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA3ZTNiZDQ5ZDE5ODdhYmE1ZTZmYzA3ZDIwNmU0ZDYxNzY2NzQwM2JhXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgQXVnIDQgMDY6Mzk6NDcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L2NvcmUuY1xcbmluZGV4IDg3Mzc1NGJlNTE3NGIuLjJjNTliNWU1Nzk1OWMgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmNcXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L2NvcmUuY1xcbkBAIC0yMDAsNyArMjAwLDcgQEAgYnJjbWZfY3l3X2V4dGVybmFsX2F1dGgoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4ge1xcbiBcXHRzdHJ1Y3QgYnJjbWZfaWYgKmlmcDtcXG4gXFx0c3RydWN0IGJyY21mX3B1YiAqZHJ2cjtcXG4tXFx0c3RydWN0IGJyY21mX2F1dGhfcmVxX3N0YXR1c19sZSBhdXRoX3N0YXR1cztcXG4rXFx0c3RydWN0IGJyY21mX2F1dGhfcmVxX3N0YXR1c19sZSBhdXRoX3N0YXR1cyA9IHt9O1xcbiBcXHRpbnQgcmV0ID0gMDtcXG4gXFxuIFxcdGJyY21mX2RiZyhUUkFDRSwgXFxcIkVudGVyXFxcXG5cXFwiKTtcXG5AQCAtMjA4LDYgKzIwOCw4IEBAIGJyY21mX2N5d19leHRlcm5hbF9hdXRoKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIFxcdGlmcCA9IG5ldGRldl9wcml2KGRldik7XFxuIFxcdGRydnIgPSBpZnAtXFx1MDAzZWRydnI7XFxuIFxcdGlmIChwYXJhbXMtXFx1MDAzZXN0YXR1cyA9PSBXTEFOX1NUQVRVU19TVUNDRVNTKSB7XFxuK1xcdFxcdGlmIChwYXJhbXMtXFx1MDAzZXBta2lkKVxcbitcXHRcXHRcXHRtZW1jcHkoYXV0aF9zdGF0dXMucG1raWQsIHBhcmFtcy1cXHUwMDNlcG1raWQsIFdMQU5fUE1LSURfTEVOKTtcXG4gXFx0XFx0YXV0aF9zdGF0dXMuZmxhZ3MgPSBjcHVfdG9fbGUxNihCUkNNRl9FWFRBVVRIX1NVQ0NFU1MpO1xcbiBcXHR9IGVsc2Uge1xcbiBcXHRcXHRicGh5X2VycihkcnZyLCBcXFwiRXh0ZXJuYWwgYXV0aGVudGljYXRpb24gZmFpbGVkOiBzdGF0dXM9JWRcXFxcblxcXCIsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA2OjM5OjQ5LjA2NTI0ODUxMVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjIzMzQ1ODk0NDg2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUkNNRk1BQ1wiLFxuICAgIFwiQlJDTUZNQUNfVVNCXCIsXG4gICAgXCJDRkc4MDIxMVwiLFxuICAgIFwiTUFDODAyMTFcIixcbiAgICBcIlVTQlwiLFxuICAgIFwiRldfTE9BREVSXCIsXG4gICAgXCJGV19MT0FERVJfVVNFUl9IRUxQRVJcIixcbiAgICBcIkJSQ01EQkdcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicmNtZl9jeXdfZXh0ZXJuYWxfYXV0aFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBicmNtZl9jeXdfZXh0ZXJuYWxfYXV0aGAgaW4gdGhlIEJyb2FkY29tIEZ1bGxNQUMgV0xBTiBkcml2ZXIgKGBicmNtZm1hY2ApIHRvIGluaXRpYWxpemUgYGF1dGhfc3RhdHVzYCBhbmQgY29weSBgcG1raWRgIGlmIHByZXNlbnQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBhIGRyaXZlciB0aGF0IGlzIHJlYWNoYWJsZSB2aWEgbmV0bGluayAoYE5MODAyMTFfQ01EX0VYVEVSTkFMX0FVVEhgKSB3aGVuIHRoZSBkZXZpY2UgaXMgZW11bGF0ZWQgdmlhIFVTQiAodmhjaSkuIEVuYWJsaW5nIGBCUkNNREJHYCBhbGxvd3MgdXNpbmcgdGhlIGBpZ25vcmVfcHJvYmVfZmFpbGAgbW9kdWxlIHBhcmFtZXRlciB0byBieXBhc3MgaGFyZHdhcmUgaW5pdGlhbGl6YXRpb24gZmFpbHVyZXMgZHVyaW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDdlM2JkNDlkMTk4N2FiYTVlNmZjMDdkMjA2ZTRkNjE3NjY3NDAzYmFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyA0IDA2OjM5OjQ3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L2NvcmUuY1xuaW5kZXggODczNzU0YmU1MTc0Yi4uMmM1OWI1ZTU3OTU5YyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvY29yZS5jXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L2NvcmUuY1xuQEAgLTIwMCw3ICsyMDAsNyBAQCBicmNtZl9jeXdfZXh0ZXJuYWxfYXV0aChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIHtcbiBcdHN0cnVjdCBicmNtZl9pZiAqaWZwO1xuIFx0c3RydWN0IGJyY21mX3B1YiAqZHJ2cjtcbi1cdHN0cnVjdCBicmNtZl9hdXRoX3JlcV9zdGF0dXNfbGUgYXV0aF9zdGF0dXM7XG4rXHRzdHJ1Y3QgYnJjbWZfYXV0aF9yZXFfc3RhdHVzX2xlIGF1dGhfc3RhdHVzID0ge307XG4gXHRpbnQgcmV0ID0gMDtcbiBcbiBcdGJyY21mX2RiZyhUUkFDRSwgXCJFbnRlclxcblwiKTtcbkBAIC0yMDgsNiArMjA4LDggQEAgYnJjbWZfY3l3X2V4dGVybmFsX2F1dGgoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdGlmcCA9IG5ldGRldl9wcml2KGRldik7XG4gXHRkcnZyID0gaWZwLVx1MDAzZWRydnI7XG4gXHRpZiAocGFyYW1zLVx1MDAzZXN0YXR1cyA9PSBXTEFOX1NUQVRVU19TVUNDRVNTKSB7XG4rXHRcdGlmIChwYXJhbXMtXHUwMDNlcG1raWQpXG4rXHRcdFx0bWVtY3B5KGF1dGhfc3RhdHVzLnBta2lkLCBwYXJhbXMtXHUwMDNlcG1raWQsIFdMQU5fUE1LSURfTEVOKTtcbiBcdFx0YXV0aF9zdGF0dXMuZmxhZ3MgPSBjcHVfdG9fbGUxNihCUkNNRl9FWFRBVVRIX1NVQ0NFU1MpO1xuIFx0fSBlbHNlIHtcbiBcdFx0YnBoeV9lcnIoZHJ2ciwgXCJFeHRlcm5hbCBhdXRoZW50aWNhdGlvbiBmYWlsZWQ6IHN0YXR1cz0lZFxcblwiLFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDY6Mzk6NDkuMDY1MjUwMTYxWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQxOTAyMDg4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBCcm9hZGNvbSBXaXJlbGVzcyBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIOKAkyBsb29rcyBsaWtlIGl0J3MgdHdlYWtpbmcgYGJyY21mX2N5d19leHRlcm5hbF9hdXRoYCBpbiB0aGUgYGJyY21mbWFjYCBkcml2ZXIuIFNwZWNpZmljYWxseSwgaXQncyBhYm91dCBpbml0aWFsaXppbmcgYGF1dGhfc3RhdHVzYCBhbmQgY29weWluZyBgcGFyYW1zLVx1MDAzZXBta2lkYCBvdmVyLCBidXQgb25seSBpZiBgcGFyYW1zLVx1MDAzZXBta2lkYCBpc24ndCBudWxsLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJjYW4gSSByZWFjaCB0aGlzIGVhc2lseSBpbiBRRU1VP1wiIFRoZSBkcml2ZXIgaXMgYGJyY21mbWFjYCwgc28gaXQncyBhIEJyb2FkY29tIHdpcmVsZXNzIGRyaXZlci4gVGhlIG5leHQgcXVlc3Rpb24gSSBoYXZlIGlzLCB3aGF0J3MgdGhlIGludGVyZmFjZSDigJMgVVNCLCBTRElPLCBvciBQQ0llPyBUaGF0J3MgZ29pbmcgdG8gZGljdGF0ZSBob3cgSSBhcHByb2FjaCBmdXp6aW5nIGl0LiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgZmlsZSBmb3IgYGJyY21mbWFjYCB0byBzZWUgd2hhdCBpbnRlcmZhY2VzIGl0IHN1cHBvcnRzLCBtYXliZSBgZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWdgIGlzIGEgZ29vZCBwbGFjZSB0byBzdGFydC4gSWYgVVNCIGlzIHN1cHBvcnRlZCwgdGhlbiBJIGNhbiBkZWZpbml0ZWx5IGxldmVyYWdlIFVTQiBlbXVsYXRpb24sIHdoaWNoIGlzIGEgYmlnIHdpbiBmb3IgZnV6emluZy4gSWYgaXQncyBTRElPIG9yIFBDSWUsIEknbGwgaGF2ZSB0byBjb25zaWRlciBvdGhlciBtZXRob2RzLCBidXQgVVNCIGlzIGRlZmluaXRlbHkgdGhlIHByZWZlcnJlZCBhcHByb2FjaCBoZXJlLiBMZXQncyBkaWcgaW50byB0aGF0IEtjb25maWcgYW5kIHNlZSB3aGF0IHdlIGNhbiBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzEyLCJPdXRwdXRUb2tlbnMiOjUyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTg5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDY6Mzk6NTQuNDg0MjczNDQ2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM5MjMxNzU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJyY21mX2N5d19leHRlcm5hbF9hdXRoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmM9MTk3PXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L2NvcmUuYzoxOTg6YnJjbWZfY3l3X2V4dGVybmFsX2F1dGgoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L2NvcmUuYy0xOTktXFx0XFx0XFx0c3RydWN0IGNmZzgwMjExX2V4dGVybmFsX2F1dGhfcGFyYW1zICpwYXJhbXMpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L2NvcmUuYz0yMzQ9c3RhdGljIHZvaWQgYnJjbWZfY3l3X2dldF9jZmc4MDIxMV9vcHMoc3RydWN0IGJyY21mX3B1YiAqZHJ2cilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvY29yZS5jLTIzNi1cXHRkcnZyLVxcdTAwM2VvcHMtXFx1MDAzZW1nbXRfdHggPSBicmNtZl9jeXdfbWdtdF90eDtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L2NvcmUuYzoyMzc6XFx0ZHJ2ci1cXHUwMDNlb3BzLVxcdTAwM2VleHRlcm5hbF9hdXRoID0gYnJjbWZfY3l3X2V4dGVybmFsX2F1dGg7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmMtMjM4LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDY6Mzk6NTQuNTIzNTE0MDU1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTAwODM4NjI1ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGFscmVhZHkgZGVlcCBpbiBkcml2ZXIgZGV2ZWxvcG1lbnQgYW5kIGZhbWlsaWFyIHdpdGggdGhlIGNvZGViYXNlOlxuXG4qKkFuYWx5emluZyB0aGUgYGV4dGVybmFsX2F1dGhgIEhvb2sgZm9yIEJyb2FkY29tJ3MgRmlybXdhcmUqKlxuXG5SaWdodCwgc28gdGhlIGBicmNtZl9jeXdfZXh0ZXJuYWxfYXV0aGAgZnVuY3Rpb24gaXMgYmVpbmcgaG9va2VkIGludG8gYGRydnItXHUwMDNlb3BzLVx1MDAzZWV4dGVybmFsX2F1dGhgLiBUaGF0J3MgaW50ZXJlc3RpbmcsIGFuZCBkZWZpbml0ZWx5IG5lZWRzIGEgY2xvc2VyIGxvb2suIEkgaW1tZWRpYXRlbHkgYXNzdW1lIHRoaXMgaXMgcmVsYXRlZCB0byBzb21lIGZvcm0gb2YgZXh0ZXJuYWwgYXV0aGVudGljYXRpb24gbWVjaGFuaXNtLCBsaWtlbHkgV1BBL1dQQTIgRW50ZXJwcmlzZSBvciBzaW1pbGFyLiBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhpcyBmdW5jdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgYXV0aGVudGljYXRpb24gcHJvY2VzcyB3aXRoaW4gdGhlIGBicmNtZm1hY2AgZHJpdmVyLlxuXG5Ob3csIG15IGZvY3VzIHNoaWZ0cy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxhcmdlciBjb250ZXh0LiBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgZXh0ZXJuYWwgYXV0aGVudGljYXRpb24gaW1wbGVtZW50YXRpb24gaXMgVVNCLXNwZWNpZmljLCBvciBpZiBpdCBoYXMgd2lkZXIgYXBwbGljYWJpbGl0eSBhY3Jvc3MgdGhlIGBicmNtZm1hY2AgYXJjaGl0ZWN0dXJlLiBUaGUgbG9naWNhbCBuZXh0IHN0ZXAgaXMgdG8gcXVpY2tseSBkZXRlcm1pbmUgd2hldGhlciB0aGUgYGJyY21mbWFjYCBkcml2ZXIsIGluIGl0cyBjdXJyZW50IGNvbmZpZ3VyYXRpb24sIGFjdHVhbGx5IHN1cHBvcnRzIFVTQi4gSWYgaXQgZG9lc24ndCwgdGhlbiB0aGlzIGZ1bmN0aW9uJ3MgcHJlc2VuY2UgaXMgc29tZXdoYXQgcGVycGxleGluZywgdW5sZXNzIGl0J3MgZGVzaWduZWQgZm9yIGZ1dHVyZSBzdXBwb3J0IG9yIGFzIGEgZ2VuZXJpYyBtZWNoYW5pc20uIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSB0aGUgVVNCIHN1cHBvcnQgc3RhdHVzIHdpdGhpbiB0aGUgZHJpdmVyLiBMZXQncyBzZWUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzE5OSwiT3V0cHV0VG9rZW5zIjo0NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA2OjQwOjA0LjYwNzM3ODM0OVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MDg0NTMyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlJDTUZNQUNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZzoxOmNvbmZpZyBCUkNNRk1BQ1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnLTItXFx0dHJpc3RhdGUgXFxcIkJyb2FkY29tIEZ1bGxNQUMgV0xBTiBkcml2ZXJcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZy0xMC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZzoxMTpjb25maWcgQlJDTUZNQUNfUFJPVE9fQkNEQ1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnLTEyLVxcdGJvb2xcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZy0xMy1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZzoxNDpjb25maWcgQlJDTUZNQUNfUFJPVE9fTVNHQlVGXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWctMTUtXFx0Ym9vbFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnLTE2LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnOjE3OmNvbmZpZyBCUkNNRk1BQ19TRElPXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWctMTgtXFx0Ym9vbCBcXFwiU0RJTyBidXMgaW50ZXJmYWNlIHN1cHBvcnQgZm9yIEZ1bGxNQUMgZHJpdmVyXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWctMjgtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWc6Mjk6Y29uZmlnIEJSQ01GTUFDX1VTQlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnLTMwLVxcdGJvb2wgXFxcIlVTQiBidXMgaW50ZXJmYWNlIHN1cHBvcnQgZm9yIEZ1bGxNQUMgZHJpdmVyXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWctMzktXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWc6NDA6Y29uZmlnIEJSQ01GTUFDX1BDSUVcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZy00MS1cXHRib29sIFxcXCJQQ0lFIGJ1cyBpbnRlcmZhY2Ugc3VwcG9ydCBmb3IgRnVsbE1BQyBkcml2ZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA2OjQwOjA0LjY0ODIyNzUxOFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1MDA4NTM4NzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZSwgdGhlIHN5c3RlbSB0ZWxscyBtZSB0aGF0ICoqQlJDTUZNQUNfVVNCIGlzIHN1cHBvcnRlZC4gR29vZC4qKiBUaGF0J3MgYSBzb2xpZCBzdGFydGluZyBwb2ludC4gTm93LCB0aGUga2V5IHF1ZXN0aW9uIGJlY29tZXMsIGNhbiB3ZSBhY3R1YWxseSByZWFjaCBgYnJjbWZfY3l3X2V4dGVybmFsX2F1dGhgIHRocm91Z2ggdGhlIFVTQiBpbnRlcmZhY2U/IFdlIG5lZWQgdG8gYXNjZXJ0YWluIHRoYXQgY29ubmVjdGlvbiBwYXRoLiBBbmQgdG8gZG8gdGhhdCwgSSBuZWVkIHRvIHRyYWNlIGl0cyB1c2FnZS4gU3BlY2lmaWNhbGx5LCB3aGVyZSBpcyBgYnJjbWZfY3l3X2dldF9jZmc4MDIxMV9vcHNgIGJlaW5nIGNhbGxlZCBmcm9tPyBUaGF0IGZ1bmN0aW9uIGNhbGwgaG9sZHMgdGhlIGtleSB0byBtYXBwaW5nIHRoZSBpbnRlcmFjdGlvbnMgaW52b2x2ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxNjIsIk91dHB1dFRva2VucyI6NTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNjo0MDowOC4xNDkwODM0NjJaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDIyMTQzNzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnJjbWZfY3l3X2dldF9jZmc4MDIxMV9vcHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L2NvcmUuYz0xOTg9YnJjbWZfY3l3X2V4dGVybmFsX2F1dGgoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvY29yZS5jLTIzMy1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L2NvcmUuYzoyMzQ6c3RhdGljIHZvaWQgYnJjbWZfY3l3X2dldF9jZmc4MDIxMV9vcHMoc3RydWN0IGJyY21mX3B1YiAqZHJ2cilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L2NvcmUuYy0yMzUte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmM9Mzc0PWNvbnN0IHN0cnVjdCBicmNtZl9md3ZpZF9vcHMgYnJjbWZfY3l3X29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvY29yZS5jLTM3Ny1cXHQuYWN0aXZhdGVfZXZlbnRzID0gYnJjbWZfY3l3X2FjdGl2YXRlX2V2ZW50cyxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L2NvcmUuYzozNzg6XFx0LmdldF9jZmc4MDIxMV9vcHMgPSBicmNtZl9jeXdfZ2V0X2NmZzgwMjExX29wcyxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L2NvcmUuYy0zNzktXFx0LnJlZ2lzdGVyX2V2ZW50X2hhbmRsZXJzID0gYnJjbWZfY3l3X3JlZ2lzdGVyX2V2ZW50X2hhbmRsZXJzLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNjo0MDowOC4xOTEzMDIzNjFaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTk3NTA1ODMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKldoZXJlIERvZXMgYGJyY21mX2N5d19vcHNgIEFjdHVhbGx5IExpdmU/KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgYnJjbWZfY3l3X29wc2AgdGhpbmcsIGFuZCBteSBmaXJzdCB0aG91Z2h0IGlzLCBcIldoZXJlICpleGFjdGx5KiBpcyB0aGlzIGRyaXZlciBpbnRlcmZhY2UgdXRpbGl6ZWQ/XCIgSXQncyBub3QgZW5vdWdoIHRvIGtub3cgaXQgKmV4aXN0cyosIEkgbmVlZCB0byBxdWlja2x5IGVzdGFibGlzaCB0aGUgc2NvcGUgb2YgaXRzIHVzYWdlLiBJIGltbWVkaWF0ZWx5IG5lZWQgdG8gY29ubmVjdCB0aGUgZG90cyAtIGlzIHRoaXMgb25seSBpbnNpZGUgdGhlIEJyb2FkY29tIFdpLUZpIGRyaXZlciwgb3IgZG9lcyBpdCBwb3RlbnRpYWxseSBoYXZlIGJyb2FkZXIgaW1wbGljYXRpb25zIGFjcm9zcyB0aGUgc3lzdGVtPyBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIHZhcmlvdXMga2VybmVsIG1vZHVsZXMsIG5ldHdvcmsgaW50ZXJmYWNlcywgYW5kIG1heWJlIGV2ZW4gdXNlci1zcGFjZSB1dGlsaXRpZXMgdGhhdCBjb3VsZCBiZSB0b3VjaGluZyB0aGlzLiBNeSBnb2FsIGlzIHRvIHF1aWNrbHkgbWFwIG91dCB0aGUgZnVuY3Rpb24gY2FsbHMgYW5kIGRlcGVuZGVuY2llcyB0byBnZXQgYSBtZW50YWwgcGljdHVyZSBvZiBpdHMgcm9sZSBpbiB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUuIEnigJltIHRoaW5raW5nIEkgd2lsbCBuZWVkIHRvIHVzZSBhIGdyZXAgb3IgZmluZCBjb21tYW5kIHRvIHNlZSB0aGUgaW5jbHVkZSBmaWxlcyB0aGF0IHJlZmVyZW5jZSB0aGUgc3ltYm9scy4gSXQncyBhIGZ1bmRhbWVudGFsIHF1ZXN0aW9uIHRoYXQgZGljdGF0ZXMgaG93IEkgc2hvdWxkIGFwcHJvYWNoIGZ1cnRoZXIgYW5hbHlzaXMuIFdpdGhvdXQgdGhpcyBiYXNpYyBjb250ZXh0LCBhbnkgZGVlcGVyIGRpdmUgd291bGQgYmUganVzdCBzcGlubmluZyBteSB3aGVlbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ4MzYsIk91dHB1dFRva2VucyI6NTAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNjo0MDoxMi43ODg4MTA4NDFaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQwNzMwNTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJyY21mX2N5d19vcHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L2NvcmUuYz0zNjI9c3RhdGljIHZvaWQgYnJjbWZfY3l3X3JlZ2lzdGVyX2V2ZW50X2hhbmRsZXJzKHN0cnVjdCBicmNtZl9wdWIgKmRydnIpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L2NvcmUuYy0zNzMtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmM6Mzc0OmNvbnN0IHN0cnVjdCBicmNtZl9md3ZpZF9vcHMgYnJjbWZfY3l3X29wcyA9IHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L2NvcmUuYy0zNzUtXFx0LnNldF9zYWVfcGFzc3dvcmQgPSBicmNtZl9jeXdfc2V0X3NhZV9wd2QsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L21vZHVsZS5jPTEyPXN0YXRpYyBpbnQgX19pbml0IGJyY21mX2N5d19pbml0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L21vZHVsZS5jLTE0LVxcdHJldHVybiBicmNtZl9md3ZpZF9yZWdpc3Rlcl92ZW5kb3IoQlJDTUZfRldWRU5ET1JfQ1lXLCBUSElTX01PRFVMRSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L21vZHVsZS5jOjE1OlxcdFxcdFxcdFxcdFxcdCAgIFxcdTAwMjZicmNtZl9jeXdfb3BzKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L21vZHVsZS5jLTE2LX1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvdm9wcy5oLTctXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy92b3BzLmg6ODpleHRlcm4gY29uc3Qgc3RydWN0IGJyY21mX2Z3dmlkX29wcyBicmNtZl9jeXdfb3BzO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvdm9wcy5oOjk6I2RlZmluZSBDWVdfVk9QU1xcdChcXHUwMDI2YnJjbWZfY3l3X29wcylcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L3ZvcHMuaC0xMC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDY6NDA6MTIuODI5NTQ3MDlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDExNzU0MzI0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJSQ01GIFdpLUZpIERyaXZlcidzIEF1dGhlbnRpY2F0aW9uIEZsb3cqKlxuXG5Pa2F5LCBzbyBgYnJjbWZfY3l3X29wc2AgaXMgcmVnaXN0ZXJlZCwgc3BlY2lmaWNhbGx5IGZvciB0aGF0IGBCUkNNRl9GV1ZFTkRPUl9DWVdgIGZpcm13YXJlIHZlbmRvci4gUmlnaHQsIFdpLUZpIGRyaXZlci4gVGhlIGNvZGUgY2hhbmdlIGlzIHBpbm5lZCB0byBgYnJjbWZfY3l3X2V4dGVybmFsX2F1dGhgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJDYW4gdGhpcyBiZSB0cmlnZ2VyZWQgdGhyb3VnaCB0aGUgc3RhbmRhcmQgbWFjODAyMTEvY2ZnODAyMTEgaW50ZXJmYWNlcz9cIiBBIHF1aWNrIHNjYW4gY29uZmlybXMgaXQ7IGBleHRlcm5hbF9hdXRoYCAqaXMqIGEgY2ZnODAyMTEgb3BlcmF0aW9uLiBHb29kLlxuXG5XYWl0IGEgc2Vjb25kLCBsZXQgbWUgc29saWRpZnkgdGhpcy4uLiBgZHJ2ci1cdTAwM2VvcHMtXHUwMDNlZXh0ZXJuYWxfYXV0aGAgaXMgYWN0dWFsbHkgYXNzaWduZWQgdG8gcG9pbnQgdG8gb3VyIGBicmNtZl9jeXdfZXh0ZXJuYWxfYXV0aGAgZnVuY3Rpb24uIE5vdywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHBpbnBvaW50IHdoZXJlIGBkcnZyLVx1MDAzZW9wcy1cdTAwM2VleHRlcm5hbF9hdXRoYCBpcyAqY2FsbGVkKiB0byB1bmRlcnN0YW5kIHRoZSBkYXRhIGZsb3cuIExldCdzIHRyYWNlIHRob3NlIGNhbGwgc2l0ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU3MTMsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDY6NDA6MTYuOTQ3MDkyNDk1WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MDg1OTQxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJleHRlcm5hbF9hdXRoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmM9MTk3PXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L2NvcmUuYzoxOTg6YnJjbWZfY3l3X2V4dGVybmFsX2F1dGgoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L2NvcmUuYzoxOTk6XFx0XFx0XFx0c3RydWN0IGNmZzgwMjExX2V4dGVybmFsX2F1dGhfcGFyYW1zICpwYXJhbXMpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmMtMjAwLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvY29yZS5jPTIzND1zdGF0aWMgdm9pZCBicmNtZl9jeXdfZ2V0X2NmZzgwMjExX29wcyhzdHJ1Y3QgYnJjbWZfcHViICpkcnZyKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmMtMjM2LVxcdGRydnItXFx1MDAzZW9wcy1cXHUwMDNlbWdtdF90eCA9IGJyY21mX2N5d19tZ210X3R4O1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvY29yZS5jOjIzNzpcXHRkcnZyLVxcdTAwM2VvcHMtXFx1MDAzZWV4dGVybmFsX2F1dGggPSBicmNtZl9jeXdfZXh0ZXJuYWxfYXV0aDtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L2NvcmUuYy0yMzgtfVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmM9MjQxPWJyY21mX2N5d19ub3RpZnlfZXh0X2F1dGhfcmVxKHN0cnVjdCBicmNtZl9pZiAqaWZwLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmMtMjQ0LVxcdHN0cnVjdCBicmNtZl9wdWIgKmRydnIgPSBpZnAtXFx1MDAzZWRydnI7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmM6MjQ1OlxcdHN0cnVjdCBjZmc4MDIxMV9leHRlcm5hbF9hdXRoX3BhcmFtcyBwYXJhbXM7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmMtMjQ2LVxcdHN0cnVjdCBicmNtZl9hdXRoX3JlcV9zdGF0dXNfbGUgKmF1dGhfcmVxID1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvY29yZS5jLTI2Ni1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L2NvcmUuYzoyNjc6XFx0ZXJyID0gY2ZnODAyMTFfZXh0ZXJuYWxfYXV0aF9yZXF1ZXN0KGlmcC1cXHUwMDNlbmRldiwgXFx1MDAyNnBhcmFtcywgR0ZQX0tFUk5FTCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmMtMjY4LVxcdGlmIChlcnIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA2OjQwOjE2Ljk4Nzk1NjE3NFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjQwMzY4NzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBkZWVwIGluIHRoZSB3ZWVkcyBvZiB3aXJlbGVzcyBkcml2ZXIgZGV2ZWxvcG1lbnQ6XG5cbioqSW5pdGlhbCBJbnZlc3RpZ2F0aW9uIGludG8gYSBjZmc4MDIxMSBPcGVyYXRpb24qKlxuXG5SaWdodCwgc28gYGRydnItXHUwMDNlb3BzLVx1MDAzZWV4dGVybmFsX2F1dGhgLiBUaGF0J3MgaW1tZWRpYXRlbHkgdHJpZ2dlcmluZyBhIGNmZzgwMjExIGZsYWcuIEkga25vdyB0aGF0IG1lYW5zIGl0J3Mgb25lIG9mIHRoZSBzdGFuZGFyZGl6ZWQgb3BlcmF0aW9ucyB0aGF0IHRoZSBjZmc4MDIxMSBsYXllciBkZWZpbmVzIGZvciB3aXJlbGVzcyBkcml2ZXJzLiBPa2F5LCB0aGUgY3JpdGljYWwgc3RlcCBpcyB0byBxdWlja2x5IGNvbmZpcm0gdGhlIGFzc2lnbm1lbnQgLSB3aGVyZSBpcyB0aGlzIGBleHRlcm5hbF9hdXRoYCBvcGVyYXRpb24gYWN0dWFsbHkgaG9va2VkIHVwPyBUaW1lIHRvIGRpdmUgaW50byB0aGUgc291cmNlIGNvZGUsIHNwZWNpZmljYWxseSBgZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmNgLiBUaGF0J3Mgd2hlcmUgSSdtIGV4cGVjdGluZyB0byBmaW5kIHRoZSBjb25uZWN0aW9uIGJldHdlZW4gd2hhdCdzIGluIHRoZSBkcml2ZXIncyBvcGVyYXRpb24gc3RydWN0dXJlIGFuZCB0aGUgY2ZnODAyMTEgZnJhbWV3b3JrIGl0c2VsZi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBgZXh0ZXJuYWxfYXV0aGAgaXMgcHJvcGVybHkgbGlua2VkIHdpdGggdGhlIGBjZmc4MDIxMV9vcHNgIHN0cnVjdHVyZS4gVGhpcyBpcyBhIGNydWNpYWwgZmlyc3Qgc3RlcCBpbiB1bmRlcnN0YW5kaW5nIGhvdyB0aGlzIGV4dGVybmFsIGF1dGhlbnRpY2F0aW9uIGZ1bmN0aW9uYWxpdHkgaXMgaW50ZWdyYXRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6Njg1OSwiT3V0cHV0VG9rZW5zIjo1MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA2OjQwOjIwLjYyODMyODcyM1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzk4NDQyNzksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImV4dGVybmFsX2F1dGhcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA2OjQwOjIwLjY2ODE4MDc2MloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjM1NDI4ODAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBpc3N1ZTpcblxuKipEZWx2aW5nIGludG8gdGhlIERyaXZlciBPcGVyYXRpb25zIFN0cnVjdHVyZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYGRydnItXHUwMDNlb3BzYCBzdHJ1Y3R1cmUsIGFuZCBteSBndXQgdGVsbHMgbWUgaXQncyBoaWdobHkgbGlrZWx5IHBvaW50aW5nIHRvIGBjZmc4MDIxMV9vcHNgLiBHaXZlbiB0aGUgY29udGV4dCwgdGhhdCdzIHRoZSBtb3N0IHByb2JhYmxlIGltcGxlbWVudGF0aW9uLiBUbyBjb25maXJtIHRoaXMsIEkgbmVlZCB0byBzZWUgZXhhY3RseSB3aGVyZSBgZHJ2ci1cdTAwM2VvcHNgIGlzIGRlZmluZWQuIEtub3dpbmcgaXRzIGRlY2xhcmF0aW9uIHdpbGwgY2xhcmlmeSB0aGUgaW50ZW5kZWQgcHVycG9zZSBhbmQgY29uZmlybSBteSBpbml0aWFsIGh5cG90aGVzaXMgYWJvdXQgaXRzIHR5cGUuIEknbGwgdHJhY2UgYmFjayB0byB0aGUgZGVmaW5pdGlvbiBhbmQgdmVyaWZ5IGlmIEknbSBvbiB0aGUgcmlnaHQgdHJhY2sgYmVmb3JlIGdvaW5nIGFueSBmdXJ0aGVyIGRvd24gdGhpcyByYWJiaXQgaG9sZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzI0MywiT3V0cHV0VG9rZW5zIjo0NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA2OjQwOjIzLjkwMzYxMTYyNFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDExMTgxOTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwib3BzLVxcdTAwM2VleHRlcm5hbF9hdXRoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmM9MjM0PXN0YXRpYyB2b2lkIGJyY21mX2N5d19nZXRfY2ZnODAyMTFfb3BzKHN0cnVjdCBicmNtZl9wdWIgKmRydnIpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L2NvcmUuYy0yMzYtXFx0ZHJ2ci1cXHUwMDNlb3BzLVxcdTAwM2VtZ210X3R4ID0gYnJjbWZfY3l3X21nbXRfdHg7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmM6MjM3OlxcdGRydnItXFx1MDAzZW9wcy1cXHUwMDNlZXh0ZXJuYWxfYXV0aCA9IGJyY21mX2N5d19leHRlcm5hbF9hdXRoO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvY29yZS5jLTIzOC19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA2OjQwOjIzLjk0NDczNTE4M1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3ODc1NDc3MDUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIERyaXZlciBPcGVyYXRpb25zIFN0cnVjdHVyZSoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEZpcnN0IHRoaW5ncyBmaXJzdCwgbGV0J3MgZGlzc2VjdCB3aGF0J3MgZ29pbmcgb24gdW5kZXIgdGhlIGhvb2QuIE15IGluaXRpYWwgZm9jdXMgaXMgYWx3YXlzIG9uIHRoZSBmdW5kYW1lbnRhbCBidWlsZGluZyBibG9ja3Mgb2YgdGhpcyBkcml2ZXIgaW1wbGVtZW50YXRpb24uIFNvLCBteSBtaW5kIGltbWVkaWF0ZWx5IHplcm9lcyBpbiBvbiB0aGF0IGBkcnZyLVx1MDAzZW9wc2Agc3RydWN0dXJlLiBJIG5lZWQgdG8gZXhwbGljaXRseSBjaGVjayBpdHMgdHlwZS4gVW5kZXJzdGFuZGluZyB0aGUgc3BlY2lmaWMgdHlwZSDigJMgd2hldGhlciBpdCdzIGEgYHN0cnVjdGAgSSBkZWZpbmVkLCBzb21ldGhpbmcgaW5oZXJpdGVkLCBvciBhbiBvcGFxdWUgcG9pbnRlciBvZiBzb21lIGtpbmQg4oCTIGlzIGFic29sdXRlbHkgY3JpdGljYWwuIFRoaXMgdHlwZSBkaWN0YXRlcyB0aGUgaW50ZXJmYWNlLCB0aGUgbWV0aG9kcyBhdmFpbGFibGUsIHRoZSBlbnRpcmUgZnJhbWV3b3JrIHRocm91Z2ggd2hpY2ggdGhlIGRyaXZlciBpbnRlcmFjdHMgd2l0aCB0aGUgc3lzdGVtLiBXaXRob3V0IGEgZmlybSBncmFzcCBvZiB0aGUgYGRydnItXHUwMDNlb3BzYCB0eXBlLCBhbnkgZnVydGhlciBhbmFseXNpcyBpcyBqdXN0IGd1ZXNzd29yay4gS25vd2luZyB0aGlzIHR5cGUgd2lsbCBpbmZvcm0gbWUgb2YgdGhlIG5leHQgc3RlcHMgdG8gdGFrZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzY4NywiT3V0cHV0VG9rZW5zIjo1NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA2OjQwOjMxLjgyMDIxNTAzM1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQzNDU3NDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IGNmZzgwMjExX29wcyBcXFxcKm9wcztcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYz02MDU1PXN0cnVjdCBjZmc4MDIxMV9vcHMgKmJyY21mX2NmZzgwMjExX2dldF9vcHMoc3RydWN0IGJyY21mX21wX2RldmljZSAqc2V0dGluZ3MpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtNjA1Ni17XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM6NjA1NzpcXHRzdHJ1Y3QgY2ZnODAyMTFfb3BzICpvcHM7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtNjA1OC1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmM9MTMzMD1pbnQgYnJjbWZfYWxsb2Moc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgYnJjbWZfbXBfZGV2aWNlICpzZXR0aW5ncylcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmMtMTMzMi1cXHRzdHJ1Y3Qgd2lwaHkgKndpcGh5O1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmM6MTMzMzpcXHRzdHJ1Y3QgY2ZnODAyMTFfb3BzICpvcHM7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuYy0xMzM0LVxcdHN0cnVjdCBicmNtZl9wdWIgKmRydnIgPSBOVUxMO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuaD0xMDE9c3RydWN0IGJyY21mX3B1YiB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5oLTEwNS1cXHRzdHJ1Y3Qgd2lwaHkgKndpcGh5O1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmg6MTA2OlxcdHN0cnVjdCBjZmc4MDIxMV9vcHMgKm9wcztcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5oLTEwNy1cXHRzdHJ1Y3QgYnJjbWZfY2ZnODAyMTFfaW5mbyAqY29uZmlnO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNjo0MDozMS44NjQ1Njc1MDJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzQ5OTMwNDIxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIHRoZSBgYnJjbWZfY3l3X2V4dGVybmFsX2F1dGhgIEZ1bmN0aW9uKipcblxuT2theSwgc28gYGRydnItXHUwMDNlb3BzYCBpcyBkZWZpbml0ZWx5IGEgYHN0cnVjdCBjZmc4MDIxMV9vcHMgKm9wc2AsIG1lYW5pbmcgYGJyY21mX2N5d19leHRlcm5hbF9hdXRoYCBpcyByZWdpc3RlcmVkIGFzIGEgY2ZnODAyMTEgb3BlcmF0aW9uLiBUaGF0J3MgZ29vZDsgY2ZnODAyMTEgb3BlcmF0aW9ucyBhcmUgZnV6emVhYmxlIHZpYSBuZXRsaW5rLCBzcGVjaWZpY2FsbHkgbmw4MDIxMS4gVGhlIGltbWVkaWF0ZSBnb2FsIGlzIHRvIGZpZ3VyZSBvdXQgaG93IHRvIGRvIHNvLlxuXG5CdXQsIGEgcXVpY2sgcmVhbGl0eSBjaGVjayDigJMgdGhlIGRyaXZlciBpbiBxdWVzdGlvbiBpcyBgYnJjbWZtYWNgLiBUbyBldmVuICpyZWFjaCogdGhhdCBjb2RlLCB0aGUgZHJpdmVyIG5lZWRzIHRvIGJlIGxvYWRlZCwgYW5kIGEgZGV2aWNlIG5lZWRzIHRvIGJlIHByZXNlbnQuIFNvIHRoZSBmdXp6aW5nIHNldHVwIHdpbGwgcmVxdWlyZSBhIGJpdCBtb3JlIHdvcmsgdGhhbiBzaW1wbHkgY3JhZnRpbmcgc29tZSBuZXRsaW5rIG1lc3NhZ2VzLlxuXG5UaGUgcXVlc3Rpb24gdGhlbiBiZWNvbWVzOiBjYW4gSSBlbXVsYXRlIGEgYGJyY21mbWFjYCBkZXZpY2UgaW4gUUVNVT8gVHlwaWNhbGx5LCBgYnJjbWZtYWNgIHJlbGllcyBvbiBhIHBoeXNpY2FsIFNESU8sIFVTQiwgb3IgUENJZSBkZXZpY2UgYW5kIGl0cyBhc3NvY2lhdGVkIGZpcm13YXJlLiBgbWFjODAyMTFfaHdzaW1gIGlzbid0IGdvaW5nIHRvIGN1dCBpdCwgc2luY2UgdGhhdCBlbXVsYXRlcyBtYWM4MDIxMSBkZXZpY2VzLCB3aGljaCBpcyBhIGRpZmZlcmVudCBiZWFzdCBmcm9tIGBicmNtZm1hY2AsIGEgRnVsbE1BQyBkcml2ZXIuXG5cblRoZSBuZXh0IHF1ZXN0aW9uOiBkb2VzIHN5emthbGxlciBoYXZlIGEgbWVhbnMgdG8gZW11bGF0ZSBgYnJjbWZtYWNgIHZpYSBVU0I/IFN5emthbGxlciAqZG9lcyogaGF2ZSBVU0IgZnV6emluZyBjYXBhYmlsaXRpZXMgdmlhIGB2aGNpYCwgd2hpY2ggbWVhbnMgaXQgY2FuIGVtdWxhdGUgVVNCIGRldmljZXMuIElmIGBicmNtZm1hY2Agc3VwcG9ydHMgVVNCLCBzcGVjaWZpY2FsbHkgaWYgYEJSQ01GTUFDX1VTQmAgaXMgZW5hYmxlZCwgdGhlbiBzeXprYWxsZXIgY291bGQgcG90ZW50aWFsbHkgZW11bGF0ZSBhIEJyb2FkY29tIFVTQiBXaS1GaSBkb25nbGUsIHdoaWNoIHdvdWxkIGJlIGlkZWFsLlxuXG5MZXQncyBjaGVjayBpZiBgQlJDTUZNQUNfVVNCYCBpcyBlbmFibGVkIGluIHN5emthbGxlcidzIHR5cGljYWwgY29uZmlndXJhdGlvbnMsIG9yIGlmIGl0IGNhbiBiZSBlbmFibGVkLiBJdCB0dXJucyBvdXQgdGhhdCBlbmFibGluZyBpdCBpcyBhIHZpYWJsZSBvcHRpb24uIE5vdywgaXQncyB0aW1lIHRvIGNoZWNrIGBkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmNgIHRvIGNvbmZpcm0gdGhhdCB0aGlzIGRyaXZlciBpcyBpbmRlZWQgYSBVU0IgZHJpdmVyLiBUaGlzIHdpbGwgY29uZmlybSB0aGUgdmlhYmlsaXR5IG9mIHRoaXMgZnV6emluZyBzdHJhdGVneS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODUwNiwiT3V0cHV0VG9rZW5zIjo0OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNjo0MDozOS4zNjM4NzQwNzVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxMTA3Nzk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJyY21mX3VzYl9wcm9iZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYz0xMTY1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnJjbWZfYnVzX29wcyBicmNtZl91c2JfYnVzX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xMTc1LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYzoxMTc2OnN0YXRpYyB2b2lkIGJyY21mX3VzYl9wcm9iZV9waGFzZTIoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgcmV0LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xMTc3LVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBicmNtZl9md19yZXF1ZXN0ICpmd3JlcSlcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYz0xMjI0PWJyY21mX3VzYl9wcmVwYXJlX2Z3X3JlcXVlc3Qoc3RydWN0IGJyY21mX3VzYmRldl9pbmZvICpkZXZpbmZvKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTEyNDMtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jOjEyNDQ6c3RhdGljIGludCBicmNtZl91c2JfcHJvYmVfY2Ioc3RydWN0IGJyY21mX3VzYmRldl9pbmZvICpkZXZpbmZvLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xMjQ1LVxcdFxcdFxcdCAgICAgIGVudW0gYnJjbWZfZnd2ZW5kb3IgZnd2aWQpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtMTMwOC1cXHQvKiByZXF1ZXN0IGZpcm13YXJlIGhlcmUgKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM6MTMwOTpcXHRyZXQgPSBicmNtZl9md19nZXRfZmlybXdhcmVzKGRldiwgZndyZXEsIGJyY21mX3VzYl9wcm9iZV9waGFzZTIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xMzEwLVxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYz0xMzQ0PXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM6MTM0NTpicmNtZl91c2JfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZClcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtMTM0Ni17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtMTQ0NS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM6MTQ0NjpcXHRyZXQgPSBicmNtZl91c2JfcHJvYmVfY2IoZGV2aW5mbywgaWQtXFx1MDAzZWRyaXZlcl9pbmZvKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtMTQ0Ny1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jPTE1MTQ9c3RhdGljIGludCBicmNtZl91c2JfcmVzZXRfcmVzdW1lKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTE1MjYtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jOjE1Mjc6XFx0cmV0ID0gYnJjbWZfZndfZ2V0X2Zpcm13YXJlcyhcXHUwMDI2dXNiLVxcdTAwM2VkZXYsIGZ3cmVxLCBicmNtZl91c2JfcHJvYmVfcGhhc2UyKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtMTUyOC1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYz0xNTY4PXN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBicmNtZl91c2JkcnZyID0ge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xNTY5LVxcdC5uYW1lID0gS0JVSUxEX01PRE5BTUUsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jOjE1NzA6XFx0LnByb2JlID0gYnJjbWZfdXNiX3Byb2JlLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xNTcxLVxcdC5kaXNjb25uZWN0ID0gYnJjbWZfdXNiX2Rpc2Nvbm5lY3QsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA2OjQwOjM5LjQwNDk4NTQwM1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NjM2NzY5MzA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYnJjbWZtYWMgRHJpdmVyIFByb2JlIFNlcXVlbmNlKipcblxuT2theSwgc28gYGJyY21mX3VzYl9wcm9iZWAgZGVmaW5pdGVseSBleGlzdHMuIFJpZ2h0LCBhbmQgaXQgbG9va3MgbGlrZSBgYnJjbWZfdXNiX3Byb2JlYCBjYWxscyBgYnJjbWZfZndfZ2V0X2Zpcm13YXJlc2AsIHdoaWNoLCBhcyB0aGUgbmFtZSBzdWdnZXN0cywgcmVxdWVzdHMgZmlybXdhcmUuIEhtbSwgaWYgdGhlIGZpcm13YXJlIGlzbid0IHByZXNlbnQsIHRoYXQgY291bGQgY2F1c2UgaXNzdWVzLiBTcGVjaWZpY2FsbHksIGl0IHNlZW1zIGxpa2UgYGJyY21mX3VzYl9wcm9iZV9waGFzZTJgIG1pZ2h0IG5vdCBldmVuIGJlIGNhbGxlZCwgb3IgcG90ZW50aWFsbHkgZmFpbCBpZiBpdCAqaXMqIGNhbGxlZCB3aXRob3V0IHRoZSBmaXJtd2FyZS4gQSBrZXkgcXVlc3Rpb24gaGVyZSBpcyB3aGV0aGVyIHN5emthbGxlciBwcm92aWRlcyB0aGUgbmVjZXNzYXJ5IGZpcm13YXJlIGZvciBgYnJjbWZtYWNgLlxuXG5JIGtub3cgc3l6a2FsbGVyICpjYW4qIGludGVyY2VwdCBmaXJtd2FyZSByZXF1ZXN0cywgYXNzdW1pbmcgYENPTkZJR19GV19MT0FERVJfVVNFUl9IRUxQRVJgIGlzIGVuYWJsZWQsIGJ1dCB0eXBpY2FsbHksIGl0J3MgY2xlYW5lciwgYW5kIG1vcmUgcm9idXN0LCBpZiB0aGUgZHJpdmVyIGRvZXNuJ3QgaGF2ZSBhIGhhcmQgZGVwZW5kZW5jeSBvbiB0aGUgZmlybXdhcmUgdG8gcmVhY2ggYSBjZXJ0YWluIGNvZGUgcGF0aCwgb3IgaWYgdGhlIGZpcm13YXJlIGNhbiBiZSBlYXNpbHkgbW9ja2VkIGZvciB0ZXN0aW5nLlxuXG5Ob3csIEknbSB0aGlua2luZyBhYm91dCBgYnJjbWZfY3l3X2V4dGVybmFsX2F1dGhgLiBJIHJlY2FsbCB0aGF0J3MgY2FsbGVkIHRocm91Z2ggYGNmZzgwMjExYCBvcGVyYXRpb25zLCByaWdodD8gVG8gaW50ZXJhY3Qgd2l0aCBgY2ZnODAyMTFgLCB0aGUgZHJpdmVyIGhhcyB0byBzdWNjZXNzZnVsbHkgcHJvYmUgKmFuZCogcmVnaXN0ZXIgdGhlIHdpcGh5LiBTbywgdGhhdCdzIHdoYXQgSSBuZWVkIHRvIGxvb2sgaW50byBub3cuIERvZXMgYGJyY21mX3VzYl9wcm9iZV9waGFzZTJgIGhhbmRsZSB0aGUgd2lwaHkgcmVnaXN0cmF0aW9uPyBJIG5lZWQgdG8gY2hlY2sgdGhlIGNvZGUgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNTEwLCJPdXRwdXRUb2tlbnMiOjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA2OjQwOjQ2LjA0MTc1NjY4MloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgzMjIzNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwid2lwaHlfcmVnaXN0ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYz04MzMyPXN0cnVjdCBicmNtZl9jZmc4MDIxMV9pbmZvICpicmNtZl9jZmc4MDIxMV9hdHRhY2goc3RydWN0IGJyY21mX3B1YiAqZHJ2cixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jLTg0MTYtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM6ODQxNzpcXHRlcnIgPSB3aXBoeV9yZWdpc3Rlcih3aXBoeSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtODQxOC1cXHRpZiAoZXJyIFxcdTAwM2MgMCkge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtODQyOC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYzo4NDI5OlxcdC8qIElmIGNmZzgwMjExIGRpZG4ndCBkaXNhYmxlIDQwTUh6IEhUIENBUCBpbiB3aXBoeV9yZWdpc3RlcigpLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jLTg0MzAtXFx0ICogc2V0dXAgNDBNSHogaW4gMkdIeiBiYW5kIGFuZCBlbmFibGUgT0JTUyBzY2FubmluZy5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDY6NDA6NDYuMDkwMDgzMDkxWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwODg0MjQ3NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKlRyYWNpbmcgdGhlIERyaXZlciBBdHRhY2htZW50KipcblxuT2theSwgc28gYGJyY21mX2NmZzgwMjExX2F0dGFjaGAgaXMgYSBrZXkgZnVuY3Rpb24gaGVyZS4gVGhlIGluaXRpYWwgY2x1ZSBpcyB0aGF0IGl0J3MgdGhlIGNhbGxlciBvZiBgd2lwaHlfcmVnaXN0ZXJgLCBhbmQgdGhhdCdzIHVzdWFsbHkgYSBwcmV0dHkgY2VudHJhbCBwb2ludCBpbiBhIHdpcmVsZXNzIGRyaXZlcidzIGluaXRpYWxpemF0aW9uLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBjb250ZXh0LiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byB0cmFjZSBiYWNrIGZyb20gYGJyY21mX2NmZzgwMjExX2F0dGFjaGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0ICp3aG8qIGlzIGNhbGxpbmcgKml0Ki4gVGhhdCdzIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaG93IHRoaXMgZHJpdmVyIGlzIGJlaW5nIGJyb3VnaHQgaW50byB0aGUgc3lzdGVtLiBLbm93aW5nIHRoZSBjYWxsZXIgdGVsbHMgbWUgd2hhdCB0cmlnZ2VycyB0aGlzIGF0dGFjaG1lbnQgcHJvY2Vzcy4gSSBuZWVkIHRvIGZpbmQgdGhlIGNhbGwgc2l0ZXMgZm9yIGBicmNtZl9jZmc4MDIxMV9hdHRhY2hgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTQ1OCwiT3V0cHV0VG9rZW5zIjo1NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA2OjQwOjUwLjE3ODUwOTg1N1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM3MzgzNjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnJjbWZfY2ZnODAyMTFfYXR0YWNoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM9ODMwNj1zdGF0aWMgdm9pZCBicmNtZl9mcmVlX3dpcGh5KHN0cnVjdCB3aXBoeSAqd2lwaHkpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy04MzMxLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jOjgzMzI6c3RydWN0IGJyY21mX2NmZzgwMjExX2luZm8gKmJyY21mX2NmZzgwMjExX2F0dGFjaChzdHJ1Y3QgYnJjbWZfcHViICpkcnZyLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jLTgzMzMtXFx0XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgY2ZnODAyMTFfb3BzICpvcHMsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuaD00NjE9YnJjbWZfY2ZnODAyMTFfY29ubmVjdF9pbmZvICpjZmdfdG9fY29ubihzdHJ1Y3QgYnJjbWZfY2ZnODAyMTFfaW5mbyAqY2ZnKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmgtNDY1LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5oOjQ2NjpzdHJ1Y3QgYnJjbWZfY2ZnODAyMTFfaW5mbyAqYnJjbWZfY2ZnODAyMTFfYXR0YWNoKHN0cnVjdCBicmNtZl9wdWIgKmRydnIsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmgtNDY3LVxcdFxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IGNmZzgwMjExX29wcyAqb3BzLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuYz0xMjI5PXN0YXRpYyBpbnQgYnJjbWZfYnVzX3N0YXJ0ZWQoc3RydWN0IGJyY21mX3B1YiAqZHJ2ciwgc3RydWN0IGNmZzgwMjExX29wcyAqb3BzKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuYy0xMjY2LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmM6MTI2NzpcXHRkcnZyLVxcdTAwM2Vjb25maWcgPSBicmNtZl9jZmc4MDIxMV9hdHRhY2goZHJ2ciwgb3BzLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmMtMTI2OC1cXHRcXHRcXHRcXHRcXHQgICAgIGRydnItXFx1MDAzZXNldHRpbmdzLVxcdTAwM2VwMnBfZW5hYmxlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDY6NDA6NTAuMjIyMjUyNzg1WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2ODE5MjYxMDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIGJyZWFrZG93biBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqVHJhY2luZyB0aGUgRHJpdmVyIEluaXRpYWxpemF0aW9uIFBhdGgqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgYGJyY21mYCBkcml2ZXIgaW5pdGlhbGl6YXRpb24sIGFuZCBteSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gaG93IGl0IGdldHMgZ29pbmcuIEkgc2VlIGBicmNtZl9idXNfc3RhcnRlZGAgaXMgdGhlIGtleSBmdW5jdGlvbiB0aGF0IGtpY2tzIHRoaW5ncyBvZmYuIE15IGV4cGVydCBrbm93bGVkZ2UgdGVsbHMgbWUgdGhhdCB0aGlzIGlzIGxpa2VseSBhIGNyaXRpY2FsIHBvaW50LlxuXG5Ob3csIEknbSB0aGlua2luZywgd2hlcmUgaXMgdGhpcyBgYnJjbWZfYnVzX3N0YXJ0ZWRgIGZ1bmN0aW9uIGFjdHVhbGx5ICpjYWxsZWQqPyBUaGF0J3MgdGhlIGNydWNpYWwgcXVlc3Rpb24uIEtub3dpbmcgaXRzIGNhbGwgc2l0ZXMgd2lsbCBhbGxvdyBtZSB0byBidWlsZCBhbiBhY2N1cmF0ZSBwaWN0dXJlIG9mIHRoZSBjb21wbGV0ZSBkcml2ZXIgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UsIGFuZCBmaW5kIHRoZSB0cmlnZ2VyIGZvciBjb25maWd1cmF0aW9uIHdpdGggYGJyY21mX2NmZzgwMjExX2F0dGFjaGAuIFVuZGVyc3RhbmRpbmcgdGhlIGVudHJ5IHBvaW50IHdpbGwgcG9pbnQgbWUgdG8gdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQsIGFuZCBoZWxwIG1lIHJlYXNvbiBhYm91dCBwb3RlbnRpYWwgaXNzdWVzIG9yIHRoZSBkcml2ZXIncyBiZWhhdmlvdXIuIEkgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gdGhpcyBmdW5jdGlvbiBhbmQgZmluZCBpdHMgcGFyZW50IHRvIHVuZGVyc3RhbmQgd2hhdCBldmVudCBvciBjaXJjdW1zdGFuY2UgdHJpZ2dlcnMgdGhlIGRyaXZlciBsb2FkIG9yIGluaXRpYWxpemF0aW9uIHByb2Nlc3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNDA1LCJPdXRwdXRUb2tlbnMiOjQ5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDY6NDA6NTQuOTA0MTgxMjczWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTg0MDc3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicmNtZl9idXNfc3RhcnRlZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb21tb24uYz02OD1NT0RVTEVfUEFSTV9ERVNDKGlhcHAsIFxcXCJFbmFibGUgcGFydGlhbCBzdXBwb3J0IGZvciB0aGUgb2Jzb2xldGVkIEludGVyLUFjY2VzcyBQb2ludCBQcm90b2NvbFxcXCIpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvbW1vbi5jLTcwLSNpZmRlZiBERUJVR1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb21tb24uYzo3MTovKiBhbHdheXMgc3VjY2VlZCBicmNtZl9idXNfc3RhcnRlZCgpICovXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvbW1vbi5jLTcyLXN0YXRpYyBpbnQgYnJjbWZfaWdub3JlX3Byb2JlX2ZhaWw7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jPTEyMjQ9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYnVzX3Jlc2V0X2ZvcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jLTEyMjgtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuYzoxMjI5OnN0YXRpYyBpbnQgYnJjbWZfYnVzX3N0YXJ0ZWQoc3RydWN0IGJyY21mX3B1YiAqZHJ2ciwgc3RydWN0IGNmZzgwMjExX29wcyAqb3BzKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmMtMTIzMC17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jPTEzNTk9aW50IGJyY21mX2F0dGFjaChzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jLTE0MDEtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuYzoxNDAyOlxcdHJldCA9IGJyY21mX2J1c19zdGFydGVkKGRydnIsIGRydnItXFx1MDAzZW9wcyk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuYy0xNDAzLVxcdGlmIChyZXQgIT0gMCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNjo0MDo1NC45NDYwMjY4NTJaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDAzNzU1MzgzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKlRyYWNpbmcgdGhlIERyaXZlciBJbml0aWFsaXphdGlvbiBQYXRoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYGJyY21mX2F0dGFjaGAuIFRoZSBjb2RlIGlzIHN0cnVjdHVyZWQgaW4gYSB3YXkgdGhhdCBzdWdnZXN0cyBpdCdzIHRoZSBjb3JlIGF0dGFjaG1lbnQgcG9pbnQgZm9yIHRoZSBCcm9hZGNvbSBXaS1GaSBkcml2ZXIuIEFuZCB3aXRoaW4gYGJyY21mX2F0dGFjaGAsIEkgc2VlIGEgY2FsbCB0byBgYnJjbWZfYnVzX3N0YXJ0ZWRgLiBUaGF0J3MgaW50ZXJlc3RpbmcsIGJ1dCBub3Qgc3VycHJpc2luZy4gSXQgbWFrZXMgc2Vuc2UgdGhhdCBpbml0aWFsaXphdGlvbiBvZiB0aGUgYnVzLXNwZWNpZmljIGludGVyZmFjZSB3b3VsZCBoYXBwZW4gZHVyaW5nIHRoZSBhdHRhY2htZW50IHByb2Nlc3MuXG5cblRoZSByZWFsIHF1ZXN0aW9uIEkgbmVlZCB0byBhbnN3ZXIgaXM6ICpXaGVyZSogZG9lcyBgYnJjbWZfYXR0YWNoYCBpdHNlbGYgZ2V0IGNhbGxlZD8gVW5kZXJzdGFuZGluZyB0aGUgY2FsbCBzdGFjayB0aGF0IGxlYWRzIHRvIGBicmNtZl9hdHRhY2hgIGlzIGNydWNpYWwgdG8gZnVsbHkgZ3Jhc3AgdGhlIGRyaXZlcidzIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlLiBJIG5lZWQgdG8ga25vdyB0aGUgZW50cnkgcG9pbnQuIElzIGl0IGNhbGxlZCBmcm9tIHRoZSBjb3JlIGtlcm5lbCBzdWJzeXN0ZW0sIG9yIGlzIGl0IHRyaWdnZXJlZCBieSBhIHBsYXRmb3JtLXNwZWNpZmljIGJyaW5nLXVwIHNlcXVlbmNlPyBLbm93aW5nICp3aGVyZSogaXQncyBjYWxsZWQgd2lsbCBoZWxwIG1lIGRldGVybWluZSB0aGUgdHJpZ2dlcmluZyBjb25kaXRpb25zLiBUaGF0IHdpbGwgZGlyZWN0IGZ1cnRoZXIgaW52ZXN0aWdhdGlvbiBvbiBob3cgdGhlIGRyaXZlcidzIG92ZXJhbGwgbGlmZWN5Y2xlIGlzIG1hbmFnZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMjMyLCJPdXRwdXRUb2tlbnMiOjQ3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDY6NDA6NTguOTgzNTgzMzA5WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Mjg1NDU5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicmNtZl9hdHRhY2hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYnVzLmg9MzA1PWludCBicmNtZl9hbGxvYyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBicmNtZl9tcF9kZXZpY2UgKnNldHRpbmdzKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYnVzLmgtMzA2LS8qIEluZGljYXRpb24gZnJvbSBidXMgbW9kdWxlIHJlZ2FyZGluZyBwcmVzZW5jZS9pbnNlcnRpb24gb2YgZG9uZ2xlLiAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9idXMuaDozMDc6aW50IGJyY21mX2F0dGFjaChzdHJ1Y3QgZGV2aWNlICpkZXYpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9idXMuaC0zMDgtLyogSW5kaWNhdGlvbiBmcm9tIGJ1cyBtb2R1bGUgcmVnYXJkaW5nIHJlbW92YWwvYWJzZW5jZSBvZiBkb25nbGUgKi9cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb21tb24uaC0xOC0gKiAobW9kdWxlKSBpbml0aWxpYXphdGlvbiB0YWtlcyBwbGFjZS4gVGhlIGRldmljZSBzcGVjaWZpYyBzZXR0aW5ncyBpcyBwYXJ0XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvbW1vbi5oOjE5OiAqIG9mIHRoZSBkcnZyIHN0cnVjdCBhbmQgc2hvdWxkIGJlIGluaXRpYWxpemVkIG9uIGV2ZXJ5IGJyY21mX2F0dGFjaC5cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29tbW9uLmgtMjAtICovXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jPTEzMzA9aW50IGJyY21mX2FsbG9jKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGJyY21mX21wX2RldmljZSAqc2V0dGluZ3MpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jLTEzNTgtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuYzoxMzU5OmludCBicmNtZl9hdHRhY2goc3RydWN0IGRldmljZSAqZGV2KVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmMtMTM2MC17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jPTE0NDY9dm9pZCBicmNtZl9md19jcmFzaGVkKHN0cnVjdCBkZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmMtMTQ1MC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jOjE0NTE6XFx0LyogTWF5IGZpcmUgYmVmb3JlIGJyY21mX2F0dGFjaCgpIHdpcmVzIHVwIGRydnIsIG9yIGFmdGVyIHJlbW92YWxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jLTE0NTItXFx0ICogaGFzIGNsZWFyZWQgaXQ7IGd1YXJkIHRoZSBkZXJlZnMgYmVsb3cgKGFuZCB0aGUgYXJtaW5nIGdhdGUgaW5cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmM9MjEzOT1zdGF0aWMgdm9pZCBicmNtZl9wY2llX3NldHVwKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHJldCxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmMtMjIxOS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jOjIyMjA6XFx0cmV0ID0gYnJjbWZfYXR0YWNoKFxcdTAwMjZkZXZpbmZvLVxcdTAwM2VwZGV2LVxcdTAwM2VkZXYpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmMtMjIyMS1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3NkaW8uYz00MjA5PXN0YXRpYyB2b2lkIGJyY21mX3NkaW9fZmlybXdhcmVfY2FsbGJhY2soc3RydWN0IGRldmljZSAqZGV2LCBpbnQgZXJyLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3NkaW8uYy00Mzk5LVxcdC8qIEF0dGFjaCB0byB0aGUgY29tbW9uIGxheWVyLCByZXNlcnZlIGhkciBzcGFjZSAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9zZGlvLmM6NDQwMDpcXHRlcnIgPSBicmNtZl9hdHRhY2goc2Rpb2QtXFx1MDAzZWRldik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3NkaW8uYy00NDAxLVxcdGlmIChlcnIgIT0gMCkge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9zZGlvLmM6NDQwMjpcXHRcXHRicmNtZl9lcnIoXFxcImJyY21mX2F0dGFjaCBmYWlsZWRcXFxcblxcXCIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9zZGlvLmMtNDQwMy1cXHRcXHRnb3RvIGZyZWU7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM9MTE3Nj1zdGF0aWMgdm9pZCBicmNtZl91c2JfcHJvYmVfcGhhc2UyKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHJldCxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xMjEwLVxcdC8qIEF0dGFjaCB0byB0aGUgY29tbW9uIGRyaXZlciBpbnRlcmZhY2UgKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM6MTIxMTpcXHRyZXQgPSBicmNtZl9hdHRhY2goZGV2aW5mby1cXHUwMDNlZGV2KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtMTIxMi1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jPTEyNDQ9c3RhdGljIGludCBicmNtZl91c2JfcHJvYmVfY2Ioc3RydWN0IGJyY21mX3VzYmRldl9pbmZvICpkZXZpbmZvLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTEyOTEtXFx0XFx0XFx0Z290byBmYWlsO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYzoxMjkyOlxcdFxcdHJldCA9IGJyY21mX2F0dGFjaChkZXZpbmZvLVxcdTAwM2VkZXYpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xMjkzLVxcdFxcdGlmIChyZXQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA2OjQwOjU5LjAyNjQ0MjQ3OFoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NjIzNzQ3MjY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVVNCIFByb2JlIFBoYXNlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlIGBicmNtZl91c2JfcHJvYmVfcGhhc2UyYCBmdW5jdGlvbiwgYW5kIGl0J3MgY2FsbGVkIGJ5IGBicmNtZl9hdHRhY2hgLCB3aGljaCBtYWtlcyBzZW5zZS4gSSBzZWUgdGhhdCBgYnJjbWZfdXNiX3Byb2JlX3BoYXNlMmAgaXRzZWxmIGlzIGludm9rZWQgYXMgYSBjYWxsYmFjayBmcm9tIGBicmNtZl9md19nZXRfZmlybXdhcmVzYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGhvdyBkb2VzIHRoaXMgY2FsbGJhY2sgaGFuZGxlIGVycm9yIGNvbmRpdGlvbnM/IFNwZWNpZmljYWxseSwgd2hhdCBoYXBwZW5zIGlmIGBicmNtZl9md19nZXRfZmlybXdhcmVzYCBmYWlscyB0byBmaW5kIHRoZSBuZWNlc3NhcnkgZmlybXdhcmUgYW5kIHJldHVybnMgYW4gZXJyb3IgdGhyb3VnaCB0aGlzIGNhbGxiYWNrPyBJIG5lZWQgdG8gZGlnIGludG8gYGJyY21mX3VzYl9wcm9iZV9waGFzZTJgIHRvIGNvbmZpcm0gdGhhdCBpdCBncmFjZWZ1bGx5IGhhbmRsZXMgdGhlIGVycm9yIGNvZGUgYW5kIHRha2VzIHRoZSBhcHByb3ByaWF0ZSBhY3Rpb24uIEl0J3MgYSBjcml0aWNhbCBwYXRoLCBhbmQgSSBuZWVkIHRvIGVuc3VyZSByb2J1c3QgZXJyb3IgbWFuYWdlbWVudCBpbiB0aGlzIHNlcXVlbmNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTAzMSwiT3V0cHV0VG9rZW5zIjo1MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNjo0MTowNi42NTAxOTIxOTdaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyNzQzOTE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJyY21mX3VzYl9wcm9iZV9waGFzZTJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM9MTE2NT1zdGF0aWMgY29uc3Qgc3RydWN0IGJyY21mX2J1c19vcHMgYnJjbWZfdXNiX2J1c19vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtMTE3NS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM6MTE3NjpzdGF0aWMgdm9pZCBicmNtZl91c2JfcHJvYmVfcGhhc2UyKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHJldCxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtMTE3Ny1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgYnJjbWZfZndfcmVxdWVzdCAqZndyZXEpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM9MTI0ND1zdGF0aWMgaW50IGJyY21mX3VzYl9wcm9iZV9jYihzdHJ1Y3QgYnJjbWZfdXNiZGV2X2luZm8gKmRldmluZm8sXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtMTMwOC1cXHQvKiByZXF1ZXN0IGZpcm13YXJlIGhlcmUgKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM6MTMwOTpcXHRyZXQgPSBicmNtZl9md19nZXRfZmlybXdhcmVzKGRldiwgZndyZXEsIGJyY21mX3VzYl9wcm9iZV9waGFzZTIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xMzEwLVxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYz0xNTE0PXN0YXRpYyBpbnQgYnJjbWZfdXNiX3Jlc2V0X3Jlc3VtZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xNTI2LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYzoxNTI3OlxcdHJldCA9IGJyY21mX2Z3X2dldF9maXJtd2FyZXMoXFx1MDAyNnVzYi1cXHUwMDNlZGV2LCBmd3JlcSwgYnJjbWZfdXNiX3Byb2JlX3BoYXNlMik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTE1MjgtXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA2OjQxOjA2LjY5Mjk0MTY3NVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTY2OTUwMTEyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIGBicmNtZl91c2JfcHJvYmVfcGhhc2UyYC4gSSdtIGdvaW5nIHRvIGFwcHJvYWNoIHRoaXMgd2l0aCB0aGUgYXNzdW1wdGlvbiB0aGF0IEkgdW5kZXJzdGFuZCB0aGUgYnJvYWRlciBkcml2ZXIgYXJjaGl0ZWN0dXJlIGFscmVhZHksIHNvIEkgY2FuIGZvY3VzIG9uIHRoZSBzcGVjaWZpY3Mgb2YgdGhpcyBwaGFzZS4gTXkgaW5pdGlhbCBxdWVzdGlvbiBpczogd2hhdCBpcyB0aGUgKnNwZWNpZmljKiByb2xlIHRoaXMgZnVuY3Rpb24gcGxheXMgd2l0aGluIHRoZSBVU0IgcHJvYmUgc2VxdWVuY2U/IElzIGl0IGhhbmRsaW5nIGRldmljZS1zcGVjaWZpYyBpbml0aWFsaXphdGlvbiwgcmVzb3VyY2UgYWxsb2NhdGlvbiwgb3IgaXMgaXQgbW9yZSBhYm91dCBmaXJtd2FyZSBsb2FkaW5nIG9yIGludGVyZmFjZSBjb25maWd1cmF0aW9uPyBVbmRlcnN0YW5kaW5nIGl0cyBwbGFjZSBpbiB0aGUgZ3JhbmQgc2NoZW1lIGlzIGtleSB0byBjb21wcmVoZW5kaW5nIGl0cyBsb2dpYy5cblxuSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgdGhlIGlucHV0IHBhcmFtZXRlcnMuIFdoYXQgYXJlIHRoZXksIGFuZCB3aGF0IGluZm9ybWF0aW9uIGRvIHRoZXkgcHJvdmlkZT8gQmFzZWQgb24gdGhlIGZ1bmN0aW9uIG5hbWUsIEknZCBleHBlY3QgaW5mb3JtYXRpb24gcmVsZXZhbnQgdG8gdGhlIFVTQiBkZXZpY2UgaXRzZWxmIGFuZCBsaWtlbHkgc29tZSBjb250ZXh0IGFib3V0IHRoZSBob3N0IGRyaXZlci4gSSdsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBkYXRhIHN0cnVjdHVyZXMgYmVpbmcgcGFzc2VkIGluLiBBcmUgdGhlcmUgYW55IHBvaW50ZXJzIHRvIHN0cnVjdHVyZXMgSSByZWNvZ25pemUgZnJvbSB0aGUgYnJvYWRlciBicmNtZiBkcml2ZXIgY29kZT8gVGhhdCB3aWxsIGltbWVkaWF0ZWx5IGhlbHAgb3JpZW50IG1lLlxuXG5Ob3csIEknbGwgc3RhcnQgdHJhY2luZyB0aGUgZXhlY3V0aW9uIGZsb3cuIEknbSBnb2luZyB0byBsb29rIGZvciBhbnkgb2J2aW91cyBjb250cm9sIGZsb3cgc3RhdGVtZW50cyDigJMgYGlmYCBzdGF0ZW1lbnRzLCBgc3dpdGNoYCBzdGF0ZW1lbnRzLCBsb29wcyDigJMgdGhhdCBnb3Zlcm4gaXRzIGJlaGF2aW9yLiBBcmUgdGhlcmUgY29uZGl0aW9uYWwgY2hlY2tzIGJhc2VkIG9uIGRldmljZSBpZGVudGlmaWVycywgVVNCIGNvbmZpZ3VyYXRpb24gZGVzY3JpcHRvcnMsIG9yIGRyaXZlciBmbGFncz8gSSdsbCBiZSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBhbnkgZXJyb3IgaGFuZGxpbmcuIFdoYXQgaGFwcGVucyBpZiB0aGluZ3MgZ28gd3Jvbmc/IEFyZSB0aGVyZSBhdHRlbXB0cyB0byByZXRyeSwgb3IgZG9lcyBpdCB0cmlnZ2VyIGEgZGV2aWNlIHJlc2V0PyBUaGF04oCZcyBhbHdheXMgYSBrZXkgcG9pbnQgdG8gdW5kZXJzdGFuZC5cblxuTmV4dCwgSSBuZWVkIHRvIHNlZSB3aGF0IHJlc291cmNlcyBhcmUgYmVpbmcgYWNjZXNzZWQgb3IgbW9kaWZpZWQuIElzIGl0IGludGVyYWN0aW5nIHdpdGggdGhlIFVTQiBidXMgZGlyZWN0bHkgdGhyb3VnaCBsaWJ1c2IgY2FsbHMsIG9yIGlzIGl0IHVzaW5nIHNvbWUgaGlnaGVyLWxldmVsIGFic3RyYWN0aW9uIHByb3ZpZGVkIGJ5IHRoZSBrZXJuZWw/IEFyZSB0aGVyZSBtZW1vcnkgYWxsb2NhdGlvbnMsIGludGVycnVwdCByZWdpc3RyYXRpb25zLCBvciBoYXJkd2FyZSByZWdpc3RlcnMgYmVpbmcgbWFuaXB1bGF0ZWQ/IEhvdyBhcmUgdGhlc2UgcmVzb3VyY2VzIG1hbmFnZWQ/IEkgZXhwZWN0IHRvIHNlZSB0aGUgc3RhbmRhcmQgbG9ja2luZyBwYXJhZGlnbXMgYW5kIG1lbW9yeSBtYW5hZ2VtZW50IGFzIHJlcXVpcmVkIGJ5IHRoZSBrZXJuZWwuXG5cbkZpbmFsbHksIEknbGwgbG9vayBmb3IgYW55IGludGVyYWN0aW9ucyB3aXRoIG90aGVyIGZ1bmN0aW9ucy4gRG9lcyB0aGlzIGZ1bmN0aW9uIGNhbGwgb3V0IHRvIG90aGVyIGBicmNtZmAgcm91dGluZXMsIG9yIGV2ZW4gdG8gdGhlIFVTQiBzdGFjaz8gVW5kZXJzdGFuZGluZyB0aGUgaW50ZXJhY3Rpb25zIHdpdGggdGhlIHJlc3Qgb2YgdGhlIHN0YWNrIHdpbGwgYmUgaW1wb3J0YW50LCBhcyB3aWxsIHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20sIGFuZCBob3cgaXRzIHJldHVybiB2YWx1ZXMgYXJlIGhhbmRsZWQgYnkgaXRzIGNhbGxlci4gRnJvbSB0aGVzZSBvYnNlcnZhdGlvbnMsIEkgc2hvdWxkIGJlIGFibGUgdG8gZGVkdWNlIHRoZSBjb3JlIHB1cnBvc2Ugb2YgYGJyY21mX3VzYl9wcm9iZV9waGFzZTJgIHdpdGhpbiB0aGUgYnJvYWRlciBicmNtZiBkcml2ZXIgYXJjaGl0ZWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTk1MywiT3V0cHV0VG9rZW5zIjo1NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA2OjQxOjE4LjM2MjQ0NTYyMVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MzI0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTE3NixcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTE3NjpcXHRzdGF0aWMgdm9pZCBicmNtZl91c2JfcHJvYmVfcGhhc2UyKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHJldCxcXG4xMTc3OlxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBicmNtZl9md19yZXF1ZXN0ICpmd3JlcSlcXG4xMTc4OlxcdHtcXG4xMTc5OlxcdFxcdHN0cnVjdCBicmNtZl9idXMgKmJ1cyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xcbjExODA6XFx0XFx0c3RydWN0IGJyY21mX3VzYmRldl9pbmZvICpkZXZpbmZvID0gYnVzLVxcdTAwM2VidXNfcHJpdi51c2ItXFx1MDAzZWRldmluZm87XFxuMTE4MTpcXHRcXHRjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3O1xcbjExODI6XFx0XFxuMTE4MzpcXHRcXHRpZiAocmV0KVxcbjExODQ6XFx0XFx0XFx0Z290byBlcnJvcjtcXG4xMTg1OlxcdFxcbjExODY6XFx0XFx0YnJjbWZfZGJnKFVTQiwgXFxcIlN0YXJ0IGZ3IGRvd25sb2FkaW5nXFxcXG5cXFwiKTtcXG4xMTg3OlxcdFxcbjExODg6XFx0XFx0ZncgPSBmd3JlcS1cXHUwMDNlaXRlbXNbQlJDTUZfVVNCX0ZXX0NPREVdLmJpbmFyeTtcXG4xMTg5OlxcdFxcdGtmcmVlKGZ3cmVxKTtcXG4xMTkwOlxcdFxcbjExOTE6XFx0XFx0cmV0ID0gY2hlY2tfZmlsZShmdy1cXHUwMDNlZGF0YSk7XFxuMTE5MjpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbjExOTM6XFx0XFx0XFx0YnJjbWZfZXJyKFxcXCJpbnZhbGlkIGZpcm13YXJlXFxcXG5cXFwiKTtcXG4xMTk0OlxcdFxcdFxcdHJlbGVhc2VfZmlybXdhcmUoZncpO1xcbjExOTU6XFx0XFx0XFx0Z290byBlcnJvcjtcXG4xMTk2OlxcdFxcdH1cXG4xMTk3OlxcdFxcbjExOTg6XFx0XFx0ZGV2aW5mby1cXHUwMDNlaW1hZ2UgPSBmdy1cXHUwMDNlZGF0YTtcXG4xMTk5OlxcdFxcdGRldmluZm8tXFx1MDAzZWltYWdlX2xlbiA9IGZ3LVxcdTAwM2VzaXplO1xcbjEyMDA6XFx0XFxuMTIwMTpcXHRcXHRyZXQgPSBicmNtZl91c2JfZndfZG93bmxvYWQoZGV2aW5mbyk7XFxuMTIwMjpcXHRcXHRyZWxlYXNlX2Zpcm13YXJlKGZ3KTtcXG4xMjAzOlxcdFxcdGlmIChyZXQpXFxuMTIwNDpcXHRcXHRcXHRnb3RvIGVycm9yO1xcbjEyMDU6XFx0XFxuMTIwNjpcXHRcXHRyZXQgPSBicmNtZl9hbGxvYyhkZXZpbmZvLVxcdTAwM2VkZXYsIGRldmluZm8tXFx1MDAzZXNldHRpbmdzKTtcXG4xMjA3OlxcdFxcdGlmIChyZXQpXFxuMTIwODpcXHRcXHRcXHRnb3RvIGVycm9yO1xcbjEyMDk6XFx0XFxuMTIxMDpcXHRcXHQvKiBBdHRhY2ggdG8gdGhlIGNvbW1vbiBkcml2ZXIgaW50ZXJmYWNlICovXFxuMTIxMTpcXHRcXHRyZXQgPSBicmNtZl9hdHRhY2goZGV2aW5mby1cXHUwMDNlZGV2KTtcXG4xMjEyOlxcdFxcdGlmIChyZXQpXFxuMTIxMzpcXHRcXHRcXHRnb3RvIGVycm9yO1xcbjEyMTQ6XFx0XFxuMTIxNTpcXHRcXHRjb21wbGV0ZShcXHUwMDI2ZGV2aW5mby1cXHUwMDNlZGV2X2luaXRfZG9uZSk7XFxuMTIxNjpcXHRcXHRyZXR1cm47XFxuMTIxNzpcXHRlcnJvcjpcXG4xMjE4OlxcdFxcdGJyY21mX2RiZyhUUkFDRSwgXFxcImZhaWxlZDogZGV2PSVzLCBlcnI9JWRcXFxcblxcXCIsIGRldl9uYW1lKGRldiksIHJldCk7XFxuMTIxOTpcXHRcXHRjb21wbGV0ZShcXHUwMDI2ZGV2aW5mby1cXHUwMDNlZGV2X2luaXRfZG9uZSk7XFxuMTIyMDpcXHRcXHRkZXZpY2VfcmVsZWFzZV9kcml2ZXIoZGV2KTtcXG4xMjIxOlxcdH1cXG4xMjIyOlxcdFxcbjEyMjM6XFx0c3RhdGljIHN0cnVjdCBicmNtZl9md19yZXF1ZXN0ICpcXG4xMjI0OlxcdGJyY21mX3VzYl9wcmVwYXJlX2Z3X3JlcXVlc3Qoc3RydWN0IGJyY21mX3VzYmRldl9pbmZvICpkZXZpbmZvKVxcbjEyMjU6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNjo0MToxOC4zNjI1Mzk5NTJaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjU3OTQxOTc0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEZpcm13YXJlIERlcGVuZGVuY3kgaW4gdGhlIEJyb2FkY29tIFVTQiBEcml2ZXIqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIEJyb2FkY29tIFVTQiBkcml2ZXIgaW5pdGlhbGl6YXRpb24sIGFuZCBpdCdzIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIGJ1dCB0aGVyZSdzIGEgY3J1Y2lhbCBkZXBlbmRlbmN5IG9uIHRoZSBmaXJtd2FyZS4gIElmIGByZXRgIGlzbid0IHplcm8g4oCTIG1lYW5pbmcgdGhlIGZpcm13YXJlIGlzbid0IGZvdW5kIGluaXRpYWxseSDigJMgd2UganVtcCB0byB0aGUgYGVycm9yYCBsYWJlbCBhbmQgaW1tZWRpYXRlbHkgY2FsbCBgZGV2aWNlX3JlbGVhc2VfZHJpdmVyKGRldilgLiAgVGhhdCdzIGEgcHJldHR5IHN0cm9uZyBpbmRpY2F0b3IgdGhhdCBmaXJtd2FyZSBpcyAqYWJzb2x1dGVseSogcmVxdWlyZWQgZm9yIHRoZSBkZXZpY2UgdG8gZXZlbiBhdHRhY2ggYW5kLCBjcml0aWNhbGx5LCByZWdpc3RlciB0aGUgV2ktRmkgUEhZIChgd2lwaHlgKS4gIEEgcXVpY2sgY2hlY2sgY29uZmlybXMgdGhhdCBgc3l6a2FsbGVyYCAqY2FuKiBoYW5kbGUgcHJvdmlkaW5nIHRoZSBmaXJtd2FyZS4gSXQgaGFzIHRoYXQgY292ZXJlZCwgZWl0aGVyIHRocm91Z2ggdGhlIGBDT05GSUdfRldfTE9BREVSX1VTRVJfSEVMUEVSYCBjb25maWd1cmF0aW9uIG9wdGlvbiwgb3Igc2ltcGx5IGJ5IHB1dHRpbmcgdGhlIGZpcm13YXJlIGluIHRoZSByb290IGZpbGVzeXN0ZW0uXG5cbkJ1dCBob2xkIG9uLCB0aGVyZSdzIGBicmNtZl91c2JfZndfZG93bmxvYWRgLiBUaGF0IGZ1bmN0aW9uJ3Mgam9iIGlzIGV4cGxpY2l0bHkgdG8gZG93bmxvYWQgdGhlIGZpcm13YXJlICp0byogdGhlIFVTQiBkZXZpY2UgaXRzZWxmLiBJZiBgc3l6a2FsbGVyYCBpcyBlbXVsYXRpbmcgdGhpcyBVU0IgZGV2aWNlIChsaWtlbHkgdmlhIGB2aGNpYCksIHRoZW4gaXQncyBnb2luZyB0byBpbnRlcmNlcHQgdGhvc2UgZmlybXdhcmUgZG93bmxvYWQgY29tbWFuZHMuIFNvLCBgc3l6a2FsbGVyYCBzaG91bGQgYmUgYWJsZSB0byBhY2tub3dsZWRnZSB0aGVtLCBkb3dubG9hZCB0aGUgZmlybXdhcmUsIGFuZCB0aGVuIGBicmNtZl9hdHRhY2hgIGlzIGNhbGxlZC4gU28sIHRoZSBxdWVzdGlvbiByZW1haW5zOiBpcyBgYnJjbWZfYXR0YWNoYCBpbnRlcmFjdGluZyB3aXRoIHRoZSBoYXJkd2FyZSB3aGljaCBjb3VsZCBjYXVzZSBpdCB0byBmYWlsLCBpZiB0aGUgZW11bGF0ZWQgZGV2aWNlIGRvZXMgbm90IGNvcnJlY3RseSByZXNwb25kPyBOb3csIGxldCdzIGRpdmUgaW50byBgYnJjbWZfYXR0YWNoYCBhbmQgc2VlIGlmIHRoZXJlIGFyZSBhbnkgc3VidGxlIGhhcmR3YXJlIGludGVyYWN0aW9ucyB0aGF0IHdlIG5lZWQgdG8gYWNjb3VudCBmb3IgaW4gdGhlIGVtdWxhdGlvbiBwcm9jZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzIzNCwiT3V0cHV0VG9rZW5zIjo1MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA2OjQxOjI0Ljk0MTk2MTcxMloiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM0NDI0NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnJjbWZfYXR0YWNoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuYz0xMzMwPWludCBicmNtZl9hbGxvYyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBicmNtZl9tcF9kZXZpY2UgKnNldHRpbmdzKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuYy0xMzU4LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmM6MTM1OTppbnQgYnJjbWZfYXR0YWNoKHN0cnVjdCBkZXZpY2UgKmRldilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jLTEzNjAte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuYz0xNDQ2PXZvaWQgYnJjbWZfZndfY3Jhc2hlZChzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jLTE0NTAtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuYzoxNDUxOlxcdC8qIE1heSBmaXJlIGJlZm9yZSBicmNtZl9hdHRhY2goKSB3aXJlcyB1cCBkcnZyLCBvciBhZnRlciByZW1vdmFsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuYy0xNDUyLVxcdCAqIGhhcyBjbGVhcmVkIGl0OyBndWFyZCB0aGUgZGVyZWZzIGJlbG93IChhbmQgdGhlIGFybWluZyBnYXRlIGluXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA2OjQxOjI0Ljk4NTQxMTkwMVoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTcyNzI5NTIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYSBzZWFzb25lZCBwcm9mZXNzaW9uYWwgaW4gdGhlIGZpZWxkLCBzdGFydGluZyB3aXRoIHRoZSBib2xkZWQgaGVhZGVyOlxuXG4qKkRpdmluZyBpbnRvIGBicmNtZl9hdHRhY2hgKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIFRoZSB0YXJnZXQgaGVyZSBpcyBgYnJjbWZfYXR0YWNoYC4gSSdtIGFscmVhZHkgYW50aWNpcGF0aW5nIHdoYXQgdG8gZXhwZWN0LCBidXQgbGV0J3Mgc2VlIGhvdyB3ZWxsIGl0IG1hcHMgdG8gbXkgbWVudGFsIG1vZGVsLiBVc3VhbGx5IGluIHRoZXNlIHNvcnRzIG9mIGRyaXZlcnMsIHRoaXMgaXMgdGhlIHBpdm90YWwgZnVuY3Rpb27igJQgdGhlIGdhdGV3YXkuIEl0J3MgdGhlIHBvaW50IHdoZXJlIGEgbmV3IGRldmljZSBpbnN0YW5jZSBnZXRzIGludGVncmF0ZWQgaW50byB0aGUgc3lzdGVtLiBJ4oCZbSB0aGlua2luZyBpbml0aWFsaXphdGlvbiwgcmVzb3VyY2UgYWxsb2NhdGlvbiwgYW5kIGJpbmRpbmcgdG8gdGhlIHJlbGV2YW50IGtlcm5lbCBzdWJzeXN0ZW1zIGFyZSBhbGwgbGlrZWx5IGNhbmRpZGF0ZXMgZm9yIHRoaXMgZnVuY3Rpb24ncyByZXNwb25zaWJpbGl0aWVzLiBUaGluZ3MgbGlrZSBoYXJkd2FyZSBpZGVudGlmaWNhdGlvbiwgc2V0dGluZyB1cCBETUEgY2hhbm5lbHMsIGVzdGFibGlzaGluZyBpbnRlcnJ1cHQgaGFuZGxlcnMuLi4gSSdtIHJlYWxseSBjdXJpb3VzIHRvIHNlZSBob3cgdGhlIEJyb2FkY29tIGRyaXZlciBtYW5hZ2VzIGl0cyBkZXZpY2UgY29udGV4dCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBmaXJtd2FyZS4gSXMgdGhlcmUgYSBzZXBhcmF0ZSBmaXJtd2FyZSBsb2FkIHN0YWdlPyBIb3cgZG9lcyBpdCBoYW5kbGUgcG90ZW50aWFsIGVycm9ycyBkdXJpbmcgYXR0YWNobWVudD8gQXJlIHRoZXJlIGFueSBjbGV2ZXIgdHJpY2tzIHRvIG9wdGltaXplIHRoZSBwcm9jZXNzLCBtYXliZSBzcGVjaWZpYyB0byB0aGVpciBjaGlwc2V0cz8gSSBrbm93IHRoZXNlIGRyaXZlcnMgY2FuIGdldCBjb252b2x1dGVkIHF1aWNrbHksIHNvIEknbGwgYmUga2VlcGluZyBhbiBleWUgb3V0IGZvciBhbnkgcGFydGljdWxhcmx5IGludGVyZXN0aW5nIG9yIHVuY29udmVudGlvbmFsIGFwcHJvYWNoZXMuIFRpbWUgdG8gZGlnIGluIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxODE4MSwiT3V0cHV0VG9rZW5zIjo1NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA2OjQxOjI5LjE1ODE0NTE0NFoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NDcxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEzNTksXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEzNTk6XFx0aW50IGJyY21mX2F0dGFjaChzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuMTM2MDpcXHR7XFxuMTM2MTpcXHRcXHRzdHJ1Y3QgYnJjbWZfYnVzICpidXNfaWYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTtcXG4xMzYyOlxcdFxcdHN0cnVjdCBicmNtZl9wdWIgKmRydnIgPSBidXNfaWYtXFx1MDAzZWRydnI7XFxuMTM2MzpcXHRcXHRpbnQgcmV0ID0gMDtcXG4xMzY0OlxcdFxcdGludCBpO1xcbjEzNjU6XFx0XFxuMTM2NjpcXHRcXHRicmNtZl9kYmcoVFJBQ0UsIFxcXCJFbnRlclxcXFxuXFxcIik7XFxuMTM2NzpcXHRcXG4xMzY4OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKGRydnItXFx1MDAzZWlmMmJzcyk7IGkrKylcXG4xMzY5OlxcdFxcdFxcdGRydnItXFx1MDAzZWlmMmJzc1tpXSA9IEJSQ01GX0JTU0lEWF9JTlZBTElEO1xcbjEzNzA6XFx0XFxuMTM3MTpcXHRcXHRtdXRleF9pbml0KFxcdTAwMjZkcnZyLVxcdTAwM2Vwcm90b19ibG9jayk7XFxuMTM3MjpcXHRcXG4xMzczOlxcdFxcdC8qIExpbmsgdG8gYnVzIG1vZHVsZSAqL1xcbjEzNzQ6XFx0XFx0ZHJ2ci1cXHUwMDNlaGRybGVuID0gMDtcXG4xMzc1OlxcdFxcbjEzNzY6XFx0XFx0cmV0ID0gYnJjbWZfZnd2aWRfYXR0YWNoKGRydnIpO1xcbjEzNzc6XFx0XFx0aWYgKHJldCAhPSAwKSB7XFxuMTM3ODpcXHRcXHRcXHRicGh5X2VycihkcnZyLCBcXFwiYnJjbWZfZnd2aWRfYXR0YWNoIGZhaWxlZFxcXFxuXFxcIik7XFxuMTM3OTpcXHRcXHRcXHRnb3RvIGZhaWw7XFxuMTM4MDpcXHRcXHR9XFxuMTM4MTpcXHRcXG4xMzgyOlxcdFxcdC8qIEF0dGFjaCBhbmQgbGluayBpbiB0aGUgcHJvdG9jb2wgKi9cXG4xMzgzOlxcdFxcdHJldCA9IGJyY21mX3Byb3RvX2F0dGFjaChkcnZyKTtcXG4xMzg0OlxcdFxcdGlmIChyZXQgIT0gMCkge1xcbjEzODU6XFx0XFx0XFx0YnBoeV9lcnIoZHJ2ciwgXFxcImJyY21mX3Byb3RfYXR0YWNoIGZhaWxlZFxcXFxuXFxcIik7XFxuMTM4NjpcXHRcXHRcXHRnb3RvIGZhaWw7XFxuMTM4NzpcXHRcXHR9XFxuMTM4ODpcXHRcXG4xMzg5OlxcdFxcdC8qIGF0dGFjaCBmaXJtd2FyZSBldmVudCBoYW5kbGVyICovXFxuMTM5MDpcXHRcXHRyZXQgPSBicmNtZl9md2VoX2F0dGFjaChkcnZyKTtcXG4xMzkxOlxcdFxcdGlmIChyZXQgIT0gMCkge1xcbjEzOTI6XFx0XFx0XFx0YnBoeV9lcnIoZHJ2ciwgXFxcImJyY21mX2Z3ZWhfYXR0YWNoIGZhaWxlZFxcXFxuXFxcIik7XFxuMTM5MzpcXHRcXHRcXHRnb3RvIGZhaWw7XFxuMTM5NDpcXHRcXHR9XFxuMTM5NTpcXHRcXG4xMzk2OlxcdFxcdC8qIEF0dGFjaCB0byBldmVudHMgaW1wb3J0YW50IGZvciBjb3JlIGNvZGUgKi9cXG4xMzk3OlxcdFxcdGJyY21mX2Z3ZWhfcmVnaXN0ZXIoZHJ2ciwgQlJDTUZfRV9QU01fV0FUQ0hET0csXFxuMTM5ODpcXHRcXHRcXHRcXHQgICAgYnJjbWZfcHNtX3dhdGNoZG9nX25vdGlmeSk7XFxuMTM5OTpcXHRcXG4xNDAwOlxcdFxcdGJyY21mX2Z3dmlkX2dldF9jZmc4MDIxMV9vcHMoZHJ2cik7XFxuMTQwMTpcXHRcXG4xNDAyOlxcdFxcdHJldCA9IGJyY21mX2J1c19zdGFydGVkKGRydnIsIGRydnItXFx1MDAzZW9wcyk7XFxuMTQwMzpcXHRcXHRpZiAocmV0ICE9IDApIHtcXG4xNDA0OlxcdFxcdFxcdGJwaHlfZXJyKGRydnIsIFxcXCJkb25nbGUgaXMgbm90IHJlc3BvbmRpbmc6IGVycj0lZFxcXFxuXFxcIiwgcmV0KTtcXG4xNDA1OlxcdFxcdFxcdGdvdG8gZmFpbDtcXG4xNDA2OlxcdFxcdH1cXG4xNDA3OlxcdFxcbjE0MDg6XFx0XFx0cmV0dXJuIDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA2OjQxOjI5LjE1ODI0MTQ4NFoiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjM0NzkzMzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBgYnJjbWZfYnVzX3N0YXJ0ZWRgIEZ1bmN0aW9uKipcblxuT2theSwgc28gdGhlIGBicmNtZl9idXNfc3RhcnRlZGAgZnVuY3Rpb24gaGFzIGJlZW4gY2FsbGVkLiBUaGF0J3MgbXkgc3RhcnRpbmcgcG9pbnQuIE5vdywgd2hhdCdzIGl0cyBwdXJwb3NlPyBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBjb2RlIGRlZmluaXRpb24gYW5kIHNlZSB3aGF0IGl0IGFjdHVhbGx5IGRvZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBmdW5jdGlvbiBpcyBkb2luZyBhdCB0aGUgdmVyeSBiZWdpbm5pbmcgb2YgdGhlIGJ1cyBpbml0aWFsaXphdGlvbiBwcm9jZXNzLCBhcyB0aGF0J3MgbXkgYXJlYSBvZiBleHBlcnRpc2UuIEknbGwgcmVhZCB0aGUgY29kZSBtZXRpY3Vsb3VzbHksIGZvY3VzaW5nIG9uIHRoZSBrZXkgb3BlcmF0aW9ucywgZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIG1hbmlwdWxhdGVkLCBhbmQgYW55IGVycm9yIGhhbmRsaW5nLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IHRoZSBkcml2ZXIncyBpbnRlcmFjdGlvbiB3aXRoIHRoZSBoYXJkd2FyZSwgZXNwZWNpYWxseSBpZiB0aGlzIGlzIGEgZHJpdmVyIEkga25vdyB3ZWxsLiBUaGlzIGlzIG15IGNoYW5jZSB0byBnYWluIGEgaGlnaC1sZXZlbCB1bmRlcnN0YW5kaW5nIG9mIHdoYXQgaGFwcGVucyBhdCB0aGUgdmVyeSBzdGFydC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkyODIsIk91dHB1dFRva2VucyI6NTQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA2OjQxOjMyLjc5MzAzNzI3NFoiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NTYzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyMjksXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEyMjk6XFx0c3RhdGljIGludCBicmNtZl9idXNfc3RhcnRlZChzdHJ1Y3QgYnJjbWZfcHViICpkcnZyLCBzdHJ1Y3QgY2ZnODAyMTFfb3BzICpvcHMpXFxuMTIzMDpcXHR7XFxuMTIzMTpcXHRcXHRpbnQgcmV0ID0gLTE7XFxuMTIzMjpcXHRcXHRzdHJ1Y3QgYnJjbWZfYnVzICpidXNfaWYgPSBkcnZyLVxcdTAwM2VidXNfaWY7XFxuMTIzMzpcXHRcXHRzdHJ1Y3QgYnJjbWZfaWYgKmlmcDtcXG4xMjM0OlxcdFxcdHN0cnVjdCBicmNtZl9pZiAqcDJwX2lmcDtcXG4xMjM1OlxcdFxcbjEyMzY6XFx0XFx0YnJjbWZfZGJnKFRSQUNFLCBcXFwiXFxcXG5cXFwiKTtcXG4xMjM3OlxcdFxcbjEyMzg6XFx0XFx0LyogYWRkIHByaW1hcnkgbmV0d29ya2luZyBpbnRlcmZhY2UgKi9cXG4xMjM5OlxcdFxcdGlmcCA9IGJyY21mX2FkZF9pZihkcnZyLCAwLCAwLCBmYWxzZSwgXFxcIndsYW4lZFxcXCIsXFxuMTI0MDpcXHRcXHRcXHRcXHQgICBpc192YWxpZF9ldGhlcl9hZGRyKGRydnItXFx1MDAzZXNldHRpbmdzLVxcdTAwM2VtYWMpID8gZHJ2ci1cXHUwMDNlc2V0dGluZ3MtXFx1MDAzZW1hYyA6IE5VTEwpO1xcbjEyNDE6XFx0XFx0aWYgKElTX0VSUihpZnApKVxcbjEyNDI6XFx0XFx0XFx0cmV0dXJuIFBUUl9FUlIoaWZwKTtcXG4xMjQzOlxcdFxcbjEyNDQ6XFx0XFx0cDJwX2lmcCA9IE5VTEw7XFxuMTI0NTpcXHRcXG4xMjQ2OlxcdFxcdC8qIHNpZ25hbCBidXMgcmVhZHkgKi9cXG4xMjQ3OlxcdFxcdGJyY21mX2J1c19jaGFuZ2Vfc3RhdGUoYnVzX2lmLCBCUkNNRl9CVVNfVVApO1xcbjEyNDg6XFx0XFxuMTI0OTpcXHRcXHQvKiBkbyBidXMgc3BlY2lmaWMgcHJlaW5pdCBoZXJlICovXFxuMTI1MDpcXHRcXHRyZXQgPSBicmNtZl9idXNfcHJlaW5pdChidXNfaWYpO1xcbjEyNTE6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuMTI1MjpcXHRcXHRcXHRnb3RvIGZhaWw7XFxuMTI1MzpcXHRcXG4xMjU0OlxcdFxcdC8qIEJ1cyBpcyByZWFkeSwgZG8gYW55IGluaXRpYWxpemF0aW9uICovXFxuMTI1NTpcXHRcXHRyZXQgPSBicmNtZl9jX3ByZWluaXRfZGNtZHMoaWZwKTtcXG4xMjU2OlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbjEyNTc6XFx0XFx0XFx0Z290byBmYWlsO1xcbjEyNTg6XFx0XFxuMTI1OTpcXHRcXHRicmNtZl9mZWF0X2F0dGFjaChkcnZyKTtcXG4xMjYwOlxcdFxcbjEyNjE6XFx0XFx0cmV0ID0gYnJjbWZfcHJvdG9faW5pdF9kb25lKGRydnIpO1xcbjEyNjI6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuMTI2MzpcXHRcXHRcXHRnb3RvIGZhaWw7XFxuMTI2NDpcXHRcXG4xMjY1OlxcdFxcdGJyY21mX3Byb3RvX2FkZF9pZihkcnZyLCBpZnApO1xcbjEyNjY6XFx0XFxuMTI2NzpcXHRcXHRkcnZyLVxcdTAwM2Vjb25maWcgPSBicmNtZl9jZmc4MDIxMV9hdHRhY2goZHJ2ciwgb3BzLFxcbjEyNjg6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBkcnZyLVxcdTAwM2VzZXR0aW5ncy1cXHUwMDNlcDJwX2VuYWJsZSk7XFxuMTI2OTpcXHRcXHRpZiAoZHJ2ci1cXHUwMDNlY29uZmlnID09IE5VTEwpIHtcXG4xMjcwOlxcdFxcdFxcdHJldCA9IC1FTk9NRU07XFxuMTI3MTpcXHRcXHRcXHRnb3RvIGZhaWw7XFxuMTI3MjpcXHRcXHR9XFxuMTI3MzpcXHRcXG4xMjc0OlxcdFxcdHJldCA9IGJyY21mX25ldF9hdHRhY2goaWZwLCBmYWxzZSk7XFxuMTI3NTpcXHRcXG4xMjc2OlxcdFxcdGlmICgoIXJldCkgXFx1MDAyNlxcdTAwMjYgKGRydnItXFx1MDAzZXNldHRpbmdzLVxcdTAwM2VwMnBfZW5hYmxlKSkge1xcbjEyNzc6XFx0XFx0XFx0cDJwX2lmcCA9IGRydnItXFx1MDAzZWlmbGlzdFsxXTtcXG4xMjc4OlxcdFxcdFxcdGlmIChwMnBfaWZwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNjo0MTozMi43OTMxMzQ0MjRaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODM0MzAyOTg5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJyb2FkY29tIFdpRmkgRHJpdmVyIEluaXRpYWxpemF0aW9uIGFuZCBGdXp6aW5nIExhbmRzY2FwZSoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCB0aGlzIGBicmNtZm1hY2AgZHJpdmVyIGFuZCBob3cgc3l6a2FsbGVyIGludGVyYWN0cyB3aXRoIGl0LiBGaXJzdCwgSSBuZWVkIHRvIHJlbWVtYmVyIHRoYXQgYGJyY21mX2J1c19wcmVpbml0YCBhbmQgYGJyY21mX2NfcHJlaW5pdF9kY21kc2AgaGFuZGxlIHRoZSBpbml0aWFsIGhhcmR3YXJlIGludGVyYWN0aW9ucy4gSWYgdGhlc2UgZmFpbCwgYGJyY21mX2NmZzgwMjExX2F0dGFjaGAgaXNuJ3QgZXZlbiBjYWxsZWQuIFRoZSBxdWVzdGlvbiBpcywgY2FuIHN5emthbGxlcidzIHZoY2kgbW9jayB0aGVzZSBVU0IgcmVzcG9uc2VzIHRvIHRyaWdnZXIgdGhlc2UgZnVuY3Rpb25zPyBZZXMsIGl0IGNhbiwgcG90ZW50aWFsbHksIHNpbmNlIHZoY2kgaXMgZGVzaWduZWQgdG8gZG8gZXhhY3RseSB0aGF0LiBUaGUgY2F0Y2ggaXMgdGhhdCBgYnJjbWZtYWNgIGlzIGEgY29tcGxleCBGdWxsTUFDIGRyaXZlciB3aGljaCBtZWFucyBpdCB0YWxrcyBleHRlbnNpdmVseSB3aXRoIHRoZSBmaXJtd2FyZSBhbmQgZXhwZWN0cyBzcGVjaWZpYyByZXNwb25zZXMuIFRoaXMgbWFrZXMgbWUgd29uZGVyIGFib3V0IGl0cyBwcmFjdGljYWwgZnV6emFiaWxpdHkuXG5cbkJ1dCB0aGVuLCBJIHJlY2FsbCBzZWVpbmcgdGhhdCBzeXprYWxsZXIgKmhhcyogZm91bmQgYnVncyBpbiBgYnJjbWZtYWNgIHZpYSBVU0IhIEFoLCB3YWl0LCB0aGUgY29tbWl0IG1lc3NhZ2U6IFwic3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XCIuIFRoYXQncyBhIHN0cm9uZyBpbmRpY2F0aW9uIHN5emthbGxlciBoYXMgZm91bmQgYSByZWFsIGJ1ZyBvciBpcyBhY3RpdmVseSBmdXp6aW5nIHRoaXMgZHJpdmVyLlxuXG5MZXQncyBkaXZlIGludG8gdGhlIHBhdGNoIGl0c2VsZi4gSXQgbW9kaWZpZXMgYGJyY21mX2N5d19leHRlcm5hbF9hdXRoYCBpbiBgZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmNgLiBUaGUgY29kZSBjaGFuZ2UgaXMgaW5pdGlhbGl6aW5nIGBhdXRoX3N0YXR1c2Agc3RydWN0IGFuZCBhZGRpbmcgUE1LSUQgc3VwcG9ydCB3aGljaCBzdWdnZXN0cyBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZSB3YXMgZml4ZWQuIFRoZSBwYXRjaCBpbml0aWFsaXplcyBhIHN0cnVjdCBhbmQgY29waWVzIG1lbW9yeSwgc28gaXQncyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhcyBleHBlY3RlZC5cblxuSSBoYXZlIHRvIHdvbmRlciwgaXMgdGhpcyByZWFjaGFibGU/IEl0IGxvb2tzIGxpa2UgaXQsIGJlY2F1c2UgaXQncyB0cmlnZ2VyZWQgdmlhIHRoZSBgTkw4MDIxMV9DTURfRVhURVJOQUxfQVVUSGAgbmV0bGluayBjb21tYW5kIHRvIHRoZSBgYnJjbWZtYWNgIGRyaXZlci4gSG1tLCBob2xkIG9uLi4uIHRoZSBwYXRjaCBpcyBpbiBgYnJjbWZfY3l3X2V4dGVybmFsX2F1dGhgLiBOb3cgSSBoYXZlIHRvIGNoZWNrIGlmIGBCUkNNRk1BQ19VU0JgIGlzIHN1ZmZpY2llbnQuIElzIGBjeXdgIGJ1aWx0IGJ5IGRlZmF1bHQ/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMzQ1LCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDg2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDY6NDE6NDEuMTM2MTY3MTExWiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Mjg0MDUxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjeXdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9NYWtlZmlsZT01NT1vYmotbSArPSB3Y2MvXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL01ha2VmaWxlOjU2Om9iai1tICs9IGN5dy9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvTWFrZWZpbGUtNTctb2JqLW0gKz0gYmNhL1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL01ha2VmaWxlPTU5PWJyY21mbWFjLSQoQ09ORklHX0JSQ01GTUFDKSArPSB3Y2MvY29yZS5vXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL01ha2VmaWxlOjYwOmJyY21mbWFjLSQoQ09ORklHX0JSQ01GTUFDKSArPSBjeXcvY29yZS5vXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL01ha2VmaWxlLTYxLWJyY21mbWFjLSQoQ09ORklHX0JSQ01GTUFDKSArPSBiY2EvY29yZS5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA2OjQxOjQxLjE3OTAxMjc2WiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU4MTI0MTcwNjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgTGluZSBvZiBSZWFzb25pbmcqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGNvbmZpcm1lZCB0aGF0IGBjeXcvY29yZS5vYCAqZG9lcyogZ2V0IGJ1aWx0IHdoZW4gYENPTkZJR19CUkNNRk1BQ2AgaXMgc2V0LiBUaGF0IG1lYW5zIGlmIEkgbmVlZCB0aGF0IG1vZHVsZSwgSSdtIGRlZmluaXRlbHkgZ29pbmcgdG8gcmVxdWlyZSBgQlJDTUZNQUNgLiBJJ2xsIGFsc28gd2FudCBgQlJDTUZNQUNfVVNCYCBzaW5jZSB0aGF0J3MgbGlrZWx5IHRoZSBzcGVjaWZpYyBVU0IgdmFyaWFudCBJJ20gZGVhbGluZyB3aXRoLiBOb3csIG9mIGNvdXJzZSwgSSBjYW4ndCBmb3JnZXQgYWJvdXQgYENGRzgwMjExYCBhbmQgYE1BQzgwMjExYCwgZXZlbiB0aG91Z2ggYGJyY21mbWFjYCBpcyBhIEZ1bGxNQUMgaW1wbGVtZW50YXRpb247IGl0IHN0aWxsIHJlbGllcyBvbiBgQ0ZHODAyMTFgIGFzIGl0cyBjb25maWd1cmF0aW9uIGludGVyZmFjZS4gVGltZSB0byBkaWcgYSBiaXQgZGVlcGVyIGFuZCBzZWUgd2hhdCBkZXBlbmRlbmNpZXMgYEJSQ01GTUFDYCBpdHNlbGYgaGFzLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcgY3J1Y2lhbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE1ODMsIk91dHB1dFRva2VucyI6NDksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDY6NDE6NDYuOTkxNDMzMzAzWiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTMxODEwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlJDTUZNQUNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWc6MTpjb25maWcgQlJDTUZNQUNcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZy0yLVxcdHRyaXN0YXRlIFxcXCJCcm9hZGNvbSBGdWxsTUFDIFdMQU4gZHJpdmVyXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWctMTAtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWc6MTE6Y29uZmlnIEJSQ01GTUFDX1BST1RPX0JDRENcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZy0xMi1cXHRib29sXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWctMTMtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWc6MTQ6Y29uZmlnIEJSQ01GTUFDX1BST1RPX01TR0JVRlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnLTE1LVxcdGJvb2xcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZy0xNi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZzoxNzpjb25maWcgQlJDTUZNQUNfU0RJT1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnLTE4LVxcdGJvb2wgXFxcIlNESU8gYnVzIGludGVyZmFjZSBzdXBwb3J0IGZvciBGdWxsTUFDIGRyaXZlclxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnLTI4LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnOjI5OmNvbmZpZyBCUkNNRk1BQ19VU0JcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZy0zMC1cXHRib29sIFxcXCJVU0IgYnVzIGludGVyZmFjZSBzdXBwb3J0IGZvciBGdWxsTUFDIGRyaXZlclxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnLTM5LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnOjQwOmNvbmZpZyBCUkNNRk1BQ19QQ0lFXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWctNDEtXFx0Ym9vbCBcXFwiUENJRSBidXMgaW50ZXJmYWNlIHN1cHBvcnQgZm9yIEZ1bGxNQUMgZHJpdmVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNjo0MTo0Ny4wMzI3NTc4NDJaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzA1MDA1MzM3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBob3cgSSdtIHRoaW5raW5nIGFib3V0IGl0OlxuXG4qKkV4YW1pbmluZyB0aGUgQlJDTUZNQUMgS2NvbmZpZyBmb3IgRGVwZW5kZW5jaWVzKipcblxuUmlnaHQsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgZm9yIHRoaXMgc3BlY2lmaWMgQnJvYWRjb20gV2ktRmkgZHJpdmVyLCB0aGUgYGJyY21mbWFjYCBtb2R1bGUsIHdpdGhpbiB0aGUgYnJvYWRlciBrZXJuZWwgY29uZmlndXJhdGlvbi4gVGhlIGBLY29uZmlnYCBmaWxlIGlzIHRoZSBzdGFuZGFyZCBwbGFjZSB0byBzdGFydC4gSXQgY29udGFpbnMgYWxsIHRoZSBuZWNlc3NhcnkgZGVwZW5kZW5jeSBkZWZpbml0aW9ucywgc28gSSBjYW4gc2VlIHdoYXQgb3RoZXIga2VybmVsIGZlYXR1cmVzIG9yIG1vZHVsZXMgKm5lZWQqIHRvIGJlIGVuYWJsZWQsIG9yICpjYW4qIGJlIGVuYWJsZWQgYWxvbmdzaWRlIHRoaXMgZHJpdmVyLiBJJ20gZ29pbmcgdG8gcXVpY2tseSBwYXJzZSB0aGF0IGBLY29uZmlnYCB0byBidWlsZCBhIG1lbnRhbCBtYXAgb2YgaXRzIHN1cHBvcnQsIHVuZGVyc3RhbmQgaXRzIGNvbmRpdGlvbnMsIGFuZCBjb25zaWRlciBhbnkgcG90ZW50aWFsIGNvbmZsaWN0cyBvciBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRoaXMgZHJpdmVyIGZpdHMgaW50byB0aGUgbGFyZ2VyIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyNTI4LCJPdXRwdXRUb2tlbnMiOjUwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDY6NDE6NTQuMDgyODE0MDA4WiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyOTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0Y29uZmlnIEJSQ01GTUFDXFxuICAgMjpcXHRcXHR0cmlzdGF0ZSBcXFwiQnJvYWRjb20gRnVsbE1BQyBXTEFOIGRyaXZlclxcXCJcXG4gICAzOlxcdFxcdGRlcGVuZHMgb24gQ0ZHODAyMTFcXG4gICA0OlxcdFxcdHNlbGVjdCBCUkNNVVRJTFxcbiAgIDU6XFx0XFx0aGVscFxcbiAgIDY6XFx0XFx0ICBUaGlzIG1vZHVsZSBhZGRzIHN1cHBvcnQgZm9yIHdpcmVsZXNzIGFkYXB0ZXJzIGJhc2VkIG9uIEJyb2FkY29tXFxuICAgNzpcXHRcXHQgIEZ1bGxNQUMgY2hpcHNldHMuIEl0IGhhcyB0byB3b3JrIHdpdGggYXQgbGVhc3Qgb25lIG9mIHRoZSBidXNcXG4gICA4OlxcdFxcdCAgaW50ZXJmYWNlIHN1cHBvcnQuIElmIHlvdSBjaG9vc2UgdG8gYnVpbGQgYSBtb2R1bGUsIGl0J2xsIGJlIGNhbGxlZFxcbiAgIDk6XFx0XFx0ICBicmNtZm1hYy5rby5cXG4gIDEwOlxcdFxcbiAgMTE6XFx0Y29uZmlnIEJSQ01GTUFDX1BST1RPX0JDRENcXG4gIDEyOlxcdFxcdGJvb2xcXG4gIDEzOlxcdFxcbiAgMTQ6XFx0Y29uZmlnIEJSQ01GTUFDX1BST1RPX01TR0JVRlxcbiAgMTU6XFx0XFx0Ym9vbFxcbiAgMTY6XFx0XFxuICAxNzpcXHRjb25maWcgQlJDTUZNQUNfU0RJT1xcbiAgMTg6XFx0XFx0Ym9vbCBcXFwiU0RJTyBidXMgaW50ZXJmYWNlIHN1cHBvcnQgZm9yIEZ1bGxNQUMgZHJpdmVyXFxcIlxcbiAgMTk6XFx0XFx0ZGVwZW5kcyBvbiAoTU1DID0geSB8fCBNTUMgPSBCUkNNRk1BQylcXG4gIDIwOlxcdFxcdGRlcGVuZHMgb24gQlJDTUZNQUNcXG4gIDIxOlxcdFxcdHNlbGVjdCBCUkNNRk1BQ19QUk9UT19CQ0RDXFxuICAyMjpcXHRcXHRzZWxlY3QgRldfTE9BREVSXFxuICAyMzpcXHRcXHRkZWZhdWx0IHlcXG4gIDI0OlxcdFxcdGhlbHBcXG4gIDI1OlxcdFxcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgU0RJTyBidXMgaW50ZXJmYWNlIHN1cHBvcnQgZm9yIEJyb2FkY29tXFxuICAyNjpcXHRcXHQgIElFRUU4MDIuMTFuIGVtYmVkZGVkIEZ1bGxNQUMgV0xBTiBkcml2ZXIuIFNheSBZIGlmIHlvdSB3YW50IHRvXFxuICAyNzpcXHRcXHQgIHVzZSB0aGUgZHJpdmVyIGZvciBhIFNESU8gd2lyZWxlc3MgY2FyZC5cXG4gIDI4OlxcdFxcbiAgMjk6XFx0Y29uZmlnIEJSQ01GTUFDX1VTQlxcbiAgMzA6XFx0XFx0Ym9vbCBcXFwiVVNCIGJ1cyBpbnRlcmZhY2Ugc3VwcG9ydCBmb3IgRnVsbE1BQyBkcml2ZXJcXFwiXFxuICAzMTpcXHRcXHRkZXBlbmRzIG9uIChVU0IgPSB5IHx8IFVTQiA9IEJSQ01GTUFDKVxcbiAgMzI6XFx0XFx0ZGVwZW5kcyBvbiBCUkNNRk1BQ1xcbiAgMzM6XFx0XFx0c2VsZWN0IEJSQ01GTUFDX1BST1RPX0JDRENcXG4gIDM0OlxcdFxcdHNlbGVjdCBGV19MT0FERVJcXG4gIDM1OlxcdFxcdGhlbHBcXG4gIDM2OlxcdFxcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgVVNCIGJ1cyBpbnRlcmZhY2Ugc3VwcG9ydCBmb3IgQnJvYWRjb21cXG4gIDM3OlxcdFxcdCAgSUVFRTgwMi4xMW4gZW1iZWRkZWQgRnVsbE1BQyBXTEFOIGRyaXZlci4gU2F5IFkgaWYgeW91IHdhbnQgdG9cXG4gIDM4OlxcdFxcdCAgdXNlIHRoZSBkcml2ZXIgZm9yIGFuIFVTQiB3aXJlbGVzcyBjYXJkLlxcbiAgMzk6XFx0XFxuICA0MDpcXHRjb25maWcgQlJDTUZNQUNfUENJRVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNjo0MTo1NC4wODI4NzgwNjhaIiwiU2VxIjo0NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA1MTU0MjkxMDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIEJSQ01GTUFDIERyaXZlciBhbmQgUG90ZW50aWFsIEV4cGxvaXRhdGlvbioqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIGBCUkNNRk1BQ2Agc2l0dWF0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgQlJDTUZNQUNgIHJlbGllcyBoZWF2aWx5IG9uIGBDRkc4MDIxMWAsIGFuZCBgQlJDTUZNQUNfVVNCYCBidWlsZHMgb24gdGhhdCBhbmQgdGhlIGBVU0JgIHN1YnN5c3RlbSBhcyB3ZWxsLiBUaGVyZWZvcmUsIHRvIGVuc3VyZSBwcm9wZXIgZnVuY3Rpb25hbGl0eSwgSSBzaG91bGQgZW5hYmxlIGBCUkNNRk1BQ2AsIGBCUkNNRk1BQ19VU0JgLCBgQ0ZHODAyMTFgLCBhbmQgYFVTQmAgaW4gdGhlIGNvbmZpZ3VyYXRpb24uIEFsc28sIHRoZSBmaXJtd2FyZSBsb2FkaW5nIG1lY2hhbmlzbSBgRldfTE9BREVSYCBpcyBzZWxlY3RlZCwgb2YgY291cnNlLlxuXG5JIGJyaWVmbHkgY29uc2lkZXJlZCBpZiBhbnkgb3RoZXIgY29uZmlncyB3ZXJlIGNyaXRpY2FsLCBidXQgSSBkb24ndCBzZWUgYW55IG90aGVyIGltbWVkaWF0ZWx5LiBXaGlsZSBgTUFDODAyMTFgIGlzbid0IHN0cmljdGx5ICpyZXF1aXJlZCosIGl0J3MgdXN1YWxseSBlbmFibGVkIHdpdGggYEJSQ01GTUFDYCwgc28gaXQncyBwcm9iYWJseSBiZXN0IHByYWN0aWNlIHRvIGhhdmUgdGhhdCBvbi5cblxuTXkgYXR0ZW50aW9uIGlzIG5vdyBzcXVhcmVseSBvbiBgYnJjbWZfY3l3X2V4dGVybmFsX2F1dGhgLiBJdCBzZWVtcyB0aGUgcGF0Y2ggaXMgY2VudGVyZWQgb24gdGhhdCBzcGVjaWZpYyBmdW5jdGlvbi4gSSdtIHdvbmRlcmluZyBpZiB0aGlzIGlzIHRoZSAqb25seSogZW50cnkgcG9pbnQgdGhlIHBhdGNoIG1vZGlmaWVzLiBZZXMsIGxvb2tzIGxpa2UgaXQncyB0aGUgb25seSBvbmUuXG5cbk5vdyBJIG5lZWQgdG8gY29uZmlybSBpZiBgYnJjbWZfY3l3X2V4dGVybmFsX2F1dGhgIGlzIGFjdHVhbGx5IHJlYWNoYWJsZS4gVGhhbmtmdWxseSwgaXQncyByZWdpc3RlcmVkIHRocm91Z2ggdGhlIGRyaXZlcidzIG9wZXJhdGlvbnMgc3RydWN0dXJlIGFzIGBkcnZyLVx1MDAzZW9wcy1cdTAwM2VleHRlcm5hbF9hdXRoID0gYnJjbWZfY3l3X2V4dGVybmFsX2F1dGg7YCwgc28gdGhhdCdzIGdvb2QuIEZ1cnRoZXIsIHRoZSBgY2ZnODAyMTFfb3BzYCBhbHNvIGhhcyBhbiBgZXh0ZXJuYWxfYXV0aGAgcG9pbnRlci4gVGhhdCdzIGV4Y2VsbGVudCEgVGhlIGZ1bmN0aW9uIGlzIHJlYWNoZWQgd2hlbiB0aGUgdXNlciBzcGFjZSBzZW5kcyB0aGUgYE5MODAyMTFfQ01EX0VYVEVSTkFMX0FVVEhgIGNvbW1hbmQsIGFuZCBgY2ZnODAyMTFgIGNhbGxzIGByZGV2LVx1MDAzZW9wcy1cdTAwM2VleHRlcm5hbF9hdXRoYC4gVGhpcyBtZWFucyB0aGF0IGl0ICppcyogaW5kZWVkIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIG5ldGxpbmsuIFBlcmZlY3QuXG5cblRoZSBvbmx5IHByZXJlcXVpc2l0ZSBpcyB0aGF0IHRoZSBgYnJjbWZtYWNgIGRldmljZSBtdXN0IGJlIHByb2JlZCBhbmQgcmVnaXN0ZXJlZCB3aXRoIGBjZmc4MDIxMWAuIFRoYXQgc2hvdWxkIGJlIG5vIHByb2JsZW0uIFN5emthbGxlciBpcyBhYmxlIHRvIGVtdWxhdGUgVVNCIGRldmljZXMsIHNvIGl0IGNhbiB0cmlnZ2VyIHRoZSBwcm9iZSBvZiBgYnJjbWZtYWNgIHZpYSBVU0IuIEhvd2V2ZXIsIHRoZSBgYnJjbWZtYWNgIGRyaXZlciwgaW4gdHVybiwgbmVlZHMgZmlybXdhcmUgdG8gY29tcGxldGUgaXRzIHByb2JlIGFuZCByZWdpc3RyYXRpb24uXG5cbk5vdyB0aGUgbWlsbGlvbi1kb2xsYXIgcXVlc3Rpb246IERvZXMgc3l6a2FsbGVyIHByb3ZpZGUgZmlybXdhcmUgZm9yIGBicmNtZm1hY2A/IEl0ICptaWdodCouIEkga25vdyB0aGF0IFN5emthbGxlcidzIGBzeXotZXhlY3V0b3JgIGNhbiBpbnRlcmNlcHQgZmlybXdhcmUgcmVxdWVzdHMgaWYgYENPTkZJR19GV19MT0FERVJfVVNFUl9IRUxQRVJgIGlzIGVuYWJsZWQsIGFuZCBjb3VsZCBwcm92aWRlIGR1bW15IGZpcm13YXJlLiBCdXQsIGhlcmUncyB0aGUgY2F0Y2ggLSBgYnJjbWZtYWNgIHZhbGlkYXRlcyB0aGUgZmlybXdhcmUuXG5cbmBgYGNcblx0cmV0ID0gY2hlY2tfZmlsZShmdy1cdTAwM2VkYXRhKTtcblx0aWYgKHJldCBcdTAwM2MgMCkge1xuXHRcdGJyY21mX2VycihcImludmFsaWQgZmlybXdhcmVcXG5cIik7XG5cdFx0cmVsZWFzZV9maXJtd2FyZShmdyk7XG5cdFx0Z290byBlcnJvcjtcblx0fVxuYGBgXG5cblNvIEkgbmVlZCB0byBjaGVjayB3aGF0IGBjaGVja19maWxlYCBhY3R1YWxseSAqZG9lcyouIFRoYXQncyB0aGUgbmV4dCBjcml0aWNhbCBzdGVwIHRvIHNlZSBpZiB0aGlzIGlzIGV4cGxvaXRhYmxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzM0NSwiT3V0cHV0VG9rZW5zIjo0OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA2OjQyOjA0LjU5ODMwOTI4OVoiLCJTZXEiOjQ2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDE0MjIxMTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY2hlY2tfZmlsZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jPTEwNjI9c3RhdGljIHZvaWQgYnJjbWZfdXNiX2RldGFjaChzdHJ1Y3QgYnJjbWZfdXNiZGV2X2luZm8gKmRldmluZm8pXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtMTA4MC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM6MTA4MTpzdGF0aWMgaW50IGNoZWNrX2ZpbGUoY29uc3QgdTggKmhlYWRlcnMpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTEwODIte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jPTExNzY9c3RhdGljIHZvaWQgYnJjbWZfdXNiX3Byb2JlX3BoYXNlMihzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCByZXQsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtMTE5MC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM6MTE5MTpcXHRyZXQgPSBjaGVja19maWxlKGZ3LVxcdTAwM2VkYXRhKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtMTE5Mi1cXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNjo0MjowNC42Mzk3MzQ2OThaIiwiU2VxIjo0NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDAyMDA0MjI1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipBbmFseXppbmcgdGhlIGBjaGVja19maWxlYCBGdW5jdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzIGBjaGVja19maWxlYCBmdW5jdGlvbi4gTXkgZmlyc3QgaW5zdGluY3QsIGFzIGFsd2F5cywgaXMgdG8gdW5kZXJzdGFuZCBpdHMgc2NvcGUuIElzIHRoaXMgYSB1dGlsaXR5IGZ1bmN0aW9uIHdpdGhpbiBhIGxhcmdlciBtb2R1bGUsIG9yIGlzIGl0IGEgc3RhbmRhbG9uZSBzY3JpcHQ/IFRoZSBjb250ZXh0IGlzIGNydWNpYWwgZm9yIGFudGljaXBhdGluZyBpdHMgcHVycG9zZS4gSSdtIGltbWVkaWF0ZWx5IHRoaW5raW5nIGFib3V0IHBvdGVudGlhbCBlZGdlIGNhc2VzLiBXaGF0IGtpbmQgb2YgZmlsZSB0eXBlcyBhcmUgd2UgZGVhbGluZyB3aXRoPyBJcyB0aGVyZSBhIG5lZWQgZm9yIGFueSBraW5kIG9mIGZpbGUgc2l6ZSBjaGVja2luZz8gQXJlIHRoZXJlIGFueSBzZWN1cml0eSBjb25zaWRlcmF0aW9ucyBJIHNob3VsZCBiZWFyIGluIG1pbmQ/IENvdWxkIHRoaXMgYmUgdnVsbmVyYWJsZSB0byBhIHBhdGggdHJhdmVyc2FsIGF0dGFjaywgb3Igc29tZXRoaW5nIHNpbWlsYXI/IEknbGwgcHJvYmFibHkgc3RhcnQgc2Nhbm5pbmcgZm9yIGNvbW1vbiB2dWxuZXJhYmlsaXRpZXMuIEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGFyZWFzIGZvciBidWZmZXIgb3ZlcmZsb3dzPyBJcyBpdCBoYW5kbGluZyBmaWxlIHBlcm1pc3Npb25zIHByb3Blcmx5PyBXaGF0IGtpbmQgb2YgZXJyb3JzIGRvZXMgaXQgaGFuZGxlPyBBcmUgdGhlIGVycm9yIG1lc3NhZ2VzIGNsZWFyIGFuZCBoZWxwZnVsPyBJIG5lZWQgdG8gbG9vayBmb3IgYW55IGhpZGRlbiBkZXBlbmRlbmNpZXMuIElzIGl0IHVzaW5nIGFueSBleHRlcm5hbCBsaWJyYXJpZXM/IElmIHNvLCBhcmUgdGhleSBiZWluZyBoYW5kbGVkIGNvcnJlY3RseT8gQW5kIGZpbmFsbHksIG9mIGNvdXJzZSwgSSdsbCBuZWVkIHRvIGxvb2sgZm9yIGFueSBjb25jdXJyZW5jeSBpc3N1ZXMgaWYgSSdtIGFzc3VtaW5nIGl0IG1pZ2h0IGJlIHVzZWQgaW4gYSBtdWx0aXRocmVhZGVkIGVudmlyb25tZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDkxNSwiT3V0cHV0VG9rZW5zIjo1NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDY6NDI6MDguNjU5NzgwMDc2WiIsIlNlcSI6NDgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMTMzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTA4MSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTA4MTpcXHRzdGF0aWMgaW50IGNoZWNrX2ZpbGUoY29uc3QgdTggKmhlYWRlcnMpXFxuMTA4MjpcXHR7XFxuMTA4MzpcXHRcXHRzdHJ1Y3QgdHJ4X2hlYWRlcl9sZSAqdHJ4O1xcbjEwODQ6XFx0XFx0aW50IGFjdHVhbF9sZW4gPSAtMTtcXG4xMDg1OlxcdFxcbjEwODY6XFx0XFx0YnJjbWZfZGJnKFVTQiwgXFxcIkVudGVyXFxcXG5cXFwiKTtcXG4xMDg3OlxcdFxcdC8qIEV4dHJhY3QgdHJ4IGhlYWRlciAqL1xcbjEwODg6XFx0XFx0dHJ4ID0gKHN0cnVjdCB0cnhfaGVhZGVyX2xlICopIGhlYWRlcnM7XFxuMTA4OTpcXHRcXHRpZiAodHJ4LVxcdTAwM2VtYWdpYyAhPSBjcHVfdG9fbGUzMihUUlhfTUFHSUMpKVxcbjEwOTA6XFx0XFx0XFx0cmV0dXJuIC0xO1xcbjEwOTE6XFx0XFxuMTA5MjpcXHRcXHRoZWFkZXJzICs9IHNpemVvZihzdHJ1Y3QgdHJ4X2hlYWRlcl9sZSk7XFxuMTA5MzpcXHRcXG4xMDk0OlxcdFxcdGlmIChsZTMyX3RvX2NwdSh0cngtXFx1MDAzZWZsYWdfdmVyc2lvbikgXFx1MDAyNiBUUlhfVU5DT01QX0lNQUdFKSB7XFxuMTA5NTpcXHRcXHRcXHRhY3R1YWxfbGVuID0gbGUzMl90b19jcHUodHJ4LVxcdTAwM2VvZmZzZXRzW1RSWF9PRkZTRVRTX0RMRldMRU5fSURYXSk7XFxuMTA5NjpcXHRcXHRcXHRyZXR1cm4gYWN0dWFsX2xlbiArIHNpemVvZihzdHJ1Y3QgdHJ4X2hlYWRlcl9sZSk7XFxuMTA5NzpcXHRcXHR9XFxuMTA5ODpcXHRcXHRyZXR1cm4gLTE7XFxuMTA5OTpcXHR9XFxuMTEwMDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDY6NDI6MDguNjU5OTAyOTY2WiIsIlNlcSI6NDksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExOTIxMTk4MjE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgU3l6a2FsbGVyIEZpcm13YXJlIEZ1enppbmcgU2NlbmFyaW8qKlxuXG5Pa2F5LCBzbyBJJ20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaG93IHN5emthbGxlciBpcyBoaXR0aW5nIHRoaXMgYGJyY21mX2N5d19leHRlcm5hbF9hdXRoYCBjb2RlIHBhdGguIFRoZSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCdzIGEgZmlybXdhcmUgYnVnLCBzbyB0aGUgZmlybXdhcmUgbmVlZHMgdG8gc3RhcnQgd2l0aCBgVFJYX01BR0lDYCBhbmQgdGhlIGBUUlhfVU5DT01QX0lNQUdFYCBmbGFnLiBCdXQgc3l6a2FsbGVyJ3MgZmlybXdhcmUgZnV6emluZyBzZXR1cCwgb3IgcG90ZW50aWFsbHkgaXRzIGhlbHBlcnMsIG1pZ2h0IG5vdCByZWNvZ25pemUgdGhpcyBtYWdpYyBzaWduYXR1cmUuIEkga25vdyBzeXprYWxsZXIgaGFzIHNvbWUgaW1hZ2UgbW91bnRpbmcgY2FwYWJpbGl0aWVzIChgc3l6X21vdW50X2ltYWdlYCksIGJ1dCBpdCBzZWVtcyB0byBwcm92aWRlIG1vc3RseSByYW5kb20gb3IgZW1wdHkgZGF0YSBmb3IgZmlybXdhcmUsIHdoaWNoIG1ha2VzIGhpdHRpbmcgdGhlIG1hZ2ljIGhlYWRlciBpbmNyZWRpYmx5IHVubGlrZWx5LlxuXG5Ib3dldmVyLCBJIHNlZSBhIGNvbW1pdCBtZXNzYWdlIFwic3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XCIuIFRoaXMgc3VnZ2VzdHMgc3l6a2FsbGVyIGZvdW5kIGEgYnVnIGhlcmUsIG9yIGlzIGFjdGl2ZWx5IGZ1enppbmcgdGhpcyBhcmVhLiBJdCdzIHVzaW5nIGBzeXpfZ2VuZXRsaW5rX2dldF9mYW1pbHlgIGFuZCBgc3l6XzgwMjExXy4uLmAgc3lzY2FsbHMsIHdoaWNoIHBvaW50cyB0b3dhcmRzIHRoZSBwb3RlbnRpYWwgb2YgaGl0dGluZyB0aGlzIGZyb20gYSBrZXJuZWwgc3BhY2UsIG9yIGEgdXNlciBzcGFjZSB0aGF0IGNhbiBhY2Nlc3MgdGhpcyBjb2RlIHZpYSB0aG9zZSBpbnRlcmZhY2VzLlxuXG5JIGNvbnNpZGVyZWQgYG1hYzgwMjExX2h3c2ltYCwgYnV0IHF1aWNrbHkgZGlzbWlzc2VkIGl0IGJlY2F1c2UgaXQncyBhIGRpZmZlcmVudCBkcml2ZXIuIElzIGBicmNtZl9jeXdfZXh0ZXJuYWxfYXV0aGAgcmVhY2hhYmxlIHRocm91Z2ggb3RoZXIgZHJpdmVycz8gTm8sIGl0J3MgZmlybWx5IHdpdGhpbiBgYnJjbWZtYWNgLlxuXG5Ob3csIHRoZSBxdWVzdGlvbiBpcyBob3cgc3l6a2FsbGVyIGlzIHByb3ZpZGluZyB0aGUgZmlybXdhcmUuIERvZXMgaXQgaGF2ZSBhIHNwZWNpZmljIGRlc2NyaXB0aW9uIGZvciBgYnJjbWZtYWNgIGZpcm13YXJlLCBvciBpcyB0aGlzIHBhdGNoIGJlaW5nIHRlc3RlZCBhZnRlciBhbm90aGVyIGZ1enplciBmb3VuZCB0aGUgYnVnP1xuXG5UaGUgY29tbWl0IG1lc3NhZ2UgXCJzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcIiBpcyBzdGFuZGFyZCBmb3Igc3l6Ym90J3MgcGF0Y2ggdGVzdGluZywgbWVhbmluZyBhIHVzZXIgcmVxdWVzdGVkIHRoYXQgc3l6Ym90IHRlc3QgYSBwYXRjaCB0byByZXByb2R1Y2UgYSBidWcgcmVwb3J0ZWQgYnkgc3l6Ym90LiBJZiBzeXpib3QgZm91bmQgYSBidWcgaW4gdGhpcyBmdW5jdGlvbiwgaXQgKmNhbiogcmVhY2ggaXQuXG5cbkhvdz8gQWhhISBTeXprYWxsZXIncyByb290IGZpbGUgc3lzdGVtIGltYWdlcyAobGlrZSBgYnVsbHNleWUuaW1nYCkgdXN1YWxseSBjb250YWluIHRoZSBgbGludXgtZmlybXdhcmVgIHBhY2thZ2UuIFRoaXMgaW5jbHVkZXMgdGhlIEJyb2FkY29tIGZpcm13YXJlcyAoYGJyY21mbWFjKi1zZGlvLmJpbmAsIGBicmNtZm1hYyotdXNiLmJpbmAsIGV0Yy4pLiBJZiB0aGUgZmlybXdhcmUgaXMgcHJlc2VudCBpbiB0aGUgcm9vdGZzLCBgcmVxdWVzdF9maXJtd2FyZWAgd2lsbCBzdWNjZWVkISBBbmQgc3l6a2FsbGVyIGVtdWxhdGVzIFVTQiBkZXZpY2VzLCBzbyBpdCdzIHByb2JhYmx5IGVtdWxhdGluZyBhIEJyb2FkY29tIFVTQiBXaS1GaSBkb25nbGUuXG5cbklmIGl0IGVtdWxhdGVzIHRoZSBVU0IgZGV2aWNlLCBpdCByZWNlaXZlcyB0aGUgZmlybXdhcmUgZG93bmxvYWQgY29tbWFuZHMuIElmIHRoZSBmaXJtd2FyZSBpcyByZWFsLCBmcm9tIGBsaW51eC1maXJtd2FyZWAsIGBjaGVja19maWxlYCB3aWxsIHBhc3MgYmVjYXVzZSBpdCdzIGEgdmFsaWQgZmlybXdhcmUgZmlsZS4gVGhlbiBgYnJjbWZfdXNiX2Z3X2Rvd25sb2FkYCB3aWxsIHNlbmQgdGhlIGZpcm13YXJlIHRvIHRoZSBlbXVsYXRlZCBVU0IgZGV2aWNlLiBUaGUgZW11bGF0ZWQgVVNCIGRldmljZSAodmhjaSkganVzdCBuZWVkcyB0byBhY2NlcHQgdGhlIFVSQnMuIFRoZW4gYGJyY21mX2F0dGFjaGAgaXMgY2FsbGVkLlxuXG5UaGUga2V5IGlzIGBicmNtZl9idXNfc3RhcnRlZGAuIEl0IHNlbmRzIGNvbW1hbmRzIHRvIHRoZSBkb25nbGUgKGBicmNtZl9jX3ByZWluaXRfZGNtZHNgKS4gSWYgdGhlIGVtdWxhdGVkIFVTQiBkZXZpY2UgZG9lc24ndCByZXNwb25kIGNvcnJlY3RseSwgYGJyY21mX2J1c19zdGFydGVkYCBtaWdodCBmYWlsLiBUaGlzIGlzIHRoZSBsaWtlbHkgYXJlYSBmb3IgYSBjcmFzaCB0byBvY2N1ci4gSSBzaG91bGQgYWxzbyBjaGVjayBgYnJjbWZfaWdub3JlX3Byb2JlX2ZhaWxgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTU0OCwiT3V0cHV0VG9rZW5zIjo1MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY2NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA2OjQyOjIwLjU4MTEwNDA3NFoiLCJTZXEiOjUwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU2NjE1ODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnJjbWZfaWdub3JlX3Byb2JlX2ZhaWxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29tbW9uLmM9Njg9TU9EVUxFX1BBUk1fREVTQyhpYXBwLCBcXFwiRW5hYmxlIHBhcnRpYWwgc3VwcG9ydCBmb3IgdGhlIG9ic29sZXRlZCBJbnRlci1BY2Nlc3MgUG9pbnQgUHJvdG9jb2xcXFwiKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb21tb24uYy03MS0vKiBhbHdheXMgc3VjY2VlZCBicmNtZl9idXNfc3RhcnRlZCgpICovXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvbW1vbi5jOjcyOnN0YXRpYyBpbnQgYnJjbWZfaWdub3JlX3Byb2JlX2ZhaWw7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvbW1vbi5jOjczOm1vZHVsZV9wYXJhbV9uYW1lZChpZ25vcmVfcHJvYmVfZmFpbCwgYnJjbWZfaWdub3JlX3Byb2JlX2ZhaWwsIGludCwgMCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvbW1vbi5jLTc0LU1PRFVMRV9QQVJNX0RFU0MoaWdub3JlX3Byb2JlX2ZhaWwsIFxcXCJhbHdheXMgc3VjY2VlZCBwcm9iZSBmb3IgZGVidWdnaW5nXFxcIik7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29tbW9uLmM9NTEyPXN0cnVjdCBicmNtZl9tcF9kZXZpY2UgKmJyY21mX2dldF9tb2R1bGVfcGFyYW0oc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvbW1vbi5jLTUzMy0jaWZkZWYgREVCVUdcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29tbW9uLmM6NTM0OlxcdHNldHRpbmdzLVxcdTAwM2VpZ25vcmVfcHJvYmVfZmFpbCA9ICEhYnJjbWZfaWdub3JlX3Byb2JlX2ZhaWw7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvbW1vbi5jLTUzNS0jZW5kaWZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDY6NDI6MjAuNjI2NzcwODkyWiIsIlNlcSI6NTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxOTkyOTgzMjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgYnJjbWZfaWdub3JlX3Byb2JlX2ZhaWwqKlxuXG5SaWdodCwgKmJyY21mX2lnbm9yZV9wcm9iZV9mYWlsKi4gVGhhdCdzIGEgY2xhc3NpYy4gU28sIGl0J3MgYSBtb2R1bGUgcGFyYW1ldGVyIHRoYXQgYmFzaWNhbGx5IGZvcmNlcyBgYnJjbWZfYnVzX3N0YXJ0ZWRgIHRvICphbHdheXMqIHJldHVybiBzdWNjZXNzLiBJbnRlcmVzdGluZy4gV29uZGVyIHdoYXQgdGhlIGltcGxpY2F0aW9ucyBhcmUgaW4gcHJhY3RpY2U/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzaWRlLWVmZmVjdHMuXG5cbk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHRyYWNlIHRoZSB1c2FnZSBvZiBgaWdub3JlX3Byb2JlX2ZhaWxgLiBXaGVyZSBkb2VzIHRoYXQgdmFsdWUgYWN0dWFsbHkgZ2V0IHVzZWQ/IExldCdzIGNoZWNrIHRoZSBjb2RlIGFuZCBzZWUgZXhhY3RseSB3aGF0IGhhcHBlbnMgd2hlbiB0aGF0IGZsYWcgaXMgc2V0LCBhbmQgaG93IGl0IGltcGFjdHMgdGhlIG92ZXJhbGwgaW5pdGlhbGl6YXRpb24gZmxvdy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHdlIGFyZSBtYXNraW5nIGEgcG90ZW50aWFsIGhhcmR3YXJlIHByb2JlIGZhaWx1cmUgYW5kIHdoYXQgdGhlIGNvcnJlc3BvbmRpbmcgdHJhZGUtb2ZmcyBhcmUuIFdoYXQncyB0aGUgY29zdCBvZiB0aGlzPyBBcmUgd2UgaW50cm9kdWNpbmcgcmFjZSBjb25kaXRpb25zLCBvciBtYWtpbmcgaXQgaGFyZGVyIHRvIGRpYWdub3NlIHJlYWwgaGFyZHdhcmUgaXNzdWVzIGRvd24gdGhlIGxpbmU/IFRoaXMgY291bGQgYmUgbWFza2luZyBhIHJlYWwgcHJvYmxlbS4gVGltZSB0byBkaWcgaW4uLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjczOTMsIk91dHB1dFRva2VucyI6NDcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNjo0MjoyNC44MjYwNzI0MjVaIiwiU2VxIjo1MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzMjE4NDM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlnbm9yZV9wcm9iZV9mYWlsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvbW1vbi5jPTY4PU1PRFVMRV9QQVJNX0RFU0MoaWFwcCwgXFxcIkVuYWJsZSBwYXJ0aWFsIHN1cHBvcnQgZm9yIHRoZSBvYnNvbGV0ZWQgSW50ZXItQWNjZXNzIFBvaW50IFByb3RvY29sXFxcIik7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29tbW9uLmMtNzEtLyogYWx3YXlzIHN1Y2NlZWQgYnJjbWZfYnVzX3N0YXJ0ZWQoKSAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb21tb24uYzo3MjpzdGF0aWMgaW50IGJyY21mX2lnbm9yZV9wcm9iZV9mYWlsO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb21tb24uYzo3Mzptb2R1bGVfcGFyYW1fbmFtZWQoaWdub3JlX3Byb2JlX2ZhaWwsIGJyY21mX2lnbm9yZV9wcm9iZV9mYWlsLCBpbnQsIDApO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb21tb24uYzo3NDpNT0RVTEVfUEFSTV9ERVNDKGlnbm9yZV9wcm9iZV9mYWlsLCBcXFwiYWx3YXlzIHN1Y2NlZWQgcHJvYmUgZm9yIGRlYnVnZ2luZ1xcXCIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb21tb24uYy03NS0jZW5kaWZcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb21tb24uYz01MTI9c3RydWN0IGJyY21mX21wX2RldmljZSAqYnJjbWZfZ2V0X21vZHVsZV9wYXJhbShzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29tbW9uLmMtNTMzLSNpZmRlZiBERUJVR1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb21tb24uYzo1MzQ6XFx0c2V0dGluZ3MtXFx1MDAzZWlnbm9yZV9wcm9iZV9mYWlsID0gISFicmNtZl9pZ25vcmVfcHJvYmVfZmFpbDtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29tbW9uLmMtNTM1LSNlbmRpZlxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvbW1vbi5oPTMxPWV4dGVybiBzdHJ1Y3QgYnJjbWZfbXBfZ2xvYmFsX3QgYnJjbWZfbXBfZ2xvYmFsO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvbW1vbi5oLTM5LSAqIEByb2Ftb2ZmOiBGaXJtd2FyZSByb2FtaW5nIG9mZj9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29tbW9uLmg6NDA6ICogQGlnbm9yZV9wcm9iZV9mYWlsOiBJZ25vcmUgcHJvYmUgZmFpbHVyZS5cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29tbW9uLmgtNDEtICogQHRyaXZpYWxfY2NvZGVfbWFwOiBBc3N1bWUgZmlybXdhcmUgdXNlcyBJU08zMTY2IGNvdW50cnkgY29kZXMgd2l0aCByZXYgMFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvbW1vbi5oPTQ1PXN0cnVjdCBicmNtZl9tcF9kZXZpY2Uge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvbW1vbi5oLTUwLVxcdGJvb2xcXHRcXHRpYXBwO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb21tb24uaDo1MTpcXHRib29sXFx0XFx0aWdub3JlX3Byb2JlX2ZhaWw7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvbW1vbi5oLTUyLVxcdGJvb2xcXHRcXHR0cml2aWFsX2Njb2RlX21hcDtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmM9MTIyOT1zdGF0aWMgaW50IGJyY21mX2J1c19zdGFydGVkKHN0cnVjdCBicmNtZl9wdWIgKmRydnIsIHN0cnVjdCBjZmc4MDIxMV9vcHMgKm9wcylcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmMtMTMyMy1cXHRkcnZyLVxcdTAwM2VpZmxpc3RbMV0gPSBOVUxMO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmM6MTMyNDpcXHRpZiAoZHJ2ci1cXHUwMDNlc2V0dGluZ3MtXFx1MDAzZWlnbm9yZV9wcm9iZV9mYWlsKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmMtMTMyNS1cXHRcXHRyZXQgPSAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNjo0MjoyNC44NjkyOTc0NTRaIiwiU2VxIjo1MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQxODU1ODE0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEZWJ1Z2dpbmcgYSBRdWlya3kgRHJpdmVyKipcblxuWWVzISBJJ3ZlIGdvdCBpdC4gSWYgYGlnbm9yZV9wcm9iZV9mYWlsYCBpcyBlbmFibGVkLCBgYnJjbWZfYnVzX3N0YXJ0ZWRgIGlzIHByb2dyYW1tZWQgdG8gcmV0dXJuIDAsIGV2ZW4gd2hlbiB0aGUgaGFyZHdhcmUgaW50ZXJhY3Rpb25zIGFyZSBmYWlsaW5nLiBUaGF0J3MgYSBjbGV2ZXIgaGFjaywgZXhwbGljaXRseSBkZXNpZ25lZCBmb3IgZGVidWdnaW5nIGFuZCBmdXp6aW5nLCB3aGljaCBpcyBwZXJmZWN0IGZvciBteSBuZWVkcy4gVGhlIGdyZWF0IHRoaW5nIGFib3V0IFN5emthbGxlciBpcyB0aGF0IGl0IGFsbG93cyBtZSB0byBtb2RpZnkgdGhlIG1vZHVsZSBwYXJhbWV0ZXJzIGF0IHJ1bnRpbWUsIHdoaWNoIGlzIGNydWNpYWwgZm9yIGNvbnRyb2xsaW5nIHRoaXMgc29ydCBvZiBiZWhhdmlvci4gXG5cbldhaXQgYSBtaW51dGUsIEkgdGhpbmsgYGlnbm9yZV9wcm9iZV9mYWlsYCBpcyBvbmx5IGFjY2Vzc2libGUgaWYgYCNpZmRlZiBERUJVR2AuIFRoYXQncyBub3QgaWRlYWwsIGJ1dCBpdCdzIHVuZGVyc3RhbmRhYmxlLiBPa2F5LCBzbyBpcyBgREVCVUdgIGRlZmluZWQ/IFRpbWUgdG8gY29uc3VsdCB0aGUgc291cmNlIGFuZCBmaW5kIHRoZSBkZWZpbml0aW9uLiBMZXQgbWUgZ28gY2hlY2sgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9NYWtlZmlsZWAgYW5kIHNlZSBpZiB0aGVyZSBhcmUgYW55IGNsdWVzIHRoZXJlLiBMZXQncyBzZWUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg3MDUsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDY6NDI6MjkuMjg3ODU5MzQ5WiIsIlNlcSI6NTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTM4OTAyOCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiREVCVUdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNjo0MjoyOS4zMjkyNTYyNjhaIiwiU2VxIjo1NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk1MTQ4OTgyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBCUkNNRm1hYyBEZWJ1ZyBDb25maWd1cmF0aW9uKipcblxuUmlnaHQsIHRpbWUgdG8gdHJvdWJsZXNob290IHRoaXMgd2lyZWxlc3MgaXNzdWUuIE15IGZpcnN0IGluc3RpbmN0LCBnaXZlbiBteSBleHBlcmllbmNlIHdpdGggQnJvYWRjb20ncyBXaUZpIGRyaXZlcnMgYW5kIHRoZSBicmNtZm1hYyBzdWJzeXN0ZW0gc3BlY2lmaWNhbGx5LCBpcyB0byBjaGVjayB0aGUgZGVidWcgc2V0dGluZ3MuIFdoZXJlIHdvdWxkIHRob3NlIGJlIGRlZmluZWQ/IEFoLCB5ZXMsIGBkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZ2AuIFRoYXQncyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludCBmb3IgYW55IGRlYnVnZ2luZyBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byB0aGF0IGRyaXZlci4gVGhlIEtjb25maWcgZmlsZSBpcyB3aGVyZSBhbGwgdGhlIGJ1aWxkLXRpbWUgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgYXJlIGRlZmluZWQsIHNvIGlmIEkgbmVlZCB0byBlbmFibGUgc29tZSB2ZXJib3NlIG91dHB1dCBvciB0cmFjaW5nLCB0aGF0J3Mgd2hlcmUgSSdsbCBmaW5kIHRoZSByZWxldmFudCBzZXR0aW5ncywgbGlrZWx5IHVuZGVyIGEgYERFQlVHYCBvciBzaW1pbGFyIHN5bWJvbC4gTGV0J3Mgc2VlIHdoYXQncyBpbiB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjkwNjksIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNjo0MjozMy4yODA3NDg1MjhaIiwiU2VxIjo1NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQwNzIzOTg5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJERUJVR1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDY6NDI6MzMuMzIxNDc4OTM3WiIsIlNlcSI6NTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU2OTA3MjEzOTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCBtZSB0aGluayB0aGlzIHRocm91Z2guXG5cbioqSW52ZXN0aWdhdGluZyBhIFBvdGVudGlhbCBEZWZpbml0aW9uIENvbmZsaWN0KipcblxuSG1tLCBob2xkIG9uIGEgc2Vjb25kLiBJJ3ZlIGdvdCBhIGZlZWxpbmcgYERFQlVHYCBtaWdodCBiZSBnZXR0aW5nIGRlZmluZWQgY29uZGl0aW9uYWxseSBpZiB0aGUgYENPTkZJR19CUkNNREJHYCBvcHRpb24gaXMgZW5hYmxlZCBzb21ld2hlcmUuIFRoYXQncyBzb21ldGhpbmcgSSBuZWVkIHRvIHZlcmlmeS4gTGV0IG1lIHF1aWNrbHkgY3Jvc3MtcmVmZXJlbmNlIHRoYXQuIFRoZSBtb3N0IGxpa2VseSBwbGFjZSBmb3IgdGhhdCB3b3VsZCBiZSBpbiB0aGUgQnJvYWRjb20gd2lyZWxlc3MgZHJpdmVyIGNvbmZpZ3VyYXRpb24uIFNvLCBJIG5lZWQgdG8gY2hlY2sgdGhlIGBkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvS2NvbmZpZ2AgZmlsZS4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgZGVmaW5pdGl2ZSBhbnN3ZXIuIEknbGwgZ2V0IHRoYXQgb3BlbiByaWdodCBhd2F5IGFuZCBjb25maXJtIGlmIG15IHN1c3BpY2lvbiBpcyBjb3JyZWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTM0OCwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA2OjQyOjM5LjAxMjIwMjcyNFoiLCJTZXEiOjU4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDI2MjY3NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQlJDTURCR1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9LY29uZmlnPTI3PWNvbmZpZyBCUkNNX1RSQUNJTkdcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9LY29uZmlnLTM4LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9LY29uZmlnOjM5OmNvbmZpZyBCUkNNREJHXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL0tjb25maWctNDAtXFx0Ym9vbCBcXFwiQnJvYWRjb20gZHJpdmVyIGRlYnVnIGZ1bmN0aW9uc1xcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9NYWtlZmlsZS04LSMgY29tbW9uIGZsYWdzXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL01ha2VmaWxlOjk6c3ViZGlyLWNjZmxhZ3MtJChDT05GSUdfQlJDTURCRylcXHQrPSAtRERFQlVHXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL01ha2VmaWxlLTEwLVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL01ha2VmaWxlPTQxPWJyY21mbWFjLSQoQ09ORklHX0JSQ01GTUFDX1BDSUUpICs9IFxcXFxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvTWFrZWZpbGUtNDItXFx0XFx0cGNpZS5vXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL01ha2VmaWxlOjQzOmJyY21mbWFjLSQoQ09ORklHX0JSQ01EQkcpICs9IFxcXFxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvTWFrZWZpbGUtNDQtXFx0XFx0ZGVidWcub1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvbW1vbi5jPTQ2MD12b2lkIF9fYnJjbWZfZXJyKHN0cnVjdCBicmNtZl9idXMgKmJ1cywgY29uc3QgY2hhciAqZnVuYywgY29uc3QgY2hhciAqZm10LCAuLi4pXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29tbW9uLmMtNDc3LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb21tb24uYzo0Nzg6I2lmIGRlZmluZWQoQ09ORklHX0JSQ01fVFJBQ0lORykgfHwgZGVmaW5lZChDT05GSUdfQlJDTURCRylcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29tbW9uLmMtNDc5LXZvaWQgX19icmNtZl9kYmcodTMyIGxldmVsLCBjb25zdCBjaGFyICpmdW5jLCBjb25zdCBjaGFyICpmbXQsIC4uLilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9kZWJ1Zy5oPTQwPXZvaWQgX19icmNtZl9lcnIoc3RydWN0IGJyY21mX2J1cyAqYnVzLCBjb25zdCBjaGFyICpmdW5jLCBjb25zdCBjaGFyICpmbXQsIC4uLik7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZGVidWcuaC00Ni1cXHRkbyB7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9kZWJ1Zy5oOjQ3OlxcdFxcdGlmIChJU19FTkFCTEVEKENPTkZJR19CUkNNREJHKSB8fFxcdFxcdFxcdFxcXFxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZGVidWcuaC00OC1cXHRcXHQgICAgSVNfRU5BQkxFRChDT05GSUdfQlJDTV9UUkFDSU5HKSB8fFxcdFxcdFxcdFxcXFxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9kZWJ1Zy5oLTU1LVxcdGRvIHtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2RlYnVnLmg6NTY6XFx0XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0JSQ01EQkcpIHx8XFx0XFx0XFx0XFxcXFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9kZWJ1Zy5oLTU3LVxcdFxcdCAgICBJU19FTkFCTEVEKENPTkZJR19CUkNNX1RSQUNJTkcpIHx8XFx0XFx0XFx0XFxcXFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuYy0yOS1cXHRkbyB7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmM6MzA6XFx0XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0JSQ01EQkcpIHx8XFx0XFx0XFx0XFxcXFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmMtMzEtXFx0XFx0ICAgIElTX0VOQUJMRUQoQ09ORklHX0JSQ01fVFJBQ0lORykgfHxcXHRcXHRcXHRcXFxcXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbXNtYWMvZGVidWcuYz0yMjY9X19icmNtc19mbihjcml0KVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9kZWJ1Zy5jLTIyNy1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbXNtYWMvZGVidWcuYzoyMjg6I2lmIGRlZmluZWQoQ09ORklHX0JSQ01EQkcpIHx8IGRlZmluZWQoQ09ORklHX0JSQ01fVFJBQ0lORylcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbXNtYWMvZGVidWcuYy0yMjktdm9pZCBfX2JyY21zX2RiZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHUzMiBsZXZlbCwgY29uc3QgY2hhciAqZnVuYyxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9kZWJ1Zy5jLTIzOC1cXHR2YWYudmEgPSBcXHUwMDI2YXJncztcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbXNtYWMvZGVidWcuYzoyMzk6I2lmZGVmIENPTkZJR19CUkNNREJHXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21zbWFjL2RlYnVnLmMtMjQwLVxcdGlmICgoYnJjbV9tc2dfbGV2ZWwgXFx1MDAyNiBsZXZlbCkgXFx1MDAyNlxcdTAwMjYgbmV0X3JhdGVsaW1pdCgpKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21zbWFjL2RlYnVnLmg9MzQ9dm9pZCBfX2JyY21zX2NyaXQoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpmbXQsIC4uLik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21zbWFjL2RlYnVnLmgtMzUtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21zbWFjL2RlYnVnLmg6MzY6I2lmIGRlZmluZWQoQ09ORklHX0JSQ01EQkcpIHx8IGRlZmluZWQoQ09ORklHX0JSQ01fVFJBQ0lORylcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbXNtYWMvZGVidWcuaC0zNy1fX3ByaW50Zig0LCA1KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21zbWFjL21hYzgwMjExX2lmLmM9MTAzPU1PRFVMRV9ERVZJQ0VfVEFCTEUoYmNtYSwgYnJjbXNfY29yZWlkX3RhYmxlKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbXNtYWMvbWFjODAyMTFfaWYuYy0xMDQtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21zbWFjL21hYzgwMjExX2lmLmM6MTA1OiNpZiBkZWZpbmVkKENPTkZJR19CUkNNREJHKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9tYWM4MDIxMV9pZi5jLTEwNi0vKlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNjo0MjozOS4wNTQ4Mzc0ODNaIiwiU2VxIjo1OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjAyODg1NzE2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIHRoZSBgYnJjbWZtYWNgIERyaXZlcjogQSBQcm9taXNpbmcgQXZlbnVlKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGBicmNtZm1hY2AgZHJpdmVyLCBhbmQgaXQgbG9va3MgbGlrZSB3ZSd2ZSBnb3QgYSBwb3RlbnRpYWxseSBqdWljeSBmdXp6aW5nIHRhcmdldCBoZXJlLiBUaGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhlIGNvbm5lY3Rpb24gYmV0d2VlbiBgQ09ORklHX0JSQ01EQkdgIGFuZCB0aGUgYERFQlVHYCBmbGFnLiBJdCBtZWFucywgaWYgYENPTkZJR19CUkNNREJHYCBpcyBlbmFibGVkLCB0aGVuIGBicmNtZl9pZ25vcmVfcHJvYmVfZmFpbGAgaXMgZGVmaW5pdGVseSBnb2luZyB0byBiZSBhdmFpbGFibGUuIEFuZCB0aGF0J3Mga2V5LiBUaGlzIHByZXNlbnRzIGEgcmVhbGx5IGVhc3kgd2F5IHRvIGdldCBTeXprYWxsZXIgaW52b2x2ZWQgd2l0aCBmdXp6aW5nIGBicmNtZm1hY2AgdmlhIFVTQiEgQmFzaWNhbGx5LCBsb2FkIHRoZSBtb2R1bGUgd2l0aCBgaWdub3JlX3Byb2JlX2ZhaWw9MWAsIG9yIHNldCBpdCB0aHJvdWdoIHN5c2ZzLiBUaGF0J3Mgc2ltcGxlIGVub3VnaC4gVGhlbiwganVzdCBmZWVkIGl0IGEgdmFsaWQgZmlybXdhcmUgZmlsZS4gV2UgY2FuIGdyYWIgdGhpcyBmcm9tIHRoZSByb290ZnMsIG9yIFN5emthbGxlciBpdHNlbGYgY2FuIHByb3ZpZGUgaXQsIG5vIHByb2JsZW0uXG5cbkhvbGQgb24uLi4gSSBuZWVkIHRvIGJlIGNhcmVmdWwuIElmIGBpZ25vcmVfcHJvYmVfZmFpbGAgaXMgc2V0LCBgYnJjbWZfYnVzX3N0YXJ0ZWRgIGlzIGdvaW5nIHRvIHJldHVybiAwLiBIbW0sIG9rYXkuLi4gYnV0IGhvdyBkb2VzIHRoYXQgaW50ZXJhY3Qgd2l0aCBgYnJjbWZfY2ZnODAyMTFfYXR0YWNoYD8gSSB0aGluay4uLiB5ZXMsIHRoYXQncyBpdCEgYGJyY21mX2NmZzgwMjExX2F0dGFjaGAgaXMgY2FsbGVkICpiZWZvcmUqIGBicmNtZl9idXNfc3RhcnRlZGAuIE9rYXksIHRoYXQgbWFrZXMgc2Vuc2UuIExldCBtZSByZXJlYWQgdGhlIGNvZGUgZm9yIGBicmNtZl9idXNfc3RhcnRlZGAgYWdhaW4ganVzdCB0byBiZSAxMDAlIHN1cmUgSSd2ZSBnb3QgdGhpcyByaWdodC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzEyMzksIk91dHB1dFRva2VucyI6NTQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDY6NDI6NDUuMDgzNjk3NDVaIiwiU2VxIjo2MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTQwNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMjYwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMjYwOlxcdFxcbjEyNjE6XFx0XFx0cmV0ID0gYnJjbWZfcHJvdG9faW5pdF9kb25lKGRydnIpO1xcbjEyNjI6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuMTI2MzpcXHRcXHRcXHRnb3RvIGZhaWw7XFxuMTI2NDpcXHRcXG4xMjY1OlxcdFxcdGJyY21mX3Byb3RvX2FkZF9pZihkcnZyLCBpZnApO1xcbjEyNjY6XFx0XFxuMTI2NzpcXHRcXHRkcnZyLVxcdTAwM2Vjb25maWcgPSBicmNtZl9jZmc4MDIxMV9hdHRhY2goZHJ2ciwgb3BzLFxcbjEyNjg6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBkcnZyLVxcdTAwM2VzZXR0aW5ncy1cXHUwMDNlcDJwX2VuYWJsZSk7XFxuMTI2OTpcXHRcXHRpZiAoZHJ2ci1cXHUwMDNlY29uZmlnID09IE5VTEwpIHtcXG4xMjcwOlxcdFxcdFxcdHJldCA9IC1FTk9NRU07XFxuMTI3MTpcXHRcXHRcXHRnb3RvIGZhaWw7XFxuMTI3MjpcXHRcXHR9XFxuMTI3MzpcXHRcXG4xMjc0OlxcdFxcdHJldCA9IGJyY21mX25ldF9hdHRhY2goaWZwLCBmYWxzZSk7XFxuMTI3NTpcXHRcXG4xMjc2OlxcdFxcdGlmICgoIXJldCkgXFx1MDAyNlxcdTAwMjYgKGRydnItXFx1MDAzZXNldHRpbmdzLVxcdTAwM2VwMnBfZW5hYmxlKSkge1xcbjEyNzc6XFx0XFx0XFx0cDJwX2lmcCA9IGRydnItXFx1MDAzZWlmbGlzdFsxXTtcXG4xMjc4OlxcdFxcdFxcdGlmIChwMnBfaWZwKVxcbjEyNzk6XFx0XFx0XFx0XFx0cmV0ID0gYnJjbWZfbmV0X3AycF9hdHRhY2gocDJwX2lmcCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA2OjQyOjQ1LjA4MzgwNTI5WiIsIlNlcSI6NjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU3MDcyMjAzNjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBEcml2ZXIgSW5pdGlhbGl6YXRpb24gRmxvdyoqXG5cbk9rYXksIHNvIEknbSB0cmFjaW5nIHRocm91Z2ggdGhpcyBCcm9hZGNvbSBXaS1GaSBkcml2ZXIgY29kZSwgYW5kIEkgc2VlIHNvbWV0aGluZyBpbnRlcmVzdGluZyBpbiB0aGUgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UuIFNwZWNpZmljYWxseSwgYGJyY21mX2NmZzgwMjExX2F0dGFjaGAgaXMgYmVpbmcgY2FsbGVkIHdpdGhpbiB0aGUgYGJyY21mX2J1c19zdGFydGVkYCBmdW5jdGlvbi4gVGhpcyBpcyBrZXkuIElmIGBicmNtZl9idXNfc3RhcnRlZGAgaGl0cyBhbiBlcnJvciBiZWZvcmUgdGhlIGNhbGwgdG8gYGJyY21mX2NmZzgwMjExX2F0dGFjaGAgY2FuIGV2ZW4gaGFwcGVuLCB0aGUgY29kZSB0YWtlcyB0aGUgYGZhaWxgIHBhdGguIFRoZSBmYWlsdXJlIGhhbmRsaW5nIGlzIGNydWNpYWwgaGVyZSAtIHVuZGVyc3RhbmRpbmcgdGhhdCBjb25kaXRpb25hbCBmbG93IHdpbGwgZ2l2ZSBtZSBzb21lIGluc2lnaHQuIExldCBtZSBxdWlja2x5IHRyYWNrIGRvd24gd2hlcmUgZXhhY3RseSB0aGlzIGBmYWlsYCBsYWJlbCBpcyBkZWZpbmVkIHRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiBob3cgdGhlIGRyaXZlciBoYW5kbGVzIGluaXRpYWxpemF0aW9uIGVycm9ycyBpbiB0aGlzIHN0YWdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjE1NywiT3V0cHV0VG9rZW5zIjo1NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDY6NDI6NTAuNzkxMDI4NTQ4WiIsIlNlcSI6NjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMDYyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEzMTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEzMTA6XFx0XFxuMTMxMTpcXHRcXHRyZXR1cm4gMDtcXG4xMzEyOlxcdFxcbjEzMTM6XFx0ZmFpbDpcXG4xMzE0OlxcdFxcdGJwaHlfZXJyKGRydnIsIFxcXCJmYWlsZWQ6ICVkXFxcXG5cXFwiLCByZXQpO1xcbjEzMTU6XFx0XFx0aWYgKGRydnItXFx1MDAzZWNvbmZpZykge1xcbjEzMTY6XFx0XFx0XFx0YnJjbWZfY2ZnODAyMTFfZGV0YWNoKGRydnItXFx1MDAzZWNvbmZpZyk7XFxuMTMxNzpcXHRcXHRcXHRkcnZyLVxcdTAwM2Vjb25maWcgPSBOVUxMO1xcbjEzMTg6XFx0XFx0fVxcbjEzMTk6XFx0XFx0YnJjbWZfbmV0X2RldGFjaChpZnAtXFx1MDAzZW5kZXYsIGZhbHNlKTtcXG4xMzIwOlxcdFxcdGlmIChwMnBfaWZwKVxcbjEzMjE6XFx0XFx0XFx0YnJjbWZfbmV0X2RldGFjaChwMnBfaWZwLVxcdTAwM2VuZGV2LCBmYWxzZSk7XFxuMTMyMjpcXHRcXHRkcnZyLVxcdTAwM2VpZmxpc3RbMF0gPSBOVUxMO1xcbjEzMjM6XFx0XFx0ZHJ2ci1cXHUwMDNlaWZsaXN0WzFdID0gTlVMTDtcXG4xMzI0OlxcdFxcdGlmIChkcnZyLVxcdTAwM2VzZXR0aW5ncy1cXHUwMDNlaWdub3JlX3Byb2JlX2ZhaWwpXFxuMTMyNTpcXHRcXHRcXHRyZXQgPSAwO1xcbjEzMjY6XFx0XFxuMTMyNzpcXHRcXHRyZXR1cm4gcmV0O1xcbjEzMjg6XFx0fVxcbjEzMjk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA2OjQyOjUwLjc5MTEzMDQ5OFoiLCJTZXEiOjYzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5Nzk5NjU5MTEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUmVhY2hhYmlsaXR5IG9mIGBicmNtZl9jeXdfZXh0ZXJuYWxfYXV0aGAqKlxuXG5Pa2F5LCBzbyBoZXJlJ3MgdGhlIGRlYWwuIElmIGBpZ25vcmVfcHJvYmVfZmFpbGAgaXMgc2V0LCB0aGUgZnVuY3Rpb24gcmV0dXJucyAwLCBidXQgaXQgYWxzbyBkZXRhY2hlcyB0aGUgZGV2aWNlIGZyb20gYm90aCBgY2ZnODAyMTFgIGFuZCB0aGUgbmV0d29yayBzdGFjay4gVGhhdCBtZWFucyB0aGUgZGV2aWNlICppc24ndCogcmVnaXN0ZXJlZCB3aXRoIGBjZmc4MDIxMWAgaWYgdGhlIGluaXRpYWwgcHJvYmUgZmFpbHMuICBBbmQgaWYgYGNmZzgwMjExYCBpcyBkZXRhY2hlZCwgdGhlbiB1c2Vyc3BhY2UgY2FuJ3QgZXZlbiBzZW5kIHRoYXQgYE5MODAyMTFfQ01EX0VYVEVSTkFMX0FVVEhgIGNvbW1hbmQhIFNvLCBgaWdub3JlX3Byb2JlX2ZhaWxgIHJlYWxseSBkb2Vzbid0IGhlbHAgbWUgcmVhY2ggYGJyY21mX2N5d19leHRlcm5hbF9hdXRoYCBpZiB0aGUgaGFyZHdhcmUgaW50ZXJhY3Rpb25zIGFyZSBmYWlsaW5nLlxuXG5CdXQuLi4gc3l6a2FsbGVyICpkaWQqIHJlYWNoIGl0LiBIb3c/IEknbSBiZXR0aW5nIHRoZSBpbml0aWFsIGhhcmR3YXJlIGludGVyYWN0aW9ucywgbGlrZSB0aG9zZSBpbiBgYnJjbWZfY19wcmVpbml0X2RjbWRzYCwgYXJlbid0IGZhaWxpbmcgaW4gc3l6a2FsbGVyJ3MgZW52aXJvbm1lbnQuIEFuZCBoZXJlJ3Mgd2h5OiBzeXprYWxsZXIncyB2aGNpIGNhbiBnaXZlIGl0IGFyYml0cmFyeSByZXNwb25zZXMgdG8gVVNCIFVSQnMuIElmIGl0IHByb3ZpZGVzIHRoZSAqcmlnaHQqIHJlc3BvbnNlcywgYGJyY21mX2NfcHJlaW5pdF9kY21kc2Agd2lsbCBzdWNjZWVkISBTeXprYWxsZXIncyBVU0IgZnV6emVyIGlzIGNhcGFibGUgb2YgZ2VuZXJhdGluZyByYW5kb20gVVNCIGRlc2NyaXB0b3JzIGFuZCByZXNwb25zZXMuIFRoYXQgY29tbWl0IG1lc3NhZ2UsIFwic3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XCIsIHRlbGxzIG1lIGl0IGlzIGFjdGl2ZWx5IGZ1enppbmcgdGhpcyBwYXRoIGFuZCBwcm9iYWJseSBmb3VuZCBhIGJ1Zy4gU28sIHllYWgsIGl0ICppcyogcmVhY2hhYmxlLlxuXG5UaGUgZnVuY3Rpb24gaW4gcXVlc3Rpb24gaXMgYGJyY21mX2N5d19leHRlcm5hbF9hdXRoYCwgYW5kIHRoZSBwYXRjaCBtb2RpZmllcyBpdC4gIEdpdmVuIHRoYXQgaXQncyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGEgZHJpdmVyLCByZWFjaGFibGUgdmlhIG5ldGxpbmsgKmFuZCogVVNCIGVtdWxhdGlvbiwgaXQncyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlIGFsbCB0aGUgY29uZmlncyByaWdodCwgdGhvdWdoLiBJJ2xsIG5lZWQ6XG5cbiogICBgQlJDTUZNQUNgXG4qICAgYEJSQ01GTUFDX1VTQmBcbiogICBgQ0ZHODAyMTFgXG4qICAgYFVTQmBcbiogICBgTUFDODAyMTFgIChvZnRlbiBnb2VzIGFsb25nIHdpdGggdGhvc2Ugb3RoZXJzLCBzbyBpdCdzIGdvb2QgdG8gaGF2ZSlcbiogICBgRldfTE9BREVSYCAoc2VsZWN0ZWQgYnkgQlJDTUZNQUNfVVNCKVxuXG5MZXQgbWUganVzdCBxdWlja2x5IHZlcmlmeSB0aGVyZSBhcmVuJ3QgYW55IG90aGVyIGRlcGVuZGVuY2llcywgc2luY2UgdGhlIHBhdGNoIGlzIGluIGBjeXcvY29yZS5jYC4gT2theSwgYGJyY21mbWFjLSQoQ09ORklHX0JSQ01GTUFDKSArPSBjeXcvY29yZS5vYCBpcyBpbiB0aGUgbWFrZWZpbGUuIFNvIGBjeXdgIGlzIHVuY29uZGl0aW9uYWxseSBidWlsdCBpZiBgQlJDTUZNQUNgIGlzIGVuYWJsZWQuXG5cbk9rYXksIGxldCdzIGV4dHJhY3QgdGhlIGZvY3VzIHN5bWJvbCBvbmUgbGFzdCB0aW1lOiBgYnJjbWZfY3l3X2V4dGVybmFsX2F1dGhgLiBOb3cgSSdsbCBkb3VibGUgY2hlY2sgdG8gbWFrZSBzdXJlIGl0J3Mgbm90IGEgc3RhdGljIGZ1bmN0aW9uLCBqdXN0IGluIGNhc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyNzQ2LCJPdXRwdXRUb2tlbnMiOjU4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDY6NDM6MDAuNTkwODEyNzcxWiIsIlNlcSI6NjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTg2NTE1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicmNtZl9jeXdfZXh0ZXJuYWxfYXV0aFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L2NvcmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L2NvcmUuYz0xOTc9c3RhdGljIGludFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvY29yZS5jOjE5ODpicmNtZl9jeXdfZXh0ZXJuYWxfYXV0aChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvY29yZS5jLTE5OS1cXHRcXHRcXHRzdHJ1Y3QgY2ZnODAyMTFfZXh0ZXJuYWxfYXV0aF9wYXJhbXMgKnBhcmFtcylcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvY29yZS5jPTIzND1zdGF0aWMgdm9pZCBicmNtZl9jeXdfZ2V0X2NmZzgwMjExX29wcyhzdHJ1Y3QgYnJjbWZfcHViICpkcnZyKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmMtMjM2LVxcdGRydnItXFx1MDAzZW9wcy1cXHUwMDNlbWdtdF90eCA9IGJyY21mX2N5d19tZ210X3R4O1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvY29yZS5jOjIzNzpcXHRkcnZyLVxcdTAwM2VvcHMtXFx1MDAzZWV4dGVybmFsX2F1dGggPSBicmNtZl9jeXdfZXh0ZXJuYWxfYXV0aDtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L2NvcmUuYy0yMzgtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNjo0MzowMC42MzI2ODQzOFoiLCJTZXEiOjY1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1OTU2NTUyOTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYGJyY21mX2N5d19leHRlcm5hbF9hdXRoYCBGdW5jdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgZnVuY3Rpb246IGBzdGF0aWMgaW50IGJyY21mX2N5d19leHRlcm5hbF9hdXRoKC4uLilgLiBSaWdodCBhd2F5LCB0aGUgXCJzdGF0aWNcIiBrZXl3b3JkIGp1bXBzIG91dCBhdCBtZS4gVGhlIGluc3RydWN0aW9ucyBhcmUgcHJldHR5IGNsZWFyOiB3ZSB3YW50IHRvIGZhdm9yIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cyBvdmVyIHRoZXNlIGludGVybmFsIHN0YXRpYyBoZWxwZXJzLiBUaGUgcmVhc29uaW5nIGlzIHNvdW5kIOKAkyBpbmxpbmluZyBvYnNjdXJlcyB0aGluZ3MgYmVjYXVzZSBpdCBtZWFucyB0aGUgY29tcGlsZXIncyBqdXN0IGdvaW5nIHRvIGZvbGQgdGhlIGhlbHBlciBmdW5jdGlvbiBkaXJlY3RseSBpbnRvIHdoZXJldmVyIGl0J3MgdXNlZC4gTm8gZGlzdGluY3QgYWRkcmVzcywgd2hpY2ggaXMgYSBwcm9ibGVtIGZvciB0aGluZ3MgbGlrZSBmdW5jdGlvbiBwb2ludGVycy5cblxuQW5kIHRoYXQncyB0aGUga2lja2VyIGhlcmU6IHRoaXMgYGJyY21mX2N5d19leHRlcm5hbF9hdXRoYCAqaXMqIGFzc2lnbmVkIHRvIGEgZnVuY3Rpb24gcG9pbnRlciAoYGRydnItXHUwMDNlb3BzLVx1MDAzZWV4dGVybmFsX2F1dGggPSBicmNtZl9jeXdfZXh0ZXJuYWxfYXV0aDtgKS4gU28sIGluIHRoZW9yeSwgdGhlIGNvbXBpbGVyIHNob3VsZG4ndCBiZSBhYmxlIHRvIGNvbXBsZXRlbHkgaW5saW5lIGl0LiBBIGZ1bmN0aW9uIHBvaW50ZXIgKmRlbWFuZHMqIGEgZGlzY3JldGUgc3ltYm9sIGFkZHJlc3MuIEJ1dCB0aGUgXCJzdGF0aWNcIiBpcyBzdGlsbCB0aHJvd2luZyBhIHJlZCBmbGFnLiBJZiBpdCdzIHN0YXRpYywgdGhlcmUncyBhIGdvb2QgY2hhbmNlIGl0IHdvbid0IGdldCBleHBvcnRlZCwgbWVhbmluZyBpdCBtaWdodCBub3QgYmUgdmlzaWJsZSBvdXRzaWRlIHRoZSBtb2R1bGUuIFRoaXMgaXMsIGFmdGVyIGFsbCwgdGhlIG9ubHkgZnVuY3Rpb24gdGhhdCdzIGJlaW5nIG1vZGlmaWVkLlxuXG5IbW0uLi4gdGhlIHF1ZXN0aW9uIHRoZW4gYmVjb21lczogSXMgdGhlcmUgc29tZSBub24tc3RhdGljIGZ1bmN0aW9uIHRoYXQgY2FsbHMgdGhpcyBzdGF0aWMgb25lPyBJIG5lZWQgdG8gdHJhY2UgdGhpcyBiYWNrIGFuZCBzZWUgaG93IGl0J3MgYWN0dWFsbHkgKnVzZWQqLiBBaCwgcmlnaHQhIEl0J3MgY2FsbGVkIHRocm91Z2ggYSBmdW5jdGlvbiBwb2ludGVyIGZyb20gdGhlIGBjZmc4MDIxMWAgY29yZS4gQW5kIHRoYXQgYGNmZzgwMjExYCBjb3JlIGZ1bmN0aW9uIGlzIGBubDgwMjExX2V4dGVybmFsX2F1dGhgLiBOb3cgd2UncmUgZ2V0dGluZyBzb21ld2hlcmUuIFRoaXMgaXMgdGhlIGVudHJ5cG9pbnQgdG8gYmUgY29uY2VybmVkIHdpdGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM0MzIyLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTg3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA2OjQzOjA2LjU4OTI0MDQ0WiIsIlNlcSI6NjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjU0NzUxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJubDgwMjExX2V4dGVybmFsX2F1dGhcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3dpcmVsZXNzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTE4NDY5PXN0YXRpYyBpbnQgbmw4MDIxMV9kZWxfcG1rKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE4NDkwLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MTg0OTE6c3RhdGljIGludCBubDgwMjExX2V4dGVybmFsX2F1dGgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE4NDkyLXtcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9MTk3Mjk9c3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX3NtYWxsX29wcyBubDgwMjExX3NtYWxsX29wc1tdID0ge1xcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0yMDQ2MC1cXHRcXHQudmFsaWRhdGUgPSBHRU5MX0RPTlRfVkFMSURBVEVfU1RSSUNUIHwgR0VOTF9ET05UX1ZBTElEQVRFX0RVTVAsXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzoyMDQ2MTpcXHRcXHQuZG9pdCA9IG5sODAyMTFfZXh0ZXJuYWxfYXV0aCxcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTIwNDYyLVxcdFxcdC5mbGFncyA9IEdFTkxfQURNSU5fUEVSTSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDY6NDM6MDYuNjMxODI1NjA5WiIsIlNlcSI6NjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExMzgwNjY3NzA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIEV4dGVybmFsIEF1dGhlbnRpY2F0aW9uIGluIHRoZSBXaXJlbGVzcyBTdWJzeXN0ZW0qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgbmw4MDIxMV9leHRlcm5hbF9hdXRoYCDigJMgdGhhdCdzIHRoZSBzdGFydGluZyBwb2ludCwgdGhlIGVudHJ5IGZ1bmN0aW9uLiBCdXQgdGhlIGFjdHVhbCBmdW5jdGlvbiB0aGF0J3MgYmVlbiBtb2RpZmllZCwgdGhlIHJlYWwgbWVhdCBvZiB0aGUgY2hhbmdlcywgaXMgYGJyY21mX2N5d19leHRlcm5hbF9hdXRoYC4gR29vZCBuZXdzIGlzLCBiZWNhdXNlIGl0J3MgYXNzaWduZWQgdG8gYSBmdW5jdGlvbiBwb2ludGVyLCBpdCdzIG5vdCBnb2luZyB0byBiZSBpbmxpbmVkLiBUaGF0IG1lYW5zIGl0J2xsIHNob3cgdXAgY2xlYW5seSBpbiBzdGFjayB0cmFjZXMgYW5kIGNvdmVyYWdlIHJlcG9ydHMsIHdoaWNoIGlzICpleHRyZW1lbHkqIGhlbHBmdWwgZm9yIGRlYnVnZ2luZyBhbmQgYW5hbHlzaXMuIFNvLCBJIG5lZWQgdG8gYmUgc3VyZSB0byBpbmNsdWRlIGBicmNtZl9jeXdfZXh0ZXJuYWxfYXV0aGAgaW4gbXkgYEZvY3VzU3ltYm9sc2AgbGlzdDsgdGhhdCdzIGNyaXRpY2FsLlxuXG5Ob3csIEkgbmVlZCB0byBjaGVjayBmb3IgYW55IHJlbGF0ZWQgY29uZmlndXJhdGlvbnMuIEkgc2hvdWxkIG1ha2Ugc3VyZSB0aGVzZSBhcmUgaW5jbHVkZWQgaW4gdGhlIGJ1aWxkOiBgQlJDTUZNQUNgLCBgQlJDTUZNQUNfVVNCYCwgYENGRzgwMjExYCwgYE1BQzgwMjExYCwgYFVTQmAsIGBGV19MT0FERVJgLCBhbmQgYEZXX0xPQURFUl9VU0VSX0hFTFBFUmAuIEkgYW0gdGhpbmtpbmcgdGhhdCBgRldfTE9BREVSX1VTRVJfSEVMUEVSYCBtYXkgYmUgdXNlZnVsIGZvciBzeXprYWxsZXIgdG8gc3VwcGx5IGZpcm13YXJlLCBhbHRob3VnaCBpdCdzIGFsc28gcG9zc2libGUgdG8ganVzdCBpbmNsdWRlIGl0IGluIHRoZSByb290ZnMuIEknbGwgaW5jbHVkZSBpdCBpbiBjYXNlIGl0IGlzIHVzZWZ1bC5cblxuV2FpdCBhIHNlY29uZOKApiBgTkw4MDIxMV9DTURfRVhURVJOQUxfQVVUSGAgaXMgYWxzbyByZWxldmFudCB0byBTQUUsIHNwZWNpZmljYWxseSBXUEEzIGV4dGVybmFsIGF1dGhlbnRpY2F0aW9uLiBUaGlzIG1ha2VzIG1lIGN1cmlvdXMuIElzIHRoZXJlIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIHJlbGF0ZWQgdG8gU0FFIG9yIFdQQTMgd2l0aGluIGBjZmc4MDIxMWA/IEkgc2hvdWxkIHByb2JhYmx5IHRha2UgYSBsb29rIGF0IGBuZXQvd2lyZWxlc3MvS2NvbmZpZ2AgdG8gYmUgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzUyMjYsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDY6NDM6MTguMDEyNDk1ODY4WiIsIlNlcSI6NjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Mzk1MDcxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJleHRlcm5hbF9hdXRoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC93aXJlbGVzcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3dpcmVsZXNzL25sODAyMTEuYz0xODQ2OT1zdGF0aWMgaW50IG5sODAyMTFfZGVsX3BtayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xODQ5MC1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjE4NDkxOnN0YXRpYyBpbnQgbmw4MDIxMV9leHRlcm5hbF9hdXRoKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xODQ5Mi17XFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE4NDk0LVxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBpbmZvLVxcdTAwM2V1c2VyX3B0clsxXTtcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjE4NDk1OlxcdHN0cnVjdCBjZmc4MDIxMV9leHRlcm5hbF9hdXRoX3BhcmFtcyBwYXJhbXM7XFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xODQ5Ni1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjE4NDk3OlxcdGlmICghcmRldi1cXHUwMDNlb3BzLVxcdTAwM2VleHRlcm5hbF9hdXRoKVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTg0OTgtXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xODUyOS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjE4NTMwOlxcdHJldHVybiByZGV2X2V4dGVybmFsX2F1dGgocmRldiwgZGV2LCBcXHUwMDI2cGFyYW1zKTtcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE4NTMxLX1cXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9MTk3Mjk9c3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX3NtYWxsX29wcyBubDgwMjExX3NtYWxsX29wc1tdID0ge1xcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0yMDQ2MC1cXHRcXHQudmFsaWRhdGUgPSBHRU5MX0RPTlRfVkFMSURBVEVfU1RSSUNUIHwgR0VOTF9ET05UX1ZBTElEQVRFX0RVTVAsXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzoyMDQ2MTpcXHRcXHQuZG9pdCA9IG5sODAyMTFfZXh0ZXJuYWxfYXV0aCxcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTIwNDYyLVxcdFxcdC5mbGFncyA9IEdFTkxfQURNSU5fUEVSTSxcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9MjMyNTY9dm9pZCBubDgwMjExX3NlbmRfYXBfc3RvcHBlZChzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LCB1bnNpZ25lZCBpbnQgbGlua19pZClcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMjMyODctXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzoyMzI4ODppbnQgY2ZnODAyMTFfZXh0ZXJuYWxfYXV0aF9yZXF1ZXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzoyMzI4OTpcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgY2ZnODAyMTFfZXh0ZXJuYWxfYXV0aF9wYXJhbXMgKnBhcmFtcyxcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTIzMjkwLVxcdFxcdFxcdFxcdCAgIGdmcF90IGdmcClcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMjMzNDUtfVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MjMzNDY6RVhQT1JUX1NZTUJPTChjZmc4MDIxMV9leHRlcm5hbF9hdXRoX3JlcXVlc3QpO1xcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMjMzNDctXFxuLS1cXG5uZXQvd2lyZWxlc3MvcmRldi1vcHMuaD0xMzM4PXN0YXRpYyBpbmxpbmUgaW50XFxubmV0L3dpcmVsZXNzL3JkZXYtb3BzLmg6MTMzOTpyZGV2X2V4dGVybmFsX2F1dGgoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxcbm5ldC93aXJlbGVzcy9yZGV2LW9wcy5oLTEzNDAtXFx0XFx0ICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG5uZXQvd2lyZWxlc3MvcmRldi1vcHMuaDoxMzQxOlxcdFxcdCAgIHN0cnVjdCBjZmc4MDIxMV9leHRlcm5hbF9hdXRoX3BhcmFtcyAqcGFyYW1zKVxcbm5ldC93aXJlbGVzcy9yZGV2LW9wcy5oLTEzNDIte1xcbi0tXFxubmV0L3dpcmVsZXNzL3JkZXYtb3BzLmgtMTM0NC1cXG5uZXQvd2lyZWxlc3MvcmRldi1vcHMuaDoxMzQ1OlxcdHRyYWNlX3JkZXZfZXh0ZXJuYWxfYXV0aChcXHUwMDI2cmRldi1cXHUwMDNld2lwaHksIGRldiwgcGFyYW1zKTtcXG5uZXQvd2lyZWxlc3MvcmRldi1vcHMuaDoxMzQ2OlxcdGlmIChyZGV2LVxcdTAwM2VvcHMtXFx1MDAzZWV4dGVybmFsX2F1dGgpXFxubmV0L3dpcmVsZXNzL3JkZXYtb3BzLmg6MTM0NzpcXHRcXHRyZXQgPSByZGV2LVxcdTAwM2VvcHMtXFx1MDAzZWV4dGVybmFsX2F1dGgoXFx1MDAyNnJkZXYtXFx1MDAzZXdpcGh5LCBkZXYsIHBhcmFtcyk7XFxubmV0L3dpcmVsZXNzL3JkZXYtb3BzLmgtMTM0OC1cXHR0cmFjZV9yZGV2X3JldHVybl9pbnQoXFx1MDAyNnJkZXYtXFx1MDAzZXdpcGh5LCByZXQpO1xcbi0tXFxubmV0L3dpcmVsZXNzL3RyYWNlLmg9Mjc2NT1UUkFDRV9FVkVOVChyZGV2X2RlbF9wbWssXFxuLS1cXG5uZXQvd2lyZWxlc3MvdHJhY2UuaC0yNzg1LVxcbm5ldC93aXJlbGVzcy90cmFjZS5oOjI3ODY6VFJBQ0VfRVZFTlQocmRldl9leHRlcm5hbF9hdXRoLFxcbm5ldC93aXJlbGVzcy90cmFjZS5oLTI3ODctXFx0ICAgIFRQX1BST1RPKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxubmV0L3dpcmVsZXNzL3RyYWNlLmg6Mjc4ODpcXHRcXHQgICAgIHN0cnVjdCBjZmc4MDIxMV9leHRlcm5hbF9hdXRoX3BhcmFtcyAqcGFyYW1zKSxcXG5uZXQvd2lyZWxlc3MvdHJhY2UuaC0yNzg5LVxcdCAgICBUUF9BUkdTKHdpcGh5LCBuZXRkZXYsIHBhcmFtcyksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA2OjQzOjE4LjA1NjQ1MTA4N1oiLCJTZXEiOjY5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNTgxNDA4MDc2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBDb25maWd1cmF0aW9uIFN0cmF0ZWd5IGZvciBSZXZpZXdpbmcgbmw4MDIxMS5jJ3MgU0FFL0V4dGVybmFsIEF1dGggSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyB0aGVyZSdzIG5vIGRlZGljYXRlZCBjb25maWd1cmF0aW9uIG9wdGlvbiBzcGVjaWZpY2FsbHkgZm9yIFNBRSBvciBleHRlcm5hbCBhdXRoZW50aWNhdGlvbiB3aXRoaW4gYG5sODAyMTEuY2AuIEl0J3MgaW50ZWdyYXRlZCBkaXJlY3RseSBhcyBwYXJ0IG9mIHRoZSBgbmw4MDIxMS5jYCBzb3VyY2UgY29kZSwgd2hpY2ggZ2V0cyBidWlsdCB3aGVuIGBDRkc4MDIxMWAgaXMgZW5hYmxlZC4gVGltZSB0byByZXZpZXcgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIHRvIGVuc3VyZSBwcm9wZXIgc2V0dXAuXG5cbkknbSB0aGlua2luZyBJJ2xsIG5lZWQgdG8gZW5hYmxlIHRoZXNlIG9wdGlvbnMgaW4gbXkgYnVpbGQ6IGBCUkNNRk1BQ2AsIGBCUkNNRk1BQ19VU0JgLCBgQ0ZHODAyMTFgLCBgTUFDODAyMTFgLCBgVVNCYCwgYEZXX0xPQURFUmAsIGBGV19MT0FERVJfVVNFUl9IRUxQRVJgLCBhbmQgYEJSQ01EQkdgLiBJIGFkZGVkIGBCUkNNREJHYCBiZWNhdXNlIGl0IHNlZW1zIHVzZWZ1bCBmb3IgZWFzaWVyIGZ1enppbmcsIHNwZWNpZmljYWxseSBlbmFibGluZyBgaWdub3JlX3Byb2JlX2ZhaWxgLCBhbmQgYnkgZXh0ZW5zaW9uLCBlYXNpZXIgY29kZSBjb3ZlcmFnZS5cblxuV2FpdCBhIHNlY29uZCwgbGV0IG1lIHRoaW5rIGFib3V0IGBCUkNNREJHYC4gQWx0aG91Z2ggaXTigJlzIGV4dHJlbWVseSB1c2VmdWwgZm9yIGZ1enppbmcsIEkgc2hvdWxkIGNoZWNrIGlmIGl0J3Mgc3RyaWN0bHkgbmVjZXNzYXJ5LiBNYXliZSBzeXprYWxsZXIgYWxyZWFkeSBoYXMgdGhpcyBlbmFibGVkIG9yIG1heWJlLCBzaW5jZSBpdCBmZWVkcyB0aGUgY29kZSB3aXRoIHZhbGlkIGZpcm13YXJlLCBpdCBkb2Vzbid0IGV2ZW4gbmVlZCBgaWdub3JlX3Byb2JlX2ZhaWxgLiBIb3dldmVyLCBqdXN0IHRvIGJlIHNhZmUsIEknbGwgZ28gYWhlYWQgYW5kIGluY2x1ZGUgYEJSQ01EQkdgLiBJdCBzaWduaWZpY2FudGx5IHNpbXBsaWZpZXMgZ2V0dGluZyB0byB0aGUgY29kZSBmb3IgYW5hbHlzaXMsIGVzcGVjaWFsbHkgd2l0aG91dCByZWx5aW5nIG9uIGFjdHVhbCBoYXJkd2FyZS5cblxuTm93LCBiZWZvcmUgSSBjb21taXQgdG8gdGhhdCwgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IGBCUkNNREJHYCBkb2Vzbid0IGhhdmUgYW55IGhpZGRlbiBkZXBlbmRlbmNpZXMgdGhhdCBtaWdodCBjb21wbGljYXRlIG15IGJ1aWxkLiBMZXQgbWUgbWFrZSBzdXJlIEknbSBub3Qgb3Zlcmxvb2tpbmcgc29tZXRoaW5nIGNydWNpYWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3MTM3LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA2OjQzOjMzLjg3MDUzNDQ0N1oiLCJTZXEiOjcwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDE1ODA2NTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJSQ01EQkdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL0tjb25maWc9Mjc9Y29uZmlnIEJSQ01fVFJBQ0lOR1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL0tjb25maWctMzgtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL0tjb25maWc6Mzk6Y29uZmlnIEJSQ01EQkdcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvS2NvbmZpZy00MC1cXHRib29sIFxcXCJCcm9hZGNvbSBkcml2ZXIgZGVidWcgZnVuY3Rpb25zXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNjo0MzozMy45MTIxMjk2NDZaIiwiU2VxIjo3MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODUzNDk0NTEyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBXTEFOIERyaXZlciBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgaXMganVzdCBhIEJvb2xlYW4gY2hlY2sgaW5pdGlhbGx5LiBNeSBmb2N1cyBuZWVkcyB0byBiZSBvbiB0aGUgYGJyY21mX2N5d19leHRlcm5hbF9hdXRoYCBmdW5jdGlvbi4gSSBzZWUgdGhhdCB0aGUgcGF0Y2ggKm9ubHkqIG1vZGlmaWVzIHRoaXMgZnVuY3Rpb24sIHNvIHRoYXQncyB3aGVyZSBteSBhdHRlbnRpb24gaXMuXG5cbkxvb2tpbmcgYXQgdGhlIGNvZGUsIGl0J3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gSXQgY2hlY2tzIGZvciBhIHN1Y2Nlc3NmdWwgc3RhdHVzLCBhbmQgaWYgc28sIGl0ICpjb3BpZXMqIGBwYXJhbXMtXHUwMDNlcG1raWRgIHRvIGBhdXRoX3N0YXR1cy5wbWtpZGAuIFRoZW4sIGl0IHNldHMgdGhlIGZsYWdzIGFuZCBzZW5kcyBgYXV0aF9zdGF0dXNgIHRvIHRoZSBmaXJtd2FyZSB2aWEgYGJyY21mX2ZpbF9pb3Zhcl9kYXRhX3NldGAuXG5cblRoaXMgaXMgYSAqKmZ1bmN0aW9uYWwgY2hhbmdlKiouIEl0J3MgcHJldmVudGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSBmcm9tIGJlaW5nIHNlbnQgdG8gdGhlIGZpcm13YXJlLCBvciBwZXJoYXBzIGl0IGFkZHMgUE1LSUQgc3VwcG9ydCB0byBleHRlcm5hbCBhdXRoZW50aWNhdGlvbi4gSXQncyBhIGNsZWFyIGFsdGVyYXRpb24gdG8gdGhlIGV4aXN0aW5nIGJlaGF2aW9yIGFuZCBpbnRyb2R1Y2VzIG5ldyBkYXRhIGJlaW5nIHNlbnQgdG8gdGhlIGZpcm13YXJlLiAqVGhpcyogZGVmaW5pdGVseSBuZWVkcyBmdXp6aW5nLlxuXG5NeSBjb25jbHVzaW9uPyBgV29ydGhGdXp6aW5nOiB0cnVlYC4gVGhlIGZ1bmN0aW9uIG9mIGludGVyZXN0IGlzIGBicmNtZl9jeXdfZXh0ZXJuYWxfYXV0aGAuIEFuZCBJIG5lZWQgdG8gY29uc2lkZXIgY29uZmlndXJhdGlvbnMgZm9yIGBCUkNNRk1BQ2AsIGBCUkNNRk1BQ19VU0JgLCBgQ0ZHODAyMTFgLCBgTUFDODAyMTFgLCBgVVNCYCwgYEZXX0xPQURFUmAsIGBGV19MT0FERVJfVVNFUl9IRUxQRVJgLCBhbmQgYEJSQ01EQkdgLiBJIHNob3VsZCBhbHNvIHVzZSB0aGUgYGlnbm9yZV9wcm9iZV9mYWlsYCBtb2R1bGUgcGFyYW1ldGVyICh3aGVuIGBCUkNNREJHYCBpcyBlbmFibGVkKSB0byBieXBhc3MgYW55IGhhcmR3YXJlIGluaXRpYWxpemF0aW9uIGlzc3Vlcy4gVGhpcyBpcyByZWFjaGFibGUgdmlhIHRoZSBuZXRsaW5rIGludGVyZmFjZSwgc3BlY2lmaWNhbGx5IGBOTDgwMjExX0NNRF9FWFRFUk5BTF9BVVRIYCBpbiBhIFVTQiB2aGNpIGVtdWxhdGlvbiBzY2VuYXJpbywgdGhlcmVmb3JlIHRoZSBzdGF0ZWQgY29uZmlndXJhdGlvbnMgYWxsb3cgbWUgdG8gZXhlcmNpc2UgdGhlIHRhcmdldCBmdW5jdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzc4OTMsIk91dHB1dFRva2VucyI6MjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA2OjQzOjQyLjQ0NzA3NjY3N1oiLCJTZXEiOjcyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc3MTEzOTA3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUkNNRk1BQ1wiLFxuICAgIFwiQlJDTUZNQUNfVVNCXCIsXG4gICAgXCJDRkc4MDIxMVwiLFxuICAgIFwiTUFDODAyMTFcIixcbiAgICBcIlVTQlwiLFxuICAgIFwiRldfTE9BREVSXCIsXG4gICAgXCJGV19MT0FERVJfVVNFUl9IRUxQRVJcIixcbiAgICBcIkJSQ01EQkdcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicmNtZl9jeXdfZXh0ZXJuYWxfYXV0aFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBicmNtZl9jeXdfZXh0ZXJuYWxfYXV0aGAgaW4gdGhlIEJyb2FkY29tIEZ1bGxNQUMgV0xBTiBkcml2ZXIgKGBicmNtZm1hY2ApIHRvIGluaXRpYWxpemUgYGF1dGhfc3RhdHVzYCBhbmQgY29weSBgcG1raWRgIGlmIHByZXNlbnQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBhIGRyaXZlciB0aGF0IGlzIHJlYWNoYWJsZSB2aWEgbmV0bGluayAoYE5MODAyMTFfQ01EX0VYVEVSTkFMX0FVVEhgKSB3aGVuIHRoZSBkZXZpY2UgaXMgZW11bGF0ZWQgdmlhIFVTQiAodmhjaSkuIEVuYWJsaW5nIGBCUkNNREJHYCBhbGxvd3MgdXNpbmcgdGhlIGBpZ25vcmVfcHJvYmVfZmFpbGAgbW9kdWxlIHBhcmFtZXRlciB0byBieXBhc3MgaGFyZHdhcmUgaW5pdGlhbGl6YXRpb24gZmFpbHVyZXMgZHVyaW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlJDTUZNQUNcIixcbiAgICBcIkJSQ01GTUFDX1VTQlwiLFxuICAgIFwiQ0ZHODAyMTFcIixcbiAgICBcIk1BQzgwMjExXCIsXG4gICAgXCJVU0JcIixcbiAgICBcIkZXX0xPQURFUlwiLFxuICAgIFwiRldfTE9BREVSX1VTRVJfSEVMUEVSXCIsXG4gICAgXCJCUkNNREJHXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnJjbWZfY3l3X2V4dGVybmFsX2F1dGhcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgYnJjbWZfY3l3X2V4dGVybmFsX2F1dGhgIGluIHRoZSBCcm9hZGNvbSBGdWxsTUFDIFdMQU4gZHJpdmVyIChgYnJjbWZtYWNgKSB0byBpbml0aWFsaXplIGBhdXRoX3N0YXR1c2AgYW5kIGNvcHkgYHBta2lkYCBpZiBwcmVzZW50LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSBkcml2ZXIgdGhhdCBpcyByZWFjaGFibGUgdmlhIG5ldGxpbmsgKGBOTDgwMjExX0NNRF9FWFRFUk5BTF9BVVRIYCkgd2hlbiB0aGUgZGV2aWNlIGlzIGVtdWxhdGVkIHZpYSBVU0IgKHZoY2kpLiBFbmFibGluZyBgQlJDTURCR2AgYWxsb3dzIHVzaW5nIHRoZSBgaWdub3JlX3Byb2JlX2ZhaWxgIG1vZHVsZSBwYXJhbWV0ZXIgdG8gYnlwYXNzIGhhcmR3YXJlIGluaXRpYWxpemF0aW9uIGZhaWx1cmVzIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowcvmdk[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-04 06:23:35 +0000 UTC FinishedAt: 2026-08-04 06:43:44 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "wireless-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git", "commit_hash": "333f7de560e1196034b67db16916b10a0c529e1d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BRCMFMAC", "BRCMFMAC_USB", "CFG80211", "MAC80211", "USB", "FW_LOADER", "FW_LOADER_USER_HELPER", "BRCMDBG" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "wireless-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git", "commit_hash": "333f7de560e1196034b67db16916b10a0c529e1d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BRCMFMAC", "BRCMFMAC_USB", "CFG80211", "MAC80211", "USB", "FW_LOADER", "FW_LOADER_USER_HELPER", "BRCMDBG" ], "series_id": "74d0e6a3-1369-483f-a564-7607be1af2b8" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "brcmf_cyw_external_auth" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA2OjM5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JSQ01GTUFDJiMzNDssCiAgICAmIzM0O0JSQ01GTUFDX1VTQiYjMzQ7LAogICAgJiMzNDtDRkc4MDIxMSYjMzQ7LAogICAgJiMzNDtNQUM4MDIxMSYjMzQ7LAogICAgJiMzNDtVU0ImIzM0OywKICAgICYjMzQ7RldfTE9BREVSJiMzNDssCiAgICAmIzM0O0ZXX0xPQURFUl9VU0VSX0hFTFBFUiYjMzQ7LAogICAgJiMzNDtCUkNNREJHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnJjbWZfY3l3X2V4dGVybmFsX2F1dGgmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGJyY21mX2N5d19leHRlcm5hbF9hdXRoYCBpbiB0aGUgQnJvYWRjb20gRnVsbE1BQyBXTEFOIGRyaXZlciAoYGJyY21mbWFjYCkgdG8gaW5pdGlhbGl6ZSBgYXV0aF9zdGF0dXNgIGFuZCBjb3B5IGBwbWtpZGAgaWYgcHJlc2VudC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGEgZHJpdmVyIHRoYXQgaXMgcmVhY2hhYmxlIHZpYSBuZXRsaW5rIChgTkw4MDIxMV9DTURfRVhURVJOQUxfQVVUSGApIHdoZW4gdGhlIGRldmljZSBpcyBlbXVsYXRlZCB2aWEgVVNCICh2aGNpKS4gRW5hYmxpbmcgYEJSQ01EQkdgIGFsbG93cyB1c2luZyB0aGUgYGlnbm9yZV9wcm9iZV9mYWlsYCBtb2R1bGUgcGFyYW1ldGVyIHRvIGJ5cGFzcyBoYXJkd2FyZSBpbml0aWFsaXphdGlvbiBmYWlsdXJlcyBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNjozOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDdlM2JkNDlkMTk4N2FiYTVlNmZjMDdkMjA2ZTRkNjE3NjY3NDAzYmFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyA0IDA2OjM5OjQ3IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvY29yZS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmNcbmluZGV4IDg3Mzc1NGJlNTE3NGIuLjJjNTliNWU1Nzk1OWMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L2NvcmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmNcbkBAIC0yMDAsNyAmIzQzOzIwMCw3IEBAIGJyY21mX2N5d19leHRlcm5hbF9hdXRoKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4ge1xuIFx0c3RydWN0IGJyY21mX2lmICppZnA7XG4gXHRzdHJ1Y3QgYnJjbWZfcHViICpkcnZyO1xuLVx0c3RydWN0IGJyY21mX2F1dGhfcmVxX3N0YXR1c19sZSBhdXRoX3N0YXR1cztcbiYjNDM7XHRzdHJ1Y3QgYnJjbWZfYXV0aF9yZXFfc3RhdHVzX2xlIGF1dGhfc3RhdHVzID0ge307XG4gXHRpbnQgcmV0ID0gMDtcbiBcbiBcdGJyY21mX2RiZyhUUkFDRSwgXCYjMzQ7RW50ZXJcXG5cJiMzNDspO1xuQEAgLTIwOCw2ICYjNDM7MjA4LDggQEAgYnJjbWZfY3l3X2V4dGVybmFsX2F1dGgoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdGlmcCA9IG5ldGRldl9wcml2KGRldik7XG4gXHRkcnZyID0gaWZwLVx1MDAzZWRydnI7XG4gXHRpZiAocGFyYW1zLVx1MDAzZXN0YXR1cyA9PSBXTEFOX1NUQVRVU19TVUNDRVNTKSB7XG4mIzQzO1x0XHRpZiAocGFyYW1zLVx1MDAzZXBta2lkKVxuJiM0MztcdFx0XHRtZW1jcHkoYXV0aF9zdGF0dXMucG1raWQsIHBhcmFtcy1cdTAwM2VwbWtpZCwgV0xBTl9QTUtJRF9MRU4pO1xuIFx0XHRhdXRoX3N0YXR1cy5mbGFncyA9IGNwdV90b19sZTE2KEJSQ01GX0VYVEFVVEhfU1VDQ0VTUyk7XG4gXHR9IGVsc2Uge1xuIFx0XHRicGh5X2VycihkcnZyLCBcJiMzNDtFeHRlcm5hbCBhdXRoZW50aWNhdGlvbiBmYWlsZWQ6IHN0YXR1cz0lZFxcblwmIzM0OyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNjozOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4zbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlJDTUZNQUMmIzM0OywKICAgICYjMzQ7QlJDTUZNQUNfVVNCJiMzNDssCiAgICAmIzM0O0NGRzgwMjExJiMzNDssCiAgICAmIzM0O01BQzgwMjExJiMzNDssCiAgICAmIzM0O1VTQiYjMzQ7LAogICAgJiMzNDtGV19MT0FERVImIzM0OywKICAgICYjMzQ7RldfTE9BREVSX1VTRVJfSEVMUEVSJiMzNDssCiAgICAmIzM0O0JSQ01EQkcmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticmNtZl9jeXdfZXh0ZXJuYWxfYXV0aCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgYnJjbWZfY3l3X2V4dGVybmFsX2F1dGhgIGluIHRoZSBCcm9hZGNvbSBGdWxsTUFDIFdMQU4gZHJpdmVyIChgYnJjbWZtYWNgKSB0byBpbml0aWFsaXplIGBhdXRoX3N0YXR1c2AgYW5kIGNvcHkgYHBta2lkYCBpZiBwcmVzZW50LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSBkcml2ZXIgdGhhdCBpcyByZWFjaGFibGUgdmlhIG5ldGxpbmsgKGBOTDgwMjExX0NNRF9FWFRFUk5BTF9BVVRIYCkgd2hlbiB0aGUgZGV2aWNlIGlzIGVtdWxhdGVkIHZpYSBVU0IgKHZoY2kpLiBFbmFibGluZyBgQlJDTURCR2AgYWxsb3dzIHVzaW5nIHRoZSBgaWdub3JlX3Byb2JlX2ZhaWxgIG1vZHVsZSBwYXJhbWV0ZXIgdG8gYnlwYXNzIGhhcmR3YXJlIGluaXRpYWxpemF0aW9uIGZhaWx1cmVzIGR1cmluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgN2UzYmQ0OWQxOTg3YWJhNWU2ZmMwN2QyMDZlNGQ2MTc2Njc0MDNiYQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDQgMDY6Mzk6NDcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L2NvcmUuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvY29yZS5jCmluZGV4IDg3Mzc1NGJlNTE3NGIuLjJjNTliNWU1Nzk1OWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvY29yZS5jCkBAIC0yMDAsNyAmIzQzOzIwMCw3IEBAIGJyY21mX2N5d19leHRlcm5hbF9hdXRoKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiB7CiAJc3RydWN0IGJyY21mX2lmICppZnA7CiAJc3RydWN0IGJyY21mX3B1YiAqZHJ2cjsKLQlzdHJ1Y3QgYnJjbWZfYXV0aF9yZXFfc3RhdHVzX2xlIGF1dGhfc3RhdHVzOwomIzQzOwlzdHJ1Y3QgYnJjbWZfYXV0aF9yZXFfc3RhdHVzX2xlIGF1dGhfc3RhdHVzID0ge307CiAJaW50IHJldCA9IDA7CiAKIAlicmNtZl9kYmcoVFJBQ0UsICYjMzQ7RW50ZXJcbiYjMzQ7KTsKQEAgLTIwOCw2ICYjNDM7MjA4LDggQEAgYnJjbWZfY3l3X2V4dGVybmFsX2F1dGgoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAlpZnAgPSBuZXRkZXZfcHJpdihkZXYpOwogCWRydnIgPSBpZnAtJmd0O2RydnI7CiAJaWYgKHBhcmFtcy0mZ3Q7c3RhdHVzID09IFdMQU5fU1RBVFVTX1NVQ0NFU1MpIHsKJiM0MzsJCWlmIChwYXJhbXMtJmd0O3Bta2lkKQomIzQzOwkJCW1lbWNweShhdXRoX3N0YXR1cy5wbWtpZCwgcGFyYW1zLSZndDtwbWtpZCwgV0xBTl9QTUtJRF9MRU4pOwogCQlhdXRoX3N0YXR1cy5mbGFncyA9IGNwdV90b19sZTE2KEJSQ01GX0VYVEFVVEhfU1VDQ0VTUyk7CiAJfSBlbHNlIHsKIAkJYnBoeV9lcnIoZHJ2ciwgJiMzNDtFeHRlcm5hbCBhdXRoZW50aWNhdGlvbiBmYWlsZWQ6IHN0YXR1cz0lZFxuJiMzNDssCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA2OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMTIKCQkJCQkJCW91dHB1dDogNTIKCQkJCQkJCXRob3VnaHRzOiAxODkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgQnJvYWRjb20gV2lyZWxlc3MgRHJpdmVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIOKAkyBsb29rcyBsaWtlIGl0JiMzOTtzIHR3ZWFraW5nIGBicmNtZl9jeXdfZXh0ZXJuYWxfYXV0aGAgaW4gdGhlIGBicmNtZm1hY2AgZHJpdmVyLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIGFib3V0IGluaXRpYWxpemluZyBgYXV0aF9zdGF0dXNgIGFuZCBjb3B5aW5nIGBwYXJhbXMtJmd0O3Bta2lkYCBvdmVyLCBidXQgb25seSBpZiBgcGFyYW1zLSZndDtwbWtpZGAgaXNuJiMzOTt0IG51bGwuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O2NhbiBJIHJlYWNoIHRoaXMgZWFzaWx5IGluIFFFTVU/JiMzNDsgVGhlIGRyaXZlciBpcyBgYnJjbWZtYWNgLCBzbyBpdCYjMzk7cyBhIEJyb2FkY29tIHdpcmVsZXNzIGRyaXZlci4gVGhlIG5leHQgcXVlc3Rpb24gSSBoYXZlIGlzLCB3aGF0JiMzOTtzIHRoZSBpbnRlcmZhY2Ug4oCTIFVTQiwgU0RJTywgb3IgUENJZT8gVGhhdCYjMzk7cyBnb2luZyB0byBkaWN0YXRlIGhvdyBJIGFwcHJvYWNoIGZ1enppbmcgaXQuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgZmlsZSBmb3IgYGJyY21mbWFjYCB0byBzZWUgd2hhdCBpbnRlcmZhY2VzIGl0IHN1cHBvcnRzLCBtYXliZSBgZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWdgIGlzIGEgZ29vZCBwbGFjZSB0byBzdGFydC4gSWYgVVNCIGlzIHN1cHBvcnRlZCwgdGhlbiBJIGNhbiBkZWZpbml0ZWx5IGxldmVyYWdlIFVTQiBlbXVsYXRpb24sIHdoaWNoIGlzIGEgYmlnIHdpbiBmb3IgZnV6emluZy4gSWYgaXQmIzM5O3MgU0RJTyBvciBQQ0llLCBJJiMzOTtsbCBoYXZlIHRvIGNvbnNpZGVyIG90aGVyIG1ldGhvZHMsIGJ1dCBVU0IgaXMgZGVmaW5pdGVseSB0aGUgcHJlZmVycmVkIGFwcHJvYWNoIGhlcmUuIExldCYjMzk7cyBkaWcgaW50byB0aGF0IEtjb25maWcgYW5kIHNlZSB3aGF0IHdlIGNhbiBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA2OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JyY21mX2N5d19leHRlcm5hbF9hdXRoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L2NvcmUuYz0xOTc9c3RhdGljIGludFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmM6MTk4OmJyY21mX2N5d19leHRlcm5hbF9hdXRoKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L2NvcmUuYy0xOTktXHRcdFx0c3RydWN0IGNmZzgwMjExX2V4dGVybmFsX2F1dGhfcGFyYW1zICpwYXJhbXMpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmM9MjM0PXN0YXRpYyB2b2lkIGJyY21mX2N5d19nZXRfY2ZnODAyMTFfb3BzKHN0cnVjdCBicmNtZl9wdWIgKmRydnIpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmMtMjM2LVx0ZHJ2ci1cdTAwM2VvcHMtXHUwMDNlbWdtdF90eCA9IGJyY21mX2N5d19tZ210X3R4O1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmM6MjM3Olx0ZHJ2ci1cdTAwM2VvcHMtXHUwMDNlZXh0ZXJuYWxfYXV0aCA9IGJyY21mX2N5d19leHRlcm5hbF9hdXRoO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmMtMjM4LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNjozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTk5CgkJCQkJCQlvdXRwdXQ6IDQ3CgkJCQkJCQl0aG91Z2h0czogNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gYWxyZWFkeSBkZWVwIGluIGRyaXZlciBkZXZlbG9wbWVudCBhbmQgZmFtaWxpYXIgd2l0aCB0aGUgY29kZWJhc2U6CgoqKkFuYWx5emluZyB0aGUgYGV4dGVybmFsX2F1dGhgIEhvb2sgZm9yIEJyb2FkY29tJiMzOTtzIEZpcm13YXJlKioKClJpZ2h0LCBzbyB0aGUgYGJyY21mX2N5d19leHRlcm5hbF9hdXRoYCBmdW5jdGlvbiBpcyBiZWluZyBob29rZWQgaW50byBgZHJ2ci0mZ3Q7b3BzLSZndDtleHRlcm5hbF9hdXRoYC4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZywgYW5kIGRlZmluaXRlbHkgbmVlZHMgYSBjbG9zZXIgbG9vay4gSSBpbW1lZGlhdGVseSBhc3N1bWUgdGhpcyBpcyByZWxhdGVkIHRvIHNvbWUgZm9ybSBvZiBleHRlcm5hbCBhdXRoZW50aWNhdGlvbiBtZWNoYW5pc20sIGxpa2VseSBXUEEvV1BBMiBFbnRlcnByaXNlIG9yIHNpbWlsYXIuIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhpcyBmdW5jdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgYXV0aGVudGljYXRpb24gcHJvY2VzcyB3aXRoaW4gdGhlIGBicmNtZm1hY2AgZHJpdmVyLgoKTm93LCBteSBmb2N1cyBzaGlmdHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsYXJnZXIgY29udGV4dC4gSSBuZWVkIHRvIGRldGVybWluZSBpZiB0aGlzIGV4dGVybmFsIGF1dGhlbnRpY2F0aW9uIGltcGxlbWVudGF0aW9uIGlzIFVTQi1zcGVjaWZpYywgb3IgaWYgaXQgaGFzIHdpZGVyIGFwcGxpY2FiaWxpdHkgYWNyb3NzIHRoZSBgYnJjbWZtYWNgIGFyY2hpdGVjdHVyZS4gVGhlIGxvZ2ljYWwgbmV4dCBzdGVwIGlzIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGBicmNtZm1hY2AgZHJpdmVyLCBpbiBpdHMgY3VycmVudCBjb25maWd1cmF0aW9uLCBhY3R1YWxseSBzdXBwb3J0cyBVU0IuIElmIGl0IGRvZXNuJiMzOTt0LCB0aGVuIHRoaXMgZnVuY3Rpb24mIzM5O3MgcHJlc2VuY2UgaXMgc29tZXdoYXQgcGVycGxleGluZywgdW5sZXNzIGl0JiMzOTtzIGRlc2lnbmVkIGZvciBmdXR1cmUgc3VwcG9ydCBvciBhcyBhIGdlbmVyaWMgbWVjaGFuaXNtLiBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgdGhlIFVTQiBzdXBwb3J0IHN0YXR1cyB3aXRoaW4gdGhlIGRyaXZlci4gTGV0JiMzOTtzIHNlZS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA2OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCUkNNRk1BQyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWc6MTpjb25maWcgQlJDTUZNQUNcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnLTItXHR0cmlzdGF0ZSBcJiMzNDtCcm9hZGNvbSBGdWxsTUFDIFdMQU4gZHJpdmVyXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWctMTAtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZzoxMTpjb25maWcgQlJDTUZNQUNfUFJPVE9fQkNEQ1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWctMTItXHRib29sXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZy0xMy1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnOjE0OmNvbmZpZyBCUkNNRk1BQ19QUk9UT19NU0dCVUZcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnLTE1LVx0Ym9vbFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWctMTYtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZzoxNzpjb25maWcgQlJDTUZNQUNfU0RJT1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWctMTgtXHRib29sIFwmIzM0O1NESU8gYnVzIGludGVyZmFjZSBzdXBwb3J0IGZvciBGdWxsTUFDIGRyaXZlclwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnLTI4LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWc6Mjk6Y29uZmlnIEJSQ01GTUFDX1VTQlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWctMzAtXHRib29sIFwmIzM0O1VTQiBidXMgaW50ZXJmYWNlIHN1cHBvcnQgZm9yIEZ1bGxNQUMgZHJpdmVyXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWctMzktXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZzo0MDpjb25maWcgQlJDTUZNQUNfUENJRVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWctNDEtXHRib29sIFwmIzM0O1BDSUUgYnVzIGludGVyZmFjZSBzdXBwb3J0IGZvciBGdWxsTUFDIGRyaXZlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA2OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQxNjIKCQkJCQkJCW91dHB1dDogNTkKCQkJCQkJCXRob3VnaHRzOiA2MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZSwgdGhlIHN5c3RlbSB0ZWxscyBtZSB0aGF0ICoqQlJDTUZNQUNfVVNCIGlzIHN1cHBvcnRlZC4gR29vZC4qKiBUaGF0JiMzOTtzIGEgc29saWQgc3RhcnRpbmcgcG9pbnQuIE5vdywgdGhlIGtleSBxdWVzdGlvbiBiZWNvbWVzLCBjYW4gd2UgYWN0dWFsbHkgcmVhY2ggYGJyY21mX2N5d19leHRlcm5hbF9hdXRoYCB0aHJvdWdoIHRoZSBVU0IgaW50ZXJmYWNlPyBXZSBuZWVkIHRvIGFzY2VydGFpbiB0aGF0IGNvbm5lY3Rpb24gcGF0aC4gQW5kIHRvIGRvIHRoYXQsIEkgbmVlZCB0byB0cmFjZSBpdHMgdXNhZ2UuIFNwZWNpZmljYWxseSwgd2hlcmUgaXMgYGJyY21mX2N5d19nZXRfY2ZnODAyMTFfb3BzYCBiZWluZyBjYWxsZWQgZnJvbT8gVGhhdCBmdW5jdGlvbiBjYWxsIGhvbGRzIHRoZSBrZXkgdG8gbWFwcGluZyB0aGUgaW50ZXJhY3Rpb25zIGludm9sdmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA2OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JyY21mX2N5d19nZXRfY2ZnODAyMTFfb3BzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L2NvcmUuYz0xOTg9YnJjbWZfY3l3X2V4dGVybmFsX2F1dGgoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L2NvcmUuYy0yMzMtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L2NvcmUuYzoyMzQ6c3RhdGljIHZvaWQgYnJjbWZfY3l3X2dldF9jZmc4MDIxMV9vcHMoc3RydWN0IGJyY21mX3B1YiAqZHJ2cilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvY29yZS5jLTIzNS17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmM9Mzc0PWNvbnN0IHN0cnVjdCBicmNtZl9md3ZpZF9vcHMgYnJjbWZfY3l3X29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L2NvcmUuYy0zNzctXHQuYWN0aXZhdGVfZXZlbnRzID0gYnJjbWZfY3l3X2FjdGl2YXRlX2V2ZW50cyxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvY29yZS5jOjM3ODpcdC5nZXRfY2ZnODAyMTFfb3BzID0gYnJjbWZfY3l3X2dldF9jZmc4MDIxMV9vcHMsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L2NvcmUuYy0zNzktXHQucmVnaXN0ZXJfZXZlbnRfaGFuZGxlcnMgPSBicmNtZl9jeXdfcmVnaXN0ZXJfZXZlbnRfaGFuZGxlcnMsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDY6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDgzNgoJCQkJCQkJb3V0cHV0OiA1MAoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqV2hlcmUgRG9lcyBgYnJjbWZfY3l3X29wc2AgQWN0dWFsbHkgTGl2ZT8qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYGJyY21mX2N5d19vcHNgIHRoaW5nLCBhbmQgbXkgZmlyc3QgdGhvdWdodCBpcywgJiMzNDtXaGVyZSAqZXhhY3RseSogaXMgdGhpcyBkcml2ZXIgaW50ZXJmYWNlIHV0aWxpemVkPyYjMzQ7IEl0JiMzOTtzIG5vdCBlbm91Z2ggdG8ga25vdyBpdCAqZXhpc3RzKiwgSSBuZWVkIHRvIHF1aWNrbHkgZXN0YWJsaXNoIHRoZSBzY29wZSBvZiBpdHMgdXNhZ2UuIEkgaW1tZWRpYXRlbHkgbmVlZCB0byBjb25uZWN0IHRoZSBkb3RzIC0gaXMgdGhpcyBvbmx5IGluc2lkZSB0aGUgQnJvYWRjb20gV2ktRmkgZHJpdmVyLCBvciBkb2VzIGl0IHBvdGVudGlhbGx5IGhhdmUgYnJvYWRlciBpbXBsaWNhdGlvbnMgYWNyb3NzIHRoZSBzeXN0ZW0/IEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIHZhcmlvdXMga2VybmVsIG1vZHVsZXMsIG5ldHdvcmsgaW50ZXJmYWNlcywgYW5kIG1heWJlIGV2ZW4gdXNlci1zcGFjZSB1dGlsaXRpZXMgdGhhdCBjb3VsZCBiZSB0b3VjaGluZyB0aGlzLiBNeSBnb2FsIGlzIHRvIHF1aWNrbHkgbWFwIG91dCB0aGUgZnVuY3Rpb24gY2FsbHMgYW5kIGRlcGVuZGVuY2llcyB0byBnZXQgYSBtZW50YWwgcGljdHVyZSBvZiBpdHMgcm9sZSBpbiB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUuIEnigJltIHRoaW5raW5nIEkgd2lsbCBuZWVkIHRvIHVzZSBhIGdyZXAgb3IgZmluZCBjb21tYW5kIHRvIHNlZSB0aGUgaW5jbHVkZSBmaWxlcyB0aGF0IHJlZmVyZW5jZSB0aGUgc3ltYm9scy4gSXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBxdWVzdGlvbiB0aGF0IGRpY3RhdGVzIGhvdyBJIHNob3VsZCBhcHByb2FjaCBmdXJ0aGVyIGFuYWx5c2lzLiBXaXRob3V0IHRoaXMgYmFzaWMgY29udGV4dCwgYW55IGRlZXBlciBkaXZlIHdvdWxkIGJlIGp1c3Qgc3Bpbm5pbmcgbXkgd2hlZWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNjo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticmNtZl9jeXdfb3BzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L2NvcmUuYz0zNjI9c3RhdGljIHZvaWQgYnJjbWZfY3l3X3JlZ2lzdGVyX2V2ZW50X2hhbmRsZXJzKHN0cnVjdCBicmNtZl9wdWIgKmRydnIpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmMtMzczLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmM6Mzc0OmNvbnN0IHN0cnVjdCBicmNtZl9md3ZpZF9vcHMgYnJjbWZfY3l3X29wcyA9IHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvY29yZS5jLTM3NS1cdC5zZXRfc2FlX3Bhc3N3b3JkID0gYnJjbWZfY3l3X3NldF9zYWVfcHdkLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvbW9kdWxlLmM9MTI9c3RhdGljIGludCBfX2luaXQgYnJjbWZfY3l3X2luaXQodm9pZClcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L21vZHVsZS5jLTE0LVx0cmV0dXJuIGJyY21mX2Z3dmlkX3JlZ2lzdGVyX3ZlbmRvcihCUkNNRl9GV1ZFTkRPUl9DWVcsIFRISVNfTU9EVUxFLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9tb2R1bGUuYzoxNTpcdFx0XHRcdFx0ICAgXHUwMDI2YnJjbWZfY3l3X29wcyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L21vZHVsZS5jLTE2LX1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L3ZvcHMuaC03LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy92b3BzLmg6ODpleHRlcm4gY29uc3Qgc3RydWN0IGJyY21mX2Z3dmlkX29wcyBicmNtZl9jeXdfb3BzO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy92b3BzLmg6OTojZGVmaW5lIENZV19WT1BTXHQoXHUwMDI2YnJjbWZfY3l3X29wcylcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvdm9wcy5oLTEwLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNjo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NzEzCgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMTM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQlJDTUYgV2ktRmkgRHJpdmVyJiMzOTtzIEF1dGhlbnRpY2F0aW9uIEZsb3cqKgoKT2theSwgc28gYGJyY21mX2N5d19vcHNgIGlzIHJlZ2lzdGVyZWQsIHNwZWNpZmljYWxseSBmb3IgdGhhdCBgQlJDTUZfRldWRU5ET1JfQ1lXYCBmaXJtd2FyZSB2ZW5kb3IuIFJpZ2h0LCBXaS1GaSBkcml2ZXIuIFRoZSBjb2RlIGNoYW5nZSBpcyBwaW5uZWQgdG8gYGJyY21mX2N5d19leHRlcm5hbF9hdXRoYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7Q2FuIHRoaXMgYmUgdHJpZ2dlcmVkIHRocm91Z2ggdGhlIHN0YW5kYXJkIG1hYzgwMjExL2NmZzgwMjExIGludGVyZmFjZXM/JiMzNDsgQSBxdWljayBzY2FuIGNvbmZpcm1zIGl0OyBgZXh0ZXJuYWxfYXV0aGAgKmlzKiBhIGNmZzgwMjExIG9wZXJhdGlvbi4gR29vZC4KCldhaXQgYSBzZWNvbmQsIGxldCBtZSBzb2xpZGlmeSB0aGlzLi4uIGBkcnZyLSZndDtvcHMtJmd0O2V4dGVybmFsX2F1dGhgIGlzIGFjdHVhbGx5IGFzc2lnbmVkIHRvIHBvaW50IHRvIG91ciBgYnJjbWZfY3l3X2V4dGVybmFsX2F1dGhgIGZ1bmN0aW9uLiBOb3csIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBwaW5wb2ludCB3aGVyZSBgZHJ2ci0mZ3Q7b3BzLSZndDtleHRlcm5hbF9hdXRoYCBpcyAqY2FsbGVkKiB0byB1bmRlcnN0YW5kIHRoZSBkYXRhIGZsb3cuIExldCYjMzk7cyB0cmFjZSB0aG9zZSBjYWxsIHNpdGVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNjo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtleHRlcm5hbF9hdXRoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L2NvcmUuYz0xOTc9c3RhdGljIGludFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmM6MTk4OmJyY21mX2N5d19leHRlcm5hbF9hdXRoKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L2NvcmUuYzoxOTk6XHRcdFx0c3RydWN0IGNmZzgwMjExX2V4dGVybmFsX2F1dGhfcGFyYW1zICpwYXJhbXMpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L2NvcmUuYy0yMDAte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvY29yZS5jPTIzND1zdGF0aWMgdm9pZCBicmNtZl9jeXdfZ2V0X2NmZzgwMjExX29wcyhzdHJ1Y3QgYnJjbWZfcHViICpkcnZyKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvY29yZS5jLTIzNi1cdGRydnItXHUwMDNlb3BzLVx1MDAzZW1nbXRfdHggPSBicmNtZl9jeXdfbWdtdF90eDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvY29yZS5jOjIzNzpcdGRydnItXHUwMDNlb3BzLVx1MDAzZWV4dGVybmFsX2F1dGggPSBicmNtZl9jeXdfZXh0ZXJuYWxfYXV0aDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvY29yZS5jLTIzOC19XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmM9MjQxPWJyY21mX2N5d19ub3RpZnlfZXh0X2F1dGhfcmVxKHN0cnVjdCBicmNtZl9pZiAqaWZwLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvY29yZS5jLTI0NC1cdHN0cnVjdCBicmNtZl9wdWIgKmRydnIgPSBpZnAtXHUwMDNlZHJ2cjtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvY29yZS5jOjI0NTpcdHN0cnVjdCBjZmc4MDIxMV9leHRlcm5hbF9hdXRoX3BhcmFtcyBwYXJhbXM7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L2NvcmUuYy0yNDYtXHRzdHJ1Y3QgYnJjbWZfYXV0aF9yZXFfc3RhdHVzX2xlICphdXRoX3JlcSA9XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmMtMjY2LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmM6MjY3Olx0ZXJyID0gY2ZnODAyMTFfZXh0ZXJuYWxfYXV0aF9yZXF1ZXN0KGlmcC1cdTAwM2VuZGV2LCBcdTAwMjZwYXJhbXMsIEdGUF9LRVJORUwpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmMtMjY4LVx0aWYgKGVycilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDY6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjg1OQoJCQkJCQkJb3V0cHV0OiA1MwoJCQkJCQkJdGhvdWdodHM6IDgwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGRlZXAgaW4gdGhlIHdlZWRzIG9mIHdpcmVsZXNzIGRyaXZlciBkZXZlbG9wbWVudDoKCioqSW5pdGlhbCBJbnZlc3RpZ2F0aW9uIGludG8gYSBjZmc4MDIxMSBPcGVyYXRpb24qKgoKUmlnaHQsIHNvIGBkcnZyLSZndDtvcHMtJmd0O2V4dGVybmFsX2F1dGhgLiBUaGF0JiMzOTtzIGltbWVkaWF0ZWx5IHRyaWdnZXJpbmcgYSBjZmc4MDIxMSBmbGFnLiBJIGtub3cgdGhhdCBtZWFucyBpdCYjMzk7cyBvbmUgb2YgdGhlIHN0YW5kYXJkaXplZCBvcGVyYXRpb25zIHRoYXQgdGhlIGNmZzgwMjExIGxheWVyIGRlZmluZXMgZm9yIHdpcmVsZXNzIGRyaXZlcnMuIE9rYXksIHRoZSBjcml0aWNhbCBzdGVwIGlzIHRvIHF1aWNrbHkgY29uZmlybSB0aGUgYXNzaWdubWVudCAtIHdoZXJlIGlzIHRoaXMgYGV4dGVybmFsX2F1dGhgIG9wZXJhdGlvbiBhY3R1YWxseSBob29rZWQgdXA/IFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBzb3VyY2UgY29kZSwgc3BlY2lmaWNhbGx5IGBkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuY2AuIFRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCB0aGUgY29ubmVjdGlvbiBiZXR3ZWVuIHdoYXQmIzM5O3MgaW4gdGhlIGRyaXZlciYjMzk7cyBvcGVyYXRpb24gc3RydWN0dXJlIGFuZCB0aGUgY2ZnODAyMTEgZnJhbWV3b3JrIGl0c2VsZi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBgZXh0ZXJuYWxfYXV0aGAgaXMgcHJvcGVybHkgbGlua2VkIHdpdGggdGhlIGBjZmc4MDIxMV9vcHNgIHN0cnVjdHVyZS4gVGhpcyBpcyBhIGNydWNpYWwgZmlyc3Qgc3RlcCBpbiB1bmRlcnN0YW5kaW5nIGhvdyB0aGlzIGV4dGVybmFsIGF1dGhlbnRpY2F0aW9uIGZ1bmN0aW9uYWxpdHkgaXMgaW50ZWdyYXRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDY6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtleHRlcm5hbF9hdXRoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNjo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MjQzCgkJCQkJCQlvdXRwdXQ6IDQ3CgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBpc3N1ZToKCioqRGVsdmluZyBpbnRvIHRoZSBEcml2ZXIgT3BlcmF0aW9ucyBTdHJ1Y3R1cmUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYGRydnItJmd0O29wc2Agc3RydWN0dXJlLCBhbmQgbXkgZ3V0IHRlbGxzIG1lIGl0JiMzOTtzIGhpZ2hseSBsaWtlbHkgcG9pbnRpbmcgdG8gYGNmZzgwMjExX29wc2AuIEdpdmVuIHRoZSBjb250ZXh0LCB0aGF0JiMzOTtzIHRoZSBtb3N0IHByb2JhYmxlIGltcGxlbWVudGF0aW9uLiBUbyBjb25maXJtIHRoaXMsIEkgbmVlZCB0byBzZWUgZXhhY3RseSB3aGVyZSBgZHJ2ci0mZ3Q7b3BzYCBpcyBkZWZpbmVkLiBLbm93aW5nIGl0cyBkZWNsYXJhdGlvbiB3aWxsIGNsYXJpZnkgdGhlIGludGVuZGVkIHB1cnBvc2UgYW5kIGNvbmZpcm0gbXkgaW5pdGlhbCBoeXBvdGhlc2lzIGFib3V0IGl0cyB0eXBlLiBJJiMzOTtsbCB0cmFjZSBiYWNrIHRvIHRoZSBkZWZpbml0aW9uIGFuZCB2ZXJpZnkgaWYgSSYjMzk7bSBvbiB0aGUgcmlnaHQgdHJhY2sgYmVmb3JlIGdvaW5nIGFueSBmdXJ0aGVyIGRvd24gdGhpcyByYWJiaXQgaG9sZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDY6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7b3BzLVx1MDAzZWV4dGVybmFsX2F1dGgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvY29yZS5jPTIzND1zdGF0aWMgdm9pZCBicmNtZl9jeXdfZ2V0X2NmZzgwMjExX29wcyhzdHJ1Y3QgYnJjbWZfcHViICpkcnZyKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvY29yZS5jLTIzNi1cdGRydnItXHUwMDNlb3BzLVx1MDAzZW1nbXRfdHggPSBicmNtZl9jeXdfbWdtdF90eDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvY29yZS5jOjIzNzpcdGRydnItXHUwMDNlb3BzLVx1MDAzZWV4dGVybmFsX2F1dGggPSBicmNtZl9jeXdfZXh0ZXJuYWxfYXV0aDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvY29yZS5jLTIzOC19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA2OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc2ODcKCQkJCQkJCW91dHB1dDogNTQKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIERyaXZlciBPcGVyYXRpb25zIFN0cnVjdHVyZSoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBGaXJzdCB0aGluZ3MgZmlyc3QsIGxldCYjMzk7cyBkaXNzZWN0IHdoYXQmIzM5O3MgZ29pbmcgb24gdW5kZXIgdGhlIGhvb2QuIE15IGluaXRpYWwgZm9jdXMgaXMgYWx3YXlzIG9uIHRoZSBmdW5kYW1lbnRhbCBidWlsZGluZyBibG9ja3Mgb2YgdGhpcyBkcml2ZXIgaW1wbGVtZW50YXRpb24uIFNvLCBteSBtaW5kIGltbWVkaWF0ZWx5IHplcm9lcyBpbiBvbiB0aGF0IGBkcnZyLSZndDtvcHNgIHN0cnVjdHVyZS4gSSBuZWVkIHRvIGV4cGxpY2l0bHkgY2hlY2sgaXRzIHR5cGUuIFVuZGVyc3RhbmRpbmcgdGhlIHNwZWNpZmljIHR5cGUg4oCTIHdoZXRoZXIgaXQmIzM5O3MgYSBgc3RydWN0YCBJIGRlZmluZWQsIHNvbWV0aGluZyBpbmhlcml0ZWQsIG9yIGFuIG9wYXF1ZSBwb2ludGVyIG9mIHNvbWUga2luZCDigJMgaXMgYWJzb2x1dGVseSBjcml0aWNhbC4gVGhpcyB0eXBlIGRpY3RhdGVzIHRoZSBpbnRlcmZhY2UsIHRoZSBtZXRob2RzIGF2YWlsYWJsZSwgdGhlIGVudGlyZSBmcmFtZXdvcmsgdGhyb3VnaCB3aGljaCB0aGUgZHJpdmVyIGludGVyYWN0cyB3aXRoIHRoZSBzeXN0ZW0uIFdpdGhvdXQgYSBmaXJtIGdyYXNwIG9mIHRoZSBgZHJ2ci0mZ3Q7b3BzYCB0eXBlLCBhbnkgZnVydGhlciBhbmFseXNpcyBpcyBqdXN0IGd1ZXNzd29yay4gS25vd2luZyB0aGlzIHR5cGUgd2lsbCBpbmZvcm0gbWUgb2YgdGhlIG5leHQgc3RlcHMgdG8gdGFrZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDY6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RydWN0IGNmZzgwMjExX29wcyBcXCpvcHM7JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYz02MDU1PXN0cnVjdCBjZmc4MDIxMV9vcHMgKmJyY21mX2NmZzgwMjExX2dldF9vcHMoc3RydWN0IGJyY21mX21wX2RldmljZSAqc2V0dGluZ3MpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy02MDU2LXtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jOjYwNTc6XHRzdHJ1Y3QgY2ZnODAyMTFfb3BzICpvcHM7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy02MDU4LVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmM9MTMzMD1pbnQgYnJjbWZfYWxsb2Moc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgYnJjbWZfbXBfZGV2aWNlICpzZXR0aW5ncylcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jLTEzMzItXHRzdHJ1Y3Qgd2lwaHkgKndpcGh5O1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuYzoxMzMzOlx0c3RydWN0IGNmZzgwMjExX29wcyAqb3BzO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuYy0xMzM0LVx0c3RydWN0IGJyY21mX3B1YiAqZHJ2ciA9IE5VTEw7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuaD0xMDE9c3RydWN0IGJyY21mX3B1YiB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuaC0xMDUtXHRzdHJ1Y3Qgd2lwaHkgKndpcGh5O1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuaDoxMDY6XHRzdHJ1Y3QgY2ZnODAyMTFfb3BzICpvcHM7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5oLTEwNy1cdHN0cnVjdCBicmNtZl9jZmc4MDIxMV9pbmZvICpjb25maWc7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA2OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg1MDYKCQkJCQkJCW91dHB1dDogNDkKCQkJCQkJCXRob3VnaHRzOiAzNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyB0aGUgYGJyY21mX2N5d19leHRlcm5hbF9hdXRoYCBGdW5jdGlvbioqCgpPa2F5LCBzbyBgZHJ2ci0mZ3Q7b3BzYCBpcyBkZWZpbml0ZWx5IGEgYHN0cnVjdCBjZmc4MDIxMV9vcHMgKm9wc2AsIG1lYW5pbmcgYGJyY21mX2N5d19leHRlcm5hbF9hdXRoYCBpcyByZWdpc3RlcmVkIGFzIGEgY2ZnODAyMTEgb3BlcmF0aW9uLiBUaGF0JiMzOTtzIGdvb2Q7IGNmZzgwMjExIG9wZXJhdGlvbnMgYXJlIGZ1enplYWJsZSB2aWEgbmV0bGluaywgc3BlY2lmaWNhbGx5IG5sODAyMTEuIFRoZSBpbW1lZGlhdGUgZ29hbCBpcyB0byBmaWd1cmUgb3V0IGhvdyB0byBkbyBzby4KCkJ1dCwgYSBxdWljayByZWFsaXR5IGNoZWNrIOKAkyB0aGUgZHJpdmVyIGluIHF1ZXN0aW9uIGlzIGBicmNtZm1hY2AuIFRvIGV2ZW4gKnJlYWNoKiB0aGF0IGNvZGUsIHRoZSBkcml2ZXIgbmVlZHMgdG8gYmUgbG9hZGVkLCBhbmQgYSBkZXZpY2UgbmVlZHMgdG8gYmUgcHJlc2VudC4gU28gdGhlIGZ1enppbmcgc2V0dXAgd2lsbCByZXF1aXJlIGEgYml0IG1vcmUgd29yayB0aGFuIHNpbXBseSBjcmFmdGluZyBzb21lIG5ldGxpbmsgbWVzc2FnZXMuCgpUaGUgcXVlc3Rpb24gdGhlbiBiZWNvbWVzOiBjYW4gSSBlbXVsYXRlIGEgYGJyY21mbWFjYCBkZXZpY2UgaW4gUUVNVT8gVHlwaWNhbGx5LCBgYnJjbWZtYWNgIHJlbGllcyBvbiBhIHBoeXNpY2FsIFNESU8sIFVTQiwgb3IgUENJZSBkZXZpY2UgYW5kIGl0cyBhc3NvY2lhdGVkIGZpcm13YXJlLiBgbWFjODAyMTFfaHdzaW1gIGlzbiYjMzk7dCBnb2luZyB0byBjdXQgaXQsIHNpbmNlIHRoYXQgZW11bGF0ZXMgbWFjODAyMTEgZGV2aWNlcywgd2hpY2ggaXMgYSBkaWZmZXJlbnQgYmVhc3QgZnJvbSBgYnJjbWZtYWNgLCBhIEZ1bGxNQUMgZHJpdmVyLgoKVGhlIG5leHQgcXVlc3Rpb246IGRvZXMgc3l6a2FsbGVyIGhhdmUgYSBtZWFucyB0byBlbXVsYXRlIGBicmNtZm1hY2AgdmlhIFVTQj8gU3l6a2FsbGVyICpkb2VzKiBoYXZlIFVTQiBmdXp6aW5nIGNhcGFiaWxpdGllcyB2aWEgYHZoY2lgLCB3aGljaCBtZWFucyBpdCBjYW4gZW11bGF0ZSBVU0IgZGV2aWNlcy4gSWYgYGJyY21mbWFjYCBzdXBwb3J0cyBVU0IsIHNwZWNpZmljYWxseSBpZiBgQlJDTUZNQUNfVVNCYCBpcyBlbmFibGVkLCB0aGVuIHN5emthbGxlciBjb3VsZCBwb3RlbnRpYWxseSBlbXVsYXRlIGEgQnJvYWRjb20gVVNCIFdpLUZpIGRvbmdsZSwgd2hpY2ggd291bGQgYmUgaWRlYWwuCgpMZXQmIzM5O3MgY2hlY2sgaWYgYEJSQ01GTUFDX1VTQmAgaXMgZW5hYmxlZCBpbiBzeXprYWxsZXImIzM5O3MgdHlwaWNhbCBjb25maWd1cmF0aW9ucywgb3IgaWYgaXQgY2FuIGJlIGVuYWJsZWQuIEl0IHR1cm5zIG91dCB0aGF0IGVuYWJsaW5nIGl0IGlzIGEgdmlhYmxlIG9wdGlvbi4gTm93LCBpdCYjMzk7cyB0aW1lIHRvIGNoZWNrIGBkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmNgIHRvIGNvbmZpcm0gdGhhdCB0aGlzIGRyaXZlciBpcyBpbmRlZWQgYSBVU0IgZHJpdmVyLiBUaGlzIHdpbGwgY29uZmlybSB0aGUgdmlhYmlsaXR5IG9mIHRoaXMgZnV6emluZyBzdHJhdGVneS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDY6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnJjbWZfdXNiX3Byb2JlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM9MTE2NT1zdGF0aWMgY29uc3Qgc3RydWN0IGJyY21mX2J1c19vcHMgYnJjbWZfdXNiX2J1c19vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTExNzUtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM6MTE3NjpzdGF0aWMgdm9pZCBicmNtZl91c2JfcHJvYmVfcGhhc2UyKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHJldCxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xMTc3LVx0XHRcdFx0ICAgc3RydWN0IGJyY21mX2Z3X3JlcXVlc3QgKmZ3cmVxKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYz0xMjI0PWJyY21mX3VzYl9wcmVwYXJlX2Z3X3JlcXVlc3Qoc3RydWN0IGJyY21mX3VzYmRldl9pbmZvICpkZXZpbmZvKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xMjQzLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jOjEyNDQ6c3RhdGljIGludCBicmNtZl91c2JfcHJvYmVfY2Ioc3RydWN0IGJyY21mX3VzYmRldl9pbmZvICpkZXZpbmZvLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTEyNDUtXHRcdFx0ICAgICAgZW51bSBicmNtZl9md3ZlbmRvciBmd3ZpZClcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtMTMwOC1cdC8qIHJlcXVlc3QgZmlybXdhcmUgaGVyZSAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jOjEzMDk6XHRyZXQgPSBicmNtZl9md19nZXRfZmlybXdhcmVzKGRldiwgZndyZXEsIGJyY21mX3VzYl9wcm9iZV9waGFzZTIpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTEzMTAtXHRpZiAocmV0KSB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jPTEzNDQ9c3RhdGljIGludFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jOjEzNDU6YnJjbWZfdXNiX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtMTM0Ni17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTE0NDUtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM6MTQ0NjpcdHJldCA9IGJyY21mX3VzYl9wcm9iZV9jYihkZXZpbmZvLCBpZC1cdTAwM2Vkcml2ZXJfaW5mbyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtMTQ0Ny1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jPTE1MTQ9c3RhdGljIGludCBicmNtZl91c2JfcmVzZXRfcmVzdW1lKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xNTI2LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jOjE1Mjc6XHRyZXQgPSBicmNtZl9md19nZXRfZmlybXdhcmVzKFx1MDAyNnVzYi1cdTAwM2VkZXYsIGZ3cmVxLCBicmNtZl91c2JfcHJvYmVfcGhhc2UyKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xNTI4LVx0aWYgKHJldCBcdTAwM2MgMClcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM9MTU2OD1zdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgYnJjbWZfdXNiZHJ2ciA9IHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xNTY5LVx0Lm5hbWUgPSBLQlVJTERfTU9ETkFNRSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYzoxNTcwOlx0LnByb2JlID0gYnJjbWZfdXNiX3Byb2JlLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTE1NzEtXHQuZGlzY29ubmVjdCA9IGJyY21mX3VzYl9kaXNjb25uZWN0LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNjo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDUxMAoJCQkJCQkJb3V0cHV0OiA0NgoJCQkJCQkJdGhvdWdodHM6IDIxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGJyY21mbWFjIERyaXZlciBQcm9iZSBTZXF1ZW5jZSoqCgpPa2F5LCBzbyBgYnJjbWZfdXNiX3Byb2JlYCBkZWZpbml0ZWx5IGV4aXN0cy4gUmlnaHQsIGFuZCBpdCBsb29rcyBsaWtlIGBicmNtZl91c2JfcHJvYmVgIGNhbGxzIGBicmNtZl9md19nZXRfZmlybXdhcmVzYCwgd2hpY2gsIGFzIHRoZSBuYW1lIHN1Z2dlc3RzLCByZXF1ZXN0cyBmaXJtd2FyZS4gSG1tLCBpZiB0aGUgZmlybXdhcmUgaXNuJiMzOTt0IHByZXNlbnQsIHRoYXQgY291bGQgY2F1c2UgaXNzdWVzLiBTcGVjaWZpY2FsbHksIGl0IHNlZW1zIGxpa2UgYGJyY21mX3VzYl9wcm9iZV9waGFzZTJgIG1pZ2h0IG5vdCBldmVuIGJlIGNhbGxlZCwgb3IgcG90ZW50aWFsbHkgZmFpbCBpZiBpdCAqaXMqIGNhbGxlZCB3aXRob3V0IHRoZSBmaXJtd2FyZS4gQSBrZXkgcXVlc3Rpb24gaGVyZSBpcyB3aGV0aGVyIHN5emthbGxlciBwcm92aWRlcyB0aGUgbmVjZXNzYXJ5IGZpcm13YXJlIGZvciBgYnJjbWZtYWNgLgoKSSBrbm93IHN5emthbGxlciAqY2FuKiBpbnRlcmNlcHQgZmlybXdhcmUgcmVxdWVzdHMsIGFzc3VtaW5nIGBDT05GSUdfRldfTE9BREVSX1VTRVJfSEVMUEVSYCBpcyBlbmFibGVkLCBidXQgdHlwaWNhbGx5LCBpdCYjMzk7cyBjbGVhbmVyLCBhbmQgbW9yZSByb2J1c3QsIGlmIHRoZSBkcml2ZXIgZG9lc24mIzM5O3QgaGF2ZSBhIGhhcmQgZGVwZW5kZW5jeSBvbiB0aGUgZmlybXdhcmUgdG8gcmVhY2ggYSBjZXJ0YWluIGNvZGUgcGF0aCwgb3IgaWYgdGhlIGZpcm13YXJlIGNhbiBiZSBlYXNpbHkgbW9ja2VkIGZvciB0ZXN0aW5nLgoKTm93LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IGBicmNtZl9jeXdfZXh0ZXJuYWxfYXV0aGAuIEkgcmVjYWxsIHRoYXQmIzM5O3MgY2FsbGVkIHRocm91Z2ggYGNmZzgwMjExYCBvcGVyYXRpb25zLCByaWdodD8gVG8gaW50ZXJhY3Qgd2l0aCBgY2ZnODAyMTFgLCB0aGUgZHJpdmVyIGhhcyB0byBzdWNjZXNzZnVsbHkgcHJvYmUgKmFuZCogcmVnaXN0ZXIgdGhlIHdpcGh5LiBTbywgdGhhdCYjMzk7cyB3aGF0IEkgbmVlZCB0byBsb29rIGludG8gbm93LiBEb2VzIGBicmNtZl91c2JfcHJvYmVfcGhhc2UyYCBoYW5kbGUgdGhlIHdpcGh5IHJlZ2lzdHJhdGlvbj8gSSBuZWVkIHRvIGNoZWNrIHRoZSBjb2RlIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNjo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt3aXBoeV9yZWdpc3RlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM9ODMzMj1zdHJ1Y3QgYnJjbWZfY2ZnODAyMTFfaW5mbyAqYnJjbWZfY2ZnODAyMTFfYXR0YWNoKHN0cnVjdCBicmNtZl9wdWIgKmRydnIsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtODQxNi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jOjg0MTc6XHRlcnIgPSB3aXBoeV9yZWdpc3Rlcih3aXBoeSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy04NDE4LVx0aWYgKGVyciBcdTAwM2MgMCkge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jLTg0MjgtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYzo4NDI5Olx0LyogSWYgY2ZnODAyMTEgZGlkbiYjMzk7dCBkaXNhYmxlIDQwTUh6IEhUIENBUCBpbiB3aXBoeV9yZWdpc3RlcigpLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtODQzMC1cdCAqIHNldHVwIDQwTUh6IGluIDJHSHogYmFuZCBhbmQgZW5hYmxlIE9CU1Mgc2Nhbm5pbmcuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA2OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNDU4CgkJCQkJCQlvdXRwdXQ6IDU0CgkJCQkJCQl0aG91Z2h0czogNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKlRyYWNpbmcgdGhlIERyaXZlciBBdHRhY2htZW50KioKCk9rYXksIHNvIGBicmNtZl9jZmc4MDIxMV9hdHRhY2hgIGlzIGEga2V5IGZ1bmN0aW9uIGhlcmUuIFRoZSBpbml0aWFsIGNsdWUgaXMgdGhhdCBpdCYjMzk7cyB0aGUgY2FsbGVyIG9mIGB3aXBoeV9yZWdpc3RlcmAsIGFuZCB0aGF0JiMzOTtzIHVzdWFsbHkgYSBwcmV0dHkgY2VudHJhbCBwb2ludCBpbiBhIHdpcmVsZXNzIGRyaXZlciYjMzk7cyBpbml0aWFsaXphdGlvbi4gSSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgY29udGV4dC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gdHJhY2UgYmFjayBmcm9tIGBicmNtZl9jZmc4MDIxMV9hdHRhY2hgLiBJIG5lZWQgdG8gZmlndXJlIG91dCAqd2hvKiBpcyBjYWxsaW5nICppdCouIFRoYXQmIzM5O3MgdGhlIG5leHQgbG9naWNhbCBzdGVwIHRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiBob3cgdGhpcyBkcml2ZXIgaXMgYmVpbmcgYnJvdWdodCBpbnRvIHRoZSBzeXN0ZW0uIEtub3dpbmcgdGhlIGNhbGxlciB0ZWxscyBtZSB3aGF0IHRyaWdnZXJzIHRoaXMgYXR0YWNobWVudCBwcm9jZXNzLiBJIG5lZWQgdG8gZmluZCB0aGUgY2FsbCBzaXRlcyBmb3IgYGJyY21mX2NmZzgwMjExX2F0dGFjaGAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA2OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JyY21mX2NmZzgwMjExX2F0dGFjaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM9ODMwNj1zdGF0aWMgdm9pZCBicmNtZl9mcmVlX3dpcGh5KHN0cnVjdCB3aXBoeSAqd2lwaHkpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtODMzMS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jOjgzMzI6c3RydWN0IGJyY21mX2NmZzgwMjExX2luZm8gKmJyY21mX2NmZzgwMjExX2F0dGFjaChzdHJ1Y3QgYnJjbWZfcHViICpkcnZyLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtODMzMy1cdFx0XHRcdFx0XHQgIHN0cnVjdCBjZmc4MDIxMV9vcHMgKm9wcyxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuaD00NjE9YnJjbWZfY2ZnODAyMTFfY29ubmVjdF9pbmZvICpjZmdfdG9fY29ubihzdHJ1Y3QgYnJjbWZfY2ZnODAyMTFfaW5mbyAqY2ZnKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5oLTQ2NS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5oOjQ2NjpzdHJ1Y3QgYnJjbWZfY2ZnODAyMTFfaW5mbyAqYnJjbWZfY2ZnODAyMTFfYXR0YWNoKHN0cnVjdCBicmNtZl9wdWIgKmRydnIsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuaC00NjctXHRcdFx0XHRcdFx0ICBzdHJ1Y3QgY2ZnODAyMTFfb3BzICpvcHMsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuYz0xMjI5PXN0YXRpYyBpbnQgYnJjbWZfYnVzX3N0YXJ0ZWQoc3RydWN0IGJyY21mX3B1YiAqZHJ2ciwgc3RydWN0IGNmZzgwMjExX29wcyAqb3BzKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmMtMTI2Ni1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmM6MTI2NzpcdGRydnItXHUwMDNlY29uZmlnID0gYnJjbWZfY2ZnODAyMTFfYXR0YWNoKGRydnIsIG9wcyxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmMtMTI2OC1cdFx0XHRcdFx0ICAgICBkcnZyLVx1MDAzZXNldHRpbmdzLVx1MDAzZXAycF9lbmFibGUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNjo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjQwNQoJCQkJCQkJb3V0cHV0OiA0OQoJCQkJCQkJdGhvdWdodHM6IDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgYnJlYWtkb3duIG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqVHJhY2luZyB0aGUgRHJpdmVyIEluaXRpYWxpemF0aW9uIFBhdGgqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBgYnJjbWZgIGRyaXZlciBpbml0aWFsaXphdGlvbiwgYW5kIG15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiBob3cgaXQgZ2V0cyBnb2luZy4gSSBzZWUgYGJyY21mX2J1c19zdGFydGVkYCBpcyB0aGUga2V5IGZ1bmN0aW9uIHRoYXQga2lja3MgdGhpbmdzIG9mZi4gTXkgZXhwZXJ0IGtub3dsZWRnZSB0ZWxscyBtZSB0aGF0IHRoaXMgaXMgbGlrZWx5IGEgY3JpdGljYWwgcG9pbnQuCgpOb3csIEkmIzM5O20gdGhpbmtpbmcsIHdoZXJlIGlzIHRoaXMgYGJyY21mX2J1c19zdGFydGVkYCBmdW5jdGlvbiBhY3R1YWxseSAqY2FsbGVkKj8gVGhhdCYjMzk7cyB0aGUgY3J1Y2lhbCBxdWVzdGlvbi4gS25vd2luZyBpdHMgY2FsbCBzaXRlcyB3aWxsIGFsbG93IG1lIHRvIGJ1aWxkIGFuIGFjY3VyYXRlIHBpY3R1cmUgb2YgdGhlIGNvbXBsZXRlIGRyaXZlciBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZSwgYW5kIGZpbmQgdGhlIHRyaWdnZXIgZm9yIGNvbmZpZ3VyYXRpb24gd2l0aCBgYnJjbWZfY2ZnODAyMTFfYXR0YWNoYC4gVW5kZXJzdGFuZGluZyB0aGUgZW50cnkgcG9pbnQgd2lsbCBwb2ludCBtZSB0byB0aGUgc3Vycm91bmRpbmcgY29udGV4dCwgYW5kIGhlbHAgbWUgcmVhc29uIGFib3V0IHBvdGVudGlhbCBpc3N1ZXMgb3IgdGhlIGRyaXZlciYjMzk7cyBiZWhhdmlvdXIuIEkgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gdGhpcyBmdW5jdGlvbiBhbmQgZmluZCBpdHMgcGFyZW50IHRvIHVuZGVyc3RhbmQgd2hhdCBldmVudCBvciBjaXJjdW1zdGFuY2UgdHJpZ2dlcnMgdGhlIGRyaXZlciBsb2FkIG9yIGluaXRpYWxpemF0aW9uIHByb2Nlc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA2OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JyY21mX2J1c19zdGFydGVkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29tbW9uLmM9Njg9TU9EVUxFX1BBUk1fREVTQyhpYXBwLCBcJiMzNDtFbmFibGUgcGFydGlhbCBzdXBwb3J0IGZvciB0aGUgb2Jzb2xldGVkIEludGVyLUFjY2VzcyBQb2ludCBQcm90b2NvbFwmIzM0Oyk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvbW1vbi5jLTcwLSNpZmRlZiBERUJVR1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvbW1vbi5jOjcxOi8qIGFsd2F5cyBzdWNjZWVkIGJyY21mX2J1c19zdGFydGVkKCkgKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb21tb24uYy03Mi1zdGF0aWMgaW50IGJyY21mX2lnbm9yZV9wcm9iZV9mYWlsO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmM9MTIyND1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBidXNfcmVzZXRfZm9wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jLTEyMjgtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jOjEyMjk6c3RhdGljIGludCBicmNtZl9idXNfc3RhcnRlZChzdHJ1Y3QgYnJjbWZfcHViICpkcnZyLCBzdHJ1Y3QgY2ZnODAyMTFfb3BzICpvcHMpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jLTEyMzAte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmM9MTM1OT1pbnQgYnJjbWZfYXR0YWNoKHN0cnVjdCBkZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jLTE0MDEtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jOjE0MDI6XHRyZXQgPSBicmNtZl9idXNfc3RhcnRlZChkcnZyLCBkcnZyLVx1MDAzZW9wcyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jLTE0MDMtXHRpZiAocmV0ICE9IDApIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDY6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMyMzIKCQkJCQkJCW91dHB1dDogNDcKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqVHJhY2luZyB0aGUgRHJpdmVyIEluaXRpYWxpemF0aW9uIFBhdGgqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBicmNtZl9hdHRhY2hgLiBUaGUgY29kZSBpcyBzdHJ1Y3R1cmVkIGluIGEgd2F5IHRoYXQgc3VnZ2VzdHMgaXQmIzM5O3MgdGhlIGNvcmUgYXR0YWNobWVudCBwb2ludCBmb3IgdGhlIEJyb2FkY29tIFdpLUZpIGRyaXZlci4gQW5kIHdpdGhpbiBgYnJjbWZfYXR0YWNoYCwgSSBzZWUgYSBjYWxsIHRvIGBicmNtZl9idXNfc3RhcnRlZGAuIFRoYXQmIzM5O3MgaW50ZXJlc3RpbmcsIGJ1dCBub3Qgc3VycHJpc2luZy4gSXQgbWFrZXMgc2Vuc2UgdGhhdCBpbml0aWFsaXphdGlvbiBvZiB0aGUgYnVzLXNwZWNpZmljIGludGVyZmFjZSB3b3VsZCBoYXBwZW4gZHVyaW5nIHRoZSBhdHRhY2htZW50IHByb2Nlc3MuCgpUaGUgcmVhbCBxdWVzdGlvbiBJIG5lZWQgdG8gYW5zd2VyIGlzOiAqV2hlcmUqIGRvZXMgYGJyY21mX2F0dGFjaGAgaXRzZWxmIGdldCBjYWxsZWQ/IFVuZGVyc3RhbmRpbmcgdGhlIGNhbGwgc3RhY2sgdGhhdCBsZWFkcyB0byBgYnJjbWZfYXR0YWNoYCBpcyBjcnVjaWFsIHRvIGZ1bGx5IGdyYXNwIHRoZSBkcml2ZXImIzM5O3MgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UuIEkgbmVlZCB0byBrbm93IHRoZSBlbnRyeSBwb2ludC4gSXMgaXQgY2FsbGVkIGZyb20gdGhlIGNvcmUga2VybmVsIHN1YnN5c3RlbSwgb3IgaXMgaXQgdHJpZ2dlcmVkIGJ5IGEgcGxhdGZvcm0tc3BlY2lmaWMgYnJpbmctdXAgc2VxdWVuY2U/IEtub3dpbmcgKndoZXJlKiBpdCYjMzk7cyBjYWxsZWQgd2lsbCBoZWxwIG1lIGRldGVybWluZSB0aGUgdHJpZ2dlcmluZyBjb25kaXRpb25zLiBUaGF0IHdpbGwgZGlyZWN0IGZ1cnRoZXIgaW52ZXN0aWdhdGlvbiBvbiBob3cgdGhlIGRyaXZlciYjMzk7cyBvdmVyYWxsIGxpZmVjeWNsZSBpcyBtYW5hZ2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNjo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticmNtZl9hdHRhY2gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9idXMuaD0zMDU9aW50IGJyY21mX2FsbG9jKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGJyY21mX21wX2RldmljZSAqc2V0dGluZ3MpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2J1cy5oLTMwNi0vKiBJbmRpY2F0aW9uIGZyb20gYnVzIG1vZHVsZSByZWdhcmRpbmcgcHJlc2VuY2UvaW5zZXJ0aW9uIG9mIGRvbmdsZS4gKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9idXMuaDozMDc6aW50IGJyY21mX2F0dGFjaChzdHJ1Y3QgZGV2aWNlICpkZXYpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2J1cy5oLTMwOC0vKiBJbmRpY2F0aW9uIGZyb20gYnVzIG1vZHVsZSByZWdhcmRpbmcgcmVtb3ZhbC9hYnNlbmNlIG9mIGRvbmdsZSAqL1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb21tb24uaC0xOC0gKiAobW9kdWxlKSBpbml0aWxpYXphdGlvbiB0YWtlcyBwbGFjZS4gVGhlIGRldmljZSBzcGVjaWZpYyBzZXR0aW5ncyBpcyBwYXJ0XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29tbW9uLmg6MTk6ICogb2YgdGhlIGRydnIgc3RydWN0IGFuZCBzaG91bGQgYmUgaW5pdGlhbGl6ZWQgb24gZXZlcnkgYnJjbWZfYXR0YWNoLlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvbW1vbi5oLTIwLSAqL1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmM9MTMzMD1pbnQgYnJjbWZfYWxsb2Moc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgYnJjbWZfbXBfZGV2aWNlICpzZXR0aW5ncylcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jLTEzNTgtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jOjEzNTk6aW50IGJyY21mX2F0dGFjaChzdHJ1Y3QgZGV2aWNlICpkZXYpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jLTEzNjAte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmM9MTQ0Nj12b2lkIGJyY21mX2Z3X2NyYXNoZWQoc3RydWN0IGRldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmMtMTQ1MC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmM6MTQ1MTpcdC8qIE1heSBmaXJlIGJlZm9yZSBicmNtZl9hdHRhY2goKSB3aXJlcyB1cCBkcnZyLCBvciBhZnRlciByZW1vdmFsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jLTE0NTItXHQgKiBoYXMgY2xlYXJlZCBpdDsgZ3VhcmQgdGhlIGRlcmVmcyBiZWxvdyAoYW5kIHRoZSBhcm1pbmcgZ2F0ZSBpblxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmM9MjEzOT1zdGF0aWMgdm9pZCBicmNtZl9wY2llX3NldHVwKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHJldCxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jLTIyMTktXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jOjIyMjA6XHRyZXQgPSBicmNtZl9hdHRhY2goXHUwMDI2ZGV2aW5mby1cdTAwM2VwZGV2LVx1MDAzZWRldik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jLTIyMjEtXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9zZGlvLmM9NDIwOT1zdGF0aWMgdm9pZCBicmNtZl9zZGlvX2Zpcm13YXJlX2NhbGxiYWNrKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IGVycixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvc2Rpby5jLTQzOTktXHQvKiBBdHRhY2ggdG8gdGhlIGNvbW1vbiBsYXllciwgcmVzZXJ2ZSBoZHIgc3BhY2UgKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9zZGlvLmM6NDQwMDpcdGVyciA9IGJyY21mX2F0dGFjaChzZGlvZC1cdTAwM2VkZXYpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3NkaW8uYy00NDAxLVx0aWYgKGVyciAhPSAwKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvc2Rpby5jOjQ0MDI6XHRcdGJyY21mX2VycihcJiMzNDticmNtZl9hdHRhY2ggZmFpbGVkXFxuXCYjMzQ7KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9zZGlvLmMtNDQwMy1cdFx0Z290byBmcmVlO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYz0xMTc2PXN0YXRpYyB2b2lkIGJyY21mX3VzYl9wcm9iZV9waGFzZTIoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgcmV0LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xMjEwLVx0LyogQXR0YWNoIHRvIHRoZSBjb21tb24gZHJpdmVyIGludGVyZmFjZSAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jOjEyMTE6XHRyZXQgPSBicmNtZl9hdHRhY2goZGV2aW5mby1cdTAwM2VkZXYpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTEyMTItXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYz0xMjQ0PXN0YXRpYyBpbnQgYnJjbWZfdXNiX3Byb2JlX2NiKHN0cnVjdCBicmNtZl91c2JkZXZfaW5mbyAqZGV2aW5mbyxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtMTI5MS1cdFx0XHRnb3RvIGZhaWw7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM6MTI5MjpcdFx0cmV0ID0gYnJjbWZfYXR0YWNoKGRldmluZm8tXHUwMDNlZGV2KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xMjkzLVx0XHRpZiAocmV0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNjo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTAzMQoJCQkJCQkJb3V0cHV0OiA1MgoJCQkJCQkJdGhvdWdodHM6IDEwMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFVTQiBQcm9iZSBQaGFzZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIGBicmNtZl91c2JfcHJvYmVfcGhhc2UyYCBmdW5jdGlvbiwgYW5kIGl0JiMzOTtzIGNhbGxlZCBieSBgYnJjbWZfYXR0YWNoYCwgd2hpY2ggbWFrZXMgc2Vuc2UuIEkgc2VlIHRoYXQgYGJyY21mX3VzYl9wcm9iZV9waGFzZTJgIGl0c2VsZiBpcyBpbnZva2VkIGFzIGEgY2FsbGJhY2sgZnJvbSBgYnJjbWZfZndfZ2V0X2Zpcm13YXJlc2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBob3cgZG9lcyB0aGlzIGNhbGxiYWNrIGhhbmRsZSBlcnJvciBjb25kaXRpb25zPyBTcGVjaWZpY2FsbHksIHdoYXQgaGFwcGVucyBpZiBgYnJjbWZfZndfZ2V0X2Zpcm13YXJlc2AgZmFpbHMgdG8gZmluZCB0aGUgbmVjZXNzYXJ5IGZpcm13YXJlIGFuZCByZXR1cm5zIGFuIGVycm9yIHRocm91Z2ggdGhpcyBjYWxsYmFjaz8gSSBuZWVkIHRvIGRpZyBpbnRvIGBicmNtZl91c2JfcHJvYmVfcGhhc2UyYCB0byBjb25maXJtIHRoYXQgaXQgZ3JhY2VmdWxseSBoYW5kbGVzIHRoZSBlcnJvciBjb2RlIGFuZCB0YWtlcyB0aGUgYXBwcm9wcmlhdGUgYWN0aW9uLiBJdCYjMzk7cyBhIGNyaXRpY2FsIHBhdGgsIGFuZCBJIG5lZWQgdG8gZW5zdXJlIHJvYnVzdCBlcnJvciBtYW5hZ2VtZW50IGluIHRoaXMgc2VxdWVuY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA2OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JyY21mX3VzYl9wcm9iZV9waGFzZTImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYz0xMTY1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnJjbWZfYnVzX29wcyBicmNtZl91c2JfYnVzX29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtMTE3NS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYzoxMTc2OnN0YXRpYyB2b2lkIGJyY21mX3VzYl9wcm9iZV9waGFzZTIoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgcmV0LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTExNzctXHRcdFx0XHQgICBzdHJ1Y3QgYnJjbWZfZndfcmVxdWVzdCAqZndyZXEpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jPTEyNDQ9c3RhdGljIGludCBicmNtZl91c2JfcHJvYmVfY2Ioc3RydWN0IGJyY21mX3VzYmRldl9pbmZvICpkZXZpbmZvLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xMzA4LVx0LyogcmVxdWVzdCBmaXJtd2FyZSBoZXJlICovXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM6MTMwOTpcdHJldCA9IGJyY21mX2Z3X2dldF9maXJtd2FyZXMoZGV2LCBmd3JlcSwgYnJjbWZfdXNiX3Byb2JlX3BoYXNlMik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtMTMxMC1cdGlmIChyZXQpIHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM9MTUxND1zdGF0aWMgaW50IGJyY21mX3VzYl9yZXNldF9yZXN1bWUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTE1MjYtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM6MTUyNzpcdHJldCA9IGJyY21mX2Z3X2dldF9maXJtd2FyZXMoXHUwMDI2dXNiLVx1MDAzZWRldiwgZndyZXEsIGJyY21mX3VzYl9wcm9iZV9waGFzZTIpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTE1MjgtXHRpZiAocmV0IFx1MDAzYyAwKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNjo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTk1MwoJCQkJCQkJb3V0cHV0OiA1NAoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIGBicmNtZl91c2JfcHJvYmVfcGhhc2UyYC4gSSYjMzk7bSBnb2luZyB0byBhcHByb2FjaCB0aGlzIHdpdGggdGhlIGFzc3VtcHRpb24gdGhhdCBJIHVuZGVyc3RhbmQgdGhlIGJyb2FkZXIgZHJpdmVyIGFyY2hpdGVjdHVyZSBhbHJlYWR5LCBzbyBJIGNhbiBmb2N1cyBvbiB0aGUgc3BlY2lmaWNzIG9mIHRoaXMgcGhhc2UuIE15IGluaXRpYWwgcXVlc3Rpb24gaXM6IHdoYXQgaXMgdGhlICpzcGVjaWZpYyogcm9sZSB0aGlzIGZ1bmN0aW9uIHBsYXlzIHdpdGhpbiB0aGUgVVNCIHByb2JlIHNlcXVlbmNlPyBJcyBpdCBoYW5kbGluZyBkZXZpY2Utc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24sIHJlc291cmNlIGFsbG9jYXRpb24sIG9yIGlzIGl0IG1vcmUgYWJvdXQgZmlybXdhcmUgbG9hZGluZyBvciBpbnRlcmZhY2UgY29uZmlndXJhdGlvbj8gVW5kZXJzdGFuZGluZyBpdHMgcGxhY2UgaW4gdGhlIGdyYW5kIHNjaGVtZSBpcyBrZXkgdG8gY29tcHJlaGVuZGluZyBpdHMgbG9naWMuCgpJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgaW5wdXQgcGFyYW1ldGVycy4gV2hhdCBhcmUgdGhleSwgYW5kIHdoYXQgaW5mb3JtYXRpb24gZG8gdGhleSBwcm92aWRlPyBCYXNlZCBvbiB0aGUgZnVuY3Rpb24gbmFtZSwgSSYjMzk7ZCBleHBlY3QgaW5mb3JtYXRpb24gcmVsZXZhbnQgdG8gdGhlIFVTQiBkZXZpY2UgaXRzZWxmIGFuZCBsaWtlbHkgc29tZSBjb250ZXh0IGFib3V0IHRoZSBob3N0IGRyaXZlci4gSSYjMzk7bGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIHBhc3NlZCBpbi4gQXJlIHRoZXJlIGFueSBwb2ludGVycyB0byBzdHJ1Y3R1cmVzIEkgcmVjb2duaXplIGZyb20gdGhlIGJyb2FkZXIgYnJjbWYgZHJpdmVyIGNvZGU/IFRoYXQgd2lsbCBpbW1lZGlhdGVseSBoZWxwIG9yaWVudCBtZS4KCk5vdywgSSYjMzk7bGwgc3RhcnQgdHJhY2luZyB0aGUgZXhlY3V0aW9uIGZsb3cuIEkmIzM5O20gZ29pbmcgdG8gbG9vayBmb3IgYW55IG9idmlvdXMgY29udHJvbCBmbG93IHN0YXRlbWVudHMg4oCTIGBpZmAgc3RhdGVtZW50cywgYHN3aXRjaGAgc3RhdGVtZW50cywgbG9vcHMg4oCTIHRoYXQgZ292ZXJuIGl0cyBiZWhhdmlvci4gQXJlIHRoZXJlIGNvbmRpdGlvbmFsIGNoZWNrcyBiYXNlZCBvbiBkZXZpY2UgaWRlbnRpZmllcnMsIFVTQiBjb25maWd1cmF0aW9uIGRlc2NyaXB0b3JzLCBvciBkcml2ZXIgZmxhZ3M/IEkmIzM5O2xsIGJlIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGFueSBlcnJvciBoYW5kbGluZy4gV2hhdCBoYXBwZW5zIGlmIHRoaW5ncyBnbyB3cm9uZz8gQXJlIHRoZXJlIGF0dGVtcHRzIHRvIHJldHJ5LCBvciBkb2VzIGl0IHRyaWdnZXIgYSBkZXZpY2UgcmVzZXQ/IFRoYXTigJlzIGFsd2F5cyBhIGtleSBwb2ludCB0byB1bmRlcnN0YW5kLgoKTmV4dCwgSSBuZWVkIHRvIHNlZSB3aGF0IHJlc291cmNlcyBhcmUgYmVpbmcgYWNjZXNzZWQgb3IgbW9kaWZpZWQuIElzIGl0IGludGVyYWN0aW5nIHdpdGggdGhlIFVTQiBidXMgZGlyZWN0bHkgdGhyb3VnaCBsaWJ1c2IgY2FsbHMsIG9yIGlzIGl0IHVzaW5nIHNvbWUgaGlnaGVyLWxldmVsIGFic3RyYWN0aW9uIHByb3ZpZGVkIGJ5IHRoZSBrZXJuZWw/IEFyZSB0aGVyZSBtZW1vcnkgYWxsb2NhdGlvbnMsIGludGVycnVwdCByZWdpc3RyYXRpb25zLCBvciBoYXJkd2FyZSByZWdpc3RlcnMgYmVpbmcgbWFuaXB1bGF0ZWQ/IEhvdyBhcmUgdGhlc2UgcmVzb3VyY2VzIG1hbmFnZWQ/IEkgZXhwZWN0IHRvIHNlZSB0aGUgc3RhbmRhcmQgbG9ja2luZyBwYXJhZGlnbXMgYW5kIG1lbW9yeSBtYW5hZ2VtZW50IGFzIHJlcXVpcmVkIGJ5IHRoZSBrZXJuZWwuCgpGaW5hbGx5LCBJJiMzOTtsbCBsb29rIGZvciBhbnkgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgZnVuY3Rpb25zLiBEb2VzIHRoaXMgZnVuY3Rpb24gY2FsbCBvdXQgdG8gb3RoZXIgYGJyY21mYCByb3V0aW5lcywgb3IgZXZlbiB0byB0aGUgVVNCIHN0YWNrPyBVbmRlcnN0YW5kaW5nIHRoZSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgc3RhY2sgd2lsbCBiZSBpbXBvcnRhbnQsIGFzIHdpbGwgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSwgYW5kIGhvdyBpdHMgcmV0dXJuIHZhbHVlcyBhcmUgaGFuZGxlZCBieSBpdHMgY2FsbGVyLiBGcm9tIHRoZXNlIG9ic2VydmF0aW9ucywgSSBzaG91bGQgYmUgYWJsZSB0byBkZWR1Y2UgdGhlIGNvcmUgcHVycG9zZSBvZiBgYnJjbWZfdXNiX3Byb2JlX3BoYXNlMmAgd2l0aGluIHRoZSBicm9hZGVyIGJyY21mIGRyaXZlciBhcmNoaXRlY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA2OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTE3NiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMTc2Olx0c3RhdGljIHZvaWQgYnJjbWZfdXNiX3Byb2JlX3BoYXNlMihzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCByZXQsXG4xMTc3Olx0XHRcdFx0XHQgICBzdHJ1Y3QgYnJjbWZfZndfcmVxdWVzdCAqZndyZXEpXG4xMTc4Olx0e1xuMTE3OTpcdFx0c3RydWN0IGJyY21mX2J1cyAqYnVzID0gZGV2X2dldF9kcnZkYXRhKGRldik7XG4xMTgwOlx0XHRzdHJ1Y3QgYnJjbWZfdXNiZGV2X2luZm8gKmRldmluZm8gPSBidXMtXHUwMDNlYnVzX3ByaXYudXNiLVx1MDAzZWRldmluZm87XG4xMTgxOlx0XHRjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3O1xuMTE4MjpcdFxuMTE4MzpcdFx0aWYgKHJldClcbjExODQ6XHRcdFx0Z290byBlcnJvcjtcbjExODU6XHRcbjExODY6XHRcdGJyY21mX2RiZyhVU0IsIFwmIzM0O1N0YXJ0IGZ3IGRvd25sb2FkaW5nXFxuXCYjMzQ7KTtcbjExODc6XHRcbjExODg6XHRcdGZ3ID0gZndyZXEtXHUwMDNlaXRlbXNbQlJDTUZfVVNCX0ZXX0NPREVdLmJpbmFyeTtcbjExODk6XHRcdGtmcmVlKGZ3cmVxKTtcbjExOTA6XHRcbjExOTE6XHRcdHJldCA9IGNoZWNrX2ZpbGUoZnctXHUwMDNlZGF0YSk7XG4xMTkyOlx0XHRpZiAocmV0IFx1MDAzYyAwKSB7XG4xMTkzOlx0XHRcdGJyY21mX2VycihcJiMzNDtpbnZhbGlkIGZpcm13YXJlXFxuXCYjMzQ7KTtcbjExOTQ6XHRcdFx0cmVsZWFzZV9maXJtd2FyZShmdyk7XG4xMTk1Olx0XHRcdGdvdG8gZXJyb3I7XG4xMTk2Olx0XHR9XG4xMTk3Olx0XG4xMTk4Olx0XHRkZXZpbmZvLVx1MDAzZWltYWdlID0gZnctXHUwMDNlZGF0YTtcbjExOTk6XHRcdGRldmluZm8tXHUwMDNlaW1hZ2VfbGVuID0gZnctXHUwMDNlc2l6ZTtcbjEyMDA6XHRcbjEyMDE6XHRcdHJldCA9IGJyY21mX3VzYl9md19kb3dubG9hZChkZXZpbmZvKTtcbjEyMDI6XHRcdHJlbGVhc2VfZmlybXdhcmUoZncpO1xuMTIwMzpcdFx0aWYgKHJldClcbjEyMDQ6XHRcdFx0Z290byBlcnJvcjtcbjEyMDU6XHRcbjEyMDY6XHRcdHJldCA9IGJyY21mX2FsbG9jKGRldmluZm8tXHUwMDNlZGV2LCBkZXZpbmZvLVx1MDAzZXNldHRpbmdzKTtcbjEyMDc6XHRcdGlmIChyZXQpXG4xMjA4Olx0XHRcdGdvdG8gZXJyb3I7XG4xMjA5Olx0XG4xMjEwOlx0XHQvKiBBdHRhY2ggdG8gdGhlIGNvbW1vbiBkcml2ZXIgaW50ZXJmYWNlICovXG4xMjExOlx0XHRyZXQgPSBicmNtZl9hdHRhY2goZGV2aW5mby1cdTAwM2VkZXYpO1xuMTIxMjpcdFx0aWYgKHJldClcbjEyMTM6XHRcdFx0Z290byBlcnJvcjtcbjEyMTQ6XHRcbjEyMTU6XHRcdGNvbXBsZXRlKFx1MDAyNmRldmluZm8tXHUwMDNlZGV2X2luaXRfZG9uZSk7XG4xMjE2Olx0XHRyZXR1cm47XG4xMjE3Olx0ZXJyb3I6XG4xMjE4Olx0XHRicmNtZl9kYmcoVFJBQ0UsIFwmIzM0O2ZhaWxlZDogZGV2PSVzLCBlcnI9JWRcXG5cJiMzNDssIGRldl9uYW1lKGRldiksIHJldCk7XG4xMjE5Olx0XHRjb21wbGV0ZShcdTAwMjZkZXZpbmZvLVx1MDAzZWRldl9pbml0X2RvbmUpO1xuMTIyMDpcdFx0ZGV2aWNlX3JlbGVhc2VfZHJpdmVyKGRldik7XG4xMjIxOlx0fVxuMTIyMjpcdFxuMTIyMzpcdHN0YXRpYyBzdHJ1Y3QgYnJjbWZfZndfcmVxdWVzdCAqXG4xMjI0Olx0YnJjbWZfdXNiX3ByZXBhcmVfZndfcmVxdWVzdChzdHJ1Y3QgYnJjbWZfdXNiZGV2X2luZm8gKmRldmluZm8pXG4xMjI1Olx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNjo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzIzNAoJCQkJCQkJb3V0cHV0OiA1MAoJCQkJCQkJdGhvdWdodHM6IDE5MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEZpcm13YXJlIERlcGVuZGVuY3kgaW4gdGhlIEJyb2FkY29tIFVTQiBEcml2ZXIqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgQnJvYWRjb20gVVNCIGRyaXZlciBpbml0aWFsaXphdGlvbiwgYW5kIGl0JiMzOTtzIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIGJ1dCB0aGVyZSYjMzk7cyBhIGNydWNpYWwgZGVwZW5kZW5jeSBvbiB0aGUgZmlybXdhcmUuICBJZiBgcmV0YCBpc24mIzM5O3QgemVybyDigJMgbWVhbmluZyB0aGUgZmlybXdhcmUgaXNuJiMzOTt0IGZvdW5kIGluaXRpYWxseSDigJMgd2UganVtcCB0byB0aGUgYGVycm9yYCBsYWJlbCBhbmQgaW1tZWRpYXRlbHkgY2FsbCBgZGV2aWNlX3JlbGVhc2VfZHJpdmVyKGRldilgLiAgVGhhdCYjMzk7cyBhIHByZXR0eSBzdHJvbmcgaW5kaWNhdG9yIHRoYXQgZmlybXdhcmUgaXMgKmFic29sdXRlbHkqIHJlcXVpcmVkIGZvciB0aGUgZGV2aWNlIHRvIGV2ZW4gYXR0YWNoIGFuZCwgY3JpdGljYWxseSwgcmVnaXN0ZXIgdGhlIFdpLUZpIFBIWSAoYHdpcGh5YCkuICBBIHF1aWNrIGNoZWNrIGNvbmZpcm1zIHRoYXQgYHN5emthbGxlcmAgKmNhbiogaGFuZGxlIHByb3ZpZGluZyB0aGUgZmlybXdhcmUuIEl0IGhhcyB0aGF0IGNvdmVyZWQsIGVpdGhlciB0aHJvdWdoIHRoZSBgQ09ORklHX0ZXX0xPQURFUl9VU0VSX0hFTFBFUmAgY29uZmlndXJhdGlvbiBvcHRpb24sIG9yIHNpbXBseSBieSBwdXR0aW5nIHRoZSBmaXJtd2FyZSBpbiB0aGUgcm9vdCBmaWxlc3lzdGVtLgoKQnV0IGhvbGQgb24sIHRoZXJlJiMzOTtzIGBicmNtZl91c2JfZndfZG93bmxvYWRgLiBUaGF0IGZ1bmN0aW9uJiMzOTtzIGpvYiBpcyBleHBsaWNpdGx5IHRvIGRvd25sb2FkIHRoZSBmaXJtd2FyZSAqdG8qIHRoZSBVU0IgZGV2aWNlIGl0c2VsZi4gSWYgYHN5emthbGxlcmAgaXMgZW11bGF0aW5nIHRoaXMgVVNCIGRldmljZSAobGlrZWx5IHZpYSBgdmhjaWApLCB0aGVuIGl0JiMzOTtzIGdvaW5nIHRvIGludGVyY2VwdCB0aG9zZSBmaXJtd2FyZSBkb3dubG9hZCBjb21tYW5kcy4gU28sIGBzeXprYWxsZXJgIHNob3VsZCBiZSBhYmxlIHRvIGFja25vd2xlZGdlIHRoZW0sIGRvd25sb2FkIHRoZSBmaXJtd2FyZSwgYW5kIHRoZW4gYGJyY21mX2F0dGFjaGAgaXMgY2FsbGVkLiBTbywgdGhlIHF1ZXN0aW9uIHJlbWFpbnM6IGlzIGBicmNtZl9hdHRhY2hgIGludGVyYWN0aW5nIHdpdGggdGhlIGhhcmR3YXJlIHdoaWNoIGNvdWxkIGNhdXNlIGl0IHRvIGZhaWwsIGlmIHRoZSBlbXVsYXRlZCBkZXZpY2UgZG9lcyBub3QgY29ycmVjdGx5IHJlc3BvbmQ/IE5vdywgbGV0JiMzOTtzIGRpdmUgaW50byBgYnJjbWZfYXR0YWNoYCBhbmQgc2VlIGlmIHRoZXJlIGFyZSBhbnkgc3VidGxlIGhhcmR3YXJlIGludGVyYWN0aW9ucyB0aGF0IHdlIG5lZWQgdG8gYWNjb3VudCBmb3IgaW4gdGhlIGVtdWxhdGlvbiBwcm9jZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNjo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticmNtZl9hdHRhY2gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmM9MTMzMD1pbnQgYnJjbWZfYWxsb2Moc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgYnJjbWZfbXBfZGV2aWNlICpzZXR0aW5ncylcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jLTEzNTgtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jOjEzNTk6aW50IGJyY21mX2F0dGFjaChzdHJ1Y3QgZGV2aWNlICpkZXYpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jLTEzNjAte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmM9MTQ0Nj12b2lkIGJyY21mX2Z3X2NyYXNoZWQoc3RydWN0IGRldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmMtMTQ1MC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmM6MTQ1MTpcdC8qIE1heSBmaXJlIGJlZm9yZSBicmNtZl9hdHRhY2goKSB3aXJlcyB1cCBkcnZyLCBvciBhZnRlciByZW1vdmFsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jLTE0NTItXHQgKiBoYXMgY2xlYXJlZCBpdDsgZ3VhcmQgdGhlIGRlcmVmcyBiZWxvdyAoYW5kIHRoZSBhcm1pbmcgZ2F0ZSBpblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNjo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODE4MQoJCQkJCQkJb3V0cHV0OiA1NAoJCQkJCQkJdGhvdWdodHM6IDExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGEgc2Vhc29uZWQgcHJvZmVzc2lvbmFsIGluIHRoZSBmaWVsZCwgc3RhcnRpbmcgd2l0aCB0aGUgYm9sZGVkIGhlYWRlcjoKCioqRGl2aW5nIGludG8gYGJyY21mX2F0dGFjaGAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBUaGUgdGFyZ2V0IGhlcmUgaXMgYGJyY21mX2F0dGFjaGAuIEkmIzM5O20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgd2hhdCB0byBleHBlY3QsIGJ1dCBsZXQmIzM5O3Mgc2VlIGhvdyB3ZWxsIGl0IG1hcHMgdG8gbXkgbWVudGFsIG1vZGVsLiBVc3VhbGx5IGluIHRoZXNlIHNvcnRzIG9mIGRyaXZlcnMsIHRoaXMgaXMgdGhlIHBpdm90YWwgZnVuY3Rpb27igJQgdGhlIGdhdGV3YXkuIEl0JiMzOTtzIHRoZSBwb2ludCB3aGVyZSBhIG5ldyBkZXZpY2UgaW5zdGFuY2UgZ2V0cyBpbnRlZ3JhdGVkIGludG8gdGhlIHN5c3RlbS4gSeKAmW0gdGhpbmtpbmcgaW5pdGlhbGl6YXRpb24sIHJlc291cmNlIGFsbG9jYXRpb24sIGFuZCBiaW5kaW5nIHRvIHRoZSByZWxldmFudCBrZXJuZWwgc3Vic3lzdGVtcyBhcmUgYWxsIGxpa2VseSBjYW5kaWRhdGVzIGZvciB0aGlzIGZ1bmN0aW9uJiMzOTtzIHJlc3BvbnNpYmlsaXRpZXMuIFRoaW5ncyBsaWtlIGhhcmR3YXJlIGlkZW50aWZpY2F0aW9uLCBzZXR0aW5nIHVwIERNQSBjaGFubmVscywgZXN0YWJsaXNoaW5nIGludGVycnVwdCBoYW5kbGVycy4uLiBJJiMzOTttIHJlYWxseSBjdXJpb3VzIHRvIHNlZSBob3cgdGhlIEJyb2FkY29tIGRyaXZlciBtYW5hZ2VzIGl0cyBkZXZpY2UgY29udGV4dCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBmaXJtd2FyZS4gSXMgdGhlcmUgYSBzZXBhcmF0ZSBmaXJtd2FyZSBsb2FkIHN0YWdlPyBIb3cgZG9lcyBpdCBoYW5kbGUgcG90ZW50aWFsIGVycm9ycyBkdXJpbmcgYXR0YWNobWVudD8gQXJlIHRoZXJlIGFueSBjbGV2ZXIgdHJpY2tzIHRvIG9wdGltaXplIHRoZSBwcm9jZXNzLCBtYXliZSBzcGVjaWZpYyB0byB0aGVpciBjaGlwc2V0cz8gSSBrbm93IHRoZXNlIGRyaXZlcnMgY2FuIGdldCBjb252b2x1dGVkIHF1aWNrbHksIHNvIEkmIzM5O2xsIGJlIGtlZXBpbmcgYW4gZXllIG91dCBmb3IgYW55IHBhcnRpY3VsYXJseSBpbnRlcmVzdGluZyBvciB1bmNvbnZlbnRpb25hbCBhcHByb2FjaGVzLiBUaW1lIHRvIGRpZyBpbiEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDY6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTM1OSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMzU5Olx0aW50IGJyY21mX2F0dGFjaChzdHJ1Y3QgZGV2aWNlICpkZXYpXG4xMzYwOlx0e1xuMTM2MTpcdFx0c3RydWN0IGJyY21mX2J1cyAqYnVzX2lmID0gZGV2X2dldF9kcnZkYXRhKGRldik7XG4xMzYyOlx0XHRzdHJ1Y3QgYnJjbWZfcHViICpkcnZyID0gYnVzX2lmLVx1MDAzZWRydnI7XG4xMzYzOlx0XHRpbnQgcmV0ID0gMDtcbjEzNjQ6XHRcdGludCBpO1xuMTM2NTpcdFxuMTM2NjpcdFx0YnJjbWZfZGJnKFRSQUNFLCBcJiMzNDtFbnRlclxcblwmIzM0Oyk7XG4xMzY3Olx0XG4xMzY4Olx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKGRydnItXHUwMDNlaWYyYnNzKTsgaSYjNDM7JiM0MzspXG4xMzY5Olx0XHRcdGRydnItXHUwMDNlaWYyYnNzW2ldID0gQlJDTUZfQlNTSURYX0lOVkFMSUQ7XG4xMzcwOlx0XG4xMzcxOlx0XHRtdXRleF9pbml0KFx1MDAyNmRydnItXHUwMDNlcHJvdG9fYmxvY2spO1xuMTM3MjpcdFxuMTM3MzpcdFx0LyogTGluayB0byBidXMgbW9kdWxlICovXG4xMzc0Olx0XHRkcnZyLVx1MDAzZWhkcmxlbiA9IDA7XG4xMzc1Olx0XG4xMzc2Olx0XHRyZXQgPSBicmNtZl9md3ZpZF9hdHRhY2goZHJ2cik7XG4xMzc3Olx0XHRpZiAocmV0ICE9IDApIHtcbjEzNzg6XHRcdFx0YnBoeV9lcnIoZHJ2ciwgXCYjMzQ7YnJjbWZfZnd2aWRfYXR0YWNoIGZhaWxlZFxcblwmIzM0Oyk7XG4xMzc5Olx0XHRcdGdvdG8gZmFpbDtcbjEzODA6XHRcdH1cbjEzODE6XHRcbjEzODI6XHRcdC8qIEF0dGFjaCBhbmQgbGluayBpbiB0aGUgcHJvdG9jb2wgKi9cbjEzODM6XHRcdHJldCA9IGJyY21mX3Byb3RvX2F0dGFjaChkcnZyKTtcbjEzODQ6XHRcdGlmIChyZXQgIT0gMCkge1xuMTM4NTpcdFx0XHRicGh5X2VycihkcnZyLCBcJiMzNDticmNtZl9wcm90X2F0dGFjaCBmYWlsZWRcXG5cJiMzNDspO1xuMTM4NjpcdFx0XHRnb3RvIGZhaWw7XG4xMzg3Olx0XHR9XG4xMzg4Olx0XG4xMzg5Olx0XHQvKiBhdHRhY2ggZmlybXdhcmUgZXZlbnQgaGFuZGxlciAqL1xuMTM5MDpcdFx0cmV0ID0gYnJjbWZfZndlaF9hdHRhY2goZHJ2cik7XG4xMzkxOlx0XHRpZiAocmV0ICE9IDApIHtcbjEzOTI6XHRcdFx0YnBoeV9lcnIoZHJ2ciwgXCYjMzQ7YnJjbWZfZndlaF9hdHRhY2ggZmFpbGVkXFxuXCYjMzQ7KTtcbjEzOTM6XHRcdFx0Z290byBmYWlsO1xuMTM5NDpcdFx0fVxuMTM5NTpcdFxuMTM5NjpcdFx0LyogQXR0YWNoIHRvIGV2ZW50cyBpbXBvcnRhbnQgZm9yIGNvcmUgY29kZSAqL1xuMTM5NzpcdFx0YnJjbWZfZndlaF9yZWdpc3RlcihkcnZyLCBCUkNNRl9FX1BTTV9XQVRDSERPRyxcbjEzOTg6XHRcdFx0XHQgICAgYnJjbWZfcHNtX3dhdGNoZG9nX25vdGlmeSk7XG4xMzk5Olx0XG4xNDAwOlx0XHRicmNtZl9md3ZpZF9nZXRfY2ZnODAyMTFfb3BzKGRydnIpO1xuMTQwMTpcdFxuMTQwMjpcdFx0cmV0ID0gYnJjbWZfYnVzX3N0YXJ0ZWQoZHJ2ciwgZHJ2ci1cdTAwM2VvcHMpO1xuMTQwMzpcdFx0aWYgKHJldCAhPSAwKSB7XG4xNDA0Olx0XHRcdGJwaHlfZXJyKGRydnIsIFwmIzM0O2RvbmdsZSBpcyBub3QgcmVzcG9uZGluZzogZXJyPSVkXFxuXCYjMzQ7LCByZXQpO1xuMTQwNTpcdFx0XHRnb3RvIGZhaWw7XG4xNDA2Olx0XHR9XG4xNDA3Olx0XG4xNDA4Olx0XHRyZXR1cm4gMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDY6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkyODIKCQkJCQkJCW91dHB1dDogNTQKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIHRoZSBgYnJjbWZfYnVzX3N0YXJ0ZWRgIEZ1bmN0aW9uKioKCk9rYXksIHNvIHRoZSBgYnJjbWZfYnVzX3N0YXJ0ZWRgIGZ1bmN0aW9uIGhhcyBiZWVuIGNhbGxlZC4gVGhhdCYjMzk7cyBteSBzdGFydGluZyBwb2ludC4gTm93LCB3aGF0JiMzOTtzIGl0cyBwdXJwb3NlPyBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBjb2RlIGRlZmluaXRpb24gYW5kIHNlZSB3aGF0IGl0IGFjdHVhbGx5IGRvZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBmdW5jdGlvbiBpcyBkb2luZyBhdCB0aGUgdmVyeSBiZWdpbm5pbmcgb2YgdGhlIGJ1cyBpbml0aWFsaXphdGlvbiBwcm9jZXNzLCBhcyB0aGF0JiMzOTtzIG15IGFyZWEgb2YgZXhwZXJ0aXNlLiBJJiMzOTtsbCByZWFkIHRoZSBjb2RlIG1ldGljdWxvdXNseSwgZm9jdXNpbmcgb24gdGhlIGtleSBvcGVyYXRpb25zLCBkYXRhIHN0cnVjdHVyZXMgYmVpbmcgbWFuaXB1bGF0ZWQsIGFuZCBhbnkgZXJyb3IgaGFuZGxpbmcuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IHRoZSBkcml2ZXImIzM5O3MgaW50ZXJhY3Rpb24gd2l0aCB0aGUgaGFyZHdhcmUsIGVzcGVjaWFsbHkgaWYgdGhpcyBpcyBhIGRyaXZlciBJIGtub3cgd2VsbC4gVGhpcyBpcyBteSBjaGFuY2UgdG8gZ2FpbiBhIGhpZ2gtbGV2ZWwgdW5kZXJzdGFuZGluZyBvZiB3aGF0IGhhcHBlbnMgYXQgdGhlIHZlcnkgc3RhcnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA2OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyMjksCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTIyOTpcdHN0YXRpYyBpbnQgYnJjbWZfYnVzX3N0YXJ0ZWQoc3RydWN0IGJyY21mX3B1YiAqZHJ2ciwgc3RydWN0IGNmZzgwMjExX29wcyAqb3BzKVxuMTIzMDpcdHtcbjEyMzE6XHRcdGludCByZXQgPSAtMTtcbjEyMzI6XHRcdHN0cnVjdCBicmNtZl9idXMgKmJ1c19pZiA9IGRydnItXHUwMDNlYnVzX2lmO1xuMTIzMzpcdFx0c3RydWN0IGJyY21mX2lmICppZnA7XG4xMjM0Olx0XHRzdHJ1Y3QgYnJjbWZfaWYgKnAycF9pZnA7XG4xMjM1Olx0XG4xMjM2Olx0XHRicmNtZl9kYmcoVFJBQ0UsIFwmIzM0O1xcblwmIzM0Oyk7XG4xMjM3Olx0XG4xMjM4Olx0XHQvKiBhZGQgcHJpbWFyeSBuZXR3b3JraW5nIGludGVyZmFjZSAqL1xuMTIzOTpcdFx0aWZwID0gYnJjbWZfYWRkX2lmKGRydnIsIDAsIDAsIGZhbHNlLCBcJiMzNDt3bGFuJWRcJiMzNDssXG4xMjQwOlx0XHRcdFx0ICAgaXNfdmFsaWRfZXRoZXJfYWRkcihkcnZyLVx1MDAzZXNldHRpbmdzLVx1MDAzZW1hYykgPyBkcnZyLVx1MDAzZXNldHRpbmdzLVx1MDAzZW1hYyA6IE5VTEwpO1xuMTI0MTpcdFx0aWYgKElTX0VSUihpZnApKVxuMTI0MjpcdFx0XHRyZXR1cm4gUFRSX0VSUihpZnApO1xuMTI0MzpcdFxuMTI0NDpcdFx0cDJwX2lmcCA9IE5VTEw7XG4xMjQ1Olx0XG4xMjQ2Olx0XHQvKiBzaWduYWwgYnVzIHJlYWR5ICovXG4xMjQ3Olx0XHRicmNtZl9idXNfY2hhbmdlX3N0YXRlKGJ1c19pZiwgQlJDTUZfQlVTX1VQKTtcbjEyNDg6XHRcbjEyNDk6XHRcdC8qIGRvIGJ1cyBzcGVjaWZpYyBwcmVpbml0IGhlcmUgKi9cbjEyNTA6XHRcdHJldCA9IGJyY21mX2J1c19wcmVpbml0KGJ1c19pZik7XG4xMjUxOlx0XHRpZiAocmV0IFx1MDAzYyAwKVxuMTI1MjpcdFx0XHRnb3RvIGZhaWw7XG4xMjUzOlx0XG4xMjU0Olx0XHQvKiBCdXMgaXMgcmVhZHksIGRvIGFueSBpbml0aWFsaXphdGlvbiAqL1xuMTI1NTpcdFx0cmV0ID0gYnJjbWZfY19wcmVpbml0X2RjbWRzKGlmcCk7XG4xMjU2Olx0XHRpZiAocmV0IFx1MDAzYyAwKVxuMTI1NzpcdFx0XHRnb3RvIGZhaWw7XG4xMjU4Olx0XG4xMjU5Olx0XHRicmNtZl9mZWF0X2F0dGFjaChkcnZyKTtcbjEyNjA6XHRcbjEyNjE6XHRcdHJldCA9IGJyY21mX3Byb3RvX2luaXRfZG9uZShkcnZyKTtcbjEyNjI6XHRcdGlmIChyZXQgXHUwMDNjIDApXG4xMjYzOlx0XHRcdGdvdG8gZmFpbDtcbjEyNjQ6XHRcbjEyNjU6XHRcdGJyY21mX3Byb3RvX2FkZF9pZihkcnZyLCBpZnApO1xuMTI2NjpcdFxuMTI2NzpcdFx0ZHJ2ci1cdTAwM2Vjb25maWcgPSBicmNtZl9jZmc4MDIxMV9hdHRhY2goZHJ2ciwgb3BzLFxuMTI2ODpcdFx0XHRcdFx0XHQgICAgIGRydnItXHUwMDNlc2V0dGluZ3MtXHUwMDNlcDJwX2VuYWJsZSk7XG4xMjY5Olx0XHRpZiAoZHJ2ci1cdTAwM2Vjb25maWcgPT0gTlVMTCkge1xuMTI3MDpcdFx0XHRyZXQgPSAtRU5PTUVNO1xuMTI3MTpcdFx0XHRnb3RvIGZhaWw7XG4xMjcyOlx0XHR9XG4xMjczOlx0XG4xMjc0Olx0XHRyZXQgPSBicmNtZl9uZXRfYXR0YWNoKGlmcCwgZmFsc2UpO1xuMTI3NTpcdFxuMTI3NjpcdFx0aWYgKCghcmV0KSBcdTAwMjZcdTAwMjYgKGRydnItXHUwMDNlc2V0dGluZ3MtXHUwMDNlcDJwX2VuYWJsZSkpIHtcbjEyNzc6XHRcdFx0cDJwX2lmcCA9IGRydnItXHUwMDNlaWZsaXN0WzFdO1xuMTI3ODpcdFx0XHRpZiAocDJwX2lmcClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDY6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAzNDUKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiA0ODYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBCcm9hZGNvbSBXaUZpIERyaXZlciBJbml0aWFsaXphdGlvbiBhbmQgRnV6emluZyBMYW5kc2NhcGUqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGlzIGBicmNtZm1hY2AgZHJpdmVyIGFuZCBob3cgc3l6a2FsbGVyIGludGVyYWN0cyB3aXRoIGl0LiBGaXJzdCwgSSBuZWVkIHRvIHJlbWVtYmVyIHRoYXQgYGJyY21mX2J1c19wcmVpbml0YCBhbmQgYGJyY21mX2NfcHJlaW5pdF9kY21kc2AgaGFuZGxlIHRoZSBpbml0aWFsIGhhcmR3YXJlIGludGVyYWN0aW9ucy4gSWYgdGhlc2UgZmFpbCwgYGJyY21mX2NmZzgwMjExX2F0dGFjaGAgaXNuJiMzOTt0IGV2ZW4gY2FsbGVkLiBUaGUgcXVlc3Rpb24gaXMsIGNhbiBzeXprYWxsZXImIzM5O3MgdmhjaSBtb2NrIHRoZXNlIFVTQiByZXNwb25zZXMgdG8gdHJpZ2dlciB0aGVzZSBmdW5jdGlvbnM/IFllcywgaXQgY2FuLCBwb3RlbnRpYWxseSwgc2luY2UgdmhjaSBpcyBkZXNpZ25lZCB0byBkbyBleGFjdGx5IHRoYXQuIFRoZSBjYXRjaCBpcyB0aGF0IGBicmNtZm1hY2AgaXMgYSBjb21wbGV4IEZ1bGxNQUMgZHJpdmVyIHdoaWNoIG1lYW5zIGl0IHRhbGtzIGV4dGVuc2l2ZWx5IHdpdGggdGhlIGZpcm13YXJlIGFuZCBleHBlY3RzIHNwZWNpZmljIHJlc3BvbnNlcy4gVGhpcyBtYWtlcyBtZSB3b25kZXIgYWJvdXQgaXRzIHByYWN0aWNhbCBmdXp6YWJpbGl0eS4KCkJ1dCB0aGVuLCBJIHJlY2FsbCBzZWVpbmcgdGhhdCBzeXprYWxsZXIgKmhhcyogZm91bmQgYnVncyBpbiBgYnJjbWZtYWNgIHZpYSBVU0IhIEFoLCB3YWl0LCB0aGUgY29tbWl0IG1lc3NhZ2U6ICYjMzQ7c3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3JiMzNDsuIFRoYXQmIzM5O3MgYSBzdHJvbmcgaW5kaWNhdGlvbiBzeXprYWxsZXIgaGFzIGZvdW5kIGEgcmVhbCBidWcgb3IgaXMgYWN0aXZlbHkgZnV6emluZyB0aGlzIGRyaXZlci4KCkxldCYjMzk7cyBkaXZlIGludG8gdGhlIHBhdGNoIGl0c2VsZi4gSXQgbW9kaWZpZXMgYGJyY21mX2N5d19leHRlcm5hbF9hdXRoYCBpbiBgZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmNgLiBUaGUgY29kZSBjaGFuZ2UgaXMgaW5pdGlhbGl6aW5nIGBhdXRoX3N0YXR1c2Agc3RydWN0IGFuZCBhZGRpbmcgUE1LSUQgc3VwcG9ydCB3aGljaCBzdWdnZXN0cyBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZSB3YXMgZml4ZWQuIFRoZSBwYXRjaCBpbml0aWFsaXplcyBhIHN0cnVjdCBhbmQgY29waWVzIG1lbW9yeSwgc28gaXQmIzM5O3MgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYXMgZXhwZWN0ZWQuCgpJIGhhdmUgdG8gd29uZGVyLCBpcyB0aGlzIHJlYWNoYWJsZT8gSXQgbG9va3MgbGlrZSBpdCwgYmVjYXVzZSBpdCYjMzk7cyB0cmlnZ2VyZWQgdmlhIHRoZSBgTkw4MDIxMV9DTURfRVhURVJOQUxfQVVUSGAgbmV0bGluayBjb21tYW5kIHRvIHRoZSBgYnJjbWZtYWNgIGRyaXZlci4gSG1tLCBob2xkIG9uLi4uIHRoZSBwYXRjaCBpcyBpbiBgYnJjbWZfY3l3X2V4dGVybmFsX2F1dGhgLiBOb3cgSSBoYXZlIHRvIGNoZWNrIGlmIGBCUkNNRk1BQ19VU0JgIGlzIHN1ZmZpY2llbnQuIElzIGBjeXdgIGJ1aWx0IGJ5IGRlZmF1bHQ/CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA2OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2N5dyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvTWFrZWZpbGU9NTU9b2JqLW0gJiM0Mzs9IHdjYy9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9NYWtlZmlsZTo1NjpvYmotbSAmIzQzOz0gY3l3L1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL01ha2VmaWxlLTU3LW9iai1tICYjNDM7PSBiY2EvXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL01ha2VmaWxlPTU5PWJyY21mbWFjLSQoQ09ORklHX0JSQ01GTUFDKSAmIzQzOz0gd2NjL2NvcmUub1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL01ha2VmaWxlOjYwOmJyY21mbWFjLSQoQ09ORklHX0JSQ01GTUFDKSAmIzQzOz0gY3l3L2NvcmUub1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL01ha2VmaWxlLTYxLWJyY21mbWFjLSQoQ09ORklHX0JSQ01GTUFDKSAmIzQzOz0gYmNhL2NvcmUub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNjo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTU4MwoJCQkJCQkJb3V0cHV0OiA0OQoJCQkJCQkJdGhvdWdodHM6IDEwMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBMaW5lIG9mIFJlYXNvbmluZyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCBgY3l3L2NvcmUub2AgKmRvZXMqIGdldCBidWlsdCB3aGVuIGBDT05GSUdfQlJDTUZNQUNgIGlzIHNldC4gVGhhdCBtZWFucyBpZiBJIG5lZWQgdGhhdCBtb2R1bGUsIEkmIzM5O20gZGVmaW5pdGVseSBnb2luZyB0byByZXF1aXJlIGBCUkNNRk1BQ2AuIEkmIzM5O2xsIGFsc28gd2FudCBgQlJDTUZNQUNfVVNCYCBzaW5jZSB0aGF0JiMzOTtzIGxpa2VseSB0aGUgc3BlY2lmaWMgVVNCIHZhcmlhbnQgSSYjMzk7bSBkZWFsaW5nIHdpdGguIE5vdywgb2YgY291cnNlLCBJIGNhbiYjMzk7dCBmb3JnZXQgYWJvdXQgYENGRzgwMjExYCBhbmQgYE1BQzgwMjExYCwgZXZlbiB0aG91Z2ggYGJyY21mbWFjYCBpcyBhIEZ1bGxNQUMgaW1wbGVtZW50YXRpb247IGl0IHN0aWxsIHJlbGllcyBvbiBgQ0ZHODAyMTFgIGFzIGl0cyBjb25maWd1cmF0aW9uIGludGVyZmFjZS4gVGltZSB0byBkaWcgYSBiaXQgZGVlcGVyIGFuZCBzZWUgd2hhdCBkZXBlbmRlbmNpZXMgYEJSQ01GTUFDYCBpdHNlbGYgaGFzLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nIGNydWNpYWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA2OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCUkNNRk1BQyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnOjE6Y29uZmlnIEJSQ01GTUFDXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZy0yLVx0dHJpc3RhdGUgXCYjMzQ7QnJvYWRjb20gRnVsbE1BQyBXTEFOIGRyaXZlclwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnLTEwLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWc6MTE6Y29uZmlnIEJSQ01GTUFDX1BST1RPX0JDRENcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnLTEyLVx0Ym9vbFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWctMTMtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZzoxNDpjb25maWcgQlJDTUZNQUNfUFJPVE9fTVNHQlVGXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZy0xNS1cdGJvb2xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnLTE2LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWc6MTc6Y29uZmlnIEJSQ01GTUFDX1NESU9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnLTE4LVx0Ym9vbCBcJiMzNDtTRElPIGJ1cyBpbnRlcmZhY2Ugc3VwcG9ydCBmb3IgRnVsbE1BQyBkcml2ZXJcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZy0yOC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnOjI5OmNvbmZpZyBCUkNNRk1BQ19VU0JcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnLTMwLVx0Ym9vbCBcJiMzNDtVU0IgYnVzIGludGVyZmFjZSBzdXBwb3J0IGZvciBGdWxsTUFDIGRyaXZlclwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnLTM5LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWc6NDA6Y29uZmlnIEJSQ01GTUFDX1BDSUVcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnLTQxLVx0Ym9vbCBcJiMzNDtQQ0lFIGJ1cyBpbnRlcmZhY2Ugc3VwcG9ydCBmb3IgRnVsbE1BQyBkcml2ZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDY6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI1MjgKCQkJCQkJCW91dHB1dDogNTAKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGl0OgoKKipFeGFtaW5pbmcgdGhlIEJSQ01GTUFDIEtjb25maWcgZm9yIERlcGVuZGVuY2llcyoqCgpSaWdodCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBmb3IgdGhpcyBzcGVjaWZpYyBCcm9hZGNvbSBXaS1GaSBkcml2ZXIsIHRoZSBgYnJjbWZtYWNgIG1vZHVsZSwgd2l0aGluIHRoZSBicm9hZGVyIGtlcm5lbCBjb25maWd1cmF0aW9uLiBUaGUgYEtjb25maWdgIGZpbGUgaXMgdGhlIHN0YW5kYXJkIHBsYWNlIHRvIHN0YXJ0LiBJdCBjb250YWlucyBhbGwgdGhlIG5lY2Vzc2FyeSBkZXBlbmRlbmN5IGRlZmluaXRpb25zLCBzbyBJIGNhbiBzZWUgd2hhdCBvdGhlciBrZXJuZWwgZmVhdHVyZXMgb3IgbW9kdWxlcyAqbmVlZCogdG8gYmUgZW5hYmxlZCwgb3IgKmNhbiogYmUgZW5hYmxlZCBhbG9uZ3NpZGUgdGhpcyBkcml2ZXIuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBwYXJzZSB0aGF0IGBLY29uZmlnYCB0byBidWlsZCBhIG1lbnRhbCBtYXAgb2YgaXRzIHN1cHBvcnQsIHVuZGVyc3RhbmQgaXRzIGNvbmRpdGlvbnMsIGFuZCBjb25zaWRlciBhbnkgcG90ZW50aWFsIGNvbmZsaWN0cyBvciBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRoaXMgZHJpdmVyIGZpdHMgaW50byB0aGUgbGFyZ2VyIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA2OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHRjb25maWcgQlJDTUZNQUNcbiAgIDI6XHRcdHRyaXN0YXRlIFwmIzM0O0Jyb2FkY29tIEZ1bGxNQUMgV0xBTiBkcml2ZXJcJiMzNDtcbiAgIDM6XHRcdGRlcGVuZHMgb24gQ0ZHODAyMTFcbiAgIDQ6XHRcdHNlbGVjdCBCUkNNVVRJTFxuICAgNTpcdFx0aGVscFxuICAgNjpcdFx0ICBUaGlzIG1vZHVsZSBhZGRzIHN1cHBvcnQgZm9yIHdpcmVsZXNzIGFkYXB0ZXJzIGJhc2VkIG9uIEJyb2FkY29tXG4gICA3Olx0XHQgIEZ1bGxNQUMgY2hpcHNldHMuIEl0IGhhcyB0byB3b3JrIHdpdGggYXQgbGVhc3Qgb25lIG9mIHRoZSBidXNcbiAgIDg6XHRcdCAgaW50ZXJmYWNlIHN1cHBvcnQuIElmIHlvdSBjaG9vc2UgdG8gYnVpbGQgYSBtb2R1bGUsIGl0JiMzOTtsbCBiZSBjYWxsZWRcbiAgIDk6XHRcdCAgYnJjbWZtYWMua28uXG4gIDEwOlx0XG4gIDExOlx0Y29uZmlnIEJSQ01GTUFDX1BST1RPX0JDRENcbiAgMTI6XHRcdGJvb2xcbiAgMTM6XHRcbiAgMTQ6XHRjb25maWcgQlJDTUZNQUNfUFJPVE9fTVNHQlVGXG4gIDE1Olx0XHRib29sXG4gIDE2Olx0XG4gIDE3Olx0Y29uZmlnIEJSQ01GTUFDX1NESU9cbiAgMTg6XHRcdGJvb2wgXCYjMzQ7U0RJTyBidXMgaW50ZXJmYWNlIHN1cHBvcnQgZm9yIEZ1bGxNQUMgZHJpdmVyXCYjMzQ7XG4gIDE5Olx0XHRkZXBlbmRzIG9uIChNTUMgPSB5IHx8IE1NQyA9IEJSQ01GTUFDKVxuICAyMDpcdFx0ZGVwZW5kcyBvbiBCUkNNRk1BQ1xuICAyMTpcdFx0c2VsZWN0IEJSQ01GTUFDX1BST1RPX0JDRENcbiAgMjI6XHRcdHNlbGVjdCBGV19MT0FERVJcbiAgMjM6XHRcdGRlZmF1bHQgeVxuICAyNDpcdFx0aGVscFxuICAyNTpcdFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBTRElPIGJ1cyBpbnRlcmZhY2Ugc3VwcG9ydCBmb3IgQnJvYWRjb21cbiAgMjY6XHRcdCAgSUVFRTgwMi4xMW4gZW1iZWRkZWQgRnVsbE1BQyBXTEFOIGRyaXZlci4gU2F5IFkgaWYgeW91IHdhbnQgdG9cbiAgMjc6XHRcdCAgdXNlIHRoZSBkcml2ZXIgZm9yIGEgU0RJTyB3aXJlbGVzcyBjYXJkLlxuICAyODpcdFxuICAyOTpcdGNvbmZpZyBCUkNNRk1BQ19VU0JcbiAgMzA6XHRcdGJvb2wgXCYjMzQ7VVNCIGJ1cyBpbnRlcmZhY2Ugc3VwcG9ydCBmb3IgRnVsbE1BQyBkcml2ZXJcJiMzNDtcbiAgMzE6XHRcdGRlcGVuZHMgb24gKFVTQiA9IHkgfHwgVVNCID0gQlJDTUZNQUMpXG4gIDMyOlx0XHRkZXBlbmRzIG9uIEJSQ01GTUFDXG4gIDMzOlx0XHRzZWxlY3QgQlJDTUZNQUNfUFJPVE9fQkNEQ1xuICAzNDpcdFx0c2VsZWN0IEZXX0xPQURFUlxuICAzNTpcdFx0aGVscFxuICAzNjpcdFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBVU0IgYnVzIGludGVyZmFjZSBzdXBwb3J0IGZvciBCcm9hZGNvbVxuICAzNzpcdFx0ICBJRUVFODAyLjExbiBlbWJlZGRlZCBGdWxsTUFDIFdMQU4gZHJpdmVyLiBTYXkgWSBpZiB5b3Ugd2FudCB0b1xuICAzODpcdFx0ICB1c2UgdGhlIGRyaXZlciBmb3IgYW4gVVNCIHdpcmVsZXNzIGNhcmQuXG4gIDM5Olx0XG4gIDQwOlx0Y29uZmlnIEJSQ01GTUFDX1BDSUVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDY6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMzNDUKCQkJCQkJCW91dHB1dDogNDgKCQkJCQkJCXRob3VnaHRzOiA1MDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIEJSQ01GTUFDIERyaXZlciBhbmQgUG90ZW50aWFsIEV4cGxvaXRhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgYEJSQ01GTUFDYCBzaXR1YXRpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBCUkNNRk1BQ2AgcmVsaWVzIGhlYXZpbHkgb24gYENGRzgwMjExYCwgYW5kIGBCUkNNRk1BQ19VU0JgIGJ1aWxkcyBvbiB0aGF0IGFuZCB0aGUgYFVTQmAgc3Vic3lzdGVtIGFzIHdlbGwuIFRoZXJlZm9yZSwgdG8gZW5zdXJlIHByb3BlciBmdW5jdGlvbmFsaXR5LCBJIHNob3VsZCBlbmFibGUgYEJSQ01GTUFDYCwgYEJSQ01GTUFDX1VTQmAsIGBDRkc4MDIxMWAsIGFuZCBgVVNCYCBpbiB0aGUgY29uZmlndXJhdGlvbi4gQWxzbywgdGhlIGZpcm13YXJlIGxvYWRpbmcgbWVjaGFuaXNtIGBGV19MT0FERVJgIGlzIHNlbGVjdGVkLCBvZiBjb3Vyc2UuCgpJIGJyaWVmbHkgY29uc2lkZXJlZCBpZiBhbnkgb3RoZXIgY29uZmlncyB3ZXJlIGNyaXRpY2FsLCBidXQgSSBkb24mIzM5O3Qgc2VlIGFueSBvdGhlciBpbW1lZGlhdGVseS4gV2hpbGUgYE1BQzgwMjExYCBpc24mIzM5O3Qgc3RyaWN0bHkgKnJlcXVpcmVkKiwgaXQmIzM5O3MgdXN1YWxseSBlbmFibGVkIHdpdGggYEJSQ01GTUFDYCwgc28gaXQmIzM5O3MgcHJvYmFibHkgYmVzdCBwcmFjdGljZSB0byBoYXZlIHRoYXQgb24uCgpNeSBhdHRlbnRpb24gaXMgbm93IHNxdWFyZWx5IG9uIGBicmNtZl9jeXdfZXh0ZXJuYWxfYXV0aGAuIEl0IHNlZW1zIHRoZSBwYXRjaCBpcyBjZW50ZXJlZCBvbiB0aGF0IHNwZWNpZmljIGZ1bmN0aW9uLiBJJiMzOTttIHdvbmRlcmluZyBpZiB0aGlzIGlzIHRoZSAqb25seSogZW50cnkgcG9pbnQgdGhlIHBhdGNoIG1vZGlmaWVzLiBZZXMsIGxvb2tzIGxpa2UgaXQmIzM5O3MgdGhlIG9ubHkgb25lLgoKTm93IEkgbmVlZCB0byBjb25maXJtIGlmIGBicmNtZl9jeXdfZXh0ZXJuYWxfYXV0aGAgaXMgYWN0dWFsbHkgcmVhY2hhYmxlLiBUaGFua2Z1bGx5LCBpdCYjMzk7cyByZWdpc3RlcmVkIHRocm91Z2ggdGhlIGRyaXZlciYjMzk7cyBvcGVyYXRpb25zIHN0cnVjdHVyZSBhcyBgZHJ2ci0mZ3Q7b3BzLSZndDtleHRlcm5hbF9hdXRoID0gYnJjbWZfY3l3X2V4dGVybmFsX2F1dGg7YCwgc28gdGhhdCYjMzk7cyBnb29kLiBGdXJ0aGVyLCB0aGUgYGNmZzgwMjExX29wc2AgYWxzbyBoYXMgYW4gYGV4dGVybmFsX2F1dGhgIHBvaW50ZXIuIFRoYXQmIzM5O3MgZXhjZWxsZW50ISBUaGUgZnVuY3Rpb24gaXMgcmVhY2hlZCB3aGVuIHRoZSB1c2VyIHNwYWNlIHNlbmRzIHRoZSBgTkw4MDIxMV9DTURfRVhURVJOQUxfQVVUSGAgY29tbWFuZCwgYW5kIGBjZmc4MDIxMWAgY2FsbHMgYHJkZXYtJmd0O29wcy0mZ3Q7ZXh0ZXJuYWxfYXV0aGAuIFRoaXMgbWVhbnMgdGhhdCBpdCAqaXMqIGluZGVlZCByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBuZXRsaW5rLiBQZXJmZWN0LgoKVGhlIG9ubHkgcHJlcmVxdWlzaXRlIGlzIHRoYXQgdGhlIGBicmNtZm1hY2AgZGV2aWNlIG11c3QgYmUgcHJvYmVkIGFuZCByZWdpc3RlcmVkIHdpdGggYGNmZzgwMjExYC4gVGhhdCBzaG91bGQgYmUgbm8gcHJvYmxlbS4gU3l6a2FsbGVyIGlzIGFibGUgdG8gZW11bGF0ZSBVU0IgZGV2aWNlcywgc28gaXQgY2FuIHRyaWdnZXIgdGhlIHByb2JlIG9mIGBicmNtZm1hY2AgdmlhIFVTQi4gSG93ZXZlciwgdGhlIGBicmNtZm1hY2AgZHJpdmVyLCBpbiB0dXJuLCBuZWVkcyBmaXJtd2FyZSB0byBjb21wbGV0ZSBpdHMgcHJvYmUgYW5kIHJlZ2lzdHJhdGlvbi4KCk5vdyB0aGUgbWlsbGlvbi1kb2xsYXIgcXVlc3Rpb246IERvZXMgc3l6a2FsbGVyIHByb3ZpZGUgZmlybXdhcmUgZm9yIGBicmNtZm1hY2A/IEl0ICptaWdodCouIEkga25vdyB0aGF0IFN5emthbGxlciYjMzk7cyBgc3l6LWV4ZWN1dG9yYCBjYW4gaW50ZXJjZXB0IGZpcm13YXJlIHJlcXVlc3RzIGlmIGBDT05GSUdfRldfTE9BREVSX1VTRVJfSEVMUEVSYCBpcyBlbmFibGVkLCBhbmQgY291bGQgcHJvdmlkZSBkdW1teSBmaXJtd2FyZS4gQnV0LCBoZXJlJiMzOTtzIHRoZSBjYXRjaCAtIGBicmNtZm1hY2AgdmFsaWRhdGVzIHRoZSBmaXJtd2FyZS4KCmBgYGMKCXJldCA9IGNoZWNrX2ZpbGUoZnctJmd0O2RhdGEpOwoJaWYgKHJldCAmbHQ7IDApIHsKCQlicmNtZl9lcnIoJiMzNDtpbnZhbGlkIGZpcm13YXJlXG4mIzM0Oyk7CgkJcmVsZWFzZV9maXJtd2FyZShmdyk7CgkJZ290byBlcnJvcjsKCX0KYGBgCgpTbyBJIG5lZWQgdG8gY2hlY2sgd2hhdCBgY2hlY2tfZmlsZWAgYWN0dWFsbHkgKmRvZXMqLiBUaGF0JiMzOTtzIHRoZSBuZXh0IGNyaXRpY2FsIHN0ZXAgdG8gc2VlIGlmIHRoaXMgaXMgZXhwbG9pdGFibGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA2OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NoZWNrX2ZpbGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jPTEwNjI9c3RhdGljIHZvaWQgYnJjbWZfdXNiX2RldGFjaChzdHJ1Y3QgYnJjbWZfdXNiZGV2X2luZm8gKmRldmluZm8pXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTEwODAtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM6MTA4MTpzdGF0aWMgaW50IGNoZWNrX2ZpbGUoY29uc3QgdTggKmhlYWRlcnMpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtMTA4Mi17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jPTExNzY9c3RhdGljIHZvaWQgYnJjbWZfdXNiX3Byb2JlX3BoYXNlMihzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCByZXQsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTExOTAtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM6MTE5MTpcdHJldCA9IGNoZWNrX2ZpbGUoZnctXHUwMDNlZGF0YSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtMTE5Mi1cdGlmIChyZXQgXHUwMDNjIDApIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDY6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ5MTUKCQkJCQkJCW91dHB1dDogNTQKCQkJCQkJCXRob3VnaHRzOiA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqQW5hbHl6aW5nIHRoZSBgY2hlY2tfZmlsZWAgRnVuY3Rpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBjaGVja19maWxlYCBmdW5jdGlvbi4gTXkgZmlyc3QgaW5zdGluY3QsIGFzIGFsd2F5cywgaXMgdG8gdW5kZXJzdGFuZCBpdHMgc2NvcGUuIElzIHRoaXMgYSB1dGlsaXR5IGZ1bmN0aW9uIHdpdGhpbiBhIGxhcmdlciBtb2R1bGUsIG9yIGlzIGl0IGEgc3RhbmRhbG9uZSBzY3JpcHQ/IFRoZSBjb250ZXh0IGlzIGNydWNpYWwgZm9yIGFudGljaXBhdGluZyBpdHMgcHVycG9zZS4gSSYjMzk7bSBpbW1lZGlhdGVseSB0aGlua2luZyBhYm91dCBwb3RlbnRpYWwgZWRnZSBjYXNlcy4gV2hhdCBraW5kIG9mIGZpbGUgdHlwZXMgYXJlIHdlIGRlYWxpbmcgd2l0aD8gSXMgdGhlcmUgYSBuZWVkIGZvciBhbnkga2luZCBvZiBmaWxlIHNpemUgY2hlY2tpbmc/IEFyZSB0aGVyZSBhbnkgc2VjdXJpdHkgY29uc2lkZXJhdGlvbnMgSSBzaG91bGQgYmVhciBpbiBtaW5kPyBDb3VsZCB0aGlzIGJlIHZ1bG5lcmFibGUgdG8gYSBwYXRoIHRyYXZlcnNhbCBhdHRhY2ssIG9yIHNvbWV0aGluZyBzaW1pbGFyPyBJJiMzOTtsbCBwcm9iYWJseSBzdGFydCBzY2FubmluZyBmb3IgY29tbW9uIHZ1bG5lcmFiaWxpdGllcy4gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgYXJlYXMgZm9yIGJ1ZmZlciBvdmVyZmxvd3M/IElzIGl0IGhhbmRsaW5nIGZpbGUgcGVybWlzc2lvbnMgcHJvcGVybHk/IFdoYXQga2luZCBvZiBlcnJvcnMgZG9lcyBpdCBoYW5kbGU/IEFyZSB0aGUgZXJyb3IgbWVzc2FnZXMgY2xlYXIgYW5kIGhlbHBmdWw/IEkgbmVlZCB0byBsb29rIGZvciBhbnkgaGlkZGVuIGRlcGVuZGVuY2llcy4gSXMgaXQgdXNpbmcgYW55IGV4dGVybmFsIGxpYnJhcmllcz8gSWYgc28sIGFyZSB0aGV5IGJlaW5nIGhhbmRsZWQgY29ycmVjdGx5PyBBbmQgZmluYWxseSwgb2YgY291cnNlLCBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgZm9yIGFueSBjb25jdXJyZW5jeSBpc3N1ZXMgaWYgSSYjMzk7bSBhc3N1bWluZyBpdCBtaWdodCBiZSB1c2VkIGluIGEgbXVsdGl0aHJlYWRlZCBlbnZpcm9ubWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDY6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDgxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwODE6XHRzdGF0aWMgaW50IGNoZWNrX2ZpbGUoY29uc3QgdTggKmhlYWRlcnMpXG4xMDgyOlx0e1xuMTA4MzpcdFx0c3RydWN0IHRyeF9oZWFkZXJfbGUgKnRyeDtcbjEwODQ6XHRcdGludCBhY3R1YWxfbGVuID0gLTE7XG4xMDg1Olx0XG4xMDg2Olx0XHRicmNtZl9kYmcoVVNCLCBcJiMzNDtFbnRlclxcblwmIzM0Oyk7XG4xMDg3Olx0XHQvKiBFeHRyYWN0IHRyeCBoZWFkZXIgKi9cbjEwODg6XHRcdHRyeCA9IChzdHJ1Y3QgdHJ4X2hlYWRlcl9sZSAqKSBoZWFkZXJzO1xuMTA4OTpcdFx0aWYgKHRyeC1cdTAwM2VtYWdpYyAhPSBjcHVfdG9fbGUzMihUUlhfTUFHSUMpKVxuMTA5MDpcdFx0XHRyZXR1cm4gLTE7XG4xMDkxOlx0XG4xMDkyOlx0XHRoZWFkZXJzICYjNDM7PSBzaXplb2Yoc3RydWN0IHRyeF9oZWFkZXJfbGUpO1xuMTA5MzpcdFxuMTA5NDpcdFx0aWYgKGxlMzJfdG9fY3B1KHRyeC1cdTAwM2VmbGFnX3ZlcnNpb24pIFx1MDAyNiBUUlhfVU5DT01QX0lNQUdFKSB7XG4xMDk1Olx0XHRcdGFjdHVhbF9sZW4gPSBsZTMyX3RvX2NwdSh0cngtXHUwMDNlb2Zmc2V0c1tUUlhfT0ZGU0VUU19ETEZXTEVOX0lEWF0pO1xuMTA5NjpcdFx0XHRyZXR1cm4gYWN0dWFsX2xlbiAmIzQzOyBzaXplb2Yoc3RydWN0IHRyeF9oZWFkZXJfbGUpO1xuMTA5NzpcdFx0fVxuMTA5ODpcdFx0cmV0dXJuIC0xO1xuMTA5OTpcdH1cbjExMDA6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDY6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU1NDgKCQkJCQkJCW91dHB1dDogNTEKCQkJCQkJCXRob3VnaHRzOiA2NjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTeXprYWxsZXIgRmlybXdhcmUgRnV6emluZyBTY2VuYXJpbyoqCgpPa2F5LCBzbyBJJiMzOTttIHRyeWluZyB0byBmaWd1cmUgb3V0IGhvdyBzeXprYWxsZXIgaXMgaGl0dGluZyB0aGlzIGBicmNtZl9jeXdfZXh0ZXJuYWxfYXV0aGAgY29kZSBwYXRoLiBUaGUgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgaXQmIzM5O3MgYSBmaXJtd2FyZSBidWcsIHNvIHRoZSBmaXJtd2FyZSBuZWVkcyB0byBzdGFydCB3aXRoIGBUUlhfTUFHSUNgIGFuZCB0aGUgYFRSWF9VTkNPTVBfSU1BR0VgIGZsYWcuIEJ1dCBzeXprYWxsZXImIzM5O3MgZmlybXdhcmUgZnV6emluZyBzZXR1cCwgb3IgcG90ZW50aWFsbHkgaXRzIGhlbHBlcnMsIG1pZ2h0IG5vdCByZWNvZ25pemUgdGhpcyBtYWdpYyBzaWduYXR1cmUuIEkga25vdyBzeXprYWxsZXIgaGFzIHNvbWUgaW1hZ2UgbW91bnRpbmcgY2FwYWJpbGl0aWVzIChgc3l6X21vdW50X2ltYWdlYCksIGJ1dCBpdCBzZWVtcyB0byBwcm92aWRlIG1vc3RseSByYW5kb20gb3IgZW1wdHkgZGF0YSBmb3IgZmlybXdhcmUsIHdoaWNoIG1ha2VzIGhpdHRpbmcgdGhlIG1hZ2ljIGhlYWRlciBpbmNyZWRpYmx5IHVubGlrZWx5LgoKSG93ZXZlciwgSSBzZWUgYSBjb21taXQgbWVzc2FnZSAmIzM0O3N5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldyYjMzQ7LiBUaGlzIHN1Z2dlc3RzIHN5emthbGxlciBmb3VuZCBhIGJ1ZyBoZXJlLCBvciBpcyBhY3RpdmVseSBmdXp6aW5nIHRoaXMgYXJlYS4gSXQmIzM5O3MgdXNpbmcgYHN5el9nZW5ldGxpbmtfZ2V0X2ZhbWlseWAgYW5kIGBzeXpfODAyMTFfLi4uYCBzeXNjYWxscywgd2hpY2ggcG9pbnRzIHRvd2FyZHMgdGhlIHBvdGVudGlhbCBvZiBoaXR0aW5nIHRoaXMgZnJvbSBhIGtlcm5lbCBzcGFjZSwgb3IgYSB1c2VyIHNwYWNlIHRoYXQgY2FuIGFjY2VzcyB0aGlzIGNvZGUgdmlhIHRob3NlIGludGVyZmFjZXMuCgpJIGNvbnNpZGVyZWQgYG1hYzgwMjExX2h3c2ltYCwgYnV0IHF1aWNrbHkgZGlzbWlzc2VkIGl0IGJlY2F1c2UgaXQmIzM5O3MgYSBkaWZmZXJlbnQgZHJpdmVyLiBJcyBgYnJjbWZfY3l3X2V4dGVybmFsX2F1dGhgIHJlYWNoYWJsZSB0aHJvdWdoIG90aGVyIGRyaXZlcnM/IE5vLCBpdCYjMzk7cyBmaXJtbHkgd2l0aGluIGBicmNtZm1hY2AuCgpOb3csIHRoZSBxdWVzdGlvbiBpcyBob3cgc3l6a2FsbGVyIGlzIHByb3ZpZGluZyB0aGUgZmlybXdhcmUuIERvZXMgaXQgaGF2ZSBhIHNwZWNpZmljIGRlc2NyaXB0aW9uIGZvciBgYnJjbWZtYWNgIGZpcm13YXJlLCBvciBpcyB0aGlzIHBhdGNoIGJlaW5nIHRlc3RlZCBhZnRlciBhbm90aGVyIGZ1enplciBmb3VuZCB0aGUgYnVnPwoKVGhlIGNvbW1pdCBtZXNzYWdlICYjMzQ7c3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3JiMzNDsgaXMgc3RhbmRhcmQgZm9yIHN5emJvdCYjMzk7cyBwYXRjaCB0ZXN0aW5nLCBtZWFuaW5nIGEgdXNlciByZXF1ZXN0ZWQgdGhhdCBzeXpib3QgdGVzdCBhIHBhdGNoIHRvIHJlcHJvZHVjZSBhIGJ1ZyByZXBvcnRlZCBieSBzeXpib3QuIElmIHN5emJvdCBmb3VuZCBhIGJ1ZyBpbiB0aGlzIGZ1bmN0aW9uLCBpdCAqY2FuKiByZWFjaCBpdC4KCkhvdz8gQWhhISBTeXprYWxsZXImIzM5O3Mgcm9vdCBmaWxlIHN5c3RlbSBpbWFnZXMgKGxpa2UgYGJ1bGxzZXllLmltZ2ApIHVzdWFsbHkgY29udGFpbiB0aGUgYGxpbnV4LWZpcm13YXJlYCBwYWNrYWdlLiBUaGlzIGluY2x1ZGVzIHRoZSBCcm9hZGNvbSBmaXJtd2FyZXMgKGBicmNtZm1hYyotc2Rpby5iaW5gLCBgYnJjbWZtYWMqLXVzYi5iaW5gLCBldGMuKS4gSWYgdGhlIGZpcm13YXJlIGlzIHByZXNlbnQgaW4gdGhlIHJvb3RmcywgYHJlcXVlc3RfZmlybXdhcmVgIHdpbGwgc3VjY2VlZCEgQW5kIHN5emthbGxlciBlbXVsYXRlcyBVU0IgZGV2aWNlcywgc28gaXQmIzM5O3MgcHJvYmFibHkgZW11bGF0aW5nIGEgQnJvYWRjb20gVVNCIFdpLUZpIGRvbmdsZS4KCklmIGl0IGVtdWxhdGVzIHRoZSBVU0IgZGV2aWNlLCBpdCByZWNlaXZlcyB0aGUgZmlybXdhcmUgZG93bmxvYWQgY29tbWFuZHMuIElmIHRoZSBmaXJtd2FyZSBpcyByZWFsLCBmcm9tIGBsaW51eC1maXJtd2FyZWAsIGBjaGVja19maWxlYCB3aWxsIHBhc3MgYmVjYXVzZSBpdCYjMzk7cyBhIHZhbGlkIGZpcm13YXJlIGZpbGUuIFRoZW4gYGJyY21mX3VzYl9md19kb3dubG9hZGAgd2lsbCBzZW5kIHRoZSBmaXJtd2FyZSB0byB0aGUgZW11bGF0ZWQgVVNCIGRldmljZS4gVGhlIGVtdWxhdGVkIFVTQiBkZXZpY2UgKHZoY2kpIGp1c3QgbmVlZHMgdG8gYWNjZXB0IHRoZSBVUkJzLiBUaGVuIGBicmNtZl9hdHRhY2hgIGlzIGNhbGxlZC4KClRoZSBrZXkgaXMgYGJyY21mX2J1c19zdGFydGVkYC4gSXQgc2VuZHMgY29tbWFuZHMgdG8gdGhlIGRvbmdsZSAoYGJyY21mX2NfcHJlaW5pdF9kY21kc2ApLiBJZiB0aGUgZW11bGF0ZWQgVVNCIGRldmljZSBkb2VzbiYjMzk7dCByZXNwb25kIGNvcnJlY3RseSwgYGJyY21mX2J1c19zdGFydGVkYCBtaWdodCBmYWlsLiBUaGlzIGlzIHRoZSBsaWtlbHkgYXJlYSBmb3IgYSBjcmFzaCB0byBvY2N1ci4gSSBzaG91bGQgYWxzbyBjaGVjayBgYnJjbWZfaWdub3JlX3Byb2JlX2ZhaWxgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNjo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticmNtZl9pZ25vcmVfcHJvYmVfZmFpbCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvbW1vbi5jPTY4PU1PRFVMRV9QQVJNX0RFU0MoaWFwcCwgXCYjMzQ7RW5hYmxlIHBhcnRpYWwgc3VwcG9ydCBmb3IgdGhlIG9ic29sZXRlZCBJbnRlci1BY2Nlc3MgUG9pbnQgUHJvdG9jb2xcJiMzNDspO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb21tb24uYy03MS0vKiBhbHdheXMgc3VjY2VlZCBicmNtZl9idXNfc3RhcnRlZCgpICovXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29tbW9uLmM6NzI6c3RhdGljIGludCBicmNtZl9pZ25vcmVfcHJvYmVfZmFpbDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb21tb24uYzo3Mzptb2R1bGVfcGFyYW1fbmFtZWQoaWdub3JlX3Byb2JlX2ZhaWwsIGJyY21mX2lnbm9yZV9wcm9iZV9mYWlsLCBpbnQsIDApO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvbW1vbi5jLTc0LU1PRFVMRV9QQVJNX0RFU0MoaWdub3JlX3Byb2JlX2ZhaWwsIFwmIzM0O2Fsd2F5cyBzdWNjZWVkIHByb2JlIGZvciBkZWJ1Z2dpbmdcJiMzNDspO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb21tb24uYz01MTI9c3RydWN0IGJyY21mX21wX2RldmljZSAqYnJjbWZfZ2V0X21vZHVsZV9wYXJhbShzdHJ1Y3QgZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvbW1vbi5jLTUzMy0jaWZkZWYgREVCVUdcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb21tb24uYzo1MzQ6XHRzZXR0aW5ncy1cdTAwM2VpZ25vcmVfcHJvYmVfZmFpbCA9ICEhYnJjbWZfaWdub3JlX3Byb2JlX2ZhaWw7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29tbW9uLmMtNTM1LSNlbmRpZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNjo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzM5MwoJCQkJCQkJb3V0cHV0OiA0NwoJCQkJCQkJdGhvdWdodHM6IDQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgYnJjbWZfaWdub3JlX3Byb2JlX2ZhaWwqKgoKUmlnaHQsICpicmNtZl9pZ25vcmVfcHJvYmVfZmFpbCouIFRoYXQmIzM5O3MgYSBjbGFzc2ljLiBTbywgaXQmIzM5O3MgYSBtb2R1bGUgcGFyYW1ldGVyIHRoYXQgYmFzaWNhbGx5IGZvcmNlcyBgYnJjbWZfYnVzX3N0YXJ0ZWRgIHRvICphbHdheXMqIHJldHVybiBzdWNjZXNzLiBJbnRlcmVzdGluZy4gV29uZGVyIHdoYXQgdGhlIGltcGxpY2F0aW9ucyBhcmUgaW4gcHJhY3RpY2U/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzaWRlLWVmZmVjdHMuCgpNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgdXNhZ2Ugb2YgYGlnbm9yZV9wcm9iZV9mYWlsYC4gV2hlcmUgZG9lcyB0aGF0IHZhbHVlIGFjdHVhbGx5IGdldCB1c2VkPyBMZXQmIzM5O3MgY2hlY2sgdGhlIGNvZGUgYW5kIHNlZSBleGFjdGx5IHdoYXQgaGFwcGVucyB3aGVuIHRoYXQgZmxhZyBpcyBzZXQsIGFuZCBob3cgaXQgaW1wYWN0cyB0aGUgb3ZlcmFsbCBpbml0aWFsaXphdGlvbiBmbG93LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgd2UgYXJlIG1hc2tpbmcgYSBwb3RlbnRpYWwgaGFyZHdhcmUgcHJvYmUgZmFpbHVyZSBhbmQgd2hhdCB0aGUgY29ycmVzcG9uZGluZyB0cmFkZS1vZmZzIGFyZS4gV2hhdCYjMzk7cyB0aGUgY29zdCBvZiB0aGlzPyBBcmUgd2UgaW50cm9kdWNpbmcgcmFjZSBjb25kaXRpb25zLCBvciBtYWtpbmcgaXQgaGFyZGVyIHRvIGRpYWdub3NlIHJlYWwgaGFyZHdhcmUgaXNzdWVzIGRvd24gdGhlIGxpbmU/IFRoaXMgY291bGQgYmUgbWFza2luZyBhIHJlYWwgcHJvYmxlbS4gVGltZSB0byBkaWcgaW4uLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDY6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aWdub3JlX3Byb2JlX2ZhaWwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb21tb24uYz02OD1NT0RVTEVfUEFSTV9ERVNDKGlhcHAsIFwmIzM0O0VuYWJsZSBwYXJ0aWFsIHN1cHBvcnQgZm9yIHRoZSBvYnNvbGV0ZWQgSW50ZXItQWNjZXNzIFBvaW50IFByb3RvY29sXCYjMzQ7KTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29tbW9uLmMtNzEtLyogYWx3YXlzIHN1Y2NlZWQgYnJjbWZfYnVzX3N0YXJ0ZWQoKSAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvbW1vbi5jOjcyOnN0YXRpYyBpbnQgYnJjbWZfaWdub3JlX3Byb2JlX2ZhaWw7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29tbW9uLmM6NzM6bW9kdWxlX3BhcmFtX25hbWVkKGlnbm9yZV9wcm9iZV9mYWlsLCBicmNtZl9pZ25vcmVfcHJvYmVfZmFpbCwgaW50LCAwKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb21tb24uYzo3NDpNT0RVTEVfUEFSTV9ERVNDKGlnbm9yZV9wcm9iZV9mYWlsLCBcJiMzNDthbHdheXMgc3VjY2VlZCBwcm9iZSBmb3IgZGVidWdnaW5nXCYjMzQ7KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb21tb24uYy03NS0jZW5kaWZcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29tbW9uLmM9NTEyPXN0cnVjdCBicmNtZl9tcF9kZXZpY2UgKmJyY21mX2dldF9tb2R1bGVfcGFyYW0oc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb21tb24uYy01MzMtI2lmZGVmIERFQlVHXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29tbW9uLmM6NTM0Olx0c2V0dGluZ3MtXHUwMDNlaWdub3JlX3Byb2JlX2ZhaWwgPSAhIWJyY21mX2lnbm9yZV9wcm9iZV9mYWlsO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvbW1vbi5jLTUzNS0jZW5kaWZcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29tbW9uLmg9MzE9ZXh0ZXJuIHN0cnVjdCBicmNtZl9tcF9nbG9iYWxfdCBicmNtZl9tcF9nbG9iYWw7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvbW1vbi5oLTM5LSAqIEByb2Ftb2ZmOiBGaXJtd2FyZSByb2FtaW5nIG9mZj9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb21tb24uaDo0MDogKiBAaWdub3JlX3Byb2JlX2ZhaWw6IElnbm9yZSBwcm9iZSBmYWlsdXJlLlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvbW1vbi5oLTQxLSAqIEB0cml2aWFsX2Njb2RlX21hcDogQXNzdW1lIGZpcm13YXJlIHVzZXMgSVNPMzE2NiBjb3VudHJ5IGNvZGVzIHdpdGggcmV2IDBcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29tbW9uLmg9NDU9c3RydWN0IGJyY21mX21wX2RldmljZSB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvbW1vbi5oLTUwLVx0Ym9vbFx0XHRpYXBwO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvbW1vbi5oOjUxOlx0Ym9vbFx0XHRpZ25vcmVfcHJvYmVfZmFpbDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb21tb24uaC01Mi1cdGJvb2xcdFx0dHJpdmlhbF9jY29kZV9tYXA7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuYz0xMjI5PXN0YXRpYyBpbnQgYnJjbWZfYnVzX3N0YXJ0ZWQoc3RydWN0IGJyY21mX3B1YiAqZHJ2ciwgc3RydWN0IGNmZzgwMjExX29wcyAqb3BzKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmMtMTMyMy1cdGRydnItXHUwMDNlaWZsaXN0WzFdID0gTlVMTDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmM6MTMyNDpcdGlmIChkcnZyLVx1MDAzZXNldHRpbmdzLVx1MDAzZWlnbm9yZV9wcm9iZV9mYWlsKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuYy0xMzI1LVx0XHRyZXQgPSAwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNjo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODcwNQoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDEwNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEZWJ1Z2dpbmcgYSBRdWlya3kgRHJpdmVyKioKClllcyEgSSYjMzk7dmUgZ290IGl0LiBJZiBgaWdub3JlX3Byb2JlX2ZhaWxgIGlzIGVuYWJsZWQsIGBicmNtZl9idXNfc3RhcnRlZGAgaXMgcHJvZ3JhbW1lZCB0byByZXR1cm4gMCwgZXZlbiB3aGVuIHRoZSBoYXJkd2FyZSBpbnRlcmFjdGlvbnMgYXJlIGZhaWxpbmcuIFRoYXQmIzM5O3MgYSBjbGV2ZXIgaGFjaywgZXhwbGljaXRseSBkZXNpZ25lZCBmb3IgZGVidWdnaW5nIGFuZCBmdXp6aW5nLCB3aGljaCBpcyBwZXJmZWN0IGZvciBteSBuZWVkcy4gVGhlIGdyZWF0IHRoaW5nIGFib3V0IFN5emthbGxlciBpcyB0aGF0IGl0IGFsbG93cyBtZSB0byBtb2RpZnkgdGhlIG1vZHVsZSBwYXJhbWV0ZXJzIGF0IHJ1bnRpbWUsIHdoaWNoIGlzIGNydWNpYWwgZm9yIGNvbnRyb2xsaW5nIHRoaXMgc29ydCBvZiBiZWhhdmlvci4gCgpXYWl0IGEgbWludXRlLCBJIHRoaW5rIGBpZ25vcmVfcHJvYmVfZmFpbGAgaXMgb25seSBhY2Nlc3NpYmxlIGlmIGAjaWZkZWYgREVCVUdgLiBUaGF0JiMzOTtzIG5vdCBpZGVhbCwgYnV0IGl0JiMzOTtzIHVuZGVyc3RhbmRhYmxlLiBPa2F5LCBzbyBpcyBgREVCVUdgIGRlZmluZWQ/IFRpbWUgdG8gY29uc3VsdCB0aGUgc291cmNlIGFuZCBmaW5kIHRoZSBkZWZpbml0aW9uLiBMZXQgbWUgZ28gY2hlY2sgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9NYWtlZmlsZWAgYW5kIHNlZSBpZiB0aGVyZSBhcmUgYW55IGNsdWVzIHRoZXJlLiBMZXQmIzM5O3Mgc2VlLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA2OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7REVCVUcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNjo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTA2OQoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZToKCioqRGl2aW5nIGludG8gdGhlIEJSQ01GbWFjIERlYnVnIENvbmZpZ3VyYXRpb24qKgoKUmlnaHQsIHRpbWUgdG8gdHJvdWJsZXNob290IHRoaXMgd2lyZWxlc3MgaXNzdWUuIE15IGZpcnN0IGluc3RpbmN0LCBnaXZlbiBteSBleHBlcmllbmNlIHdpdGggQnJvYWRjb20mIzM5O3MgV2lGaSBkcml2ZXJzIGFuZCB0aGUgYnJjbWZtYWMgc3Vic3lzdGVtIHNwZWNpZmljYWxseSwgaXMgdG8gY2hlY2sgdGhlIGRlYnVnIHNldHRpbmdzLiBXaGVyZSB3b3VsZCB0aG9zZSBiZSBkZWZpbmVkPyBBaCwgeWVzLCBgZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWdgLiBUaGF0JiMzOTtzIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IGZvciBhbnkgZGVidWdnaW5nIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHRoYXQgZHJpdmVyLiBUaGUgS2NvbmZpZyBmaWxlIGlzIHdoZXJlIGFsbCB0aGUgYnVpbGQtdGltZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBhcmUgZGVmaW5lZCwgc28gaWYgSSBuZWVkIHRvIGVuYWJsZSBzb21lIHZlcmJvc2Ugb3V0cHV0IG9yIHRyYWNpbmcsIHRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7bGwgZmluZCB0aGUgcmVsZXZhbnQgc2V0dGluZ3MsIGxpa2VseSB1bmRlciBhIGBERUJVR2Agb3Igc2ltaWxhciBzeW1ib2wuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBpbiB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDY6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtERUJVRyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDY6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjkzNDgKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC4KCioqSW52ZXN0aWdhdGluZyBhIFBvdGVudGlhbCBEZWZpbml0aW9uIENvbmZsaWN0KioKCkhtbSwgaG9sZCBvbiBhIHNlY29uZC4gSSYjMzk7dmUgZ290IGEgZmVlbGluZyBgREVCVUdgIG1pZ2h0IGJlIGdldHRpbmcgZGVmaW5lZCBjb25kaXRpb25hbGx5IGlmIHRoZSBgQ09ORklHX0JSQ01EQkdgIG9wdGlvbiBpcyBlbmFibGVkIHNvbWV3aGVyZS4gVGhhdCYjMzk7cyBzb21ldGhpbmcgSSBuZWVkIHRvIHZlcmlmeS4gTGV0IG1lIHF1aWNrbHkgY3Jvc3MtcmVmZXJlbmNlIHRoYXQuIFRoZSBtb3N0IGxpa2VseSBwbGFjZSBmb3IgdGhhdCB3b3VsZCBiZSBpbiB0aGUgQnJvYWRjb20gd2lyZWxlc3MgZHJpdmVyIGNvbmZpZ3VyYXRpb24uIFNvLCBJIG5lZWQgdG8gY2hlY2sgdGhlIGBkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvS2NvbmZpZ2AgZmlsZS4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgZGVmaW5pdGl2ZSBhbnN3ZXIuIEkmIzM5O2xsIGdldCB0aGF0IG9wZW4gcmlnaHQgYXdheSBhbmQgY29uZmlybSBpZiBteSBzdXNwaWNpb24gaXMgY29ycmVjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDY6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7QlJDTURCRyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL0tjb25maWc9Mjc9Y29uZmlnIEJSQ01fVFJBQ0lOR1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9LY29uZmlnLTM4LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL0tjb25maWc6Mzk6Y29uZmlnIEJSQ01EQkdcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9LY29uZmlnLTQwLVx0Ym9vbCBcJiMzNDtCcm9hZGNvbSBkcml2ZXIgZGVidWcgZnVuY3Rpb25zXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL01ha2VmaWxlLTgtIyBjb21tb24gZmxhZ3NcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9NYWtlZmlsZTo5OnN1YmRpci1jY2ZsYWdzLSQoQ09ORklHX0JSQ01EQkcpXHQmIzQzOz0gLURERUJVR1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL01ha2VmaWxlLTEwLVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9NYWtlZmlsZT00MT1icmNtZm1hYy0kKENPTkZJR19CUkNNRk1BQ19QQ0lFKSAmIzQzOz0gXFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9NYWtlZmlsZS00Mi1cdFx0cGNpZS5vXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvTWFrZWZpbGU6NDM6YnJjbWZtYWMtJChDT05GSUdfQlJDTURCRykgJiM0Mzs9IFxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvTWFrZWZpbGUtNDQtXHRcdGRlYnVnLm9cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29tbW9uLmM9NDYwPXZvaWQgX19icmNtZl9lcnIoc3RydWN0IGJyY21mX2J1cyAqYnVzLCBjb25zdCBjaGFyICpmdW5jLCBjb25zdCBjaGFyICpmbXQsIC4uLilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29tbW9uLmMtNDc3LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvbW1vbi5jOjQ3ODojaWYgZGVmaW5lZChDT05GSUdfQlJDTV9UUkFDSU5HKSB8fCBkZWZpbmVkKENPTkZJR19CUkNNREJHKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvbW1vbi5jLTQ3OS12b2lkIF9fYnJjbWZfZGJnKHUzMiBsZXZlbCwgY29uc3QgY2hhciAqZnVuYywgY29uc3QgY2hhciAqZm10LCAuLi4pXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2RlYnVnLmg9NDA9dm9pZCBfX2JyY21mX2VycihzdHJ1Y3QgYnJjbWZfYnVzICpidXMsIGNvbnN0IGNoYXIgKmZ1bmMsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZGVidWcuaC00Ni1cdGRvIHtcdFx0XHRcdFx0XHRcdFx0XFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9kZWJ1Zy5oOjQ3Olx0XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfQlJDTURCRykgfHxcdFx0XHRcXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2RlYnVnLmgtNDgtXHRcdCAgICBJU19FTkFCTEVEKENPTkZJR19CUkNNX1RSQUNJTkcpIHx8XHRcdFx0XFxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZGVidWcuaC01NS1cdGRvIHtcdFx0XHRcdFx0XHRcdFx0XFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9kZWJ1Zy5oOjU2Olx0XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfQlJDTURCRykgfHxcdFx0XHRcXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2RlYnVnLmgtNTctXHRcdCAgICBJU19FTkFCTEVEKENPTkZJR19CUkNNX1RSQUNJTkcpIHx8XHRcdFx0XFxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jLTI5LVx0ZG8ge1x0XHRcdFx0XHRcdFx0XHRcXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuYzozMDpcdFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0JSQ01EQkcpIHx8XHRcdFx0XFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmMtMzEtXHRcdCAgICBJU19FTkFCTEVEKENPTkZJR19CUkNNX1RSQUNJTkcpIHx8XHRcdFx0XFxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbXNtYWMvZGVidWcuYz0yMjY9X19icmNtc19mbihjcml0KVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21zbWFjL2RlYnVnLmMtMjI3LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21zbWFjL2RlYnVnLmM6MjI4OiNpZiBkZWZpbmVkKENPTkZJR19CUkNNREJHKSB8fCBkZWZpbmVkKENPTkZJR19CUkNNX1RSQUNJTkcpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbXNtYWMvZGVidWcuYy0yMjktdm9pZCBfX2JyY21zX2RiZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHUzMiBsZXZlbCwgY29uc3QgY2hhciAqZnVuYyxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbXNtYWMvZGVidWcuYy0yMzgtXHR2YWYudmEgPSBcdTAwMjZhcmdzO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21zbWFjL2RlYnVnLmM6MjM5OiNpZmRlZiBDT05GSUdfQlJDTURCR1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21zbWFjL2RlYnVnLmMtMjQwLVx0aWYgKChicmNtX21zZ19sZXZlbCBcdTAwMjYgbGV2ZWwpIFx1MDAyNlx1MDAyNiBuZXRfcmF0ZWxpbWl0KCkpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21zbWFjL2RlYnVnLmg9MzQ9dm9pZCBfX2JyY21zX2NyaXQoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpmbXQsIC4uLik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbXNtYWMvZGVidWcuaC0zNS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9kZWJ1Zy5oOjM2OiNpZiBkZWZpbmVkKENPTkZJR19CUkNNREJHKSB8fCBkZWZpbmVkKENPTkZJR19CUkNNX1RSQUNJTkcpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbXNtYWMvZGVidWcuaC0zNy1fX3ByaW50Zig0LCA1KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9tYWM4MDIxMV9pZi5jPTEwMz1NT0RVTEVfREVWSUNFX1RBQkxFKGJjbWEsIGJyY21zX2NvcmVpZF90YWJsZSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbXNtYWMvbWFjODAyMTFfaWYuYy0xMDQtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbXNtYWMvbWFjODAyMTFfaWYuYzoxMDU6I2lmIGRlZmluZWQoQ09ORklHX0JSQ01EQkcpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbXNtYWMvbWFjODAyMTFfaWYuYy0xMDYtLypcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDY6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzEyMzkKCQkJCQkJCW91dHB1dDogNTQKCQkJCQkJCXRob3VnaHRzOiAxOTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyB0aGUgYGJyY21mbWFjYCBEcml2ZXI6IEEgUHJvbWlzaW5nIEF2ZW51ZSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGBicmNtZm1hY2AgZHJpdmVyLCBhbmQgaXQgbG9va3MgbGlrZSB3ZSYjMzk7dmUgZ290IGEgcG90ZW50aWFsbHkganVpY3kgZnV6emluZyB0YXJnZXQgaGVyZS4gVGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoZSBjb25uZWN0aW9uIGJldHdlZW4gYENPTkZJR19CUkNNREJHYCBhbmQgdGhlIGBERUJVR2AgZmxhZy4gSXQgbWVhbnMsIGlmIGBDT05GSUdfQlJDTURCR2AgaXMgZW5hYmxlZCwgdGhlbiBgYnJjbWZfaWdub3JlX3Byb2JlX2ZhaWxgIGlzIGRlZmluaXRlbHkgZ29pbmcgdG8gYmUgYXZhaWxhYmxlLiBBbmQgdGhhdCYjMzk7cyBrZXkuIFRoaXMgcHJlc2VudHMgYSByZWFsbHkgZWFzeSB3YXkgdG8gZ2V0IFN5emthbGxlciBpbnZvbHZlZCB3aXRoIGZ1enppbmcgYGJyY21mbWFjYCB2aWEgVVNCISBCYXNpY2FsbHksIGxvYWQgdGhlIG1vZHVsZSB3aXRoIGBpZ25vcmVfcHJvYmVfZmFpbD0xYCwgb3Igc2V0IGl0IHRocm91Z2ggc3lzZnMuIFRoYXQmIzM5O3Mgc2ltcGxlIGVub3VnaC4gVGhlbiwganVzdCBmZWVkIGl0IGEgdmFsaWQgZmlybXdhcmUgZmlsZS4gV2UgY2FuIGdyYWIgdGhpcyBmcm9tIHRoZSByb290ZnMsIG9yIFN5emthbGxlciBpdHNlbGYgY2FuIHByb3ZpZGUgaXQsIG5vIHByb2JsZW0uCgpIb2xkIG9uLi4uIEkgbmVlZCB0byBiZSBjYXJlZnVsLiBJZiBgaWdub3JlX3Byb2JlX2ZhaWxgIGlzIHNldCwgYGJyY21mX2J1c19zdGFydGVkYCBpcyBnb2luZyB0byByZXR1cm4gMC4gSG1tLCBva2F5Li4uIGJ1dCBob3cgZG9lcyB0aGF0IGludGVyYWN0IHdpdGggYGJyY21mX2NmZzgwMjExX2F0dGFjaGA/IEkgdGhpbmsuLi4geWVzLCB0aGF0JiMzOTtzIGl0ISBgYnJjbWZfY2ZnODAyMTFfYXR0YWNoYCBpcyBjYWxsZWQgKmJlZm9yZSogYGJyY21mX2J1c19zdGFydGVkYC4gT2theSwgdGhhdCBtYWtlcyBzZW5zZS4gTGV0IG1lIHJlcmVhZCB0aGUgY29kZSBmb3IgYGJyY21mX2J1c19zdGFydGVkYCBhZ2FpbiBqdXN0IHRvIGJlIDEwMCUgc3VyZSBJJiMzOTt2ZSBnb3QgdGhpcyByaWdodC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDY6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTI2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjYwOlx0XG4xMjYxOlx0XHRyZXQgPSBicmNtZl9wcm90b19pbml0X2RvbmUoZHJ2cik7XG4xMjYyOlx0XHRpZiAocmV0IFx1MDAzYyAwKVxuMTI2MzpcdFx0XHRnb3RvIGZhaWw7XG4xMjY0Olx0XG4xMjY1Olx0XHRicmNtZl9wcm90b19hZGRfaWYoZHJ2ciwgaWZwKTtcbjEyNjY6XHRcbjEyNjc6XHRcdGRydnItXHUwMDNlY29uZmlnID0gYnJjbWZfY2ZnODAyMTFfYXR0YWNoKGRydnIsIG9wcyxcbjEyNjg6XHRcdFx0XHRcdFx0ICAgICBkcnZyLVx1MDAzZXNldHRpbmdzLVx1MDAzZXAycF9lbmFibGUpO1xuMTI2OTpcdFx0aWYgKGRydnItXHUwMDNlY29uZmlnID09IE5VTEwpIHtcbjEyNzA6XHRcdFx0cmV0ID0gLUVOT01FTTtcbjEyNzE6XHRcdFx0Z290byBmYWlsO1xuMTI3MjpcdFx0fVxuMTI3MzpcdFxuMTI3NDpcdFx0cmV0ID0gYnJjbWZfbmV0X2F0dGFjaChpZnAsIGZhbHNlKTtcbjEyNzU6XHRcbjEyNzY6XHRcdGlmICgoIXJldCkgXHUwMDI2XHUwMDI2IChkcnZyLVx1MDAzZXNldHRpbmdzLVx1MDAzZXAycF9lbmFibGUpKSB7XG4xMjc3Olx0XHRcdHAycF9pZnAgPSBkcnZyLVx1MDAzZWlmbGlzdFsxXTtcbjEyNzg6XHRcdFx0aWYgKHAycF9pZnApXG4xMjc5Olx0XHRcdFx0cmV0ID0gYnJjbWZfbmV0X3AycF9hdHRhY2gocDJwX2lmcCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA2OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyMTU3CgkJCQkJCQlvdXRwdXQ6IDU0CgkJCQkJCQl0aG91Z2h0czogNzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBEcml2ZXIgSW5pdGlhbGl6YXRpb24gRmxvdyoqCgpPa2F5LCBzbyBJJiMzOTttIHRyYWNpbmcgdGhyb3VnaCB0aGlzIEJyb2FkY29tIFdpLUZpIGRyaXZlciBjb2RlLCBhbmQgSSBzZWUgc29tZXRoaW5nIGludGVyZXN0aW5nIGluIHRoZSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZS4gU3BlY2lmaWNhbGx5LCBgYnJjbWZfY2ZnODAyMTFfYXR0YWNoYCBpcyBiZWluZyBjYWxsZWQgd2l0aGluIHRoZSBgYnJjbWZfYnVzX3N0YXJ0ZWRgIGZ1bmN0aW9uLiBUaGlzIGlzIGtleS4gSWYgYGJyY21mX2J1c19zdGFydGVkYCBoaXRzIGFuIGVycm9yIGJlZm9yZSB0aGUgY2FsbCB0byBgYnJjbWZfY2ZnODAyMTFfYXR0YWNoYCBjYW4gZXZlbiBoYXBwZW4sIHRoZSBjb2RlIHRha2VzIHRoZSBgZmFpbGAgcGF0aC4gVGhlIGZhaWx1cmUgaGFuZGxpbmcgaXMgY3J1Y2lhbCBoZXJlIC0gdW5kZXJzdGFuZGluZyB0aGF0IGNvbmRpdGlvbmFsIGZsb3cgd2lsbCBnaXZlIG1lIHNvbWUgaW5zaWdodC4gTGV0IG1lIHF1aWNrbHkgdHJhY2sgZG93biB3aGVyZSBleGFjdGx5IHRoaXMgYGZhaWxgIGxhYmVsIGlzIGRlZmluZWQgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIGhvdyB0aGUgZHJpdmVyIGhhbmRsZXMgaW5pdGlhbGl6YXRpb24gZXJyb3JzIGluIHRoaXMgc3RhZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA2OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEzMTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTMxMDpcdFxuMTMxMTpcdFx0cmV0dXJuIDA7XG4xMzEyOlx0XG4xMzEzOlx0ZmFpbDpcbjEzMTQ6XHRcdGJwaHlfZXJyKGRydnIsIFwmIzM0O2ZhaWxlZDogJWRcXG5cJiMzNDssIHJldCk7XG4xMzE1Olx0XHRpZiAoZHJ2ci1cdTAwM2Vjb25maWcpIHtcbjEzMTY6XHRcdFx0YnJjbWZfY2ZnODAyMTFfZGV0YWNoKGRydnItXHUwMDNlY29uZmlnKTtcbjEzMTc6XHRcdFx0ZHJ2ci1cdTAwM2Vjb25maWcgPSBOVUxMO1xuMTMxODpcdFx0fVxuMTMxOTpcdFx0YnJjbWZfbmV0X2RldGFjaChpZnAtXHUwMDNlbmRldiwgZmFsc2UpO1xuMTMyMDpcdFx0aWYgKHAycF9pZnApXG4xMzIxOlx0XHRcdGJyY21mX25ldF9kZXRhY2gocDJwX2lmcC1cdTAwM2VuZGV2LCBmYWxzZSk7XG4xMzIyOlx0XHRkcnZyLVx1MDAzZWlmbGlzdFswXSA9IE5VTEw7XG4xMzIzOlx0XHRkcnZyLVx1MDAzZWlmbGlzdFsxXSA9IE5VTEw7XG4xMzI0Olx0XHRpZiAoZHJ2ci1cdTAwM2VzZXR0aW5ncy1cdTAwM2VpZ25vcmVfcHJvYmVfZmFpbClcbjEzMjU6XHRcdFx0cmV0ID0gMDtcbjEzMjY6XHRcbjEzMjc6XHRcdHJldHVybiByZXQ7XG4xMzI4Olx0fVxuMTMyOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNjo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjc0NgoJCQkJCQkJb3V0cHV0OiA1OAoJCQkJCQkJdGhvdWdodHM6IDU0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFJlYWNoYWJpbGl0eSBvZiBgYnJjbWZfY3l3X2V4dGVybmFsX2F1dGhgKioKCk9rYXksIHNvIGhlcmUmIzM5O3MgdGhlIGRlYWwuIElmIGBpZ25vcmVfcHJvYmVfZmFpbGAgaXMgc2V0LCB0aGUgZnVuY3Rpb24gcmV0dXJucyAwLCBidXQgaXQgYWxzbyBkZXRhY2hlcyB0aGUgZGV2aWNlIGZyb20gYm90aCBgY2ZnODAyMTFgIGFuZCB0aGUgbmV0d29yayBzdGFjay4gVGhhdCBtZWFucyB0aGUgZGV2aWNlICppc24mIzM5O3QqIHJlZ2lzdGVyZWQgd2l0aCBgY2ZnODAyMTFgIGlmIHRoZSBpbml0aWFsIHByb2JlIGZhaWxzLiAgQW5kIGlmIGBjZmc4MDIxMWAgaXMgZGV0YWNoZWQsIHRoZW4gdXNlcnNwYWNlIGNhbiYjMzk7dCBldmVuIHNlbmQgdGhhdCBgTkw4MDIxMV9DTURfRVhURVJOQUxfQVVUSGAgY29tbWFuZCEgU28sIGBpZ25vcmVfcHJvYmVfZmFpbGAgcmVhbGx5IGRvZXNuJiMzOTt0IGhlbHAgbWUgcmVhY2ggYGJyY21mX2N5d19leHRlcm5hbF9hdXRoYCBpZiB0aGUgaGFyZHdhcmUgaW50ZXJhY3Rpb25zIGFyZSBmYWlsaW5nLgoKQnV0Li4uIHN5emthbGxlciAqZGlkKiByZWFjaCBpdC4gSG93PyBJJiMzOTttIGJldHRpbmcgdGhlIGluaXRpYWwgaGFyZHdhcmUgaW50ZXJhY3Rpb25zLCBsaWtlIHRob3NlIGluIGBicmNtZl9jX3ByZWluaXRfZGNtZHNgLCBhcmVuJiMzOTt0IGZhaWxpbmcgaW4gc3l6a2FsbGVyJiMzOTtzIGVudmlyb25tZW50LiBBbmQgaGVyZSYjMzk7cyB3aHk6IHN5emthbGxlciYjMzk7cyB2aGNpIGNhbiBnaXZlIGl0IGFyYml0cmFyeSByZXNwb25zZXMgdG8gVVNCIFVSQnMuIElmIGl0IHByb3ZpZGVzIHRoZSAqcmlnaHQqIHJlc3BvbnNlcywgYGJyY21mX2NfcHJlaW5pdF9kY21kc2Agd2lsbCBzdWNjZWVkISBTeXprYWxsZXImIzM5O3MgVVNCIGZ1enplciBpcyBjYXBhYmxlIG9mIGdlbmVyYXRpbmcgcmFuZG9tIFVTQiBkZXNjcmlwdG9ycyBhbmQgcmVzcG9uc2VzLiBUaGF0IGNvbW1pdCBtZXNzYWdlLCAmIzM0O3N5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldyYjMzQ7LCB0ZWxscyBtZSBpdCBpcyBhY3RpdmVseSBmdXp6aW5nIHRoaXMgcGF0aCBhbmQgcHJvYmFibHkgZm91bmQgYSBidWcuIFNvLCB5ZWFoLCBpdCAqaXMqIHJlYWNoYWJsZS4KClRoZSBmdW5jdGlvbiBpbiBxdWVzdGlvbiBpcyBgYnJjbWZfY3l3X2V4dGVybmFsX2F1dGhgLCBhbmQgdGhlIHBhdGNoIG1vZGlmaWVzIGl0LiAgR2l2ZW4gdGhhdCBpdCYjMzk7cyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGEgZHJpdmVyLCByZWFjaGFibGUgdmlhIG5ldGxpbmsgKmFuZCogVVNCIGVtdWxhdGlvbiwgaXQmIzM5O3MgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZSBhbGwgdGhlIGNvbmZpZ3MgcmlnaHQsIHRob3VnaC4gSSYjMzk7bGwgbmVlZDoKCiogICBgQlJDTUZNQUNgCiogICBgQlJDTUZNQUNfVVNCYAoqICAgYENGRzgwMjExYAoqICAgYFVTQmAKKiAgIGBNQUM4MDIxMWAgKG9mdGVuIGdvZXMgYWxvbmcgd2l0aCB0aG9zZSBvdGhlcnMsIHNvIGl0JiMzOTtzIGdvb2QgdG8gaGF2ZSkKKiAgIGBGV19MT0FERVJgIChzZWxlY3RlZCBieSBCUkNNRk1BQ19VU0IpCgpMZXQgbWUganVzdCBxdWlja2x5IHZlcmlmeSB0aGVyZSBhcmVuJiMzOTt0IGFueSBvdGhlciBkZXBlbmRlbmNpZXMsIHNpbmNlIHRoZSBwYXRjaCBpcyBpbiBgY3l3L2NvcmUuY2AuIE9rYXksIGBicmNtZm1hYy0kKENPTkZJR19CUkNNRk1BQykgJiM0Mzs9IGN5dy9jb3JlLm9gIGlzIGluIHRoZSBtYWtlZmlsZS4gU28gYGN5d2AgaXMgdW5jb25kaXRpb25hbGx5IGJ1aWx0IGlmIGBCUkNNRk1BQ2AgaXMgZW5hYmxlZC4KCk9rYXksIGxldCYjMzk7cyBleHRyYWN0IHRoZSBmb2N1cyBzeW1ib2wgb25lIGxhc3QgdGltZTogYGJyY21mX2N5d19leHRlcm5hbF9hdXRoYC4gTm93IEkmIzM5O2xsIGRvdWJsZSBjaGVjayB0byBtYWtlIHN1cmUgaXQmIzM5O3Mgbm90IGEgc3RhdGljIGZ1bmN0aW9uLCBqdXN0IGluIGNhc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA2OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JyY21mX2N5d19leHRlcm5hbF9hdXRoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmM9MTk3PXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvY29yZS5jOjE5ODpicmNtZl9jeXdfZXh0ZXJuYWxfYXV0aChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmMtMTk5LVx0XHRcdHN0cnVjdCBjZmc4MDIxMV9leHRlcm5hbF9hdXRoX3BhcmFtcyAqcGFyYW1zKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvY29yZS5jPTIzND1zdGF0aWMgdm9pZCBicmNtZl9jeXdfZ2V0X2NmZzgwMjExX29wcyhzdHJ1Y3QgYnJjbWZfcHViICpkcnZyKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvY29yZS5jLTIzNi1cdGRydnItXHUwMDNlb3BzLVx1MDAzZW1nbXRfdHggPSBicmNtZl9jeXdfbWdtdF90eDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvY29yZS5jOjIzNzpcdGRydnItXHUwMDNlb3BzLVx1MDAzZWV4dGVybmFsX2F1dGggPSBicmNtZl9jeXdfZXh0ZXJuYWxfYXV0aDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvY29yZS5jLTIzOC19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA2OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0MzIyCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTg3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYGJyY21mX2N5d19leHRlcm5hbF9hdXRoYCBGdW5jdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBmdW5jdGlvbjogYHN0YXRpYyBpbnQgYnJjbWZfY3l3X2V4dGVybmFsX2F1dGgoLi4uKWAuIFJpZ2h0IGF3YXksIHRoZSAmIzM0O3N0YXRpYyYjMzQ7IGtleXdvcmQganVtcHMgb3V0IGF0IG1lLiBUaGUgaW5zdHJ1Y3Rpb25zIGFyZSBwcmV0dHkgY2xlYXI6IHdlIHdhbnQgdG8gZmF2b3Igbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzIG92ZXIgdGhlc2UgaW50ZXJuYWwgc3RhdGljIGhlbHBlcnMuIFRoZSByZWFzb25pbmcgaXMgc291bmQg4oCTIGlubGluaW5nIG9ic2N1cmVzIHRoaW5ncyBiZWNhdXNlIGl0IG1lYW5zIHRoZSBjb21waWxlciYjMzk7cyBqdXN0IGdvaW5nIHRvIGZvbGQgdGhlIGhlbHBlciBmdW5jdGlvbiBkaXJlY3RseSBpbnRvIHdoZXJldmVyIGl0JiMzOTtzIHVzZWQuIE5vIGRpc3RpbmN0IGFkZHJlc3MsIHdoaWNoIGlzIGEgcHJvYmxlbSBmb3IgdGhpbmdzIGxpa2UgZnVuY3Rpb24gcG9pbnRlcnMuCgpBbmQgdGhhdCYjMzk7cyB0aGUga2lja2VyIGhlcmU6IHRoaXMgYGJyY21mX2N5d19leHRlcm5hbF9hdXRoYCAqaXMqIGFzc2lnbmVkIHRvIGEgZnVuY3Rpb24gcG9pbnRlciAoYGRydnItJmd0O29wcy0mZ3Q7ZXh0ZXJuYWxfYXV0aCA9IGJyY21mX2N5d19leHRlcm5hbF9hdXRoO2ApLiBTbywgaW4gdGhlb3J5LCB0aGUgY29tcGlsZXIgc2hvdWxkbiYjMzk7dCBiZSBhYmxlIHRvIGNvbXBsZXRlbHkgaW5saW5lIGl0LiBBIGZ1bmN0aW9uIHBvaW50ZXIgKmRlbWFuZHMqIGEgZGlzY3JldGUgc3ltYm9sIGFkZHJlc3MuIEJ1dCB0aGUgJiMzNDtzdGF0aWMmIzM0OyBpcyBzdGlsbCB0aHJvd2luZyBhIHJlZCBmbGFnLiBJZiBpdCYjMzk7cyBzdGF0aWMsIHRoZXJlJiMzOTtzIGEgZ29vZCBjaGFuY2UgaXQgd29uJiMzOTt0IGdldCBleHBvcnRlZCwgbWVhbmluZyBpdCBtaWdodCBub3QgYmUgdmlzaWJsZSBvdXRzaWRlIHRoZSBtb2R1bGUuIFRoaXMgaXMsIGFmdGVyIGFsbCwgdGhlIG9ubHkgZnVuY3Rpb24gdGhhdCYjMzk7cyBiZWluZyBtb2RpZmllZC4KCkhtbS4uLiB0aGUgcXVlc3Rpb24gdGhlbiBiZWNvbWVzOiBJcyB0aGVyZSBzb21lIG5vbi1zdGF0aWMgZnVuY3Rpb24gdGhhdCBjYWxscyB0aGlzIHN0YXRpYyBvbmU/IEkgbmVlZCB0byB0cmFjZSB0aGlzIGJhY2sgYW5kIHNlZSBob3cgaXQmIzM5O3MgYWN0dWFsbHkgKnVzZWQqLiBBaCwgcmlnaHQhIEl0JiMzOTtzIGNhbGxlZCB0aHJvdWdoIGEgZnVuY3Rpb24gcG9pbnRlciBmcm9tIHRoZSBgY2ZnODAyMTFgIGNvcmUuIEFuZCB0aGF0IGBjZmc4MDIxMWAgY29yZSBmdW5jdGlvbiBpcyBgbmw4MDIxMV9leHRlcm5hbF9hdXRoYC4gTm93IHdlJiMzOTtyZSBnZXR0aW5nIHNvbWV3aGVyZS4gVGhpcyBpcyB0aGUgZW50cnlwb2ludCB0byBiZSBjb25jZXJuZWQgd2l0aC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDY6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmw4MDIxMV9leHRlcm5hbF9hdXRoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTE4NDY5PXN0YXRpYyBpbnQgbmw4MDIxMV9kZWxfcG1rKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xODQ5MC1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MTg0OTE6c3RhdGljIGludCBubDgwMjExX2V4dGVybmFsX2F1dGgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTg0OTIte1xuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9MTk3Mjk9c3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX3NtYWxsX29wcyBubDgwMjExX3NtYWxsX29wc1tdID0ge1xuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMjA0NjAtXHRcdC52YWxpZGF0ZSA9IEdFTkxfRE9OVF9WQUxJREFURV9TVFJJQ1QgfCBHRU5MX0RPTlRfVkFMSURBVEVfRFVNUCxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MjA0NjE6XHRcdC5kb2l0ID0gbmw4MDIxMV9leHRlcm5hbF9hdXRoLFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0yMDQ2Mi1cdFx0LmZsYWdzID0gR0VOTF9BRE1JTl9QRVJNLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNjo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTIyNgoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDI1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBFeHRlcm5hbCBBdXRoZW50aWNhdGlvbiBpbiB0aGUgV2lyZWxlc3MgU3Vic3lzdGVtKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgbmw4MDIxMV9leHRlcm5hbF9hdXRoYCDigJMgdGhhdCYjMzk7cyB0aGUgc3RhcnRpbmcgcG9pbnQsIHRoZSBlbnRyeSBmdW5jdGlvbi4gQnV0IHRoZSBhY3R1YWwgZnVuY3Rpb24gdGhhdCYjMzk7cyBiZWVuIG1vZGlmaWVkLCB0aGUgcmVhbCBtZWF0IG9mIHRoZSBjaGFuZ2VzLCBpcyBgYnJjbWZfY3l3X2V4dGVybmFsX2F1dGhgLiBHb29kIG5ld3MgaXMsIGJlY2F1c2UgaXQmIzM5O3MgYXNzaWduZWQgdG8gYSBmdW5jdGlvbiBwb2ludGVyLCBpdCYjMzk7cyBub3QgZ29pbmcgdG8gYmUgaW5saW5lZC4gVGhhdCBtZWFucyBpdCYjMzk7bGwgc2hvdyB1cCBjbGVhbmx5IGluIHN0YWNrIHRyYWNlcyBhbmQgY292ZXJhZ2UgcmVwb3J0cywgd2hpY2ggaXMgKmV4dHJlbWVseSogaGVscGZ1bCBmb3IgZGVidWdnaW5nIGFuZCBhbmFseXNpcy4gU28sIEkgbmVlZCB0byBiZSBzdXJlIHRvIGluY2x1ZGUgYGJyY21mX2N5d19leHRlcm5hbF9hdXRoYCBpbiBteSBgRm9jdXNTeW1ib2xzYCBsaXN0OyB0aGF0JiMzOTtzIGNyaXRpY2FsLgoKTm93LCBJIG5lZWQgdG8gY2hlY2sgZm9yIGFueSByZWxhdGVkIGNvbmZpZ3VyYXRpb25zLiBJIHNob3VsZCBtYWtlIHN1cmUgdGhlc2UgYXJlIGluY2x1ZGVkIGluIHRoZSBidWlsZDogYEJSQ01GTUFDYCwgYEJSQ01GTUFDX1VTQmAsIGBDRkc4MDIxMWAsIGBNQUM4MDIxMWAsIGBVU0JgLCBgRldfTE9BREVSYCwgYW5kIGBGV19MT0FERVJfVVNFUl9IRUxQRVJgLiBJIGFtIHRoaW5raW5nIHRoYXQgYEZXX0xPQURFUl9VU0VSX0hFTFBFUmAgbWF5IGJlIHVzZWZ1bCBmb3Igc3l6a2FsbGVyIHRvIHN1cHBseSBmaXJtd2FyZSwgYWx0aG91Z2ggaXQmIzM5O3MgYWxzbyBwb3NzaWJsZSB0byBqdXN0IGluY2x1ZGUgaXQgaW4gdGhlIHJvb3Rmcy4gSSYjMzk7bGwgaW5jbHVkZSBpdCBpbiBjYXNlIGl0IGlzIHVzZWZ1bC4KCldhaXQgYSBzZWNvbmTigKYgYE5MODAyMTFfQ01EX0VYVEVSTkFMX0FVVEhgIGlzIGFsc28gcmVsZXZhbnQgdG8gU0FFLCBzcGVjaWZpY2FsbHkgV1BBMyBleHRlcm5hbCBhdXRoZW50aWNhdGlvbi4gVGhpcyBtYWtlcyBtZSBjdXJpb3VzLiBJcyB0aGVyZSBhbnkgc3BlY2lmaWMgY29uZmlndXJhdGlvbiByZWxhdGVkIHRvIFNBRSBvciBXUEEzIHdpdGhpbiBgY2ZnODAyMTFgPyBJIHNob3VsZCBwcm9iYWJseSB0YWtlIGEgbG9vayBhdCBgbmV0L3dpcmVsZXNzL0tjb25maWdgIHRvIGJlIHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA2OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2V4dGVybmFsX2F1dGgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvd2lyZWxlc3MvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy9ubDgwMjExLmM9MTg0Njk9c3RhdGljIGludCBubDgwMjExX2RlbF9wbWsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE4NDkwLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYzoxODQ5MTpzdGF0aWMgaW50IG5sODAyMTFfZXh0ZXJuYWxfYXV0aChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xODQ5Mi17XG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xODQ5NC1cdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBpbmZvLVx1MDAzZXVzZXJfcHRyWzFdO1xubmV0L3dpcmVsZXNzL25sODAyMTEuYzoxODQ5NTpcdHN0cnVjdCBjZmc4MDIxMV9leHRlcm5hbF9hdXRoX3BhcmFtcyBwYXJhbXM7XG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE4NDk2LVxubmV0L3dpcmVsZXNzL25sODAyMTEuYzoxODQ5NzpcdGlmICghcmRldi1cdTAwM2VvcHMtXHUwMDNlZXh0ZXJuYWxfYXV0aClcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTg0OTgtXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE4NTI5LVxubmV0L3dpcmVsZXNzL25sODAyMTEuYzoxODUzMDpcdHJldHVybiByZGV2X2V4dGVybmFsX2F1dGgocmRldiwgZGV2LCBcdTAwMjZwYXJhbXMpO1xubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xODUzMS19XG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYz0xOTcyOT1zdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfc21hbGxfb3BzIG5sODAyMTFfc21hbGxfb3BzW10gPSB7XG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0yMDQ2MC1cdFx0LnZhbGlkYXRlID0gR0VOTF9ET05UX1ZBTElEQVRFX1NUUklDVCB8IEdFTkxfRE9OVF9WQUxJREFURV9EVU1QLFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzoyMDQ2MTpcdFx0LmRvaXQgPSBubDgwMjExX2V4dGVybmFsX2F1dGgsXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTIwNDYyLVx0XHQuZmxhZ3MgPSBHRU5MX0FETUlOX1BFUk0sXG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYz0yMzI1Nj12b2lkIG5sODAyMTFfc2VuZF9hcF9zdG9wcGVkKHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsIHVuc2lnbmVkIGludCBsaW5rX2lkKVxuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMjMyODctXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjIzMjg4OmludCBjZmc4MDIxMV9leHRlcm5hbF9hdXRoX3JlcXVlc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MjMyODk6XHRcdFx0XHQgICBzdHJ1Y3QgY2ZnODAyMTFfZXh0ZXJuYWxfYXV0aF9wYXJhbXMgKnBhcmFtcyxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMjMyOTAtXHRcdFx0XHQgICBnZnBfdCBnZnApXG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0yMzM0NS19XG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjIzMzQ2OkVYUE9SVF9TWU1CT0woY2ZnODAyMTFfZXh0ZXJuYWxfYXV0aF9yZXF1ZXN0KTtcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMjMzNDctXG4tLVxubmV0L3dpcmVsZXNzL3JkZXYtb3BzLmg9MTMzOD1zdGF0aWMgaW5saW5lIGludFxubmV0L3dpcmVsZXNzL3JkZXYtb3BzLmg6MTMzOTpyZGV2X2V4dGVybmFsX2F1dGgoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxubmV0L3dpcmVsZXNzL3JkZXYtb3BzLmgtMTM0MC1cdFx0ICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbm5ldC93aXJlbGVzcy9yZGV2LW9wcy5oOjEzNDE6XHRcdCAgIHN0cnVjdCBjZmc4MDIxMV9leHRlcm5hbF9hdXRoX3BhcmFtcyAqcGFyYW1zKVxubmV0L3dpcmVsZXNzL3JkZXYtb3BzLmgtMTM0Mi17XG4tLVxubmV0L3dpcmVsZXNzL3JkZXYtb3BzLmgtMTM0NC1cbm5ldC93aXJlbGVzcy9yZGV2LW9wcy5oOjEzNDU6XHR0cmFjZV9yZGV2X2V4dGVybmFsX2F1dGgoXHUwMDI2cmRldi1cdTAwM2V3aXBoeSwgZGV2LCBwYXJhbXMpO1xubmV0L3dpcmVsZXNzL3JkZXYtb3BzLmg6MTM0NjpcdGlmIChyZGV2LVx1MDAzZW9wcy1cdTAwM2VleHRlcm5hbF9hdXRoKVxubmV0L3dpcmVsZXNzL3JkZXYtb3BzLmg6MTM0NzpcdFx0cmV0ID0gcmRldi1cdTAwM2VvcHMtXHUwMDNlZXh0ZXJuYWxfYXV0aChcdTAwMjZyZGV2LVx1MDAzZXdpcGh5LCBkZXYsIHBhcmFtcyk7XG5uZXQvd2lyZWxlc3MvcmRldi1vcHMuaC0xMzQ4LVx0dHJhY2VfcmRldl9yZXR1cm5faW50KFx1MDAyNnJkZXYtXHUwMDNld2lwaHksIHJldCk7XG4tLVxubmV0L3dpcmVsZXNzL3RyYWNlLmg9Mjc2NT1UUkFDRV9FVkVOVChyZGV2X2RlbF9wbWssXG4tLVxubmV0L3dpcmVsZXNzL3RyYWNlLmgtMjc4NS1cbm5ldC93aXJlbGVzcy90cmFjZS5oOjI3ODY6VFJBQ0VfRVZFTlQocmRldl9leHRlcm5hbF9hdXRoLFxubmV0L3dpcmVsZXNzL3RyYWNlLmgtMjc4Ny1cdCAgICBUUF9QUk9UTyhzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxubmV0L3dpcmVsZXNzL3RyYWNlLmg6Mjc4ODpcdFx0ICAgICBzdHJ1Y3QgY2ZnODAyMTFfZXh0ZXJuYWxfYXV0aF9wYXJhbXMgKnBhcmFtcyksXG5uZXQvd2lyZWxlc3MvdHJhY2UuaC0yNzg5LVx0ICAgIFRQX0FSR1Mod2lwaHksIG5ldGRldiwgcGFyYW1zKSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDY6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzcxMzcKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAyMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ29uZmlndXJhdGlvbiBTdHJhdGVneSBmb3IgUmV2aWV3aW5nIG5sODAyMTEuYyYjMzk7cyBTQUUvRXh0ZXJuYWwgQXV0aCBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyB0aGVyZSYjMzk7cyBubyBkZWRpY2F0ZWQgY29uZmlndXJhdGlvbiBvcHRpb24gc3BlY2lmaWNhbGx5IGZvciBTQUUgb3IgZXh0ZXJuYWwgYXV0aGVudGljYXRpb24gd2l0aGluIGBubDgwMjExLmNgLiBJdCYjMzk7cyBpbnRlZ3JhdGVkIGRpcmVjdGx5IGFzIHBhcnQgb2YgdGhlIGBubDgwMjExLmNgIHNvdXJjZSBjb2RlLCB3aGljaCBnZXRzIGJ1aWx0IHdoZW4gYENGRzgwMjExYCBpcyBlbmFibGVkLiBUaW1lIHRvIHJldmlldyB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgdG8gZW5zdXJlIHByb3BlciBzZXR1cC4KCkkmIzM5O20gdGhpbmtpbmcgSSYjMzk7bGwgbmVlZCB0byBlbmFibGUgdGhlc2Ugb3B0aW9ucyBpbiBteSBidWlsZDogYEJSQ01GTUFDYCwgYEJSQ01GTUFDX1VTQmAsIGBDRkc4MDIxMWAsIGBNQUM4MDIxMWAsIGBVU0JgLCBgRldfTE9BREVSYCwgYEZXX0xPQURFUl9VU0VSX0hFTFBFUmAsIGFuZCBgQlJDTURCR2AuIEkgYWRkZWQgYEJSQ01EQkdgIGJlY2F1c2UgaXQgc2VlbXMgdXNlZnVsIGZvciBlYXNpZXIgZnV6emluZywgc3BlY2lmaWNhbGx5IGVuYWJsaW5nIGBpZ25vcmVfcHJvYmVfZmFpbGAsIGFuZCBieSBleHRlbnNpb24sIGVhc2llciBjb2RlIGNvdmVyYWdlLgoKV2FpdCBhIHNlY29uZCwgbGV0IG1lIHRoaW5rIGFib3V0IGBCUkNNREJHYC4gQWx0aG91Z2ggaXTigJlzIGV4dHJlbWVseSB1c2VmdWwgZm9yIGZ1enppbmcsIEkgc2hvdWxkIGNoZWNrIGlmIGl0JiMzOTtzIHN0cmljdGx5IG5lY2Vzc2FyeS4gTWF5YmUgc3l6a2FsbGVyIGFscmVhZHkgaGFzIHRoaXMgZW5hYmxlZCBvciBtYXliZSwgc2luY2UgaXQgZmVlZHMgdGhlIGNvZGUgd2l0aCB2YWxpZCBmaXJtd2FyZSwgaXQgZG9lc24mIzM5O3QgZXZlbiBuZWVkIGBpZ25vcmVfcHJvYmVfZmFpbGAuIEhvd2V2ZXIsIGp1c3QgdG8gYmUgc2FmZSwgSSYjMzk7bGwgZ28gYWhlYWQgYW5kIGluY2x1ZGUgYEJSQ01EQkdgLiBJdCBzaWduaWZpY2FudGx5IHNpbXBsaWZpZXMgZ2V0dGluZyB0byB0aGUgY29kZSBmb3IgYW5hbHlzaXMsIGVzcGVjaWFsbHkgd2l0aG91dCByZWx5aW5nIG9uIGFjdHVhbCBoYXJkd2FyZS4KCk5vdywgYmVmb3JlIEkgY29tbWl0IHRvIHRoYXQsIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCBgQlJDTURCR2AgZG9lc24mIzM5O3QgaGF2ZSBhbnkgaGlkZGVuIGRlcGVuZGVuY2llcyB0aGF0IG1pZ2h0IGNvbXBsaWNhdGUgbXkgYnVpbGQuIExldCBtZSBtYWtlIHN1cmUgSSYjMzk7bSBub3Qgb3Zlcmxvb2tpbmcgc29tZXRoaW5nIGNydWNpYWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA2OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCUkNNREJHJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL0tjb25maWc9Mjc9Y29uZmlnIEJSQ01fVFJBQ0lOR1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9LY29uZmlnLTM4LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL0tjb25maWc6Mzk6Y29uZmlnIEJSQ01EQkdcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9LY29uZmlnLTQwLVx0Ym9vbCBcJiMzNDtCcm9hZGNvbSBkcml2ZXIgZGVidWcgZnVuY3Rpb25zXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA2OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM3ODkzCgkJCQkJCQlvdXRwdXQ6IDIxOAoJCQkJCQkJdGhvdWdodHM6IDQyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBXTEFOIERyaXZlciBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIGlzIGp1c3QgYSBCb29sZWFuIGNoZWNrIGluaXRpYWxseS4gTXkgZm9jdXMgbmVlZHMgdG8gYmUgb24gdGhlIGBicmNtZl9jeXdfZXh0ZXJuYWxfYXV0aGAgZnVuY3Rpb24uIEkgc2VlIHRoYXQgdGhlIHBhdGNoICpvbmx5KiBtb2RpZmllcyB0aGlzIGZ1bmN0aW9uLCBzbyB0aGF0JiMzOTtzIHdoZXJlIG15IGF0dGVudGlvbiBpcy4KCkxvb2tpbmcgYXQgdGhlIGNvZGUsIGl0JiMzOTtzIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIEl0IGNoZWNrcyBmb3IgYSBzdWNjZXNzZnVsIHN0YXR1cywgYW5kIGlmIHNvLCBpdCAqY29waWVzKiBgcGFyYW1zLSZndDtwbWtpZGAgdG8gYGF1dGhfc3RhdHVzLnBta2lkYC4gVGhlbiwgaXQgc2V0cyB0aGUgZmxhZ3MgYW5kIHNlbmRzIGBhdXRoX3N0YXR1c2AgdG8gdGhlIGZpcm13YXJlIHZpYSBgYnJjbWZfZmlsX2lvdmFyX2RhdGFfc2V0YC4KClRoaXMgaXMgYSAqKmZ1bmN0aW9uYWwgY2hhbmdlKiouIEl0JiMzOTtzIHByZXZlbnRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgZnJvbSBiZWluZyBzZW50IHRvIHRoZSBmaXJtd2FyZSwgb3IgcGVyaGFwcyBpdCBhZGRzIFBNS0lEIHN1cHBvcnQgdG8gZXh0ZXJuYWwgYXV0aGVudGljYXRpb24uIEl0JiMzOTtzIGEgY2xlYXIgYWx0ZXJhdGlvbiB0byB0aGUgZXhpc3RpbmcgYmVoYXZpb3IgYW5kIGludHJvZHVjZXMgbmV3IGRhdGEgYmVpbmcgc2VudCB0byB0aGUgZmlybXdhcmUuICpUaGlzKiBkZWZpbml0ZWx5IG5lZWRzIGZ1enppbmcuCgpNeSBjb25jbHVzaW9uPyBgV29ydGhGdXp6aW5nOiB0cnVlYC4gVGhlIGZ1bmN0aW9uIG9mIGludGVyZXN0IGlzIGBicmNtZl9jeXdfZXh0ZXJuYWxfYXV0aGAuIEFuZCBJIG5lZWQgdG8gY29uc2lkZXIgY29uZmlndXJhdGlvbnMgZm9yIGBCUkNNRk1BQ2AsIGBCUkNNRk1BQ19VU0JgLCBgQ0ZHODAyMTFgLCBgTUFDODAyMTFgLCBgVVNCYCwgYEZXX0xPQURFUmAsIGBGV19MT0FERVJfVVNFUl9IRUxQRVJgLCBhbmQgYEJSQ01EQkdgLiBJIHNob3VsZCBhbHNvIHVzZSB0aGUgYGlnbm9yZV9wcm9iZV9mYWlsYCBtb2R1bGUgcGFyYW1ldGVyICh3aGVuIGBCUkNNREJHYCBpcyBlbmFibGVkKSB0byBieXBhc3MgYW55IGhhcmR3YXJlIGluaXRpYWxpemF0aW9uIGlzc3Vlcy4gVGhpcyBpcyByZWFjaGFibGUgdmlhIHRoZSBuZXRsaW5rIGludGVyZmFjZSwgc3BlY2lmaWNhbGx5IGBOTDgwMjExX0NNRF9FWFRFUk5BTF9BVVRIYCBpbiBhIFVTQiB2aGNpIGVtdWxhdGlvbiBzY2VuYXJpbywgdGhlcmVmb3JlIHRoZSBzdGF0ZWQgY29uZmlndXJhdGlvbnMgYWxsb3cgbWUgdG8gZXhlcmNpc2UgdGhlIHRhcmdldCBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDY6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JSQ01GTUFDJiMzNDssCiAgICAmIzM0O0JSQ01GTUFDX1VTQiYjMzQ7LAogICAgJiMzNDtDRkc4MDIxMSYjMzQ7LAogICAgJiMzNDtNQUM4MDIxMSYjMzQ7LAogICAgJiMzNDtVU0ImIzM0OywKICAgICYjMzQ7RldfTE9BREVSJiMzNDssCiAgICAmIzM0O0ZXX0xPQURFUl9VU0VSX0hFTFBFUiYjMzQ7LAogICAgJiMzNDtCUkNNREJHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnJjbWZfY3l3X2V4dGVybmFsX2F1dGgmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGJyY21mX2N5d19leHRlcm5hbF9hdXRoYCBpbiB0aGUgQnJvYWRjb20gRnVsbE1BQyBXTEFOIGRyaXZlciAoYGJyY21mbWFjYCkgdG8gaW5pdGlhbGl6ZSBgYXV0aF9zdGF0dXNgIGFuZCBjb3B5IGBwbWtpZGAgaWYgcHJlc2VudC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGEgZHJpdmVyIHRoYXQgaXMgcmVhY2hhYmxlIHZpYSBuZXRsaW5rIChgTkw4MDIxMV9DTURfRVhURVJOQUxfQVVUSGApIHdoZW4gdGhlIGRldmljZSBpcyBlbXVsYXRlZCB2aWEgVVNCICh2aGNpKS4gRW5hYmxpbmcgYEJSQ01EQkdgIGFsbG93cyB1c2luZyB0aGUgYGlnbm9yZV9wcm9iZV9mYWlsYCBtb2R1bGUgcGFyYW1ldGVyIHRvIGJ5cGFzcyBoYXJkd2FyZSBpbml0aWFsaXphdGlvbiBmYWlsdXJlcyBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlJDTUZNQUMmIzM0OywKICAgICYjMzQ7QlJDTUZNQUNfVVNCJiMzNDssCiAgICAmIzM0O0NGRzgwMjExJiMzNDssCiAgICAmIzM0O01BQzgwMjExJiMzNDssCiAgICAmIzM0O1VTQiYjMzQ7LAogICAgJiMzNDtGV19MT0FERVImIzM0OywKICAgICYjMzQ7RldfTE9BREVSX1VTRVJfSEVMUEVSJiMzNDssCiAgICAmIzM0O0JSQ01EQkcmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticmNtZl9jeXdfZXh0ZXJuYWxfYXV0aCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgYnJjbWZfY3l3X2V4dGVybmFsX2F1dGhgIGluIHRoZSBCcm9hZGNvbSBGdWxsTUFDIFdMQU4gZHJpdmVyIChgYnJjbWZtYWNgKSB0byBpbml0aWFsaXplIGBhdXRoX3N0YXR1c2AgYW5kIGNvcHkgYHBta2lkYCBpZiBwcmVzZW50LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSBkcml2ZXIgdGhhdCBpcyByZWFjaGFibGUgdmlhIG5ldGxpbmsgKGBOTDgwMjExX0NNRF9FWFRFUk5BTF9BVVRIYCkgd2hlbiB0aGUgZGV2aWNlIGlzIGVtdWxhdGVkIHZpYSBVU0IgKHZoY2kpLiBFbmFibGluZyBgQlJDTURCR2AgYWxsb3dzIHVzaW5nIHRoZSBgaWdub3JlX3Byb2JlX2ZhaWxgIG1vZHVsZSBwYXJhbWV0ZXIgdG8gYnlwYXNzIGhhcmR3YXJlIGluaXRpYWxpemF0aW9uIGZhaWx1cmVzIGR1cmluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDY6Mzk6NDguNjgwMzg2MzcyWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMzODQzODE1NjcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJSQ01GTUFDXCIsXG4gICAgXCJCUkNNRk1BQ19VU0JcIixcbiAgICBcIkNGRzgwMjExXCIsXG4gICAgXCJNQUM4MDIxMVwiLFxuICAgIFwiVVNCXCIsXG4gICAgXCJGV19MT0FERVJcIixcbiAgICBcIkZXX0xPQURFUl9VU0VSX0hFTFBFUlwiLFxuICAgIFwiQlJDTURCR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJyY21mX2N5d19leHRlcm5hbF9hdXRoXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGJyY21mX2N5d19leHRlcm5hbF9hdXRoYCBpbiB0aGUgQnJvYWRjb20gRnVsbE1BQyBXTEFOIGRyaXZlciAoYGJyY21mbWFjYCkgdG8gaW5pdGlhbGl6ZSBgYXV0aF9zdGF0dXNgIGFuZCBjb3B5IGBwbWtpZGAgaWYgcHJlc2VudC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGEgZHJpdmVyIHRoYXQgaXMgcmVhY2hhYmxlIHZpYSBuZXRsaW5rIChgTkw4MDIxMV9DTURfRVhURVJOQUxfQVVUSGApIHdoZW4gdGhlIGRldmljZSBpcyBlbXVsYXRlZCB2aWEgVVNCICh2aGNpKS4gRW5hYmxpbmcgYEJSQ01EQkdgIGFsbG93cyB1c2luZyB0aGUgYGlnbm9yZV9wcm9iZV9mYWlsYCBtb2R1bGUgcGFyYW1ldGVyIHRvIGJ5cGFzcyBoYXJkd2FyZSBpbml0aWFsaXphdGlvbiBmYWlsdXJlcyBkdXJpbmcgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDY6Mzk6NDguNjgwMzk0MDUyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozODQxMDQyNzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA3ZTNiZDQ5ZDE5ODdhYmE1ZTZmYzA3ZDIwNmU0ZDYxNzY2NzQwM2JhXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgQXVnIDQgMDY6Mzk6NDcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L2NvcmUuY1xcbmluZGV4IDg3Mzc1NGJlNTE3NGIuLjJjNTliNWU1Nzk1OWMgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmNcXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L2NvcmUuY1xcbkBAIC0yMDAsNyArMjAwLDcgQEAgYnJjbWZfY3l3X2V4dGVybmFsX2F1dGgoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4ge1xcbiBcXHRzdHJ1Y3QgYnJjbWZfaWYgKmlmcDtcXG4gXFx0c3RydWN0IGJyY21mX3B1YiAqZHJ2cjtcXG4tXFx0c3RydWN0IGJyY21mX2F1dGhfcmVxX3N0YXR1c19sZSBhdXRoX3N0YXR1cztcXG4rXFx0c3RydWN0IGJyY21mX2F1dGhfcmVxX3N0YXR1c19sZSBhdXRoX3N0YXR1cyA9IHt9O1xcbiBcXHRpbnQgcmV0ID0gMDtcXG4gXFxuIFxcdGJyY21mX2RiZyhUUkFDRSwgXFxcIkVudGVyXFxcXG5cXFwiKTtcXG5AQCAtMjA4LDYgKzIwOCw4IEBAIGJyY21mX2N5d19leHRlcm5hbF9hdXRoKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIFxcdGlmcCA9IG5ldGRldl9wcml2KGRldik7XFxuIFxcdGRydnIgPSBpZnAtXFx1MDAzZWRydnI7XFxuIFxcdGlmIChwYXJhbXMtXFx1MDAzZXN0YXR1cyA9PSBXTEFOX1NUQVRVU19TVUNDRVNTKSB7XFxuK1xcdFxcdGlmIChwYXJhbXMtXFx1MDAzZXBta2lkKVxcbitcXHRcXHRcXHRtZW1jcHkoYXV0aF9zdGF0dXMucG1raWQsIHBhcmFtcy1cXHUwMDNlcG1raWQsIFdMQU5fUE1LSURfTEVOKTtcXG4gXFx0XFx0YXV0aF9zdGF0dXMuZmxhZ3MgPSBjcHVfdG9fbGUxNihCUkNNRl9FWFRBVVRIX1NVQ0NFU1MpO1xcbiBcXHR9IGVsc2Uge1xcbiBcXHRcXHRicGh5X2VycihkcnZyLCBcXFwiRXh0ZXJuYWwgYXV0aGVudGljYXRpb24gZmFpbGVkOiBzdGF0dXM9JWRcXFxcblxcXCIsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA2OjM5OjQ5LjA2NTI0ODUxMVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjIzMzQ1ODk0NDg2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUkNNRk1BQ1wiLFxuICAgIFwiQlJDTUZNQUNfVVNCXCIsXG4gICAgXCJDRkc4MDIxMVwiLFxuICAgIFwiTUFDODAyMTFcIixcbiAgICBcIlVTQlwiLFxuICAgIFwiRldfTE9BREVSXCIsXG4gICAgXCJGV19MT0FERVJfVVNFUl9IRUxQRVJcIixcbiAgICBcIkJSQ01EQkdcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicmNtZl9jeXdfZXh0ZXJuYWxfYXV0aFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBicmNtZl9jeXdfZXh0ZXJuYWxfYXV0aGAgaW4gdGhlIEJyb2FkY29tIEZ1bGxNQUMgV0xBTiBkcml2ZXIgKGBicmNtZm1hY2ApIHRvIGluaXRpYWxpemUgYGF1dGhfc3RhdHVzYCBhbmQgY29weSBgcG1raWRgIGlmIHByZXNlbnQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBhIGRyaXZlciB0aGF0IGlzIHJlYWNoYWJsZSB2aWEgbmV0bGluayAoYE5MODAyMTFfQ01EX0VYVEVSTkFMX0FVVEhgKSB3aGVuIHRoZSBkZXZpY2UgaXMgZW11bGF0ZWQgdmlhIFVTQiAodmhjaSkuIEVuYWJsaW5nIGBCUkNNREJHYCBhbGxvd3MgdXNpbmcgdGhlIGBpZ25vcmVfcHJvYmVfZmFpbGAgbW9kdWxlIHBhcmFtZXRlciB0byBieXBhc3MgaGFyZHdhcmUgaW5pdGlhbGl6YXRpb24gZmFpbHVyZXMgZHVyaW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDdlM2JkNDlkMTk4N2FiYTVlNmZjMDdkMjA2ZTRkNjE3NjY3NDAzYmFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyA0IDA2OjM5OjQ3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L2NvcmUuY1xuaW5kZXggODczNzU0YmU1MTc0Yi4uMmM1OWI1ZTU3OTU5YyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvY29yZS5jXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L2NvcmUuY1xuQEAgLTIwMCw3ICsyMDAsNyBAQCBicmNtZl9jeXdfZXh0ZXJuYWxfYXV0aChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIHtcbiBcdHN0cnVjdCBicmNtZl9pZiAqaWZwO1xuIFx0c3RydWN0IGJyY21mX3B1YiAqZHJ2cjtcbi1cdHN0cnVjdCBicmNtZl9hdXRoX3JlcV9zdGF0dXNfbGUgYXV0aF9zdGF0dXM7XG4rXHRzdHJ1Y3QgYnJjbWZfYXV0aF9yZXFfc3RhdHVzX2xlIGF1dGhfc3RhdHVzID0ge307XG4gXHRpbnQgcmV0ID0gMDtcbiBcbiBcdGJyY21mX2RiZyhUUkFDRSwgXCJFbnRlclxcblwiKTtcbkBAIC0yMDgsNiArMjA4LDggQEAgYnJjbWZfY3l3X2V4dGVybmFsX2F1dGgoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdGlmcCA9IG5ldGRldl9wcml2KGRldik7XG4gXHRkcnZyID0gaWZwLVx1MDAzZWRydnI7XG4gXHRpZiAocGFyYW1zLVx1MDAzZXN0YXR1cyA9PSBXTEFOX1NUQVRVU19TVUNDRVNTKSB7XG4rXHRcdGlmIChwYXJhbXMtXHUwMDNlcG1raWQpXG4rXHRcdFx0bWVtY3B5KGF1dGhfc3RhdHVzLnBta2lkLCBwYXJhbXMtXHUwMDNlcG1raWQsIFdMQU5fUE1LSURfTEVOKTtcbiBcdFx0YXV0aF9zdGF0dXMuZmxhZ3MgPSBjcHVfdG9fbGUxNihCUkNNRl9FWFRBVVRIX1NVQ0NFU1MpO1xuIFx0fSBlbHNlIHtcbiBcdFx0YnBoeV9lcnIoZHJ2ciwgXCJFeHRlcm5hbCBhdXRoZW50aWNhdGlvbiBmYWlsZWQ6IHN0YXR1cz0lZFxcblwiLFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDY6Mzk6NDkuMDY1MjUwMTYxWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQxOTAyMDg4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBCcm9hZGNvbSBXaXJlbGVzcyBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIOKAkyBsb29rcyBsaWtlIGl0J3MgdHdlYWtpbmcgYGJyY21mX2N5d19leHRlcm5hbF9hdXRoYCBpbiB0aGUgYGJyY21mbWFjYCBkcml2ZXIuIFNwZWNpZmljYWxseSwgaXQncyBhYm91dCBpbml0aWFsaXppbmcgYGF1dGhfc3RhdHVzYCBhbmQgY29weWluZyBgcGFyYW1zLVx1MDAzZXBta2lkYCBvdmVyLCBidXQgb25seSBpZiBgcGFyYW1zLVx1MDAzZXBta2lkYCBpc24ndCBudWxsLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJjYW4gSSByZWFjaCB0aGlzIGVhc2lseSBpbiBRRU1VP1wiIFRoZSBkcml2ZXIgaXMgYGJyY21mbWFjYCwgc28gaXQncyBhIEJyb2FkY29tIHdpcmVsZXNzIGRyaXZlci4gVGhlIG5leHQgcXVlc3Rpb24gSSBoYXZlIGlzLCB3aGF0J3MgdGhlIGludGVyZmFjZSDigJMgVVNCLCBTRElPLCBvciBQQ0llPyBUaGF0J3MgZ29pbmcgdG8gZGljdGF0ZSBob3cgSSBhcHByb2FjaCBmdXp6aW5nIGl0LiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgZmlsZSBmb3IgYGJyY21mbWFjYCB0byBzZWUgd2hhdCBpbnRlcmZhY2VzIGl0IHN1cHBvcnRzLCBtYXliZSBgZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWdgIGlzIGEgZ29vZCBwbGFjZSB0byBzdGFydC4gSWYgVVNCIGlzIHN1cHBvcnRlZCwgdGhlbiBJIGNhbiBkZWZpbml0ZWx5IGxldmVyYWdlIFVTQiBlbXVsYXRpb24sIHdoaWNoIGlzIGEgYmlnIHdpbiBmb3IgZnV6emluZy4gSWYgaXQncyBTRElPIG9yIFBDSWUsIEknbGwgaGF2ZSB0byBjb25zaWRlciBvdGhlciBtZXRob2RzLCBidXQgVVNCIGlzIGRlZmluaXRlbHkgdGhlIHByZWZlcnJlZCBhcHByb2FjaCBoZXJlLiBMZXQncyBkaWcgaW50byB0aGF0IEtjb25maWcgYW5kIHNlZSB3aGF0IHdlIGNhbiBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzEyLCJPdXRwdXRUb2tlbnMiOjUyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTg5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDY6Mzk6NTQuNDg0MjczNDQ2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM5MjMxNzU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJyY21mX2N5d19leHRlcm5hbF9hdXRoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmM9MTk3PXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L2NvcmUuYzoxOTg6YnJjbWZfY3l3X2V4dGVybmFsX2F1dGgoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L2NvcmUuYy0xOTktXFx0XFx0XFx0c3RydWN0IGNmZzgwMjExX2V4dGVybmFsX2F1dGhfcGFyYW1zICpwYXJhbXMpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L2NvcmUuYz0yMzQ9c3RhdGljIHZvaWQgYnJjbWZfY3l3X2dldF9jZmc4MDIxMV9vcHMoc3RydWN0IGJyY21mX3B1YiAqZHJ2cilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvY29yZS5jLTIzNi1cXHRkcnZyLVxcdTAwM2VvcHMtXFx1MDAzZW1nbXRfdHggPSBicmNtZl9jeXdfbWdtdF90eDtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L2NvcmUuYzoyMzc6XFx0ZHJ2ci1cXHUwMDNlb3BzLVxcdTAwM2VleHRlcm5hbF9hdXRoID0gYnJjbWZfY3l3X2V4dGVybmFsX2F1dGg7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmMtMjM4LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDY6Mzk6NTQuNTIzNTE0MDU1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTAwODM4NjI1ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGFscmVhZHkgZGVlcCBpbiBkcml2ZXIgZGV2ZWxvcG1lbnQgYW5kIGZhbWlsaWFyIHdpdGggdGhlIGNvZGViYXNlOlxuXG4qKkFuYWx5emluZyB0aGUgYGV4dGVybmFsX2F1dGhgIEhvb2sgZm9yIEJyb2FkY29tJ3MgRmlybXdhcmUqKlxuXG5SaWdodCwgc28gdGhlIGBicmNtZl9jeXdfZXh0ZXJuYWxfYXV0aGAgZnVuY3Rpb24gaXMgYmVpbmcgaG9va2VkIGludG8gYGRydnItXHUwMDNlb3BzLVx1MDAzZWV4dGVybmFsX2F1dGhgLiBUaGF0J3MgaW50ZXJlc3RpbmcsIGFuZCBkZWZpbml0ZWx5IG5lZWRzIGEgY2xvc2VyIGxvb2suIEkgaW1tZWRpYXRlbHkgYXNzdW1lIHRoaXMgaXMgcmVsYXRlZCB0byBzb21lIGZvcm0gb2YgZXh0ZXJuYWwgYXV0aGVudGljYXRpb24gbWVjaGFuaXNtLCBsaWtlbHkgV1BBL1dQQTIgRW50ZXJwcmlzZSBvciBzaW1pbGFyLiBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhpcyBmdW5jdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgYXV0aGVudGljYXRpb24gcHJvY2VzcyB3aXRoaW4gdGhlIGBicmNtZm1hY2AgZHJpdmVyLlxuXG5Ob3csIG15IGZvY3VzIHNoaWZ0cy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxhcmdlciBjb250ZXh0LiBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgZXh0ZXJuYWwgYXV0aGVudGljYXRpb24gaW1wbGVtZW50YXRpb24gaXMgVVNCLXNwZWNpZmljLCBvciBpZiBpdCBoYXMgd2lkZXIgYXBwbGljYWJpbGl0eSBhY3Jvc3MgdGhlIGBicmNtZm1hY2AgYXJjaGl0ZWN0dXJlLiBUaGUgbG9naWNhbCBuZXh0IHN0ZXAgaXMgdG8gcXVpY2tseSBkZXRlcm1pbmUgd2hldGhlciB0aGUgYGJyY21mbWFjYCBkcml2ZXIsIGluIGl0cyBjdXJyZW50IGNvbmZpZ3VyYXRpb24sIGFjdHVhbGx5IHN1cHBvcnRzIFVTQi4gSWYgaXQgZG9lc24ndCwgdGhlbiB0aGlzIGZ1bmN0aW9uJ3MgcHJlc2VuY2UgaXMgc29tZXdoYXQgcGVycGxleGluZywgdW5sZXNzIGl0J3MgZGVzaWduZWQgZm9yIGZ1dHVyZSBzdXBwb3J0IG9yIGFzIGEgZ2VuZXJpYyBtZWNoYW5pc20uIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSB0aGUgVVNCIHN1cHBvcnQgc3RhdHVzIHdpdGhpbiB0aGUgZHJpdmVyLiBMZXQncyBzZWUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzE5OSwiT3V0cHV0VG9rZW5zIjo0NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA2OjQwOjA0LjYwNzM3ODM0OVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MDg0NTMyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlJDTUZNQUNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZzoxOmNvbmZpZyBCUkNNRk1BQ1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnLTItXFx0dHJpc3RhdGUgXFxcIkJyb2FkY29tIEZ1bGxNQUMgV0xBTiBkcml2ZXJcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZy0xMC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZzoxMTpjb25maWcgQlJDTUZNQUNfUFJPVE9fQkNEQ1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnLTEyLVxcdGJvb2xcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZy0xMy1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZzoxNDpjb25maWcgQlJDTUZNQUNfUFJPVE9fTVNHQlVGXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWctMTUtXFx0Ym9vbFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnLTE2LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnOjE3OmNvbmZpZyBCUkNNRk1BQ19TRElPXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWctMTgtXFx0Ym9vbCBcXFwiU0RJTyBidXMgaW50ZXJmYWNlIHN1cHBvcnQgZm9yIEZ1bGxNQUMgZHJpdmVyXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWctMjgtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWc6Mjk6Y29uZmlnIEJSQ01GTUFDX1VTQlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnLTMwLVxcdGJvb2wgXFxcIlVTQiBidXMgaW50ZXJmYWNlIHN1cHBvcnQgZm9yIEZ1bGxNQUMgZHJpdmVyXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWctMzktXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWc6NDA6Y29uZmlnIEJSQ01GTUFDX1BDSUVcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZy00MS1cXHRib29sIFxcXCJQQ0lFIGJ1cyBpbnRlcmZhY2Ugc3VwcG9ydCBmb3IgRnVsbE1BQyBkcml2ZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA2OjQwOjA0LjY0ODIyNzUxOFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1MDA4NTM4NzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZSwgdGhlIHN5c3RlbSB0ZWxscyBtZSB0aGF0ICoqQlJDTUZNQUNfVVNCIGlzIHN1cHBvcnRlZC4gR29vZC4qKiBUaGF0J3MgYSBzb2xpZCBzdGFydGluZyBwb2ludC4gTm93LCB0aGUga2V5IHF1ZXN0aW9uIGJlY29tZXMsIGNhbiB3ZSBhY3R1YWxseSByZWFjaCBgYnJjbWZfY3l3X2V4dGVybmFsX2F1dGhgIHRocm91Z2ggdGhlIFVTQiBpbnRlcmZhY2U/IFdlIG5lZWQgdG8gYXNjZXJ0YWluIHRoYXQgY29ubmVjdGlvbiBwYXRoLiBBbmQgdG8gZG8gdGhhdCwgSSBuZWVkIHRvIHRyYWNlIGl0cyB1c2FnZS4gU3BlY2lmaWNhbGx5LCB3aGVyZSBpcyBgYnJjbWZfY3l3X2dldF9jZmc4MDIxMV9vcHNgIGJlaW5nIGNhbGxlZCBmcm9tPyBUaGF0IGZ1bmN0aW9uIGNhbGwgaG9sZHMgdGhlIGtleSB0byBtYXBwaW5nIHRoZSBpbnRlcmFjdGlvbnMgaW52b2x2ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxNjIsIk91dHB1dFRva2VucyI6NTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNjo0MDowOC4xNDkwODM0NjJaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDIyMTQzNzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnJjbWZfY3l3X2dldF9jZmc4MDIxMV9vcHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L2NvcmUuYz0xOTg9YnJjbWZfY3l3X2V4dGVybmFsX2F1dGgoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvY29yZS5jLTIzMy1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L2NvcmUuYzoyMzQ6c3RhdGljIHZvaWQgYnJjbWZfY3l3X2dldF9jZmc4MDIxMV9vcHMoc3RydWN0IGJyY21mX3B1YiAqZHJ2cilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L2NvcmUuYy0yMzUte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmM9Mzc0PWNvbnN0IHN0cnVjdCBicmNtZl9md3ZpZF9vcHMgYnJjbWZfY3l3X29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvY29yZS5jLTM3Ny1cXHQuYWN0aXZhdGVfZXZlbnRzID0gYnJjbWZfY3l3X2FjdGl2YXRlX2V2ZW50cyxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L2NvcmUuYzozNzg6XFx0LmdldF9jZmc4MDIxMV9vcHMgPSBicmNtZl9jeXdfZ2V0X2NmZzgwMjExX29wcyxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L2NvcmUuYy0zNzktXFx0LnJlZ2lzdGVyX2V2ZW50X2hhbmRsZXJzID0gYnJjbWZfY3l3X3JlZ2lzdGVyX2V2ZW50X2hhbmRsZXJzLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNjo0MDowOC4xOTEzMDIzNjFaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTk3NTA1ODMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKldoZXJlIERvZXMgYGJyY21mX2N5d19vcHNgIEFjdHVhbGx5IExpdmU/KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgYnJjbWZfY3l3X29wc2AgdGhpbmcsIGFuZCBteSBmaXJzdCB0aG91Z2h0IGlzLCBcIldoZXJlICpleGFjdGx5KiBpcyB0aGlzIGRyaXZlciBpbnRlcmZhY2UgdXRpbGl6ZWQ/XCIgSXQncyBub3QgZW5vdWdoIHRvIGtub3cgaXQgKmV4aXN0cyosIEkgbmVlZCB0byBxdWlja2x5IGVzdGFibGlzaCB0aGUgc2NvcGUgb2YgaXRzIHVzYWdlLiBJIGltbWVkaWF0ZWx5IG5lZWQgdG8gY29ubmVjdCB0aGUgZG90cyAtIGlzIHRoaXMgb25seSBpbnNpZGUgdGhlIEJyb2FkY29tIFdpLUZpIGRyaXZlciwgb3IgZG9lcyBpdCBwb3RlbnRpYWxseSBoYXZlIGJyb2FkZXIgaW1wbGljYXRpb25zIGFjcm9zcyB0aGUgc3lzdGVtPyBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIHZhcmlvdXMga2VybmVsIG1vZHVsZXMsIG5ldHdvcmsgaW50ZXJmYWNlcywgYW5kIG1heWJlIGV2ZW4gdXNlci1zcGFjZSB1dGlsaXRpZXMgdGhhdCBjb3VsZCBiZSB0b3VjaGluZyB0aGlzLiBNeSBnb2FsIGlzIHRvIHF1aWNrbHkgbWFwIG91dCB0aGUgZnVuY3Rpb24gY2FsbHMgYW5kIGRlcGVuZGVuY2llcyB0byBnZXQgYSBtZW50YWwgcGljdHVyZSBvZiBpdHMgcm9sZSBpbiB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUuIEnigJltIHRoaW5raW5nIEkgd2lsbCBuZWVkIHRvIHVzZSBhIGdyZXAgb3IgZmluZCBjb21tYW5kIHRvIHNlZSB0aGUgaW5jbHVkZSBmaWxlcyB0aGF0IHJlZmVyZW5jZSB0aGUgc3ltYm9scy4gSXQncyBhIGZ1bmRhbWVudGFsIHF1ZXN0aW9uIHRoYXQgZGljdGF0ZXMgaG93IEkgc2hvdWxkIGFwcHJvYWNoIGZ1cnRoZXIgYW5hbHlzaXMuIFdpdGhvdXQgdGhpcyBiYXNpYyBjb250ZXh0LCBhbnkgZGVlcGVyIGRpdmUgd291bGQgYmUganVzdCBzcGlubmluZyBteSB3aGVlbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ4MzYsIk91dHB1dFRva2VucyI6NTAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNjo0MDoxMi43ODg4MTA4NDFaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQwNzMwNTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJyY21mX2N5d19vcHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L2NvcmUuYz0zNjI9c3RhdGljIHZvaWQgYnJjbWZfY3l3X3JlZ2lzdGVyX2V2ZW50X2hhbmRsZXJzKHN0cnVjdCBicmNtZl9wdWIgKmRydnIpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L2NvcmUuYy0zNzMtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmM6Mzc0OmNvbnN0IHN0cnVjdCBicmNtZl9md3ZpZF9vcHMgYnJjbWZfY3l3X29wcyA9IHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L2NvcmUuYy0zNzUtXFx0LnNldF9zYWVfcGFzc3dvcmQgPSBicmNtZl9jeXdfc2V0X3NhZV9wd2QsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L21vZHVsZS5jPTEyPXN0YXRpYyBpbnQgX19pbml0IGJyY21mX2N5d19pbml0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L21vZHVsZS5jLTE0LVxcdHJldHVybiBicmNtZl9md3ZpZF9yZWdpc3Rlcl92ZW5kb3IoQlJDTUZfRldWRU5ET1JfQ1lXLCBUSElTX01PRFVMRSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L21vZHVsZS5jOjE1OlxcdFxcdFxcdFxcdFxcdCAgIFxcdTAwMjZicmNtZl9jeXdfb3BzKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L21vZHVsZS5jLTE2LX1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvdm9wcy5oLTctXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy92b3BzLmg6ODpleHRlcm4gY29uc3Qgc3RydWN0IGJyY21mX2Z3dmlkX29wcyBicmNtZl9jeXdfb3BzO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvdm9wcy5oOjk6I2RlZmluZSBDWVdfVk9QU1xcdChcXHUwMDI2YnJjbWZfY3l3X29wcylcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L3ZvcHMuaC0xMC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDY6NDA6MTIuODI5NTQ3MDlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDExNzU0MzI0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJSQ01GIFdpLUZpIERyaXZlcidzIEF1dGhlbnRpY2F0aW9uIEZsb3cqKlxuXG5Pa2F5LCBzbyBgYnJjbWZfY3l3X29wc2AgaXMgcmVnaXN0ZXJlZCwgc3BlY2lmaWNhbGx5IGZvciB0aGF0IGBCUkNNRl9GV1ZFTkRPUl9DWVdgIGZpcm13YXJlIHZlbmRvci4gUmlnaHQsIFdpLUZpIGRyaXZlci4gVGhlIGNvZGUgY2hhbmdlIGlzIHBpbm5lZCB0byBgYnJjbWZfY3l3X2V4dGVybmFsX2F1dGhgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJDYW4gdGhpcyBiZSB0cmlnZ2VyZWQgdGhyb3VnaCB0aGUgc3RhbmRhcmQgbWFjODAyMTEvY2ZnODAyMTEgaW50ZXJmYWNlcz9cIiBBIHF1aWNrIHNjYW4gY29uZmlybXMgaXQ7IGBleHRlcm5hbF9hdXRoYCAqaXMqIGEgY2ZnODAyMTEgb3BlcmF0aW9uLiBHb29kLlxuXG5XYWl0IGEgc2Vjb25kLCBsZXQgbWUgc29saWRpZnkgdGhpcy4uLiBgZHJ2ci1cdTAwM2VvcHMtXHUwMDNlZXh0ZXJuYWxfYXV0aGAgaXMgYWN0dWFsbHkgYXNzaWduZWQgdG8gcG9pbnQgdG8gb3VyIGBicmNtZl9jeXdfZXh0ZXJuYWxfYXV0aGAgZnVuY3Rpb24uIE5vdywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHBpbnBvaW50IHdoZXJlIGBkcnZyLVx1MDAzZW9wcy1cdTAwM2VleHRlcm5hbF9hdXRoYCBpcyAqY2FsbGVkKiB0byB1bmRlcnN0YW5kIHRoZSBkYXRhIGZsb3cuIExldCdzIHRyYWNlIHRob3NlIGNhbGwgc2l0ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU3MTMsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDY6NDA6MTYuOTQ3MDkyNDk1WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MDg1OTQxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJleHRlcm5hbF9hdXRoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmM9MTk3PXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L2NvcmUuYzoxOTg6YnJjbWZfY3l3X2V4dGVybmFsX2F1dGgoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L2NvcmUuYzoxOTk6XFx0XFx0XFx0c3RydWN0IGNmZzgwMjExX2V4dGVybmFsX2F1dGhfcGFyYW1zICpwYXJhbXMpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmMtMjAwLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvY29yZS5jPTIzND1zdGF0aWMgdm9pZCBicmNtZl9jeXdfZ2V0X2NmZzgwMjExX29wcyhzdHJ1Y3QgYnJjbWZfcHViICpkcnZyKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmMtMjM2LVxcdGRydnItXFx1MDAzZW9wcy1cXHUwMDNlbWdtdF90eCA9IGJyY21mX2N5d19tZ210X3R4O1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvY29yZS5jOjIzNzpcXHRkcnZyLVxcdTAwM2VvcHMtXFx1MDAzZWV4dGVybmFsX2F1dGggPSBicmNtZl9jeXdfZXh0ZXJuYWxfYXV0aDtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L2NvcmUuYy0yMzgtfVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmM9MjQxPWJyY21mX2N5d19ub3RpZnlfZXh0X2F1dGhfcmVxKHN0cnVjdCBicmNtZl9pZiAqaWZwLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmMtMjQ0LVxcdHN0cnVjdCBicmNtZl9wdWIgKmRydnIgPSBpZnAtXFx1MDAzZWRydnI7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmM6MjQ1OlxcdHN0cnVjdCBjZmc4MDIxMV9leHRlcm5hbF9hdXRoX3BhcmFtcyBwYXJhbXM7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmMtMjQ2LVxcdHN0cnVjdCBicmNtZl9hdXRoX3JlcV9zdGF0dXNfbGUgKmF1dGhfcmVxID1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvY29yZS5jLTI2Ni1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L2NvcmUuYzoyNjc6XFx0ZXJyID0gY2ZnODAyMTFfZXh0ZXJuYWxfYXV0aF9yZXF1ZXN0KGlmcC1cXHUwMDNlbmRldiwgXFx1MDAyNnBhcmFtcywgR0ZQX0tFUk5FTCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmMtMjY4LVxcdGlmIChlcnIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA2OjQwOjE2Ljk4Nzk1NjE3NFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjQwMzY4NzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBkZWVwIGluIHRoZSB3ZWVkcyBvZiB3aXJlbGVzcyBkcml2ZXIgZGV2ZWxvcG1lbnQ6XG5cbioqSW5pdGlhbCBJbnZlc3RpZ2F0aW9uIGludG8gYSBjZmc4MDIxMSBPcGVyYXRpb24qKlxuXG5SaWdodCwgc28gYGRydnItXHUwMDNlb3BzLVx1MDAzZWV4dGVybmFsX2F1dGhgLiBUaGF0J3MgaW1tZWRpYXRlbHkgdHJpZ2dlcmluZyBhIGNmZzgwMjExIGZsYWcuIEkga25vdyB0aGF0IG1lYW5zIGl0J3Mgb25lIG9mIHRoZSBzdGFuZGFyZGl6ZWQgb3BlcmF0aW9ucyB0aGF0IHRoZSBjZmc4MDIxMSBsYXllciBkZWZpbmVzIGZvciB3aXJlbGVzcyBkcml2ZXJzLiBPa2F5LCB0aGUgY3JpdGljYWwgc3RlcCBpcyB0byBxdWlja2x5IGNvbmZpcm0gdGhlIGFzc2lnbm1lbnQgLSB3aGVyZSBpcyB0aGlzIGBleHRlcm5hbF9hdXRoYCBvcGVyYXRpb24gYWN0dWFsbHkgaG9va2VkIHVwPyBUaW1lIHRvIGRpdmUgaW50byB0aGUgc291cmNlIGNvZGUsIHNwZWNpZmljYWxseSBgZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmNgLiBUaGF0J3Mgd2hlcmUgSSdtIGV4cGVjdGluZyB0byBmaW5kIHRoZSBjb25uZWN0aW9uIGJldHdlZW4gd2hhdCdzIGluIHRoZSBkcml2ZXIncyBvcGVyYXRpb24gc3RydWN0dXJlIGFuZCB0aGUgY2ZnODAyMTEgZnJhbWV3b3JrIGl0c2VsZi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBgZXh0ZXJuYWxfYXV0aGAgaXMgcHJvcGVybHkgbGlua2VkIHdpdGggdGhlIGBjZmc4MDIxMV9vcHNgIHN0cnVjdHVyZS4gVGhpcyBpcyBhIGNydWNpYWwgZmlyc3Qgc3RlcCBpbiB1bmRlcnN0YW5kaW5nIGhvdyB0aGlzIGV4dGVybmFsIGF1dGhlbnRpY2F0aW9uIGZ1bmN0aW9uYWxpdHkgaXMgaW50ZWdyYXRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6Njg1OSwiT3V0cHV0VG9rZW5zIjo1MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA2OjQwOjIwLjYyODMyODcyM1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzk4NDQyNzksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImV4dGVybmFsX2F1dGhcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA2OjQwOjIwLjY2ODE4MDc2MloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjM1NDI4ODAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBpc3N1ZTpcblxuKipEZWx2aW5nIGludG8gdGhlIERyaXZlciBPcGVyYXRpb25zIFN0cnVjdHVyZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYGRydnItXHUwMDNlb3BzYCBzdHJ1Y3R1cmUsIGFuZCBteSBndXQgdGVsbHMgbWUgaXQncyBoaWdobHkgbGlrZWx5IHBvaW50aW5nIHRvIGBjZmc4MDIxMV9vcHNgLiBHaXZlbiB0aGUgY29udGV4dCwgdGhhdCdzIHRoZSBtb3N0IHByb2JhYmxlIGltcGxlbWVudGF0aW9uLiBUbyBjb25maXJtIHRoaXMsIEkgbmVlZCB0byBzZWUgZXhhY3RseSB3aGVyZSBgZHJ2ci1cdTAwM2VvcHNgIGlzIGRlZmluZWQuIEtub3dpbmcgaXRzIGRlY2xhcmF0aW9uIHdpbGwgY2xhcmlmeSB0aGUgaW50ZW5kZWQgcHVycG9zZSBhbmQgY29uZmlybSBteSBpbml0aWFsIGh5cG90aGVzaXMgYWJvdXQgaXRzIHR5cGUuIEknbGwgdHJhY2UgYmFjayB0byB0aGUgZGVmaW5pdGlvbiBhbmQgdmVyaWZ5IGlmIEknbSBvbiB0aGUgcmlnaHQgdHJhY2sgYmVmb3JlIGdvaW5nIGFueSBmdXJ0aGVyIGRvd24gdGhpcyByYWJiaXQgaG9sZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzI0MywiT3V0cHV0VG9rZW5zIjo0NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA2OjQwOjIzLjkwMzYxMTYyNFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDExMTgxOTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwib3BzLVxcdTAwM2VleHRlcm5hbF9hdXRoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmM9MjM0PXN0YXRpYyB2b2lkIGJyY21mX2N5d19nZXRfY2ZnODAyMTFfb3BzKHN0cnVjdCBicmNtZl9wdWIgKmRydnIpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L2NvcmUuYy0yMzYtXFx0ZHJ2ci1cXHUwMDNlb3BzLVxcdTAwM2VtZ210X3R4ID0gYnJjbWZfY3l3X21nbXRfdHg7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmM6MjM3OlxcdGRydnItXFx1MDAzZW9wcy1cXHUwMDNlZXh0ZXJuYWxfYXV0aCA9IGJyY21mX2N5d19leHRlcm5hbF9hdXRoO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvY29yZS5jLTIzOC19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA2OjQwOjIzLjk0NDczNTE4M1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3ODc1NDc3MDUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIERyaXZlciBPcGVyYXRpb25zIFN0cnVjdHVyZSoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEZpcnN0IHRoaW5ncyBmaXJzdCwgbGV0J3MgZGlzc2VjdCB3aGF0J3MgZ29pbmcgb24gdW5kZXIgdGhlIGhvb2QuIE15IGluaXRpYWwgZm9jdXMgaXMgYWx3YXlzIG9uIHRoZSBmdW5kYW1lbnRhbCBidWlsZGluZyBibG9ja3Mgb2YgdGhpcyBkcml2ZXIgaW1wbGVtZW50YXRpb24uIFNvLCBteSBtaW5kIGltbWVkaWF0ZWx5IHplcm9lcyBpbiBvbiB0aGF0IGBkcnZyLVx1MDAzZW9wc2Agc3RydWN0dXJlLiBJIG5lZWQgdG8gZXhwbGljaXRseSBjaGVjayBpdHMgdHlwZS4gVW5kZXJzdGFuZGluZyB0aGUgc3BlY2lmaWMgdHlwZSDigJMgd2hldGhlciBpdCdzIGEgYHN0cnVjdGAgSSBkZWZpbmVkLCBzb21ldGhpbmcgaW5oZXJpdGVkLCBvciBhbiBvcGFxdWUgcG9pbnRlciBvZiBzb21lIGtpbmQg4oCTIGlzIGFic29sdXRlbHkgY3JpdGljYWwuIFRoaXMgdHlwZSBkaWN0YXRlcyB0aGUgaW50ZXJmYWNlLCB0aGUgbWV0aG9kcyBhdmFpbGFibGUsIHRoZSBlbnRpcmUgZnJhbWV3b3JrIHRocm91Z2ggd2hpY2ggdGhlIGRyaXZlciBpbnRlcmFjdHMgd2l0aCB0aGUgc3lzdGVtLiBXaXRob3V0IGEgZmlybSBncmFzcCBvZiB0aGUgYGRydnItXHUwMDNlb3BzYCB0eXBlLCBhbnkgZnVydGhlciBhbmFseXNpcyBpcyBqdXN0IGd1ZXNzd29yay4gS25vd2luZyB0aGlzIHR5cGUgd2lsbCBpbmZvcm0gbWUgb2YgdGhlIG5leHQgc3RlcHMgdG8gdGFrZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzY4NywiT3V0cHV0VG9rZW5zIjo1NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA2OjQwOjMxLjgyMDIxNTAzM1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQzNDU3NDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IGNmZzgwMjExX29wcyBcXFxcKm9wcztcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYz02MDU1PXN0cnVjdCBjZmc4MDIxMV9vcHMgKmJyY21mX2NmZzgwMjExX2dldF9vcHMoc3RydWN0IGJyY21mX21wX2RldmljZSAqc2V0dGluZ3MpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtNjA1Ni17XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM6NjA1NzpcXHRzdHJ1Y3QgY2ZnODAyMTFfb3BzICpvcHM7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtNjA1OC1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmM9MTMzMD1pbnQgYnJjbWZfYWxsb2Moc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgYnJjbWZfbXBfZGV2aWNlICpzZXR0aW5ncylcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmMtMTMzMi1cXHRzdHJ1Y3Qgd2lwaHkgKndpcGh5O1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmM6MTMzMzpcXHRzdHJ1Y3QgY2ZnODAyMTFfb3BzICpvcHM7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuYy0xMzM0LVxcdHN0cnVjdCBicmNtZl9wdWIgKmRydnIgPSBOVUxMO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuaD0xMDE9c3RydWN0IGJyY21mX3B1YiB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5oLTEwNS1cXHRzdHJ1Y3Qgd2lwaHkgKndpcGh5O1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmg6MTA2OlxcdHN0cnVjdCBjZmc4MDIxMV9vcHMgKm9wcztcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5oLTEwNy1cXHRzdHJ1Y3QgYnJjbWZfY2ZnODAyMTFfaW5mbyAqY29uZmlnO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNjo0MDozMS44NjQ1Njc1MDJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzQ5OTMwNDIxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIHRoZSBgYnJjbWZfY3l3X2V4dGVybmFsX2F1dGhgIEZ1bmN0aW9uKipcblxuT2theSwgc28gYGRydnItXHUwMDNlb3BzYCBpcyBkZWZpbml0ZWx5IGEgYHN0cnVjdCBjZmc4MDIxMV9vcHMgKm9wc2AsIG1lYW5pbmcgYGJyY21mX2N5d19leHRlcm5hbF9hdXRoYCBpcyByZWdpc3RlcmVkIGFzIGEgY2ZnODAyMTEgb3BlcmF0aW9uLiBUaGF0J3MgZ29vZDsgY2ZnODAyMTEgb3BlcmF0aW9ucyBhcmUgZnV6emVhYmxlIHZpYSBuZXRsaW5rLCBzcGVjaWZpY2FsbHkgbmw4MDIxMS4gVGhlIGltbWVkaWF0ZSBnb2FsIGlzIHRvIGZpZ3VyZSBvdXQgaG93IHRvIGRvIHNvLlxuXG5CdXQsIGEgcXVpY2sgcmVhbGl0eSBjaGVjayDigJMgdGhlIGRyaXZlciBpbiBxdWVzdGlvbiBpcyBgYnJjbWZtYWNgLiBUbyBldmVuICpyZWFjaCogdGhhdCBjb2RlLCB0aGUgZHJpdmVyIG5lZWRzIHRvIGJlIGxvYWRlZCwgYW5kIGEgZGV2aWNlIG5lZWRzIHRvIGJlIHByZXNlbnQuIFNvIHRoZSBmdXp6aW5nIHNldHVwIHdpbGwgcmVxdWlyZSBhIGJpdCBtb3JlIHdvcmsgdGhhbiBzaW1wbHkgY3JhZnRpbmcgc29tZSBuZXRsaW5rIG1lc3NhZ2VzLlxuXG5UaGUgcXVlc3Rpb24gdGhlbiBiZWNvbWVzOiBjYW4gSSBlbXVsYXRlIGEgYGJyY21mbWFjYCBkZXZpY2UgaW4gUUVNVT8gVHlwaWNhbGx5LCBgYnJjbWZtYWNgIHJlbGllcyBvbiBhIHBoeXNpY2FsIFNESU8sIFVTQiwgb3IgUENJZSBkZXZpY2UgYW5kIGl0cyBhc3NvY2lhdGVkIGZpcm13YXJlLiBgbWFjODAyMTFfaHdzaW1gIGlzbid0IGdvaW5nIHRvIGN1dCBpdCwgc2luY2UgdGhhdCBlbXVsYXRlcyBtYWM4MDIxMSBkZXZpY2VzLCB3aGljaCBpcyBhIGRpZmZlcmVudCBiZWFzdCBmcm9tIGBicmNtZm1hY2AsIGEgRnVsbE1BQyBkcml2ZXIuXG5cblRoZSBuZXh0IHF1ZXN0aW9uOiBkb2VzIHN5emthbGxlciBoYXZlIGEgbWVhbnMgdG8gZW11bGF0ZSBgYnJjbWZtYWNgIHZpYSBVU0I/IFN5emthbGxlciAqZG9lcyogaGF2ZSBVU0IgZnV6emluZyBjYXBhYmlsaXRpZXMgdmlhIGB2aGNpYCwgd2hpY2ggbWVhbnMgaXQgY2FuIGVtdWxhdGUgVVNCIGRldmljZXMuIElmIGBicmNtZm1hY2Agc3VwcG9ydHMgVVNCLCBzcGVjaWZpY2FsbHkgaWYgYEJSQ01GTUFDX1VTQmAgaXMgZW5hYmxlZCwgdGhlbiBzeXprYWxsZXIgY291bGQgcG90ZW50aWFsbHkgZW11bGF0ZSBhIEJyb2FkY29tIFVTQiBXaS1GaSBkb25nbGUsIHdoaWNoIHdvdWxkIGJlIGlkZWFsLlxuXG5MZXQncyBjaGVjayBpZiBgQlJDTUZNQUNfVVNCYCBpcyBlbmFibGVkIGluIHN5emthbGxlcidzIHR5cGljYWwgY29uZmlndXJhdGlvbnMsIG9yIGlmIGl0IGNhbiBiZSBlbmFibGVkLiBJdCB0dXJucyBvdXQgdGhhdCBlbmFibGluZyBpdCBpcyBhIHZpYWJsZSBvcHRpb24uIE5vdywgaXQncyB0aW1lIHRvIGNoZWNrIGBkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmNgIHRvIGNvbmZpcm0gdGhhdCB0aGlzIGRyaXZlciBpcyBpbmRlZWQgYSBVU0IgZHJpdmVyLiBUaGlzIHdpbGwgY29uZmlybSB0aGUgdmlhYmlsaXR5IG9mIHRoaXMgZnV6emluZyBzdHJhdGVneS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODUwNiwiT3V0cHV0VG9rZW5zIjo0OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNjo0MDozOS4zNjM4NzQwNzVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxMTA3Nzk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJyY21mX3VzYl9wcm9iZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYz0xMTY1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnJjbWZfYnVzX29wcyBicmNtZl91c2JfYnVzX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xMTc1LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYzoxMTc2OnN0YXRpYyB2b2lkIGJyY21mX3VzYl9wcm9iZV9waGFzZTIoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgcmV0LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xMTc3LVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBicmNtZl9md19yZXF1ZXN0ICpmd3JlcSlcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYz0xMjI0PWJyY21mX3VzYl9wcmVwYXJlX2Z3X3JlcXVlc3Qoc3RydWN0IGJyY21mX3VzYmRldl9pbmZvICpkZXZpbmZvKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTEyNDMtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jOjEyNDQ6c3RhdGljIGludCBicmNtZl91c2JfcHJvYmVfY2Ioc3RydWN0IGJyY21mX3VzYmRldl9pbmZvICpkZXZpbmZvLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xMjQ1LVxcdFxcdFxcdCAgICAgIGVudW0gYnJjbWZfZnd2ZW5kb3IgZnd2aWQpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtMTMwOC1cXHQvKiByZXF1ZXN0IGZpcm13YXJlIGhlcmUgKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM6MTMwOTpcXHRyZXQgPSBicmNtZl9md19nZXRfZmlybXdhcmVzKGRldiwgZndyZXEsIGJyY21mX3VzYl9wcm9iZV9waGFzZTIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xMzEwLVxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYz0xMzQ0PXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM6MTM0NTpicmNtZl91c2JfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZClcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtMTM0Ni17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtMTQ0NS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM6MTQ0NjpcXHRyZXQgPSBicmNtZl91c2JfcHJvYmVfY2IoZGV2aW5mbywgaWQtXFx1MDAzZWRyaXZlcl9pbmZvKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtMTQ0Ny1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jPTE1MTQ9c3RhdGljIGludCBicmNtZl91c2JfcmVzZXRfcmVzdW1lKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTE1MjYtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jOjE1Mjc6XFx0cmV0ID0gYnJjbWZfZndfZ2V0X2Zpcm13YXJlcyhcXHUwMDI2dXNiLVxcdTAwM2VkZXYsIGZ3cmVxLCBicmNtZl91c2JfcHJvYmVfcGhhc2UyKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtMTUyOC1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYz0xNTY4PXN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBicmNtZl91c2JkcnZyID0ge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xNTY5LVxcdC5uYW1lID0gS0JVSUxEX01PRE5BTUUsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jOjE1NzA6XFx0LnByb2JlID0gYnJjbWZfdXNiX3Byb2JlLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xNTcxLVxcdC5kaXNjb25uZWN0ID0gYnJjbWZfdXNiX2Rpc2Nvbm5lY3QsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA2OjQwOjM5LjQwNDk4NTQwM1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NjM2NzY5MzA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYnJjbWZtYWMgRHJpdmVyIFByb2JlIFNlcXVlbmNlKipcblxuT2theSwgc28gYGJyY21mX3VzYl9wcm9iZWAgZGVmaW5pdGVseSBleGlzdHMuIFJpZ2h0LCBhbmQgaXQgbG9va3MgbGlrZSBgYnJjbWZfdXNiX3Byb2JlYCBjYWxscyBgYnJjbWZfZndfZ2V0X2Zpcm13YXJlc2AsIHdoaWNoLCBhcyB0aGUgbmFtZSBzdWdnZXN0cywgcmVxdWVzdHMgZmlybXdhcmUuIEhtbSwgaWYgdGhlIGZpcm13YXJlIGlzbid0IHByZXNlbnQsIHRoYXQgY291bGQgY2F1c2UgaXNzdWVzLiBTcGVjaWZpY2FsbHksIGl0IHNlZW1zIGxpa2UgYGJyY21mX3VzYl9wcm9iZV9waGFzZTJgIG1pZ2h0IG5vdCBldmVuIGJlIGNhbGxlZCwgb3IgcG90ZW50aWFsbHkgZmFpbCBpZiBpdCAqaXMqIGNhbGxlZCB3aXRob3V0IHRoZSBmaXJtd2FyZS4gQSBrZXkgcXVlc3Rpb24gaGVyZSBpcyB3aGV0aGVyIHN5emthbGxlciBwcm92aWRlcyB0aGUgbmVjZXNzYXJ5IGZpcm13YXJlIGZvciBgYnJjbWZtYWNgLlxuXG5JIGtub3cgc3l6a2FsbGVyICpjYW4qIGludGVyY2VwdCBmaXJtd2FyZSByZXF1ZXN0cywgYXNzdW1pbmcgYENPTkZJR19GV19MT0FERVJfVVNFUl9IRUxQRVJgIGlzIGVuYWJsZWQsIGJ1dCB0eXBpY2FsbHksIGl0J3MgY2xlYW5lciwgYW5kIG1vcmUgcm9idXN0LCBpZiB0aGUgZHJpdmVyIGRvZXNuJ3QgaGF2ZSBhIGhhcmQgZGVwZW5kZW5jeSBvbiB0aGUgZmlybXdhcmUgdG8gcmVhY2ggYSBjZXJ0YWluIGNvZGUgcGF0aCwgb3IgaWYgdGhlIGZpcm13YXJlIGNhbiBiZSBlYXNpbHkgbW9ja2VkIGZvciB0ZXN0aW5nLlxuXG5Ob3csIEknbSB0aGlua2luZyBhYm91dCBgYnJjbWZfY3l3X2V4dGVybmFsX2F1dGhgLiBJIHJlY2FsbCB0aGF0J3MgY2FsbGVkIHRocm91Z2ggYGNmZzgwMjExYCBvcGVyYXRpb25zLCByaWdodD8gVG8gaW50ZXJhY3Qgd2l0aCBgY2ZnODAyMTFgLCB0aGUgZHJpdmVyIGhhcyB0byBzdWNjZXNzZnVsbHkgcHJvYmUgKmFuZCogcmVnaXN0ZXIgdGhlIHdpcGh5LiBTbywgdGhhdCdzIHdoYXQgSSBuZWVkIHRvIGxvb2sgaW50byBub3cuIERvZXMgYGJyY21mX3VzYl9wcm9iZV9waGFzZTJgIGhhbmRsZSB0aGUgd2lwaHkgcmVnaXN0cmF0aW9uPyBJIG5lZWQgdG8gY2hlY2sgdGhlIGNvZGUgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNTEwLCJPdXRwdXRUb2tlbnMiOjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA2OjQwOjQ2LjA0MTc1NjY4MloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgzMjIzNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwid2lwaHlfcmVnaXN0ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYz04MzMyPXN0cnVjdCBicmNtZl9jZmc4MDIxMV9pbmZvICpicmNtZl9jZmc4MDIxMV9hdHRhY2goc3RydWN0IGJyY21mX3B1YiAqZHJ2cixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jLTg0MTYtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM6ODQxNzpcXHRlcnIgPSB3aXBoeV9yZWdpc3Rlcih3aXBoeSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtODQxOC1cXHRpZiAoZXJyIFxcdTAwM2MgMCkge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtODQyOC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYzo4NDI5OlxcdC8qIElmIGNmZzgwMjExIGRpZG4ndCBkaXNhYmxlIDQwTUh6IEhUIENBUCBpbiB3aXBoeV9yZWdpc3RlcigpLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jLTg0MzAtXFx0ICogc2V0dXAgNDBNSHogaW4gMkdIeiBiYW5kIGFuZCBlbmFibGUgT0JTUyBzY2FubmluZy5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDY6NDA6NDYuMDkwMDgzMDkxWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwODg0MjQ3NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKlRyYWNpbmcgdGhlIERyaXZlciBBdHRhY2htZW50KipcblxuT2theSwgc28gYGJyY21mX2NmZzgwMjExX2F0dGFjaGAgaXMgYSBrZXkgZnVuY3Rpb24gaGVyZS4gVGhlIGluaXRpYWwgY2x1ZSBpcyB0aGF0IGl0J3MgdGhlIGNhbGxlciBvZiBgd2lwaHlfcmVnaXN0ZXJgLCBhbmQgdGhhdCdzIHVzdWFsbHkgYSBwcmV0dHkgY2VudHJhbCBwb2ludCBpbiBhIHdpcmVsZXNzIGRyaXZlcidzIGluaXRpYWxpemF0aW9uLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBjb250ZXh0LiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byB0cmFjZSBiYWNrIGZyb20gYGJyY21mX2NmZzgwMjExX2F0dGFjaGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0ICp3aG8qIGlzIGNhbGxpbmcgKml0Ki4gVGhhdCdzIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaG93IHRoaXMgZHJpdmVyIGlzIGJlaW5nIGJyb3VnaHQgaW50byB0aGUgc3lzdGVtLiBLbm93aW5nIHRoZSBjYWxsZXIgdGVsbHMgbWUgd2hhdCB0cmlnZ2VycyB0aGlzIGF0dGFjaG1lbnQgcHJvY2Vzcy4gSSBuZWVkIHRvIGZpbmQgdGhlIGNhbGwgc2l0ZXMgZm9yIGBicmNtZl9jZmc4MDIxMV9hdHRhY2hgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTQ1OCwiT3V0cHV0VG9rZW5zIjo1NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA2OjQwOjUwLjE3ODUwOTg1N1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM3MzgzNjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnJjbWZfY2ZnODAyMTFfYXR0YWNoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM9ODMwNj1zdGF0aWMgdm9pZCBicmNtZl9mcmVlX3dpcGh5KHN0cnVjdCB3aXBoeSAqd2lwaHkpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy04MzMxLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jOjgzMzI6c3RydWN0IGJyY21mX2NmZzgwMjExX2luZm8gKmJyY21mX2NmZzgwMjExX2F0dGFjaChzdHJ1Y3QgYnJjbWZfcHViICpkcnZyLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jLTgzMzMtXFx0XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgY2ZnODAyMTFfb3BzICpvcHMsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuaD00NjE9YnJjbWZfY2ZnODAyMTFfY29ubmVjdF9pbmZvICpjZmdfdG9fY29ubihzdHJ1Y3QgYnJjbWZfY2ZnODAyMTFfaW5mbyAqY2ZnKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmgtNDY1LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5oOjQ2NjpzdHJ1Y3QgYnJjbWZfY2ZnODAyMTFfaW5mbyAqYnJjbWZfY2ZnODAyMTFfYXR0YWNoKHN0cnVjdCBicmNtZl9wdWIgKmRydnIsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmgtNDY3LVxcdFxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IGNmZzgwMjExX29wcyAqb3BzLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuYz0xMjI5PXN0YXRpYyBpbnQgYnJjbWZfYnVzX3N0YXJ0ZWQoc3RydWN0IGJyY21mX3B1YiAqZHJ2ciwgc3RydWN0IGNmZzgwMjExX29wcyAqb3BzKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuYy0xMjY2LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmM6MTI2NzpcXHRkcnZyLVxcdTAwM2Vjb25maWcgPSBicmNtZl9jZmc4MDIxMV9hdHRhY2goZHJ2ciwgb3BzLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmMtMTI2OC1cXHRcXHRcXHRcXHRcXHQgICAgIGRydnItXFx1MDAzZXNldHRpbmdzLVxcdTAwM2VwMnBfZW5hYmxlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDY6NDA6NTAuMjIyMjUyNzg1WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2ODE5MjYxMDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIGJyZWFrZG93biBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqVHJhY2luZyB0aGUgRHJpdmVyIEluaXRpYWxpemF0aW9uIFBhdGgqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgYGJyY21mYCBkcml2ZXIgaW5pdGlhbGl6YXRpb24sIGFuZCBteSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gaG93IGl0IGdldHMgZ29pbmcuIEkgc2VlIGBicmNtZl9idXNfc3RhcnRlZGAgaXMgdGhlIGtleSBmdW5jdGlvbiB0aGF0IGtpY2tzIHRoaW5ncyBvZmYuIE15IGV4cGVydCBrbm93bGVkZ2UgdGVsbHMgbWUgdGhhdCB0aGlzIGlzIGxpa2VseSBhIGNyaXRpY2FsIHBvaW50LlxuXG5Ob3csIEknbSB0aGlua2luZywgd2hlcmUgaXMgdGhpcyBgYnJjbWZfYnVzX3N0YXJ0ZWRgIGZ1bmN0aW9uIGFjdHVhbGx5ICpjYWxsZWQqPyBUaGF0J3MgdGhlIGNydWNpYWwgcXVlc3Rpb24uIEtub3dpbmcgaXRzIGNhbGwgc2l0ZXMgd2lsbCBhbGxvdyBtZSB0byBidWlsZCBhbiBhY2N1cmF0ZSBwaWN0dXJlIG9mIHRoZSBjb21wbGV0ZSBkcml2ZXIgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UsIGFuZCBmaW5kIHRoZSB0cmlnZ2VyIGZvciBjb25maWd1cmF0aW9uIHdpdGggYGJyY21mX2NmZzgwMjExX2F0dGFjaGAuIFVuZGVyc3RhbmRpbmcgdGhlIGVudHJ5IHBvaW50IHdpbGwgcG9pbnQgbWUgdG8gdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQsIGFuZCBoZWxwIG1lIHJlYXNvbiBhYm91dCBwb3RlbnRpYWwgaXNzdWVzIG9yIHRoZSBkcml2ZXIncyBiZWhhdmlvdXIuIEkgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gdGhpcyBmdW5jdGlvbiBhbmQgZmluZCBpdHMgcGFyZW50IHRvIHVuZGVyc3RhbmQgd2hhdCBldmVudCBvciBjaXJjdW1zdGFuY2UgdHJpZ2dlcnMgdGhlIGRyaXZlciBsb2FkIG9yIGluaXRpYWxpemF0aW9uIHByb2Nlc3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNDA1LCJPdXRwdXRUb2tlbnMiOjQ5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDY6NDA6NTQuOTA0MTgxMjczWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTg0MDc3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicmNtZl9idXNfc3RhcnRlZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb21tb24uYz02OD1NT0RVTEVfUEFSTV9ERVNDKGlhcHAsIFxcXCJFbmFibGUgcGFydGlhbCBzdXBwb3J0IGZvciB0aGUgb2Jzb2xldGVkIEludGVyLUFjY2VzcyBQb2ludCBQcm90b2NvbFxcXCIpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvbW1vbi5jLTcwLSNpZmRlZiBERUJVR1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb21tb24uYzo3MTovKiBhbHdheXMgc3VjY2VlZCBicmNtZl9idXNfc3RhcnRlZCgpICovXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvbW1vbi5jLTcyLXN0YXRpYyBpbnQgYnJjbWZfaWdub3JlX3Byb2JlX2ZhaWw7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jPTEyMjQ9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYnVzX3Jlc2V0X2ZvcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jLTEyMjgtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuYzoxMjI5OnN0YXRpYyBpbnQgYnJjbWZfYnVzX3N0YXJ0ZWQoc3RydWN0IGJyY21mX3B1YiAqZHJ2ciwgc3RydWN0IGNmZzgwMjExX29wcyAqb3BzKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmMtMTIzMC17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jPTEzNTk9aW50IGJyY21mX2F0dGFjaChzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jLTE0MDEtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuYzoxNDAyOlxcdHJldCA9IGJyY21mX2J1c19zdGFydGVkKGRydnIsIGRydnItXFx1MDAzZW9wcyk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuYy0xNDAzLVxcdGlmIChyZXQgIT0gMCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNjo0MDo1NC45NDYwMjY4NTJaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDAzNzU1MzgzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKlRyYWNpbmcgdGhlIERyaXZlciBJbml0aWFsaXphdGlvbiBQYXRoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYGJyY21mX2F0dGFjaGAuIFRoZSBjb2RlIGlzIHN0cnVjdHVyZWQgaW4gYSB3YXkgdGhhdCBzdWdnZXN0cyBpdCdzIHRoZSBjb3JlIGF0dGFjaG1lbnQgcG9pbnQgZm9yIHRoZSBCcm9hZGNvbSBXaS1GaSBkcml2ZXIuIEFuZCB3aXRoaW4gYGJyY21mX2F0dGFjaGAsIEkgc2VlIGEgY2FsbCB0byBgYnJjbWZfYnVzX3N0YXJ0ZWRgLiBUaGF0J3MgaW50ZXJlc3RpbmcsIGJ1dCBub3Qgc3VycHJpc2luZy4gSXQgbWFrZXMgc2Vuc2UgdGhhdCBpbml0aWFsaXphdGlvbiBvZiB0aGUgYnVzLXNwZWNpZmljIGludGVyZmFjZSB3b3VsZCBoYXBwZW4gZHVyaW5nIHRoZSBhdHRhY2htZW50IHByb2Nlc3MuXG5cblRoZSByZWFsIHF1ZXN0aW9uIEkgbmVlZCB0byBhbnN3ZXIgaXM6ICpXaGVyZSogZG9lcyBgYnJjbWZfYXR0YWNoYCBpdHNlbGYgZ2V0IGNhbGxlZD8gVW5kZXJzdGFuZGluZyB0aGUgY2FsbCBzdGFjayB0aGF0IGxlYWRzIHRvIGBicmNtZl9hdHRhY2hgIGlzIGNydWNpYWwgdG8gZnVsbHkgZ3Jhc3AgdGhlIGRyaXZlcidzIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlLiBJIG5lZWQgdG8ga25vdyB0aGUgZW50cnkgcG9pbnQuIElzIGl0IGNhbGxlZCBmcm9tIHRoZSBjb3JlIGtlcm5lbCBzdWJzeXN0ZW0sIG9yIGlzIGl0IHRyaWdnZXJlZCBieSBhIHBsYXRmb3JtLXNwZWNpZmljIGJyaW5nLXVwIHNlcXVlbmNlPyBLbm93aW5nICp3aGVyZSogaXQncyBjYWxsZWQgd2lsbCBoZWxwIG1lIGRldGVybWluZSB0aGUgdHJpZ2dlcmluZyBjb25kaXRpb25zLiBUaGF0IHdpbGwgZGlyZWN0IGZ1cnRoZXIgaW52ZXN0aWdhdGlvbiBvbiBob3cgdGhlIGRyaXZlcidzIG92ZXJhbGwgbGlmZWN5Y2xlIGlzIG1hbmFnZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMjMyLCJPdXRwdXRUb2tlbnMiOjQ3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDY6NDA6NTguOTgzNTgzMzA5WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Mjg1NDU5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicmNtZl9hdHRhY2hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYnVzLmg9MzA1PWludCBicmNtZl9hbGxvYyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBicmNtZl9tcF9kZXZpY2UgKnNldHRpbmdzKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYnVzLmgtMzA2LS8qIEluZGljYXRpb24gZnJvbSBidXMgbW9kdWxlIHJlZ2FyZGluZyBwcmVzZW5jZS9pbnNlcnRpb24gb2YgZG9uZ2xlLiAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9idXMuaDozMDc6aW50IGJyY21mX2F0dGFjaChzdHJ1Y3QgZGV2aWNlICpkZXYpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9idXMuaC0zMDgtLyogSW5kaWNhdGlvbiBmcm9tIGJ1cyBtb2R1bGUgcmVnYXJkaW5nIHJlbW92YWwvYWJzZW5jZSBvZiBkb25nbGUgKi9cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb21tb24uaC0xOC0gKiAobW9kdWxlKSBpbml0aWxpYXphdGlvbiB0YWtlcyBwbGFjZS4gVGhlIGRldmljZSBzcGVjaWZpYyBzZXR0aW5ncyBpcyBwYXJ0XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvbW1vbi5oOjE5OiAqIG9mIHRoZSBkcnZyIHN0cnVjdCBhbmQgc2hvdWxkIGJlIGluaXRpYWxpemVkIG9uIGV2ZXJ5IGJyY21mX2F0dGFjaC5cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29tbW9uLmgtMjAtICovXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jPTEzMzA9aW50IGJyY21mX2FsbG9jKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGJyY21mX21wX2RldmljZSAqc2V0dGluZ3MpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jLTEzNTgtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuYzoxMzU5OmludCBicmNtZl9hdHRhY2goc3RydWN0IGRldmljZSAqZGV2KVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmMtMTM2MC17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jPTE0NDY9dm9pZCBicmNtZl9md19jcmFzaGVkKHN0cnVjdCBkZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmMtMTQ1MC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jOjE0NTE6XFx0LyogTWF5IGZpcmUgYmVmb3JlIGJyY21mX2F0dGFjaCgpIHdpcmVzIHVwIGRydnIsIG9yIGFmdGVyIHJlbW92YWxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jLTE0NTItXFx0ICogaGFzIGNsZWFyZWQgaXQ7IGd1YXJkIHRoZSBkZXJlZnMgYmVsb3cgKGFuZCB0aGUgYXJtaW5nIGdhdGUgaW5cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmM9MjEzOT1zdGF0aWMgdm9pZCBicmNtZl9wY2llX3NldHVwKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHJldCxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmMtMjIxOS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jOjIyMjA6XFx0cmV0ID0gYnJjbWZfYXR0YWNoKFxcdTAwMjZkZXZpbmZvLVxcdTAwM2VwZGV2LVxcdTAwM2VkZXYpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmMtMjIyMS1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3NkaW8uYz00MjA5PXN0YXRpYyB2b2lkIGJyY21mX3NkaW9fZmlybXdhcmVfY2FsbGJhY2soc3RydWN0IGRldmljZSAqZGV2LCBpbnQgZXJyLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3NkaW8uYy00Mzk5LVxcdC8qIEF0dGFjaCB0byB0aGUgY29tbW9uIGxheWVyLCByZXNlcnZlIGhkciBzcGFjZSAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9zZGlvLmM6NDQwMDpcXHRlcnIgPSBicmNtZl9hdHRhY2goc2Rpb2QtXFx1MDAzZWRldik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3NkaW8uYy00NDAxLVxcdGlmIChlcnIgIT0gMCkge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9zZGlvLmM6NDQwMjpcXHRcXHRicmNtZl9lcnIoXFxcImJyY21mX2F0dGFjaCBmYWlsZWRcXFxcblxcXCIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9zZGlvLmMtNDQwMy1cXHRcXHRnb3RvIGZyZWU7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM9MTE3Nj1zdGF0aWMgdm9pZCBicmNtZl91c2JfcHJvYmVfcGhhc2UyKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHJldCxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xMjEwLVxcdC8qIEF0dGFjaCB0byB0aGUgY29tbW9uIGRyaXZlciBpbnRlcmZhY2UgKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM6MTIxMTpcXHRyZXQgPSBicmNtZl9hdHRhY2goZGV2aW5mby1cXHUwMDNlZGV2KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtMTIxMi1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jPTEyNDQ9c3RhdGljIGludCBicmNtZl91c2JfcHJvYmVfY2Ioc3RydWN0IGJyY21mX3VzYmRldl9pbmZvICpkZXZpbmZvLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTEyOTEtXFx0XFx0XFx0Z290byBmYWlsO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYzoxMjkyOlxcdFxcdHJldCA9IGJyY21mX2F0dGFjaChkZXZpbmZvLVxcdTAwM2VkZXYpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xMjkzLVxcdFxcdGlmIChyZXQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA2OjQwOjU5LjAyNjQ0MjQ3OFoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NjIzNzQ3MjY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVVNCIFByb2JlIFBoYXNlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlIGBicmNtZl91c2JfcHJvYmVfcGhhc2UyYCBmdW5jdGlvbiwgYW5kIGl0J3MgY2FsbGVkIGJ5IGBicmNtZl9hdHRhY2hgLCB3aGljaCBtYWtlcyBzZW5zZS4gSSBzZWUgdGhhdCBgYnJjbWZfdXNiX3Byb2JlX3BoYXNlMmAgaXRzZWxmIGlzIGludm9rZWQgYXMgYSBjYWxsYmFjayBmcm9tIGBicmNtZl9md19nZXRfZmlybXdhcmVzYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGhvdyBkb2VzIHRoaXMgY2FsbGJhY2sgaGFuZGxlIGVycm9yIGNvbmRpdGlvbnM/IFNwZWNpZmljYWxseSwgd2hhdCBoYXBwZW5zIGlmIGBicmNtZl9md19nZXRfZmlybXdhcmVzYCBmYWlscyB0byBmaW5kIHRoZSBuZWNlc3NhcnkgZmlybXdhcmUgYW5kIHJldHVybnMgYW4gZXJyb3IgdGhyb3VnaCB0aGlzIGNhbGxiYWNrPyBJIG5lZWQgdG8gZGlnIGludG8gYGJyY21mX3VzYl9wcm9iZV9waGFzZTJgIHRvIGNvbmZpcm0gdGhhdCBpdCBncmFjZWZ1bGx5IGhhbmRsZXMgdGhlIGVycm9yIGNvZGUgYW5kIHRha2VzIHRoZSBhcHByb3ByaWF0ZSBhY3Rpb24uIEl0J3MgYSBjcml0aWNhbCBwYXRoLCBhbmQgSSBuZWVkIHRvIGVuc3VyZSByb2J1c3QgZXJyb3IgbWFuYWdlbWVudCBpbiB0aGlzIHNlcXVlbmNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTAzMSwiT3V0cHV0VG9rZW5zIjo1MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNjo0MTowNi42NTAxOTIxOTdaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyNzQzOTE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJyY21mX3VzYl9wcm9iZV9waGFzZTJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM9MTE2NT1zdGF0aWMgY29uc3Qgc3RydWN0IGJyY21mX2J1c19vcHMgYnJjbWZfdXNiX2J1c19vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtMTE3NS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM6MTE3NjpzdGF0aWMgdm9pZCBicmNtZl91c2JfcHJvYmVfcGhhc2UyKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHJldCxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtMTE3Ny1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgYnJjbWZfZndfcmVxdWVzdCAqZndyZXEpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM9MTI0ND1zdGF0aWMgaW50IGJyY21mX3VzYl9wcm9iZV9jYihzdHJ1Y3QgYnJjbWZfdXNiZGV2X2luZm8gKmRldmluZm8sXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtMTMwOC1cXHQvKiByZXF1ZXN0IGZpcm13YXJlIGhlcmUgKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM6MTMwOTpcXHRyZXQgPSBicmNtZl9md19nZXRfZmlybXdhcmVzKGRldiwgZndyZXEsIGJyY21mX3VzYl9wcm9iZV9waGFzZTIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xMzEwLVxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYz0xNTE0PXN0YXRpYyBpbnQgYnJjbWZfdXNiX3Jlc2V0X3Jlc3VtZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xNTI2LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYzoxNTI3OlxcdHJldCA9IGJyY21mX2Z3X2dldF9maXJtd2FyZXMoXFx1MDAyNnVzYi1cXHUwMDNlZGV2LCBmd3JlcSwgYnJjbWZfdXNiX3Byb2JlX3BoYXNlMik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTE1MjgtXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA2OjQxOjA2LjY5Mjk0MTY3NVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTY2OTUwMTEyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIGBicmNtZl91c2JfcHJvYmVfcGhhc2UyYC4gSSdtIGdvaW5nIHRvIGFwcHJvYWNoIHRoaXMgd2l0aCB0aGUgYXNzdW1wdGlvbiB0aGF0IEkgdW5kZXJzdGFuZCB0aGUgYnJvYWRlciBkcml2ZXIgYXJjaGl0ZWN0dXJlIGFscmVhZHksIHNvIEkgY2FuIGZvY3VzIG9uIHRoZSBzcGVjaWZpY3Mgb2YgdGhpcyBwaGFzZS4gTXkgaW5pdGlhbCBxdWVzdGlvbiBpczogd2hhdCBpcyB0aGUgKnNwZWNpZmljKiByb2xlIHRoaXMgZnVuY3Rpb24gcGxheXMgd2l0aGluIHRoZSBVU0IgcHJvYmUgc2VxdWVuY2U/IElzIGl0IGhhbmRsaW5nIGRldmljZS1zcGVjaWZpYyBpbml0aWFsaXphdGlvbiwgcmVzb3VyY2UgYWxsb2NhdGlvbiwgb3IgaXMgaXQgbW9yZSBhYm91dCBmaXJtd2FyZSBsb2FkaW5nIG9yIGludGVyZmFjZSBjb25maWd1cmF0aW9uPyBVbmRlcnN0YW5kaW5nIGl0cyBwbGFjZSBpbiB0aGUgZ3JhbmQgc2NoZW1lIGlzIGtleSB0byBjb21wcmVoZW5kaW5nIGl0cyBsb2dpYy5cblxuSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgdGhlIGlucHV0IHBhcmFtZXRlcnMuIFdoYXQgYXJlIHRoZXksIGFuZCB3aGF0IGluZm9ybWF0aW9uIGRvIHRoZXkgcHJvdmlkZT8gQmFzZWQgb24gdGhlIGZ1bmN0aW9uIG5hbWUsIEknZCBleHBlY3QgaW5mb3JtYXRpb24gcmVsZXZhbnQgdG8gdGhlIFVTQiBkZXZpY2UgaXRzZWxmIGFuZCBsaWtlbHkgc29tZSBjb250ZXh0IGFib3V0IHRoZSBob3N0IGRyaXZlci4gSSdsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBkYXRhIHN0cnVjdHVyZXMgYmVpbmcgcGFzc2VkIGluLiBBcmUgdGhlcmUgYW55IHBvaW50ZXJzIHRvIHN0cnVjdHVyZXMgSSByZWNvZ25pemUgZnJvbSB0aGUgYnJvYWRlciBicmNtZiBkcml2ZXIgY29kZT8gVGhhdCB3aWxsIGltbWVkaWF0ZWx5IGhlbHAgb3JpZW50IG1lLlxuXG5Ob3csIEknbGwgc3RhcnQgdHJhY2luZyB0aGUgZXhlY3V0aW9uIGZsb3cuIEknbSBnb2luZyB0byBsb29rIGZvciBhbnkgb2J2aW91cyBjb250cm9sIGZsb3cgc3RhdGVtZW50cyDigJMgYGlmYCBzdGF0ZW1lbnRzLCBgc3dpdGNoYCBzdGF0ZW1lbnRzLCBsb29wcyDigJMgdGhhdCBnb3Zlcm4gaXRzIGJlaGF2aW9yLiBBcmUgdGhlcmUgY29uZGl0aW9uYWwgY2hlY2tzIGJhc2VkIG9uIGRldmljZSBpZGVudGlmaWVycywgVVNCIGNvbmZpZ3VyYXRpb24gZGVzY3JpcHRvcnMsIG9yIGRyaXZlciBmbGFncz8gSSdsbCBiZSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBhbnkgZXJyb3IgaGFuZGxpbmcuIFdoYXQgaGFwcGVucyBpZiB0aGluZ3MgZ28gd3Jvbmc/IEFyZSB0aGVyZSBhdHRlbXB0cyB0byByZXRyeSwgb3IgZG9lcyBpdCB0cmlnZ2VyIGEgZGV2aWNlIHJlc2V0PyBUaGF04oCZcyBhbHdheXMgYSBrZXkgcG9pbnQgdG8gdW5kZXJzdGFuZC5cblxuTmV4dCwgSSBuZWVkIHRvIHNlZSB3aGF0IHJlc291cmNlcyBhcmUgYmVpbmcgYWNjZXNzZWQgb3IgbW9kaWZpZWQuIElzIGl0IGludGVyYWN0aW5nIHdpdGggdGhlIFVTQiBidXMgZGlyZWN0bHkgdGhyb3VnaCBsaWJ1c2IgY2FsbHMsIG9yIGlzIGl0IHVzaW5nIHNvbWUgaGlnaGVyLWxldmVsIGFic3RyYWN0aW9uIHByb3ZpZGVkIGJ5IHRoZSBrZXJuZWw/IEFyZSB0aGVyZSBtZW1vcnkgYWxsb2NhdGlvbnMsIGludGVycnVwdCByZWdpc3RyYXRpb25zLCBvciBoYXJkd2FyZSByZWdpc3RlcnMgYmVpbmcgbWFuaXB1bGF0ZWQ/IEhvdyBhcmUgdGhlc2UgcmVzb3VyY2VzIG1hbmFnZWQ/IEkgZXhwZWN0IHRvIHNlZSB0aGUgc3RhbmRhcmQgbG9ja2luZyBwYXJhZGlnbXMgYW5kIG1lbW9yeSBtYW5hZ2VtZW50IGFzIHJlcXVpcmVkIGJ5IHRoZSBrZXJuZWwuXG5cbkZpbmFsbHksIEknbGwgbG9vayBmb3IgYW55IGludGVyYWN0aW9ucyB3aXRoIG90aGVyIGZ1bmN0aW9ucy4gRG9lcyB0aGlzIGZ1bmN0aW9uIGNhbGwgb3V0IHRvIG90aGVyIGBicmNtZmAgcm91dGluZXMsIG9yIGV2ZW4gdG8gdGhlIFVTQiBzdGFjaz8gVW5kZXJzdGFuZGluZyB0aGUgaW50ZXJhY3Rpb25zIHdpdGggdGhlIHJlc3Qgb2YgdGhlIHN0YWNrIHdpbGwgYmUgaW1wb3J0YW50LCBhcyB3aWxsIHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20sIGFuZCBob3cgaXRzIHJldHVybiB2YWx1ZXMgYXJlIGhhbmRsZWQgYnkgaXRzIGNhbGxlci4gRnJvbSB0aGVzZSBvYnNlcnZhdGlvbnMsIEkgc2hvdWxkIGJlIGFibGUgdG8gZGVkdWNlIHRoZSBjb3JlIHB1cnBvc2Ugb2YgYGJyY21mX3VzYl9wcm9iZV9waGFzZTJgIHdpdGhpbiB0aGUgYnJvYWRlciBicmNtZiBkcml2ZXIgYXJjaGl0ZWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTk1MywiT3V0cHV0VG9rZW5zIjo1NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA2OjQxOjE4LjM2MjQ0NTYyMVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MzI0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTE3NixcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTE3NjpcXHRzdGF0aWMgdm9pZCBicmNtZl91c2JfcHJvYmVfcGhhc2UyKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHJldCxcXG4xMTc3OlxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBicmNtZl9md19yZXF1ZXN0ICpmd3JlcSlcXG4xMTc4OlxcdHtcXG4xMTc5OlxcdFxcdHN0cnVjdCBicmNtZl9idXMgKmJ1cyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xcbjExODA6XFx0XFx0c3RydWN0IGJyY21mX3VzYmRldl9pbmZvICpkZXZpbmZvID0gYnVzLVxcdTAwM2VidXNfcHJpdi51c2ItXFx1MDAzZWRldmluZm87XFxuMTE4MTpcXHRcXHRjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3O1xcbjExODI6XFx0XFxuMTE4MzpcXHRcXHRpZiAocmV0KVxcbjExODQ6XFx0XFx0XFx0Z290byBlcnJvcjtcXG4xMTg1OlxcdFxcbjExODY6XFx0XFx0YnJjbWZfZGJnKFVTQiwgXFxcIlN0YXJ0IGZ3IGRvd25sb2FkaW5nXFxcXG5cXFwiKTtcXG4xMTg3OlxcdFxcbjExODg6XFx0XFx0ZncgPSBmd3JlcS1cXHUwMDNlaXRlbXNbQlJDTUZfVVNCX0ZXX0NPREVdLmJpbmFyeTtcXG4xMTg5OlxcdFxcdGtmcmVlKGZ3cmVxKTtcXG4xMTkwOlxcdFxcbjExOTE6XFx0XFx0cmV0ID0gY2hlY2tfZmlsZShmdy1cXHUwMDNlZGF0YSk7XFxuMTE5MjpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbjExOTM6XFx0XFx0XFx0YnJjbWZfZXJyKFxcXCJpbnZhbGlkIGZpcm13YXJlXFxcXG5cXFwiKTtcXG4xMTk0OlxcdFxcdFxcdHJlbGVhc2VfZmlybXdhcmUoZncpO1xcbjExOTU6XFx0XFx0XFx0Z290byBlcnJvcjtcXG4xMTk2OlxcdFxcdH1cXG4xMTk3OlxcdFxcbjExOTg6XFx0XFx0ZGV2aW5mby1cXHUwMDNlaW1hZ2UgPSBmdy1cXHUwMDNlZGF0YTtcXG4xMTk5OlxcdFxcdGRldmluZm8tXFx1MDAzZWltYWdlX2xlbiA9IGZ3LVxcdTAwM2VzaXplO1xcbjEyMDA6XFx0XFxuMTIwMTpcXHRcXHRyZXQgPSBicmNtZl91c2JfZndfZG93bmxvYWQoZGV2aW5mbyk7XFxuMTIwMjpcXHRcXHRyZWxlYXNlX2Zpcm13YXJlKGZ3KTtcXG4xMjAzOlxcdFxcdGlmIChyZXQpXFxuMTIwNDpcXHRcXHRcXHRnb3RvIGVycm9yO1xcbjEyMDU6XFx0XFxuMTIwNjpcXHRcXHRyZXQgPSBicmNtZl9hbGxvYyhkZXZpbmZvLVxcdTAwM2VkZXYsIGRldmluZm8tXFx1MDAzZXNldHRpbmdzKTtcXG4xMjA3OlxcdFxcdGlmIChyZXQpXFxuMTIwODpcXHRcXHRcXHRnb3RvIGVycm9yO1xcbjEyMDk6XFx0XFxuMTIxMDpcXHRcXHQvKiBBdHRhY2ggdG8gdGhlIGNvbW1vbiBkcml2ZXIgaW50ZXJmYWNlICovXFxuMTIxMTpcXHRcXHRyZXQgPSBicmNtZl9hdHRhY2goZGV2aW5mby1cXHUwMDNlZGV2KTtcXG4xMjEyOlxcdFxcdGlmIChyZXQpXFxuMTIxMzpcXHRcXHRcXHRnb3RvIGVycm9yO1xcbjEyMTQ6XFx0XFxuMTIxNTpcXHRcXHRjb21wbGV0ZShcXHUwMDI2ZGV2aW5mby1cXHUwMDNlZGV2X2luaXRfZG9uZSk7XFxuMTIxNjpcXHRcXHRyZXR1cm47XFxuMTIxNzpcXHRlcnJvcjpcXG4xMjE4OlxcdFxcdGJyY21mX2RiZyhUUkFDRSwgXFxcImZhaWxlZDogZGV2PSVzLCBlcnI9JWRcXFxcblxcXCIsIGRldl9uYW1lKGRldiksIHJldCk7XFxuMTIxOTpcXHRcXHRjb21wbGV0ZShcXHUwMDI2ZGV2aW5mby1cXHUwMDNlZGV2X2luaXRfZG9uZSk7XFxuMTIyMDpcXHRcXHRkZXZpY2VfcmVsZWFzZV9kcml2ZXIoZGV2KTtcXG4xMjIxOlxcdH1cXG4xMjIyOlxcdFxcbjEyMjM6XFx0c3RhdGljIHN0cnVjdCBicmNtZl9md19yZXF1ZXN0ICpcXG4xMjI0OlxcdGJyY21mX3VzYl9wcmVwYXJlX2Z3X3JlcXVlc3Qoc3RydWN0IGJyY21mX3VzYmRldl9pbmZvICpkZXZpbmZvKVxcbjEyMjU6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNjo0MToxOC4zNjI1Mzk5NTJaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjU3OTQxOTc0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEZpcm13YXJlIERlcGVuZGVuY3kgaW4gdGhlIEJyb2FkY29tIFVTQiBEcml2ZXIqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIEJyb2FkY29tIFVTQiBkcml2ZXIgaW5pdGlhbGl6YXRpb24sIGFuZCBpdCdzIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIGJ1dCB0aGVyZSdzIGEgY3J1Y2lhbCBkZXBlbmRlbmN5IG9uIHRoZSBmaXJtd2FyZS4gIElmIGByZXRgIGlzbid0IHplcm8g4oCTIG1lYW5pbmcgdGhlIGZpcm13YXJlIGlzbid0IGZvdW5kIGluaXRpYWxseSDigJMgd2UganVtcCB0byB0aGUgYGVycm9yYCBsYWJlbCBhbmQgaW1tZWRpYXRlbHkgY2FsbCBgZGV2aWNlX3JlbGVhc2VfZHJpdmVyKGRldilgLiAgVGhhdCdzIGEgcHJldHR5IHN0cm9uZyBpbmRpY2F0b3IgdGhhdCBmaXJtd2FyZSBpcyAqYWJzb2x1dGVseSogcmVxdWlyZWQgZm9yIHRoZSBkZXZpY2UgdG8gZXZlbiBhdHRhY2ggYW5kLCBjcml0aWNhbGx5LCByZWdpc3RlciB0aGUgV2ktRmkgUEhZIChgd2lwaHlgKS4gIEEgcXVpY2sgY2hlY2sgY29uZmlybXMgdGhhdCBgc3l6a2FsbGVyYCAqY2FuKiBoYW5kbGUgcHJvdmlkaW5nIHRoZSBmaXJtd2FyZS4gSXQgaGFzIHRoYXQgY292ZXJlZCwgZWl0aGVyIHRocm91Z2ggdGhlIGBDT05GSUdfRldfTE9BREVSX1VTRVJfSEVMUEVSYCBjb25maWd1cmF0aW9uIG9wdGlvbiwgb3Igc2ltcGx5IGJ5IHB1dHRpbmcgdGhlIGZpcm13YXJlIGluIHRoZSByb290IGZpbGVzeXN0ZW0uXG5cbkJ1dCBob2xkIG9uLCB0aGVyZSdzIGBicmNtZl91c2JfZndfZG93bmxvYWRgLiBUaGF0IGZ1bmN0aW9uJ3Mgam9iIGlzIGV4cGxpY2l0bHkgdG8gZG93bmxvYWQgdGhlIGZpcm13YXJlICp0byogdGhlIFVTQiBkZXZpY2UgaXRzZWxmLiBJZiBgc3l6a2FsbGVyYCBpcyBlbXVsYXRpbmcgdGhpcyBVU0IgZGV2aWNlIChsaWtlbHkgdmlhIGB2aGNpYCksIHRoZW4gaXQncyBnb2luZyB0byBpbnRlcmNlcHQgdGhvc2UgZmlybXdhcmUgZG93bmxvYWQgY29tbWFuZHMuIFNvLCBgc3l6a2FsbGVyYCBzaG91bGQgYmUgYWJsZSB0byBhY2tub3dsZWRnZSB0aGVtLCBkb3dubG9hZCB0aGUgZmlybXdhcmUsIGFuZCB0aGVuIGBicmNtZl9hdHRhY2hgIGlzIGNhbGxlZC4gU28sIHRoZSBxdWVzdGlvbiByZW1haW5zOiBpcyBgYnJjbWZfYXR0YWNoYCBpbnRlcmFjdGluZyB3aXRoIHRoZSBoYXJkd2FyZSB3aGljaCBjb3VsZCBjYXVzZSBpdCB0byBmYWlsLCBpZiB0aGUgZW11bGF0ZWQgZGV2aWNlIGRvZXMgbm90IGNvcnJlY3RseSByZXNwb25kPyBOb3csIGxldCdzIGRpdmUgaW50byBgYnJjbWZfYXR0YWNoYCBhbmQgc2VlIGlmIHRoZXJlIGFyZSBhbnkgc3VidGxlIGhhcmR3YXJlIGludGVyYWN0aW9ucyB0aGF0IHdlIG5lZWQgdG8gYWNjb3VudCBmb3IgaW4gdGhlIGVtdWxhdGlvbiBwcm9jZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzIzNCwiT3V0cHV0VG9rZW5zIjo1MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA2OjQxOjI0Ljk0MTk2MTcxMloiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM0NDI0NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnJjbWZfYXR0YWNoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuYz0xMzMwPWludCBicmNtZl9hbGxvYyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBicmNtZl9tcF9kZXZpY2UgKnNldHRpbmdzKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuYy0xMzU4LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmM6MTM1OTppbnQgYnJjbWZfYXR0YWNoKHN0cnVjdCBkZXZpY2UgKmRldilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jLTEzNjAte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuYz0xNDQ2PXZvaWQgYnJjbWZfZndfY3Jhc2hlZChzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jLTE0NTAtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuYzoxNDUxOlxcdC8qIE1heSBmaXJlIGJlZm9yZSBicmNtZl9hdHRhY2goKSB3aXJlcyB1cCBkcnZyLCBvciBhZnRlciByZW1vdmFsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuYy0xNDUyLVxcdCAqIGhhcyBjbGVhcmVkIGl0OyBndWFyZCB0aGUgZGVyZWZzIGJlbG93IChhbmQgdGhlIGFybWluZyBnYXRlIGluXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA2OjQxOjI0Ljk4NTQxMTkwMVoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTcyNzI5NTIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYSBzZWFzb25lZCBwcm9mZXNzaW9uYWwgaW4gdGhlIGZpZWxkLCBzdGFydGluZyB3aXRoIHRoZSBib2xkZWQgaGVhZGVyOlxuXG4qKkRpdmluZyBpbnRvIGBicmNtZl9hdHRhY2hgKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIFRoZSB0YXJnZXQgaGVyZSBpcyBgYnJjbWZfYXR0YWNoYC4gSSdtIGFscmVhZHkgYW50aWNpcGF0aW5nIHdoYXQgdG8gZXhwZWN0LCBidXQgbGV0J3Mgc2VlIGhvdyB3ZWxsIGl0IG1hcHMgdG8gbXkgbWVudGFsIG1vZGVsLiBVc3VhbGx5IGluIHRoZXNlIHNvcnRzIG9mIGRyaXZlcnMsIHRoaXMgaXMgdGhlIHBpdm90YWwgZnVuY3Rpb27igJQgdGhlIGdhdGV3YXkuIEl0J3MgdGhlIHBvaW50IHdoZXJlIGEgbmV3IGRldmljZSBpbnN0YW5jZSBnZXRzIGludGVncmF0ZWQgaW50byB0aGUgc3lzdGVtLiBJ4oCZbSB0aGlua2luZyBpbml0aWFsaXphdGlvbiwgcmVzb3VyY2UgYWxsb2NhdGlvbiwgYW5kIGJpbmRpbmcgdG8gdGhlIHJlbGV2YW50IGtlcm5lbCBzdWJzeXN0ZW1zIGFyZSBhbGwgbGlrZWx5IGNhbmRpZGF0ZXMgZm9yIHRoaXMgZnVuY3Rpb24ncyByZXNwb25zaWJpbGl0aWVzLiBUaGluZ3MgbGlrZSBoYXJkd2FyZSBpZGVudGlmaWNhdGlvbiwgc2V0dGluZyB1cCBETUEgY2hhbm5lbHMsIGVzdGFibGlzaGluZyBpbnRlcnJ1cHQgaGFuZGxlcnMuLi4gSSdtIHJlYWxseSBjdXJpb3VzIHRvIHNlZSBob3cgdGhlIEJyb2FkY29tIGRyaXZlciBtYW5hZ2VzIGl0cyBkZXZpY2UgY29udGV4dCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBmaXJtd2FyZS4gSXMgdGhlcmUgYSBzZXBhcmF0ZSBmaXJtd2FyZSBsb2FkIHN0YWdlPyBIb3cgZG9lcyBpdCBoYW5kbGUgcG90ZW50aWFsIGVycm9ycyBkdXJpbmcgYXR0YWNobWVudD8gQXJlIHRoZXJlIGFueSBjbGV2ZXIgdHJpY2tzIHRvIG9wdGltaXplIHRoZSBwcm9jZXNzLCBtYXliZSBzcGVjaWZpYyB0byB0aGVpciBjaGlwc2V0cz8gSSBrbm93IHRoZXNlIGRyaXZlcnMgY2FuIGdldCBjb252b2x1dGVkIHF1aWNrbHksIHNvIEknbGwgYmUga2VlcGluZyBhbiBleWUgb3V0IGZvciBhbnkgcGFydGljdWxhcmx5IGludGVyZXN0aW5nIG9yIHVuY29udmVudGlvbmFsIGFwcHJvYWNoZXMuIFRpbWUgdG8gZGlnIGluIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxODE4MSwiT3V0cHV0VG9rZW5zIjo1NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA2OjQxOjI5LjE1ODE0NTE0NFoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NDcxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEzNTksXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEzNTk6XFx0aW50IGJyY21mX2F0dGFjaChzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuMTM2MDpcXHR7XFxuMTM2MTpcXHRcXHRzdHJ1Y3QgYnJjbWZfYnVzICpidXNfaWYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTtcXG4xMzYyOlxcdFxcdHN0cnVjdCBicmNtZl9wdWIgKmRydnIgPSBidXNfaWYtXFx1MDAzZWRydnI7XFxuMTM2MzpcXHRcXHRpbnQgcmV0ID0gMDtcXG4xMzY0OlxcdFxcdGludCBpO1xcbjEzNjU6XFx0XFxuMTM2NjpcXHRcXHRicmNtZl9kYmcoVFJBQ0UsIFxcXCJFbnRlclxcXFxuXFxcIik7XFxuMTM2NzpcXHRcXG4xMzY4OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKGRydnItXFx1MDAzZWlmMmJzcyk7IGkrKylcXG4xMzY5OlxcdFxcdFxcdGRydnItXFx1MDAzZWlmMmJzc1tpXSA9IEJSQ01GX0JTU0lEWF9JTlZBTElEO1xcbjEzNzA6XFx0XFxuMTM3MTpcXHRcXHRtdXRleF9pbml0KFxcdTAwMjZkcnZyLVxcdTAwM2Vwcm90b19ibG9jayk7XFxuMTM3MjpcXHRcXG4xMzczOlxcdFxcdC8qIExpbmsgdG8gYnVzIG1vZHVsZSAqL1xcbjEzNzQ6XFx0XFx0ZHJ2ci1cXHUwMDNlaGRybGVuID0gMDtcXG4xMzc1OlxcdFxcbjEzNzY6XFx0XFx0cmV0ID0gYnJjbWZfZnd2aWRfYXR0YWNoKGRydnIpO1xcbjEzNzc6XFx0XFx0aWYgKHJldCAhPSAwKSB7XFxuMTM3ODpcXHRcXHRcXHRicGh5X2VycihkcnZyLCBcXFwiYnJjbWZfZnd2aWRfYXR0YWNoIGZhaWxlZFxcXFxuXFxcIik7XFxuMTM3OTpcXHRcXHRcXHRnb3RvIGZhaWw7XFxuMTM4MDpcXHRcXHR9XFxuMTM4MTpcXHRcXG4xMzgyOlxcdFxcdC8qIEF0dGFjaCBhbmQgbGluayBpbiB0aGUgcHJvdG9jb2wgKi9cXG4xMzgzOlxcdFxcdHJldCA9IGJyY21mX3Byb3RvX2F0dGFjaChkcnZyKTtcXG4xMzg0OlxcdFxcdGlmIChyZXQgIT0gMCkge1xcbjEzODU6XFx0XFx0XFx0YnBoeV9lcnIoZHJ2ciwgXFxcImJyY21mX3Byb3RfYXR0YWNoIGZhaWxlZFxcXFxuXFxcIik7XFxuMTM4NjpcXHRcXHRcXHRnb3RvIGZhaWw7XFxuMTM4NzpcXHRcXHR9XFxuMTM4ODpcXHRcXG4xMzg5OlxcdFxcdC8qIGF0dGFjaCBmaXJtd2FyZSBldmVudCBoYW5kbGVyICovXFxuMTM5MDpcXHRcXHRyZXQgPSBicmNtZl9md2VoX2F0dGFjaChkcnZyKTtcXG4xMzkxOlxcdFxcdGlmIChyZXQgIT0gMCkge1xcbjEzOTI6XFx0XFx0XFx0YnBoeV9lcnIoZHJ2ciwgXFxcImJyY21mX2Z3ZWhfYXR0YWNoIGZhaWxlZFxcXFxuXFxcIik7XFxuMTM5MzpcXHRcXHRcXHRnb3RvIGZhaWw7XFxuMTM5NDpcXHRcXHR9XFxuMTM5NTpcXHRcXG4xMzk2OlxcdFxcdC8qIEF0dGFjaCB0byBldmVudHMgaW1wb3J0YW50IGZvciBjb3JlIGNvZGUgKi9cXG4xMzk3OlxcdFxcdGJyY21mX2Z3ZWhfcmVnaXN0ZXIoZHJ2ciwgQlJDTUZfRV9QU01fV0FUQ0hET0csXFxuMTM5ODpcXHRcXHRcXHRcXHQgICAgYnJjbWZfcHNtX3dhdGNoZG9nX25vdGlmeSk7XFxuMTM5OTpcXHRcXG4xNDAwOlxcdFxcdGJyY21mX2Z3dmlkX2dldF9jZmc4MDIxMV9vcHMoZHJ2cik7XFxuMTQwMTpcXHRcXG4xNDAyOlxcdFxcdHJldCA9IGJyY21mX2J1c19zdGFydGVkKGRydnIsIGRydnItXFx1MDAzZW9wcyk7XFxuMTQwMzpcXHRcXHRpZiAocmV0ICE9IDApIHtcXG4xNDA0OlxcdFxcdFxcdGJwaHlfZXJyKGRydnIsIFxcXCJkb25nbGUgaXMgbm90IHJlc3BvbmRpbmc6IGVycj0lZFxcXFxuXFxcIiwgcmV0KTtcXG4xNDA1OlxcdFxcdFxcdGdvdG8gZmFpbDtcXG4xNDA2OlxcdFxcdH1cXG4xNDA3OlxcdFxcbjE0MDg6XFx0XFx0cmV0dXJuIDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA2OjQxOjI5LjE1ODI0MTQ4NFoiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjM0NzkzMzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBgYnJjbWZfYnVzX3N0YXJ0ZWRgIEZ1bmN0aW9uKipcblxuT2theSwgc28gdGhlIGBicmNtZl9idXNfc3RhcnRlZGAgZnVuY3Rpb24gaGFzIGJlZW4gY2FsbGVkLiBUaGF0J3MgbXkgc3RhcnRpbmcgcG9pbnQuIE5vdywgd2hhdCdzIGl0cyBwdXJwb3NlPyBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBjb2RlIGRlZmluaXRpb24gYW5kIHNlZSB3aGF0IGl0IGFjdHVhbGx5IGRvZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBmdW5jdGlvbiBpcyBkb2luZyBhdCB0aGUgdmVyeSBiZWdpbm5pbmcgb2YgdGhlIGJ1cyBpbml0aWFsaXphdGlvbiBwcm9jZXNzLCBhcyB0aGF0J3MgbXkgYXJlYSBvZiBleHBlcnRpc2UuIEknbGwgcmVhZCB0aGUgY29kZSBtZXRpY3Vsb3VzbHksIGZvY3VzaW5nIG9uIHRoZSBrZXkgb3BlcmF0aW9ucywgZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIG1hbmlwdWxhdGVkLCBhbmQgYW55IGVycm9yIGhhbmRsaW5nLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IHRoZSBkcml2ZXIncyBpbnRlcmFjdGlvbiB3aXRoIHRoZSBoYXJkd2FyZSwgZXNwZWNpYWxseSBpZiB0aGlzIGlzIGEgZHJpdmVyIEkga25vdyB3ZWxsLiBUaGlzIGlzIG15IGNoYW5jZSB0byBnYWluIGEgaGlnaC1sZXZlbCB1bmRlcnN0YW5kaW5nIG9mIHdoYXQgaGFwcGVucyBhdCB0aGUgdmVyeSBzdGFydC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkyODIsIk91dHB1dFRva2VucyI6NTQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA2OjQxOjMyLjc5MzAzNzI3NFoiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NTYzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyMjksXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEyMjk6XFx0c3RhdGljIGludCBicmNtZl9idXNfc3RhcnRlZChzdHJ1Y3QgYnJjbWZfcHViICpkcnZyLCBzdHJ1Y3QgY2ZnODAyMTFfb3BzICpvcHMpXFxuMTIzMDpcXHR7XFxuMTIzMTpcXHRcXHRpbnQgcmV0ID0gLTE7XFxuMTIzMjpcXHRcXHRzdHJ1Y3QgYnJjbWZfYnVzICpidXNfaWYgPSBkcnZyLVxcdTAwM2VidXNfaWY7XFxuMTIzMzpcXHRcXHRzdHJ1Y3QgYnJjbWZfaWYgKmlmcDtcXG4xMjM0OlxcdFxcdHN0cnVjdCBicmNtZl9pZiAqcDJwX2lmcDtcXG4xMjM1OlxcdFxcbjEyMzY6XFx0XFx0YnJjbWZfZGJnKFRSQUNFLCBcXFwiXFxcXG5cXFwiKTtcXG4xMjM3OlxcdFxcbjEyMzg6XFx0XFx0LyogYWRkIHByaW1hcnkgbmV0d29ya2luZyBpbnRlcmZhY2UgKi9cXG4xMjM5OlxcdFxcdGlmcCA9IGJyY21mX2FkZF9pZihkcnZyLCAwLCAwLCBmYWxzZSwgXFxcIndsYW4lZFxcXCIsXFxuMTI0MDpcXHRcXHRcXHRcXHQgICBpc192YWxpZF9ldGhlcl9hZGRyKGRydnItXFx1MDAzZXNldHRpbmdzLVxcdTAwM2VtYWMpID8gZHJ2ci1cXHUwMDNlc2V0dGluZ3MtXFx1MDAzZW1hYyA6IE5VTEwpO1xcbjEyNDE6XFx0XFx0aWYgKElTX0VSUihpZnApKVxcbjEyNDI6XFx0XFx0XFx0cmV0dXJuIFBUUl9FUlIoaWZwKTtcXG4xMjQzOlxcdFxcbjEyNDQ6XFx0XFx0cDJwX2lmcCA9IE5VTEw7XFxuMTI0NTpcXHRcXG4xMjQ2OlxcdFxcdC8qIHNpZ25hbCBidXMgcmVhZHkgKi9cXG4xMjQ3OlxcdFxcdGJyY21mX2J1c19jaGFuZ2Vfc3RhdGUoYnVzX2lmLCBCUkNNRl9CVVNfVVApO1xcbjEyNDg6XFx0XFxuMTI0OTpcXHRcXHQvKiBkbyBidXMgc3BlY2lmaWMgcHJlaW5pdCBoZXJlICovXFxuMTI1MDpcXHRcXHRyZXQgPSBicmNtZl9idXNfcHJlaW5pdChidXNfaWYpO1xcbjEyNTE6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuMTI1MjpcXHRcXHRcXHRnb3RvIGZhaWw7XFxuMTI1MzpcXHRcXG4xMjU0OlxcdFxcdC8qIEJ1cyBpcyByZWFkeSwgZG8gYW55IGluaXRpYWxpemF0aW9uICovXFxuMTI1NTpcXHRcXHRyZXQgPSBicmNtZl9jX3ByZWluaXRfZGNtZHMoaWZwKTtcXG4xMjU2OlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbjEyNTc6XFx0XFx0XFx0Z290byBmYWlsO1xcbjEyNTg6XFx0XFxuMTI1OTpcXHRcXHRicmNtZl9mZWF0X2F0dGFjaChkcnZyKTtcXG4xMjYwOlxcdFxcbjEyNjE6XFx0XFx0cmV0ID0gYnJjbWZfcHJvdG9faW5pdF9kb25lKGRydnIpO1xcbjEyNjI6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuMTI2MzpcXHRcXHRcXHRnb3RvIGZhaWw7XFxuMTI2NDpcXHRcXG4xMjY1OlxcdFxcdGJyY21mX3Byb3RvX2FkZF9pZihkcnZyLCBpZnApO1xcbjEyNjY6XFx0XFxuMTI2NzpcXHRcXHRkcnZyLVxcdTAwM2Vjb25maWcgPSBicmNtZl9jZmc4MDIxMV9hdHRhY2goZHJ2ciwgb3BzLFxcbjEyNjg6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBkcnZyLVxcdTAwM2VzZXR0aW5ncy1cXHUwMDNlcDJwX2VuYWJsZSk7XFxuMTI2OTpcXHRcXHRpZiAoZHJ2ci1cXHUwMDNlY29uZmlnID09IE5VTEwpIHtcXG4xMjcwOlxcdFxcdFxcdHJldCA9IC1FTk9NRU07XFxuMTI3MTpcXHRcXHRcXHRnb3RvIGZhaWw7XFxuMTI3MjpcXHRcXHR9XFxuMTI3MzpcXHRcXG4xMjc0OlxcdFxcdHJldCA9IGJyY21mX25ldF9hdHRhY2goaWZwLCBmYWxzZSk7XFxuMTI3NTpcXHRcXG4xMjc2OlxcdFxcdGlmICgoIXJldCkgXFx1MDAyNlxcdTAwMjYgKGRydnItXFx1MDAzZXNldHRpbmdzLVxcdTAwM2VwMnBfZW5hYmxlKSkge1xcbjEyNzc6XFx0XFx0XFx0cDJwX2lmcCA9IGRydnItXFx1MDAzZWlmbGlzdFsxXTtcXG4xMjc4OlxcdFxcdFxcdGlmIChwMnBfaWZwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNjo0MTozMi43OTMxMzQ0MjRaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODM0MzAyOTg5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJyb2FkY29tIFdpRmkgRHJpdmVyIEluaXRpYWxpemF0aW9uIGFuZCBGdXp6aW5nIExhbmRzY2FwZSoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCB0aGlzIGBicmNtZm1hY2AgZHJpdmVyIGFuZCBob3cgc3l6a2FsbGVyIGludGVyYWN0cyB3aXRoIGl0LiBGaXJzdCwgSSBuZWVkIHRvIHJlbWVtYmVyIHRoYXQgYGJyY21mX2J1c19wcmVpbml0YCBhbmQgYGJyY21mX2NfcHJlaW5pdF9kY21kc2AgaGFuZGxlIHRoZSBpbml0aWFsIGhhcmR3YXJlIGludGVyYWN0aW9ucy4gSWYgdGhlc2UgZmFpbCwgYGJyY21mX2NmZzgwMjExX2F0dGFjaGAgaXNuJ3QgZXZlbiBjYWxsZWQuIFRoZSBxdWVzdGlvbiBpcywgY2FuIHN5emthbGxlcidzIHZoY2kgbW9jayB0aGVzZSBVU0IgcmVzcG9uc2VzIHRvIHRyaWdnZXIgdGhlc2UgZnVuY3Rpb25zPyBZZXMsIGl0IGNhbiwgcG90ZW50aWFsbHksIHNpbmNlIHZoY2kgaXMgZGVzaWduZWQgdG8gZG8gZXhhY3RseSB0aGF0LiBUaGUgY2F0Y2ggaXMgdGhhdCBgYnJjbWZtYWNgIGlzIGEgY29tcGxleCBGdWxsTUFDIGRyaXZlciB3aGljaCBtZWFucyBpdCB0YWxrcyBleHRlbnNpdmVseSB3aXRoIHRoZSBmaXJtd2FyZSBhbmQgZXhwZWN0cyBzcGVjaWZpYyByZXNwb25zZXMuIFRoaXMgbWFrZXMgbWUgd29uZGVyIGFib3V0IGl0cyBwcmFjdGljYWwgZnV6emFiaWxpdHkuXG5cbkJ1dCB0aGVuLCBJIHJlY2FsbCBzZWVpbmcgdGhhdCBzeXprYWxsZXIgKmhhcyogZm91bmQgYnVncyBpbiBgYnJjbWZtYWNgIHZpYSBVU0IhIEFoLCB3YWl0LCB0aGUgY29tbWl0IG1lc3NhZ2U6IFwic3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XCIuIFRoYXQncyBhIHN0cm9uZyBpbmRpY2F0aW9uIHN5emthbGxlciBoYXMgZm91bmQgYSByZWFsIGJ1ZyBvciBpcyBhY3RpdmVseSBmdXp6aW5nIHRoaXMgZHJpdmVyLlxuXG5MZXQncyBkaXZlIGludG8gdGhlIHBhdGNoIGl0c2VsZi4gSXQgbW9kaWZpZXMgYGJyY21mX2N5d19leHRlcm5hbF9hdXRoYCBpbiBgZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmNgLiBUaGUgY29kZSBjaGFuZ2UgaXMgaW5pdGlhbGl6aW5nIGBhdXRoX3N0YXR1c2Agc3RydWN0IGFuZCBhZGRpbmcgUE1LSUQgc3VwcG9ydCB3aGljaCBzdWdnZXN0cyBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZSB3YXMgZml4ZWQuIFRoZSBwYXRjaCBpbml0aWFsaXplcyBhIHN0cnVjdCBhbmQgY29waWVzIG1lbW9yeSwgc28gaXQncyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhcyBleHBlY3RlZC5cblxuSSBoYXZlIHRvIHdvbmRlciwgaXMgdGhpcyByZWFjaGFibGU/IEl0IGxvb2tzIGxpa2UgaXQsIGJlY2F1c2UgaXQncyB0cmlnZ2VyZWQgdmlhIHRoZSBgTkw4MDIxMV9DTURfRVhURVJOQUxfQVVUSGAgbmV0bGluayBjb21tYW5kIHRvIHRoZSBgYnJjbWZtYWNgIGRyaXZlci4gSG1tLCBob2xkIG9uLi4uIHRoZSBwYXRjaCBpcyBpbiBgYnJjbWZfY3l3X2V4dGVybmFsX2F1dGhgLiBOb3cgSSBoYXZlIHRvIGNoZWNrIGlmIGBCUkNNRk1BQ19VU0JgIGlzIHN1ZmZpY2llbnQuIElzIGBjeXdgIGJ1aWx0IGJ5IGRlZmF1bHQ/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMzQ1LCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDg2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDY6NDE6NDEuMTM2MTY3MTExWiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Mjg0MDUxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjeXdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9NYWtlZmlsZT01NT1vYmotbSArPSB3Y2MvXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL01ha2VmaWxlOjU2Om9iai1tICs9IGN5dy9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvTWFrZWZpbGUtNTctb2JqLW0gKz0gYmNhL1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL01ha2VmaWxlPTU5PWJyY21mbWFjLSQoQ09ORklHX0JSQ01GTUFDKSArPSB3Y2MvY29yZS5vXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL01ha2VmaWxlOjYwOmJyY21mbWFjLSQoQ09ORklHX0JSQ01GTUFDKSArPSBjeXcvY29yZS5vXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL01ha2VmaWxlLTYxLWJyY21mbWFjLSQoQ09ORklHX0JSQ01GTUFDKSArPSBiY2EvY29yZS5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA2OjQxOjQxLjE3OTAxMjc2WiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU4MTI0MTcwNjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgTGluZSBvZiBSZWFzb25pbmcqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGNvbmZpcm1lZCB0aGF0IGBjeXcvY29yZS5vYCAqZG9lcyogZ2V0IGJ1aWx0IHdoZW4gYENPTkZJR19CUkNNRk1BQ2AgaXMgc2V0LiBUaGF0IG1lYW5zIGlmIEkgbmVlZCB0aGF0IG1vZHVsZSwgSSdtIGRlZmluaXRlbHkgZ29pbmcgdG8gcmVxdWlyZSBgQlJDTUZNQUNgLiBJJ2xsIGFsc28gd2FudCBgQlJDTUZNQUNfVVNCYCBzaW5jZSB0aGF0J3MgbGlrZWx5IHRoZSBzcGVjaWZpYyBVU0IgdmFyaWFudCBJJ20gZGVhbGluZyB3aXRoLiBOb3csIG9mIGNvdXJzZSwgSSBjYW4ndCBmb3JnZXQgYWJvdXQgYENGRzgwMjExYCBhbmQgYE1BQzgwMjExYCwgZXZlbiB0aG91Z2ggYGJyY21mbWFjYCBpcyBhIEZ1bGxNQUMgaW1wbGVtZW50YXRpb247IGl0IHN0aWxsIHJlbGllcyBvbiBgQ0ZHODAyMTFgIGFzIGl0cyBjb25maWd1cmF0aW9uIGludGVyZmFjZS4gVGltZSB0byBkaWcgYSBiaXQgZGVlcGVyIGFuZCBzZWUgd2hhdCBkZXBlbmRlbmNpZXMgYEJSQ01GTUFDYCBpdHNlbGYgaGFzLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcgY3J1Y2lhbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE1ODMsIk91dHB1dFRva2VucyI6NDksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDY6NDE6NDYuOTkxNDMzMzAzWiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTMxODEwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlJDTUZNQUNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWc6MTpjb25maWcgQlJDTUZNQUNcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZy0yLVxcdHRyaXN0YXRlIFxcXCJCcm9hZGNvbSBGdWxsTUFDIFdMQU4gZHJpdmVyXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWctMTAtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWc6MTE6Y29uZmlnIEJSQ01GTUFDX1BST1RPX0JDRENcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZy0xMi1cXHRib29sXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWctMTMtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWc6MTQ6Y29uZmlnIEJSQ01GTUFDX1BST1RPX01TR0JVRlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnLTE1LVxcdGJvb2xcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZy0xNi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZzoxNzpjb25maWcgQlJDTUZNQUNfU0RJT1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnLTE4LVxcdGJvb2wgXFxcIlNESU8gYnVzIGludGVyZmFjZSBzdXBwb3J0IGZvciBGdWxsTUFDIGRyaXZlclxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnLTI4LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnOjI5OmNvbmZpZyBCUkNNRk1BQ19VU0JcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZy0zMC1cXHRib29sIFxcXCJVU0IgYnVzIGludGVyZmFjZSBzdXBwb3J0IGZvciBGdWxsTUFDIGRyaXZlclxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnLTM5LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnOjQwOmNvbmZpZyBCUkNNRk1BQ19QQ0lFXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWctNDEtXFx0Ym9vbCBcXFwiUENJRSBidXMgaW50ZXJmYWNlIHN1cHBvcnQgZm9yIEZ1bGxNQUMgZHJpdmVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNjo0MTo0Ny4wMzI3NTc4NDJaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzA1MDA1MzM3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBob3cgSSdtIHRoaW5raW5nIGFib3V0IGl0OlxuXG4qKkV4YW1pbmluZyB0aGUgQlJDTUZNQUMgS2NvbmZpZyBmb3IgRGVwZW5kZW5jaWVzKipcblxuUmlnaHQsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgZm9yIHRoaXMgc3BlY2lmaWMgQnJvYWRjb20gV2ktRmkgZHJpdmVyLCB0aGUgYGJyY21mbWFjYCBtb2R1bGUsIHdpdGhpbiB0aGUgYnJvYWRlciBrZXJuZWwgY29uZmlndXJhdGlvbi4gVGhlIGBLY29uZmlnYCBmaWxlIGlzIHRoZSBzdGFuZGFyZCBwbGFjZSB0byBzdGFydC4gSXQgY29udGFpbnMgYWxsIHRoZSBuZWNlc3NhcnkgZGVwZW5kZW5jeSBkZWZpbml0aW9ucywgc28gSSBjYW4gc2VlIHdoYXQgb3RoZXIga2VybmVsIGZlYXR1cmVzIG9yIG1vZHVsZXMgKm5lZWQqIHRvIGJlIGVuYWJsZWQsIG9yICpjYW4qIGJlIGVuYWJsZWQgYWxvbmdzaWRlIHRoaXMgZHJpdmVyLiBJJ20gZ29pbmcgdG8gcXVpY2tseSBwYXJzZSB0aGF0IGBLY29uZmlnYCB0byBidWlsZCBhIG1lbnRhbCBtYXAgb2YgaXRzIHN1cHBvcnQsIHVuZGVyc3RhbmQgaXRzIGNvbmRpdGlvbnMsIGFuZCBjb25zaWRlciBhbnkgcG90ZW50aWFsIGNvbmZsaWN0cyBvciBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRoaXMgZHJpdmVyIGZpdHMgaW50byB0aGUgbGFyZ2VyIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyNTI4LCJPdXRwdXRUb2tlbnMiOjUwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDY6NDE6NTQuMDgyODE0MDA4WiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyOTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0Y29uZmlnIEJSQ01GTUFDXFxuICAgMjpcXHRcXHR0cmlzdGF0ZSBcXFwiQnJvYWRjb20gRnVsbE1BQyBXTEFOIGRyaXZlclxcXCJcXG4gICAzOlxcdFxcdGRlcGVuZHMgb24gQ0ZHODAyMTFcXG4gICA0OlxcdFxcdHNlbGVjdCBCUkNNVVRJTFxcbiAgIDU6XFx0XFx0aGVscFxcbiAgIDY6XFx0XFx0ICBUaGlzIG1vZHVsZSBhZGRzIHN1cHBvcnQgZm9yIHdpcmVsZXNzIGFkYXB0ZXJzIGJhc2VkIG9uIEJyb2FkY29tXFxuICAgNzpcXHRcXHQgIEZ1bGxNQUMgY2hpcHNldHMuIEl0IGhhcyB0byB3b3JrIHdpdGggYXQgbGVhc3Qgb25lIG9mIHRoZSBidXNcXG4gICA4OlxcdFxcdCAgaW50ZXJmYWNlIHN1cHBvcnQuIElmIHlvdSBjaG9vc2UgdG8gYnVpbGQgYSBtb2R1bGUsIGl0J2xsIGJlIGNhbGxlZFxcbiAgIDk6XFx0XFx0ICBicmNtZm1hYy5rby5cXG4gIDEwOlxcdFxcbiAgMTE6XFx0Y29uZmlnIEJSQ01GTUFDX1BST1RPX0JDRENcXG4gIDEyOlxcdFxcdGJvb2xcXG4gIDEzOlxcdFxcbiAgMTQ6XFx0Y29uZmlnIEJSQ01GTUFDX1BST1RPX01TR0JVRlxcbiAgMTU6XFx0XFx0Ym9vbFxcbiAgMTY6XFx0XFxuICAxNzpcXHRjb25maWcgQlJDTUZNQUNfU0RJT1xcbiAgMTg6XFx0XFx0Ym9vbCBcXFwiU0RJTyBidXMgaW50ZXJmYWNlIHN1cHBvcnQgZm9yIEZ1bGxNQUMgZHJpdmVyXFxcIlxcbiAgMTk6XFx0XFx0ZGVwZW5kcyBvbiAoTU1DID0geSB8fCBNTUMgPSBCUkNNRk1BQylcXG4gIDIwOlxcdFxcdGRlcGVuZHMgb24gQlJDTUZNQUNcXG4gIDIxOlxcdFxcdHNlbGVjdCBCUkNNRk1BQ19QUk9UT19CQ0RDXFxuICAyMjpcXHRcXHRzZWxlY3QgRldfTE9BREVSXFxuICAyMzpcXHRcXHRkZWZhdWx0IHlcXG4gIDI0OlxcdFxcdGhlbHBcXG4gIDI1OlxcdFxcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgU0RJTyBidXMgaW50ZXJmYWNlIHN1cHBvcnQgZm9yIEJyb2FkY29tXFxuICAyNjpcXHRcXHQgIElFRUU4MDIuMTFuIGVtYmVkZGVkIEZ1bGxNQUMgV0xBTiBkcml2ZXIuIFNheSBZIGlmIHlvdSB3YW50IHRvXFxuICAyNzpcXHRcXHQgIHVzZSB0aGUgZHJpdmVyIGZvciBhIFNESU8gd2lyZWxlc3MgY2FyZC5cXG4gIDI4OlxcdFxcbiAgMjk6XFx0Y29uZmlnIEJSQ01GTUFDX1VTQlxcbiAgMzA6XFx0XFx0Ym9vbCBcXFwiVVNCIGJ1cyBpbnRlcmZhY2Ugc3VwcG9ydCBmb3IgRnVsbE1BQyBkcml2ZXJcXFwiXFxuICAzMTpcXHRcXHRkZXBlbmRzIG9uIChVU0IgPSB5IHx8IFVTQiA9IEJSQ01GTUFDKVxcbiAgMzI6XFx0XFx0ZGVwZW5kcyBvbiBCUkNNRk1BQ1xcbiAgMzM6XFx0XFx0c2VsZWN0IEJSQ01GTUFDX1BST1RPX0JDRENcXG4gIDM0OlxcdFxcdHNlbGVjdCBGV19MT0FERVJcXG4gIDM1OlxcdFxcdGhlbHBcXG4gIDM2OlxcdFxcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgVVNCIGJ1cyBpbnRlcmZhY2Ugc3VwcG9ydCBmb3IgQnJvYWRjb21cXG4gIDM3OlxcdFxcdCAgSUVFRTgwMi4xMW4gZW1iZWRkZWQgRnVsbE1BQyBXTEFOIGRyaXZlci4gU2F5IFkgaWYgeW91IHdhbnQgdG9cXG4gIDM4OlxcdFxcdCAgdXNlIHRoZSBkcml2ZXIgZm9yIGFuIFVTQiB3aXJlbGVzcyBjYXJkLlxcbiAgMzk6XFx0XFxuICA0MDpcXHRjb25maWcgQlJDTUZNQUNfUENJRVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNjo0MTo1NC4wODI4NzgwNjhaIiwiU2VxIjo0NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA1MTU0MjkxMDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIEJSQ01GTUFDIERyaXZlciBhbmQgUG90ZW50aWFsIEV4cGxvaXRhdGlvbioqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIGBCUkNNRk1BQ2Agc2l0dWF0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgQlJDTUZNQUNgIHJlbGllcyBoZWF2aWx5IG9uIGBDRkc4MDIxMWAsIGFuZCBgQlJDTUZNQUNfVVNCYCBidWlsZHMgb24gdGhhdCBhbmQgdGhlIGBVU0JgIHN1YnN5c3RlbSBhcyB3ZWxsLiBUaGVyZWZvcmUsIHRvIGVuc3VyZSBwcm9wZXIgZnVuY3Rpb25hbGl0eSwgSSBzaG91bGQgZW5hYmxlIGBCUkNNRk1BQ2AsIGBCUkNNRk1BQ19VU0JgLCBgQ0ZHODAyMTFgLCBhbmQgYFVTQmAgaW4gdGhlIGNvbmZpZ3VyYXRpb24uIEFsc28sIHRoZSBmaXJtd2FyZSBsb2FkaW5nIG1lY2hhbmlzbSBgRldfTE9BREVSYCBpcyBzZWxlY3RlZCwgb2YgY291cnNlLlxuXG5JIGJyaWVmbHkgY29uc2lkZXJlZCBpZiBhbnkgb3RoZXIgY29uZmlncyB3ZXJlIGNyaXRpY2FsLCBidXQgSSBkb24ndCBzZWUgYW55IG90aGVyIGltbWVkaWF0ZWx5LiBXaGlsZSBgTUFDODAyMTFgIGlzbid0IHN0cmljdGx5ICpyZXF1aXJlZCosIGl0J3MgdXN1YWxseSBlbmFibGVkIHdpdGggYEJSQ01GTUFDYCwgc28gaXQncyBwcm9iYWJseSBiZXN0IHByYWN0aWNlIHRvIGhhdmUgdGhhdCBvbi5cblxuTXkgYXR0ZW50aW9uIGlzIG5vdyBzcXVhcmVseSBvbiBgYnJjbWZfY3l3X2V4dGVybmFsX2F1dGhgLiBJdCBzZWVtcyB0aGUgcGF0Y2ggaXMgY2VudGVyZWQgb24gdGhhdCBzcGVjaWZpYyBmdW5jdGlvbi4gSSdtIHdvbmRlcmluZyBpZiB0aGlzIGlzIHRoZSAqb25seSogZW50cnkgcG9pbnQgdGhlIHBhdGNoIG1vZGlmaWVzLiBZZXMsIGxvb2tzIGxpa2UgaXQncyB0aGUgb25seSBvbmUuXG5cbk5vdyBJIG5lZWQgdG8gY29uZmlybSBpZiBgYnJjbWZfY3l3X2V4dGVybmFsX2F1dGhgIGlzIGFjdHVhbGx5IHJlYWNoYWJsZS4gVGhhbmtmdWxseSwgaXQncyByZWdpc3RlcmVkIHRocm91Z2ggdGhlIGRyaXZlcidzIG9wZXJhdGlvbnMgc3RydWN0dXJlIGFzIGBkcnZyLVx1MDAzZW9wcy1cdTAwM2VleHRlcm5hbF9hdXRoID0gYnJjbWZfY3l3X2V4dGVybmFsX2F1dGg7YCwgc28gdGhhdCdzIGdvb2QuIEZ1cnRoZXIsIHRoZSBgY2ZnODAyMTFfb3BzYCBhbHNvIGhhcyBhbiBgZXh0ZXJuYWxfYXV0aGAgcG9pbnRlci4gVGhhdCdzIGV4Y2VsbGVudCEgVGhlIGZ1bmN0aW9uIGlzIHJlYWNoZWQgd2hlbiB0aGUgdXNlciBzcGFjZSBzZW5kcyB0aGUgYE5MODAyMTFfQ01EX0VYVEVSTkFMX0FVVEhgIGNvbW1hbmQsIGFuZCBgY2ZnODAyMTFgIGNhbGxzIGByZGV2LVx1MDAzZW9wcy1cdTAwM2VleHRlcm5hbF9hdXRoYC4gVGhpcyBtZWFucyB0aGF0IGl0ICppcyogaW5kZWVkIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIG5ldGxpbmsuIFBlcmZlY3QuXG5cblRoZSBvbmx5IHByZXJlcXVpc2l0ZSBpcyB0aGF0IHRoZSBgYnJjbWZtYWNgIGRldmljZSBtdXN0IGJlIHByb2JlZCBhbmQgcmVnaXN0ZXJlZCB3aXRoIGBjZmc4MDIxMWAuIFRoYXQgc2hvdWxkIGJlIG5vIHByb2JsZW0uIFN5emthbGxlciBpcyBhYmxlIHRvIGVtdWxhdGUgVVNCIGRldmljZXMsIHNvIGl0IGNhbiB0cmlnZ2VyIHRoZSBwcm9iZSBvZiBgYnJjbWZtYWNgIHZpYSBVU0IuIEhvd2V2ZXIsIHRoZSBgYnJjbWZtYWNgIGRyaXZlciwgaW4gdHVybiwgbmVlZHMgZmlybXdhcmUgdG8gY29tcGxldGUgaXRzIHByb2JlIGFuZCByZWdpc3RyYXRpb24uXG5cbk5vdyB0aGUgbWlsbGlvbi1kb2xsYXIgcXVlc3Rpb246IERvZXMgc3l6a2FsbGVyIHByb3ZpZGUgZmlybXdhcmUgZm9yIGBicmNtZm1hY2A/IEl0ICptaWdodCouIEkga25vdyB0aGF0IFN5emthbGxlcidzIGBzeXotZXhlY3V0b3JgIGNhbiBpbnRlcmNlcHQgZmlybXdhcmUgcmVxdWVzdHMgaWYgYENPTkZJR19GV19MT0FERVJfVVNFUl9IRUxQRVJgIGlzIGVuYWJsZWQsIGFuZCBjb3VsZCBwcm92aWRlIGR1bW15IGZpcm13YXJlLiBCdXQsIGhlcmUncyB0aGUgY2F0Y2ggLSBgYnJjbWZtYWNgIHZhbGlkYXRlcyB0aGUgZmlybXdhcmUuXG5cbmBgYGNcblx0cmV0ID0gY2hlY2tfZmlsZShmdy1cdTAwM2VkYXRhKTtcblx0aWYgKHJldCBcdTAwM2MgMCkge1xuXHRcdGJyY21mX2VycihcImludmFsaWQgZmlybXdhcmVcXG5cIik7XG5cdFx0cmVsZWFzZV9maXJtd2FyZShmdyk7XG5cdFx0Z290byBlcnJvcjtcblx0fVxuYGBgXG5cblNvIEkgbmVlZCB0byBjaGVjayB3aGF0IGBjaGVja19maWxlYCBhY3R1YWxseSAqZG9lcyouIFRoYXQncyB0aGUgbmV4dCBjcml0aWNhbCBzdGVwIHRvIHNlZSBpZiB0aGlzIGlzIGV4cGxvaXRhYmxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzM0NSwiT3V0cHV0VG9rZW5zIjo0OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA2OjQyOjA0LjU5ODMwOTI4OVoiLCJTZXEiOjQ2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDE0MjIxMTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY2hlY2tfZmlsZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jPTEwNjI9c3RhdGljIHZvaWQgYnJjbWZfdXNiX2RldGFjaChzdHJ1Y3QgYnJjbWZfdXNiZGV2X2luZm8gKmRldmluZm8pXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtMTA4MC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM6MTA4MTpzdGF0aWMgaW50IGNoZWNrX2ZpbGUoY29uc3QgdTggKmhlYWRlcnMpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTEwODIte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jPTExNzY9c3RhdGljIHZvaWQgYnJjbWZfdXNiX3Byb2JlX3BoYXNlMihzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCByZXQsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtMTE5MC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM6MTE5MTpcXHRyZXQgPSBjaGVja19maWxlKGZ3LVxcdTAwM2VkYXRhKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtMTE5Mi1cXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNjo0MjowNC42Mzk3MzQ2OThaIiwiU2VxIjo0NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDAyMDA0MjI1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipBbmFseXppbmcgdGhlIGBjaGVja19maWxlYCBGdW5jdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzIGBjaGVja19maWxlYCBmdW5jdGlvbi4gTXkgZmlyc3QgaW5zdGluY3QsIGFzIGFsd2F5cywgaXMgdG8gdW5kZXJzdGFuZCBpdHMgc2NvcGUuIElzIHRoaXMgYSB1dGlsaXR5IGZ1bmN0aW9uIHdpdGhpbiBhIGxhcmdlciBtb2R1bGUsIG9yIGlzIGl0IGEgc3RhbmRhbG9uZSBzY3JpcHQ/IFRoZSBjb250ZXh0IGlzIGNydWNpYWwgZm9yIGFudGljaXBhdGluZyBpdHMgcHVycG9zZS4gSSdtIGltbWVkaWF0ZWx5IHRoaW5raW5nIGFib3V0IHBvdGVudGlhbCBlZGdlIGNhc2VzLiBXaGF0IGtpbmQgb2YgZmlsZSB0eXBlcyBhcmUgd2UgZGVhbGluZyB3aXRoPyBJcyB0aGVyZSBhIG5lZWQgZm9yIGFueSBraW5kIG9mIGZpbGUgc2l6ZSBjaGVja2luZz8gQXJlIHRoZXJlIGFueSBzZWN1cml0eSBjb25zaWRlcmF0aW9ucyBJIHNob3VsZCBiZWFyIGluIG1pbmQ/IENvdWxkIHRoaXMgYmUgdnVsbmVyYWJsZSB0byBhIHBhdGggdHJhdmVyc2FsIGF0dGFjaywgb3Igc29tZXRoaW5nIHNpbWlsYXI/IEknbGwgcHJvYmFibHkgc3RhcnQgc2Nhbm5pbmcgZm9yIGNvbW1vbiB2dWxuZXJhYmlsaXRpZXMuIEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGFyZWFzIGZvciBidWZmZXIgb3ZlcmZsb3dzPyBJcyBpdCBoYW5kbGluZyBmaWxlIHBlcm1pc3Npb25zIHByb3Blcmx5PyBXaGF0IGtpbmQgb2YgZXJyb3JzIGRvZXMgaXQgaGFuZGxlPyBBcmUgdGhlIGVycm9yIG1lc3NhZ2VzIGNsZWFyIGFuZCBoZWxwZnVsPyBJIG5lZWQgdG8gbG9vayBmb3IgYW55IGhpZGRlbiBkZXBlbmRlbmNpZXMuIElzIGl0IHVzaW5nIGFueSBleHRlcm5hbCBsaWJyYXJpZXM/IElmIHNvLCBhcmUgdGhleSBiZWluZyBoYW5kbGVkIGNvcnJlY3RseT8gQW5kIGZpbmFsbHksIG9mIGNvdXJzZSwgSSdsbCBuZWVkIHRvIGxvb2sgZm9yIGFueSBjb25jdXJyZW5jeSBpc3N1ZXMgaWYgSSdtIGFzc3VtaW5nIGl0IG1pZ2h0IGJlIHVzZWQgaW4gYSBtdWx0aXRocmVhZGVkIGVudmlyb25tZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDkxNSwiT3V0cHV0VG9rZW5zIjo1NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDY6NDI6MDguNjU5NzgwMDc2WiIsIlNlcSI6NDgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMTMzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTA4MSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTA4MTpcXHRzdGF0aWMgaW50IGNoZWNrX2ZpbGUoY29uc3QgdTggKmhlYWRlcnMpXFxuMTA4MjpcXHR7XFxuMTA4MzpcXHRcXHRzdHJ1Y3QgdHJ4X2hlYWRlcl9sZSAqdHJ4O1xcbjEwODQ6XFx0XFx0aW50IGFjdHVhbF9sZW4gPSAtMTtcXG4xMDg1OlxcdFxcbjEwODY6XFx0XFx0YnJjbWZfZGJnKFVTQiwgXFxcIkVudGVyXFxcXG5cXFwiKTtcXG4xMDg3OlxcdFxcdC8qIEV4dHJhY3QgdHJ4IGhlYWRlciAqL1xcbjEwODg6XFx0XFx0dHJ4ID0gKHN0cnVjdCB0cnhfaGVhZGVyX2xlICopIGhlYWRlcnM7XFxuMTA4OTpcXHRcXHRpZiAodHJ4LVxcdTAwM2VtYWdpYyAhPSBjcHVfdG9fbGUzMihUUlhfTUFHSUMpKVxcbjEwOTA6XFx0XFx0XFx0cmV0dXJuIC0xO1xcbjEwOTE6XFx0XFxuMTA5MjpcXHRcXHRoZWFkZXJzICs9IHNpemVvZihzdHJ1Y3QgdHJ4X2hlYWRlcl9sZSk7XFxuMTA5MzpcXHRcXG4xMDk0OlxcdFxcdGlmIChsZTMyX3RvX2NwdSh0cngtXFx1MDAzZWZsYWdfdmVyc2lvbikgXFx1MDAyNiBUUlhfVU5DT01QX0lNQUdFKSB7XFxuMTA5NTpcXHRcXHRcXHRhY3R1YWxfbGVuID0gbGUzMl90b19jcHUodHJ4LVxcdTAwM2VvZmZzZXRzW1RSWF9PRkZTRVRTX0RMRldMRU5fSURYXSk7XFxuMTA5NjpcXHRcXHRcXHRyZXR1cm4gYWN0dWFsX2xlbiArIHNpemVvZihzdHJ1Y3QgdHJ4X2hlYWRlcl9sZSk7XFxuMTA5NzpcXHRcXHR9XFxuMTA5ODpcXHRcXHRyZXR1cm4gLTE7XFxuMTA5OTpcXHR9XFxuMTEwMDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDY6NDI6MDguNjU5OTAyOTY2WiIsIlNlcSI6NDksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExOTIxMTk4MjE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgU3l6a2FsbGVyIEZpcm13YXJlIEZ1enppbmcgU2NlbmFyaW8qKlxuXG5Pa2F5LCBzbyBJJ20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaG93IHN5emthbGxlciBpcyBoaXR0aW5nIHRoaXMgYGJyY21mX2N5d19leHRlcm5hbF9hdXRoYCBjb2RlIHBhdGguIFRoZSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCdzIGEgZmlybXdhcmUgYnVnLCBzbyB0aGUgZmlybXdhcmUgbmVlZHMgdG8gc3RhcnQgd2l0aCBgVFJYX01BR0lDYCBhbmQgdGhlIGBUUlhfVU5DT01QX0lNQUdFYCBmbGFnLiBCdXQgc3l6a2FsbGVyJ3MgZmlybXdhcmUgZnV6emluZyBzZXR1cCwgb3IgcG90ZW50aWFsbHkgaXRzIGhlbHBlcnMsIG1pZ2h0IG5vdCByZWNvZ25pemUgdGhpcyBtYWdpYyBzaWduYXR1cmUuIEkga25vdyBzeXprYWxsZXIgaGFzIHNvbWUgaW1hZ2UgbW91bnRpbmcgY2FwYWJpbGl0aWVzIChgc3l6X21vdW50X2ltYWdlYCksIGJ1dCBpdCBzZWVtcyB0byBwcm92aWRlIG1vc3RseSByYW5kb20gb3IgZW1wdHkgZGF0YSBmb3IgZmlybXdhcmUsIHdoaWNoIG1ha2VzIGhpdHRpbmcgdGhlIG1hZ2ljIGhlYWRlciBpbmNyZWRpYmx5IHVubGlrZWx5LlxuXG5Ib3dldmVyLCBJIHNlZSBhIGNvbW1pdCBtZXNzYWdlIFwic3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XCIuIFRoaXMgc3VnZ2VzdHMgc3l6a2FsbGVyIGZvdW5kIGEgYnVnIGhlcmUsIG9yIGlzIGFjdGl2ZWx5IGZ1enppbmcgdGhpcyBhcmVhLiBJdCdzIHVzaW5nIGBzeXpfZ2VuZXRsaW5rX2dldF9mYW1pbHlgIGFuZCBgc3l6XzgwMjExXy4uLmAgc3lzY2FsbHMsIHdoaWNoIHBvaW50cyB0b3dhcmRzIHRoZSBwb3RlbnRpYWwgb2YgaGl0dGluZyB0aGlzIGZyb20gYSBrZXJuZWwgc3BhY2UsIG9yIGEgdXNlciBzcGFjZSB0aGF0IGNhbiBhY2Nlc3MgdGhpcyBjb2RlIHZpYSB0aG9zZSBpbnRlcmZhY2VzLlxuXG5JIGNvbnNpZGVyZWQgYG1hYzgwMjExX2h3c2ltYCwgYnV0IHF1aWNrbHkgZGlzbWlzc2VkIGl0IGJlY2F1c2UgaXQncyBhIGRpZmZlcmVudCBkcml2ZXIuIElzIGBicmNtZl9jeXdfZXh0ZXJuYWxfYXV0aGAgcmVhY2hhYmxlIHRocm91Z2ggb3RoZXIgZHJpdmVycz8gTm8sIGl0J3MgZmlybWx5IHdpdGhpbiBgYnJjbWZtYWNgLlxuXG5Ob3csIHRoZSBxdWVzdGlvbiBpcyBob3cgc3l6a2FsbGVyIGlzIHByb3ZpZGluZyB0aGUgZmlybXdhcmUuIERvZXMgaXQgaGF2ZSBhIHNwZWNpZmljIGRlc2NyaXB0aW9uIGZvciBgYnJjbWZtYWNgIGZpcm13YXJlLCBvciBpcyB0aGlzIHBhdGNoIGJlaW5nIHRlc3RlZCBhZnRlciBhbm90aGVyIGZ1enplciBmb3VuZCB0aGUgYnVnP1xuXG5UaGUgY29tbWl0IG1lc3NhZ2UgXCJzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcIiBpcyBzdGFuZGFyZCBmb3Igc3l6Ym90J3MgcGF0Y2ggdGVzdGluZywgbWVhbmluZyBhIHVzZXIgcmVxdWVzdGVkIHRoYXQgc3l6Ym90IHRlc3QgYSBwYXRjaCB0byByZXByb2R1Y2UgYSBidWcgcmVwb3J0ZWQgYnkgc3l6Ym90LiBJZiBzeXpib3QgZm91bmQgYSBidWcgaW4gdGhpcyBmdW5jdGlvbiwgaXQgKmNhbiogcmVhY2ggaXQuXG5cbkhvdz8gQWhhISBTeXprYWxsZXIncyByb290IGZpbGUgc3lzdGVtIGltYWdlcyAobGlrZSBgYnVsbHNleWUuaW1nYCkgdXN1YWxseSBjb250YWluIHRoZSBgbGludXgtZmlybXdhcmVgIHBhY2thZ2UuIFRoaXMgaW5jbHVkZXMgdGhlIEJyb2FkY29tIGZpcm13YXJlcyAoYGJyY21mbWFjKi1zZGlvLmJpbmAsIGBicmNtZm1hYyotdXNiLmJpbmAsIGV0Yy4pLiBJZiB0aGUgZmlybXdhcmUgaXMgcHJlc2VudCBpbiB0aGUgcm9vdGZzLCBgcmVxdWVzdF9maXJtd2FyZWAgd2lsbCBzdWNjZWVkISBBbmQgc3l6a2FsbGVyIGVtdWxhdGVzIFVTQiBkZXZpY2VzLCBzbyBpdCdzIHByb2JhYmx5IGVtdWxhdGluZyBhIEJyb2FkY29tIFVTQiBXaS1GaSBkb25nbGUuXG5cbklmIGl0IGVtdWxhdGVzIHRoZSBVU0IgZGV2aWNlLCBpdCByZWNlaXZlcyB0aGUgZmlybXdhcmUgZG93bmxvYWQgY29tbWFuZHMuIElmIHRoZSBmaXJtd2FyZSBpcyByZWFsLCBmcm9tIGBsaW51eC1maXJtd2FyZWAsIGBjaGVja19maWxlYCB3aWxsIHBhc3MgYmVjYXVzZSBpdCdzIGEgdmFsaWQgZmlybXdhcmUgZmlsZS4gVGhlbiBgYnJjbWZfdXNiX2Z3X2Rvd25sb2FkYCB3aWxsIHNlbmQgdGhlIGZpcm13YXJlIHRvIHRoZSBlbXVsYXRlZCBVU0IgZGV2aWNlLiBUaGUgZW11bGF0ZWQgVVNCIGRldmljZSAodmhjaSkganVzdCBuZWVkcyB0byBhY2NlcHQgdGhlIFVSQnMuIFRoZW4gYGJyY21mX2F0dGFjaGAgaXMgY2FsbGVkLlxuXG5UaGUga2V5IGlzIGBicmNtZl9idXNfc3RhcnRlZGAuIEl0IHNlbmRzIGNvbW1hbmRzIHRvIHRoZSBkb25nbGUgKGBicmNtZl9jX3ByZWluaXRfZGNtZHNgKS4gSWYgdGhlIGVtdWxhdGVkIFVTQiBkZXZpY2UgZG9lc24ndCByZXNwb25kIGNvcnJlY3RseSwgYGJyY21mX2J1c19zdGFydGVkYCBtaWdodCBmYWlsLiBUaGlzIGlzIHRoZSBsaWtlbHkgYXJlYSBmb3IgYSBjcmFzaCB0byBvY2N1ci4gSSBzaG91bGQgYWxzbyBjaGVjayBgYnJjbWZfaWdub3JlX3Byb2JlX2ZhaWxgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTU0OCwiT3V0cHV0VG9rZW5zIjo1MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY2NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA2OjQyOjIwLjU4MTEwNDA3NFoiLCJTZXEiOjUwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU2NjE1ODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnJjbWZfaWdub3JlX3Byb2JlX2ZhaWxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29tbW9uLmM9Njg9TU9EVUxFX1BBUk1fREVTQyhpYXBwLCBcXFwiRW5hYmxlIHBhcnRpYWwgc3VwcG9ydCBmb3IgdGhlIG9ic29sZXRlZCBJbnRlci1BY2Nlc3MgUG9pbnQgUHJvdG9jb2xcXFwiKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb21tb24uYy03MS0vKiBhbHdheXMgc3VjY2VlZCBicmNtZl9idXNfc3RhcnRlZCgpICovXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvbW1vbi5jOjcyOnN0YXRpYyBpbnQgYnJjbWZfaWdub3JlX3Byb2JlX2ZhaWw7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvbW1vbi5jOjczOm1vZHVsZV9wYXJhbV9uYW1lZChpZ25vcmVfcHJvYmVfZmFpbCwgYnJjbWZfaWdub3JlX3Byb2JlX2ZhaWwsIGludCwgMCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvbW1vbi5jLTc0LU1PRFVMRV9QQVJNX0RFU0MoaWdub3JlX3Byb2JlX2ZhaWwsIFxcXCJhbHdheXMgc3VjY2VlZCBwcm9iZSBmb3IgZGVidWdnaW5nXFxcIik7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29tbW9uLmM9NTEyPXN0cnVjdCBicmNtZl9tcF9kZXZpY2UgKmJyY21mX2dldF9tb2R1bGVfcGFyYW0oc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvbW1vbi5jLTUzMy0jaWZkZWYgREVCVUdcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29tbW9uLmM6NTM0OlxcdHNldHRpbmdzLVxcdTAwM2VpZ25vcmVfcHJvYmVfZmFpbCA9ICEhYnJjbWZfaWdub3JlX3Byb2JlX2ZhaWw7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvbW1vbi5jLTUzNS0jZW5kaWZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDY6NDI6MjAuNjI2NzcwODkyWiIsIlNlcSI6NTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxOTkyOTgzMjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgYnJjbWZfaWdub3JlX3Byb2JlX2ZhaWwqKlxuXG5SaWdodCwgKmJyY21mX2lnbm9yZV9wcm9iZV9mYWlsKi4gVGhhdCdzIGEgY2xhc3NpYy4gU28sIGl0J3MgYSBtb2R1bGUgcGFyYW1ldGVyIHRoYXQgYmFzaWNhbGx5IGZvcmNlcyBgYnJjbWZfYnVzX3N0YXJ0ZWRgIHRvICphbHdheXMqIHJldHVybiBzdWNjZXNzLiBJbnRlcmVzdGluZy4gV29uZGVyIHdoYXQgdGhlIGltcGxpY2F0aW9ucyBhcmUgaW4gcHJhY3RpY2U/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzaWRlLWVmZmVjdHMuXG5cbk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHRyYWNlIHRoZSB1c2FnZSBvZiBgaWdub3JlX3Byb2JlX2ZhaWxgLiBXaGVyZSBkb2VzIHRoYXQgdmFsdWUgYWN0dWFsbHkgZ2V0IHVzZWQ/IExldCdzIGNoZWNrIHRoZSBjb2RlIGFuZCBzZWUgZXhhY3RseSB3aGF0IGhhcHBlbnMgd2hlbiB0aGF0IGZsYWcgaXMgc2V0LCBhbmQgaG93IGl0IGltcGFjdHMgdGhlIG92ZXJhbGwgaW5pdGlhbGl6YXRpb24gZmxvdy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHdlIGFyZSBtYXNraW5nIGEgcG90ZW50aWFsIGhhcmR3YXJlIHByb2JlIGZhaWx1cmUgYW5kIHdoYXQgdGhlIGNvcnJlc3BvbmRpbmcgdHJhZGUtb2ZmcyBhcmUuIFdoYXQncyB0aGUgY29zdCBvZiB0aGlzPyBBcmUgd2UgaW50cm9kdWNpbmcgcmFjZSBjb25kaXRpb25zLCBvciBtYWtpbmcgaXQgaGFyZGVyIHRvIGRpYWdub3NlIHJlYWwgaGFyZHdhcmUgaXNzdWVzIGRvd24gdGhlIGxpbmU/IFRoaXMgY291bGQgYmUgbWFza2luZyBhIHJlYWwgcHJvYmxlbS4gVGltZSB0byBkaWcgaW4uLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjczOTMsIk91dHB1dFRva2VucyI6NDcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNjo0MjoyNC44MjYwNzI0MjVaIiwiU2VxIjo1MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzMjE4NDM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlnbm9yZV9wcm9iZV9mYWlsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvbW1vbi5jPTY4PU1PRFVMRV9QQVJNX0RFU0MoaWFwcCwgXFxcIkVuYWJsZSBwYXJ0aWFsIHN1cHBvcnQgZm9yIHRoZSBvYnNvbGV0ZWQgSW50ZXItQWNjZXNzIFBvaW50IFByb3RvY29sXFxcIik7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29tbW9uLmMtNzEtLyogYWx3YXlzIHN1Y2NlZWQgYnJjbWZfYnVzX3N0YXJ0ZWQoKSAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb21tb24uYzo3MjpzdGF0aWMgaW50IGJyY21mX2lnbm9yZV9wcm9iZV9mYWlsO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb21tb24uYzo3Mzptb2R1bGVfcGFyYW1fbmFtZWQoaWdub3JlX3Byb2JlX2ZhaWwsIGJyY21mX2lnbm9yZV9wcm9iZV9mYWlsLCBpbnQsIDApO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb21tb24uYzo3NDpNT0RVTEVfUEFSTV9ERVNDKGlnbm9yZV9wcm9iZV9mYWlsLCBcXFwiYWx3YXlzIHN1Y2NlZWQgcHJvYmUgZm9yIGRlYnVnZ2luZ1xcXCIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb21tb24uYy03NS0jZW5kaWZcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb21tb24uYz01MTI9c3RydWN0IGJyY21mX21wX2RldmljZSAqYnJjbWZfZ2V0X21vZHVsZV9wYXJhbShzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29tbW9uLmMtNTMzLSNpZmRlZiBERUJVR1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb21tb24uYzo1MzQ6XFx0c2V0dGluZ3MtXFx1MDAzZWlnbm9yZV9wcm9iZV9mYWlsID0gISFicmNtZl9pZ25vcmVfcHJvYmVfZmFpbDtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29tbW9uLmMtNTM1LSNlbmRpZlxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvbW1vbi5oPTMxPWV4dGVybiBzdHJ1Y3QgYnJjbWZfbXBfZ2xvYmFsX3QgYnJjbWZfbXBfZ2xvYmFsO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvbW1vbi5oLTM5LSAqIEByb2Ftb2ZmOiBGaXJtd2FyZSByb2FtaW5nIG9mZj9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29tbW9uLmg6NDA6ICogQGlnbm9yZV9wcm9iZV9mYWlsOiBJZ25vcmUgcHJvYmUgZmFpbHVyZS5cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29tbW9uLmgtNDEtICogQHRyaXZpYWxfY2NvZGVfbWFwOiBBc3N1bWUgZmlybXdhcmUgdXNlcyBJU08zMTY2IGNvdW50cnkgY29kZXMgd2l0aCByZXYgMFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvbW1vbi5oPTQ1PXN0cnVjdCBicmNtZl9tcF9kZXZpY2Uge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvbW1vbi5oLTUwLVxcdGJvb2xcXHRcXHRpYXBwO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb21tb24uaDo1MTpcXHRib29sXFx0XFx0aWdub3JlX3Byb2JlX2ZhaWw7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvbW1vbi5oLTUyLVxcdGJvb2xcXHRcXHR0cml2aWFsX2Njb2RlX21hcDtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmM9MTIyOT1zdGF0aWMgaW50IGJyY21mX2J1c19zdGFydGVkKHN0cnVjdCBicmNtZl9wdWIgKmRydnIsIHN0cnVjdCBjZmc4MDIxMV9vcHMgKm9wcylcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmMtMTMyMy1cXHRkcnZyLVxcdTAwM2VpZmxpc3RbMV0gPSBOVUxMO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmM6MTMyNDpcXHRpZiAoZHJ2ci1cXHUwMDNlc2V0dGluZ3MtXFx1MDAzZWlnbm9yZV9wcm9iZV9mYWlsKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmMtMTMyNS1cXHRcXHRyZXQgPSAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNjo0MjoyNC44NjkyOTc0NTRaIiwiU2VxIjo1MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQxODU1ODE0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEZWJ1Z2dpbmcgYSBRdWlya3kgRHJpdmVyKipcblxuWWVzISBJJ3ZlIGdvdCBpdC4gSWYgYGlnbm9yZV9wcm9iZV9mYWlsYCBpcyBlbmFibGVkLCBgYnJjbWZfYnVzX3N0YXJ0ZWRgIGlzIHByb2dyYW1tZWQgdG8gcmV0dXJuIDAsIGV2ZW4gd2hlbiB0aGUgaGFyZHdhcmUgaW50ZXJhY3Rpb25zIGFyZSBmYWlsaW5nLiBUaGF0J3MgYSBjbGV2ZXIgaGFjaywgZXhwbGljaXRseSBkZXNpZ25lZCBmb3IgZGVidWdnaW5nIGFuZCBmdXp6aW5nLCB3aGljaCBpcyBwZXJmZWN0IGZvciBteSBuZWVkcy4gVGhlIGdyZWF0IHRoaW5nIGFib3V0IFN5emthbGxlciBpcyB0aGF0IGl0IGFsbG93cyBtZSB0byBtb2RpZnkgdGhlIG1vZHVsZSBwYXJhbWV0ZXJzIGF0IHJ1bnRpbWUsIHdoaWNoIGlzIGNydWNpYWwgZm9yIGNvbnRyb2xsaW5nIHRoaXMgc29ydCBvZiBiZWhhdmlvci4gXG5cbldhaXQgYSBtaW51dGUsIEkgdGhpbmsgYGlnbm9yZV9wcm9iZV9mYWlsYCBpcyBvbmx5IGFjY2Vzc2libGUgaWYgYCNpZmRlZiBERUJVR2AuIFRoYXQncyBub3QgaWRlYWwsIGJ1dCBpdCdzIHVuZGVyc3RhbmRhYmxlLiBPa2F5LCBzbyBpcyBgREVCVUdgIGRlZmluZWQ/IFRpbWUgdG8gY29uc3VsdCB0aGUgc291cmNlIGFuZCBmaW5kIHRoZSBkZWZpbml0aW9uLiBMZXQgbWUgZ28gY2hlY2sgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9NYWtlZmlsZWAgYW5kIHNlZSBpZiB0aGVyZSBhcmUgYW55IGNsdWVzIHRoZXJlLiBMZXQncyBzZWUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg3MDUsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDY6NDI6MjkuMjg3ODU5MzQ5WiIsIlNlcSI6NTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTM4OTAyOCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiREVCVUdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNjo0MjoyOS4zMjkyNTYyNjhaIiwiU2VxIjo1NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk1MTQ4OTgyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBCUkNNRm1hYyBEZWJ1ZyBDb25maWd1cmF0aW9uKipcblxuUmlnaHQsIHRpbWUgdG8gdHJvdWJsZXNob290IHRoaXMgd2lyZWxlc3MgaXNzdWUuIE15IGZpcnN0IGluc3RpbmN0LCBnaXZlbiBteSBleHBlcmllbmNlIHdpdGggQnJvYWRjb20ncyBXaUZpIGRyaXZlcnMgYW5kIHRoZSBicmNtZm1hYyBzdWJzeXN0ZW0gc3BlY2lmaWNhbGx5LCBpcyB0byBjaGVjayB0aGUgZGVidWcgc2V0dGluZ3MuIFdoZXJlIHdvdWxkIHRob3NlIGJlIGRlZmluZWQ/IEFoLCB5ZXMsIGBkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZ2AuIFRoYXQncyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludCBmb3IgYW55IGRlYnVnZ2luZyBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byB0aGF0IGRyaXZlci4gVGhlIEtjb25maWcgZmlsZSBpcyB3aGVyZSBhbGwgdGhlIGJ1aWxkLXRpbWUgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgYXJlIGRlZmluZWQsIHNvIGlmIEkgbmVlZCB0byBlbmFibGUgc29tZSB2ZXJib3NlIG91dHB1dCBvciB0cmFjaW5nLCB0aGF0J3Mgd2hlcmUgSSdsbCBmaW5kIHRoZSByZWxldmFudCBzZXR0aW5ncywgbGlrZWx5IHVuZGVyIGEgYERFQlVHYCBvciBzaW1pbGFyIHN5bWJvbC4gTGV0J3Mgc2VlIHdoYXQncyBpbiB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjkwNjksIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNjo0MjozMy4yODA3NDg1MjhaIiwiU2VxIjo1NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQwNzIzOTg5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJERUJVR1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDY6NDI6MzMuMzIxNDc4OTM3WiIsIlNlcSI6NTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU2OTA3MjEzOTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCBtZSB0aGluayB0aGlzIHRocm91Z2guXG5cbioqSW52ZXN0aWdhdGluZyBhIFBvdGVudGlhbCBEZWZpbml0aW9uIENvbmZsaWN0KipcblxuSG1tLCBob2xkIG9uIGEgc2Vjb25kLiBJJ3ZlIGdvdCBhIGZlZWxpbmcgYERFQlVHYCBtaWdodCBiZSBnZXR0aW5nIGRlZmluZWQgY29uZGl0aW9uYWxseSBpZiB0aGUgYENPTkZJR19CUkNNREJHYCBvcHRpb24gaXMgZW5hYmxlZCBzb21ld2hlcmUuIFRoYXQncyBzb21ldGhpbmcgSSBuZWVkIHRvIHZlcmlmeS4gTGV0IG1lIHF1aWNrbHkgY3Jvc3MtcmVmZXJlbmNlIHRoYXQuIFRoZSBtb3N0IGxpa2VseSBwbGFjZSBmb3IgdGhhdCB3b3VsZCBiZSBpbiB0aGUgQnJvYWRjb20gd2lyZWxlc3MgZHJpdmVyIGNvbmZpZ3VyYXRpb24uIFNvLCBJIG5lZWQgdG8gY2hlY2sgdGhlIGBkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvS2NvbmZpZ2AgZmlsZS4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgZGVmaW5pdGl2ZSBhbnN3ZXIuIEknbGwgZ2V0IHRoYXQgb3BlbiByaWdodCBhd2F5IGFuZCBjb25maXJtIGlmIG15IHN1c3BpY2lvbiBpcyBjb3JyZWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTM0OCwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA2OjQyOjM5LjAxMjIwMjcyNFoiLCJTZXEiOjU4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDI2MjY3NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQlJDTURCR1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9LY29uZmlnPTI3PWNvbmZpZyBCUkNNX1RSQUNJTkdcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9LY29uZmlnLTM4LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9LY29uZmlnOjM5OmNvbmZpZyBCUkNNREJHXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL0tjb25maWctNDAtXFx0Ym9vbCBcXFwiQnJvYWRjb20gZHJpdmVyIGRlYnVnIGZ1bmN0aW9uc1xcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9NYWtlZmlsZS04LSMgY29tbW9uIGZsYWdzXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL01ha2VmaWxlOjk6c3ViZGlyLWNjZmxhZ3MtJChDT05GSUdfQlJDTURCRylcXHQrPSAtRERFQlVHXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL01ha2VmaWxlLTEwLVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL01ha2VmaWxlPTQxPWJyY21mbWFjLSQoQ09ORklHX0JSQ01GTUFDX1BDSUUpICs9IFxcXFxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvTWFrZWZpbGUtNDItXFx0XFx0cGNpZS5vXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL01ha2VmaWxlOjQzOmJyY21mbWFjLSQoQ09ORklHX0JSQ01EQkcpICs9IFxcXFxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvTWFrZWZpbGUtNDQtXFx0XFx0ZGVidWcub1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvbW1vbi5jPTQ2MD12b2lkIF9fYnJjbWZfZXJyKHN0cnVjdCBicmNtZl9idXMgKmJ1cywgY29uc3QgY2hhciAqZnVuYywgY29uc3QgY2hhciAqZm10LCAuLi4pXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29tbW9uLmMtNDc3LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb21tb24uYzo0Nzg6I2lmIGRlZmluZWQoQ09ORklHX0JSQ01fVFJBQ0lORykgfHwgZGVmaW5lZChDT05GSUdfQlJDTURCRylcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29tbW9uLmMtNDc5LXZvaWQgX19icmNtZl9kYmcodTMyIGxldmVsLCBjb25zdCBjaGFyICpmdW5jLCBjb25zdCBjaGFyICpmbXQsIC4uLilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9kZWJ1Zy5oPTQwPXZvaWQgX19icmNtZl9lcnIoc3RydWN0IGJyY21mX2J1cyAqYnVzLCBjb25zdCBjaGFyICpmdW5jLCBjb25zdCBjaGFyICpmbXQsIC4uLik7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZGVidWcuaC00Ni1cXHRkbyB7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9kZWJ1Zy5oOjQ3OlxcdFxcdGlmIChJU19FTkFCTEVEKENPTkZJR19CUkNNREJHKSB8fFxcdFxcdFxcdFxcXFxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZGVidWcuaC00OC1cXHRcXHQgICAgSVNfRU5BQkxFRChDT05GSUdfQlJDTV9UUkFDSU5HKSB8fFxcdFxcdFxcdFxcXFxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9kZWJ1Zy5oLTU1LVxcdGRvIHtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2RlYnVnLmg6NTY6XFx0XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0JSQ01EQkcpIHx8XFx0XFx0XFx0XFxcXFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9kZWJ1Zy5oLTU3LVxcdFxcdCAgICBJU19FTkFCTEVEKENPTkZJR19CUkNNX1RSQUNJTkcpIHx8XFx0XFx0XFx0XFxcXFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuYy0yOS1cXHRkbyB7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmM6MzA6XFx0XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0JSQ01EQkcpIHx8XFx0XFx0XFx0XFxcXFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmMtMzEtXFx0XFx0ICAgIElTX0VOQUJMRUQoQ09ORklHX0JSQ01fVFJBQ0lORykgfHxcXHRcXHRcXHRcXFxcXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbXNtYWMvZGVidWcuYz0yMjY9X19icmNtc19mbihjcml0KVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9kZWJ1Zy5jLTIyNy1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbXNtYWMvZGVidWcuYzoyMjg6I2lmIGRlZmluZWQoQ09ORklHX0JSQ01EQkcpIHx8IGRlZmluZWQoQ09ORklHX0JSQ01fVFJBQ0lORylcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbXNtYWMvZGVidWcuYy0yMjktdm9pZCBfX2JyY21zX2RiZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHUzMiBsZXZlbCwgY29uc3QgY2hhciAqZnVuYyxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9kZWJ1Zy5jLTIzOC1cXHR2YWYudmEgPSBcXHUwMDI2YXJncztcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbXNtYWMvZGVidWcuYzoyMzk6I2lmZGVmIENPTkZJR19CUkNNREJHXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21zbWFjL2RlYnVnLmMtMjQwLVxcdGlmICgoYnJjbV9tc2dfbGV2ZWwgXFx1MDAyNiBsZXZlbCkgXFx1MDAyNlxcdTAwMjYgbmV0X3JhdGVsaW1pdCgpKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21zbWFjL2RlYnVnLmg9MzQ9dm9pZCBfX2JyY21zX2NyaXQoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpmbXQsIC4uLik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21zbWFjL2RlYnVnLmgtMzUtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21zbWFjL2RlYnVnLmg6MzY6I2lmIGRlZmluZWQoQ09ORklHX0JSQ01EQkcpIHx8IGRlZmluZWQoQ09ORklHX0JSQ01fVFJBQ0lORylcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbXNtYWMvZGVidWcuaC0zNy1fX3ByaW50Zig0LCA1KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21zbWFjL21hYzgwMjExX2lmLmM9MTAzPU1PRFVMRV9ERVZJQ0VfVEFCTEUoYmNtYSwgYnJjbXNfY29yZWlkX3RhYmxlKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbXNtYWMvbWFjODAyMTFfaWYuYy0xMDQtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21zbWFjL21hYzgwMjExX2lmLmM6MTA1OiNpZiBkZWZpbmVkKENPTkZJR19CUkNNREJHKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9tYWM4MDIxMV9pZi5jLTEwNi0vKlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNjo0MjozOS4wNTQ4Mzc0ODNaIiwiU2VxIjo1OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjAyODg1NzE2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIHRoZSBgYnJjbWZtYWNgIERyaXZlcjogQSBQcm9taXNpbmcgQXZlbnVlKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGBicmNtZm1hY2AgZHJpdmVyLCBhbmQgaXQgbG9va3MgbGlrZSB3ZSd2ZSBnb3QgYSBwb3RlbnRpYWxseSBqdWljeSBmdXp6aW5nIHRhcmdldCBoZXJlLiBUaGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhlIGNvbm5lY3Rpb24gYmV0d2VlbiBgQ09ORklHX0JSQ01EQkdgIGFuZCB0aGUgYERFQlVHYCBmbGFnLiBJdCBtZWFucywgaWYgYENPTkZJR19CUkNNREJHYCBpcyBlbmFibGVkLCB0aGVuIGBicmNtZl9pZ25vcmVfcHJvYmVfZmFpbGAgaXMgZGVmaW5pdGVseSBnb2luZyB0byBiZSBhdmFpbGFibGUuIEFuZCB0aGF0J3Mga2V5LiBUaGlzIHByZXNlbnRzIGEgcmVhbGx5IGVhc3kgd2F5IHRvIGdldCBTeXprYWxsZXIgaW52b2x2ZWQgd2l0aCBmdXp6aW5nIGBicmNtZm1hY2AgdmlhIFVTQiEgQmFzaWNhbGx5LCBsb2FkIHRoZSBtb2R1bGUgd2l0aCBgaWdub3JlX3Byb2JlX2ZhaWw9MWAsIG9yIHNldCBpdCB0aHJvdWdoIHN5c2ZzLiBUaGF0J3Mgc2ltcGxlIGVub3VnaC4gVGhlbiwganVzdCBmZWVkIGl0IGEgdmFsaWQgZmlybXdhcmUgZmlsZS4gV2UgY2FuIGdyYWIgdGhpcyBmcm9tIHRoZSByb290ZnMsIG9yIFN5emthbGxlciBpdHNlbGYgY2FuIHByb3ZpZGUgaXQsIG5vIHByb2JsZW0uXG5cbkhvbGQgb24uLi4gSSBuZWVkIHRvIGJlIGNhcmVmdWwuIElmIGBpZ25vcmVfcHJvYmVfZmFpbGAgaXMgc2V0LCBgYnJjbWZfYnVzX3N0YXJ0ZWRgIGlzIGdvaW5nIHRvIHJldHVybiAwLiBIbW0sIG9rYXkuLi4gYnV0IGhvdyBkb2VzIHRoYXQgaW50ZXJhY3Qgd2l0aCBgYnJjbWZfY2ZnODAyMTFfYXR0YWNoYD8gSSB0aGluay4uLiB5ZXMsIHRoYXQncyBpdCEgYGJyY21mX2NmZzgwMjExX2F0dGFjaGAgaXMgY2FsbGVkICpiZWZvcmUqIGBicmNtZl9idXNfc3RhcnRlZGAuIE9rYXksIHRoYXQgbWFrZXMgc2Vuc2UuIExldCBtZSByZXJlYWQgdGhlIGNvZGUgZm9yIGBicmNtZl9idXNfc3RhcnRlZGAgYWdhaW4ganVzdCB0byBiZSAxMDAlIHN1cmUgSSd2ZSBnb3QgdGhpcyByaWdodC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzEyMzksIk91dHB1dFRva2VucyI6NTQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDY6NDI6NDUuMDgzNjk3NDVaIiwiU2VxIjo2MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTQwNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMjYwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMjYwOlxcdFxcbjEyNjE6XFx0XFx0cmV0ID0gYnJjbWZfcHJvdG9faW5pdF9kb25lKGRydnIpO1xcbjEyNjI6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuMTI2MzpcXHRcXHRcXHRnb3RvIGZhaWw7XFxuMTI2NDpcXHRcXG4xMjY1OlxcdFxcdGJyY21mX3Byb3RvX2FkZF9pZihkcnZyLCBpZnApO1xcbjEyNjY6XFx0XFxuMTI2NzpcXHRcXHRkcnZyLVxcdTAwM2Vjb25maWcgPSBicmNtZl9jZmc4MDIxMV9hdHRhY2goZHJ2ciwgb3BzLFxcbjEyNjg6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBkcnZyLVxcdTAwM2VzZXR0aW5ncy1cXHUwMDNlcDJwX2VuYWJsZSk7XFxuMTI2OTpcXHRcXHRpZiAoZHJ2ci1cXHUwMDNlY29uZmlnID09IE5VTEwpIHtcXG4xMjcwOlxcdFxcdFxcdHJldCA9IC1FTk9NRU07XFxuMTI3MTpcXHRcXHRcXHRnb3RvIGZhaWw7XFxuMTI3MjpcXHRcXHR9XFxuMTI3MzpcXHRcXG4xMjc0OlxcdFxcdHJldCA9IGJyY21mX25ldF9hdHRhY2goaWZwLCBmYWxzZSk7XFxuMTI3NTpcXHRcXG4xMjc2OlxcdFxcdGlmICgoIXJldCkgXFx1MDAyNlxcdTAwMjYgKGRydnItXFx1MDAzZXNldHRpbmdzLVxcdTAwM2VwMnBfZW5hYmxlKSkge1xcbjEyNzc6XFx0XFx0XFx0cDJwX2lmcCA9IGRydnItXFx1MDAzZWlmbGlzdFsxXTtcXG4xMjc4OlxcdFxcdFxcdGlmIChwMnBfaWZwKVxcbjEyNzk6XFx0XFx0XFx0XFx0cmV0ID0gYnJjbWZfbmV0X3AycF9hdHRhY2gocDJwX2lmcCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA2OjQyOjQ1LjA4MzgwNTI5WiIsIlNlcSI6NjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU3MDcyMjAzNjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBEcml2ZXIgSW5pdGlhbGl6YXRpb24gRmxvdyoqXG5cbk9rYXksIHNvIEknbSB0cmFjaW5nIHRocm91Z2ggdGhpcyBCcm9hZGNvbSBXaS1GaSBkcml2ZXIgY29kZSwgYW5kIEkgc2VlIHNvbWV0aGluZyBpbnRlcmVzdGluZyBpbiB0aGUgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UuIFNwZWNpZmljYWxseSwgYGJyY21mX2NmZzgwMjExX2F0dGFjaGAgaXMgYmVpbmcgY2FsbGVkIHdpdGhpbiB0aGUgYGJyY21mX2J1c19zdGFydGVkYCBmdW5jdGlvbi4gVGhpcyBpcyBrZXkuIElmIGBicmNtZl9idXNfc3RhcnRlZGAgaGl0cyBhbiBlcnJvciBiZWZvcmUgdGhlIGNhbGwgdG8gYGJyY21mX2NmZzgwMjExX2F0dGFjaGAgY2FuIGV2ZW4gaGFwcGVuLCB0aGUgY29kZSB0YWtlcyB0aGUgYGZhaWxgIHBhdGguIFRoZSBmYWlsdXJlIGhhbmRsaW5nIGlzIGNydWNpYWwgaGVyZSAtIHVuZGVyc3RhbmRpbmcgdGhhdCBjb25kaXRpb25hbCBmbG93IHdpbGwgZ2l2ZSBtZSBzb21lIGluc2lnaHQuIExldCBtZSBxdWlja2x5IHRyYWNrIGRvd24gd2hlcmUgZXhhY3RseSB0aGlzIGBmYWlsYCBsYWJlbCBpcyBkZWZpbmVkIHRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiBob3cgdGhlIGRyaXZlciBoYW5kbGVzIGluaXRpYWxpemF0aW9uIGVycm9ycyBpbiB0aGlzIHN0YWdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjE1NywiT3V0cHV0VG9rZW5zIjo1NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDY6NDI6NTAuNzkxMDI4NTQ4WiIsIlNlcSI6NjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMDYyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEzMTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEzMTA6XFx0XFxuMTMxMTpcXHRcXHRyZXR1cm4gMDtcXG4xMzEyOlxcdFxcbjEzMTM6XFx0ZmFpbDpcXG4xMzE0OlxcdFxcdGJwaHlfZXJyKGRydnIsIFxcXCJmYWlsZWQ6ICVkXFxcXG5cXFwiLCByZXQpO1xcbjEzMTU6XFx0XFx0aWYgKGRydnItXFx1MDAzZWNvbmZpZykge1xcbjEzMTY6XFx0XFx0XFx0YnJjbWZfY2ZnODAyMTFfZGV0YWNoKGRydnItXFx1MDAzZWNvbmZpZyk7XFxuMTMxNzpcXHRcXHRcXHRkcnZyLVxcdTAwM2Vjb25maWcgPSBOVUxMO1xcbjEzMTg6XFx0XFx0fVxcbjEzMTk6XFx0XFx0YnJjbWZfbmV0X2RldGFjaChpZnAtXFx1MDAzZW5kZXYsIGZhbHNlKTtcXG4xMzIwOlxcdFxcdGlmIChwMnBfaWZwKVxcbjEzMjE6XFx0XFx0XFx0YnJjbWZfbmV0X2RldGFjaChwMnBfaWZwLVxcdTAwM2VuZGV2LCBmYWxzZSk7XFxuMTMyMjpcXHRcXHRkcnZyLVxcdTAwM2VpZmxpc3RbMF0gPSBOVUxMO1xcbjEzMjM6XFx0XFx0ZHJ2ci1cXHUwMDNlaWZsaXN0WzFdID0gTlVMTDtcXG4xMzI0OlxcdFxcdGlmIChkcnZyLVxcdTAwM2VzZXR0aW5ncy1cXHUwMDNlaWdub3JlX3Byb2JlX2ZhaWwpXFxuMTMyNTpcXHRcXHRcXHRyZXQgPSAwO1xcbjEzMjY6XFx0XFxuMTMyNzpcXHRcXHRyZXR1cm4gcmV0O1xcbjEzMjg6XFx0fVxcbjEzMjk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA2OjQyOjUwLjc5MTEzMDQ5OFoiLCJTZXEiOjYzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5Nzk5NjU5MTEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUmVhY2hhYmlsaXR5IG9mIGBicmNtZl9jeXdfZXh0ZXJuYWxfYXV0aGAqKlxuXG5Pa2F5LCBzbyBoZXJlJ3MgdGhlIGRlYWwuIElmIGBpZ25vcmVfcHJvYmVfZmFpbGAgaXMgc2V0LCB0aGUgZnVuY3Rpb24gcmV0dXJucyAwLCBidXQgaXQgYWxzbyBkZXRhY2hlcyB0aGUgZGV2aWNlIGZyb20gYm90aCBgY2ZnODAyMTFgIGFuZCB0aGUgbmV0d29yayBzdGFjay4gVGhhdCBtZWFucyB0aGUgZGV2aWNlICppc24ndCogcmVnaXN0ZXJlZCB3aXRoIGBjZmc4MDIxMWAgaWYgdGhlIGluaXRpYWwgcHJvYmUgZmFpbHMuICBBbmQgaWYgYGNmZzgwMjExYCBpcyBkZXRhY2hlZCwgdGhlbiB1c2Vyc3BhY2UgY2FuJ3QgZXZlbiBzZW5kIHRoYXQgYE5MODAyMTFfQ01EX0VYVEVSTkFMX0FVVEhgIGNvbW1hbmQhIFNvLCBgaWdub3JlX3Byb2JlX2ZhaWxgIHJlYWxseSBkb2Vzbid0IGhlbHAgbWUgcmVhY2ggYGJyY21mX2N5d19leHRlcm5hbF9hdXRoYCBpZiB0aGUgaGFyZHdhcmUgaW50ZXJhY3Rpb25zIGFyZSBmYWlsaW5nLlxuXG5CdXQuLi4gc3l6a2FsbGVyICpkaWQqIHJlYWNoIGl0LiBIb3c/IEknbSBiZXR0aW5nIHRoZSBpbml0aWFsIGhhcmR3YXJlIGludGVyYWN0aW9ucywgbGlrZSB0aG9zZSBpbiBgYnJjbWZfY19wcmVpbml0X2RjbWRzYCwgYXJlbid0IGZhaWxpbmcgaW4gc3l6a2FsbGVyJ3MgZW52aXJvbm1lbnQuIEFuZCBoZXJlJ3Mgd2h5OiBzeXprYWxsZXIncyB2aGNpIGNhbiBnaXZlIGl0IGFyYml0cmFyeSByZXNwb25zZXMgdG8gVVNCIFVSQnMuIElmIGl0IHByb3ZpZGVzIHRoZSAqcmlnaHQqIHJlc3BvbnNlcywgYGJyY21mX2NfcHJlaW5pdF9kY21kc2Agd2lsbCBzdWNjZWVkISBTeXprYWxsZXIncyBVU0IgZnV6emVyIGlzIGNhcGFibGUgb2YgZ2VuZXJhdGluZyByYW5kb20gVVNCIGRlc2NyaXB0b3JzIGFuZCByZXNwb25zZXMuIFRoYXQgY29tbWl0IG1lc3NhZ2UsIFwic3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XCIsIHRlbGxzIG1lIGl0IGlzIGFjdGl2ZWx5IGZ1enppbmcgdGhpcyBwYXRoIGFuZCBwcm9iYWJseSBmb3VuZCBhIGJ1Zy4gU28sIHllYWgsIGl0ICppcyogcmVhY2hhYmxlLlxuXG5UaGUgZnVuY3Rpb24gaW4gcXVlc3Rpb24gaXMgYGJyY21mX2N5d19leHRlcm5hbF9hdXRoYCwgYW5kIHRoZSBwYXRjaCBtb2RpZmllcyBpdC4gIEdpdmVuIHRoYXQgaXQncyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGEgZHJpdmVyLCByZWFjaGFibGUgdmlhIG5ldGxpbmsgKmFuZCogVVNCIGVtdWxhdGlvbiwgaXQncyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlIGFsbCB0aGUgY29uZmlncyByaWdodCwgdGhvdWdoLiBJJ2xsIG5lZWQ6XG5cbiogICBgQlJDTUZNQUNgXG4qICAgYEJSQ01GTUFDX1VTQmBcbiogICBgQ0ZHODAyMTFgXG4qICAgYFVTQmBcbiogICBgTUFDODAyMTFgIChvZnRlbiBnb2VzIGFsb25nIHdpdGggdGhvc2Ugb3RoZXJzLCBzbyBpdCdzIGdvb2QgdG8gaGF2ZSlcbiogICBgRldfTE9BREVSYCAoc2VsZWN0ZWQgYnkgQlJDTUZNQUNfVVNCKVxuXG5MZXQgbWUganVzdCBxdWlja2x5IHZlcmlmeSB0aGVyZSBhcmVuJ3QgYW55IG90aGVyIGRlcGVuZGVuY2llcywgc2luY2UgdGhlIHBhdGNoIGlzIGluIGBjeXcvY29yZS5jYC4gT2theSwgYGJyY21mbWFjLSQoQ09ORklHX0JSQ01GTUFDKSArPSBjeXcvY29yZS5vYCBpcyBpbiB0aGUgbWFrZWZpbGUuIFNvIGBjeXdgIGlzIHVuY29uZGl0aW9uYWxseSBidWlsdCBpZiBgQlJDTUZNQUNgIGlzIGVuYWJsZWQuXG5cbk9rYXksIGxldCdzIGV4dHJhY3QgdGhlIGZvY3VzIHN5bWJvbCBvbmUgbGFzdCB0aW1lOiBgYnJjbWZfY3l3X2V4dGVybmFsX2F1dGhgLiBOb3cgSSdsbCBkb3VibGUgY2hlY2sgdG8gbWFrZSBzdXJlIGl0J3Mgbm90IGEgc3RhdGljIGZ1bmN0aW9uLCBqdXN0IGluIGNhc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyNzQ2LCJPdXRwdXRUb2tlbnMiOjU4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDY6NDM6MDAuNTkwODEyNzcxWiIsIlNlcSI6NjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTg2NTE1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicmNtZl9jeXdfZXh0ZXJuYWxfYXV0aFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L2NvcmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L2NvcmUuYz0xOTc9c3RhdGljIGludFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvY29yZS5jOjE5ODpicmNtZl9jeXdfZXh0ZXJuYWxfYXV0aChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvY29yZS5jLTE5OS1cXHRcXHRcXHRzdHJ1Y3QgY2ZnODAyMTFfZXh0ZXJuYWxfYXV0aF9wYXJhbXMgKnBhcmFtcylcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvY29yZS5jPTIzND1zdGF0aWMgdm9pZCBicmNtZl9jeXdfZ2V0X2NmZzgwMjExX29wcyhzdHJ1Y3QgYnJjbWZfcHViICpkcnZyKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2N5dy9jb3JlLmMtMjM2LVxcdGRydnItXFx1MDAzZW9wcy1cXHUwMDNlbWdtdF90eCA9IGJyY21mX2N5d19tZ210X3R4O1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jeXcvY29yZS5jOjIzNzpcXHRkcnZyLVxcdTAwM2VvcHMtXFx1MDAzZWV4dGVybmFsX2F1dGggPSBicmNtZl9jeXdfZXh0ZXJuYWxfYXV0aDtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY3l3L2NvcmUuYy0yMzgtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNjo0MzowMC42MzI2ODQzOFoiLCJTZXEiOjY1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1OTU2NTUyOTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYGJyY21mX2N5d19leHRlcm5hbF9hdXRoYCBGdW5jdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgZnVuY3Rpb246IGBzdGF0aWMgaW50IGJyY21mX2N5d19leHRlcm5hbF9hdXRoKC4uLilgLiBSaWdodCBhd2F5LCB0aGUgXCJzdGF0aWNcIiBrZXl3b3JkIGp1bXBzIG91dCBhdCBtZS4gVGhlIGluc3RydWN0aW9ucyBhcmUgcHJldHR5IGNsZWFyOiB3ZSB3YW50IHRvIGZhdm9yIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cyBvdmVyIHRoZXNlIGludGVybmFsIHN0YXRpYyBoZWxwZXJzLiBUaGUgcmVhc29uaW5nIGlzIHNvdW5kIOKAkyBpbmxpbmluZyBvYnNjdXJlcyB0aGluZ3MgYmVjYXVzZSBpdCBtZWFucyB0aGUgY29tcGlsZXIncyBqdXN0IGdvaW5nIHRvIGZvbGQgdGhlIGhlbHBlciBmdW5jdGlvbiBkaXJlY3RseSBpbnRvIHdoZXJldmVyIGl0J3MgdXNlZC4gTm8gZGlzdGluY3QgYWRkcmVzcywgd2hpY2ggaXMgYSBwcm9ibGVtIGZvciB0aGluZ3MgbGlrZSBmdW5jdGlvbiBwb2ludGVycy5cblxuQW5kIHRoYXQncyB0aGUga2lja2VyIGhlcmU6IHRoaXMgYGJyY21mX2N5d19leHRlcm5hbF9hdXRoYCAqaXMqIGFzc2lnbmVkIHRvIGEgZnVuY3Rpb24gcG9pbnRlciAoYGRydnItXHUwMDNlb3BzLVx1MDAzZWV4dGVybmFsX2F1dGggPSBicmNtZl9jeXdfZXh0ZXJuYWxfYXV0aDtgKS4gU28sIGluIHRoZW9yeSwgdGhlIGNvbXBpbGVyIHNob3VsZG4ndCBiZSBhYmxlIHRvIGNvbXBsZXRlbHkgaW5saW5lIGl0LiBBIGZ1bmN0aW9uIHBvaW50ZXIgKmRlbWFuZHMqIGEgZGlzY3JldGUgc3ltYm9sIGFkZHJlc3MuIEJ1dCB0aGUgXCJzdGF0aWNcIiBpcyBzdGlsbCB0aHJvd2luZyBhIHJlZCBmbGFnLiBJZiBpdCdzIHN0YXRpYywgdGhlcmUncyBhIGdvb2QgY2hhbmNlIGl0IHdvbid0IGdldCBleHBvcnRlZCwgbWVhbmluZyBpdCBtaWdodCBub3QgYmUgdmlzaWJsZSBvdXRzaWRlIHRoZSBtb2R1bGUuIFRoaXMgaXMsIGFmdGVyIGFsbCwgdGhlIG9ubHkgZnVuY3Rpb24gdGhhdCdzIGJlaW5nIG1vZGlmaWVkLlxuXG5IbW0uLi4gdGhlIHF1ZXN0aW9uIHRoZW4gYmVjb21lczogSXMgdGhlcmUgc29tZSBub24tc3RhdGljIGZ1bmN0aW9uIHRoYXQgY2FsbHMgdGhpcyBzdGF0aWMgb25lPyBJIG5lZWQgdG8gdHJhY2UgdGhpcyBiYWNrIGFuZCBzZWUgaG93IGl0J3MgYWN0dWFsbHkgKnVzZWQqLiBBaCwgcmlnaHQhIEl0J3MgY2FsbGVkIHRocm91Z2ggYSBmdW5jdGlvbiBwb2ludGVyIGZyb20gdGhlIGBjZmc4MDIxMWAgY29yZS4gQW5kIHRoYXQgYGNmZzgwMjExYCBjb3JlIGZ1bmN0aW9uIGlzIGBubDgwMjExX2V4dGVybmFsX2F1dGhgLiBOb3cgd2UncmUgZ2V0dGluZyBzb21ld2hlcmUuIFRoaXMgaXMgdGhlIGVudHJ5cG9pbnQgdG8gYmUgY29uY2VybmVkIHdpdGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM0MzIyLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTg3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA2OjQzOjA2LjU4OTI0MDQ0WiIsIlNlcSI6NjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjU0NzUxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJubDgwMjExX2V4dGVybmFsX2F1dGhcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3dpcmVsZXNzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTE4NDY5PXN0YXRpYyBpbnQgbmw4MDIxMV9kZWxfcG1rKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE4NDkwLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MTg0OTE6c3RhdGljIGludCBubDgwMjExX2V4dGVybmFsX2F1dGgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE4NDkyLXtcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9MTk3Mjk9c3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX3NtYWxsX29wcyBubDgwMjExX3NtYWxsX29wc1tdID0ge1xcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0yMDQ2MC1cXHRcXHQudmFsaWRhdGUgPSBHRU5MX0RPTlRfVkFMSURBVEVfU1RSSUNUIHwgR0VOTF9ET05UX1ZBTElEQVRFX0RVTVAsXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzoyMDQ2MTpcXHRcXHQuZG9pdCA9IG5sODAyMTFfZXh0ZXJuYWxfYXV0aCxcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTIwNDYyLVxcdFxcdC5mbGFncyA9IEdFTkxfQURNSU5fUEVSTSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDY6NDM6MDYuNjMxODI1NjA5WiIsIlNlcSI6NjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExMzgwNjY3NzA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIEV4dGVybmFsIEF1dGhlbnRpY2F0aW9uIGluIHRoZSBXaXJlbGVzcyBTdWJzeXN0ZW0qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgbmw4MDIxMV9leHRlcm5hbF9hdXRoYCDigJMgdGhhdCdzIHRoZSBzdGFydGluZyBwb2ludCwgdGhlIGVudHJ5IGZ1bmN0aW9uLiBCdXQgdGhlIGFjdHVhbCBmdW5jdGlvbiB0aGF0J3MgYmVlbiBtb2RpZmllZCwgdGhlIHJlYWwgbWVhdCBvZiB0aGUgY2hhbmdlcywgaXMgYGJyY21mX2N5d19leHRlcm5hbF9hdXRoYC4gR29vZCBuZXdzIGlzLCBiZWNhdXNlIGl0J3MgYXNzaWduZWQgdG8gYSBmdW5jdGlvbiBwb2ludGVyLCBpdCdzIG5vdCBnb2luZyB0byBiZSBpbmxpbmVkLiBUaGF0IG1lYW5zIGl0J2xsIHNob3cgdXAgY2xlYW5seSBpbiBzdGFjayB0cmFjZXMgYW5kIGNvdmVyYWdlIHJlcG9ydHMsIHdoaWNoIGlzICpleHRyZW1lbHkqIGhlbHBmdWwgZm9yIGRlYnVnZ2luZyBhbmQgYW5hbHlzaXMuIFNvLCBJIG5lZWQgdG8gYmUgc3VyZSB0byBpbmNsdWRlIGBicmNtZl9jeXdfZXh0ZXJuYWxfYXV0aGAgaW4gbXkgYEZvY3VzU3ltYm9sc2AgbGlzdDsgdGhhdCdzIGNyaXRpY2FsLlxuXG5Ob3csIEkgbmVlZCB0byBjaGVjayBmb3IgYW55IHJlbGF0ZWQgY29uZmlndXJhdGlvbnMuIEkgc2hvdWxkIG1ha2Ugc3VyZSB0aGVzZSBhcmUgaW5jbHVkZWQgaW4gdGhlIGJ1aWxkOiBgQlJDTUZNQUNgLCBgQlJDTUZNQUNfVVNCYCwgYENGRzgwMjExYCwgYE1BQzgwMjExYCwgYFVTQmAsIGBGV19MT0FERVJgLCBhbmQgYEZXX0xPQURFUl9VU0VSX0hFTFBFUmAuIEkgYW0gdGhpbmtpbmcgdGhhdCBgRldfTE9BREVSX1VTRVJfSEVMUEVSYCBtYXkgYmUgdXNlZnVsIGZvciBzeXprYWxsZXIgdG8gc3VwcGx5IGZpcm13YXJlLCBhbHRob3VnaCBpdCdzIGFsc28gcG9zc2libGUgdG8ganVzdCBpbmNsdWRlIGl0IGluIHRoZSByb290ZnMuIEknbGwgaW5jbHVkZSBpdCBpbiBjYXNlIGl0IGlzIHVzZWZ1bC5cblxuV2FpdCBhIHNlY29uZOKApiBgTkw4MDIxMV9DTURfRVhURVJOQUxfQVVUSGAgaXMgYWxzbyByZWxldmFudCB0byBTQUUsIHNwZWNpZmljYWxseSBXUEEzIGV4dGVybmFsIGF1dGhlbnRpY2F0aW9uLiBUaGlzIG1ha2VzIG1lIGN1cmlvdXMuIElzIHRoZXJlIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIHJlbGF0ZWQgdG8gU0FFIG9yIFdQQTMgd2l0aGluIGBjZmc4MDIxMWA/IEkgc2hvdWxkIHByb2JhYmx5IHRha2UgYSBsb29rIGF0IGBuZXQvd2lyZWxlc3MvS2NvbmZpZ2AgdG8gYmUgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzUyMjYsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDY6NDM6MTguMDEyNDk1ODY4WiIsIlNlcSI6NjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Mzk1MDcxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJleHRlcm5hbF9hdXRoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC93aXJlbGVzcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3dpcmVsZXNzL25sODAyMTEuYz0xODQ2OT1zdGF0aWMgaW50IG5sODAyMTFfZGVsX3BtayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xODQ5MC1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjE4NDkxOnN0YXRpYyBpbnQgbmw4MDIxMV9leHRlcm5hbF9hdXRoKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xODQ5Mi17XFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE4NDk0LVxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBpbmZvLVxcdTAwM2V1c2VyX3B0clsxXTtcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjE4NDk1OlxcdHN0cnVjdCBjZmc4MDIxMV9leHRlcm5hbF9hdXRoX3BhcmFtcyBwYXJhbXM7XFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xODQ5Ni1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjE4NDk3OlxcdGlmICghcmRldi1cXHUwMDNlb3BzLVxcdTAwM2VleHRlcm5hbF9hdXRoKVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTg0OTgtXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xODUyOS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjE4NTMwOlxcdHJldHVybiByZGV2X2V4dGVybmFsX2F1dGgocmRldiwgZGV2LCBcXHUwMDI2cGFyYW1zKTtcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE4NTMxLX1cXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9MTk3Mjk9c3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX3NtYWxsX29wcyBubDgwMjExX3NtYWxsX29wc1tdID0ge1xcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0yMDQ2MC1cXHRcXHQudmFsaWRhdGUgPSBHRU5MX0RPTlRfVkFMSURBVEVfU1RSSUNUIHwgR0VOTF9ET05UX1ZBTElEQVRFX0RVTVAsXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzoyMDQ2MTpcXHRcXHQuZG9pdCA9IG5sODAyMTFfZXh0ZXJuYWxfYXV0aCxcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTIwNDYyLVxcdFxcdC5mbGFncyA9IEdFTkxfQURNSU5fUEVSTSxcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9MjMyNTY9dm9pZCBubDgwMjExX3NlbmRfYXBfc3RvcHBlZChzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LCB1bnNpZ25lZCBpbnQgbGlua19pZClcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMjMyODctXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzoyMzI4ODppbnQgY2ZnODAyMTFfZXh0ZXJuYWxfYXV0aF9yZXF1ZXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzoyMzI4OTpcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgY2ZnODAyMTFfZXh0ZXJuYWxfYXV0aF9wYXJhbXMgKnBhcmFtcyxcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTIzMjkwLVxcdFxcdFxcdFxcdCAgIGdmcF90IGdmcClcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMjMzNDUtfVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MjMzNDY6RVhQT1JUX1NZTUJPTChjZmc4MDIxMV9leHRlcm5hbF9hdXRoX3JlcXVlc3QpO1xcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMjMzNDctXFxuLS1cXG5uZXQvd2lyZWxlc3MvcmRldi1vcHMuaD0xMzM4PXN0YXRpYyBpbmxpbmUgaW50XFxubmV0L3dpcmVsZXNzL3JkZXYtb3BzLmg6MTMzOTpyZGV2X2V4dGVybmFsX2F1dGgoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxcbm5ldC93aXJlbGVzcy9yZGV2LW9wcy5oLTEzNDAtXFx0XFx0ICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG5uZXQvd2lyZWxlc3MvcmRldi1vcHMuaDoxMzQxOlxcdFxcdCAgIHN0cnVjdCBjZmc4MDIxMV9leHRlcm5hbF9hdXRoX3BhcmFtcyAqcGFyYW1zKVxcbm5ldC93aXJlbGVzcy9yZGV2LW9wcy5oLTEzNDIte1xcbi0tXFxubmV0L3dpcmVsZXNzL3JkZXYtb3BzLmgtMTM0NC1cXG5uZXQvd2lyZWxlc3MvcmRldi1vcHMuaDoxMzQ1OlxcdHRyYWNlX3JkZXZfZXh0ZXJuYWxfYXV0aChcXHUwMDI2cmRldi1cXHUwMDNld2lwaHksIGRldiwgcGFyYW1zKTtcXG5uZXQvd2lyZWxlc3MvcmRldi1vcHMuaDoxMzQ2OlxcdGlmIChyZGV2LVxcdTAwM2VvcHMtXFx1MDAzZWV4dGVybmFsX2F1dGgpXFxubmV0L3dpcmVsZXNzL3JkZXYtb3BzLmg6MTM0NzpcXHRcXHRyZXQgPSByZGV2LVxcdTAwM2VvcHMtXFx1MDAzZWV4dGVybmFsX2F1dGgoXFx1MDAyNnJkZXYtXFx1MDAzZXdpcGh5LCBkZXYsIHBhcmFtcyk7XFxubmV0L3dpcmVsZXNzL3JkZXYtb3BzLmgtMTM0OC1cXHR0cmFjZV9yZGV2X3JldHVybl9pbnQoXFx1MDAyNnJkZXYtXFx1MDAzZXdpcGh5LCByZXQpO1xcbi0tXFxubmV0L3dpcmVsZXNzL3RyYWNlLmg9Mjc2NT1UUkFDRV9FVkVOVChyZGV2X2RlbF9wbWssXFxuLS1cXG5uZXQvd2lyZWxlc3MvdHJhY2UuaC0yNzg1LVxcbm5ldC93aXJlbGVzcy90cmFjZS5oOjI3ODY6VFJBQ0VfRVZFTlQocmRldl9leHRlcm5hbF9hdXRoLFxcbm5ldC93aXJlbGVzcy90cmFjZS5oLTI3ODctXFx0ICAgIFRQX1BST1RPKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxubmV0L3dpcmVsZXNzL3RyYWNlLmg6Mjc4ODpcXHRcXHQgICAgIHN0cnVjdCBjZmc4MDIxMV9leHRlcm5hbF9hdXRoX3BhcmFtcyAqcGFyYW1zKSxcXG5uZXQvd2lyZWxlc3MvdHJhY2UuaC0yNzg5LVxcdCAgICBUUF9BUkdTKHdpcGh5LCBuZXRkZXYsIHBhcmFtcyksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA2OjQzOjE4LjA1NjQ1MTA4N1oiLCJTZXEiOjY5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNTgxNDA4MDc2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBDb25maWd1cmF0aW9uIFN0cmF0ZWd5IGZvciBSZXZpZXdpbmcgbmw4MDIxMS5jJ3MgU0FFL0V4dGVybmFsIEF1dGggSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyB0aGVyZSdzIG5vIGRlZGljYXRlZCBjb25maWd1cmF0aW9uIG9wdGlvbiBzcGVjaWZpY2FsbHkgZm9yIFNBRSBvciBleHRlcm5hbCBhdXRoZW50aWNhdGlvbiB3aXRoaW4gYG5sODAyMTEuY2AuIEl0J3MgaW50ZWdyYXRlZCBkaXJlY3RseSBhcyBwYXJ0IG9mIHRoZSBgbmw4MDIxMS5jYCBzb3VyY2UgY29kZSwgd2hpY2ggZ2V0cyBidWlsdCB3aGVuIGBDRkc4MDIxMWAgaXMgZW5hYmxlZC4gVGltZSB0byByZXZpZXcgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIHRvIGVuc3VyZSBwcm9wZXIgc2V0dXAuXG5cbkknbSB0aGlua2luZyBJJ2xsIG5lZWQgdG8gZW5hYmxlIHRoZXNlIG9wdGlvbnMgaW4gbXkgYnVpbGQ6IGBCUkNNRk1BQ2AsIGBCUkNNRk1BQ19VU0JgLCBgQ0ZHODAyMTFgLCBgTUFDODAyMTFgLCBgVVNCYCwgYEZXX0xPQURFUmAsIGBGV19MT0FERVJfVVNFUl9IRUxQRVJgLCBhbmQgYEJSQ01EQkdgLiBJIGFkZGVkIGBCUkNNREJHYCBiZWNhdXNlIGl0IHNlZW1zIHVzZWZ1bCBmb3IgZWFzaWVyIGZ1enppbmcsIHNwZWNpZmljYWxseSBlbmFibGluZyBgaWdub3JlX3Byb2JlX2ZhaWxgLCBhbmQgYnkgZXh0ZW5zaW9uLCBlYXNpZXIgY29kZSBjb3ZlcmFnZS5cblxuV2FpdCBhIHNlY29uZCwgbGV0IG1lIHRoaW5rIGFib3V0IGBCUkNNREJHYC4gQWx0aG91Z2ggaXTigJlzIGV4dHJlbWVseSB1c2VmdWwgZm9yIGZ1enppbmcsIEkgc2hvdWxkIGNoZWNrIGlmIGl0J3Mgc3RyaWN0bHkgbmVjZXNzYXJ5LiBNYXliZSBzeXprYWxsZXIgYWxyZWFkeSBoYXMgdGhpcyBlbmFibGVkIG9yIG1heWJlLCBzaW5jZSBpdCBmZWVkcyB0aGUgY29kZSB3aXRoIHZhbGlkIGZpcm13YXJlLCBpdCBkb2Vzbid0IGV2ZW4gbmVlZCBgaWdub3JlX3Byb2JlX2ZhaWxgLiBIb3dldmVyLCBqdXN0IHRvIGJlIHNhZmUsIEknbGwgZ28gYWhlYWQgYW5kIGluY2x1ZGUgYEJSQ01EQkdgLiBJdCBzaWduaWZpY2FudGx5IHNpbXBsaWZpZXMgZ2V0dGluZyB0byB0aGUgY29kZSBmb3IgYW5hbHlzaXMsIGVzcGVjaWFsbHkgd2l0aG91dCByZWx5aW5nIG9uIGFjdHVhbCBoYXJkd2FyZS5cblxuTm93LCBiZWZvcmUgSSBjb21taXQgdG8gdGhhdCwgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IGBCUkNNREJHYCBkb2Vzbid0IGhhdmUgYW55IGhpZGRlbiBkZXBlbmRlbmNpZXMgdGhhdCBtaWdodCBjb21wbGljYXRlIG15IGJ1aWxkLiBMZXQgbWUgbWFrZSBzdXJlIEknbSBub3Qgb3Zlcmxvb2tpbmcgc29tZXRoaW5nIGNydWNpYWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3MTM3LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA2OjQzOjMzLjg3MDUzNDQ0N1oiLCJTZXEiOjcwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDE1ODA2NTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJSQ01EQkdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL0tjb25maWc9Mjc9Y29uZmlnIEJSQ01fVFJBQ0lOR1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL0tjb25maWctMzgtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL0tjb25maWc6Mzk6Y29uZmlnIEJSQ01EQkdcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvS2NvbmZpZy00MC1cXHRib29sIFxcXCJCcm9hZGNvbSBkcml2ZXIgZGVidWcgZnVuY3Rpb25zXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNjo0MzozMy45MTIxMjk2NDZaIiwiU2VxIjo3MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODUzNDk0NTEyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBXTEFOIERyaXZlciBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgaXMganVzdCBhIEJvb2xlYW4gY2hlY2sgaW5pdGlhbGx5LiBNeSBmb2N1cyBuZWVkcyB0byBiZSBvbiB0aGUgYGJyY21mX2N5d19leHRlcm5hbF9hdXRoYCBmdW5jdGlvbi4gSSBzZWUgdGhhdCB0aGUgcGF0Y2ggKm9ubHkqIG1vZGlmaWVzIHRoaXMgZnVuY3Rpb24sIHNvIHRoYXQncyB3aGVyZSBteSBhdHRlbnRpb24gaXMuXG5cbkxvb2tpbmcgYXQgdGhlIGNvZGUsIGl0J3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gSXQgY2hlY2tzIGZvciBhIHN1Y2Nlc3NmdWwgc3RhdHVzLCBhbmQgaWYgc28sIGl0ICpjb3BpZXMqIGBwYXJhbXMtXHUwMDNlcG1raWRgIHRvIGBhdXRoX3N0YXR1cy5wbWtpZGAuIFRoZW4sIGl0IHNldHMgdGhlIGZsYWdzIGFuZCBzZW5kcyBgYXV0aF9zdGF0dXNgIHRvIHRoZSBmaXJtd2FyZSB2aWEgYGJyY21mX2ZpbF9pb3Zhcl9kYXRhX3NldGAuXG5cblRoaXMgaXMgYSAqKmZ1bmN0aW9uYWwgY2hhbmdlKiouIEl0J3MgcHJldmVudGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSBmcm9tIGJlaW5nIHNlbnQgdG8gdGhlIGZpcm13YXJlLCBvciBwZXJoYXBzIGl0IGFkZHMgUE1LSUQgc3VwcG9ydCB0byBleHRlcm5hbCBhdXRoZW50aWNhdGlvbi4gSXQncyBhIGNsZWFyIGFsdGVyYXRpb24gdG8gdGhlIGV4aXN0aW5nIGJlaGF2aW9yIGFuZCBpbnRyb2R1Y2VzIG5ldyBkYXRhIGJlaW5nIHNlbnQgdG8gdGhlIGZpcm13YXJlLiAqVGhpcyogZGVmaW5pdGVseSBuZWVkcyBmdXp6aW5nLlxuXG5NeSBjb25jbHVzaW9uPyBgV29ydGhGdXp6aW5nOiB0cnVlYC4gVGhlIGZ1bmN0aW9uIG9mIGludGVyZXN0IGlzIGBicmNtZl9jeXdfZXh0ZXJuYWxfYXV0aGAuIEFuZCBJIG5lZWQgdG8gY29uc2lkZXIgY29uZmlndXJhdGlvbnMgZm9yIGBCUkNNRk1BQ2AsIGBCUkNNRk1BQ19VU0JgLCBgQ0ZHODAyMTFgLCBgTUFDODAyMTFgLCBgVVNCYCwgYEZXX0xPQURFUmAsIGBGV19MT0FERVJfVVNFUl9IRUxQRVJgLCBhbmQgYEJSQ01EQkdgLiBJIHNob3VsZCBhbHNvIHVzZSB0aGUgYGlnbm9yZV9wcm9iZV9mYWlsYCBtb2R1bGUgcGFyYW1ldGVyICh3aGVuIGBCUkNNREJHYCBpcyBlbmFibGVkKSB0byBieXBhc3MgYW55IGhhcmR3YXJlIGluaXRpYWxpemF0aW9uIGlzc3Vlcy4gVGhpcyBpcyByZWFjaGFibGUgdmlhIHRoZSBuZXRsaW5rIGludGVyZmFjZSwgc3BlY2lmaWNhbGx5IGBOTDgwMjExX0NNRF9FWFRFUk5BTF9BVVRIYCBpbiBhIFVTQiB2aGNpIGVtdWxhdGlvbiBzY2VuYXJpbywgdGhlcmVmb3JlIHRoZSBzdGF0ZWQgY29uZmlndXJhdGlvbnMgYWxsb3cgbWUgdG8gZXhlcmNpc2UgdGhlIHRhcmdldCBmdW5jdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzc4OTMsIk91dHB1dFRva2VucyI6MjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA2OjQzOjQyLjQ0NzA3NjY3N1oiLCJTZXEiOjcyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc3MTEzOTA3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUkNNRk1BQ1wiLFxuICAgIFwiQlJDTUZNQUNfVVNCXCIsXG4gICAgXCJDRkc4MDIxMVwiLFxuICAgIFwiTUFDODAyMTFcIixcbiAgICBcIlVTQlwiLFxuICAgIFwiRldfTE9BREVSXCIsXG4gICAgXCJGV19MT0FERVJfVVNFUl9IRUxQRVJcIixcbiAgICBcIkJSQ01EQkdcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicmNtZl9jeXdfZXh0ZXJuYWxfYXV0aFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBicmNtZl9jeXdfZXh0ZXJuYWxfYXV0aGAgaW4gdGhlIEJyb2FkY29tIEZ1bGxNQUMgV0xBTiBkcml2ZXIgKGBicmNtZm1hY2ApIHRvIGluaXRpYWxpemUgYGF1dGhfc3RhdHVzYCBhbmQgY29weSBgcG1raWRgIGlmIHByZXNlbnQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBhIGRyaXZlciB0aGF0IGlzIHJlYWNoYWJsZSB2aWEgbmV0bGluayAoYE5MODAyMTFfQ01EX0VYVEVSTkFMX0FVVEhgKSB3aGVuIHRoZSBkZXZpY2UgaXMgZW11bGF0ZWQgdmlhIFVTQiAodmhjaSkuIEVuYWJsaW5nIGBCUkNNREJHYCBhbGxvd3MgdXNpbmcgdGhlIGBpZ25vcmVfcHJvYmVfZmFpbGAgbW9kdWxlIHBhcmFtZXRlciB0byBieXBhc3MgaGFyZHdhcmUgaW5pdGlhbGl6YXRpb24gZmFpbHVyZXMgZHVyaW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlJDTUZNQUNcIixcbiAgICBcIkJSQ01GTUFDX1VTQlwiLFxuICAgIFwiQ0ZHODAyMTFcIixcbiAgICBcIk1BQzgwMjExXCIsXG4gICAgXCJVU0JcIixcbiAgICBcIkZXX0xPQURFUlwiLFxuICAgIFwiRldfTE9BREVSX1VTRVJfSEVMUEVSXCIsXG4gICAgXCJCUkNNREJHXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnJjbWZfY3l3X2V4dGVybmFsX2F1dGhcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgYnJjbWZfY3l3X2V4dGVybmFsX2F1dGhgIGluIHRoZSBCcm9hZGNvbSBGdWxsTUFDIFdMQU4gZHJpdmVyIChgYnJjbWZtYWNgKSB0byBpbml0aWFsaXplIGBhdXRoX3N0YXR1c2AgYW5kIGNvcHkgYHBta2lkYCBpZiBwcmVzZW50LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSBkcml2ZXIgdGhhdCBpcyByZWFjaGFibGUgdmlhIG5ldGxpbmsgKGBOTDgwMjExX0NNRF9FWFRFUk5BTF9BVVRIYCkgd2hlbiB0aGUgZGV2aWNlIGlzIGVtdWxhdGVkIHZpYSBVU0IgKHZoY2kpLiBFbmFibGluZyBgQlJDTURCR2AgYWxsb3dzIHVzaW5nIHRoZSBgaWdub3JlX3Byb2JlX2ZhaWxgIG1vZHVsZSBwYXJhbWV0ZXIgdG8gYnlwYXNzIGhhcmR3YXJlIGluaXRpYWxpemF0aW9uIGZhaWx1cmVzIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowcvmdk[1] Phase: Succeeded StartedAt: 2026-08-04 06:43:54 +0000 UTC FinishedAt: 2026-08-04 06:43:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcvmdk[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-04 06:43:54 +0000 UTC FinishedAt: 2026-08-04 06:43:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcvmdk[2] Phase: Succeeded StartedAt: 2026-08-04 06:43:54 +0000 UTC FinishedAt: 2026-08-04 07:34:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcvmdk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"333f7de560e1196034b67db16916b10a0c529e1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","CFG80211","MAC80211","USB","FW_LOADER","FW_LOADER_USER_HELPER","BRCMDBG"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["brcmf_cyw_external_auth"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"333f7de560e1196034b67db16916b10a0c529e1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","CFG80211","MAC80211","USB","FW_LOADER","FW_LOADER_USER_HELPER","BRCMDBG"],"series_id":"74d0e6a3-1369-483f-a564-7607be1af2b8","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-04 06:43:54 +0000 UTC FinishedAt: 2026-08-04 07:34:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"333f7de560e1196034b67db16916b10a0c529e1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","CFG80211","MAC80211","USB","FW_LOADER","FW_LOADER_USER_HELPER","BRCMDBG"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["brcmf_cyw_external_auth"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"333f7de560e1196034b67db16916b10a0c529e1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","CFG80211","MAC80211","USB","FW_LOADER","FW_LOADER_USER_HELPER","BRCMDBG"],"series_id":"74d0e6a3-1369-483f-a564-7607be1af2b8","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowcvmdk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"333f7de560e1196034b67db16916b10a0c529e1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","CFG80211","MAC80211","USB","FW_LOADER","FW_LOADER_USER_HELPER","BRCMDBG"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["brcmf_cyw_external_auth"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"333f7de560e1196034b67db16916b10a0c529e1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","CFG80211","MAC80211","USB","FW_LOADER","FW_LOADER_USER_HELPER","BRCMDBG"],"series_id":"74d0e6a3-1369-483f-a564-7607be1af2b8","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-04 06:43:54 +0000 UTC FinishedAt: 2026-08-04 06:44:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcvmdk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"333f7de560e1196034b67db16916b10a0c529e1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","CFG80211","MAC80211","USB","FW_LOADER","FW_LOADER_USER_HELPER","BRCMDBG"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["brcmf_cyw_external_auth"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"333f7de560e1196034b67db16916b10a0c529e1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","CFG80211","MAC80211","USB","FW_LOADER","FW_LOADER_USER_HELPER","BRCMDBG"],"series_id":"74d0e6a3-1369-483f-a564-7607be1af2b8","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-04 06:43:54 +0000 UTC FinishedAt: 2026-08-04 06:44:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"333f7de560e1196034b67db16916b10a0c529e1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","CFG80211","MAC80211","USB","FW_LOADER","FW_LOADER_USER_HELPER","BRCMDBG"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowcvmdk/series-workflowcvmdk-convert-artifact-3433499424/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcvmdk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"333f7de560e1196034b67db16916b10a0c529e1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","CFG80211","MAC80211","USB","FW_LOADER","FW_LOADER_USER_HELPER","BRCMDBG"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["brcmf_cyw_external_auth"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"333f7de560e1196034b67db16916b10a0c529e1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","CFG80211","MAC80211","USB","FW_LOADER","FW_LOADER_USER_HELPER","BRCMDBG"],"series_id":"74d0e6a3-1369-483f-a564-7607be1af2b8","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-04 06:44:04 +0000 UTC FinishedAt: 2026-08-04 07:05:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcvmdk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"333f7de560e1196034b67db16916b10a0c529e1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","CFG80211","MAC80211","USB","FW_LOADER","FW_LOADER_USER_HELPER","BRCMDBG"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["brcmf_cyw_external_auth"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"333f7de560e1196034b67db16916b10a0c529e1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","CFG80211","MAC80211","USB","FW_LOADER","FW_LOADER_USER_HELPER","BRCMDBG"],"series_id":"74d0e6a3-1369-483f-a564-7607be1af2b8","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-04 06:44:04 +0000 UTC FinishedAt: 2026-08-04 07:05:33 +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:*c947cf73-c523-4e23-8096-2ee7e91ddc1b,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-workflowcvmdk/series-workflowcvmdk-convert-artifact-3433499424/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": "36aae90f-dfea-4e0d-9237-3fe4573753a0", "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-workflowcvmdk/series-workflowcvmdk-build-action-3826772454/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcvmdk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"333f7de560e1196034b67db16916b10a0c529e1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","CFG80211","MAC80211","USB","FW_LOADER","FW_LOADER_USER_HELPER","BRCMDBG"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["brcmf_cyw_external_auth"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"333f7de560e1196034b67db16916b10a0c529e1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","CFG80211","MAC80211","USB","FW_LOADER","FW_LOADER_USER_HELPER","BRCMDBG"],"series_id":"74d0e6a3-1369-483f-a564-7607be1af2b8","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-04 06:44:04 +0000 UTC FinishedAt: 2026-08-04 07:05:23 +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:*c947cf73-c523-4e23-8096-2ee7e91ddc1b,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-workflowcvmdk/series-workflowcvmdk-convert-artifact-3433499424/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": "36aae90f-dfea-4e0d-9237-3fe4573753a0", "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-workflowcvmdk/series-workflowcvmdk-build-action-3826772454/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcvmdk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"333f7de560e1196034b67db16916b10a0c529e1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","CFG80211","MAC80211","USB","FW_LOADER","FW_LOADER_USER_HELPER","BRCMDBG"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["brcmf_cyw_external_auth"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"333f7de560e1196034b67db16916b10a0c529e1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","CFG80211","MAC80211","USB","FW_LOADER","FW_LOADER_USER_HELPER","BRCMDBG"],"series_id":"74d0e6a3-1369-483f-a564-7607be1af2b8","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-04 07:05:33 +0000 UTC FinishedAt: 2026-08-04 07:05:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcvmdk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"333f7de560e1196034b67db16916b10a0c529e1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","CFG80211","MAC80211","USB","FW_LOADER","FW_LOADER_USER_HELPER","BRCMDBG"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["brcmf_cyw_external_auth"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"333f7de560e1196034b67db16916b10a0c529e1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","CFG80211","MAC80211","USB","FW_LOADER","FW_LOADER_USER_HELPER","BRCMDBG"],"series_id":"74d0e6a3-1369-483f-a564-7607be1af2b8","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-04 07:05:33 +0000 UTC FinishedAt: 2026-08-04 07:05:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcvmdk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"333f7de560e1196034b67db16916b10a0c529e1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","CFG80211","MAC80211","USB","FW_LOADER","FW_LOADER_USER_HELPER","BRCMDBG"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["brcmf_cyw_external_auth"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"333f7de560e1196034b67db16916b10a0c529e1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","CFG80211","MAC80211","USB","FW_LOADER","FW_LOADER_USER_HELPER","BRCMDBG"],"series_id":"74d0e6a3-1369-483f-a564-7607be1af2b8","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-04 07:05:33 +0000 UTC FinishedAt: 2026-08-04 07:05:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcvmdk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"333f7de560e1196034b67db16916b10a0c529e1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","CFG80211","MAC80211","USB","FW_LOADER","FW_LOADER_USER_HELPER","BRCMDBG"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["brcmf_cyw_external_auth"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"333f7de560e1196034b67db16916b10a0c529e1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","CFG80211","MAC80211","USB","FW_LOADER","FW_LOADER_USER_HELPER","BRCMDBG"],"series_id":"74d0e6a3-1369-483f-a564-7607be1af2b8","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-04 07:05:33 +0000 UTC FinishedAt: 2026-08-04 07:05:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"333f7de560e1196034b67db16916b10a0c529e1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","CFG80211","MAC80211","USB","FW_LOADER","FW_LOADER_USER_HELPER","BRCMDBG"],"series_id":"74d0e6a3-1369-483f-a564-7607be1af2b8","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowcvmdk/series-workflowcvmdk-convert-artifact-1296030023/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcvmdk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"333f7de560e1196034b67db16916b10a0c529e1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","CFG80211","MAC80211","USB","FW_LOADER","FW_LOADER_USER_HELPER","BRCMDBG"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["brcmf_cyw_external_auth"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"333f7de560e1196034b67db16916b10a0c529e1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","CFG80211","MAC80211","USB","FW_LOADER","FW_LOADER_USER_HELPER","BRCMDBG"],"series_id":"74d0e6a3-1369-483f-a564-7607be1af2b8","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-04 07:05:44 +0000 UTC FinishedAt: 2026-08-04 07:07:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcvmdk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"333f7de560e1196034b67db16916b10a0c529e1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","CFG80211","MAC80211","USB","FW_LOADER","FW_LOADER_USER_HELPER","BRCMDBG"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["brcmf_cyw_external_auth"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"333f7de560e1196034b67db16916b10a0c529e1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","CFG80211","MAC80211","USB","FW_LOADER","FW_LOADER_USER_HELPER","BRCMDBG"],"series_id":"74d0e6a3-1369-483f-a564-7607be1af2b8","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-04 07:05:44 +0000 UTC FinishedAt: 2026-08-04 07:07:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*36aae90f-dfea-4e0d-9237-3fe4573753a0,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-workflowcvmdk/series-workflowcvmdk-build-action-3826772454/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-workflowcvmdk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"333f7de560e1196034b67db16916b10a0c529e1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","CFG80211","MAC80211","USB","FW_LOADER","FW_LOADER_USER_HELPER","BRCMDBG"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["brcmf_cyw_external_auth"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"333f7de560e1196034b67db16916b10a0c529e1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","CFG80211","MAC80211","USB","FW_LOADER","FW_LOADER_USER_HELPER","BRCMDBG"],"series_id":"74d0e6a3-1369-483f-a564-7607be1af2b8","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-04 07:07:46 +0000 UTC FinishedAt: 2026-08-04 07:07:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcvmdk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"333f7de560e1196034b67db16916b10a0c529e1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","CFG80211","MAC80211","USB","FW_LOADER","FW_LOADER_USER_HELPER","BRCMDBG"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["brcmf_cyw_external_auth"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"333f7de560e1196034b67db16916b10a0c529e1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","CFG80211","MAC80211","USB","FW_LOADER","FW_LOADER_USER_HELPER","BRCMDBG"],"series_id":"74d0e6a3-1369-483f-a564-7607be1af2b8","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-04 07:07:46 +0000 UTC FinishedAt: 2026-08-04 07:07:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcvmdk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"333f7de560e1196034b67db16916b10a0c529e1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","CFG80211","MAC80211","USB","FW_LOADER","FW_LOADER_USER_HELPER","BRCMDBG"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["brcmf_cyw_external_auth"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"333f7de560e1196034b67db16916b10a0c529e1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","CFG80211","MAC80211","USB","FW_LOADER","FW_LOADER_USER_HELPER","BRCMDBG"],"series_id":"74d0e6a3-1369-483f-a564-7607be1af2b8","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-04 07:07:46 +0000 UTC FinishedAt: 2026-08-04 07:29:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcvmdk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"333f7de560e1196034b67db16916b10a0c529e1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","CFG80211","MAC80211","USB","FW_LOADER","FW_LOADER_USER_HELPER","BRCMDBG"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["brcmf_cyw_external_auth"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"333f7de560e1196034b67db16916b10a0c529e1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","CFG80211","MAC80211","USB","FW_LOADER","FW_LOADER_USER_HELPER","BRCMDBG"],"series_id":"74d0e6a3-1369-483f-a564-7607be1af2b8","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-04 07:07:46 +0000 UTC FinishedAt: 2026-08-04 07:29:29 +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:*c947cf73-c523-4e23-8096-2ee7e91ddc1b,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-workflowcvmdk/series-workflowcvmdk-convert-artifact-1296030023/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": "416f4679-4047-41b4-8ad9-a394c64cd564", "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-workflowcvmdk/series-workflowcvmdk-build-action-773593291/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcvmdk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"333f7de560e1196034b67db16916b10a0c529e1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","CFG80211","MAC80211","USB","FW_LOADER","FW_LOADER_USER_HELPER","BRCMDBG"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["brcmf_cyw_external_auth"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"333f7de560e1196034b67db16916b10a0c529e1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","CFG80211","MAC80211","USB","FW_LOADER","FW_LOADER_USER_HELPER","BRCMDBG"],"series_id":"74d0e6a3-1369-483f-a564-7607be1af2b8","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-04 07:07:46 +0000 UTC FinishedAt: 2026-08-04 07:29:18 +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:*c947cf73-c523-4e23-8096-2ee7e91ddc1b,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-workflowcvmdk/series-workflowcvmdk-convert-artifact-1296030023/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": "416f4679-4047-41b4-8ad9-a394c64cd564", "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-workflowcvmdk/series-workflowcvmdk-build-action-773593291/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcvmdk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"333f7de560e1196034b67db16916b10a0c529e1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","CFG80211","MAC80211","USB","FW_LOADER","FW_LOADER_USER_HELPER","BRCMDBG"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["brcmf_cyw_external_auth"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"333f7de560e1196034b67db16916b10a0c529e1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","CFG80211","MAC80211","USB","FW_LOADER","FW_LOADER_USER_HELPER","BRCMDBG"],"series_id":"74d0e6a3-1369-483f-a564-7607be1af2b8","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-04 07:29:29 +0000 UTC FinishedAt: 2026-08-04 07:29:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcvmdk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"333f7de560e1196034b67db16916b10a0c529e1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","CFG80211","MAC80211","USB","FW_LOADER","FW_LOADER_USER_HELPER","BRCMDBG"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["brcmf_cyw_external_auth"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"333f7de560e1196034b67db16916b10a0c529e1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","CFG80211","MAC80211","USB","FW_LOADER","FW_LOADER_USER_HELPER","BRCMDBG"],"series_id":"74d0e6a3-1369-483f-a564-7607be1af2b8","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-04 07:29:29 +0000 UTC FinishedAt: 2026-08-04 07:29:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcvmdk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"333f7de560e1196034b67db16916b10a0c529e1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","CFG80211","MAC80211","USB","FW_LOADER","FW_LOADER_USER_HELPER","BRCMDBG"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["brcmf_cyw_external_auth"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"333f7de560e1196034b67db16916b10a0c529e1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","CFG80211","MAC80211","USB","FW_LOADER","FW_LOADER_USER_HELPER","BRCMDBG"],"series_id":"74d0e6a3-1369-483f-a564-7607be1af2b8","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-04 07:29:29 +0000 UTC FinishedAt: 2026-08-04 07:31:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcvmdk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"333f7de560e1196034b67db16916b10a0c529e1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","CFG80211","MAC80211","USB","FW_LOADER","FW_LOADER_USER_HELPER","BRCMDBG"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["brcmf_cyw_external_auth"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"333f7de560e1196034b67db16916b10a0c529e1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","CFG80211","MAC80211","USB","FW_LOADER","FW_LOADER_USER_HELPER","BRCMDBG"],"series_id":"74d0e6a3-1369-483f-a564-7607be1af2b8","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-04 07:29:29 +0000 UTC FinishedAt: 2026-08-04 07:31:23 +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:*416f4679-4047-41b4-8ad9-a394c64cd564,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-workflowcvmdk/series-workflowcvmdk-build-action-773593291/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-workflowcvmdk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"333f7de560e1196034b67db16916b10a0c529e1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","CFG80211","MAC80211","USB","FW_LOADER","FW_LOADER_USER_HELPER","BRCMDBG"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["brcmf_cyw_external_auth"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"333f7de560e1196034b67db16916b10a0c529e1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","CFG80211","MAC80211","USB","FW_LOADER","FW_LOADER_USER_HELPER","BRCMDBG"],"series_id":"74d0e6a3-1369-483f-a564-7607be1af2b8","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-04 07:31:33 +0000 UTC FinishedAt: 2026-08-04 07:34:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcvmdk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"333f7de560e1196034b67db16916b10a0c529e1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","CFG80211","MAC80211","USB","FW_LOADER","FW_LOADER_USER_HELPER","BRCMDBG"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["brcmf_cyw_external_auth"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"333f7de560e1196034b67db16916b10a0c529e1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","CFG80211","MAC80211","USB","FW_LOADER","FW_LOADER_USER_HELPER","BRCMDBG"],"series_id":"74d0e6a3-1369-483f-a564-7607be1af2b8","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-04 07:31:33 +0000 UTC FinishedAt: 2026-08-04 07:34:49 +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":["brcmf_cyw_external_auth"],"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:*36aae90f-dfea-4e0d-9237-3fe4573753a0,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*416f4679-4047-41b4-8ad9-a394c64cd564,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-workflowcvmdk/series-workflowcvmdk-build-action-3826772454/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-workflowcvmdk/series-workflowcvmdk-build-action-773593291/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowcvmdk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"333f7de560e1196034b67db16916b10a0c529e1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","CFG80211","MAC80211","USB","FW_LOADER","FW_LOADER_USER_HELPER","BRCMDBG"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["brcmf_cyw_external_auth"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"333f7de560e1196034b67db16916b10a0c529e1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","CFG80211","MAC80211","USB","FW_LOADER","FW_LOADER_USER_HELPER","BRCMDBG"],"series_id":"74d0e6a3-1369-483f-a564-7607be1af2b8","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-04 07:31:33 +0000 UTC FinishedAt: 2026-08-04 07:31:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcvmdk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"333f7de560e1196034b67db16916b10a0c529e1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","CFG80211","MAC80211","USB","FW_LOADER","FW_LOADER_USER_HELPER","BRCMDBG"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["brcmf_cyw_external_auth"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"333f7de560e1196034b67db16916b10a0c529e1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","CFG80211","MAC80211","USB","FW_LOADER","FW_LOADER_USER_HELPER","BRCMDBG"],"series_id":"74d0e6a3-1369-483f-a564-7607be1af2b8","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-04 07:31:33 +0000 UTC FinishedAt: 2026-08-04 07:31:39 +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":["brcmf_cyw_external_auth"],"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-workflowcvmdk/series-workflowcvmdk-convert-artifact-467194400/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcvmdk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"333f7de560e1196034b67db16916b10a0c529e1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","CFG80211","MAC80211","USB","FW_LOADER","FW_LOADER_USER_HELPER","BRCMDBG"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["brcmf_cyw_external_auth"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"333f7de560e1196034b67db16916b10a0c529e1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","CFG80211","MAC80211","USB","FW_LOADER","FW_LOADER_USER_HELPER","BRCMDBG"],"series_id":"74d0e6a3-1369-483f-a564-7607be1af2b8","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-04 07:31:33 +0000 UTC FinishedAt: 2026-08-04 07:31:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcvmdk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"333f7de560e1196034b67db16916b10a0c529e1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","CFG80211","MAC80211","USB","FW_LOADER","FW_LOADER_USER_HELPER","BRCMDBG"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["brcmf_cyw_external_auth"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"333f7de560e1196034b67db16916b10a0c529e1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","CFG80211","MAC80211","USB","FW_LOADER","FW_LOADER_USER_HELPER","BRCMDBG"],"series_id":"74d0e6a3-1369-483f-a564-7607be1af2b8","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-04 07:31:33 +0000 UTC FinishedAt: 2026-08-04 07:31:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcvmdk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"333f7de560e1196034b67db16916b10a0c529e1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","CFG80211","MAC80211","USB","FW_LOADER","FW_LOADER_USER_HELPER","BRCMDBG"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["brcmf_cyw_external_auth"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"333f7de560e1196034b67db16916b10a0c529e1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","CFG80211","MAC80211","USB","FW_LOADER","FW_LOADER_USER_HELPER","BRCMDBG"],"series_id":"74d0e6a3-1369-483f-a564-7607be1af2b8","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-04 07:31:33 +0000 UTC FinishedAt: 2026-08-04 07:31:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcvmdk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"333f7de560e1196034b67db16916b10a0c529e1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","CFG80211","MAC80211","USB","FW_LOADER","FW_LOADER_USER_HELPER","BRCMDBG"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["brcmf_cyw_external_auth"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"333f7de560e1196034b67db16916b10a0c529e1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","CFG80211","MAC80211","USB","FW_LOADER","FW_LOADER_USER_HELPER","BRCMDBG"],"series_id":"74d0e6a3-1369-483f-a564-7607be1af2b8","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-04 07:31:43 +0000 UTC FinishedAt: 2026-08-04 07:34:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcvmdk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"333f7de560e1196034b67db16916b10a0c529e1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","CFG80211","MAC80211","USB","FW_LOADER","FW_LOADER_USER_HELPER","BRCMDBG"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["brcmf_cyw_external_auth"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"333f7de560e1196034b67db16916b10a0c529e1d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","CFG80211","MAC80211","USB","FW_LOADER","FW_LOADER_USER_HELPER","BRCMDBG"],"series_id":"74d0e6a3-1369-483f-a564-7607be1af2b8","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-04 07:31:43 +0000 UTC FinishedAt: 2026-08-04 07:34:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*36aae90f-dfea-4e0d-9237-3fe4573753a0,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*416f4679-4047-41b4-8ad9-a394c64cd564,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-workflowcvmdk/series-workflowcvmdk-build-action-3826772454/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-workflowcvmdk/series-workflowcvmdk-build-action-773593291/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-workflowcvmdk/series-workflowcvmdk-convert-artifact-467194400/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,}