Name: series-workflowspn77 Phase: Succeeded StartedAt: 2026-07-09 02:57:41 +0000 UTC FinishedAt: 2026-07-09 08:05:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspn77[0] Phase: Succeeded StartedAt: 2026-07-09 02:57:41 +0000 UTC FinishedAt: 2026-07-09 03:20:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspn77[0].run-triage Phase: Succeeded StartedAt: 2026-07-09 02:57:41 +0000 UTC FinishedAt: 2026-07-09 03:20:48 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "302dfbff3e73be2ba5723237c6303244ec27cebb", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NUMA", "TRANSPARENT_HUGEPAGE", "DEVICE_PRIVATE", "ZONE_DEVICE", "MEMORY_HOTREMOVE", "ADVISE_SYSCALLS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "302dfbff3e73be2ba5723237c6303244ec27cebb", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NUMA", "TRANSPARENT_HUGEPAGE", "DEVICE_PRIVATE", "ZONE_DEVICE", "MEMORY_HOTREMOVE", "ADVISE_SYSCALLS" ], "series_id": "f6caa2b2-0bf3-4ddb-89bf-af716dc8e3a9" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "queue_folios_pmd", "madvise_free_huge_pmd", "madvise_cold_or_pageout_pte_range" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDAzOjExPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+OG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05VTUEmIzM0OywKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OywKICAgICYjMzQ7REVWSUNFX1BSSVZBVEUmIzM0OywKICAgICYjMzQ7Wk9ORV9ERVZJQ0UmIzM0OywKICAgICYjMzQ7TUVNT1JZX0hPVFJFTU9WRSYjMzQ7LAogICAgJiMzNDtBRFZJU0VfU1lTQ0FMTFMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtxdWV1ZV9mb2xpb3NfcG1kJiMzNDssCiAgICAmIzM0O21hZHZpc2VfZnJlZV9odWdlX3BtZCYjMzQ7LAogICAgJiMzNDttYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgY3Jhc2ggaW4gYHF1ZXVlX2ZvbGlvc19wbWRgIHdoZW4gaGFuZGxpbmcgbm9uLXByZXNlbnQgUE1EcyB0aGF0IGFyZSBub3QgbWlncmF0aW9uIGVudHJpZXMgKHN1Y2ggYXMgZGV2aWNlIHByaXZhdGUgZW50cmllcykuIEl0IGFsc28gdXBkYXRlcyBgVk1fQlVHX09OYCBhc3NlcnRpb25zIGluIG1hZHZpc2UgcGF0aHMgdG8gY29ycmVjdGx5IGhhbmRsZSBkZXZpY2UgcHJpdmF0ZSBlbnRyaWVzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGNvcnJlY3QgaGFuZGxpbmcgb2YgZGV2aWNlIHByaXZhdGUgbWVtb3J5IGluIE5VTUEgcG9saWN5IGFuZCBtYWR2aXNlIG9wZXJhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMDM6MTE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBlZmQ0NTZjNjMxZmVhOGQ0NTU0YjlmODIxNzQ2OTNiOTYyODc1OGZkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgOSAwMzoxMTozNSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9odWdlX21lbW9yeS5jIGIvbW0vaHVnZV9tZW1vcnkuY1xuaW5kZXggZWEwNDQ1ZDZjMTdmMDEuLmJkMzliMjYzZmM2MDU5IDEwMDY0NFxuLS0tIGEvbW0vaHVnZV9tZW1vcnkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vaHVnZV9tZW1vcnkuY1xuQEAgLTIyOTgsNyAmIzQzOzIyOTgsOCBAQCBib29sIG1hZHZpc2VfZnJlZV9odWdlX3BtZChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcbiBcdGlmICh1bmxpa2VseSghcG1kX3ByZXNlbnQob3JpZ19wbWQpKSkge1xuIFx0XHRWTV9CVUdfT04odGhwX21pZ3JhdGlvbl9zdXBwb3J0ZWQoKSBcdTAwMjZcdTAwMjZcbi1cdFx0XHRcdCAgIXBtZF9pc19taWdyYXRpb25fZW50cnkob3JpZ19wbWQpKTtcbiYjNDM7XHRcdFx0XHQgICFwbWRfaXNfbWlncmF0aW9uX2VudHJ5KG9yaWdfcG1kKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0XHQgICFwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnkob3JpZ19wbWQpKTtcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG5kaWZmIC0tZ2l0IGEvbW0vbWFkdmlzZS5jIGIvbW0vbWFkdmlzZS5jXG5pbmRleCA5MjkyZjYwYjE5YWE3Yy4uMTA2NWI1YTg0ZWE3OTcgMTAwNjQ0XG4tLS0gYS9tbS9tYWR2aXNlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21hZHZpc2UuY1xuQEAgLTM4OSw3ICYjNDM7Mzg5LDggQEAgc3RhdGljIGludCBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2UocG1kX3QgKnBtZCxcbiBcbiBcdFx0aWYgKHVubGlrZWx5KCFwbWRfcHJlc2VudChvcmlnX3BtZCkpKSB7XG4gXHRcdFx0Vk1fQlVHX09OKHRocF9taWdyYXRpb25fc3VwcG9ydGVkKCkgXHUwMDI2XHUwMDI2XG4tXHRcdFx0XHRcdCFwbWRfaXNfbWlncmF0aW9uX2VudHJ5KG9yaWdfcG1kKSk7XG4mIzQzO1x0XHRcdFx0XHQhcG1kX2lzX21pZ3JhdGlvbl9lbnRyeShvcmlnX3BtZCkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdFx0XHQhcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KG9yaWdfcG1kKSk7XG4gXHRcdFx0Z290byBodWdlX3VubG9jaztcbiBcdFx0fVxuIFxuZGlmZiAtLWdpdCBhL21tL21lbXBvbGljeS5jIGIvbW0vbWVtcG9saWN5LmNcbmluZGV4IDkxNGY4MTg2M2RiNWE2Li40Nzg1YjU1YzAyZGFmOSAxMDA2NDRcbi0tLSBhL21tL21lbXBvbGljeS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1wb2xpY3kuY1xuQEAgLTY1NCwxMiAmIzQzOzY1NCwxNCBAQCBzdGF0aWMgdm9pZCBxdWV1ZV9mb2xpb3NfcG1kKHBtZF90ICpwbWQsIHN0cnVjdCBtbV93YWxrICp3YWxrKVxuIHtcbiBcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4gXHRzdHJ1Y3QgcXVldWVfcGFnZXMgKnFwID0gd2Fsay1cdTAwM2Vwcml2YXRlO1xuJiM0MztcdHBtZF90IHBtZHZhbCA9ICpwbWQ7XG4gXG4tXHRpZiAodW5saWtlbHkocG1kX2lzX21pZ3JhdGlvbl9lbnRyeSgqcG1kKSkpIHtcbi1cdFx0cXAtXHUwMDNlbnJfZmFpbGVkJiM0MzsmIzQzOztcbiYjNDM7XHRpZiAodW5saWtlbHkoIXBtZF9wcmVzZW50KHBtZHZhbCkpKSB7XG4mIzQzO1x0XHRpZiAocG1kX2lzX21pZ3JhdGlvbl9lbnRyeShwbWR2YWwpKVxuJiM0MztcdFx0XHRxcC1cdTAwM2Vucl9mYWlsZWQmIzQzOyYjNDM7O1xuIFx0XHRyZXR1cm47XG4gXHR9XG4tXHRmb2xpbyA9IHBtZF9mb2xpbygqcG1kKTtcbiYjNDM7XHRmb2xpbyA9IHBtZF9mb2xpbyhwbWR2YWwpO1xuIFx0aWYgKGlzX2h1Z2VfemVyb19mb2xpbyhmb2xpbykpIHtcbiBcdFx0d2Fsay1cdTAwM2VhY3Rpb24gPSBBQ1RJT05fQ09OVElOVUU7XG4gXHRcdHJldHVybjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAwMzoxMTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT44bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtOVU1BJiMzNDssCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDssCiAgICAmIzM0O0RFVklDRV9QUklWQVRFJiMzNDssCiAgICAmIzM0O1pPTkVfREVWSUNFJiMzNDssCiAgICAmIzM0O01FTU9SWV9IT1RSRU1PVkUmIzM0OywKICAgICYjMzQ7QURWSVNFX1NZU0NBTExTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cXVldWVfZm9saW9zX3BtZCYjMzQ7LAogICAgJiMzNDttYWR2aXNlX2ZyZWVfaHVnZV9wbWQmIzM0OywKICAgICYjMzQ7bWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIGNyYXNoIGluIGBxdWV1ZV9mb2xpb3NfcG1kYCB3aGVuIGhhbmRsaW5nIG5vbi1wcmVzZW50IFBNRHMgdGhhdCBhcmUgbm90IG1pZ3JhdGlvbiBlbnRyaWVzIChzdWNoIGFzIGRldmljZSBwcml2YXRlIGVudHJpZXMpLiBJdCBhbHNvIHVwZGF0ZXMgYFZNX0JVR19PTmAgYXNzZXJ0aW9ucyBpbiBtYWR2aXNlIHBhdGhzIHRvIGNvcnJlY3RseSBoYW5kbGUgZGV2aWNlIHByaXZhdGUgZW50cmllcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBjb3JyZWN0IGhhbmRsaW5nIG9mIGRldmljZSBwcml2YXRlIG1lbW9yeSBpbiBOVU1BIHBvbGljeSBhbmQgbWFkdmlzZSBvcGVyYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBlZmQ0NTZjNjMxZmVhOGQ0NTU0YjlmODIxNzQ2OTNiOTYyODc1OGZkCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBKdWwgOSAwMzoxMTozNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL2h1Z2VfbWVtb3J5LmMgYi9tbS9odWdlX21lbW9yeS5jCmluZGV4IGVhMDQ0NWQ2YzE3ZjAxLi5iZDM5YjI2M2ZjNjA1OSAxMDA2NDQKLS0tIGEvbW0vaHVnZV9tZW1vcnkuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9odWdlX21lbW9yeS5jCkBAIC0yMjk4LDcgJiM0MzsyMjk4LDggQEAgYm9vbCBtYWR2aXNlX2ZyZWVfaHVnZV9wbWQoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAKIAlpZiAodW5saWtlbHkoIXBtZF9wcmVzZW50KG9yaWdfcG1kKSkpIHsKIAkJVk1fQlVHX09OKHRocF9taWdyYXRpb25fc3VwcG9ydGVkKCkgJmFtcDsmYW1wOwotCQkJCSAgIXBtZF9pc19taWdyYXRpb25fZW50cnkob3JpZ19wbWQpKTsKJiM0MzsJCQkJICAhcG1kX2lzX21pZ3JhdGlvbl9lbnRyeShvcmlnX3BtZCkgJmFtcDsmYW1wOwomIzQzOwkJCQkgICFwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnkob3JpZ19wbWQpKTsKIAkJZ290byBvdXQ7CiAJfQogCmRpZmYgLS1naXQgYS9tbS9tYWR2aXNlLmMgYi9tbS9tYWR2aXNlLmMKaW5kZXggOTI5MmY2MGIxOWFhN2MuLjEwNjViNWE4NGVhNzk3IDEwMDY0NAotLS0gYS9tbS9tYWR2aXNlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWFkdmlzZS5jCkBAIC0zODksNyAmIzQzOzM4OSw4IEBAIHN0YXRpYyBpbnQgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlKHBtZF90ICpwbWQsCiAKIAkJaWYgKHVubGlrZWx5KCFwbWRfcHJlc2VudChvcmlnX3BtZCkpKSB7CiAJCQlWTV9CVUdfT04odGhwX21pZ3JhdGlvbl9zdXBwb3J0ZWQoKSAmYW1wOyZhbXA7Ci0JCQkJCSFwbWRfaXNfbWlncmF0aW9uX2VudHJ5KG9yaWdfcG1kKSk7CiYjNDM7CQkJCQkhcG1kX2lzX21pZ3JhdGlvbl9lbnRyeShvcmlnX3BtZCkgJmFtcDsmYW1wOwomIzQzOwkJCQkJIXBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeShvcmlnX3BtZCkpOwogCQkJZ290byBodWdlX3VubG9jazsKIAkJfQogCmRpZmYgLS1naXQgYS9tbS9tZW1wb2xpY3kuYyBiL21tL21lbXBvbGljeS5jCmluZGV4IDkxNGY4MTg2M2RiNWE2Li40Nzg1YjU1YzAyZGFmOSAxMDA2NDQKLS0tIGEvbW0vbWVtcG9saWN5LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtcG9saWN5LmMKQEAgLTY1NCwxMiAmIzQzOzY1NCwxNCBAQCBzdGF0aWMgdm9pZCBxdWV1ZV9mb2xpb3NfcG1kKHBtZF90ICpwbWQsIHN0cnVjdCBtbV93YWxrICp3YWxrKQogewogCXN0cnVjdCBmb2xpbyAqZm9saW87CiAJc3RydWN0IHF1ZXVlX3BhZ2VzICpxcCA9IHdhbGstJmd0O3ByaXZhdGU7CiYjNDM7CXBtZF90IHBtZHZhbCA9ICpwbWQ7CiAKLQlpZiAodW5saWtlbHkocG1kX2lzX21pZ3JhdGlvbl9lbnRyeSgqcG1kKSkpIHsKLQkJcXAtJmd0O25yX2ZhaWxlZCYjNDM7JiM0Mzs7CiYjNDM7CWlmICh1bmxpa2VseSghcG1kX3ByZXNlbnQocG1kdmFsKSkpIHsKJiM0MzsJCWlmIChwbWRfaXNfbWlncmF0aW9uX2VudHJ5KHBtZHZhbCkpCiYjNDM7CQkJcXAtJmd0O25yX2ZhaWxlZCYjNDM7JiM0Mzs7CiAJCXJldHVybjsKIAl9Ci0JZm9saW8gPSBwbWRfZm9saW8oKnBtZCk7CiYjNDM7CWZvbGlvID0gcG1kX2ZvbGlvKHBtZHZhbCk7CiAJaWYgKGlzX2h1Z2VfemVyb19mb2xpbyhmb2xpbykpIHsKIAkJd2Fsay0mZ3Q7YWN0aW9uID0gQUNUSU9OX0NPTlRJTlVFOwogCQlyZXR1cm47CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDAzOjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzODkKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA2ODkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUGF0Y2g6IEh1Z2UgUGFnZXMgYW5kIE1lbW9yeSBNYW5hZ2VtZW50KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgSSBzZWUgd2UmIzM5O3JlIHRvdWNoaW5nIGBtbS9odWdlX21lbW9yeS5jYCwgYG1tL21hZHZpc2UuY2AsIGFuZCBgbW0vbWVtcG9saWN5LmNgLiBTZWVtcyB0byBiZSByZWxhdGVkIHRvIGhhbmRsaW5nIGh1Z2UgcGFnZXMsIHdoaWNoIGFsd2F5cyB3YXJyYW50cyBhIGNsb3NlIGxvb2suCgpUaGUgZmlyc3QgdHdvIGNoYW5nZXMsIGluIGBtbS9odWdlX21lbW9yeS5jYCBhbmQgYG1tL21hZHZpc2UuY2AsIGFyZSBzdHJhaWdodGZvcndhcmQuIFRoZXkmIzM5O3JlIGp1c3QgYWRkaW5nIGEgY2hlY2sgZm9yIGAhcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KG9yaWdfcG1kKWAgdG8gYSBgVk1fQlVHX09OYC4gQSBgVk1fQlVHX09OYCBpcyBhIGRlYnVnIGFzc2VydGlvbi4gRnJvbSBhIGZ1bmN0aW9uYWwgcGVyc3BlY3RpdmUsIGl0JiMzOTtzIGlycmVsZXZhbnQgaW4gbm9uLWRlYnVnIGJ1aWxkcy4gQnV0IGluIGEgZGVidWcgYnVpbGQsIHRoaXMgaXMgbWVhbnQgdG8gcHJldmVudCBhIGNyYXNoLiBFc3NlbnRpYWxseSwgaXQmIzM5O3MgYSBzYWZldHkgbmV0LCBtYWtpbmcgc3VyZSB0aGF0IGEgc3BlY2lmaWMgY29uZGl0aW9uICpzaG91bGRuJiMzOTt0KiBoYXBwZW4uIFRoZSBuZXcgY29uZGl0aW9uIHNlZW1zIHRvIGJlIGVuc3VyaW5nIHRoYXQgdGhlIGVudHJ5IGlzIG5laXRoZXIgYSBtaWdyYXRpb24gZW50cnkgbm9yIGEgZGV2aWNlLXByaXZhdGUgZW50cnkgYmVmb3JlIHRyaWdnZXJpbmcgdGhlIGRlYnVnIGNoZWNrLiBUaGF0JiMzOTtzIGdvb2QsIGtlZXBzIHRoaW5ncyBzYWZlIGFuZCBoZWxwcyBjYXRjaCBwb3RlbnRpYWwgaXNzdWVzIGVhcmx5LgoKTm93LCB0aGUgaW50ZXJlc3RpbmcgcGFydCBpcyB0aGUgY2hhbmdlIGluIGBtbS9tZW1wb2xpY3kuY2AsIHNwZWNpZmljYWxseSBpbiB0aGUgYHF1ZXVlX2ZvbGlvc19wbWRgIGZ1bmN0aW9uLiBUaGlzIG9uZSYjMzk7cyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBub3QganVzdCBhIGRlYnVnIGNoZWNrLiBUaGUgcHJldmlvdXMgY29kZSBjaGVja2VkIGlmIHRoZSBlbnRyeSB3YXMgYSBtaWdyYXRpb24gZW50cnkuIEJ1dCBub3csIGl0JiMzOTtzIGNoZWNraW5nIGAhcG1kX3ByZXNlbnQocG1kdmFsKWAuIEVzc2VudGlhbGx5LCB0aGUgbG9naWMgaXMgYmVpbmcgaW52ZXJ0ZWQuIElmIHRoZSBQTUQgaXNuJiMzOTt0IHByZXNlbnQsIHRoZW4gaXQgZGl2ZXMgaW50byBjaGVja2luZyBpZiBpdCAqaXMqIGEgbWlncmF0aW9uIGVudHJ5LiBJZiBpdCBpcywgdGhlbiBgbnJfZmFpbGVkYCBpcyBpbmNyZW1lbnRlZC4gUHJldmlvdXNseSwgaXQgd291bGQgcHJvY2VlZCB0byBjYWxsIGBwbWRfZm9saW8oKnBtZClgLCB3aGljaCBjb3VsZCBsZWFkIHRvIGRlcmVmZXJlbmNpbmcgYSBnYXJiYWdlIHBvaW50ZXIgb3IsIHdvcnNlLCBhIGNyYXNoLiBTbywgdGhpcyByZWZhY3RvcmluZyBwcm90ZWN0cyBhZ2FpbnN0IHRoYXQgcG9zc2liaWxpdHkuCgpUaGVyZWZvcmUsIHRoaXMgcGF0Y2ggbG9va3MgbGlrZSBpdCYjMzk7cyBpbXByb3Zpbmcgcm9idXN0bmVzcyBieSBhZGRpbmcgdGhlIHNhZmV0eSBjaGVjayB3aGlsZSBhbHNvIHByb3RlY3RpbmcgdGhlIGBxdWV1ZV9mb2xpb3NfcG1kYCBmdW5jdGlvbiBmcm9tIHBvdGVudGlhbGx5IGRlcmVmZXJlbmNpbmcgZ2FyYmFnZSBkYXRhLiBTb3VuZHMgbGlrZSBhIHNvbGlkIGltcHJvdmVtZW50LiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgY29udGV4dHMgd2hlcmUgdGhlc2UgZnVuY3Rpb25zIGFyZSB1c2VkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbXBsZXRlIGltcGFjdCwgYnV0IGF0IGEgZ2xhbmNlLCB0aGlzIGxvb2tzIHdlbGwtcmVhc29uZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMDM6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cXVldWVfZm9saW9zX3BtZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21lbXBvbGljeS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbXBvbGljeS5jPTY0ND1zdGF0aWMgaW5saW5lIGJvb2wgcXVldWVfZm9saW9fcmVxdWlyZWQoc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5tbS9tZW1wb2xpY3kuYy02NTItXG5tbS9tZW1wb2xpY3kuYzo2NTM6c3RhdGljIHZvaWQgcXVldWVfZm9saW9zX3BtZChwbWRfdCAqcG1kLCBzdHJ1Y3QgbW1fd2FsayAqd2Fsaylcbm1tL21lbXBvbGljeS5jLTY1NC17XG4tLVxubW0vbWVtcG9saWN5LmM9Njg3PXN0YXRpYyBpbnQgcXVldWVfZm9saW9zX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxubW0vbWVtcG9saWN5LmMtNzAwLVx0aWYgKHB0bCkge1xubW0vbWVtcG9saWN5LmM6NzAxOlx0XHRxdWV1ZV9mb2xpb3NfcG1kKHBtZCwgd2Fsayk7XG5tbS9tZW1wb2xpY3kuYy03MDItXHRcdHNwaW5fdW5sb2NrKHB0bCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMDM6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzc5OQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipVbmRlcnN0YW5kaW5nIHRoZSBGb2xpbyBRdWV1aW5nIFByb2Nlc3MqKgoKUmlnaHQsIHNvIGBxdWV1ZV9mb2xpb3NfcG1kYCBpcyBjbGVhcmx5IGEgZnVuY3Rpb24gdGhhdCBwbGF5cyBhIHJvbGUgaW4gcXVldWluZyBmb2xpb3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByZWxhdGlvbnNoaXAgdG8gYHF1ZXVlX2ZvbGlvc19wdGVfcmFuZ2VgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgd2hhdCYjMzk7cyB0aGUgY29udHJvbCBmbG93PyBJdCBsb29rcyBsaWtlIGBxdWV1ZV9mb2xpb3NfcHRlX3JhbmdlYCBjYWxscyBgcXVldWVfZm9saW9zX3BtZGAuIFNvLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoYXQgcmVsYXRpb25zaGlwIGlzIHRvIHRyYWNrIGRvd24gdGhlIHJlbGV2YW50IGNvZGUgcGF0aC4KCk9rYXksIGxldCYjMzk7cyB0aGluayBhYm91dCB0aGUgY29udGV4dC4gVGhpcyBpcyBtZW1vcnkgbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IGRlYWxpbmcgd2l0aCBmb2xpb3MuIFRoZSB0cmFjZSBzZWVtcyB0byBiZSByZWxhdGVkIHRvIHRoZSBQTUQgbGV2ZWwuIE5vdywgSSBoYXZlIHRvIGZpZ3VyZSBvdXQgd2hhdCBjb25maWd1cmF0aW9ucyBhcmUgY3JpdGljYWwuIFNpbmNlIHRoaXMgbG9va3MgbGlrZSBOVU1BLWF3YXJlIGNvZGUsIEkgbmVlZCB0byBjaGVjayB0byBzZWUgaWYgYG1tL21lbXBvbGljeS5jYCBpcyBpbnZvbHZlZC4gSSB2YWd1ZWx5IHJlY2FsbCB0aGF0IGZpbGUgYmVpbmcgY29tcGlsZWQgd2hlbiBgQ09ORklHX05VTUFgIGlzIGVuYWJsZWQuIEl0JiMzOTtzIGEga2V5IHBhcnQgb2YgaG93IHRoZSBrZXJuZWwgbWFuYWdlcyBtZW1vcnkgcGxhY2VtZW50IGFjcm9zcyBOVU1BIG5vZGVzLiBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgdGhhdCB0aGlzIGlzIHRoZSBjb25maWd1cmF0aW9uIEkgbmVlZCB0byBmb2N1cyBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAwMzoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW1wb2xpY3kubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlPTg1PW9iai0kKENPTkZJR19IVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUClcdCYjNDM7PSBodWdldGxiX3ZtZW1tYXAub1xubW0vTWFrZWZpbGU6ODY6b2JqLSQoQ09ORklHX05VTUEpIFx0JiM0Mzs9IG1lbXBvbGljeS5vXG5tbS9NYWtlZmlsZS04Ny1vYmotJChDT05GSUdfU1BBUlNFTUVNKVx0JiM0Mzs9IHNwYXJzZS5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMDM6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDIxMAoJCQkJCQkJb3V0cHV0OiA1NgoJCQkJCQkJdGhvdWdodHM6IDEyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGVzZSB0d28gZnVuY3Rpb25zOiBgbWFkdmlzZV9mcmVlX2h1Z2VfcG1kYCBhbmQgYG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZWAuIE15IGZpcnN0IHN0b3AgaXMgZ29pbmcgdG8gYmUgdGhlaXIgc291cmNlIGZpbGVzLgoKKipBbmFseXppbmcgTWVtb3J5IE1hbmFnZW1lbnQgRnVuY3Rpb25zKioKCmBtYWR2aXNlX2ZyZWVfaHVnZV9wbWRgIGNhdWdodCBteSBleWUsIGFuZCBhIHF1aWNrIGNoZWNrIHRlbGxzIG1lIGl0JiMzOTtzIGxvY2F0ZWQgd2l0aGluIGBtbS9odWdlX21lbW9yeS5jYC4gVGhhdCBtZWFucyBpdCYjMzk7cyBpbnRyaW5zaWNhbGx5IHRpZWQgdG8gdGhlIGtlcm5lbCYjMzk7cyB0cmFuc3BhcmVudCBodWdlcGFnZXMgZnVuY3Rpb25hbGl0eSwgYXMgaW5kaWNhdGVkIGJ5IHRoZSBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCBvcHRpb24uIFRoYXQgbWFrZXMgc2Vuc2UsIGdpdmVuIHRoZSBuYW1lLiBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIHRvIGtlZXAgdGhhdCBjb250ZXh0IGluIG1pbmQgd2hlbiBJIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgZGV0YWlscy4KCk5vdywgYG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZWAgYXBwZWFycyB0byByZXNpZGUgaW4gYG1tL21hZHZpc2UuY2AuIFRoZSBwcmVzZW5jZSBvZiB0aGlzIGZ1bmN0aW9uIGlzIGNvbmRpdGlvbmFsIG9uIGBDT05GSUdfQURWSVNFX1NZU0NBTExTYCBiZWluZyBlbmFibGVkLCB3aGljaCBpcyBhIGdvb2QgY2x1ZSBmb3IgZnVydGhlciBpbnZlc3RpZ2F0aW9uLiBUaGlzIHN1Z2dlc3RzIGl0cyByZWxhdGVkIHRvIHRoZSBzeXN0ZW0gY2FsbCB0aGF0IGFsbG93cyBwcm9jZXNzZXMgdG8gZ2l2ZSBoaW50cyB0byB0aGUga2VybmVsIGFib3V0IG1lbW9yeSB1c2FnZS4gVGhpcyB3aWxsIGJlIHdoZXJlIEkgYmVnaW4gdG8gZXhwbG9yZSBob3cgdXNlci1zcGFjZSBpbnRlcmFjdHMgd2l0aCB0aGUga2VybmVsJiMzOTtzIG1lbW9yeSBtYW5hZ2VtZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDAzOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2h1Z2VfbWVtb3J5Lm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9NYWtlZmlsZT0xMDA9b2JqLSQoQ09ORklHX0RFVklDRV9NSUdSQVRJT04pICYjNDM7PSBtaWdyYXRlX2RldmljZS5vXG5tbS9NYWtlZmlsZToxMDE6b2JqLSQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSAmIzQzOz0gaHVnZV9tZW1vcnkubyBraHVnZXBhZ2VkLm9cbm1tL01ha2VmaWxlLTEwMi1vYmotJChDT05GSUdfUEFHRV9DT1VOVEVSKSAmIzQzOz0gcGFnZV9jb3VudGVyLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAwMzoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttYWR2aXNlLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9NYWtlZmlsZT03ND1pZmRlZiBDT05GSUdfTU1VXG5tbS9NYWtlZmlsZTo3NTpcdG9iai0kKENPTkZJR19BRFZJU0VfU1lTQ0FMTFMpXHQmIzQzOz0gbWFkdmlzZS5vXG5tbS9NYWtlZmlsZS03Ni1lbmRpZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAwMzoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0ODEyCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBSZWNlbnQgS2VybmVsIE1lbW9yeSBNYW5hZ2VtZW50IENoYW5nZXMqKgoKT2theSwgc28gbG9va2luZyBhdCB0aGVzZSBkaWZmcywgaXQgc2VlbXMgdGhlIHVwZGF0ZXMgaW4gYG1tL2h1Z2VfbWVtb3J5LmNgIGFuZCBgbW0vbWFkdmlzZS5jYCBhcmUgc3RyYWlnaHRmb3J3YXJkIGBWTV9CVUdfT05gIGFkZGl0aW9ucy4gUHJldHR5IHJvdXRpbmUgc3R1ZmYsIGxpa2VseSB0byBjYXRjaCBzb21lIGVkZ2UgY2FzZXMgZHVyaW5nIGRldmVsb3BtZW50LiBUaGUgY2hhbmdlIGluIGBtbS9tZW1wb2xpY3kuY2AgaXMgdGhlIG9uZSB0aGF0JiMzOTtzIGdyYWJiZWQgbXkgYXR0ZW50aW9uLiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIGFkZHJlc3NpbmcgYSBidWcuIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgcHJldmVudGluZyBhIGNyYXNoIG9yLCB3b3JzZSwgaW5jb3JyZWN0IGJlaGF2aW9yIHdoZW4gZGVhbGluZyB3aXRoIGEgUE1EIHRoYXQgaXNuJiMzOTt0IGEgbWlncmF0aW9uIGVudHJ5LiBUaGlzIGNvdWxkIGJlIGR1ZSB0byBhIGRldmljZS1wcml2YXRlIGVudHJ5LCBhIHN3YXAgZW50cnksIG9yIHBvdGVudGlhbGx5IGp1c3QgdGhlIGFic2VuY2Ugb2YgYW4gZW50cnkuCgpOb3cgaG9sZCBvbiBhIHNlY29uZC4uLiBgcXVldWVfZm9saW9zX3BtZGAuLi4gdGhhdCYjMzk7cyBnZXR0aW5nIGNhbGxlZCBmcm9tIGBxdWV1ZV9mb2xpb3NfcHRlX3JhbmdlYCAqd2hlbiogYHB0bGAgaXMgbm90IE5VTEwuIFJpZ2h0LCB0aGF0IG1lYW5zIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBodWdlIFBNRCDigJMgYSBUSFAuIE9rYXksIGxldCYjMzk7cyBkcmlsbCBkb3duIGludG8gYHF1ZXVlX2ZvbGlvc19wdGVfcmFuZ2VgIGluIGBtbS9tZW1wb2xpY3kuY2AgYW5kIGZpZ3VyZSBvdXQgd2hhdCYjMzk7cyBnb2luZyBvbiB3aXRoIHRoaXMgUE1EIGhhbmRsaW5nLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGlzIHRpZXMgaW50byB0aGUgb3ZlcmFsbCBtZW1vcnkgcG9saWN5IG1hbmFnZW1lbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgY29ubmVjdGlvbiB0byBhc3Nlc3MgdGhlIGltcGFjdCBhbmQgcG9zc2libGUgaW1wbGljYXRpb25zIG9mIHRoaXMgZml4LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAwMzoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL21lbXBvbGljeS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjg3LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2ODc6XHRzdGF0aWMgaW50IHF1ZXVlX2ZvbGlvc19wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIDY4ODpcdFx0XHRcdHVuc2lnbmVkIGxvbmcgZW5kLCBzdHJ1Y3QgbW1fd2FsayAqd2FsaylcbiA2ODk6XHR7XG4gNjkwOlx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHdhbGstXHUwMDNldm1hO1xuIDY5MTpcdFx0c3RydWN0IGZvbGlvICpmb2xpbztcbiA2OTI6XHRcdHN0cnVjdCBxdWV1ZV9wYWdlcyAqcXAgPSB3YWxrLVx1MDAzZXByaXZhdGU7XG4gNjkzOlx0XHR1bnNpZ25lZCBsb25nIGZsYWdzID0gcXAtXHUwMDNlZmxhZ3M7XG4gNjk0Olx0XHRwdGVfdCAqcHRlLCAqbWFwcGVkX3B0ZTtcbiA2OTU6XHRcdHB0ZV90IHB0ZW50O1xuIDY5NjpcdFx0c3BpbmxvY2tfdCAqcHRsO1xuIDY5NzpcdFx0aW50IG1heF9uciwgbnI7XG4gNjk4Olx0XG4gNjk5Olx0XHRwdGwgPSBwbWRfdHJhbnNfaHVnZV9sb2NrKHBtZCwgdm1hKTtcbiA3MDA6XHRcdGlmIChwdGwpIHtcbiA3MDE6XHRcdFx0cXVldWVfZm9saW9zX3BtZChwbWQsIHdhbGspO1xuIDcwMjpcdFx0XHRzcGluX3VubG9jayhwdGwpO1xuIDcwMzpcdFx0XHRnb3RvIG91dDtcbiA3MDQ6XHRcdH1cbiA3MDU6XHRcbiA3MDY6XHRcdG1hcHBlZF9wdGUgPSBwdGUgPSBwdGVfb2Zmc2V0X21hcF9sb2NrKHdhbGstXHUwMDNlbW0sIHBtZCwgYWRkciwgXHUwMDI2cHRsKTtcbiA3MDc6XHRcdGlmICghcHRlKSB7XG4gNzA4Olx0XHRcdHdhbGstXHUwMDNlYWN0aW9uID0gQUNUSU9OX0FHQUlOO1xuIDcwOTpcdFx0XHRyZXR1cm4gMDtcbiA3MTA6XHRcdH1cbiA3MTE6XHRcdGZvciAoOyBhZGRyICE9IGVuZDsgcHRlICYjNDM7PSBuciwgYWRkciAmIzQzOz0gbnIgKiBQQUdFX1NJWkUpIHtcbiA3MTI6XHRcdFx0bWF4X25yID0gKGVuZCAtIGFkZHIpIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuIDcxMzpcdFx0XHRuciA9IDE7XG4gNzE0Olx0XHRcdHB0ZW50ID0gcHRlcF9nZXQocHRlKTtcbiA3MTU6XHRcdFx0aWYgKHB0ZV9ub25lKHB0ZW50KSlcbiA3MTY6XHRcdFx0XHRjb250aW51ZTtcbiA3MTc6XHRcdFx0aWYgKCFwdGVfcHJlc2VudChwdGVudCkpIHtcbiA3MTg6XHRcdFx0XHRjb25zdCBzb2Z0bGVhZl90IGVudHJ5ID0gc29mdGxlYWZfZnJvbV9wdGUocHRlbnQpO1xuIDcxOTpcdFxuIDcyMDpcdFx0XHRcdGlmIChzb2Z0bGVhZl9pc19taWdyYXRpb24oZW50cnkpKVxuIDcyMTpcdFx0XHRcdFx0cXAtXHUwMDNlbnJfZmFpbGVkJiM0MzsmIzQzOztcbiA3MjI6XHRcdFx0XHRjb250aW51ZTtcbiA3MjM6XHRcdFx0fVxuIDcyNDpcdFx0XHRmb2xpbyA9IHZtX25vcm1hbF9mb2xpbyh2bWEsIGFkZHIsIHB0ZW50KTtcbiA3MjU6XHRcdFx0aWYgKCFmb2xpbyB8fCBmb2xpb19pc196b25lX2RldmljZShmb2xpbykpXG4gNzI2Olx0XHRcdFx0Y29udGludWU7XG4gNzI3Olx0XHRcdGlmIChmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSBcdTAwMjZcdTAwMjYgbWF4X25yICE9IDEpXG4gNzI4Olx0XHRcdFx0bnIgPSBmb2xpb19wdGVfYmF0Y2goZm9saW8sIHB0ZSwgcHRlbnQsIG1heF9ucik7XG4gNzI5Olx0XHRcdC8qXG4gNzMwOlx0XHRcdCAqIHZtX25vcm1hbF9mb2xpbygpIGZpbHRlcnMgb3V0IHplcm8gcGFnZXMsIGJ1dCB0aGVyZSBtaWdodFxuIDczMTpcdFx0XHQgKiBzdGlsbCBiZSByZXNlcnZlZCBmb2xpb3MgdG8gc2tpcCwgcGVyaGFwcyBpbiBhIFZEU08uXG4gNzMyOlx0XHRcdCAqL1xuIDczMzpcdFx0XHRpZiAoZm9saW9fdGVzdF9yZXNlcnZlZChmb2xpbykpXG4gNzM0Olx0XHRcdFx0Y29udGludWU7XG4gNzM1Olx0XHRcdGlmICghcXVldWVfZm9saW9fcmVxdWlyZWQoZm9saW8sIHFwKSlcbiA3MzY6XHRcdFx0XHRjb250aW51ZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMDM6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjA4MQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkFuYWx5emluZyB0aGUgYHF1ZXVlX2ZvbGlvc19wbWRgIEZ1bmN0aW9uKioKCkFscmlnaHQsIHNvIGBxdWV1ZV9mb2xpb3NfcG1kYCBpcyB0aGUgZnVuY3Rpb24gdGhhdCBnZXRzIGNhbGxlZCAqYWZ0ZXIqIGBwbWRfdHJhbnNfaHVnZV9sb2NrYCBmaW5hbGx5IGdyYW50cyB1cyB0aGUgbG9jay4gVGhhdCYjMzk7cyB0aGUgY3JpdGljYWwganVuY3R1cmUuIE5vdywgbGV0JiMzOTtzIGNpcmNsZSBiYWNrIGFuZCByZWFsbHkgZGlnIGludG8gdGhlIHB1cnBvc2UgYW5kIG1lY2hhbmljcyBvZiBgcXVldWVfZm9saW9zX3BtZGAuIEkgbmVlZCB0byBmdWxseSBncmFzcCB3aGF0JiMzOTtzIGhhcHBlbmluZyAqd2l0aGluKiB0aGF0IGZ1bmN0aW9uLCBnaXZlbiBpdHMgcGxhY2UgaW4gdGhpcyBjcnVjaWFsIG1lbW9yeSBtYW5hZ2VtZW50IHBhdGguIExldCYjMzk7cyByZXZpc2l0IGl0IHdpdGggYSBmcmVzaCBleWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDAzOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbWVtcG9saWN5LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2NTMsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDY1MzpcdHN0YXRpYyB2b2lkIHF1ZXVlX2ZvbGlvc19wbWQocG1kX3QgKnBtZCwgc3RydWN0IG1tX3dhbGsgKndhbGspXG4gNjU0Olx0e1xuIDY1NTpcdFx0c3RydWN0IGZvbGlvICpmb2xpbztcbiA2NTY6XHRcdHN0cnVjdCBxdWV1ZV9wYWdlcyAqcXAgPSB3YWxrLVx1MDAzZXByaXZhdGU7XG4gNjU3Olx0XHRwbWRfdCBwbWR2YWwgPSAqcG1kO1xuIDY1ODpcdFxuIDY1OTpcdFx0aWYgKHVubGlrZWx5KCFwbWRfcHJlc2VudChwbWR2YWwpKSkge1xuIDY2MDpcdFx0XHRpZiAocG1kX2lzX21pZ3JhdGlvbl9lbnRyeShwbWR2YWwpKVxuIDY2MTpcdFx0XHRcdHFwLVx1MDAzZW5yX2ZhaWxlZCYjNDM7JiM0Mzs7XG4gNjYyOlx0XHRcdHJldHVybjtcbiA2NjM6XHRcdH1cbiA2NjQ6XHRcdGZvbGlvID0gcG1kX2ZvbGlvKHBtZHZhbCk7XG4gNjY1Olx0XHRpZiAoaXNfaHVnZV96ZXJvX2ZvbGlvKGZvbGlvKSkge1xuIDY2NjpcdFx0XHR3YWxrLVx1MDAzZWFjdGlvbiA9IEFDVElPTl9DT05USU5VRTtcbiA2Njc6XHRcdFx0cmV0dXJuO1xuIDY2ODpcdFx0fVxuIDY2OTpcdFx0aWYgKCFxdWV1ZV9mb2xpb19yZXF1aXJlZChmb2xpbywgcXApKVxuIDY3MDpcdFx0XHRyZXR1cm47XG4gNjcxOlx0XHRpZiAoIShxcC1cdTAwM2VmbGFncyBcdTAwMjYgKE1QT0xfTUZfTU9WRSB8IE1QT0xfTUZfTU9WRV9BTEwpKSB8fFxuIDY3MjpcdFx0ICAgICF2bWFfbWlncmF0YWJsZSh3YWxrLVx1MDAzZXZtYSkgfHxcbiA2NzM6XHRcdCAgICAhbWlncmF0ZV9mb2xpb19hZGQoZm9saW8sIHFwLVx1MDAzZXBhZ2VsaXN0LCBxcC1cdTAwM2VmbGFncykpXG4gNjc0Olx0XHRcdHFwLVx1MDAzZW5yX2ZhaWxlZCYjNDM7JiM0Mzs7XG4gNjc1Olx0fVxuIDY3NjpcdFxuIDY3NzpcdC8qXG4gNjc4Olx0ICogU2NhbiB0aHJvdWdoIGZvbGlvcywgY2hlY2tpbmcgaWYgdGhleSBzYXRpc2Z5IHRoZSByZXF1aXJlZCBjb25kaXRpb25zLFxuIDY3OTpcdCAqIG1vdmluZyB0aGVtIGZyb20gTFJVIHRvIGxvY2FsIHBhZ2VsaXN0IGZvciBtaWdyYXRpb24gaWYgdGhleSBkbyAob3Igbm90KS5cbiA2ODA6XHQgKlxuIDY4MTpcdCAqIHF1ZXVlX2ZvbGlvc19wdGVfcmFuZ2UoKSBoYXMgdHdvIHBvc3NpYmxlIHJldHVybiB2YWx1ZXM6XG4gNjgyOlx0ICogMCAtIGNvbnRpbnVlIHdhbGtpbmcgdG8gc2NhbiBmb3IgbW9yZSwgZXZlbiBpZiBhbiBleGlzdGluZyBmb2xpbyBvbiB0aGVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMDM6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjc5MQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDI4NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBNRCBDaGVjayBpbiBgcXVldWVfZm9saW9zX3BtZGAqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBjaGFuZ2UgaW4gYHF1ZXVlX2ZvbGlvc19wbWRgLiBUaGUgY29yZSBvZiBpdCBzZWVtcyB0byBiZSBhIGNvbmRpdGlvbmFsIHJlLWFycmFuZ2VtZW50LiBQcmV2aW91c2x5LCB0aGUgY29kZSBjaGVja2VkIGlmIGEgUE1EIGVudHJ5IHdhcyBhIG1pZ3JhdGlvbiBlbnRyeS4gSWYgaXQgKndhc24mIzM5O3QqIGEgbWlncmF0aW9uIGVudHJ5LCBpdCB3b3VsZCBibGluZGx5IGF0dGVtcHQgdG8gcmV0cmlldmUgdGhlIGZvbGlvIHVzaW5nIGBwbWRfZm9saW8oKnBtZClgLiBOb3csIGl0JiMzOTtzIGNoZWNraW5nIGAhcG1kX3ByZXNlbnQocG1kdmFsKWAgZmlyc3QuIElmIHRoZSBQTUQgaXNuJiMzOTt0ICpwcmVzZW50KiAobWVhbmluZywgZm9yIGluc3RhbmNlLCBpdCYjMzk7cyBhIGRldmljZSBwcml2YXRlIGVudHJ5IG9yIHNvbWUgb3RoZXIgYWJzZW50IGVudHJ5KSwgaXQgaW1tZWRpYXRlbHkgZXhpdHMgdGhlIGZ1bmN0aW9uLiBUaGlzIGlzIGEgY3J1Y2lhbCBpbXByb3ZlbWVudCBmb3Igc3RhYmlsaXR5LgoKVGhlIG9sZCBiZWhhdmlvciB3YXMgdnVsbmVyYWJsZSwgc3BlY2lmaWNhbGx5IHdoZW4gdGhlIFBNRCB3YXNuJiMzOTt0IHByZXNlbnQsIGxlYWRpbmcgdG8gYHBtZF9mb2xpb2AgcG90ZW50aWFsbHkgY3Jhc2hpbmcgb3IgcmV0dXJuaW5nIGdhcmJhZ2UgZGF0YSwgb3IgYXR0ZW1wdGluZyB0byBkZXJlZmVyZW5jZSBhbiBpbnZhbGlkIHBvaW50ZXIuIFRoaXMgbmV3IGNoZWNrIGVmZmVjdGl2ZWx5IGFjdHMgYXMgYSBzYWZldHkgbmV0LCBhdm9pZGluZyB0aG9zZSBpc3N1ZXMuIFRoZSBjaGFuZ2UgcHJldmVudHMgYXR0ZW1wdHMgdG8gdXNlIGFuIGludmFsaWQgUE1EIHZhbHVlLgoKV2FpdCwgbG9va2luZyBhdCBpdCwgaXQgYXBwZWFycyBgcG1kX3RyYW5zX2h1Z2VfbG9ja2Agb25seSByZXR1cm5zIGEgbG9jayBpZiB0aGUgUE1EIGlzIGEgdHJhbnMgaHVnZSBQTUQgb3IgYSBkZXZtYXAgUE1ELiBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUgY2hlY2sgdGhhdCBhc3N1bXB0aW9uIGFuZCB2ZXJpZnkgdGhlIGJlaGF2aW9yIG9mIHRoYXQgZnVuY3Rpb24gYXMgd2VsbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMDM6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cG1kX3RyYW5zX2h1Z2VfbG9jayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi92YWRkci5jPTI2Nz1zdGF0aWMgaW50IGRhbW9uX21rb2xkX3BtZF9lbnRyeShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxubW0vZGFtb24vdmFkZHIuYy0yNzItXG5tbS9kYW1vbi92YWRkci5jOjI3MzpcdHB0bCA9IHBtZF90cmFuc19odWdlX2xvY2socG1kLCB3YWxrLVx1MDAzZXZtYSk7XG5tbS9kYW1vbi92YWRkci5jLTI3NC1cdGlmIChwdGwpIHtcbi0tXG5tbS9kYW1vbi92YWRkci5jPTM5MD1zdGF0aWMgaW50IGRhbW9uX3lvdW5nX3BtZF9lbnRyeShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxubW0vZGFtb24vdmFkZHIuYy0zOTktI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxubW0vZGFtb24vdmFkZHIuYzo0MDA6XHRwdGwgPSBwbWRfdHJhbnNfaHVnZV9sb2NrKHBtZCwgd2Fsay1cdTAwM2V2bWEpO1xubW0vZGFtb24vdmFkZHIuYy00MDEtXHRpZiAocHRsKSB7XG4tLVxubW0vZGFtb24vdmFkZHIuYz02NTQ9c3RhdGljIGludCBkYW1vc192YV9taWdyYXRlX3BtZF9lbnRyeShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxubW0vZGFtb24vdmFkZHIuYy02NjYtI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxubW0vZGFtb24vdmFkZHIuYzo2Njc6XHRwdGwgPSBwbWRfdHJhbnNfaHVnZV9sb2NrKHBtZCwgd2Fsay1cdTAwM2V2bWEpO1xubW0vZGFtb24vdmFkZHIuYy02NjgtXHRpZiAocHRsKSB7XG4tLVxubW0vZGFtb24vdmFkZHIuYz04MTQ9c3RhdGljIGludCBkYW1vc192YV9zdGF0X3BtZF9lbnRyeShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxubW0vZGFtb24vdmFkZHIuYy04MjYtI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxubW0vZGFtb24vdmFkZHIuYzo4Mjc6XHRwdGwgPSBwbWRfdHJhbnNfaHVnZV9sb2NrKHBtZCwgdm1hKTtcbm1tL2RhbW9uL3ZhZGRyLmMtODI4LVx0aWYgKHB0bCkge1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MjI4MD1ib29sIG1hZHZpc2VfZnJlZV9odWdlX3BtZChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9odWdlX21lbW9yeS5jLTIyOTAtXG5tbS9odWdlX21lbW9yeS5jOjIyOTE6XHRwdGwgPSBwbWRfdHJhbnNfaHVnZV9sb2NrKHBtZCwgdm1hKTtcbm1tL2h1Z2VfbWVtb3J5LmMtMjI5Mi1cdGlmICghcHRsKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MjQyNj1ib29sIHphcF9odWdlX3BtZChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9odWdlX21lbW9yeS5jLTI0MzctXG5tbS9odWdlX21lbW9yeS5jOjI0Mzg6XHRwdGwgPSBfX3BtZF90cmFuc19odWdlX2xvY2socG1kLCB2bWEpO1xubW0vaHVnZV9tZW1vcnkuYy0yNDM5LVx0aWYgKCFwdGwpXG4tLVxubW0vaHVnZV9tZW1vcnkuYz0yNTA1PWJvb2wgbW92ZV9odWdlX3BtZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBvbGRfYWRkcixcbi0tXG5tbS9odWdlX21lbW9yeS5jLTI1MjYtXHQgKi9cbm1tL2h1Z2VfbWVtb3J5LmM6MjUyNzpcdG9sZF9wdGwgPSBfX3BtZF90cmFuc19odWdlX2xvY2sob2xkX3BtZCwgdm1hKTtcbm1tL2h1Z2VfbWVtb3J5LmMtMjUyOC1cdGlmIChvbGRfcHRsKSB7XG4tLVxubW0vaHVnZV9tZW1vcnkuYz0yNjAyPWludCBjaGFuZ2VfaHVnZV9wbWQoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0yNjE4LVxubW0vaHVnZV9tZW1vcnkuYzoyNjE5Olx0cHRsID0gX19wbWRfdHJhbnNfaHVnZV9sb2NrKHBtZCwgdm1hKTtcbm1tL2h1Z2VfbWVtb3J5LmMtMjYyMC1cdGlmICghcHRsKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9Mjc1MD1pbnQgbW92ZV9wYWdlc19odWdlX3BtZChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKmRzdF9wbWQsIHBtZF90ICpzcmNfcG1kLCBwbWRfdCBkc3RfcG1kdmFsLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMjg2OC0gKi9cbm1tL2h1Z2VfbWVtb3J5LmM6Mjg2OTpzcGlubG9ja190ICpfX3BtZF90cmFuc19odWdlX2xvY2socG1kX3QgKnBtZCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG5tbS9odWdlX21lbW9yeS5jLTI4NzAte1xuLS1cbm1tL21hZHZpc2UuYz0zNTM9c3RhdGljIGludCBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2UocG1kX3QgKnBtZCxcbi0tXG5tbS9tYWR2aXNlLmMtMzgxLVx0XHR0bGJfY2hhbmdlX3BhZ2Vfc2l6ZSh0bGIsIEhQQUdFX1BNRF9TSVpFKTtcbm1tL21hZHZpc2UuYzozODI6XHRcdHB0bCA9IHBtZF90cmFuc19odWdlX2xvY2socG1kLCB2bWEpO1xubW0vbWFkdmlzZS5jLTM4My1cdFx0aWYgKCFwdGwpXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYz03NDI9c3RhdGljIGludCBod3BvaXNvbl9wdGVfcmFuZ2UocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTc0OS1cbm1tL21lbW9yeS1mYWlsdXJlLmM6NzUwOlx0cHRsID0gcG1kX3RyYW5zX2h1Z2VfbG9jayhwbWRwLCB3YWxrLVx1MDAzZXZtYSk7XG5tbS9tZW1vcnktZmFpbHVyZS5jLTc1MS1cdGlmIChwdGwpIHtcbi0tXG5tbS9tZW1wb2xpY3kuYz02ODc9c3RhdGljIGludCBxdWV1ZV9mb2xpb3NfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9tZW1wb2xpY3kuYy02OTgtXG5tbS9tZW1wb2xpY3kuYzo2OTk6XHRwdGwgPSBwbWRfdHJhbnNfaHVnZV9sb2NrKHBtZCwgdm1hKTtcbm1tL21lbXBvbGljeS5jLTcwMC1cdGlmIChwdGwpIHtcbi0tXG5tbS9taW5jb3JlLmM9MTYzPXN0YXRpYyBpbnQgbWluY29yZV9wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbi0tXG5tbS9taW5jb3JlLmMtMTcyLVxubW0vbWluY29yZS5jOjE3MzpcdHB0bCA9IHBtZF90cmFuc19odWdlX2xvY2socG1kLCB2bWEpO1xubW0vbWluY29yZS5jLTE3NC1cdGlmIChwdGwpIHtcbi0tXG5tbS9tbG9jay5jPTM1MD1zdGF0aWMgaW50IG1sb2NrX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxubW0vbWxvY2suYy0zNjEtXG5tbS9tbG9jay5jOjM2MjpcdHB0bCA9IHBtZF90cmFuc19odWdlX2xvY2socG1kLCB2bWEpO1xubW0vbWxvY2suYy0zNjMtXHRpZiAocHRsKSB7XG4tLVxubW0vdXNlcmZhdWx0ZmQuYz0xOTM0PXN0YXRpYyBzc2l6ZV90IG1vdmVfcGFnZXMoc3RydWN0IHVzZXJmYXVsdGZkX2N0eCAqY3R4LCB1bnNpZ25lZCBsb25nIGRzdF9zdGFydCxcbi0tXG5tbS91c2VyZmF1bHRmZC5jLTIwMjItXG5tbS91c2VyZmF1bHRmZC5jOjIwMjM6XHRcdHB0bCA9IHBtZF90cmFuc19odWdlX2xvY2soc3JjX3BtZCwgc3JjX3ZtYSk7XG5tbS91c2VyZmF1bHRmZC5jLTIwMjQtXHRcdGlmIChwdGwpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMDM6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTE0MAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBUSFAgTG9jayoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoZSBsb2NrIGFzc29jaWF0ZWQgd2l0aCBUcmFuc3BhcmVudCBIdWdlIFBhZ2VzIChUSFApIGFuZCBuZWVkIHRvIHBpbnBvaW50IHdoZXJlIGl0JiMzOTtzIGRlZmluZWQgYW5kIGhhbmRsZWQuIE15IGZpcnN0IG1vdmUgaXMgdG8gbG9vayBhdCBgX19wbWRfdHJhbnNfaHVnZV9sb2NrYC4gVGhhdCBmdW5jdGlvbiBuYW1lIGZlZWxzIGZhbWlsaWFyIGFzIGEgcG90ZW50aWFsIGNhbmRpZGF0ZSBmb3IgdGhlIGNvcmUgbG9jaywgc28gSSYjMzk7bGwgc3RhcnQgd2l0aCB0aGUgaW1wbGVtZW50YXRpb24gaW4gYG1tL2h1Z2VfbWVtb3J5LmNgLiBBbHRlcm5hdGl2ZWx5LCBpdCBjb3VsZCBiZSBhIHNpbXBsZXIgZGVjbGFyYXRpb24gaW4gYW4gaW5jbHVkZSBmaWxlLiBJIHdpbGwgYWxzbyBjaGVjayBgcG1kX3RyYW5zX2h1Z2VfbG9ja2AgaW4gYGluY2x1ZGUvbGludXgvaHVnZV9tbS5oYCBhcyBhIGxpa2VseSBzb3VyY2UuIExldCYjMzk7cyBzZWUgd2hhdCB0aGF0IHJldmVhbHMgYWJvdXQgdGhlIGNyaXRpY2FsIHNlY3Rpb24gaXQgcHJvdGVjdHMgYW5kIHRoZSBvdmVyYWxsIFRIUCBtYW5hZ2VtZW50IHN0cmF0ZWd5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAwMzoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwbWRfdHJhbnNfaHVnZV9sb2NrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9odWdlX21tLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9odWdlX21tLmg9NDk2PXZvaWQgdm1hX2FkanVzdF90cmFuc19odWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNDk3LVx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgZW5kLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKm5leHQpO1xuaW5jbHVkZS9saW51eC9odWdlX21tLmg6NDk4OnNwaW5sb2NrX3QgKl9fcG1kX3RyYW5zX2h1Z2VfbG9jayhwbWRfdCAqcG1kLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC00OTktc3BpbmxvY2tfdCAqX19wdWRfdHJhbnNfaHVnZV9sb2NrKHB1ZF90ICpwdWQsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTtcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC01MDEtLyogbW1hcF9sb2NrIG11c3QgYmUgaGVsZCBvbiBlbnRyeSAqL1xuaW5jbHVkZS9saW51eC9odWdlX21tLmg6NTAyOnN0YXRpYyBpbmxpbmUgc3BpbmxvY2tfdCAqcG1kX3RyYW5zX2h1Z2VfbG9jayhwbWRfdCAqcG1kLFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNTAzLVx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC01MDUtXHRpZiAocG1kX2lzX2h1Z2UoKnBtZCkpXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDo1MDY6XHRcdHJldHVybiBfX3BtZF90cmFuc19odWdlX2xvY2socG1kLCB2bWEpO1xuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNTA3LVxuLS1cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oPTcwOT1zdGF0aWMgaW5saW5lIHZvaWQgdm1hX2FkanVzdF90cmFuc19odWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTcxNC19XG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDo3MTU6c3RhdGljIGlubGluZSBzcGlubG9ja190ICpwbWRfdHJhbnNfaHVnZV9sb2NrKHBtZF90ICpwbWQsXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC03MTYtXHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAwMzoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5ODYxCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBQTUQgU3RhdGVzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBwbWRfaXNfaHVnZSgqcG1kKWAgZnVuY3Rpb24gY2FsbC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7SXMgdGhpcyBhIGh1Z2UgUE1EPyYjMzQ7IFRoZSBuZXh0IHRoaW5nIEkmIzM5O20gY29uc2lkZXJpbmcgaXMsIGlmIGl0JiMzOTtzIGh1Z2UsIGlzIHRoZXJlIGFueSBwb3NzaWJpbGl0eSB0aGF0IGl0IGNvdWxkIGFsc28gYmUgYSBtaWdyYXRpb24gZW50cnk/IEkga25vdyB0aGVyZSYjMzk7cyBhIGRpc3RpbmN0aW9uIGhlcmUuCgpZZXMsIHRoZXJlJiMzOTtzIGBwbWRfaXNfbWlncmF0aW9uX2VudHJ5YCwgc28gdGhhdCB0YWtlcyBjYXJlIG9mIHRoYXQgcG9zc2liaWxpdHkuIEFuZCBpZiBpdCBfaXNfIGEgbWlncmF0aW9uIGVudHJ5LCBgcG1kX3ByZXNlbnRgIHdpbGwgZGVmaW5pdGVseSByZXR1cm4gZmFsc2UuIFRoYXQgbWFrZXMgc2Vuc2UsIGJ1dCB0aGVuIGl0IGhpdHMgbWU6IEhvbGQgb24gYSBzZWNvbmQsIGlmIGBwbWRfcHJlc2VudGAgaXMgZmFsc2UsIGlzbiYjMzk7dCBpdCBzdGlsbCBwb3NzaWJsZSBmb3IgYHBtZF9pc19odWdlYCB0byByZXR1cm4gdHJ1ZT8gSSBuZWVkIHRvIHZlcmlmeSB0aGF0LiBJJiMzOTttIGdvaW5nIHRvIGRvdWJsZSBjaGVjayBgcG1kX2lzX2h1Z2VgIGFnYWluIHRvIGVuc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGxvZ2ljLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAwMzoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwbWRfaXNfaHVnZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvaHVnZV9tbS5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvaHVnZV9tbS5oPTQzMT12b2lkIF9fc3BsaXRfaHVnZV9wbWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHBtZF90ICpwbWQsXG4tLVxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNDM0LS8qKlxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6NDM1OiAqIHBtZF9pc19odWdlKCkgLSBJcyB0aGlzIFBNRCBlaXRoZXIgYSBodWdlIFBNRCBlbnRyeSBvciBhIHNvZnR3YXJlIGxlYWYgZW50cnk/XG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC00MzYtICogQHBtZDogVGhlIFBNRCB0byBjaGVjay5cbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC00NDQtICovXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDo0NDU6c3RhdGljIGlubGluZSBib29sIHBtZF9pc19odWdlKHBtZF90IHBtZClcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTQ0Ni17XG4tLVxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNDYyLVx0XHRwbWRfdCAqX19fX3BtZCA9IChfX3BtZCk7XHRcdFx0XHRcXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6NDYzOlx0XHRpZiAocG1kX2lzX2h1Z2UoKl9fX19wbWQpKVx0XHRcdFx0XFxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTQ2NC1cdFx0XHRfX3NwbGl0X2h1Z2VfcG1kKF9fdm1hLCBfX3BtZCwgX19hZGRyZXNzLFx0XFxcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaD01MDI9c3RhdGljIGlubGluZSBzcGlubG9ja190ICpwbWRfdHJhbnNfaHVnZV9sb2NrKHBtZF90ICpwbWQsXG4tLVxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNTA0LXtcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjUwNTpcdGlmIChwbWRfaXNfaHVnZSgqcG1kKSlcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTUwNi1cdFx0cmV0dXJuIF9fcG1kX3RyYW5zX2h1Z2VfbG9jayhwbWQsIHZtYSk7XG4tLVxuaW5jbHVkZS9saW51eC9odWdlX21tLmg9Nzg0PXN0YXRpYyBpbmxpbmUgc3RydWN0IGZvbGlvICpnZXRfcGVyc2lzdGVudF9odWdlX3plcm9fZm9saW8odm9pZClcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC03ODgtXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDo3ODk6c3RhdGljIGlubGluZSBib29sIHBtZF9pc19odWdlKHBtZF90IHBtZClcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTc5MC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDAzOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNzMxCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gd2hhdCBJJiMzOTttIGxvb2tpbmcgYXQ6CgoqKkRlY29uc3RydWN0aW5nIGBwbWRfaXNfaHVnZWAqKgoKQWxyaWdodCwgSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBgcG1kX2lzX2h1Z2VgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgbG9naWMgYW5kIGhvdyBpdCBkZXRlcm1pbmVzIGlmIGEgcGFydGljdWxhciBwYWdlIG1hcCBsZXZlbCBkaXJlY3RvcnkgKFBNRCkgZW50cnkgcmVwcmVzZW50cyBhIGh1Z2UgcGFnZS4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQg4oCTIFBNRHMsIHBhZ2UgdGFibGVzLCB0aGUgaW1wbGljYXRpb25zIGZvciBtZW1vcnkgbWFuYWdlbWVudC4uLiB3aGF0IGZsYWdzIGFyZSB3ZSBjaGVja2luZz8gQXJlIHdlIGxvb2tpbmcgYXQgc3BlY2lmaWMgYml0cyB3aXRoaW4gdGhlIFBNRCBpdHNlbGYsIG9yIGFyZSB3ZSByZWZlcmVuY2luZyBzb21lIG90aGVyIGFzc29jaWF0ZWQgbWV0YWRhdGE/IEkgZXhwZWN0IHRvIHNlZSBiaXR3aXNlIG9wZXJhdGlvbnMsIGxpa2VseSBpbnZvbHZpbmcgbWFza3MgYW5kIHNoaWZ0cywgdG8gZXh0cmFjdCBhbmQgZXZhbHVhdGUgdGhlIHJlbGV2YW50IGZsYWdzLiBJIGhvcGUgdGhlIGltcGxlbWVudGF0aW9uIGlzIHJlYXNvbmFibHkgb3B0aW1pemVkIGZvciBwZXJmb3JtYW5jZTsgdGhpcyBpcyBhIGNyaXRpY2FsIGZ1bmN0aW9uIGZvciBwYWdlIHRhYmxlIGxvb2t1cHMsIHNvIGl0IG5lZWRzIHRvIGJlIGZhc3QuIEkgd2FudCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvYnZpb3VzIGdvdGNoYXMgb3IgcG90ZW50aWFsIGFyZWFzIGZvciBpbXByb3ZlbWVudC4gTGV0JiMzOTtzIHNlZSBob3cgdGhleSBoYW5kbGUgZGlmZmVyZW50IGFyY2hpdGVjdHVyZXMsIHRvbyDigJMgSSBiZXQgdGhlcmUmIzM5O3Mgc29tZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBvciBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgY29kZSBpbiB0aGVyZS4gSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciB0aGUgYXJjaGl0ZWN0dXJhbCBkaWZmZXJlbmNlcyBiZXR3ZWVuIFBNRCBmb3JtYXRzIGFuZCBob3cgdGhlc2UgbWlnaHQgYmUgcmVmbGVjdGVkIGluIHRoZSBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAwMzoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvaHVnZV9tbS5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDQ1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDE1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0NDU6XHRzdGF0aWMgaW5saW5lIGJvb2wgcG1kX2lzX2h1Z2UocG1kX3QgcG1kKVxuIDQ0NjpcdHtcbiA0NDc6XHRcdGlmIChwbWRfcHJlc2VudChwbWQpKSB7XG4gNDQ4Olx0XHRcdHJldHVybiBwbWRfdHJhbnNfaHVnZShwbWQpO1xuIDQ0OTpcdFx0fSBlbHNlIGlmICghcG1kX25vbmUocG1kKSkge1xuIDQ1MDpcdFx0XHQvKlxuIDQ1MTpcdFx0XHQgKiBOb24tcHJlc2VudCBQTURzIG11c3QgYmUgdmFsaWQgaHVnZSBub24tcHJlc2VudCBlbnRyaWVzLiBXZVxuIDQ1MjpcdFx0XHQgKiBjYW5ub3QgYXNzZXJ0IHRoYXQgaGVyZSBkdWUgdG8gaGVhZGVyIGRlcGVuZGVuY3kgaXNzdWVzLlxuIDQ1MzpcdFx0XHQgKi9cbiA0NTQ6XHRcdFx0cmV0dXJuIHRydWU7XG4gNDU1Olx0XHR9XG4gNDU2Olx0XG4gNDU3Olx0XHRyZXR1cm4gZmFsc2U7XG4gNDU4Olx0fVxuIDQ1OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAwMzoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTI0NQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDQ2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBCdWcgRml4OiBQcmV2ZW50aW5nIENyYXNoZXMgaW4gYHF1ZXVlX2ZvbGlvc19wbWRgKioKCk9rYXksIHNvIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdW5kZXJzdGFuZGluZyBvZiBgcG1kX2lzX2h1Z2VgIGlzIGtleSBoZXJlLiBJdCByZXR1cm5zIHRydWUgd2hlbiBhIFBhZ2UgTWFwIERpcmVjdG9yeSAoUE1EKSBpc24mIzM5O3QgcHJlc2VudCwgKmFuZCogaXQmIzM5O3Mgbm90IGEgJiMzNDtub25lJiMzNDsgZW50cnkuIFRoaXMgc2VlbXMgdG8gY292ZXIgc2l0dWF0aW9ucyBsaWtlIG1pZ3JhdGlvbiBlbnRyaWVzIGFuZCwgbW9yZSBpbXBvcnRhbnRseSBpbiB0aGlzIGNhc2UsIGRldmljZSBwcml2YXRlIGVudHJpZXMuIEl0IGFwcGVhcnMgdGhlIGNvZGUgd2FzIHByZXZpb3VzbHkgZ2V0dGluZyB0cmlwcGVkIHVwIG9uIHRoZXNlIGxhdHRlciBjYXNlcyB3aGVuIGNhbGxpbmcgYHF1ZXVlX2ZvbGlvc19wbWRgLgoKSSBzZWUgdGhlIGZpeC4gVGhlIGZ1bmN0aW9uIGBxdWV1ZV9mb2xpb3NfcG1kYCB3YXMgb3JpZ2luYWxseSBjYWxsaW5nIGBwbWRfZm9saW9gIGRpcmVjdGx5IG9uIHRoZXNlIG5vbi1wcmVzZW50IFBNRHMuIElmIGl0IHdhcyBhIGRldmljZSBwcml2YXRlIGVudHJ5LCB0aGlzIGNvdWxkIGxlYWQgdG8gY3Jhc2hlcyBvciB1bmRlZmluZWQgYmVoYXZpb3IsIGJlY2F1c2UgYHBtZF9mb2xpb2AgaXNuJiMzOTt0IGV4cGVjdGluZyB0byBoYW5kbGUgdGhhdCBraW5kIG9mIGRhdGEuIFRoZSBvcmlnaW5hbCBjaGVjayBvbmx5IGxvb2tlZCBmb3IgbWlncmF0aW9uIGVudHJpZXMsIGJ1dCBub3Qgb3RoZXIgbm9uLXByZXNlbnQgZW50cmllcy4KClRoZSBmaXggbm93IGFkZHMgYSBjcnVjaWFsIGAhcG1kX3ByZXNlbnRgIGNoZWNrICpiZWZvcmUqIGNhbGxpbmcgYHBtZF9mb2xpb2AuIFRoaXMgYWRkaXRpb24gY29ycmVjdGx5IGhhbmRsZXMgZGV2aWNlIHByaXZhdGUgZW50cmllcy4gSWYgdGhlIFBNRCBpc24mIzM5O3QgcHJlc2VudCwgdGhlIGNvZGUgd2lsbCBjaGVjayBpZiBpdCAqaXMqIGEgbWlncmF0aW9uIGVudHJ5LiBPdGhlcndpc2UsIGl0IGV4aXRzIGVhcmx5LiBUaGlzIGVmZmVjdGl2ZWx5IHByZXZlbnRzIHRoZSBwb3RlbnRpYWwgY3Jhc2ggb3IgZ2FyYmFnZSByZXR1cm4uCgpUaGUgaW1wb3J0YW50IHF1ZXN0aW9uIG5vdyBpcyBpZiB0aGlzIGlzIHdvcnRoIGZ1enppbmcuIEkmIzM5O2Qgc2F5LCB5ZXMsIGFic29sdXRlbHkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGJ1ZyBmaXguIGBxdWV1ZV9mb2xpb3NfcG1kYCBpcyB1c2VkIGJ5IGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgZnVuY3Rpb25hbGl0eSBsaWtlIGBtYmluZGAsIGBzZXRfbWVtcG9saWN5YCwgYW5kIGBtaWdyYXRlX3BhZ2VzYC4gVGhlIHJlbGV2YW50IGNvbmZpZyBvcHRpb25zIGFyZSBgQ09ORklHX05VTUFgIGFuZCBgQ09ORklHX0RFVklDRV9QUklWQVRFYC4gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGBDT05GSUdfREVWSUNFX1BSSVZBVEVgIGlzIHNldCB0byBlbnN1cmUgdGhpcyBjb2RlIGlzIGV2ZW4gYWN0aXZlLiAKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMDM6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX0RFVklDRV9QUklWQVRFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbXJlbWFwLmM9MjY2PXZvaWQgKm1lbXJlbWFwX3BhZ2VzKHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXAsIGludCBuaWQpXG4tLVxubW0vbWVtcmVtYXAuYy0yODMtXHRjYXNlIE1FTU9SWV9ERVZJQ0VfUFJJVkFURTpcbm1tL21lbXJlbWFwLmM6Mjg0Olx0XHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0RFVklDRV9QUklWQVRFKSkge1xubW0vbWVtcmVtYXAuYy0yODUtXHRcdFx0V0FSTigxLCBcJiMzNDtEZXZpY2UgcHJpdmF0ZSBtZW1vcnkgbm90IHN1cHBvcnRlZFxcblwmIzM0Oyk7XG4tLVxubW0vcm1hcC5jPTI3NDE9dm9pZCB0cnlfdG9fbWlncmF0ZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBlbnVtIHR0dV9mbGFncyBmbGFncylcbi0tXG5tbS9ybWFwLmMtMjc3OC1cbm1tL3JtYXAuYzoyNzc5OiNpZmRlZiBDT05GSUdfREVWSUNFX1BSSVZBVEVcbm1tL3JtYXAuYy0yNzgwLS8qKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAwMzoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjMyMQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDYxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyB0aGUgTWVtb3J5IE1hbmFnZW1lbnQgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCBgQ09ORklHX0RFVklDRV9QUklWQVRFYCBpcyBpbmRlZWQgZGVmaW5lZC4gQW5kLCBJIHNlZSwgd2UgYWxzbyBuZWVkIHRvIGhhdmUgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgZW5hYmxlZC4gVGhpcyBtYWtlcyBwZXJmZWN0IHNlbnNlOyBgcXVldWVfZm9saW9zX3BtZGAgaXMgc3BlY2lmaWNhbGx5IHRpZWQgdG8gaHVnZSBQTURzLCBzbyB0aGF0IGRlcGVuZGVuY3kgaXMgY2xlYXIuIE5vdywgbGV0JiMzOTtzIGp1c3QgcXVpY2tseSBjaGVjayB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBgcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5YCBmdW5jdGlvbiwganVzdCB0byBlbnN1cmUgb3VyIGFzc3VtcHRpb25zIGFyZSBjb3JyZWN0LCBhbmQgYWxsIGRlcGVuZGVuY2llcyBhcmUgd2hlcmUgdGhleSBzaG91bGQgYmUuIEkgd2FudCB0byBoYXZlIGEgaG9saXN0aWMgdmlldyBiZWZvcmUgSSBtb3ZlIGZvcndhcmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDAzOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbGVhZm9wcy5oPTU3ND1zdGF0aWMgaW5saW5lIGJvb2wgcHRlX2lzX3VmZmRfbWFya2VyKHB0ZV90IHB0ZSlcbi0tXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC01OTItLyoqXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDo1OTM6ICogcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KCkgLSBDaGVjayBpZiBQTUQgY29udGFpbnMgYSBkZXZpY2UgcHJpdmF0ZSBzd2FwXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC01OTQtICogZW50cnkuXG4tLVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNjAzLSAqL1xuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6NjA0OnN0YXRpYyBpbmxpbmUgYm9vbCBwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnkocG1kX3QgcG1kKVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNjA1LXtcbi0tXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC02MTAtXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDo2MTE6c3RhdGljIGlubGluZSBib29sIHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeShwbWRfdCBwbWQpXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC02MTIte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAwMzoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjc5NQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgaWYgdGhleSYjMzk7cmUgbXkgb3duOgoKKipBbmFseXppbmcgdGhlIGBwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnlgIERlZmluaXRpb24qKgoKQWxyaWdodCwgc28gdGhlIGluaXRpYWwgdGhvdWdodCBpcyBjbGVhcmx5IGZvY3VzZWQgb24gYSBzcGVjaWZpYyBmdW5jdGlvbiBkZWZpbml0aW9uOiBgcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5YC4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGRpc3NlY3QgdGhpcy4gV2UgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlIGFuZCBob3cgaXQgZnVuY3Rpb25zIHdpdGhpbiB0aGUgbGFyZ2VyIGNvbnRleHQgb2YgdGhlIHN5c3RlbS4gSSYjMzk7bSBhc3N1bWluZywgZ2l2ZW4gdGhlIG5hbWluZyBjb252ZW50aW9uLCB0aGlzIGhhcyBzb21ldGhpbmcgdG8gZG8gd2l0aCB0aGUgUGFnZSBNaWRkbGUgRGlyZWN0b3J5LCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byB3aGV0aGVyIGFuIGVudHJ5IGlzIGNvbnNpZGVyZWQgJiMzNDtkZXZpY2UgcHJpdmF0ZSYjMzQ7LiBUaGUgdGVybSAmIzM0O2RldmljZSBwcml2YXRlJiMzNDsgaXMga2V5IGhlcmUsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhhdCBlbnRhaWxzIGluIHRoaXMgY29udGV4dC4gSXMgaXQgYSBmbGFnPyBBIHNwZWNpZmljIHZhbHVlPyBBIGNvbWJpbmF0aW9uIG9mIGJpdHM/IElzIGl0IHJlbGF0ZWQgdG8gRE1BLCBNTUlPLCBvciBzb21lIG90aGVyIGFzcGVjdCBvZiBkZXZpY2UgYWNjZXNzPyBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBmdW5jdGlvbiYjMzk7cyBjb2RlIGl0c2VsZiB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyBpbXBsZW1lbnRhdGlvbiBhbmQgdXNhZ2Ugd2l0aGluIHRoZSBvdmVyYWxsIG1lbW9yeSBtYW5hZ2VtZW50IHNjaGVtZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMDM6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2xlYWZvcHMuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU5MywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTkzOlx0ICogcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KCkgLSBDaGVjayBpZiBQTUQgY29udGFpbnMgYSBkZXZpY2UgcHJpdmF0ZSBzd2FwXG4gNTk0Olx0ICogZW50cnkuXG4gNTk1Olx0ICogQHBtZDogVGhlIFBNRCB0byBjaGVjay5cbiA1OTY6XHQgKlxuIDU5NzpcdCAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgUE1EIGNvbnRhaW5zIGEgc3dhcCBlbnRyeSB0aGF0IHJlcHJlc2VudHMgYSBkZXZpY2UgcHJpdmF0ZVxuIDU5ODpcdCAqIHBhZ2UgbWFwcGluZy4gVGhpcyBpcyB1c2VkIGZvciB6b25lIGRldmljZSBwcml2YXRlIHBhZ2VzIHRoYXQgaGF2ZSBiZWVuXG4gNTk5Olx0ICogc3dhcHBlZCBvdXQgYnV0IHN0aWxsIG5lZWQgc3BlY2lhbCBoYW5kbGluZyBkdXJpbmcgdmFyaW91cyBtZW1vcnkgbWFuYWdlbWVudFxuIDYwMDpcdCAqIG9wZXJhdGlvbnMuXG4gNjAxOlx0ICpcbiA2MDI6XHQgKiBSZXR1cm46IHRydWUgaWYgUE1EIGNvbnRhaW5zIGRldmljZSBwcml2YXRlIGVudHJ5LCBmYWxzZSBvdGhlcndpc2VcbiA2MDM6XHQgKi9cbiA2MDQ6XHRzdGF0aWMgaW5saW5lIGJvb2wgcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KHBtZF90IHBtZClcbiA2MDU6XHR7XG4gNjA2Olx0XHRyZXR1cm4gc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoc29mdGxlYWZfZnJvbV9wbWQocG1kKSk7XG4gNjA3Olx0fVxuIDYwODpcdFxuIDYwOTpcdCNlbHNlICAvKiBDT05GSUdfWk9ORV9ERVZJQ0UgXHUwMDI2XHUwMDI2IENPTkZJR19BUkNIX0hBU19QTURfU09GVExFQVZFUyAqL1xuIDYxMDpcdFxuIDYxMTpcdHN0YXRpYyBpbmxpbmUgYm9vbCBwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnkocG1kX3QgcG1kKVxuIDYxMjpcdHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMDM6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM0MDQKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiA0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBEZXZpY2UgTWVtb3J5IENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgbG9va3MgbGlrZSB3ZSYjMzk7cmUgZGl2aW5nIGludG8gbWVtb3J5IG1hbmFnZW1lbnQgaGVyZS4gRmlyc3QgdGhvdWdodDogd2UmIzM5O3JlIGdvaW5nIHRvIG5lZWQgYENPTkZJR19aT05FX0RFVklDRWAuIFRoYXQmIzM5O3MgYSBnaXZlbiBmb3IgYW55IG1vZGVybiBkZXZpY2Ugc2V0dXAsIHJpZ2h0PyBCdXQgaG9sZCBvbiBhIHNlY29uZC4uLiBpc24mIzM5O3QgYENPTkZJR19ERVZJQ0VfUFJJVkFURWAgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGZvciBjb250cm9sbGluZyBwcml2YXRlIG1lbW9yeSBhbGxvY2F0aW9uIHNwZWNpZmljIHRvIGEgZGV2aWNlPyBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gZ2V0dGluZyB0aGVzZSB0d28gY29uY2VwdHMgc3RyYWlnaHQgaW4gbXkgaGVhZCBiZWNhdXNlIHRoZXkgY2FuIGluZmx1ZW5jZSBlYWNoIG90aGVyLiBCZXR0ZXIgZG91YmxlLWNoZWNrIHRoZSBLY29uZmlnIGRvY3VtZW50YXRpb24gZm9yIGBDT05GSUdfREVWSUNFX1BSSVZBVEVgLiBMZXQmIzM5O3MgY2xhcmlmeSBpdHMgZXhhY3QgZnVuY3Rpb24gYW5kIGRlcGVuZGVuY2llcyBiZWZvcmUgbW92aW5nIGFueSBmdXJ0aGVyLiBUaGlzIGlzIGNyaXRpY2FsIGZvciBnZXR0aW5nIHRoaXMgcmlnaHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDAzOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBERVZJQ0VfUFJJVkFURSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTEyNjI9Y29uZmlnIEdFVF9GUkVFX1JFR0lPTlxuLS1cbm1tL0tjb25maWctMTI2NC1cbm1tL0tjb25maWc6MTI2NTpjb25maWcgREVWSUNFX1BSSVZBVEVcbm1tL0tjb25maWctMTI2Ni1cdGJvb2wgXCYjMzQ7VW5hZGRyZXNzYWJsZSBkZXZpY2UgbWVtb3J5IChHUFUgbWVtb3J5LCAuLi4pXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDAzOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNzE5CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjA1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipBbmFseXppbmcgRGV2aWNlIFByaXZhdGUgUE1EIEhhbmRsaW5nIGluIHRoZSBLZXJuZWwqKgoKUmlnaHQsIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IGRldmljZSBwcml2YXRlIGNvbmZpZ3VyYXRpb25zIOKAkyBzcGVjaWZpY2FsbHksIGBERVZJQ0VfUFJJVkFURWAuIEkgbmVlZCB0byByZW1lbWJlciB0aGF0IHRoZSBpbXBvcnRhbnQgY29uZmlncyByZWxhdGVkIHRvIHRoaXMgYXJlIGBOVU1BYCwgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCwgYW5kIG9mIGNvdXJzZSwgYERFVklDRV9QUklWQVRFYCBpdHNlbGYuIEdvdCBpdC4KCk5vdywgdGhlIGNvcmUgZnVuY3Rpb25zIHRoYXQgc2VlbSByZWxldmFudCBhcmUgYHF1ZXVlX2ZvbGlvc19wbWRgLCBgcXVldWVfZm9saW9zX3B0ZV9yYW5nZWAsIGBtYWR2aXNlX2ZyZWVfaHVnZV9wbWRgLCBhbmQgYG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZWAuIEhtbSwgYSBxdWljayBza2ltIHNob3dzIHRoYXQgdGhlIGBtYWR2aXNlX2AgZnVuY3Rpb25zIGFyZSB0aHJvd2luZyB1cCByZWQgZmxhZ3MsIHRoZSBvbmx5IGNoYW5nZXMgYmVpbmcgYFZNX0JVR19PTmAgdXBkYXRlcy4gVGhhdCBzdWdnZXN0cyBhIGJ1ZyBjaGVjayByZWxhdGVkIHRvIGhhbmRsaW5nIHRoZXNlIHByaXZhdGUgUE1Ecy4gVGhlc2UgYXJlIGxpbmtlZC4KCkxldCYjMzk7cyBkaWcgZGVlcGVyLiBJcyBgcXVldWVfZm9saW9zX3BtZGAgdGhlIGNvcmU/IExldCBtZSBjaGVjayBpdHMgZGVmaW5pdGlvbi4gU3RhdGljLiBIbW0sIG5vdCBpZGVhbCBmb3IgdHJhY2luZywgYnV0IHN0aWxsIGltcG9ydGFudC4gTGV0JiMzOTtzIGRvIHRoZSBzYW1lIGZvciBgcXVldWVfZm9saW9zX3B0ZV9yYW5nZWAgLSBhbHNvIHN0YXRpYy4gT2theS4gSXQgc2VlbXMgdGhpcyBpcyB3aGVyZSB0aGUgcmVhbCB3b3JrIG9mIGRlYWxpbmcgd2l0aCBkZXZpY2UgcHJpdmF0ZSBQTURzIGlzIGhhcHBlbmluZy4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGlzIGNhbGxpbmcgYHF1ZXVlX2ZvbGlvc19wdGVfcmFuZ2VgLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBoYW5kbGUgb24gdGhlIGNvbnRyb2wgZmxvdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMDM6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cXVldWVfZm9saW9zX3B0ZV9yYW5nZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21lbXBvbGljeS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbXBvbGljeS5jPTY1Mz1zdGF0aWMgdm9pZCBxdWV1ZV9mb2xpb3NfcG1kKHBtZF90ICpwbWQsIHN0cnVjdCBtbV93YWxrICp3YWxrKVxuLS1cbm1tL21lbXBvbGljeS5jLTY4MC0gKlxubW0vbWVtcG9saWN5LmM6NjgxOiAqIHF1ZXVlX2ZvbGlvc19wdGVfcmFuZ2UoKSBoYXMgdHdvIHBvc3NpYmxlIHJldHVybiB2YWx1ZXM6XG5tbS9tZW1wb2xpY3kuYy02ODItICogMCAtIGNvbnRpbnVlIHdhbGtpbmcgdG8gc2NhbiBmb3IgbW9yZSwgZXZlbiBpZiBhbiBleGlzdGluZyBmb2xpbyBvbiB0aGVcbi0tXG5tbS9tZW1wb2xpY3kuYy02ODYtICovXG5tbS9tZW1wb2xpY3kuYzo2ODc6c3RhdGljIGludCBxdWV1ZV9mb2xpb3NfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcbm1tL21lbXBvbGljeS5jLTY4OC1cdFx0XHR1bnNpZ25lZCBsb25nIGVuZCwgc3RydWN0IG1tX3dhbGsgKndhbGspXG4tLVxubW0vbWVtcG9saWN5LmM9OTU0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgcXVldWVfcGFnZXNfd2Fsa19vcHMgPSB7XG5tbS9tZW1wb2xpY3kuYy05NTUtXHQuaHVnZXRsYl9lbnRyeVx0XHQ9IHF1ZXVlX2ZvbGlvc19odWdldGxiLFxubW0vbWVtcG9saWN5LmM6OTU2Olx0LnBtZF9lbnRyeVx0XHQ9IHF1ZXVlX2ZvbGlvc19wdGVfcmFuZ2UsXG5tbS9tZW1wb2xpY3kuYy05NTctXHQudGVzdF93YWxrXHRcdD0gcXVldWVfcGFnZXNfdGVzdF93YWxrLFxuLS1cbm1tL21lbXBvbGljeS5jPTk2MT1zdGF0aWMgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzIHF1ZXVlX3BhZ2VzX2xvY2tfdm1hX3dhbGtfb3BzID0ge1xubW0vbWVtcG9saWN5LmMtOTYyLVx0Lmh1Z2V0bGJfZW50cnlcdFx0PSBxdWV1ZV9mb2xpb3NfaHVnZXRsYixcbm1tL21lbXBvbGljeS5jOjk2MzpcdC5wbWRfZW50cnlcdFx0PSBxdWV1ZV9mb2xpb3NfcHRlX3JhbmdlLFxubW0vbWVtcG9saWN5LmMtOTY0LVx0LnRlc3Rfd2Fsa1x0XHQ9IHF1ZXVlX3BhZ2VzX3Rlc3Rfd2FsayxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMDM6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ2ODIKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqVW5kZXJzdGFuZGluZyB0aGUgYHF1ZXVlX3BhZ2VzX3dhbGtfb3BzYCBSZWxhdGlvbnNoaXAqKgoKQWxyaWdodCwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYHF1ZXVlX3BhZ2VzX3dhbGtfb3BzYCBhbmQgYHF1ZXVlX3BhZ2VzX3JhbmdlYC4gVGhlIGNvcmUgb2YgaXQgc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCDigJMgYHF1ZXVlX3BhZ2VzX3dhbGtfb3BzYCBpcyBlc3NlbnRpYWxseSBhIGhlbHBlciBmdW5jdGlvbiwgYSBjb21wb25lbnQgKnVzZWQqIGJ5IHRoZSBoaWdoZXItbGV2ZWwgZnVuY3Rpb24gYHF1ZXVlX3BhZ2VzX3JhbmdlYC4gSSBwaWN0dXJlIGBxdWV1ZV9wYWdlc19yYW5nZWAgYXMgdGhlIGxhcmdlciwgbW9yZSBjb21wbGV4IG9wZXJhdGlvbiwgYW5kIGBxdWV1ZV9wYWdlc193YWxrX29wc2AgYXMgYSB3ZWxsLWRlZmluZWQgc3ViLXJvdXRpbmUgdGhhdCBoYW5kbGVzIGEgc3BlY2lmaWMsIGxpa2VseSBjcnVjaWFsLCBhc3BlY3Qgb2YgdGhhdCBvcGVyYXRpb24uIFRoaXMgc3VnZ2VzdHMgdGhhdCBgcXVldWVfcGFnZXNfcmFuZ2VgIHByb2JhYmx5IG5lZWRzIHRvIGl0ZXJhdGUgdGhyb3VnaCBhIHJhbmdlIG9mIHBhZ2VzLCBhbmQgYHF1ZXVlX3BhZ2VzX3dhbGtfb3BzYCBwcm92aWRlcyB0aGUgdW5kZXJseWluZyBtZWNoYW5pc20gZm9yIGVmZmljaWVudGx5IHRyYXZlcnNpbmcgYW5kIHBvdGVudGlhbGx5IG9wZXJhdGluZyBvbiB0aG9zZSBwYWdlcy4gVGhpbmtpbmcgdGhyb3VnaCB0aGUgaW1wbGljYXRpb25zLCBJJiMzOTtkIGltbWVkaWF0ZWx5IGJlIGludGVyZXN0ZWQgaW4gdGhlIG5hdHVyZSBvZiB0aGlzICYjMzQ7d2FsayYjMzQ7IOKAkyBhcmUgd2UgdGFsa2luZyBsaW5lYXIgdHJhdmVyc2FsLCBhIG1vcmUgY29tcGxleCB0cmVlLWxpa2Ugc3RydWN0dXJlLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gRnVydGhlcm1vcmUsIEkmIzM5O2QgYmUgbG9va2luZyBjbG9zZWx5IGF0IHdoYXQgdGhlICYjMzQ7b3BzJiMzNDsgYXJlIGluIGBxdWV1ZV9wYWdlc193YWxrX29wc2Ag4oCTIHdoYXQgZnVuY3Rpb25zIG9yIG9wZXJhdGlvbnMgYXJlIGJlaW5nIGFwcGxpZWQgdG8gZWFjaCBwYWdlIGR1cmluZyB0aGlzIHdhbGs/IFVuZGVyc3RhbmRpbmcgdGhvc2Ugd291bGQgYmUga2V5IHRvIGZpZ3VyaW5nIG91dCB0aGUgcGVyZm9ybWFuY2UgY2hhcmFjdGVyaXN0aWNzIGFuZCBwb3RlbnRpYWwgYm90dGxlbmVja3Mgb2YgdGhlIHdob2xlIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMDM6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cXVldWVfcGFnZXNfcmFuZ2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tZW1wb2xpY3kuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1wb2xpY3kuYz02ODc9c3RhdGljIGludCBxdWV1ZV9mb2xpb3NfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9tZW1wb2xpY3kuYy03NDctXHRcdFx0ICogbWlncmF0ZV9wYWdlcyhcdTAwMjZwYWdlbGlzdCkgcmV0dXJucyBucl9mYWlsZWQgZm9saW9zLCBzb1xubW0vbWVtcG9saWN5LmM6NzQ4Olx0XHRcdCAqIGNoZWNrIFwmIzM0O2xhcmdlXCYjMzQ7IG5vdyBzbyB0aGF0IHF1ZXVlX3BhZ2VzX3JhbmdlKCkgcmV0dXJuc1xubW0vbWVtcG9saWN5LmMtNzQ5LVx0XHRcdCAqIGEgY29tcGFyYWJsZSBucl9mYWlsZWQgZm9saW9zLiAgVGhpcyBkb2VzIGltcGx5IHRoYXRcbi0tXG5tbS9tZW1wb2xpY3kuYz05NjE9c3RhdGljIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyBxdWV1ZV9wYWdlc19sb2NrX3ZtYV93YWxrX29wcyA9IHtcbi0tXG5tbS9tZW1wb2xpY3kuYy05NzMtICpcbm1tL21lbXBvbGljeS5jOjk3NDogKiBxdWV1ZV9wYWdlc19yYW5nZSgpIG1heSByZXR1cm46XG5tbS9tZW1wb2xpY3kuYy05NzUtICogMCAtIGFsbCBwYWdlcyBhbHJlYWR5IG9uIHRoZSByaWdodCBub2RlLCBvciBzdWNjZXNzZnVsbHkgcXVldWVkIGZvciBtb3Zpbmdcbi0tXG5tbS9tZW1wb2xpY3kuYz05ODI9c3RhdGljIGxvbmdcbm1tL21lbXBvbGljeS5jOjk4MzpxdWV1ZV9wYWdlc19yYW5nZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG5tbS9tZW1wb2xpY3kuYy05ODQtXHRcdG5vZGVtYXNrX3QgKm5vZGVzLCB1bnNpZ25lZCBsb25nIGZsYWdzLFxuLS1cbm1tL21lbXBvbGljeS5jPTEyODU9c3RhdGljIGxvbmcgbWlncmF0ZV90b19ub2RlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBpbnQgc291cmNlLCBpbnQgZGVzdCxcbi0tXG5tbS9tZW1wb2xpY3kuYy0xMzE2LVx0ICovXG5tbS9tZW1wb2xpY3kuYzoxMzE3Olx0bnJfZmFpbGVkID0gcXVldWVfcGFnZXNfcmFuZ2UobW0sIHZtYS1cdTAwM2V2bV9zdGFydCwgbW0tXHUwMDNldGFza19zaXplLCBcdTAwMjZubWFzayxcbm1tL21lbXBvbGljeS5jLTEzMTgtXHRcdFx0XHQgICAgICBmbGFncyB8IE1QT0xfTUZfRElTQ09OVElHX09LLCBcdTAwMjZwYWdlbGlzdCk7XG4tLVxubW0vbWVtcG9saWN5LmM9MTQ4OT1zdGF0aWMgbG9uZyBkb19tYmluZCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGxlbixcbi0tXG5tbS9tZW1wb2xpY3kuYy0xNTUyLVx0ICovXG5tbS9tZW1wb2xpY3kuYzoxNTUzOlx0bnJfZmFpbGVkID0gcXVldWVfcGFnZXNfcmFuZ2UobW0sIHN0YXJ0LCBlbmQsIG5tYXNrLFxubW0vbWVtcG9saWN5LmMtMTU1NC1cdFx0XHRmbGFncyB8IE1QT0xfTUZfSU5WRVJUIHwgTVBPTF9NRl9XUkxPQ0ssIFx1MDAyNnBhZ2VsaXN0KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMDM6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU1ODQKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRm9jdXNpbmcgb24gTWVtb3J5IE1hbmFnZW1lbnQgRnVuY3Rpb25zKioKCk9rYXksIHNvIEkmIzM5O20gc2VlaW5nIGEgY29ubmVjdGlvbiBiZXR3ZWVuIGBkb19tYmluZGAsIGBtaWdyYXRlX3RvX25vZGVgLCBhbmQgdGhlIGZ1bmN0aW9uIGBxdWV1ZV9wYWdlc19yYW5nZWAuIFRoZSBmYWN0IHRoYXQgYG1pZ3JhdGVfdG9fbm9kZWAgaXMgc3BlY2lmaWNhbGx5IGNhbGxlZCBieSBgZG9fbWlncmF0ZV9wYWdlc2AgaXMgcXVpdGUgaW50ZXJlc3RpbmcuIFRoaXMgcG9pbnRzIG1lIHRvd2FyZCB0aG9zZSB0d28gZnVuY3Rpb25zLCBgZG9fbWJpbmRgIGFuZCBgZG9fbWlncmF0ZV9wYWdlc2AsIGFzIGxpa2VseSBzaWduaWZpY2FudCBwb2ludHMgb2YgaW50ZXJlc3QgdG8gaW52ZXN0aWdhdGUgZnVydGhlci4gVGhleSBzZWVtIHRvIGJlIGNvb3JkaW5hdGluZyBwYWdlIG1pZ3JhdGlvbiBvciBiaW5kaW5nIG9wZXJhdGlvbnMsIHdoaWNoIG1ha2VzIHRoZW0gcHJpbWUgY2FuZGlkYXRlcyBmb3IgZGVlcGVyIHNjcnV0aW55LgoKQWRkaXRpb25hbGx5LCBJIG5lZWQgdG8gY2hlY2sgb3V0IHdoYXQgdGhlIGltcGFjdCBvZiBgbWFkdmlzZV9mcmVlX2h1Z2VfcG1kYCBhbmQgYG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZWAgYXJlLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGVzZSBhcmUgY2FsbGVkIGFuZCBob3cgdGhleSBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMDM6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWFkdmlzZV9mcmVlX2h1Z2VfcG1kJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2h1Z2VfbWVtb3J5LmM9MjIwMD12bV9mYXVsdF90IGRvX2h1Z2VfcG1kX251bWFfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbi0tXG5tbS9odWdlX21lbW9yeS5jLTIyNzktICovXG5tbS9odWdlX21lbW9yeS5jOjIyODA6Ym9vbCBtYWR2aXNlX2ZyZWVfaHVnZV9wbWQoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG5tbS9odWdlX21lbW9yeS5jLTIyODEtXHRcdHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBuZXh0KVxuLS1cbm1tL21hZHZpc2UuYz02NTM9c3RhdGljIGludCBtYWR2aXNlX2ZyZWVfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9tYWR2aXNlLmMtNjY5LVx0aWYgKHBtZF90cmFuc19odWdlKCpwbWQpKVxubW0vbWFkdmlzZS5jOjY3MDpcdFx0aWYgKG1hZHZpc2VfZnJlZV9odWdlX3BtZCh0bGIsIHZtYSwgcG1kLCBhZGRyLCBuZXh0KSlcbm1tL21hZHZpc2UuYy02NzEtXHRcdFx0cmV0dXJuIDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDAzOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MTkxCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMTAzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBNZW1vcnkgTWFuYWdlbWVudCBFZmZpY2llbmN5KioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgbWVtb3J5IG1hbmFnZW1lbnQgZmxvdy4gSXQgbG9va3MgbGlrZSBgbWFkdmlzZV9mcmVlX2h1Z2VfcG1kYCBpcyBiZWluZyBpbnZva2VkIGRvd25zdHJlYW0gZnJvbSBgbWFkdmlzZV9mcmVlX3B0ZV9yYW5nZWAsIHdoaWNoIGluIHR1cm4gaXMgY2FsbGVkIGJ5IGBtYWR2aXNlX2ZyZWVfc2luZ2xlX3ZtYWAuIFRoYXQmIzM5O3MgdGhlIGZyZWVpbmcgcGF0aC4gTm93LCB0aGUgYG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZWAgZnVuY3Rpb24gaXMgYWxzbyBvZiBpbnRlcmVzdCwgc2luY2UgaXQmIzM5O3MgY2FsbGVkIGJ5IGBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9zaW5nbGVfdm1hYCwgb3IgYSBzaW1pbGFyIGZ1bmN0aW9uLCB3aGljaCBpbXBsaWVzIGl0cyBwdXJwb3NlIGlzIHJlbGF0ZWQgdG8gcGFnZXMgYmVpbmcgbWFya2VkIGFzIGNvbGQgb3IgcGFnZWQgb3V0LiBJIG5lZWQgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IGBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2VgIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUuIEl0IHdvdWxkIGFwcGVhciB0byBiZSBhbiBpbXBvcnRhbnQgY29tcG9uZW50IGluIG9wdGltaXppbmcgbWVtb3J5IHVzYWdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAwMzoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tYWR2aXNlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWFkdmlzZS5jPTM0Mz1zdGF0aWMgaW5saW5lIGludCBtYWR2aXNlX2ZvbGlvX3B0ZV9iYXRjaCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuLS1cbm1tL21hZHZpc2UuYy0zNTItXG5tbS9tYWR2aXNlLmM6MzUzOnN0YXRpYyBpbnQgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlKHBtZF90ICpwbWQsXG5tbS9tYWR2aXNlLmMtMzU0LVx0XHRcdFx0dW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbi0tXG5tbS9tYWR2aXNlLmM9NTY5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgY29sZF93YWxrX29wcyA9IHtcbm1tL21hZHZpc2UuYzo1NzA6XHQucG1kX2VudHJ5ID0gbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlLFxubW0vbWFkdmlzZS5jLTU3MS1cdC53YWxrX2xvY2sgPSBQR1dBTEtfUkRMT0NLLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAwMzoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjczMwoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDY2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipGb2N1c2luZyBvbiBLZXkgRnVuY3Rpb25zIGZvciBNZW1vcnkgTWFuYWdlbWVudCBPcHRpbWl6YXRpb24qKgoKUmlnaHQsIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIG1vc3QgcmVsZXZhbnQgc3ltYm9scyB0byB0YXJnZXQgaGVyZS4gSXQgc2VlbXMgbGlrZSB0aGUgY29yZSBmdW5jdGlvbnMgSSBzaG91bGQgYmUgZXhhbWluaW5nIGFyZSBgZG9fbWJpbmRgLCBgZG9fbWlncmF0ZV9wYWdlc2AsIGBtYWR2aXNlX2ZyZWVfaHVnZV9wbWRgLCBhbmQgYG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZWAuIFRoZXNlIGZlZWwgbGlrZSB0aGV5JiMzOTtyZSBhdCB0aGUgaGVhcnQgb2YgbWVtb3J5IGJpbmRpbmcsIG1pZ3JhdGlvbiwgYW5kIGFkdmlzaW5nIHRoZSBrZXJuZWwgb24gbWVtb3J5IHVzYWdlLCB3aGljaCBpcyBleGFjdGx5IHRoZSBhcmVhIEkmIzM5O20gdHJ5aW5nIHRvIG9wdGltaXplLiBXYWl0IGEgc2Vjb25kLCBpcyBgZG9fbWlncmF0ZV9wYWdlc2AgYWN0dWFsbHkgYSBzeXNjYWxsPyBJIG5lZWQgdG8gcXVpY2tseSBjb25maXJtIHRoYXQsIGJlY2F1c2UgSSB3YW50IHRvIG1ha2Ugc3VyZSBJJiMzOTttIGZvY3VzZWQgb24gdGhlIHJpZ2h0IGxldmVsIG9mIGFic3RyYWN0aW9uLiBUaW1lIHRvIHZlcmlmeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMDM6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZG9fbWlncmF0ZV9wYWdlcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1wb2xpY3kuYz0xMjg1PXN0YXRpYyBsb25nIG1pZ3JhdGVfdG9fbm9kZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgaW50IHNvdXJjZSwgaW50IGRlc3QsXG4tLVxubW0vbWVtcG9saWN5LmMtMTMzOC0gKi9cbm1tL21lbXBvbGljeS5jOjEzMzk6aW50IGRvX21pZ3JhdGVfcGFnZXMoc3RydWN0IG1tX3N0cnVjdCAqbW0sIGNvbnN0IG5vZGVtYXNrX3QgKmZyb20sXG5tbS9tZW1wb2xpY3kuYy0xMzQwLVx0XHQgICAgIGNvbnN0IG5vZGVtYXNrX3QgKnRvLCBpbnQgZmxhZ3MpXG4tLVxubW0vbWVtcG9saWN5LmMtMTM4Ny1cdFx0XHQvKlxubW0vbWVtcG9saWN5LmM6MTM4ODpcdFx0XHQgKiBkb19taWdyYXRlX3BhZ2VzKCkgdHJpZXMgdG8gbWFpbnRhaW4gdGhlIHJlbGF0aXZlXG5tbS9tZW1wb2xpY3kuYy0xMzg5LVx0XHRcdCAqIG5vZGUgcmVsYXRpb25zaGlwIG9mIHRoZSBwYWdlcyBlc3RhYmxpc2hlZCBiZXR3ZWVuXG4tLVxubW0vbWVtcG9saWN5LmM9MTQ3MD1zdGF0aWMgYm9vbCBtaWdyYXRlX2ZvbGlvX2FkZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb2xpc3QsXG4tLVxubW0vbWVtcG9saWN5LmMtMTQ3NS1cbm1tL21lbXBvbGljeS5jOjE0NzY6aW50IGRvX21pZ3JhdGVfcGFnZXMoc3RydWN0IG1tX3N0cnVjdCAqbW0sIGNvbnN0IG5vZGVtYXNrX3QgKmZyb20sXG5tbS9tZW1wb2xpY3kuYy0xNDc3LVx0XHQgICAgIGNvbnN0IG5vZGVtYXNrX3QgKnRvLCBpbnQgZmxhZ3MpXG4tLVxubW0vbWVtcG9saWN5LmM9MTg2Mz1zdGF0aWMgaW50IGtlcm5lbF9taWdyYXRlX3BhZ2VzKHBpZF90IHBpZCwgdW5zaWduZWQgbG9uZyBtYXhub2RlLFxuLS1cbm1tL21lbXBvbGljeS5jLTE5MzQtXG5tbS9tZW1wb2xpY3kuYzoxOTM1Olx0ZXJyID0gZG9fbWlncmF0ZV9wYWdlcyhtbSwgb2xkLCBuZXcsXG5tbS9tZW1wb2xpY3kuYy0xOTM2LVx0XHRjYXBhYmxlKENBUF9TWVNfTklDRSkgPyBNUE9MX01GX01PVkVfQUxMIDogTVBPTF9NRl9NT1ZFKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMDM6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc0MTgKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA0NjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRm9jdXNpbmcgb24gS2V5IFN5bWJvbHMgZm9yIEZ1enppbmcqKgoKT2theSwgc28gSSYjMzk7bSB0cnlpbmcgdG8gZmlndXJlIG91dCB0aGUgYmVzdCBhcHByb2FjaCBmb3IgZnV6emluZyB0aGlzIGNvZGUuIFRoZSBlbnRyeSBwb2ludCBpcyBga2VybmVsX21pZ3JhdGVfcGFnZXNgLCB3aGljaCBpcyBhIHN5c2NhbGwgZW50cnkuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBGcm9tIHRoZXJlLCBJIHdhcyBpbml0aWFsbHkgdGhpbmtpbmcgb2YgZm9jdXNpbmcgb24gYGRvX21iaW5kYCwgYG1hZHZpc2VfZnJlZV9odWdlX3BtZGAsIGFuZCBgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlYCBhcyBwb3RlbnRpYWwgZm9jdXMgc3ltYm9scy4KCkJ1dCBob2xkIG9uLCBgbWFkdmlzZV9mcmVlX2h1Z2VfcG1kYCBpcyBjYWxsZWQgZnJvbSBgbWFkdmlzZV9mcmVlX3B0ZV9yYW5nZWAsIHdoaWNoIGl0c2VsZiBpcyBjYWxsZWQgZnJvbSBgbWFkdmlzZV92bWFfYmVoYXZpb3JgLiBTbyBtYXliZSBnb2luZyBkaXJlY3RseSB0byBgbWFkdmlzZV9mcmVlX2h1Z2VfcG1kYCBhbmQgYG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZWAgbWFrZXMgdGhlIG1vc3Qgc2Vuc2UgYmVjYXVzZSB0aGV5IGFyZSBtb3JlIGRpcmVjdGx5IHRpZWQgdG8gdGhlIGNoYW5nZXMuCgpOb3csIGZvciBgcXVldWVfZm9saW9zX3BtZGAsIEkgaGF2ZSBvcHRpb25zLiBJIGNvdWxkIHVzZSBgcXVldWVfZm9saW9zX3B0ZV9yYW5nZWAsIG9yIGBxdWV1ZV9wYWdlc19yYW5nZWAsIG9yIGV2ZW4gZ28gYmFjayB0byBgZG9fbWJpbmRgIGFuZCBga2VybmVsX21pZ3JhdGVfcGFnZXNgLiBTaG91bGQgSSB1c2UgYHF1ZXVlX2ZvbGlvc19wbWRgIGRpcmVjdGx5PyBIbW0sIGl0JiMzOTtzIHN0YXRpYy4gQnV0IHN5emthbGxlciBjYW4gaGFuZGxlIHN0YXRpYyBmdW5jdGlvbnMgaWYgdGhleSYjMzk7cmUgaW4gdGhlIGNhbGwgdHJlZSBvZiBzeXNjYWxscy4gU3BlY2lmeWluZyB0aGVtIGluIGBGb2N1c1N5bWJvbHNgIGlzIHN0aWxsIGdvb2QgYmVjYXVzZSBzeXprYWxsZXIgdXNlcyBjb3ZlcmFnZSB0byBndWlkZSBmdXp6aW5nLiBBbmQgd2FpdCwgaXQgbG9va3MgbGlrZSBgRm9jdXNTeW1ib2xzYCAqY2FuKiBpbmNsdWRlIHN0YXRpYyBmdW5jdGlvbnMhIFN5emthbGxlciBleHRyYWN0cyB0aGUgUEMgZnJvbSB0aGUga2VybmVsIGltYWdlLiBQZXJmZWN0LgoKU28sIEkgdGhpbmsgSSBjYW4ganVzdCBsaXN0IGBxdWV1ZV9mb2xpb3NfcG1kYCwgYG1hZHZpc2VfZnJlZV9odWdlX3BtZGAsIGFuZCBgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlYCBhcyBmb2N1cyBzeW1ib2xzLiBXYWl0IGEgbWludXRlLCBJIG5lZWQgdG8gZG91YmxlLWNoZWNrLiBgbWFkdmlzZV9mcmVlX2h1Z2VfcG1kYCBpcyBnbG9iYWwsIG5vdCBzdGF0aWMuIEFuZCBgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlYCBhbmQgYHF1ZXVlX2ZvbGlvc19wbWRgIGFyZSBzdGF0aWMuIEFscmlnaHQsIGxldCYjMzk7cyBwcm92aWRlIHRob3NlIHRocmVlIGFzIGBGb2N1c1N5bWJvbHNgLgoKRmluYWxseSwgZm9yIHRoZSBjb25maWd1cmF0aW9uLCBJJiMzOTttIGdvaW5nIHRvIG5lZWQgYE5VTUFgLCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLCBhbmQgYERFVklDRV9QUklWQVRFYC4gSG9sZCBvbiwgZG9lcyBgREVWSUNFX1BSSVZBVEVgIG5lZWQgYFpPTkVfREVWSUNFYD8gQmV0dGVyIGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDAzOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBERVZJQ0VfUFJJVkFURSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz0xMjYyPWNvbmZpZyBHRVRfRlJFRV9SRUdJT05cbi0tXG5tbS9LY29uZmlnLTEyNjQtXG5tbS9LY29uZmlnOjEyNjU6Y29uZmlnIERFVklDRV9QUklWQVRFXG5tbS9LY29uZmlnLTEyNjYtXHRib29sIFwmIzM0O1VuYWRkcmVzc2FibGUgZGV2aWNlIG1lbW9yeSAoR1BVIG1lbW9yeSwgLi4uKVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAwMzoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODUxMwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhlIGdpdmVuIGluc3RydWN0aW9uczoKCioqQW5hbHl6aW5nIG1tL0tjb25maWcgYXJvdW5kIERFVklDRV9QUklWQVRFKioKCk9rYXksIHNvIHRoZSBwcm9tcHQgd2FudHMgbWUgdG8gZm9jdXMgb24gYG1tL0tjb25maWdgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBgREVWSUNFX1BSSVZBVEVgIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBSaWdodCwgc28gdGhpcyBpcyBhYm91dCBtZW1vcnkgbWFuYWdlbWVudCB3aXRoaW4gdGhlIGtlcm5lbCYjMzk7cyBjb25maWd1cmF0aW9uIHN5c3RlbS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCByb2xlIGBERVZJQ0VfUFJJVkFURWAgcGxheXMgaW4gdGhpcyBjb250ZXh0LiBJJiMzOTttIGFzc3VtaW5nIGl0IHJlbGF0ZXMgdG8gd2hldGhlciBjZXJ0YWluIG1lbW9yeSByZWdpb25zIG9yIGRldmljZXMgc2hvdWxkIGJlIGNvbnNpZGVyZWQgcHJpdmF0ZSB0byBhIHNwZWNpZmljIGRldmljZSBvciwgY29udmVyc2VseSwgc2hhcmVkIGFuZCBtYW5hZ2VkIGF0IGEgbW9yZSBnbG9iYWwgbGV2ZWwuIFRoZSBgS2NvbmZpZ2AgZmlsZXMgYXJlIHdoZXJlIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGRlZmluZWQsIGFsb25nIHdpdGggdGhlaXIgZGVwZW5kZW5jaWVzLCBkZXNjcmlwdGlvbnMsIGFuZCBkZWZhdWx0cywgc28gSSBuZWVkIHRvIGdvIHJlYWQgdGhlIGNvbnRlbnRzIG9mIHRoYXQgZmlsZS4gSSBleHBlY3QgdG8gc2VlIGRlZmluaXRpb25zIGZvciBgREVWSUNFX1BSSVZBVEVgLCBhbmQgbGlrZWx5IGEgZGVzY3JpcHRpb24gb2YgaXRzIG1lYW5pbmcsIHBlcmhhcHMgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYmFzZWQgb24gdGhpcyBvcHRpb24gYW5kIHJlbGF0ZWQgb3B0aW9ucy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2U6CgoqICAgV2hhdCBkZXZpY2VzIG9yIG1lbW9yeSByZWdpb25zIGFyZSBpbXBhY3RlZCBieSB0aGlzIG9wdGlvbi4KKiAgIFRoZSBpbXBsaWNhdGlvbnMgb2YgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIHRoaXMgb3B0aW9uLgoqICAgQW55IGRlcGVuZGVuY2llcyBvbiBvdGhlciBjb25maWd1cmF0aW9uIHNldHRpbmdzLgoqICAgSG93IHRoZSBrZXJuZWwgbWFuYWdlcyBhbmQgdXRpbGl6ZXMgbWVtb3J5IGJhc2VkIG9uIHRoaXMgc2V0dGluZy4KCk15IGdvYWwgaXMgdG8gdW5kZXJzdGFuZCBob3cgYERFVklDRV9QUklWQVRFYCBhZmZlY3RzIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzY2hlbWUgd2l0aGluIHRoZSBrZXJuZWwgYW5kIGhvdyBpdCBjYW4gYmUgY29udHJvbGxlZCB0aHJvdWdoIHRoZSBjb25maWd1cmF0aW9uIHByb2Nlc3MuIFVsdGltYXRlbHksIEkmIzM5O2xsIHN5bnRoZXNpemUgd2hhdCBgbW0vS2NvbmZpZ2AgaXMgZXhwcmVzc2luZyBhcm91bmQgdGhpcyBvcHRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDAzOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyNjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTI2MDpcdFx0ZGVwZW5kcyBvbiBNTVVcbjEyNjE6XHRcbjEyNjI6XHRjb25maWcgR0VUX0ZSRUVfUkVHSU9OXG4xMjYzOlx0XHRib29sXG4xMjY0Olx0XG4xMjY1Olx0Y29uZmlnIERFVklDRV9QUklWQVRFXG4xMjY2Olx0XHRib29sIFwmIzM0O1VuYWRkcmVzc2FibGUgZGV2aWNlIG1lbW9yeSAoR1BVIG1lbW9yeSwgLi4uKVwmIzM0O1xuMTI2NzpcdFx0ZGVwZW5kcyBvbiBaT05FX0RFVklDRVxuMTI2ODpcdFx0c2VsZWN0IEdFVF9GUkVFX1JFR0lPTlxuMTI2OTpcdFxuMTI3MDpcdFx0aGVscFxuMTI3MTpcdFx0ICBBbGxvd3MgY3JlYXRpb24gb2Ygc3RydWN0IHBhZ2VzIHRvIHJlcHJlc2VudCB1bmFkZHJlc3NhYmxlIGRldmljZVxuMTI3MjpcdFx0ICBtZW1vcnk7IGkuZS4sIG1lbW9yeSB0aGF0IGlzIG9ubHkgYWNjZXNzaWJsZSBmcm9tIHRoZSBkZXZpY2UgKG9yXG4xMjczOlx0XHQgIGdyb3VwIG9mIGRldmljZXMpLiBZb3UgbGlrZWx5IGFsc28gd2FudCB0byBzZWxlY3QgSE1NX01JUlJPUi5cbjEyNzQ6XHRcbjEyNzU6XHRjb25maWcgVk1BUF9QRk5cbjEyNzY6XHRcdGJvb2xcbjEyNzc6XHRcbjEyNzg6XHRjb25maWcgQVJDSF9VU0VTX0hJR0hfVk1BX0ZMQUdTXG4xMjc5Olx0XHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDAzOjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MTIxCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkRlcGVuZGVuY3kgRGVlcCBEaXZlKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSYjMzk7bSBzZWVpbmcgdGhhdCBgREVWSUNFX1BSSVZBVEVgIHJlbGllcyBvbiBgWk9ORV9ERVZJQ0VgLiBDbGFzc2ljLiBOb3csIGJlZm9yZSBJIHN0YXJ0IHB1bGxpbmcgYXBhcnQgYERFVklDRV9QUklWQVRFYCBhbmQgZmlndXJpbmcgb3V0ICp3aHkqIGl0IG5lZWRzIGBaT05FX0RFVklDRWAsIEkgbmVlZCB0byBmdWxseSB1bmRlcnN0YW5kIGBaT05FX0RFVklDRWAgaXRzZWxmLiBHb3R0YSBtYWtlIHN1cmUgdGhlcmUgYXJlbiYjMzk7dCBhbnkgaGlkZGVuIGdvdGNoYXMgb3IgdW5leHBlY3RlZCBiZWhhdmlvciB3aXRoaW4gYFpPTkVfREVWSUNFYCB0aGF0IHdpbGwgY29tZSBiYWNrIHRvIGJpdGUgbWUgbGF0ZXIuIFRpbWUgdG8gdHJhY2UgdGhlIGRlcGVuZGVuY2llcyBvZiBgWk9ORV9ERVZJQ0VgIGFuZCBzZWUgd2hhdCYjMzk7cyByZWFsbHkgZ29pbmcgb24gdW5kZXIgdGhlIGhvb2QuIE5vIHBvaW50IGluIGZpeGluZyBhIGxlYWsgd2l0aG91dCB1bmRlcnN0YW5kaW5nIHdoZXJlIHRoZSB3YXRlciYjMzk7cyBjb21pbmcgZnJvbS4gSSBuZWVkIHRvIGdldCB0aGUgYmlnZ2VyIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDAzOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBaT05FX0RFVklDRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz0xMjMxPWNvbmZpZyBaT05FX0RNQTMyXG4tLVxubW0vS2NvbmZpZy0xMjM1LVxubW0vS2NvbmZpZzoxMjM2OmNvbmZpZyBaT05FX0RFVklDRVxubW0vS2NvbmZpZy0xMjM3LVx0Ym9vbCBcJiMzNDtEZXZpY2UgbWVtb3J5IChwbWVtLCBITU0sIGV0Yy4uLikgaG90cGx1ZyBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDAzOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NDMyCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgYG1tL0tjb25maWdgIGZpbGUsIHNwZWNpZmljYWxseSBhcm91bmQgYFpPTkVfREVWSUNFYDoKCioqRGl2aW5nIGludG8gdGhlIGBtbS9LY29uZmlnYCBhbmQgYFpPTkVfREVWSUNFYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGludG8gdGhlIG5pdHR5LWdyaXR0eS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7T2theSwgYG1tL0tjb25maWdgLi4uIHRoaXMgaXMgd2hlcmUgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IG9wdGlvbnMgYXJlIGNvbmZpZ3VyZWQsIHJpZ2h0PyYjMzQ7IEkga25vdyB0aGlzIGZpbGUgaW50aW1hdGVseS4gSSYjMzk7bSBnb2luZyB0byBsb29rIGZvciB0aGUgc2VjdGlvbiByZWxhdGVkIHRvIGBaT05FX0RFVklDRWAuIE15IG1pbmQgcXVpY2tseSBjb25qdXJlcyB0aGUgc3Vycm91bmRpbmcgY29udGV4dCAtIGlzIHRoaXMgYWJvdXQgY29uZmlndXJpbmcgZGV2aWNlcyBmb3IgZGlyZWN0IG1lbW9yeSBhY2Nlc3M/IEFyZSB3ZSB0YWxraW5nIGFib3V0IG1lbW9yeS1tYXBwZWQgSS9PLCBOVU1BIGFyY2hpdGVjdHVyZXMsIG9yIHNvbWV0aGluZyBtb3JlIHNwZWNpYWxpemVkPyBUaGUgcHJlc2VuY2Ugb2YgYFpPTkVfREVWSUNFYCBzaWduYWxzIHNvbWV0aGluZyBiZXlvbmQgdGhlIHVzdWFsIGBaT05FX0RNQWAsIGBaT05FX05PUk1BTGAsIGBaT05FX0hJR0hNRU1gIHJlYWxtcy4gSSBleHBlY3QgdG8gZmluZCBvcHRpb25zIHJlbGF0ZWQgdG8gaG93IHRoZSBrZXJuZWwgaGFuZGxlcyBtZW1vcnkgc3BlY2lmaWNhbGx5IGFsbG9jYXRlZCBmb3IgZGV2aWNlIGludGVyYWN0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcy4gV2hhdCBvdGhlciBmZWF0dXJlcyBuZWVkIHRvIGJlIGVuYWJsZWQgYmVmb3JlIGBaT05FX0RFVklDRWAgYmVjb21lcyByZWxldmFudD8gQXJlIHRoZXJlIGhhcmR3YXJlIHJlcXVpcmVtZW50cywgc3BlY2lmaWMgZGV2aWNlIGRyaXZlcnMsIG9yIHNwZWNpZmljIGtlcm5lbCBjb25maWd1cmF0aW9ucyB0aGF0IHBsYXkgaW50byB0aGlzPyBJcyB0aGlzIGFib3V0IHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBEaXJlY3QgTWVtb3J5IEFjY2VzcyAoRE1BKT8gSSBrbm93IEkmIzM5O2xsIGhhdmUgdG8gY29uc2lkZXIgaG93IHRoaXMgaW50ZXJhY3RzIHdpdGggbWVtb3J5IHByb3RlY3Rpb24sIGFkZHJlc3NpbmcsIGFuZCBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zLiBJJiMzOTttIGN1cmlvdXMgaWYgdGhpcyB6b25lJiMzOTtzIGV4aXN0ZW5jZSBpbmZsdWVuY2VzIGhvdyBtZW1vcnkgaXMgbWFuYWdlZCwgYWxsb2NhdGVkLCBhbmQgcmVjbGFpbWVkLiBJIHdpbGwgbG9vayBmb3IgYXNzb2NpYXRlZCBkZXBlbmRlbmNpZXMgYW5kIHBvdGVudGlhbCBjb25maWd1cmF0aW9uIHBpdGZhbGxzLiBJJiMzOTttIHJlYWR5IHRvIGZpbmQgdGhlIGFuc3dlcnMhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDAzOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyMzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTIzNTpcdFxuMTIzNjpcdGNvbmZpZyBaT05FX0RFVklDRVxuMTIzNzpcdFx0Ym9vbCBcJiMzNDtEZXZpY2UgbWVtb3J5IChwbWVtLCBITU0sIGV0Yy4uLikgaG90cGx1ZyBzdXBwb3J0XCYjMzQ7XG4xMjM4Olx0XHRkZXBlbmRzIG9uIE1FTU9SWV9IT1RSRU1PVkVcbjEyMzk6XHRcdHNlbGVjdCBYQVJSQVlfTVVMVElcbjEyNDA6XHRcbjEyNDE6XHRcdGhlbHBcbjEyNDI6XHRcdCAgRGV2aWNlIG1lbW9yeSBob3RwbHVnIHN1cHBvcnQgYWxsb3dzIGZvciBlc3RhYmxpc2hpbmcgcG1lbSxcbjEyNDM6XHRcdCAgb3Igb3RoZXIgZGV2aWNlIGRyaXZlciBkaXNjb3ZlcmVkIG1lbW9yeSByZWdpb25zLCBpbiB0aGVcbjEyNDQ6XHRcdCAgbWVtbWFwLiBUaGlzIGFsbG93cyBwZm5fdG9fcGFnZSgpIGxvb2t1cHMgb2Ygb3RoZXJ3aXNlXG4xMjQ1Olx0XHQgIFwmIzM0O2RldmljZS1waHlzaWNhbFwmIzM0OyBhZGRyZXNzZXMgd2hpY2ggaXMgbmVlZGVkIGZvciBEQVgsIFBDSV9QMlBETUEsIGFuZFxuMTI0NjpcdFx0ICBERVZJQ0VfUFJJVkFURSBmZWF0dXJlcyBhbW9uZyBvdGhlcnMuXG4xMjQ3Olx0XG4xMjQ4Olx0XHQgIEVuYWJsaW5nIHRoaXMgb3B0aW9uIHdpbGwgcmVkdWNlIHRoZSBlbnRyb3B5IG9mIHg4NiBLQVNMUiBtZW1vcnlcbjEyNDk6XHRcdCAgcmVnaW9ucy4gRm9yIGV4YW1wbGUgLSBvbiBhIDQ2IGJpdCBzeXN0ZW0sIHRoZSBlbnRyb3B5IGdvZXMgZG93blxuMTI1MDpcdFx0ICBmcm9tIDE2IGJpdHMgdG8gMTUgYml0cy4gVGhlIGFjdHVhbCByZWR1Y3Rpb24gaW4gZW50cm9weSBkZXBlbmRzXG4xMjUxOlx0XHQgIG9uIHRoZSBwaHlzaWNhbCBhZGRyZXNzIGJpdHMsIG9uIHByb2Nlc3NvciBmZWF0dXJlcywga2VybmVsIGNvbmZpZ1xuMTI1MjpcdFx0ICAoNSBsZXZlbCBwYWdlIHRhYmxlKSBhbmQgcGh5c2ljYWwgbWVtb3J5IHByZXNlbnQgb24gdGhlIHN5c3RlbS5cbjEyNTM6XHRcbjEyNTQ6XHQjXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDAzOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMTMyCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkRlcGVuZGVuY3kgRGVlcCBEaXZlOiBaT05FX0RFVklDRSAmYW1wOyBNRU1PUllfSE9UUkVNT1ZFKioKCkFscmlnaHQsIHNvIHRoZSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBmbGFncyBhIGRlcGVuZGVuY3kuIGBaT05FX0RFVklDRWAgcmVsaWVzIG9uIGBNRU1PUllfSE9UUkVNT1ZFYC4gVGhhdCYjMzk7cyBhIGtleSBvYnNlcnZhdGlvbi4gQmVmb3JlIEkgZ28gZnVydGhlciBkb3duIHRoaXMgcGFydGljdWxhciByYWJiaXQgaG9sZSwgbGV0JiMzOTtzIHN0b3AgYW5kIHZlcmlmeSB0aGF0IGRlcGVuZGVuY3kuIEkgbmVlZCB0byB1bmRlcnN0YW5kICp3aHkqIGBaT05FX0RFVklDRWAgbmVlZHMgYE1FTU9SWV9IT1RSRU1PVkVgLiBJcyBpdCBmb3IgZ3JhY2VmdWwgaGFuZGxpbmcgb2YgZGV2aWNlIHJlbW92YWwsIHJlc291cmNlIHJlY2xhbWF0aW9uLCBvciBzb21lIG90aGVyIGNyaXRpY2FsIGFzcGVjdD8gS25vd2luZyB0aGUgbmF0dXJlIG9mIHRoZSBkZXBlbmRlbmN5IHdpbGwgZ3VpZGUgbXkgbmV4dCBzdGVwcy4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHRoZSB1bmRlcmx5aW5nIGltcGxlbWVudGF0aW9uIGRldGFpbHMgYW5kIHRoZSBzcGVjaWZpYyBpbnRlcmFjdGlvbnMuIE15IGZvY3VzIG5lZWRzIHRvIGJlIG9uIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVzZSB0d28gY29tcG9uZW50cy4gVGltZSB0byBkaWcgaW50byB0aGUgYE1FTU9SWV9IT1RSRU1PVkVgIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDAzOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNRU1PUllfSE9UUkVNT1ZFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTU4OT1lbmRjaG9pY2Vcbm1tL0tjb25maWctNTkwLVxubW0vS2NvbmZpZzo1OTE6Y29uZmlnIE1FTU9SWV9IT1RSRU1PVkVcbm1tL0tjb25maWctNTkyLVx0Ym9vbCBcJiMzNDtBbGxvdyBmb3IgbWVtb3J5IGhvdCByZW1vdmVcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMDM6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA0MzQKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA3MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyB3aGF0JiMzOTtzIGdvaW5nIHRocm91Z2ggbXkgbWluZCBhcyBJIGFwcHJvYWNoIHRoaXM6CgoqKkVudW1lcmF0aW5nIFJlbGV2YW50IEtlcm5lbCBGZWF0dXJlcyoqCgpSaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gbGlzdCBvdXQgdGhlIGtleSBrZXJuZWwgZmVhdHVyZXMgdGhpcyBpcyBsaWtlbHkgdG91Y2hpbmcuIEkmIzM5O20gdGhpbmtpbmcgaW1tZWRpYXRlbHkgb2YgYERFVklDRV9QUklWQVRFYCwgYFpPTkVfREVWSUNFYCwgYE1FTU9SWV9IT1RSRU1PVkVgLCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLCBhbmQgYE5VTUFgLiBUaG9zZSBhcmUgdGhlIHVzdWFsIHN1c3BlY3RzIHdoZW4gZGVhbGluZyB3aXRoIHRoaXMga2luZCBvZiBtZW1vcnkgbWFuYWdlbWVudCBhbmQgZGV2aWNlIGludGVyYWN0aW9uLgoKSG9sZCBvbi4uLiBJJiMzOTttIGFsc28gcmVtZW1iZXJpbmcgdGhhdCBgQURWSVNFX1NZU0NBTExTYCBpcyBlc3NlbnRpYWwgZm9yIGhhbmRsaW5nIGBtYWR2aXNlLmNgLiBHb3R0YSBiZSBtaW5kZnVsIG9mIGhvdyB3ZSYjMzk7cmUgZ3VpZGluZyB0aGUga2VybmVsIHdpdGggbWVtb3J5IGhpbnRzLiBMZXQgbWUgZG91YmxlLWNoZWNrIHRoYXQgYEFEVklTRV9TWVNDQUxMU2AgaXMgaW5kZWVkIHByZXNlbnQ7IGl0JiMzOTtzIGVhc3kgdG8gb3Zlcmxvb2sgdGhlc2UgZGV0YWlscyBhbmQgdGhlIHJpcHBsZSBlZmZlY3RzIGNhbiBiZSBhIHBhaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDAzOjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEFEVklTRV9TWVNDQUxMUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAwMzoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDc0NAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6CgoqKk5hdmlnYXRpbmcgdGhlIEtjb25maWcgTGFieXJpbnRoKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoaXMgY29uZmlndXJhdGlvbiBvcHRpb24gaXMgZGVmaW5lZC4gSSYjMzk7bSBwcmV0dHkgc3VyZSBpdCYjMzk7cyBpbiB0aGUgYEtjb25maWdgIGZpbGVzLCBidXQgd2hlcmUgZXhhY3RseT8gSXMgaXQgd2l0aGluIHRoZSBtYWluIGBpbml0L0tjb25maWdgIGZpbGUsIG9yIGlzIGl0IG5lc3RlZCBkZWVwZXIgaW4gb25lIG9mIHRoZSBzdWJkaXJlY3Rvcmllcz8gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHRoZSBzY29wZSBvZiB0aGlzIHBhcnRpY3VsYXIgb3B0aW9uIHNvIEkgY2FuIHByb3Blcmx5IGFuYWx5emUgaXRzIGRlcGVuZGVuY2llcyBhbmQgZGVmYXVsdCB2YWx1ZXMuIFRpbWUgdG8gc3RhcnQgZGlnZ2luZy4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAwMzoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQURWSVNFX1NZU0NBTExTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZz0xOTM3PWNvbmZpZyBJT19VUklOR19NT0NLX0ZJTEVcbi0tXG5pbml0L0tjb25maWctMTk0Ny1cbmluaXQvS2NvbmZpZzoxOTQ4OmNvbmZpZyBBRFZJU0VfU1lTQ0FMTFNcbmluaXQvS2NvbmZpZy0xOTQ5LVx0Ym9vbCBcJiMzNDtFbmFibGUgbWFkdmlzZS9mYWR2aXNlIHN5c2NhbGxzXCYjMzQ7IGlmIEVYUEVSVFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAwMzoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDk5NgoJCQkJCQkJb3V0cHV0OiAyMDMKCQkJCQkJCXRob3VnaHRzOiA5NzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgTWVtb3J5IE1hbmFnZW1lbnQgUGF0Y2ggZm9yIEZ1enppbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGZpZ3VyaW5nIG91dCBpZiBpdCYjMzk7cyBmdXp6YWJsZSBhbmQgaG93IHRvIGFwcHJvYWNoIGl0LiBGaXJzdCwgSSBzZWUgdGhhdCB0aGUgYEFEVklTRV9TWVNDQUxMU2AgY29uZmlnIGlzIGRlZmluZWQgaW4gYGluaXQvS2NvbmZpZ2AuIEkmIzM5O2xsIG5lZWQgdG8gZW5hYmxlIGEgc2V0IG9mIGNvbmZpZ3VyYXRpb25zIHRvIHJlcHJvZHVjZSB0aGUgYnVnOiBgTlVNQWAsIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAsIGBERVZJQ0VfUFJJVkFURWAsIGBaT05FX0RFVklDRWAsIGBNRU1PUllfSE9UUkVNT1ZFYCwgYW5kIG9mIGNvdXJzZSwgYEFEVklTRV9TWVNDQUxMU2AuCgpOb3csIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoZSBjb2RlLiBUaGUgcGF0Y2ggc2VlbXMgdG8gYmUgYWRkcmVzc2luZyBhbiBpc3N1ZSB3aXRoaW4gYHF1ZXVlX2ZvbGlvc19wbWRgLiBUaGlzIGZ1bmN0aW9uIGlzIHJlYWNoYWJsZSB2aWEgYG1hZHZpc2VfZnJlZV9odWdlX3BtZGAsIGNhbGxlZCBmcm9tIGBtYWR2aXNlX2ZyZWVfcHRlX3JhbmdlYCB3aGljaCBpcyByZWxhdGVkIHRvIGBNQURWX0ZSRUVgLiBgcXVldWVfZm9saW9zX3BtZGAgaXMgYWxzbyBwYXJ0IG9mIGBtYmluZGAgYW5kIGBtaWdyYXRlX3BhZ2VzYC4gVGhlIHByaW1hcnkgZml4IGlzIHJlbGF0ZWQgdG8gYSBjcmFzaCB0aGF0IG9jY3VycmVkIHdoZW4gYHF1ZXVlX2ZvbGlvc19wbWRgIGVuY291bnRlcmVkIGEgbm9uLXByZXNlbnQgUE1EIHRoYXQgd2FzbiYjMzk7dCBhIG1pZ3JhdGlvbiBlbnRyeSDigJMgc3BlY2lmaWNhbGx5LCBhIGRldmljZSBwcml2YXRlIGVudHJ5LiBUaGUgb3RoZXIgcGFydHMgb2YgdGhlIHBhdGNoIGFyZSB1cGRhdGVzIHRvIGBWTV9CVUdfT05gIGFzc2VydGlvbnMgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcy4KClRoZSBmdW5jdGlvbmFsIGNoYW5nZSBpcyBpbiBgcXVldWVfZm9saW9zX3BtZGAuIEkmIzM5O20gdGhpbmtpbmcsIGlzIHRoaXMgd29ydGggZnV6emluZz8gWWVzLCBhYnNvbHV0ZWx5LiBJdCYjMzk7cyBhIGZ1bmN0aW9uYWwgZml4IGZvciBhIGNyYXNoLCBzbyBpdCYjMzk7cyBhIGdvb2QgdGFyZ2V0IGZvciBmdXp6aW5nLgoKTGV0JiMzOTtzIGRvdWJsZS1jaGVjayB0aGUgcmVhY2hhYmlsaXR5IG9mIGBxdWV1ZV9mb2xpb3NfcG1kYC4gSXQmIzM5O3MgY2FsbGVkIGZyb20gYHF1ZXVlX2ZvbGlvc19wdGVfcmFuZ2VgIHdoZW4gYHBtZF90cmFuc19odWdlX2xvY2tgIHN1Y2NlZWRzLiBUaGlzIGxvY2sgc3VjY2VlZHMgaWYgYHBtZF9pc19odWdlYCBpcyB0cnVlLCB3aGljaCBpcyB0cnVlIGlmIGVpdGhlciB0aGUgUE1EIGlzIHByZXNlbnQgYW5kIGh1Z2UsICpvciogaWYgdGhlIFBNRCBpcyBub3QgcHJlc2VudCBidXQgaXMgbm90IG5vbmUuIFRoaXMgbWVhbnMgdGhhdCBpZiB0aGVyZSYjMzk7cyBhIGRldmljZSBwcml2YXRlIGVudHJ5IGluIGEgUE1ELCBgcG1kX2lzX2h1Z2VgIHdpbGwgcmV0dXJuIHRydWUgYW5kIHRoZSBsb2NrIHdpbGwgc3VjY2VlZC4gVGhlbiBgcXVldWVfZm9saW9zX3BtZGAgaXMgY2FsbGVkLiBJdCBjaGVja3MgYCFwbWRfcHJlc2VudChwbWR2YWwpYC4gSWYgaXQmIzM5O3Mgbm90IGEgbWlncmF0aW9uIGVudHJ5IChsaWtlIGEgZGV2aWNlIHByaXZhdGUgb25lKSwgaXQgcmV0dXJucyBlYXJseS4gVGhpcyBpcyB0aGUgZml4IHRvIHByZXZlbnQgdGhlIGNyYXNoLgoKU28sIGluIGVzc2VuY2UsIHRoZSBwYXRjaCBpcyBmaXhpbmcgYSBwb3RlbnRpYWwgY3Jhc2ggd2hlbiBoYW5kbGluZyBub24tcHJlc2VudCBQTURzIHRoYXQgYXJlbiYjMzk7dCBtaWdyYXRpb24gZW50cmllcyDigJMgbGlrZSBkZXZpY2UgcHJpdmF0ZSBlbnRyaWVzIOKAkyB3aXRoaW4gYHF1ZXVlX2ZvbGlvc19wbWRgLiBJdCBhbHNvIHVwZGF0ZXMgYFZNX0JVR19PTmAgYXNzZXJ0aW9ucyBpbiBtYWR2aXNlIHBhdGhzLiBUaGlzIGlzIGEgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjaGFuZ2UsIHNvIGl0IG5lZWRzIGZ1enppbmcgdG8gZW5zdXJlIGNvcnJlY3QgaGFuZGxpbmcgb2YgZGV2aWNlIHByaXZhdGUgbWVtb3J5IGluIE5VTUEgcG9saWN5IGFuZCBtYWR2aXNlIG9wZXJhdGlvbnMuCgpOb3csIEkgbmVlZCB0byBkZWZpbmUgdGhlIGZvY3VzIHN5bWJvbHMuIEkmIzM5O2xsIGZvY3VzIG9uIGBxdWV1ZV9mb2xpb3NfcG1kYCBhcyB0aGUga2V5IGZ1bmN0aW9uIHRvIHRhcmdldC4gVGhlbiwgSSBuZWVkIHRvIGluY2x1ZGUgYG1hZHZpc2VfZnJlZV9odWdlX3BtZGAgYW5kIGBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2VgIGJlY2F1c2UgdGhleSBsZWFkIGludG8gYHF1ZXVlX2ZvbGlvc19wbWRgLgoKSSBzaG91bGQgdmVyaWZ5IHRoZSBjb25maWdzLiBgTlVNQWAgaXMgbmVlZGVkIGZvciBgbW0vbWVtcG9saWN5LmNgLiBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIG5lZWRlZCBmb3IgaHVnZSBQTUQgc3VwcG9ydCBpbiBgbW0vaHVnZV9tZW1vcnkuY2AuIGBERVZJQ0VfUFJJVkFURWAgaXMgbmVlZGVkIGZvciwgd2VsbCwgZGV2aWNlIHByaXZhdGUgZW50cmllcy4gYFpPTkVfREVWSUNFYCBpcyBuZWVkZWQgZm9yIGBERVZJQ0VfUFJJVkFURWAuIGBNRU1PUllfSE9UUkVNT1ZFYCBpcyBuZWVkZWQgZm9yIGBaT05FX0RFVklDRWAuICBBbmQgZmluYWxseSwgYEFEVklTRV9TWVNDQUxMU2AgaXMgbmVlZGVkIGZvciBgbW0vbWFkdmlzZS5jYC4KCk9rYXksIEkmIzM5O20gcmVhZHkgdG8gY2FsbCB0aGUgYHNldC1yZXN1bHRzYCB0b29sIG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMDM6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05VTUEmIzM0OywKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OywKICAgICYjMzQ7REVWSUNFX1BSSVZBVEUmIzM0OywKICAgICYjMzQ7Wk9ORV9ERVZJQ0UmIzM0OywKICAgICYjMzQ7TUVNT1JZX0hPVFJFTU9WRSYjMzQ7LAogICAgJiMzNDtBRFZJU0VfU1lTQ0FMTFMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtxdWV1ZV9mb2xpb3NfcG1kJiMzNDssCiAgICAmIzM0O21hZHZpc2VfZnJlZV9odWdlX3BtZCYjMzQ7LAogICAgJiMzNDttYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgY3Jhc2ggaW4gYHF1ZXVlX2ZvbGlvc19wbWRgIHdoZW4gaGFuZGxpbmcgbm9uLXByZXNlbnQgUE1EcyB0aGF0IGFyZSBub3QgbWlncmF0aW9uIGVudHJpZXMgKHN1Y2ggYXMgZGV2aWNlIHByaXZhdGUgZW50cmllcykuIEl0IGFsc28gdXBkYXRlcyBgVk1fQlVHX09OYCBhc3NlcnRpb25zIGluIG1hZHZpc2UgcGF0aHMgdG8gY29ycmVjdGx5IGhhbmRsZSBkZXZpY2UgcHJpdmF0ZSBlbnRyaWVzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGNvcnJlY3QgaGFuZGxpbmcgb2YgZGV2aWNlIHByaXZhdGUgbWVtb3J5IGluIE5VTUEgcG9saWN5IGFuZCBtYWR2aXNlIG9wZXJhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05VTUEmIzM0OywKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OywKICAgICYjMzQ7REVWSUNFX1BSSVZBVEUmIzM0OywKICAgICYjMzQ7Wk9ORV9ERVZJQ0UmIzM0OywKICAgICYjMzQ7TUVNT1JZX0hPVFJFTU9WRSYjMzQ7LAogICAgJiMzNDtBRFZJU0VfU1lTQ0FMTFMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtxdWV1ZV9mb2xpb3NfcG1kJiMzNDssCiAgICAmIzM0O21hZHZpc2VfZnJlZV9odWdlX3BtZCYjMzQ7LAogICAgJiMzNDttYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgY3Jhc2ggaW4gYHF1ZXVlX2ZvbGlvc19wbWRgIHdoZW4gaGFuZGxpbmcgbm9uLXByZXNlbnQgUE1EcyB0aGF0IGFyZSBub3QgbWlncmF0aW9uIGVudHJpZXMgKHN1Y2ggYXMgZGV2aWNlIHByaXZhdGUgZW50cmllcykuIEl0IGFsc28gdXBkYXRlcyBgVk1fQlVHX09OYCBhc3NlcnRpb25zIGluIG1hZHZpc2UgcGF0aHMgdG8gY29ycmVjdGx5IGhhbmRsZSBkZXZpY2UgcHJpdmF0ZSBlbnRyaWVzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGNvcnJlY3QgaGFuZGxpbmcgb2YgZGV2aWNlIHByaXZhdGUgbWVtb3J5IGluIE5VTUEgcG9saWN5IGFuZCBtYWR2aXNlIG9wZXJhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0wOVQwMzoxMTozNy41NTY3NzQ0MjJaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzA5NjUyNTgzMjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTlVNQVwiLFxuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIixcbiAgICBcIkRFVklDRV9QUklWQVRFXCIsXG4gICAgXCJaT05FX0RFVklDRVwiLFxuICAgIFwiTUVNT1JZX0hPVFJFTU9WRVwiLFxuICAgIFwiQURWSVNFX1NZU0NBTExTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicXVldWVfZm9saW9zX3BtZFwiLFxuICAgIFwibWFkdmlzZV9mcmVlX2h1Z2VfcG1kXCIsXG4gICAgXCJtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCBjcmFzaCBpbiBgcXVldWVfZm9saW9zX3BtZGAgd2hlbiBoYW5kbGluZyBub24tcHJlc2VudCBQTURzIHRoYXQgYXJlIG5vdCBtaWdyYXRpb24gZW50cmllcyAoc3VjaCBhcyBkZXZpY2UgcHJpdmF0ZSBlbnRyaWVzKS4gSXQgYWxzbyB1cGRhdGVzIGBWTV9CVUdfT05gIGFzc2VydGlvbnMgaW4gbWFkdmlzZSBwYXRocyB0byBjb3JyZWN0bHkgaGFuZGxlIGRldmljZSBwcml2YXRlIGVudHJpZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgY29ycmVjdCBoYW5kbGluZyBvZiBkZXZpY2UgcHJpdmF0ZSBtZW1vcnkgaW4gTlVNQSBwb2xpY3kgYW5kIG1hZHZpc2Ugb3BlcmF0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMDM6MTE6MzcuNTU2NzgyNzMyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NTQ4NTUyMTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBlZmQ0NTZjNjMxZmVhOGQ0NTU0YjlmODIxNzQ2OTNiOTYyODc1OGZkXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgSnVsIDkgMDM6MTE6MzUgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vaHVnZV9tZW1vcnkuYyBiL21tL2h1Z2VfbWVtb3J5LmNcXG5pbmRleCBlYTA0NDVkNmMxN2YwMS4uYmQzOWIyNjNmYzYwNTkgMTAwNjQ0XFxuLS0tIGEvbW0vaHVnZV9tZW1vcnkuY1xcbisrKyBiL21tL2h1Z2VfbWVtb3J5LmNcXG5AQCAtMjI5OCw3ICsyMjk4LDggQEAgYm9vbCBtYWR2aXNlX2ZyZWVfaHVnZV9wbWQoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIFxcbiBcXHRpZiAodW5saWtlbHkoIXBtZF9wcmVzZW50KG9yaWdfcG1kKSkpIHtcXG4gXFx0XFx0Vk1fQlVHX09OKHRocF9taWdyYXRpb25fc3VwcG9ydGVkKCkgXFx1MDAyNlxcdTAwMjZcXG4tXFx0XFx0XFx0XFx0ICAhcG1kX2lzX21pZ3JhdGlvbl9lbnRyeShvcmlnX3BtZCkpO1xcbitcXHRcXHRcXHRcXHQgICFwbWRfaXNfbWlncmF0aW9uX2VudHJ5KG9yaWdfcG1kKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHRcXHQgICFwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnkob3JpZ19wbWQpKTtcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcdH1cXG4gXFxuZGlmZiAtLWdpdCBhL21tL21hZHZpc2UuYyBiL21tL21hZHZpc2UuY1xcbmluZGV4IDkyOTJmNjBiMTlhYTdjLi4xMDY1YjVhODRlYTc5NyAxMDA2NDRcXG4tLS0gYS9tbS9tYWR2aXNlLmNcXG4rKysgYi9tbS9tYWR2aXNlLmNcXG5AQCAtMzg5LDcgKzM4OSw4IEBAIHN0YXRpYyBpbnQgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlKHBtZF90ICpwbWQsXFxuIFxcbiBcXHRcXHRpZiAodW5saWtlbHkoIXBtZF9wcmVzZW50KG9yaWdfcG1kKSkpIHtcXG4gXFx0XFx0XFx0Vk1fQlVHX09OKHRocF9taWdyYXRpb25fc3VwcG9ydGVkKCkgXFx1MDAyNlxcdTAwMjZcXG4tXFx0XFx0XFx0XFx0XFx0IXBtZF9pc19taWdyYXRpb25fZW50cnkob3JpZ19wbWQpKTtcXG4rXFx0XFx0XFx0XFx0XFx0IXBtZF9pc19taWdyYXRpb25fZW50cnkob3JpZ19wbWQpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdFxcdFxcdCFwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnkob3JpZ19wbWQpKTtcXG4gXFx0XFx0XFx0Z290byBodWdlX3VubG9jaztcXG4gXFx0XFx0fVxcbiBcXG5kaWZmIC0tZ2l0IGEvbW0vbWVtcG9saWN5LmMgYi9tbS9tZW1wb2xpY3kuY1xcbmluZGV4IDkxNGY4MTg2M2RiNWE2Li40Nzg1YjU1YzAyZGFmOSAxMDA2NDRcXG4tLS0gYS9tbS9tZW1wb2xpY3kuY1xcbisrKyBiL21tL21lbXBvbGljeS5jXFxuQEAgLTY1NCwxMiArNjU0LDE0IEBAIHN0YXRpYyB2b2lkIHF1ZXVlX2ZvbGlvc19wbWQocG1kX3QgKnBtZCwgc3RydWN0IG1tX3dhbGsgKndhbGspXFxuIHtcXG4gXFx0c3RydWN0IGZvbGlvICpmb2xpbztcXG4gXFx0c3RydWN0IHF1ZXVlX3BhZ2VzICpxcCA9IHdhbGstXFx1MDAzZXByaXZhdGU7XFxuK1xcdHBtZF90IHBtZHZhbCA9ICpwbWQ7XFxuIFxcbi1cXHRpZiAodW5saWtlbHkocG1kX2lzX21pZ3JhdGlvbl9lbnRyeSgqcG1kKSkpIHtcXG4tXFx0XFx0cXAtXFx1MDAzZW5yX2ZhaWxlZCsrO1xcbitcXHRpZiAodW5saWtlbHkoIXBtZF9wcmVzZW50KHBtZHZhbCkpKSB7XFxuK1xcdFxcdGlmIChwbWRfaXNfbWlncmF0aW9uX2VudHJ5KHBtZHZhbCkpXFxuK1xcdFxcdFxcdHFwLVxcdTAwM2Vucl9mYWlsZWQrKztcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXHR9XFxuLVxcdGZvbGlvID0gcG1kX2ZvbGlvKCpwbWQpO1xcbitcXHRmb2xpbyA9IHBtZF9mb2xpbyhwbWR2YWwpO1xcbiBcXHRpZiAoaXNfaHVnZV96ZXJvX2ZvbGlvKGZvbGlvKSkge1xcbiBcXHRcXHR3YWxrLVxcdTAwM2VhY3Rpb24gPSBBQ1RJT05fQ09OVElOVUU7XFxuIFxcdFxcdHJldHVybjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMDM6MTE6MzguMjEzMzQ3MjY4WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MzAzMDg2NTg0MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTlVNQVwiLFxuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIixcbiAgICBcIkRFVklDRV9QUklWQVRFXCIsXG4gICAgXCJaT05FX0RFVklDRVwiLFxuICAgIFwiTUVNT1JZX0hPVFJFTU9WRVwiLFxuICAgIFwiQURWSVNFX1NZU0NBTExTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicXVldWVfZm9saW9zX3BtZFwiLFxuICAgIFwibWFkdmlzZV9mcmVlX2h1Z2VfcG1kXCIsXG4gICAgXCJtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCBjcmFzaCBpbiBgcXVldWVfZm9saW9zX3BtZGAgd2hlbiBoYW5kbGluZyBub24tcHJlc2VudCBQTURzIHRoYXQgYXJlIG5vdCBtaWdyYXRpb24gZW50cmllcyAoc3VjaCBhcyBkZXZpY2UgcHJpdmF0ZSBlbnRyaWVzKS4gSXQgYWxzbyB1cGRhdGVzIGBWTV9CVUdfT05gIGFzc2VydGlvbnMgaW4gbWFkdmlzZSBwYXRocyB0byBjb3JyZWN0bHkgaGFuZGxlIGRldmljZSBwcml2YXRlIGVudHJpZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgY29ycmVjdCBoYW5kbGluZyBvZiBkZXZpY2UgcHJpdmF0ZSBtZW1vcnkgaW4gTlVNQSBwb2xpY3kgYW5kIG1hZHZpc2Ugb3BlcmF0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBlZmQ0NTZjNjMxZmVhOGQ0NTU0YjlmODIxNzQ2OTNiOTYyODc1OGZkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgOSAwMzoxMTozNSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2h1Z2VfbWVtb3J5LmMgYi9tbS9odWdlX21lbW9yeS5jXG5pbmRleCBlYTA0NDVkNmMxN2YwMS4uYmQzOWIyNjNmYzYwNTkgMTAwNjQ0XG4tLS0gYS9tbS9odWdlX21lbW9yeS5jXG4rKysgYi9tbS9odWdlX21lbW9yeS5jXG5AQCAtMjI5OCw3ICsyMjk4LDggQEAgYm9vbCBtYWR2aXNlX2ZyZWVfaHVnZV9wbWQoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXG4gXHRpZiAodW5saWtlbHkoIXBtZF9wcmVzZW50KG9yaWdfcG1kKSkpIHtcbiBcdFx0Vk1fQlVHX09OKHRocF9taWdyYXRpb25fc3VwcG9ydGVkKCkgXHUwMDI2XHUwMDI2XG4tXHRcdFx0XHQgICFwbWRfaXNfbWlncmF0aW9uX2VudHJ5KG9yaWdfcG1kKSk7XG4rXHRcdFx0XHQgICFwbWRfaXNfbWlncmF0aW9uX2VudHJ5KG9yaWdfcG1kKSBcdTAwMjZcdTAwMjZcbitcdFx0XHRcdCAgIXBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeShvcmlnX3BtZCkpO1xuIFx0XHRnb3RvIG91dDtcbiBcdH1cbiBcbmRpZmYgLS1naXQgYS9tbS9tYWR2aXNlLmMgYi9tbS9tYWR2aXNlLmNcbmluZGV4IDkyOTJmNjBiMTlhYTdjLi4xMDY1YjVhODRlYTc5NyAxMDA2NDRcbi0tLSBhL21tL21hZHZpc2UuY1xuKysrIGIvbW0vbWFkdmlzZS5jXG5AQCAtMzg5LDcgKzM4OSw4IEBAIHN0YXRpYyBpbnQgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlKHBtZF90ICpwbWQsXG4gXG4gXHRcdGlmICh1bmxpa2VseSghcG1kX3ByZXNlbnQob3JpZ19wbWQpKSkge1xuIFx0XHRcdFZNX0JVR19PTih0aHBfbWlncmF0aW9uX3N1cHBvcnRlZCgpIFx1MDAyNlx1MDAyNlxuLVx0XHRcdFx0XHQhcG1kX2lzX21pZ3JhdGlvbl9lbnRyeShvcmlnX3BtZCkpO1xuK1x0XHRcdFx0XHQhcG1kX2lzX21pZ3JhdGlvbl9lbnRyeShvcmlnX3BtZCkgXHUwMDI2XHUwMDI2XG4rXHRcdFx0XHRcdCFwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnkob3JpZ19wbWQpKTtcbiBcdFx0XHRnb3RvIGh1Z2VfdW5sb2NrO1xuIFx0XHR9XG4gXG5kaWZmIC0tZ2l0IGEvbW0vbWVtcG9saWN5LmMgYi9tbS9tZW1wb2xpY3kuY1xuaW5kZXggOTE0ZjgxODYzZGI1YTYuLjQ3ODViNTVjMDJkYWY5IDEwMDY0NFxuLS0tIGEvbW0vbWVtcG9saWN5LmNcbisrKyBiL21tL21lbXBvbGljeS5jXG5AQCAtNjU0LDEyICs2NTQsMTQgQEAgc3RhdGljIHZvaWQgcXVldWVfZm9saW9zX3BtZChwbWRfdCAqcG1kLCBzdHJ1Y3QgbW1fd2FsayAqd2FsaylcbiB7XG4gXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuIFx0c3RydWN0IHF1ZXVlX3BhZ2VzICpxcCA9IHdhbGstXHUwMDNlcHJpdmF0ZTtcbitcdHBtZF90IHBtZHZhbCA9ICpwbWQ7XG4gXG4tXHRpZiAodW5saWtlbHkocG1kX2lzX21pZ3JhdGlvbl9lbnRyeSgqcG1kKSkpIHtcbi1cdFx0cXAtXHUwMDNlbnJfZmFpbGVkKys7XG4rXHRpZiAodW5saWtlbHkoIXBtZF9wcmVzZW50KHBtZHZhbCkpKSB7XG4rXHRcdGlmIChwbWRfaXNfbWlncmF0aW9uX2VudHJ5KHBtZHZhbCkpXG4rXHRcdFx0cXAtXHUwMDNlbnJfZmFpbGVkKys7XG4gXHRcdHJldHVybjtcbiBcdH1cbi1cdGZvbGlvID0gcG1kX2ZvbGlvKCpwbWQpO1xuK1x0Zm9saW8gPSBwbWRfZm9saW8ocG1kdmFsKTtcbiBcdGlmIChpc19odWdlX3plcm9fZm9saW8oZm9saW8pKSB7XG4gXHRcdHdhbGstXHUwMDNlYWN0aW9uID0gQUNUSU9OX0NPTlRJTlVFO1xuIFx0XHRyZXR1cm47XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQwMzoxMTozOC4yMTMzNDk3NjhaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMTE3NDA0MjI0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQYXRjaDogSHVnZSBQYWdlcyBhbmQgTWVtb3J5IE1hbmFnZW1lbnQqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgSSBzZWUgd2UncmUgdG91Y2hpbmcgYG1tL2h1Z2VfbWVtb3J5LmNgLCBgbW0vbWFkdmlzZS5jYCwgYW5kIGBtbS9tZW1wb2xpY3kuY2AuIFNlZW1zIHRvIGJlIHJlbGF0ZWQgdG8gaGFuZGxpbmcgaHVnZSBwYWdlcywgd2hpY2ggYWx3YXlzIHdhcnJhbnRzIGEgY2xvc2UgbG9vay5cblxuVGhlIGZpcnN0IHR3byBjaGFuZ2VzLCBpbiBgbW0vaHVnZV9tZW1vcnkuY2AgYW5kIGBtbS9tYWR2aXNlLmNgLCBhcmUgc3RyYWlnaHRmb3J3YXJkLiBUaGV5J3JlIGp1c3QgYWRkaW5nIGEgY2hlY2sgZm9yIGAhcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KG9yaWdfcG1kKWAgdG8gYSBgVk1fQlVHX09OYC4gQSBgVk1fQlVHX09OYCBpcyBhIGRlYnVnIGFzc2VydGlvbi4gRnJvbSBhIGZ1bmN0aW9uYWwgcGVyc3BlY3RpdmUsIGl0J3MgaXJyZWxldmFudCBpbiBub24tZGVidWcgYnVpbGRzLiBCdXQgaW4gYSBkZWJ1ZyBidWlsZCwgdGhpcyBpcyBtZWFudCB0byBwcmV2ZW50IGEgY3Jhc2guIEVzc2VudGlhbGx5LCBpdCdzIGEgc2FmZXR5IG5ldCwgbWFraW5nIHN1cmUgdGhhdCBhIHNwZWNpZmljIGNvbmRpdGlvbiAqc2hvdWxkbid0KiBoYXBwZW4uIFRoZSBuZXcgY29uZGl0aW9uIHNlZW1zIHRvIGJlIGVuc3VyaW5nIHRoYXQgdGhlIGVudHJ5IGlzIG5laXRoZXIgYSBtaWdyYXRpb24gZW50cnkgbm9yIGEgZGV2aWNlLXByaXZhdGUgZW50cnkgYmVmb3JlIHRyaWdnZXJpbmcgdGhlIGRlYnVnIGNoZWNrLiBUaGF0J3MgZ29vZCwga2VlcHMgdGhpbmdzIHNhZmUgYW5kIGhlbHBzIGNhdGNoIHBvdGVudGlhbCBpc3N1ZXMgZWFybHkuXG5cbk5vdywgdGhlIGludGVyZXN0aW5nIHBhcnQgaXMgdGhlIGNoYW5nZSBpbiBgbW0vbWVtcG9saWN5LmNgLCBzcGVjaWZpY2FsbHkgaW4gdGhlIGBxdWV1ZV9mb2xpb3NfcG1kYCBmdW5jdGlvbi4gVGhpcyBvbmUncyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBub3QganVzdCBhIGRlYnVnIGNoZWNrLiBUaGUgcHJldmlvdXMgY29kZSBjaGVja2VkIGlmIHRoZSBlbnRyeSB3YXMgYSBtaWdyYXRpb24gZW50cnkuIEJ1dCBub3csIGl0J3MgY2hlY2tpbmcgYCFwbWRfcHJlc2VudChwbWR2YWwpYC4gRXNzZW50aWFsbHksIHRoZSBsb2dpYyBpcyBiZWluZyBpbnZlcnRlZC4gSWYgdGhlIFBNRCBpc24ndCBwcmVzZW50LCB0aGVuIGl0IGRpdmVzIGludG8gY2hlY2tpbmcgaWYgaXQgKmlzKiBhIG1pZ3JhdGlvbiBlbnRyeS4gSWYgaXQgaXMsIHRoZW4gYG5yX2ZhaWxlZGAgaXMgaW5jcmVtZW50ZWQuIFByZXZpb3VzbHksIGl0IHdvdWxkIHByb2NlZWQgdG8gY2FsbCBgcG1kX2ZvbGlvKCpwbWQpYCwgd2hpY2ggY291bGQgbGVhZCB0byBkZXJlZmVyZW5jaW5nIGEgZ2FyYmFnZSBwb2ludGVyIG9yLCB3b3JzZSwgYSBjcmFzaC4gU28sIHRoaXMgcmVmYWN0b3JpbmcgcHJvdGVjdHMgYWdhaW5zdCB0aGF0IHBvc3NpYmlsaXR5LlxuXG5UaGVyZWZvcmUsIHRoaXMgcGF0Y2ggbG9va3MgbGlrZSBpdCdzIGltcHJvdmluZyByb2J1c3RuZXNzIGJ5IGFkZGluZyB0aGUgc2FmZXR5IGNoZWNrIHdoaWxlIGFsc28gcHJvdGVjdGluZyB0aGUgYHF1ZXVlX2ZvbGlvc19wbWRgIGZ1bmN0aW9uIGZyb20gcG90ZW50aWFsbHkgZGVyZWZlcmVuY2luZyBnYXJiYWdlIGRhdGEuIFNvdW5kcyBsaWtlIGEgc29saWQgaW1wcm92ZW1lbnQuIEknbGwgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGNvbnRleHRzIHdoZXJlIHRoZXNlIGZ1bmN0aW9ucyBhcmUgdXNlZCB0byB1bmRlcnN0YW5kIHRoZSBjb21wbGV0ZSBpbXBhY3QsIGJ1dCBhdCBhIGdsYW5jZSwgdGhpcyBsb29rcyB3ZWxsLXJlYXNvbmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzg5LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Njg5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMDM6MTE6NTkuMzg3Mzk3MzExWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2ODA2NjY1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJxdWV1ZV9mb2xpb3NfcG1kXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21lbXBvbGljeS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbXBvbGljeS5jPTY0ND1zdGF0aWMgaW5saW5lIGJvb2wgcXVldWVfZm9saW9fcmVxdWlyZWQoc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbm1tL21lbXBvbGljeS5jLTY1Mi1cXG5tbS9tZW1wb2xpY3kuYzo2NTM6c3RhdGljIHZvaWQgcXVldWVfZm9saW9zX3BtZChwbWRfdCAqcG1kLCBzdHJ1Y3QgbW1fd2FsayAqd2FsaylcXG5tbS9tZW1wb2xpY3kuYy02NTQte1xcbi0tXFxubW0vbWVtcG9saWN5LmM9Njg3PXN0YXRpYyBpbnQgcXVldWVfZm9saW9zX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy03MDAtXFx0aWYgKHB0bCkge1xcbm1tL21lbXBvbGljeS5jOjcwMTpcXHRcXHRxdWV1ZV9mb2xpb3NfcG1kKHBtZCwgd2Fsayk7XFxubW0vbWVtcG9saWN5LmMtNzAyLVxcdFxcdHNwaW5fdW5sb2NrKHB0bCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDAzOjExOjU5Ljk1NTQ3MTk1NloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIyODQzMDkzMzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqVW5kZXJzdGFuZGluZyB0aGUgRm9saW8gUXVldWluZyBQcm9jZXNzKipcblxuUmlnaHQsIHNvIGBxdWV1ZV9mb2xpb3NfcG1kYCBpcyBjbGVhcmx5IGEgZnVuY3Rpb24gdGhhdCBwbGF5cyBhIHJvbGUgaW4gcXVldWluZyBmb2xpb3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByZWxhdGlvbnNoaXAgdG8gYHF1ZXVlX2ZvbGlvc19wdGVfcmFuZ2VgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgd2hhdCdzIHRoZSBjb250cm9sIGZsb3c/IEl0IGxvb2tzIGxpa2UgYHF1ZXVlX2ZvbGlvc19wdGVfcmFuZ2VgIGNhbGxzIGBxdWV1ZV9mb2xpb3NfcG1kYC4gU28sIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhhdCByZWxhdGlvbnNoaXAgaXMgdG8gdHJhY2sgZG93biB0aGUgcmVsZXZhbnQgY29kZSBwYXRoLlxuXG5Pa2F5LCBsZXQncyB0aGluayBhYm91dCB0aGUgY29udGV4dC4gVGhpcyBpcyBtZW1vcnkgbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IGRlYWxpbmcgd2l0aCBmb2xpb3MuIFRoZSB0cmFjZSBzZWVtcyB0byBiZSByZWxhdGVkIHRvIHRoZSBQTUQgbGV2ZWwuIE5vdywgSSBoYXZlIHRvIGZpZ3VyZSBvdXQgd2hhdCBjb25maWd1cmF0aW9ucyBhcmUgY3JpdGljYWwuIFNpbmNlIHRoaXMgbG9va3MgbGlrZSBOVU1BLWF3YXJlIGNvZGUsIEkgbmVlZCB0byBjaGVjayB0byBzZWUgaWYgYG1tL21lbXBvbGljeS5jYCBpcyBpbnZvbHZlZC4gSSB2YWd1ZWx5IHJlY2FsbCB0aGF0IGZpbGUgYmVpbmcgY29tcGlsZWQgd2hlbiBgQ09ORklHX05VTUFgIGlzIGVuYWJsZWQuIEl0J3MgYSBrZXkgcGFydCBvZiBob3cgdGhlIGtlcm5lbCBtYW5hZ2VzIG1lbW9yeSBwbGFjZW1lbnQgYWNyb3NzIE5VTUEgbm9kZXMuIEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayB0aGF0IHRoaXMgaXMgdGhlIGNvbmZpZ3VyYXRpb24gSSBuZWVkIHRvIGZvY3VzIG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNzk5LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMDM6MTI6MjIuNzk4NTcwNjA2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNzg0NzY0MjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVtcG9saWN5Lm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vTWFrZWZpbGU9ODU9b2JqLSQoQ09ORklHX0hVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQKVxcdCs9IGh1Z2V0bGJfdm1lbW1hcC5vXFxubW0vTWFrZWZpbGU6ODY6b2JqLSQoQ09ORklHX05VTUEpIFxcdCs9IG1lbXBvbGljeS5vXFxubW0vTWFrZWZpbGUtODctb2JqLSQoQ09ORklHX1NQQVJTRU1FTSlcXHQrPSBzcGFyc2Uub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQwMzoxMjoyNC44NzcwNTUwMjNaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NTEzMjg3MzcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhlc2UgdHdvIGZ1bmN0aW9uczogYG1hZHZpc2VfZnJlZV9odWdlX3BtZGAgYW5kIGBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2VgLiBNeSBmaXJzdCBzdG9wIGlzIGdvaW5nIHRvIGJlIHRoZWlyIHNvdXJjZSBmaWxlcy5cblxuKipBbmFseXppbmcgTWVtb3J5IE1hbmFnZW1lbnQgRnVuY3Rpb25zKipcblxuYG1hZHZpc2VfZnJlZV9odWdlX3BtZGAgY2F1Z2h0IG15IGV5ZSwgYW5kIGEgcXVpY2sgY2hlY2sgdGVsbHMgbWUgaXQncyBsb2NhdGVkIHdpdGhpbiBgbW0vaHVnZV9tZW1vcnkuY2AuIFRoYXQgbWVhbnMgaXQncyBpbnRyaW5zaWNhbGx5IHRpZWQgdG8gdGhlIGtlcm5lbCdzIHRyYW5zcGFyZW50IGh1Z2VwYWdlcyBmdW5jdGlvbmFsaXR5LCBhcyBpbmRpY2F0ZWQgYnkgdGhlIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIG9wdGlvbi4gVGhhdCBtYWtlcyBzZW5zZSwgZ2l2ZW4gdGhlIG5hbWUuIEknbGwgbmVlZCB0byByZW1lbWJlciB0byBrZWVwIHRoYXQgY29udGV4dCBpbiBtaW5kIHdoZW4gSSBzdGFydCBkaWdnaW5nIGludG8gdGhlIGRldGFpbHMuXG5cbk5vdywgYG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZWAgYXBwZWFycyB0byByZXNpZGUgaW4gYG1tL21hZHZpc2UuY2AuIFRoZSBwcmVzZW5jZSBvZiB0aGlzIGZ1bmN0aW9uIGlzIGNvbmRpdGlvbmFsIG9uIGBDT05GSUdfQURWSVNFX1NZU0NBTExTYCBiZWluZyBlbmFibGVkLCB3aGljaCBpcyBhIGdvb2QgY2x1ZSBmb3IgZnVydGhlciBpbnZlc3RpZ2F0aW9uLiBUaGlzIHN1Z2dlc3RzIGl0cyByZWxhdGVkIHRvIHRoZSBzeXN0ZW0gY2FsbCB0aGF0IGFsbG93cyBwcm9jZXNzZXMgdG8gZ2l2ZSBoaW50cyB0byB0aGUga2VybmVsIGFib3V0IG1lbW9yeSB1c2FnZS4gVGhpcyB3aWxsIGJlIHdoZXJlIEkgYmVnaW4gdG8gZXhwbG9yZSBob3cgdXNlci1zcGFjZSBpbnRlcmFjdHMgd2l0aCB0aGUga2VybmVsJ3MgbWVtb3J5IG1hbmFnZW1lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQyMTAsIk91dHB1dFRva2VucyI6NTYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMDM6MTI6MzQuMzkwMzQ0NjU1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyOTY0NjAzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJodWdlX21lbW9yeS5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL01ha2VmaWxlPTEwMD1vYmotJChDT05GSUdfREVWSUNFX01JR1JBVElPTikgKz0gbWlncmF0ZV9kZXZpY2Uub1xcbm1tL01ha2VmaWxlOjEwMTpvYmotJChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpICs9IGh1Z2VfbWVtb3J5Lm8ga2h1Z2VwYWdlZC5vXFxubW0vTWFrZWZpbGUtMTAyLW9iai0kKENPTkZJR19QQUdFX0NPVU5URVIpICs9IHBhZ2VfY291bnRlci5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDAzOjEyOjM1LjAxOTk5NzEyM1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDk3MDc0NDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWFkdmlzZS5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL01ha2VmaWxlPTc0PWlmZGVmIENPTkZJR19NTVVcXG5tbS9NYWtlZmlsZTo3NTpcXHRvYmotJChDT05GSUdfQURWSVNFX1NZU0NBTExTKVxcdCs9IG1hZHZpc2Uub1xcbm1tL01ha2VmaWxlLTc2LWVuZGlmXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDAzOjEyOjM1LjI2OTcxMjU4OVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNTY1MDE0MTkxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUmVjZW50IEtlcm5lbCBNZW1vcnkgTWFuYWdlbWVudCBDaGFuZ2VzKipcblxuT2theSwgc28gbG9va2luZyBhdCB0aGVzZSBkaWZmcywgaXQgc2VlbXMgdGhlIHVwZGF0ZXMgaW4gYG1tL2h1Z2VfbWVtb3J5LmNgIGFuZCBgbW0vbWFkdmlzZS5jYCBhcmUgc3RyYWlnaHRmb3J3YXJkIGBWTV9CVUdfT05gIGFkZGl0aW9ucy4gUHJldHR5IHJvdXRpbmUgc3R1ZmYsIGxpa2VseSB0byBjYXRjaCBzb21lIGVkZ2UgY2FzZXMgZHVyaW5nIGRldmVsb3BtZW50LiBUaGUgY2hhbmdlIGluIGBtbS9tZW1wb2xpY3kuY2AgaXMgdGhlIG9uZSB0aGF0J3MgZ3JhYmJlZCBteSBhdHRlbnRpb24uIEl0IGxvb2tzIGxpa2UgaXQncyBhZGRyZXNzaW5nIGEgYnVnLiBTcGVjaWZpY2FsbHksIGl0J3MgcHJldmVudGluZyBhIGNyYXNoIG9yLCB3b3JzZSwgaW5jb3JyZWN0IGJlaGF2aW9yIHdoZW4gZGVhbGluZyB3aXRoIGEgUE1EIHRoYXQgaXNuJ3QgYSBtaWdyYXRpb24gZW50cnkuIFRoaXMgY291bGQgYmUgZHVlIHRvIGEgZGV2aWNlLXByaXZhdGUgZW50cnksIGEgc3dhcCBlbnRyeSwgb3IgcG90ZW50aWFsbHkganVzdCB0aGUgYWJzZW5jZSBvZiBhbiBlbnRyeS5cblxuTm93IGhvbGQgb24gYSBzZWNvbmQuLi4gYHF1ZXVlX2ZvbGlvc19wbWRgLi4uIHRoYXQncyBnZXR0aW5nIGNhbGxlZCBmcm9tIGBxdWV1ZV9mb2xpb3NfcHRlX3JhbmdlYCAqd2hlbiogYHB0bGAgaXMgbm90IE5VTEwuIFJpZ2h0LCB0aGF0IG1lYW5zIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIGh1Z2UgUE1EIOKAkyBhIFRIUC4gT2theSwgbGV0J3MgZHJpbGwgZG93biBpbnRvIGBxdWV1ZV9mb2xpb3NfcHRlX3JhbmdlYCBpbiBgbW0vbWVtcG9saWN5LmNgIGFuZCBmaWd1cmUgb3V0IHdoYXQncyBnb2luZyBvbiB3aXRoIHRoaXMgUE1EIGhhbmRsaW5nLiBMZXQncyBzZWUgaG93IHRoaXMgdGllcyBpbnRvIHRoZSBvdmVyYWxsIG1lbW9yeSBwb2xpY3kgbWFuYWdlbWVudC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBjb25uZWN0aW9uIHRvIGFzc2VzcyB0aGUgaW1wYWN0IGFuZCBwb3NzaWJsZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBmaXguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ4MTIsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIiwiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDAzOjEyOjUwLjkxOTg1NjkxMVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzQ0NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vbWVtcG9saWN5LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjg3LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjg3OlxcdHN0YXRpYyBpbnQgcXVldWVfZm9saW9zX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuIDY4ODpcXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIGVuZCwgc3RydWN0IG1tX3dhbGsgKndhbGspXFxuIDY4OTpcXHR7XFxuIDY5MDpcXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHdhbGstXFx1MDAzZXZtYTtcXG4gNjkxOlxcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW87XFxuIDY5MjpcXHRcXHRzdHJ1Y3QgcXVldWVfcGFnZXMgKnFwID0gd2Fsay1cXHUwMDNlcHJpdmF0ZTtcXG4gNjkzOlxcdFxcdHVuc2lnbmVkIGxvbmcgZmxhZ3MgPSBxcC1cXHUwMDNlZmxhZ3M7XFxuIDY5NDpcXHRcXHRwdGVfdCAqcHRlLCAqbWFwcGVkX3B0ZTtcXG4gNjk1OlxcdFxcdHB0ZV90IHB0ZW50O1xcbiA2OTY6XFx0XFx0c3BpbmxvY2tfdCAqcHRsO1xcbiA2OTc6XFx0XFx0aW50IG1heF9uciwgbnI7XFxuIDY5ODpcXHRcXG4gNjk5OlxcdFxcdHB0bCA9IHBtZF90cmFuc19odWdlX2xvY2socG1kLCB2bWEpO1xcbiA3MDA6XFx0XFx0aWYgKHB0bCkge1xcbiA3MDE6XFx0XFx0XFx0cXVldWVfZm9saW9zX3BtZChwbWQsIHdhbGspO1xcbiA3MDI6XFx0XFx0XFx0c3Bpbl91bmxvY2socHRsKTtcXG4gNzAzOlxcdFxcdFxcdGdvdG8gb3V0O1xcbiA3MDQ6XFx0XFx0fVxcbiA3MDU6XFx0XFxuIDcwNjpcXHRcXHRtYXBwZWRfcHRlID0gcHRlID0gcHRlX29mZnNldF9tYXBfbG9jayh3YWxrLVxcdTAwM2VtbSwgcG1kLCBhZGRyLCBcXHUwMDI2cHRsKTtcXG4gNzA3OlxcdFxcdGlmICghcHRlKSB7XFxuIDcwODpcXHRcXHRcXHR3YWxrLVxcdTAwM2VhY3Rpb24gPSBBQ1RJT05fQUdBSU47XFxuIDcwOTpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gNzEwOlxcdFxcdH1cXG4gNzExOlxcdFxcdGZvciAoOyBhZGRyICE9IGVuZDsgcHRlICs9IG5yLCBhZGRyICs9IG5yICogUEFHRV9TSVpFKSB7XFxuIDcxMjpcXHRcXHRcXHRtYXhfbnIgPSAoZW5kIC0gYWRkcikgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVDtcXG4gNzEzOlxcdFxcdFxcdG5yID0gMTtcXG4gNzE0OlxcdFxcdFxcdHB0ZW50ID0gcHRlcF9nZXQocHRlKTtcXG4gNzE1OlxcdFxcdFxcdGlmIChwdGVfbm9uZShwdGVudCkpXFxuIDcxNjpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gNzE3OlxcdFxcdFxcdGlmICghcHRlX3ByZXNlbnQocHRlbnQpKSB7XFxuIDcxODpcXHRcXHRcXHRcXHRjb25zdCBzb2Z0bGVhZl90IGVudHJ5ID0gc29mdGxlYWZfZnJvbV9wdGUocHRlbnQpO1xcbiA3MTk6XFx0XFxuIDcyMDpcXHRcXHRcXHRcXHRpZiAoc29mdGxlYWZfaXNfbWlncmF0aW9uKGVudHJ5KSlcXG4gNzIxOlxcdFxcdFxcdFxcdFxcdHFwLVxcdTAwM2Vucl9mYWlsZWQrKztcXG4gNzIyOlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiA3MjM6XFx0XFx0XFx0fVxcbiA3MjQ6XFx0XFx0XFx0Zm9saW8gPSB2bV9ub3JtYWxfZm9saW8odm1hLCBhZGRyLCBwdGVudCk7XFxuIDcyNTpcXHRcXHRcXHRpZiAoIWZvbGlvIHx8IGZvbGlvX2lzX3pvbmVfZGV2aWNlKGZvbGlvKSlcXG4gNzI2OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiA3Mjc6XFx0XFx0XFx0aWYgKGZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pIFxcdTAwMjZcXHUwMDI2IG1heF9uciAhPSAxKVxcbiA3Mjg6XFx0XFx0XFx0XFx0bnIgPSBmb2xpb19wdGVfYmF0Y2goZm9saW8sIHB0ZSwgcHRlbnQsIG1heF9ucik7XFxuIDcyOTpcXHRcXHRcXHQvKlxcbiA3MzA6XFx0XFx0XFx0ICogdm1fbm9ybWFsX2ZvbGlvKCkgZmlsdGVycyBvdXQgemVybyBwYWdlcywgYnV0IHRoZXJlIG1pZ2h0XFxuIDczMTpcXHRcXHRcXHQgKiBzdGlsbCBiZSByZXNlcnZlZCBmb2xpb3MgdG8gc2tpcCwgcGVyaGFwcyBpbiBhIFZEU08uXFxuIDczMjpcXHRcXHRcXHQgKi9cXG4gNzMzOlxcdFxcdFxcdGlmIChmb2xpb190ZXN0X3Jlc2VydmVkKGZvbGlvKSlcXG4gNzM0OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiA3MzU6XFx0XFx0XFx0aWYgKCFxdWV1ZV9mb2xpb19yZXF1aXJlZChmb2xpbywgcXApKVxcbiA3MzY6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDAzOjEyOjUwLjkyMDI5NTEzMVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNzYwMzUxNzU0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqQW5hbHl6aW5nIHRoZSBgcXVldWVfZm9saW9zX3BtZGAgRnVuY3Rpb24qKlxuXG5BbHJpZ2h0LCBzbyBgcXVldWVfZm9saW9zX3BtZGAgaXMgdGhlIGZ1bmN0aW9uIHRoYXQgZ2V0cyBjYWxsZWQgKmFmdGVyKiBgcG1kX3RyYW5zX2h1Z2VfbG9ja2AgZmluYWxseSBncmFudHMgdXMgdGhlIGxvY2suIFRoYXQncyB0aGUgY3JpdGljYWwganVuY3R1cmUuIE5vdywgbGV0J3MgY2lyY2xlIGJhY2sgYW5kIHJlYWxseSBkaWcgaW50byB0aGUgcHVycG9zZSBhbmQgbWVjaGFuaWNzIG9mIGBxdWV1ZV9mb2xpb3NfcG1kYC4gSSBuZWVkIHRvIGZ1bGx5IGdyYXNwIHdoYXQncyBoYXBwZW5pbmcgKndpdGhpbiogdGhhdCBmdW5jdGlvbiwgZ2l2ZW4gaXRzIHBsYWNlIGluIHRoaXMgY3J1Y2lhbCBtZW1vcnkgbWFuYWdlbWVudCBwYXRoLiBMZXQncyByZXZpc2l0IGl0IHdpdGggYSBmcmVzaCBleWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYwODEsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDAzOjEzOjA4LjUyMzgxNTU2MloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODgzOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vbWVtcG9saWN5LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjUzLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjUzOlxcdHN0YXRpYyB2b2lkIHF1ZXVlX2ZvbGlvc19wbWQocG1kX3QgKnBtZCwgc3RydWN0IG1tX3dhbGsgKndhbGspXFxuIDY1NDpcXHR7XFxuIDY1NTpcXHRcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xcbiA2NTY6XFx0XFx0c3RydWN0IHF1ZXVlX3BhZ2VzICpxcCA9IHdhbGstXFx1MDAzZXByaXZhdGU7XFxuIDY1NzpcXHRcXHRwbWRfdCBwbWR2YWwgPSAqcG1kO1xcbiA2NTg6XFx0XFxuIDY1OTpcXHRcXHRpZiAodW5saWtlbHkoIXBtZF9wcmVzZW50KHBtZHZhbCkpKSB7XFxuIDY2MDpcXHRcXHRcXHRpZiAocG1kX2lzX21pZ3JhdGlvbl9lbnRyeShwbWR2YWwpKVxcbiA2NjE6XFx0XFx0XFx0XFx0cXAtXFx1MDAzZW5yX2ZhaWxlZCsrO1xcbiA2NjI6XFx0XFx0XFx0cmV0dXJuO1xcbiA2NjM6XFx0XFx0fVxcbiA2NjQ6XFx0XFx0Zm9saW8gPSBwbWRfZm9saW8ocG1kdmFsKTtcXG4gNjY1OlxcdFxcdGlmIChpc19odWdlX3plcm9fZm9saW8oZm9saW8pKSB7XFxuIDY2NjpcXHRcXHRcXHR3YWxrLVxcdTAwM2VhY3Rpb24gPSBBQ1RJT05fQ09OVElOVUU7XFxuIDY2NzpcXHRcXHRcXHRyZXR1cm47XFxuIDY2ODpcXHRcXHR9XFxuIDY2OTpcXHRcXHRpZiAoIXF1ZXVlX2ZvbGlvX3JlcXVpcmVkKGZvbGlvLCBxcCkpXFxuIDY3MDpcXHRcXHRcXHRyZXR1cm47XFxuIDY3MTpcXHRcXHRpZiAoIShxcC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiAoTVBPTF9NRl9NT1ZFIHwgTVBPTF9NRl9NT1ZFX0FMTCkpIHx8XFxuIDY3MjpcXHRcXHQgICAgIXZtYV9taWdyYXRhYmxlKHdhbGstXFx1MDAzZXZtYSkgfHxcXG4gNjczOlxcdFxcdCAgICAhbWlncmF0ZV9mb2xpb19hZGQoZm9saW8sIHFwLVxcdTAwM2VwYWdlbGlzdCwgcXAtXFx1MDAzZWZsYWdzKSlcXG4gNjc0OlxcdFxcdFxcdHFwLVxcdTAwM2Vucl9mYWlsZWQrKztcXG4gNjc1OlxcdH1cXG4gNjc2OlxcdFxcbiA2Nzc6XFx0LypcXG4gNjc4OlxcdCAqIFNjYW4gdGhyb3VnaCBmb2xpb3MsIGNoZWNraW5nIGlmIHRoZXkgc2F0aXNmeSB0aGUgcmVxdWlyZWQgY29uZGl0aW9ucyxcXG4gNjc5OlxcdCAqIG1vdmluZyB0aGVtIGZyb20gTFJVIHRvIGxvY2FsIHBhZ2VsaXN0IGZvciBtaWdyYXRpb24gaWYgdGhleSBkbyAob3Igbm90KS5cXG4gNjgwOlxcdCAqXFxuIDY4MTpcXHQgKiBxdWV1ZV9mb2xpb3NfcHRlX3JhbmdlKCkgaGFzIHR3byBwb3NzaWJsZSByZXR1cm4gdmFsdWVzOlxcbiA2ODI6XFx0ICogMCAtIGNvbnRpbnVlIHdhbGtpbmcgdG8gc2NhbiBmb3IgbW9yZSwgZXZlbiBpZiBhbiBleGlzdGluZyBmb2xpbyBvbiB0aGVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMDM6MTM6MDguNTI0MzA2MTAyWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExNzU2NDUyMTAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUE1EIENoZWNrIGluIGBxdWV1ZV9mb2xpb3NfcG1kYCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhpcyBjaGFuZ2UgaW4gYHF1ZXVlX2ZvbGlvc19wbWRgLiBUaGUgY29yZSBvZiBpdCBzZWVtcyB0byBiZSBhIGNvbmRpdGlvbmFsIHJlLWFycmFuZ2VtZW50LiBQcmV2aW91c2x5LCB0aGUgY29kZSBjaGVja2VkIGlmIGEgUE1EIGVudHJ5IHdhcyBhIG1pZ3JhdGlvbiBlbnRyeS4gSWYgaXQgKndhc24ndCogYSBtaWdyYXRpb24gZW50cnksIGl0IHdvdWxkIGJsaW5kbHkgYXR0ZW1wdCB0byByZXRyaWV2ZSB0aGUgZm9saW8gdXNpbmcgYHBtZF9mb2xpbygqcG1kKWAuIE5vdywgaXQncyBjaGVja2luZyBgIXBtZF9wcmVzZW50KHBtZHZhbClgIGZpcnN0LiBJZiB0aGUgUE1EIGlzbid0ICpwcmVzZW50KiAobWVhbmluZywgZm9yIGluc3RhbmNlLCBpdCdzIGEgZGV2aWNlIHByaXZhdGUgZW50cnkgb3Igc29tZSBvdGhlciBhYnNlbnQgZW50cnkpLCBpdCBpbW1lZGlhdGVseSBleGl0cyB0aGUgZnVuY3Rpb24uIFRoaXMgaXMgYSBjcnVjaWFsIGltcHJvdmVtZW50IGZvciBzdGFiaWxpdHkuXG5cblRoZSBvbGQgYmVoYXZpb3Igd2FzIHZ1bG5lcmFibGUsIHNwZWNpZmljYWxseSB3aGVuIHRoZSBQTUQgd2Fzbid0IHByZXNlbnQsIGxlYWRpbmcgdG8gYHBtZF9mb2xpb2AgcG90ZW50aWFsbHkgY3Jhc2hpbmcgb3IgcmV0dXJuaW5nIGdhcmJhZ2UgZGF0YSwgb3IgYXR0ZW1wdGluZyB0byBkZXJlZmVyZW5jZSBhbiBpbnZhbGlkIHBvaW50ZXIuIFRoaXMgbmV3IGNoZWNrIGVmZmVjdGl2ZWx5IGFjdHMgYXMgYSBzYWZldHkgbmV0LCBhdm9pZGluZyB0aG9zZSBpc3N1ZXMuIFRoZSBjaGFuZ2UgcHJldmVudHMgYXR0ZW1wdHMgdG8gdXNlIGFuIGludmFsaWQgUE1EIHZhbHVlLlxuXG5XYWl0LCBsb29raW5nIGF0IGl0LCBpdCBhcHBlYXJzIGBwbWRfdHJhbnNfaHVnZV9sb2NrYCBvbmx5IHJldHVybnMgYSBsb2NrIGlmIHRoZSBQTUQgaXMgYSB0cmFucyBodWdlIFBNRCBvciBhIGRldm1hcCBQTUQuIEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZSBjaGVjayB0aGF0IGFzc3VtcHRpb24gYW5kIHZlcmlmeSB0aGUgYmVoYXZpb3Igb2YgdGhhdCBmdW5jdGlvbiBhcyB3ZWxsLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NzkxLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjg0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMDM6MTM6MjAuMjgwNzYxMDY1WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODQ4NzA2NTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicG1kX3RyYW5zX2h1Z2VfbG9ja1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vdmFkZHIuYz0yNjc9c3RhdGljIGludCBkYW1vbl9ta29sZF9wbWRfZW50cnkocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0vZGFtb24vdmFkZHIuYy0yNzItXFxubW0vZGFtb24vdmFkZHIuYzoyNzM6XFx0cHRsID0gcG1kX3RyYW5zX2h1Z2VfbG9jayhwbWQsIHdhbGstXFx1MDAzZXZtYSk7XFxubW0vZGFtb24vdmFkZHIuYy0yNzQtXFx0aWYgKHB0bCkge1xcbi0tXFxubW0vZGFtb24vdmFkZHIuYz0zOTA9c3RhdGljIGludCBkYW1vbl95b3VuZ19wbWRfZW50cnkocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0vZGFtb24vdmFkZHIuYy0zOTktI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbm1tL2RhbW9uL3ZhZGRyLmM6NDAwOlxcdHB0bCA9IHBtZF90cmFuc19odWdlX2xvY2socG1kLCB3YWxrLVxcdTAwM2V2bWEpO1xcbm1tL2RhbW9uL3ZhZGRyLmMtNDAxLVxcdGlmIChwdGwpIHtcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmM9NjU0PXN0YXRpYyBpbnQgZGFtb3NfdmFfbWlncmF0ZV9wbWRfZW50cnkocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0vZGFtb24vdmFkZHIuYy02NjYtI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbm1tL2RhbW9uL3ZhZGRyLmM6NjY3OlxcdHB0bCA9IHBtZF90cmFuc19odWdlX2xvY2socG1kLCB3YWxrLVxcdTAwM2V2bWEpO1xcbm1tL2RhbW9uL3ZhZGRyLmMtNjY4LVxcdGlmIChwdGwpIHtcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmM9ODE0PXN0YXRpYyBpbnQgZGFtb3NfdmFfc3RhdF9wbWRfZW50cnkocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0vZGFtb24vdmFkZHIuYy04MjYtI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbm1tL2RhbW9uL3ZhZGRyLmM6ODI3OlxcdHB0bCA9IHBtZF90cmFuc19odWdlX2xvY2socG1kLCB2bWEpO1xcbm1tL2RhbW9uL3ZhZGRyLmMtODI4LVxcdGlmIChwdGwpIHtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9MjI4MD1ib29sIG1hZHZpc2VfZnJlZV9odWdlX3BtZChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMjI5MC1cXG5tbS9odWdlX21lbW9yeS5jOjIyOTE6XFx0cHRsID0gcG1kX3RyYW5zX2h1Z2VfbG9jayhwbWQsIHZtYSk7XFxubW0vaHVnZV9tZW1vcnkuYy0yMjkyLVxcdGlmICghcHRsKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0yNDI2PWJvb2wgemFwX2h1Z2VfcG1kKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0yNDM3LVxcbm1tL2h1Z2VfbWVtb3J5LmM6MjQzODpcXHRwdGwgPSBfX3BtZF90cmFuc19odWdlX2xvY2socG1kLCB2bWEpO1xcbm1tL2h1Z2VfbWVtb3J5LmMtMjQzOS1cXHRpZiAoIXB0bClcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9MjUwNT1ib29sIG1vdmVfaHVnZV9wbWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgb2xkX2FkZHIsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTI1MjYtXFx0ICovXFxubW0vaHVnZV9tZW1vcnkuYzoyNTI3OlxcdG9sZF9wdGwgPSBfX3BtZF90cmFuc19odWdlX2xvY2sob2xkX3BtZCwgdm1hKTtcXG5tbS9odWdlX21lbW9yeS5jLTI1MjgtXFx0aWYgKG9sZF9wdGwpIHtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9MjYwMj1pbnQgY2hhbmdlX2h1Z2VfcG1kKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0yNjE4LVxcbm1tL2h1Z2VfbWVtb3J5LmM6MjYxOTpcXHRwdGwgPSBfX3BtZF90cmFuc19odWdlX2xvY2socG1kLCB2bWEpO1xcbm1tL2h1Z2VfbWVtb3J5LmMtMjYyMC1cXHRpZiAoIXB0bClcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9Mjc1MD1pbnQgbW92ZV9wYWdlc19odWdlX3BtZChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKmRzdF9wbWQsIHBtZF90ICpzcmNfcG1kLCBwbWRfdCBkc3RfcG1kdmFsLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0yODY4LSAqL1xcbm1tL2h1Z2VfbWVtb3J5LmM6Mjg2OTpzcGlubG9ja190ICpfX3BtZF90cmFuc19odWdlX2xvY2socG1kX3QgKnBtZCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxubW0vaHVnZV9tZW1vcnkuYy0yODcwLXtcXG4tLVxcbm1tL21hZHZpc2UuYz0zNTM9c3RhdGljIGludCBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2UocG1kX3QgKnBtZCxcXG4tLVxcbm1tL21hZHZpc2UuYy0zODEtXFx0XFx0dGxiX2NoYW5nZV9wYWdlX3NpemUodGxiLCBIUEFHRV9QTURfU0laRSk7XFxubW0vbWFkdmlzZS5jOjM4MjpcXHRcXHRwdGwgPSBwbWRfdHJhbnNfaHVnZV9sb2NrKHBtZCwgdm1hKTtcXG5tbS9tYWR2aXNlLmMtMzgzLVxcdFxcdGlmICghcHRsKVxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYz03NDI9c3RhdGljIGludCBod3BvaXNvbl9wdGVfcmFuZ2UocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtNzQ5LVxcbm1tL21lbW9yeS1mYWlsdXJlLmM6NzUwOlxcdHB0bCA9IHBtZF90cmFuc19odWdlX2xvY2socG1kcCwgd2Fsay1cXHUwMDNldm1hKTtcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTc1MS1cXHRpZiAocHRsKSB7XFxuLS1cXG5tbS9tZW1wb2xpY3kuYz02ODc9c3RhdGljIGludCBxdWV1ZV9mb2xpb3NfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbm1tL21lbXBvbGljeS5jLTY5OC1cXG5tbS9tZW1wb2xpY3kuYzo2OTk6XFx0cHRsID0gcG1kX3RyYW5zX2h1Z2VfbG9jayhwbWQsIHZtYSk7XFxubW0vbWVtcG9saWN5LmMtNzAwLVxcdGlmIChwdGwpIHtcXG4tLVxcbm1tL21pbmNvcmUuYz0xNjM9c3RhdGljIGludCBtaW5jb3JlX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbi0tXFxubW0vbWluY29yZS5jLTE3Mi1cXG5tbS9taW5jb3JlLmM6MTczOlxcdHB0bCA9IHBtZF90cmFuc19odWdlX2xvY2socG1kLCB2bWEpO1xcbm1tL21pbmNvcmUuYy0xNzQtXFx0aWYgKHB0bCkge1xcbi0tXFxubW0vbWxvY2suYz0zNTA9c3RhdGljIGludCBtbG9ja19wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0vbWxvY2suYy0zNjEtXFxubW0vbWxvY2suYzozNjI6XFx0cHRsID0gcG1kX3RyYW5zX2h1Z2VfbG9jayhwbWQsIHZtYSk7XFxubW0vbWxvY2suYy0zNjMtXFx0aWYgKHB0bCkge1xcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYz0xOTM0PXN0YXRpYyBzc2l6ZV90IG1vdmVfcGFnZXMoc3RydWN0IHVzZXJmYXVsdGZkX2N0eCAqY3R4LCB1bnNpZ25lZCBsb25nIGRzdF9zdGFydCxcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmMtMjAyMi1cXG5tbS91c2VyZmF1bHRmZC5jOjIwMjM6XFx0XFx0cHRsID0gcG1kX3RyYW5zX2h1Z2VfbG9jayhzcmNfcG1kLCBzcmNfdm1hKTtcXG5tbS91c2VyZmF1bHRmZC5jLTIwMjQtXFx0XFx0aWYgKHB0bCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQwMzoxMzoyMC44NjU2MzkwNzhaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE4NTY3NDg0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIFRIUCBMb2NrKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoZSBsb2NrIGFzc29jaWF0ZWQgd2l0aCBUcmFuc3BhcmVudCBIdWdlIFBhZ2VzIChUSFApIGFuZCBuZWVkIHRvIHBpbnBvaW50IHdoZXJlIGl0J3MgZGVmaW5lZCBhbmQgaGFuZGxlZC4gTXkgZmlyc3QgbW92ZSBpcyB0byBsb29rIGF0IGBfX3BtZF90cmFuc19odWdlX2xvY2tgLiBUaGF0IGZ1bmN0aW9uIG5hbWUgZmVlbHMgZmFtaWxpYXIgYXMgYSBwb3RlbnRpYWwgY2FuZGlkYXRlIGZvciB0aGUgY29yZSBsb2NrLCBzbyBJJ2xsIHN0YXJ0IHdpdGggdGhlIGltcGxlbWVudGF0aW9uIGluIGBtbS9odWdlX21lbW9yeS5jYC4gQWx0ZXJuYXRpdmVseSwgaXQgY291bGQgYmUgYSBzaW1wbGVyIGRlY2xhcmF0aW9uIGluIGFuIGluY2x1ZGUgZmlsZS4gSSB3aWxsIGFsc28gY2hlY2sgYHBtZF90cmFuc19odWdlX2xvY2tgIGluIGBpbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaGAgYXMgYSBsaWtlbHkgc291cmNlLiBMZXQncyBzZWUgd2hhdCB0aGF0IHJldmVhbHMgYWJvdXQgdGhlIGNyaXRpY2FsIHNlY3Rpb24gaXQgcHJvdGVjdHMgYW5kIHRoZSBvdmVyYWxsIFRIUCBtYW5hZ2VtZW50IHN0cmF0ZWd5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MTQwLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMDM6MTM6MjQuMDUxMzE2NDg3WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTY3ODQ5MjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicG1kX3RyYW5zX2h1Z2VfbG9ja1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaD00OTY9dm9pZCB2bWFfYWRqdXN0X3RyYW5zX2h1Z2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNDk3LVxcdFxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgZW5kLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKm5leHQpO1xcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjQ5ODpzcGlubG9ja190ICpfX3BtZF90cmFuc19odWdlX2xvY2socG1kX3QgKnBtZCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpO1xcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTQ5OS1zcGlubG9ja190ICpfX3B1ZF90cmFuc19odWdlX2xvY2socHVkX3QgKnB1ZCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNTAxLS8qIG1tYXBfbG9jayBtdXN0IGJlIGhlbGQgb24gZW50cnkgKi9cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDo1MDI6c3RhdGljIGlubGluZSBzcGlubG9ja190ICpwbWRfdHJhbnNfaHVnZV9sb2NrKHBtZF90ICpwbWQsXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNTAzLVxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNTA1LVxcdGlmIChwbWRfaXNfaHVnZSgqcG1kKSlcXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDo1MDY6XFx0XFx0cmV0dXJuIF9fcG1kX3RyYW5zX2h1Z2VfbG9jayhwbWQsIHZtYSk7XFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNTA3LVxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg9NzA5PXN0YXRpYyBpbmxpbmUgdm9pZCB2bWFfYWRqdXN0X3RyYW5zX2h1Z2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC03MTQtfVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjcxNTpzdGF0aWMgaW5saW5lIHNwaW5sb2NrX3QgKnBtZF90cmFuc19odWdlX2xvY2socG1kX3QgKnBtZCxcXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC03MTYtXFx0XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDAzOjEzOjI0LjMwODExMTQwMloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMjM3MTQ3MDYwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUE1EIFN0YXRlcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYHBtZF9pc19odWdlKCpwbWQpYCBmdW5jdGlvbiBjYWxsLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJJcyB0aGlzIGEgaHVnZSBQTUQ/XCIgVGhlIG5leHQgdGhpbmcgSSdtIGNvbnNpZGVyaW5nIGlzLCBpZiBpdCdzIGh1Z2UsIGlzIHRoZXJlIGFueSBwb3NzaWJpbGl0eSB0aGF0IGl0IGNvdWxkIGFsc28gYmUgYSBtaWdyYXRpb24gZW50cnk/IEkga25vdyB0aGVyZSdzIGEgZGlzdGluY3Rpb24gaGVyZS5cblxuWWVzLCB0aGVyZSdzIGBwbWRfaXNfbWlncmF0aW9uX2VudHJ5YCwgc28gdGhhdCB0YWtlcyBjYXJlIG9mIHRoYXQgcG9zc2liaWxpdHkuIEFuZCBpZiBpdCBfaXNfIGEgbWlncmF0aW9uIGVudHJ5LCBgcG1kX3ByZXNlbnRgIHdpbGwgZGVmaW5pdGVseSByZXR1cm4gZmFsc2UuIFRoYXQgbWFrZXMgc2Vuc2UsIGJ1dCB0aGVuIGl0IGhpdHMgbWU6IEhvbGQgb24gYSBzZWNvbmQsIGlmIGBwbWRfcHJlc2VudGAgaXMgZmFsc2UsIGlzbid0IGl0IHN0aWxsIHBvc3NpYmxlIGZvciBgcG1kX2lzX2h1Z2VgIHRvIHJldHVybiB0cnVlPyBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQuIEknbSBnb2luZyB0byBkb3VibGUgY2hlY2sgYHBtZF9pc19odWdlYCBhZ2FpbiB0byBlbnN1cmUgSSB1bmRlcnN0YW5kIHRoZSBsb2dpYy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTg2MSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQwMzoxMzo0Ni42Nzk1ODU1MThaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5NjU5OTUyMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwbWRfaXNfaHVnZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaD00MzE9dm9pZCBfX3NwbGl0X2h1Z2VfcG1kKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBwbWRfdCAqcG1kLFxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNDM0LS8qKlxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjQzNTogKiBwbWRfaXNfaHVnZSgpIC0gSXMgdGhpcyBQTUQgZWl0aGVyIGEgaHVnZSBQTUQgZW50cnkgb3IgYSBzb2Z0d2FyZSBsZWFmIGVudHJ5P1xcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTQzNi0gKiBAcG1kOiBUaGUgUE1EIHRvIGNoZWNrLlxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNDQ0LSAqL1xcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjQ0NTpzdGF0aWMgaW5saW5lIGJvb2wgcG1kX2lzX2h1Z2UocG1kX3QgcG1kKVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTQ0Ni17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC00NjItXFx0XFx0cG1kX3QgKl9fX19wbWQgPSAoX19wbWQpO1xcdFxcdFxcdFxcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDo0NjM6XFx0XFx0aWYgKHBtZF9pc19odWdlKCpfX19fcG1kKSlcXHRcXHRcXHRcXHRcXFxcXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNDY0LVxcdFxcdFxcdF9fc3BsaXRfaHVnZV9wbWQoX192bWEsIF9fcG1kLCBfX2FkZHJlc3MsXFx0XFxcXFxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg9NTAyPXN0YXRpYyBpbmxpbmUgc3BpbmxvY2tfdCAqcG1kX3RyYW5zX2h1Z2VfbG9jayhwbWRfdCAqcG1kLFxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNTA0LXtcXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDo1MDU6XFx0aWYgKHBtZF9pc19odWdlKCpwbWQpKVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTUwNi1cXHRcXHRyZXR1cm4gX19wbWRfdHJhbnNfaHVnZV9sb2NrKHBtZCwgdm1hKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oPTc4ND1zdGF0aWMgaW5saW5lIHN0cnVjdCBmb2xpbyAqZ2V0X3BlcnNpc3RlbnRfaHVnZV96ZXJvX2ZvbGlvKHZvaWQpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC03ODgtXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6Nzg5OnN0YXRpYyBpbmxpbmUgYm9vbCBwbWRfaXNfaHVnZShwbWRfdCBwbWQpXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNzkwLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMDM6MTM6NDcuMjc2MTkxNjc5WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzNzU5NDUwNzg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB3aGF0IEknbSBsb29raW5nIGF0OlxuXG4qKkRlY29uc3RydWN0aW5nIGBwbWRfaXNfaHVnZWAqKlxuXG5BbHJpZ2h0LCBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgYHBtZF9pc19odWdlYCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGxvZ2ljIGFuZCBob3cgaXQgZGV0ZXJtaW5lcyBpZiBhIHBhcnRpY3VsYXIgcGFnZSBtYXAgbGV2ZWwgZGlyZWN0b3J5IChQTUQpIGVudHJ5IHJlcHJlc2VudHMgYSBodWdlIHBhZ2UuIEknbSBnb2luZyB0byBxdWlja2x5IHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQg4oCTIFBNRHMsIHBhZ2UgdGFibGVzLCB0aGUgaW1wbGljYXRpb25zIGZvciBtZW1vcnkgbWFuYWdlbWVudC4uLiB3aGF0IGZsYWdzIGFyZSB3ZSBjaGVja2luZz8gQXJlIHdlIGxvb2tpbmcgYXQgc3BlY2lmaWMgYml0cyB3aXRoaW4gdGhlIFBNRCBpdHNlbGYsIG9yIGFyZSB3ZSByZWZlcmVuY2luZyBzb21lIG90aGVyIGFzc29jaWF0ZWQgbWV0YWRhdGE/IEkgZXhwZWN0IHRvIHNlZSBiaXR3aXNlIG9wZXJhdGlvbnMsIGxpa2VseSBpbnZvbHZpbmcgbWFza3MgYW5kIHNoaWZ0cywgdG8gZXh0cmFjdCBhbmQgZXZhbHVhdGUgdGhlIHJlbGV2YW50IGZsYWdzLiBJIGhvcGUgdGhlIGltcGxlbWVudGF0aW9uIGlzIHJlYXNvbmFibHkgb3B0aW1pemVkIGZvciBwZXJmb3JtYW5jZTsgdGhpcyBpcyBhIGNyaXRpY2FsIGZ1bmN0aW9uIGZvciBwYWdlIHRhYmxlIGxvb2t1cHMsIHNvIGl0IG5lZWRzIHRvIGJlIGZhc3QuIEkgd2FudCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvYnZpb3VzIGdvdGNoYXMgb3IgcG90ZW50aWFsIGFyZWFzIGZvciBpbXByb3ZlbWVudC4gTGV0J3Mgc2VlIGhvdyB0aGV5IGhhbmRsZSBkaWZmZXJlbnQgYXJjaGl0ZWN0dXJlcywgdG9vIOKAkyBJIGJldCB0aGVyZSdzIHNvbWUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gb3IgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGNvZGUgaW4gdGhlcmUuIEknbGwgbmVlZCB0byByZW1lbWJlciB0aGUgYXJjaGl0ZWN0dXJhbCBkaWZmZXJlbmNlcyBiZXR3ZWVuIFBNRCBmb3JtYXRzIGFuZCBob3cgdGhlc2UgbWlnaHQgYmUgcmVmbGVjdGVkIGluIHRoZSBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDczMSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDAzOjE0OjAxLjAzNTY0NTQ5NloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTU1ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9odWdlX21tLmhcIixcbiAgXCJGaXJzdExpbmVcIjogNDQ1LFxuICBcIkxpbmVDb3VudFwiOiAxNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDQ1OlxcdHN0YXRpYyBpbmxpbmUgYm9vbCBwbWRfaXNfaHVnZShwbWRfdCBwbWQpXFxuIDQ0NjpcXHR7XFxuIDQ0NzpcXHRcXHRpZiAocG1kX3ByZXNlbnQocG1kKSkge1xcbiA0NDg6XFx0XFx0XFx0cmV0dXJuIHBtZF90cmFuc19odWdlKHBtZCk7XFxuIDQ0OTpcXHRcXHR9IGVsc2UgaWYgKCFwbWRfbm9uZShwbWQpKSB7XFxuIDQ1MDpcXHRcXHRcXHQvKlxcbiA0NTE6XFx0XFx0XFx0ICogTm9uLXByZXNlbnQgUE1EcyBtdXN0IGJlIHZhbGlkIGh1Z2Ugbm9uLXByZXNlbnQgZW50cmllcy4gV2VcXG4gNDUyOlxcdFxcdFxcdCAqIGNhbm5vdCBhc3NlcnQgdGhhdCBoZXJlIGR1ZSB0byBoZWFkZXIgZGVwZW5kZW5jeSBpc3N1ZXMuXFxuIDQ1MzpcXHRcXHRcXHQgKi9cXG4gNDU0OlxcdFxcdFxcdHJldHVybiB0cnVlO1xcbiA0NTU6XFx0XFx0fVxcbiA0NTY6XFx0XFxuIDQ1NzpcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDQ1ODpcXHR9XFxuIDQ1OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMDM6MTQ6MDEuMDM1NzYzNjc2WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyMjM5ODMwMjI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEJ1ZyBGaXg6IFByZXZlbnRpbmcgQ3Jhc2hlcyBpbiBgcXVldWVfZm9saW9zX3BtZGAqKlxuXG5Pa2F5LCBzbyBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdW5kZXJzdGFuZGluZyBvZiBgcG1kX2lzX2h1Z2VgIGlzIGtleSBoZXJlLiBJdCByZXR1cm5zIHRydWUgd2hlbiBhIFBhZ2UgTWFwIERpcmVjdG9yeSAoUE1EKSBpc24ndCBwcmVzZW50LCAqYW5kKiBpdCdzIG5vdCBhIFwibm9uZVwiIGVudHJ5LiBUaGlzIHNlZW1zIHRvIGNvdmVyIHNpdHVhdGlvbnMgbGlrZSBtaWdyYXRpb24gZW50cmllcyBhbmQsIG1vcmUgaW1wb3J0YW50bHkgaW4gdGhpcyBjYXNlLCBkZXZpY2UgcHJpdmF0ZSBlbnRyaWVzLiBJdCBhcHBlYXJzIHRoZSBjb2RlIHdhcyBwcmV2aW91c2x5IGdldHRpbmcgdHJpcHBlZCB1cCBvbiB0aGVzZSBsYXR0ZXIgY2FzZXMgd2hlbiBjYWxsaW5nIGBxdWV1ZV9mb2xpb3NfcG1kYC5cblxuSSBzZWUgdGhlIGZpeC4gVGhlIGZ1bmN0aW9uIGBxdWV1ZV9mb2xpb3NfcG1kYCB3YXMgb3JpZ2luYWxseSBjYWxsaW5nIGBwbWRfZm9saW9gIGRpcmVjdGx5IG9uIHRoZXNlIG5vbi1wcmVzZW50IFBNRHMuIElmIGl0IHdhcyBhIGRldmljZSBwcml2YXRlIGVudHJ5LCB0aGlzIGNvdWxkIGxlYWQgdG8gY3Jhc2hlcyBvciB1bmRlZmluZWQgYmVoYXZpb3IsIGJlY2F1c2UgYHBtZF9mb2xpb2AgaXNuJ3QgZXhwZWN0aW5nIHRvIGhhbmRsZSB0aGF0IGtpbmQgb2YgZGF0YS4gVGhlIG9yaWdpbmFsIGNoZWNrIG9ubHkgbG9va2VkIGZvciBtaWdyYXRpb24gZW50cmllcywgYnV0IG5vdCBvdGhlciBub24tcHJlc2VudCBlbnRyaWVzLlxuXG5UaGUgZml4IG5vdyBhZGRzIGEgY3J1Y2lhbCBgIXBtZF9wcmVzZW50YCBjaGVjayAqYmVmb3JlKiBjYWxsaW5nIGBwbWRfZm9saW9gLiBUaGlzIGFkZGl0aW9uIGNvcnJlY3RseSBoYW5kbGVzIGRldmljZSBwcml2YXRlIGVudHJpZXMuIElmIHRoZSBQTUQgaXNuJ3QgcHJlc2VudCwgdGhlIGNvZGUgd2lsbCBjaGVjayBpZiBpdCAqaXMqIGEgbWlncmF0aW9uIGVudHJ5LiBPdGhlcndpc2UsIGl0IGV4aXRzIGVhcmx5LiBUaGlzIGVmZmVjdGl2ZWx5IHByZXZlbnRzIHRoZSBwb3RlbnRpYWwgY3Jhc2ggb3IgZ2FyYmFnZSByZXR1cm4uXG5cblRoZSBpbXBvcnRhbnQgcXVlc3Rpb24gbm93IGlzIGlmIHRoaXMgaXMgd29ydGggZnV6emluZy4gSSdkIHNheSwgeWVzLCBhYnNvbHV0ZWx5LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBidWcgZml4LiBgcXVldWVfZm9saW9zX3BtZGAgaXMgdXNlZCBieSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGZ1bmN0aW9uYWxpdHkgbGlrZSBgbWJpbmRgLCBgc2V0X21lbXBvbGljeWAsIGFuZCBgbWlncmF0ZV9wYWdlc2AuIFRoZSByZWxldmFudCBjb25maWcgb3B0aW9ucyBhcmUgYENPTkZJR19OVU1BYCBhbmQgYENPTkZJR19ERVZJQ0VfUFJJVkFURWAuIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBgQ09ORklHX0RFVklDRV9QUklWQVRFYCBpcyBzZXQgdG8gZW5zdXJlIHRoaXMgY29kZSBpcyBldmVuIGFjdGl2ZS4gXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMjQ1LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDY3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMDM6MTQ6MTMuMjc1NTk3MjgyWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMDA1NzYxNDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX0RFVklDRV9QUklWQVRFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1yZW1hcC5jPTI2Nj12b2lkICptZW1yZW1hcF9wYWdlcyhzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwLCBpbnQgbmlkKVxcbi0tXFxubW0vbWVtcmVtYXAuYy0yODMtXFx0Y2FzZSBNRU1PUllfREVWSUNFX1BSSVZBVEU6XFxubW0vbWVtcmVtYXAuYzoyODQ6XFx0XFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19ERVZJQ0VfUFJJVkFURSkpIHtcXG5tbS9tZW1yZW1hcC5jLTI4NS1cXHRcXHRcXHRXQVJOKDEsIFxcXCJEZXZpY2UgcHJpdmF0ZSBtZW1vcnkgbm90IHN1cHBvcnRlZFxcXFxuXFxcIik7XFxuLS1cXG5tbS9ybWFwLmM9Mjc0MT12b2lkIHRyeV90b19taWdyYXRlKHN0cnVjdCBmb2xpbyAqZm9saW8sIGVudW0gdHR1X2ZsYWdzIGZsYWdzKVxcbi0tXFxubW0vcm1hcC5jLTI3NzgtXFxubW0vcm1hcC5jOjI3Nzk6I2lmZGVmIENPTkZJR19ERVZJQ0VfUFJJVkFURVxcbm1tL3JtYXAuYy0yNzgwLS8qKlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQwMzoxNDoxMy41NzYxODAwNTJaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY5NDAyOTY1NzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIHRoZSBNZW1vcnkgTWFuYWdlbWVudCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSd2ZSBjb25maXJtZWQgdGhhdCBgQ09ORklHX0RFVklDRV9QUklWQVRFYCBpcyBpbmRlZWQgZGVmaW5lZC4gQW5kLCBJIHNlZSwgd2UgYWxzbyBuZWVkIHRvIGhhdmUgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgZW5hYmxlZC4gVGhpcyBtYWtlcyBwZXJmZWN0IHNlbnNlOyBgcXVldWVfZm9saW9zX3BtZGAgaXMgc3BlY2lmaWNhbGx5IHRpZWQgdG8gaHVnZSBQTURzLCBzbyB0aGF0IGRlcGVuZGVuY3kgaXMgY2xlYXIuIE5vdywgbGV0J3MganVzdCBxdWlja2x5IGNoZWNrIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIGBwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnlgIGZ1bmN0aW9uLCBqdXN0IHRvIGVuc3VyZSBvdXIgYXNzdW1wdGlvbnMgYXJlIGNvcnJlY3QsIGFuZCBhbGwgZGVwZW5kZW5jaWVzIGFyZSB3aGVyZSB0aGV5IHNob3VsZCBiZS4gSSB3YW50IHRvIGhhdmUgYSBob2xpc3RpYyB2aWV3IGJlZm9yZSBJIG1vdmUgZm9yd2FyZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIzMjEsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQwMzoxNDo1MC41MTY0Nzk1OTZaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgxOTYwNzk0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9sZWFmb3BzLmg9NTc0PXN0YXRpYyBpbmxpbmUgYm9vbCBwdGVfaXNfdWZmZF9tYXJrZXIocHRlX3QgcHRlKVxcbi0tXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNTkyLS8qKlxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjU5MzogKiBwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnkoKSAtIENoZWNrIGlmIFBNRCBjb250YWlucyBhIGRldmljZSBwcml2YXRlIHN3YXBcXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC01OTQtICogZW50cnkuXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC02MDMtICovXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6NjA0OnN0YXRpYyBpbmxpbmUgYm9vbCBwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnkocG1kX3QgcG1kKVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTYwNS17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC02MTAtXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6NjExOnN0YXRpYyBpbmxpbmUgYm9vbCBwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnkocG1kX3QgcG1kKVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTYxMi17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDAzOjE0OjUxLjMzNjA5Mjk3NloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNDkyNDMxNTA4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyBpZiB0aGV5J3JlIG15IG93bjpcblxuKipBbmFseXppbmcgdGhlIGBwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnlgIERlZmluaXRpb24qKlxuXG5BbHJpZ2h0LCBzbyB0aGUgaW5pdGlhbCB0aG91Z2h0IGlzIGNsZWFybHkgZm9jdXNlZCBvbiBhIHNwZWNpZmljIGZ1bmN0aW9uIGRlZmluaXRpb246IGBwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnlgLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gZGlzc2VjdCB0aGlzLiBXZSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHB1cnBvc2UgYW5kIGhvdyBpdCBmdW5jdGlvbnMgd2l0aGluIHRoZSBsYXJnZXIgY29udGV4dCBvZiB0aGUgc3lzdGVtLiBJJ20gYXNzdW1pbmcsIGdpdmVuIHRoZSBuYW1pbmcgY29udmVudGlvbiwgdGhpcyBoYXMgc29tZXRoaW5nIHRvIGRvIHdpdGggdGhlIFBhZ2UgTWlkZGxlIERpcmVjdG9yeSwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gd2hldGhlciBhbiBlbnRyeSBpcyBjb25zaWRlcmVkIFwiZGV2aWNlIHByaXZhdGVcIi4gVGhlIHRlcm0gXCJkZXZpY2UgcHJpdmF0ZVwiIGlzIGtleSBoZXJlLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoYXQgZW50YWlscyBpbiB0aGlzIGNvbnRleHQuIElzIGl0IGEgZmxhZz8gQSBzcGVjaWZpYyB2YWx1ZT8gQSBjb21iaW5hdGlvbiBvZiBiaXRzPyBJcyBpdCByZWxhdGVkIHRvIERNQSwgTU1JTywgb3Igc29tZSBvdGhlciBhc3BlY3Qgb2YgZGV2aWNlIGFjY2Vzcz8gSSdsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBmdW5jdGlvbidzIGNvZGUgaXRzZWxmIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaXRzIGltcGxlbWVudGF0aW9uIGFuZCB1c2FnZSB3aXRoaW4gdGhlIG92ZXJhbGwgbWVtb3J5IG1hbmFnZW1lbnQgc2NoZW1lLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjc5NSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDAzOjE1OjA2LjI2MDQxMzAzWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MzE0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL2xpbnV4L2xlYWZvcHMuaFwiLFxuICBcIkZpcnN0TGluZVwiOiA1OTMsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1OTM6XFx0ICogcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KCkgLSBDaGVjayBpZiBQTUQgY29udGFpbnMgYSBkZXZpY2UgcHJpdmF0ZSBzd2FwXFxuIDU5NDpcXHQgKiBlbnRyeS5cXG4gNTk1OlxcdCAqIEBwbWQ6IFRoZSBQTUQgdG8gY2hlY2suXFxuIDU5NjpcXHQgKlxcbiA1OTc6XFx0ICogUmV0dXJucyB0cnVlIGlmIHRoZSBQTUQgY29udGFpbnMgYSBzd2FwIGVudHJ5IHRoYXQgcmVwcmVzZW50cyBhIGRldmljZSBwcml2YXRlXFxuIDU5ODpcXHQgKiBwYWdlIG1hcHBpbmcuIFRoaXMgaXMgdXNlZCBmb3Igem9uZSBkZXZpY2UgcHJpdmF0ZSBwYWdlcyB0aGF0IGhhdmUgYmVlblxcbiA1OTk6XFx0ICogc3dhcHBlZCBvdXQgYnV0IHN0aWxsIG5lZWQgc3BlY2lhbCBoYW5kbGluZyBkdXJpbmcgdmFyaW91cyBtZW1vcnkgbWFuYWdlbWVudFxcbiA2MDA6XFx0ICogb3BlcmF0aW9ucy5cXG4gNjAxOlxcdCAqXFxuIDYwMjpcXHQgKiBSZXR1cm46IHRydWUgaWYgUE1EIGNvbnRhaW5zIGRldmljZSBwcml2YXRlIGVudHJ5LCBmYWxzZSBvdGhlcndpc2VcXG4gNjAzOlxcdCAqL1xcbiA2MDQ6XFx0c3RhdGljIGlubGluZSBib29sIHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeShwbWRfdCBwbWQpXFxuIDYwNTpcXHR7XFxuIDYwNjpcXHRcXHRyZXR1cm4gc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoc29mdGxlYWZfZnJvbV9wbWQocG1kKSk7XFxuIDYwNzpcXHR9XFxuIDYwODpcXHRcXG4gNjA5OlxcdCNlbHNlICAvKiBDT05GSUdfWk9ORV9ERVZJQ0UgXFx1MDAyNlxcdTAwMjYgQ09ORklHX0FSQ0hfSEFTX1BNRF9TT0ZUTEVBVkVTICovXFxuIDYxMDpcXHRcXG4gNjExOlxcdHN0YXRpYyBpbmxpbmUgYm9vbCBwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnkocG1kX3QgcG1kKVxcbiA2MTI6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQwMzoxNTowNi4yNjA1Nzg3M1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTc3MDA0ODczOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBEZXZpY2UgTWVtb3J5IENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCBsb29rcyBsaWtlIHdlJ3JlIGRpdmluZyBpbnRvIG1lbW9yeSBtYW5hZ2VtZW50IGhlcmUuIEZpcnN0IHRob3VnaHQ6IHdlJ3JlIGdvaW5nIHRvIG5lZWQgYENPTkZJR19aT05FX0RFVklDRWAuIFRoYXQncyBhIGdpdmVuIGZvciBhbnkgbW9kZXJuIGRldmljZSBzZXR1cCwgcmlnaHQ/IEJ1dCBob2xkIG9uIGEgc2Vjb25kLi4uIGlzbid0IGBDT05GSUdfREVWSUNFX1BSSVZBVEVgIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbiBmb3IgY29udHJvbGxpbmcgcHJpdmF0ZSBtZW1vcnkgYWxsb2NhdGlvbiBzcGVjaWZpYyB0byBhIGRldmljZT8gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gZ2V0dGluZyB0aGVzZSB0d28gY29uY2VwdHMgc3RyYWlnaHQgaW4gbXkgaGVhZCBiZWNhdXNlIHRoZXkgY2FuIGluZmx1ZW5jZSBlYWNoIG90aGVyLiBCZXR0ZXIgZG91YmxlLWNoZWNrIHRoZSBLY29uZmlnIGRvY3VtZW50YXRpb24gZm9yIGBDT05GSUdfREVWSUNFX1BSSVZBVEVgLiBMZXQncyBjbGFyaWZ5IGl0cyBleGFjdCBmdW5jdGlvbiBhbmQgZGVwZW5kZW5jaWVzIGJlZm9yZSBtb3ZpbmcgYW55IGZ1cnRoZXIuIFRoaXMgaXMgY3JpdGljYWwgZm9yIGdldHRpbmcgdGhpcyByaWdodC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM0MDQsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDAzOjE1OjM4LjAzMDYzMTcwOFoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzU3NzA3MzA1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBERVZJQ0VfUFJJVkFURVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz0xMjYyPWNvbmZpZyBHRVRfRlJFRV9SRUdJT05cXG4tLVxcbm1tL0tjb25maWctMTI2NC1cXG5tbS9LY29uZmlnOjEyNjU6Y29uZmlnIERFVklDRV9QUklWQVRFXFxubW0vS2NvbmZpZy0xMjY2LVxcdGJvb2wgXFxcIlVuYWRkcmVzc2FibGUgZGV2aWNlIG1lbW9yeSAoR1BVIG1lbW9yeSwgLi4uKVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMDM6MTU6MzguMzg4MzQ0OTczWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE1Mzg5Njc2MDk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqQW5hbHl6aW5nIERldmljZSBQcml2YXRlIFBNRCBIYW5kbGluZyBpbiB0aGUgS2VybmVsKipcblxuUmlnaHQsIHNvIHdlJ3JlIGxvb2tpbmcgYXQgZGV2aWNlIHByaXZhdGUgY29uZmlndXJhdGlvbnMg4oCTIHNwZWNpZmljYWxseSwgYERFVklDRV9QUklWQVRFYC4gSSBuZWVkIHRvIHJlbWVtYmVyIHRoYXQgdGhlIGltcG9ydGFudCBjb25maWdzIHJlbGF0ZWQgdG8gdGhpcyBhcmUgYE5VTUFgLCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLCBhbmQgb2YgY291cnNlLCBgREVWSUNFX1BSSVZBVEVgIGl0c2VsZi4gR290IGl0LlxuXG5Ob3csIHRoZSBjb3JlIGZ1bmN0aW9ucyB0aGF0IHNlZW0gcmVsZXZhbnQgYXJlIGBxdWV1ZV9mb2xpb3NfcG1kYCwgYHF1ZXVlX2ZvbGlvc19wdGVfcmFuZ2VgLCBgbWFkdmlzZV9mcmVlX2h1Z2VfcG1kYCwgYW5kIGBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2VgLiBIbW0sIGEgcXVpY2sgc2tpbSBzaG93cyB0aGF0IHRoZSBgbWFkdmlzZV9gIGZ1bmN0aW9ucyBhcmUgdGhyb3dpbmcgdXAgcmVkIGZsYWdzLCB0aGUgb25seSBjaGFuZ2VzIGJlaW5nIGBWTV9CVUdfT05gIHVwZGF0ZXMuIFRoYXQgc3VnZ2VzdHMgYSBidWcgY2hlY2sgcmVsYXRlZCB0byBoYW5kbGluZyB0aGVzZSBwcml2YXRlIFBNRHMuIFRoZXNlIGFyZSBsaW5rZWQuXG5cbkxldCdzIGRpZyBkZWVwZXIuIElzIGBxdWV1ZV9mb2xpb3NfcG1kYCB0aGUgY29yZT8gTGV0IG1lIGNoZWNrIGl0cyBkZWZpbml0aW9uLiBTdGF0aWMuIEhtbSwgbm90IGlkZWFsIGZvciB0cmFjaW5nLCBidXQgc3RpbGwgaW1wb3J0YW50LiBMZXQncyBkbyB0aGUgc2FtZSBmb3IgYHF1ZXVlX2ZvbGlvc19wdGVfcmFuZ2VgIC0gYWxzbyBzdGF0aWMuIE9rYXkuIEl0IHNlZW1zIHRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgd29yayBvZiBkZWFsaW5nIHdpdGggZGV2aWNlIHByaXZhdGUgUE1EcyBpcyBoYXBwZW5pbmcuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBpcyBjYWxsaW5nIGBxdWV1ZV9mb2xpb3NfcHRlX3JhbmdlYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgaGFuZGxlIG9uIHRoZSBjb250cm9sIGZsb3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNzE5LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjA1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDAzOjE1OjUzLjc3ODAyNDE2MVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc0NDA1NTQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInF1ZXVlX2ZvbGlvc19wdGVfcmFuZ2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWVtcG9saWN5LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtcG9saWN5LmM9NjUzPXN0YXRpYyB2b2lkIHF1ZXVlX2ZvbGlvc19wbWQocG1kX3QgKnBtZCwgc3RydWN0IG1tX3dhbGsgKndhbGspXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy02ODAtICpcXG5tbS9tZW1wb2xpY3kuYzo2ODE6ICogcXVldWVfZm9saW9zX3B0ZV9yYW5nZSgpIGhhcyB0d28gcG9zc2libGUgcmV0dXJuIHZhbHVlczpcXG5tbS9tZW1wb2xpY3kuYy02ODItICogMCAtIGNvbnRpbnVlIHdhbGtpbmcgdG8gc2NhbiBmb3IgbW9yZSwgZXZlbiBpZiBhbiBleGlzdGluZyBmb2xpbyBvbiB0aGVcXG4tLVxcbm1tL21lbXBvbGljeS5jLTY4Ni0gKi9cXG5tbS9tZW1wb2xpY3kuYzo2ODc6c3RhdGljIGludCBxdWV1ZV9mb2xpb3NfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG5tbS9tZW1wb2xpY3kuYy02ODgtXFx0XFx0XFx0dW5zaWduZWQgbG9uZyBlbmQsIHN0cnVjdCBtbV93YWxrICp3YWxrKVxcbi0tXFxubW0vbWVtcG9saWN5LmM9OTU0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgcXVldWVfcGFnZXNfd2Fsa19vcHMgPSB7XFxubW0vbWVtcG9saWN5LmMtOTU1LVxcdC5odWdldGxiX2VudHJ5XFx0XFx0PSBxdWV1ZV9mb2xpb3NfaHVnZXRsYixcXG5tbS9tZW1wb2xpY3kuYzo5NTY6XFx0LnBtZF9lbnRyeVxcdFxcdD0gcXVldWVfZm9saW9zX3B0ZV9yYW5nZSxcXG5tbS9tZW1wb2xpY3kuYy05NTctXFx0LnRlc3Rfd2Fsa1xcdFxcdD0gcXVldWVfcGFnZXNfdGVzdF93YWxrLFxcbi0tXFxubW0vbWVtcG9saWN5LmM9OTYxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgcXVldWVfcGFnZXNfbG9ja192bWFfd2Fsa19vcHMgPSB7XFxubW0vbWVtcG9saWN5LmMtOTYyLVxcdC5odWdldGxiX2VudHJ5XFx0XFx0PSBxdWV1ZV9mb2xpb3NfaHVnZXRsYixcXG5tbS9tZW1wb2xpY3kuYzo5NjM6XFx0LnBtZF9lbnRyeVxcdFxcdD0gcXVldWVfZm9saW9zX3B0ZV9yYW5nZSxcXG5tbS9tZW1wb2xpY3kuYy05NjQtXFx0LnRlc3Rfd2Fsa1xcdFxcdD0gcXVldWVfcGFnZXNfdGVzdF93YWxrLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQwMzoxNTo1NC4yNTI0MzUyOTVaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTY4MzEyNDc5NjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipVbmRlcnN0YW5kaW5nIHRoZSBgcXVldWVfcGFnZXNfd2Fsa19vcHNgIFJlbGF0aW9uc2hpcCoqXG5cbkFscmlnaHQsIHNvIEknbSB0aGlua2luZyBhYm91dCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYHF1ZXVlX3BhZ2VzX3dhbGtfb3BzYCBhbmQgYHF1ZXVlX3BhZ2VzX3JhbmdlYC4gVGhlIGNvcmUgb2YgaXQgc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCDigJMgYHF1ZXVlX3BhZ2VzX3dhbGtfb3BzYCBpcyBlc3NlbnRpYWxseSBhIGhlbHBlciBmdW5jdGlvbiwgYSBjb21wb25lbnQgKnVzZWQqIGJ5IHRoZSBoaWdoZXItbGV2ZWwgZnVuY3Rpb24gYHF1ZXVlX3BhZ2VzX3JhbmdlYC4gSSBwaWN0dXJlIGBxdWV1ZV9wYWdlc19yYW5nZWAgYXMgdGhlIGxhcmdlciwgbW9yZSBjb21wbGV4IG9wZXJhdGlvbiwgYW5kIGBxdWV1ZV9wYWdlc193YWxrX29wc2AgYXMgYSB3ZWxsLWRlZmluZWQgc3ViLXJvdXRpbmUgdGhhdCBoYW5kbGVzIGEgc3BlY2lmaWMsIGxpa2VseSBjcnVjaWFsLCBhc3BlY3Qgb2YgdGhhdCBvcGVyYXRpb24uIFRoaXMgc3VnZ2VzdHMgdGhhdCBgcXVldWVfcGFnZXNfcmFuZ2VgIHByb2JhYmx5IG5lZWRzIHRvIGl0ZXJhdGUgdGhyb3VnaCBhIHJhbmdlIG9mIHBhZ2VzLCBhbmQgYHF1ZXVlX3BhZ2VzX3dhbGtfb3BzYCBwcm92aWRlcyB0aGUgdW5kZXJseWluZyBtZWNoYW5pc20gZm9yIGVmZmljaWVudGx5IHRyYXZlcnNpbmcgYW5kIHBvdGVudGlhbGx5IG9wZXJhdGluZyBvbiB0aG9zZSBwYWdlcy4gVGhpbmtpbmcgdGhyb3VnaCB0aGUgaW1wbGljYXRpb25zLCBJJ2QgaW1tZWRpYXRlbHkgYmUgaW50ZXJlc3RlZCBpbiB0aGUgbmF0dXJlIG9mIHRoaXMgXCJ3YWxrXCIg4oCTIGFyZSB3ZSB0YWxraW5nIGxpbmVhciB0cmF2ZXJzYWwsIGEgbW9yZSBjb21wbGV4IHRyZWUtbGlrZSBzdHJ1Y3R1cmUsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBGdXJ0aGVybW9yZSwgSSdkIGJlIGxvb2tpbmcgY2xvc2VseSBhdCB3aGF0IHRoZSBcIm9wc1wiIGFyZSBpbiBgcXVldWVfcGFnZXNfd2Fsa19vcHNgIOKAkyB3aGF0IGZ1bmN0aW9ucyBvciBvcGVyYXRpb25zIGFyZSBiZWluZyBhcHBsaWVkIHRvIGVhY2ggcGFnZSBkdXJpbmcgdGhpcyB3YWxrPyBVbmRlcnN0YW5kaW5nIHRob3NlIHdvdWxkIGJlIGtleSB0byBmaWd1cmluZyBvdXQgdGhlIHBlcmZvcm1hbmNlIGNoYXJhY3RlcmlzdGljcyBhbmQgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9mIHRoZSB3aG9sZSBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NjgyLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMDM6MTY6MTEuMDgzNjg2ODMyWiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDkwNzA5NzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicXVldWVfcGFnZXNfcmFuZ2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWVtcG9saWN5LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtcG9saWN5LmM9Njg3PXN0YXRpYyBpbnQgcXVldWVfZm9saW9zX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy03NDctXFx0XFx0XFx0ICogbWlncmF0ZV9wYWdlcyhcXHUwMDI2cGFnZWxpc3QpIHJldHVybnMgbnJfZmFpbGVkIGZvbGlvcywgc29cXG5tbS9tZW1wb2xpY3kuYzo3NDg6XFx0XFx0XFx0ICogY2hlY2sgXFxcImxhcmdlXFxcIiBub3cgc28gdGhhdCBxdWV1ZV9wYWdlc19yYW5nZSgpIHJldHVybnNcXG5tbS9tZW1wb2xpY3kuYy03NDktXFx0XFx0XFx0ICogYSBjb21wYXJhYmxlIG5yX2ZhaWxlZCBmb2xpb3MuICBUaGlzIGRvZXMgaW1wbHkgdGhhdFxcbi0tXFxubW0vbWVtcG9saWN5LmM9OTYxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgcXVldWVfcGFnZXNfbG9ja192bWFfd2Fsa19vcHMgPSB7XFxuLS1cXG5tbS9tZW1wb2xpY3kuYy05NzMtICpcXG5tbS9tZW1wb2xpY3kuYzo5NzQ6ICogcXVldWVfcGFnZXNfcmFuZ2UoKSBtYXkgcmV0dXJuOlxcbm1tL21lbXBvbGljeS5jLTk3NS0gKiAwIC0gYWxsIHBhZ2VzIGFscmVhZHkgb24gdGhlIHJpZ2h0IG5vZGUsIG9yIHN1Y2Nlc3NmdWxseSBxdWV1ZWQgZm9yIG1vdmluZ1xcbi0tXFxubW0vbWVtcG9saWN5LmM9OTgyPXN0YXRpYyBsb25nXFxubW0vbWVtcG9saWN5LmM6OTgzOnF1ZXVlX3BhZ2VzX3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcXG5tbS9tZW1wb2xpY3kuYy05ODQtXFx0XFx0bm9kZW1hc2tfdCAqbm9kZXMsIHVuc2lnbmVkIGxvbmcgZmxhZ3MsXFxuLS1cXG5tbS9tZW1wb2xpY3kuYz0xMjg1PXN0YXRpYyBsb25nIG1pZ3JhdGVfdG9fbm9kZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgaW50IHNvdXJjZSwgaW50IGRlc3QsXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0xMzE2LVxcdCAqL1xcbm1tL21lbXBvbGljeS5jOjEzMTc6XFx0bnJfZmFpbGVkID0gcXVldWVfcGFnZXNfcmFuZ2UobW0sIHZtYS1cXHUwMDNldm1fc3RhcnQsIG1tLVxcdTAwM2V0YXNrX3NpemUsIFxcdTAwMjZubWFzayxcXG5tbS9tZW1wb2xpY3kuYy0xMzE4LVxcdFxcdFxcdFxcdCAgICAgIGZsYWdzIHwgTVBPTF9NRl9ESVNDT05USUdfT0ssIFxcdTAwMjZwYWdlbGlzdCk7XFxuLS1cXG5tbS9tZW1wb2xpY3kuYz0xNDg5PXN0YXRpYyBsb25nIGRvX21iaW5kKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgbGVuLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMTU1Mi1cXHQgKi9cXG5tbS9tZW1wb2xpY3kuYzoxNTUzOlxcdG5yX2ZhaWxlZCA9IHF1ZXVlX3BhZ2VzX3JhbmdlKG1tLCBzdGFydCwgZW5kLCBubWFzayxcXG5tbS9tZW1wb2xpY3kuYy0xNTU0LVxcdFxcdFxcdGZsYWdzIHwgTVBPTF9NRl9JTlZFUlQgfCBNUE9MX01GX1dSTE9DSywgXFx1MDAyNnBhZ2VsaXN0KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMDM6MTY6MTEuMjkyNzY0MDgxWiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE2MTgwMzA5ODgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZvY3VzaW5nIG9uIE1lbW9yeSBNYW5hZ2VtZW50IEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBzZWVpbmcgYSBjb25uZWN0aW9uIGJldHdlZW4gYGRvX21iaW5kYCwgYG1pZ3JhdGVfdG9fbm9kZWAsIGFuZCB0aGUgZnVuY3Rpb24gYHF1ZXVlX3BhZ2VzX3JhbmdlYC4gVGhlIGZhY3QgdGhhdCBgbWlncmF0ZV90b19ub2RlYCBpcyBzcGVjaWZpY2FsbHkgY2FsbGVkIGJ5IGBkb19taWdyYXRlX3BhZ2VzYCBpcyBxdWl0ZSBpbnRlcmVzdGluZy4gVGhpcyBwb2ludHMgbWUgdG93YXJkIHRob3NlIHR3byBmdW5jdGlvbnMsIGBkb19tYmluZGAgYW5kIGBkb19taWdyYXRlX3BhZ2VzYCwgYXMgbGlrZWx5IHNpZ25pZmljYW50IHBvaW50cyBvZiBpbnRlcmVzdCB0byBpbnZlc3RpZ2F0ZSBmdXJ0aGVyLiBUaGV5IHNlZW0gdG8gYmUgY29vcmRpbmF0aW5nIHBhZ2UgbWlncmF0aW9uIG9yIGJpbmRpbmcgb3BlcmF0aW9ucywgd2hpY2ggbWFrZXMgdGhlbSBwcmltZSBjYW5kaWRhdGVzIGZvciBkZWVwZXIgc2NydXRpbnkuXG5cbkFkZGl0aW9uYWxseSwgSSBuZWVkIHRvIGNoZWNrIG91dCB3aGF0IHRoZSBpbXBhY3Qgb2YgYG1hZHZpc2VfZnJlZV9odWdlX3BtZGAgYW5kIGBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2VgIGFyZS4gTGV0J3Mgc2VlIGhvdyB0aGVzZSBhcmUgY2FsbGVkIGFuZCBob3cgdGhleSBmdW5jdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU1ODQsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMDM6MTY6MjcuNDczMDc3MTQyWiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjM5OTI0MTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWFkdmlzZV9mcmVlX2h1Z2VfcG1kXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9odWdlX21lbW9yeS5jPTIyMDA9dm1fZmF1bHRfdCBkb19odWdlX3BtZF9udW1hX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTIyNzktICovXFxubW0vaHVnZV9tZW1vcnkuYzoyMjgwOmJvb2wgbWFkdmlzZV9mcmVlX2h1Z2VfcG1kKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbm1tL2h1Z2VfbWVtb3J5LmMtMjI4MS1cXHRcXHRwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbmV4dClcXG4tLVxcbm1tL21hZHZpc2UuYz02NTM9c3RhdGljIGludCBtYWR2aXNlX2ZyZWVfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbm1tL21hZHZpc2UuYy02NjktXFx0aWYgKHBtZF90cmFuc19odWdlKCpwbWQpKVxcbm1tL21hZHZpc2UuYzo2NzA6XFx0XFx0aWYgKG1hZHZpc2VfZnJlZV9odWdlX3BtZCh0bGIsIHZtYSwgcG1kLCBhZGRyLCBuZXh0KSlcXG5tbS9tYWR2aXNlLmMtNjcxLVxcdFxcdFxcdHJldHVybiAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQwMzoxNjoyNy42OTcwODA5M1oiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNzUyMjI3ODAwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTWVtb3J5IE1hbmFnZW1lbnQgRWZmaWNpZW5jeSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhpcyBtZW1vcnkgbWFuYWdlbWVudCBmbG93LiBJdCBsb29rcyBsaWtlIGBtYWR2aXNlX2ZyZWVfaHVnZV9wbWRgIGlzIGJlaW5nIGludm9rZWQgZG93bnN0cmVhbSBmcm9tIGBtYWR2aXNlX2ZyZWVfcHRlX3JhbmdlYCwgd2hpY2ggaW4gdHVybiBpcyBjYWxsZWQgYnkgYG1hZHZpc2VfZnJlZV9zaW5nbGVfdm1hYC4gVGhhdCdzIHRoZSBmcmVlaW5nIHBhdGguIE5vdywgdGhlIGBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2VgIGZ1bmN0aW9uIGlzIGFsc28gb2YgaW50ZXJlc3QsIHNpbmNlIGl0J3MgY2FsbGVkIGJ5IGBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9zaW5nbGVfdm1hYCwgb3IgYSBzaW1pbGFyIGZ1bmN0aW9uLCB3aGljaCBpbXBsaWVzIGl0cyBwdXJwb3NlIGlzIHJlbGF0ZWQgdG8gcGFnZXMgYmVpbmcgbWFya2VkIGFzIGNvbGQgb3IgcGFnZWQgb3V0LiBJIG5lZWQgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IGBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2VgIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUuIEl0IHdvdWxkIGFwcGVhciB0byBiZSBhbiBpbXBvcnRhbnQgY29tcG9uZW50IGluIG9wdGltaXppbmcgbWVtb3J5IHVzYWdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjE5MSwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQwMzoxNjo0NS4yMTkzNjE5NzlaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0MjA2MTU3NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWFkdmlzZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21hZHZpc2UuYz0zNDM9c3RhdGljIGlubGluZSBpbnQgbWFkdmlzZV9mb2xpb19wdGVfYmF0Y2godW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG4tLVxcbm1tL21hZHZpc2UuYy0zNTItXFxubW0vbWFkdmlzZS5jOjM1MzpzdGF0aWMgaW50IG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZShwbWRfdCAqcG1kLFxcbm1tL21hZHZpc2UuYy0zNTQtXFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG4tLVxcbm1tL21hZHZpc2UuYz01Njk9c3RhdGljIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyBjb2xkX3dhbGtfb3BzID0ge1xcbm1tL21hZHZpc2UuYzo1NzA6XFx0LnBtZF9lbnRyeSA9IG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZSxcXG5tbS9tYWR2aXNlLmMtNTcxLVxcdC53YWxrX2xvY2sgPSBQR1dBTEtfUkRMT0NLLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQwMzoxNjo0NS41NjE0MzAzODZaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjI2MjExODQ4ODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipGb2N1c2luZyBvbiBLZXkgRnVuY3Rpb25zIGZvciBNZW1vcnkgTWFuYWdlbWVudCBPcHRpbWl6YXRpb24qKlxuXG5SaWdodCwgc28gSSdtIHRoaW5raW5nIGFib3V0IHRoZSBtb3N0IHJlbGV2YW50IHN5bWJvbHMgdG8gdGFyZ2V0IGhlcmUuIEl0IHNlZW1zIGxpa2UgdGhlIGNvcmUgZnVuY3Rpb25zIEkgc2hvdWxkIGJlIGV4YW1pbmluZyBhcmUgYGRvX21iaW5kYCwgYGRvX21pZ3JhdGVfcGFnZXNgLCBgbWFkdmlzZV9mcmVlX2h1Z2VfcG1kYCwgYW5kIGBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2VgLiBUaGVzZSBmZWVsIGxpa2UgdGhleSdyZSBhdCB0aGUgaGVhcnQgb2YgbWVtb3J5IGJpbmRpbmcsIG1pZ3JhdGlvbiwgYW5kIGFkdmlzaW5nIHRoZSBrZXJuZWwgb24gbWVtb3J5IHVzYWdlLCB3aGljaCBpcyBleGFjdGx5IHRoZSBhcmVhIEknbSB0cnlpbmcgdG8gb3B0aW1pemUuIFdhaXQgYSBzZWNvbmQsIGlzIGBkb19taWdyYXRlX3BhZ2VzYCBhY3R1YWxseSBhIHN5c2NhbGw/IEkgbmVlZCB0byBxdWlja2x5IGNvbmZpcm0gdGhhdCwgYmVjYXVzZSBJIHdhbnQgdG8gbWFrZSBzdXJlIEknbSBmb2N1c2VkIG9uIHRoZSByaWdodCBsZXZlbCBvZiBhYnN0cmFjdGlvbi4gVGltZSB0byB2ZXJpZnkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NzMzLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMDM6MTc6MDguMTgyNjE4NjQ4WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjI1MjY5MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZG9fbWlncmF0ZV9wYWdlc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtcG9saWN5LmM9MTI4NT1zdGF0aWMgbG9uZyBtaWdyYXRlX3RvX25vZGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIGludCBzb3VyY2UsIGludCBkZXN0LFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMTMzOC0gKi9cXG5tbS9tZW1wb2xpY3kuYzoxMzM5OmludCBkb19taWdyYXRlX3BhZ2VzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBjb25zdCBub2RlbWFza190ICpmcm9tLFxcbm1tL21lbXBvbGljeS5jLTEzNDAtXFx0XFx0ICAgICBjb25zdCBub2RlbWFza190ICp0bywgaW50IGZsYWdzKVxcbi0tXFxubW0vbWVtcG9saWN5LmMtMTM4Ny1cXHRcXHRcXHQvKlxcbm1tL21lbXBvbGljeS5jOjEzODg6XFx0XFx0XFx0ICogZG9fbWlncmF0ZV9wYWdlcygpIHRyaWVzIHRvIG1haW50YWluIHRoZSByZWxhdGl2ZVxcbm1tL21lbXBvbGljeS5jLTEzODktXFx0XFx0XFx0ICogbm9kZSByZWxhdGlvbnNoaXAgb2YgdGhlIHBhZ2VzIGVzdGFibGlzaGVkIGJldHdlZW5cXG4tLVxcbm1tL21lbXBvbGljeS5jPTE0NzA9c3RhdGljIGJvb2wgbWlncmF0ZV9mb2xpb19hZGQoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGxpc3RfaGVhZCAqZm9saW9saXN0LFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMTQ3NS1cXG5tbS9tZW1wb2xpY3kuYzoxNDc2OmludCBkb19taWdyYXRlX3BhZ2VzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBjb25zdCBub2RlbWFza190ICpmcm9tLFxcbm1tL21lbXBvbGljeS5jLTE0NzctXFx0XFx0ICAgICBjb25zdCBub2RlbWFza190ICp0bywgaW50IGZsYWdzKVxcbi0tXFxubW0vbWVtcG9saWN5LmM9MTg2Mz1zdGF0aWMgaW50IGtlcm5lbF9taWdyYXRlX3BhZ2VzKHBpZF90IHBpZCwgdW5zaWduZWQgbG9uZyBtYXhub2RlLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMTkzNC1cXG5tbS9tZW1wb2xpY3kuYzoxOTM1OlxcdGVyciA9IGRvX21pZ3JhdGVfcGFnZXMobW0sIG9sZCwgbmV3LFxcbm1tL21lbXBvbGljeS5jLTE5MzYtXFx0XFx0Y2FwYWJsZShDQVBfU1lTX05JQ0UpID8gTVBPTF9NRl9NT1ZFX0FMTCA6IE1QT0xfTUZfTU9WRSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDAzOjE3OjA4LjcwNTE1MTMzN1oiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNDM3NjU3NzYyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGb2N1c2luZyBvbiBLZXkgU3ltYm9scyBmb3IgRnV6emluZyoqXG5cbk9rYXksIHNvIEknbSB0cnlpbmcgdG8gZmlndXJlIG91dCB0aGUgYmVzdCBhcHByb2FjaCBmb3IgZnV6emluZyB0aGlzIGNvZGUuIFRoZSBlbnRyeSBwb2ludCBpcyBga2VybmVsX21pZ3JhdGVfcGFnZXNgLCB3aGljaCBpcyBhIHN5c2NhbGwgZW50cnkuIFRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEZyb20gdGhlcmUsIEkgd2FzIGluaXRpYWxseSB0aGlua2luZyBvZiBmb2N1c2luZyBvbiBgZG9fbWJpbmRgLCBgbWFkdmlzZV9mcmVlX2h1Z2VfcG1kYCwgYW5kIGBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2VgIGFzIHBvdGVudGlhbCBmb2N1cyBzeW1ib2xzLlxuXG5CdXQgaG9sZCBvbiwgYG1hZHZpc2VfZnJlZV9odWdlX3BtZGAgaXMgY2FsbGVkIGZyb20gYG1hZHZpc2VfZnJlZV9wdGVfcmFuZ2VgLCB3aGljaCBpdHNlbGYgaXMgY2FsbGVkIGZyb20gYG1hZHZpc2Vfdm1hX2JlaGF2aW9yYC4gU28gbWF5YmUgZ29pbmcgZGlyZWN0bHkgdG8gYG1hZHZpc2VfZnJlZV9odWdlX3BtZGAgYW5kIGBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2VgIG1ha2VzIHRoZSBtb3N0IHNlbnNlIGJlY2F1c2UgdGhleSBhcmUgbW9yZSBkaXJlY3RseSB0aWVkIHRvIHRoZSBjaGFuZ2VzLlxuXG5Ob3csIGZvciBgcXVldWVfZm9saW9zX3BtZGAsIEkgaGF2ZSBvcHRpb25zLiBJIGNvdWxkIHVzZSBgcXVldWVfZm9saW9zX3B0ZV9yYW5nZWAsIG9yIGBxdWV1ZV9wYWdlc19yYW5nZWAsIG9yIGV2ZW4gZ28gYmFjayB0byBgZG9fbWJpbmRgIGFuZCBga2VybmVsX21pZ3JhdGVfcGFnZXNgLiBTaG91bGQgSSB1c2UgYHF1ZXVlX2ZvbGlvc19wbWRgIGRpcmVjdGx5PyBIbW0sIGl0J3Mgc3RhdGljLiBCdXQgc3l6a2FsbGVyIGNhbiBoYW5kbGUgc3RhdGljIGZ1bmN0aW9ucyBpZiB0aGV5J3JlIGluIHRoZSBjYWxsIHRyZWUgb2Ygc3lzY2FsbHMuIFNwZWNpZnlpbmcgdGhlbSBpbiBgRm9jdXNTeW1ib2xzYCBpcyBzdGlsbCBnb29kIGJlY2F1c2Ugc3l6a2FsbGVyIHVzZXMgY292ZXJhZ2UgdG8gZ3VpZGUgZnV6emluZy4gQW5kIHdhaXQsIGl0IGxvb2tzIGxpa2UgYEZvY3VzU3ltYm9sc2AgKmNhbiogaW5jbHVkZSBzdGF0aWMgZnVuY3Rpb25zISBTeXprYWxsZXIgZXh0cmFjdHMgdGhlIFBDIGZyb20gdGhlIGtlcm5lbCBpbWFnZS4gUGVyZmVjdC5cblxuU28sIEkgdGhpbmsgSSBjYW4ganVzdCBsaXN0IGBxdWV1ZV9mb2xpb3NfcG1kYCwgYG1hZHZpc2VfZnJlZV9odWdlX3BtZGAsIGFuZCBgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlYCBhcyBmb2N1cyBzeW1ib2xzLiBXYWl0IGEgbWludXRlLCBJIG5lZWQgdG8gZG91YmxlLWNoZWNrLiBgbWFkdmlzZV9mcmVlX2h1Z2VfcG1kYCBpcyBnbG9iYWwsIG5vdCBzdGF0aWMuIEFuZCBgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlYCBhbmQgYHF1ZXVlX2ZvbGlvc19wbWRgIGFyZSBzdGF0aWMuIEFscmlnaHQsIGxldCdzIHByb3ZpZGUgdGhvc2UgdGhyZWUgYXMgYEZvY3VzU3ltYm9sc2AuXG5cbkZpbmFsbHksIGZvciB0aGUgY29uZmlndXJhdGlvbiwgSSdtIGdvaW5nIHRvIG5lZWQgYE5VTUFgLCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLCBhbmQgYERFVklDRV9QUklWQVRFYC4gSG9sZCBvbiwgZG9lcyBgREVWSUNFX1BSSVZBVEVgIG5lZWQgYFpPTkVfREVWSUNFYD8gQmV0dGVyIGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NDE4LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDYyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDAzOjE3OjMzLjA4MTczMzA4N1oiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIzODUyODQzMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgREVWSUNFX1BSSVZBVEVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTEyNjI9Y29uZmlnIEdFVF9GUkVFX1JFR0lPTlxcbi0tXFxubW0vS2NvbmZpZy0xMjY0LVxcbm1tL0tjb25maWc6MTI2NTpjb25maWcgREVWSUNFX1BSSVZBVEVcXG5tbS9LY29uZmlnLTEyNjYtXFx0Ym9vbCBcXFwiVW5hZGRyZXNzYWJsZSBkZXZpY2UgbWVtb3J5IChHUFUgbWVtb3J5LCAuLi4pXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQwMzoxNzozNS4zMjAyNzMxNTlaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjEzNjk1ODY0ODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoZSBnaXZlbiBpbnN0cnVjdGlvbnM6XG5cbioqQW5hbHl6aW5nIG1tL0tjb25maWcgYXJvdW5kIERFVklDRV9QUklWQVRFKipcblxuT2theSwgc28gdGhlIHByb21wdCB3YW50cyBtZSB0byBmb2N1cyBvbiBgbW0vS2NvbmZpZ2AsIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIGBERVZJQ0VfUFJJVkFURWAgY29uZmlndXJhdGlvbiBvcHRpb24uIFJpZ2h0LCBzbyB0aGlzIGlzIGFib3V0IG1lbW9yeSBtYW5hZ2VtZW50IHdpdGhpbiB0aGUga2VybmVsJ3MgY29uZmlndXJhdGlvbiBzeXN0ZW0uIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgcm9sZSBgREVWSUNFX1BSSVZBVEVgIHBsYXlzIGluIHRoaXMgY29udGV4dC4gSSdtIGFzc3VtaW5nIGl0IHJlbGF0ZXMgdG8gd2hldGhlciBjZXJ0YWluIG1lbW9yeSByZWdpb25zIG9yIGRldmljZXMgc2hvdWxkIGJlIGNvbnNpZGVyZWQgcHJpdmF0ZSB0byBhIHNwZWNpZmljIGRldmljZSBvciwgY29udmVyc2VseSwgc2hhcmVkIGFuZCBtYW5hZ2VkIGF0IGEgbW9yZSBnbG9iYWwgbGV2ZWwuIFRoZSBgS2NvbmZpZ2AgZmlsZXMgYXJlIHdoZXJlIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGRlZmluZWQsIGFsb25nIHdpdGggdGhlaXIgZGVwZW5kZW5jaWVzLCBkZXNjcmlwdGlvbnMsIGFuZCBkZWZhdWx0cywgc28gSSBuZWVkIHRvIGdvIHJlYWQgdGhlIGNvbnRlbnRzIG9mIHRoYXQgZmlsZS4gSSBleHBlY3QgdG8gc2VlIGRlZmluaXRpb25zIGZvciBgREVWSUNFX1BSSVZBVEVgLCBhbmQgbGlrZWx5IGEgZGVzY3JpcHRpb24gb2YgaXRzIG1lYW5pbmcsIHBlcmhhcHMgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYmFzZWQgb24gdGhpcyBvcHRpb24gYW5kIHJlbGF0ZWQgb3B0aW9ucy4gSSdsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZTpcblxuKiAgIFdoYXQgZGV2aWNlcyBvciBtZW1vcnkgcmVnaW9ucyBhcmUgaW1wYWN0ZWQgYnkgdGhpcyBvcHRpb24uXG4qICAgVGhlIGltcGxpY2F0aW9ucyBvZiBlbmFibGluZyBvciBkaXNhYmxpbmcgdGhpcyBvcHRpb24uXG4qICAgQW55IGRlcGVuZGVuY2llcyBvbiBvdGhlciBjb25maWd1cmF0aW9uIHNldHRpbmdzLlxuKiAgIEhvdyB0aGUga2VybmVsIG1hbmFnZXMgYW5kIHV0aWxpemVzIG1lbW9yeSBiYXNlZCBvbiB0aGlzIHNldHRpbmcuXG5cbk15IGdvYWwgaXMgdG8gdW5kZXJzdGFuZCBob3cgYERFVklDRV9QUklWQVRFYCBhZmZlY3RzIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzY2hlbWUgd2l0aGluIHRoZSBrZXJuZWwgYW5kIGhvdyBpdCBjYW4gYmUgY29udHJvbGxlZCB0aHJvdWdoIHRoZSBjb25maWd1cmF0aW9uIHByb2Nlc3MuIFVsdGltYXRlbHksIEknbGwgc3ludGhlc2l6ZSB3aGF0IGBtbS9LY29uZmlnYCBpcyBleHByZXNzaW5nIGFyb3VuZCB0aGlzIG9wdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg1MTMsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQwMzoxNzo1Ni42ODk4NjQyODJaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQwMTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTI2MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTI2MDpcXHRcXHRkZXBlbmRzIG9uIE1NVVxcbjEyNjE6XFx0XFxuMTI2MjpcXHRjb25maWcgR0VUX0ZSRUVfUkVHSU9OXFxuMTI2MzpcXHRcXHRib29sXFxuMTI2NDpcXHRcXG4xMjY1OlxcdGNvbmZpZyBERVZJQ0VfUFJJVkFURVxcbjEyNjY6XFx0XFx0Ym9vbCBcXFwiVW5hZGRyZXNzYWJsZSBkZXZpY2UgbWVtb3J5IChHUFUgbWVtb3J5LCAuLi4pXFxcIlxcbjEyNjc6XFx0XFx0ZGVwZW5kcyBvbiBaT05FX0RFVklDRVxcbjEyNjg6XFx0XFx0c2VsZWN0IEdFVF9GUkVFX1JFR0lPTlxcbjEyNjk6XFx0XFxuMTI3MDpcXHRcXHRoZWxwXFxuMTI3MTpcXHRcXHQgIEFsbG93cyBjcmVhdGlvbiBvZiBzdHJ1Y3QgcGFnZXMgdG8gcmVwcmVzZW50IHVuYWRkcmVzc2FibGUgZGV2aWNlXFxuMTI3MjpcXHRcXHQgIG1lbW9yeTsgaS5lLiwgbWVtb3J5IHRoYXQgaXMgb25seSBhY2Nlc3NpYmxlIGZyb20gdGhlIGRldmljZSAob3JcXG4xMjczOlxcdFxcdCAgZ3JvdXAgb2YgZGV2aWNlcykuIFlvdSBsaWtlbHkgYWxzbyB3YW50IHRvIHNlbGVjdCBITU1fTUlSUk9SLlxcbjEyNzQ6XFx0XFxuMTI3NTpcXHRjb25maWcgVk1BUF9QRk5cXG4xMjc2OlxcdFxcdGJvb2xcXG4xMjc3OlxcdFxcbjEyNzg6XFx0Y29uZmlnIEFSQ0hfVVNFU19ISUdIX1ZNQV9GTEFHU1xcbjEyNzk6XFx0XFx0Ym9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQwMzoxNzo1Ni42OTAxMDcyODJaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTM5MDU5MTQ2NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkRlcGVuZGVuY3kgRGVlcCBEaXZlKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEknbSBzZWVpbmcgdGhhdCBgREVWSUNFX1BSSVZBVEVgIHJlbGllcyBvbiBgWk9ORV9ERVZJQ0VgLiBDbGFzc2ljLiBOb3csIGJlZm9yZSBJIHN0YXJ0IHB1bGxpbmcgYXBhcnQgYERFVklDRV9QUklWQVRFYCBhbmQgZmlndXJpbmcgb3V0ICp3aHkqIGl0IG5lZWRzIGBaT05FX0RFVklDRWAsIEkgbmVlZCB0byBmdWxseSB1bmRlcnN0YW5kIGBaT05FX0RFVklDRWAgaXRzZWxmLiBHb3R0YSBtYWtlIHN1cmUgdGhlcmUgYXJlbid0IGFueSBoaWRkZW4gZ290Y2hhcyBvciB1bmV4cGVjdGVkIGJlaGF2aW9yIHdpdGhpbiBgWk9ORV9ERVZJQ0VgIHRoYXQgd2lsbCBjb21lIGJhY2sgdG8gYml0ZSBtZSBsYXRlci4gVGltZSB0byB0cmFjZSB0aGUgZGVwZW5kZW5jaWVzIG9mIGBaT05FX0RFVklDRWAgYW5kIHNlZSB3aGF0J3MgcmVhbGx5IGdvaW5nIG9uIHVuZGVyIHRoZSBob29kLiBObyBwb2ludCBpbiBmaXhpbmcgYSBsZWFrIHdpdGhvdXQgdW5kZXJzdGFuZGluZyB3aGVyZSB0aGUgd2F0ZXIncyBjb21pbmcgZnJvbS4gSSBuZWVkIHRvIGdldCB0aGUgYmlnZ2VyIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MTIxLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQwMzoxODoxMC41OTYwMjUzMjVaIiwiU2VxIjo0NSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzMDA2OTI3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgWk9ORV9ERVZJQ0VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTEyMzE9Y29uZmlnIFpPTkVfRE1BMzJcXG4tLVxcbm1tL0tjb25maWctMTIzNS1cXG5tbS9LY29uZmlnOjEyMzY6Y29uZmlnIFpPTkVfREVWSUNFXFxubW0vS2NvbmZpZy0xMjM3LVxcdGJvb2wgXFxcIkRldmljZSBtZW1vcnkgKHBtZW0sIEhNTSwgZXRjLi4uKSBob3RwbHVnIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDAzOjE4OjExLjIyNjEwMTQ1NFoiLCJTZXEiOjQ2LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTY1NDg5Mzc0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIGBtbS9LY29uZmlnYCBmaWxlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGBaT05FX0RFVklDRWA6XG5cbioqRGl2aW5nIGludG8gdGhlIGBtbS9LY29uZmlnYCBhbmQgYFpPTkVfREVWSUNFYCoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBpbnRvIHRoZSBuaXR0eS1ncml0dHkuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIk9rYXksIGBtbS9LY29uZmlnYC4uLiB0aGlzIGlzIHdoZXJlIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBvcHRpb25zIGFyZSBjb25maWd1cmVkLCByaWdodD9cIiBJIGtub3cgdGhpcyBmaWxlIGludGltYXRlbHkuIEknbSBnb2luZyB0byBsb29rIGZvciB0aGUgc2VjdGlvbiByZWxhdGVkIHRvIGBaT05FX0RFVklDRWAuIE15IG1pbmQgcXVpY2tseSBjb25qdXJlcyB0aGUgc3Vycm91bmRpbmcgY29udGV4dCAtIGlzIHRoaXMgYWJvdXQgY29uZmlndXJpbmcgZGV2aWNlcyBmb3IgZGlyZWN0IG1lbW9yeSBhY2Nlc3M/IEFyZSB3ZSB0YWxraW5nIGFib3V0IG1lbW9yeS1tYXBwZWQgSS9PLCBOVU1BIGFyY2hpdGVjdHVyZXMsIG9yIHNvbWV0aGluZyBtb3JlIHNwZWNpYWxpemVkPyBUaGUgcHJlc2VuY2Ugb2YgYFpPTkVfREVWSUNFYCBzaWduYWxzIHNvbWV0aGluZyBiZXlvbmQgdGhlIHVzdWFsIGBaT05FX0RNQWAsIGBaT05FX05PUk1BTGAsIGBaT05FX0hJR0hNRU1gIHJlYWxtcy4gSSBleHBlY3QgdG8gZmluZCBvcHRpb25zIHJlbGF0ZWQgdG8gaG93IHRoZSBrZXJuZWwgaGFuZGxlcyBtZW1vcnkgc3BlY2lmaWNhbGx5IGFsbG9jYXRlZCBmb3IgZGV2aWNlIGludGVyYWN0aW9uLiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzLiBXaGF0IG90aGVyIGZlYXR1cmVzIG5lZWQgdG8gYmUgZW5hYmxlZCBiZWZvcmUgYFpPTkVfREVWSUNFYCBiZWNvbWVzIHJlbGV2YW50PyBBcmUgdGhlcmUgaGFyZHdhcmUgcmVxdWlyZW1lbnRzLCBzcGVjaWZpYyBkZXZpY2UgZHJpdmVycywgb3Igc3BlY2lmaWMga2VybmVsIGNvbmZpZ3VyYXRpb25zIHRoYXQgcGxheSBpbnRvIHRoaXM/IElzIHRoaXMgYWJvdXQgdGhlIGltcGxlbWVudGF0aW9uIG9mIERpcmVjdCBNZW1vcnkgQWNjZXNzIChETUEpPyBJIGtub3cgSSdsbCBoYXZlIHRvIGNvbnNpZGVyIGhvdyB0aGlzIGludGVyYWN0cyB3aXRoIG1lbW9yeSBwcm90ZWN0aW9uLCBhZGRyZXNzaW5nLCBhbmQgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucy4gSSdtIGN1cmlvdXMgaWYgdGhpcyB6b25lJ3MgZXhpc3RlbmNlIGluZmx1ZW5jZXMgaG93IG1lbW9yeSBpcyBtYW5hZ2VkLCBhbGxvY2F0ZWQsIGFuZCByZWNsYWltZWQuIEkgd2lsbCBsb29rIGZvciBhc3NvY2lhdGVkIGRlcGVuZGVuY2llcyBhbmQgcG90ZW50aWFsIGNvbmZpZ3VyYXRpb24gcGl0ZmFsbHMuIEknbSByZWFkeSB0byBmaW5kIHRoZSBhbnN3ZXJzIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTQzMiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDAzOjE4OjIyLjg4MDk5OTA4NloiLCJTZXEiOjQ3LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODc5NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMjM1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMjM1OlxcdFxcbjEyMzY6XFx0Y29uZmlnIFpPTkVfREVWSUNFXFxuMTIzNzpcXHRcXHRib29sIFxcXCJEZXZpY2UgbWVtb3J5IChwbWVtLCBITU0sIGV0Yy4uLikgaG90cGx1ZyBzdXBwb3J0XFxcIlxcbjEyMzg6XFx0XFx0ZGVwZW5kcyBvbiBNRU1PUllfSE9UUkVNT1ZFXFxuMTIzOTpcXHRcXHRzZWxlY3QgWEFSUkFZX01VTFRJXFxuMTI0MDpcXHRcXG4xMjQxOlxcdFxcdGhlbHBcXG4xMjQyOlxcdFxcdCAgRGV2aWNlIG1lbW9yeSBob3RwbHVnIHN1cHBvcnQgYWxsb3dzIGZvciBlc3RhYmxpc2hpbmcgcG1lbSxcXG4xMjQzOlxcdFxcdCAgb3Igb3RoZXIgZGV2aWNlIGRyaXZlciBkaXNjb3ZlcmVkIG1lbW9yeSByZWdpb25zLCBpbiB0aGVcXG4xMjQ0OlxcdFxcdCAgbWVtbWFwLiBUaGlzIGFsbG93cyBwZm5fdG9fcGFnZSgpIGxvb2t1cHMgb2Ygb3RoZXJ3aXNlXFxuMTI0NTpcXHRcXHQgIFxcXCJkZXZpY2UtcGh5c2ljYWxcXFwiIGFkZHJlc3NlcyB3aGljaCBpcyBuZWVkZWQgZm9yIERBWCwgUENJX1AyUERNQSwgYW5kXFxuMTI0NjpcXHRcXHQgIERFVklDRV9QUklWQVRFIGZlYXR1cmVzIGFtb25nIG90aGVycy5cXG4xMjQ3OlxcdFxcbjEyNDg6XFx0XFx0ICBFbmFibGluZyB0aGlzIG9wdGlvbiB3aWxsIHJlZHVjZSB0aGUgZW50cm9weSBvZiB4ODYgS0FTTFIgbWVtb3J5XFxuMTI0OTpcXHRcXHQgIHJlZ2lvbnMuIEZvciBleGFtcGxlIC0gb24gYSA0NiBiaXQgc3lzdGVtLCB0aGUgZW50cm9weSBnb2VzIGRvd25cXG4xMjUwOlxcdFxcdCAgZnJvbSAxNiBiaXRzIHRvIDE1IGJpdHMuIFRoZSBhY3R1YWwgcmVkdWN0aW9uIGluIGVudHJvcHkgZGVwZW5kc1xcbjEyNTE6XFx0XFx0ICBvbiB0aGUgcGh5c2ljYWwgYWRkcmVzcyBiaXRzLCBvbiBwcm9jZXNzb3IgZmVhdHVyZXMsIGtlcm5lbCBjb25maWdcXG4xMjUyOlxcdFxcdCAgKDUgbGV2ZWwgcGFnZSB0YWJsZSkgYW5kIHBoeXNpY2FsIG1lbW9yeSBwcmVzZW50IG9uIHRoZSBzeXN0ZW0uXFxuMTI1MzpcXHRcXG4xMjU0OlxcdCNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMDM6MTg6MjIuODgxMTkwMTc2WiIsIlNlcSI6NDgsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyNjcyNjI0NDQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipEZXBlbmRlbmN5IERlZXAgRGl2ZTogWk9ORV9ERVZJQ0UgXHUwMDI2IE1FTU9SWV9IT1RSRU1PVkUqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgZmxhZ3MgYSBkZXBlbmRlbmN5LiBgWk9ORV9ERVZJQ0VgIHJlbGllcyBvbiBgTUVNT1JZX0hPVFJFTU9WRWAuIFRoYXQncyBhIGtleSBvYnNlcnZhdGlvbi4gQmVmb3JlIEkgZ28gZnVydGhlciBkb3duIHRoaXMgcGFydGljdWxhciByYWJiaXQgaG9sZSwgbGV0J3Mgc3RvcCBhbmQgdmVyaWZ5IHRoYXQgZGVwZW5kZW5jeS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgKndoeSogYFpPTkVfREVWSUNFYCBuZWVkcyBgTUVNT1JZX0hPVFJFTU9WRWAuIElzIGl0IGZvciBncmFjZWZ1bCBoYW5kbGluZyBvZiBkZXZpY2UgcmVtb3ZhbCwgcmVzb3VyY2UgcmVjbGFtYXRpb24sIG9yIHNvbWUgb3RoZXIgY3JpdGljYWwgYXNwZWN0PyBLbm93aW5nIHRoZSBuYXR1cmUgb2YgdGhlIGRlcGVuZGVuY3kgd2lsbCBndWlkZSBteSBuZXh0IHN0ZXBzLiBJJ2xsIG5lZWQgdG8gY29uZmlybSB0aGUgdW5kZXJseWluZyBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIGFuZCB0aGUgc3BlY2lmaWMgaW50ZXJhY3Rpb25zLiBNeSBmb2N1cyBuZWVkcyB0byBiZSBvbiB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlc2UgdHdvIGNvbXBvbmVudHMuIFRpbWUgdG8gZGlnIGludG8gdGhlIGBNRU1PUllfSE9UUkVNT1ZFYCBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDEzMiwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMDM6MTg6MzUuNTUzODE3Nzc5WiIsIlNlcSI6NDksIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODQ5NjUzNjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1FTU9SWV9IT1RSRU1PVkVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTU4OT1lbmRjaG9pY2VcXG5tbS9LY29uZmlnLTU5MC1cXG5tbS9LY29uZmlnOjU5MTpjb25maWcgTUVNT1JZX0hPVFJFTU9WRVxcbm1tL0tjb25maWctNTkyLVxcdGJvb2wgXFxcIkFsbG93IGZvciBtZW1vcnkgaG90IHJlbW92ZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMDM6MTg6MzYuMTM4NzkwNjkyWiIsIlNlcSI6NTAsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYyNjY0MzQxMDUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3Mgd2hhdCdzIGdvaW5nIHRocm91Z2ggbXkgbWluZCBhcyBJIGFwcHJvYWNoIHRoaXM6XG5cbioqRW51bWVyYXRpbmcgUmVsZXZhbnQgS2VybmVsIEZlYXR1cmVzKipcblxuUmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gbGlzdCBvdXQgdGhlIGtleSBrZXJuZWwgZmVhdHVyZXMgdGhpcyBpcyBsaWtlbHkgdG91Y2hpbmcuIEknbSB0aGlua2luZyBpbW1lZGlhdGVseSBvZiBgREVWSUNFX1BSSVZBVEVgLCBgWk9ORV9ERVZJQ0VgLCBgTUVNT1JZX0hPVFJFTU9WRWAsIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAsIGFuZCBgTlVNQWAuIFRob3NlIGFyZSB0aGUgdXN1YWwgc3VzcGVjdHMgd2hlbiBkZWFsaW5nIHdpdGggdGhpcyBraW5kIG9mIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBkZXZpY2UgaW50ZXJhY3Rpb24uXG5cbkhvbGQgb24uLi4gSSdtIGFsc28gcmVtZW1iZXJpbmcgdGhhdCBgQURWSVNFX1NZU0NBTExTYCBpcyBlc3NlbnRpYWwgZm9yIGhhbmRsaW5nIGBtYWR2aXNlLmNgLiBHb3R0YSBiZSBtaW5kZnVsIG9mIGhvdyB3ZSdyZSBndWlkaW5nIHRoZSBrZXJuZWwgd2l0aCBtZW1vcnkgaGludHMuIExldCBtZSBkb3VibGUtY2hlY2sgdGhhdCBgQURWSVNFX1NZU0NBTExTYCBpcyBpbmRlZWQgcHJlc2VudDsgaXQncyBlYXN5IHRvIG92ZXJsb29rIHRoZXNlIGRldGFpbHMgYW5kIHRoZSByaXBwbGUgZWZmZWN0cyBjYW4gYmUgYSBwYWluLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDQzNCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjczLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDAzOjE5OjM4LjgwMzEzNjU2NVoiLCJTZXEiOjUxLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjAwMzQyMTcyLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQURWSVNFX1NZU0NBTExTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDAzOjE5OjM5LjQwMzQ4OTU3N1oiLCJTZXEiOjUyLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODA1NzIwMjMzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6XG5cbioqTmF2aWdhdGluZyB0aGUgS2NvbmZpZyBMYWJ5cmludGgqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGlzIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIGRlZmluZWQuIEknbSBwcmV0dHkgc3VyZSBpdCdzIGluIHRoZSBgS2NvbmZpZ2AgZmlsZXMsIGJ1dCB3aGVyZSBleGFjdGx5PyBJcyBpdCB3aXRoaW4gdGhlIG1haW4gYGluaXQvS2NvbmZpZ2AgZmlsZSwgb3IgaXMgaXQgbmVzdGVkIGRlZXBlciBpbiBvbmUgb2YgdGhlIHN1YmRpcmVjdG9yaWVzPyBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgdGhlIHNjb3BlIG9mIHRoaXMgcGFydGljdWxhciBvcHRpb24gc28gSSBjYW4gcHJvcGVybHkgYW5hbHl6ZSBpdHMgZGVwZW5kZW5jaWVzIGFuZCBkZWZhdWx0IHZhbHVlcy4gVGltZSB0byBzdGFydCBkaWdnaW5nLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNzQ0LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMDM6MjA6MDcuNDYwNjk2NDM4WiIsIlNlcSI6NTMsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MjY3NTEyMjYzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBBRFZJU0VfU1lTQ0FMTFNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluaXQvS2NvbmZpZz0xOTM3PWNvbmZpZyBJT19VUklOR19NT0NLX0ZJTEVcXG4tLVxcbmluaXQvS2NvbmZpZy0xOTQ3LVxcbmluaXQvS2NvbmZpZzoxOTQ4OmNvbmZpZyBBRFZJU0VfU1lTQ0FMTFNcXG5pbml0L0tjb25maWctMTk0OS1cXHRib29sIFxcXCJFbmFibGUgbWFkdmlzZS9mYWR2aXNlIHN5c2NhbGxzXFxcIiBpZiBFWFBFUlRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMDM6MjA6MTUuNzI4MjE3MTIxWiIsIlNlcSI6NTQsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyNTQ3Njc0ODE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIE1lbW9yeSBNYW5hZ2VtZW50IFBhdGNoIGZvciBGdXp6aW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgZmlndXJpbmcgb3V0IGlmIGl0J3MgZnV6emFibGUgYW5kIGhvdyB0byBhcHByb2FjaCBpdC4gRmlyc3QsIEkgc2VlIHRoYXQgdGhlIGBBRFZJU0VfU1lTQ0FMTFNgIGNvbmZpZyBpcyBkZWZpbmVkIGluIGBpbml0L0tjb25maWdgLiBJJ2xsIG5lZWQgdG8gZW5hYmxlIGEgc2V0IG9mIGNvbmZpZ3VyYXRpb25zIHRvIHJlcHJvZHVjZSB0aGUgYnVnOiBgTlVNQWAsIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAsIGBERVZJQ0VfUFJJVkFURWAsIGBaT05FX0RFVklDRWAsIGBNRU1PUllfSE9UUkVNT1ZFYCwgYW5kIG9mIGNvdXJzZSwgYEFEVklTRV9TWVNDQUxMU2AuXG5cbk5vdywgSSdtIGRpZ2dpbmcgaW50byB0aGUgY29kZS4gVGhlIHBhdGNoIHNlZW1zIHRvIGJlIGFkZHJlc3NpbmcgYW4gaXNzdWUgd2l0aGluIGBxdWV1ZV9mb2xpb3NfcG1kYC4gVGhpcyBmdW5jdGlvbiBpcyByZWFjaGFibGUgdmlhIGBtYWR2aXNlX2ZyZWVfaHVnZV9wbWRgLCBjYWxsZWQgZnJvbSBgbWFkdmlzZV9mcmVlX3B0ZV9yYW5nZWAgd2hpY2ggaXMgcmVsYXRlZCB0byBgTUFEVl9GUkVFYC4gYHF1ZXVlX2ZvbGlvc19wbWRgIGlzIGFsc28gcGFydCBvZiBgbWJpbmRgIGFuZCBgbWlncmF0ZV9wYWdlc2AuIFRoZSBwcmltYXJ5IGZpeCBpcyByZWxhdGVkIHRvIGEgY3Jhc2ggdGhhdCBvY2N1cnJlZCB3aGVuIGBxdWV1ZV9mb2xpb3NfcG1kYCBlbmNvdW50ZXJlZCBhIG5vbi1wcmVzZW50IFBNRCB0aGF0IHdhc24ndCBhIG1pZ3JhdGlvbiBlbnRyeSDigJMgc3BlY2lmaWNhbGx5LCBhIGRldmljZSBwcml2YXRlIGVudHJ5LiBUaGUgb3RoZXIgcGFydHMgb2YgdGhlIHBhdGNoIGFyZSB1cGRhdGVzIHRvIGBWTV9CVUdfT05gIGFzc2VydGlvbnMgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcy5cblxuVGhlIGZ1bmN0aW9uYWwgY2hhbmdlIGlzIGluIGBxdWV1ZV9mb2xpb3NfcG1kYC4gSSdtIHRoaW5raW5nLCBpcyB0aGlzIHdvcnRoIGZ1enppbmc/IFllcywgYWJzb2x1dGVseS4gSXQncyBhIGZ1bmN0aW9uYWwgZml4IGZvciBhIGNyYXNoLCBzbyBpdCdzIGEgZ29vZCB0YXJnZXQgZm9yIGZ1enppbmcuXG5cbkxldCdzIGRvdWJsZS1jaGVjayB0aGUgcmVhY2hhYmlsaXR5IG9mIGBxdWV1ZV9mb2xpb3NfcG1kYC4gSXQncyBjYWxsZWQgZnJvbSBgcXVldWVfZm9saW9zX3B0ZV9yYW5nZWAgd2hlbiBgcG1kX3RyYW5zX2h1Z2VfbG9ja2Agc3VjY2VlZHMuIFRoaXMgbG9jayBzdWNjZWVkcyBpZiBgcG1kX2lzX2h1Z2VgIGlzIHRydWUsIHdoaWNoIGlzIHRydWUgaWYgZWl0aGVyIHRoZSBQTUQgaXMgcHJlc2VudCBhbmQgaHVnZSwgKm9yKiBpZiB0aGUgUE1EIGlzIG5vdCBwcmVzZW50IGJ1dCBpcyBub3Qgbm9uZS4gVGhpcyBtZWFucyB0aGF0IGlmIHRoZXJlJ3MgYSBkZXZpY2UgcHJpdmF0ZSBlbnRyeSBpbiBhIFBNRCwgYHBtZF9pc19odWdlYCB3aWxsIHJldHVybiB0cnVlIGFuZCB0aGUgbG9jayB3aWxsIHN1Y2NlZWQuIFRoZW4gYHF1ZXVlX2ZvbGlvc19wbWRgIGlzIGNhbGxlZC4gSXQgY2hlY2tzIGAhcG1kX3ByZXNlbnQocG1kdmFsKWAuIElmIGl0J3Mgbm90IGEgbWlncmF0aW9uIGVudHJ5IChsaWtlIGEgZGV2aWNlIHByaXZhdGUgb25lKSwgaXQgcmV0dXJucyBlYXJseS4gVGhpcyBpcyB0aGUgZml4IHRvIHByZXZlbnQgdGhlIGNyYXNoLlxuXG5TbywgaW4gZXNzZW5jZSwgdGhlIHBhdGNoIGlzIGZpeGluZyBhIHBvdGVudGlhbCBjcmFzaCB3aGVuIGhhbmRsaW5nIG5vbi1wcmVzZW50IFBNRHMgdGhhdCBhcmVuJ3QgbWlncmF0aW9uIGVudHJpZXMg4oCTIGxpa2UgZGV2aWNlIHByaXZhdGUgZW50cmllcyDigJMgd2l0aGluIGBxdWV1ZV9mb2xpb3NfcG1kYC4gSXQgYWxzbyB1cGRhdGVzIGBWTV9CVUdfT05gIGFzc2VydGlvbnMgaW4gbWFkdmlzZSBwYXRocy4gVGhpcyBpcyBhIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY2hhbmdlLCBzbyBpdCBuZWVkcyBmdXp6aW5nIHRvIGVuc3VyZSBjb3JyZWN0IGhhbmRsaW5nIG9mIGRldmljZSBwcml2YXRlIG1lbW9yeSBpbiBOVU1BIHBvbGljeSBhbmQgbWFkdmlzZSBvcGVyYXRpb25zLlxuXG5Ob3csIEkgbmVlZCB0byBkZWZpbmUgdGhlIGZvY3VzIHN5bWJvbHMuIEknbGwgZm9jdXMgb24gYHF1ZXVlX2ZvbGlvc19wbWRgIGFzIHRoZSBrZXkgZnVuY3Rpb24gdG8gdGFyZ2V0LiBUaGVuLCBJIG5lZWQgdG8gaW5jbHVkZSBgbWFkdmlzZV9mcmVlX2h1Z2VfcG1kYCBhbmQgYG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZWAgYmVjYXVzZSB0aGV5IGxlYWQgaW50byBgcXVldWVfZm9saW9zX3BtZGAuXG5cbkkgc2hvdWxkIHZlcmlmeSB0aGUgY29uZmlncy4gYE5VTUFgIGlzIG5lZWRlZCBmb3IgYG1tL21lbXBvbGljeS5jYC4gYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBpcyBuZWVkZWQgZm9yIGh1Z2UgUE1EIHN1cHBvcnQgaW4gYG1tL2h1Z2VfbWVtb3J5LmNgLiBgREVWSUNFX1BSSVZBVEVgIGlzIG5lZWRlZCBmb3IsIHdlbGwsIGRldmljZSBwcml2YXRlIGVudHJpZXMuIGBaT05FX0RFVklDRWAgaXMgbmVlZGVkIGZvciBgREVWSUNFX1BSSVZBVEVgLiBgTUVNT1JZX0hPVFJFTU9WRWAgaXMgbmVlZGVkIGZvciBgWk9ORV9ERVZJQ0VgLiAgQW5kIGZpbmFsbHksIGBBRFZJU0VfU1lTQ0FMTFNgIGlzIG5lZWRlZCBmb3IgYG1tL21hZHZpc2UuY2AuXG5cbk9rYXksIEknbSByZWFkeSB0byBjYWxsIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wgbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDk5NiwiT3V0cHV0VG9rZW5zIjoyMDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMDM6MjA6MjguMjc1ODk1Njc2WiIsIlNlcSI6NTUsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ2MTAwOTc2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJOVU1BXCIsXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiLFxuICAgIFwiREVWSUNFX1BSSVZBVEVcIixcbiAgICBcIlpPTkVfREVWSUNFXCIsXG4gICAgXCJNRU1PUllfSE9UUkVNT1ZFXCIsXG4gICAgXCJBRFZJU0VfU1lTQ0FMTFNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJxdWV1ZV9mb2xpb3NfcG1kXCIsXG4gICAgXCJtYWR2aXNlX2ZyZWVfaHVnZV9wbWRcIixcbiAgICBcIm1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIGNyYXNoIGluIGBxdWV1ZV9mb2xpb3NfcG1kYCB3aGVuIGhhbmRsaW5nIG5vbi1wcmVzZW50IFBNRHMgdGhhdCBhcmUgbm90IG1pZ3JhdGlvbiBlbnRyaWVzIChzdWNoIGFzIGRldmljZSBwcml2YXRlIGVudHJpZXMpLiBJdCBhbHNvIHVwZGF0ZXMgYFZNX0JVR19PTmAgYXNzZXJ0aW9ucyBpbiBtYWR2aXNlIHBhdGhzIHRvIGNvcnJlY3RseSBoYW5kbGUgZGV2aWNlIHByaXZhdGUgZW50cmllcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBjb3JyZWN0IGhhbmRsaW5nIG9mIGRldmljZSBwcml2YXRlIG1lbW9yeSBpbiBOVU1BIHBvbGljeSBhbmQgbWFkdmlzZSBvcGVyYXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5VTUFcIixcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCIsXG4gICAgXCJERVZJQ0VfUFJJVkFURVwiLFxuICAgIFwiWk9ORV9ERVZJQ0VcIixcbiAgICBcIk1FTU9SWV9IT1RSRU1PVkVcIixcbiAgICBcIkFEVklTRV9TWVNDQUxMU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInF1ZXVlX2ZvbGlvc19wbWRcIixcbiAgICBcIm1hZHZpc2VfZnJlZV9odWdlX3BtZFwiLFxuICAgIFwibWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgY3Jhc2ggaW4gYHF1ZXVlX2ZvbGlvc19wbWRgIHdoZW4gaGFuZGxpbmcgbm9uLXByZXNlbnQgUE1EcyB0aGF0IGFyZSBub3QgbWlncmF0aW9uIGVudHJpZXMgKHN1Y2ggYXMgZGV2aWNlIHByaXZhdGUgZW50cmllcykuIEl0IGFsc28gdXBkYXRlcyBgVk1fQlVHX09OYCBhc3NlcnRpb25zIGluIG1hZHZpc2UgcGF0aHMgdG8gY29ycmVjdGx5IGhhbmRsZSBkZXZpY2UgcHJpdmF0ZSBlbnRyaWVzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGNvcnJlY3QgaGFuZGxpbmcgb2YgZGV2aWNlIHByaXZhdGUgbWVtb3J5IGluIE5VTUEgcG9saWN5IGFuZCBtYWR2aXNlIG9wZXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowspn77[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-09 02:57:41 +0000 UTC FinishedAt: 2026-07-09 03:20:30 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "302dfbff3e73be2ba5723237c6303244ec27cebb", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NUMA", "TRANSPARENT_HUGEPAGE", "DEVICE_PRIVATE", "ZONE_DEVICE", "MEMORY_HOTREMOVE", "ADVISE_SYSCALLS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "302dfbff3e73be2ba5723237c6303244ec27cebb", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NUMA", "TRANSPARENT_HUGEPAGE", "DEVICE_PRIVATE", "ZONE_DEVICE", "MEMORY_HOTREMOVE", "ADVISE_SYSCALLS" ], "series_id": "f6caa2b2-0bf3-4ddb-89bf-af716dc8e3a9" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "queue_folios_pmd", "madvise_free_huge_pmd", "madvise_cold_or_pageout_pte_range" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDAzOjExPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+OG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05VTUEmIzM0OywKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OywKICAgICYjMzQ7REVWSUNFX1BSSVZBVEUmIzM0OywKICAgICYjMzQ7Wk9ORV9ERVZJQ0UmIzM0OywKICAgICYjMzQ7TUVNT1JZX0hPVFJFTU9WRSYjMzQ7LAogICAgJiMzNDtBRFZJU0VfU1lTQ0FMTFMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtxdWV1ZV9mb2xpb3NfcG1kJiMzNDssCiAgICAmIzM0O21hZHZpc2VfZnJlZV9odWdlX3BtZCYjMzQ7LAogICAgJiMzNDttYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgY3Jhc2ggaW4gYHF1ZXVlX2ZvbGlvc19wbWRgIHdoZW4gaGFuZGxpbmcgbm9uLXByZXNlbnQgUE1EcyB0aGF0IGFyZSBub3QgbWlncmF0aW9uIGVudHJpZXMgKHN1Y2ggYXMgZGV2aWNlIHByaXZhdGUgZW50cmllcykuIEl0IGFsc28gdXBkYXRlcyBgVk1fQlVHX09OYCBhc3NlcnRpb25zIGluIG1hZHZpc2UgcGF0aHMgdG8gY29ycmVjdGx5IGhhbmRsZSBkZXZpY2UgcHJpdmF0ZSBlbnRyaWVzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGNvcnJlY3QgaGFuZGxpbmcgb2YgZGV2aWNlIHByaXZhdGUgbWVtb3J5IGluIE5VTUEgcG9saWN5IGFuZCBtYWR2aXNlIG9wZXJhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMDM6MTE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBlZmQ0NTZjNjMxZmVhOGQ0NTU0YjlmODIxNzQ2OTNiOTYyODc1OGZkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgOSAwMzoxMTozNSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9odWdlX21lbW9yeS5jIGIvbW0vaHVnZV9tZW1vcnkuY1xuaW5kZXggZWEwNDQ1ZDZjMTdmMDEuLmJkMzliMjYzZmM2MDU5IDEwMDY0NFxuLS0tIGEvbW0vaHVnZV9tZW1vcnkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vaHVnZV9tZW1vcnkuY1xuQEAgLTIyOTgsNyAmIzQzOzIyOTgsOCBAQCBib29sIG1hZHZpc2VfZnJlZV9odWdlX3BtZChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcbiBcdGlmICh1bmxpa2VseSghcG1kX3ByZXNlbnQob3JpZ19wbWQpKSkge1xuIFx0XHRWTV9CVUdfT04odGhwX21pZ3JhdGlvbl9zdXBwb3J0ZWQoKSBcdTAwMjZcdTAwMjZcbi1cdFx0XHRcdCAgIXBtZF9pc19taWdyYXRpb25fZW50cnkob3JpZ19wbWQpKTtcbiYjNDM7XHRcdFx0XHQgICFwbWRfaXNfbWlncmF0aW9uX2VudHJ5KG9yaWdfcG1kKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0XHQgICFwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnkob3JpZ19wbWQpKTtcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG5kaWZmIC0tZ2l0IGEvbW0vbWFkdmlzZS5jIGIvbW0vbWFkdmlzZS5jXG5pbmRleCA5MjkyZjYwYjE5YWE3Yy4uMTA2NWI1YTg0ZWE3OTcgMTAwNjQ0XG4tLS0gYS9tbS9tYWR2aXNlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21hZHZpc2UuY1xuQEAgLTM4OSw3ICYjNDM7Mzg5LDggQEAgc3RhdGljIGludCBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2UocG1kX3QgKnBtZCxcbiBcbiBcdFx0aWYgKHVubGlrZWx5KCFwbWRfcHJlc2VudChvcmlnX3BtZCkpKSB7XG4gXHRcdFx0Vk1fQlVHX09OKHRocF9taWdyYXRpb25fc3VwcG9ydGVkKCkgXHUwMDI2XHUwMDI2XG4tXHRcdFx0XHRcdCFwbWRfaXNfbWlncmF0aW9uX2VudHJ5KG9yaWdfcG1kKSk7XG4mIzQzO1x0XHRcdFx0XHQhcG1kX2lzX21pZ3JhdGlvbl9lbnRyeShvcmlnX3BtZCkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdFx0XHQhcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KG9yaWdfcG1kKSk7XG4gXHRcdFx0Z290byBodWdlX3VubG9jaztcbiBcdFx0fVxuIFxuZGlmZiAtLWdpdCBhL21tL21lbXBvbGljeS5jIGIvbW0vbWVtcG9saWN5LmNcbmluZGV4IDkxNGY4MTg2M2RiNWE2Li40Nzg1YjU1YzAyZGFmOSAxMDA2NDRcbi0tLSBhL21tL21lbXBvbGljeS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1wb2xpY3kuY1xuQEAgLTY1NCwxMiAmIzQzOzY1NCwxNCBAQCBzdGF0aWMgdm9pZCBxdWV1ZV9mb2xpb3NfcG1kKHBtZF90ICpwbWQsIHN0cnVjdCBtbV93YWxrICp3YWxrKVxuIHtcbiBcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4gXHRzdHJ1Y3QgcXVldWVfcGFnZXMgKnFwID0gd2Fsay1cdTAwM2Vwcml2YXRlO1xuJiM0MztcdHBtZF90IHBtZHZhbCA9ICpwbWQ7XG4gXG4tXHRpZiAodW5saWtlbHkocG1kX2lzX21pZ3JhdGlvbl9lbnRyeSgqcG1kKSkpIHtcbi1cdFx0cXAtXHUwMDNlbnJfZmFpbGVkJiM0MzsmIzQzOztcbiYjNDM7XHRpZiAodW5saWtlbHkoIXBtZF9wcmVzZW50KHBtZHZhbCkpKSB7XG4mIzQzO1x0XHRpZiAocG1kX2lzX21pZ3JhdGlvbl9lbnRyeShwbWR2YWwpKVxuJiM0MztcdFx0XHRxcC1cdTAwM2Vucl9mYWlsZWQmIzQzOyYjNDM7O1xuIFx0XHRyZXR1cm47XG4gXHR9XG4tXHRmb2xpbyA9IHBtZF9mb2xpbygqcG1kKTtcbiYjNDM7XHRmb2xpbyA9IHBtZF9mb2xpbyhwbWR2YWwpO1xuIFx0aWYgKGlzX2h1Z2VfemVyb19mb2xpbyhmb2xpbykpIHtcbiBcdFx0d2Fsay1cdTAwM2VhY3Rpb24gPSBBQ1RJT05fQ09OVElOVUU7XG4gXHRcdHJldHVybjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAwMzoxMTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT44bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtOVU1BJiMzNDssCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDssCiAgICAmIzM0O0RFVklDRV9QUklWQVRFJiMzNDssCiAgICAmIzM0O1pPTkVfREVWSUNFJiMzNDssCiAgICAmIzM0O01FTU9SWV9IT1RSRU1PVkUmIzM0OywKICAgICYjMzQ7QURWSVNFX1NZU0NBTExTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cXVldWVfZm9saW9zX3BtZCYjMzQ7LAogICAgJiMzNDttYWR2aXNlX2ZyZWVfaHVnZV9wbWQmIzM0OywKICAgICYjMzQ7bWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIGNyYXNoIGluIGBxdWV1ZV9mb2xpb3NfcG1kYCB3aGVuIGhhbmRsaW5nIG5vbi1wcmVzZW50IFBNRHMgdGhhdCBhcmUgbm90IG1pZ3JhdGlvbiBlbnRyaWVzIChzdWNoIGFzIGRldmljZSBwcml2YXRlIGVudHJpZXMpLiBJdCBhbHNvIHVwZGF0ZXMgYFZNX0JVR19PTmAgYXNzZXJ0aW9ucyBpbiBtYWR2aXNlIHBhdGhzIHRvIGNvcnJlY3RseSBoYW5kbGUgZGV2aWNlIHByaXZhdGUgZW50cmllcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBjb3JyZWN0IGhhbmRsaW5nIG9mIGRldmljZSBwcml2YXRlIG1lbW9yeSBpbiBOVU1BIHBvbGljeSBhbmQgbWFkdmlzZSBvcGVyYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBlZmQ0NTZjNjMxZmVhOGQ0NTU0YjlmODIxNzQ2OTNiOTYyODc1OGZkCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBKdWwgOSAwMzoxMTozNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL2h1Z2VfbWVtb3J5LmMgYi9tbS9odWdlX21lbW9yeS5jCmluZGV4IGVhMDQ0NWQ2YzE3ZjAxLi5iZDM5YjI2M2ZjNjA1OSAxMDA2NDQKLS0tIGEvbW0vaHVnZV9tZW1vcnkuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9odWdlX21lbW9yeS5jCkBAIC0yMjk4LDcgJiM0MzsyMjk4LDggQEAgYm9vbCBtYWR2aXNlX2ZyZWVfaHVnZV9wbWQoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAKIAlpZiAodW5saWtlbHkoIXBtZF9wcmVzZW50KG9yaWdfcG1kKSkpIHsKIAkJVk1fQlVHX09OKHRocF9taWdyYXRpb25fc3VwcG9ydGVkKCkgJmFtcDsmYW1wOwotCQkJCSAgIXBtZF9pc19taWdyYXRpb25fZW50cnkob3JpZ19wbWQpKTsKJiM0MzsJCQkJICAhcG1kX2lzX21pZ3JhdGlvbl9lbnRyeShvcmlnX3BtZCkgJmFtcDsmYW1wOwomIzQzOwkJCQkgICFwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnkob3JpZ19wbWQpKTsKIAkJZ290byBvdXQ7CiAJfQogCmRpZmYgLS1naXQgYS9tbS9tYWR2aXNlLmMgYi9tbS9tYWR2aXNlLmMKaW5kZXggOTI5MmY2MGIxOWFhN2MuLjEwNjViNWE4NGVhNzk3IDEwMDY0NAotLS0gYS9tbS9tYWR2aXNlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWFkdmlzZS5jCkBAIC0zODksNyAmIzQzOzM4OSw4IEBAIHN0YXRpYyBpbnQgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlKHBtZF90ICpwbWQsCiAKIAkJaWYgKHVubGlrZWx5KCFwbWRfcHJlc2VudChvcmlnX3BtZCkpKSB7CiAJCQlWTV9CVUdfT04odGhwX21pZ3JhdGlvbl9zdXBwb3J0ZWQoKSAmYW1wOyZhbXA7Ci0JCQkJCSFwbWRfaXNfbWlncmF0aW9uX2VudHJ5KG9yaWdfcG1kKSk7CiYjNDM7CQkJCQkhcG1kX2lzX21pZ3JhdGlvbl9lbnRyeShvcmlnX3BtZCkgJmFtcDsmYW1wOwomIzQzOwkJCQkJIXBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeShvcmlnX3BtZCkpOwogCQkJZ290byBodWdlX3VubG9jazsKIAkJfQogCmRpZmYgLS1naXQgYS9tbS9tZW1wb2xpY3kuYyBiL21tL21lbXBvbGljeS5jCmluZGV4IDkxNGY4MTg2M2RiNWE2Li40Nzg1YjU1YzAyZGFmOSAxMDA2NDQKLS0tIGEvbW0vbWVtcG9saWN5LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtcG9saWN5LmMKQEAgLTY1NCwxMiAmIzQzOzY1NCwxNCBAQCBzdGF0aWMgdm9pZCBxdWV1ZV9mb2xpb3NfcG1kKHBtZF90ICpwbWQsIHN0cnVjdCBtbV93YWxrICp3YWxrKQogewogCXN0cnVjdCBmb2xpbyAqZm9saW87CiAJc3RydWN0IHF1ZXVlX3BhZ2VzICpxcCA9IHdhbGstJmd0O3ByaXZhdGU7CiYjNDM7CXBtZF90IHBtZHZhbCA9ICpwbWQ7CiAKLQlpZiAodW5saWtlbHkocG1kX2lzX21pZ3JhdGlvbl9lbnRyeSgqcG1kKSkpIHsKLQkJcXAtJmd0O25yX2ZhaWxlZCYjNDM7JiM0Mzs7CiYjNDM7CWlmICh1bmxpa2VseSghcG1kX3ByZXNlbnQocG1kdmFsKSkpIHsKJiM0MzsJCWlmIChwbWRfaXNfbWlncmF0aW9uX2VudHJ5KHBtZHZhbCkpCiYjNDM7CQkJcXAtJmd0O25yX2ZhaWxlZCYjNDM7JiM0Mzs7CiAJCXJldHVybjsKIAl9Ci0JZm9saW8gPSBwbWRfZm9saW8oKnBtZCk7CiYjNDM7CWZvbGlvID0gcG1kX2ZvbGlvKHBtZHZhbCk7CiAJaWYgKGlzX2h1Z2VfemVyb19mb2xpbyhmb2xpbykpIHsKIAkJd2Fsay0mZ3Q7YWN0aW9uID0gQUNUSU9OX0NPTlRJTlVFOwogCQlyZXR1cm47CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDAzOjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzODkKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA2ODkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUGF0Y2g6IEh1Z2UgUGFnZXMgYW5kIE1lbW9yeSBNYW5hZ2VtZW50KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgSSBzZWUgd2UmIzM5O3JlIHRvdWNoaW5nIGBtbS9odWdlX21lbW9yeS5jYCwgYG1tL21hZHZpc2UuY2AsIGFuZCBgbW0vbWVtcG9saWN5LmNgLiBTZWVtcyB0byBiZSByZWxhdGVkIHRvIGhhbmRsaW5nIGh1Z2UgcGFnZXMsIHdoaWNoIGFsd2F5cyB3YXJyYW50cyBhIGNsb3NlIGxvb2suCgpUaGUgZmlyc3QgdHdvIGNoYW5nZXMsIGluIGBtbS9odWdlX21lbW9yeS5jYCBhbmQgYG1tL21hZHZpc2UuY2AsIGFyZSBzdHJhaWdodGZvcndhcmQuIFRoZXkmIzM5O3JlIGp1c3QgYWRkaW5nIGEgY2hlY2sgZm9yIGAhcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KG9yaWdfcG1kKWAgdG8gYSBgVk1fQlVHX09OYC4gQSBgVk1fQlVHX09OYCBpcyBhIGRlYnVnIGFzc2VydGlvbi4gRnJvbSBhIGZ1bmN0aW9uYWwgcGVyc3BlY3RpdmUsIGl0JiMzOTtzIGlycmVsZXZhbnQgaW4gbm9uLWRlYnVnIGJ1aWxkcy4gQnV0IGluIGEgZGVidWcgYnVpbGQsIHRoaXMgaXMgbWVhbnQgdG8gcHJldmVudCBhIGNyYXNoLiBFc3NlbnRpYWxseSwgaXQmIzM5O3MgYSBzYWZldHkgbmV0LCBtYWtpbmcgc3VyZSB0aGF0IGEgc3BlY2lmaWMgY29uZGl0aW9uICpzaG91bGRuJiMzOTt0KiBoYXBwZW4uIFRoZSBuZXcgY29uZGl0aW9uIHNlZW1zIHRvIGJlIGVuc3VyaW5nIHRoYXQgdGhlIGVudHJ5IGlzIG5laXRoZXIgYSBtaWdyYXRpb24gZW50cnkgbm9yIGEgZGV2aWNlLXByaXZhdGUgZW50cnkgYmVmb3JlIHRyaWdnZXJpbmcgdGhlIGRlYnVnIGNoZWNrLiBUaGF0JiMzOTtzIGdvb2QsIGtlZXBzIHRoaW5ncyBzYWZlIGFuZCBoZWxwcyBjYXRjaCBwb3RlbnRpYWwgaXNzdWVzIGVhcmx5LgoKTm93LCB0aGUgaW50ZXJlc3RpbmcgcGFydCBpcyB0aGUgY2hhbmdlIGluIGBtbS9tZW1wb2xpY3kuY2AsIHNwZWNpZmljYWxseSBpbiB0aGUgYHF1ZXVlX2ZvbGlvc19wbWRgIGZ1bmN0aW9uLiBUaGlzIG9uZSYjMzk7cyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBub3QganVzdCBhIGRlYnVnIGNoZWNrLiBUaGUgcHJldmlvdXMgY29kZSBjaGVja2VkIGlmIHRoZSBlbnRyeSB3YXMgYSBtaWdyYXRpb24gZW50cnkuIEJ1dCBub3csIGl0JiMzOTtzIGNoZWNraW5nIGAhcG1kX3ByZXNlbnQocG1kdmFsKWAuIEVzc2VudGlhbGx5LCB0aGUgbG9naWMgaXMgYmVpbmcgaW52ZXJ0ZWQuIElmIHRoZSBQTUQgaXNuJiMzOTt0IHByZXNlbnQsIHRoZW4gaXQgZGl2ZXMgaW50byBjaGVja2luZyBpZiBpdCAqaXMqIGEgbWlncmF0aW9uIGVudHJ5LiBJZiBpdCBpcywgdGhlbiBgbnJfZmFpbGVkYCBpcyBpbmNyZW1lbnRlZC4gUHJldmlvdXNseSwgaXQgd291bGQgcHJvY2VlZCB0byBjYWxsIGBwbWRfZm9saW8oKnBtZClgLCB3aGljaCBjb3VsZCBsZWFkIHRvIGRlcmVmZXJlbmNpbmcgYSBnYXJiYWdlIHBvaW50ZXIgb3IsIHdvcnNlLCBhIGNyYXNoLiBTbywgdGhpcyByZWZhY3RvcmluZyBwcm90ZWN0cyBhZ2FpbnN0IHRoYXQgcG9zc2liaWxpdHkuCgpUaGVyZWZvcmUsIHRoaXMgcGF0Y2ggbG9va3MgbGlrZSBpdCYjMzk7cyBpbXByb3Zpbmcgcm9idXN0bmVzcyBieSBhZGRpbmcgdGhlIHNhZmV0eSBjaGVjayB3aGlsZSBhbHNvIHByb3RlY3RpbmcgdGhlIGBxdWV1ZV9mb2xpb3NfcG1kYCBmdW5jdGlvbiBmcm9tIHBvdGVudGlhbGx5IGRlcmVmZXJlbmNpbmcgZ2FyYmFnZSBkYXRhLiBTb3VuZHMgbGlrZSBhIHNvbGlkIGltcHJvdmVtZW50LiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgY29udGV4dHMgd2hlcmUgdGhlc2UgZnVuY3Rpb25zIGFyZSB1c2VkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbXBsZXRlIGltcGFjdCwgYnV0IGF0IGEgZ2xhbmNlLCB0aGlzIGxvb2tzIHdlbGwtcmVhc29uZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMDM6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cXVldWVfZm9saW9zX3BtZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21lbXBvbGljeS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbXBvbGljeS5jPTY0ND1zdGF0aWMgaW5saW5lIGJvb2wgcXVldWVfZm9saW9fcmVxdWlyZWQoc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5tbS9tZW1wb2xpY3kuYy02NTItXG5tbS9tZW1wb2xpY3kuYzo2NTM6c3RhdGljIHZvaWQgcXVldWVfZm9saW9zX3BtZChwbWRfdCAqcG1kLCBzdHJ1Y3QgbW1fd2FsayAqd2Fsaylcbm1tL21lbXBvbGljeS5jLTY1NC17XG4tLVxubW0vbWVtcG9saWN5LmM9Njg3PXN0YXRpYyBpbnQgcXVldWVfZm9saW9zX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxubW0vbWVtcG9saWN5LmMtNzAwLVx0aWYgKHB0bCkge1xubW0vbWVtcG9saWN5LmM6NzAxOlx0XHRxdWV1ZV9mb2xpb3NfcG1kKHBtZCwgd2Fsayk7XG5tbS9tZW1wb2xpY3kuYy03MDItXHRcdHNwaW5fdW5sb2NrKHB0bCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMDM6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzc5OQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipVbmRlcnN0YW5kaW5nIHRoZSBGb2xpbyBRdWV1aW5nIFByb2Nlc3MqKgoKUmlnaHQsIHNvIGBxdWV1ZV9mb2xpb3NfcG1kYCBpcyBjbGVhcmx5IGEgZnVuY3Rpb24gdGhhdCBwbGF5cyBhIHJvbGUgaW4gcXVldWluZyBmb2xpb3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByZWxhdGlvbnNoaXAgdG8gYHF1ZXVlX2ZvbGlvc19wdGVfcmFuZ2VgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgd2hhdCYjMzk7cyB0aGUgY29udHJvbCBmbG93PyBJdCBsb29rcyBsaWtlIGBxdWV1ZV9mb2xpb3NfcHRlX3JhbmdlYCBjYWxscyBgcXVldWVfZm9saW9zX3BtZGAuIFNvLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoYXQgcmVsYXRpb25zaGlwIGlzIHRvIHRyYWNrIGRvd24gdGhlIHJlbGV2YW50IGNvZGUgcGF0aC4KCk9rYXksIGxldCYjMzk7cyB0aGluayBhYm91dCB0aGUgY29udGV4dC4gVGhpcyBpcyBtZW1vcnkgbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IGRlYWxpbmcgd2l0aCBmb2xpb3MuIFRoZSB0cmFjZSBzZWVtcyB0byBiZSByZWxhdGVkIHRvIHRoZSBQTUQgbGV2ZWwuIE5vdywgSSBoYXZlIHRvIGZpZ3VyZSBvdXQgd2hhdCBjb25maWd1cmF0aW9ucyBhcmUgY3JpdGljYWwuIFNpbmNlIHRoaXMgbG9va3MgbGlrZSBOVU1BLWF3YXJlIGNvZGUsIEkgbmVlZCB0byBjaGVjayB0byBzZWUgaWYgYG1tL21lbXBvbGljeS5jYCBpcyBpbnZvbHZlZC4gSSB2YWd1ZWx5IHJlY2FsbCB0aGF0IGZpbGUgYmVpbmcgY29tcGlsZWQgd2hlbiBgQ09ORklHX05VTUFgIGlzIGVuYWJsZWQuIEl0JiMzOTtzIGEga2V5IHBhcnQgb2YgaG93IHRoZSBrZXJuZWwgbWFuYWdlcyBtZW1vcnkgcGxhY2VtZW50IGFjcm9zcyBOVU1BIG5vZGVzLiBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgdGhhdCB0aGlzIGlzIHRoZSBjb25maWd1cmF0aW9uIEkgbmVlZCB0byBmb2N1cyBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAwMzoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW1wb2xpY3kubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlPTg1PW9iai0kKENPTkZJR19IVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUClcdCYjNDM7PSBodWdldGxiX3ZtZW1tYXAub1xubW0vTWFrZWZpbGU6ODY6b2JqLSQoQ09ORklHX05VTUEpIFx0JiM0Mzs9IG1lbXBvbGljeS5vXG5tbS9NYWtlZmlsZS04Ny1vYmotJChDT05GSUdfU1BBUlNFTUVNKVx0JiM0Mzs9IHNwYXJzZS5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMDM6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDIxMAoJCQkJCQkJb3V0cHV0OiA1NgoJCQkJCQkJdGhvdWdodHM6IDEyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGVzZSB0d28gZnVuY3Rpb25zOiBgbWFkdmlzZV9mcmVlX2h1Z2VfcG1kYCBhbmQgYG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZWAuIE15IGZpcnN0IHN0b3AgaXMgZ29pbmcgdG8gYmUgdGhlaXIgc291cmNlIGZpbGVzLgoKKipBbmFseXppbmcgTWVtb3J5IE1hbmFnZW1lbnQgRnVuY3Rpb25zKioKCmBtYWR2aXNlX2ZyZWVfaHVnZV9wbWRgIGNhdWdodCBteSBleWUsIGFuZCBhIHF1aWNrIGNoZWNrIHRlbGxzIG1lIGl0JiMzOTtzIGxvY2F0ZWQgd2l0aGluIGBtbS9odWdlX21lbW9yeS5jYC4gVGhhdCBtZWFucyBpdCYjMzk7cyBpbnRyaW5zaWNhbGx5IHRpZWQgdG8gdGhlIGtlcm5lbCYjMzk7cyB0cmFuc3BhcmVudCBodWdlcGFnZXMgZnVuY3Rpb25hbGl0eSwgYXMgaW5kaWNhdGVkIGJ5IHRoZSBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCBvcHRpb24uIFRoYXQgbWFrZXMgc2Vuc2UsIGdpdmVuIHRoZSBuYW1lLiBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIHRvIGtlZXAgdGhhdCBjb250ZXh0IGluIG1pbmQgd2hlbiBJIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgZGV0YWlscy4KCk5vdywgYG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZWAgYXBwZWFycyB0byByZXNpZGUgaW4gYG1tL21hZHZpc2UuY2AuIFRoZSBwcmVzZW5jZSBvZiB0aGlzIGZ1bmN0aW9uIGlzIGNvbmRpdGlvbmFsIG9uIGBDT05GSUdfQURWSVNFX1NZU0NBTExTYCBiZWluZyBlbmFibGVkLCB3aGljaCBpcyBhIGdvb2QgY2x1ZSBmb3IgZnVydGhlciBpbnZlc3RpZ2F0aW9uLiBUaGlzIHN1Z2dlc3RzIGl0cyByZWxhdGVkIHRvIHRoZSBzeXN0ZW0gY2FsbCB0aGF0IGFsbG93cyBwcm9jZXNzZXMgdG8gZ2l2ZSBoaW50cyB0byB0aGUga2VybmVsIGFib3V0IG1lbW9yeSB1c2FnZS4gVGhpcyB3aWxsIGJlIHdoZXJlIEkgYmVnaW4gdG8gZXhwbG9yZSBob3cgdXNlci1zcGFjZSBpbnRlcmFjdHMgd2l0aCB0aGUga2VybmVsJiMzOTtzIG1lbW9yeSBtYW5hZ2VtZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDAzOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2h1Z2VfbWVtb3J5Lm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9NYWtlZmlsZT0xMDA9b2JqLSQoQ09ORklHX0RFVklDRV9NSUdSQVRJT04pICYjNDM7PSBtaWdyYXRlX2RldmljZS5vXG5tbS9NYWtlZmlsZToxMDE6b2JqLSQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSAmIzQzOz0gaHVnZV9tZW1vcnkubyBraHVnZXBhZ2VkLm9cbm1tL01ha2VmaWxlLTEwMi1vYmotJChDT05GSUdfUEFHRV9DT1VOVEVSKSAmIzQzOz0gcGFnZV9jb3VudGVyLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAwMzoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttYWR2aXNlLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9NYWtlZmlsZT03ND1pZmRlZiBDT05GSUdfTU1VXG5tbS9NYWtlZmlsZTo3NTpcdG9iai0kKENPTkZJR19BRFZJU0VfU1lTQ0FMTFMpXHQmIzQzOz0gbWFkdmlzZS5vXG5tbS9NYWtlZmlsZS03Ni1lbmRpZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAwMzoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0ODEyCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBSZWNlbnQgS2VybmVsIE1lbW9yeSBNYW5hZ2VtZW50IENoYW5nZXMqKgoKT2theSwgc28gbG9va2luZyBhdCB0aGVzZSBkaWZmcywgaXQgc2VlbXMgdGhlIHVwZGF0ZXMgaW4gYG1tL2h1Z2VfbWVtb3J5LmNgIGFuZCBgbW0vbWFkdmlzZS5jYCBhcmUgc3RyYWlnaHRmb3J3YXJkIGBWTV9CVUdfT05gIGFkZGl0aW9ucy4gUHJldHR5IHJvdXRpbmUgc3R1ZmYsIGxpa2VseSB0byBjYXRjaCBzb21lIGVkZ2UgY2FzZXMgZHVyaW5nIGRldmVsb3BtZW50LiBUaGUgY2hhbmdlIGluIGBtbS9tZW1wb2xpY3kuY2AgaXMgdGhlIG9uZSB0aGF0JiMzOTtzIGdyYWJiZWQgbXkgYXR0ZW50aW9uLiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIGFkZHJlc3NpbmcgYSBidWcuIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgcHJldmVudGluZyBhIGNyYXNoIG9yLCB3b3JzZSwgaW5jb3JyZWN0IGJlaGF2aW9yIHdoZW4gZGVhbGluZyB3aXRoIGEgUE1EIHRoYXQgaXNuJiMzOTt0IGEgbWlncmF0aW9uIGVudHJ5LiBUaGlzIGNvdWxkIGJlIGR1ZSB0byBhIGRldmljZS1wcml2YXRlIGVudHJ5LCBhIHN3YXAgZW50cnksIG9yIHBvdGVudGlhbGx5IGp1c3QgdGhlIGFic2VuY2Ugb2YgYW4gZW50cnkuCgpOb3cgaG9sZCBvbiBhIHNlY29uZC4uLiBgcXVldWVfZm9saW9zX3BtZGAuLi4gdGhhdCYjMzk7cyBnZXR0aW5nIGNhbGxlZCBmcm9tIGBxdWV1ZV9mb2xpb3NfcHRlX3JhbmdlYCAqd2hlbiogYHB0bGAgaXMgbm90IE5VTEwuIFJpZ2h0LCB0aGF0IG1lYW5zIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBodWdlIFBNRCDigJMgYSBUSFAuIE9rYXksIGxldCYjMzk7cyBkcmlsbCBkb3duIGludG8gYHF1ZXVlX2ZvbGlvc19wdGVfcmFuZ2VgIGluIGBtbS9tZW1wb2xpY3kuY2AgYW5kIGZpZ3VyZSBvdXQgd2hhdCYjMzk7cyBnb2luZyBvbiB3aXRoIHRoaXMgUE1EIGhhbmRsaW5nLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGlzIHRpZXMgaW50byB0aGUgb3ZlcmFsbCBtZW1vcnkgcG9saWN5IG1hbmFnZW1lbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgY29ubmVjdGlvbiB0byBhc3Nlc3MgdGhlIGltcGFjdCBhbmQgcG9zc2libGUgaW1wbGljYXRpb25zIG9mIHRoaXMgZml4LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAwMzoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL21lbXBvbGljeS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjg3LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2ODc6XHRzdGF0aWMgaW50IHF1ZXVlX2ZvbGlvc19wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIDY4ODpcdFx0XHRcdHVuc2lnbmVkIGxvbmcgZW5kLCBzdHJ1Y3QgbW1fd2FsayAqd2FsaylcbiA2ODk6XHR7XG4gNjkwOlx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHdhbGstXHUwMDNldm1hO1xuIDY5MTpcdFx0c3RydWN0IGZvbGlvICpmb2xpbztcbiA2OTI6XHRcdHN0cnVjdCBxdWV1ZV9wYWdlcyAqcXAgPSB3YWxrLVx1MDAzZXByaXZhdGU7XG4gNjkzOlx0XHR1bnNpZ25lZCBsb25nIGZsYWdzID0gcXAtXHUwMDNlZmxhZ3M7XG4gNjk0Olx0XHRwdGVfdCAqcHRlLCAqbWFwcGVkX3B0ZTtcbiA2OTU6XHRcdHB0ZV90IHB0ZW50O1xuIDY5NjpcdFx0c3BpbmxvY2tfdCAqcHRsO1xuIDY5NzpcdFx0aW50IG1heF9uciwgbnI7XG4gNjk4Olx0XG4gNjk5Olx0XHRwdGwgPSBwbWRfdHJhbnNfaHVnZV9sb2NrKHBtZCwgdm1hKTtcbiA3MDA6XHRcdGlmIChwdGwpIHtcbiA3MDE6XHRcdFx0cXVldWVfZm9saW9zX3BtZChwbWQsIHdhbGspO1xuIDcwMjpcdFx0XHRzcGluX3VubG9jayhwdGwpO1xuIDcwMzpcdFx0XHRnb3RvIG91dDtcbiA3MDQ6XHRcdH1cbiA3MDU6XHRcbiA3MDY6XHRcdG1hcHBlZF9wdGUgPSBwdGUgPSBwdGVfb2Zmc2V0X21hcF9sb2NrKHdhbGstXHUwMDNlbW0sIHBtZCwgYWRkciwgXHUwMDI2cHRsKTtcbiA3MDc6XHRcdGlmICghcHRlKSB7XG4gNzA4Olx0XHRcdHdhbGstXHUwMDNlYWN0aW9uID0gQUNUSU9OX0FHQUlOO1xuIDcwOTpcdFx0XHRyZXR1cm4gMDtcbiA3MTA6XHRcdH1cbiA3MTE6XHRcdGZvciAoOyBhZGRyICE9IGVuZDsgcHRlICYjNDM7PSBuciwgYWRkciAmIzQzOz0gbnIgKiBQQUdFX1NJWkUpIHtcbiA3MTI6XHRcdFx0bWF4X25yID0gKGVuZCAtIGFkZHIpIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuIDcxMzpcdFx0XHRuciA9IDE7XG4gNzE0Olx0XHRcdHB0ZW50ID0gcHRlcF9nZXQocHRlKTtcbiA3MTU6XHRcdFx0aWYgKHB0ZV9ub25lKHB0ZW50KSlcbiA3MTY6XHRcdFx0XHRjb250aW51ZTtcbiA3MTc6XHRcdFx0aWYgKCFwdGVfcHJlc2VudChwdGVudCkpIHtcbiA3MTg6XHRcdFx0XHRjb25zdCBzb2Z0bGVhZl90IGVudHJ5ID0gc29mdGxlYWZfZnJvbV9wdGUocHRlbnQpO1xuIDcxOTpcdFxuIDcyMDpcdFx0XHRcdGlmIChzb2Z0bGVhZl9pc19taWdyYXRpb24oZW50cnkpKVxuIDcyMTpcdFx0XHRcdFx0cXAtXHUwMDNlbnJfZmFpbGVkJiM0MzsmIzQzOztcbiA3MjI6XHRcdFx0XHRjb250aW51ZTtcbiA3MjM6XHRcdFx0fVxuIDcyNDpcdFx0XHRmb2xpbyA9IHZtX25vcm1hbF9mb2xpbyh2bWEsIGFkZHIsIHB0ZW50KTtcbiA3MjU6XHRcdFx0aWYgKCFmb2xpbyB8fCBmb2xpb19pc196b25lX2RldmljZShmb2xpbykpXG4gNzI2Olx0XHRcdFx0Y29udGludWU7XG4gNzI3Olx0XHRcdGlmIChmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSBcdTAwMjZcdTAwMjYgbWF4X25yICE9IDEpXG4gNzI4Olx0XHRcdFx0bnIgPSBmb2xpb19wdGVfYmF0Y2goZm9saW8sIHB0ZSwgcHRlbnQsIG1heF9ucik7XG4gNzI5Olx0XHRcdC8qXG4gNzMwOlx0XHRcdCAqIHZtX25vcm1hbF9mb2xpbygpIGZpbHRlcnMgb3V0IHplcm8gcGFnZXMsIGJ1dCB0aGVyZSBtaWdodFxuIDczMTpcdFx0XHQgKiBzdGlsbCBiZSByZXNlcnZlZCBmb2xpb3MgdG8gc2tpcCwgcGVyaGFwcyBpbiBhIFZEU08uXG4gNzMyOlx0XHRcdCAqL1xuIDczMzpcdFx0XHRpZiAoZm9saW9fdGVzdF9yZXNlcnZlZChmb2xpbykpXG4gNzM0Olx0XHRcdFx0Y29udGludWU7XG4gNzM1Olx0XHRcdGlmICghcXVldWVfZm9saW9fcmVxdWlyZWQoZm9saW8sIHFwKSlcbiA3MzY6XHRcdFx0XHRjb250aW51ZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMDM6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjA4MQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkFuYWx5emluZyB0aGUgYHF1ZXVlX2ZvbGlvc19wbWRgIEZ1bmN0aW9uKioKCkFscmlnaHQsIHNvIGBxdWV1ZV9mb2xpb3NfcG1kYCBpcyB0aGUgZnVuY3Rpb24gdGhhdCBnZXRzIGNhbGxlZCAqYWZ0ZXIqIGBwbWRfdHJhbnNfaHVnZV9sb2NrYCBmaW5hbGx5IGdyYW50cyB1cyB0aGUgbG9jay4gVGhhdCYjMzk7cyB0aGUgY3JpdGljYWwganVuY3R1cmUuIE5vdywgbGV0JiMzOTtzIGNpcmNsZSBiYWNrIGFuZCByZWFsbHkgZGlnIGludG8gdGhlIHB1cnBvc2UgYW5kIG1lY2hhbmljcyBvZiBgcXVldWVfZm9saW9zX3BtZGAuIEkgbmVlZCB0byBmdWxseSBncmFzcCB3aGF0JiMzOTtzIGhhcHBlbmluZyAqd2l0aGluKiB0aGF0IGZ1bmN0aW9uLCBnaXZlbiBpdHMgcGxhY2UgaW4gdGhpcyBjcnVjaWFsIG1lbW9yeSBtYW5hZ2VtZW50IHBhdGguIExldCYjMzk7cyByZXZpc2l0IGl0IHdpdGggYSBmcmVzaCBleWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDAzOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbWVtcG9saWN5LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2NTMsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDY1MzpcdHN0YXRpYyB2b2lkIHF1ZXVlX2ZvbGlvc19wbWQocG1kX3QgKnBtZCwgc3RydWN0IG1tX3dhbGsgKndhbGspXG4gNjU0Olx0e1xuIDY1NTpcdFx0c3RydWN0IGZvbGlvICpmb2xpbztcbiA2NTY6XHRcdHN0cnVjdCBxdWV1ZV9wYWdlcyAqcXAgPSB3YWxrLVx1MDAzZXByaXZhdGU7XG4gNjU3Olx0XHRwbWRfdCBwbWR2YWwgPSAqcG1kO1xuIDY1ODpcdFxuIDY1OTpcdFx0aWYgKHVubGlrZWx5KCFwbWRfcHJlc2VudChwbWR2YWwpKSkge1xuIDY2MDpcdFx0XHRpZiAocG1kX2lzX21pZ3JhdGlvbl9lbnRyeShwbWR2YWwpKVxuIDY2MTpcdFx0XHRcdHFwLVx1MDAzZW5yX2ZhaWxlZCYjNDM7JiM0Mzs7XG4gNjYyOlx0XHRcdHJldHVybjtcbiA2NjM6XHRcdH1cbiA2NjQ6XHRcdGZvbGlvID0gcG1kX2ZvbGlvKHBtZHZhbCk7XG4gNjY1Olx0XHRpZiAoaXNfaHVnZV96ZXJvX2ZvbGlvKGZvbGlvKSkge1xuIDY2NjpcdFx0XHR3YWxrLVx1MDAzZWFjdGlvbiA9IEFDVElPTl9DT05USU5VRTtcbiA2Njc6XHRcdFx0cmV0dXJuO1xuIDY2ODpcdFx0fVxuIDY2OTpcdFx0aWYgKCFxdWV1ZV9mb2xpb19yZXF1aXJlZChmb2xpbywgcXApKVxuIDY3MDpcdFx0XHRyZXR1cm47XG4gNjcxOlx0XHRpZiAoIShxcC1cdTAwM2VmbGFncyBcdTAwMjYgKE1QT0xfTUZfTU9WRSB8IE1QT0xfTUZfTU9WRV9BTEwpKSB8fFxuIDY3MjpcdFx0ICAgICF2bWFfbWlncmF0YWJsZSh3YWxrLVx1MDAzZXZtYSkgfHxcbiA2NzM6XHRcdCAgICAhbWlncmF0ZV9mb2xpb19hZGQoZm9saW8sIHFwLVx1MDAzZXBhZ2VsaXN0LCBxcC1cdTAwM2VmbGFncykpXG4gNjc0Olx0XHRcdHFwLVx1MDAzZW5yX2ZhaWxlZCYjNDM7JiM0Mzs7XG4gNjc1Olx0fVxuIDY3NjpcdFxuIDY3NzpcdC8qXG4gNjc4Olx0ICogU2NhbiB0aHJvdWdoIGZvbGlvcywgY2hlY2tpbmcgaWYgdGhleSBzYXRpc2Z5IHRoZSByZXF1aXJlZCBjb25kaXRpb25zLFxuIDY3OTpcdCAqIG1vdmluZyB0aGVtIGZyb20gTFJVIHRvIGxvY2FsIHBhZ2VsaXN0IGZvciBtaWdyYXRpb24gaWYgdGhleSBkbyAob3Igbm90KS5cbiA2ODA6XHQgKlxuIDY4MTpcdCAqIHF1ZXVlX2ZvbGlvc19wdGVfcmFuZ2UoKSBoYXMgdHdvIHBvc3NpYmxlIHJldHVybiB2YWx1ZXM6XG4gNjgyOlx0ICogMCAtIGNvbnRpbnVlIHdhbGtpbmcgdG8gc2NhbiBmb3IgbW9yZSwgZXZlbiBpZiBhbiBleGlzdGluZyBmb2xpbyBvbiB0aGVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMDM6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjc5MQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDI4NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBNRCBDaGVjayBpbiBgcXVldWVfZm9saW9zX3BtZGAqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBjaGFuZ2UgaW4gYHF1ZXVlX2ZvbGlvc19wbWRgLiBUaGUgY29yZSBvZiBpdCBzZWVtcyB0byBiZSBhIGNvbmRpdGlvbmFsIHJlLWFycmFuZ2VtZW50LiBQcmV2aW91c2x5LCB0aGUgY29kZSBjaGVja2VkIGlmIGEgUE1EIGVudHJ5IHdhcyBhIG1pZ3JhdGlvbiBlbnRyeS4gSWYgaXQgKndhc24mIzM5O3QqIGEgbWlncmF0aW9uIGVudHJ5LCBpdCB3b3VsZCBibGluZGx5IGF0dGVtcHQgdG8gcmV0cmlldmUgdGhlIGZvbGlvIHVzaW5nIGBwbWRfZm9saW8oKnBtZClgLiBOb3csIGl0JiMzOTtzIGNoZWNraW5nIGAhcG1kX3ByZXNlbnQocG1kdmFsKWAgZmlyc3QuIElmIHRoZSBQTUQgaXNuJiMzOTt0ICpwcmVzZW50KiAobWVhbmluZywgZm9yIGluc3RhbmNlLCBpdCYjMzk7cyBhIGRldmljZSBwcml2YXRlIGVudHJ5IG9yIHNvbWUgb3RoZXIgYWJzZW50IGVudHJ5KSwgaXQgaW1tZWRpYXRlbHkgZXhpdHMgdGhlIGZ1bmN0aW9uLiBUaGlzIGlzIGEgY3J1Y2lhbCBpbXByb3ZlbWVudCBmb3Igc3RhYmlsaXR5LgoKVGhlIG9sZCBiZWhhdmlvciB3YXMgdnVsbmVyYWJsZSwgc3BlY2lmaWNhbGx5IHdoZW4gdGhlIFBNRCB3YXNuJiMzOTt0IHByZXNlbnQsIGxlYWRpbmcgdG8gYHBtZF9mb2xpb2AgcG90ZW50aWFsbHkgY3Jhc2hpbmcgb3IgcmV0dXJuaW5nIGdhcmJhZ2UgZGF0YSwgb3IgYXR0ZW1wdGluZyB0byBkZXJlZmVyZW5jZSBhbiBpbnZhbGlkIHBvaW50ZXIuIFRoaXMgbmV3IGNoZWNrIGVmZmVjdGl2ZWx5IGFjdHMgYXMgYSBzYWZldHkgbmV0LCBhdm9pZGluZyB0aG9zZSBpc3N1ZXMuIFRoZSBjaGFuZ2UgcHJldmVudHMgYXR0ZW1wdHMgdG8gdXNlIGFuIGludmFsaWQgUE1EIHZhbHVlLgoKV2FpdCwgbG9va2luZyBhdCBpdCwgaXQgYXBwZWFycyBgcG1kX3RyYW5zX2h1Z2VfbG9ja2Agb25seSByZXR1cm5zIGEgbG9jayBpZiB0aGUgUE1EIGlzIGEgdHJhbnMgaHVnZSBQTUQgb3IgYSBkZXZtYXAgUE1ELiBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUgY2hlY2sgdGhhdCBhc3N1bXB0aW9uIGFuZCB2ZXJpZnkgdGhlIGJlaGF2aW9yIG9mIHRoYXQgZnVuY3Rpb24gYXMgd2VsbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMDM6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cG1kX3RyYW5zX2h1Z2VfbG9jayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi92YWRkci5jPTI2Nz1zdGF0aWMgaW50IGRhbW9uX21rb2xkX3BtZF9lbnRyeShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxubW0vZGFtb24vdmFkZHIuYy0yNzItXG5tbS9kYW1vbi92YWRkci5jOjI3MzpcdHB0bCA9IHBtZF90cmFuc19odWdlX2xvY2socG1kLCB3YWxrLVx1MDAzZXZtYSk7XG5tbS9kYW1vbi92YWRkci5jLTI3NC1cdGlmIChwdGwpIHtcbi0tXG5tbS9kYW1vbi92YWRkci5jPTM5MD1zdGF0aWMgaW50IGRhbW9uX3lvdW5nX3BtZF9lbnRyeShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxubW0vZGFtb24vdmFkZHIuYy0zOTktI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxubW0vZGFtb24vdmFkZHIuYzo0MDA6XHRwdGwgPSBwbWRfdHJhbnNfaHVnZV9sb2NrKHBtZCwgd2Fsay1cdTAwM2V2bWEpO1xubW0vZGFtb24vdmFkZHIuYy00MDEtXHRpZiAocHRsKSB7XG4tLVxubW0vZGFtb24vdmFkZHIuYz02NTQ9c3RhdGljIGludCBkYW1vc192YV9taWdyYXRlX3BtZF9lbnRyeShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxubW0vZGFtb24vdmFkZHIuYy02NjYtI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxubW0vZGFtb24vdmFkZHIuYzo2Njc6XHRwdGwgPSBwbWRfdHJhbnNfaHVnZV9sb2NrKHBtZCwgd2Fsay1cdTAwM2V2bWEpO1xubW0vZGFtb24vdmFkZHIuYy02NjgtXHRpZiAocHRsKSB7XG4tLVxubW0vZGFtb24vdmFkZHIuYz04MTQ9c3RhdGljIGludCBkYW1vc192YV9zdGF0X3BtZF9lbnRyeShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxubW0vZGFtb24vdmFkZHIuYy04MjYtI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxubW0vZGFtb24vdmFkZHIuYzo4Mjc6XHRwdGwgPSBwbWRfdHJhbnNfaHVnZV9sb2NrKHBtZCwgdm1hKTtcbm1tL2RhbW9uL3ZhZGRyLmMtODI4LVx0aWYgKHB0bCkge1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MjI4MD1ib29sIG1hZHZpc2VfZnJlZV9odWdlX3BtZChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9odWdlX21lbW9yeS5jLTIyOTAtXG5tbS9odWdlX21lbW9yeS5jOjIyOTE6XHRwdGwgPSBwbWRfdHJhbnNfaHVnZV9sb2NrKHBtZCwgdm1hKTtcbm1tL2h1Z2VfbWVtb3J5LmMtMjI5Mi1cdGlmICghcHRsKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MjQyNj1ib29sIHphcF9odWdlX3BtZChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9odWdlX21lbW9yeS5jLTI0MzctXG5tbS9odWdlX21lbW9yeS5jOjI0Mzg6XHRwdGwgPSBfX3BtZF90cmFuc19odWdlX2xvY2socG1kLCB2bWEpO1xubW0vaHVnZV9tZW1vcnkuYy0yNDM5LVx0aWYgKCFwdGwpXG4tLVxubW0vaHVnZV9tZW1vcnkuYz0yNTA1PWJvb2wgbW92ZV9odWdlX3BtZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBvbGRfYWRkcixcbi0tXG5tbS9odWdlX21lbW9yeS5jLTI1MjYtXHQgKi9cbm1tL2h1Z2VfbWVtb3J5LmM6MjUyNzpcdG9sZF9wdGwgPSBfX3BtZF90cmFuc19odWdlX2xvY2sob2xkX3BtZCwgdm1hKTtcbm1tL2h1Z2VfbWVtb3J5LmMtMjUyOC1cdGlmIChvbGRfcHRsKSB7XG4tLVxubW0vaHVnZV9tZW1vcnkuYz0yNjAyPWludCBjaGFuZ2VfaHVnZV9wbWQoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0yNjE4LVxubW0vaHVnZV9tZW1vcnkuYzoyNjE5Olx0cHRsID0gX19wbWRfdHJhbnNfaHVnZV9sb2NrKHBtZCwgdm1hKTtcbm1tL2h1Z2VfbWVtb3J5LmMtMjYyMC1cdGlmICghcHRsKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9Mjc1MD1pbnQgbW92ZV9wYWdlc19odWdlX3BtZChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKmRzdF9wbWQsIHBtZF90ICpzcmNfcG1kLCBwbWRfdCBkc3RfcG1kdmFsLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMjg2OC0gKi9cbm1tL2h1Z2VfbWVtb3J5LmM6Mjg2OTpzcGlubG9ja190ICpfX3BtZF90cmFuc19odWdlX2xvY2socG1kX3QgKnBtZCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG5tbS9odWdlX21lbW9yeS5jLTI4NzAte1xuLS1cbm1tL21hZHZpc2UuYz0zNTM9c3RhdGljIGludCBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2UocG1kX3QgKnBtZCxcbi0tXG5tbS9tYWR2aXNlLmMtMzgxLVx0XHR0bGJfY2hhbmdlX3BhZ2Vfc2l6ZSh0bGIsIEhQQUdFX1BNRF9TSVpFKTtcbm1tL21hZHZpc2UuYzozODI6XHRcdHB0bCA9IHBtZF90cmFuc19odWdlX2xvY2socG1kLCB2bWEpO1xubW0vbWFkdmlzZS5jLTM4My1cdFx0aWYgKCFwdGwpXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYz03NDI9c3RhdGljIGludCBod3BvaXNvbl9wdGVfcmFuZ2UocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTc0OS1cbm1tL21lbW9yeS1mYWlsdXJlLmM6NzUwOlx0cHRsID0gcG1kX3RyYW5zX2h1Z2VfbG9jayhwbWRwLCB3YWxrLVx1MDAzZXZtYSk7XG5tbS9tZW1vcnktZmFpbHVyZS5jLTc1MS1cdGlmIChwdGwpIHtcbi0tXG5tbS9tZW1wb2xpY3kuYz02ODc9c3RhdGljIGludCBxdWV1ZV9mb2xpb3NfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9tZW1wb2xpY3kuYy02OTgtXG5tbS9tZW1wb2xpY3kuYzo2OTk6XHRwdGwgPSBwbWRfdHJhbnNfaHVnZV9sb2NrKHBtZCwgdm1hKTtcbm1tL21lbXBvbGljeS5jLTcwMC1cdGlmIChwdGwpIHtcbi0tXG5tbS9taW5jb3JlLmM9MTYzPXN0YXRpYyBpbnQgbWluY29yZV9wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbi0tXG5tbS9taW5jb3JlLmMtMTcyLVxubW0vbWluY29yZS5jOjE3MzpcdHB0bCA9IHBtZF90cmFuc19odWdlX2xvY2socG1kLCB2bWEpO1xubW0vbWluY29yZS5jLTE3NC1cdGlmIChwdGwpIHtcbi0tXG5tbS9tbG9jay5jPTM1MD1zdGF0aWMgaW50IG1sb2NrX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxubW0vbWxvY2suYy0zNjEtXG5tbS9tbG9jay5jOjM2MjpcdHB0bCA9IHBtZF90cmFuc19odWdlX2xvY2socG1kLCB2bWEpO1xubW0vbWxvY2suYy0zNjMtXHRpZiAocHRsKSB7XG4tLVxubW0vdXNlcmZhdWx0ZmQuYz0xOTM0PXN0YXRpYyBzc2l6ZV90IG1vdmVfcGFnZXMoc3RydWN0IHVzZXJmYXVsdGZkX2N0eCAqY3R4LCB1bnNpZ25lZCBsb25nIGRzdF9zdGFydCxcbi0tXG5tbS91c2VyZmF1bHRmZC5jLTIwMjItXG5tbS91c2VyZmF1bHRmZC5jOjIwMjM6XHRcdHB0bCA9IHBtZF90cmFuc19odWdlX2xvY2soc3JjX3BtZCwgc3JjX3ZtYSk7XG5tbS91c2VyZmF1bHRmZC5jLTIwMjQtXHRcdGlmIChwdGwpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMDM6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTE0MAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBUSFAgTG9jayoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoZSBsb2NrIGFzc29jaWF0ZWQgd2l0aCBUcmFuc3BhcmVudCBIdWdlIFBhZ2VzIChUSFApIGFuZCBuZWVkIHRvIHBpbnBvaW50IHdoZXJlIGl0JiMzOTtzIGRlZmluZWQgYW5kIGhhbmRsZWQuIE15IGZpcnN0IG1vdmUgaXMgdG8gbG9vayBhdCBgX19wbWRfdHJhbnNfaHVnZV9sb2NrYC4gVGhhdCBmdW5jdGlvbiBuYW1lIGZlZWxzIGZhbWlsaWFyIGFzIGEgcG90ZW50aWFsIGNhbmRpZGF0ZSBmb3IgdGhlIGNvcmUgbG9jaywgc28gSSYjMzk7bGwgc3RhcnQgd2l0aCB0aGUgaW1wbGVtZW50YXRpb24gaW4gYG1tL2h1Z2VfbWVtb3J5LmNgLiBBbHRlcm5hdGl2ZWx5LCBpdCBjb3VsZCBiZSBhIHNpbXBsZXIgZGVjbGFyYXRpb24gaW4gYW4gaW5jbHVkZSBmaWxlLiBJIHdpbGwgYWxzbyBjaGVjayBgcG1kX3RyYW5zX2h1Z2VfbG9ja2AgaW4gYGluY2x1ZGUvbGludXgvaHVnZV9tbS5oYCBhcyBhIGxpa2VseSBzb3VyY2UuIExldCYjMzk7cyBzZWUgd2hhdCB0aGF0IHJldmVhbHMgYWJvdXQgdGhlIGNyaXRpY2FsIHNlY3Rpb24gaXQgcHJvdGVjdHMgYW5kIHRoZSBvdmVyYWxsIFRIUCBtYW5hZ2VtZW50IHN0cmF0ZWd5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAwMzoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwbWRfdHJhbnNfaHVnZV9sb2NrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9odWdlX21tLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9odWdlX21tLmg9NDk2PXZvaWQgdm1hX2FkanVzdF90cmFuc19odWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNDk3LVx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgZW5kLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKm5leHQpO1xuaW5jbHVkZS9saW51eC9odWdlX21tLmg6NDk4OnNwaW5sb2NrX3QgKl9fcG1kX3RyYW5zX2h1Z2VfbG9jayhwbWRfdCAqcG1kLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC00OTktc3BpbmxvY2tfdCAqX19wdWRfdHJhbnNfaHVnZV9sb2NrKHB1ZF90ICpwdWQsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTtcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC01MDEtLyogbW1hcF9sb2NrIG11c3QgYmUgaGVsZCBvbiBlbnRyeSAqL1xuaW5jbHVkZS9saW51eC9odWdlX21tLmg6NTAyOnN0YXRpYyBpbmxpbmUgc3BpbmxvY2tfdCAqcG1kX3RyYW5zX2h1Z2VfbG9jayhwbWRfdCAqcG1kLFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNTAzLVx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC01MDUtXHRpZiAocG1kX2lzX2h1Z2UoKnBtZCkpXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDo1MDY6XHRcdHJldHVybiBfX3BtZF90cmFuc19odWdlX2xvY2socG1kLCB2bWEpO1xuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNTA3LVxuLS1cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oPTcwOT1zdGF0aWMgaW5saW5lIHZvaWQgdm1hX2FkanVzdF90cmFuc19odWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTcxNC19XG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDo3MTU6c3RhdGljIGlubGluZSBzcGlubG9ja190ICpwbWRfdHJhbnNfaHVnZV9sb2NrKHBtZF90ICpwbWQsXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC03MTYtXHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAwMzoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5ODYxCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBQTUQgU3RhdGVzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBwbWRfaXNfaHVnZSgqcG1kKWAgZnVuY3Rpb24gY2FsbC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7SXMgdGhpcyBhIGh1Z2UgUE1EPyYjMzQ7IFRoZSBuZXh0IHRoaW5nIEkmIzM5O20gY29uc2lkZXJpbmcgaXMsIGlmIGl0JiMzOTtzIGh1Z2UsIGlzIHRoZXJlIGFueSBwb3NzaWJpbGl0eSB0aGF0IGl0IGNvdWxkIGFsc28gYmUgYSBtaWdyYXRpb24gZW50cnk/IEkga25vdyB0aGVyZSYjMzk7cyBhIGRpc3RpbmN0aW9uIGhlcmUuCgpZZXMsIHRoZXJlJiMzOTtzIGBwbWRfaXNfbWlncmF0aW9uX2VudHJ5YCwgc28gdGhhdCB0YWtlcyBjYXJlIG9mIHRoYXQgcG9zc2liaWxpdHkuIEFuZCBpZiBpdCBfaXNfIGEgbWlncmF0aW9uIGVudHJ5LCBgcG1kX3ByZXNlbnRgIHdpbGwgZGVmaW5pdGVseSByZXR1cm4gZmFsc2UuIFRoYXQgbWFrZXMgc2Vuc2UsIGJ1dCB0aGVuIGl0IGhpdHMgbWU6IEhvbGQgb24gYSBzZWNvbmQsIGlmIGBwbWRfcHJlc2VudGAgaXMgZmFsc2UsIGlzbiYjMzk7dCBpdCBzdGlsbCBwb3NzaWJsZSBmb3IgYHBtZF9pc19odWdlYCB0byByZXR1cm4gdHJ1ZT8gSSBuZWVkIHRvIHZlcmlmeSB0aGF0LiBJJiMzOTttIGdvaW5nIHRvIGRvdWJsZSBjaGVjayBgcG1kX2lzX2h1Z2VgIGFnYWluIHRvIGVuc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGxvZ2ljLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAwMzoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwbWRfaXNfaHVnZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvaHVnZV9tbS5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvaHVnZV9tbS5oPTQzMT12b2lkIF9fc3BsaXRfaHVnZV9wbWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHBtZF90ICpwbWQsXG4tLVxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNDM0LS8qKlxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6NDM1OiAqIHBtZF9pc19odWdlKCkgLSBJcyB0aGlzIFBNRCBlaXRoZXIgYSBodWdlIFBNRCBlbnRyeSBvciBhIHNvZnR3YXJlIGxlYWYgZW50cnk/XG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC00MzYtICogQHBtZDogVGhlIFBNRCB0byBjaGVjay5cbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC00NDQtICovXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDo0NDU6c3RhdGljIGlubGluZSBib29sIHBtZF9pc19odWdlKHBtZF90IHBtZClcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTQ0Ni17XG4tLVxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNDYyLVx0XHRwbWRfdCAqX19fX3BtZCA9IChfX3BtZCk7XHRcdFx0XHRcXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6NDYzOlx0XHRpZiAocG1kX2lzX2h1Z2UoKl9fX19wbWQpKVx0XHRcdFx0XFxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTQ2NC1cdFx0XHRfX3NwbGl0X2h1Z2VfcG1kKF9fdm1hLCBfX3BtZCwgX19hZGRyZXNzLFx0XFxcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaD01MDI9c3RhdGljIGlubGluZSBzcGlubG9ja190ICpwbWRfdHJhbnNfaHVnZV9sb2NrKHBtZF90ICpwbWQsXG4tLVxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNTA0LXtcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjUwNTpcdGlmIChwbWRfaXNfaHVnZSgqcG1kKSlcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTUwNi1cdFx0cmV0dXJuIF9fcG1kX3RyYW5zX2h1Z2VfbG9jayhwbWQsIHZtYSk7XG4tLVxuaW5jbHVkZS9saW51eC9odWdlX21tLmg9Nzg0PXN0YXRpYyBpbmxpbmUgc3RydWN0IGZvbGlvICpnZXRfcGVyc2lzdGVudF9odWdlX3plcm9fZm9saW8odm9pZClcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC03ODgtXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDo3ODk6c3RhdGljIGlubGluZSBib29sIHBtZF9pc19odWdlKHBtZF90IHBtZClcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTc5MC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDAzOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNzMxCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gd2hhdCBJJiMzOTttIGxvb2tpbmcgYXQ6CgoqKkRlY29uc3RydWN0aW5nIGBwbWRfaXNfaHVnZWAqKgoKQWxyaWdodCwgSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBgcG1kX2lzX2h1Z2VgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgbG9naWMgYW5kIGhvdyBpdCBkZXRlcm1pbmVzIGlmIGEgcGFydGljdWxhciBwYWdlIG1hcCBsZXZlbCBkaXJlY3RvcnkgKFBNRCkgZW50cnkgcmVwcmVzZW50cyBhIGh1Z2UgcGFnZS4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQg4oCTIFBNRHMsIHBhZ2UgdGFibGVzLCB0aGUgaW1wbGljYXRpb25zIGZvciBtZW1vcnkgbWFuYWdlbWVudC4uLiB3aGF0IGZsYWdzIGFyZSB3ZSBjaGVja2luZz8gQXJlIHdlIGxvb2tpbmcgYXQgc3BlY2lmaWMgYml0cyB3aXRoaW4gdGhlIFBNRCBpdHNlbGYsIG9yIGFyZSB3ZSByZWZlcmVuY2luZyBzb21lIG90aGVyIGFzc29jaWF0ZWQgbWV0YWRhdGE/IEkgZXhwZWN0IHRvIHNlZSBiaXR3aXNlIG9wZXJhdGlvbnMsIGxpa2VseSBpbnZvbHZpbmcgbWFza3MgYW5kIHNoaWZ0cywgdG8gZXh0cmFjdCBhbmQgZXZhbHVhdGUgdGhlIHJlbGV2YW50IGZsYWdzLiBJIGhvcGUgdGhlIGltcGxlbWVudGF0aW9uIGlzIHJlYXNvbmFibHkgb3B0aW1pemVkIGZvciBwZXJmb3JtYW5jZTsgdGhpcyBpcyBhIGNyaXRpY2FsIGZ1bmN0aW9uIGZvciBwYWdlIHRhYmxlIGxvb2t1cHMsIHNvIGl0IG5lZWRzIHRvIGJlIGZhc3QuIEkgd2FudCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvYnZpb3VzIGdvdGNoYXMgb3IgcG90ZW50aWFsIGFyZWFzIGZvciBpbXByb3ZlbWVudC4gTGV0JiMzOTtzIHNlZSBob3cgdGhleSBoYW5kbGUgZGlmZmVyZW50IGFyY2hpdGVjdHVyZXMsIHRvbyDigJMgSSBiZXQgdGhlcmUmIzM5O3Mgc29tZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBvciBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgY29kZSBpbiB0aGVyZS4gSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciB0aGUgYXJjaGl0ZWN0dXJhbCBkaWZmZXJlbmNlcyBiZXR3ZWVuIFBNRCBmb3JtYXRzIGFuZCBob3cgdGhlc2UgbWlnaHQgYmUgcmVmbGVjdGVkIGluIHRoZSBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAwMzoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvaHVnZV9tbS5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDQ1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDE1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0NDU6XHRzdGF0aWMgaW5saW5lIGJvb2wgcG1kX2lzX2h1Z2UocG1kX3QgcG1kKVxuIDQ0NjpcdHtcbiA0NDc6XHRcdGlmIChwbWRfcHJlc2VudChwbWQpKSB7XG4gNDQ4Olx0XHRcdHJldHVybiBwbWRfdHJhbnNfaHVnZShwbWQpO1xuIDQ0OTpcdFx0fSBlbHNlIGlmICghcG1kX25vbmUocG1kKSkge1xuIDQ1MDpcdFx0XHQvKlxuIDQ1MTpcdFx0XHQgKiBOb24tcHJlc2VudCBQTURzIG11c3QgYmUgdmFsaWQgaHVnZSBub24tcHJlc2VudCBlbnRyaWVzLiBXZVxuIDQ1MjpcdFx0XHQgKiBjYW5ub3QgYXNzZXJ0IHRoYXQgaGVyZSBkdWUgdG8gaGVhZGVyIGRlcGVuZGVuY3kgaXNzdWVzLlxuIDQ1MzpcdFx0XHQgKi9cbiA0NTQ6XHRcdFx0cmV0dXJuIHRydWU7XG4gNDU1Olx0XHR9XG4gNDU2Olx0XG4gNDU3Olx0XHRyZXR1cm4gZmFsc2U7XG4gNDU4Olx0fVxuIDQ1OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAwMzoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTI0NQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDQ2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBCdWcgRml4OiBQcmV2ZW50aW5nIENyYXNoZXMgaW4gYHF1ZXVlX2ZvbGlvc19wbWRgKioKCk9rYXksIHNvIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdW5kZXJzdGFuZGluZyBvZiBgcG1kX2lzX2h1Z2VgIGlzIGtleSBoZXJlLiBJdCByZXR1cm5zIHRydWUgd2hlbiBhIFBhZ2UgTWFwIERpcmVjdG9yeSAoUE1EKSBpc24mIzM5O3QgcHJlc2VudCwgKmFuZCogaXQmIzM5O3Mgbm90IGEgJiMzNDtub25lJiMzNDsgZW50cnkuIFRoaXMgc2VlbXMgdG8gY292ZXIgc2l0dWF0aW9ucyBsaWtlIG1pZ3JhdGlvbiBlbnRyaWVzIGFuZCwgbW9yZSBpbXBvcnRhbnRseSBpbiB0aGlzIGNhc2UsIGRldmljZSBwcml2YXRlIGVudHJpZXMuIEl0IGFwcGVhcnMgdGhlIGNvZGUgd2FzIHByZXZpb3VzbHkgZ2V0dGluZyB0cmlwcGVkIHVwIG9uIHRoZXNlIGxhdHRlciBjYXNlcyB3aGVuIGNhbGxpbmcgYHF1ZXVlX2ZvbGlvc19wbWRgLgoKSSBzZWUgdGhlIGZpeC4gVGhlIGZ1bmN0aW9uIGBxdWV1ZV9mb2xpb3NfcG1kYCB3YXMgb3JpZ2luYWxseSBjYWxsaW5nIGBwbWRfZm9saW9gIGRpcmVjdGx5IG9uIHRoZXNlIG5vbi1wcmVzZW50IFBNRHMuIElmIGl0IHdhcyBhIGRldmljZSBwcml2YXRlIGVudHJ5LCB0aGlzIGNvdWxkIGxlYWQgdG8gY3Jhc2hlcyBvciB1bmRlZmluZWQgYmVoYXZpb3IsIGJlY2F1c2UgYHBtZF9mb2xpb2AgaXNuJiMzOTt0IGV4cGVjdGluZyB0byBoYW5kbGUgdGhhdCBraW5kIG9mIGRhdGEuIFRoZSBvcmlnaW5hbCBjaGVjayBvbmx5IGxvb2tlZCBmb3IgbWlncmF0aW9uIGVudHJpZXMsIGJ1dCBub3Qgb3RoZXIgbm9uLXByZXNlbnQgZW50cmllcy4KClRoZSBmaXggbm93IGFkZHMgYSBjcnVjaWFsIGAhcG1kX3ByZXNlbnRgIGNoZWNrICpiZWZvcmUqIGNhbGxpbmcgYHBtZF9mb2xpb2AuIFRoaXMgYWRkaXRpb24gY29ycmVjdGx5IGhhbmRsZXMgZGV2aWNlIHByaXZhdGUgZW50cmllcy4gSWYgdGhlIFBNRCBpc24mIzM5O3QgcHJlc2VudCwgdGhlIGNvZGUgd2lsbCBjaGVjayBpZiBpdCAqaXMqIGEgbWlncmF0aW9uIGVudHJ5LiBPdGhlcndpc2UsIGl0IGV4aXRzIGVhcmx5LiBUaGlzIGVmZmVjdGl2ZWx5IHByZXZlbnRzIHRoZSBwb3RlbnRpYWwgY3Jhc2ggb3IgZ2FyYmFnZSByZXR1cm4uCgpUaGUgaW1wb3J0YW50IHF1ZXN0aW9uIG5vdyBpcyBpZiB0aGlzIGlzIHdvcnRoIGZ1enppbmcuIEkmIzM5O2Qgc2F5LCB5ZXMsIGFic29sdXRlbHkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGJ1ZyBmaXguIGBxdWV1ZV9mb2xpb3NfcG1kYCBpcyB1c2VkIGJ5IGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgZnVuY3Rpb25hbGl0eSBsaWtlIGBtYmluZGAsIGBzZXRfbWVtcG9saWN5YCwgYW5kIGBtaWdyYXRlX3BhZ2VzYC4gVGhlIHJlbGV2YW50IGNvbmZpZyBvcHRpb25zIGFyZSBgQ09ORklHX05VTUFgIGFuZCBgQ09ORklHX0RFVklDRV9QUklWQVRFYC4gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGBDT05GSUdfREVWSUNFX1BSSVZBVEVgIGlzIHNldCB0byBlbnN1cmUgdGhpcyBjb2RlIGlzIGV2ZW4gYWN0aXZlLiAKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMDM6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX0RFVklDRV9QUklWQVRFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbXJlbWFwLmM9MjY2PXZvaWQgKm1lbXJlbWFwX3BhZ2VzKHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXAsIGludCBuaWQpXG4tLVxubW0vbWVtcmVtYXAuYy0yODMtXHRjYXNlIE1FTU9SWV9ERVZJQ0VfUFJJVkFURTpcbm1tL21lbXJlbWFwLmM6Mjg0Olx0XHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0RFVklDRV9QUklWQVRFKSkge1xubW0vbWVtcmVtYXAuYy0yODUtXHRcdFx0V0FSTigxLCBcJiMzNDtEZXZpY2UgcHJpdmF0ZSBtZW1vcnkgbm90IHN1cHBvcnRlZFxcblwmIzM0Oyk7XG4tLVxubW0vcm1hcC5jPTI3NDE9dm9pZCB0cnlfdG9fbWlncmF0ZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBlbnVtIHR0dV9mbGFncyBmbGFncylcbi0tXG5tbS9ybWFwLmMtMjc3OC1cbm1tL3JtYXAuYzoyNzc5OiNpZmRlZiBDT05GSUdfREVWSUNFX1BSSVZBVEVcbm1tL3JtYXAuYy0yNzgwLS8qKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAwMzoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjMyMQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDYxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyB0aGUgTWVtb3J5IE1hbmFnZW1lbnQgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCBgQ09ORklHX0RFVklDRV9QUklWQVRFYCBpcyBpbmRlZWQgZGVmaW5lZC4gQW5kLCBJIHNlZSwgd2UgYWxzbyBuZWVkIHRvIGhhdmUgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgZW5hYmxlZC4gVGhpcyBtYWtlcyBwZXJmZWN0IHNlbnNlOyBgcXVldWVfZm9saW9zX3BtZGAgaXMgc3BlY2lmaWNhbGx5IHRpZWQgdG8gaHVnZSBQTURzLCBzbyB0aGF0IGRlcGVuZGVuY3kgaXMgY2xlYXIuIE5vdywgbGV0JiMzOTtzIGp1c3QgcXVpY2tseSBjaGVjayB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBgcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5YCBmdW5jdGlvbiwganVzdCB0byBlbnN1cmUgb3VyIGFzc3VtcHRpb25zIGFyZSBjb3JyZWN0LCBhbmQgYWxsIGRlcGVuZGVuY2llcyBhcmUgd2hlcmUgdGhleSBzaG91bGQgYmUuIEkgd2FudCB0byBoYXZlIGEgaG9saXN0aWMgdmlldyBiZWZvcmUgSSBtb3ZlIGZvcndhcmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDAzOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbGVhZm9wcy5oPTU3ND1zdGF0aWMgaW5saW5lIGJvb2wgcHRlX2lzX3VmZmRfbWFya2VyKHB0ZV90IHB0ZSlcbi0tXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC01OTItLyoqXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDo1OTM6ICogcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KCkgLSBDaGVjayBpZiBQTUQgY29udGFpbnMgYSBkZXZpY2UgcHJpdmF0ZSBzd2FwXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC01OTQtICogZW50cnkuXG4tLVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNjAzLSAqL1xuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6NjA0OnN0YXRpYyBpbmxpbmUgYm9vbCBwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnkocG1kX3QgcG1kKVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNjA1LXtcbi0tXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC02MTAtXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDo2MTE6c3RhdGljIGlubGluZSBib29sIHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeShwbWRfdCBwbWQpXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC02MTIte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAwMzoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjc5NQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgaWYgdGhleSYjMzk7cmUgbXkgb3duOgoKKipBbmFseXppbmcgdGhlIGBwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnlgIERlZmluaXRpb24qKgoKQWxyaWdodCwgc28gdGhlIGluaXRpYWwgdGhvdWdodCBpcyBjbGVhcmx5IGZvY3VzZWQgb24gYSBzcGVjaWZpYyBmdW5jdGlvbiBkZWZpbml0aW9uOiBgcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5YC4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGRpc3NlY3QgdGhpcy4gV2UgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlIGFuZCBob3cgaXQgZnVuY3Rpb25zIHdpdGhpbiB0aGUgbGFyZ2VyIGNvbnRleHQgb2YgdGhlIHN5c3RlbS4gSSYjMzk7bSBhc3N1bWluZywgZ2l2ZW4gdGhlIG5hbWluZyBjb252ZW50aW9uLCB0aGlzIGhhcyBzb21ldGhpbmcgdG8gZG8gd2l0aCB0aGUgUGFnZSBNaWRkbGUgRGlyZWN0b3J5LCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byB3aGV0aGVyIGFuIGVudHJ5IGlzIGNvbnNpZGVyZWQgJiMzNDtkZXZpY2UgcHJpdmF0ZSYjMzQ7LiBUaGUgdGVybSAmIzM0O2RldmljZSBwcml2YXRlJiMzNDsgaXMga2V5IGhlcmUsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhhdCBlbnRhaWxzIGluIHRoaXMgY29udGV4dC4gSXMgaXQgYSBmbGFnPyBBIHNwZWNpZmljIHZhbHVlPyBBIGNvbWJpbmF0aW9uIG9mIGJpdHM/IElzIGl0IHJlbGF0ZWQgdG8gRE1BLCBNTUlPLCBvciBzb21lIG90aGVyIGFzcGVjdCBvZiBkZXZpY2UgYWNjZXNzPyBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBmdW5jdGlvbiYjMzk7cyBjb2RlIGl0c2VsZiB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyBpbXBsZW1lbnRhdGlvbiBhbmQgdXNhZ2Ugd2l0aGluIHRoZSBvdmVyYWxsIG1lbW9yeSBtYW5hZ2VtZW50IHNjaGVtZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMDM6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2xlYWZvcHMuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU5MywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTkzOlx0ICogcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KCkgLSBDaGVjayBpZiBQTUQgY29udGFpbnMgYSBkZXZpY2UgcHJpdmF0ZSBzd2FwXG4gNTk0Olx0ICogZW50cnkuXG4gNTk1Olx0ICogQHBtZDogVGhlIFBNRCB0byBjaGVjay5cbiA1OTY6XHQgKlxuIDU5NzpcdCAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgUE1EIGNvbnRhaW5zIGEgc3dhcCBlbnRyeSB0aGF0IHJlcHJlc2VudHMgYSBkZXZpY2UgcHJpdmF0ZVxuIDU5ODpcdCAqIHBhZ2UgbWFwcGluZy4gVGhpcyBpcyB1c2VkIGZvciB6b25lIGRldmljZSBwcml2YXRlIHBhZ2VzIHRoYXQgaGF2ZSBiZWVuXG4gNTk5Olx0ICogc3dhcHBlZCBvdXQgYnV0IHN0aWxsIG5lZWQgc3BlY2lhbCBoYW5kbGluZyBkdXJpbmcgdmFyaW91cyBtZW1vcnkgbWFuYWdlbWVudFxuIDYwMDpcdCAqIG9wZXJhdGlvbnMuXG4gNjAxOlx0ICpcbiA2MDI6XHQgKiBSZXR1cm46IHRydWUgaWYgUE1EIGNvbnRhaW5zIGRldmljZSBwcml2YXRlIGVudHJ5LCBmYWxzZSBvdGhlcndpc2VcbiA2MDM6XHQgKi9cbiA2MDQ6XHRzdGF0aWMgaW5saW5lIGJvb2wgcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KHBtZF90IHBtZClcbiA2MDU6XHR7XG4gNjA2Olx0XHRyZXR1cm4gc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoc29mdGxlYWZfZnJvbV9wbWQocG1kKSk7XG4gNjA3Olx0fVxuIDYwODpcdFxuIDYwOTpcdCNlbHNlICAvKiBDT05GSUdfWk9ORV9ERVZJQ0UgXHUwMDI2XHUwMDI2IENPTkZJR19BUkNIX0hBU19QTURfU09GVExFQVZFUyAqL1xuIDYxMDpcdFxuIDYxMTpcdHN0YXRpYyBpbmxpbmUgYm9vbCBwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnkocG1kX3QgcG1kKVxuIDYxMjpcdHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMDM6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM0MDQKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiA0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBEZXZpY2UgTWVtb3J5IENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgbG9va3MgbGlrZSB3ZSYjMzk7cmUgZGl2aW5nIGludG8gbWVtb3J5IG1hbmFnZW1lbnQgaGVyZS4gRmlyc3QgdGhvdWdodDogd2UmIzM5O3JlIGdvaW5nIHRvIG5lZWQgYENPTkZJR19aT05FX0RFVklDRWAuIFRoYXQmIzM5O3MgYSBnaXZlbiBmb3IgYW55IG1vZGVybiBkZXZpY2Ugc2V0dXAsIHJpZ2h0PyBCdXQgaG9sZCBvbiBhIHNlY29uZC4uLiBpc24mIzM5O3QgYENPTkZJR19ERVZJQ0VfUFJJVkFURWAgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGZvciBjb250cm9sbGluZyBwcml2YXRlIG1lbW9yeSBhbGxvY2F0aW9uIHNwZWNpZmljIHRvIGEgZGV2aWNlPyBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gZ2V0dGluZyB0aGVzZSB0d28gY29uY2VwdHMgc3RyYWlnaHQgaW4gbXkgaGVhZCBiZWNhdXNlIHRoZXkgY2FuIGluZmx1ZW5jZSBlYWNoIG90aGVyLiBCZXR0ZXIgZG91YmxlLWNoZWNrIHRoZSBLY29uZmlnIGRvY3VtZW50YXRpb24gZm9yIGBDT05GSUdfREVWSUNFX1BSSVZBVEVgLiBMZXQmIzM5O3MgY2xhcmlmeSBpdHMgZXhhY3QgZnVuY3Rpb24gYW5kIGRlcGVuZGVuY2llcyBiZWZvcmUgbW92aW5nIGFueSBmdXJ0aGVyLiBUaGlzIGlzIGNyaXRpY2FsIGZvciBnZXR0aW5nIHRoaXMgcmlnaHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDAzOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBERVZJQ0VfUFJJVkFURSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTEyNjI9Y29uZmlnIEdFVF9GUkVFX1JFR0lPTlxuLS1cbm1tL0tjb25maWctMTI2NC1cbm1tL0tjb25maWc6MTI2NTpjb25maWcgREVWSUNFX1BSSVZBVEVcbm1tL0tjb25maWctMTI2Ni1cdGJvb2wgXCYjMzQ7VW5hZGRyZXNzYWJsZSBkZXZpY2UgbWVtb3J5IChHUFUgbWVtb3J5LCAuLi4pXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDAzOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNzE5CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjA1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipBbmFseXppbmcgRGV2aWNlIFByaXZhdGUgUE1EIEhhbmRsaW5nIGluIHRoZSBLZXJuZWwqKgoKUmlnaHQsIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IGRldmljZSBwcml2YXRlIGNvbmZpZ3VyYXRpb25zIOKAkyBzcGVjaWZpY2FsbHksIGBERVZJQ0VfUFJJVkFURWAuIEkgbmVlZCB0byByZW1lbWJlciB0aGF0IHRoZSBpbXBvcnRhbnQgY29uZmlncyByZWxhdGVkIHRvIHRoaXMgYXJlIGBOVU1BYCwgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCwgYW5kIG9mIGNvdXJzZSwgYERFVklDRV9QUklWQVRFYCBpdHNlbGYuIEdvdCBpdC4KCk5vdywgdGhlIGNvcmUgZnVuY3Rpb25zIHRoYXQgc2VlbSByZWxldmFudCBhcmUgYHF1ZXVlX2ZvbGlvc19wbWRgLCBgcXVldWVfZm9saW9zX3B0ZV9yYW5nZWAsIGBtYWR2aXNlX2ZyZWVfaHVnZV9wbWRgLCBhbmQgYG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZWAuIEhtbSwgYSBxdWljayBza2ltIHNob3dzIHRoYXQgdGhlIGBtYWR2aXNlX2AgZnVuY3Rpb25zIGFyZSB0aHJvd2luZyB1cCByZWQgZmxhZ3MsIHRoZSBvbmx5IGNoYW5nZXMgYmVpbmcgYFZNX0JVR19PTmAgdXBkYXRlcy4gVGhhdCBzdWdnZXN0cyBhIGJ1ZyBjaGVjayByZWxhdGVkIHRvIGhhbmRsaW5nIHRoZXNlIHByaXZhdGUgUE1Ecy4gVGhlc2UgYXJlIGxpbmtlZC4KCkxldCYjMzk7cyBkaWcgZGVlcGVyLiBJcyBgcXVldWVfZm9saW9zX3BtZGAgdGhlIGNvcmU/IExldCBtZSBjaGVjayBpdHMgZGVmaW5pdGlvbi4gU3RhdGljLiBIbW0sIG5vdCBpZGVhbCBmb3IgdHJhY2luZywgYnV0IHN0aWxsIGltcG9ydGFudC4gTGV0JiMzOTtzIGRvIHRoZSBzYW1lIGZvciBgcXVldWVfZm9saW9zX3B0ZV9yYW5nZWAgLSBhbHNvIHN0YXRpYy4gT2theS4gSXQgc2VlbXMgdGhpcyBpcyB3aGVyZSB0aGUgcmVhbCB3b3JrIG9mIGRlYWxpbmcgd2l0aCBkZXZpY2UgcHJpdmF0ZSBQTURzIGlzIGhhcHBlbmluZy4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGlzIGNhbGxpbmcgYHF1ZXVlX2ZvbGlvc19wdGVfcmFuZ2VgLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBoYW5kbGUgb24gdGhlIGNvbnRyb2wgZmxvdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMDM6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cXVldWVfZm9saW9zX3B0ZV9yYW5nZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21lbXBvbGljeS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbXBvbGljeS5jPTY1Mz1zdGF0aWMgdm9pZCBxdWV1ZV9mb2xpb3NfcG1kKHBtZF90ICpwbWQsIHN0cnVjdCBtbV93YWxrICp3YWxrKVxuLS1cbm1tL21lbXBvbGljeS5jLTY4MC0gKlxubW0vbWVtcG9saWN5LmM6NjgxOiAqIHF1ZXVlX2ZvbGlvc19wdGVfcmFuZ2UoKSBoYXMgdHdvIHBvc3NpYmxlIHJldHVybiB2YWx1ZXM6XG5tbS9tZW1wb2xpY3kuYy02ODItICogMCAtIGNvbnRpbnVlIHdhbGtpbmcgdG8gc2NhbiBmb3IgbW9yZSwgZXZlbiBpZiBhbiBleGlzdGluZyBmb2xpbyBvbiB0aGVcbi0tXG5tbS9tZW1wb2xpY3kuYy02ODYtICovXG5tbS9tZW1wb2xpY3kuYzo2ODc6c3RhdGljIGludCBxdWV1ZV9mb2xpb3NfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcbm1tL21lbXBvbGljeS5jLTY4OC1cdFx0XHR1bnNpZ25lZCBsb25nIGVuZCwgc3RydWN0IG1tX3dhbGsgKndhbGspXG4tLVxubW0vbWVtcG9saWN5LmM9OTU0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgcXVldWVfcGFnZXNfd2Fsa19vcHMgPSB7XG5tbS9tZW1wb2xpY3kuYy05NTUtXHQuaHVnZXRsYl9lbnRyeVx0XHQ9IHF1ZXVlX2ZvbGlvc19odWdldGxiLFxubW0vbWVtcG9saWN5LmM6OTU2Olx0LnBtZF9lbnRyeVx0XHQ9IHF1ZXVlX2ZvbGlvc19wdGVfcmFuZ2UsXG5tbS9tZW1wb2xpY3kuYy05NTctXHQudGVzdF93YWxrXHRcdD0gcXVldWVfcGFnZXNfdGVzdF93YWxrLFxuLS1cbm1tL21lbXBvbGljeS5jPTk2MT1zdGF0aWMgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzIHF1ZXVlX3BhZ2VzX2xvY2tfdm1hX3dhbGtfb3BzID0ge1xubW0vbWVtcG9saWN5LmMtOTYyLVx0Lmh1Z2V0bGJfZW50cnlcdFx0PSBxdWV1ZV9mb2xpb3NfaHVnZXRsYixcbm1tL21lbXBvbGljeS5jOjk2MzpcdC5wbWRfZW50cnlcdFx0PSBxdWV1ZV9mb2xpb3NfcHRlX3JhbmdlLFxubW0vbWVtcG9saWN5LmMtOTY0LVx0LnRlc3Rfd2Fsa1x0XHQ9IHF1ZXVlX3BhZ2VzX3Rlc3Rfd2FsayxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMDM6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ2ODIKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqVW5kZXJzdGFuZGluZyB0aGUgYHF1ZXVlX3BhZ2VzX3dhbGtfb3BzYCBSZWxhdGlvbnNoaXAqKgoKQWxyaWdodCwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYHF1ZXVlX3BhZ2VzX3dhbGtfb3BzYCBhbmQgYHF1ZXVlX3BhZ2VzX3JhbmdlYC4gVGhlIGNvcmUgb2YgaXQgc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCDigJMgYHF1ZXVlX3BhZ2VzX3dhbGtfb3BzYCBpcyBlc3NlbnRpYWxseSBhIGhlbHBlciBmdW5jdGlvbiwgYSBjb21wb25lbnQgKnVzZWQqIGJ5IHRoZSBoaWdoZXItbGV2ZWwgZnVuY3Rpb24gYHF1ZXVlX3BhZ2VzX3JhbmdlYC4gSSBwaWN0dXJlIGBxdWV1ZV9wYWdlc19yYW5nZWAgYXMgdGhlIGxhcmdlciwgbW9yZSBjb21wbGV4IG9wZXJhdGlvbiwgYW5kIGBxdWV1ZV9wYWdlc193YWxrX29wc2AgYXMgYSB3ZWxsLWRlZmluZWQgc3ViLXJvdXRpbmUgdGhhdCBoYW5kbGVzIGEgc3BlY2lmaWMsIGxpa2VseSBjcnVjaWFsLCBhc3BlY3Qgb2YgdGhhdCBvcGVyYXRpb24uIFRoaXMgc3VnZ2VzdHMgdGhhdCBgcXVldWVfcGFnZXNfcmFuZ2VgIHByb2JhYmx5IG5lZWRzIHRvIGl0ZXJhdGUgdGhyb3VnaCBhIHJhbmdlIG9mIHBhZ2VzLCBhbmQgYHF1ZXVlX3BhZ2VzX3dhbGtfb3BzYCBwcm92aWRlcyB0aGUgdW5kZXJseWluZyBtZWNoYW5pc20gZm9yIGVmZmljaWVudGx5IHRyYXZlcnNpbmcgYW5kIHBvdGVudGlhbGx5IG9wZXJhdGluZyBvbiB0aG9zZSBwYWdlcy4gVGhpbmtpbmcgdGhyb3VnaCB0aGUgaW1wbGljYXRpb25zLCBJJiMzOTtkIGltbWVkaWF0ZWx5IGJlIGludGVyZXN0ZWQgaW4gdGhlIG5hdHVyZSBvZiB0aGlzICYjMzQ7d2FsayYjMzQ7IOKAkyBhcmUgd2UgdGFsa2luZyBsaW5lYXIgdHJhdmVyc2FsLCBhIG1vcmUgY29tcGxleCB0cmVlLWxpa2Ugc3RydWN0dXJlLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gRnVydGhlcm1vcmUsIEkmIzM5O2QgYmUgbG9va2luZyBjbG9zZWx5IGF0IHdoYXQgdGhlICYjMzQ7b3BzJiMzNDsgYXJlIGluIGBxdWV1ZV9wYWdlc193YWxrX29wc2Ag4oCTIHdoYXQgZnVuY3Rpb25zIG9yIG9wZXJhdGlvbnMgYXJlIGJlaW5nIGFwcGxpZWQgdG8gZWFjaCBwYWdlIGR1cmluZyB0aGlzIHdhbGs/IFVuZGVyc3RhbmRpbmcgdGhvc2Ugd291bGQgYmUga2V5IHRvIGZpZ3VyaW5nIG91dCB0aGUgcGVyZm9ybWFuY2UgY2hhcmFjdGVyaXN0aWNzIGFuZCBwb3RlbnRpYWwgYm90dGxlbmVja3Mgb2YgdGhlIHdob2xlIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMDM6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cXVldWVfcGFnZXNfcmFuZ2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tZW1wb2xpY3kuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1wb2xpY3kuYz02ODc9c3RhdGljIGludCBxdWV1ZV9mb2xpb3NfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9tZW1wb2xpY3kuYy03NDctXHRcdFx0ICogbWlncmF0ZV9wYWdlcyhcdTAwMjZwYWdlbGlzdCkgcmV0dXJucyBucl9mYWlsZWQgZm9saW9zLCBzb1xubW0vbWVtcG9saWN5LmM6NzQ4Olx0XHRcdCAqIGNoZWNrIFwmIzM0O2xhcmdlXCYjMzQ7IG5vdyBzbyB0aGF0IHF1ZXVlX3BhZ2VzX3JhbmdlKCkgcmV0dXJuc1xubW0vbWVtcG9saWN5LmMtNzQ5LVx0XHRcdCAqIGEgY29tcGFyYWJsZSBucl9mYWlsZWQgZm9saW9zLiAgVGhpcyBkb2VzIGltcGx5IHRoYXRcbi0tXG5tbS9tZW1wb2xpY3kuYz05NjE9c3RhdGljIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyBxdWV1ZV9wYWdlc19sb2NrX3ZtYV93YWxrX29wcyA9IHtcbi0tXG5tbS9tZW1wb2xpY3kuYy05NzMtICpcbm1tL21lbXBvbGljeS5jOjk3NDogKiBxdWV1ZV9wYWdlc19yYW5nZSgpIG1heSByZXR1cm46XG5tbS9tZW1wb2xpY3kuYy05NzUtICogMCAtIGFsbCBwYWdlcyBhbHJlYWR5IG9uIHRoZSByaWdodCBub2RlLCBvciBzdWNjZXNzZnVsbHkgcXVldWVkIGZvciBtb3Zpbmdcbi0tXG5tbS9tZW1wb2xpY3kuYz05ODI9c3RhdGljIGxvbmdcbm1tL21lbXBvbGljeS5jOjk4MzpxdWV1ZV9wYWdlc19yYW5nZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG5tbS9tZW1wb2xpY3kuYy05ODQtXHRcdG5vZGVtYXNrX3QgKm5vZGVzLCB1bnNpZ25lZCBsb25nIGZsYWdzLFxuLS1cbm1tL21lbXBvbGljeS5jPTEyODU9c3RhdGljIGxvbmcgbWlncmF0ZV90b19ub2RlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBpbnQgc291cmNlLCBpbnQgZGVzdCxcbi0tXG5tbS9tZW1wb2xpY3kuYy0xMzE2LVx0ICovXG5tbS9tZW1wb2xpY3kuYzoxMzE3Olx0bnJfZmFpbGVkID0gcXVldWVfcGFnZXNfcmFuZ2UobW0sIHZtYS1cdTAwM2V2bV9zdGFydCwgbW0tXHUwMDNldGFza19zaXplLCBcdTAwMjZubWFzayxcbm1tL21lbXBvbGljeS5jLTEzMTgtXHRcdFx0XHQgICAgICBmbGFncyB8IE1QT0xfTUZfRElTQ09OVElHX09LLCBcdTAwMjZwYWdlbGlzdCk7XG4tLVxubW0vbWVtcG9saWN5LmM9MTQ4OT1zdGF0aWMgbG9uZyBkb19tYmluZCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGxlbixcbi0tXG5tbS9tZW1wb2xpY3kuYy0xNTUyLVx0ICovXG5tbS9tZW1wb2xpY3kuYzoxNTUzOlx0bnJfZmFpbGVkID0gcXVldWVfcGFnZXNfcmFuZ2UobW0sIHN0YXJ0LCBlbmQsIG5tYXNrLFxubW0vbWVtcG9saWN5LmMtMTU1NC1cdFx0XHRmbGFncyB8IE1QT0xfTUZfSU5WRVJUIHwgTVBPTF9NRl9XUkxPQ0ssIFx1MDAyNnBhZ2VsaXN0KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMDM6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU1ODQKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRm9jdXNpbmcgb24gTWVtb3J5IE1hbmFnZW1lbnQgRnVuY3Rpb25zKioKCk9rYXksIHNvIEkmIzM5O20gc2VlaW5nIGEgY29ubmVjdGlvbiBiZXR3ZWVuIGBkb19tYmluZGAsIGBtaWdyYXRlX3RvX25vZGVgLCBhbmQgdGhlIGZ1bmN0aW9uIGBxdWV1ZV9wYWdlc19yYW5nZWAuIFRoZSBmYWN0IHRoYXQgYG1pZ3JhdGVfdG9fbm9kZWAgaXMgc3BlY2lmaWNhbGx5IGNhbGxlZCBieSBgZG9fbWlncmF0ZV9wYWdlc2AgaXMgcXVpdGUgaW50ZXJlc3RpbmcuIFRoaXMgcG9pbnRzIG1lIHRvd2FyZCB0aG9zZSB0d28gZnVuY3Rpb25zLCBgZG9fbWJpbmRgIGFuZCBgZG9fbWlncmF0ZV9wYWdlc2AsIGFzIGxpa2VseSBzaWduaWZpY2FudCBwb2ludHMgb2YgaW50ZXJlc3QgdG8gaW52ZXN0aWdhdGUgZnVydGhlci4gVGhleSBzZWVtIHRvIGJlIGNvb3JkaW5hdGluZyBwYWdlIG1pZ3JhdGlvbiBvciBiaW5kaW5nIG9wZXJhdGlvbnMsIHdoaWNoIG1ha2VzIHRoZW0gcHJpbWUgY2FuZGlkYXRlcyBmb3IgZGVlcGVyIHNjcnV0aW55LgoKQWRkaXRpb25hbGx5LCBJIG5lZWQgdG8gY2hlY2sgb3V0IHdoYXQgdGhlIGltcGFjdCBvZiBgbWFkdmlzZV9mcmVlX2h1Z2VfcG1kYCBhbmQgYG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZWAgYXJlLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGVzZSBhcmUgY2FsbGVkIGFuZCBob3cgdGhleSBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMDM6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWFkdmlzZV9mcmVlX2h1Z2VfcG1kJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2h1Z2VfbWVtb3J5LmM9MjIwMD12bV9mYXVsdF90IGRvX2h1Z2VfcG1kX251bWFfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbi0tXG5tbS9odWdlX21lbW9yeS5jLTIyNzktICovXG5tbS9odWdlX21lbW9yeS5jOjIyODA6Ym9vbCBtYWR2aXNlX2ZyZWVfaHVnZV9wbWQoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG5tbS9odWdlX21lbW9yeS5jLTIyODEtXHRcdHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBuZXh0KVxuLS1cbm1tL21hZHZpc2UuYz02NTM9c3RhdGljIGludCBtYWR2aXNlX2ZyZWVfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9tYWR2aXNlLmMtNjY5LVx0aWYgKHBtZF90cmFuc19odWdlKCpwbWQpKVxubW0vbWFkdmlzZS5jOjY3MDpcdFx0aWYgKG1hZHZpc2VfZnJlZV9odWdlX3BtZCh0bGIsIHZtYSwgcG1kLCBhZGRyLCBuZXh0KSlcbm1tL21hZHZpc2UuYy02NzEtXHRcdFx0cmV0dXJuIDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDAzOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MTkxCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMTAzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBNZW1vcnkgTWFuYWdlbWVudCBFZmZpY2llbmN5KioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgbWVtb3J5IG1hbmFnZW1lbnQgZmxvdy4gSXQgbG9va3MgbGlrZSBgbWFkdmlzZV9mcmVlX2h1Z2VfcG1kYCBpcyBiZWluZyBpbnZva2VkIGRvd25zdHJlYW0gZnJvbSBgbWFkdmlzZV9mcmVlX3B0ZV9yYW5nZWAsIHdoaWNoIGluIHR1cm4gaXMgY2FsbGVkIGJ5IGBtYWR2aXNlX2ZyZWVfc2luZ2xlX3ZtYWAuIFRoYXQmIzM5O3MgdGhlIGZyZWVpbmcgcGF0aC4gTm93LCB0aGUgYG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZWAgZnVuY3Rpb24gaXMgYWxzbyBvZiBpbnRlcmVzdCwgc2luY2UgaXQmIzM5O3MgY2FsbGVkIGJ5IGBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9zaW5nbGVfdm1hYCwgb3IgYSBzaW1pbGFyIGZ1bmN0aW9uLCB3aGljaCBpbXBsaWVzIGl0cyBwdXJwb3NlIGlzIHJlbGF0ZWQgdG8gcGFnZXMgYmVpbmcgbWFya2VkIGFzIGNvbGQgb3IgcGFnZWQgb3V0LiBJIG5lZWQgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IGBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2VgIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUuIEl0IHdvdWxkIGFwcGVhciB0byBiZSBhbiBpbXBvcnRhbnQgY29tcG9uZW50IGluIG9wdGltaXppbmcgbWVtb3J5IHVzYWdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAwMzoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tYWR2aXNlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWFkdmlzZS5jPTM0Mz1zdGF0aWMgaW5saW5lIGludCBtYWR2aXNlX2ZvbGlvX3B0ZV9iYXRjaCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuLS1cbm1tL21hZHZpc2UuYy0zNTItXG5tbS9tYWR2aXNlLmM6MzUzOnN0YXRpYyBpbnQgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlKHBtZF90ICpwbWQsXG5tbS9tYWR2aXNlLmMtMzU0LVx0XHRcdFx0dW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbi0tXG5tbS9tYWR2aXNlLmM9NTY5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgY29sZF93YWxrX29wcyA9IHtcbm1tL21hZHZpc2UuYzo1NzA6XHQucG1kX2VudHJ5ID0gbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlLFxubW0vbWFkdmlzZS5jLTU3MS1cdC53YWxrX2xvY2sgPSBQR1dBTEtfUkRMT0NLLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAwMzoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjczMwoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDY2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipGb2N1c2luZyBvbiBLZXkgRnVuY3Rpb25zIGZvciBNZW1vcnkgTWFuYWdlbWVudCBPcHRpbWl6YXRpb24qKgoKUmlnaHQsIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIG1vc3QgcmVsZXZhbnQgc3ltYm9scyB0byB0YXJnZXQgaGVyZS4gSXQgc2VlbXMgbGlrZSB0aGUgY29yZSBmdW5jdGlvbnMgSSBzaG91bGQgYmUgZXhhbWluaW5nIGFyZSBgZG9fbWJpbmRgLCBgZG9fbWlncmF0ZV9wYWdlc2AsIGBtYWR2aXNlX2ZyZWVfaHVnZV9wbWRgLCBhbmQgYG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZWAuIFRoZXNlIGZlZWwgbGlrZSB0aGV5JiMzOTtyZSBhdCB0aGUgaGVhcnQgb2YgbWVtb3J5IGJpbmRpbmcsIG1pZ3JhdGlvbiwgYW5kIGFkdmlzaW5nIHRoZSBrZXJuZWwgb24gbWVtb3J5IHVzYWdlLCB3aGljaCBpcyBleGFjdGx5IHRoZSBhcmVhIEkmIzM5O20gdHJ5aW5nIHRvIG9wdGltaXplLiBXYWl0IGEgc2Vjb25kLCBpcyBgZG9fbWlncmF0ZV9wYWdlc2AgYWN0dWFsbHkgYSBzeXNjYWxsPyBJIG5lZWQgdG8gcXVpY2tseSBjb25maXJtIHRoYXQsIGJlY2F1c2UgSSB3YW50IHRvIG1ha2Ugc3VyZSBJJiMzOTttIGZvY3VzZWQgb24gdGhlIHJpZ2h0IGxldmVsIG9mIGFic3RyYWN0aW9uLiBUaW1lIHRvIHZlcmlmeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMDM6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZG9fbWlncmF0ZV9wYWdlcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1wb2xpY3kuYz0xMjg1PXN0YXRpYyBsb25nIG1pZ3JhdGVfdG9fbm9kZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgaW50IHNvdXJjZSwgaW50IGRlc3QsXG4tLVxubW0vbWVtcG9saWN5LmMtMTMzOC0gKi9cbm1tL21lbXBvbGljeS5jOjEzMzk6aW50IGRvX21pZ3JhdGVfcGFnZXMoc3RydWN0IG1tX3N0cnVjdCAqbW0sIGNvbnN0IG5vZGVtYXNrX3QgKmZyb20sXG5tbS9tZW1wb2xpY3kuYy0xMzQwLVx0XHQgICAgIGNvbnN0IG5vZGVtYXNrX3QgKnRvLCBpbnQgZmxhZ3MpXG4tLVxubW0vbWVtcG9saWN5LmMtMTM4Ny1cdFx0XHQvKlxubW0vbWVtcG9saWN5LmM6MTM4ODpcdFx0XHQgKiBkb19taWdyYXRlX3BhZ2VzKCkgdHJpZXMgdG8gbWFpbnRhaW4gdGhlIHJlbGF0aXZlXG5tbS9tZW1wb2xpY3kuYy0xMzg5LVx0XHRcdCAqIG5vZGUgcmVsYXRpb25zaGlwIG9mIHRoZSBwYWdlcyBlc3RhYmxpc2hlZCBiZXR3ZWVuXG4tLVxubW0vbWVtcG9saWN5LmM9MTQ3MD1zdGF0aWMgYm9vbCBtaWdyYXRlX2ZvbGlvX2FkZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb2xpc3QsXG4tLVxubW0vbWVtcG9saWN5LmMtMTQ3NS1cbm1tL21lbXBvbGljeS5jOjE0NzY6aW50IGRvX21pZ3JhdGVfcGFnZXMoc3RydWN0IG1tX3N0cnVjdCAqbW0sIGNvbnN0IG5vZGVtYXNrX3QgKmZyb20sXG5tbS9tZW1wb2xpY3kuYy0xNDc3LVx0XHQgICAgIGNvbnN0IG5vZGVtYXNrX3QgKnRvLCBpbnQgZmxhZ3MpXG4tLVxubW0vbWVtcG9saWN5LmM9MTg2Mz1zdGF0aWMgaW50IGtlcm5lbF9taWdyYXRlX3BhZ2VzKHBpZF90IHBpZCwgdW5zaWduZWQgbG9uZyBtYXhub2RlLFxuLS1cbm1tL21lbXBvbGljeS5jLTE5MzQtXG5tbS9tZW1wb2xpY3kuYzoxOTM1Olx0ZXJyID0gZG9fbWlncmF0ZV9wYWdlcyhtbSwgb2xkLCBuZXcsXG5tbS9tZW1wb2xpY3kuYy0xOTM2LVx0XHRjYXBhYmxlKENBUF9TWVNfTklDRSkgPyBNUE9MX01GX01PVkVfQUxMIDogTVBPTF9NRl9NT1ZFKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMDM6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc0MTgKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA0NjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRm9jdXNpbmcgb24gS2V5IFN5bWJvbHMgZm9yIEZ1enppbmcqKgoKT2theSwgc28gSSYjMzk7bSB0cnlpbmcgdG8gZmlndXJlIG91dCB0aGUgYmVzdCBhcHByb2FjaCBmb3IgZnV6emluZyB0aGlzIGNvZGUuIFRoZSBlbnRyeSBwb2ludCBpcyBga2VybmVsX21pZ3JhdGVfcGFnZXNgLCB3aGljaCBpcyBhIHN5c2NhbGwgZW50cnkuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBGcm9tIHRoZXJlLCBJIHdhcyBpbml0aWFsbHkgdGhpbmtpbmcgb2YgZm9jdXNpbmcgb24gYGRvX21iaW5kYCwgYG1hZHZpc2VfZnJlZV9odWdlX3BtZGAsIGFuZCBgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlYCBhcyBwb3RlbnRpYWwgZm9jdXMgc3ltYm9scy4KCkJ1dCBob2xkIG9uLCBgbWFkdmlzZV9mcmVlX2h1Z2VfcG1kYCBpcyBjYWxsZWQgZnJvbSBgbWFkdmlzZV9mcmVlX3B0ZV9yYW5nZWAsIHdoaWNoIGl0c2VsZiBpcyBjYWxsZWQgZnJvbSBgbWFkdmlzZV92bWFfYmVoYXZpb3JgLiBTbyBtYXliZSBnb2luZyBkaXJlY3RseSB0byBgbWFkdmlzZV9mcmVlX2h1Z2VfcG1kYCBhbmQgYG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZWAgbWFrZXMgdGhlIG1vc3Qgc2Vuc2UgYmVjYXVzZSB0aGV5IGFyZSBtb3JlIGRpcmVjdGx5IHRpZWQgdG8gdGhlIGNoYW5nZXMuCgpOb3csIGZvciBgcXVldWVfZm9saW9zX3BtZGAsIEkgaGF2ZSBvcHRpb25zLiBJIGNvdWxkIHVzZSBgcXVldWVfZm9saW9zX3B0ZV9yYW5nZWAsIG9yIGBxdWV1ZV9wYWdlc19yYW5nZWAsIG9yIGV2ZW4gZ28gYmFjayB0byBgZG9fbWJpbmRgIGFuZCBga2VybmVsX21pZ3JhdGVfcGFnZXNgLiBTaG91bGQgSSB1c2UgYHF1ZXVlX2ZvbGlvc19wbWRgIGRpcmVjdGx5PyBIbW0sIGl0JiMzOTtzIHN0YXRpYy4gQnV0IHN5emthbGxlciBjYW4gaGFuZGxlIHN0YXRpYyBmdW5jdGlvbnMgaWYgdGhleSYjMzk7cmUgaW4gdGhlIGNhbGwgdHJlZSBvZiBzeXNjYWxscy4gU3BlY2lmeWluZyB0aGVtIGluIGBGb2N1c1N5bWJvbHNgIGlzIHN0aWxsIGdvb2QgYmVjYXVzZSBzeXprYWxsZXIgdXNlcyBjb3ZlcmFnZSB0byBndWlkZSBmdXp6aW5nLiBBbmQgd2FpdCwgaXQgbG9va3MgbGlrZSBgRm9jdXNTeW1ib2xzYCAqY2FuKiBpbmNsdWRlIHN0YXRpYyBmdW5jdGlvbnMhIFN5emthbGxlciBleHRyYWN0cyB0aGUgUEMgZnJvbSB0aGUga2VybmVsIGltYWdlLiBQZXJmZWN0LgoKU28sIEkgdGhpbmsgSSBjYW4ganVzdCBsaXN0IGBxdWV1ZV9mb2xpb3NfcG1kYCwgYG1hZHZpc2VfZnJlZV9odWdlX3BtZGAsIGFuZCBgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlYCBhcyBmb2N1cyBzeW1ib2xzLiBXYWl0IGEgbWludXRlLCBJIG5lZWQgdG8gZG91YmxlLWNoZWNrLiBgbWFkdmlzZV9mcmVlX2h1Z2VfcG1kYCBpcyBnbG9iYWwsIG5vdCBzdGF0aWMuIEFuZCBgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlYCBhbmQgYHF1ZXVlX2ZvbGlvc19wbWRgIGFyZSBzdGF0aWMuIEFscmlnaHQsIGxldCYjMzk7cyBwcm92aWRlIHRob3NlIHRocmVlIGFzIGBGb2N1c1N5bWJvbHNgLgoKRmluYWxseSwgZm9yIHRoZSBjb25maWd1cmF0aW9uLCBJJiMzOTttIGdvaW5nIHRvIG5lZWQgYE5VTUFgLCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLCBhbmQgYERFVklDRV9QUklWQVRFYC4gSG9sZCBvbiwgZG9lcyBgREVWSUNFX1BSSVZBVEVgIG5lZWQgYFpPTkVfREVWSUNFYD8gQmV0dGVyIGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDAzOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBERVZJQ0VfUFJJVkFURSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz0xMjYyPWNvbmZpZyBHRVRfRlJFRV9SRUdJT05cbi0tXG5tbS9LY29uZmlnLTEyNjQtXG5tbS9LY29uZmlnOjEyNjU6Y29uZmlnIERFVklDRV9QUklWQVRFXG5tbS9LY29uZmlnLTEyNjYtXHRib29sIFwmIzM0O1VuYWRkcmVzc2FibGUgZGV2aWNlIG1lbW9yeSAoR1BVIG1lbW9yeSwgLi4uKVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAwMzoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODUxMwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhlIGdpdmVuIGluc3RydWN0aW9uczoKCioqQW5hbHl6aW5nIG1tL0tjb25maWcgYXJvdW5kIERFVklDRV9QUklWQVRFKioKCk9rYXksIHNvIHRoZSBwcm9tcHQgd2FudHMgbWUgdG8gZm9jdXMgb24gYG1tL0tjb25maWdgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBgREVWSUNFX1BSSVZBVEVgIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBSaWdodCwgc28gdGhpcyBpcyBhYm91dCBtZW1vcnkgbWFuYWdlbWVudCB3aXRoaW4gdGhlIGtlcm5lbCYjMzk7cyBjb25maWd1cmF0aW9uIHN5c3RlbS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCByb2xlIGBERVZJQ0VfUFJJVkFURWAgcGxheXMgaW4gdGhpcyBjb250ZXh0LiBJJiMzOTttIGFzc3VtaW5nIGl0IHJlbGF0ZXMgdG8gd2hldGhlciBjZXJ0YWluIG1lbW9yeSByZWdpb25zIG9yIGRldmljZXMgc2hvdWxkIGJlIGNvbnNpZGVyZWQgcHJpdmF0ZSB0byBhIHNwZWNpZmljIGRldmljZSBvciwgY29udmVyc2VseSwgc2hhcmVkIGFuZCBtYW5hZ2VkIGF0IGEgbW9yZSBnbG9iYWwgbGV2ZWwuIFRoZSBgS2NvbmZpZ2AgZmlsZXMgYXJlIHdoZXJlIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGRlZmluZWQsIGFsb25nIHdpdGggdGhlaXIgZGVwZW5kZW5jaWVzLCBkZXNjcmlwdGlvbnMsIGFuZCBkZWZhdWx0cywgc28gSSBuZWVkIHRvIGdvIHJlYWQgdGhlIGNvbnRlbnRzIG9mIHRoYXQgZmlsZS4gSSBleHBlY3QgdG8gc2VlIGRlZmluaXRpb25zIGZvciBgREVWSUNFX1BSSVZBVEVgLCBhbmQgbGlrZWx5IGEgZGVzY3JpcHRpb24gb2YgaXRzIG1lYW5pbmcsIHBlcmhhcHMgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYmFzZWQgb24gdGhpcyBvcHRpb24gYW5kIHJlbGF0ZWQgb3B0aW9ucy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2U6CgoqICAgV2hhdCBkZXZpY2VzIG9yIG1lbW9yeSByZWdpb25zIGFyZSBpbXBhY3RlZCBieSB0aGlzIG9wdGlvbi4KKiAgIFRoZSBpbXBsaWNhdGlvbnMgb2YgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIHRoaXMgb3B0aW9uLgoqICAgQW55IGRlcGVuZGVuY2llcyBvbiBvdGhlciBjb25maWd1cmF0aW9uIHNldHRpbmdzLgoqICAgSG93IHRoZSBrZXJuZWwgbWFuYWdlcyBhbmQgdXRpbGl6ZXMgbWVtb3J5IGJhc2VkIG9uIHRoaXMgc2V0dGluZy4KCk15IGdvYWwgaXMgdG8gdW5kZXJzdGFuZCBob3cgYERFVklDRV9QUklWQVRFYCBhZmZlY3RzIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzY2hlbWUgd2l0aGluIHRoZSBrZXJuZWwgYW5kIGhvdyBpdCBjYW4gYmUgY29udHJvbGxlZCB0aHJvdWdoIHRoZSBjb25maWd1cmF0aW9uIHByb2Nlc3MuIFVsdGltYXRlbHksIEkmIzM5O2xsIHN5bnRoZXNpemUgd2hhdCBgbW0vS2NvbmZpZ2AgaXMgZXhwcmVzc2luZyBhcm91bmQgdGhpcyBvcHRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDAzOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyNjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTI2MDpcdFx0ZGVwZW5kcyBvbiBNTVVcbjEyNjE6XHRcbjEyNjI6XHRjb25maWcgR0VUX0ZSRUVfUkVHSU9OXG4xMjYzOlx0XHRib29sXG4xMjY0Olx0XG4xMjY1Olx0Y29uZmlnIERFVklDRV9QUklWQVRFXG4xMjY2Olx0XHRib29sIFwmIzM0O1VuYWRkcmVzc2FibGUgZGV2aWNlIG1lbW9yeSAoR1BVIG1lbW9yeSwgLi4uKVwmIzM0O1xuMTI2NzpcdFx0ZGVwZW5kcyBvbiBaT05FX0RFVklDRVxuMTI2ODpcdFx0c2VsZWN0IEdFVF9GUkVFX1JFR0lPTlxuMTI2OTpcdFxuMTI3MDpcdFx0aGVscFxuMTI3MTpcdFx0ICBBbGxvd3MgY3JlYXRpb24gb2Ygc3RydWN0IHBhZ2VzIHRvIHJlcHJlc2VudCB1bmFkZHJlc3NhYmxlIGRldmljZVxuMTI3MjpcdFx0ICBtZW1vcnk7IGkuZS4sIG1lbW9yeSB0aGF0IGlzIG9ubHkgYWNjZXNzaWJsZSBmcm9tIHRoZSBkZXZpY2UgKG9yXG4xMjczOlx0XHQgIGdyb3VwIG9mIGRldmljZXMpLiBZb3UgbGlrZWx5IGFsc28gd2FudCB0byBzZWxlY3QgSE1NX01JUlJPUi5cbjEyNzQ6XHRcbjEyNzU6XHRjb25maWcgVk1BUF9QRk5cbjEyNzY6XHRcdGJvb2xcbjEyNzc6XHRcbjEyNzg6XHRjb25maWcgQVJDSF9VU0VTX0hJR0hfVk1BX0ZMQUdTXG4xMjc5Olx0XHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDAzOjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MTIxCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkRlcGVuZGVuY3kgRGVlcCBEaXZlKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSYjMzk7bSBzZWVpbmcgdGhhdCBgREVWSUNFX1BSSVZBVEVgIHJlbGllcyBvbiBgWk9ORV9ERVZJQ0VgLiBDbGFzc2ljLiBOb3csIGJlZm9yZSBJIHN0YXJ0IHB1bGxpbmcgYXBhcnQgYERFVklDRV9QUklWQVRFYCBhbmQgZmlndXJpbmcgb3V0ICp3aHkqIGl0IG5lZWRzIGBaT05FX0RFVklDRWAsIEkgbmVlZCB0byBmdWxseSB1bmRlcnN0YW5kIGBaT05FX0RFVklDRWAgaXRzZWxmLiBHb3R0YSBtYWtlIHN1cmUgdGhlcmUgYXJlbiYjMzk7dCBhbnkgaGlkZGVuIGdvdGNoYXMgb3IgdW5leHBlY3RlZCBiZWhhdmlvciB3aXRoaW4gYFpPTkVfREVWSUNFYCB0aGF0IHdpbGwgY29tZSBiYWNrIHRvIGJpdGUgbWUgbGF0ZXIuIFRpbWUgdG8gdHJhY2UgdGhlIGRlcGVuZGVuY2llcyBvZiBgWk9ORV9ERVZJQ0VgIGFuZCBzZWUgd2hhdCYjMzk7cyByZWFsbHkgZ29pbmcgb24gdW5kZXIgdGhlIGhvb2QuIE5vIHBvaW50IGluIGZpeGluZyBhIGxlYWsgd2l0aG91dCB1bmRlcnN0YW5kaW5nIHdoZXJlIHRoZSB3YXRlciYjMzk7cyBjb21pbmcgZnJvbS4gSSBuZWVkIHRvIGdldCB0aGUgYmlnZ2VyIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDAzOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBaT05FX0RFVklDRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz0xMjMxPWNvbmZpZyBaT05FX0RNQTMyXG4tLVxubW0vS2NvbmZpZy0xMjM1LVxubW0vS2NvbmZpZzoxMjM2OmNvbmZpZyBaT05FX0RFVklDRVxubW0vS2NvbmZpZy0xMjM3LVx0Ym9vbCBcJiMzNDtEZXZpY2UgbWVtb3J5IChwbWVtLCBITU0sIGV0Yy4uLikgaG90cGx1ZyBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDAzOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NDMyCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgYG1tL0tjb25maWdgIGZpbGUsIHNwZWNpZmljYWxseSBhcm91bmQgYFpPTkVfREVWSUNFYDoKCioqRGl2aW5nIGludG8gdGhlIGBtbS9LY29uZmlnYCBhbmQgYFpPTkVfREVWSUNFYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGludG8gdGhlIG5pdHR5LWdyaXR0eS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7T2theSwgYG1tL0tjb25maWdgLi4uIHRoaXMgaXMgd2hlcmUgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IG9wdGlvbnMgYXJlIGNvbmZpZ3VyZWQsIHJpZ2h0PyYjMzQ7IEkga25vdyB0aGlzIGZpbGUgaW50aW1hdGVseS4gSSYjMzk7bSBnb2luZyB0byBsb29rIGZvciB0aGUgc2VjdGlvbiByZWxhdGVkIHRvIGBaT05FX0RFVklDRWAuIE15IG1pbmQgcXVpY2tseSBjb25qdXJlcyB0aGUgc3Vycm91bmRpbmcgY29udGV4dCAtIGlzIHRoaXMgYWJvdXQgY29uZmlndXJpbmcgZGV2aWNlcyBmb3IgZGlyZWN0IG1lbW9yeSBhY2Nlc3M/IEFyZSB3ZSB0YWxraW5nIGFib3V0IG1lbW9yeS1tYXBwZWQgSS9PLCBOVU1BIGFyY2hpdGVjdHVyZXMsIG9yIHNvbWV0aGluZyBtb3JlIHNwZWNpYWxpemVkPyBUaGUgcHJlc2VuY2Ugb2YgYFpPTkVfREVWSUNFYCBzaWduYWxzIHNvbWV0aGluZyBiZXlvbmQgdGhlIHVzdWFsIGBaT05FX0RNQWAsIGBaT05FX05PUk1BTGAsIGBaT05FX0hJR0hNRU1gIHJlYWxtcy4gSSBleHBlY3QgdG8gZmluZCBvcHRpb25zIHJlbGF0ZWQgdG8gaG93IHRoZSBrZXJuZWwgaGFuZGxlcyBtZW1vcnkgc3BlY2lmaWNhbGx5IGFsbG9jYXRlZCBmb3IgZGV2aWNlIGludGVyYWN0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcy4gV2hhdCBvdGhlciBmZWF0dXJlcyBuZWVkIHRvIGJlIGVuYWJsZWQgYmVmb3JlIGBaT05FX0RFVklDRWAgYmVjb21lcyByZWxldmFudD8gQXJlIHRoZXJlIGhhcmR3YXJlIHJlcXVpcmVtZW50cywgc3BlY2lmaWMgZGV2aWNlIGRyaXZlcnMsIG9yIHNwZWNpZmljIGtlcm5lbCBjb25maWd1cmF0aW9ucyB0aGF0IHBsYXkgaW50byB0aGlzPyBJcyB0aGlzIGFib3V0IHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBEaXJlY3QgTWVtb3J5IEFjY2VzcyAoRE1BKT8gSSBrbm93IEkmIzM5O2xsIGhhdmUgdG8gY29uc2lkZXIgaG93IHRoaXMgaW50ZXJhY3RzIHdpdGggbWVtb3J5IHByb3RlY3Rpb24sIGFkZHJlc3NpbmcsIGFuZCBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zLiBJJiMzOTttIGN1cmlvdXMgaWYgdGhpcyB6b25lJiMzOTtzIGV4aXN0ZW5jZSBpbmZsdWVuY2VzIGhvdyBtZW1vcnkgaXMgbWFuYWdlZCwgYWxsb2NhdGVkLCBhbmQgcmVjbGFpbWVkLiBJIHdpbGwgbG9vayBmb3IgYXNzb2NpYXRlZCBkZXBlbmRlbmNpZXMgYW5kIHBvdGVudGlhbCBjb25maWd1cmF0aW9uIHBpdGZhbGxzLiBJJiMzOTttIHJlYWR5IHRvIGZpbmQgdGhlIGFuc3dlcnMhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDAzOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyMzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTIzNTpcdFxuMTIzNjpcdGNvbmZpZyBaT05FX0RFVklDRVxuMTIzNzpcdFx0Ym9vbCBcJiMzNDtEZXZpY2UgbWVtb3J5IChwbWVtLCBITU0sIGV0Yy4uLikgaG90cGx1ZyBzdXBwb3J0XCYjMzQ7XG4xMjM4Olx0XHRkZXBlbmRzIG9uIE1FTU9SWV9IT1RSRU1PVkVcbjEyMzk6XHRcdHNlbGVjdCBYQVJSQVlfTVVMVElcbjEyNDA6XHRcbjEyNDE6XHRcdGhlbHBcbjEyNDI6XHRcdCAgRGV2aWNlIG1lbW9yeSBob3RwbHVnIHN1cHBvcnQgYWxsb3dzIGZvciBlc3RhYmxpc2hpbmcgcG1lbSxcbjEyNDM6XHRcdCAgb3Igb3RoZXIgZGV2aWNlIGRyaXZlciBkaXNjb3ZlcmVkIG1lbW9yeSByZWdpb25zLCBpbiB0aGVcbjEyNDQ6XHRcdCAgbWVtbWFwLiBUaGlzIGFsbG93cyBwZm5fdG9fcGFnZSgpIGxvb2t1cHMgb2Ygb3RoZXJ3aXNlXG4xMjQ1Olx0XHQgIFwmIzM0O2RldmljZS1waHlzaWNhbFwmIzM0OyBhZGRyZXNzZXMgd2hpY2ggaXMgbmVlZGVkIGZvciBEQVgsIFBDSV9QMlBETUEsIGFuZFxuMTI0NjpcdFx0ICBERVZJQ0VfUFJJVkFURSBmZWF0dXJlcyBhbW9uZyBvdGhlcnMuXG4xMjQ3Olx0XG4xMjQ4Olx0XHQgIEVuYWJsaW5nIHRoaXMgb3B0aW9uIHdpbGwgcmVkdWNlIHRoZSBlbnRyb3B5IG9mIHg4NiBLQVNMUiBtZW1vcnlcbjEyNDk6XHRcdCAgcmVnaW9ucy4gRm9yIGV4YW1wbGUgLSBvbiBhIDQ2IGJpdCBzeXN0ZW0sIHRoZSBlbnRyb3B5IGdvZXMgZG93blxuMTI1MDpcdFx0ICBmcm9tIDE2IGJpdHMgdG8gMTUgYml0cy4gVGhlIGFjdHVhbCByZWR1Y3Rpb24gaW4gZW50cm9weSBkZXBlbmRzXG4xMjUxOlx0XHQgIG9uIHRoZSBwaHlzaWNhbCBhZGRyZXNzIGJpdHMsIG9uIHByb2Nlc3NvciBmZWF0dXJlcywga2VybmVsIGNvbmZpZ1xuMTI1MjpcdFx0ICAoNSBsZXZlbCBwYWdlIHRhYmxlKSBhbmQgcGh5c2ljYWwgbWVtb3J5IHByZXNlbnQgb24gdGhlIHN5c3RlbS5cbjEyNTM6XHRcbjEyNTQ6XHQjXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDAzOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMTMyCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkRlcGVuZGVuY3kgRGVlcCBEaXZlOiBaT05FX0RFVklDRSAmYW1wOyBNRU1PUllfSE9UUkVNT1ZFKioKCkFscmlnaHQsIHNvIHRoZSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBmbGFncyBhIGRlcGVuZGVuY3kuIGBaT05FX0RFVklDRWAgcmVsaWVzIG9uIGBNRU1PUllfSE9UUkVNT1ZFYC4gVGhhdCYjMzk7cyBhIGtleSBvYnNlcnZhdGlvbi4gQmVmb3JlIEkgZ28gZnVydGhlciBkb3duIHRoaXMgcGFydGljdWxhciByYWJiaXQgaG9sZSwgbGV0JiMzOTtzIHN0b3AgYW5kIHZlcmlmeSB0aGF0IGRlcGVuZGVuY3kuIEkgbmVlZCB0byB1bmRlcnN0YW5kICp3aHkqIGBaT05FX0RFVklDRWAgbmVlZHMgYE1FTU9SWV9IT1RSRU1PVkVgLiBJcyBpdCBmb3IgZ3JhY2VmdWwgaGFuZGxpbmcgb2YgZGV2aWNlIHJlbW92YWwsIHJlc291cmNlIHJlY2xhbWF0aW9uLCBvciBzb21lIG90aGVyIGNyaXRpY2FsIGFzcGVjdD8gS25vd2luZyB0aGUgbmF0dXJlIG9mIHRoZSBkZXBlbmRlbmN5IHdpbGwgZ3VpZGUgbXkgbmV4dCBzdGVwcy4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHRoZSB1bmRlcmx5aW5nIGltcGxlbWVudGF0aW9uIGRldGFpbHMgYW5kIHRoZSBzcGVjaWZpYyBpbnRlcmFjdGlvbnMuIE15IGZvY3VzIG5lZWRzIHRvIGJlIG9uIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVzZSB0d28gY29tcG9uZW50cy4gVGltZSB0byBkaWcgaW50byB0aGUgYE1FTU9SWV9IT1RSRU1PVkVgIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDAzOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNRU1PUllfSE9UUkVNT1ZFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTU4OT1lbmRjaG9pY2Vcbm1tL0tjb25maWctNTkwLVxubW0vS2NvbmZpZzo1OTE6Y29uZmlnIE1FTU9SWV9IT1RSRU1PVkVcbm1tL0tjb25maWctNTkyLVx0Ym9vbCBcJiMzNDtBbGxvdyBmb3IgbWVtb3J5IGhvdCByZW1vdmVcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMDM6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA0MzQKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA3MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyB3aGF0JiMzOTtzIGdvaW5nIHRocm91Z2ggbXkgbWluZCBhcyBJIGFwcHJvYWNoIHRoaXM6CgoqKkVudW1lcmF0aW5nIFJlbGV2YW50IEtlcm5lbCBGZWF0dXJlcyoqCgpSaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gbGlzdCBvdXQgdGhlIGtleSBrZXJuZWwgZmVhdHVyZXMgdGhpcyBpcyBsaWtlbHkgdG91Y2hpbmcuIEkmIzM5O20gdGhpbmtpbmcgaW1tZWRpYXRlbHkgb2YgYERFVklDRV9QUklWQVRFYCwgYFpPTkVfREVWSUNFYCwgYE1FTU9SWV9IT1RSRU1PVkVgLCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLCBhbmQgYE5VTUFgLiBUaG9zZSBhcmUgdGhlIHVzdWFsIHN1c3BlY3RzIHdoZW4gZGVhbGluZyB3aXRoIHRoaXMga2luZCBvZiBtZW1vcnkgbWFuYWdlbWVudCBhbmQgZGV2aWNlIGludGVyYWN0aW9uLgoKSG9sZCBvbi4uLiBJJiMzOTttIGFsc28gcmVtZW1iZXJpbmcgdGhhdCBgQURWSVNFX1NZU0NBTExTYCBpcyBlc3NlbnRpYWwgZm9yIGhhbmRsaW5nIGBtYWR2aXNlLmNgLiBHb3R0YSBiZSBtaW5kZnVsIG9mIGhvdyB3ZSYjMzk7cmUgZ3VpZGluZyB0aGUga2VybmVsIHdpdGggbWVtb3J5IGhpbnRzLiBMZXQgbWUgZG91YmxlLWNoZWNrIHRoYXQgYEFEVklTRV9TWVNDQUxMU2AgaXMgaW5kZWVkIHByZXNlbnQ7IGl0JiMzOTtzIGVhc3kgdG8gb3Zlcmxvb2sgdGhlc2UgZGV0YWlscyBhbmQgdGhlIHJpcHBsZSBlZmZlY3RzIGNhbiBiZSBhIHBhaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDAzOjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEFEVklTRV9TWVNDQUxMUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAwMzoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDc0NAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6CgoqKk5hdmlnYXRpbmcgdGhlIEtjb25maWcgTGFieXJpbnRoKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoaXMgY29uZmlndXJhdGlvbiBvcHRpb24gaXMgZGVmaW5lZC4gSSYjMzk7bSBwcmV0dHkgc3VyZSBpdCYjMzk7cyBpbiB0aGUgYEtjb25maWdgIGZpbGVzLCBidXQgd2hlcmUgZXhhY3RseT8gSXMgaXQgd2l0aGluIHRoZSBtYWluIGBpbml0L0tjb25maWdgIGZpbGUsIG9yIGlzIGl0IG5lc3RlZCBkZWVwZXIgaW4gb25lIG9mIHRoZSBzdWJkaXJlY3Rvcmllcz8gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHRoZSBzY29wZSBvZiB0aGlzIHBhcnRpY3VsYXIgb3B0aW9uIHNvIEkgY2FuIHByb3Blcmx5IGFuYWx5emUgaXRzIGRlcGVuZGVuY2llcyBhbmQgZGVmYXVsdCB2YWx1ZXMuIFRpbWUgdG8gc3RhcnQgZGlnZ2luZy4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAwMzoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQURWSVNFX1NZU0NBTExTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZz0xOTM3PWNvbmZpZyBJT19VUklOR19NT0NLX0ZJTEVcbi0tXG5pbml0L0tjb25maWctMTk0Ny1cbmluaXQvS2NvbmZpZzoxOTQ4OmNvbmZpZyBBRFZJU0VfU1lTQ0FMTFNcbmluaXQvS2NvbmZpZy0xOTQ5LVx0Ym9vbCBcJiMzNDtFbmFibGUgbWFkdmlzZS9mYWR2aXNlIHN5c2NhbGxzXCYjMzQ7IGlmIEVYUEVSVFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAwMzoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDk5NgoJCQkJCQkJb3V0cHV0OiAyMDMKCQkJCQkJCXRob3VnaHRzOiA5NzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgTWVtb3J5IE1hbmFnZW1lbnQgUGF0Y2ggZm9yIEZ1enppbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGZpZ3VyaW5nIG91dCBpZiBpdCYjMzk7cyBmdXp6YWJsZSBhbmQgaG93IHRvIGFwcHJvYWNoIGl0LiBGaXJzdCwgSSBzZWUgdGhhdCB0aGUgYEFEVklTRV9TWVNDQUxMU2AgY29uZmlnIGlzIGRlZmluZWQgaW4gYGluaXQvS2NvbmZpZ2AuIEkmIzM5O2xsIG5lZWQgdG8gZW5hYmxlIGEgc2V0IG9mIGNvbmZpZ3VyYXRpb25zIHRvIHJlcHJvZHVjZSB0aGUgYnVnOiBgTlVNQWAsIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAsIGBERVZJQ0VfUFJJVkFURWAsIGBaT05FX0RFVklDRWAsIGBNRU1PUllfSE9UUkVNT1ZFYCwgYW5kIG9mIGNvdXJzZSwgYEFEVklTRV9TWVNDQUxMU2AuCgpOb3csIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoZSBjb2RlLiBUaGUgcGF0Y2ggc2VlbXMgdG8gYmUgYWRkcmVzc2luZyBhbiBpc3N1ZSB3aXRoaW4gYHF1ZXVlX2ZvbGlvc19wbWRgLiBUaGlzIGZ1bmN0aW9uIGlzIHJlYWNoYWJsZSB2aWEgYG1hZHZpc2VfZnJlZV9odWdlX3BtZGAsIGNhbGxlZCBmcm9tIGBtYWR2aXNlX2ZyZWVfcHRlX3JhbmdlYCB3aGljaCBpcyByZWxhdGVkIHRvIGBNQURWX0ZSRUVgLiBgcXVldWVfZm9saW9zX3BtZGAgaXMgYWxzbyBwYXJ0IG9mIGBtYmluZGAgYW5kIGBtaWdyYXRlX3BhZ2VzYC4gVGhlIHByaW1hcnkgZml4IGlzIHJlbGF0ZWQgdG8gYSBjcmFzaCB0aGF0IG9jY3VycmVkIHdoZW4gYHF1ZXVlX2ZvbGlvc19wbWRgIGVuY291bnRlcmVkIGEgbm9uLXByZXNlbnQgUE1EIHRoYXQgd2FzbiYjMzk7dCBhIG1pZ3JhdGlvbiBlbnRyeSDigJMgc3BlY2lmaWNhbGx5LCBhIGRldmljZSBwcml2YXRlIGVudHJ5LiBUaGUgb3RoZXIgcGFydHMgb2YgdGhlIHBhdGNoIGFyZSB1cGRhdGVzIHRvIGBWTV9CVUdfT05gIGFzc2VydGlvbnMgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcy4KClRoZSBmdW5jdGlvbmFsIGNoYW5nZSBpcyBpbiBgcXVldWVfZm9saW9zX3BtZGAuIEkmIzM5O20gdGhpbmtpbmcsIGlzIHRoaXMgd29ydGggZnV6emluZz8gWWVzLCBhYnNvbHV0ZWx5LiBJdCYjMzk7cyBhIGZ1bmN0aW9uYWwgZml4IGZvciBhIGNyYXNoLCBzbyBpdCYjMzk7cyBhIGdvb2QgdGFyZ2V0IGZvciBmdXp6aW5nLgoKTGV0JiMzOTtzIGRvdWJsZS1jaGVjayB0aGUgcmVhY2hhYmlsaXR5IG9mIGBxdWV1ZV9mb2xpb3NfcG1kYC4gSXQmIzM5O3MgY2FsbGVkIGZyb20gYHF1ZXVlX2ZvbGlvc19wdGVfcmFuZ2VgIHdoZW4gYHBtZF90cmFuc19odWdlX2xvY2tgIHN1Y2NlZWRzLiBUaGlzIGxvY2sgc3VjY2VlZHMgaWYgYHBtZF9pc19odWdlYCBpcyB0cnVlLCB3aGljaCBpcyB0cnVlIGlmIGVpdGhlciB0aGUgUE1EIGlzIHByZXNlbnQgYW5kIGh1Z2UsICpvciogaWYgdGhlIFBNRCBpcyBub3QgcHJlc2VudCBidXQgaXMgbm90IG5vbmUuIFRoaXMgbWVhbnMgdGhhdCBpZiB0aGVyZSYjMzk7cyBhIGRldmljZSBwcml2YXRlIGVudHJ5IGluIGEgUE1ELCBgcG1kX2lzX2h1Z2VgIHdpbGwgcmV0dXJuIHRydWUgYW5kIHRoZSBsb2NrIHdpbGwgc3VjY2VlZC4gVGhlbiBgcXVldWVfZm9saW9zX3BtZGAgaXMgY2FsbGVkLiBJdCBjaGVja3MgYCFwbWRfcHJlc2VudChwbWR2YWwpYC4gSWYgaXQmIzM5O3Mgbm90IGEgbWlncmF0aW9uIGVudHJ5IChsaWtlIGEgZGV2aWNlIHByaXZhdGUgb25lKSwgaXQgcmV0dXJucyBlYXJseS4gVGhpcyBpcyB0aGUgZml4IHRvIHByZXZlbnQgdGhlIGNyYXNoLgoKU28sIGluIGVzc2VuY2UsIHRoZSBwYXRjaCBpcyBmaXhpbmcgYSBwb3RlbnRpYWwgY3Jhc2ggd2hlbiBoYW5kbGluZyBub24tcHJlc2VudCBQTURzIHRoYXQgYXJlbiYjMzk7dCBtaWdyYXRpb24gZW50cmllcyDigJMgbGlrZSBkZXZpY2UgcHJpdmF0ZSBlbnRyaWVzIOKAkyB3aXRoaW4gYHF1ZXVlX2ZvbGlvc19wbWRgLiBJdCBhbHNvIHVwZGF0ZXMgYFZNX0JVR19PTmAgYXNzZXJ0aW9ucyBpbiBtYWR2aXNlIHBhdGhzLiBUaGlzIGlzIGEgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjaGFuZ2UsIHNvIGl0IG5lZWRzIGZ1enppbmcgdG8gZW5zdXJlIGNvcnJlY3QgaGFuZGxpbmcgb2YgZGV2aWNlIHByaXZhdGUgbWVtb3J5IGluIE5VTUEgcG9saWN5IGFuZCBtYWR2aXNlIG9wZXJhdGlvbnMuCgpOb3csIEkgbmVlZCB0byBkZWZpbmUgdGhlIGZvY3VzIHN5bWJvbHMuIEkmIzM5O2xsIGZvY3VzIG9uIGBxdWV1ZV9mb2xpb3NfcG1kYCBhcyB0aGUga2V5IGZ1bmN0aW9uIHRvIHRhcmdldC4gVGhlbiwgSSBuZWVkIHRvIGluY2x1ZGUgYG1hZHZpc2VfZnJlZV9odWdlX3BtZGAgYW5kIGBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2VgIGJlY2F1c2UgdGhleSBsZWFkIGludG8gYHF1ZXVlX2ZvbGlvc19wbWRgLgoKSSBzaG91bGQgdmVyaWZ5IHRoZSBjb25maWdzLiBgTlVNQWAgaXMgbmVlZGVkIGZvciBgbW0vbWVtcG9saWN5LmNgLiBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIG5lZWRlZCBmb3IgaHVnZSBQTUQgc3VwcG9ydCBpbiBgbW0vaHVnZV9tZW1vcnkuY2AuIGBERVZJQ0VfUFJJVkFURWAgaXMgbmVlZGVkIGZvciwgd2VsbCwgZGV2aWNlIHByaXZhdGUgZW50cmllcy4gYFpPTkVfREVWSUNFYCBpcyBuZWVkZWQgZm9yIGBERVZJQ0VfUFJJVkFURWAuIGBNRU1PUllfSE9UUkVNT1ZFYCBpcyBuZWVkZWQgZm9yIGBaT05FX0RFVklDRWAuICBBbmQgZmluYWxseSwgYEFEVklTRV9TWVNDQUxMU2AgaXMgbmVlZGVkIGZvciBgbW0vbWFkdmlzZS5jYC4KCk9rYXksIEkmIzM5O20gcmVhZHkgdG8gY2FsbCB0aGUgYHNldC1yZXN1bHRzYCB0b29sIG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMDM6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05VTUEmIzM0OywKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OywKICAgICYjMzQ7REVWSUNFX1BSSVZBVEUmIzM0OywKICAgICYjMzQ7Wk9ORV9ERVZJQ0UmIzM0OywKICAgICYjMzQ7TUVNT1JZX0hPVFJFTU9WRSYjMzQ7LAogICAgJiMzNDtBRFZJU0VfU1lTQ0FMTFMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtxdWV1ZV9mb2xpb3NfcG1kJiMzNDssCiAgICAmIzM0O21hZHZpc2VfZnJlZV9odWdlX3BtZCYjMzQ7LAogICAgJiMzNDttYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgY3Jhc2ggaW4gYHF1ZXVlX2ZvbGlvc19wbWRgIHdoZW4gaGFuZGxpbmcgbm9uLXByZXNlbnQgUE1EcyB0aGF0IGFyZSBub3QgbWlncmF0aW9uIGVudHJpZXMgKHN1Y2ggYXMgZGV2aWNlIHByaXZhdGUgZW50cmllcykuIEl0IGFsc28gdXBkYXRlcyBgVk1fQlVHX09OYCBhc3NlcnRpb25zIGluIG1hZHZpc2UgcGF0aHMgdG8gY29ycmVjdGx5IGhhbmRsZSBkZXZpY2UgcHJpdmF0ZSBlbnRyaWVzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGNvcnJlY3QgaGFuZGxpbmcgb2YgZGV2aWNlIHByaXZhdGUgbWVtb3J5IGluIE5VTUEgcG9saWN5IGFuZCBtYWR2aXNlIG9wZXJhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05VTUEmIzM0OywKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OywKICAgICYjMzQ7REVWSUNFX1BSSVZBVEUmIzM0OywKICAgICYjMzQ7Wk9ORV9ERVZJQ0UmIzM0OywKICAgICYjMzQ7TUVNT1JZX0hPVFJFTU9WRSYjMzQ7LAogICAgJiMzNDtBRFZJU0VfU1lTQ0FMTFMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtxdWV1ZV9mb2xpb3NfcG1kJiMzNDssCiAgICAmIzM0O21hZHZpc2VfZnJlZV9odWdlX3BtZCYjMzQ7LAogICAgJiMzNDttYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgY3Jhc2ggaW4gYHF1ZXVlX2ZvbGlvc19wbWRgIHdoZW4gaGFuZGxpbmcgbm9uLXByZXNlbnQgUE1EcyB0aGF0IGFyZSBub3QgbWlncmF0aW9uIGVudHJpZXMgKHN1Y2ggYXMgZGV2aWNlIHByaXZhdGUgZW50cmllcykuIEl0IGFsc28gdXBkYXRlcyBgVk1fQlVHX09OYCBhc3NlcnRpb25zIGluIG1hZHZpc2UgcGF0aHMgdG8gY29ycmVjdGx5IGhhbmRsZSBkZXZpY2UgcHJpdmF0ZSBlbnRyaWVzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGNvcnJlY3QgaGFuZGxpbmcgb2YgZGV2aWNlIHByaXZhdGUgbWVtb3J5IGluIE5VTUEgcG9saWN5IGFuZCBtYWR2aXNlIG9wZXJhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0wOVQwMzoxMTozNy41NTY3NzQ0MjJaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzA5NjUyNTgzMjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTlVNQVwiLFxuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIixcbiAgICBcIkRFVklDRV9QUklWQVRFXCIsXG4gICAgXCJaT05FX0RFVklDRVwiLFxuICAgIFwiTUVNT1JZX0hPVFJFTU9WRVwiLFxuICAgIFwiQURWSVNFX1NZU0NBTExTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicXVldWVfZm9saW9zX3BtZFwiLFxuICAgIFwibWFkdmlzZV9mcmVlX2h1Z2VfcG1kXCIsXG4gICAgXCJtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCBjcmFzaCBpbiBgcXVldWVfZm9saW9zX3BtZGAgd2hlbiBoYW5kbGluZyBub24tcHJlc2VudCBQTURzIHRoYXQgYXJlIG5vdCBtaWdyYXRpb24gZW50cmllcyAoc3VjaCBhcyBkZXZpY2UgcHJpdmF0ZSBlbnRyaWVzKS4gSXQgYWxzbyB1cGRhdGVzIGBWTV9CVUdfT05gIGFzc2VydGlvbnMgaW4gbWFkdmlzZSBwYXRocyB0byBjb3JyZWN0bHkgaGFuZGxlIGRldmljZSBwcml2YXRlIGVudHJpZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgY29ycmVjdCBoYW5kbGluZyBvZiBkZXZpY2UgcHJpdmF0ZSBtZW1vcnkgaW4gTlVNQSBwb2xpY3kgYW5kIG1hZHZpc2Ugb3BlcmF0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMDM6MTE6MzcuNTU2NzgyNzMyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NTQ4NTUyMTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBlZmQ0NTZjNjMxZmVhOGQ0NTU0YjlmODIxNzQ2OTNiOTYyODc1OGZkXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgSnVsIDkgMDM6MTE6MzUgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vaHVnZV9tZW1vcnkuYyBiL21tL2h1Z2VfbWVtb3J5LmNcXG5pbmRleCBlYTA0NDVkNmMxN2YwMS4uYmQzOWIyNjNmYzYwNTkgMTAwNjQ0XFxuLS0tIGEvbW0vaHVnZV9tZW1vcnkuY1xcbisrKyBiL21tL2h1Z2VfbWVtb3J5LmNcXG5AQCAtMjI5OCw3ICsyMjk4LDggQEAgYm9vbCBtYWR2aXNlX2ZyZWVfaHVnZV9wbWQoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIFxcbiBcXHRpZiAodW5saWtlbHkoIXBtZF9wcmVzZW50KG9yaWdfcG1kKSkpIHtcXG4gXFx0XFx0Vk1fQlVHX09OKHRocF9taWdyYXRpb25fc3VwcG9ydGVkKCkgXFx1MDAyNlxcdTAwMjZcXG4tXFx0XFx0XFx0XFx0ICAhcG1kX2lzX21pZ3JhdGlvbl9lbnRyeShvcmlnX3BtZCkpO1xcbitcXHRcXHRcXHRcXHQgICFwbWRfaXNfbWlncmF0aW9uX2VudHJ5KG9yaWdfcG1kKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHRcXHQgICFwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnkob3JpZ19wbWQpKTtcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcdH1cXG4gXFxuZGlmZiAtLWdpdCBhL21tL21hZHZpc2UuYyBiL21tL21hZHZpc2UuY1xcbmluZGV4IDkyOTJmNjBiMTlhYTdjLi4xMDY1YjVhODRlYTc5NyAxMDA2NDRcXG4tLS0gYS9tbS9tYWR2aXNlLmNcXG4rKysgYi9tbS9tYWR2aXNlLmNcXG5AQCAtMzg5LDcgKzM4OSw4IEBAIHN0YXRpYyBpbnQgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlKHBtZF90ICpwbWQsXFxuIFxcbiBcXHRcXHRpZiAodW5saWtlbHkoIXBtZF9wcmVzZW50KG9yaWdfcG1kKSkpIHtcXG4gXFx0XFx0XFx0Vk1fQlVHX09OKHRocF9taWdyYXRpb25fc3VwcG9ydGVkKCkgXFx1MDAyNlxcdTAwMjZcXG4tXFx0XFx0XFx0XFx0XFx0IXBtZF9pc19taWdyYXRpb25fZW50cnkob3JpZ19wbWQpKTtcXG4rXFx0XFx0XFx0XFx0XFx0IXBtZF9pc19taWdyYXRpb25fZW50cnkob3JpZ19wbWQpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdFxcdFxcdCFwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnkob3JpZ19wbWQpKTtcXG4gXFx0XFx0XFx0Z290byBodWdlX3VubG9jaztcXG4gXFx0XFx0fVxcbiBcXG5kaWZmIC0tZ2l0IGEvbW0vbWVtcG9saWN5LmMgYi9tbS9tZW1wb2xpY3kuY1xcbmluZGV4IDkxNGY4MTg2M2RiNWE2Li40Nzg1YjU1YzAyZGFmOSAxMDA2NDRcXG4tLS0gYS9tbS9tZW1wb2xpY3kuY1xcbisrKyBiL21tL21lbXBvbGljeS5jXFxuQEAgLTY1NCwxMiArNjU0LDE0IEBAIHN0YXRpYyB2b2lkIHF1ZXVlX2ZvbGlvc19wbWQocG1kX3QgKnBtZCwgc3RydWN0IG1tX3dhbGsgKndhbGspXFxuIHtcXG4gXFx0c3RydWN0IGZvbGlvICpmb2xpbztcXG4gXFx0c3RydWN0IHF1ZXVlX3BhZ2VzICpxcCA9IHdhbGstXFx1MDAzZXByaXZhdGU7XFxuK1xcdHBtZF90IHBtZHZhbCA9ICpwbWQ7XFxuIFxcbi1cXHRpZiAodW5saWtlbHkocG1kX2lzX21pZ3JhdGlvbl9lbnRyeSgqcG1kKSkpIHtcXG4tXFx0XFx0cXAtXFx1MDAzZW5yX2ZhaWxlZCsrO1xcbitcXHRpZiAodW5saWtlbHkoIXBtZF9wcmVzZW50KHBtZHZhbCkpKSB7XFxuK1xcdFxcdGlmIChwbWRfaXNfbWlncmF0aW9uX2VudHJ5KHBtZHZhbCkpXFxuK1xcdFxcdFxcdHFwLVxcdTAwM2Vucl9mYWlsZWQrKztcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXHR9XFxuLVxcdGZvbGlvID0gcG1kX2ZvbGlvKCpwbWQpO1xcbitcXHRmb2xpbyA9IHBtZF9mb2xpbyhwbWR2YWwpO1xcbiBcXHRpZiAoaXNfaHVnZV96ZXJvX2ZvbGlvKGZvbGlvKSkge1xcbiBcXHRcXHR3YWxrLVxcdTAwM2VhY3Rpb24gPSBBQ1RJT05fQ09OVElOVUU7XFxuIFxcdFxcdHJldHVybjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMDM6MTE6MzguMjEzMzQ3MjY4WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MzAzMDg2NTg0MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTlVNQVwiLFxuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIixcbiAgICBcIkRFVklDRV9QUklWQVRFXCIsXG4gICAgXCJaT05FX0RFVklDRVwiLFxuICAgIFwiTUVNT1JZX0hPVFJFTU9WRVwiLFxuICAgIFwiQURWSVNFX1NZU0NBTExTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicXVldWVfZm9saW9zX3BtZFwiLFxuICAgIFwibWFkdmlzZV9mcmVlX2h1Z2VfcG1kXCIsXG4gICAgXCJtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCBjcmFzaCBpbiBgcXVldWVfZm9saW9zX3BtZGAgd2hlbiBoYW5kbGluZyBub24tcHJlc2VudCBQTURzIHRoYXQgYXJlIG5vdCBtaWdyYXRpb24gZW50cmllcyAoc3VjaCBhcyBkZXZpY2UgcHJpdmF0ZSBlbnRyaWVzKS4gSXQgYWxzbyB1cGRhdGVzIGBWTV9CVUdfT05gIGFzc2VydGlvbnMgaW4gbWFkdmlzZSBwYXRocyB0byBjb3JyZWN0bHkgaGFuZGxlIGRldmljZSBwcml2YXRlIGVudHJpZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgY29ycmVjdCBoYW5kbGluZyBvZiBkZXZpY2UgcHJpdmF0ZSBtZW1vcnkgaW4gTlVNQSBwb2xpY3kgYW5kIG1hZHZpc2Ugb3BlcmF0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBlZmQ0NTZjNjMxZmVhOGQ0NTU0YjlmODIxNzQ2OTNiOTYyODc1OGZkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgOSAwMzoxMTozNSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2h1Z2VfbWVtb3J5LmMgYi9tbS9odWdlX21lbW9yeS5jXG5pbmRleCBlYTA0NDVkNmMxN2YwMS4uYmQzOWIyNjNmYzYwNTkgMTAwNjQ0XG4tLS0gYS9tbS9odWdlX21lbW9yeS5jXG4rKysgYi9tbS9odWdlX21lbW9yeS5jXG5AQCAtMjI5OCw3ICsyMjk4LDggQEAgYm9vbCBtYWR2aXNlX2ZyZWVfaHVnZV9wbWQoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXG4gXHRpZiAodW5saWtlbHkoIXBtZF9wcmVzZW50KG9yaWdfcG1kKSkpIHtcbiBcdFx0Vk1fQlVHX09OKHRocF9taWdyYXRpb25fc3VwcG9ydGVkKCkgXHUwMDI2XHUwMDI2XG4tXHRcdFx0XHQgICFwbWRfaXNfbWlncmF0aW9uX2VudHJ5KG9yaWdfcG1kKSk7XG4rXHRcdFx0XHQgICFwbWRfaXNfbWlncmF0aW9uX2VudHJ5KG9yaWdfcG1kKSBcdTAwMjZcdTAwMjZcbitcdFx0XHRcdCAgIXBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeShvcmlnX3BtZCkpO1xuIFx0XHRnb3RvIG91dDtcbiBcdH1cbiBcbmRpZmYgLS1naXQgYS9tbS9tYWR2aXNlLmMgYi9tbS9tYWR2aXNlLmNcbmluZGV4IDkyOTJmNjBiMTlhYTdjLi4xMDY1YjVhODRlYTc5NyAxMDA2NDRcbi0tLSBhL21tL21hZHZpc2UuY1xuKysrIGIvbW0vbWFkdmlzZS5jXG5AQCAtMzg5LDcgKzM4OSw4IEBAIHN0YXRpYyBpbnQgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlKHBtZF90ICpwbWQsXG4gXG4gXHRcdGlmICh1bmxpa2VseSghcG1kX3ByZXNlbnQob3JpZ19wbWQpKSkge1xuIFx0XHRcdFZNX0JVR19PTih0aHBfbWlncmF0aW9uX3N1cHBvcnRlZCgpIFx1MDAyNlx1MDAyNlxuLVx0XHRcdFx0XHQhcG1kX2lzX21pZ3JhdGlvbl9lbnRyeShvcmlnX3BtZCkpO1xuK1x0XHRcdFx0XHQhcG1kX2lzX21pZ3JhdGlvbl9lbnRyeShvcmlnX3BtZCkgXHUwMDI2XHUwMDI2XG4rXHRcdFx0XHRcdCFwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnkob3JpZ19wbWQpKTtcbiBcdFx0XHRnb3RvIGh1Z2VfdW5sb2NrO1xuIFx0XHR9XG4gXG5kaWZmIC0tZ2l0IGEvbW0vbWVtcG9saWN5LmMgYi9tbS9tZW1wb2xpY3kuY1xuaW5kZXggOTE0ZjgxODYzZGI1YTYuLjQ3ODViNTVjMDJkYWY5IDEwMDY0NFxuLS0tIGEvbW0vbWVtcG9saWN5LmNcbisrKyBiL21tL21lbXBvbGljeS5jXG5AQCAtNjU0LDEyICs2NTQsMTQgQEAgc3RhdGljIHZvaWQgcXVldWVfZm9saW9zX3BtZChwbWRfdCAqcG1kLCBzdHJ1Y3QgbW1fd2FsayAqd2FsaylcbiB7XG4gXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuIFx0c3RydWN0IHF1ZXVlX3BhZ2VzICpxcCA9IHdhbGstXHUwMDNlcHJpdmF0ZTtcbitcdHBtZF90IHBtZHZhbCA9ICpwbWQ7XG4gXG4tXHRpZiAodW5saWtlbHkocG1kX2lzX21pZ3JhdGlvbl9lbnRyeSgqcG1kKSkpIHtcbi1cdFx0cXAtXHUwMDNlbnJfZmFpbGVkKys7XG4rXHRpZiAodW5saWtlbHkoIXBtZF9wcmVzZW50KHBtZHZhbCkpKSB7XG4rXHRcdGlmIChwbWRfaXNfbWlncmF0aW9uX2VudHJ5KHBtZHZhbCkpXG4rXHRcdFx0cXAtXHUwMDNlbnJfZmFpbGVkKys7XG4gXHRcdHJldHVybjtcbiBcdH1cbi1cdGZvbGlvID0gcG1kX2ZvbGlvKCpwbWQpO1xuK1x0Zm9saW8gPSBwbWRfZm9saW8ocG1kdmFsKTtcbiBcdGlmIChpc19odWdlX3plcm9fZm9saW8oZm9saW8pKSB7XG4gXHRcdHdhbGstXHUwMDNlYWN0aW9uID0gQUNUSU9OX0NPTlRJTlVFO1xuIFx0XHRyZXR1cm47XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQwMzoxMTozOC4yMTMzNDk3NjhaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMTE3NDA0MjI0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQYXRjaDogSHVnZSBQYWdlcyBhbmQgTWVtb3J5IE1hbmFnZW1lbnQqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgSSBzZWUgd2UncmUgdG91Y2hpbmcgYG1tL2h1Z2VfbWVtb3J5LmNgLCBgbW0vbWFkdmlzZS5jYCwgYW5kIGBtbS9tZW1wb2xpY3kuY2AuIFNlZW1zIHRvIGJlIHJlbGF0ZWQgdG8gaGFuZGxpbmcgaHVnZSBwYWdlcywgd2hpY2ggYWx3YXlzIHdhcnJhbnRzIGEgY2xvc2UgbG9vay5cblxuVGhlIGZpcnN0IHR3byBjaGFuZ2VzLCBpbiBgbW0vaHVnZV9tZW1vcnkuY2AgYW5kIGBtbS9tYWR2aXNlLmNgLCBhcmUgc3RyYWlnaHRmb3J3YXJkLiBUaGV5J3JlIGp1c3QgYWRkaW5nIGEgY2hlY2sgZm9yIGAhcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KG9yaWdfcG1kKWAgdG8gYSBgVk1fQlVHX09OYC4gQSBgVk1fQlVHX09OYCBpcyBhIGRlYnVnIGFzc2VydGlvbi4gRnJvbSBhIGZ1bmN0aW9uYWwgcGVyc3BlY3RpdmUsIGl0J3MgaXJyZWxldmFudCBpbiBub24tZGVidWcgYnVpbGRzLiBCdXQgaW4gYSBkZWJ1ZyBidWlsZCwgdGhpcyBpcyBtZWFudCB0byBwcmV2ZW50IGEgY3Jhc2guIEVzc2VudGlhbGx5LCBpdCdzIGEgc2FmZXR5IG5ldCwgbWFraW5nIHN1cmUgdGhhdCBhIHNwZWNpZmljIGNvbmRpdGlvbiAqc2hvdWxkbid0KiBoYXBwZW4uIFRoZSBuZXcgY29uZGl0aW9uIHNlZW1zIHRvIGJlIGVuc3VyaW5nIHRoYXQgdGhlIGVudHJ5IGlzIG5laXRoZXIgYSBtaWdyYXRpb24gZW50cnkgbm9yIGEgZGV2aWNlLXByaXZhdGUgZW50cnkgYmVmb3JlIHRyaWdnZXJpbmcgdGhlIGRlYnVnIGNoZWNrLiBUaGF0J3MgZ29vZCwga2VlcHMgdGhpbmdzIHNhZmUgYW5kIGhlbHBzIGNhdGNoIHBvdGVudGlhbCBpc3N1ZXMgZWFybHkuXG5cbk5vdywgdGhlIGludGVyZXN0aW5nIHBhcnQgaXMgdGhlIGNoYW5nZSBpbiBgbW0vbWVtcG9saWN5LmNgLCBzcGVjaWZpY2FsbHkgaW4gdGhlIGBxdWV1ZV9mb2xpb3NfcG1kYCBmdW5jdGlvbi4gVGhpcyBvbmUncyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBub3QganVzdCBhIGRlYnVnIGNoZWNrLiBUaGUgcHJldmlvdXMgY29kZSBjaGVja2VkIGlmIHRoZSBlbnRyeSB3YXMgYSBtaWdyYXRpb24gZW50cnkuIEJ1dCBub3csIGl0J3MgY2hlY2tpbmcgYCFwbWRfcHJlc2VudChwbWR2YWwpYC4gRXNzZW50aWFsbHksIHRoZSBsb2dpYyBpcyBiZWluZyBpbnZlcnRlZC4gSWYgdGhlIFBNRCBpc24ndCBwcmVzZW50LCB0aGVuIGl0IGRpdmVzIGludG8gY2hlY2tpbmcgaWYgaXQgKmlzKiBhIG1pZ3JhdGlvbiBlbnRyeS4gSWYgaXQgaXMsIHRoZW4gYG5yX2ZhaWxlZGAgaXMgaW5jcmVtZW50ZWQuIFByZXZpb3VzbHksIGl0IHdvdWxkIHByb2NlZWQgdG8gY2FsbCBgcG1kX2ZvbGlvKCpwbWQpYCwgd2hpY2ggY291bGQgbGVhZCB0byBkZXJlZmVyZW5jaW5nIGEgZ2FyYmFnZSBwb2ludGVyIG9yLCB3b3JzZSwgYSBjcmFzaC4gU28sIHRoaXMgcmVmYWN0b3JpbmcgcHJvdGVjdHMgYWdhaW5zdCB0aGF0IHBvc3NpYmlsaXR5LlxuXG5UaGVyZWZvcmUsIHRoaXMgcGF0Y2ggbG9va3MgbGlrZSBpdCdzIGltcHJvdmluZyByb2J1c3RuZXNzIGJ5IGFkZGluZyB0aGUgc2FmZXR5IGNoZWNrIHdoaWxlIGFsc28gcHJvdGVjdGluZyB0aGUgYHF1ZXVlX2ZvbGlvc19wbWRgIGZ1bmN0aW9uIGZyb20gcG90ZW50aWFsbHkgZGVyZWZlcmVuY2luZyBnYXJiYWdlIGRhdGEuIFNvdW5kcyBsaWtlIGEgc29saWQgaW1wcm92ZW1lbnQuIEknbGwgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGNvbnRleHRzIHdoZXJlIHRoZXNlIGZ1bmN0aW9ucyBhcmUgdXNlZCB0byB1bmRlcnN0YW5kIHRoZSBjb21wbGV0ZSBpbXBhY3QsIGJ1dCBhdCBhIGdsYW5jZSwgdGhpcyBsb29rcyB3ZWxsLXJlYXNvbmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzg5LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Njg5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMDM6MTE6NTkuMzg3Mzk3MzExWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2ODA2NjY1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJxdWV1ZV9mb2xpb3NfcG1kXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21lbXBvbGljeS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbXBvbGljeS5jPTY0ND1zdGF0aWMgaW5saW5lIGJvb2wgcXVldWVfZm9saW9fcmVxdWlyZWQoc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbm1tL21lbXBvbGljeS5jLTY1Mi1cXG5tbS9tZW1wb2xpY3kuYzo2NTM6c3RhdGljIHZvaWQgcXVldWVfZm9saW9zX3BtZChwbWRfdCAqcG1kLCBzdHJ1Y3QgbW1fd2FsayAqd2FsaylcXG5tbS9tZW1wb2xpY3kuYy02NTQte1xcbi0tXFxubW0vbWVtcG9saWN5LmM9Njg3PXN0YXRpYyBpbnQgcXVldWVfZm9saW9zX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy03MDAtXFx0aWYgKHB0bCkge1xcbm1tL21lbXBvbGljeS5jOjcwMTpcXHRcXHRxdWV1ZV9mb2xpb3NfcG1kKHBtZCwgd2Fsayk7XFxubW0vbWVtcG9saWN5LmMtNzAyLVxcdFxcdHNwaW5fdW5sb2NrKHB0bCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDAzOjExOjU5Ljk1NTQ3MTk1NloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIyODQzMDkzMzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqVW5kZXJzdGFuZGluZyB0aGUgRm9saW8gUXVldWluZyBQcm9jZXNzKipcblxuUmlnaHQsIHNvIGBxdWV1ZV9mb2xpb3NfcG1kYCBpcyBjbGVhcmx5IGEgZnVuY3Rpb24gdGhhdCBwbGF5cyBhIHJvbGUgaW4gcXVldWluZyBmb2xpb3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByZWxhdGlvbnNoaXAgdG8gYHF1ZXVlX2ZvbGlvc19wdGVfcmFuZ2VgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgd2hhdCdzIHRoZSBjb250cm9sIGZsb3c/IEl0IGxvb2tzIGxpa2UgYHF1ZXVlX2ZvbGlvc19wdGVfcmFuZ2VgIGNhbGxzIGBxdWV1ZV9mb2xpb3NfcG1kYC4gU28sIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhhdCByZWxhdGlvbnNoaXAgaXMgdG8gdHJhY2sgZG93biB0aGUgcmVsZXZhbnQgY29kZSBwYXRoLlxuXG5Pa2F5LCBsZXQncyB0aGluayBhYm91dCB0aGUgY29udGV4dC4gVGhpcyBpcyBtZW1vcnkgbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IGRlYWxpbmcgd2l0aCBmb2xpb3MuIFRoZSB0cmFjZSBzZWVtcyB0byBiZSByZWxhdGVkIHRvIHRoZSBQTUQgbGV2ZWwuIE5vdywgSSBoYXZlIHRvIGZpZ3VyZSBvdXQgd2hhdCBjb25maWd1cmF0aW9ucyBhcmUgY3JpdGljYWwuIFNpbmNlIHRoaXMgbG9va3MgbGlrZSBOVU1BLWF3YXJlIGNvZGUsIEkgbmVlZCB0byBjaGVjayB0byBzZWUgaWYgYG1tL21lbXBvbGljeS5jYCBpcyBpbnZvbHZlZC4gSSB2YWd1ZWx5IHJlY2FsbCB0aGF0IGZpbGUgYmVpbmcgY29tcGlsZWQgd2hlbiBgQ09ORklHX05VTUFgIGlzIGVuYWJsZWQuIEl0J3MgYSBrZXkgcGFydCBvZiBob3cgdGhlIGtlcm5lbCBtYW5hZ2VzIG1lbW9yeSBwbGFjZW1lbnQgYWNyb3NzIE5VTUEgbm9kZXMuIEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayB0aGF0IHRoaXMgaXMgdGhlIGNvbmZpZ3VyYXRpb24gSSBuZWVkIHRvIGZvY3VzIG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNzk5LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMDM6MTI6MjIuNzk4NTcwNjA2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNzg0NzY0MjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVtcG9saWN5Lm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vTWFrZWZpbGU9ODU9b2JqLSQoQ09ORklHX0hVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQKVxcdCs9IGh1Z2V0bGJfdm1lbW1hcC5vXFxubW0vTWFrZWZpbGU6ODY6b2JqLSQoQ09ORklHX05VTUEpIFxcdCs9IG1lbXBvbGljeS5vXFxubW0vTWFrZWZpbGUtODctb2JqLSQoQ09ORklHX1NQQVJTRU1FTSlcXHQrPSBzcGFyc2Uub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQwMzoxMjoyNC44NzcwNTUwMjNaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NTEzMjg3MzcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhlc2UgdHdvIGZ1bmN0aW9uczogYG1hZHZpc2VfZnJlZV9odWdlX3BtZGAgYW5kIGBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2VgLiBNeSBmaXJzdCBzdG9wIGlzIGdvaW5nIHRvIGJlIHRoZWlyIHNvdXJjZSBmaWxlcy5cblxuKipBbmFseXppbmcgTWVtb3J5IE1hbmFnZW1lbnQgRnVuY3Rpb25zKipcblxuYG1hZHZpc2VfZnJlZV9odWdlX3BtZGAgY2F1Z2h0IG15IGV5ZSwgYW5kIGEgcXVpY2sgY2hlY2sgdGVsbHMgbWUgaXQncyBsb2NhdGVkIHdpdGhpbiBgbW0vaHVnZV9tZW1vcnkuY2AuIFRoYXQgbWVhbnMgaXQncyBpbnRyaW5zaWNhbGx5IHRpZWQgdG8gdGhlIGtlcm5lbCdzIHRyYW5zcGFyZW50IGh1Z2VwYWdlcyBmdW5jdGlvbmFsaXR5LCBhcyBpbmRpY2F0ZWQgYnkgdGhlIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIG9wdGlvbi4gVGhhdCBtYWtlcyBzZW5zZSwgZ2l2ZW4gdGhlIG5hbWUuIEknbGwgbmVlZCB0byByZW1lbWJlciB0byBrZWVwIHRoYXQgY29udGV4dCBpbiBtaW5kIHdoZW4gSSBzdGFydCBkaWdnaW5nIGludG8gdGhlIGRldGFpbHMuXG5cbk5vdywgYG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZWAgYXBwZWFycyB0byByZXNpZGUgaW4gYG1tL21hZHZpc2UuY2AuIFRoZSBwcmVzZW5jZSBvZiB0aGlzIGZ1bmN0aW9uIGlzIGNvbmRpdGlvbmFsIG9uIGBDT05GSUdfQURWSVNFX1NZU0NBTExTYCBiZWluZyBlbmFibGVkLCB3aGljaCBpcyBhIGdvb2QgY2x1ZSBmb3IgZnVydGhlciBpbnZlc3RpZ2F0aW9uLiBUaGlzIHN1Z2dlc3RzIGl0cyByZWxhdGVkIHRvIHRoZSBzeXN0ZW0gY2FsbCB0aGF0IGFsbG93cyBwcm9jZXNzZXMgdG8gZ2l2ZSBoaW50cyB0byB0aGUga2VybmVsIGFib3V0IG1lbW9yeSB1c2FnZS4gVGhpcyB3aWxsIGJlIHdoZXJlIEkgYmVnaW4gdG8gZXhwbG9yZSBob3cgdXNlci1zcGFjZSBpbnRlcmFjdHMgd2l0aCB0aGUga2VybmVsJ3MgbWVtb3J5IG1hbmFnZW1lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQyMTAsIk91dHB1dFRva2VucyI6NTYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMDM6MTI6MzQuMzkwMzQ0NjU1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyOTY0NjAzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJodWdlX21lbW9yeS5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL01ha2VmaWxlPTEwMD1vYmotJChDT05GSUdfREVWSUNFX01JR1JBVElPTikgKz0gbWlncmF0ZV9kZXZpY2Uub1xcbm1tL01ha2VmaWxlOjEwMTpvYmotJChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpICs9IGh1Z2VfbWVtb3J5Lm8ga2h1Z2VwYWdlZC5vXFxubW0vTWFrZWZpbGUtMTAyLW9iai0kKENPTkZJR19QQUdFX0NPVU5URVIpICs9IHBhZ2VfY291bnRlci5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDAzOjEyOjM1LjAxOTk5NzEyM1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDk3MDc0NDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWFkdmlzZS5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL01ha2VmaWxlPTc0PWlmZGVmIENPTkZJR19NTVVcXG5tbS9NYWtlZmlsZTo3NTpcXHRvYmotJChDT05GSUdfQURWSVNFX1NZU0NBTExTKVxcdCs9IG1hZHZpc2Uub1xcbm1tL01ha2VmaWxlLTc2LWVuZGlmXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDAzOjEyOjM1LjI2OTcxMjU4OVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNTY1MDE0MTkxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUmVjZW50IEtlcm5lbCBNZW1vcnkgTWFuYWdlbWVudCBDaGFuZ2VzKipcblxuT2theSwgc28gbG9va2luZyBhdCB0aGVzZSBkaWZmcywgaXQgc2VlbXMgdGhlIHVwZGF0ZXMgaW4gYG1tL2h1Z2VfbWVtb3J5LmNgIGFuZCBgbW0vbWFkdmlzZS5jYCBhcmUgc3RyYWlnaHRmb3J3YXJkIGBWTV9CVUdfT05gIGFkZGl0aW9ucy4gUHJldHR5IHJvdXRpbmUgc3R1ZmYsIGxpa2VseSB0byBjYXRjaCBzb21lIGVkZ2UgY2FzZXMgZHVyaW5nIGRldmVsb3BtZW50LiBUaGUgY2hhbmdlIGluIGBtbS9tZW1wb2xpY3kuY2AgaXMgdGhlIG9uZSB0aGF0J3MgZ3JhYmJlZCBteSBhdHRlbnRpb24uIEl0IGxvb2tzIGxpa2UgaXQncyBhZGRyZXNzaW5nIGEgYnVnLiBTcGVjaWZpY2FsbHksIGl0J3MgcHJldmVudGluZyBhIGNyYXNoIG9yLCB3b3JzZSwgaW5jb3JyZWN0IGJlaGF2aW9yIHdoZW4gZGVhbGluZyB3aXRoIGEgUE1EIHRoYXQgaXNuJ3QgYSBtaWdyYXRpb24gZW50cnkuIFRoaXMgY291bGQgYmUgZHVlIHRvIGEgZGV2aWNlLXByaXZhdGUgZW50cnksIGEgc3dhcCBlbnRyeSwgb3IgcG90ZW50aWFsbHkganVzdCB0aGUgYWJzZW5jZSBvZiBhbiBlbnRyeS5cblxuTm93IGhvbGQgb24gYSBzZWNvbmQuLi4gYHF1ZXVlX2ZvbGlvc19wbWRgLi4uIHRoYXQncyBnZXR0aW5nIGNhbGxlZCBmcm9tIGBxdWV1ZV9mb2xpb3NfcHRlX3JhbmdlYCAqd2hlbiogYHB0bGAgaXMgbm90IE5VTEwuIFJpZ2h0LCB0aGF0IG1lYW5zIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIGh1Z2UgUE1EIOKAkyBhIFRIUC4gT2theSwgbGV0J3MgZHJpbGwgZG93biBpbnRvIGBxdWV1ZV9mb2xpb3NfcHRlX3JhbmdlYCBpbiBgbW0vbWVtcG9saWN5LmNgIGFuZCBmaWd1cmUgb3V0IHdoYXQncyBnb2luZyBvbiB3aXRoIHRoaXMgUE1EIGhhbmRsaW5nLiBMZXQncyBzZWUgaG93IHRoaXMgdGllcyBpbnRvIHRoZSBvdmVyYWxsIG1lbW9yeSBwb2xpY3kgbWFuYWdlbWVudC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBjb25uZWN0aW9uIHRvIGFzc2VzcyB0aGUgaW1wYWN0IGFuZCBwb3NzaWJsZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBmaXguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ4MTIsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIiwiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDAzOjEyOjUwLjkxOTg1NjkxMVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzQ0NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vbWVtcG9saWN5LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjg3LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjg3OlxcdHN0YXRpYyBpbnQgcXVldWVfZm9saW9zX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuIDY4ODpcXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIGVuZCwgc3RydWN0IG1tX3dhbGsgKndhbGspXFxuIDY4OTpcXHR7XFxuIDY5MDpcXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHdhbGstXFx1MDAzZXZtYTtcXG4gNjkxOlxcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW87XFxuIDY5MjpcXHRcXHRzdHJ1Y3QgcXVldWVfcGFnZXMgKnFwID0gd2Fsay1cXHUwMDNlcHJpdmF0ZTtcXG4gNjkzOlxcdFxcdHVuc2lnbmVkIGxvbmcgZmxhZ3MgPSBxcC1cXHUwMDNlZmxhZ3M7XFxuIDY5NDpcXHRcXHRwdGVfdCAqcHRlLCAqbWFwcGVkX3B0ZTtcXG4gNjk1OlxcdFxcdHB0ZV90IHB0ZW50O1xcbiA2OTY6XFx0XFx0c3BpbmxvY2tfdCAqcHRsO1xcbiA2OTc6XFx0XFx0aW50IG1heF9uciwgbnI7XFxuIDY5ODpcXHRcXG4gNjk5OlxcdFxcdHB0bCA9IHBtZF90cmFuc19odWdlX2xvY2socG1kLCB2bWEpO1xcbiA3MDA6XFx0XFx0aWYgKHB0bCkge1xcbiA3MDE6XFx0XFx0XFx0cXVldWVfZm9saW9zX3BtZChwbWQsIHdhbGspO1xcbiA3MDI6XFx0XFx0XFx0c3Bpbl91bmxvY2socHRsKTtcXG4gNzAzOlxcdFxcdFxcdGdvdG8gb3V0O1xcbiA3MDQ6XFx0XFx0fVxcbiA3MDU6XFx0XFxuIDcwNjpcXHRcXHRtYXBwZWRfcHRlID0gcHRlID0gcHRlX29mZnNldF9tYXBfbG9jayh3YWxrLVxcdTAwM2VtbSwgcG1kLCBhZGRyLCBcXHUwMDI2cHRsKTtcXG4gNzA3OlxcdFxcdGlmICghcHRlKSB7XFxuIDcwODpcXHRcXHRcXHR3YWxrLVxcdTAwM2VhY3Rpb24gPSBBQ1RJT05fQUdBSU47XFxuIDcwOTpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gNzEwOlxcdFxcdH1cXG4gNzExOlxcdFxcdGZvciAoOyBhZGRyICE9IGVuZDsgcHRlICs9IG5yLCBhZGRyICs9IG5yICogUEFHRV9TSVpFKSB7XFxuIDcxMjpcXHRcXHRcXHRtYXhfbnIgPSAoZW5kIC0gYWRkcikgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVDtcXG4gNzEzOlxcdFxcdFxcdG5yID0gMTtcXG4gNzE0OlxcdFxcdFxcdHB0ZW50ID0gcHRlcF9nZXQocHRlKTtcXG4gNzE1OlxcdFxcdFxcdGlmIChwdGVfbm9uZShwdGVudCkpXFxuIDcxNjpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gNzE3OlxcdFxcdFxcdGlmICghcHRlX3ByZXNlbnQocHRlbnQpKSB7XFxuIDcxODpcXHRcXHRcXHRcXHRjb25zdCBzb2Z0bGVhZl90IGVudHJ5ID0gc29mdGxlYWZfZnJvbV9wdGUocHRlbnQpO1xcbiA3MTk6XFx0XFxuIDcyMDpcXHRcXHRcXHRcXHRpZiAoc29mdGxlYWZfaXNfbWlncmF0aW9uKGVudHJ5KSlcXG4gNzIxOlxcdFxcdFxcdFxcdFxcdHFwLVxcdTAwM2Vucl9mYWlsZWQrKztcXG4gNzIyOlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiA3MjM6XFx0XFx0XFx0fVxcbiA3MjQ6XFx0XFx0XFx0Zm9saW8gPSB2bV9ub3JtYWxfZm9saW8odm1hLCBhZGRyLCBwdGVudCk7XFxuIDcyNTpcXHRcXHRcXHRpZiAoIWZvbGlvIHx8IGZvbGlvX2lzX3pvbmVfZGV2aWNlKGZvbGlvKSlcXG4gNzI2OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiA3Mjc6XFx0XFx0XFx0aWYgKGZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pIFxcdTAwMjZcXHUwMDI2IG1heF9uciAhPSAxKVxcbiA3Mjg6XFx0XFx0XFx0XFx0bnIgPSBmb2xpb19wdGVfYmF0Y2goZm9saW8sIHB0ZSwgcHRlbnQsIG1heF9ucik7XFxuIDcyOTpcXHRcXHRcXHQvKlxcbiA3MzA6XFx0XFx0XFx0ICogdm1fbm9ybWFsX2ZvbGlvKCkgZmlsdGVycyBvdXQgemVybyBwYWdlcywgYnV0IHRoZXJlIG1pZ2h0XFxuIDczMTpcXHRcXHRcXHQgKiBzdGlsbCBiZSByZXNlcnZlZCBmb2xpb3MgdG8gc2tpcCwgcGVyaGFwcyBpbiBhIFZEU08uXFxuIDczMjpcXHRcXHRcXHQgKi9cXG4gNzMzOlxcdFxcdFxcdGlmIChmb2xpb190ZXN0X3Jlc2VydmVkKGZvbGlvKSlcXG4gNzM0OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiA3MzU6XFx0XFx0XFx0aWYgKCFxdWV1ZV9mb2xpb19yZXF1aXJlZChmb2xpbywgcXApKVxcbiA3MzY6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDAzOjEyOjUwLjkyMDI5NTEzMVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNzYwMzUxNzU0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqQW5hbHl6aW5nIHRoZSBgcXVldWVfZm9saW9zX3BtZGAgRnVuY3Rpb24qKlxuXG5BbHJpZ2h0LCBzbyBgcXVldWVfZm9saW9zX3BtZGAgaXMgdGhlIGZ1bmN0aW9uIHRoYXQgZ2V0cyBjYWxsZWQgKmFmdGVyKiBgcG1kX3RyYW5zX2h1Z2VfbG9ja2AgZmluYWxseSBncmFudHMgdXMgdGhlIGxvY2suIFRoYXQncyB0aGUgY3JpdGljYWwganVuY3R1cmUuIE5vdywgbGV0J3MgY2lyY2xlIGJhY2sgYW5kIHJlYWxseSBkaWcgaW50byB0aGUgcHVycG9zZSBhbmQgbWVjaGFuaWNzIG9mIGBxdWV1ZV9mb2xpb3NfcG1kYC4gSSBuZWVkIHRvIGZ1bGx5IGdyYXNwIHdoYXQncyBoYXBwZW5pbmcgKndpdGhpbiogdGhhdCBmdW5jdGlvbiwgZ2l2ZW4gaXRzIHBsYWNlIGluIHRoaXMgY3J1Y2lhbCBtZW1vcnkgbWFuYWdlbWVudCBwYXRoLiBMZXQncyByZXZpc2l0IGl0IHdpdGggYSBmcmVzaCBleWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYwODEsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDAzOjEzOjA4LjUyMzgxNTU2MloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODgzOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vbWVtcG9saWN5LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjUzLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjUzOlxcdHN0YXRpYyB2b2lkIHF1ZXVlX2ZvbGlvc19wbWQocG1kX3QgKnBtZCwgc3RydWN0IG1tX3dhbGsgKndhbGspXFxuIDY1NDpcXHR7XFxuIDY1NTpcXHRcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xcbiA2NTY6XFx0XFx0c3RydWN0IHF1ZXVlX3BhZ2VzICpxcCA9IHdhbGstXFx1MDAzZXByaXZhdGU7XFxuIDY1NzpcXHRcXHRwbWRfdCBwbWR2YWwgPSAqcG1kO1xcbiA2NTg6XFx0XFxuIDY1OTpcXHRcXHRpZiAodW5saWtlbHkoIXBtZF9wcmVzZW50KHBtZHZhbCkpKSB7XFxuIDY2MDpcXHRcXHRcXHRpZiAocG1kX2lzX21pZ3JhdGlvbl9lbnRyeShwbWR2YWwpKVxcbiA2NjE6XFx0XFx0XFx0XFx0cXAtXFx1MDAzZW5yX2ZhaWxlZCsrO1xcbiA2NjI6XFx0XFx0XFx0cmV0dXJuO1xcbiA2NjM6XFx0XFx0fVxcbiA2NjQ6XFx0XFx0Zm9saW8gPSBwbWRfZm9saW8ocG1kdmFsKTtcXG4gNjY1OlxcdFxcdGlmIChpc19odWdlX3plcm9fZm9saW8oZm9saW8pKSB7XFxuIDY2NjpcXHRcXHRcXHR3YWxrLVxcdTAwM2VhY3Rpb24gPSBBQ1RJT05fQ09OVElOVUU7XFxuIDY2NzpcXHRcXHRcXHRyZXR1cm47XFxuIDY2ODpcXHRcXHR9XFxuIDY2OTpcXHRcXHRpZiAoIXF1ZXVlX2ZvbGlvX3JlcXVpcmVkKGZvbGlvLCBxcCkpXFxuIDY3MDpcXHRcXHRcXHRyZXR1cm47XFxuIDY3MTpcXHRcXHRpZiAoIShxcC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiAoTVBPTF9NRl9NT1ZFIHwgTVBPTF9NRl9NT1ZFX0FMTCkpIHx8XFxuIDY3MjpcXHRcXHQgICAgIXZtYV9taWdyYXRhYmxlKHdhbGstXFx1MDAzZXZtYSkgfHxcXG4gNjczOlxcdFxcdCAgICAhbWlncmF0ZV9mb2xpb19hZGQoZm9saW8sIHFwLVxcdTAwM2VwYWdlbGlzdCwgcXAtXFx1MDAzZWZsYWdzKSlcXG4gNjc0OlxcdFxcdFxcdHFwLVxcdTAwM2Vucl9mYWlsZWQrKztcXG4gNjc1OlxcdH1cXG4gNjc2OlxcdFxcbiA2Nzc6XFx0LypcXG4gNjc4OlxcdCAqIFNjYW4gdGhyb3VnaCBmb2xpb3MsIGNoZWNraW5nIGlmIHRoZXkgc2F0aXNmeSB0aGUgcmVxdWlyZWQgY29uZGl0aW9ucyxcXG4gNjc5OlxcdCAqIG1vdmluZyB0aGVtIGZyb20gTFJVIHRvIGxvY2FsIHBhZ2VsaXN0IGZvciBtaWdyYXRpb24gaWYgdGhleSBkbyAob3Igbm90KS5cXG4gNjgwOlxcdCAqXFxuIDY4MTpcXHQgKiBxdWV1ZV9mb2xpb3NfcHRlX3JhbmdlKCkgaGFzIHR3byBwb3NzaWJsZSByZXR1cm4gdmFsdWVzOlxcbiA2ODI6XFx0ICogMCAtIGNvbnRpbnVlIHdhbGtpbmcgdG8gc2NhbiBmb3IgbW9yZSwgZXZlbiBpZiBhbiBleGlzdGluZyBmb2xpbyBvbiB0aGVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMDM6MTM6MDguNTI0MzA2MTAyWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExNzU2NDUyMTAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUE1EIENoZWNrIGluIGBxdWV1ZV9mb2xpb3NfcG1kYCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhpcyBjaGFuZ2UgaW4gYHF1ZXVlX2ZvbGlvc19wbWRgLiBUaGUgY29yZSBvZiBpdCBzZWVtcyB0byBiZSBhIGNvbmRpdGlvbmFsIHJlLWFycmFuZ2VtZW50LiBQcmV2aW91c2x5LCB0aGUgY29kZSBjaGVja2VkIGlmIGEgUE1EIGVudHJ5IHdhcyBhIG1pZ3JhdGlvbiBlbnRyeS4gSWYgaXQgKndhc24ndCogYSBtaWdyYXRpb24gZW50cnksIGl0IHdvdWxkIGJsaW5kbHkgYXR0ZW1wdCB0byByZXRyaWV2ZSB0aGUgZm9saW8gdXNpbmcgYHBtZF9mb2xpbygqcG1kKWAuIE5vdywgaXQncyBjaGVja2luZyBgIXBtZF9wcmVzZW50KHBtZHZhbClgIGZpcnN0LiBJZiB0aGUgUE1EIGlzbid0ICpwcmVzZW50KiAobWVhbmluZywgZm9yIGluc3RhbmNlLCBpdCdzIGEgZGV2aWNlIHByaXZhdGUgZW50cnkgb3Igc29tZSBvdGhlciBhYnNlbnQgZW50cnkpLCBpdCBpbW1lZGlhdGVseSBleGl0cyB0aGUgZnVuY3Rpb24uIFRoaXMgaXMgYSBjcnVjaWFsIGltcHJvdmVtZW50IGZvciBzdGFiaWxpdHkuXG5cblRoZSBvbGQgYmVoYXZpb3Igd2FzIHZ1bG5lcmFibGUsIHNwZWNpZmljYWxseSB3aGVuIHRoZSBQTUQgd2Fzbid0IHByZXNlbnQsIGxlYWRpbmcgdG8gYHBtZF9mb2xpb2AgcG90ZW50aWFsbHkgY3Jhc2hpbmcgb3IgcmV0dXJuaW5nIGdhcmJhZ2UgZGF0YSwgb3IgYXR0ZW1wdGluZyB0byBkZXJlZmVyZW5jZSBhbiBpbnZhbGlkIHBvaW50ZXIuIFRoaXMgbmV3IGNoZWNrIGVmZmVjdGl2ZWx5IGFjdHMgYXMgYSBzYWZldHkgbmV0LCBhdm9pZGluZyB0aG9zZSBpc3N1ZXMuIFRoZSBjaGFuZ2UgcHJldmVudHMgYXR0ZW1wdHMgdG8gdXNlIGFuIGludmFsaWQgUE1EIHZhbHVlLlxuXG5XYWl0LCBsb29raW5nIGF0IGl0LCBpdCBhcHBlYXJzIGBwbWRfdHJhbnNfaHVnZV9sb2NrYCBvbmx5IHJldHVybnMgYSBsb2NrIGlmIHRoZSBQTUQgaXMgYSB0cmFucyBodWdlIFBNRCBvciBhIGRldm1hcCBQTUQuIEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZSBjaGVjayB0aGF0IGFzc3VtcHRpb24gYW5kIHZlcmlmeSB0aGUgYmVoYXZpb3Igb2YgdGhhdCBmdW5jdGlvbiBhcyB3ZWxsLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NzkxLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjg0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMDM6MTM6MjAuMjgwNzYxMDY1WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODQ4NzA2NTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicG1kX3RyYW5zX2h1Z2VfbG9ja1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vdmFkZHIuYz0yNjc9c3RhdGljIGludCBkYW1vbl9ta29sZF9wbWRfZW50cnkocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0vZGFtb24vdmFkZHIuYy0yNzItXFxubW0vZGFtb24vdmFkZHIuYzoyNzM6XFx0cHRsID0gcG1kX3RyYW5zX2h1Z2VfbG9jayhwbWQsIHdhbGstXFx1MDAzZXZtYSk7XFxubW0vZGFtb24vdmFkZHIuYy0yNzQtXFx0aWYgKHB0bCkge1xcbi0tXFxubW0vZGFtb24vdmFkZHIuYz0zOTA9c3RhdGljIGludCBkYW1vbl95b3VuZ19wbWRfZW50cnkocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0vZGFtb24vdmFkZHIuYy0zOTktI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbm1tL2RhbW9uL3ZhZGRyLmM6NDAwOlxcdHB0bCA9IHBtZF90cmFuc19odWdlX2xvY2socG1kLCB3YWxrLVxcdTAwM2V2bWEpO1xcbm1tL2RhbW9uL3ZhZGRyLmMtNDAxLVxcdGlmIChwdGwpIHtcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmM9NjU0PXN0YXRpYyBpbnQgZGFtb3NfdmFfbWlncmF0ZV9wbWRfZW50cnkocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0vZGFtb24vdmFkZHIuYy02NjYtI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbm1tL2RhbW9uL3ZhZGRyLmM6NjY3OlxcdHB0bCA9IHBtZF90cmFuc19odWdlX2xvY2socG1kLCB3YWxrLVxcdTAwM2V2bWEpO1xcbm1tL2RhbW9uL3ZhZGRyLmMtNjY4LVxcdGlmIChwdGwpIHtcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmM9ODE0PXN0YXRpYyBpbnQgZGFtb3NfdmFfc3RhdF9wbWRfZW50cnkocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0vZGFtb24vdmFkZHIuYy04MjYtI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbm1tL2RhbW9uL3ZhZGRyLmM6ODI3OlxcdHB0bCA9IHBtZF90cmFuc19odWdlX2xvY2socG1kLCB2bWEpO1xcbm1tL2RhbW9uL3ZhZGRyLmMtODI4LVxcdGlmIChwdGwpIHtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9MjI4MD1ib29sIG1hZHZpc2VfZnJlZV9odWdlX3BtZChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMjI5MC1cXG5tbS9odWdlX21lbW9yeS5jOjIyOTE6XFx0cHRsID0gcG1kX3RyYW5zX2h1Z2VfbG9jayhwbWQsIHZtYSk7XFxubW0vaHVnZV9tZW1vcnkuYy0yMjkyLVxcdGlmICghcHRsKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0yNDI2PWJvb2wgemFwX2h1Z2VfcG1kKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0yNDM3LVxcbm1tL2h1Z2VfbWVtb3J5LmM6MjQzODpcXHRwdGwgPSBfX3BtZF90cmFuc19odWdlX2xvY2socG1kLCB2bWEpO1xcbm1tL2h1Z2VfbWVtb3J5LmMtMjQzOS1cXHRpZiAoIXB0bClcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9MjUwNT1ib29sIG1vdmVfaHVnZV9wbWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgb2xkX2FkZHIsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTI1MjYtXFx0ICovXFxubW0vaHVnZV9tZW1vcnkuYzoyNTI3OlxcdG9sZF9wdGwgPSBfX3BtZF90cmFuc19odWdlX2xvY2sob2xkX3BtZCwgdm1hKTtcXG5tbS9odWdlX21lbW9yeS5jLTI1MjgtXFx0aWYgKG9sZF9wdGwpIHtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9MjYwMj1pbnQgY2hhbmdlX2h1Z2VfcG1kKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0yNjE4LVxcbm1tL2h1Z2VfbWVtb3J5LmM6MjYxOTpcXHRwdGwgPSBfX3BtZF90cmFuc19odWdlX2xvY2socG1kLCB2bWEpO1xcbm1tL2h1Z2VfbWVtb3J5LmMtMjYyMC1cXHRpZiAoIXB0bClcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9Mjc1MD1pbnQgbW92ZV9wYWdlc19odWdlX3BtZChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKmRzdF9wbWQsIHBtZF90ICpzcmNfcG1kLCBwbWRfdCBkc3RfcG1kdmFsLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0yODY4LSAqL1xcbm1tL2h1Z2VfbWVtb3J5LmM6Mjg2OTpzcGlubG9ja190ICpfX3BtZF90cmFuc19odWdlX2xvY2socG1kX3QgKnBtZCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxubW0vaHVnZV9tZW1vcnkuYy0yODcwLXtcXG4tLVxcbm1tL21hZHZpc2UuYz0zNTM9c3RhdGljIGludCBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2UocG1kX3QgKnBtZCxcXG4tLVxcbm1tL21hZHZpc2UuYy0zODEtXFx0XFx0dGxiX2NoYW5nZV9wYWdlX3NpemUodGxiLCBIUEFHRV9QTURfU0laRSk7XFxubW0vbWFkdmlzZS5jOjM4MjpcXHRcXHRwdGwgPSBwbWRfdHJhbnNfaHVnZV9sb2NrKHBtZCwgdm1hKTtcXG5tbS9tYWR2aXNlLmMtMzgzLVxcdFxcdGlmICghcHRsKVxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYz03NDI9c3RhdGljIGludCBod3BvaXNvbl9wdGVfcmFuZ2UocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtNzQ5LVxcbm1tL21lbW9yeS1mYWlsdXJlLmM6NzUwOlxcdHB0bCA9IHBtZF90cmFuc19odWdlX2xvY2socG1kcCwgd2Fsay1cXHUwMDNldm1hKTtcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTc1MS1cXHRpZiAocHRsKSB7XFxuLS1cXG5tbS9tZW1wb2xpY3kuYz02ODc9c3RhdGljIGludCBxdWV1ZV9mb2xpb3NfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbm1tL21lbXBvbGljeS5jLTY5OC1cXG5tbS9tZW1wb2xpY3kuYzo2OTk6XFx0cHRsID0gcG1kX3RyYW5zX2h1Z2VfbG9jayhwbWQsIHZtYSk7XFxubW0vbWVtcG9saWN5LmMtNzAwLVxcdGlmIChwdGwpIHtcXG4tLVxcbm1tL21pbmNvcmUuYz0xNjM9c3RhdGljIGludCBtaW5jb3JlX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbi0tXFxubW0vbWluY29yZS5jLTE3Mi1cXG5tbS9taW5jb3JlLmM6MTczOlxcdHB0bCA9IHBtZF90cmFuc19odWdlX2xvY2socG1kLCB2bWEpO1xcbm1tL21pbmNvcmUuYy0xNzQtXFx0aWYgKHB0bCkge1xcbi0tXFxubW0vbWxvY2suYz0zNTA9c3RhdGljIGludCBtbG9ja19wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0vbWxvY2suYy0zNjEtXFxubW0vbWxvY2suYzozNjI6XFx0cHRsID0gcG1kX3RyYW5zX2h1Z2VfbG9jayhwbWQsIHZtYSk7XFxubW0vbWxvY2suYy0zNjMtXFx0aWYgKHB0bCkge1xcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYz0xOTM0PXN0YXRpYyBzc2l6ZV90IG1vdmVfcGFnZXMoc3RydWN0IHVzZXJmYXVsdGZkX2N0eCAqY3R4LCB1bnNpZ25lZCBsb25nIGRzdF9zdGFydCxcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmMtMjAyMi1cXG5tbS91c2VyZmF1bHRmZC5jOjIwMjM6XFx0XFx0cHRsID0gcG1kX3RyYW5zX2h1Z2VfbG9jayhzcmNfcG1kLCBzcmNfdm1hKTtcXG5tbS91c2VyZmF1bHRmZC5jLTIwMjQtXFx0XFx0aWYgKHB0bCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQwMzoxMzoyMC44NjU2MzkwNzhaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE4NTY3NDg0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIFRIUCBMb2NrKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoZSBsb2NrIGFzc29jaWF0ZWQgd2l0aCBUcmFuc3BhcmVudCBIdWdlIFBhZ2VzIChUSFApIGFuZCBuZWVkIHRvIHBpbnBvaW50IHdoZXJlIGl0J3MgZGVmaW5lZCBhbmQgaGFuZGxlZC4gTXkgZmlyc3QgbW92ZSBpcyB0byBsb29rIGF0IGBfX3BtZF90cmFuc19odWdlX2xvY2tgLiBUaGF0IGZ1bmN0aW9uIG5hbWUgZmVlbHMgZmFtaWxpYXIgYXMgYSBwb3RlbnRpYWwgY2FuZGlkYXRlIGZvciB0aGUgY29yZSBsb2NrLCBzbyBJJ2xsIHN0YXJ0IHdpdGggdGhlIGltcGxlbWVudGF0aW9uIGluIGBtbS9odWdlX21lbW9yeS5jYC4gQWx0ZXJuYXRpdmVseSwgaXQgY291bGQgYmUgYSBzaW1wbGVyIGRlY2xhcmF0aW9uIGluIGFuIGluY2x1ZGUgZmlsZS4gSSB3aWxsIGFsc28gY2hlY2sgYHBtZF90cmFuc19odWdlX2xvY2tgIGluIGBpbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaGAgYXMgYSBsaWtlbHkgc291cmNlLiBMZXQncyBzZWUgd2hhdCB0aGF0IHJldmVhbHMgYWJvdXQgdGhlIGNyaXRpY2FsIHNlY3Rpb24gaXQgcHJvdGVjdHMgYW5kIHRoZSBvdmVyYWxsIFRIUCBtYW5hZ2VtZW50IHN0cmF0ZWd5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MTQwLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMDM6MTM6MjQuMDUxMzE2NDg3WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTY3ODQ5MjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicG1kX3RyYW5zX2h1Z2VfbG9ja1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaD00OTY9dm9pZCB2bWFfYWRqdXN0X3RyYW5zX2h1Z2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNDk3LVxcdFxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgZW5kLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKm5leHQpO1xcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjQ5ODpzcGlubG9ja190ICpfX3BtZF90cmFuc19odWdlX2xvY2socG1kX3QgKnBtZCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpO1xcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTQ5OS1zcGlubG9ja190ICpfX3B1ZF90cmFuc19odWdlX2xvY2socHVkX3QgKnB1ZCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNTAxLS8qIG1tYXBfbG9jayBtdXN0IGJlIGhlbGQgb24gZW50cnkgKi9cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDo1MDI6c3RhdGljIGlubGluZSBzcGlubG9ja190ICpwbWRfdHJhbnNfaHVnZV9sb2NrKHBtZF90ICpwbWQsXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNTAzLVxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNTA1LVxcdGlmIChwbWRfaXNfaHVnZSgqcG1kKSlcXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDo1MDY6XFx0XFx0cmV0dXJuIF9fcG1kX3RyYW5zX2h1Z2VfbG9jayhwbWQsIHZtYSk7XFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNTA3LVxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg9NzA5PXN0YXRpYyBpbmxpbmUgdm9pZCB2bWFfYWRqdXN0X3RyYW5zX2h1Z2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC03MTQtfVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjcxNTpzdGF0aWMgaW5saW5lIHNwaW5sb2NrX3QgKnBtZF90cmFuc19odWdlX2xvY2socG1kX3QgKnBtZCxcXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC03MTYtXFx0XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDAzOjEzOjI0LjMwODExMTQwMloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMjM3MTQ3MDYwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUE1EIFN0YXRlcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYHBtZF9pc19odWdlKCpwbWQpYCBmdW5jdGlvbiBjYWxsLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJJcyB0aGlzIGEgaHVnZSBQTUQ/XCIgVGhlIG5leHQgdGhpbmcgSSdtIGNvbnNpZGVyaW5nIGlzLCBpZiBpdCdzIGh1Z2UsIGlzIHRoZXJlIGFueSBwb3NzaWJpbGl0eSB0aGF0IGl0IGNvdWxkIGFsc28gYmUgYSBtaWdyYXRpb24gZW50cnk/IEkga25vdyB0aGVyZSdzIGEgZGlzdGluY3Rpb24gaGVyZS5cblxuWWVzLCB0aGVyZSdzIGBwbWRfaXNfbWlncmF0aW9uX2VudHJ5YCwgc28gdGhhdCB0YWtlcyBjYXJlIG9mIHRoYXQgcG9zc2liaWxpdHkuIEFuZCBpZiBpdCBfaXNfIGEgbWlncmF0aW9uIGVudHJ5LCBgcG1kX3ByZXNlbnRgIHdpbGwgZGVmaW5pdGVseSByZXR1cm4gZmFsc2UuIFRoYXQgbWFrZXMgc2Vuc2UsIGJ1dCB0aGVuIGl0IGhpdHMgbWU6IEhvbGQgb24gYSBzZWNvbmQsIGlmIGBwbWRfcHJlc2VudGAgaXMgZmFsc2UsIGlzbid0IGl0IHN0aWxsIHBvc3NpYmxlIGZvciBgcG1kX2lzX2h1Z2VgIHRvIHJldHVybiB0cnVlPyBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQuIEknbSBnb2luZyB0byBkb3VibGUgY2hlY2sgYHBtZF9pc19odWdlYCBhZ2FpbiB0byBlbnN1cmUgSSB1bmRlcnN0YW5kIHRoZSBsb2dpYy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTg2MSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQwMzoxMzo0Ni42Nzk1ODU1MThaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5NjU5OTUyMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwbWRfaXNfaHVnZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaD00MzE9dm9pZCBfX3NwbGl0X2h1Z2VfcG1kKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBwbWRfdCAqcG1kLFxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNDM0LS8qKlxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjQzNTogKiBwbWRfaXNfaHVnZSgpIC0gSXMgdGhpcyBQTUQgZWl0aGVyIGEgaHVnZSBQTUQgZW50cnkgb3IgYSBzb2Z0d2FyZSBsZWFmIGVudHJ5P1xcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTQzNi0gKiBAcG1kOiBUaGUgUE1EIHRvIGNoZWNrLlxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNDQ0LSAqL1xcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjQ0NTpzdGF0aWMgaW5saW5lIGJvb2wgcG1kX2lzX2h1Z2UocG1kX3QgcG1kKVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTQ0Ni17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC00NjItXFx0XFx0cG1kX3QgKl9fX19wbWQgPSAoX19wbWQpO1xcdFxcdFxcdFxcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDo0NjM6XFx0XFx0aWYgKHBtZF9pc19odWdlKCpfX19fcG1kKSlcXHRcXHRcXHRcXHRcXFxcXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNDY0LVxcdFxcdFxcdF9fc3BsaXRfaHVnZV9wbWQoX192bWEsIF9fcG1kLCBfX2FkZHJlc3MsXFx0XFxcXFxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg9NTAyPXN0YXRpYyBpbmxpbmUgc3BpbmxvY2tfdCAqcG1kX3RyYW5zX2h1Z2VfbG9jayhwbWRfdCAqcG1kLFxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNTA0LXtcXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDo1MDU6XFx0aWYgKHBtZF9pc19odWdlKCpwbWQpKVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTUwNi1cXHRcXHRyZXR1cm4gX19wbWRfdHJhbnNfaHVnZV9sb2NrKHBtZCwgdm1hKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oPTc4ND1zdGF0aWMgaW5saW5lIHN0cnVjdCBmb2xpbyAqZ2V0X3BlcnNpc3RlbnRfaHVnZV96ZXJvX2ZvbGlvKHZvaWQpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC03ODgtXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6Nzg5OnN0YXRpYyBpbmxpbmUgYm9vbCBwbWRfaXNfaHVnZShwbWRfdCBwbWQpXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNzkwLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMDM6MTM6NDcuMjc2MTkxNjc5WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzNzU5NDUwNzg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB3aGF0IEknbSBsb29raW5nIGF0OlxuXG4qKkRlY29uc3RydWN0aW5nIGBwbWRfaXNfaHVnZWAqKlxuXG5BbHJpZ2h0LCBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgYHBtZF9pc19odWdlYCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGxvZ2ljIGFuZCBob3cgaXQgZGV0ZXJtaW5lcyBpZiBhIHBhcnRpY3VsYXIgcGFnZSBtYXAgbGV2ZWwgZGlyZWN0b3J5IChQTUQpIGVudHJ5IHJlcHJlc2VudHMgYSBodWdlIHBhZ2UuIEknbSBnb2luZyB0byBxdWlja2x5IHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQg4oCTIFBNRHMsIHBhZ2UgdGFibGVzLCB0aGUgaW1wbGljYXRpb25zIGZvciBtZW1vcnkgbWFuYWdlbWVudC4uLiB3aGF0IGZsYWdzIGFyZSB3ZSBjaGVja2luZz8gQXJlIHdlIGxvb2tpbmcgYXQgc3BlY2lmaWMgYml0cyB3aXRoaW4gdGhlIFBNRCBpdHNlbGYsIG9yIGFyZSB3ZSByZWZlcmVuY2luZyBzb21lIG90aGVyIGFzc29jaWF0ZWQgbWV0YWRhdGE/IEkgZXhwZWN0IHRvIHNlZSBiaXR3aXNlIG9wZXJhdGlvbnMsIGxpa2VseSBpbnZvbHZpbmcgbWFza3MgYW5kIHNoaWZ0cywgdG8gZXh0cmFjdCBhbmQgZXZhbHVhdGUgdGhlIHJlbGV2YW50IGZsYWdzLiBJIGhvcGUgdGhlIGltcGxlbWVudGF0aW9uIGlzIHJlYXNvbmFibHkgb3B0aW1pemVkIGZvciBwZXJmb3JtYW5jZTsgdGhpcyBpcyBhIGNyaXRpY2FsIGZ1bmN0aW9uIGZvciBwYWdlIHRhYmxlIGxvb2t1cHMsIHNvIGl0IG5lZWRzIHRvIGJlIGZhc3QuIEkgd2FudCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvYnZpb3VzIGdvdGNoYXMgb3IgcG90ZW50aWFsIGFyZWFzIGZvciBpbXByb3ZlbWVudC4gTGV0J3Mgc2VlIGhvdyB0aGV5IGhhbmRsZSBkaWZmZXJlbnQgYXJjaGl0ZWN0dXJlcywgdG9vIOKAkyBJIGJldCB0aGVyZSdzIHNvbWUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gb3IgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGNvZGUgaW4gdGhlcmUuIEknbGwgbmVlZCB0byByZW1lbWJlciB0aGUgYXJjaGl0ZWN0dXJhbCBkaWZmZXJlbmNlcyBiZXR3ZWVuIFBNRCBmb3JtYXRzIGFuZCBob3cgdGhlc2UgbWlnaHQgYmUgcmVmbGVjdGVkIGluIHRoZSBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDczMSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDAzOjE0OjAxLjAzNTY0NTQ5NloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTU1ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9odWdlX21tLmhcIixcbiAgXCJGaXJzdExpbmVcIjogNDQ1LFxuICBcIkxpbmVDb3VudFwiOiAxNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDQ1OlxcdHN0YXRpYyBpbmxpbmUgYm9vbCBwbWRfaXNfaHVnZShwbWRfdCBwbWQpXFxuIDQ0NjpcXHR7XFxuIDQ0NzpcXHRcXHRpZiAocG1kX3ByZXNlbnQocG1kKSkge1xcbiA0NDg6XFx0XFx0XFx0cmV0dXJuIHBtZF90cmFuc19odWdlKHBtZCk7XFxuIDQ0OTpcXHRcXHR9IGVsc2UgaWYgKCFwbWRfbm9uZShwbWQpKSB7XFxuIDQ1MDpcXHRcXHRcXHQvKlxcbiA0NTE6XFx0XFx0XFx0ICogTm9uLXByZXNlbnQgUE1EcyBtdXN0IGJlIHZhbGlkIGh1Z2Ugbm9uLXByZXNlbnQgZW50cmllcy4gV2VcXG4gNDUyOlxcdFxcdFxcdCAqIGNhbm5vdCBhc3NlcnQgdGhhdCBoZXJlIGR1ZSB0byBoZWFkZXIgZGVwZW5kZW5jeSBpc3N1ZXMuXFxuIDQ1MzpcXHRcXHRcXHQgKi9cXG4gNDU0OlxcdFxcdFxcdHJldHVybiB0cnVlO1xcbiA0NTU6XFx0XFx0fVxcbiA0NTY6XFx0XFxuIDQ1NzpcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDQ1ODpcXHR9XFxuIDQ1OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMDM6MTQ6MDEuMDM1NzYzNjc2WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyMjM5ODMwMjI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEJ1ZyBGaXg6IFByZXZlbnRpbmcgQ3Jhc2hlcyBpbiBgcXVldWVfZm9saW9zX3BtZGAqKlxuXG5Pa2F5LCBzbyBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdW5kZXJzdGFuZGluZyBvZiBgcG1kX2lzX2h1Z2VgIGlzIGtleSBoZXJlLiBJdCByZXR1cm5zIHRydWUgd2hlbiBhIFBhZ2UgTWFwIERpcmVjdG9yeSAoUE1EKSBpc24ndCBwcmVzZW50LCAqYW5kKiBpdCdzIG5vdCBhIFwibm9uZVwiIGVudHJ5LiBUaGlzIHNlZW1zIHRvIGNvdmVyIHNpdHVhdGlvbnMgbGlrZSBtaWdyYXRpb24gZW50cmllcyBhbmQsIG1vcmUgaW1wb3J0YW50bHkgaW4gdGhpcyBjYXNlLCBkZXZpY2UgcHJpdmF0ZSBlbnRyaWVzLiBJdCBhcHBlYXJzIHRoZSBjb2RlIHdhcyBwcmV2aW91c2x5IGdldHRpbmcgdHJpcHBlZCB1cCBvbiB0aGVzZSBsYXR0ZXIgY2FzZXMgd2hlbiBjYWxsaW5nIGBxdWV1ZV9mb2xpb3NfcG1kYC5cblxuSSBzZWUgdGhlIGZpeC4gVGhlIGZ1bmN0aW9uIGBxdWV1ZV9mb2xpb3NfcG1kYCB3YXMgb3JpZ2luYWxseSBjYWxsaW5nIGBwbWRfZm9saW9gIGRpcmVjdGx5IG9uIHRoZXNlIG5vbi1wcmVzZW50IFBNRHMuIElmIGl0IHdhcyBhIGRldmljZSBwcml2YXRlIGVudHJ5LCB0aGlzIGNvdWxkIGxlYWQgdG8gY3Jhc2hlcyBvciB1bmRlZmluZWQgYmVoYXZpb3IsIGJlY2F1c2UgYHBtZF9mb2xpb2AgaXNuJ3QgZXhwZWN0aW5nIHRvIGhhbmRsZSB0aGF0IGtpbmQgb2YgZGF0YS4gVGhlIG9yaWdpbmFsIGNoZWNrIG9ubHkgbG9va2VkIGZvciBtaWdyYXRpb24gZW50cmllcywgYnV0IG5vdCBvdGhlciBub24tcHJlc2VudCBlbnRyaWVzLlxuXG5UaGUgZml4IG5vdyBhZGRzIGEgY3J1Y2lhbCBgIXBtZF9wcmVzZW50YCBjaGVjayAqYmVmb3JlKiBjYWxsaW5nIGBwbWRfZm9saW9gLiBUaGlzIGFkZGl0aW9uIGNvcnJlY3RseSBoYW5kbGVzIGRldmljZSBwcml2YXRlIGVudHJpZXMuIElmIHRoZSBQTUQgaXNuJ3QgcHJlc2VudCwgdGhlIGNvZGUgd2lsbCBjaGVjayBpZiBpdCAqaXMqIGEgbWlncmF0aW9uIGVudHJ5LiBPdGhlcndpc2UsIGl0IGV4aXRzIGVhcmx5LiBUaGlzIGVmZmVjdGl2ZWx5IHByZXZlbnRzIHRoZSBwb3RlbnRpYWwgY3Jhc2ggb3IgZ2FyYmFnZSByZXR1cm4uXG5cblRoZSBpbXBvcnRhbnQgcXVlc3Rpb24gbm93IGlzIGlmIHRoaXMgaXMgd29ydGggZnV6emluZy4gSSdkIHNheSwgeWVzLCBhYnNvbHV0ZWx5LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBidWcgZml4LiBgcXVldWVfZm9saW9zX3BtZGAgaXMgdXNlZCBieSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGZ1bmN0aW9uYWxpdHkgbGlrZSBgbWJpbmRgLCBgc2V0X21lbXBvbGljeWAsIGFuZCBgbWlncmF0ZV9wYWdlc2AuIFRoZSByZWxldmFudCBjb25maWcgb3B0aW9ucyBhcmUgYENPTkZJR19OVU1BYCBhbmQgYENPTkZJR19ERVZJQ0VfUFJJVkFURWAuIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBgQ09ORklHX0RFVklDRV9QUklWQVRFYCBpcyBzZXQgdG8gZW5zdXJlIHRoaXMgY29kZSBpcyBldmVuIGFjdGl2ZS4gXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMjQ1LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDY3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMDM6MTQ6MTMuMjc1NTk3MjgyWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMDA1NzYxNDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX0RFVklDRV9QUklWQVRFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1yZW1hcC5jPTI2Nj12b2lkICptZW1yZW1hcF9wYWdlcyhzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwLCBpbnQgbmlkKVxcbi0tXFxubW0vbWVtcmVtYXAuYy0yODMtXFx0Y2FzZSBNRU1PUllfREVWSUNFX1BSSVZBVEU6XFxubW0vbWVtcmVtYXAuYzoyODQ6XFx0XFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19ERVZJQ0VfUFJJVkFURSkpIHtcXG5tbS9tZW1yZW1hcC5jLTI4NS1cXHRcXHRcXHRXQVJOKDEsIFxcXCJEZXZpY2UgcHJpdmF0ZSBtZW1vcnkgbm90IHN1cHBvcnRlZFxcXFxuXFxcIik7XFxuLS1cXG5tbS9ybWFwLmM9Mjc0MT12b2lkIHRyeV90b19taWdyYXRlKHN0cnVjdCBmb2xpbyAqZm9saW8sIGVudW0gdHR1X2ZsYWdzIGZsYWdzKVxcbi0tXFxubW0vcm1hcC5jLTI3NzgtXFxubW0vcm1hcC5jOjI3Nzk6I2lmZGVmIENPTkZJR19ERVZJQ0VfUFJJVkFURVxcbm1tL3JtYXAuYy0yNzgwLS8qKlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQwMzoxNDoxMy41NzYxODAwNTJaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY5NDAyOTY1NzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIHRoZSBNZW1vcnkgTWFuYWdlbWVudCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSd2ZSBjb25maXJtZWQgdGhhdCBgQ09ORklHX0RFVklDRV9QUklWQVRFYCBpcyBpbmRlZWQgZGVmaW5lZC4gQW5kLCBJIHNlZSwgd2UgYWxzbyBuZWVkIHRvIGhhdmUgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgZW5hYmxlZC4gVGhpcyBtYWtlcyBwZXJmZWN0IHNlbnNlOyBgcXVldWVfZm9saW9zX3BtZGAgaXMgc3BlY2lmaWNhbGx5IHRpZWQgdG8gaHVnZSBQTURzLCBzbyB0aGF0IGRlcGVuZGVuY3kgaXMgY2xlYXIuIE5vdywgbGV0J3MganVzdCBxdWlja2x5IGNoZWNrIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIGBwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnlgIGZ1bmN0aW9uLCBqdXN0IHRvIGVuc3VyZSBvdXIgYXNzdW1wdGlvbnMgYXJlIGNvcnJlY3QsIGFuZCBhbGwgZGVwZW5kZW5jaWVzIGFyZSB3aGVyZSB0aGV5IHNob3VsZCBiZS4gSSB3YW50IHRvIGhhdmUgYSBob2xpc3RpYyB2aWV3IGJlZm9yZSBJIG1vdmUgZm9yd2FyZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIzMjEsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQwMzoxNDo1MC41MTY0Nzk1OTZaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgxOTYwNzk0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9sZWFmb3BzLmg9NTc0PXN0YXRpYyBpbmxpbmUgYm9vbCBwdGVfaXNfdWZmZF9tYXJrZXIocHRlX3QgcHRlKVxcbi0tXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNTkyLS8qKlxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjU5MzogKiBwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnkoKSAtIENoZWNrIGlmIFBNRCBjb250YWlucyBhIGRldmljZSBwcml2YXRlIHN3YXBcXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC01OTQtICogZW50cnkuXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC02MDMtICovXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6NjA0OnN0YXRpYyBpbmxpbmUgYm9vbCBwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnkocG1kX3QgcG1kKVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTYwNS17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC02MTAtXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6NjExOnN0YXRpYyBpbmxpbmUgYm9vbCBwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnkocG1kX3QgcG1kKVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTYxMi17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDAzOjE0OjUxLjMzNjA5Mjk3NloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNDkyNDMxNTA4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyBpZiB0aGV5J3JlIG15IG93bjpcblxuKipBbmFseXppbmcgdGhlIGBwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnlgIERlZmluaXRpb24qKlxuXG5BbHJpZ2h0LCBzbyB0aGUgaW5pdGlhbCB0aG91Z2h0IGlzIGNsZWFybHkgZm9jdXNlZCBvbiBhIHNwZWNpZmljIGZ1bmN0aW9uIGRlZmluaXRpb246IGBwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnlgLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gZGlzc2VjdCB0aGlzLiBXZSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHB1cnBvc2UgYW5kIGhvdyBpdCBmdW5jdGlvbnMgd2l0aGluIHRoZSBsYXJnZXIgY29udGV4dCBvZiB0aGUgc3lzdGVtLiBJJ20gYXNzdW1pbmcsIGdpdmVuIHRoZSBuYW1pbmcgY29udmVudGlvbiwgdGhpcyBoYXMgc29tZXRoaW5nIHRvIGRvIHdpdGggdGhlIFBhZ2UgTWlkZGxlIERpcmVjdG9yeSwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gd2hldGhlciBhbiBlbnRyeSBpcyBjb25zaWRlcmVkIFwiZGV2aWNlIHByaXZhdGVcIi4gVGhlIHRlcm0gXCJkZXZpY2UgcHJpdmF0ZVwiIGlzIGtleSBoZXJlLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoYXQgZW50YWlscyBpbiB0aGlzIGNvbnRleHQuIElzIGl0IGEgZmxhZz8gQSBzcGVjaWZpYyB2YWx1ZT8gQSBjb21iaW5hdGlvbiBvZiBiaXRzPyBJcyBpdCByZWxhdGVkIHRvIERNQSwgTU1JTywgb3Igc29tZSBvdGhlciBhc3BlY3Qgb2YgZGV2aWNlIGFjY2Vzcz8gSSdsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBmdW5jdGlvbidzIGNvZGUgaXRzZWxmIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaXRzIGltcGxlbWVudGF0aW9uIGFuZCB1c2FnZSB3aXRoaW4gdGhlIG92ZXJhbGwgbWVtb3J5IG1hbmFnZW1lbnQgc2NoZW1lLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjc5NSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDAzOjE1OjA2LjI2MDQxMzAzWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MzE0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL2xpbnV4L2xlYWZvcHMuaFwiLFxuICBcIkZpcnN0TGluZVwiOiA1OTMsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1OTM6XFx0ICogcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KCkgLSBDaGVjayBpZiBQTUQgY29udGFpbnMgYSBkZXZpY2UgcHJpdmF0ZSBzd2FwXFxuIDU5NDpcXHQgKiBlbnRyeS5cXG4gNTk1OlxcdCAqIEBwbWQ6IFRoZSBQTUQgdG8gY2hlY2suXFxuIDU5NjpcXHQgKlxcbiA1OTc6XFx0ICogUmV0dXJucyB0cnVlIGlmIHRoZSBQTUQgY29udGFpbnMgYSBzd2FwIGVudHJ5IHRoYXQgcmVwcmVzZW50cyBhIGRldmljZSBwcml2YXRlXFxuIDU5ODpcXHQgKiBwYWdlIG1hcHBpbmcuIFRoaXMgaXMgdXNlZCBmb3Igem9uZSBkZXZpY2UgcHJpdmF0ZSBwYWdlcyB0aGF0IGhhdmUgYmVlblxcbiA1OTk6XFx0ICogc3dhcHBlZCBvdXQgYnV0IHN0aWxsIG5lZWQgc3BlY2lhbCBoYW5kbGluZyBkdXJpbmcgdmFyaW91cyBtZW1vcnkgbWFuYWdlbWVudFxcbiA2MDA6XFx0ICogb3BlcmF0aW9ucy5cXG4gNjAxOlxcdCAqXFxuIDYwMjpcXHQgKiBSZXR1cm46IHRydWUgaWYgUE1EIGNvbnRhaW5zIGRldmljZSBwcml2YXRlIGVudHJ5LCBmYWxzZSBvdGhlcndpc2VcXG4gNjAzOlxcdCAqL1xcbiA2MDQ6XFx0c3RhdGljIGlubGluZSBib29sIHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeShwbWRfdCBwbWQpXFxuIDYwNTpcXHR7XFxuIDYwNjpcXHRcXHRyZXR1cm4gc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoc29mdGxlYWZfZnJvbV9wbWQocG1kKSk7XFxuIDYwNzpcXHR9XFxuIDYwODpcXHRcXG4gNjA5OlxcdCNlbHNlICAvKiBDT05GSUdfWk9ORV9ERVZJQ0UgXFx1MDAyNlxcdTAwMjYgQ09ORklHX0FSQ0hfSEFTX1BNRF9TT0ZUTEVBVkVTICovXFxuIDYxMDpcXHRcXG4gNjExOlxcdHN0YXRpYyBpbmxpbmUgYm9vbCBwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnkocG1kX3QgcG1kKVxcbiA2MTI6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQwMzoxNTowNi4yNjA1Nzg3M1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTc3MDA0ODczOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBEZXZpY2UgTWVtb3J5IENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCBsb29rcyBsaWtlIHdlJ3JlIGRpdmluZyBpbnRvIG1lbW9yeSBtYW5hZ2VtZW50IGhlcmUuIEZpcnN0IHRob3VnaHQ6IHdlJ3JlIGdvaW5nIHRvIG5lZWQgYENPTkZJR19aT05FX0RFVklDRWAuIFRoYXQncyBhIGdpdmVuIGZvciBhbnkgbW9kZXJuIGRldmljZSBzZXR1cCwgcmlnaHQ/IEJ1dCBob2xkIG9uIGEgc2Vjb25kLi4uIGlzbid0IGBDT05GSUdfREVWSUNFX1BSSVZBVEVgIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbiBmb3IgY29udHJvbGxpbmcgcHJpdmF0ZSBtZW1vcnkgYWxsb2NhdGlvbiBzcGVjaWZpYyB0byBhIGRldmljZT8gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gZ2V0dGluZyB0aGVzZSB0d28gY29uY2VwdHMgc3RyYWlnaHQgaW4gbXkgaGVhZCBiZWNhdXNlIHRoZXkgY2FuIGluZmx1ZW5jZSBlYWNoIG90aGVyLiBCZXR0ZXIgZG91YmxlLWNoZWNrIHRoZSBLY29uZmlnIGRvY3VtZW50YXRpb24gZm9yIGBDT05GSUdfREVWSUNFX1BSSVZBVEVgLiBMZXQncyBjbGFyaWZ5IGl0cyBleGFjdCBmdW5jdGlvbiBhbmQgZGVwZW5kZW5jaWVzIGJlZm9yZSBtb3ZpbmcgYW55IGZ1cnRoZXIuIFRoaXMgaXMgY3JpdGljYWwgZm9yIGdldHRpbmcgdGhpcyByaWdodC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM0MDQsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDAzOjE1OjM4LjAzMDYzMTcwOFoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzU3NzA3MzA1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBERVZJQ0VfUFJJVkFURVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz0xMjYyPWNvbmZpZyBHRVRfRlJFRV9SRUdJT05cXG4tLVxcbm1tL0tjb25maWctMTI2NC1cXG5tbS9LY29uZmlnOjEyNjU6Y29uZmlnIERFVklDRV9QUklWQVRFXFxubW0vS2NvbmZpZy0xMjY2LVxcdGJvb2wgXFxcIlVuYWRkcmVzc2FibGUgZGV2aWNlIG1lbW9yeSAoR1BVIG1lbW9yeSwgLi4uKVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMDM6MTU6MzguMzg4MzQ0OTczWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE1Mzg5Njc2MDk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqQW5hbHl6aW5nIERldmljZSBQcml2YXRlIFBNRCBIYW5kbGluZyBpbiB0aGUgS2VybmVsKipcblxuUmlnaHQsIHNvIHdlJ3JlIGxvb2tpbmcgYXQgZGV2aWNlIHByaXZhdGUgY29uZmlndXJhdGlvbnMg4oCTIHNwZWNpZmljYWxseSwgYERFVklDRV9QUklWQVRFYC4gSSBuZWVkIHRvIHJlbWVtYmVyIHRoYXQgdGhlIGltcG9ydGFudCBjb25maWdzIHJlbGF0ZWQgdG8gdGhpcyBhcmUgYE5VTUFgLCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLCBhbmQgb2YgY291cnNlLCBgREVWSUNFX1BSSVZBVEVgIGl0c2VsZi4gR290IGl0LlxuXG5Ob3csIHRoZSBjb3JlIGZ1bmN0aW9ucyB0aGF0IHNlZW0gcmVsZXZhbnQgYXJlIGBxdWV1ZV9mb2xpb3NfcG1kYCwgYHF1ZXVlX2ZvbGlvc19wdGVfcmFuZ2VgLCBgbWFkdmlzZV9mcmVlX2h1Z2VfcG1kYCwgYW5kIGBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2VgLiBIbW0sIGEgcXVpY2sgc2tpbSBzaG93cyB0aGF0IHRoZSBgbWFkdmlzZV9gIGZ1bmN0aW9ucyBhcmUgdGhyb3dpbmcgdXAgcmVkIGZsYWdzLCB0aGUgb25seSBjaGFuZ2VzIGJlaW5nIGBWTV9CVUdfT05gIHVwZGF0ZXMuIFRoYXQgc3VnZ2VzdHMgYSBidWcgY2hlY2sgcmVsYXRlZCB0byBoYW5kbGluZyB0aGVzZSBwcml2YXRlIFBNRHMuIFRoZXNlIGFyZSBsaW5rZWQuXG5cbkxldCdzIGRpZyBkZWVwZXIuIElzIGBxdWV1ZV9mb2xpb3NfcG1kYCB0aGUgY29yZT8gTGV0IG1lIGNoZWNrIGl0cyBkZWZpbml0aW9uLiBTdGF0aWMuIEhtbSwgbm90IGlkZWFsIGZvciB0cmFjaW5nLCBidXQgc3RpbGwgaW1wb3J0YW50LiBMZXQncyBkbyB0aGUgc2FtZSBmb3IgYHF1ZXVlX2ZvbGlvc19wdGVfcmFuZ2VgIC0gYWxzbyBzdGF0aWMuIE9rYXkuIEl0IHNlZW1zIHRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgd29yayBvZiBkZWFsaW5nIHdpdGggZGV2aWNlIHByaXZhdGUgUE1EcyBpcyBoYXBwZW5pbmcuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBpcyBjYWxsaW5nIGBxdWV1ZV9mb2xpb3NfcHRlX3JhbmdlYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgaGFuZGxlIG9uIHRoZSBjb250cm9sIGZsb3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNzE5LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjA1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDAzOjE1OjUzLjc3ODAyNDE2MVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc0NDA1NTQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInF1ZXVlX2ZvbGlvc19wdGVfcmFuZ2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWVtcG9saWN5LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtcG9saWN5LmM9NjUzPXN0YXRpYyB2b2lkIHF1ZXVlX2ZvbGlvc19wbWQocG1kX3QgKnBtZCwgc3RydWN0IG1tX3dhbGsgKndhbGspXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy02ODAtICpcXG5tbS9tZW1wb2xpY3kuYzo2ODE6ICogcXVldWVfZm9saW9zX3B0ZV9yYW5nZSgpIGhhcyB0d28gcG9zc2libGUgcmV0dXJuIHZhbHVlczpcXG5tbS9tZW1wb2xpY3kuYy02ODItICogMCAtIGNvbnRpbnVlIHdhbGtpbmcgdG8gc2NhbiBmb3IgbW9yZSwgZXZlbiBpZiBhbiBleGlzdGluZyBmb2xpbyBvbiB0aGVcXG4tLVxcbm1tL21lbXBvbGljeS5jLTY4Ni0gKi9cXG5tbS9tZW1wb2xpY3kuYzo2ODc6c3RhdGljIGludCBxdWV1ZV9mb2xpb3NfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG5tbS9tZW1wb2xpY3kuYy02ODgtXFx0XFx0XFx0dW5zaWduZWQgbG9uZyBlbmQsIHN0cnVjdCBtbV93YWxrICp3YWxrKVxcbi0tXFxubW0vbWVtcG9saWN5LmM9OTU0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgcXVldWVfcGFnZXNfd2Fsa19vcHMgPSB7XFxubW0vbWVtcG9saWN5LmMtOTU1LVxcdC5odWdldGxiX2VudHJ5XFx0XFx0PSBxdWV1ZV9mb2xpb3NfaHVnZXRsYixcXG5tbS9tZW1wb2xpY3kuYzo5NTY6XFx0LnBtZF9lbnRyeVxcdFxcdD0gcXVldWVfZm9saW9zX3B0ZV9yYW5nZSxcXG5tbS9tZW1wb2xpY3kuYy05NTctXFx0LnRlc3Rfd2Fsa1xcdFxcdD0gcXVldWVfcGFnZXNfdGVzdF93YWxrLFxcbi0tXFxubW0vbWVtcG9saWN5LmM9OTYxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgcXVldWVfcGFnZXNfbG9ja192bWFfd2Fsa19vcHMgPSB7XFxubW0vbWVtcG9saWN5LmMtOTYyLVxcdC5odWdldGxiX2VudHJ5XFx0XFx0PSBxdWV1ZV9mb2xpb3NfaHVnZXRsYixcXG5tbS9tZW1wb2xpY3kuYzo5NjM6XFx0LnBtZF9lbnRyeVxcdFxcdD0gcXVldWVfZm9saW9zX3B0ZV9yYW5nZSxcXG5tbS9tZW1wb2xpY3kuYy05NjQtXFx0LnRlc3Rfd2Fsa1xcdFxcdD0gcXVldWVfcGFnZXNfdGVzdF93YWxrLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQwMzoxNTo1NC4yNTI0MzUyOTVaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTY4MzEyNDc5NjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipVbmRlcnN0YW5kaW5nIHRoZSBgcXVldWVfcGFnZXNfd2Fsa19vcHNgIFJlbGF0aW9uc2hpcCoqXG5cbkFscmlnaHQsIHNvIEknbSB0aGlua2luZyBhYm91dCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYHF1ZXVlX3BhZ2VzX3dhbGtfb3BzYCBhbmQgYHF1ZXVlX3BhZ2VzX3JhbmdlYC4gVGhlIGNvcmUgb2YgaXQgc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCDigJMgYHF1ZXVlX3BhZ2VzX3dhbGtfb3BzYCBpcyBlc3NlbnRpYWxseSBhIGhlbHBlciBmdW5jdGlvbiwgYSBjb21wb25lbnQgKnVzZWQqIGJ5IHRoZSBoaWdoZXItbGV2ZWwgZnVuY3Rpb24gYHF1ZXVlX3BhZ2VzX3JhbmdlYC4gSSBwaWN0dXJlIGBxdWV1ZV9wYWdlc19yYW5nZWAgYXMgdGhlIGxhcmdlciwgbW9yZSBjb21wbGV4IG9wZXJhdGlvbiwgYW5kIGBxdWV1ZV9wYWdlc193YWxrX29wc2AgYXMgYSB3ZWxsLWRlZmluZWQgc3ViLXJvdXRpbmUgdGhhdCBoYW5kbGVzIGEgc3BlY2lmaWMsIGxpa2VseSBjcnVjaWFsLCBhc3BlY3Qgb2YgdGhhdCBvcGVyYXRpb24uIFRoaXMgc3VnZ2VzdHMgdGhhdCBgcXVldWVfcGFnZXNfcmFuZ2VgIHByb2JhYmx5IG5lZWRzIHRvIGl0ZXJhdGUgdGhyb3VnaCBhIHJhbmdlIG9mIHBhZ2VzLCBhbmQgYHF1ZXVlX3BhZ2VzX3dhbGtfb3BzYCBwcm92aWRlcyB0aGUgdW5kZXJseWluZyBtZWNoYW5pc20gZm9yIGVmZmljaWVudGx5IHRyYXZlcnNpbmcgYW5kIHBvdGVudGlhbGx5IG9wZXJhdGluZyBvbiB0aG9zZSBwYWdlcy4gVGhpbmtpbmcgdGhyb3VnaCB0aGUgaW1wbGljYXRpb25zLCBJJ2QgaW1tZWRpYXRlbHkgYmUgaW50ZXJlc3RlZCBpbiB0aGUgbmF0dXJlIG9mIHRoaXMgXCJ3YWxrXCIg4oCTIGFyZSB3ZSB0YWxraW5nIGxpbmVhciB0cmF2ZXJzYWwsIGEgbW9yZSBjb21wbGV4IHRyZWUtbGlrZSBzdHJ1Y3R1cmUsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBGdXJ0aGVybW9yZSwgSSdkIGJlIGxvb2tpbmcgY2xvc2VseSBhdCB3aGF0IHRoZSBcIm9wc1wiIGFyZSBpbiBgcXVldWVfcGFnZXNfd2Fsa19vcHNgIOKAkyB3aGF0IGZ1bmN0aW9ucyBvciBvcGVyYXRpb25zIGFyZSBiZWluZyBhcHBsaWVkIHRvIGVhY2ggcGFnZSBkdXJpbmcgdGhpcyB3YWxrPyBVbmRlcnN0YW5kaW5nIHRob3NlIHdvdWxkIGJlIGtleSB0byBmaWd1cmluZyBvdXQgdGhlIHBlcmZvcm1hbmNlIGNoYXJhY3RlcmlzdGljcyBhbmQgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9mIHRoZSB3aG9sZSBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NjgyLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMDM6MTY6MTEuMDgzNjg2ODMyWiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDkwNzA5NzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicXVldWVfcGFnZXNfcmFuZ2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWVtcG9saWN5LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtcG9saWN5LmM9Njg3PXN0YXRpYyBpbnQgcXVldWVfZm9saW9zX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy03NDctXFx0XFx0XFx0ICogbWlncmF0ZV9wYWdlcyhcXHUwMDI2cGFnZWxpc3QpIHJldHVybnMgbnJfZmFpbGVkIGZvbGlvcywgc29cXG5tbS9tZW1wb2xpY3kuYzo3NDg6XFx0XFx0XFx0ICogY2hlY2sgXFxcImxhcmdlXFxcIiBub3cgc28gdGhhdCBxdWV1ZV9wYWdlc19yYW5nZSgpIHJldHVybnNcXG5tbS9tZW1wb2xpY3kuYy03NDktXFx0XFx0XFx0ICogYSBjb21wYXJhYmxlIG5yX2ZhaWxlZCBmb2xpb3MuICBUaGlzIGRvZXMgaW1wbHkgdGhhdFxcbi0tXFxubW0vbWVtcG9saWN5LmM9OTYxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgcXVldWVfcGFnZXNfbG9ja192bWFfd2Fsa19vcHMgPSB7XFxuLS1cXG5tbS9tZW1wb2xpY3kuYy05NzMtICpcXG5tbS9tZW1wb2xpY3kuYzo5NzQ6ICogcXVldWVfcGFnZXNfcmFuZ2UoKSBtYXkgcmV0dXJuOlxcbm1tL21lbXBvbGljeS5jLTk3NS0gKiAwIC0gYWxsIHBhZ2VzIGFscmVhZHkgb24gdGhlIHJpZ2h0IG5vZGUsIG9yIHN1Y2Nlc3NmdWxseSBxdWV1ZWQgZm9yIG1vdmluZ1xcbi0tXFxubW0vbWVtcG9saWN5LmM9OTgyPXN0YXRpYyBsb25nXFxubW0vbWVtcG9saWN5LmM6OTgzOnF1ZXVlX3BhZ2VzX3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcXG5tbS9tZW1wb2xpY3kuYy05ODQtXFx0XFx0bm9kZW1hc2tfdCAqbm9kZXMsIHVuc2lnbmVkIGxvbmcgZmxhZ3MsXFxuLS1cXG5tbS9tZW1wb2xpY3kuYz0xMjg1PXN0YXRpYyBsb25nIG1pZ3JhdGVfdG9fbm9kZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgaW50IHNvdXJjZSwgaW50IGRlc3QsXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0xMzE2LVxcdCAqL1xcbm1tL21lbXBvbGljeS5jOjEzMTc6XFx0bnJfZmFpbGVkID0gcXVldWVfcGFnZXNfcmFuZ2UobW0sIHZtYS1cXHUwMDNldm1fc3RhcnQsIG1tLVxcdTAwM2V0YXNrX3NpemUsIFxcdTAwMjZubWFzayxcXG5tbS9tZW1wb2xpY3kuYy0xMzE4LVxcdFxcdFxcdFxcdCAgICAgIGZsYWdzIHwgTVBPTF9NRl9ESVNDT05USUdfT0ssIFxcdTAwMjZwYWdlbGlzdCk7XFxuLS1cXG5tbS9tZW1wb2xpY3kuYz0xNDg5PXN0YXRpYyBsb25nIGRvX21iaW5kKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgbGVuLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMTU1Mi1cXHQgKi9cXG5tbS9tZW1wb2xpY3kuYzoxNTUzOlxcdG5yX2ZhaWxlZCA9IHF1ZXVlX3BhZ2VzX3JhbmdlKG1tLCBzdGFydCwgZW5kLCBubWFzayxcXG5tbS9tZW1wb2xpY3kuYy0xNTU0LVxcdFxcdFxcdGZsYWdzIHwgTVBPTF9NRl9JTlZFUlQgfCBNUE9MX01GX1dSTE9DSywgXFx1MDAyNnBhZ2VsaXN0KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMDM6MTY6MTEuMjkyNzY0MDgxWiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE2MTgwMzA5ODgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZvY3VzaW5nIG9uIE1lbW9yeSBNYW5hZ2VtZW50IEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBzZWVpbmcgYSBjb25uZWN0aW9uIGJldHdlZW4gYGRvX21iaW5kYCwgYG1pZ3JhdGVfdG9fbm9kZWAsIGFuZCB0aGUgZnVuY3Rpb24gYHF1ZXVlX3BhZ2VzX3JhbmdlYC4gVGhlIGZhY3QgdGhhdCBgbWlncmF0ZV90b19ub2RlYCBpcyBzcGVjaWZpY2FsbHkgY2FsbGVkIGJ5IGBkb19taWdyYXRlX3BhZ2VzYCBpcyBxdWl0ZSBpbnRlcmVzdGluZy4gVGhpcyBwb2ludHMgbWUgdG93YXJkIHRob3NlIHR3byBmdW5jdGlvbnMsIGBkb19tYmluZGAgYW5kIGBkb19taWdyYXRlX3BhZ2VzYCwgYXMgbGlrZWx5IHNpZ25pZmljYW50IHBvaW50cyBvZiBpbnRlcmVzdCB0byBpbnZlc3RpZ2F0ZSBmdXJ0aGVyLiBUaGV5IHNlZW0gdG8gYmUgY29vcmRpbmF0aW5nIHBhZ2UgbWlncmF0aW9uIG9yIGJpbmRpbmcgb3BlcmF0aW9ucywgd2hpY2ggbWFrZXMgdGhlbSBwcmltZSBjYW5kaWRhdGVzIGZvciBkZWVwZXIgc2NydXRpbnkuXG5cbkFkZGl0aW9uYWxseSwgSSBuZWVkIHRvIGNoZWNrIG91dCB3aGF0IHRoZSBpbXBhY3Qgb2YgYG1hZHZpc2VfZnJlZV9odWdlX3BtZGAgYW5kIGBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2VgIGFyZS4gTGV0J3Mgc2VlIGhvdyB0aGVzZSBhcmUgY2FsbGVkIGFuZCBob3cgdGhleSBmdW5jdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU1ODQsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMDM6MTY6MjcuNDczMDc3MTQyWiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjM5OTI0MTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWFkdmlzZV9mcmVlX2h1Z2VfcG1kXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9odWdlX21lbW9yeS5jPTIyMDA9dm1fZmF1bHRfdCBkb19odWdlX3BtZF9udW1hX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTIyNzktICovXFxubW0vaHVnZV9tZW1vcnkuYzoyMjgwOmJvb2wgbWFkdmlzZV9mcmVlX2h1Z2VfcG1kKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbm1tL2h1Z2VfbWVtb3J5LmMtMjI4MS1cXHRcXHRwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbmV4dClcXG4tLVxcbm1tL21hZHZpc2UuYz02NTM9c3RhdGljIGludCBtYWR2aXNlX2ZyZWVfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbm1tL21hZHZpc2UuYy02NjktXFx0aWYgKHBtZF90cmFuc19odWdlKCpwbWQpKVxcbm1tL21hZHZpc2UuYzo2NzA6XFx0XFx0aWYgKG1hZHZpc2VfZnJlZV9odWdlX3BtZCh0bGIsIHZtYSwgcG1kLCBhZGRyLCBuZXh0KSlcXG5tbS9tYWR2aXNlLmMtNjcxLVxcdFxcdFxcdHJldHVybiAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQwMzoxNjoyNy42OTcwODA5M1oiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNzUyMjI3ODAwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTWVtb3J5IE1hbmFnZW1lbnQgRWZmaWNpZW5jeSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhpcyBtZW1vcnkgbWFuYWdlbWVudCBmbG93LiBJdCBsb29rcyBsaWtlIGBtYWR2aXNlX2ZyZWVfaHVnZV9wbWRgIGlzIGJlaW5nIGludm9rZWQgZG93bnN0cmVhbSBmcm9tIGBtYWR2aXNlX2ZyZWVfcHRlX3JhbmdlYCwgd2hpY2ggaW4gdHVybiBpcyBjYWxsZWQgYnkgYG1hZHZpc2VfZnJlZV9zaW5nbGVfdm1hYC4gVGhhdCdzIHRoZSBmcmVlaW5nIHBhdGguIE5vdywgdGhlIGBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2VgIGZ1bmN0aW9uIGlzIGFsc28gb2YgaW50ZXJlc3QsIHNpbmNlIGl0J3MgY2FsbGVkIGJ5IGBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9zaW5nbGVfdm1hYCwgb3IgYSBzaW1pbGFyIGZ1bmN0aW9uLCB3aGljaCBpbXBsaWVzIGl0cyBwdXJwb3NlIGlzIHJlbGF0ZWQgdG8gcGFnZXMgYmVpbmcgbWFya2VkIGFzIGNvbGQgb3IgcGFnZWQgb3V0LiBJIG5lZWQgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IGBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2VgIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUuIEl0IHdvdWxkIGFwcGVhciB0byBiZSBhbiBpbXBvcnRhbnQgY29tcG9uZW50IGluIG9wdGltaXppbmcgbWVtb3J5IHVzYWdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjE5MSwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQwMzoxNjo0NS4yMTkzNjE5NzlaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0MjA2MTU3NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWFkdmlzZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21hZHZpc2UuYz0zNDM9c3RhdGljIGlubGluZSBpbnQgbWFkdmlzZV9mb2xpb19wdGVfYmF0Y2godW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG4tLVxcbm1tL21hZHZpc2UuYy0zNTItXFxubW0vbWFkdmlzZS5jOjM1MzpzdGF0aWMgaW50IG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZShwbWRfdCAqcG1kLFxcbm1tL21hZHZpc2UuYy0zNTQtXFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG4tLVxcbm1tL21hZHZpc2UuYz01Njk9c3RhdGljIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyBjb2xkX3dhbGtfb3BzID0ge1xcbm1tL21hZHZpc2UuYzo1NzA6XFx0LnBtZF9lbnRyeSA9IG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZSxcXG5tbS9tYWR2aXNlLmMtNTcxLVxcdC53YWxrX2xvY2sgPSBQR1dBTEtfUkRMT0NLLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQwMzoxNjo0NS41NjE0MzAzODZaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjI2MjExODQ4ODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipGb2N1c2luZyBvbiBLZXkgRnVuY3Rpb25zIGZvciBNZW1vcnkgTWFuYWdlbWVudCBPcHRpbWl6YXRpb24qKlxuXG5SaWdodCwgc28gSSdtIHRoaW5raW5nIGFib3V0IHRoZSBtb3N0IHJlbGV2YW50IHN5bWJvbHMgdG8gdGFyZ2V0IGhlcmUuIEl0IHNlZW1zIGxpa2UgdGhlIGNvcmUgZnVuY3Rpb25zIEkgc2hvdWxkIGJlIGV4YW1pbmluZyBhcmUgYGRvX21iaW5kYCwgYGRvX21pZ3JhdGVfcGFnZXNgLCBgbWFkdmlzZV9mcmVlX2h1Z2VfcG1kYCwgYW5kIGBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2VgLiBUaGVzZSBmZWVsIGxpa2UgdGhleSdyZSBhdCB0aGUgaGVhcnQgb2YgbWVtb3J5IGJpbmRpbmcsIG1pZ3JhdGlvbiwgYW5kIGFkdmlzaW5nIHRoZSBrZXJuZWwgb24gbWVtb3J5IHVzYWdlLCB3aGljaCBpcyBleGFjdGx5IHRoZSBhcmVhIEknbSB0cnlpbmcgdG8gb3B0aW1pemUuIFdhaXQgYSBzZWNvbmQsIGlzIGBkb19taWdyYXRlX3BhZ2VzYCBhY3R1YWxseSBhIHN5c2NhbGw/IEkgbmVlZCB0byBxdWlja2x5IGNvbmZpcm0gdGhhdCwgYmVjYXVzZSBJIHdhbnQgdG8gbWFrZSBzdXJlIEknbSBmb2N1c2VkIG9uIHRoZSByaWdodCBsZXZlbCBvZiBhYnN0cmFjdGlvbi4gVGltZSB0byB2ZXJpZnkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NzMzLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMDM6MTc6MDguMTgyNjE4NjQ4WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjI1MjY5MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZG9fbWlncmF0ZV9wYWdlc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtcG9saWN5LmM9MTI4NT1zdGF0aWMgbG9uZyBtaWdyYXRlX3RvX25vZGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIGludCBzb3VyY2UsIGludCBkZXN0LFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMTMzOC0gKi9cXG5tbS9tZW1wb2xpY3kuYzoxMzM5OmludCBkb19taWdyYXRlX3BhZ2VzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBjb25zdCBub2RlbWFza190ICpmcm9tLFxcbm1tL21lbXBvbGljeS5jLTEzNDAtXFx0XFx0ICAgICBjb25zdCBub2RlbWFza190ICp0bywgaW50IGZsYWdzKVxcbi0tXFxubW0vbWVtcG9saWN5LmMtMTM4Ny1cXHRcXHRcXHQvKlxcbm1tL21lbXBvbGljeS5jOjEzODg6XFx0XFx0XFx0ICogZG9fbWlncmF0ZV9wYWdlcygpIHRyaWVzIHRvIG1haW50YWluIHRoZSByZWxhdGl2ZVxcbm1tL21lbXBvbGljeS5jLTEzODktXFx0XFx0XFx0ICogbm9kZSByZWxhdGlvbnNoaXAgb2YgdGhlIHBhZ2VzIGVzdGFibGlzaGVkIGJldHdlZW5cXG4tLVxcbm1tL21lbXBvbGljeS5jPTE0NzA9c3RhdGljIGJvb2wgbWlncmF0ZV9mb2xpb19hZGQoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGxpc3RfaGVhZCAqZm9saW9saXN0LFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMTQ3NS1cXG5tbS9tZW1wb2xpY3kuYzoxNDc2OmludCBkb19taWdyYXRlX3BhZ2VzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBjb25zdCBub2RlbWFza190ICpmcm9tLFxcbm1tL21lbXBvbGljeS5jLTE0NzctXFx0XFx0ICAgICBjb25zdCBub2RlbWFza190ICp0bywgaW50IGZsYWdzKVxcbi0tXFxubW0vbWVtcG9saWN5LmM9MTg2Mz1zdGF0aWMgaW50IGtlcm5lbF9taWdyYXRlX3BhZ2VzKHBpZF90IHBpZCwgdW5zaWduZWQgbG9uZyBtYXhub2RlLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMTkzNC1cXG5tbS9tZW1wb2xpY3kuYzoxOTM1OlxcdGVyciA9IGRvX21pZ3JhdGVfcGFnZXMobW0sIG9sZCwgbmV3LFxcbm1tL21lbXBvbGljeS5jLTE5MzYtXFx0XFx0Y2FwYWJsZShDQVBfU1lTX05JQ0UpID8gTVBPTF9NRl9NT1ZFX0FMTCA6IE1QT0xfTUZfTU9WRSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDAzOjE3OjA4LjcwNTE1MTMzN1oiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNDM3NjU3NzYyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGb2N1c2luZyBvbiBLZXkgU3ltYm9scyBmb3IgRnV6emluZyoqXG5cbk9rYXksIHNvIEknbSB0cnlpbmcgdG8gZmlndXJlIG91dCB0aGUgYmVzdCBhcHByb2FjaCBmb3IgZnV6emluZyB0aGlzIGNvZGUuIFRoZSBlbnRyeSBwb2ludCBpcyBga2VybmVsX21pZ3JhdGVfcGFnZXNgLCB3aGljaCBpcyBhIHN5c2NhbGwgZW50cnkuIFRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEZyb20gdGhlcmUsIEkgd2FzIGluaXRpYWxseSB0aGlua2luZyBvZiBmb2N1c2luZyBvbiBgZG9fbWJpbmRgLCBgbWFkdmlzZV9mcmVlX2h1Z2VfcG1kYCwgYW5kIGBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2VgIGFzIHBvdGVudGlhbCBmb2N1cyBzeW1ib2xzLlxuXG5CdXQgaG9sZCBvbiwgYG1hZHZpc2VfZnJlZV9odWdlX3BtZGAgaXMgY2FsbGVkIGZyb20gYG1hZHZpc2VfZnJlZV9wdGVfcmFuZ2VgLCB3aGljaCBpdHNlbGYgaXMgY2FsbGVkIGZyb20gYG1hZHZpc2Vfdm1hX2JlaGF2aW9yYC4gU28gbWF5YmUgZ29pbmcgZGlyZWN0bHkgdG8gYG1hZHZpc2VfZnJlZV9odWdlX3BtZGAgYW5kIGBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2VgIG1ha2VzIHRoZSBtb3N0IHNlbnNlIGJlY2F1c2UgdGhleSBhcmUgbW9yZSBkaXJlY3RseSB0aWVkIHRvIHRoZSBjaGFuZ2VzLlxuXG5Ob3csIGZvciBgcXVldWVfZm9saW9zX3BtZGAsIEkgaGF2ZSBvcHRpb25zLiBJIGNvdWxkIHVzZSBgcXVldWVfZm9saW9zX3B0ZV9yYW5nZWAsIG9yIGBxdWV1ZV9wYWdlc19yYW5nZWAsIG9yIGV2ZW4gZ28gYmFjayB0byBgZG9fbWJpbmRgIGFuZCBga2VybmVsX21pZ3JhdGVfcGFnZXNgLiBTaG91bGQgSSB1c2UgYHF1ZXVlX2ZvbGlvc19wbWRgIGRpcmVjdGx5PyBIbW0sIGl0J3Mgc3RhdGljLiBCdXQgc3l6a2FsbGVyIGNhbiBoYW5kbGUgc3RhdGljIGZ1bmN0aW9ucyBpZiB0aGV5J3JlIGluIHRoZSBjYWxsIHRyZWUgb2Ygc3lzY2FsbHMuIFNwZWNpZnlpbmcgdGhlbSBpbiBgRm9jdXNTeW1ib2xzYCBpcyBzdGlsbCBnb29kIGJlY2F1c2Ugc3l6a2FsbGVyIHVzZXMgY292ZXJhZ2UgdG8gZ3VpZGUgZnV6emluZy4gQW5kIHdhaXQsIGl0IGxvb2tzIGxpa2UgYEZvY3VzU3ltYm9sc2AgKmNhbiogaW5jbHVkZSBzdGF0aWMgZnVuY3Rpb25zISBTeXprYWxsZXIgZXh0cmFjdHMgdGhlIFBDIGZyb20gdGhlIGtlcm5lbCBpbWFnZS4gUGVyZmVjdC5cblxuU28sIEkgdGhpbmsgSSBjYW4ganVzdCBsaXN0IGBxdWV1ZV9mb2xpb3NfcG1kYCwgYG1hZHZpc2VfZnJlZV9odWdlX3BtZGAsIGFuZCBgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlYCBhcyBmb2N1cyBzeW1ib2xzLiBXYWl0IGEgbWludXRlLCBJIG5lZWQgdG8gZG91YmxlLWNoZWNrLiBgbWFkdmlzZV9mcmVlX2h1Z2VfcG1kYCBpcyBnbG9iYWwsIG5vdCBzdGF0aWMuIEFuZCBgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlYCBhbmQgYHF1ZXVlX2ZvbGlvc19wbWRgIGFyZSBzdGF0aWMuIEFscmlnaHQsIGxldCdzIHByb3ZpZGUgdGhvc2UgdGhyZWUgYXMgYEZvY3VzU3ltYm9sc2AuXG5cbkZpbmFsbHksIGZvciB0aGUgY29uZmlndXJhdGlvbiwgSSdtIGdvaW5nIHRvIG5lZWQgYE5VTUFgLCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLCBhbmQgYERFVklDRV9QUklWQVRFYC4gSG9sZCBvbiwgZG9lcyBgREVWSUNFX1BSSVZBVEVgIG5lZWQgYFpPTkVfREVWSUNFYD8gQmV0dGVyIGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NDE4LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDYyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDAzOjE3OjMzLjA4MTczMzA4N1oiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIzODUyODQzMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgREVWSUNFX1BSSVZBVEVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTEyNjI9Y29uZmlnIEdFVF9GUkVFX1JFR0lPTlxcbi0tXFxubW0vS2NvbmZpZy0xMjY0LVxcbm1tL0tjb25maWc6MTI2NTpjb25maWcgREVWSUNFX1BSSVZBVEVcXG5tbS9LY29uZmlnLTEyNjYtXFx0Ym9vbCBcXFwiVW5hZGRyZXNzYWJsZSBkZXZpY2UgbWVtb3J5IChHUFUgbWVtb3J5LCAuLi4pXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQwMzoxNzozNS4zMjAyNzMxNTlaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjEzNjk1ODY0ODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoZSBnaXZlbiBpbnN0cnVjdGlvbnM6XG5cbioqQW5hbHl6aW5nIG1tL0tjb25maWcgYXJvdW5kIERFVklDRV9QUklWQVRFKipcblxuT2theSwgc28gdGhlIHByb21wdCB3YW50cyBtZSB0byBmb2N1cyBvbiBgbW0vS2NvbmZpZ2AsIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIGBERVZJQ0VfUFJJVkFURWAgY29uZmlndXJhdGlvbiBvcHRpb24uIFJpZ2h0LCBzbyB0aGlzIGlzIGFib3V0IG1lbW9yeSBtYW5hZ2VtZW50IHdpdGhpbiB0aGUga2VybmVsJ3MgY29uZmlndXJhdGlvbiBzeXN0ZW0uIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgcm9sZSBgREVWSUNFX1BSSVZBVEVgIHBsYXlzIGluIHRoaXMgY29udGV4dC4gSSdtIGFzc3VtaW5nIGl0IHJlbGF0ZXMgdG8gd2hldGhlciBjZXJ0YWluIG1lbW9yeSByZWdpb25zIG9yIGRldmljZXMgc2hvdWxkIGJlIGNvbnNpZGVyZWQgcHJpdmF0ZSB0byBhIHNwZWNpZmljIGRldmljZSBvciwgY29udmVyc2VseSwgc2hhcmVkIGFuZCBtYW5hZ2VkIGF0IGEgbW9yZSBnbG9iYWwgbGV2ZWwuIFRoZSBgS2NvbmZpZ2AgZmlsZXMgYXJlIHdoZXJlIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGRlZmluZWQsIGFsb25nIHdpdGggdGhlaXIgZGVwZW5kZW5jaWVzLCBkZXNjcmlwdGlvbnMsIGFuZCBkZWZhdWx0cywgc28gSSBuZWVkIHRvIGdvIHJlYWQgdGhlIGNvbnRlbnRzIG9mIHRoYXQgZmlsZS4gSSBleHBlY3QgdG8gc2VlIGRlZmluaXRpb25zIGZvciBgREVWSUNFX1BSSVZBVEVgLCBhbmQgbGlrZWx5IGEgZGVzY3JpcHRpb24gb2YgaXRzIG1lYW5pbmcsIHBlcmhhcHMgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYmFzZWQgb24gdGhpcyBvcHRpb24gYW5kIHJlbGF0ZWQgb3B0aW9ucy4gSSdsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZTpcblxuKiAgIFdoYXQgZGV2aWNlcyBvciBtZW1vcnkgcmVnaW9ucyBhcmUgaW1wYWN0ZWQgYnkgdGhpcyBvcHRpb24uXG4qICAgVGhlIGltcGxpY2F0aW9ucyBvZiBlbmFibGluZyBvciBkaXNhYmxpbmcgdGhpcyBvcHRpb24uXG4qICAgQW55IGRlcGVuZGVuY2llcyBvbiBvdGhlciBjb25maWd1cmF0aW9uIHNldHRpbmdzLlxuKiAgIEhvdyB0aGUga2VybmVsIG1hbmFnZXMgYW5kIHV0aWxpemVzIG1lbW9yeSBiYXNlZCBvbiB0aGlzIHNldHRpbmcuXG5cbk15IGdvYWwgaXMgdG8gdW5kZXJzdGFuZCBob3cgYERFVklDRV9QUklWQVRFYCBhZmZlY3RzIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzY2hlbWUgd2l0aGluIHRoZSBrZXJuZWwgYW5kIGhvdyBpdCBjYW4gYmUgY29udHJvbGxlZCB0aHJvdWdoIHRoZSBjb25maWd1cmF0aW9uIHByb2Nlc3MuIFVsdGltYXRlbHksIEknbGwgc3ludGhlc2l6ZSB3aGF0IGBtbS9LY29uZmlnYCBpcyBleHByZXNzaW5nIGFyb3VuZCB0aGlzIG9wdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg1MTMsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQwMzoxNzo1Ni42ODk4NjQyODJaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQwMTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTI2MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTI2MDpcXHRcXHRkZXBlbmRzIG9uIE1NVVxcbjEyNjE6XFx0XFxuMTI2MjpcXHRjb25maWcgR0VUX0ZSRUVfUkVHSU9OXFxuMTI2MzpcXHRcXHRib29sXFxuMTI2NDpcXHRcXG4xMjY1OlxcdGNvbmZpZyBERVZJQ0VfUFJJVkFURVxcbjEyNjY6XFx0XFx0Ym9vbCBcXFwiVW5hZGRyZXNzYWJsZSBkZXZpY2UgbWVtb3J5IChHUFUgbWVtb3J5LCAuLi4pXFxcIlxcbjEyNjc6XFx0XFx0ZGVwZW5kcyBvbiBaT05FX0RFVklDRVxcbjEyNjg6XFx0XFx0c2VsZWN0IEdFVF9GUkVFX1JFR0lPTlxcbjEyNjk6XFx0XFxuMTI3MDpcXHRcXHRoZWxwXFxuMTI3MTpcXHRcXHQgIEFsbG93cyBjcmVhdGlvbiBvZiBzdHJ1Y3QgcGFnZXMgdG8gcmVwcmVzZW50IHVuYWRkcmVzc2FibGUgZGV2aWNlXFxuMTI3MjpcXHRcXHQgIG1lbW9yeTsgaS5lLiwgbWVtb3J5IHRoYXQgaXMgb25seSBhY2Nlc3NpYmxlIGZyb20gdGhlIGRldmljZSAob3JcXG4xMjczOlxcdFxcdCAgZ3JvdXAgb2YgZGV2aWNlcykuIFlvdSBsaWtlbHkgYWxzbyB3YW50IHRvIHNlbGVjdCBITU1fTUlSUk9SLlxcbjEyNzQ6XFx0XFxuMTI3NTpcXHRjb25maWcgVk1BUF9QRk5cXG4xMjc2OlxcdFxcdGJvb2xcXG4xMjc3OlxcdFxcbjEyNzg6XFx0Y29uZmlnIEFSQ0hfVVNFU19ISUdIX1ZNQV9GTEFHU1xcbjEyNzk6XFx0XFx0Ym9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQwMzoxNzo1Ni42OTAxMDcyODJaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTM5MDU5MTQ2NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkRlcGVuZGVuY3kgRGVlcCBEaXZlKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEknbSBzZWVpbmcgdGhhdCBgREVWSUNFX1BSSVZBVEVgIHJlbGllcyBvbiBgWk9ORV9ERVZJQ0VgLiBDbGFzc2ljLiBOb3csIGJlZm9yZSBJIHN0YXJ0IHB1bGxpbmcgYXBhcnQgYERFVklDRV9QUklWQVRFYCBhbmQgZmlndXJpbmcgb3V0ICp3aHkqIGl0IG5lZWRzIGBaT05FX0RFVklDRWAsIEkgbmVlZCB0byBmdWxseSB1bmRlcnN0YW5kIGBaT05FX0RFVklDRWAgaXRzZWxmLiBHb3R0YSBtYWtlIHN1cmUgdGhlcmUgYXJlbid0IGFueSBoaWRkZW4gZ290Y2hhcyBvciB1bmV4cGVjdGVkIGJlaGF2aW9yIHdpdGhpbiBgWk9ORV9ERVZJQ0VgIHRoYXQgd2lsbCBjb21lIGJhY2sgdG8gYml0ZSBtZSBsYXRlci4gVGltZSB0byB0cmFjZSB0aGUgZGVwZW5kZW5jaWVzIG9mIGBaT05FX0RFVklDRWAgYW5kIHNlZSB3aGF0J3MgcmVhbGx5IGdvaW5nIG9uIHVuZGVyIHRoZSBob29kLiBObyBwb2ludCBpbiBmaXhpbmcgYSBsZWFrIHdpdGhvdXQgdW5kZXJzdGFuZGluZyB3aGVyZSB0aGUgd2F0ZXIncyBjb21pbmcgZnJvbS4gSSBuZWVkIHRvIGdldCB0aGUgYmlnZ2VyIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MTIxLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQwMzoxODoxMC41OTYwMjUzMjVaIiwiU2VxIjo0NSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzMDA2OTI3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgWk9ORV9ERVZJQ0VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTEyMzE9Y29uZmlnIFpPTkVfRE1BMzJcXG4tLVxcbm1tL0tjb25maWctMTIzNS1cXG5tbS9LY29uZmlnOjEyMzY6Y29uZmlnIFpPTkVfREVWSUNFXFxubW0vS2NvbmZpZy0xMjM3LVxcdGJvb2wgXFxcIkRldmljZSBtZW1vcnkgKHBtZW0sIEhNTSwgZXRjLi4uKSBob3RwbHVnIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDAzOjE4OjExLjIyNjEwMTQ1NFoiLCJTZXEiOjQ2LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTY1NDg5Mzc0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIGBtbS9LY29uZmlnYCBmaWxlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGBaT05FX0RFVklDRWA6XG5cbioqRGl2aW5nIGludG8gdGhlIGBtbS9LY29uZmlnYCBhbmQgYFpPTkVfREVWSUNFYCoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBpbnRvIHRoZSBuaXR0eS1ncml0dHkuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIk9rYXksIGBtbS9LY29uZmlnYC4uLiB0aGlzIGlzIHdoZXJlIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBvcHRpb25zIGFyZSBjb25maWd1cmVkLCByaWdodD9cIiBJIGtub3cgdGhpcyBmaWxlIGludGltYXRlbHkuIEknbSBnb2luZyB0byBsb29rIGZvciB0aGUgc2VjdGlvbiByZWxhdGVkIHRvIGBaT05FX0RFVklDRWAuIE15IG1pbmQgcXVpY2tseSBjb25qdXJlcyB0aGUgc3Vycm91bmRpbmcgY29udGV4dCAtIGlzIHRoaXMgYWJvdXQgY29uZmlndXJpbmcgZGV2aWNlcyBmb3IgZGlyZWN0IG1lbW9yeSBhY2Nlc3M/IEFyZSB3ZSB0YWxraW5nIGFib3V0IG1lbW9yeS1tYXBwZWQgSS9PLCBOVU1BIGFyY2hpdGVjdHVyZXMsIG9yIHNvbWV0aGluZyBtb3JlIHNwZWNpYWxpemVkPyBUaGUgcHJlc2VuY2Ugb2YgYFpPTkVfREVWSUNFYCBzaWduYWxzIHNvbWV0aGluZyBiZXlvbmQgdGhlIHVzdWFsIGBaT05FX0RNQWAsIGBaT05FX05PUk1BTGAsIGBaT05FX0hJR0hNRU1gIHJlYWxtcy4gSSBleHBlY3QgdG8gZmluZCBvcHRpb25zIHJlbGF0ZWQgdG8gaG93IHRoZSBrZXJuZWwgaGFuZGxlcyBtZW1vcnkgc3BlY2lmaWNhbGx5IGFsbG9jYXRlZCBmb3IgZGV2aWNlIGludGVyYWN0aW9uLiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzLiBXaGF0IG90aGVyIGZlYXR1cmVzIG5lZWQgdG8gYmUgZW5hYmxlZCBiZWZvcmUgYFpPTkVfREVWSUNFYCBiZWNvbWVzIHJlbGV2YW50PyBBcmUgdGhlcmUgaGFyZHdhcmUgcmVxdWlyZW1lbnRzLCBzcGVjaWZpYyBkZXZpY2UgZHJpdmVycywgb3Igc3BlY2lmaWMga2VybmVsIGNvbmZpZ3VyYXRpb25zIHRoYXQgcGxheSBpbnRvIHRoaXM/IElzIHRoaXMgYWJvdXQgdGhlIGltcGxlbWVudGF0aW9uIG9mIERpcmVjdCBNZW1vcnkgQWNjZXNzIChETUEpPyBJIGtub3cgSSdsbCBoYXZlIHRvIGNvbnNpZGVyIGhvdyB0aGlzIGludGVyYWN0cyB3aXRoIG1lbW9yeSBwcm90ZWN0aW9uLCBhZGRyZXNzaW5nLCBhbmQgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucy4gSSdtIGN1cmlvdXMgaWYgdGhpcyB6b25lJ3MgZXhpc3RlbmNlIGluZmx1ZW5jZXMgaG93IG1lbW9yeSBpcyBtYW5hZ2VkLCBhbGxvY2F0ZWQsIGFuZCByZWNsYWltZWQuIEkgd2lsbCBsb29rIGZvciBhc3NvY2lhdGVkIGRlcGVuZGVuY2llcyBhbmQgcG90ZW50aWFsIGNvbmZpZ3VyYXRpb24gcGl0ZmFsbHMuIEknbSByZWFkeSB0byBmaW5kIHRoZSBhbnN3ZXJzIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTQzMiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDAzOjE4OjIyLjg4MDk5OTA4NloiLCJTZXEiOjQ3LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODc5NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMjM1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMjM1OlxcdFxcbjEyMzY6XFx0Y29uZmlnIFpPTkVfREVWSUNFXFxuMTIzNzpcXHRcXHRib29sIFxcXCJEZXZpY2UgbWVtb3J5IChwbWVtLCBITU0sIGV0Yy4uLikgaG90cGx1ZyBzdXBwb3J0XFxcIlxcbjEyMzg6XFx0XFx0ZGVwZW5kcyBvbiBNRU1PUllfSE9UUkVNT1ZFXFxuMTIzOTpcXHRcXHRzZWxlY3QgWEFSUkFZX01VTFRJXFxuMTI0MDpcXHRcXG4xMjQxOlxcdFxcdGhlbHBcXG4xMjQyOlxcdFxcdCAgRGV2aWNlIG1lbW9yeSBob3RwbHVnIHN1cHBvcnQgYWxsb3dzIGZvciBlc3RhYmxpc2hpbmcgcG1lbSxcXG4xMjQzOlxcdFxcdCAgb3Igb3RoZXIgZGV2aWNlIGRyaXZlciBkaXNjb3ZlcmVkIG1lbW9yeSByZWdpb25zLCBpbiB0aGVcXG4xMjQ0OlxcdFxcdCAgbWVtbWFwLiBUaGlzIGFsbG93cyBwZm5fdG9fcGFnZSgpIGxvb2t1cHMgb2Ygb3RoZXJ3aXNlXFxuMTI0NTpcXHRcXHQgIFxcXCJkZXZpY2UtcGh5c2ljYWxcXFwiIGFkZHJlc3NlcyB3aGljaCBpcyBuZWVkZWQgZm9yIERBWCwgUENJX1AyUERNQSwgYW5kXFxuMTI0NjpcXHRcXHQgIERFVklDRV9QUklWQVRFIGZlYXR1cmVzIGFtb25nIG90aGVycy5cXG4xMjQ3OlxcdFxcbjEyNDg6XFx0XFx0ICBFbmFibGluZyB0aGlzIG9wdGlvbiB3aWxsIHJlZHVjZSB0aGUgZW50cm9weSBvZiB4ODYgS0FTTFIgbWVtb3J5XFxuMTI0OTpcXHRcXHQgIHJlZ2lvbnMuIEZvciBleGFtcGxlIC0gb24gYSA0NiBiaXQgc3lzdGVtLCB0aGUgZW50cm9weSBnb2VzIGRvd25cXG4xMjUwOlxcdFxcdCAgZnJvbSAxNiBiaXRzIHRvIDE1IGJpdHMuIFRoZSBhY3R1YWwgcmVkdWN0aW9uIGluIGVudHJvcHkgZGVwZW5kc1xcbjEyNTE6XFx0XFx0ICBvbiB0aGUgcGh5c2ljYWwgYWRkcmVzcyBiaXRzLCBvbiBwcm9jZXNzb3IgZmVhdHVyZXMsIGtlcm5lbCBjb25maWdcXG4xMjUyOlxcdFxcdCAgKDUgbGV2ZWwgcGFnZSB0YWJsZSkgYW5kIHBoeXNpY2FsIG1lbW9yeSBwcmVzZW50IG9uIHRoZSBzeXN0ZW0uXFxuMTI1MzpcXHRcXG4xMjU0OlxcdCNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMDM6MTg6MjIuODgxMTkwMTc2WiIsIlNlcSI6NDgsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyNjcyNjI0NDQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipEZXBlbmRlbmN5IERlZXAgRGl2ZTogWk9ORV9ERVZJQ0UgXHUwMDI2IE1FTU9SWV9IT1RSRU1PVkUqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgZmxhZ3MgYSBkZXBlbmRlbmN5LiBgWk9ORV9ERVZJQ0VgIHJlbGllcyBvbiBgTUVNT1JZX0hPVFJFTU9WRWAuIFRoYXQncyBhIGtleSBvYnNlcnZhdGlvbi4gQmVmb3JlIEkgZ28gZnVydGhlciBkb3duIHRoaXMgcGFydGljdWxhciByYWJiaXQgaG9sZSwgbGV0J3Mgc3RvcCBhbmQgdmVyaWZ5IHRoYXQgZGVwZW5kZW5jeS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgKndoeSogYFpPTkVfREVWSUNFYCBuZWVkcyBgTUVNT1JZX0hPVFJFTU9WRWAuIElzIGl0IGZvciBncmFjZWZ1bCBoYW5kbGluZyBvZiBkZXZpY2UgcmVtb3ZhbCwgcmVzb3VyY2UgcmVjbGFtYXRpb24sIG9yIHNvbWUgb3RoZXIgY3JpdGljYWwgYXNwZWN0PyBLbm93aW5nIHRoZSBuYXR1cmUgb2YgdGhlIGRlcGVuZGVuY3kgd2lsbCBndWlkZSBteSBuZXh0IHN0ZXBzLiBJJ2xsIG5lZWQgdG8gY29uZmlybSB0aGUgdW5kZXJseWluZyBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIGFuZCB0aGUgc3BlY2lmaWMgaW50ZXJhY3Rpb25zLiBNeSBmb2N1cyBuZWVkcyB0byBiZSBvbiB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlc2UgdHdvIGNvbXBvbmVudHMuIFRpbWUgdG8gZGlnIGludG8gdGhlIGBNRU1PUllfSE9UUkVNT1ZFYCBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDEzMiwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMDM6MTg6MzUuNTUzODE3Nzc5WiIsIlNlcSI6NDksIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODQ5NjUzNjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1FTU9SWV9IT1RSRU1PVkVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTU4OT1lbmRjaG9pY2VcXG5tbS9LY29uZmlnLTU5MC1cXG5tbS9LY29uZmlnOjU5MTpjb25maWcgTUVNT1JZX0hPVFJFTU9WRVxcbm1tL0tjb25maWctNTkyLVxcdGJvb2wgXFxcIkFsbG93IGZvciBtZW1vcnkgaG90IHJlbW92ZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMDM6MTg6MzYuMTM4NzkwNjkyWiIsIlNlcSI6NTAsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYyNjY0MzQxMDUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3Mgd2hhdCdzIGdvaW5nIHRocm91Z2ggbXkgbWluZCBhcyBJIGFwcHJvYWNoIHRoaXM6XG5cbioqRW51bWVyYXRpbmcgUmVsZXZhbnQgS2VybmVsIEZlYXR1cmVzKipcblxuUmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gbGlzdCBvdXQgdGhlIGtleSBrZXJuZWwgZmVhdHVyZXMgdGhpcyBpcyBsaWtlbHkgdG91Y2hpbmcuIEknbSB0aGlua2luZyBpbW1lZGlhdGVseSBvZiBgREVWSUNFX1BSSVZBVEVgLCBgWk9ORV9ERVZJQ0VgLCBgTUVNT1JZX0hPVFJFTU9WRWAsIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAsIGFuZCBgTlVNQWAuIFRob3NlIGFyZSB0aGUgdXN1YWwgc3VzcGVjdHMgd2hlbiBkZWFsaW5nIHdpdGggdGhpcyBraW5kIG9mIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBkZXZpY2UgaW50ZXJhY3Rpb24uXG5cbkhvbGQgb24uLi4gSSdtIGFsc28gcmVtZW1iZXJpbmcgdGhhdCBgQURWSVNFX1NZU0NBTExTYCBpcyBlc3NlbnRpYWwgZm9yIGhhbmRsaW5nIGBtYWR2aXNlLmNgLiBHb3R0YSBiZSBtaW5kZnVsIG9mIGhvdyB3ZSdyZSBndWlkaW5nIHRoZSBrZXJuZWwgd2l0aCBtZW1vcnkgaGludHMuIExldCBtZSBkb3VibGUtY2hlY2sgdGhhdCBgQURWSVNFX1NZU0NBTExTYCBpcyBpbmRlZWQgcHJlc2VudDsgaXQncyBlYXN5IHRvIG92ZXJsb29rIHRoZXNlIGRldGFpbHMgYW5kIHRoZSByaXBwbGUgZWZmZWN0cyBjYW4gYmUgYSBwYWluLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDQzNCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjczLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDAzOjE5OjM4LjgwMzEzNjU2NVoiLCJTZXEiOjUxLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjAwMzQyMTcyLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQURWSVNFX1NZU0NBTExTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDAzOjE5OjM5LjQwMzQ4OTU3N1oiLCJTZXEiOjUyLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODA1NzIwMjMzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6XG5cbioqTmF2aWdhdGluZyB0aGUgS2NvbmZpZyBMYWJ5cmludGgqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGlzIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIGRlZmluZWQuIEknbSBwcmV0dHkgc3VyZSBpdCdzIGluIHRoZSBgS2NvbmZpZ2AgZmlsZXMsIGJ1dCB3aGVyZSBleGFjdGx5PyBJcyBpdCB3aXRoaW4gdGhlIG1haW4gYGluaXQvS2NvbmZpZ2AgZmlsZSwgb3IgaXMgaXQgbmVzdGVkIGRlZXBlciBpbiBvbmUgb2YgdGhlIHN1YmRpcmVjdG9yaWVzPyBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgdGhlIHNjb3BlIG9mIHRoaXMgcGFydGljdWxhciBvcHRpb24gc28gSSBjYW4gcHJvcGVybHkgYW5hbHl6ZSBpdHMgZGVwZW5kZW5jaWVzIGFuZCBkZWZhdWx0IHZhbHVlcy4gVGltZSB0byBzdGFydCBkaWdnaW5nLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNzQ0LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMDM6MjA6MDcuNDYwNjk2NDM4WiIsIlNlcSI6NTMsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MjY3NTEyMjYzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBBRFZJU0VfU1lTQ0FMTFNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluaXQvS2NvbmZpZz0xOTM3PWNvbmZpZyBJT19VUklOR19NT0NLX0ZJTEVcXG4tLVxcbmluaXQvS2NvbmZpZy0xOTQ3LVxcbmluaXQvS2NvbmZpZzoxOTQ4OmNvbmZpZyBBRFZJU0VfU1lTQ0FMTFNcXG5pbml0L0tjb25maWctMTk0OS1cXHRib29sIFxcXCJFbmFibGUgbWFkdmlzZS9mYWR2aXNlIHN5c2NhbGxzXFxcIiBpZiBFWFBFUlRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMDM6MjA6MTUuNzI4MjE3MTIxWiIsIlNlcSI6NTQsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyNTQ3Njc0ODE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIE1lbW9yeSBNYW5hZ2VtZW50IFBhdGNoIGZvciBGdXp6aW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgZmlndXJpbmcgb3V0IGlmIGl0J3MgZnV6emFibGUgYW5kIGhvdyB0byBhcHByb2FjaCBpdC4gRmlyc3QsIEkgc2VlIHRoYXQgdGhlIGBBRFZJU0VfU1lTQ0FMTFNgIGNvbmZpZyBpcyBkZWZpbmVkIGluIGBpbml0L0tjb25maWdgLiBJJ2xsIG5lZWQgdG8gZW5hYmxlIGEgc2V0IG9mIGNvbmZpZ3VyYXRpb25zIHRvIHJlcHJvZHVjZSB0aGUgYnVnOiBgTlVNQWAsIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAsIGBERVZJQ0VfUFJJVkFURWAsIGBaT05FX0RFVklDRWAsIGBNRU1PUllfSE9UUkVNT1ZFYCwgYW5kIG9mIGNvdXJzZSwgYEFEVklTRV9TWVNDQUxMU2AuXG5cbk5vdywgSSdtIGRpZ2dpbmcgaW50byB0aGUgY29kZS4gVGhlIHBhdGNoIHNlZW1zIHRvIGJlIGFkZHJlc3NpbmcgYW4gaXNzdWUgd2l0aGluIGBxdWV1ZV9mb2xpb3NfcG1kYC4gVGhpcyBmdW5jdGlvbiBpcyByZWFjaGFibGUgdmlhIGBtYWR2aXNlX2ZyZWVfaHVnZV9wbWRgLCBjYWxsZWQgZnJvbSBgbWFkdmlzZV9mcmVlX3B0ZV9yYW5nZWAgd2hpY2ggaXMgcmVsYXRlZCB0byBgTUFEVl9GUkVFYC4gYHF1ZXVlX2ZvbGlvc19wbWRgIGlzIGFsc28gcGFydCBvZiBgbWJpbmRgIGFuZCBgbWlncmF0ZV9wYWdlc2AuIFRoZSBwcmltYXJ5IGZpeCBpcyByZWxhdGVkIHRvIGEgY3Jhc2ggdGhhdCBvY2N1cnJlZCB3aGVuIGBxdWV1ZV9mb2xpb3NfcG1kYCBlbmNvdW50ZXJlZCBhIG5vbi1wcmVzZW50IFBNRCB0aGF0IHdhc24ndCBhIG1pZ3JhdGlvbiBlbnRyeSDigJMgc3BlY2lmaWNhbGx5LCBhIGRldmljZSBwcml2YXRlIGVudHJ5LiBUaGUgb3RoZXIgcGFydHMgb2YgdGhlIHBhdGNoIGFyZSB1cGRhdGVzIHRvIGBWTV9CVUdfT05gIGFzc2VydGlvbnMgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcy5cblxuVGhlIGZ1bmN0aW9uYWwgY2hhbmdlIGlzIGluIGBxdWV1ZV9mb2xpb3NfcG1kYC4gSSdtIHRoaW5raW5nLCBpcyB0aGlzIHdvcnRoIGZ1enppbmc/IFllcywgYWJzb2x1dGVseS4gSXQncyBhIGZ1bmN0aW9uYWwgZml4IGZvciBhIGNyYXNoLCBzbyBpdCdzIGEgZ29vZCB0YXJnZXQgZm9yIGZ1enppbmcuXG5cbkxldCdzIGRvdWJsZS1jaGVjayB0aGUgcmVhY2hhYmlsaXR5IG9mIGBxdWV1ZV9mb2xpb3NfcG1kYC4gSXQncyBjYWxsZWQgZnJvbSBgcXVldWVfZm9saW9zX3B0ZV9yYW5nZWAgd2hlbiBgcG1kX3RyYW5zX2h1Z2VfbG9ja2Agc3VjY2VlZHMuIFRoaXMgbG9jayBzdWNjZWVkcyBpZiBgcG1kX2lzX2h1Z2VgIGlzIHRydWUsIHdoaWNoIGlzIHRydWUgaWYgZWl0aGVyIHRoZSBQTUQgaXMgcHJlc2VudCBhbmQgaHVnZSwgKm9yKiBpZiB0aGUgUE1EIGlzIG5vdCBwcmVzZW50IGJ1dCBpcyBub3Qgbm9uZS4gVGhpcyBtZWFucyB0aGF0IGlmIHRoZXJlJ3MgYSBkZXZpY2UgcHJpdmF0ZSBlbnRyeSBpbiBhIFBNRCwgYHBtZF9pc19odWdlYCB3aWxsIHJldHVybiB0cnVlIGFuZCB0aGUgbG9jayB3aWxsIHN1Y2NlZWQuIFRoZW4gYHF1ZXVlX2ZvbGlvc19wbWRgIGlzIGNhbGxlZC4gSXQgY2hlY2tzIGAhcG1kX3ByZXNlbnQocG1kdmFsKWAuIElmIGl0J3Mgbm90IGEgbWlncmF0aW9uIGVudHJ5IChsaWtlIGEgZGV2aWNlIHByaXZhdGUgb25lKSwgaXQgcmV0dXJucyBlYXJseS4gVGhpcyBpcyB0aGUgZml4IHRvIHByZXZlbnQgdGhlIGNyYXNoLlxuXG5TbywgaW4gZXNzZW5jZSwgdGhlIHBhdGNoIGlzIGZpeGluZyBhIHBvdGVudGlhbCBjcmFzaCB3aGVuIGhhbmRsaW5nIG5vbi1wcmVzZW50IFBNRHMgdGhhdCBhcmVuJ3QgbWlncmF0aW9uIGVudHJpZXMg4oCTIGxpa2UgZGV2aWNlIHByaXZhdGUgZW50cmllcyDigJMgd2l0aGluIGBxdWV1ZV9mb2xpb3NfcG1kYC4gSXQgYWxzbyB1cGRhdGVzIGBWTV9CVUdfT05gIGFzc2VydGlvbnMgaW4gbWFkdmlzZSBwYXRocy4gVGhpcyBpcyBhIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY2hhbmdlLCBzbyBpdCBuZWVkcyBmdXp6aW5nIHRvIGVuc3VyZSBjb3JyZWN0IGhhbmRsaW5nIG9mIGRldmljZSBwcml2YXRlIG1lbW9yeSBpbiBOVU1BIHBvbGljeSBhbmQgbWFkdmlzZSBvcGVyYXRpb25zLlxuXG5Ob3csIEkgbmVlZCB0byBkZWZpbmUgdGhlIGZvY3VzIHN5bWJvbHMuIEknbGwgZm9jdXMgb24gYHF1ZXVlX2ZvbGlvc19wbWRgIGFzIHRoZSBrZXkgZnVuY3Rpb24gdG8gdGFyZ2V0LiBUaGVuLCBJIG5lZWQgdG8gaW5jbHVkZSBgbWFkdmlzZV9mcmVlX2h1Z2VfcG1kYCBhbmQgYG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZWAgYmVjYXVzZSB0aGV5IGxlYWQgaW50byBgcXVldWVfZm9saW9zX3BtZGAuXG5cbkkgc2hvdWxkIHZlcmlmeSB0aGUgY29uZmlncy4gYE5VTUFgIGlzIG5lZWRlZCBmb3IgYG1tL21lbXBvbGljeS5jYC4gYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBpcyBuZWVkZWQgZm9yIGh1Z2UgUE1EIHN1cHBvcnQgaW4gYG1tL2h1Z2VfbWVtb3J5LmNgLiBgREVWSUNFX1BSSVZBVEVgIGlzIG5lZWRlZCBmb3IsIHdlbGwsIGRldmljZSBwcml2YXRlIGVudHJpZXMuIGBaT05FX0RFVklDRWAgaXMgbmVlZGVkIGZvciBgREVWSUNFX1BSSVZBVEVgLiBgTUVNT1JZX0hPVFJFTU9WRWAgaXMgbmVlZGVkIGZvciBgWk9ORV9ERVZJQ0VgLiAgQW5kIGZpbmFsbHksIGBBRFZJU0VfU1lTQ0FMTFNgIGlzIG5lZWRlZCBmb3IgYG1tL21hZHZpc2UuY2AuXG5cbk9rYXksIEknbSByZWFkeSB0byBjYWxsIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wgbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDk5NiwiT3V0cHV0VG9rZW5zIjoyMDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMDM6MjA6MjguMjc1ODk1Njc2WiIsIlNlcSI6NTUsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ2MTAwOTc2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJOVU1BXCIsXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiLFxuICAgIFwiREVWSUNFX1BSSVZBVEVcIixcbiAgICBcIlpPTkVfREVWSUNFXCIsXG4gICAgXCJNRU1PUllfSE9UUkVNT1ZFXCIsXG4gICAgXCJBRFZJU0VfU1lTQ0FMTFNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJxdWV1ZV9mb2xpb3NfcG1kXCIsXG4gICAgXCJtYWR2aXNlX2ZyZWVfaHVnZV9wbWRcIixcbiAgICBcIm1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIGNyYXNoIGluIGBxdWV1ZV9mb2xpb3NfcG1kYCB3aGVuIGhhbmRsaW5nIG5vbi1wcmVzZW50IFBNRHMgdGhhdCBhcmUgbm90IG1pZ3JhdGlvbiBlbnRyaWVzIChzdWNoIGFzIGRldmljZSBwcml2YXRlIGVudHJpZXMpLiBJdCBhbHNvIHVwZGF0ZXMgYFZNX0JVR19PTmAgYXNzZXJ0aW9ucyBpbiBtYWR2aXNlIHBhdGhzIHRvIGNvcnJlY3RseSBoYW5kbGUgZGV2aWNlIHByaXZhdGUgZW50cmllcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBjb3JyZWN0IGhhbmRsaW5nIG9mIGRldmljZSBwcml2YXRlIG1lbW9yeSBpbiBOVU1BIHBvbGljeSBhbmQgbWFkdmlzZSBvcGVyYXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5VTUFcIixcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCIsXG4gICAgXCJERVZJQ0VfUFJJVkFURVwiLFxuICAgIFwiWk9ORV9ERVZJQ0VcIixcbiAgICBcIk1FTU9SWV9IT1RSRU1PVkVcIixcbiAgICBcIkFEVklTRV9TWVNDQUxMU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInF1ZXVlX2ZvbGlvc19wbWRcIixcbiAgICBcIm1hZHZpc2VfZnJlZV9odWdlX3BtZFwiLFxuICAgIFwibWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgY3Jhc2ggaW4gYHF1ZXVlX2ZvbGlvc19wbWRgIHdoZW4gaGFuZGxpbmcgbm9uLXByZXNlbnQgUE1EcyB0aGF0IGFyZSBub3QgbWlncmF0aW9uIGVudHJpZXMgKHN1Y2ggYXMgZGV2aWNlIHByaXZhdGUgZW50cmllcykuIEl0IGFsc28gdXBkYXRlcyBgVk1fQlVHX09OYCBhc3NlcnRpb25zIGluIG1hZHZpc2UgcGF0aHMgdG8gY29ycmVjdGx5IGhhbmRsZSBkZXZpY2UgcHJpdmF0ZSBlbnRyaWVzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGNvcnJlY3QgaGFuZGxpbmcgb2YgZGV2aWNlIHByaXZhdGUgbWVtb3J5IGluIE5VTUEgcG9saWN5IGFuZCBtYWR2aXNlIG9wZXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowspn77[1] Phase: Succeeded StartedAt: 2026-07-09 03:20:48 +0000 UTC FinishedAt: 2026-07-09 03:20:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspn77[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-09 03:20:48 +0000 UTC FinishedAt: 2026-07-09 03:20:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspn77[2] Phase: Succeeded StartedAt: 2026-07-09 03:20:48 +0000 UTC FinishedAt: 2026-07-09 08:05:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspn77[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","TRANSPARENT_HUGEPAGE","DEVICE_PRIVATE","ZONE_DEVICE","MEMORY_HOTREMOVE","ADVISE_SYSCALLS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["queue_folios_pmd","madvise_free_huge_pmd","madvise_cold_or_pageout_pte_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","TRANSPARENT_HUGEPAGE","DEVICE_PRIVATE","ZONE_DEVICE","MEMORY_HOTREMOVE","ADVISE_SYSCALLS"],"series_id":"f6caa2b2-0bf3-4ddb-89bf-af716dc8e3a9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-09 03:20:48 +0000 UTC FinishedAt: 2026-07-09 08:05:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","TRANSPARENT_HUGEPAGE","DEVICE_PRIVATE","ZONE_DEVICE","MEMORY_HOTREMOVE","ADVISE_SYSCALLS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["queue_folios_pmd","madvise_free_huge_pmd","madvise_cold_or_pageout_pte_range"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","TRANSPARENT_HUGEPAGE","DEVICE_PRIVATE","ZONE_DEVICE","MEMORY_HOTREMOVE","ADVISE_SYSCALLS"],"series_id":"f6caa2b2-0bf3-4ddb-89bf-af716dc8e3a9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowspn77[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","TRANSPARENT_HUGEPAGE","DEVICE_PRIVATE","ZONE_DEVICE","MEMORY_HOTREMOVE","ADVISE_SYSCALLS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["queue_folios_pmd","madvise_free_huge_pmd","madvise_cold_or_pageout_pte_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","TRANSPARENT_HUGEPAGE","DEVICE_PRIVATE","ZONE_DEVICE","MEMORY_HOTREMOVE","ADVISE_SYSCALLS"],"series_id":"f6caa2b2-0bf3-4ddb-89bf-af716dc8e3a9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-09 03:20:48 +0000 UTC FinishedAt: 2026-07-09 03:20:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspn77[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","TRANSPARENT_HUGEPAGE","DEVICE_PRIVATE","ZONE_DEVICE","MEMORY_HOTREMOVE","ADVISE_SYSCALLS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["queue_folios_pmd","madvise_free_huge_pmd","madvise_cold_or_pageout_pte_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","TRANSPARENT_HUGEPAGE","DEVICE_PRIVATE","ZONE_DEVICE","MEMORY_HOTREMOVE","ADVISE_SYSCALLS"],"series_id":"f6caa2b2-0bf3-4ddb-89bf-af716dc8e3a9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-09 03:20:48 +0000 UTC FinishedAt: 2026-07-09 03:20:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","TRANSPARENT_HUGEPAGE","DEVICE_PRIVATE","ZONE_DEVICE","MEMORY_HOTREMOVE","ADVISE_SYSCALLS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.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-workflowspn77/series-workflowspn77-convert-artifact-3626630029/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowspn77[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","TRANSPARENT_HUGEPAGE","DEVICE_PRIVATE","ZONE_DEVICE","MEMORY_HOTREMOVE","ADVISE_SYSCALLS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["queue_folios_pmd","madvise_free_huge_pmd","madvise_cold_or_pageout_pte_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","TRANSPARENT_HUGEPAGE","DEVICE_PRIVATE","ZONE_DEVICE","MEMORY_HOTREMOVE","ADVISE_SYSCALLS"],"series_id":"f6caa2b2-0bf3-4ddb-89bf-af716dc8e3a9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-09 03:20:58 +0000 UTC FinishedAt: 2026-07-09 04:03:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspn77[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","TRANSPARENT_HUGEPAGE","DEVICE_PRIVATE","ZONE_DEVICE","MEMORY_HOTREMOVE","ADVISE_SYSCALLS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["queue_folios_pmd","madvise_free_huge_pmd","madvise_cold_or_pageout_pte_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","TRANSPARENT_HUGEPAGE","DEVICE_PRIVATE","ZONE_DEVICE","MEMORY_HOTREMOVE","ADVISE_SYSCALLS"],"series_id":"f6caa2b2-0bf3-4ddb-89bf-af716dc8e3a9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-09 03:20:58 +0000 UTC FinishedAt: 2026-07-09 04:03:32 +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:*6374d0b6-d67a-44cb-8ba8-fa49facd483d,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-workflowspn77/series-workflowspn77-convert-artifact-3626630029/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": "4ff0f6a7-ea82-4814-ab58-423445a54c8e", "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-workflowspn77/series-workflowspn77-build-action-3370211075/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowspn77[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","TRANSPARENT_HUGEPAGE","DEVICE_PRIVATE","ZONE_DEVICE","MEMORY_HOTREMOVE","ADVISE_SYSCALLS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["queue_folios_pmd","madvise_free_huge_pmd","madvise_cold_or_pageout_pte_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","TRANSPARENT_HUGEPAGE","DEVICE_PRIVATE","ZONE_DEVICE","MEMORY_HOTREMOVE","ADVISE_SYSCALLS"],"series_id":"f6caa2b2-0bf3-4ddb-89bf-af716dc8e3a9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-09 03:20:58 +0000 UTC FinishedAt: 2026-07-09 04:01:13 +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:*6374d0b6-d67a-44cb-8ba8-fa49facd483d,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-workflowspn77/series-workflowspn77-convert-artifact-3626630029/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": "4ff0f6a7-ea82-4814-ab58-423445a54c8e", "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-workflowspn77/series-workflowspn77-build-action-3370211075/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowspn77[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","TRANSPARENT_HUGEPAGE","DEVICE_PRIVATE","ZONE_DEVICE","MEMORY_HOTREMOVE","ADVISE_SYSCALLS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["queue_folios_pmd","madvise_free_huge_pmd","madvise_cold_or_pageout_pte_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","TRANSPARENT_HUGEPAGE","DEVICE_PRIVATE","ZONE_DEVICE","MEMORY_HOTREMOVE","ADVISE_SYSCALLS"],"series_id":"f6caa2b2-0bf3-4ddb-89bf-af716dc8e3a9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-09 04:03:32 +0000 UTC FinishedAt: 2026-07-09 04:03:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspn77[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","TRANSPARENT_HUGEPAGE","DEVICE_PRIVATE","ZONE_DEVICE","MEMORY_HOTREMOVE","ADVISE_SYSCALLS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["queue_folios_pmd","madvise_free_huge_pmd","madvise_cold_or_pageout_pte_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","TRANSPARENT_HUGEPAGE","DEVICE_PRIVATE","ZONE_DEVICE","MEMORY_HOTREMOVE","ADVISE_SYSCALLS"],"series_id":"f6caa2b2-0bf3-4ddb-89bf-af716dc8e3a9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-09 04:03:32 +0000 UTC FinishedAt: 2026-07-09 04:03:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspn77[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","TRANSPARENT_HUGEPAGE","DEVICE_PRIVATE","ZONE_DEVICE","MEMORY_HOTREMOVE","ADVISE_SYSCALLS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["queue_folios_pmd","madvise_free_huge_pmd","madvise_cold_or_pageout_pte_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","TRANSPARENT_HUGEPAGE","DEVICE_PRIVATE","ZONE_DEVICE","MEMORY_HOTREMOVE","ADVISE_SYSCALLS"],"series_id":"f6caa2b2-0bf3-4ddb-89bf-af716dc8e3a9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-09 04:03:32 +0000 UTC FinishedAt: 2026-07-09 04:06:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspn77[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","TRANSPARENT_HUGEPAGE","DEVICE_PRIVATE","ZONE_DEVICE","MEMORY_HOTREMOVE","ADVISE_SYSCALLS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["queue_folios_pmd","madvise_free_huge_pmd","madvise_cold_or_pageout_pte_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","TRANSPARENT_HUGEPAGE","DEVICE_PRIVATE","ZONE_DEVICE","MEMORY_HOTREMOVE","ADVISE_SYSCALLS"],"series_id":"f6caa2b2-0bf3-4ddb-89bf-af716dc8e3a9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-09 04:03:32 +0000 UTC FinishedAt: 2026-07-09 04:06:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","TRANSPARENT_HUGEPAGE","DEVICE_PRIVATE","ZONE_DEVICE","MEMORY_HOTREMOVE","ADVISE_SYSCALLS"],"series_id":"f6caa2b2-0bf3-4ddb-89bf-af716dc8e3a9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.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-workflowspn77/series-workflowspn77-convert-artifact-716745448/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowspn77[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","TRANSPARENT_HUGEPAGE","DEVICE_PRIVATE","ZONE_DEVICE","MEMORY_HOTREMOVE","ADVISE_SYSCALLS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["queue_folios_pmd","madvise_free_huge_pmd","madvise_cold_or_pageout_pte_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","TRANSPARENT_HUGEPAGE","DEVICE_PRIVATE","ZONE_DEVICE","MEMORY_HOTREMOVE","ADVISE_SYSCALLS"],"series_id":"f6caa2b2-0bf3-4ddb-89bf-af716dc8e3a9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-09 04:06:38 +0000 UTC FinishedAt: 2026-07-09 04:08:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspn77[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","TRANSPARENT_HUGEPAGE","DEVICE_PRIVATE","ZONE_DEVICE","MEMORY_HOTREMOVE","ADVISE_SYSCALLS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["queue_folios_pmd","madvise_free_huge_pmd","madvise_cold_or_pageout_pte_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","TRANSPARENT_HUGEPAGE","DEVICE_PRIVATE","ZONE_DEVICE","MEMORY_HOTREMOVE","ADVISE_SYSCALLS"],"series_id":"f6caa2b2-0bf3-4ddb-89bf-af716dc8e3a9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-09 04:06:38 +0000 UTC FinishedAt: 2026-07-09 04:08:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*4ff0f6a7-ea82-4814-ab58-423445a54c8e,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-workflowspn77/series-workflowspn77-build-action-3370211075/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-workflowspn77[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","TRANSPARENT_HUGEPAGE","DEVICE_PRIVATE","ZONE_DEVICE","MEMORY_HOTREMOVE","ADVISE_SYSCALLS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["queue_folios_pmd","madvise_free_huge_pmd","madvise_cold_or_pageout_pte_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","TRANSPARENT_HUGEPAGE","DEVICE_PRIVATE","ZONE_DEVICE","MEMORY_HOTREMOVE","ADVISE_SYSCALLS"],"series_id":"f6caa2b2-0bf3-4ddb-89bf-af716dc8e3a9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-09 04:08:58 +0000 UTC FinishedAt: 2026-07-09 04:08:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspn77[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","TRANSPARENT_HUGEPAGE","DEVICE_PRIVATE","ZONE_DEVICE","MEMORY_HOTREMOVE","ADVISE_SYSCALLS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["queue_folios_pmd","madvise_free_huge_pmd","madvise_cold_or_pageout_pte_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","TRANSPARENT_HUGEPAGE","DEVICE_PRIVATE","ZONE_DEVICE","MEMORY_HOTREMOVE","ADVISE_SYSCALLS"],"series_id":"f6caa2b2-0bf3-4ddb-89bf-af716dc8e3a9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-09 04:08:58 +0000 UTC FinishedAt: 2026-07-09 04:08:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspn77[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","TRANSPARENT_HUGEPAGE","DEVICE_PRIVATE","ZONE_DEVICE","MEMORY_HOTREMOVE","ADVISE_SYSCALLS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["queue_folios_pmd","madvise_free_huge_pmd","madvise_cold_or_pageout_pte_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","TRANSPARENT_HUGEPAGE","DEVICE_PRIVATE","ZONE_DEVICE","MEMORY_HOTREMOVE","ADVISE_SYSCALLS"],"series_id":"f6caa2b2-0bf3-4ddb-89bf-af716dc8e3a9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-09 04:08:58 +0000 UTC FinishedAt: 2026-07-09 04:59:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspn77[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","TRANSPARENT_HUGEPAGE","DEVICE_PRIVATE","ZONE_DEVICE","MEMORY_HOTREMOVE","ADVISE_SYSCALLS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["queue_folios_pmd","madvise_free_huge_pmd","madvise_cold_or_pageout_pte_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","TRANSPARENT_HUGEPAGE","DEVICE_PRIVATE","ZONE_DEVICE","MEMORY_HOTREMOVE","ADVISE_SYSCALLS"],"series_id":"f6caa2b2-0bf3-4ddb-89bf-af716dc8e3a9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-09 04:08:58 +0000 UTC FinishedAt: 2026-07-09 04:59:54 +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:*6374d0b6-d67a-44cb-8ba8-fa49facd483d,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-workflowspn77/series-workflowspn77-convert-artifact-716745448/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": "2917a5d0-1871-4461-9c6d-059a90509be9", "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-workflowspn77/series-workflowspn77-build-action-1386570388/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowspn77[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","TRANSPARENT_HUGEPAGE","DEVICE_PRIVATE","ZONE_DEVICE","MEMORY_HOTREMOVE","ADVISE_SYSCALLS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["queue_folios_pmd","madvise_free_huge_pmd","madvise_cold_or_pageout_pte_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","TRANSPARENT_HUGEPAGE","DEVICE_PRIVATE","ZONE_DEVICE","MEMORY_HOTREMOVE","ADVISE_SYSCALLS"],"series_id":"f6caa2b2-0bf3-4ddb-89bf-af716dc8e3a9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-09 04:08:58 +0000 UTC FinishedAt: 2026-07-09 04:59:44 +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:*6374d0b6-d67a-44cb-8ba8-fa49facd483d,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-workflowspn77/series-workflowspn77-convert-artifact-716745448/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": "2917a5d0-1871-4461-9c6d-059a90509be9", "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-workflowspn77/series-workflowspn77-build-action-1386570388/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowspn77[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","TRANSPARENT_HUGEPAGE","DEVICE_PRIVATE","ZONE_DEVICE","MEMORY_HOTREMOVE","ADVISE_SYSCALLS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["queue_folios_pmd","madvise_free_huge_pmd","madvise_cold_or_pageout_pte_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","TRANSPARENT_HUGEPAGE","DEVICE_PRIVATE","ZONE_DEVICE","MEMORY_HOTREMOVE","ADVISE_SYSCALLS"],"series_id":"f6caa2b2-0bf3-4ddb-89bf-af716dc8e3a9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-09 04:59:54 +0000 UTC FinishedAt: 2026-07-09 04:59:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspn77[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","TRANSPARENT_HUGEPAGE","DEVICE_PRIVATE","ZONE_DEVICE","MEMORY_HOTREMOVE","ADVISE_SYSCALLS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["queue_folios_pmd","madvise_free_huge_pmd","madvise_cold_or_pageout_pte_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","TRANSPARENT_HUGEPAGE","DEVICE_PRIVATE","ZONE_DEVICE","MEMORY_HOTREMOVE","ADVISE_SYSCALLS"],"series_id":"f6caa2b2-0bf3-4ddb-89bf-af716dc8e3a9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-09 04:59:54 +0000 UTC FinishedAt: 2026-07-09 04:59:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspn77[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","TRANSPARENT_HUGEPAGE","DEVICE_PRIVATE","ZONE_DEVICE","MEMORY_HOTREMOVE","ADVISE_SYSCALLS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["queue_folios_pmd","madvise_free_huge_pmd","madvise_cold_or_pageout_pte_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","TRANSPARENT_HUGEPAGE","DEVICE_PRIVATE","ZONE_DEVICE","MEMORY_HOTREMOVE","ADVISE_SYSCALLS"],"series_id":"f6caa2b2-0bf3-4ddb-89bf-af716dc8e3a9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-09 04:59:54 +0000 UTC FinishedAt: 2026-07-09 05:02:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspn77[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","TRANSPARENT_HUGEPAGE","DEVICE_PRIVATE","ZONE_DEVICE","MEMORY_HOTREMOVE","ADVISE_SYSCALLS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["queue_folios_pmd","madvise_free_huge_pmd","madvise_cold_or_pageout_pte_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","TRANSPARENT_HUGEPAGE","DEVICE_PRIVATE","ZONE_DEVICE","MEMORY_HOTREMOVE","ADVISE_SYSCALLS"],"series_id":"f6caa2b2-0bf3-4ddb-89bf-af716dc8e3a9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-09 04:59:54 +0000 UTC FinishedAt: 2026-07-09 05:02:00 +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:*2917a5d0-1871-4461-9c6d-059a90509be9,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-workflowspn77/series-workflowspn77-build-action-1386570388/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-workflowspn77[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","TRANSPARENT_HUGEPAGE","DEVICE_PRIVATE","ZONE_DEVICE","MEMORY_HOTREMOVE","ADVISE_SYSCALLS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["queue_folios_pmd","madvise_free_huge_pmd","madvise_cold_or_pageout_pte_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","TRANSPARENT_HUGEPAGE","DEVICE_PRIVATE","ZONE_DEVICE","MEMORY_HOTREMOVE","ADVISE_SYSCALLS"],"series_id":"f6caa2b2-0bf3-4ddb-89bf-af716dc8e3a9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-09 05:02:09 +0000 UTC FinishedAt: 2026-07-09 08:05:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspn77[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","TRANSPARENT_HUGEPAGE","DEVICE_PRIVATE","ZONE_DEVICE","MEMORY_HOTREMOVE","ADVISE_SYSCALLS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["queue_folios_pmd","madvise_free_huge_pmd","madvise_cold_or_pageout_pte_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","TRANSPARENT_HUGEPAGE","DEVICE_PRIVATE","ZONE_DEVICE","MEMORY_HOTREMOVE","ADVISE_SYSCALLS"],"series_id":"f6caa2b2-0bf3-4ddb-89bf-af716dc8e3a9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-09 05:02:09 +0000 UTC FinishedAt: 2026-07-09 08:05:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["queue_folios_pmd","madvise_free_huge_pmd","madvise_cold_or_pageout_pte_range"],"skip_cover_check":true},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:*4ff0f6a7-ea82-4814-ab58-423445a54c8e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*2917a5d0-1871-4461-9c6d-059a90509be9,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-workflowspn77/series-workflowspn77-build-action-3370211075/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-workflowspn77/series-workflowspn77-build-action-1386570388/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowspn77[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","TRANSPARENT_HUGEPAGE","DEVICE_PRIVATE","ZONE_DEVICE","MEMORY_HOTREMOVE","ADVISE_SYSCALLS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["queue_folios_pmd","madvise_free_huge_pmd","madvise_cold_or_pageout_pte_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","TRANSPARENT_HUGEPAGE","DEVICE_PRIVATE","ZONE_DEVICE","MEMORY_HOTREMOVE","ADVISE_SYSCALLS"],"series_id":"f6caa2b2-0bf3-4ddb-89bf-af716dc8e3a9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-09 05:02:09 +0000 UTC FinishedAt: 2026-07-09 05:02:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspn77[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","TRANSPARENT_HUGEPAGE","DEVICE_PRIVATE","ZONE_DEVICE","MEMORY_HOTREMOVE","ADVISE_SYSCALLS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["queue_folios_pmd","madvise_free_huge_pmd","madvise_cold_or_pageout_pte_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","TRANSPARENT_HUGEPAGE","DEVICE_PRIVATE","ZONE_DEVICE","MEMORY_HOTREMOVE","ADVISE_SYSCALLS"],"series_id":"f6caa2b2-0bf3-4ddb-89bf-af716dc8e3a9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-09 05:02:09 +0000 UTC FinishedAt: 2026-07-09 05:02:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["queue_folios_pmd","madvise_free_huge_pmd","madvise_cold_or_pageout_pte_range"],"skip_cover_check":true},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-workflowspn77/series-workflowspn77-convert-artifact-2202111265/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowspn77[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","TRANSPARENT_HUGEPAGE","DEVICE_PRIVATE","ZONE_DEVICE","MEMORY_HOTREMOVE","ADVISE_SYSCALLS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["queue_folios_pmd","madvise_free_huge_pmd","madvise_cold_or_pageout_pte_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","TRANSPARENT_HUGEPAGE","DEVICE_PRIVATE","ZONE_DEVICE","MEMORY_HOTREMOVE","ADVISE_SYSCALLS"],"series_id":"f6caa2b2-0bf3-4ddb-89bf-af716dc8e3a9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-09 05:02:09 +0000 UTC FinishedAt: 2026-07-09 05:02:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspn77[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","TRANSPARENT_HUGEPAGE","DEVICE_PRIVATE","ZONE_DEVICE","MEMORY_HOTREMOVE","ADVISE_SYSCALLS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["queue_folios_pmd","madvise_free_huge_pmd","madvise_cold_or_pageout_pte_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","TRANSPARENT_HUGEPAGE","DEVICE_PRIVATE","ZONE_DEVICE","MEMORY_HOTREMOVE","ADVISE_SYSCALLS"],"series_id":"f6caa2b2-0bf3-4ddb-89bf-af716dc8e3a9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-09 05:02:09 +0000 UTC FinishedAt: 2026-07-09 05:02:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspn77[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","TRANSPARENT_HUGEPAGE","DEVICE_PRIVATE","ZONE_DEVICE","MEMORY_HOTREMOVE","ADVISE_SYSCALLS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["queue_folios_pmd","madvise_free_huge_pmd","madvise_cold_or_pageout_pte_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","TRANSPARENT_HUGEPAGE","DEVICE_PRIVATE","ZONE_DEVICE","MEMORY_HOTREMOVE","ADVISE_SYSCALLS"],"series_id":"f6caa2b2-0bf3-4ddb-89bf-af716dc8e3a9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-09 05:02:09 +0000 UTC FinishedAt: 2026-07-09 05:02:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspn77[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","TRANSPARENT_HUGEPAGE","DEVICE_PRIVATE","ZONE_DEVICE","MEMORY_HOTREMOVE","ADVISE_SYSCALLS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["queue_folios_pmd","madvise_free_huge_pmd","madvise_cold_or_pageout_pte_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","TRANSPARENT_HUGEPAGE","DEVICE_PRIVATE","ZONE_DEVICE","MEMORY_HOTREMOVE","ADVISE_SYSCALLS"],"series_id":"f6caa2b2-0bf3-4ddb-89bf-af716dc8e3a9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-09 05:02:19 +0000 UTC FinishedAt: 2026-07-09 08:05:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspn77[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","TRANSPARENT_HUGEPAGE","DEVICE_PRIVATE","ZONE_DEVICE","MEMORY_HOTREMOVE","ADVISE_SYSCALLS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["queue_folios_pmd","madvise_free_huge_pmd","madvise_cold_or_pageout_pte_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","TRANSPARENT_HUGEPAGE","DEVICE_PRIVATE","ZONE_DEVICE","MEMORY_HOTREMOVE","ADVISE_SYSCALLS"],"series_id":"f6caa2b2-0bf3-4ddb-89bf-af716dc8e3a9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-09 05:02:19 +0000 UTC FinishedAt: 2026-07-09 08:05:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*4ff0f6a7-ea82-4814-ab58-423445a54c8e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*2917a5d0-1871-4461-9c6d-059a90509be9,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-workflowspn77/series-workflowspn77-build-action-3370211075/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-workflowspn77/series-workflowspn77-build-action-1386570388/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-workflowspn77/series-workflowspn77-convert-artifact-2202111265/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,}